Changeset 3451333
- Timestamp:
- 02/01/2026 11:19:29 AM (8 weeks ago)
- Location:
- commentswp
- Files:
-
- 222 added
- 48 edited
-
tags/1.3.0 (added)
-
tags/1.3.0/assets (added)
-
tags/1.3.0/assets/commentswp.pot (added)
-
tags/1.3.0/assets/css (added)
-
tags/1.3.0/assets/css/commentswp-admin.css (added)
-
tags/1.3.0/assets/css/commentswp-admin.min.css (added)
-
tags/1.3.0/assets/css/commentswp-dashboard.css (added)
-
tags/1.3.0/assets/css/commentswp-dashboard.min.css (added)
-
tags/1.3.0/assets/css/commentswp-profiles.css (added)
-
tags/1.3.0/assets/css/commentswp-profiles.min.css (added)
-
tags/1.3.0/assets/css/commentswp-settings.css (added)
-
tags/1.3.0/assets/css/commentswp-settings.min.css (added)
-
tags/1.3.0/assets/images (added)
-
tags/1.3.0/assets/images/logo.svg (added)
-
tags/1.3.0/assets/js (added)
-
tags/1.3.0/assets/js/commentswp-admin.js (added)
-
tags/1.3.0/assets/js/commentswp-admin.min.js (added)
-
tags/1.3.0/assets/libs (added)
-
tags/1.3.0/assets/libs/alpinejs.min.js (added)
-
tags/1.3.0/assets/libs/pure-grid.min.css (added)
-
tags/1.3.0/commentswp.php (added)
-
tags/1.3.0/readme.txt (added)
-
tags/1.3.0/src (added)
-
tags/1.3.0/src/Admin (added)
-
tags/1.3.0/src/Admin/Admin.php (added)
-
tags/1.3.0/src/Admin/AdminBar.php (added)
-
tags/1.3.0/src/Admin/Pages (added)
-
tags/1.3.0/src/Admin/Pages/AllComments.php (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Cards (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Cards/ApprovedNumberCard.php (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Cards/AverageTimeToFirstCommentCard.php (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Cards/FastestTimeToFirstComment.php (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Cards/Feature (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Cards/Feature/CardMenuItem.php (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Cards/Feature/HasMenu.php (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Cards/LoggedInOutNumberCard.php (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Cards/PendingNumberCard.php (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Cards/PingTrackbacksNumberCard.php (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Cards/PostsCommentsNumberCard.php (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Cards/SpamNumberCard.php (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Cards/SuggestFeaturePlaceholder.php (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Cards/Templates (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Cards/Templates/Card.php (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Cards/Templates/CardSmall.php (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Cards/Templates/CardSmallDuo.php (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Cards/Templates/CardSmallIconTotal.php (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Cards/Templates/CardTable.php (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Cards/TopLevelRepliesNumberCard.php (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Cards/TrashNumberCard.php (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/DashboardPage.php (added)
-
tags/1.3.0/src/Admin/Pages/Dashboard/Filters.php (added)
-
tags/1.3.0/src/Admin/Pages/Profiles (added)
-
tags/1.3.0/src/Admin/Pages/Profiles/ProfilesPage.php (added)
-
tags/1.3.0/src/Admin/Pages/Profiles/Table.php (added)
-
tags/1.3.0/src/Admin/Pages/Profiles/TableItem.php (added)
-
tags/1.3.0/src/Admin/Pages/SomePage.php (added)
-
tags/1.3.0/src/Admin/ScreenOptions.php (added)
-
tags/1.3.0/src/Admin/WPorgReview.php (added)
-
tags/1.3.0/src/CacheBuster.php (added)
-
tags/1.3.0/src/Container.php (added)
-
tags/1.3.0/src/Helpers (added)
-
tags/1.3.0/src/Helpers/Arr.php (added)
-
tags/1.3.0/src/Helpers/Assets.php (added)
-
tags/1.3.0/src/Helpers/Calculations.php (added)
-
tags/1.3.0/src/Helpers/HumanDate.php (added)
-
tags/1.3.0/src/Helpers/Transient.php (added)
-
tags/1.3.0/src/Helpers/URL.php (added)
-
tags/1.3.0/src/Injector.php (added)
-
tags/1.3.0/src/Loader.php (added)
-
tags/1.3.0/src/Plugin.php (added)
-
tags/1.3.0/src/Tasks (added)
-
tags/1.3.0/src/Tasks/Meta.php (added)
-
tags/1.3.0/src/Tasks/Task.php (added)
-
tags/1.3.0/src/Tasks/Tasks.php (added)
-
tags/1.3.0/src/Vendor (added)
-
tags/1.3.0/src/Vendor/Auryn (added)
-
tags/1.3.0/src/Vendor/Auryn/CachingReflector.php (added)
-
tags/1.3.0/src/Vendor/Auryn/ConfigException.php (added)
-
tags/1.3.0/src/Vendor/Auryn/Executable.php (added)
-
tags/1.3.0/src/Vendor/Auryn/InjectionException.php (added)
-
tags/1.3.0/src/Vendor/Auryn/Injector.php (added)
-
tags/1.3.0/src/Vendor/Auryn/InjectorException.php (added)
-
tags/1.3.0/src/Vendor/Auryn/ReflectionCache.php (added)
-
tags/1.3.0/src/Vendor/Auryn/ReflectionCacheApc.php (added)
-
tags/1.3.0/src/Vendor/Auryn/ReflectionCacheArray.php (added)
-
tags/1.3.0/src/Vendor/Auryn/Reflector.php (added)
-
tags/1.3.0/src/Vendor/Auryn/StandardReflector.php (added)
-
tags/1.3.0/uninstall.php (added)
-
tags/1.3.0/vendor (added)
-
tags/1.3.0/vendor/autoload.php (added)
-
tags/1.3.0/vendor/composer (added)
-
tags/1.3.0/vendor/composer/ClassLoader.php (added)
-
tags/1.3.0/vendor/composer/InstalledVersions.php (added)
-
tags/1.3.0/vendor/composer/LICENSE (added)
-
tags/1.3.0/vendor/composer/autoload_classmap.php (added)
-
tags/1.3.0/vendor/composer/autoload_namespaces.php (added)
-
tags/1.3.0/vendor/composer/autoload_psr4.php (added)
-
tags/1.3.0/vendor/composer/autoload_real.php (added)
-
tags/1.3.0/vendor/composer/autoload_static.php (added)
-
tags/1.3.0/vendor/composer/installed.php (added)
-
tags/1.3.0/vendor/composer/platform_check.php (added)
-
tags/1.3.0/vendor/woocommerce (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/action-scheduler.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/changelog.txt (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/ActionScheduler_ActionClaim.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/ActionScheduler_ActionFactory.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/ActionScheduler_AdminView.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/ActionScheduler_AsyncRequest_QueueRunner.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/ActionScheduler_Compatibility.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/ActionScheduler_DataController.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/ActionScheduler_DateTime.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/ActionScheduler_Exception.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/ActionScheduler_FatalErrorMonitor.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/ActionScheduler_InvalidActionException.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/ActionScheduler_ListTable.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/ActionScheduler_LogEntry.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/ActionScheduler_NullLogEntry.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/ActionScheduler_OptionLock.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/ActionScheduler_QueueCleaner.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/ActionScheduler_QueueRunner.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/ActionScheduler_RecurringActionScheduler.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/ActionScheduler_SystemInformation.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/ActionScheduler_Versions.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/ActionScheduler_WPCommentCleaner.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/ActionScheduler_wcSystemStatus.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/WP_CLI (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Cancel_Command.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Create_Command.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Delete_Command.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Generate_Command.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Get_Command.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/List_Command.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Next_Command.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Run_Command.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_Clean_Command.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_QueueRunner.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_Scheduler_command.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action_Command.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/WP_CLI/Migration_Command.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/WP_CLI/ProgressBar.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/WP_CLI/System_Command.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/abstracts (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_ListTable.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_QueueRunner.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_RecurringSchedule.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_Schedule.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_Schema.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Lock.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Logger.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Store.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_TimezoneHelper.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_WPCLI_Command.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/actions (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_Action.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_CanceledAction.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_FinishedAction.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/actions/ActionScheduler_NullAction.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/data-stores (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_DBLogger.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_DBStore.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_HybridStore.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpCommentLogger.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_PostStatusRegistrar.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_PostTypeRegistrar.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_TaxonomyRegistrar.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/migration (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/migration/ActionMigrator.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/migration/ActionScheduler_DBStoreMigrator.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/migration/BatchFetcher.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/migration/Config.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/migration/Controller.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/migration/DryRun_ActionMigrator.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/migration/DryRun_LogMigrator.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/migration/LogMigrator.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/migration/Runner.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/migration/Scheduler.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/schedules (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_CanceledSchedule.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_CronSchedule.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_IntervalSchedule.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_NullSchedule.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_Schedule.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/schedules/ActionScheduler_SimpleSchedule.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/schema (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/schema/ActionScheduler_LoggerSchema.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/classes/schema/ActionScheduler_StoreSchema.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/deprecated (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/deprecated/ActionScheduler_Abstract_QueueRunner_Deprecated.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/deprecated/ActionScheduler_AdminView_Deprecated.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/deprecated/ActionScheduler_Schedule_Deprecated.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/deprecated/ActionScheduler_Store_Deprecated.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/deprecated/functions.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/functions.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/lib (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/lib/WP_Async_Request.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/lib/cron-expression (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_AbstractField.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_DayOfMonthField.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_DayOfWeekField.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_FieldFactory.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_FieldInterface.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_HoursField.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_MinutesField.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_MonthField.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/lib/cron-expression/CronExpression_YearField.php (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/lib/cron-expression/LICENSE (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/license.txt (added)
-
tags/1.3.0/vendor/woocommerce/action-scheduler/readme.txt (added)
-
trunk/assets/commentswp.pot (modified) (16 diffs)
-
trunk/assets/css/commentswp-admin.css (modified) (3 diffs)
-
trunk/assets/css/commentswp-admin.min.css (modified) (1 diff)
-
trunk/assets/css/commentswp-dashboard.css (modified) (3 diffs)
-
trunk/assets/css/commentswp-dashboard.min.css (modified) (1 diff)
-
trunk/assets/css/commentswp-profiles.css (modified) (1 diff)
-
trunk/assets/css/commentswp-profiles.min.css (modified) (1 diff)
-
trunk/assets/css/commentswp-settings.css (added)
-
trunk/assets/css/commentswp-settings.min.css (added)
-
trunk/assets/libs/alpinejs.min.js (modified) (1 diff)
-
trunk/commentswp.php (modified) (4 diffs)
-
trunk/readme.txt (modified) (4 diffs)
-
trunk/src/Admin/Admin.php (modified) (5 diffs)
-
trunk/src/Admin/Pages/Dashboard/Cards/AverageTimeToFirstCommentCard.php (modified) (2 diffs)
-
trunk/src/Admin/Pages/Dashboard/Cards/PingTrackbacksNumberCard.php (modified) (2 diffs)
-
trunk/src/Admin/Pages/Dashboard/Cards/PostsCommentsNumberCard.php (modified) (2 diffs)
-
trunk/src/Admin/Pages/Dashboard/Cards/SuggestFeaturePlaceholder.php (modified) (4 diffs)
-
trunk/src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php (modified) (2 diffs)
-
trunk/src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php (modified) (15 diffs)
-
trunk/src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php (modified) (1 diff)
-
trunk/src/Admin/Pages/Dashboard/DashboardPage.php (modified) (6 diffs)
-
trunk/src/Admin/Pages/Dashboard/Filters.php (modified) (9 diffs)
-
trunk/src/Admin/Pages/Profiles/ProfilesPage.php (modified) (11 diffs)
-
trunk/src/Admin/Pages/Profiles/Table.php (modified) (3 diffs)
-
trunk/src/Admin/Pages/Profiles/TableItem.php (modified) (2 diffs)
-
trunk/src/Admin/WPorgReview.php (added)
-
trunk/src/Helpers/Arr.php (modified) (1 diff)
-
trunk/src/Helpers/URL.php (modified) (1 diff)
-
trunk/src/Loader.php (modified) (3 diffs)
-
trunk/src/Plugin.php (modified) (1 diff)
-
trunk/src/Tasks/Tasks.php (modified) (10 diffs)
-
trunk/vendor/autoload.php (modified) (1 diff)
-
trunk/vendor/composer/InstalledVersions.php (modified) (3 diffs)
-
trunk/vendor/composer/autoload_static.php (modified) (2 diffs)
-
trunk/vendor/composer/installed.php (modified) (4 diffs)
-
trunk/vendor/composer/platform_check.php (modified) (2 diffs)
-
trunk/vendor/woocommerce/action-scheduler/action-scheduler.php (modified) (6 diffs)
-
trunk/vendor/woocommerce/action-scheduler/changelog.txt (modified) (1 diff)
-
trunk/vendor/woocommerce/action-scheduler/classes/ActionScheduler_DataController.php (modified) (1 diff)
-
trunk/vendor/woocommerce/action-scheduler/classes/ActionScheduler_RecurringActionScheduler.php (added)
-
trunk/vendor/woocommerce/action-scheduler/classes/ActionScheduler_wcSystemStatus.php (modified) (1 diff)
-
trunk/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Create_Command.php (modified) (1 diff)
-
trunk/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Get_Command.php (modified) (1 diff)
-
trunk/vendor/woocommerce/action-scheduler/classes/WP_CLI/System_Command.php (modified) (1 diff)
-
trunk/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler.php (modified) (3 diffs)
-
trunk/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_QueueRunner.php (modified) (1 diff)
-
trunk/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_DBStore.php (modified) (7 diffs)
-
trunk/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_HybridStore.php (modified) (1 diff)
-
trunk/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore.php (modified) (3 diffs)
-
trunk/vendor/woocommerce/action-scheduler/classes/schema/ActionScheduler_StoreSchema.php (modified) (2 diffs)
-
trunk/vendor/woocommerce/action-scheduler/functions.php (modified) (4 diffs)
-
trunk/vendor/woocommerce/action-scheduler/readme.txt (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
commentswp/trunk/assets/commentswp.pot
r3237139 r3451333 1 # Copyright (C) 202 5CommentsWP1 # Copyright (C) 2026 CommentsWP 2 2 # This file is distributed under the same license as the CommentsWP package. 3 3 msgid "" … … 8 8 "Content-Transfer-Encoding: 8bit\n" 9 9 "Language-Team: Slava Abakumov <slava@commentswp.com>\n" 10 "POT-Creation-Date: 202 5-02-08 23:09+0000\n"10 "POT-Creation-Date: 2026-02-01 11:08+0000\n" 11 11 "X-Poedit-Basepath: ..\n" 12 12 "X-Poedit-KeywordsList: __;_e;_ex:1,2c;_n:1,2;_n_noop:1,2;_nx:1,2,4c;_nx_noop:1,2,3c;_x:1,2c;esc_attr__;esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c\n" … … 16 16 "Plural-Forms: nplurals=2; plural=(n != 1);\n" 17 17 18 #: src/Admin/Admin.php:13 3, src/Admin/AdminBar.php:44, src/Admin/Pages/Dashboard/DashboardPage.php:78, src/Admin/Pages/Dashboard/DashboardPage.php:9418 #: src/Admin/Admin.php:138, src/Admin/AdminBar.php:44, src/Admin/Pages/Dashboard/DashboardPage.php:96, src/Admin/Pages/Dashboard/DashboardPage.php:112 19 19 msgid "Dashboard" 20 20 msgstr "" 21 21 22 #: src/Admin/Admin.php:171 22 #. translators: %1$s - star rating, %2$s - WordPress.org. All are links. 23 #: src/Admin/Admin.php:162 24 msgid "Please rate CommentsWP %1$s on %2$s to help us spread the word" 25 msgstr "" 26 27 #: src/Admin/Admin.php:218 23 28 msgid "Go to Dashboard" 24 29 msgstr "" … … 28 33 msgstr "" 29 34 30 #: src/Admin/AdminBar.php:57, src/Admin/Pages/Profiles/ProfilesPage.php:4 1, src/Admin/Pages/Profiles/ProfilesPage.php:5635 #: src/Admin/AdminBar.php:57, src/Admin/Pages/Profiles/ProfilesPage.php:42, src/Admin/Pages/Profiles/ProfilesPage.php:57 31 36 msgid "Profiles" 32 37 msgstr "" … … 36 41 msgstr "" 37 42 38 #: src/Admin/ScreenOptions.php:155, src/Admin/Pages/Dashboard/DashboardPage.php: 9343 #: src/Admin/ScreenOptions.php:155, src/Admin/Pages/Dashboard/DashboardPage.php:111 39 44 msgid "Comments Dashboard" 40 45 msgstr "" … … 42 47 #: src/Admin/ScreenOptions.php:177, src/Admin/Pages/Profiles/Table.php:62 43 48 msgid "Apply" 49 msgstr "" 50 51 #: src/Admin/WPorgReview.php:100 52 msgid "Hey, it looks like you are using <strong>CommentsWP</strong> for quite a while, which is great! Can you please give it a 5-star rating on WordPress.org to help us spread the word and stay motivated? Thanks!" 53 msgstr "" 54 55 #: src/Admin/WPorgReview.php:108 56 msgid "Ok, you deserve it" 57 msgstr "" 58 59 #: src/Admin/WPorgReview.php:109 60 msgid "Dismiss for one month" 61 msgstr "" 62 63 #: src/Admin/WPorgReview.php:109 64 msgid "Nope, maybe later" 65 msgstr "" 66 67 #: src/Admin/WPorgReview.php:110 68 msgid "I already did" 44 69 msgstr "" 45 70 … … 53 78 #. translators: Time difference between two dates, in months. %d - number of months. 54 79 #. translators: %d - number of months with comments in this year. 55 #: src/Helpers/HumanDate.php:200, src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php: 24880 #: src/Helpers/HumanDate.php:200, src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:308 56 81 msgid "%d month" 57 82 msgid_plural "%d months" … … 61 86 #. translators: Time difference between two dates, in weeks. %d - number of weeks. 62 87 #. translators: %d - number of weeks with comments in this year. 63 #: src/Helpers/HumanDate.php:205, src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php: 23688 #: src/Helpers/HumanDate.php:205, src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:301 64 89 msgid "%d week" 65 90 msgid_plural "%d weeks" … … 68 93 69 94 #. translators: Time difference between two dates, in days. %d - number of days. 70 #: src/Helpers/HumanDate.php:210 95 #. translators: %d - number of days with comments in this year. 96 #: src/Helpers/HumanDate.php:210, src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:294 71 97 msgid "%d day" 72 98 msgid_plural "%d days" … … 95 121 msgstr[1] "" 96 122 97 #: src/Admin/Pages/Dashboard/DashboardPage.php:2 47123 #: src/Admin/Pages/Dashboard/DashboardPage.php:270 98 124 msgid "Filters" 99 125 msgstr "" 100 126 101 #: src/Admin/Pages/Dashboard/DashboardPage.php:2 50127 #: src/Admin/Pages/Dashboard/DashboardPage.php:274 102 128 msgid "Comment Type" 103 129 msgstr "" 104 130 105 #: src/Admin/Pages/Dashboard/DashboardPage.php:264 131 #: src/Admin/Pages/Dashboard/DashboardPage.php:284 132 msgid "No comment types found" 133 msgstr "" 134 135 #: src/Admin/Pages/Dashboard/DashboardPage.php:301 106 136 msgid "Applied to all cards" 107 137 msgstr "" 108 138 109 #: src/Admin/Pages/Dashboard/DashboardPage.php: 279139 #: src/Admin/Pages/Dashboard/DashboardPage.php:316 110 140 msgid "Applied to tables only" 111 141 msgstr "" 112 142 143 #: src/Admin/Pages/Dashboard/Filters.php:346 144 msgid "Last 24 hours" 145 msgstr "" 146 113 147 #: src/Admin/Pages/Dashboard/Filters.php:347 114 msgid "Last 24 hours"148 msgid "Last 7 Days" 115 149 msgstr "" 116 150 117 151 #: src/Admin/Pages/Dashboard/Filters.php:348 118 msgid "Last 7Days"152 msgid "Last 14 Days" 119 153 msgstr "" 120 154 121 155 #: src/Admin/Pages/Dashboard/Filters.php:349 122 msgid "Last 14Days"156 msgid "Last 30 Days" 123 157 msgstr "" 124 158 125 159 #: src/Admin/Pages/Dashboard/Filters.php:350 126 msgid "Last 30 Days"160 msgid "Last 90 Days" 127 161 msgstr "" 128 162 129 163 #: src/Admin/Pages/Dashboard/Filters.php:351 130 msgid "Last 90 Days"131 msgstr ""132 133 #: src/Admin/Pages/Dashboard/Filters.php:352134 164 msgid "All Time" 135 165 msgstr "" 136 166 137 #: src/Admin/Pages/Dashboard/Filters.php:37 9167 #: src/Admin/Pages/Dashboard/Filters.php:376 138 168 msgid "5 items" 139 169 msgstr "" 140 170 141 #: src/Admin/Pages/Dashboard/Filters.php:3 80171 #: src/Admin/Pages/Dashboard/Filters.php:377 142 172 msgid "10 items" 143 173 msgstr "" 144 174 145 #: src/Admin/Pages/Dashboard/Filters.php:3 81175 #: src/Admin/Pages/Dashboard/Filters.php:378 146 176 msgid "15 items" 147 177 msgstr "" 148 178 149 #: src/Admin/Pages/Dashboard/Filters.php: 400, src/Admin/Pages/Dashboard/Filters.php:438179 #: src/Admin/Pages/Dashboard/Filters.php:395, src/Admin/Pages/Dashboard/Filters.php:432 150 180 msgid "Comments" 151 181 msgstr "" 152 182 153 #: src/Admin/Pages/Dashboard/Filters.php: 401, src/Admin/Pages/Dashboard/Cards/PingTrackbacksNumberCard.php:33183 #: src/Admin/Pages/Dashboard/Filters.php:396, src/Admin/Pages/Dashboard/Cards/PingTrackbacksNumberCard.php:33 154 184 msgid "Pingbacks" 155 185 msgstr "" 156 186 157 #: src/Admin/Pages/Dashboard/Filters.php: 402, src/Admin/Pages/Dashboard/Cards/PingTrackbacksNumberCard.php:34187 #: src/Admin/Pages/Dashboard/Filters.php:397, src/Admin/Pages/Dashboard/Cards/PingTrackbacksNumberCard.php:34 158 188 msgid "Trackbacks" 159 189 msgstr "" 160 190 161 #: src/Admin/Pages/Profiles/ProfilesPage.php:5 5191 #: src/Admin/Pages/Profiles/ProfilesPage.php:56 162 192 msgid "Comments Profiles" 163 193 msgstr "" 164 194 165 195 #. translators: %d: number of deleted comments. 166 #: src/Admin/Pages/Profiles/ProfilesPage.php:20 5196 #: src/Admin/Pages/Profiles/ProfilesPage.php:208 167 197 msgid "%d comment has been permanently deleted." 168 198 msgid_plural "%d comments have been permanently deleted." … … 218 248 msgstr "" 219 249 220 #: src/Admin/Pages/Profiles/Table.php:31 6250 #: src/Admin/Pages/Profiles/Table.php:318 221 251 msgid "View All Comments" 222 252 msgstr "" 223 253 224 #: src/Admin/Pages/Profiles/Table.php:32 4254 #: src/Admin/Pages/Profiles/Table.php:326 225 255 msgid "Also known as:" 226 256 msgstr "" 227 257 228 #: src/Admin/Pages/Profiles/Table.php:38 1, src/Admin/Pages/Profiles/Table.php:403258 #: src/Admin/Pages/Profiles/Table.php:383, src/Admin/Pages/Profiles/Table.php:405 229 259 msgid "View" 230 260 msgstr "" 231 261 232 #: src/Admin/Pages/Profiles/Table.php:38 3, src/Admin/Pages/Profiles/Table.php:405262 #: src/Admin/Pages/Profiles/Table.php:385, src/Admin/Pages/Profiles/Table.php:407 233 263 msgid "Edit" 234 264 msgstr "" 235 265 236 #: src/Admin/Pages/Profiles/Table.php:41 6266 #: src/Admin/Pages/Profiles/Table.php:418 237 267 msgid "No profiles found for commenters with approved comments." 238 268 msgstr "" … … 247 277 msgstr "" 248 278 249 #: src/Admin/Pages/Dashboard/Cards/AverageTimeToFirstCommentCard.php:59, src/Admin/Pages/Dashboard/Cards/FastestTimeToFirstComment.php:58, src/Admin/Pages/Dashboard/Cards/LoggedInOutNumberCard.php:42, src/Admin/Pages/Dashboard/Cards/PingTrackbacksNumberCard.php:42, src/Admin/Pages/Dashboard/Cards/PostsCommentsNumberCard.php:54, src/Admin/Pages/Dashboard/Cards/TopLevelRepliesNumberCard.php:42, src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:51, src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php: 57, src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php:50, src/Admin/Pages/Dashboard/Cards/Templates/CardSmallIconTotal.php:46279 #: src/Admin/Pages/Dashboard/Cards/AverageTimeToFirstCommentCard.php:59, src/Admin/Pages/Dashboard/Cards/FastestTimeToFirstComment.php:58, src/Admin/Pages/Dashboard/Cards/LoggedInOutNumberCard.php:42, src/Admin/Pages/Dashboard/Cards/PingTrackbacksNumberCard.php:42, src/Admin/Pages/Dashboard/Cards/PostsCommentsNumberCard.php:54, src/Admin/Pages/Dashboard/Cards/TopLevelRepliesNumberCard.php:42, src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:51, src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:62, src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php:50, src/Admin/Pages/Dashboard/Cards/Templates/CardSmallIconTotal.php:46 250 280 msgid "Learn More" 251 281 msgstr "" 252 282 253 #: src/Admin/Pages/Dashboard/Cards/AverageTimeToFirstCommentCard.php:9 1, src/Admin/Pages/Dashboard/Cards/FastestTimeToFirstComment.php:91283 #: src/Admin/Pages/Dashboard/Cards/AverageTimeToFirstCommentCard.php:93, src/Admin/Pages/Dashboard/Cards/FastestTimeToFirstComment.php:91 254 284 msgid "N/A" 255 285 msgstr "" … … 280 310 msgstr "" 281 311 282 #: src/Admin/Pages/Dashboard/Cards/PingTrackbacksNumberCard.php:9 6312 #: src/Admin/Pages/Dashboard/Cards/PingTrackbacksNumberCard.php:97 283 313 msgid "See Pingbacks" 284 314 msgstr "" 285 315 286 #: src/Admin/Pages/Dashboard/Cards/PingTrackbacksNumberCard.php:14 1316 #: src/Admin/Pages/Dashboard/Cards/PingTrackbacksNumberCard.php:142 287 317 msgid "See Trackbacks" 288 318 msgstr "" … … 306 336 msgstr "" 307 337 308 #: src/Admin/Pages/Dashboard/Cards/SuggestFeaturePlaceholder.php: 28, src/Admin/Pages/Dashboard/Cards/SuggestFeaturePlaceholder.php:61338 #: src/Admin/Pages/Dashboard/Cards/SuggestFeaturePlaceholder.php:30, src/Admin/Pages/Dashboard/Cards/SuggestFeaturePlaceholder.php:67 309 339 msgid "Suggest a Feature" 310 340 msgstr "" 311 341 312 #: src/Admin/Pages/Dashboard/Cards/SuggestFeaturePlaceholder.php: 59342 #: src/Admin/Pages/Dashboard/Cards/SuggestFeaturePlaceholder.php:63 313 343 msgid "Do you have an idea or suggestion for CommentsWP? If you have thoughts on features or improvements - please reach out!" 314 344 msgstr "" 315 345 316 #: src/Admin/Pages/Dashboard/Cards/SuggestFeaturePlaceholder.php:6 0346 #: src/Admin/Pages/Dashboard/Cards/SuggestFeaturePlaceholder.php:64 317 347 msgid "Any feedback and insights from actual users is appreciated." 318 348 msgstr "" … … 334 364 msgstr "" 335 365 336 #: src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:17 4366 #: src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:175 337 367 msgid "Unique Value" 338 368 msgstr "" 339 369 340 370 #. translators: %s - comma-separated list of other names. 341 #: src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:20 4371 #: src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:207 342 372 msgid "Last 10 items: %s" 343 373 msgstr "" 344 374 345 #: src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:21 4375 #: src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:217 346 376 msgid "Filter" 347 377 msgstr "" 348 378 349 #: src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:1 88, src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:206, src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php:175379 #: src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:191, src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:264, src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php:177 350 380 msgid "No data to display." 351 381 msgstr "" 352 382 353 #: src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:24 3383 #: src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:246 354 384 msgid "IP to Emails" 355 385 msgstr "" 356 386 357 #: src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:24 6387 #: src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:249 358 388 msgid "Email to IPs" 359 389 msgstr "" 360 390 361 #: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:5 0391 #: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:55 362 392 msgid "Total by Time Period" 363 393 msgstr "" 364 394 365 #: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php: 187395 #: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:243 366 396 msgid "Year" 367 397 msgstr "" 368 398 369 399 #. translators: %1$d - week number, %1$s - week date range. 370 #: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php: 290400 #: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:345 371 401 msgid "Week %1$d: %2$s" 372 402 msgstr "" 373 403 374 #: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:3 31404 #: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:397 375 405 msgid "Group by Year" 376 406 msgstr "" 377 407 378 #: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php: 334408 #: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:400 379 409 msgid "Group by Month" 380 410 msgstr "" 381 411 382 #: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php: 337412 #: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:403 383 413 msgid "Group by Week" 414 msgstr "" 415 416 #: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:406 417 msgid "Group by Day" 418 msgstr "" 419 420 #: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:416 421 msgid "Newest First" 422 msgstr "" 423 424 #: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:419 425 msgid "Oldest First" 384 426 msgstr "" 385 427 … … 389 431 390 432 #. translators: %s - comma-separated list of other names. 391 #: src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php:19 1433 #: src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php:193 392 434 msgid "Known as: <code>%s</code>" 393 435 msgstr "" 394 436 395 #: src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php:20 5437 #: src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php:207 396 438 msgid "Filter by user" 397 439 msgstr "" 398 440 399 #: src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php:23 3441 #: src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php:235 400 442 msgid "Group by Email" 401 443 msgstr "" 402 444 403 #: src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php:23 6445 #: src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php:238 404 446 msgid "Group by IP" 405 447 msgstr "" -
commentswp/trunk/assets/css/commentswp-admin.css
r3237139 r3451333 1 #wpcontent { 2 padding-left: 0; 3 } 4 1 5 #commentswp { 2 6 box-sizing: border-box; 7 margin: 0; 8 padding: 0; 3 9 } 4 10 #commentswp [x-cloak] { 5 11 display: none !important; 6 12 } 13 #commentswp .notice { 14 margin: 20px; 15 } 7 16 #commentswp h1 { 8 17 color: #1d2327; 18 background-color: #fff; 9 19 margin-bottom: 20px; 10 padding-bottom: 0; 11 position: relative; 20 padding: 20px; 21 line-height: 1; 22 display: flex; 23 align-items: center; 24 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08); 12 25 } 13 26 #commentswp h1 .title-logo { 14 27 width: 36px; 15 position: absolute;16 top: 7px;17 28 } 18 29 #commentswp h1 .title-main { 19 padding-left: 45px;30 padding-left: 10px; 20 31 } 21 32 #commentswp h1 .title-main a { … … 25 36 #commentswp h1 .title-separator { 26 37 color: #D0D1D7; 27 padding: 0 5px;38 padding: 0 7px 0 5px; 28 39 } 29 40 #commentswp h1 .title-secondary { … … 50 61 padding: 3px 5px; 51 62 } 63 #commentswp .commentswp-page { 64 padding: 0 20px; 65 } -
commentswp/trunk/assets/css/commentswp-admin.min.css
r3237139 r3451333 1 # commentswp{box-sizing:border-box}#commentswp [x-cloak]{display:none !important}#commentswp h1{color:#1d2327;margin-bottom:20px;padding-bottom:0;position:relative}#commentswp h1 .title-logo{width:36px;position:absolute;top:7px}#commentswp h1 .title-main{padding-left:45px}#commentswp h1 .title-main a{text-decoration:none;font-weight:normal}#commentswp h1 .title-separator{color:#d0d1d7;padding:0 5px}#commentswp h1 .title-secondary{font-weight:normal}#commentswp abbr[desc]{position:relative;text-decoration:underline dotted;text-underline-offset:2px}#commentswp abbr[desc]:hover::after,#commentswp abbr[desc]:focus::after{content:attr(desc);position:absolute;left:0;bottom:-30px;width:auto;white-space:nowrap;background-color:#1e1e1e;color:#fff;border-radius:3px;box-shadow:1px 1px 5px 0 rgba(0,0,0,.4);font-size:14px;padding:3px 5px}1 #wpcontent{padding-left:0}#commentswp{box-sizing:border-box;margin:0;padding:0}#commentswp [x-cloak]{display:none !important}#commentswp .notice{margin:20px}#commentswp h1{color:#1d2327;background-color:#fff;margin-bottom:20px;padding:20px;line-height:1;display:flex;align-items:center;box-shadow:0 2px 4px rgba(0,0,0,.08)}#commentswp h1 .title-logo{width:36px}#commentswp h1 .title-main{padding-left:10px}#commentswp h1 .title-main a{text-decoration:none;font-weight:normal}#commentswp h1 .title-separator{color:#d0d1d7;padding:0 7px 0 5px}#commentswp h1 .title-secondary{font-weight:normal}#commentswp abbr[desc]{position:relative;text-decoration:underline dotted;text-underline-offset:2px}#commentswp abbr[desc]:hover::after,#commentswp abbr[desc]:focus::after{content:attr(desc);position:absolute;left:0;bottom:-30px;width:auto;white-space:nowrap;background-color:#1e1e1e;color:#fff;border-radius:3px;box-shadow:1px 1px 5px 0 rgba(0,0,0,.4);font-size:14px;padding:3px 5px}#commentswp .commentswp-page{padding:0 20px} -
commentswp/trunk/assets/css/commentswp-dashboard.css
r3237139 r3451333 3 3 } 4 4 #commentswp-dashboard #commentswp-filters { 5 padding: 20px;6 5 margin-bottom: 20px; 7 border: 1px dashed #eee;8 border-radius: 3px;9 background-color: #fff;10 6 text-align: center; 11 7 display: flex; 12 8 flex-direction: row; 13 9 flex-wrap: nowrap; 14 justify-content: flex- start;10 justify-content: flex-end; 15 11 align-content: stretch; 16 12 align-items: center; … … 20 16 flex: 1 1 auto; 21 17 align-self: center; 22 font-size: 1.5em;18 font-size: 2em; 23 19 font-weight: 400; 24 20 text-align: left; … … 93 89 padding: 20px; 94 90 margin-left: 20px; 91 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08); 95 92 } 96 93 #commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content { -
commentswp/trunk/assets/css/commentswp-dashboard.min.css
r3237139 r3451333 1 #commentswp-dashboard{box-sizing:border-box}#commentswp-dashboard #commentswp-filters{ padding:20px;margin-bottom:20px;border:1px dashed #eee;border-radius:3px;background-color:#fff;text-align:center;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start;align-content:stretch;align-items:center}#commentswp-dashboard #commentswp-filters h2{order:0;flex:1 1 auto;align-self:center;font-size:1.5em;font-weight:400;text-align:left;margin:0;padding:0}#commentswp-dashboard #commentswp-filters .commentswp-filter{order:1;flex:0 1 auto;align-self:center;margin-left:20px}#commentswp-dashboard #commentswp-cards{box-sizing:border-box;font-size:0;margin-left:-20px}#commentswp-dashboard #commentswp-cards .commentswp-card{margin-bottom:20px;font-size:13px;position:relative}#commentswp-dashboard #commentswp-cards .commentswp-card.loading{opacity:.5;pointer-events:none;user-select:none}#commentswp-dashboard #commentswp-cards .commentswp-card .commentswp-card-menu{display:inline-block;position:absolute;left:20px;top:0}#commentswp-dashboard #commentswp-cards .commentswp-card .commentswp-card-menu button{background:none;border:none;cursor:pointer;height:20px;line-height:1;opacity:.2;padding:2px}#commentswp-dashboard #commentswp-cards .commentswp-card .commentswp-card-menu button:hover{opacity:1}#commentswp-dashboard #commentswp-cards .commentswp-card .commentswp-card-menu button svg{width:16px;height:16px}#commentswp-dashboard #commentswp-cards .commentswp-card .commentswp-card-menu .commentswp-card-menu-panel{overflow:hidden;position:absolute;left:0;background-color:#fff;width:10rem;box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06);z-index:1}#commentswp-dashboard #commentswp-cards .commentswp-card .commentswp-card-menu .commentswp-card-menu-panel .commentswp-card-menu-item a{display:block;padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem;text-align:left;width:100%}#commentswp-dashboard #commentswp-cards .commentswp-card .commentswp-card-menu .commentswp-card-menu-panel .commentswp-card-menu-item a:hover{background-color:#f9fafb}#commentswp-dashboard #commentswp-cards .commentswp-card .commentswp-card-content{background-color:#fff;padding:20px;margin-left:20px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start;align-content:flex-start;align-items:stretch}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content .commentswp-card-content-icon{width:52px;order:0;flex:0 0 52px;align-self:auto;margin:0 10px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content .commentswp-card-content-icon .icon{display:flex;justify-content:center;align-items:center;width:52px;height:52px;background-color:#bbf7d0;border-radius:3px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content .commentswp-card-content-icon .icon a{display:block;text-decoration:none;color:#15803d;width:32px;height:32px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content .commentswp-card-content-icon .icon a:hover,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content .commentswp-card-content-icon .icon a:active,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content .commentswp-card-content-icon .icon a:focus{text-decoration:none;box-shadow:none;outline:none;color:#14532d}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content .commentswp-card-content-icon .icon a svg{width:32px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content .commentswp-card-content-data{order:1;flex:1 1 auto;align-self:auto;overflow:hidden}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content .commentswp-card-content-data .label{color:#aaa;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content .commentswp-card-content-data .value{font-weight:bold;font-size:2em;padding-top:10px;line-height:1}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content .commentswp-card-content-data .value a{text-decoration:none}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-totalnumbercard .commentswp-card-content-icon .icon{background-color:#bbf7d0}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-totalnumbercard .commentswp-card-content-icon .icon a{color:#15803d}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-totalnumbercard .commentswp-card-content-icon .icon a:hover,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-totalnumbercard .commentswp-card-content-icon .icon a:active,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-totalnumbercard .commentswp-card-content-icon .icon a:focus{color:rgb(13.8120805369,84.1879194631,40.1208053691)}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-totalnumbercard .commentswp-card-content-data .value a{color:#15803d}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-totalnumbercard .commentswp-card-content-data .value a:hover,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-totalnumbercard .commentswp-card-content-data .value a:active,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-totalnumbercard .commentswp-card-content-data .value a:focus{color:rgb(13.8120805369,84.1879194631,40.1208053691)}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-pendingnumbercard .commentswp-card-content-icon .icon{background-color:#fcf9e8}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-pendingnumbercard .commentswp-card-content-icon .icon a{color:#d63638}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-pendingnumbercard .commentswp-card-content-icon .icon a:hover,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-pendingnumbercard .commentswp-card-content-icon .icon a:active,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-pendingnumbercard .commentswp-card-content-icon .icon a:focus{color:hsl(359.25,66.1157024794%,42.5490196078%)}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-pendingnumbercard .commentswp-card-content-data .value a{color:#d63638}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-pendingnumbercard .commentswp-card-content-data .value a:hover,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-pendingnumbercard .commentswp-card-content-data .value a:active,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-pendingnumbercard .commentswp-card-content-data .value a:focus{color:hsl(359.25,66.1157024794%,42.5490196078%)}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-spamnumbercard .commentswp-card-content-icon .icon{background-color:#fff5dc}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-spamnumbercard .commentswp-card-content-icon .icon a{color:#f3cb0f}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-spamnumbercard .commentswp-card-content-icon .icon a:hover,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-spamnumbercard .commentswp-card-content-icon .icon a:active,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-spamnumbercard .commentswp-card-content-icon .icon a:focus{color:rgb(197.1428571429,164.2857142857,9.8571428571)}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-spamnumbercard .commentswp-card-content-data .value a{color:#f3cb0f}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-spamnumbercard .commentswp-card-content-data .value a:hover,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-spamnumbercard .commentswp-card-content-data .value a:active,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-spamnumbercard .commentswp-card-content-data .value a:focus{color:rgb(197.1428571429,164.2857142857,9.8571428571)}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-trashnumbercard .commentswp-card-content-icon .icon{background-color:#f6f7f7}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-trashnumbercard .commentswp-card-content-icon .icon a{color:#50575e}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-trashnumbercard .commentswp-card-content-icon .icon a:hover,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-trashnumbercard .commentswp-card-content-icon .icon a:active,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-trashnumbercard .commentswp-card-content-icon .icon a:focus{color:rgb(56.5517241379,61.5,66.4482758621)}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-trashnumbercard .commentswp-card-content-data .value a{color:#50575e}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-trashnumbercard .commentswp-card-content-data .value a:hover,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-trashnumbercard .commentswp-card-content-data .value a:active,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-trashnumbercard .commentswp-card-content-data .value a:focus{color:rgb(56.5517241379,61.5,66.4482758621)}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start;align-content:flex-start;align-items:stretch}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content .commentswp-card-content-icon{width:52px;order:0;flex:0 0 52px;align-self:auto;margin:0 10px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content .commentswp-card-content-icon .icon{display:flex;justify-content:center;align-items:center;width:52px;height:52px;background-color:#bbf7d0;border-radius:3px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content .commentswp-card-content-icon .icon a{display:block;text-decoration:none;color:#15803d;width:32px;height:32px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content .commentswp-card-content-icon .icon a:hover,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content .commentswp-card-content-icon .icon a:active,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content .commentswp-card-content-icon .icon a:focus{text-decoration:none;box-shadow:none;outline:none;color:#14532d}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content .commentswp-card-content-icon .icon a svg{width:32px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content .commentswp-card-content-data{order:1;flex:1 1 auto;align-self:auto;overflow:hidden}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content .commentswp-card-content-data .label{color:#aaa;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content .commentswp-card-content-data .value{font-weight:bold;font-size:2em;padding-top:10px;line-height:1}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content .commentswp-card-content-data .value a{text-decoration:none}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-one,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-two{order:0;flex:0 0 50%;align-self:auto;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start;align-content:flex-start;align-items:stretch;overflow:hidden}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-one .commentswp-card-content-icon .icon,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-two .commentswp-card-content-icon .icon{background-color:#bae6fd}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-one .commentswp-card-content-icon .icon a,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-two .commentswp-card-content-icon .icon a{color:#0369a1}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-one .commentswp-card-content-icon .icon a:hover,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-one .commentswp-card-content-icon .icon a:active,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-one .commentswp-card-content-icon .icon a:focus,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-two .commentswp-card-content-icon .icon a:hover,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-two .commentswp-card-content-icon .icon a:active,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-two .commentswp-card-content-icon .icon a:focus{color:#0c4a6e}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-one .commentswp-card-content-icon{margin-left:0}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo.commentswp-card-loggedinoutnumbercard .value{cursor:help}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo.commentswp-card-toplevelrepliesnumbercard .value{cursor:help}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo.commentswp-card-pingtrackbacksnumbercard .value{cursor:help}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-header{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between;align-content:stretch;align-items:stretch}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-header>*{order:0;flex:0 1 auto;align-self:center}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-header h3{margin:0}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table th{padding-bottom:10px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table th.value,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table td.value{width:100%}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table th.count,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table td.count{text-align:center}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table td{padding:10px 0}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table td .subvalue{color:#aaa;margin-left:10px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table td details{cursor:pointer}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table td details[open] p{padding-top:5px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table td a{text-decoration:none}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table tr.bordered td{border-bottom:1px solid #f0f0f1}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table tr.bordered-dashed td{border-bottom:1px dashed #f0f0f1}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table tr.is-child-tr .value{padding-left:20px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table tr:last-of-type td{border-bottom:0;padding-bottom:0}@media screen and (max-width: 568px){#commentswp-dashboard #commentswp-filters h2{display:none}#commentswp-dashboard #commentswp-filters .commentswp-filter:first-of-type{margin-left:0}}@media(min-width: 568px)and (max-width: 720px){#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-icon{display:none}}@media(min-width: 1024px)and (max-width: 1440px){#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-icon{display:none}}1 #commentswp-dashboard{box-sizing:border-box}#commentswp-dashboard #commentswp-filters{margin-bottom:20px;text-align:center;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-end;align-content:stretch;align-items:center}#commentswp-dashboard #commentswp-filters h2{order:0;flex:1 1 auto;align-self:center;font-size:2em;font-weight:400;text-align:left;margin:0;padding:0}#commentswp-dashboard #commentswp-filters .commentswp-filter{order:1;flex:0 1 auto;align-self:center;margin-left:20px}#commentswp-dashboard #commentswp-cards{box-sizing:border-box;font-size:0;margin-left:-20px}#commentswp-dashboard #commentswp-cards .commentswp-card{margin-bottom:20px;font-size:13px;position:relative}#commentswp-dashboard #commentswp-cards .commentswp-card.loading{opacity:.5;pointer-events:none;user-select:none}#commentswp-dashboard #commentswp-cards .commentswp-card .commentswp-card-menu{display:inline-block;position:absolute;left:20px;top:0}#commentswp-dashboard #commentswp-cards .commentswp-card .commentswp-card-menu button{background:none;border:none;cursor:pointer;height:20px;line-height:1;opacity:.2;padding:2px}#commentswp-dashboard #commentswp-cards .commentswp-card .commentswp-card-menu button:hover{opacity:1}#commentswp-dashboard #commentswp-cards .commentswp-card .commentswp-card-menu button svg{width:16px;height:16px}#commentswp-dashboard #commentswp-cards .commentswp-card .commentswp-card-menu .commentswp-card-menu-panel{overflow:hidden;position:absolute;left:0;background-color:#fff;width:10rem;box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06);z-index:1}#commentswp-dashboard #commentswp-cards .commentswp-card .commentswp-card-menu .commentswp-card-menu-panel .commentswp-card-menu-item a{display:block;padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem;text-align:left;width:100%}#commentswp-dashboard #commentswp-cards .commentswp-card .commentswp-card-menu .commentswp-card-menu-panel .commentswp-card-menu-item a:hover{background-color:#f9fafb}#commentswp-dashboard #commentswp-cards .commentswp-card .commentswp-card-content{background-color:#fff;padding:20px;margin-left:20px;box-shadow:0 1px 2px rgba(0,0,0,.08)}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start;align-content:flex-start;align-items:stretch}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content .commentswp-card-content-icon{width:52px;order:0;flex:0 0 52px;align-self:auto;margin:0 10px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content .commentswp-card-content-icon .icon{display:flex;justify-content:center;align-items:center;width:52px;height:52px;background-color:#bbf7d0;border-radius:3px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content .commentswp-card-content-icon .icon a{display:block;text-decoration:none;color:#15803d;width:32px;height:32px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content .commentswp-card-content-icon .icon a:hover,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content .commentswp-card-content-icon .icon a:active,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content .commentswp-card-content-icon .icon a:focus{text-decoration:none;box-shadow:none;outline:none;color:#14532d}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content .commentswp-card-content-icon .icon a svg{width:32px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content .commentswp-card-content-data{order:1;flex:1 1 auto;align-self:auto;overflow:hidden}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content .commentswp-card-content-data .label{color:#aaa;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content .commentswp-card-content-data .value{font-weight:bold;font-size:2em;padding-top:10px;line-height:1}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small .commentswp-card-content .commentswp-card-content-data .value a{text-decoration:none}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-totalnumbercard .commentswp-card-content-icon .icon{background-color:#bbf7d0}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-totalnumbercard .commentswp-card-content-icon .icon a{color:#15803d}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-totalnumbercard .commentswp-card-content-icon .icon a:hover,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-totalnumbercard .commentswp-card-content-icon .icon a:active,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-totalnumbercard .commentswp-card-content-icon .icon a:focus{color:rgb(13.8120805369,84.1879194631,40.1208053691)}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-totalnumbercard .commentswp-card-content-data .value a{color:#15803d}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-totalnumbercard .commentswp-card-content-data .value a:hover,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-totalnumbercard .commentswp-card-content-data .value a:active,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-totalnumbercard .commentswp-card-content-data .value a:focus{color:rgb(13.8120805369,84.1879194631,40.1208053691)}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-pendingnumbercard .commentswp-card-content-icon .icon{background-color:#fcf9e8}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-pendingnumbercard .commentswp-card-content-icon .icon a{color:#d63638}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-pendingnumbercard .commentswp-card-content-icon .icon a:hover,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-pendingnumbercard .commentswp-card-content-icon .icon a:active,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-pendingnumbercard .commentswp-card-content-icon .icon a:focus{color:hsl(359.25,66.1157024794%,42.5490196078%)}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-pendingnumbercard .commentswp-card-content-data .value a{color:#d63638}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-pendingnumbercard .commentswp-card-content-data .value a:hover,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-pendingnumbercard .commentswp-card-content-data .value a:active,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-pendingnumbercard .commentswp-card-content-data .value a:focus{color:hsl(359.25,66.1157024794%,42.5490196078%)}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-spamnumbercard .commentswp-card-content-icon .icon{background-color:#fff5dc}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-spamnumbercard .commentswp-card-content-icon .icon a{color:#f3cb0f}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-spamnumbercard .commentswp-card-content-icon .icon a:hover,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-spamnumbercard .commentswp-card-content-icon .icon a:active,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-spamnumbercard .commentswp-card-content-icon .icon a:focus{color:rgb(197.1428571429,164.2857142857,9.8571428571)}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-spamnumbercard .commentswp-card-content-data .value a{color:#f3cb0f}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-spamnumbercard .commentswp-card-content-data .value a:hover,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-spamnumbercard .commentswp-card-content-data .value a:active,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-spamnumbercard .commentswp-card-content-data .value a:focus{color:rgb(197.1428571429,164.2857142857,9.8571428571)}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-trashnumbercard .commentswp-card-content-icon .icon{background-color:#f6f7f7}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-trashnumbercard .commentswp-card-content-icon .icon a{color:#50575e}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-trashnumbercard .commentswp-card-content-icon .icon a:hover,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-trashnumbercard .commentswp-card-content-icon .icon a:active,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-trashnumbercard .commentswp-card-content-icon .icon a:focus{color:rgb(56.5517241379,61.5,66.4482758621)}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-trashnumbercard .commentswp-card-content-data .value a{color:#50575e}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-trashnumbercard .commentswp-card-content-data .value a:hover,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-trashnumbercard .commentswp-card-content-data .value a:active,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small.commentswp-card-trashnumbercard .commentswp-card-content-data .value a:focus{color:rgb(56.5517241379,61.5,66.4482758621)}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start;align-content:flex-start;align-items:stretch}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content .commentswp-card-content-icon{width:52px;order:0;flex:0 0 52px;align-self:auto;margin:0 10px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content .commentswp-card-content-icon .icon{display:flex;justify-content:center;align-items:center;width:52px;height:52px;background-color:#bbf7d0;border-radius:3px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content .commentswp-card-content-icon .icon a{display:block;text-decoration:none;color:#15803d;width:32px;height:32px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content .commentswp-card-content-icon .icon a:hover,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content .commentswp-card-content-icon .icon a:active,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content .commentswp-card-content-icon .icon a:focus{text-decoration:none;box-shadow:none;outline:none;color:#14532d}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content .commentswp-card-content-icon .icon a svg{width:32px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content .commentswp-card-content-data{order:1;flex:1 1 auto;align-self:auto;overflow:hidden}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content .commentswp-card-content-data .label{color:#aaa;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content .commentswp-card-content-data .value{font-weight:bold;font-size:2em;padding-top:10px;line-height:1}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content .commentswp-card-content-data .value a{text-decoration:none}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-one,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-two{order:0;flex:0 0 50%;align-self:auto;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start;align-content:flex-start;align-items:stretch;overflow:hidden}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-one .commentswp-card-content-icon .icon,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-two .commentswp-card-content-icon .icon{background-color:#bae6fd}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-one .commentswp-card-content-icon .icon a,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-two .commentswp-card-content-icon .icon a{color:#0369a1}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-one .commentswp-card-content-icon .icon a:hover,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-one .commentswp-card-content-icon .icon a:active,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-one .commentswp-card-content-icon .icon a:focus,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-two .commentswp-card-content-icon .icon a:hover,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-two .commentswp-card-content-icon .icon a:active,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-two .commentswp-card-content-icon .icon a:focus{color:#0c4a6e}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-one .commentswp-card-content-icon{margin-left:0}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo.commentswp-card-loggedinoutnumbercard .value{cursor:help}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo.commentswp-card-toplevelrepliesnumbercard .value{cursor:help}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo.commentswp-card-pingtrackbacksnumbercard .value{cursor:help}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-header{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between;align-content:stretch;align-items:stretch}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-header>*{order:0;flex:0 1 auto;align-self:center}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-header h3{margin:0}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table th{padding-bottom:10px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table th.value,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table td.value{width:100%}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table th.count,#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table td.count{text-align:center}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table td{padding:10px 0}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table td .subvalue{color:#aaa;margin-left:10px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table td details{cursor:pointer}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table td details[open] p{padding-top:5px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table td a{text-decoration:none}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table tr.bordered td{border-bottom:1px solid #f0f0f1}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table tr.bordered-dashed td{border-bottom:1px dashed #f0f0f1}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table tr.is-child-tr .value{padding-left:20px}#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-table .commentswp-card-content .commentswp-card-content-data table tr:last-of-type td{border-bottom:0;padding-bottom:0}@media screen and (max-width: 568px){#commentswp-dashboard #commentswp-filters h2{display:none}#commentswp-dashboard #commentswp-filters .commentswp-filter:first-of-type{margin-left:0}}@media(min-width: 568px)and (max-width: 720px){#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-icon{display:none}}@media(min-width: 1024px)and (max-width: 1440px){#commentswp-dashboard #commentswp-cards .commentswp-card.commentswp-card-small-duo .commentswp-card-content-icon{display:none}} -
commentswp/trunk/assets/css/commentswp-profiles.css
r3237139 r3451333 1 #commentswp-profiles .tablenav.top { 2 padding-top: 0; 3 } 1 4 #commentswp-profiles .wp-list-table .column-name details { 2 5 display: block; -
commentswp/trunk/assets/css/commentswp-profiles.min.css
r3237139 r3451333 1 #commentswp-profiles . wp-list-table .column-name details{display:block}#commentswp-profiles .wp-list-table .column-name details>summary{cursor:pointer;margin-bottom:5px}1 #commentswp-profiles .tablenav.top{padding-top:0}#commentswp-profiles .wp-list-table .column-name details{display:block}#commentswp-profiles .wp-list-table .column-name details>summary{cursor:pointer;margin-bottom:5px} -
commentswp/trunk/assets/libs/alpinejs.min.js
r3237139 r3451333 1 /** Alpine.js v3.1 4.8. Link: https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js */2 (()=>{var nt=!1,it=!1,W=[],ot=-1;function Ut(e){Rn(e)}function Rn(e){W.includes(e)||W.push(e),Mn()}function Wt(e){let t=W.indexOf(e);t!==-1&&t>ot&&W.splice(t,1)}function Mn(){!it&&!nt&&(nt=!0,queueMicrotask(Nn))}function Nn(){nt=!1,it=!0;for(let e=0;e<W.length;e++)W[e](),ot=e;W.length=0,ot=-1,it=!1}var T,N,$,at,st=!0;function Gt(e){st=!1,e(),st=!0}function Jt(e){T=e.reactive,$=e.release,N=t=>e.effect(t,{scheduler:r=>{st?Ut(r):r()}}),at=e.raw}function ct(e){N=e}function Yt(e){let t=()=>{};return[n=>{let i=N(n);return e._x_effects||(e._x_effects=new Set,e._x_runEffects=()=>{e._x_effects.forEach(o=>o())}),e._x_effects.add(i),t=()=>{i!==void 0&&(e._x_effects.delete(i),$(i))},i},()=>{t()}]}function ve(e,t){let r=!0,n,i=N(()=>{let o=e();JSON.stringify(o),r?n=o:queueMicrotask(()=>{t(o,n),n=o}),r=!1});return()=>$(i)}var Xt=[],Zt=[],Qt=[];function er(e){Qt.push(e)}function te(e,t){typeof t=="function"?(e._x_cleanups||(e._x_cleanups=[]),e._x_cleanups.push(t)):(t=e,Zt.push(t))}function Ae(e){Xt.push(e)}function Oe(e,t,r){e._x_attributeCleanups||(e._x_attributeCleanups={}),e._x_attributeCleanups[t]||(e._x_attributeCleanups[t]=[]),e._x_attributeCleanups[t].push(r)}function lt(e,t){e._x_attributeCleanups&&Object.entries(e._x_attributeCleanups).forEach(([r,n])=>{(t===void 0||t.includes(r))&&(n.forEach(i=>i()),delete e._x_attributeCleanups[r])})}function tr(e){for(e._x_effects?.forEach(Wt);e._x_cleanups?.length;)e._x_cleanups.pop()()}var ut=new MutationObserver(mt),ft=!1;function ue(){ut.observe(document,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0}),ft=!0}function dt(){kn(),ut.disconnect(),ft=!1}var le=[];function kn(){let e=ut.takeRecords();le.push(()=>e.length>0&&mt(e));let t=le.length;queueMicrotask(()=>{if(le.length===t)for(;le.length>0;)le.shift()()})}function m(e){if(!ft)return e();dt();let t=e();return ue(),t}var pt=!1,Se=[];function rr(){pt=!0}function nr(){pt=!1,mt(Se),Se=[]}function mt(e){if(pt){Se=Se.concat(e);return}let t=[],r=new Set,n=new Map,i=new Map;for(let o=0;o<e.length;o++)if(!e[o].target._x_ignoreMutationObserver&&(e[o].type==="childList"&&(e[o].removedNodes.forEach(s=>{s.nodeType===1&&s._x_marker&&r.add(s)}),e[o].addedNodes.forEach(s=>{if(s.nodeType===1){if(r.has(s)){r.delete(s);return}s._x_marker||t.push(s)}})),e[o].type==="attributes")){let s=e[o].target,a=e[o].attributeName,c=e[o].oldValue,l=()=>{n.has(s)||n.set(s,[]),n.get(s).push({name:a,value:s.getAttribute(a)})},u=()=>{i.has(s)||i.set(s,[]),i.get(s).push(a)};s.hasAttribute(a)&&c===null?l():s.hasAttribute(a)?(u(),l()):u()}i.forEach((o,s)=>{lt(s,o)}),n.forEach((o,s)=>{Xt.forEach(a=>a(s,o))});for(let o of r)t.some(s=>s.contains(o))||Zt.forEach(s=>s(o));for(let o of t)o.isConnected&&Qt.forEach(s=>s(o));t=null,r=null,n=null,i=null}function Ce(e){return z(B(e))}function k(e,t,r){return e._x_dataStack=[t,...B(r||e)],()=>{e._x_dataStack=e._x_dataStack.filter(n=>n!==t)}}function B(e){return e._x_dataStack?e._x_dataStack:typeof ShadowRoot=="function"&&e instanceof ShadowRoot?B(e.host):e.parentNode?B(e.parentNode):[]}function z(e){return new Proxy({objects:e},Dn)}var Dn={ownKeys({objects:e}){return Array.from(new Set(e.flatMap(t=>Object.keys(t))))},has({objects:e},t){return t==Symbol.unscopables?!1:e.some(r=>Object.prototype.hasOwnProperty.call(r,t)||Reflect.has(r,t))},get({objects:e},t,r){return t=="toJSON"?Pn:Reflect.get(e.find(n=>Reflect.has(n,t))||{},t,r)},set({objects:e},t,r,n){let i=e.find(s=>Object.prototype.hasOwnProperty.call(s,t))||e[e.length-1],o=Object.getOwnPropertyDescriptor(i,t);return o?.set&&o?.get?o.set.call(n,r)||!0:Reflect.set(i,t,r)}};function Pn(){return Reflect.ownKeys(this).reduce((t,r)=>(t[r]=Reflect.get(this,r),t),{})}function Te(e){let t=n=>typeof n=="object"&&!Array.isArray(n)&&n!==null,r=(n,i="")=>{Object.entries(Object.getOwnPropertyDescriptors(n)).forEach(([o,{value:s,enumerable:a}])=>{if(a===!1||s===void 0||typeof s=="object"&&s!==null&&s.__v_skip)return;let c=i===""?o:`${i}.${o}`;typeof s=="object"&&s!==null&&s._x_interceptor?n[o]=s.initialize(e,c,o):t(s)&&s!==n&&!(s instanceof Element)&&r(s,c)})};return r(e)}function Re(e,t=()=>{}){let r={initialValue:void 0,_x_interceptor:!0,initialize(n,i,o){return e(this.initialValue,()=>In(n,i),s=>ht(n,i,s),i,o)}};return t(r),n=>{if(typeof n=="object"&&n!==null&&n._x_interceptor){let i=r.initialize.bind(r);r.initialize=(o,s,a)=>{let c=n.initialize(o,s,a);return r.initialValue=c,i(o,s,a)}}else r.initialValue=n;return r}}function In(e,t){return t.split(".").reduce((r,n)=>r[n],e)}function ht(e,t,r){if(typeof t=="string"&&(t=t.split(".")),t.length===1)e[t[0]]=r;else{if(t.length===0)throw error;return e[t[0]]||(e[t[0]]={}),ht(e[t[0]],t.slice(1),r)}}var ir={};function y(e,t){ir[e]=t}function fe(e,t){let r=Ln(t);return Object.entries(ir).forEach(([n,i])=>{Object.defineProperty(e,`$${n}`,{get(){return i(t,r)},enumerable:!1})}),e}function Ln(e){let[t,r]=_t(e),n={interceptor:Re,...t};return te(e,r),n}function or(e,t,r,...n){try{return r(...n)}catch(i){re(i,e,t)}}function re(e,t,r=void 0){e=Object.assign(e??{message:"No error message given."},{el:t,expression:r}),console.warn(`Alpine Expression Error: ${e.message}1 /** Alpine.js v3.15.6. Link: https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js */ 2 (()=>{var ie=!1,oe=!1,Y=[],se=-1,ae=!1;function We(t){Bn(t)}function Ge(){ae=!0}function Je(){ae=!1,Xe()}function Bn(t){Y.includes(t)||Y.push(t),Xe()}function Ye(t){let e=Y.indexOf(t);e!==-1&&e>se&&Y.splice(e,1)}function Xe(){if(!oe&&!ie){if(ae)return;ie=!0,queueMicrotask(zn)}}function zn(){ie=!1,oe=!0;for(let t=0;t<Y.length;t++)Y[t](),se=t;Y.length=0,se=-1,oe=!1}var M,D,z,le,ce=!0;function Ze(t){ce=!1,t(),ce=!0}function Qe(t){M=t.reactive,z=t.release,D=e=>t.effect(e,{scheduler:r=>{ce?We(r):r()}}),le=t.raw}function ue(t){D=t}function tr(t){let e=()=>{};return[n=>{let i=D(n);return t._x_effects||(t._x_effects=new Set,t._x_runEffects=()=>{t._x_effects.forEach(o=>o())}),t._x_effects.add(i),e=()=>{i!==void 0&&(t._x_effects.delete(i),z(i))},i},()=>{e()}]}function Ot(t,e){let r=!0,n,i=D(()=>{let o=t();JSON.stringify(o),r?n=o:queueMicrotask(()=>{e(o,n),n=o}),r=!1});return()=>z(i)}async function er(t){Ge();try{await t(),await Promise.resolve()}finally{Je()}}var rr=[],nr=[],ir=[];function or(t){ir.push(t)}function it(t,e){typeof e=="function"?(t._x_cleanups||(t._x_cleanups=[]),t._x_cleanups.push(e)):(e=t,nr.push(e))}function Tt(t){rr.push(t)}function Rt(t,e,r){t._x_attributeCleanups||(t._x_attributeCleanups={}),t._x_attributeCleanups[e]||(t._x_attributeCleanups[e]=[]),t._x_attributeCleanups[e].push(r)}function fe(t,e){t._x_attributeCleanups&&Object.entries(t._x_attributeCleanups).forEach(([r,n])=>{(e===void 0||e.includes(r))&&(n.forEach(i=>i()),delete t._x_attributeCleanups[r])})}function sr(t){for(t._x_effects?.forEach(Ye);t._x_cleanups?.length;)t._x_cleanups.pop()()}var de=new MutationObserver(_e),pe=!1;function mt(){de.observe(document,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0}),pe=!0}function me(){Hn(),de.disconnect(),pe=!1}var pt=[];function Hn(){let t=de.takeRecords();pt.push(()=>t.length>0&&_e(t));let e=pt.length;queueMicrotask(()=>{if(pt.length===e)for(;pt.length>0;)pt.shift()()})}function m(t){if(!pe)return t();me();let e=t();return mt(),e}var he=!1,Ct=[];function ar(){he=!0}function cr(){he=!1,_e(Ct),Ct=[]}function _e(t){if(he){Ct=Ct.concat(t);return}let e=[],r=new Set,n=new Map,i=new Map;for(let o=0;o<t.length;o++)if(!t[o].target._x_ignoreMutationObserver&&(t[o].type==="childList"&&(t[o].removedNodes.forEach(s=>{s.nodeType===1&&s._x_marker&&r.add(s)}),t[o].addedNodes.forEach(s=>{if(s.nodeType===1){if(r.has(s)){r.delete(s);return}s._x_marker||e.push(s)}})),t[o].type==="attributes")){let s=t[o].target,a=t[o].attributeName,c=t[o].oldValue,l=()=>{n.has(s)||n.set(s,[]),n.get(s).push({name:a,value:s.getAttribute(a)})},u=()=>{i.has(s)||i.set(s,[]),i.get(s).push(a)};s.hasAttribute(a)&&c===null?l():s.hasAttribute(a)?(u(),l()):u()}i.forEach((o,s)=>{fe(s,o)}),n.forEach((o,s)=>{rr.forEach(a=>a(s,o))});for(let o of r)e.some(s=>s.contains(o))||nr.forEach(s=>s(o));for(let o of e)o.isConnected&&ir.forEach(s=>s(o));e=null,r=null,n=null,i=null}function Mt(t){return I(H(t))}function P(t,e,r){return t._x_dataStack=[e,...H(r||t)],()=>{t._x_dataStack=t._x_dataStack.filter(n=>n!==e)}}function H(t){return t._x_dataStack?t._x_dataStack:typeof ShadowRoot=="function"&&t instanceof ShadowRoot?H(t.host):t.parentNode?H(t.parentNode):[]}function I(t){return new Proxy({objects:t},Kn)}var Kn={ownKeys({objects:t}){return Array.from(new Set(t.flatMap(e=>Object.keys(e))))},has({objects:t},e){return e==Symbol.unscopables?!1:t.some(r=>Object.prototype.hasOwnProperty.call(r,e)||Reflect.has(r,e))},get({objects:t},e,r){return e=="toJSON"?Vn:Reflect.get(t.find(n=>Reflect.has(n,e))||{},e,r)},set({objects:t},e,r,n){let i=t.find(s=>Object.prototype.hasOwnProperty.call(s,e))||t[t.length-1],o=Object.getOwnPropertyDescriptor(i,e);return o?.set&&o?.get?o.set.call(n,r)||!0:Reflect.set(i,e,r)}};function Vn(){return Reflect.ownKeys(this).reduce((e,r)=>(e[r]=Reflect.get(this,r),e),{})}function ot(t){let e=n=>typeof n=="object"&&!Array.isArray(n)&&n!==null,r=(n,i="")=>{Object.entries(Object.getOwnPropertyDescriptors(n)).forEach(([o,{value:s,enumerable:a}])=>{if(a===!1||s===void 0||typeof s=="object"&&s!==null&&s.__v_skip)return;let c=i===""?o:`${i}.${o}`;typeof s=="object"&&s!==null&&s._x_interceptor?n[o]=s.initialize(t,c,o):e(s)&&s!==n&&!(s instanceof Element)&&r(s,c)})};return r(t)}function Nt(t,e=()=>{}){let r={initialValue:void 0,_x_interceptor:!0,initialize(n,i,o){return t(this.initialValue,()=>qn(n,i),s=>ge(n,i,s),i,o)}};return e(r),n=>{if(typeof n=="object"&&n!==null&&n._x_interceptor){let i=r.initialize.bind(r);r.initialize=(o,s,a)=>{let c=n.initialize(o,s,a);return r.initialValue=c,i(o,s,a)}}else r.initialValue=n;return r}}function qn(t,e){return e.split(".").reduce((r,n)=>r[n],t)}function ge(t,e,r){if(typeof e=="string"&&(e=e.split(".")),e.length===1)t[e[0]]=r;else{if(e.length===0)throw error;return t[e[0]]||(t[e[0]]={}),ge(t[e[0]],e.slice(1),r)}}var lr={};function y(t,e){lr[t]=e}function q(t,e){let r=Un(e);return Object.entries(lr).forEach(([n,i])=>{Object.defineProperty(t,`$${n}`,{get(){return i(e,r)},enumerable:!1})}),t}function Un(t){let[e,r]=xe(t),n={interceptor:Nt,...e};return it(t,r),n}function ur(t,e,r,...n){try{return r(...n)}catch(i){st(i,t,e)}}function st(...t){return fr(...t)}var fr=Wn;function dr(t){fr=t}function Wn(t,e,r=void 0){t=Object.assign(t??{message:"No error message given."},{el:e,expression:r}),console.warn(`Alpine Expression Error: ${t.message} 3 3 4 4 ${r?'Expression: "'+r+`" 5 5 6 `:""}`, t),setTimeout(()=>{throw e},0)}var Me=!0;function ke(e){let t=Me;Me=!1;let r=e();return Me=t,r}function R(e,t,r={}){let n;return x(e,t)(i=>n=i,r),n}function x(...e){return sr(...e)}var sr=xt;function ar(e){sr=e}function xt(e,t){let r={};fe(r,e);let n=[r,...B(e)],i=typeof t=="function"?$n(n,t):Fn(n,t,e);return or.bind(null,e,t,i)}function $n(e,t){return(r=()=>{},{scope:n={},params:i=[]}={})=>{let o=t.apply(z([n,...e]),i);Ne(r,o)}}var gt={};function jn(e,t){if(gt[e])return gt[e];let r=Object.getPrototypeOf(async function(){}).constructor,n=/^[\n\s]*if.*\(.*\)/.test(e.trim())||/^(let|const)\s/.test(e.trim())?`(async()=>{ ${e} })()`:e,o=(()=>{try{let s=new r(["__self","scope"],`with (scope) { __self.result = ${n} }; __self.finished = true; return __self.result;`);return Object.defineProperty(s,"name",{value:`[Alpine] ${e}`}),s}catch(s){return re(s,t,e),Promise.resolve()}})();return gt[e]=o,o}function Fn(e,t,r){let n=jn(t,r);return(i=()=>{},{scope:o={},params:s=[]}={})=>{n.result=void 0,n.finished=!1;let a=z([o,...e]);if(typeof n=="function"){let c=n(n,a).catch(l=>re(l,r,t));n.finished?(Ne(i,n.result,a,s,r),n.result=void 0):c.then(l=>{Ne(i,l,a,s,r)}).catch(l=>re(l,r,t)).finally(()=>n.result=void 0)}}}function Ne(e,t,r,n,i){if(Me&&typeof t=="function"){let o=t.apply(r,n);o instanceof Promise?o.then(s=>Ne(e,s,r,n)).catch(s=>re(s,i,t)):e(o)}else typeof t=="object"&&t instanceof Promise?t.then(o=>e(o)):e(t)}var wt="x-";function C(e=""){return wt+e}function cr(e){wt=e}var De={};function d(e,t){return De[e]=t,{before(r){if(!De[r]){console.warn(String.raw`Cannot find directive \`${r}\`. \`${e}\` will use the default order of execution`);return}let n=G.indexOf(r);G.splice(n>=0?n:G.indexOf("DEFAULT"),0,e)}}}function lr(e){return Object.keys(De).includes(e)}function pe(e,t,r){if(t=Array.from(t),e._x_virtualDirectives){let o=Object.entries(e._x_virtualDirectives).map(([a,c])=>({name:a,value:c})),s=Et(o);o=o.map(a=>s.find(c=>c.name===a.name)?{name:`x-bind:${a.name}`,value:`"${a.value}"`}:a),t=t.concat(o)}let n={};return t.map(dr((o,s)=>n[o]=s)).filter(mr).map(zn(n,r)).sort(Kn).map(o=>Bn(e,o))}function Et(e){return Array.from(e).map(dr()).filter(t=>!mr(t))}var yt=!1,de=new Map,ur=Symbol();function fr(e){yt=!0;let t=Symbol();ur=t,de.set(t,[]);let r=()=>{for(;de.get(t).length;)de.get(t).shift()();de.delete(t)},n=()=>{yt=!1,r()};e(r),n()}function _t(e){let t=[],r=a=>t.push(a),[n,i]=Yt(e);return t.push(i),[{Alpine:K,effect:n,cleanup:r,evaluateLater:x.bind(x,e),evaluate:R.bind(R,e)},()=>t.forEach(a=>a())]}function Bn(e,t){let r=()=>{},n=De[t.type]||r,[i,o]=_t(e);Oe(e,t.original,o);let s=()=>{e._x_ignore||e._x_ignoreSelf||(n.inline&&n.inline(e,t,i),n=n.bind(n,e,t,i),yt?de.get(ur).push(n):n())};return s.runCleanups=o,s}var Pe=(e,t)=>({name:r,value:n})=>(r.startsWith(e)&&(r=r.replace(e,t)),{name:r,value:n}),Ie=e=>e;function dr(e=()=>{}){return({name:t,value:r})=>{let{name:n,value:i}=pr.reduce((o,s)=>s(o),{name:t,value:r});return n!==t&&e(n,t),{name:n,value:i}}}var pr=[];function ne(e){pr.push(e)}function mr({name:e}){return hr().test(e)}var hr=()=>new RegExp(`^${wt}([^:^.]+)\\b`);function zn(e,t){return({name:r,value:n})=>{let i=r.match(hr()),o=r.match(/:([a-zA-Z0-9\-_:]+)/),s=r.match(/\.[^.\]]+(?=[^\]]*$)/g)||[],a=t||e[r]||r;return{type:i?i[1]:null,value:o?o[1]:null,modifiers:s.map(c=>c.replace(".","")),expression:n,original:a}}}var bt="DEFAULT",G=["ignore","ref","data","id","anchor","bind","init","for","model","modelable","transition","show","if",bt,"teleport"];function Kn(e,t){let r=G.indexOf(e.type)===-1?bt:e.type,n=G.indexOf(t.type)===-1?bt:t.type;return G.indexOf(r)-G.indexOf(n)}function J(e,t,r={}){e.dispatchEvent(new CustomEvent(t,{detail:r,bubbles:!0,composed:!0,cancelable:!0}))}function D(e,t){if(typeof ShadowRoot=="function"&&e instanceof ShadowRoot){Array.from(e.children).forEach(i=>D(i,t));return}let r=!1;if(t(e,()=>r=!0),r)return;let n=e.firstElementChild;for(;n;)D(n,t,!1),n=n.nextElementSibling}function E(e,...t){console.warn(`Alpine Warning: ${e}`,...t)}var _r=!1;function gr(){_r&&E("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems."),_r=!0,document.body||E("Unable to initialize. Trying to load Alpine before `<body>` is available. Did you forget to add `defer` in Alpine's `<script>` tag?"),J(document,"alpine:init"),J(document,"alpine:initializing"),ue(),er(t=>S(t,D)),te(t=>P(t)),Ae((t,r)=>{pe(t,r).forEach(n=>n())});let e=t=>!Y(t.parentElement,!0);Array.from(document.querySelectorAll(br().join(","))).filter(e).forEach(t=>{S(t)}),J(document,"alpine:initialized"),setTimeout(()=>{Vn()})}var vt=[],xr=[];function yr(){return vt.map(e=>e())}function br(){return vt.concat(xr).map(e=>e())}function Le(e){vt.push(e)}function $e(e){xr.push(e)}function Y(e,t=!1){return j(e,r=>{if((t?br():yr()).some(i=>r.matches(i)))return!0})}function j(e,t){if(e){if(t(e))return e;if(e._x_teleportBack&&(e=e._x_teleportBack),!!e.parentElement)return j(e.parentElement,t)}}function wr(e){return yr().some(t=>e.matches(t))}var Er=[];function vr(e){Er.push(e)}var Hn=1;function S(e,t=D,r=()=>{}){j(e,n=>n._x_ignore)||fr(()=>{t(e,(n,i)=>{n._x_marker||(r(n,i),Er.forEach(o=>o(n,i)),pe(n,n.attributes).forEach(o=>o()),n._x_ignore||(n._x_marker=Hn++),n._x_ignore&&i())})})}function P(e,t=D){t(e,r=>{tr(r),lt(r),delete r._x_marker})}function Vn(){[["ui","dialog",["[x-dialog], [x-popover]"]],["anchor","anchor",["[x-anchor]"]],["sort","sort",["[x-sort]"]]].forEach(([t,r,n])=>{lr(r)||n.some(i=>{if(document.querySelector(i))return E(`found "${i}", but missing ${t} plugin`),!0})})}var St=[],At=!1;function ie(e=()=>{}){return queueMicrotask(()=>{At||setTimeout(()=>{je()})}),new Promise(t=>{St.push(()=>{e(),t()})})}function je(){for(At=!1;St.length;)St.shift()()}function Sr(){At=!0}function me(e,t){return Array.isArray(t)?Ar(e,t.join(" ")):typeof t=="object"&&t!==null?qn(e,t):typeof t=="function"?me(e,t()):Ar(e,t)}function Ar(e,t){let r=o=>o.split(" ").filter(Boolean),n=o=>o.split(" ").filter(s=>!e.classList.contains(s)).filter(Boolean),i=o=>(e.classList.add(...o),()=>{e.classList.remove(...o)});return t=t===!0?t="":t||"",i(n(t))}function qn(e,t){let r=a=>a.split(" ").filter(Boolean),n=Object.entries(t).flatMap(([a,c])=>c?r(a):!1).filter(Boolean),i=Object.entries(t).flatMap(([a,c])=>c?!1:r(a)).filter(Boolean),o=[],s=[];return i.forEach(a=>{e.classList.contains(a)&&(e.classList.remove(a),s.push(a))}),n.forEach(a=>{e.classList.contains(a)||(e.classList.add(a),o.push(a))}),()=>{s.forEach(a=>e.classList.add(a)),o.forEach(a=>e.classList.remove(a))}}function X(e,t){return typeof t=="object"&&t!==null?Un(e,t):Wn(e,t)}function Un(e,t){let r={};return Object.entries(t).forEach(([n,i])=>{r[n]=e.style[n],n.startsWith("--")||(n=Gn(n)),e.style.setProperty(n,i)}),setTimeout(()=>{e.style.length===0&&e.removeAttribute("style")}),()=>{X(e,r)}}function Wn(e,t){let r=e.getAttribute("style",t);return e.setAttribute("style",t),()=>{e.setAttribute("style",r||"")}}function Gn(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function he(e,t=()=>{}){let r=!1;return function(){r?t.apply(this,arguments):(r=!0,e.apply(this,arguments))}}d("transition",(e,{value:t,modifiers:r,expression:n},{evaluate:i})=>{typeof n=="function"&&(n=i(n)),n!==!1&&(!n||typeof n=="boolean"?Yn(e,r,t):Jn(e,n,t))});function Jn(e,t,r){Or(e,me,""),{enter:i=>{e._x_transition.enter.during=i},"enter-start":i=>{e._x_transition.enter.start=i},"enter-end":i=>{e._x_transition.enter.end=i},leave:i=>{e._x_transition.leave.during=i},"leave-start":i=>{e._x_transition.leave.start=i},"leave-end":i=>{e._x_transition.leave.end=i}}[r](t)}function Yn(e,t,r){Or(e,X);let n=!t.includes("in")&&!t.includes("out")&&!r,i=n||t.includes("in")||["enter"].includes(r),o=n||t.includes("out")||["leave"].includes(r);t.includes("in")&&!n&&(t=t.filter((g,b)=>b<t.indexOf("out"))),t.includes("out")&&!n&&(t=t.filter((g,b)=>b>t.indexOf("out")));let s=!t.includes("opacity")&&!t.includes("scale"),a=s||t.includes("opacity"),c=s||t.includes("scale"),l=a?0:1,u=c?_e(t,"scale",95)/100:1,p=_e(t,"delay",0)/1e3,h=_e(t,"origin","center"),w="opacity, transform",F=_e(t,"duration",150)/1e3,Ee=_e(t,"duration",75)/1e3,f="cubic-bezier(0.4, 0.0, 0.2, 1)";i&&(e._x_transition.enter.during={transformOrigin:h,transitionDelay:`${p}s`,transitionProperty:w,transitionDuration:`${F}s`,transitionTimingFunction:f},e._x_transition.enter.start={opacity:l,transform:`scale(${u})`},e._x_transition.enter.end={opacity:1,transform:"scale(1)"}),o&&(e._x_transition.leave.during={transformOrigin:h,transitionDelay:`${p}s`,transitionProperty:w,transitionDuration:`${Ee}s`,transitionTimingFunction:f},e._x_transition.leave.start={opacity:1,transform:"scale(1)"},e._x_transition.leave.end={opacity:l,transform:`scale(${u})`})}function Or(e,t,r={}){e._x_transition||(e._x_transition={enter:{during:r,start:r,end:r},leave:{during:r,start:r,end:r},in(n=()=>{},i=()=>{}){Fe(e,t,{during:this.enter.during,start:this.enter.start,end:this.enter.end},n,i)},out(n=()=>{},i=()=>{}){Fe(e,t,{during:this.leave.during,start:this.leave.start,end:this.leave.end},n,i)}})}window.Element.prototype._x_toggleAndCascadeWithTransitions=function(e,t,r,n){let i=document.visibilityState==="visible"?requestAnimationFrame:setTimeout,o=()=>i(r);if(t){e._x_transition&&(e._x_transition.enter||e._x_transition.leave)?e._x_transition.enter&&(Object.entries(e._x_transition.enter.during).length||Object.entries(e._x_transition.enter.start).length||Object.entries(e._x_transition.enter.end).length)?e._x_transition.in(r):o():e._x_transition?e._x_transition.in(r):o();return}e._x_hidePromise=e._x_transition?new Promise((s,a)=>{e._x_transition.out(()=>{},()=>s(n)),e._x_transitioning&&e._x_transitioning.beforeCancel(()=>a({isFromCancelledTransition:!0}))}):Promise.resolve(n),queueMicrotask(()=>{let s=Cr(e);s?(s._x_hideChildren||(s._x_hideChildren=[]),s._x_hideChildren.push(e)):i(()=>{let a=c=>{let l=Promise.all([c._x_hidePromise,...(c._x_hideChildren||[]).map(a)]).then(([u])=>u?.());return delete c._x_hidePromise,delete c._x_hideChildren,l};a(e).catch(c=>{if(!c.isFromCancelledTransition)throw c})})})};function Cr(e){let t=e.parentNode;if(t)return t._x_hidePromise?t:Cr(t)}function Fe(e,t,{during:r,start:n,end:i}={},o=()=>{},s=()=>{}){if(e._x_transitioning&&e._x_transitioning.cancel(),Object.keys(r).length===0&&Object.keys(n).length===0&&Object.keys(i).length===0){o(),s();return}let a,c,l;Xn(e,{start(){a=t(e,n)},during(){c=t(e,r)},before:o,end(){a(),l=t(e,i)},after:s,cleanup(){c(),l()}})}function Xn(e,t){let r,n,i,o=he(()=>{m(()=>{r=!0,n||t.before(),i||(t.end(),je()),t.after(),e.isConnected&&t.cleanup(),delete e._x_transitioning})});e._x_transitioning={beforeCancels:[],beforeCancel(s){this.beforeCancels.push(s)},cancel:he(function(){for(;this.beforeCancels.length;)this.beforeCancels.shift()();o()}),finish:o},m(()=>{t.start(),t.during()}),Sr(),requestAnimationFrame(()=>{if(r)return;let s=Number(getComputedStyle(e).transitionDuration.replace(/,.*/,"").replace("s",""))*1e3,a=Number(getComputedStyle(e).transitionDelay.replace(/,.*/,"").replace("s",""))*1e3;s===0&&(s=Number(getComputedStyle(e).animationDuration.replace("s",""))*1e3),m(()=>{t.before()}),n=!0,requestAnimationFrame(()=>{r||(m(()=>{t.end()}),je(),setTimeout(e._x_transitioning.finish,s+a),i=!0)})})}function _e(e,t,r){if(e.indexOf(t)===-1)return r;let n=e[e.indexOf(t)+1];if(!n||t==="scale"&&isNaN(n))return r;if(t==="duration"||t==="delay"){let i=n.match(/([0-9]+)ms/);if(i)return i[1]}return t==="origin"&&["top","right","left","center","bottom"].includes(e[e.indexOf(t)+2])?[n,e[e.indexOf(t)+2]].join(" "):n}var I=!1;function A(e,t=()=>{}){return(...r)=>I?t(...r):e(...r)}function Tr(e){return(...t)=>I&&e(...t)}var Rr=[];function H(e){Rr.push(e)}function Mr(e,t){Rr.forEach(r=>r(e,t)),I=!0,kr(()=>{S(t,(r,n)=>{n(r,()=>{})})}),I=!1}var Be=!1;function Nr(e,t){t._x_dataStack||(t._x_dataStack=e._x_dataStack),I=!0,Be=!0,kr(()=>{Zn(t)}),I=!1,Be=!1}function Zn(e){let t=!1;S(e,(n,i)=>{D(n,(o,s)=>{if(t&&wr(o))return s();t=!0,i(o,s)})})}function kr(e){let t=N;ct((r,n)=>{let i=t(r);return $(i),()=>{}}),e(),ct(t)}function ge(e,t,r,n=[]){switch(e._x_bindings||(e._x_bindings=T({})),e._x_bindings[t]=r,t=n.includes("camel")?si(t):t,t){case"value":Qn(e,r);break;case"style":ti(e,r);break;case"class":ei(e,r);break;case"selected":case"checked":ri(e,t,r);break;default:Pr(e,t,r);break}}function Qn(e,t){if(Ot(e))e.attributes.value===void 0&&(e.value=t),window.fromModel&&(typeof t=="boolean"?e.checked=xe(e.value)===t:e.checked=Dr(e.value,t));else if(ze(e))Number.isInteger(t)?e.value=t:!Array.isArray(t)&&typeof t!="boolean"&&![null,void 0].includes(t)?e.value=String(t):Array.isArray(t)?e.checked=t.some(r=>Dr(r,e.value)):e.checked=!!t;else if(e.tagName==="SELECT")oi(e,t);else{if(e.value===t)return;e.value=t===void 0?"":t}}function ei(e,t){e._x_undoAddedClasses&&e._x_undoAddedClasses(),e._x_undoAddedClasses=me(e,t)}function ti(e,t){e._x_undoAddedStyles&&e._x_undoAddedStyles(),e._x_undoAddedStyles=X(e,t)}function ri(e,t,r){Pr(e,t,r),ii(e,t,r)}function Pr(e,t,r){[null,void 0,!1].includes(r)&&ci(t)?e.removeAttribute(t):(Ir(t)&&(r=t),ni(e,t,r))}function ni(e,t,r){e.getAttribute(t)!=r&&e.setAttribute(t,r)}function ii(e,t,r){e[t]!==r&&(e[t]=r)}function oi(e,t){let r=[].concat(t).map(n=>n+"");Array.from(e.options).forEach(n=>{n.selected=r.includes(n.value)})}function si(e){return e.toLowerCase().replace(/-(\w)/g,(t,r)=>r.toUpperCase())}function Dr(e,t){return e==t}function xe(e){return[1,"1","true","on","yes",!0].includes(e)?!0:[0,"0","false","off","no",!1].includes(e)?!1:e?Boolean(e):null}var ai=new Set(["allowfullscreen","async","autofocus","autoplay","checked","controls","default","defer","disabled","formnovalidate","inert","ismap","itemscope","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","selected","shadowrootclonable","shadowrootdelegatesfocus","shadowrootserializable"]);function Ir(e){return ai.has(e)}function ci(e){return!["aria-pressed","aria-checked","aria-expanded","aria-selected"].includes(e)}function Lr(e,t,r){return e._x_bindings&&e._x_bindings[t]!==void 0?e._x_bindings[t]:jr(e,t,r)}function $r(e,t,r,n=!0){if(e._x_bindings&&e._x_bindings[t]!==void 0)return e._x_bindings[t];if(e._x_inlineBindings&&e._x_inlineBindings[t]!==void 0){let i=e._x_inlineBindings[t];return i.extract=n,ke(()=>R(e,i.expression))}return jr(e,t,r)}function jr(e,t,r){let n=e.getAttribute(t);return n===null?typeof r=="function"?r():r:n===""?!0:Ir(t)?!![t,"true"].includes(n):n}function ze(e){return e.type==="checkbox"||e.localName==="ui-checkbox"||e.localName==="ui-switch"}function Ot(e){return e.type==="radio"||e.localName==="ui-radio"}function Ke(e,t){var r;return function(){var n=this,i=arguments,o=function(){r=null,e.apply(n,i)};clearTimeout(r),r=setTimeout(o,t)}}function He(e,t){let r;return function(){let n=this,i=arguments;r||(e.apply(n,i),r=!0,setTimeout(()=>r=!1,t))}}function Ve({get:e,set:t},{get:r,set:n}){let i=!0,o,s,a=N(()=>{let c=e(),l=r();if(i)n(Ct(c)),i=!1;else{let u=JSON.stringify(c),p=JSON.stringify(l);u!==o?n(Ct(c)):u!==p&&t(Ct(l))}o=JSON.stringify(e()),s=JSON.stringify(r())});return()=>{$(a)}}function Ct(e){return typeof e=="object"?JSON.parse(JSON.stringify(e)):e}function Fr(e){(Array.isArray(e)?e:[e]).forEach(r=>r(K))}var Z={},Br=!1;function zr(e,t){if(Br||(Z=T(Z),Br=!0),t===void 0)return Z[e];Z[e]=t,Te(Z[e]),typeof t=="object"&&t!==null&&t.hasOwnProperty("init")&&typeof t.init=="function"&&Z[e].init()}function Kr(){return Z}var Hr={};function Vr(e,t){let r=typeof t!="function"?()=>t:t;return e instanceof Element?Tt(e,r()):(Hr[e]=r,()=>{})}function qr(e){return Object.entries(Hr).forEach(([t,r])=>{Object.defineProperty(e,t,{get(){return(...n)=>r(...n)}})}),e}function Tt(e,t,r){let n=[];for(;n.length;)n.pop()();let i=Object.entries(t).map(([s,a])=>({name:s,value:a})),o=Et(i);return i=i.map(s=>o.find(a=>a.name===s.name)?{name:`x-bind:${s.name}`,value:`"${s.value}"`}:s),pe(e,i,r).map(s=>{n.push(s.runCleanups),s()}),()=>{for(;n.length;)n.pop()()}}var Ur={};function Wr(e,t){Ur[e]=t}function Gr(e,t){return Object.entries(Ur).forEach(([r,n])=>{Object.defineProperty(e,r,{get(){return(...i)=>n.bind(t)(...i)},enumerable:!1})}),e}var li={get reactive(){return T},get release(){return $},get effect(){return N},get raw(){return at},version:"3.14.8",flushAndStopDeferringMutations:nr,dontAutoEvaluateFunctions:ke,disableEffectScheduling:Gt,startObservingMutations:ue,stopObservingMutations:dt,setReactivityEngine:Jt,onAttributeRemoved:Oe,onAttributesAdded:Ae,closestDataStack:B,skipDuringClone:A,onlyDuringClone:Tr,addRootSelector:Le,addInitSelector:$e,interceptClone:H,addScopeToNode:k,deferMutations:rr,mapAttributes:ne,evaluateLater:x,interceptInit:vr,setEvaluator:ar,mergeProxies:z,extractProp:$r,findClosest:j,onElRemoved:te,closestRoot:Y,destroyTree:P,interceptor:Re,transition:Fe,setStyles:X,mutateDom:m,directive:d,entangle:Ve,throttle:He,debounce:Ke,evaluate:R,initTree:S,nextTick:ie,prefixed:C,prefix:cr,plugin:Fr,magic:y,store:zr,start:gr,clone:Nr,cloneNode:Mr,bound:Lr,$data:Ce,watch:ve,walk:D,data:Wr,bind:Vr},K=li;function Rt(e,t){let r=Object.create(null),n=e.split(",");for(let i=0;i<n.length;i++)r[n[i]]=!0;return t?i=>!!r[i.toLowerCase()]:i=>!!r[i]}var ui="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly";var Ls=Rt(ui+",async,autofocus,autoplay,controls,default,defer,disabled,hidden,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected");var Jr=Object.freeze({}),$s=Object.freeze([]);var fi=Object.prototype.hasOwnProperty,ye=(e,t)=>fi.call(e,t),V=Array.isArray,oe=e=>Yr(e)==="[object Map]";var di=e=>typeof e=="string",qe=e=>typeof e=="symbol",be=e=>e!==null&&typeof e=="object";var pi=Object.prototype.toString,Yr=e=>pi.call(e),Mt=e=>Yr(e).slice(8,-1);var Ue=e=>di(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e;var We=e=>{let t=Object.create(null);return r=>t[r]||(t[r]=e(r))},mi=/-(\w)/g,js=We(e=>e.replace(mi,(t,r)=>r?r.toUpperCase():"")),hi=/\B([A-Z])/g,Fs=We(e=>e.replace(hi,"-$1").toLowerCase()),Nt=We(e=>e.charAt(0).toUpperCase()+e.slice(1)),Bs=We(e=>e?`on${Nt(e)}`:""),kt=(e,t)=>e!==t&&(e===e||t===t);var Dt=new WeakMap,we=[],L,Q=Symbol("iterate"),Pt=Symbol("Map key iterate");function _i(e){return e&&e._isEffect===!0}function rn(e,t=Jr){_i(e)&&(e=e.raw);let r=xi(e,t);return t.lazy||r(),r}function nn(e){e.active&&(on(e),e.options.onStop&&e.options.onStop(),e.active=!1)}var gi=0;function xi(e,t){let r=function(){if(!r.active)return e();if(!we.includes(r)){on(r);try{return bi(),we.push(r),L=r,e()}finally{we.pop(),sn(),L=we[we.length-1]}}};return r.id=gi++,r.allowRecurse=!!t.allowRecurse,r._isEffect=!0,r.active=!0,r.raw=e,r.deps=[],r.options=t,r}function on(e){let{deps:t}=e;if(t.length){for(let r=0;r<t.length;r++)t[r].delete(e);t.length=0}}var se=!0,Lt=[];function yi(){Lt.push(se),se=!1}function bi(){Lt.push(se),se=!0}function sn(){let e=Lt.pop();se=e===void 0?!0:e}function M(e,t,r){if(!se||L===void 0)return;let n=Dt.get(e);n||Dt.set(e,n=new Map);let i=n.get(r);i||n.set(r,i=new Set),i.has(L)||(i.add(L),L.deps.push(i),L.options.onTrack&&L.options.onTrack({effect:L,target:e,type:t,key:r}))}function U(e,t,r,n,i,o){let s=Dt.get(e);if(!s)return;let a=new Set,c=u=>{u&&u.forEach(p=>{(p!==L||p.allowRecurse)&&a.add(p)})};if(t==="clear")s.forEach(c);else if(r==="length"&&V(e))s.forEach((u,p)=>{(p==="length"||p>=n)&&c(u)});else switch(r!==void 0&&c(s.get(r)),t){case"add":V(e)?Ue(r)&&c(s.get("length")):(c(s.get(Q)),oe(e)&&c(s.get(Pt)));break;case"delete":V(e)||(c(s.get(Q)),oe(e)&&c(s.get(Pt)));break;case"set":oe(e)&&c(s.get(Q));break}let l=u=>{u.options.onTrigger&&u.options.onTrigger({effect:u,target:e,key:r,type:t,newValue:n,oldValue:i,oldTarget:o}),u.options.scheduler?u.options.scheduler(u):u()};a.forEach(l)}var wi=Rt("__proto__,__v_isRef,__isVue"),an=new Set(Object.getOwnPropertyNames(Symbol).map(e=>Symbol[e]).filter(qe)),Ei=cn();var vi=cn(!0);var Xr=Si();function Si(){let e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...r){let n=_(this);for(let o=0,s=this.length;o<s;o++)M(n,"get",o+"");let i=n[t](...r);return i===-1||i===!1?n[t](...r.map(_)):i}}),["push","pop","shift","unshift","splice"].forEach(t=>{e[t]=function(...r){yi();let n=_(this)[t].apply(this,r);return sn(),n}}),e}function cn(e=!1,t=!1){return function(n,i,o){if(i==="__v_isReactive")return!e;if(i==="__v_isReadonly")return e;if(i==="__v_raw"&&o===(e?t?Bi:dn:t?Fi:fn).get(n))return n;let s=V(n);if(!e&&s&&ye(Xr,i))return Reflect.get(Xr,i,o);let a=Reflect.get(n,i,o);return(qe(i)?an.has(i):wi(i))||(e||M(n,"get",i),t)?a:It(a)?!s||!Ue(i)?a.value:a:be(a)?e?pn(a):et(a):a}}var Ai=Oi();function Oi(e=!1){return function(r,n,i,o){let s=r[n];if(!e&&(i=_(i),s=_(s),!V(r)&&It(s)&&!It(i)))return s.value=i,!0;let a=V(r)&&Ue(n)?Number(n)<r.length:ye(r,n),c=Reflect.set(r,n,i,o);return r===_(o)&&(a?kt(i,s)&&U(r,"set",n,i,s):U(r,"add",n,i)),c}}function Ci(e,t){let r=ye(e,t),n=e[t],i=Reflect.deleteProperty(e,t);return i&&r&&U(e,"delete",t,void 0,n),i}function Ti(e,t){let r=Reflect.has(e,t);return(!qe(t)||!an.has(t))&&M(e,"has",t),r}function Ri(e){return M(e,"iterate",V(e)?"length":Q),Reflect.ownKeys(e)}var Mi={get:Ei,set:Ai,deleteProperty:Ci,has:Ti,ownKeys:Ri},Ni={get:vi,set(e,t){return console.warn(`Set operation on key "${String(t)}" failed: target is readonly.`,e),!0},deleteProperty(e,t){return console.warn(`Delete operation on key "${String(t)}" failed: target is readonly.`,e),!0}};var $t=e=>be(e)?et(e):e,jt=e=>be(e)?pn(e):e,Ft=e=>e,Qe=e=>Reflect.getPrototypeOf(e);function Ge(e,t,r=!1,n=!1){e=e.__v_raw;let i=_(e),o=_(t);t!==o&&!r&&M(i,"get",t),!r&&M(i,"get",o);let{has:s}=Qe(i),a=n?Ft:r?jt:$t;if(s.call(i,t))return a(e.get(t));if(s.call(i,o))return a(e.get(o));e!==i&&e.get(t)}function Je(e,t=!1){let r=this.__v_raw,n=_(r),i=_(e);return e!==i&&!t&&M(n,"has",e),!t&&M(n,"has",i),e===i?r.has(e):r.has(e)||r.has(i)}function Ye(e,t=!1){return e=e.__v_raw,!t&&M(_(e),"iterate",Q),Reflect.get(e,"size",e)}function Zr(e){e=_(e);let t=_(this);return Qe(t).has.call(t,e)||(t.add(e),U(t,"add",e,e)),this}function Qr(e,t){t=_(t);let r=_(this),{has:n,get:i}=Qe(r),o=n.call(r,e);o?un(r,n,e):(e=_(e),o=n.call(r,e));let s=i.call(r,e);return r.set(e,t),o?kt(t,s)&&U(r,"set",e,t,s):U(r,"add",e,t),this}function en(e){let t=_(this),{has:r,get:n}=Qe(t),i=r.call(t,e);i?un(t,r,e):(e=_(e),i=r.call(t,e));let o=n?n.call(t,e):void 0,s=t.delete(e);return i&&U(t,"delete",e,void 0,o),s}function tn(){let e=_(this),t=e.size!==0,r=oe(e)?new Map(e):new Set(e),n=e.clear();return t&&U(e,"clear",void 0,void 0,r),n}function Xe(e,t){return function(n,i){let o=this,s=o.__v_raw,a=_(s),c=t?Ft:e?jt:$t;return!e&&M(a,"iterate",Q),s.forEach((l,u)=>n.call(i,c(l),c(u),o))}}function Ze(e,t,r){return function(...n){let i=this.__v_raw,o=_(i),s=oe(o),a=e==="entries"||e===Symbol.iterator&&s,c=e==="keys"&&s,l=i[e](...n),u=r?Ft:t?jt:$t;return!t&&M(o,"iterate",c?Pt:Q),{next(){let{value:p,done:h}=l.next();return h?{value:p,done:h}:{value:a?[u(p[0]),u(p[1])]:u(p),done:h}},[Symbol.iterator](){return this}}}}function q(e){return function(...t){{let r=t[0]?`on key "${t[0]}" `:"";console.warn(`${Nt(e)} operation ${r}failed: target is readonly.`,_(this))}return e==="delete"?!1:this}}function ki(){let e={get(o){return Ge(this,o)},get size(){return Ye(this)},has:Je,add:Zr,set:Qr,delete:en,clear:tn,forEach:Xe(!1,!1)},t={get(o){return Ge(this,o,!1,!0)},get size(){return Ye(this)},has:Je,add:Zr,set:Qr,delete:en,clear:tn,forEach:Xe(!1,!0)},r={get(o){return Ge(this,o,!0)},get size(){return Ye(this,!0)},has(o){return Je.call(this,o,!0)},add:q("add"),set:q("set"),delete:q("delete"),clear:q("clear"),forEach:Xe(!0,!1)},n={get(o){return Ge(this,o,!0,!0)},get size(){return Ye(this,!0)},has(o){return Je.call(this,o,!0)},add:q("add"),set:q("set"),delete:q("delete"),clear:q("clear"),forEach:Xe(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=Ze(o,!1,!1),r[o]=Ze(o,!0,!1),t[o]=Ze(o,!1,!0),n[o]=Ze(o,!0,!0)}),[e,r,t,n]}var[Di,Pi,Ii,Li]=ki();function ln(e,t){let r=t?e?Li:Ii:e?Pi:Di;return(n,i,o)=>i==="__v_isReactive"?!e:i==="__v_isReadonly"?e:i==="__v_raw"?n:Reflect.get(ye(r,i)&&i in n?r:n,i,o)}var $i={get:ln(!1,!1)};var ji={get:ln(!0,!1)};function un(e,t,r){let n=_(r);if(n!==r&&t.call(e,n)){let i=Mt(e);console.warn(`Reactive ${i} contains both the raw and reactive versions of the same object${i==="Map"?" as keys":""}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`)}}var fn=new WeakMap,Fi=new WeakMap,dn=new WeakMap,Bi=new WeakMap;function zi(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Ki(e){return e.__v_skip||!Object.isExtensible(e)?0:zi(Mt(e))}function et(e){return e&&e.__v_isReadonly?e:mn(e,!1,Mi,$i,fn)}function pn(e){return mn(e,!0,Ni,ji,dn)}function mn(e,t,r,n,i){if(!be(e))return console.warn(`value cannot be made reactive: ${String(e)}`),e;if(e.__v_raw&&!(t&&e.__v_isReactive))return e;let o=i.get(e);if(o)return o;let s=Ki(e);if(s===0)return e;let a=new Proxy(e,s===2?n:r);return i.set(e,a),a}function _(e){return e&&_(e.__v_raw)||e}function It(e){return Boolean(e&&e.__v_isRef===!0)}y("nextTick",()=>ie);y("dispatch",e=>J.bind(J,e));y("watch",(e,{evaluateLater:t,cleanup:r})=>(n,i)=>{let o=t(n),a=ve(()=>{let c;return o(l=>c=l),c},i);r(a)});y("store",Kr);y("data",e=>Ce(e));y("root",e=>Y(e));y("refs",e=>(e._x_refs_proxy||(e._x_refs_proxy=z(Hi(e))),e._x_refs_proxy));function Hi(e){let t=[];return j(e,r=>{r._x_refs&&t.push(r._x_refs)}),t}var Bt={};function zt(e){return Bt[e]||(Bt[e]=0),++Bt[e]}function hn(e,t){return j(e,r=>{if(r._x_ids&&r._x_ids[t])return!0})}function _n(e,t){e._x_ids||(e._x_ids={}),e._x_ids[t]||(e._x_ids[t]=zt(t))}y("id",(e,{cleanup:t})=>(r,n=null)=>{let i=`${r}${n?`-${n}`:""}`;return Vi(e,i,t,()=>{let o=hn(e,r),s=o?o._x_ids[r]:zt(r);return n?`${r}-${s}-${n}`:`${r}-${s}`})});H((e,t)=>{e._x_id&&(t._x_id=e._x_id)});function Vi(e,t,r,n){if(e._x_id||(e._x_id={}),e._x_id[t])return e._x_id[t];let i=n();return e._x_id[t]=i,r(()=>{delete e._x_id[t]}),i}y("el",e=>e);gn("Focus","focus","focus");gn("Persist","persist","persist");function gn(e,t,r){y(t,n=>E(`You can't use [$${t}] without first installing the "${e}" plugin here: https://alpinejs.dev/plugins/${r}`,n))}d("modelable",(e,{expression:t},{effect:r,evaluateLater:n,cleanup:i})=>{let o=n(t),s=()=>{let u;return o(p=>u=p),u},a=n(`${t} = __placeholder`),c=u=>a(()=>{},{scope:{__placeholder:u}}),l=s();c(l),queueMicrotask(()=>{if(!e._x_model)return;e._x_removeModelListeners.default();let u=e._x_model.get,p=e._x_model.set,h=Ve({get(){return u()},set(w){p(w)}},{get(){return s()},set(w){c(w)}});i(h)})});d("teleport",(e,{modifiers:t,expression:r},{cleanup:n})=>{e.tagName.toLowerCase()!=="template"&&E("x-teleport can only be used on a <template> tag",e);let i=xn(r),o=e.content.cloneNode(!0).firstElementChild;e._x_teleport=o,o._x_teleportBack=e,e.setAttribute("data-teleport-template",!0),o.setAttribute("data-teleport-target",!0),e._x_forwardEvents&&e._x_forwardEvents.forEach(a=>{o.addEventListener(a,c=>{c.stopPropagation(),e.dispatchEvent(new c.constructor(c.type,c))})}),k(o,{},e);let s=(a,c,l)=>{l.includes("prepend")?c.parentNode.insertBefore(a,c):l.includes("append")?c.parentNode.insertBefore(a,c.nextSibling):c.appendChild(a)};m(()=>{s(o,i,t),A(()=>{S(o)})()}),e._x_teleportPutBack=()=>{let a=xn(r);m(()=>{s(e._x_teleport,a,t)})},n(()=>m(()=>{o.remove(),P(o)}))});var qi=document.createElement("div");function xn(e){let t=A(()=>document.querySelector(e),()=>qi)();return t||E(`Cannot find x-teleport element for selector: "${e}"`),t}var yn=()=>{};yn.inline=(e,{modifiers:t},{cleanup:r})=>{t.includes("self")?e._x_ignoreSelf=!0:e._x_ignore=!0,r(()=>{t.includes("self")?delete e._x_ignoreSelf:delete e._x_ignore})};d("ignore",yn);d("effect",A((e,{expression:t},{effect:r})=>{r(x(e,t))}));function ae(e,t,r,n){let i=e,o=c=>n(c),s={},a=(c,l)=>u=>l(c,u);if(r.includes("dot")&&(t=Ui(t)),r.includes("camel")&&(t=Wi(t)),r.includes("passive")&&(s.passive=!0),r.includes("capture")&&(s.capture=!0),r.includes("window")&&(i=window),r.includes("document")&&(i=document),r.includes("debounce")){let c=r[r.indexOf("debounce")+1]||"invalid-wait",l=tt(c.split("ms")[0])?Number(c.split("ms")[0]):250;o=Ke(o,l)}if(r.includes("throttle")){let c=r[r.indexOf("throttle")+1]||"invalid-wait",l=tt(c.split("ms")[0])?Number(c.split("ms")[0]):250;o=He(o,l)}return r.includes("prevent")&&(o=a(o,(c,l)=>{l.preventDefault(),c(l)})),r.includes("stop")&&(o=a(o,(c,l)=>{l.stopPropagation(),c(l)})),r.includes("once")&&(o=a(o,(c,l)=>{c(l),i.removeEventListener(t,o,s)})),(r.includes("away")||r.includes("outside"))&&(i=document,o=a(o,(c,l)=>{e.contains(l.target)||l.target.isConnected!==!1&&(e.offsetWidth<1&&e.offsetHeight<1||e._x_isShown!==!1&&c(l))})),r.includes("self")&&(o=a(o,(c,l)=>{l.target===e&&c(l)})),(Ji(t)||wn(t))&&(o=a(o,(c,l)=>{Yi(l,r)||c(l)})),i.addEventListener(t,o,s),()=>{i.removeEventListener(t,o,s)}}function Ui(e){return e.replace(/-/g,".")}function Wi(e){return e.toLowerCase().replace(/-(\w)/g,(t,r)=>r.toUpperCase())}function tt(e){return!Array.isArray(e)&&!isNaN(e)}function Gi(e){return[" ","_"].includes(e)?e:e.replace(/([a-z])([A-Z])/g,"$1-$2").replace(/[_\s]/,"-").toLowerCase()}function Ji(e){return["keydown","keyup"].includes(e)}function wn(e){return["contextmenu","click","mouse"].some(t=>e.includes(t))}function Yi(e,t){let r=t.filter(o=>!["window","document","prevent","stop","once","capture","self","away","outside","passive"].includes(o));if(r.includes("debounce")){let o=r.indexOf("debounce");r.splice(o,tt((r[o+1]||"invalid-wait").split("ms")[0])?2:1)}if(r.includes("throttle")){let o=r.indexOf("throttle");r.splice(o,tt((r[o+1]||"invalid-wait").split("ms")[0])?2:1)}if(r.length===0||r.length===1&&bn(e.key).includes(r[0]))return!1;let i=["ctrl","shift","alt","meta","cmd","super"].filter(o=>r.includes(o));return r=r.filter(o=>!i.includes(o)),!(i.length>0&&i.filter(s=>((s==="cmd"||s==="super")&&(s="meta"),e[`${s}Key`])).length===i.length&&(wn(e.type)||bn(e.key).includes(r[0])))}function bn(e){if(!e)return[];e=Gi(e);let t={ctrl:"control",slash:"/",space:" ",spacebar:" ",cmd:"meta",esc:"escape",up:"arrow-up",down:"arrow-down",left:"arrow-left",right:"arrow-right",period:".",comma:",",equal:"=",minus:"-",underscore:"_"};return t[e]=e,Object.keys(t).map(r=>{if(t[r]===e)return r}).filter(r=>r)}d("model",(e,{modifiers:t,expression:r},{effect:n,cleanup:i})=>{let o=e;t.includes("parent")&&(o=e.parentNode);let s=x(o,r),a;typeof r=="string"?a=x(o,`${r} = __placeholder`):typeof r=="function"&&typeof r()=="string"?a=x(o,`${r()} = __placeholder`):a=()=>{};let c=()=>{let h;return s(w=>h=w),En(h)?h.get():h},l=h=>{let w;s(F=>w=F),En(w)?w.set(h):a(()=>{},{scope:{__placeholder:h}})};typeof r=="string"&&e.type==="radio"&&m(()=>{e.hasAttribute("name")||e.setAttribute("name",r)});var u=e.tagName.toLowerCase()==="select"||["checkbox","radio"].includes(e.type)||t.includes("lazy")?"change":"input";let p=I?()=>{}:ae(e,u,t,h=>{l(Kt(e,t,h,c()))});if(t.includes("fill")&&([void 0,null,""].includes(c())||ze(e)&&Array.isArray(c())||e.tagName.toLowerCase()==="select"&&e.multiple)&&l(Kt(e,t,{target:e},c())),e._x_removeModelListeners||(e._x_removeModelListeners={}),e._x_removeModelListeners.default=p,i(()=>e._x_removeModelListeners.default()),e.form){let h=ae(e.form,"reset",[],w=>{ie(()=>e._x_model&&e._x_model.set(Kt(e,t,{target:e},c())))});i(()=>h())}e._x_model={get(){return c()},set(h){l(h)}},e._x_forceModelUpdate=h=>{h===void 0&&typeof r=="string"&&r.match(/\./)&&(h=""),window.fromModel=!0,m(()=>ge(e,"value",h)),delete window.fromModel},n(()=>{let h=c();t.includes("unintrusive")&&document.activeElement.isSameNode(e)||e._x_forceModelUpdate(h)})});function Kt(e,t,r,n){return m(()=>{if(r instanceof CustomEvent&&r.detail!==void 0)return r.detail!==null&&r.detail!==void 0?r.detail:r.target.value;if(ze(e))if(Array.isArray(n)){let i=null;return t.includes("number")?i=Ht(r.target.value):t.includes("boolean")?i=xe(r.target.value):i=r.target.value,r.target.checked?n.includes(i)?n:n.concat([i]):n.filter(o=>!Xi(o,i))}else return r.target.checked;else{if(e.tagName.toLowerCase()==="select"&&e.multiple)return t.includes("number")?Array.from(r.target.selectedOptions).map(i=>{let o=i.value||i.text;return Ht(o)}):t.includes("boolean")?Array.from(r.target.selectedOptions).map(i=>{let o=i.value||i.text;return xe(o)}):Array.from(r.target.selectedOptions).map(i=>i.value||i.text);{let i;return Ot(e)?r.target.checked?i=r.target.value:i=n:i=r.target.value,t.includes("number")?Ht(i):t.includes("boolean")?xe(i):t.includes("trim")?i.trim():i}}})}function Ht(e){let t=e?parseFloat(e):null;return Zi(t)?t:e}function Xi(e,t){return e==t}function Zi(e){return!Array.isArray(e)&&!isNaN(e)}function En(e){return e!==null&&typeof e=="object"&&typeof e.get=="function"&&typeof e.set=="function"}d("cloak",e=>queueMicrotask(()=>m(()=>e.removeAttribute(C("cloak")))));$e(()=>`[${C("init")}]`);d("init",A((e,{expression:t},{evaluate:r})=>typeof t=="string"?!!t.trim()&&r(t,{},!1):r(t,{},!1)));d("text",(e,{expression:t},{effect:r,evaluateLater:n})=>{let i=n(t);r(()=>{i(o=>{m(()=>{e.textContent=o})})})});d("html",(e,{expression:t},{effect:r,evaluateLater:n})=>{let i=n(t);r(()=>{i(o=>{m(()=>{e.innerHTML=o,e._x_ignoreSelf=!0,S(e),delete e._x_ignoreSelf})})})});ne(Pe(":",Ie(C("bind:"))));var vn=(e,{value:t,modifiers:r,expression:n,original:i},{effect:o,cleanup:s})=>{if(!t){let c={};qr(c),x(e,n)(u=>{Tt(e,u,i)},{scope:c});return}if(t==="key")return Qi(e,n);if(e._x_inlineBindings&&e._x_inlineBindings[t]&&e._x_inlineBindings[t].extract)return;let a=x(e,n);o(()=>a(c=>{c===void 0&&typeof n=="string"&&n.match(/\./)&&(c=""),m(()=>ge(e,t,c,r))})),s(()=>{e._x_undoAddedClasses&&e._x_undoAddedClasses(),e._x_undoAddedStyles&&e._x_undoAddedStyles()})};vn.inline=(e,{value:t,modifiers:r,expression:n})=>{t&&(e._x_inlineBindings||(e._x_inlineBindings={}),e._x_inlineBindings[t]={expression:n,extract:!1})};d("bind",vn);function Qi(e,t){e._x_keyExpression=t}Le(()=>`[${C("data")}]`);d("data",(e,{expression:t},{cleanup:r})=>{if(eo(e))return;t=t===""?"{}":t;let n={};fe(n,e);let i={};Gr(i,n);let o=R(e,t,{scope:i});(o===void 0||o===!0)&&(o={}),fe(o,e);let s=T(o);Te(s);let a=k(e,s);s.init&&R(e,s.init),r(()=>{s.destroy&&R(e,s.destroy),a()})});H((e,t)=>{e._x_dataStack&&(t._x_dataStack=e._x_dataStack,t.setAttribute("data-has-alpine-state",!0))});function eo(e){return I?Be?!0:e.hasAttribute("data-has-alpine-state"):!1}d("show",(e,{modifiers:t,expression:r},{effect:n})=>{let i=x(e,r);e._x_doHide||(e._x_doHide=()=>{m(()=>{e.style.setProperty("display","none",t.includes("important")?"important":void 0)})}),e._x_doShow||(e._x_doShow=()=>{m(()=>{e.style.length===1&&e.style.display==="none"?e.removeAttribute("style"):e.style.removeProperty("display")})});let o=()=>{e._x_doHide(),e._x_isShown=!1},s=()=>{e._x_doShow(),e._x_isShown=!0},a=()=>setTimeout(s),c=he(p=>p?s():o(),p=>{typeof e._x_toggleAndCascadeWithTransitions=="function"?e._x_toggleAndCascadeWithTransitions(e,p,s,o):p?a():o()}),l,u=!0;n(()=>i(p=>{!u&&p===l||(t.includes("immediate")&&(p?a():o()),c(p),l=p,u=!1)}))});d("for",(e,{expression:t},{effect:r,cleanup:n})=>{let i=ro(t),o=x(e,i.items),s=x(e,e._x_keyExpression||"index");e._x_prevKeys=[],e._x_lookup={},r(()=>to(e,i,o,s)),n(()=>{Object.values(e._x_lookup).forEach(a=>m(()=>{P(a),a.remove()})),delete e._x_prevKeys,delete e._x_lookup})});function to(e,t,r,n){let i=s=>typeof s=="object"&&!Array.isArray(s),o=e;r(s=>{no(s)&&s>=0&&(s=Array.from(Array(s).keys(),f=>f+1)),s===void 0&&(s=[]);let a=e._x_lookup,c=e._x_prevKeys,l=[],u=[];if(i(s))s=Object.entries(s).map(([f,g])=>{let b=Sn(t,g,f,s);n(v=>{u.includes(v)&&E("Duplicate key on x-for",e),u.push(v)},{scope:{index:f,...b}}),l.push(b)});else for(let f=0;f<s.length;f++){let g=Sn(t,s[f],f,s);n(b=>{u.includes(b)&&E("Duplicate key on x-for",e),u.push(b)},{scope:{index:f,...g}}),l.push(g)}let p=[],h=[],w=[],F=[];for(let f=0;f<c.length;f++){let g=c[f];u.indexOf(g)===-1&&w.push(g)}c=c.filter(f=>!w.includes(f));let Ee="template";for(let f=0;f<u.length;f++){let g=u[f],b=c.indexOf(g);if(b===-1)c.splice(f,0,g),p.push([Ee,f]);else if(b!==f){let v=c.splice(f,1)[0],O=c.splice(b-1,1)[0];c.splice(f,0,O),c.splice(b,0,v),h.push([v,O])}else F.push(g);Ee=g}for(let f=0;f<w.length;f++){let g=w[f];g in a&&(m(()=>{P(a[g]),a[g].remove()}),delete a[g])}for(let f=0;f<h.length;f++){let[g,b]=h[f],v=a[g],O=a[b],ee=document.createElement("div");m(()=>{O||E('x-for ":key" is undefined or invalid',o,b,a),O.after(ee),v.after(O),O._x_currentIfEl&&O.after(O._x_currentIfEl),ee.before(v),v._x_currentIfEl&&v.after(v._x_currentIfEl),ee.remove()}),O._x_refreshXForScope(l[u.indexOf(b)])}for(let f=0;f<p.length;f++){let[g,b]=p[f],v=g==="template"?o:a[g];v._x_currentIfEl&&(v=v._x_currentIfEl);let O=l[b],ee=u[b],ce=document.importNode(o.content,!0).firstElementChild,qt=T(O);k(ce,qt,o),ce._x_refreshXForScope=On=>{Object.entries(On).forEach(([Cn,Tn])=>{qt[Cn]=Tn})},m(()=>{v.after(ce),A(()=>S(ce))()}),typeof ee=="object"&&E("x-for key cannot be an object, it must be a string or an integer",o),a[ee]=ce}for(let f=0;f<F.length;f++)a[F[f]]._x_refreshXForScope(l[u.indexOf(F[f])]);o._x_prevKeys=u})}function ro(e){let t=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,r=/^\s*\(|\)\s*$/g,n=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,i=e.match(n);if(!i)return;let o={};o.items=i[2].trim();let s=i[1].replace(r,"").trim(),a=s.match(t);return a?(o.item=s.replace(t,"").trim(),o.index=a[1].trim(),a[2]&&(o.collection=a[2].trim())):o.item=s,o}function Sn(e,t,r,n){let i={};return/^\[.*\]$/.test(e.item)&&Array.isArray(t)?e.item.replace("[","").replace("]","").split(",").map(s=>s.trim()).forEach((s,a)=>{i[s]=t[a]}):/^\{.*\}$/.test(e.item)&&!Array.isArray(t)&&typeof t=="object"?e.item.replace("{","").replace("}","").split(",").map(s=>s.trim()).forEach(s=>{i[s]=t[s]}):i[e.item]=t,e.index&&(i[e.index]=r),e.collection&&(i[e.collection]=n),i}function no(e){return!Array.isArray(e)&&!isNaN(e)}function An(){}An.inline=(e,{expression:t},{cleanup:r})=>{let n=Y(e);n._x_refs||(n._x_refs={}),n._x_refs[t]=e,r(()=>delete n._x_refs[t])};d("ref",An);d("if",(e,{expression:t},{effect:r,cleanup:n})=>{e.tagName.toLowerCase()!=="template"&&E("x-if can only be used on a <template> tag",e);let i=x(e,t),o=()=>{if(e._x_currentIfEl)return e._x_currentIfEl;let a=e.content.cloneNode(!0).firstElementChild;return k(a,{},e),m(()=>{e.after(a),A(()=>S(a))()}),e._x_currentIfEl=a,e._x_undoIf=()=>{m(()=>{P(a),a.remove()}),delete e._x_currentIfEl},a},s=()=>{e._x_undoIf&&(e._x_undoIf(),delete e._x_undoIf)};r(()=>i(a=>{a?o():s()})),n(()=>e._x_undoIf&&e._x_undoIf())});d("id",(e,{expression:t},{evaluate:r})=>{r(t).forEach(i=>_n(e,i))});H((e,t)=>{e._x_ids&&(t._x_ids=e._x_ids)});ne(Pe("@",Ie(C("on:"))));d("on",A((e,{value:t,modifiers:r,expression:n},{cleanup:i})=>{let o=n?x(e,n):()=>{};e.tagName.toLowerCase()==="template"&&(e._x_forwardEvents||(e._x_forwardEvents=[]),e._x_forwardEvents.includes(t)||e._x_forwardEvents.push(t));let s=ae(e,t,r,a=>{o(()=>{},{scope:{$event:a},params:[a]})});i(()=>s())}));rt("Collapse","collapse","collapse");rt("Intersect","intersect","intersect");rt("Focus","trap","focus");rt("Mask","mask","mask");function rt(e,t,r){d(t,n=>E(`You can't use [x-${t}] without first installing the "${e}" plugin here: https://alpinejs.dev/plugins/${r}`,n))}K.setEvaluator(xt);K.setReactivityEngine({reactive:et,effect:rn,release:nn,raw:_});var Vt=K;window.Alpine=Vt;queueMicrotask(()=>{Vt.start()});})();6 `:""}`,e),setTimeout(()=>{throw t},0)}var at=!0;function kt(t){let e=at;at=!1;let r=t();return at=e,r}function N(t,e,r={}){let n;return x(t,e)(i=>n=i,r),n}function x(...t){return pr(...t)}var pr=be;function mr(t){pr=t}var hr;function _r(t){hr=t}function be(t,e){let r={};q(r,t);let n=[r,...H(t)],i=typeof e=="function"?Gn(n,e):Yn(n,e,t);return ur.bind(null,t,e,i)}function Gn(t,e){return(r=()=>{},{scope:n={},params:i=[],context:o}={})=>{if(!at){ht(r,e,I([n,...t]),i);return}let s=e.apply(I([n,...t]),i);ht(r,s)}}var ye={};function Jn(t,e){if(ye[t])return ye[t];let r=Object.getPrototypeOf(async function(){}).constructor,n=/^[\n\s]*if.*\(.*\)/.test(t.trim())||/^(let|const)\s/.test(t.trim())?`(async()=>{ ${t} })()`:t,o=(()=>{try{let s=new r(["__self","scope"],`with (scope) { __self.result = ${n} }; __self.finished = true; return __self.result;`);return Object.defineProperty(s,"name",{value:`[Alpine] ${t}`}),s}catch(s){return st(s,e,t),Promise.resolve()}})();return ye[t]=o,o}function Yn(t,e,r){let n=Jn(e,r);return(i=()=>{},{scope:o={},params:s=[],context:a}={})=>{n.result=void 0,n.finished=!1;let c=I([o,...t]);if(typeof n=="function"){let l=n.call(a,n,c).catch(u=>st(u,r,e));n.finished?(ht(i,n.result,c,s,r),n.result=void 0):l.then(u=>{ht(i,u,c,s,r)}).catch(u=>st(u,r,e)).finally(()=>n.result=void 0)}}}function ht(t,e,r,n,i){if(at&&typeof e=="function"){let o=e.apply(r,n);o instanceof Promise?o.then(s=>ht(t,s,r,n)).catch(s=>st(s,i,e)):t(o)}else typeof e=="object"&&e instanceof Promise?e.then(o=>t(o)):t(e)}function gr(...t){return hr(...t)}function xr(t,e,r={}){let n={};q(n,t);let i=[n,...H(t)],o=I([r.scope??{},...i]),s=r.params??[];if(e.includes("await")){let a=Object.getPrototypeOf(async function(){}).constructor,c=/^[\n\s]*if.*\(.*\)/.test(e.trim())||/^(let|const)\s/.test(e.trim())?`(async()=>{ ${e} })()`:e;return new a(["scope"],`with (scope) { let __result = ${c}; return __result }`).call(r.context,o)}else{let a=/^[\n\s]*if.*\(.*\)/.test(e.trim())||/^(let|const)\s/.test(e.trim())?`(()=>{ ${e} })()`:e,l=new Function(["scope"],`with (scope) { let __result = ${a}; return __result }`).call(r.context,o);return typeof l=="function"&&at?l.apply(o,s):l}}var ve="x-";function T(t=""){return ve+t}function yr(t){ve=t}var Dt={};function d(t,e){return Dt[t]=e,{before(r){if(!Dt[r]){console.warn(String.raw`Cannot find directive \`${r}\`. \`${t}\` will use the default order of execution`);return}let n=X.indexOf(r);X.splice(n>=0?n:X.indexOf("DEFAULT"),0,t)}}}function br(t){return Object.keys(Dt).includes(t)}function gt(t,e,r){if(e=Array.from(e),t._x_virtualDirectives){let o=Object.entries(t._x_virtualDirectives).map(([a,c])=>({name:a,value:c})),s=Se(o);o=o.map(a=>s.find(c=>c.name===a.name)?{name:`x-bind:${a.name}`,value:`"${a.value}"`}:a),e=e.concat(o)}let n={};return e.map(vr((o,s)=>n[o]=s)).filter(Ar).map(Zn(n,r)).sort(Qn).map(o=>Xn(t,o))}function Se(t){return Array.from(t).map(vr()).filter(e=>!Ar(e))}var we=!1,_t=new Map,wr=Symbol();function Er(t){we=!0;let e=Symbol();wr=e,_t.set(e,[]);let r=()=>{for(;_t.get(e).length;)_t.get(e).shift()();_t.delete(e)},n=()=>{we=!1,r()};t(r),n()}function xe(t){let e=[],r=a=>e.push(a),[n,i]=tr(t);return e.push(i),[{Alpine:K,effect:n,cleanup:r,evaluateLater:x.bind(x,t),evaluate:N.bind(N,t)},()=>e.forEach(a=>a())]}function Xn(t,e){let r=()=>{},n=Dt[e.type]||r,[i,o]=xe(t);Rt(t,e.original,o);let s=()=>{t._x_ignore||t._x_ignoreSelf||(n.inline&&n.inline(t,e,i),n=n.bind(n,t,e,i),we?_t.get(wr).push(n):n())};return s.runCleanups=o,s}var Pt=(t,e)=>({name:r,value:n})=>(r.startsWith(t)&&(r=r.replace(t,e)),{name:r,value:n}),It=t=>t;function vr(t=()=>{}){return({name:e,value:r})=>{let{name:n,value:i}=Sr.reduce((o,s)=>s(o),{name:e,value:r});return n!==e&&t(n,e),{name:n,value:i}}}var Sr=[];function ct(t){Sr.push(t)}function Ar({name:t}){return Or().test(t)}var Or=()=>new RegExp(`^${ve}([^:^.]+)\\b`);function Zn(t,e){return({name:r,value:n})=>{r===n&&(n="");let i=r.match(Or()),o=r.match(/:([a-zA-Z0-9\-_:]+)/),s=r.match(/\.[^.\]]+(?=[^\]]*$)/g)||[],a=e||t[r]||r;return{type:i?i[1]:null,value:o?o[1]:null,modifiers:s.map(c=>c.replace(".","")),expression:n,original:a}}}var Ee="DEFAULT",X=["ignore","ref","data","id","anchor","bind","init","for","model","modelable","transition","show","if",Ee,"teleport"];function Qn(t,e){let r=X.indexOf(t.type)===-1?Ee:t.type,n=X.indexOf(e.type)===-1?Ee:e.type;return X.indexOf(r)-X.indexOf(n)}function Z(t,e,r={}){t.dispatchEvent(new CustomEvent(e,{detail:r,bubbles:!0,composed:!0,cancelable:!0}))}function $(t,e){if(typeof ShadowRoot=="function"&&t instanceof ShadowRoot){Array.from(t.children).forEach(i=>$(i,e));return}let r=!1;if(e(t,()=>r=!0),r)return;let n=t.firstElementChild;for(;n;)$(n,e,!1),n=n.nextElementSibling}function w(t,...e){console.warn(`Alpine Warning: ${t}`,...e)}var Cr=!1;function Tr(){Cr&&w("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems."),Cr=!0,document.body||w("Unable to initialize. Trying to load Alpine before `<body>` is available. Did you forget to add `defer` in Alpine's `<script>` tag?"),Z(document,"alpine:init"),Z(document,"alpine:initializing"),mt(),or(e=>S(e,$)),it(e=>j(e)),Tt((e,r)=>{gt(e,r).forEach(n=>n())});let t=e=>!Q(e.parentElement,!0);Array.from(document.querySelectorAll(Nr().join(","))).filter(t).forEach(e=>{S(e)}),Z(document,"alpine:initialized"),setTimeout(()=>{ei()})}var Ae=[],Rr=[];function Mr(){return Ae.map(t=>t())}function Nr(){return Ae.concat(Rr).map(t=>t())}function $t(t){Ae.push(t)}function Lt(t){Rr.push(t)}function Q(t,e=!1){return L(t,r=>{if((e?Nr():Mr()).some(i=>r.matches(i)))return!0})}function L(t,e){if(t){if(e(t))return t;if(t._x_teleportBack&&(t=t._x_teleportBack),t.parentNode instanceof ShadowRoot)return L(t.parentNode.host,e);if(t.parentElement)return L(t.parentElement,e)}}function kr(t){return Mr().some(e=>t.matches(e))}var Dr=[];function Pr(t){Dr.push(t)}var ti=1;function S(t,e=$,r=()=>{}){L(t,n=>n._x_ignore)||Er(()=>{e(t,(n,i)=>{n._x_marker||(r(n,i),Dr.forEach(o=>o(n,i)),gt(n,n.attributes).forEach(o=>o()),n._x_ignore||(n._x_marker=ti++),n._x_ignore&&i())})})}function j(t,e=$){e(t,r=>{sr(r),fe(r),delete r._x_marker})}function ei(){[["ui","dialog",["[x-dialog], [x-popover]"]],["anchor","anchor",["[x-anchor]"]],["sort","sort",["[x-sort]"]]].forEach(([e,r,n])=>{br(r)||n.some(i=>{if(document.querySelector(i))return w(`found "${i}", but missing ${e} plugin`),!0})})}var Oe=[],Ce=!1;function lt(t=()=>{}){return queueMicrotask(()=>{Ce||setTimeout(()=>{jt()})}),new Promise(e=>{Oe.push(()=>{t(),e()})})}function jt(){for(Ce=!1;Oe.length;)Oe.shift()()}function Ir(){Ce=!0}function xt(t,e){return Array.isArray(e)?$r(t,e.join(" ")):typeof e=="object"&&e!==null?ri(t,e):typeof e=="function"?xt(t,e()):$r(t,e)}function $r(t,e){let r=o=>o.split(" ").filter(Boolean),n=o=>o.split(" ").filter(s=>!t.classList.contains(s)).filter(Boolean),i=o=>(t.classList.add(...o),()=>{t.classList.remove(...o)});return e=e===!0?e="":e||"",i(n(e))}function ri(t,e){let r=a=>a.split(" ").filter(Boolean),n=Object.entries(e).flatMap(([a,c])=>c?r(a):!1).filter(Boolean),i=Object.entries(e).flatMap(([a,c])=>c?!1:r(a)).filter(Boolean),o=[],s=[];return i.forEach(a=>{t.classList.contains(a)&&(t.classList.remove(a),s.push(a))}),n.forEach(a=>{t.classList.contains(a)||(t.classList.add(a),o.push(a))}),()=>{s.forEach(a=>t.classList.add(a)),o.forEach(a=>t.classList.remove(a))}}function tt(t,e){return typeof e=="object"&&e!==null?ni(t,e):ii(t,e)}function ni(t,e){let r={};return Object.entries(e).forEach(([n,i])=>{r[n]=t.style[n],n.startsWith("--")||(n=oi(n)),t.style.setProperty(n,i)}),setTimeout(()=>{t.style.length===0&&t.removeAttribute("style")}),()=>{tt(t,r)}}function ii(t,e){let r=t.getAttribute("style",e);return t.setAttribute("style",e),()=>{t.setAttribute("style",r||"")}}function oi(t){return t.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function yt(t,e=()=>{}){let r=!1;return function(){r?e.apply(this,arguments):(r=!0,t.apply(this,arguments))}}d("transition",(t,{value:e,modifiers:r,expression:n},{evaluate:i})=>{typeof n=="function"&&(n=i(n)),n!==!1&&(!n||typeof n=="boolean"?ai(t,r,e):si(t,n,e))});function si(t,e,r){Lr(t,xt,""),{enter:i=>{t._x_transition.enter.during=i},"enter-start":i=>{t._x_transition.enter.start=i},"enter-end":i=>{t._x_transition.enter.end=i},leave:i=>{t._x_transition.leave.during=i},"leave-start":i=>{t._x_transition.leave.start=i},"leave-end":i=>{t._x_transition.leave.end=i}}[r](e)}function ai(t,e,r){Lr(t,tt);let n=!e.includes("in")&&!e.includes("out")&&!r,i=n||e.includes("in")||["enter"].includes(r),o=n||e.includes("out")||["leave"].includes(r);e.includes("in")&&!n&&(e=e.filter((h,b)=>b<e.indexOf("out"))),e.includes("out")&&!n&&(e=e.filter((h,b)=>b>e.indexOf("out")));let s=!e.includes("opacity")&&!e.includes("scale"),a=s||e.includes("opacity"),c=s||e.includes("scale"),l=a?0:1,u=c?bt(e,"scale",95)/100:1,p=bt(e,"delay",0)/1e3,v=bt(e,"origin","center"),O="opacity, transform",R=bt(e,"duration",150)/1e3,_=bt(e,"duration",75)/1e3,f="cubic-bezier(0.4, 0.0, 0.2, 1)";i&&(t._x_transition.enter.during={transformOrigin:v,transitionDelay:`${p}s`,transitionProperty:O,transitionDuration:`${R}s`,transitionTimingFunction:f},t._x_transition.enter.start={opacity:l,transform:`scale(${u})`},t._x_transition.enter.end={opacity:1,transform:"scale(1)"}),o&&(t._x_transition.leave.during={transformOrigin:v,transitionDelay:`${p}s`,transitionProperty:O,transitionDuration:`${_}s`,transitionTimingFunction:f},t._x_transition.leave.start={opacity:1,transform:"scale(1)"},t._x_transition.leave.end={opacity:l,transform:`scale(${u})`})}function Lr(t,e,r={}){t._x_transition||(t._x_transition={enter:{during:r,start:r,end:r},leave:{during:r,start:r,end:r},in(n=()=>{},i=()=>{}){Ft(t,e,{during:this.enter.during,start:this.enter.start,end:this.enter.end},n,i)},out(n=()=>{},i=()=>{}){Ft(t,e,{during:this.leave.during,start:this.leave.start,end:this.leave.end},n,i)}})}window.Element.prototype._x_toggleAndCascadeWithTransitions=function(t,e,r,n){let i=document.visibilityState==="visible"?requestAnimationFrame:setTimeout,o=()=>i(r);if(e){t._x_transition&&(t._x_transition.enter||t._x_transition.leave)?t._x_transition.enter&&(Object.entries(t._x_transition.enter.during).length||Object.entries(t._x_transition.enter.start).length||Object.entries(t._x_transition.enter.end).length)?t._x_transition.in(r):o():t._x_transition?t._x_transition.in(r):o();return}t._x_hidePromise=t._x_transition?new Promise((s,a)=>{t._x_transition.out(()=>{},()=>s(n)),t._x_transitioning&&t._x_transitioning.beforeCancel(()=>a({isFromCancelledTransition:!0}))}):Promise.resolve(n),queueMicrotask(()=>{let s=jr(t);s?(s._x_hideChildren||(s._x_hideChildren=[]),s._x_hideChildren.push(t)):i(()=>{let a=c=>{let l=Promise.all([c._x_hidePromise,...(c._x_hideChildren||[]).map(a)]).then(([u])=>u?.());return delete c._x_hidePromise,delete c._x_hideChildren,l};a(t).catch(c=>{if(!c.isFromCancelledTransition)throw c})})})};function jr(t){let e=t.parentNode;if(e)return e._x_hidePromise?e:jr(e)}function Ft(t,e,{during:r,start:n,end:i}={},o=()=>{},s=()=>{}){if(t._x_transitioning&&t._x_transitioning.cancel(),Object.keys(r).length===0&&Object.keys(n).length===0&&Object.keys(i).length===0){o(),s();return}let a,c,l;ci(t,{start(){a=e(t,n)},during(){c=e(t,r)},before:o,end(){a(),l=e(t,i)},after:s,cleanup(){c(),l()}})}function ci(t,e){let r,n,i,o=yt(()=>{m(()=>{r=!0,n||e.before(),i||(e.end(),jt()),e.after(),t.isConnected&&e.cleanup(),delete t._x_transitioning})});t._x_transitioning={beforeCancels:[],beforeCancel(s){this.beforeCancels.push(s)},cancel:yt(function(){for(;this.beforeCancels.length;)this.beforeCancels.shift()();o()}),finish:o},m(()=>{e.start(),e.during()}),Ir(),requestAnimationFrame(()=>{if(r)return;let s=Number(getComputedStyle(t).transitionDuration.replace(/,.*/,"").replace("s",""))*1e3,a=Number(getComputedStyle(t).transitionDelay.replace(/,.*/,"").replace("s",""))*1e3;s===0&&(s=Number(getComputedStyle(t).animationDuration.replace("s",""))*1e3),m(()=>{e.before()}),n=!0,requestAnimationFrame(()=>{r||(m(()=>{e.end()}),jt(),setTimeout(t._x_transitioning.finish,s+a),i=!0)})})}function bt(t,e,r){if(t.indexOf(e)===-1)return r;let n=t[t.indexOf(e)+1];if(!n||e==="scale"&&isNaN(n))return r;if(e==="duration"||e==="delay"){let i=n.match(/([0-9]+)ms/);if(i)return i[1]}return e==="origin"&&["top","right","left","center","bottom"].includes(t[t.indexOf(e)+2])?[n,t[t.indexOf(e)+2]].join(" "):n}var F=!1;function A(t,e=()=>{}){return(...r)=>F?e(...r):t(...r)}function Fr(t){return(...e)=>F&&t(...e)}var Br=[];function U(t){Br.push(t)}function zr(t,e){Br.forEach(r=>r(t,e)),F=!0,Kr(()=>{S(e,(r,n)=>{n(r,()=>{})})}),F=!1}var Bt=!1;function Hr(t,e){e._x_dataStack||(e._x_dataStack=t._x_dataStack),F=!0,Bt=!0,Kr(()=>{li(e)}),F=!1,Bt=!1}function li(t){let e=!1;S(t,(n,i)=>{$(n,(o,s)=>{if(e&&kr(o))return s();e=!0,i(o,s)})})}function Kr(t){let e=D;ue((r,n)=>{let i=e(r);return z(i),()=>{}}),t(),ue(e)}function wt(t,e,r,n=[]){switch(t._x_bindings||(t._x_bindings=M({})),t._x_bindings[e]=r,e=n.includes("camel")?gi(e):e,e){case"value":ui(t,r);break;case"style":di(t,r);break;case"class":fi(t,r);break;case"selected":case"checked":pi(t,e,r);break;default:qr(t,e,r);break}}function ui(t,e){if(Te(t))t.attributes.value===void 0&&(t.value=e),window.fromModel&&(typeof e=="boolean"?t.checked=Et(t.value)===e:t.checked=Vr(t.value,e));else if(zt(t))Number.isInteger(e)?t.value=e:!Array.isArray(e)&&typeof e!="boolean"&&![null,void 0].includes(e)?t.value=String(e):Array.isArray(e)?t.checked=e.some(r=>Vr(r,t.value)):t.checked=!!e;else if(t.tagName==="SELECT")_i(t,e);else{if(t.value===e)return;t.value=e===void 0?"":e}}function fi(t,e){t._x_undoAddedClasses&&t._x_undoAddedClasses(),t._x_undoAddedClasses=xt(t,e)}function di(t,e){t._x_undoAddedStyles&&t._x_undoAddedStyles(),t._x_undoAddedStyles=tt(t,e)}function pi(t,e,r){qr(t,e,r),hi(t,e,r)}function qr(t,e,r){[null,void 0,!1].includes(r)&&yi(e)?t.removeAttribute(e):(Ur(e)&&(r=e),mi(t,e,r))}function mi(t,e,r){t.getAttribute(e)!=r&&t.setAttribute(e,r)}function hi(t,e,r){t[e]!==r&&(t[e]=r)}function _i(t,e){let r=[].concat(e).map(n=>n+"");Array.from(t.options).forEach(n=>{n.selected=r.includes(n.value)})}function gi(t){return t.toLowerCase().replace(/-(\w)/g,(e,r)=>r.toUpperCase())}function Vr(t,e){return t==e}function Et(t){return[1,"1","true","on","yes",!0].includes(t)?!0:[0,"0","false","off","no",!1].includes(t)?!1:t?Boolean(t):null}var xi=new Set(["allowfullscreen","async","autofocus","autoplay","checked","controls","default","defer","disabled","formnovalidate","inert","ismap","itemscope","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","selected","shadowrootclonable","shadowrootdelegatesfocus","shadowrootserializable"]);function Ur(t){return xi.has(t)}function yi(t){return!["aria-pressed","aria-checked","aria-expanded","aria-selected"].includes(t)}function Wr(t,e,r){return t._x_bindings&&t._x_bindings[e]!==void 0?t._x_bindings[e]:Jr(t,e,r)}function Gr(t,e,r,n=!0){if(t._x_bindings&&t._x_bindings[e]!==void 0)return t._x_bindings[e];if(t._x_inlineBindings&&t._x_inlineBindings[e]!==void 0){let i=t._x_inlineBindings[e];return i.extract=n,kt(()=>N(t,i.expression))}return Jr(t,e,r)}function Jr(t,e,r){let n=t.getAttribute(e);return n===null?typeof r=="function"?r():r:n===""?!0:Ur(e)?!![e,"true"].includes(n):n}function zt(t){return t.type==="checkbox"||t.localName==="ui-checkbox"||t.localName==="ui-switch"}function Te(t){return t.type==="radio"||t.localName==="ui-radio"}function Ht(t,e){let r;return function(){let n=this,i=arguments,o=function(){r=null,t.apply(n,i)};clearTimeout(r),r=setTimeout(o,e)}}function Kt(t,e){let r;return function(){let n=this,i=arguments;r||(t.apply(n,i),r=!0,setTimeout(()=>r=!1,e))}}function Vt({get:t,set:e},{get:r,set:n}){let i=!0,o,s,a=D(()=>{let c=t(),l=r();if(i)n(Re(c)),i=!1;else{let u=JSON.stringify(c),p=JSON.stringify(l);u!==o?n(Re(c)):u!==p&&e(Re(l))}o=JSON.stringify(t()),s=JSON.stringify(r())});return()=>{z(a)}}function Re(t){return typeof t=="object"?JSON.parse(JSON.stringify(t)):t}function Yr(t){(Array.isArray(t)?t:[t]).forEach(r=>r(K))}var et={},Xr=!1;function Zr(t,e){if(Xr||(et=M(et),Xr=!0),e===void 0)return et[t];et[t]=e,ot(et[t]),typeof e=="object"&&e!==null&&e.hasOwnProperty("init")&&typeof e.init=="function"&&et[t].init()}function Qr(){return et}var tn={};function en(t,e){let r=typeof e!="function"?()=>e:e;return t instanceof Element?Me(t,r()):(tn[t]=r,()=>{})}function rn(t){return Object.entries(tn).forEach(([e,r])=>{Object.defineProperty(t,e,{get(){return(...n)=>r(...n)}})}),t}function Me(t,e,r){let n=[];for(;n.length;)n.pop()();let i=Object.entries(e).map(([s,a])=>({name:s,value:a})),o=Se(i);return i=i.map(s=>o.find(a=>a.name===s.name)?{name:`x-bind:${s.name}`,value:`"${s.value}"`}:s),gt(t,i,r).map(s=>{n.push(s.runCleanups),s()}),()=>{for(;n.length;)n.pop()()}}var nn={};function on(t,e){nn[t]=e}function sn(t,e){return Object.entries(nn).forEach(([r,n])=>{Object.defineProperty(t,r,{get(){return(...i)=>n.bind(e)(...i)},enumerable:!1})}),t}var bi={get reactive(){return M},get release(){return z},get effect(){return D},get raw(){return le},get transaction(){return er},version:"3.15.6",flushAndStopDeferringMutations:cr,dontAutoEvaluateFunctions:kt,disableEffectScheduling:Ze,startObservingMutations:mt,stopObservingMutations:me,setReactivityEngine:Qe,onAttributeRemoved:Rt,onAttributesAdded:Tt,closestDataStack:H,skipDuringClone:A,onlyDuringClone:Fr,addRootSelector:$t,addInitSelector:Lt,setErrorHandler:dr,interceptClone:U,addScopeToNode:P,deferMutations:ar,mapAttributes:ct,evaluateLater:x,interceptInit:Pr,initInterceptors:ot,injectMagics:q,setEvaluator:mr,setRawEvaluator:_r,mergeProxies:I,extractProp:Gr,findClosest:L,onElRemoved:it,closestRoot:Q,destroyTree:j,interceptor:Nt,transition:Ft,setStyles:tt,mutateDom:m,directive:d,entangle:Vt,throttle:Kt,debounce:Ht,evaluate:N,evaluateRaw:gr,initTree:S,nextTick:lt,prefixed:T,prefix:yr,plugin:Yr,magic:y,store:Zr,start:Tr,clone:Hr,cloneNode:zr,bound:Wr,$data:Mt,watch:Ot,walk:$,data:on,bind:en},K=bi;function Ne(t,e){let r=Object.create(null),n=t.split(",");for(let i=0;i<n.length;i++)r[n[i]]=!0;return e?i=>!!r[i.toLowerCase()]:i=>!!r[i]}var wi="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly";var Gs=Ne(wi+",async,autofocus,autoplay,controls,default,defer,disabled,hidden,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected");var an=Object.freeze({}),Js=Object.freeze([]);var Ei=Object.prototype.hasOwnProperty,vt=(t,e)=>Ei.call(t,e),W=Array.isArray,ut=t=>cn(t)==="[object Map]";var vi=t=>typeof t=="string",qt=t=>typeof t=="symbol",St=t=>t!==null&&typeof t=="object";var Si=Object.prototype.toString,cn=t=>Si.call(t),ke=t=>cn(t).slice(8,-1);var Ut=t=>vi(t)&&t!=="NaN"&&t[0]!=="-"&&""+parseInt(t,10)===t;var Wt=t=>{let e=Object.create(null);return r=>e[r]||(e[r]=t(r))},Ai=/-(\w)/g,Ys=Wt(t=>t.replace(Ai,(e,r)=>r?r.toUpperCase():"")),Oi=/\B([A-Z])/g,Xs=Wt(t=>t.replace(Oi,"-$1").toLowerCase()),De=Wt(t=>t.charAt(0).toUpperCase()+t.slice(1)),Zs=Wt(t=>t?`on${De(t)}`:""),Pe=(t,e)=>t!==e&&(t===t||e===e);var Ie=new WeakMap,At=[],B,rt=Symbol("iterate"),$e=Symbol("Map key iterate");function Ci(t){return t&&t._isEffect===!0}function mn(t,e=an){Ci(t)&&(t=t.raw);let r=Ri(t,e);return e.lazy||r(),r}function hn(t){t.active&&(_n(t),t.options.onStop&&t.options.onStop(),t.active=!1)}var Ti=0;function Ri(t,e){let r=function(){if(!r.active)return t();if(!At.includes(r)){_n(r);try{return Ni(),At.push(r),B=r,t()}finally{At.pop(),gn(),B=At[At.length-1]}}};return r.id=Ti++,r.allowRecurse=!!e.allowRecurse,r._isEffect=!0,r.active=!0,r.raw=t,r.deps=[],r.options=e,r}function _n(t){let{deps:e}=t;if(e.length){for(let r=0;r<e.length;r++)e[r].delete(t);e.length=0}}var ft=!0,je=[];function Mi(){je.push(ft),ft=!1}function Ni(){je.push(ft),ft=!0}function gn(){let t=je.pop();ft=t===void 0?!0:t}function k(t,e,r){if(!ft||B===void 0)return;let n=Ie.get(t);n||Ie.set(t,n=new Map);let i=n.get(r);i||n.set(r,i=new Set),i.has(B)||(i.add(B),B.deps.push(i),B.options.onTrack&&B.options.onTrack({effect:B,target:t,type:e,key:r}))}function J(t,e,r,n,i,o){let s=Ie.get(t);if(!s)return;let a=new Set,c=u=>{u&&u.forEach(p=>{(p!==B||p.allowRecurse)&&a.add(p)})};if(e==="clear")s.forEach(c);else if(r==="length"&&W(t))s.forEach((u,p)=>{(p==="length"||p>=n)&&c(u)});else switch(r!==void 0&&c(s.get(r)),e){case"add":W(t)?Ut(r)&&c(s.get("length")):(c(s.get(rt)),ut(t)&&c(s.get($e)));break;case"delete":W(t)||(c(s.get(rt)),ut(t)&&c(s.get($e)));break;case"set":ut(t)&&c(s.get(rt));break}let l=u=>{u.options.onTrigger&&u.options.onTrigger({effect:u,target:t,key:r,type:e,newValue:n,oldValue:i,oldTarget:o}),u.options.scheduler?u.options.scheduler(u):u()};a.forEach(l)}var ki=Ne("__proto__,__v_isRef,__isVue"),xn=new Set(Object.getOwnPropertyNames(Symbol).map(t=>Symbol[t]).filter(qt)),Di=yn();var Pi=yn(!0);var ln=Ii();function Ii(){let t={};return["includes","indexOf","lastIndexOf"].forEach(e=>{t[e]=function(...r){let n=g(this);for(let o=0,s=this.length;o<s;o++)k(n,"get",o+"");let i=n[e](...r);return i===-1||i===!1?n[e](...r.map(g)):i}}),["push","pop","shift","unshift","splice"].forEach(e=>{t[e]=function(...r){Mi();let n=g(this)[e].apply(this,r);return gn(),n}}),t}function yn(t=!1,e=!1){return function(n,i,o){if(i==="__v_isReactive")return!t;if(i==="__v_isReadonly")return t;if(i==="__v_raw"&&o===(t?e?Xi:vn:e?Yi:En).get(n))return n;let s=W(n);if(!t&&s&&vt(ln,i))return Reflect.get(ln,i,o);let a=Reflect.get(n,i,o);return(qt(i)?xn.has(i):ki(i))||(t||k(n,"get",i),e)?a:Le(a)?!s||!Ut(i)?a.value:a:St(a)?t?Sn(a):te(a):a}}var $i=Li();function Li(t=!1){return function(r,n,i,o){let s=r[n];if(!t&&(i=g(i),s=g(s),!W(r)&&Le(s)&&!Le(i)))return s.value=i,!0;let a=W(r)&&Ut(n)?Number(n)<r.length:vt(r,n),c=Reflect.set(r,n,i,o);return r===g(o)&&(a?Pe(i,s)&&J(r,"set",n,i,s):J(r,"add",n,i)),c}}function ji(t,e){let r=vt(t,e),n=t[e],i=Reflect.deleteProperty(t,e);return i&&r&&J(t,"delete",e,void 0,n),i}function Fi(t,e){let r=Reflect.has(t,e);return(!qt(e)||!xn.has(e))&&k(t,"has",e),r}function Bi(t){return k(t,"iterate",W(t)?"length":rt),Reflect.ownKeys(t)}var zi={get:Di,set:$i,deleteProperty:ji,has:Fi,ownKeys:Bi},Hi={get:Pi,set(t,e){return console.warn(`Set operation on key "${String(e)}" failed: target is readonly.`,t),!0},deleteProperty(t,e){return console.warn(`Delete operation on key "${String(e)}" failed: target is readonly.`,t),!0}};var Fe=t=>St(t)?te(t):t,Be=t=>St(t)?Sn(t):t,ze=t=>t,Qt=t=>Reflect.getPrototypeOf(t);function Gt(t,e,r=!1,n=!1){t=t.__v_raw;let i=g(t),o=g(e);e!==o&&!r&&k(i,"get",e),!r&&k(i,"get",o);let{has:s}=Qt(i),a=n?ze:r?Be:Fe;if(s.call(i,e))return a(t.get(e));if(s.call(i,o))return a(t.get(o));t!==i&&t.get(e)}function Jt(t,e=!1){let r=this.__v_raw,n=g(r),i=g(t);return t!==i&&!e&&k(n,"has",t),!e&&k(n,"has",i),t===i?r.has(t):r.has(t)||r.has(i)}function Yt(t,e=!1){return t=t.__v_raw,!e&&k(g(t),"iterate",rt),Reflect.get(t,"size",t)}function un(t){t=g(t);let e=g(this);return Qt(e).has.call(e,t)||(e.add(t),J(e,"add",t,t)),this}function fn(t,e){e=g(e);let r=g(this),{has:n,get:i}=Qt(r),o=n.call(r,t);o?wn(r,n,t):(t=g(t),o=n.call(r,t));let s=i.call(r,t);return r.set(t,e),o?Pe(e,s)&&J(r,"set",t,e,s):J(r,"add",t,e),this}function dn(t){let e=g(this),{has:r,get:n}=Qt(e),i=r.call(e,t);i?wn(e,r,t):(t=g(t),i=r.call(e,t));let o=n?n.call(e,t):void 0,s=e.delete(t);return i&&J(e,"delete",t,void 0,o),s}function pn(){let t=g(this),e=t.size!==0,r=ut(t)?new Map(t):new Set(t),n=t.clear();return e&&J(t,"clear",void 0,void 0,r),n}function Xt(t,e){return function(n,i){let o=this,s=o.__v_raw,a=g(s),c=e?ze:t?Be:Fe;return!t&&k(a,"iterate",rt),s.forEach((l,u)=>n.call(i,c(l),c(u),o))}}function Zt(t,e,r){return function(...n){let i=this.__v_raw,o=g(i),s=ut(o),a=t==="entries"||t===Symbol.iterator&&s,c=t==="keys"&&s,l=i[t](...n),u=r?ze:e?Be:Fe;return!e&&k(o,"iterate",c?$e:rt),{next(){let{value:p,done:v}=l.next();return v?{value:p,done:v}:{value:a?[u(p[0]),u(p[1])]:u(p),done:v}},[Symbol.iterator](){return this}}}}function G(t){return function(...e){{let r=e[0]?`on key "${e[0]}" `:"";console.warn(`${De(t)} operation ${r}failed: target is readonly.`,g(this))}return t==="delete"?!1:this}}function Ki(){let t={get(o){return Gt(this,o)},get size(){return Yt(this)},has:Jt,add:un,set:fn,delete:dn,clear:pn,forEach:Xt(!1,!1)},e={get(o){return Gt(this,o,!1,!0)},get size(){return Yt(this)},has:Jt,add:un,set:fn,delete:dn,clear:pn,forEach:Xt(!1,!0)},r={get(o){return Gt(this,o,!0)},get size(){return Yt(this,!0)},has(o){return Jt.call(this,o,!0)},add:G("add"),set:G("set"),delete:G("delete"),clear:G("clear"),forEach:Xt(!0,!1)},n={get(o){return Gt(this,o,!0,!0)},get size(){return Yt(this,!0)},has(o){return Jt.call(this,o,!0)},add:G("add"),set:G("set"),delete:G("delete"),clear:G("clear"),forEach:Xt(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{t[o]=Zt(o,!1,!1),r[o]=Zt(o,!0,!1),e[o]=Zt(o,!1,!0),n[o]=Zt(o,!0,!0)}),[t,r,e,n]}var[Vi,qi,Ui,Wi]=Ki();function bn(t,e){let r=e?t?Wi:Ui:t?qi:Vi;return(n,i,o)=>i==="__v_isReactive"?!t:i==="__v_isReadonly"?t:i==="__v_raw"?n:Reflect.get(vt(r,i)&&i in n?r:n,i,o)}var Gi={get:bn(!1,!1)};var Ji={get:bn(!0,!1)};function wn(t,e,r){let n=g(r);if(n!==r&&e.call(t,n)){let i=ke(t);console.warn(`Reactive ${i} contains both the raw and reactive versions of the same object${i==="Map"?" as keys":""}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`)}}var En=new WeakMap,Yi=new WeakMap,vn=new WeakMap,Xi=new WeakMap;function Zi(t){switch(t){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Qi(t){return t.__v_skip||!Object.isExtensible(t)?0:Zi(ke(t))}function te(t){return t&&t.__v_isReadonly?t:An(t,!1,zi,Gi,En)}function Sn(t){return An(t,!0,Hi,Ji,vn)}function An(t,e,r,n,i){if(!St(t))return console.warn(`value cannot be made reactive: ${String(t)}`),t;if(t.__v_raw&&!(e&&t.__v_isReactive))return t;let o=i.get(t);if(o)return o;let s=Qi(t);if(s===0)return t;let a=new Proxy(t,s===2?n:r);return i.set(t,a),a}function g(t){return t&&g(t.__v_raw)||t}function Le(t){return Boolean(t&&t.__v_isRef===!0)}y("nextTick",()=>lt);y("dispatch",t=>Z.bind(Z,t));y("watch",(t,{evaluateLater:e,cleanup:r})=>(n,i)=>{let o=e(n),a=Ot(()=>{let c;return o(l=>c=l),c},i);r(a)});y("store",Qr);y("data",t=>Mt(t));y("root",t=>Q(t));y("refs",t=>(t._x_refs_proxy||(t._x_refs_proxy=I(to(t))),t._x_refs_proxy));function to(t){let e=[];return L(t,r=>{r._x_refs&&e.push(r._x_refs)}),e}var He={};function Ke(t){return He[t]||(He[t]=0),++He[t]}function On(t,e){return L(t,r=>{if(r._x_ids&&r._x_ids[e])return!0})}function Cn(t,e){t._x_ids||(t._x_ids={}),t._x_ids[e]||(t._x_ids[e]=Ke(e))}y("id",(t,{cleanup:e})=>(r,n=null)=>{let i=`${r}${n?`-${n}`:""}`;return eo(t,i,e,()=>{let o=On(t,r),s=o?o._x_ids[r]:Ke(r);return n?`${r}-${s}-${n}`:`${r}-${s}`})});U((t,e)=>{t._x_id&&(e._x_id=t._x_id)});function eo(t,e,r,n){if(t._x_id||(t._x_id={}),t._x_id[e])return t._x_id[e];let i=n();return t._x_id[e]=i,r(()=>{delete t._x_id[e]}),i}y("el",t=>t);Tn("Focus","focus","focus");Tn("Persist","persist","persist");function Tn(t,e,r){y(e,n=>w(`You can't use [$${e}] without first installing the "${t}" plugin here: https://alpinejs.dev/plugins/${r}`,n))}d("modelable",(t,{expression:e},{effect:r,evaluateLater:n,cleanup:i})=>{let o=n(e),s=()=>{let u;return o(p=>u=p),u},a=n(`${e} = __placeholder`),c=u=>a(()=>{},{scope:{__placeholder:u}}),l=s();c(l),queueMicrotask(()=>{if(!t._x_model)return;t._x_removeModelListeners.default();let u=t._x_model.get,p=t._x_model.set,v=Vt({get(){return u()},set(O){p(O)}},{get(){return s()},set(O){c(O)}});i(v)})});d("teleport",(t,{modifiers:e,expression:r},{cleanup:n})=>{t.tagName.toLowerCase()!=="template"&&w("x-teleport can only be used on a <template> tag",t);let i=Rn(r),o=t.content.cloneNode(!0).firstElementChild;t._x_teleport=o,o._x_teleportBack=t,t.setAttribute("data-teleport-template",!0),o.setAttribute("data-teleport-target",!0),t._x_forwardEvents&&t._x_forwardEvents.forEach(a=>{o.addEventListener(a,c=>{c.stopPropagation(),t.dispatchEvent(new c.constructor(c.type,c))})}),P(o,{},t);let s=(a,c,l)=>{l.includes("prepend")?c.parentNode.insertBefore(a,c):l.includes("append")?c.parentNode.insertBefore(a,c.nextSibling):c.appendChild(a)};m(()=>{s(o,i,e),A(()=>{S(o)})()}),t._x_teleportPutBack=()=>{let a=Rn(r);m(()=>{s(t._x_teleport,a,e)})},n(()=>m(()=>{o.remove(),j(o)}))});var ro=document.createElement("div");function Rn(t){let e=A(()=>document.querySelector(t),()=>ro)();return e||w(`Cannot find x-teleport element for selector: "${t}"`),e}var Mn=()=>{};Mn.inline=(t,{modifiers:e},{cleanup:r})=>{e.includes("self")?t._x_ignoreSelf=!0:t._x_ignore=!0,r(()=>{e.includes("self")?delete t._x_ignoreSelf:delete t._x_ignore})};d("ignore",Mn);d("effect",A((t,{expression:e},{effect:r})=>{r(x(t,e))}));function V(t,e,r,n){let i=t,o=c=>n(c),s={},a=(c,l)=>u=>l(c,u);if(r.includes("dot")&&(e=no(e)),r.includes("camel")&&(e=io(e)),r.includes("passive")&&(s.passive=!0),r.includes("capture")&&(s.capture=!0),r.includes("window")&&(i=window),r.includes("document")&&(i=document),r.includes("debounce")){let c=r[r.indexOf("debounce")+1]||"invalid-wait",l=ee(c.split("ms")[0])?Number(c.split("ms")[0]):250;o=Ht(o,l)}if(r.includes("throttle")){let c=r[r.indexOf("throttle")+1]||"invalid-wait",l=ee(c.split("ms")[0])?Number(c.split("ms")[0]):250;o=Kt(o,l)}return r.includes("prevent")&&(o=a(o,(c,l)=>{l.preventDefault(),c(l)})),r.includes("stop")&&(o=a(o,(c,l)=>{l.stopPropagation(),c(l)})),r.includes("once")&&(o=a(o,(c,l)=>{c(l),i.removeEventListener(e,o,s)})),(r.includes("away")||r.includes("outside"))&&(i=document,o=a(o,(c,l)=>{t.contains(l.target)||l.target.isConnected!==!1&&(t.offsetWidth<1&&t.offsetHeight<1||t._x_isShown!==!1&&c(l))})),r.includes("self")&&(o=a(o,(c,l)=>{l.target===t&&c(l)})),(so(e)||kn(e))&&(o=a(o,(c,l)=>{ao(l,r)||c(l)})),i.addEventListener(e,o,s),()=>{i.removeEventListener(e,o,s)}}function no(t){return t.replace(/-/g,".")}function io(t){return t.toLowerCase().replace(/-(\w)/g,(e,r)=>r.toUpperCase())}function ee(t){return!Array.isArray(t)&&!isNaN(t)}function oo(t){return[" ","_"].includes(t)?t:t.replace(/([a-z])([A-Z])/g,"$1-$2").replace(/[_\s]/,"-").toLowerCase()}function so(t){return["keydown","keyup"].includes(t)}function kn(t){return["contextmenu","click","mouse"].some(e=>t.includes(e))}function ao(t,e){let r=e.filter(o=>!["window","document","prevent","stop","once","capture","self","away","outside","passive","preserve-scroll","blur","change","lazy"].includes(o));if(r.includes("debounce")){let o=r.indexOf("debounce");r.splice(o,ee((r[o+1]||"invalid-wait").split("ms")[0])?2:1)}if(r.includes("throttle")){let o=r.indexOf("throttle");r.splice(o,ee((r[o+1]||"invalid-wait").split("ms")[0])?2:1)}if(r.length===0||r.length===1&&Nn(t.key).includes(r[0]))return!1;let i=["ctrl","shift","alt","meta","cmd","super"].filter(o=>r.includes(o));return r=r.filter(o=>!i.includes(o)),!(i.length>0&&i.filter(s=>((s==="cmd"||s==="super")&&(s="meta"),t[`${s}Key`])).length===i.length&&(kn(t.type)||Nn(t.key).includes(r[0])))}function Nn(t){if(!t)return[];t=oo(t);let e={ctrl:"control",slash:"/",space:" ",spacebar:" ",cmd:"meta",esc:"escape",up:"arrow-up",down:"arrow-down",left:"arrow-left",right:"arrow-right",period:".",comma:",",equal:"=",minus:"-",underscore:"_"};return e[t]=t,Object.keys(e).map(r=>{if(e[r]===t)return r}).filter(r=>r)}d("model",(t,{modifiers:e,expression:r},{effect:n,cleanup:i})=>{let o=t;e.includes("parent")&&(o=t.parentNode);let s=x(o,r),a;typeof r=="string"?a=x(o,`${r} = __placeholder`):typeof r=="function"&&typeof r()=="string"?a=x(o,`${r()} = __placeholder`):a=()=>{};let c=()=>{let _;return s(f=>_=f),Dn(_)?_.get():_},l=_=>{let f;s(h=>f=h),Dn(f)?f.set(_):a(()=>{},{scope:{__placeholder:_}})};typeof r=="string"&&t.type==="radio"&&m(()=>{t.hasAttribute("name")||t.setAttribute("name",r)});let u=e.includes("change")||e.includes("lazy"),p=e.includes("blur"),v=e.includes("enter"),O=u||p||v,R;if(F)R=()=>{};else if(O){let _=[],f=h=>l(re(t,e,h,c()));u&&_.push(V(t,"change",e,f)),p&&_.push(V(t,"blur",e,f)),v&&_.push(V(t,"keydown",e,h=>{h.key==="Enter"&&f(h)})),R=()=>_.forEach(h=>h())}else{let _=t.tagName.toLowerCase()==="select"||["checkbox","radio"].includes(t.type)?"change":"input";R=V(t,_,e,f=>{l(re(t,e,f,c()))})}if(e.includes("fill")&&([void 0,null,""].includes(c())||zt(t)&&Array.isArray(c())||t.tagName.toLowerCase()==="select"&&t.multiple)&&l(re(t,e,{target:t},c())),t._x_removeModelListeners||(t._x_removeModelListeners={}),t._x_removeModelListeners.default=R,i(()=>t._x_removeModelListeners.default()),t.form){let _=V(t.form,"reset",[],f=>{lt(()=>t._x_model&&t._x_model.set(re(t,e,{target:t},c())))});i(()=>_())}t._x_model={get(){return c()},set(_){l(_)}},t._x_forceModelUpdate=_=>{_===void 0&&typeof r=="string"&&r.match(/\./)&&(_=""),window.fromModel=!0,m(()=>wt(t,"value",_)),delete window.fromModel},n(()=>{let _=c();e.includes("unintrusive")&&document.activeElement.isSameNode(t)||t._x_forceModelUpdate(_)})});function re(t,e,r,n){return m(()=>{if(r instanceof CustomEvent&&r.detail!==void 0)return r.detail!==null&&r.detail!==void 0?r.detail:r.target.value;if(zt(t))if(Array.isArray(n)){let i=null;return e.includes("number")?i=Ve(r.target.value):e.includes("boolean")?i=Et(r.target.value):i=r.target.value,r.target.checked?n.includes(i)?n:n.concat([i]):n.filter(o=>!co(o,i))}else return r.target.checked;else{if(t.tagName.toLowerCase()==="select"&&t.multiple)return e.includes("number")?Array.from(r.target.selectedOptions).map(i=>{let o=i.value||i.text;return Ve(o)}):e.includes("boolean")?Array.from(r.target.selectedOptions).map(i=>{let o=i.value||i.text;return Et(o)}):Array.from(r.target.selectedOptions).map(i=>i.value||i.text);{let i;return Te(t)?r.target.checked?i=r.target.value:i=n:i=r.target.value,e.includes("number")?Ve(i):e.includes("boolean")?Et(i):e.includes("trim")?i.trim():i}}})}function Ve(t){let e=t?parseFloat(t):null;return lo(e)?e:t}function co(t,e){return t==e}function lo(t){return!Array.isArray(t)&&!isNaN(t)}function Dn(t){return t!==null&&typeof t=="object"&&typeof t.get=="function"&&typeof t.set=="function"}d("cloak",t=>queueMicrotask(()=>m(()=>t.removeAttribute(T("cloak")))));Lt(()=>`[${T("init")}]`);d("init",A((t,{expression:e},{evaluate:r})=>typeof e=="string"?!!e.trim()&&r(e,{},!1):r(e,{},!1)));d("text",(t,{expression:e},{effect:r,evaluateLater:n})=>{let i=n(e);r(()=>{i(o=>{m(()=>{t.textContent=o})})})});d("html",(t,{expression:e},{effect:r,evaluateLater:n})=>{let i=n(e);r(()=>{i(o=>{m(()=>{t.innerHTML=o,t._x_ignoreSelf=!0,S(t),delete t._x_ignoreSelf})})})});ct(Pt(":",It(T("bind:"))));var Pn=(t,{value:e,modifiers:r,expression:n,original:i},{effect:o,cleanup:s})=>{if(!e){let c={};rn(c),x(t,n)(u=>{Me(t,u,i)},{scope:c});return}if(e==="key")return uo(t,n);if(t._x_inlineBindings&&t._x_inlineBindings[e]&&t._x_inlineBindings[e].extract)return;let a=x(t,n);o(()=>a(c=>{c===void 0&&typeof n=="string"&&n.match(/\./)&&(c=""),m(()=>wt(t,e,c,r))})),s(()=>{t._x_undoAddedClasses&&t._x_undoAddedClasses(),t._x_undoAddedStyles&&t._x_undoAddedStyles()})};Pn.inline=(t,{value:e,modifiers:r,expression:n})=>{e&&(t._x_inlineBindings||(t._x_inlineBindings={}),t._x_inlineBindings[e]={expression:n,extract:!1})};d("bind",Pn);function uo(t,e){t._x_keyExpression=e}$t(()=>`[${T("data")}]`);d("data",(t,{expression:e},{cleanup:r})=>{if(fo(t))return;e=e===""?"{}":e;let n={};q(n,t);let i={};sn(i,n);let o=N(t,e,{scope:i});(o===void 0||o===!0)&&(o={}),q(o,t);let s=M(o);ot(s);let a=P(t,s);s.init&&N(t,s.init),r(()=>{s.destroy&&N(t,s.destroy),a()})});U((t,e)=>{t._x_dataStack&&(e._x_dataStack=t._x_dataStack,e.setAttribute("data-has-alpine-state",!0))});function fo(t){return F?Bt?!0:t.hasAttribute("data-has-alpine-state"):!1}d("show",(t,{modifiers:e,expression:r},{effect:n})=>{let i=x(t,r);t._x_doHide||(t._x_doHide=()=>{m(()=>{t.style.setProperty("display","none",e.includes("important")?"important":void 0)})}),t._x_doShow||(t._x_doShow=()=>{m(()=>{t.style.length===1&&t.style.display==="none"?t.removeAttribute("style"):t.style.removeProperty("display")})});let o=()=>{t._x_doHide(),t._x_isShown=!1},s=()=>{t._x_doShow(),t._x_isShown=!0},a=()=>setTimeout(s),c=yt(p=>p?s():o(),p=>{typeof t._x_toggleAndCascadeWithTransitions=="function"?t._x_toggleAndCascadeWithTransitions(t,p,s,o):p?a():o()}),l,u=!0;n(()=>i(p=>{!u&&p===l||(e.includes("immediate")&&(p?a():o()),c(p),l=p,u=!1)}))});d("for",(t,{expression:e},{effect:r,cleanup:n})=>{let i=mo(e),o=x(t,i.items),s=x(t,t._x_keyExpression||"index");t._x_prevKeys=[],t._x_lookup={},r(()=>po(t,i,o,s)),n(()=>{Object.values(t._x_lookup).forEach(a=>m(()=>{j(a),a.remove()})),delete t._x_prevKeys,delete t._x_lookup})});function po(t,e,r,n){let i=s=>typeof s=="object"&&!Array.isArray(s),o=t;r(s=>{ho(s)&&s>=0&&(s=Array.from(Array(s).keys(),f=>f+1)),s===void 0&&(s=[]);let a=t._x_lookup,c=t._x_prevKeys,l=[],u=[];if(i(s))s=Object.entries(s).map(([f,h])=>{let b=In(e,h,f,s);n(E=>{u.includes(E)&&w("Duplicate key on x-for",t),u.push(E)},{scope:{index:f,...b}}),l.push(b)});else for(let f=0;f<s.length;f++){let h=In(e,s[f],f,s);n(b=>{u.includes(b)&&w("Duplicate key on x-for",t),u.push(b)},{scope:{index:f,...h}}),l.push(h)}let p=[],v=[],O=[],R=[];for(let f=0;f<c.length;f++){let h=c[f];u.indexOf(h)===-1&&O.push(h)}c=c.filter(f=>!O.includes(f));let _="template";for(let f=0;f<u.length;f++){let h=u[f],b=c.indexOf(h);if(b===-1)c.splice(f,0,h),p.push([_,f]);else if(b!==f){let E=c.splice(f,1)[0],C=c.splice(b-1,1)[0];c.splice(f,0,C),c.splice(b,0,E),v.push([E,C])}else R.push(h);_=h}for(let f=0;f<O.length;f++){let h=O[f];h in a&&(m(()=>{j(a[h]),a[h].remove()}),delete a[h])}for(let f=0;f<v.length;f++){let[h,b]=v[f],E=a[h],C=a[b],nt=document.createElement("div");m(()=>{C||w('x-for ":key" is undefined or invalid',o,b,a),C.after(nt),E.after(C),C._x_currentIfEl&&C.after(C._x_currentIfEl),nt.before(E),E._x_currentIfEl&&E.after(E._x_currentIfEl),nt.remove()}),C._x_refreshXForScope(l[u.indexOf(b)])}for(let f=0;f<p.length;f++){let[h,b]=p[f],E=h==="template"?o:a[h];E._x_currentIfEl&&(E=E._x_currentIfEl);let C=l[b],nt=u[b],dt=document.importNode(o.content,!0).firstElementChild,Ue=M(C);P(dt,Ue,o),dt._x_refreshXForScope=Ln=>{Object.entries(Ln).forEach(([jn,Fn])=>{Ue[jn]=Fn})},m(()=>{E.after(dt),A(()=>S(dt))()}),typeof nt=="object"&&w("x-for key cannot be an object, it must be a string or an integer",o),a[nt]=dt}for(let f=0;f<R.length;f++)a[R[f]]._x_refreshXForScope(l[u.indexOf(R[f])]);o._x_prevKeys=u})}function mo(t){let e=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,r=/^\s*\(|\)\s*$/g,n=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,i=t.match(n);if(!i)return;let o={};o.items=i[2].trim();let s=i[1].replace(r,"").trim(),a=s.match(e);return a?(o.item=s.replace(e,"").trim(),o.index=a[1].trim(),a[2]&&(o.collection=a[2].trim())):o.item=s,o}function In(t,e,r,n){let i={};return/^\[.*\]$/.test(t.item)&&Array.isArray(e)?t.item.replace("[","").replace("]","").split(",").map(s=>s.trim()).forEach((s,a)=>{i[s]=e[a]}):/^\{.*\}$/.test(t.item)&&!Array.isArray(e)&&typeof e=="object"?t.item.replace("{","").replace("}","").split(",").map(s=>s.trim()).forEach(s=>{i[s]=e[s]}):i[t.item]=e,t.index&&(i[t.index]=r),t.collection&&(i[t.collection]=n),i}function ho(t){return!Array.isArray(t)&&!isNaN(t)}function $n(){}$n.inline=(t,{expression:e},{cleanup:r})=>{let n=Q(t);n._x_refs||(n._x_refs={}),n._x_refs[e]=t,r(()=>delete n._x_refs[e])};d("ref",$n);d("if",(t,{expression:e},{effect:r,cleanup:n})=>{t.tagName.toLowerCase()!=="template"&&w("x-if can only be used on a <template> tag",t);let i=x(t,e),o=()=>{if(t._x_currentIfEl)return t._x_currentIfEl;let a=t.content.cloneNode(!0).firstElementChild;return P(a,{},t),m(()=>{t.after(a),A(()=>S(a))()}),t._x_currentIfEl=a,t._x_undoIf=()=>{m(()=>{j(a),a.remove()}),delete t._x_currentIfEl},a},s=()=>{t._x_undoIf&&(t._x_undoIf(),delete t._x_undoIf)};r(()=>i(a=>{a?o():s()})),n(()=>t._x_undoIf&&t._x_undoIf())});d("id",(t,{expression:e},{evaluate:r})=>{r(e).forEach(i=>Cn(t,i))});U((t,e)=>{t._x_ids&&(e._x_ids=t._x_ids)});ct(Pt("@",It(T("on:"))));d("on",A((t,{value:e,modifiers:r,expression:n},{cleanup:i})=>{let o=n?x(t,n):()=>{};t.tagName.toLowerCase()==="template"&&(t._x_forwardEvents||(t._x_forwardEvents=[]),t._x_forwardEvents.includes(e)||t._x_forwardEvents.push(e));let s=V(t,e,r,a=>{o(()=>{},{scope:{$event:a},params:[a]})});i(()=>s())}));ne("Collapse","collapse","collapse");ne("Intersect","intersect","intersect");ne("Focus","trap","focus");ne("Mask","mask","mask");function ne(t,e,r){d(e,n=>w(`You can't use [x-${e}] without first installing the "${t}" plugin here: https://alpinejs.dev/plugins/${r}`,n))}K.setEvaluator(be);K.setRawEvaluator(xr);K.setReactivityEngine({reactive:te,effect:mn,release:hn,raw:g});var qe=K;window.Alpine=qe;queueMicrotask(()=>{qe.start()});})(); -
commentswp/trunk/commentswp.php
r3237139 r3451333 4 4 * Plugin URI: https://commentswp.com 5 5 * Description: A beautifully helpful dashboard for all your comments. 6 * Requires at least: 6. 46 * Requires at least: 6.5 7 7 * Requires PHP: 7.4 8 8 * Author: Slava Abakumov 9 9 * Author URI: https://ovirium.com 10 * Version: 1. 2.010 * Version: 1.3.0 11 11 * Text Domain: commentswp 12 12 * License: GPLv2 or later … … 21 21 22 22 // phpcs:disable WPForms.Comments.PHPDocDefine.MissPHPDoc 23 define( 'COMMENTSWP_VERSION', '1. 2.0' );23 define( 'COMMENTSWP_VERSION', '1.3.0' ); 24 24 define( 'COMMENTSWP_PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); 25 25 define( 'COMMENTSWP_PLUGIN_URL', plugin_dir_url( __FILE__ ) ); … … 34 34 * @return Plugin 35 35 */ 36 function commentswp() {36 function commentswp(): Plugin { 37 37 38 38 require_once __DIR__ . '/vendor/autoload.php'; … … 55 55 ); 56 56 57 register_activation_hook( 58 COMMENTSWP_PLUGIN_FILE, 59 static function () { 60 require_once __DIR__ . '/vendor/autoload.php'; 57 61 62 Plugin::activated(); 63 } 64 ); -
commentswp/trunk/readme.txt
r3375355 r3451333 2 2 Contributors: slaFFik 3 3 Tags: comments, analytics, comment-dashboard, commenter-profiles, comment-insights 4 Requires at least: 6. 45 Tested up to: 6. 86 Stable tag: 1. 2.04 Requires at least: 6.5 5 Tested up to: 6.9 6 Stable tag: 1.3.0 7 7 Requires PHP: 7.4 8 8 License: GNU General Public License v2.0 or later … … 39 39 * **Fastest Time To First Comment** (e.g., 1d 20h 38min 53s) 40 40 * **Posts with vs. without comments** (totals and percentages) 41 * **Logged-in vs. Guest comments** 42 * **Top-level vs. Threaded replies** 43 * **Pingbacks and Trackbacks** 41 * **Logged-in vs. Guest comments** (totals and percentages) 42 * **Top-level vs. Threaded replies** (totals and percentages) 43 * **Pingbacks and Trackbacks** (totals and percentages) 44 44 45 45 Each card links to detailed documentation on the [CommentsWP website](https://commentswp.com/docs/). … … 59 59 60 60 #### Total by Time Period 61 Track how comment activity changes over time — by **year, month, or week**.61 Track how comment activity changes over time — by **year, month, week, or day**. 62 62 Quickly detect engagement trends across your site's history. 63 63 … … 171 171 172 172 == Changelog == 173 174 ### 1.3.0 175 - **IMPORTANT**: This version requires WordPress 6.5 or higher. 176 - **Added**: The "Total by Time Period" card now has a new "Group by Day" option. 177 - **Added**: The "Total by Time Period" card now has a "Newest First" and "Oldest First" option. It affects the order of time periods displayed in the card. 178 - **Changed**: Visual refresh of the plugin admin area. 179 - **Changed**: The plugin supports the latest WordPress 6.9. 180 - **Fixed**: The plugin was generating the PHP notice "Function _load_textdomain_just_in_time was called incorrectly" on the front-end in cases when an AJAX request was sent to `wp-admin/admin-ajax.php` by any other 3rd-party plugin. 181 - **Fixed**: Improve the performance of the Dashboard cards a bit by preventing double population. 182 - **Fixed**: Improve the performance of AJAX requests for all 3rd-party plugins by preventing CommentsWP from loading its Dashboard cards on each AJAX request. 183 - **Fixed**: The comment type dropdown on the Dashboard page was empty in case there was no data in the comments table. 184 - **Fixed**: Removed unused functions which are leftovers from development. 185 - **Fixed**: A lot of PHP code style improvements. 173 186 174 187 ### 1.2.0 -
commentswp/trunk/src/Admin/Admin.php
r3237139 r3451333 48 48 * Profiles instance. 49 49 * 50 * @since 1. 1.050 * @since 1.2.0 51 51 */ 52 52 public ProfilesPage $profiles; … … 113 113 add_filter( sprintf( '%splugin_action_links_%s', is_multisite() ? 'network_admin_' : '', plugin_basename( COMMENTSWP_PLUGIN_FILE ) ), [ $this, 'add_plugin_actions_links' ] ); 114 114 115 add_filter( 'admin_footer_text', [ $this, 'footer_text' ] ); 116 add_filter( 'update_footer', [ $this, 'footer_version' ], PHP_INT_MAX ); 117 118 ( new WPorgReview() )->hooks(); 119 115 120 $this->admin_bar->hooks(); 116 121 $this->dashboard->hooks(); … … 135 140 136 141 return array_merge( [ $dashboard ], $links ); 142 } 143 144 /** 145 * Customize the admin footer text on plugin pages. 146 * 147 * @since 1.3.0 148 * 149 * @param string $text The default footer text. 150 */ 151 public function footer_text( $text ): string { 152 153 if ( ! $this->is_page() ) { 154 return $text; 155 } 156 157 $review_url = 'https://wordpress.org/support/plugin/commentswp/reviews/?filter=5#new-post'; 158 159 return '<span id="footer-thankyou">' . 160 sprintf( 161 /* translators: %1$s - star rating, %2$s - WordPress.org. All are links. */ 162 esc_html__( 'Please rate CommentsWP %1$s on %2$s to help us spread the word', 'commentswp' ), 163 '<a href="' . esc_url( $review_url ) . '" target="_blank" rel="noopener noreferrer">★★★★★</a>', 164 '<a href="' . esc_url( $review_url ) . '" target="_blank" rel="noopener noreferrer">WordPress.org</a>' 165 ) . '</span>'; 166 } 167 168 /** 169 * Customize the admin footer version text on plugin pages. 170 * 171 * @since 1.3.0 172 * 173 * @param string $text The default footer version text. 174 */ 175 public function footer_version( $text ): string { 176 177 if ( ! $this->is_page() ) { 178 return $text; 179 } 180 181 $url = URL::add_utm( 'https://commentswp.com/', 'Admin', 'Footer' ); 182 183 return '<a href="' . esc_url( $url ) . '" target="_blank" rel="noopener noreferrer">CommentsWP v' . COMMENTSWP_VERSION . '</a>'; 137 184 } 138 185 … … 277 324 Assets::url( 'libs/alpinejs.min.js' ), 278 325 [], 279 '3.1 4.8',326 '3.15.6', 280 327 false 281 328 ); … … 295 342 * @since 1.0.0 296 343 * 297 * @param string $slug Slug identifier for a specific admin page .298 * @param string $view Slug identifier for a specific admin page view ("subpage") .344 * @param string $slug Slug identifier for a specific admin page: dashboard, profiles, settings, etc. 345 * @param string $view Slug identifier for a specific admin page view ("subpage"): single, etc. 299 346 */ 300 347 public function is_page( $slug = '', $view = '' ): bool { -
commentswp/trunk/src/Admin/Pages/Dashboard/Cards/AverageTimeToFirstCommentCard.php
r3237139 r3451333 73 73 $build_where_type = commentswp()->get( 'admin' )->dashboard->filters->build_sql_where_comment_type(); 74 74 75 // phpcs:disable WordPress.DB.PreparedSQL,WordPress.DB.DirectDatabaseQuery 75 76 $average = (int) $wpdb->get_var( 76 77 "SELECT … … 87 88 $build_where_period" 88 89 ); 90 // phpcs:enable WordPress.DB.PreparedSQL,WordPress.DB.DirectDatabaseQuery 89 91 90 92 if ( $average === 0 ) { -
commentswp/trunk/src/Admin/Pages/Dashboard/Cards/PingTrackbacksNumberCard.php
r3237139 r3451333 55 55 $build_where_period = commentswp()->get( 'admin' )->dashboard->filters->build_sql_where_period(); 56 56 57 // phpcs:ignore WordPress.DB.DirectDatabaseQuery 57 58 $data = $wpdb->get_row( 58 59 "SELECT … … 66 67 FROM $wpdb->comments 67 68 WHERE comment_type IN ('pingback', 'trackback') 68 $build_where_period;", 69 $build_where_period;", // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared 69 70 ARRAY_A 70 71 ); -
commentswp/trunk/src/Admin/Pages/Dashboard/Cards/PostsCommentsNumberCard.php
r3237139 r3451333 68 68 $comment_type = $this->filters->get( 'comment_type' ); 69 69 70 // phpcs:ignore WordPress.DB.DirectDatabaseQuery .NoCaching70 // phpcs:ignore WordPress.DB.DirectDatabaseQuery 71 71 $data = $wpdb->get_row( 72 72 $wpdb->prepare( … … 85 85 WHERE $wpdb->posts.post_type = 'post' 86 86 AND $wpdb->posts.post_status = 'publish' 87 $build_where_period", 87 $build_where_period", // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared 88 88 $comment_type 89 89 ), -
commentswp/trunk/src/Admin/Pages/Dashboard/Cards/SuggestFeaturePlaceholder.php
r3237139 r3451333 2 2 3 3 namespace CommentsWP\Admin\Pages\Dashboard\Cards; 4 5 use CommentsWP\Helpers\URL; 4 6 5 7 /** … … 36 38 * @since 1.1.0 37 39 */ 38 protected function generate_data() {40 protected function generate_data(): void { 39 41 40 42 $this->data = []; … … 46 48 * @since 1.1.0 47 49 */ 48 public function render() { 50 public function render(): void { 51 52 $url = URL::add_utm( 'https://commentswp.com/submit-feedback/', 'dashboard_card', $this->get_class_name(), $this->title() ); 49 53 ?> 50 54 … … 59 63 <p style="padding-top: 7px"><?php esc_html_e( 'Do you have an idea or suggestion for CommentsWP? If you have thoughts on features or improvements - please reach out!', 'commentswp' ); ?></p> 60 64 <p><?php esc_html_e( 'Any feedback and insights from actual users is appreciated.', 'commentswp' ); ?></p> 61 <p><a href="https://commentswp.com/submit-feedback/" target="_blank" class="button button-primary"><?php esc_html_e( 'Suggest a Feature', 'commentswp' ); ?></a></p> 65 <p> 66 <a href="<?php echo esc_url( $url ); ?>" target="_blank" class="button button-primary"> 67 <?php esc_html_e( 'Suggest a Feature', 'commentswp' ); ?> 68 </a> 69 </p> 62 70 </div> 63 71 </div> -
commentswp/trunk/src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php
r3237139 r3451333 147 147 $build_limit;"; 148 148 149 // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.DirectDatabaseQuery 149 150 $data = $wpdb->get_results( $sql ); 150 151 … … 175 176 <th class="count"> 176 177 <?php 177 echo commentswp()->get( 'admin' )->dashboard->filters->get_comment_type_name( 178 commentswp()->get( 'admin' )->dashboard->filters->get( 'comment_type' ) 178 echo esc_html( 179 commentswp()->get( 'admin' )->dashboard->filters->get_comment_type_name( 180 commentswp()->get( 'admin' )->dashboard->filters->get( 'comment_type' ) 181 ) 179 182 ); 180 183 ?> -
commentswp/trunk/src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php
r3237139 r3451333 34 34 * 35 35 * @since 1.0.0 36 *37 * @var string38 36 */ 39 37 protected string $group_by = 'month'; 38 39 /** 40 * Sort order for months/weeks/days within a year. 41 * 42 * @since 1.3.0 43 */ 44 protected string $order_by = 'desc'; 40 45 41 46 /** … … 71 76 72 77 $this->group_by = ! empty( $filters['group_by'] ) ? $filters['group_by'] : $this->group_by; 78 $this->order_by = ! empty( $filters['order_by'] ) ? $filters['order_by'] : $this->order_by; 73 79 } 74 80 … … 81 87 82 88 // phpcs:disable WordPress.Security.NonceVerification.Missing 83 if ( empty( $_POST['tableFilters']['groupBy'] ) ) {89 if ( empty( $_POST['tableFilters']['groupBy'] ) && empty( $_POST['tableFilters']['orderBy'] ) ) { 84 90 return; 85 91 } 86 92 87 $group_by = sanitize_key( $_POST['tableFilters']['groupBy'] ); 93 $filters = get_option( "commentswp_card_{$this->class_low}_filters", [] ); 94 95 if ( empty( $filters ) ) { 96 $filters = [ 97 'group_by' => $this->group_by, 98 'order_by' => $this->order_by, 99 ]; 100 } 101 102 if ( ! empty( $_POST['tableFilters']['groupBy'] ) ) { 103 $group_by = sanitize_key( $_POST['tableFilters']['groupBy'] ); 104 105 if ( in_array( $group_by, [ 'year', 'month', 'week', 'day' ], true ) ) { 106 $filters['group_by'] = $group_by; 107 $this->group_by = $group_by; 108 } 109 } 110 111 if ( ! empty( $_POST['tableFilters']['orderBy'] ) ) { 112 $order_by = sanitize_key( $_POST['tableFilters']['orderBy'] ); 113 114 if ( in_array( $order_by, [ 'asc', 'desc' ], true ) ) { 115 $filters['order_by'] = $order_by; 116 $this->order_by = $order_by; 117 } 118 } 88 119 // phpcs:enable WordPress.Security.NonceVerification.Missing 89 120 90 if ( in_array( $group_by, [ 'year', 'month', 'week' ], true ) ) { 91 update_option( "commentswp_card_{$this->class_low}_filters", [ 'group_by' => $group_by ], false ); 92 93 $this->group_by = $group_by; 94 } 121 update_option( "commentswp_card_{$this->class_low}_filters", $filters, false ); 95 122 } 96 123 … … 102 129 public function cache_key(): string { 103 130 104 return $this->class_low . '_' . md5( wp_json_encode( $this->filters->all() ) . $this->group_by );131 return $this->class_low . '_' . md5( wp_json_encode( $this->filters->all() ) . $this->group_by . $this->order_by ); 105 132 } 106 133 … … 113 140 114 141 global $wpdb; 142 143 $order = strtoupper( $this->order_by ); 115 144 116 145 switch ( $this->group_by ) { … … 118 147 $sql_select_month = ''; 119 148 $sql_select_week = ''; 149 $sql_select_day = ''; 120 150 $sql_group_by_month = ''; 121 151 $sql_group_by_week = ''; 152 $sql_group_by_day = ''; 122 153 $sql_order_month = ''; 123 154 $sql_order_week = ''; 155 $sql_order_day = ''; 124 156 break; 125 157 … … 127 159 $sql_select_month = ''; 128 160 $sql_select_week = 'WEEK(comment_date) AS week,'; 161 $sql_select_day = ''; 129 162 $sql_group_by_month = ''; 130 163 $sql_group_by_week = ', week'; 164 $sql_group_by_day = ''; 131 165 $sql_order_month = ''; 132 $sql_order_week = ', week DESC'; 166 $sql_order_week = ", week $order"; 167 $sql_order_day = ''; 168 break; 169 170 case 'day': 171 $sql_select_month = 'MONTH(comment_date) AS month,'; 172 $sql_select_day = 'DAY(comment_date) AS day,'; 173 $sql_select_week = ''; 174 $sql_group_by_month = ', month'; 175 $sql_group_by_day = ', day'; 176 $sql_group_by_week = ''; 177 $sql_order_month = ", month $order"; 178 $sql_order_day = ", day $order"; 179 $sql_order_week = ''; 133 180 break; 134 181 … … 136 183 default: 137 184 $sql_select_month = 'MONTH(comment_date) AS month,'; 185 $sql_select_day = ''; 138 186 $sql_select_week = ''; 139 187 $sql_group_by_month = ', month'; 188 $sql_group_by_day = ''; 140 189 $sql_group_by_week = ''; 141 $sql_order_month = ', month DESC'; 190 $sql_order_month = ", month $order"; 191 $sql_order_day = ''; 142 192 $sql_order_week = ''; 143 193 break; … … 150 200 $sql_select_month 151 201 $sql_select_week 202 $sql_select_day 152 203 COUNT(*) AS total 153 FROM $wpdb->comments 204 FROM $wpdb->comments 154 205 WHERE comment_approved = 1 155 206 $sql_where_comment_type 156 GROUP BY year $sql_group_by_month $sql_group_by_week 157 ORDER BY year DESC $sql_order_month $sql_order_week"; 158 207 GROUP BY year $sql_group_by_month $sql_group_by_week $sql_group_by_day 208 ORDER BY year $order $sql_order_month $sql_order_week $sql_order_day"; 209 210 // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.DirectDatabaseQuery 159 211 $data = $wpdb->get_results( $sql, ARRAY_A ); 160 212 … … 162 214 if ( isset( $row['week'] ) ) { 163 215 $this->data[ $row['year'] ][ $row['week'] ] = $row['total']; 216 } elseif ( isset( $row['day'] ) ) { 217 // Store as month-day key to preserve full date info for rendering. 218 $date_key = $row['month'] . '-' . $row['day']; 219 $this->data[ $row['year'] ][ $date_key ] = $row['total']; 164 220 } elseif ( isset( $row['month'] ) ) { 165 221 $this->data[ $row['year'] ][ $row['month'] ] = $row['total']; … … 171 227 172 228 /** 173 * Render table-specific part of the card.174 * 175 * @since 1.0.0 176 */ 177 protected function render_data() { // phpcs:ignore Generic.Metrics.CyclomaticComplexity.TooHigh,Generic.Metrics.NestingLevel.MaxExceeded229 * Render a table-specific part of the card. 230 * 231 * @since 1.0.0 232 */ 233 protected function render_data(): void { // phpcs:ignore Generic.Metrics.CyclomaticComplexity.TooHigh,Generic.Metrics.NestingLevel.MaxExceeded,Generic.Metrics.CyclomaticComplexity.MaxExceeded 178 234 179 235 if ( empty( $this->data ) ) { … … 188 244 <th class="count"> 189 245 <?php 190 echo commentswp()->get( 'admin' )->dashboard->filters->get_comment_type_name( 191 commentswp()->get( 'admin' )->dashboard->filters->get( 'comment_type' ) 246 echo esc_html( 247 commentswp()->get( 'admin' )->dashboard->filters->get_comment_type_name( 248 commentswp()->get( 'admin' )->dashboard->filters->get( 'comment_type' ) 249 ) 192 250 ); 193 251 ?> … … 232 290 233 291 switch ( $this->group_by ) { 234 case 'week': 235 $string = sprintf( /* translators: %d - number of weeks with comments in this year. */ 236 _n( 237 '%d week', 238 '%d weeks', 239 count( $children ), 240 'commentswp' 241 ), 292 case 'day': 293 $string = sprintf( /* translators: %d - number of days with comments in this year. */ 294 _n( '%d day', '%d days', count( $children ), 'commentswp' ), 242 295 count( $children ) 243 296 ); 244 297 break; 245 298 299 case 'week': 300 $string = sprintf( /* translators: %d - number of weeks with comments in this year. */ 301 _n( '%d week', '%d weeks', count( $children ), 'commentswp' ), 302 count( $children ) 303 ); 304 break; 305 246 306 case 'month': 247 307 $string = sprintf( /* translators: %d - number of months with comments in this year. */ 248 _n( 249 '%d month', 250 '%d months', 251 count( $children ), 252 'commentswp' 253 ), 308 _n( '%d month', '%d months', count( $children ), 'commentswp' ), 254 309 count( $children ) 255 310 ); … … 292 347 esc_html( $week_start->format( 'M d' ) . ' - ' . $week_end->format( 'M d' ) ) 293 348 ); 349 } elseif ( $this->group_by === 'day' ) { 350 // $child is 'month-day' key (e.g., '1-31' for January 31). 351 [ $month, $day ] = explode( '-', $child ); 352 353 $comment_date .= '-' . str_pad( $month, 2, '0', STR_PAD_LEFT ); 354 $comment_date .= '-' . str_pad( $day, 2, '0', STR_PAD_LEFT ); 355 356 $date = DateTime::createFromFormat( '!n-j', $child ); 357 358 echo esc_html( $date->format( 'F j' ) ); 294 359 } else { 295 360 $comment_date .= '-' . str_pad( $child, 2, '0', STR_PAD_LEFT ); … … 320 385 * @since 1.0.0 321 386 */ 322 protected function display_filters() {387 protected function display_filters(): void { 323 388 ?> 324 389 325 <!--suppress HtmlFormInputWithoutLabel --> 326 <select 327 x-init="tableFilters.groupBy='<?php echo esc_attr( $this->group_by ); ?>'" 328 x-model="tableFilters.groupBy" 329 @change="$dispatch('<?php echo esc_attr( $this->class_low ); ?>-filters-changed', {groupBy: $event.target.value})"> 330 <option value="year" <?php selected( 'year', $this->group_by ); ?>> 331 <?php esc_html_e( 'Group by Year', 'commentswp' ); ?> 332 </option> 333 <option value="month" <?php selected( 'month', $this->group_by ); ?>> 334 <?php esc_html_e( 'Group by Month', 'commentswp' ); ?> 335 </option> 336 <option value="week" <?php selected( 'week', $this->group_by ); ?>> 337 <?php esc_html_e( 'Group by Week', 'commentswp' ); ?> 338 </option> 339 </select> 390 <div> 391 <!--suppress HtmlFormInputWithoutLabel --> 392 <select 393 x-init="tableFilters.groupBy='<?php echo esc_attr( $this->group_by ); ?>'" 394 x-model="tableFilters.groupBy" 395 @change="$dispatch('<?php echo esc_attr( $this->class_low ); ?>-filters-changed', {groupBy: $event.target.value})"> 396 <option value="year" <?php selected( 'year', $this->group_by ); ?>> 397 <?php esc_html_e( 'Group by Year', 'commentswp' ); ?> 398 </option> 399 <option value="month" <?php selected( 'month', $this->group_by ); ?>> 400 <?php esc_html_e( 'Group by Month', 'commentswp' ); ?> 401 </option> 402 <option value="week" <?php selected( 'week', $this->group_by ); ?>> 403 <?php esc_html_e( 'Group by Week', 'commentswp' ); ?> 404 </option> 405 <option value="day" <?php selected( 'day', $this->group_by ); ?>> 406 <?php esc_html_e( 'Group by Day', 'commentswp' ); ?> 407 </option> 408 </select> 409 410 <!--suppress HtmlFormInputWithoutLabel --> 411 <select 412 x-init="tableFilters.orderBy='<?php echo esc_attr( $this->order_by ); ?>'" 413 x-model="tableFilters.orderBy" 414 @change="$dispatch('<?php echo esc_attr( $this->class_low ); ?>-filters-changed', {orderBy: $event.target.value})"> 415 <option value="desc" <?php selected( 'desc', $this->order_by ); ?>> 416 <?php esc_html_e( 'Newest First', 'commentswp' ); ?> 417 </option> 418 <option value="asc" <?php selected( 'asc', $this->order_by ); ?>> 419 <?php esc_html_e( 'Oldest First', 'commentswp' ); ?> 420 </option> 421 </select> 422 </div> 340 423 341 424 <?php -
commentswp/trunk/src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php
r3237139 r3451333 162 162 <th class="count"> 163 163 <?php 164 echo commentswp()->get( 'admin' )->dashboard->filters->get_comment_type_name( 165 commentswp()->get( 'admin' )->dashboard->filters->get( 'comment_type' ) 164 echo esc_html( 165 commentswp()->get( 'admin' )->dashboard->filters->get_comment_type_name( 166 commentswp()->get( 'admin' )->dashboard->filters->get( 'comment_type' ) 167 ) 166 168 ); 167 169 ?> -
commentswp/trunk/src/Admin/Pages/Dashboard/DashboardPage.php
r3237139 r3451333 61 61 $this->filters = $filters; 62 62 63 if ( wp_doing_ajax() ) { 64 $this->populate_cards(); 65 } 63 if ( $this->is_dashboard_ajax_request() ) { 64 add_action( 'init', [ $this, 'populate_cards' ] ); 65 } 66 } 67 68 /** 69 * Check if this is a CommentsWP dashboard AJAX request. 70 * 71 * @since 1.3.0 72 */ 73 private function is_dashboard_ajax_request(): bool { 74 75 if ( ! wp_doing_ajax() ) { 76 return false; 77 } 78 79 // phpcs:ignore WordPress.Security.NonceVerification.Recommended 80 $action = isset( $_REQUEST['action'] ) ? sanitize_key( $_REQUEST['action'] ) : ''; 81 82 // Dashboard card AJAX actions follow the pattern: commentswp_{cardname}_refresh. 83 return strpos( $action, 'commentswp_' ) === 0 && substr( $action, -8 ) === '_refresh'; 66 84 } 67 85 … … 75 93 add_action( 76 94 'commentswp_admin_render_title_' . self::PAGE_SLUG, 77 static function () {95 static function () { 78 96 echo esc_html__( 'Dashboard', 'commentswp' ); 79 97 } … … 88 106 * @since 1.2.0 89 107 */ 90 public function register_admin_menu(): void { 108 public function register_admin_menu(): void { // phpcs:ignore WPForms.PHP.HooksMethod.InvalidPlaceForAddingHooks 91 109 92 110 $dash_hook_suffix = add_comments_page( … … 109 127 * @since 1.0.0 110 128 */ 111 private function populate_cards(): void { 129 public function populate_cards(): void { 130 131 // Prevent double population. 132 if ( ! empty( $this->cards ) ) { 133 return; 134 } 112 135 113 136 /** … … 214 237 ?> 215 238 216 <div id="commentswp-dashboard" 239 <div id="commentswp-dashboard" class="commentswp-page" 217 240 x-cloak 218 241 x-data="{ 219 itemsPerPage: <?php echo (int) $items_per_page; ?>,220 period: '<?php echo esc_attr( $period ); ?>',221 commentType: '<?php echo esc_attr( $comment_type ); ?>',222 _ajax_nonce: '<?php echo wp_create_nonce( 'commentswp_dashboard_filters'); ?>'242 itemsPerPage: <?php echo (int) $items_per_page; ?>, 243 period: '<?php echo esc_attr( $period ); ?>', 244 commentType: '<?php echo esc_attr( $comment_type ); ?>', 245 _ajax_nonce: '<?php echo esc_attr( wp_create_nonce( 'commentswp_dashboard_filters' ) ); ?>' 223 246 }"> 224 247 … … 241 264 $periods = $this->filters->get_periods(); 242 265 $items_per_page = $this->filters->get_items_per_page(); 243 $types = $this->filters->get_comment_types() 266 $types = $this->filters->get_comment_types(); 244 267 ?> 245 268 246 269 <div id="commentswp-filters" x-data="{}"> 247 <h2 ><?php esc_html_e( 'Filters', 'commentswp' ); ?></h2>270 <h2 class="screen-reader-text"><?php esc_html_e( 'Filters', 'commentswp' ); ?></h2> 248 271 249 272 <div class="commentswp-filter commentswp-filter-content_type"> 273 <!--suppress HtmlFormInputWithoutLabel --> 250 274 <select name="comment_type" title="<?php esc_attr_e( 'Comment Type', 'commentswp' ); ?>" 251 x-model="commentType" 275 x-model.fill="commentType" 276 <?php if ( empty( $types ) ) : ?> 277 disabled 278 <?php endif; ?> 252 279 @change="$dispatch('comment-type-changed', { commentType: $event.target.value })"> 253 280 254 <?php foreach ( $types as $type => $label ) : ?> 255 <option value="<?php echo esc_attr( $type ); ?>"> 256 <?php echo esc_html( $label ); ?> 281 <?php if ( empty( $types ) ) : ?> 282 283 <option value="comment" selected> 284 <?php esc_html_e( 'No comment types found', 'commentswp' ); ?> 257 285 </option> 258 <?php endforeach; ?> 286 287 <?php else : ?> 288 289 <?php foreach ( $types as $type => $label ) : ?> 290 <option value="<?php echo esc_attr( $type ); ?>"> 291 <?php echo esc_html( $label ); ?> 292 </option> 293 <?php endforeach; ?> 294 295 <?php endif; ?> 259 296 </select> 260 297 </div> -
commentswp/trunk/src/Admin/Pages/Dashboard/Filters.php
r3237139 r3451333 130 130 * @return string 131 131 */ 132 private function validate_period( $period ): string {132 private function validate_period( string $period ): string { 133 133 134 134 if ( ! in_array( $period, self::PERIODS, true ) ) { … … 144 144 * @since 1.0.0 145 145 * 146 * @param string|int $per_page Value to validate. Fallback to the default value on error.147 */ 148 private function validate_per_page( $per_page ): string {146 * @param int $per_page Value to validate. Fallback to the default value on error. 147 */ 148 private function validate_per_page( int $per_page ): string { 149 149 150 150 $per_page = absint( $per_page ); … … 195 195 * @return mixed 196 196 */ 197 public function get( $name ) {197 public function get( string $name ) { 198 198 199 199 $name = sanitize_key( $name ); … … 321 321 } 322 322 323 // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared 323 324 return $wpdb->prepare( $sql, $type ); 324 325 } … … 328 329 * 329 330 * @since 1.0.0 330 * 331 * @return array 332 */ 333 public function get_periods() { 331 */ 332 public function get_periods(): array { 334 333 335 334 /** … … 360 359 * 361 360 * @since 1.0.0 362 * 363 * @return array 364 */ 365 public function get_items_per_page() { 361 */ 362 public function get_items_per_page(): array { 366 363 367 364 /** … … 389 386 * 390 387 * @since 1.2.0 391 * 392 * @return array 393 */ 394 public function get_comment_types() { 388 */ 389 public function get_comment_types(): array { 395 390 396 391 // This filter has such a weird name for a reason: see \WP_Comments_List_Table::comment_type_dropdown(). … … 404 399 ); 405 400 401 // Filter out comment types that don't exist in the DB. 406 402 if ( ! empty( $types ) ) { 407 403 $types = array_filter( … … 429 425 * 430 426 * @param string $type Comment type. 431 *432 * @return string433 427 */ 434 428 public function get_comment_type_name( string $type ): string { -
commentswp/trunk/src/Admin/Pages/Profiles/ProfilesPage.php
r3237139 r3451333 14 14 15 15 public const PAGE_SLUG = 'profiles'; 16 public const PRIORITY = 20; 16 17 17 18 private string $page_base; … … 20 21 * Profiles constructor. 21 22 * 22 * @since 1. 1.023 * @since 1.2.0 23 24 */ 24 25 public function __construct() { … … 38 39 } 39 40 40 add_action( 'commentswp_admin_render_title_' . self::PAGE_SLUG, static function() {41 add_action( 'commentswp_admin_render_title_' . self::PAGE_SLUG, static function () { 41 42 echo esc_html__( 'Profiles', 'commentswp' ); 42 43 } ); … … 58 59 'commentswp-' . self::PAGE_SLUG, 59 60 [ commentswp()->get( 'admin' ), 'render' ], 60 2061 self::PRIORITY 61 62 ); 62 63 … … 71 72 * All CSS and JS assets are enqueued here. 72 73 * 73 * @since 1. 1.074 * @since 1.2.0 74 75 */ 75 76 public function enqueue_assets(): void { … … 86 87 * Render the profiles' list page. 87 88 * 88 * @since 1. 1.089 * @since 1.2.0 89 90 */ 90 91 public function render(): void { … … 92 93 ?> 93 94 94 <div id="commentswp-profiles" 95 <div id="commentswp-profiles" class="commentswp-page" 95 96 x-cloak 96 97 x-data="{}"> … … 115 116 * @since 1.2.0 116 117 */ 117 public function process_bulk_action(): void { 118 public function process_bulk_action(): void { // phpcs:ignore Generic.Metrics.CyclomaticComplexity.MaxExceeded 118 119 119 120 if ( ! current_user_can( 'moderate_comments' ) ) { … … 128 129 129 130 if ( empty( $_POST['profile'] ) || ! isset( $_POST['_wpnonce'] ) ) { 130 r ay('$_POST', $_POST['profile']);131 return;132 } 133 131 return; 132 } 133 134 // phpcs:ignore WordPress.Security.ValidatedSanitizedInput 134 135 if ( ! wp_verify_nonce( $_POST['_wpnonce'], 'bulk-' . $this->page_base ) ) { 135 ray('nonce', $_POST['_wpnonce']);136 136 return; 137 137 } … … 158 158 $placeholders = array_fill( 0, count( $emails ), '%s' ); 159 159 160 // phpcs:ignore WordPress.DB.DirectDatabaseQuery 160 161 $comments_to_delete = $wpdb->get_col( 161 162 $wpdb->prepare( 162 "SELECT comment_ID FROM $wpdb->comments 163 WHERE comment_author_email IN (" . implode( ',', $placeholders ) . ")", 163 "SELECT comment_ID FROM $wpdb->comments 164 WHERE comment_author_email IN (" . implode( ',', $placeholders ) . ")", // phpcs:ignore WordPress.DB.PreparedSQL,WordPress.DB.PreparedSQLPlaceholders 164 165 $emails 165 166 ) 166 );167 ); 167 168 168 169 if ( empty( $comments_to_delete ) ) { 169 170 return; 170 171 } 172 173 $deleted = []; 171 174 172 175 foreach ( $comments_to_delete as $comment_id ) { … … 194 197 * 195 198 * @since 1.2.0 196 *197 * @return void198 199 */ 199 200 public function display_admin_notices() { 200 201 201 202 // Check if we have a deletion notice. 203 // phpcs:ignore WordPress.Security.NonceVerification.Recommended 202 204 if ( ! empty( $_REQUEST['deleted'] ) ) { 203 $count = (int) $_REQUEST['deleted']; 204 $message = sprintf( 205 _n( /* translators: %d: number of deleted comments. */ 205 // phpcs:ignore WordPress.Security.NonceVerification.Recommended 206 $count = (int) $_REQUEST['deleted']; 207 $message = sprintf( /* translators: %d: number of deleted comments. */ 208 _n( 206 209 '%d comment has been permanently deleted.', 207 210 '%d comments have been permanently deleted.', -
commentswp/trunk/src/Admin/Pages/Profiles/Table.php
r3237139 r3451333 135 135 /** 136 136 * Get the total number of profiles. 137 * TODO: add caching. 137 138 * 138 139 * @since 1.2.0 … … 147 148 AND $wpdb->comments.comment_type IN ( '', 'comment' );"; 148 149 149 // TODO: add caching.150 // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.DirectDatabaseQuery 150 151 return (int) $wpdb->get_var( $sql ); 151 152 } … … 189 190 LIMIT $start, $this->per_page;"; 190 191 192 // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.DirectDatabaseQuery 191 193 $rows = $wpdb->get_results( $sql ); 192 194 -
commentswp/trunk/src/Admin/Pages/Profiles/TableItem.php
r3237139 r3451333 17 17 * 18 18 * @since 1.2.0 19 *20 * @param object $item Single item.21 19 */ 22 20 public function __construct( $item ) { 23 21 24 $this->names = $item->names ;25 $this->email = $item->email ;26 $this->comments = (int) $item->comments;27 $this->first_comment_id = (int) $item->first_comment_id;28 $this->last_comment_id = (int) $item->last_comment_id;29 $this->first_comment_date = $item->first_comment_date ;30 $this->last_comment_date = $item->last_comment_date ;22 $this->names = $item->names ?? []; 23 $this->email = $item->email ?? ''; 24 $this->comments = (int) ( $item->comments ?? 0 ); 25 $this->first_comment_id = (int) ( $item->first_comment_id ?? 0 ); 26 $this->last_comment_id = (int) ( $item->last_comment_id ?? 0 ); 27 $this->first_comment_date = $item->first_comment_date ?? ''; 28 $this->last_comment_date = $item->last_comment_date ?? ''; 31 29 } 32 30 … … 43 41 44 42 return array_map( 45 function ( $item ) {43 static function ( $item ) { 46 44 47 45 return new self( $item ); -
commentswp/trunk/src/Helpers/Arr.php
r2759440 r3451333 15 15 * @since 1.0.0 16 16 * 17 * @param array $a rrayArray to flatten.17 * @param array $a Array to flatten. 18 18 * @param int $depth How deep should it go. 19 *20 * @return array21 19 */ 22 public static function flatten( $array, $depth = INF ){20 public static function flatten( array $a, $depth = INF ): array { 23 21 24 22 $result = []; 25 23 26 foreach ( $a rrayas $item ) {24 foreach ( $a as $item ) { 27 25 if ( ! is_array( $item ) ) { 28 26 $result[] = $item; -
commentswp/trunk/src/Helpers/URL.php
r2909191 r3451333 24 24 * @return string 25 25 */ 26 public static function add_utm( $url, $medium, $content = '', $term = '' ){26 public static function add_utm( string $url, string $medium, string $content = '', string $term = '' ): string { 27 27 28 28 return add_query_arg( -
commentswp/trunk/src/Loader.php
r3237139 r3451333 17 17 * @var array 18 18 */ 19 private $classes = [];19 private array $classes = []; 20 20 21 21 /** … … 24 24 * @since 1.0.0 25 25 */ 26 public function init() {26 public function init(): void { 27 27 28 28 $this->populate_classes(); … … 44 44 45 45 /** 46 * Populate Admin related classes.46 * Populate Admin-related classes. 47 47 * 48 48 * @since 1.0.0 -
commentswp/trunk/src/Plugin.php
r3237139 r3451333 64 64 ); 65 65 } 66 67 /** 68 * Activation hook. 69 * 70 * @since 1.3.0 71 */ 72 public static function activated(): void { 73 74 // Activation time, added only once. 75 add_option( 'commentswp_activation', time(), '', 'no' ); 76 } 66 77 } -
commentswp/trunk/src/Tasks/Tasks.php
r2759440 r3451333 3 3 namespace CommentsWP\Tasks; 4 4 5 use ActionScheduler_DBStore; 5 6 use CommentsWP\Helpers\Transient; 7 use ActionScheduler_DataController; 6 8 7 9 /** 8 * Class Tasks manages the task s queue and providesAPI to work with it.10 * Class Tasks manages the task queue and provides an API to work with it. 9 11 * Inspired by WPForms. 10 12 * … … 25 27 * @since 1.0.0 26 28 */ 27 public function init() {29 public function init(): void { 28 30 29 31 // Register tasks. … … 45 47 * @since 1.0.0 46 48 */ 47 public function hooks() {49 public function hooks(): void { 48 50 49 51 add_action( 'delete_expired_transients', [ Transient::class, 'delete_all_expired' ], 11 ); … … 60 62 * @return Task[] List of tasks classes. 61 63 */ 62 public function get_tasks() {64 public function get_tasks(): array { 63 65 64 66 if ( ! $this->is_usable() ) { … … 66 68 } 67 69 68 $tasks = [ 69 //Tasks\ExampleTask::class, 70 ]; 70 // A list of task classes, with ::class. 71 $tasks = []; 71 72 72 73 return apply_filters( 'commentswp_tasks_get_tasks', $tasks ); … … 111 112 * @param string $group Group to cancel all actions for. 112 113 */ 113 public function cancel_all( $group = '' ){114 public function cancel_all( string $group = '' ): void { 114 115 115 116 if ( empty( $group ) ) { … … 120 121 121 122 if ( class_exists( 'ActionScheduler_DBStore' ) ) { 122 \ActionScheduler_DBStore::instance()->cancel_actions_by_group( $group );123 ActionScheduler_DBStore::instance()->cancel_actions_by_group( $group ); 123 124 } 124 125 } … … 131 132 * @return bool 132 133 */ 133 public function is_usable() {134 public function is_usable(): bool { 134 135 135 136 // No tasks if ActionScheduler wasn't loaded. … … 138 139 } 139 140 140 return \ActionScheduler_DataController::is_migration_complete();141 return ActionScheduler_DataController::is_migration_complete(); 141 142 } 142 143 143 144 /** 144 * Whether task has been scheduled and is pending.145 * Whether a task has been scheduled and is pending. 145 146 * 146 147 * @since 1.0.0 … … 150 151 * @return bool 151 152 */ 152 public function is_scheduled( $hook ){153 public function is_scheduled( string $hook ): bool { 153 154 154 155 if ( ! function_exists( 'as_next_scheduled_action' ) ) { -
commentswp/trunk/vendor/autoload.php
r3237139 r3451333 15 15 } 16 16 } 17 trigger_error( 18 $err, 19 E_USER_ERROR 20 ); 17 throw new RuntimeException($err); 21 18 } 22 19 -
commentswp/trunk/vendor/composer/InstalledVersions.php
r3237139 r3451333 27 27 class InstalledVersions 28 28 { 29 /** 30 * @var string|null if set (by reflection by Composer), this should be set to the path where this class is being copied to 31 * @internal 32 */ 33 private static $selfDir = null; 34 29 35 /** 30 36 * @var mixed[]|null … … 324 330 325 331 /** 332 * @return string 333 */ 334 private static function getSelfDir() 335 { 336 if (self::$selfDir === null) { 337 self::$selfDir = strtr(__DIR__, '\\', '/'); 338 } 339 340 return self::$selfDir; 341 } 342 343 /** 326 344 * @return array[] 327 345 * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}> … … 337 355 338 356 if (self::$canGetVendors) { 339 $selfDir = s trtr(__DIR__, '\\', '/');357 $selfDir = self::getSelfDir(); 340 358 foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { 341 359 $vendorDir = strtr($vendorDir, '\\', '/'); -
commentswp/trunk/vendor/composer/autoload_static.php
r3237139 r3451333 8 8 { 9 9 public static $prefixLengthsPsr4 = array ( 10 'C' => 10 'C' => 11 11 array ( 12 12 'CommentsWP\\' => 11, … … 15 15 16 16 public static $prefixDirsPsr4 = array ( 17 'CommentsWP\\' => 17 'CommentsWP\\' => 18 18 array ( 19 19 0 => __DIR__ . '/../..' . '/src', -
commentswp/trunk/vendor/composer/installed.php
r3237139 r3451333 4 4 'pretty_version' => 'dev-main', 5 5 'version' => 'dev-main', 6 'reference' => ' c3c7760d855a7d0abfe3667d0a04e4b4f902123a',6 'reference' => '1175dc2f689173fa24d74dbd39b7de42ca540231', 7 7 'type' => 'wordpress-plugin', 8 8 'install_path' => __DIR__ . '/../../', … … 14 14 'pretty_version' => 'dev-latest', 15 15 'version' => 'dev-latest', 16 'reference' => ' 24296413a9838930e7c039f5eaf985ccec766103',16 'reference' => '8457f2008fc6396be788162c4e04228028306534', 17 17 'type' => 'metapackage', 18 18 'install_path' => null, … … 25 25 'pretty_version' => 'dev-main', 26 26 'version' => 'dev-main', 27 'reference' => ' c3c7760d855a7d0abfe3667d0a04e4b4f902123a',27 'reference' => '1175dc2f689173fa24d74dbd39b7de42ca540231', 28 28 'type' => 'wordpress-plugin', 29 29 'install_path' => __DIR__ . '/../../', … … 32 32 ), 33 33 'woocommerce/action-scheduler' => array( 34 'pretty_version' => '3.9. 2',35 'version' => '3.9. 2.0',36 'reference' => ' efbb7953f72a433086335b249292f280dd43ddfe',34 'pretty_version' => '3.9.3', 35 'version' => '3.9.3.0', 36 'reference' => 'c58cdbab17651303d406cd3b22cf9d75c71c986c', 37 37 'type' => 'wordpress-plugin', 38 38 'install_path' => __DIR__ . '/../woocommerce/action-scheduler', -
commentswp/trunk/vendor/composer/platform_check.php
r3237139 r3451333 5 5 $issues = array(); 6 6 7 if (!(PHP_VERSION_ID >= 70 100)) {8 $issues[] = 'Your Composer dependencies require a PHP version ">= 7. 1.0". You are running ' . PHP_VERSION . '.';7 if (!(PHP_VERSION_ID >= 70200)) { 8 $issues[] = 'Your Composer dependencies require a PHP version ">= 7.2.0". You are running ' . PHP_VERSION . '.'; 9 9 } 10 10 … … 20 20 } 21 21 } 22 trigger_error( 23 'Composer detected issues in your platform: ' . implode(' ', $issues), 24 E_USER_ERROR 22 throw new \RuntimeException( 23 'Composer detected issues in your platform: ' . implode(' ', $issues) 25 24 ); 26 25 } -
commentswp/trunk/vendor/woocommerce/action-scheduler/action-scheduler.php
r3237139 r3451333 6 6 * Author: Automattic 7 7 * Author URI: https://automattic.com/ 8 * Version: 3.9. 28 * Version: 3.9.3 9 9 * License: GPLv3 10 10 * Requires at least: 6.5 11 * Tested up to: 6. 712 * Requires PHP: 7. 111 * Tested up to: 6.8 12 * Requires PHP: 7.2 13 13 * 14 14 * Copyright 2019 Automattic, Inc. (https://automattic.com/contact/) … … 30 30 */ 31 31 32 if ( ! function_exists( 'action_scheduler_register_3_dot_9_dot_ 2' ) && function_exists( 'add_action' ) ) { // WRCS: DEFINED_VERSION.32 if ( ! function_exists( 'action_scheduler_register_3_dot_9_dot_3' ) && function_exists( 'add_action' ) ) { // WRCS: DEFINED_VERSION. 33 33 34 34 if ( ! class_exists( 'ActionScheduler_Versions', false ) ) { … … 37 37 } 38 38 39 add_action( 'plugins_loaded', 'action_scheduler_register_3_dot_9_dot_ 2', 0, 0 ); // WRCS: DEFINED_VERSION.39 add_action( 'plugins_loaded', 'action_scheduler_register_3_dot_9_dot_3', 0, 0 ); // WRCS: DEFINED_VERSION. 40 40 41 41 // phpcs:disable Generic.Functions.OpeningFunctionBraceKernighanRitchie.ContentAfterBrace … … 43 43 * Registers this version of Action Scheduler. 44 44 */ 45 function action_scheduler_register_3_dot_9_dot_ 2() { // WRCS: DEFINED_VERSION.45 function action_scheduler_register_3_dot_9_dot_3() { // WRCS: DEFINED_VERSION. 46 46 $versions = ActionScheduler_Versions::instance(); 47 $versions->register( '3.9. 2', 'action_scheduler_initialize_3_dot_9_dot_2' ); // WRCS: DEFINED_VERSION.47 $versions->register( '3.9.3', 'action_scheduler_initialize_3_dot_9_dot_3' ); // WRCS: DEFINED_VERSION. 48 48 } 49 49 … … 52 52 * Initializes this version of Action Scheduler. 53 53 */ 54 function action_scheduler_initialize_3_dot_9_dot_ 2() { // WRCS: DEFINED_VERSION.54 function action_scheduler_initialize_3_dot_9_dot_3() { // WRCS: DEFINED_VERSION. 55 55 // A final safety check is required even here, because historic versions of Action Scheduler 56 56 // followed a different pattern (in some unusual cases, we could reach this point and the … … 64 64 // Support usage in themes - load this version if no plugin has loaded a version yet. 65 65 if ( did_action( 'plugins_loaded' ) && ! doing_action( 'plugins_loaded' ) && ! class_exists( 'ActionScheduler', false ) ) { 66 action_scheduler_initialize_3_dot_9_dot_ 2(); // WRCS: DEFINED_VERSION.66 action_scheduler_initialize_3_dot_9_dot_3(); // WRCS: DEFINED_VERSION. 67 67 do_action( 'action_scheduler_pre_theme_init' ); 68 68 ActionScheduler_Versions::initialize_latest_version(); -
commentswp/trunk/vendor/woocommerce/action-scheduler/changelog.txt
r3237139 r3451333 1 1 *** Changelog *** 2 3 = 3.9.3 - 2025-07-15 = 4 * Add hook 'action_scheduler_ensure_recurring_actions' specifically for scheduling recurring actions. 5 * Assume an action is valid until proven otherwise. 6 * Implement SKIP LOCKED during action claiming. 7 * Import `get_flag_value()` from `WP_CLI\Utils` before using. 8 * Make `$unique` available to all pre-creation/short-circuit hooks. 9 * Make version/source information available via new class. 10 * Only release claims on pending actions. 11 * Tweak - WP 6.8 compatibility. 12 * Update minimum supported php and phpunit versions. 13 * Update readme.txt. 14 * WP CLI get action command: correct parentheses/nesting of conditional checks. 2 15 3 16 = 3.9.2 - 2025-02-03 = -
commentswp/trunk/vendor/woocommerce/action-scheduler/classes/ActionScheduler_DataController.php
r3237139 r3451333 163 163 } 164 164 165 $wp_object_cache->group_ops = array(); 166 $wp_object_cache->stats = array(); 167 $wp_object_cache->memcache_debug = array(); 168 $wp_object_cache->cache = array(); 165 // Not all drop-ins support these props, however, there may be existing installations that rely on these being cleared. 166 if ( property_exists( $wp_object_cache, 'group_ops' ) ) { 167 $wp_object_cache->group_ops = array(); 168 } 169 if ( property_exists( $wp_object_cache, 'stats' ) ) { 170 $wp_object_cache->stats = array(); 171 } 172 if ( property_exists( $wp_object_cache, 'memcache_debug' ) ) { 173 $wp_object_cache->memcache_debug = array(); 174 } 175 if ( property_exists( $wp_object_cache, 'cache' ) ) { 176 $wp_object_cache->cache = array(); 177 } 169 178 170 179 if ( is_callable( array( $wp_object_cache, '__remoteset' ) ) ) { -
commentswp/trunk/vendor/woocommerce/action-scheduler/classes/ActionScheduler_wcSystemStatus.php
r2759440 r3451333 77 77 $action = $this->store->query_actions( 78 78 array( 79 'claimed' => false,80 79 'status' => $status, 81 80 'per_page' => 1, -
commentswp/trunk/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Create_Command.php
r3237139 r3451333 2 2 3 3 namespace Action_Scheduler\WP_CLI\Action; 4 5 use function \WP_CLI\Utils\get_flag_value; 4 6 5 7 /** -
commentswp/trunk/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Get_Command.php
r3237139 r3451333 25 25 26 26 $only_logs = ! empty( $this->assoc_args['field'] ) && 'log_entries' === $this->assoc_args['field']; 27 $only_logs = $only_logs || ( ! empty( $this->assoc_args['fields'] && 'log_entries' === $this->assoc_args['fields'] ));27 $only_logs = $only_logs || ( ! empty( $this->assoc_args['fields'] ) && 'log_entries' === $this->assoc_args['fields'] ); 28 28 $log_entries = array(); 29 29 -
commentswp/trunk/vendor/woocommerce/action-scheduler/classes/WP_CLI/System_Command.php
r3237139 r3451333 263 263 264 264 $args = array( 265 'claimed' => false,266 265 'status' => $status, 267 266 'per_page' => 1, -
commentswp/trunk/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler.php
r3237139 r3451333 185 185 ActionScheduler_DataController::init(); 186 186 187 $store = self::store(); 188 $logger = self::logger(); 189 $runner = self::runner(); 190 $admin_view = self::admin_view(); 187 $store = self::store(); 188 $logger = self::logger(); 189 $runner = self::runner(); 190 $admin_view = self::admin_view(); 191 $recurring_action_scheduler = new ActionScheduler_RecurringActionScheduler(); 191 192 192 193 // Ensure initialization on plugin activation. … … 197 198 add_action( 'init', array( $logger, 'init' ), 1, 0 ); 198 199 add_action( 'init', array( $runner, 'init' ), 1, 0 ); 200 add_action( 'init', array( $recurring_action_scheduler, 'init' ), 1, 0 ); 199 201 200 202 add_action( … … 224 226 $logger->init(); 225 227 $runner->init(); 228 $recurring_action_scheduler->init(); 226 229 self::$data_store_initialized = true; 227 230 -
commentswp/trunk/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_QueueRunner.php
r3237139 r3451333 87 87 try { 88 88 try { 89 $valid_action = false; 89 $valid_action = true; 90 90 91 do_action( 'action_scheduler_before_execute', $action_id, $context ); 91 92 92 93 if ( ActionScheduler_Store::STATUS_PENDING !== $this->store->get_status( $action_id ) ) { 94 $valid_action = false; 93 95 do_action( 'action_scheduler_execution_ignored', $action_id, $context ); 94 96 return; 95 97 } 96 98 97 $valid_action = true;98 99 do_action( 'action_scheduler_begin_execute', $action_id, $context ); 99 100 -
commentswp/trunk/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_DBStore.php
r3237139 r3451333 932 932 */ 933 933 global $wpdb; 934 935 934 $now = as_get_datetime_object(); 936 935 $date = is_null( $before_date ) ? $now : clone $before_date; 937 // can't use $wpdb->update() because of the <= condition.938 $update = "UPDATE {$wpdb->actionscheduler_actions} SET claim_id=%d, last_attempt_gmt=%s, last_attempt_local=%s";939 $params = array(940 $claim_id,941 $now->format( 'Y-m-d H:i:s' ),942 current_time( 'mysql' ),943 );944 936 945 937 // Set claim filters. … … 955 947 } 956 948 957 $where = 'WHERE claim_id = 0 AND scheduled_date_gmt <= %s AND status=%s'; 958 $params[] = $date->format( 'Y-m-d H:i:s' ); 959 $params[] = self::STATUS_PENDING; 949 $where = 'WHERE claim_id = 0 AND scheduled_date_gmt <= %s AND status=%s'; 950 $where_params = array( 951 $date->format( 'Y-m-d H:i:s' ), 952 self::STATUS_PENDING, 953 ); 960 954 961 955 if ( ! empty( $hooks ) ) { 962 956 $placeholders = array_fill( 0, count( $hooks ), '%s' ); 963 $where .= ' AND hook IN (' . join( ', ', $placeholders ) . ')';964 $ params = array_merge( $params, array_values( $hooks ) );957 $where .= ' AND hook IN (' . join( ', ', $placeholders ) . ')'; 958 $where_params = array_merge( $where_params, array_values( $hooks ) ); 965 959 } 966 960 … … 997 991 * Sets the order-by clause used in the action claim query. 998 992 * 999 * @since 3.4.01000 * @since 3.8.3 Made $claim_id and $hooks available.1001 *1002 993 * @param string $order_by_sql 1003 994 * @param string $claim_id Claim Id. 1004 * @param array $hooks Hooks to filter for. 1005 */ 1006 $order = apply_filters( 'action_scheduler_claim_actions_order_by', 'ORDER BY priority ASC, attempts ASC, scheduled_date_gmt ASC, action_id ASC', $claim_id, $hooks ); 1007 $params[] = $limit; 1008 1009 $sql = $wpdb->prepare( "{$update} {$where} {$order} LIMIT %d", $params ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.PreparedSQLPlaceholders 1010 $rows_affected = $wpdb->query( $sql ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching 995 * @param array $hooks Hooks to filter for. 996 * 997 * @since 3.8.3 Made $claim_id and $hooks available. 998 * @since 3.4.0 999 */ 1000 $order = apply_filters( 'action_scheduler_claim_actions_order_by', 'ORDER BY priority ASC, attempts ASC, scheduled_date_gmt ASC, action_id ASC', $claim_id, $hooks ); 1001 $skip_locked = $this->db_supports_skip_locked() ? ' SKIP LOCKED' : ''; 1002 1003 // Selecting the action_ids that we plan to claim, while skipping any locked rows to avoid deadlocking. 1004 $select_sql = $wpdb->prepare( "SELECT action_id from {$wpdb->actionscheduler_actions} {$where} {$order} LIMIT %d FOR UPDATE{$skip_locked}", array_merge( $where_params, array( $limit ) ) ); 1005 1006 // Now place it into an UPDATE statement by joining the result sets, allowing for the SKIP LOCKED behavior to take effect. 1007 $update_sql = "UPDATE {$wpdb->actionscheduler_actions} t1 JOIN ( $select_sql ) t2 ON t1.action_id = t2.action_id SET claim_id=%d, last_attempt_gmt=%s, last_attempt_local=%s"; 1008 $update_params = array( 1009 $claim_id, 1010 $now->format( 'Y-m-d H:i:s' ), 1011 current_time( 'mysql' ), 1012 ); 1013 1014 $rows_affected = $wpdb->query( $wpdb->prepare( $update_sql, $update_params ) ); 1011 1015 if ( false === $rows_affected ) { 1012 1016 $error = empty( $wpdb->last_error ) 1013 1017 ? _x( 'unknown', 'database error', 'action-scheduler' ) 1014 1018 : $wpdb->last_error; 1015 1016 1019 throw new \RuntimeException( 1017 1020 sprintf( … … 1027 1030 1028 1031 /** 1032 * Determines whether the database supports using SKIP LOCKED. This logic mimicks the $wpdb::has_cap() logic. 1033 * 1034 * SKIP_LOCKED support was added to MariaDB in 10.6.0 and to MySQL in 8.0.1 1035 * 1036 * @return bool 1037 */ 1038 private function db_supports_skip_locked() { 1039 global $wpdb; 1040 $db_version = $wpdb->db_version(); 1041 $db_server_info = $wpdb->db_server_info(); 1042 $is_mariadb = ( false !== strpos( $db_server_info, 'MariaDB' ) ); 1043 1044 if ( $is_mariadb && 1045 '5.5.5' === $db_version && 1046 PHP_VERSION_ID < 80016 // PHP 8.0.15 or older. 1047 ) { 1048 /* 1049 * Account for MariaDB version being prefixed with '5.5.5-' on older PHP versions. 1050 */ 1051 $db_server_info = preg_replace( '/^5\.5\.5-(.*)/', '$1', $db_server_info ); 1052 $db_version = preg_replace( '/[^0-9.].*/', '', $db_server_info ); 1053 } 1054 1055 $is_supported = ( $is_mariadb && version_compare( $db_version, '10.6.0', '>=' ) ) || 1056 ( ! $is_mariadb && version_compare( $db_version, '8.0.1', '>=' ) ); 1057 1058 /** 1059 * Filter whether the database supports the SKIP LOCKED modifier for queries. 1060 * 1061 * @param bool $is_supported Whether SKIP LOCKED is supported. 1062 * 1063 * @since 3.9.3 1064 */ 1065 return apply_filters( 'action_scheduler_db_supports_skip_locked', $is_supported ); 1066 } 1067 1068 /** 1029 1069 * Get the number of active claims. 1030 1070 * … … 1095 1135 1096 1136 /** 1097 * Release actions from a claim and delete the claim.1137 * Release pending actions from a claim and delete the claim. 1098 1138 * 1099 1139 * @param ActionScheduler_ActionClaim $claim Claim object. … … 1107 1147 */ 1108 1148 global $wpdb; 1149 1150 if ( 0 === intval( $claim->get_id() ) ) { 1151 // Verify that the claim_id is valid before attempting to release it. 1152 return; 1153 } 1109 1154 1110 1155 /** … … 1114 1159 * 1115 1160 * We resolve this by getting all the actions_id that we want to release claim from in a separate query, and then releasing the claim on each of them. This way, our lock is acquired on the action_id index instead of the claim_id index. Note that the lock on claim_id will still be acquired, but it will only when we actually make the update, rather than when we select the actions. 1116 */ 1117 $action_ids = $wpdb->get_col( $wpdb->prepare( "SELECT action_id FROM {$wpdb->actionscheduler_actions} WHERE claim_id = %d", $claim->get_id() ) ); 1161 * 1162 * We only release pending actions in order for them to be claimed by another process. 1163 */ 1164 $action_ids = $wpdb->get_col( $wpdb->prepare( "SELECT action_id FROM {$wpdb->actionscheduler_actions} WHERE claim_id = %d AND status = %s", $claim->get_id(), self::STATUS_PENDING ) ); 1118 1165 1119 1166 $row_updates = 0; -
commentswp/trunk/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_HybridStore.php
r3237139 r3451333 433 433 434 434 /** 435 * Release a claim in the table data store .435 * Release a claim in the table data store on any pending actions. 436 436 * 437 437 * @param ActionScheduler_ActionClaim $claim Claim object. -
commentswp/trunk/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore.php
r3237139 r3451333 792 792 793 793 /** 794 * Release claim.794 * Release pending actions from a claim. 795 795 * 796 796 * @param ActionScheduler_ActionClaim $claim Claim object to release. … … 799 799 */ 800 800 public function release_claim( ActionScheduler_ActionClaim $claim ) { 801 $action_ids = $this->find_actions_by_claim_id( $claim->get_id() );802 if ( empty( $action_ids ) ) {803 return; // nothing to do.804 }805 $action_id_string = implode( ',', array_map( 'intval', $action_ids ) );806 801 /** 807 802 * Global wpdb object. … … 810 805 */ 811 806 global $wpdb; 807 808 $claim_id = $claim->get_id(); 809 if ( trim( $claim_id ) === '' ) { 810 // Verify that the claim_id is valid before attempting to release it. 811 return; 812 } 813 814 // Only attempt to release pending actions to be claimed again. Running and complete actions are no longer relevant outside of admin/analytics. 815 // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching 816 $action_ids = $wpdb->get_col( 817 $wpdb->prepare( 818 "SELECT ID, post_date_gmt FROM {$wpdb->posts} WHERE post_type = %s AND post_password = %s AND post_status = %s", 819 self::POST_TYPE, 820 $claim_id, 821 self::STATUS_PENDING 822 ) 823 ); 824 825 if ( empty( $action_ids ) ) { 826 return; // nothing to do. 827 } 828 $action_id_string = implode( ',', array_map( 'intval', $action_ids ) ); 812 829 813 830 // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -
commentswp/trunk/vendor/woocommerce/action-scheduler/classes/schema/ActionScheduler_StoreSchema.php
r3237139 r3451333 21 21 * @var int 22 22 */ 23 protected $schema_version = 7;23 protected $schema_version = 8; 24 24 25 25 /** … … 81 81 KEY group_id (group_id), 82 82 KEY last_attempt_gmt (last_attempt_gmt), 83 KEY `claim_id_status_scheduled_date_gmt` (`claim_id`, `status`, `scheduled_date_gmt`) 83 KEY `claim_id_status_priority_scheduled_date_gmt` (`claim_id`,`status`,`priority`,`scheduled_date_gmt`), 84 KEY `status_last_attempt_gmt` (`status`,`last_attempt_gmt`), 85 KEY `status_claim_id` (`status`,`claim_id`) 84 86 ) $charset_collate"; 85 87 -
commentswp/trunk/vendor/woocommerce/action-scheduler/functions.php
r3237139 r3451333 87 87 * @param string $group Action group. 88 88 * @param int $priorities Action priority. 89 * @param bool $unique Unique action. 89 90 */ 90 $pre = apply_filters( 'pre_as_schedule_single_action', null, $timestamp, $hook, $args, $group, $priority );91 $pre = apply_filters( 'pre_as_schedule_single_action', null, $timestamp, $hook, $args, $group, $priority, $unique ); 91 92 if ( null !== $pre ) { 92 93 return is_int( $pre ) ? $pre : 0; … … 160 161 * @param string $group Action group. 161 162 * @param int $priority Action priority. 163 * @param bool $unique Unique action. 162 164 */ 163 $pre = apply_filters( 'pre_as_schedule_recurring_action', null, $timestamp, $interval_in_seconds, $hook, $args, $group, $priority );165 $pre = apply_filters( 'pre_as_schedule_recurring_action', null, $timestamp, $interval_in_seconds, $hook, $args, $group, $priority, $unique ); 164 166 if ( null !== $pre ) { 165 167 return is_int( $pre ) ? $pre : 0; … … 226 228 * @param string $group Action group. 227 229 * @param int $priority Action priority. 230 * @param bool $unique Unique action. 228 231 */ 229 $pre = apply_filters( 'pre_as_schedule_cron_action', null, $timestamp, $schedule, $hook, $args, $group, $priority );232 $pre = apply_filters( 'pre_as_schedule_cron_action', null, $timestamp, $schedule, $hook, $args, $group, $priority, $unique ); 230 233 if ( null !== $pre ) { 231 234 return is_int( $pre ) ? $pre : 0; … … 494 497 return $date; 495 498 } 499 500 /** 501 * Check if a specific feature is supported by the current version of Action Scheduler. 502 * 503 * @since 3.9.3 504 * 505 * @param string $feature The feature to check support for. 506 * 507 * @return bool True if the feature is supported, false otherwise. 508 */ 509 function as_supports( string $feature ): bool { 510 $supported_features = array( 'ensure_recurring_actions_hook' ); 511 512 return in_array( $feature, $supported_features, true ); 513 } -
commentswp/trunk/vendor/woocommerce/action-scheduler/readme.txt
r3237139 r3451333 2 2 Contributors: Automattic, wpmuguru, claudiosanches, peterfabian1000, vedjain, jamosova, obliviousharmony, konamiman, sadowski, royho, barryhughes-1 3 3 Tags: scheduler, cron 4 Stable tag: 3.9. 24 Stable tag: 3.9.3 5 5 License: GPLv3 6 6 Requires at least: 6.5 7 Tested up to: 6. 78 Requires PHP: 7. 17 Tested up to: 6.8 8 Requires PHP: 7.2 9 9 10 10 Action Scheduler - Job Queue for WordPress … … 30 30 ## Learn More 31 31 32 To learn more about how toAction Scheduler works, and how to use it in your plugin, check out the docs on [ActionScheduler.org](https://actionscheduler.org).32 To learn more about how Action Scheduler works, and how to use it in your plugin, check out the docs on [ActionScheduler.org](https://actionscheduler.org). 33 33 34 34 There you will find: … … 47 47 48 48 == Changelog == 49 50 = 3.9.3 - 2025-07-15 = 51 * Add hook 'action_scheduler_ensure_recurring_actions' specifically for scheduling recurring actions. 52 * Assume an action is valid until proven otherwise. 53 * Implement SKIP LOCKED during action claiming. 54 * Import `get_flag_value()` from `WP_CLI\Utils` before using. 55 * Make `$unique` available to all pre-creation/short-circuit hooks. 56 * Make version/source information available via new class. 57 * Only release claims on pending actions. 58 * Tweak - WP 6.8 compatibility. 59 * Update minimum supported php and phpunit versions. 60 * Update readme.txt. 61 * WP CLI get action command: correct parentheses/nesting of conditional checks. 49 62 50 63 = 3.9.2 - 2025-02-03 =
Note: See TracChangeset
for help on using the changeset viewer.