Plugin Directory

Changeset 3451333


Ignore:
Timestamp:
02/01/2026 11:19:29 AM (8 weeks ago)
Author:
slaFFik
Message:

CommentsWP v1.3.0

Location:
commentswp
Files:
222 added
48 edited

Legend:

Unmodified
Added
Removed
  • commentswp/trunk/assets/commentswp.pot

    r3237139 r3451333  
    1 # Copyright (C) 2025 CommentsWP
     1# Copyright (C) 2026 CommentsWP
    22# This file is distributed under the same license as the CommentsWP package.
    33msgid ""
     
    88"Content-Transfer-Encoding: 8bit\n"
    99"Language-Team: Slava Abakumov <slava@commentswp.com>\n"
    10 "POT-Creation-Date: 2025-02-08 23:09+0000\n"
     10"POT-Creation-Date: 2026-02-01 11:08+0000\n"
    1111"X-Poedit-Basepath: ..\n"
    1212"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"
     
    1616"Plural-Forms: nplurals=2; plural=(n != 1);\n"
    1717
    18 #: src/Admin/Admin.php:133, src/Admin/AdminBar.php:44, src/Admin/Pages/Dashboard/DashboardPage.php:78, src/Admin/Pages/Dashboard/DashboardPage.php:94
     18#: src/Admin/Admin.php:138, src/Admin/AdminBar.php:44, src/Admin/Pages/Dashboard/DashboardPage.php:96, src/Admin/Pages/Dashboard/DashboardPage.php:112
    1919msgid "Dashboard"
    2020msgstr ""
    2121
    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
     24msgid "Please rate CommentsWP %1$s on %2$s to help us spread the word"
     25msgstr ""
     26
     27#: src/Admin/Admin.php:218
    2328msgid "Go to Dashboard"
    2429msgstr ""
     
    2833msgstr ""
    2934
    30 #: src/Admin/AdminBar.php:57, src/Admin/Pages/Profiles/ProfilesPage.php:41, src/Admin/Pages/Profiles/ProfilesPage.php:56
     35#: src/Admin/AdminBar.php:57, src/Admin/Pages/Profiles/ProfilesPage.php:42, src/Admin/Pages/Profiles/ProfilesPage.php:57
    3136msgid "Profiles"
    3237msgstr ""
     
    3641msgstr ""
    3742
    38 #: src/Admin/ScreenOptions.php:155, src/Admin/Pages/Dashboard/DashboardPage.php:93
     43#: src/Admin/ScreenOptions.php:155, src/Admin/Pages/Dashboard/DashboardPage.php:111
    3944msgid "Comments Dashboard"
    4045msgstr ""
     
    4247#: src/Admin/ScreenOptions.php:177, src/Admin/Pages/Profiles/Table.php:62
    4348msgid "Apply"
     49msgstr ""
     50
     51#: src/Admin/WPorgReview.php:100
     52msgid "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!"
     53msgstr ""
     54
     55#: src/Admin/WPorgReview.php:108
     56msgid "Ok, you deserve it"
     57msgstr ""
     58
     59#: src/Admin/WPorgReview.php:109
     60msgid "Dismiss for one month"
     61msgstr ""
     62
     63#: src/Admin/WPorgReview.php:109
     64msgid "Nope, maybe later"
     65msgstr ""
     66
     67#: src/Admin/WPorgReview.php:110
     68msgid "I already did"
    4469msgstr ""
    4570
     
    5378#. translators: Time difference between two dates, in months. %d - number of months.
    5479#. translators: %d - number of months with comments in this year.
    55 #: src/Helpers/HumanDate.php:200, src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:248
     80#: src/Helpers/HumanDate.php:200, src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:308
    5681msgid "%d month"
    5782msgid_plural "%d months"
     
    6186#. translators: Time difference between two dates, in weeks. %d - number of weeks.
    6287#. translators: %d - number of weeks with comments in this year.
    63 #: src/Helpers/HumanDate.php:205, src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:236
     88#: src/Helpers/HumanDate.php:205, src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:301
    6489msgid "%d week"
    6590msgid_plural "%d weeks"
     
    6893
    6994#. 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
    7197msgid "%d day"
    7298msgid_plural "%d days"
     
    95121msgstr[1] ""
    96122
    97 #: src/Admin/Pages/Dashboard/DashboardPage.php:247
     123#: src/Admin/Pages/Dashboard/DashboardPage.php:270
    98124msgid "Filters"
    99125msgstr ""
    100126
    101 #: src/Admin/Pages/Dashboard/DashboardPage.php:250
     127#: src/Admin/Pages/Dashboard/DashboardPage.php:274
    102128msgid "Comment Type"
    103129msgstr ""
    104130
    105 #: src/Admin/Pages/Dashboard/DashboardPage.php:264
     131#: src/Admin/Pages/Dashboard/DashboardPage.php:284
     132msgid "No comment types found"
     133msgstr ""
     134
     135#: src/Admin/Pages/Dashboard/DashboardPage.php:301
    106136msgid "Applied to all cards"
    107137msgstr ""
    108138
    109 #: src/Admin/Pages/Dashboard/DashboardPage.php:279
     139#: src/Admin/Pages/Dashboard/DashboardPage.php:316
    110140msgid "Applied to tables only"
    111141msgstr ""
    112142
     143#: src/Admin/Pages/Dashboard/Filters.php:346
     144msgid "Last 24 hours"
     145msgstr ""
     146
    113147#: src/Admin/Pages/Dashboard/Filters.php:347
    114 msgid "Last 24 hours"
     148msgid "Last 7 Days"
    115149msgstr ""
    116150
    117151#: src/Admin/Pages/Dashboard/Filters.php:348
    118 msgid "Last 7 Days"
     152msgid "Last 14 Days"
    119153msgstr ""
    120154
    121155#: src/Admin/Pages/Dashboard/Filters.php:349
    122 msgid "Last 14 Days"
     156msgid "Last 30 Days"
    123157msgstr ""
    124158
    125159#: src/Admin/Pages/Dashboard/Filters.php:350
    126 msgid "Last 30 Days"
     160msgid "Last 90 Days"
    127161msgstr ""
    128162
    129163#: src/Admin/Pages/Dashboard/Filters.php:351
    130 msgid "Last 90 Days"
    131 msgstr ""
    132 
    133 #: src/Admin/Pages/Dashboard/Filters.php:352
    134164msgid "All Time"
    135165msgstr ""
    136166
    137 #: src/Admin/Pages/Dashboard/Filters.php:379
     167#: src/Admin/Pages/Dashboard/Filters.php:376
    138168msgid "5 items"
    139169msgstr ""
    140170
    141 #: src/Admin/Pages/Dashboard/Filters.php:380
     171#: src/Admin/Pages/Dashboard/Filters.php:377
    142172msgid "10 items"
    143173msgstr ""
    144174
    145 #: src/Admin/Pages/Dashboard/Filters.php:381
     175#: src/Admin/Pages/Dashboard/Filters.php:378
    146176msgid "15 items"
    147177msgstr ""
    148178
    149 #: src/Admin/Pages/Dashboard/Filters.php:400, src/Admin/Pages/Dashboard/Filters.php:438
     179#: src/Admin/Pages/Dashboard/Filters.php:395, src/Admin/Pages/Dashboard/Filters.php:432
    150180msgid "Comments"
    151181msgstr ""
    152182
    153 #: src/Admin/Pages/Dashboard/Filters.php:401, src/Admin/Pages/Dashboard/Cards/PingTrackbacksNumberCard.php:33
     183#: src/Admin/Pages/Dashboard/Filters.php:396, src/Admin/Pages/Dashboard/Cards/PingTrackbacksNumberCard.php:33
    154184msgid "Pingbacks"
    155185msgstr ""
    156186
    157 #: src/Admin/Pages/Dashboard/Filters.php:402, src/Admin/Pages/Dashboard/Cards/PingTrackbacksNumberCard.php:34
     187#: src/Admin/Pages/Dashboard/Filters.php:397, src/Admin/Pages/Dashboard/Cards/PingTrackbacksNumberCard.php:34
    158188msgid "Trackbacks"
    159189msgstr ""
    160190
    161 #: src/Admin/Pages/Profiles/ProfilesPage.php:55
     191#: src/Admin/Pages/Profiles/ProfilesPage.php:56
    162192msgid "Comments Profiles"
    163193msgstr ""
    164194
    165195#. translators: %d: number of deleted comments.
    166 #: src/Admin/Pages/Profiles/ProfilesPage.php:205
     196#: src/Admin/Pages/Profiles/ProfilesPage.php:208
    167197msgid "%d comment has been permanently deleted."
    168198msgid_plural "%d comments have been permanently deleted."
     
    218248msgstr ""
    219249
    220 #: src/Admin/Pages/Profiles/Table.php:316
     250#: src/Admin/Pages/Profiles/Table.php:318
    221251msgid "View All Comments"
    222252msgstr ""
    223253
    224 #: src/Admin/Pages/Profiles/Table.php:324
     254#: src/Admin/Pages/Profiles/Table.php:326
    225255msgid "Also known as:"
    226256msgstr ""
    227257
    228 #: src/Admin/Pages/Profiles/Table.php:381, src/Admin/Pages/Profiles/Table.php:403
     258#: src/Admin/Pages/Profiles/Table.php:383, src/Admin/Pages/Profiles/Table.php:405
    229259msgid "View"
    230260msgstr ""
    231261
    232 #: src/Admin/Pages/Profiles/Table.php:383, src/Admin/Pages/Profiles/Table.php:405
     262#: src/Admin/Pages/Profiles/Table.php:385, src/Admin/Pages/Profiles/Table.php:407
    233263msgid "Edit"
    234264msgstr ""
    235265
    236 #: src/Admin/Pages/Profiles/Table.php:416
     266#: src/Admin/Pages/Profiles/Table.php:418
    237267msgid "No profiles found for commenters with approved comments."
    238268msgstr ""
     
    247277msgstr ""
    248278
    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:46
     279#: 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
    250280msgid "Learn More"
    251281msgstr ""
    252282
    253 #: src/Admin/Pages/Dashboard/Cards/AverageTimeToFirstCommentCard.php:91, src/Admin/Pages/Dashboard/Cards/FastestTimeToFirstComment.php:91
     283#: src/Admin/Pages/Dashboard/Cards/AverageTimeToFirstCommentCard.php:93, src/Admin/Pages/Dashboard/Cards/FastestTimeToFirstComment.php:91
    254284msgid "N/A"
    255285msgstr ""
     
    280310msgstr ""
    281311
    282 #: src/Admin/Pages/Dashboard/Cards/PingTrackbacksNumberCard.php:96
     312#: src/Admin/Pages/Dashboard/Cards/PingTrackbacksNumberCard.php:97
    283313msgid "See Pingbacks"
    284314msgstr ""
    285315
    286 #: src/Admin/Pages/Dashboard/Cards/PingTrackbacksNumberCard.php:141
     316#: src/Admin/Pages/Dashboard/Cards/PingTrackbacksNumberCard.php:142
    287317msgid "See Trackbacks"
    288318msgstr ""
     
    306336msgstr ""
    307337
    308 #: src/Admin/Pages/Dashboard/Cards/SuggestFeaturePlaceholder.php:28, src/Admin/Pages/Dashboard/Cards/SuggestFeaturePlaceholder.php:61
     338#: src/Admin/Pages/Dashboard/Cards/SuggestFeaturePlaceholder.php:30, src/Admin/Pages/Dashboard/Cards/SuggestFeaturePlaceholder.php:67
    309339msgid "Suggest a Feature"
    310340msgstr ""
    311341
    312 #: src/Admin/Pages/Dashboard/Cards/SuggestFeaturePlaceholder.php:59
     342#: src/Admin/Pages/Dashboard/Cards/SuggestFeaturePlaceholder.php:63
    313343msgid "Do you have an idea or suggestion for CommentsWP? If you have thoughts on features or improvements - please reach out!"
    314344msgstr ""
    315345
    316 #: src/Admin/Pages/Dashboard/Cards/SuggestFeaturePlaceholder.php:60
     346#: src/Admin/Pages/Dashboard/Cards/SuggestFeaturePlaceholder.php:64
    317347msgid "Any feedback and insights from actual users is appreciated."
    318348msgstr ""
     
    334364msgstr ""
    335365
    336 #: src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:174
     366#: src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:175
    337367msgid "Unique Value"
    338368msgstr ""
    339369
    340370#. translators: %s - comma-separated list of other names.
    341 #: src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:204
     371#: src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:207
    342372msgid "Last 10 items: %s"
    343373msgstr ""
    344374
    345 #: src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:214
     375#: src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:217
    346376msgid "Filter"
    347377msgstr ""
    348378
    349 #: src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:188, src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:206, src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php:175
     379#: src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:191, src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:264, src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php:177
    350380msgid "No data to display."
    351381msgstr ""
    352382
    353 #: src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:243
     383#: src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:246
    354384msgid "IP to Emails"
    355385msgstr ""
    356386
    357 #: src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:246
     387#: src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php:249
    358388msgid "Email to IPs"
    359389msgstr ""
    360390
    361 #: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:50
     391#: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:55
    362392msgid "Total by Time Period"
    363393msgstr ""
    364394
    365 #: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:187
     395#: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:243
    366396msgid "Year"
    367397msgstr ""
    368398
    369399#. translators: %1$d - week number, %1$s - week date range.
    370 #: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:290
     400#: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:345
    371401msgid "Week %1$d: %2$s"
    372402msgstr ""
    373403
    374 #: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:331
     404#: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:397
    375405msgid "Group by Year"
    376406msgstr ""
    377407
    378 #: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:334
     408#: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:400
    379409msgid "Group by Month"
    380410msgstr ""
    381411
    382 #: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:337
     412#: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:403
    383413msgid "Group by Week"
     414msgstr ""
     415
     416#: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:406
     417msgid "Group by Day"
     418msgstr ""
     419
     420#: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:416
     421msgid "Newest First"
     422msgstr ""
     423
     424#: src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php:419
     425msgid "Oldest First"
    384426msgstr ""
    385427
     
    389431
    390432#. translators: %s - comma-separated list of other names.
    391 #: src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php:191
     433#: src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php:193
    392434msgid "Known as: <code>%s</code>"
    393435msgstr ""
    394436
    395 #: src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php:205
     437#: src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php:207
    396438msgid "Filter by user"
    397439msgstr ""
    398440
    399 #: src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php:233
     441#: src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php:235
    400442msgid "Group by Email"
    401443msgstr ""
    402444
    403 #: src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php:236
     445#: src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php:238
    404446msgid "Group by IP"
    405447msgstr ""
  • commentswp/trunk/assets/css/commentswp-admin.css

    r3237139 r3451333  
     1#wpcontent {
     2  padding-left: 0;
     3}
     4
    15#commentswp {
    26  box-sizing: border-box;
     7  margin: 0;
     8  padding: 0;
    39}
    410#commentswp [x-cloak] {
    511  display: none !important;
    612}
     13#commentswp .notice {
     14  margin: 20px;
     15}
    716#commentswp h1 {
    817  color: #1d2327;
     18  background-color: #fff;
    919  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);
    1225}
    1326#commentswp h1 .title-logo {
    1427  width: 36px;
    15   position: absolute;
    16   top: 7px;
    1728}
    1829#commentswp h1 .title-main {
    19   padding-left: 45px;
     30  padding-left: 10px;
    2031}
    2132#commentswp h1 .title-main a {
     
    2536#commentswp h1 .title-separator {
    2637  color: #D0D1D7;
    27   padding: 0 5px;
     38  padding: 0 7px 0 5px;
    2839}
    2940#commentswp h1 .title-secondary {
     
    5061  padding: 3px 5px;
    5162}
     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  
    33}
    44#commentswp-dashboard #commentswp-filters {
    5   padding: 20px;
    65  margin-bottom: 20px;
    7   border: 1px dashed #eee;
    8   border-radius: 3px;
    9   background-color: #fff;
    106  text-align: center;
    117  display: flex;
    128  flex-direction: row;
    139  flex-wrap: nowrap;
    14   justify-content: flex-start;
     10  justify-content: flex-end;
    1511  align-content: stretch;
    1612  align-items: center;
     
    2016  flex: 1 1 auto;
    2117  align-self: center;
    22   font-size: 1.5em;
     18  font-size: 2em;
    2319  font-weight: 400;
    2420  text-align: left;
     
    9389  padding: 20px;
    9490  margin-left: 20px;
     91  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    9592}
    9693#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}
    14#commentswp-profiles .wp-list-table .column-name details {
    25  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.14.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}
    33
    44${r?'Expression: "'+r+`"
    55
    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  
    44 * Plugin URI:        https://commentswp.com
    55 * Description:       A beautifully helpful dashboard for all your comments.
    6  * Requires at least: 6.4
     6 * Requires at least: 6.5
    77 * Requires PHP:      7.4
    88 * Author:            Slava Abakumov
    99 * Author URI:        https://ovirium.com
    10  * Version:           1.2.0
     10 * Version:           1.3.0
    1111 * Text Domain:       commentswp
    1212 * License:           GPLv2 or later
     
    2121
    2222// phpcs:disable WPForms.Comments.PHPDocDefine.MissPHPDoc
    23 define( 'COMMENTSWP_VERSION', '1.2.0' );
     23define( 'COMMENTSWP_VERSION', '1.3.0' );
    2424define( 'COMMENTSWP_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
    2525define( 'COMMENTSWP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
     
    3434 * @return Plugin
    3535 */
    36 function commentswp() {
     36function commentswp(): Plugin {
    3737
    3838    require_once __DIR__ . '/vendor/autoload.php';
     
    5555);
    5656
     57register_activation_hook(
     58    COMMENTSWP_PLUGIN_FILE,
     59    static function () {
     60        require_once __DIR__ . '/vendor/autoload.php';
    5761
     62        Plugin::activated();
     63    }
     64);
  • commentswp/trunk/readme.txt

    r3375355 r3451333  
    22Contributors: slaFFik
    33Tags: comments, analytics, comment-dashboard, commenter-profiles, comment-insights
    4 Requires at least: 6.4
    5 Tested up to: 6.8
    6 Stable tag: 1.2.0
     4Requires at least: 6.5
     5Tested up to: 6.9
     6Stable tag: 1.3.0
    77Requires PHP: 7.4
    88License: GNU General Public License v2.0 or later
     
    3939* **Fastest Time To First Comment** (e.g., 1d 20h 38min 53s)
    4040* **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)
    4444
    4545Each card links to detailed documentation on the [CommentsWP website](https://commentswp.com/docs/).
     
    5959
    6060#### Total by Time Period
    61 Track how comment activity changes over time — by **year, month, or week**.
     61Track how comment activity changes over time — by **year, month, week, or day**.
    6262Quickly detect engagement trends across your site's history.
    6363
     
    171171
    172172== 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.
    173186
    174187### 1.2.0
  • commentswp/trunk/src/Admin/Admin.php

    r3237139 r3451333  
    4848     * Profiles instance.
    4949     *
    50      * @since 1.1.0
     50     * @since 1.2.0
    5151     */
    5252    public ProfilesPage $profiles;
     
    113113        add_filter( sprintf( '%splugin_action_links_%s', is_multisite() ? 'network_admin_' : '', plugin_basename( COMMENTSWP_PLUGIN_FILE ) ), [ $this, 'add_plugin_actions_links' ] );
    114114
     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
    115120        $this->admin_bar->hooks();
    116121        $this->dashboard->hooks();
     
    135140
    136141        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">&#9733;&#9733;&#9733;&#9733;&#9733;</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>';
    137184    }
    138185
     
    277324            Assets::url( 'libs/alpinejs.min.js' ),
    278325            [],
    279             '3.14.8',
     326            '3.15.6',
    280327            false
    281328        );
     
    295342     * @since 1.0.0
    296343     *
    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.
    299346     */
    300347    public function is_page( $slug = '', $view = '' ): bool {
  • commentswp/trunk/src/Admin/Pages/Dashboard/Cards/AverageTimeToFirstCommentCard.php

    r3237139 r3451333  
    7373        $build_where_type   = commentswp()->get( 'admin' )->dashboard->filters->build_sql_where_comment_type();
    7474
     75        // phpcs:disable WordPress.DB.PreparedSQL,WordPress.DB.DirectDatabaseQuery
    7576        $average = (int) $wpdb->get_var(
    7677            "SELECT
     
    8788              $build_where_period"
    8889        );
     90        // phpcs:enable WordPress.DB.PreparedSQL,WordPress.DB.DirectDatabaseQuery
    8991
    9092        if ( $average === 0 ) {
  • commentswp/trunk/src/Admin/Pages/Dashboard/Cards/PingTrackbacksNumberCard.php

    r3237139 r3451333  
    5555        $build_where_period = commentswp()->get( 'admin' )->dashboard->filters->build_sql_where_period();
    5656
     57        // phpcs:ignore WordPress.DB.DirectDatabaseQuery
    5758        $data = $wpdb->get_row(
    5859            "SELECT
     
    6667            FROM $wpdb->comments
    6768            WHERE comment_type IN ('pingback', 'trackback')
    68                 $build_where_period;",
     69                $build_where_period;", // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
    6970            ARRAY_A
    7071        );
  • commentswp/trunk/src/Admin/Pages/Dashboard/Cards/PostsCommentsNumberCard.php

    r3237139 r3451333  
    6868        $comment_type       = $this->filters->get( 'comment_type' );
    6969
    70         // phpcs:ignore WordPress.DB.DirectDatabaseQuery.NoCaching
     70        // phpcs:ignore WordPress.DB.DirectDatabaseQuery
    7171        $data = $wpdb->get_row(
    7272            $wpdb->prepare(
     
    8585            WHERE $wpdb->posts.post_type = 'post'
    8686              AND $wpdb->posts.post_status = 'publish'
    87               $build_where_period",
     87              $build_where_period", // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
    8888                $comment_type
    8989            ),
  • commentswp/trunk/src/Admin/Pages/Dashboard/Cards/SuggestFeaturePlaceholder.php

    r3237139 r3451333  
    22
    33namespace CommentsWP\Admin\Pages\Dashboard\Cards;
     4
     5use CommentsWP\Helpers\URL;
    46
    57/**
     
    3638     * @since 1.1.0
    3739     */
    38     protected function generate_data() {
     40    protected function generate_data(): void {
    3941
    4042        $this->data = [];
     
    4648     * @since 1.1.0
    4749     */
    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() );
    4953        ?>
    5054
     
    5963                    <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>
    6064                    <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>
    6270                </div>
    6371            </div>
  • commentswp/trunk/src/Admin/Pages/Dashboard/Cards/TotalAnomaliesTable.php

    r3237139 r3451333  
    147147                $build_limit;";
    148148
     149        // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.DirectDatabaseQuery
    149150        $data = $wpdb->get_results( $sql );
    150151
     
    175176                <th class="count">
    176177                    <?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                        )
    179182                    );
    180183                    ?>
  • commentswp/trunk/src/Admin/Pages/Dashboard/Cards/TotalByPeriodTable.php

    r3237139 r3451333  
    3434     *
    3535     * @since 1.0.0
    36      *
    37      * @var string
    3836     */
    3937    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';
    4045
    4146    /**
     
    7176
    7277        $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;
    7379    }
    7480
     
    8187
    8288        // phpcs:disable WordPress.Security.NonceVerification.Missing
    83         if ( empty( $_POST['tableFilters']['groupBy'] ) ) {
     89        if ( empty( $_POST['tableFilters']['groupBy'] ) && empty( $_POST['tableFilters']['orderBy'] ) ) {
    8490            return;
    8591        }
    8692
    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        }
    88119        // phpcs:enable WordPress.Security.NonceVerification.Missing
    89120
    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 );
    95122    }
    96123
     
    102129    public function cache_key(): string {
    103130
    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 );
    105132    }
    106133
     
    113140
    114141        global $wpdb;
     142
     143        $order = strtoupper( $this->order_by );
    115144
    116145        switch ( $this->group_by ) {
     
    118147                $sql_select_month   = '';
    119148                $sql_select_week    = '';
     149                $sql_select_day     = '';
    120150                $sql_group_by_month = '';
    121151                $sql_group_by_week  = '';
     152                $sql_group_by_day   = '';
    122153                $sql_order_month    = '';
    123154                $sql_order_week     = '';
     155                $sql_order_day      = '';
    124156                break;
    125157
     
    127159                $sql_select_month   = '';
    128160                $sql_select_week    = 'WEEK(comment_date) AS week,';
     161                $sql_select_day     = '';
    129162                $sql_group_by_month = '';
    130163                $sql_group_by_week  = ', week';
     164                $sql_group_by_day   = '';
    131165                $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     = '';
    133180                break;
    134181
     
    136183            default:
    137184                $sql_select_month   = 'MONTH(comment_date) AS month,';
     185                $sql_select_day     = '';
    138186                $sql_select_week    = '';
    139187                $sql_group_by_month = ', month';
     188                $sql_group_by_day   = '';
    140189                $sql_group_by_week  = '';
    141                 $sql_order_month    = ', month DESC';
     190                $sql_order_month    = ", month $order";
     191                $sql_order_day      = '';
    142192                $sql_order_week     = '';
    143193                break;
     
    150200                    $sql_select_month
    151201                    $sql_select_week
     202                    $sql_select_day
    152203                    COUNT(*) AS total
    153                 FROM $wpdb->comments 
     204                FROM $wpdb->comments
    154205                WHERE comment_approved = 1
    155206                      $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
    159211        $data = $wpdb->get_results( $sql, ARRAY_A );
    160212
     
    162214            if ( isset( $row['week'] ) ) {
    163215                $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'];
    164220            } elseif ( isset( $row['month'] ) ) {
    165221                $this->data[ $row['year'] ][ $row['month'] ] = $row['total'];
     
    171227
    172228    /**
    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.MaxExceeded
     229     * 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
    178234
    179235        if ( empty( $this->data ) ) {
     
    188244                <th class="count">
    189245                    <?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                        )
    192250                    );
    193251                    ?>
     
    232290
    233291                                                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' ),
    242295                                                            count( $children )
    243296                                                        );
    244297                                                        break;
    245298
     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
    246306                                                    case 'month':
    247307                                                        $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' ),
    254309                                                            count( $children )
    255310                                                        );
     
    292347                                                esc_html( $week_start->format( 'M d' ) . ' - ' . $week_end->format( 'M d' ) )
    293348                                            );
     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' ) );
    294359                                        } else {
    295360                                            $comment_date .= '-' . str_pad( $child, 2, '0', STR_PAD_LEFT );
     
    320385     * @since 1.0.0
    321386     */
    322     protected function display_filters() {
     387    protected function display_filters(): void {
    323388        ?>
    324389
    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>
    340423
    341424        <?php
  • commentswp/trunk/src/Admin/Pages/Dashboard/Cards/TotalByPersonTable.php

    r3237139 r3451333  
    162162                <th class="count">
    163163                    <?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                        )
    166168                    );
    167169                    ?>
  • commentswp/trunk/src/Admin/Pages/Dashboard/DashboardPage.php

    r3237139 r3451333  
    6161        $this->filters = $filters;
    6262
    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';
    6684    }
    6785
     
    7593        add_action(
    7694            'commentswp_admin_render_title_' . self::PAGE_SLUG,
    77             static function() {
     95            static function () {
    7896                echo esc_html__( 'Dashboard', 'commentswp' );
    7997            }
     
    88106     * @since 1.2.0
    89107     */
    90     public function register_admin_menu(): void {
     108    public function register_admin_menu(): void { // phpcs:ignore WPForms.PHP.HooksMethod.InvalidPlaceForAddingHooks
    91109
    92110        $dash_hook_suffix = add_comments_page(
     
    109127     * @since 1.0.0
    110128     */
    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        }
    112135
    113136        /**
     
    214237        ?>
    215238
    216         <div id="commentswp-dashboard"
     239        <div id="commentswp-dashboard" class="commentswp-page"
    217240            x-cloak
    218241            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' ) ); ?>'
    223246            }">
    224247
     
    241264        $periods        = $this->filters->get_periods();
    242265        $items_per_page = $this->filters->get_items_per_page();
    243         $types          = $this->filters->get_comment_types()
     266        $types          = $this->filters->get_comment_types();
    244267        ?>
    245268
    246269        <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>
    248271
    249272            <div class="commentswp-filter commentswp-filter-content_type">
     273                <!--suppress HtmlFormInputWithoutLabel -->
    250274                <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; ?>
    252279                    @change="$dispatch('comment-type-changed', { commentType: $event.target.value })">
    253280
    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' ); ?>
    257285                        </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; ?>
    259296                </select>
    260297            </div>
  • commentswp/trunk/src/Admin/Pages/Dashboard/Filters.php

    r3237139 r3451333  
    130130     * @return string
    131131     */
    132     private function validate_period( $period ): string {
     132    private function validate_period( string $period ): string {
    133133
    134134        if ( ! in_array( $period, self::PERIODS, true ) ) {
     
    144144     * @since 1.0.0
    145145     *
    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 {
    149149
    150150        $per_page = absint( $per_page );
     
    195195     * @return mixed
    196196     */
    197     public function get( $name ) {
     197    public function get( string $name ) {
    198198
    199199        $name = sanitize_key( $name );
     
    321321        }
    322322
     323        // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
    323324        return $wpdb->prepare( $sql, $type );
    324325    }
     
    328329     *
    329330     * @since 1.0.0
    330      *
    331      * @return array
    332      */
    333     public function get_periods() {
     331     */
     332    public function get_periods(): array {
    334333
    335334        /**
     
    360359     *
    361360     * @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 {
    366363
    367364        /**
     
    389386     *
    390387     * @since 1.2.0
    391      *
    392      * @return array
    393      */
    394     public function get_comment_types() {
     388     */
     389    public function get_comment_types(): array {
    395390
    396391        // This filter has such a weird name for a reason: see \WP_Comments_List_Table::comment_type_dropdown().
     
    404399        );
    405400
     401        // Filter out comment types that don't exist in the DB.
    406402        if ( ! empty( $types ) ) {
    407403            $types = array_filter(
     
    429425     *
    430426     * @param string $type Comment type.
    431      *
    432      * @return string
    433427     */
    434428    public function get_comment_type_name( string $type ): string {
  • commentswp/trunk/src/Admin/Pages/Profiles/ProfilesPage.php

    r3237139 r3451333  
    1414
    1515    public const PAGE_SLUG = 'profiles';
     16    public const PRIORITY  = 20;
    1617
    1718    private string $page_base;
     
    2021     * Profiles constructor.
    2122     *
    22      * @since 1.1.0
     23     * @since 1.2.0
    2324     */
    2425    public function __construct() {
     
    3839        }
    3940
    40         add_action('commentswp_admin_render_title_' . self::PAGE_SLUG, static function() {
     41        add_action( 'commentswp_admin_render_title_' . self::PAGE_SLUG, static function () {
    4142            echo esc_html__( 'Profiles', 'commentswp' );
    4243        } );
     
    5859            'commentswp-' . self::PAGE_SLUG,
    5960            [ commentswp()->get( 'admin' ), 'render' ],
    60             20
     61            self::PRIORITY
    6162        );
    6263
     
    7172     * All CSS and JS assets are enqueued here.
    7273     *
    73      * @since 1.1.0
     74     * @since 1.2.0
    7475     */
    7576    public function enqueue_assets(): void {
     
    8687     * Render the profiles' list page.
    8788     *
    88      * @since 1.1.0
     89     * @since 1.2.0
    8990     */
    9091    public function render(): void {
     
    9293        ?>
    9394
    94         <div id="commentswp-profiles"
     95        <div id="commentswp-profiles" class="commentswp-page"
    9596            x-cloak
    9697            x-data="{}">
     
    115116     * @since 1.2.0
    116117     */
    117     public function process_bulk_action(): void {
     118    public function process_bulk_action(): void { // phpcs:ignore Generic.Metrics.CyclomaticComplexity.MaxExceeded
    118119
    119120        if ( ! current_user_can( 'moderate_comments' ) ) {
     
    128129
    129130        if ( empty( $_POST['profile'] ) || ! isset( $_POST['_wpnonce'] ) ) {
    130             ray('$_POST', $_POST['profile']);
    131             return;
    132         }
    133 
     131            return;
     132        }
     133
     134        // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
    134135        if ( ! wp_verify_nonce( $_POST['_wpnonce'], 'bulk-' . $this->page_base ) ) {
    135             ray('nonce', $_POST['_wpnonce']);
    136136            return;
    137137        }
     
    158158                $placeholders = array_fill( 0, count( $emails ), '%s' );
    159159
     160                // phpcs:ignore WordPress.DB.DirectDatabaseQuery
    160161                $comments_to_delete = $wpdb->get_col(
    161162                    $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
    164165                        $emails
    165166                    )
    166                  );
     167                );
    167168
    168169                if ( empty( $comments_to_delete ) ) {
    169170                    return;
    170171                }
     172
     173                $deleted = [];
    171174
    172175                foreach ( $comments_to_delete as $comment_id ) {
     
    194197     *
    195198     * @since 1.2.0
    196      *
    197      * @return void
    198199     */
    199200    public function display_admin_notices() {
    200201
    201202        // Check if we have a deletion notice.
     203        // phpcs:ignore WordPress.Security.NonceVerification.Recommended
    202204        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(
    206209                    '%d comment has been permanently deleted.',
    207210                    '%d comments have been permanently deleted.',
  • commentswp/trunk/src/Admin/Pages/Profiles/Table.php

    r3237139 r3451333  
    135135    /**
    136136     * Get the total number of profiles.
     137     * TODO: add caching.
    137138     *
    138139     * @since 1.2.0
     
    147148                  AND $wpdb->comments.comment_type IN ( '', 'comment' );";
    148149
    149         // TODO: add caching.
     150        // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.DirectDatabaseQuery
    150151        return (int) $wpdb->get_var( $sql );
    151152    }
     
    189190                LIMIT $start, $this->per_page;";
    190191
     192        // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.DirectDatabaseQuery
    191193        $rows = $wpdb->get_results( $sql );
    192194
  • commentswp/trunk/src/Admin/Pages/Profiles/TableItem.php

    r3237139 r3451333  
    1717     *
    1818     * @since 1.2.0
    19      *
    20      * @param object $item Single item.
    2119     */
    2220    public function __construct( $item ) {
    2321
    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 ?? '';
    3129    }
    3230
     
    4341
    4442        return array_map(
    45             function ( $item ) {
     43            static function ( $item ) {
    4644
    4745                return new self( $item );
  • commentswp/trunk/src/Helpers/Arr.php

    r2759440 r3451333  
    1515     * @since 1.0.0
    1616     *
    17      * @param array $array Array to flatten.
     17     * @param array $a    Array to flatten.
    1818     * @param int   $depth How deep should it go.
    19      *
    20      * @return array
    2119     */
    22     public static function flatten( $array, $depth = INF ) {
     20    public static function flatten( array $a, $depth = INF ): array {
    2321
    2422        $result = [];
    2523
    26         foreach ( $array as $item ) {
     24        foreach ( $a as $item ) {
    2725            if ( ! is_array( $item ) ) {
    2826                $result[] = $item;
  • commentswp/trunk/src/Helpers/URL.php

    r2909191 r3451333  
    2424     * @return string
    2525     */
    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 {
    2727
    2828        return add_query_arg(
  • commentswp/trunk/src/Loader.php

    r3237139 r3451333  
    1717     * @var array
    1818     */
    19     private $classes = [];
     19    private array $classes = [];
    2020
    2121    /**
     
    2424     * @since 1.0.0
    2525     */
    26     public function init() {
     26    public function init(): void {
    2727
    2828        $this->populate_classes();
     
    4444
    4545    /**
    46      * Populate Admin related classes.
     46     * Populate Admin-related classes.
    4747     *
    4848     * @since 1.0.0
  • commentswp/trunk/src/Plugin.php

    r3237139 r3451333  
    6464        );
    6565    }
     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    }
    6677}
  • commentswp/trunk/src/Tasks/Tasks.php

    r2759440 r3451333  
    33namespace CommentsWP\Tasks;
    44
     5use ActionScheduler_DBStore;
    56use CommentsWP\Helpers\Transient;
     7use ActionScheduler_DataController;
    68
    79/**
    8  * Class Tasks manages the tasks queue and provides API to work with it.
     10 * Class Tasks manages the task queue and provides an API to work with it.
    911 * Inspired by WPForms.
    1012 *
     
    2527     * @since 1.0.0
    2628     */
    27     public function init() {
     29    public function init(): void {
    2830
    2931        // Register tasks.
     
    4547     * @since 1.0.0
    4648     */
    47     public function hooks() {
     49    public function hooks(): void {
    4850
    4951        add_action( 'delete_expired_transients', [ Transient::class, 'delete_all_expired' ], 11 );
     
    6062     * @return Task[] List of tasks classes.
    6163     */
    62     public function get_tasks() {
     64    public function get_tasks(): array {
    6365
    6466        if ( ! $this->is_usable() ) {
     
    6668        }
    6769
    68         $tasks = [
    69             //Tasks\ExampleTask::class,
    70         ];
     70        // A list of task classes, with ::class.
     71        $tasks = [];
    7172
    7273        return apply_filters( 'commentswp_tasks_get_tasks', $tasks );
     
    111112     * @param string $group Group to cancel all actions for.
    112113     */
    113     public function cancel_all( $group = '' ) {
     114    public function cancel_all( string $group = '' ): void {
    114115
    115116        if ( empty( $group ) ) {
     
    120121
    121122        if ( class_exists( 'ActionScheduler_DBStore' ) ) {
    122             \ActionScheduler_DBStore::instance()->cancel_actions_by_group( $group );
     123            ActionScheduler_DBStore::instance()->cancel_actions_by_group( $group );
    123124        }
    124125    }
     
    131132     * @return bool
    132133     */
    133     public function is_usable() {
     134    public function is_usable(): bool {
    134135
    135136        // No tasks if ActionScheduler wasn't loaded.
     
    138139        }
    139140
    140         return \ActionScheduler_DataController::is_migration_complete();
     141        return ActionScheduler_DataController::is_migration_complete();
    141142    }
    142143
    143144    /**
    144      * Whether task has been scheduled and is pending.
     145     * Whether a task has been scheduled and is pending.
    145146     *
    146147     * @since 1.0.0
     
    150151     * @return bool
    151152     */
    152     public function is_scheduled( $hook ) {
     153    public function is_scheduled( string $hook ): bool {
    153154
    154155        if ( ! function_exists( 'as_next_scheduled_action' ) ) {
  • commentswp/trunk/vendor/autoload.php

    r3237139 r3451333  
    1515        }
    1616    }
    17     trigger_error(
    18         $err,
    19         E_USER_ERROR
    20     );
     17    throw new RuntimeException($err);
    2118}
    2219
  • commentswp/trunk/vendor/composer/InstalledVersions.php

    r3237139 r3451333  
    2727class InstalledVersions
    2828{
     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
    2935    /**
    3036     * @var mixed[]|null
     
    324330
    325331    /**
     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    /**
    326344     * @return array[]
    327345     * @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[]}>}>
     
    337355
    338356        if (self::$canGetVendors) {
    339             $selfDir = strtr(__DIR__, '\\', '/');
     357            $selfDir = self::getSelfDir();
    340358            foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
    341359                $vendorDir = strtr($vendorDir, '\\', '/');
  • commentswp/trunk/vendor/composer/autoload_static.php

    r3237139 r3451333  
    88{
    99    public static $prefixLengthsPsr4 = array (
    10         'C' => 
     10        'C' =>
    1111        array (
    1212            'CommentsWP\\' => 11,
     
    1515
    1616    public static $prefixDirsPsr4 = array (
    17         'CommentsWP\\' => 
     17        'CommentsWP\\' =>
    1818        array (
    1919            0 => __DIR__ . '/../..' . '/src',
  • commentswp/trunk/vendor/composer/installed.php

    r3237139 r3451333  
    44        'pretty_version' => 'dev-main',
    55        'version' => 'dev-main',
    6         'reference' => 'c3c7760d855a7d0abfe3667d0a04e4b4f902123a',
     6        'reference' => '1175dc2f689173fa24d74dbd39b7de42ca540231',
    77        'type' => 'wordpress-plugin',
    88        'install_path' => __DIR__ . '/../../',
     
    1414            'pretty_version' => 'dev-latest',
    1515            'version' => 'dev-latest',
    16             'reference' => '24296413a9838930e7c039f5eaf985ccec766103',
     16            'reference' => '8457f2008fc6396be788162c4e04228028306534',
    1717            'type' => 'metapackage',
    1818            'install_path' => null,
     
    2525            'pretty_version' => 'dev-main',
    2626            'version' => 'dev-main',
    27             'reference' => 'c3c7760d855a7d0abfe3667d0a04e4b4f902123a',
     27            'reference' => '1175dc2f689173fa24d74dbd39b7de42ca540231',
    2828            'type' => 'wordpress-plugin',
    2929            'install_path' => __DIR__ . '/../../',
     
    3232        ),
    3333        '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',
    3737            'type' => 'wordpress-plugin',
    3838            'install_path' => __DIR__ . '/../woocommerce/action-scheduler',
  • commentswp/trunk/vendor/composer/platform_check.php

    r3237139 r3451333  
    55$issues = array();
    66
    7 if (!(PHP_VERSION_ID >= 70100)) {
    8     $issues[] = 'Your Composer dependencies require a PHP version ">= 7.1.0". You are running ' . PHP_VERSION . '.';
     7if (!(PHP_VERSION_ID >= 70200)) {
     8    $issues[] = 'Your Composer dependencies require a PHP version ">= 7.2.0". You are running ' . PHP_VERSION . '.';
    99}
    1010
     
    2020        }
    2121    }
    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)
    2524    );
    2625}
  • commentswp/trunk/vendor/woocommerce/action-scheduler/action-scheduler.php

    r3237139 r3451333  
    66 * Author: Automattic
    77 * Author URI: https://automattic.com/
    8  * Version: 3.9.2
     8 * Version: 3.9.3
    99 * License: GPLv3
    1010 * Requires at least: 6.5
    11  * Tested up to: 6.7
    12  * Requires PHP: 7.1
     11 * Tested up to: 6.8
     12 * Requires PHP: 7.2
    1313 *
    1414 * Copyright 2019 Automattic, Inc.  (https://automattic.com/contact/)
     
    3030 */
    3131
    32 if ( ! function_exists( 'action_scheduler_register_3_dot_9_dot_2' ) && function_exists( 'add_action' ) ) { // WRCS: DEFINED_VERSION.
     32if ( ! function_exists( 'action_scheduler_register_3_dot_9_dot_3' ) && function_exists( 'add_action' ) ) { // WRCS: DEFINED_VERSION.
    3333
    3434    if ( ! class_exists( 'ActionScheduler_Versions', false ) ) {
     
    3737    }
    3838
    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.
    4040
    4141    // phpcs:disable Generic.Functions.OpeningFunctionBraceKernighanRitchie.ContentAfterBrace
     
    4343     * Registers this version of Action Scheduler.
    4444     */
    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.
    4646        $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.
    4848    }
    4949
     
    5252     * Initializes this version of Action Scheduler.
    5353     */
    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.
    5555        // A final safety check is required even here, because historic versions of Action Scheduler
    5656        // followed a different pattern (in some unusual cases, we could reach this point and the
     
    6464    // Support usage in themes - load this version if no plugin has loaded a version yet.
    6565    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.
    6767        do_action( 'action_scheduler_pre_theme_init' );
    6868        ActionScheduler_Versions::initialize_latest_version();
  • commentswp/trunk/vendor/woocommerce/action-scheduler/changelog.txt

    r3237139 r3451333  
    11*** 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.
    215
    316= 3.9.2 - 2025-02-03 =
  • commentswp/trunk/vendor/woocommerce/action-scheduler/classes/ActionScheduler_DataController.php

    r3237139 r3451333  
    163163        }
    164164
    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        }
    169178
    170179        if ( is_callable( array( $wp_object_cache, '__remoteset' ) ) ) {
  • commentswp/trunk/vendor/woocommerce/action-scheduler/classes/ActionScheduler_wcSystemStatus.php

    r2759440 r3451333  
    7777        $action = $this->store->query_actions(
    7878            array(
    79                 'claimed'  => false,
    8079                'status'   => $status,
    8180                'per_page' => 1,
  • commentswp/trunk/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Create_Command.php

    r3237139 r3451333  
    22
    33namespace Action_Scheduler\WP_CLI\Action;
     4
     5use function \WP_CLI\Utils\get_flag_value;
    46
    57/**
  • commentswp/trunk/vendor/woocommerce/action-scheduler/classes/WP_CLI/Action/Get_Command.php

    r3237139 r3451333  
    2525
    2626        $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'] );
    2828        $log_entries = array();
    2929
  • commentswp/trunk/vendor/woocommerce/action-scheduler/classes/WP_CLI/System_Command.php

    r3237139 r3451333  
    263263
    264264        $args = array(
    265             'claimed'  => false,
    266265            'status'   => $status,
    267266            'per_page' => 1,
  • commentswp/trunk/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler.php

    r3237139 r3451333  
    185185        ActionScheduler_DataController::init();
    186186
    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();
    191192
    192193        // Ensure initialization on plugin activation.
     
    197198            add_action( 'init', array( $logger, 'init' ), 1, 0 );
    198199            add_action( 'init', array( $runner, 'init' ), 1, 0 );
     200            add_action( 'init', array( $recurring_action_scheduler, 'init' ), 1, 0 );
    199201
    200202            add_action(
     
    224226            $logger->init();
    225227            $runner->init();
     228            $recurring_action_scheduler->init();
    226229            self::$data_store_initialized = true;
    227230
  • commentswp/trunk/vendor/woocommerce/action-scheduler/classes/abstracts/ActionScheduler_Abstract_QueueRunner.php

    r3237139 r3451333  
    8787        try {
    8888            try {
    89                 $valid_action = false;
     89                $valid_action = true;
     90
    9091                do_action( 'action_scheduler_before_execute', $action_id, $context );
    9192
    9293                if ( ActionScheduler_Store::STATUS_PENDING !== $this->store->get_status( $action_id ) ) {
     94                    $valid_action = false;
    9395                    do_action( 'action_scheduler_execution_ignored', $action_id, $context );
    9496                    return;
    9597                }
    9698
    97                 $valid_action = true;
    9899                do_action( 'action_scheduler_begin_execute', $action_id, $context );
    99100
  • commentswp/trunk/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_DBStore.php

    r3237139 r3451333  
    932932         */
    933933        global $wpdb;
    934 
    935934        $now  = as_get_datetime_object();
    936935        $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         );
    944936
    945937        // Set claim filters.
     
    955947        }
    956948
    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        );
    960954
    961955        if ( ! empty( $hooks ) ) {
    962956            $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 ) );
    965959        }
    966960
     
    997991         * Sets the order-by clause used in the action claim query.
    998992         *
    999          * @since 3.4.0
    1000          * @since 3.8.3 Made $claim_id and $hooks available.
    1001          *
    1002993         * @param string $order_by_sql
    1003994         * @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 ) );
    10111015        if ( false === $rows_affected ) {
    10121016            $error = empty( $wpdb->last_error )
    10131017                ? _x( 'unknown', 'database error', 'action-scheduler' )
    10141018                : $wpdb->last_error;
    1015 
    10161019            throw new \RuntimeException(
    10171020                sprintf(
     
    10271030
    10281031    /**
     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    /**
    10291069     * Get the number of active claims.
    10301070     *
     
    10951135
    10961136    /**
    1097      * Release actions from a claim and delete the claim.
     1137     * Release pending actions from a claim and delete the claim.
    10981138     *
    10991139     * @param ActionScheduler_ActionClaim $claim Claim object.
     
    11071147         */
    11081148        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        }
    11091154
    11101155        /**
     
    11141159         *
    11151160         * 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 ) );
    11181165
    11191166        $row_updates = 0;
  • commentswp/trunk/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_HybridStore.php

    r3237139 r3451333  
    433433
    434434    /**
    435      * Release a claim in the table data store.
     435     * Release a claim in the table data store on any pending actions.
    436436     *
    437437     * @param ActionScheduler_ActionClaim $claim Claim object.
  • commentswp/trunk/vendor/woocommerce/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore.php

    r3237139 r3451333  
    792792
    793793    /**
    794      * Release claim.
     794     * Release pending actions from a claim.
    795795     *
    796796     * @param ActionScheduler_ActionClaim $claim Claim object to release.
     
    799799     */
    800800    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 ) );
    806801        /**
    807802         * Global wpdb object.
     
    810805         */
    811806        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 ) );
    812829
    813830        // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
  • commentswp/trunk/vendor/woocommerce/action-scheduler/classes/schema/ActionScheduler_StoreSchema.php

    r3237139 r3451333  
    2121     * @var int
    2222     */
    23     protected $schema_version = 7;
     23    protected $schema_version = 8;
    2424
    2525    /**
     
    8181                        KEY group_id (group_id),
    8282                        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`)
    8486                        ) $charset_collate";
    8587
  • commentswp/trunk/vendor/woocommerce/action-scheduler/functions.php

    r3237139 r3451333  
    8787     * @param string   $group      Action group.
    8888     * @param int      $priorities Action priority.
     89     * @param bool     $unique     Unique action.
    8990     */
    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 );
    9192    if ( null !== $pre ) {
    9293        return is_int( $pre ) ? $pre : 0;
     
    160161     * @param string   $group               Action group.
    161162     * @param int      $priority            Action priority.
     163     * @param bool     $unique              Unique action.
    162164     */
    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 );
    164166    if ( null !== $pre ) {
    165167        return is_int( $pre ) ? $pre : 0;
     
    226228     * @param string   $group      Action group.
    227229     * @param int      $priority   Action priority.
     230     * @param bool     $unique     Unique action.
    228231     */
    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 );
    230233    if ( null !== $pre ) {
    231234        return is_int( $pre ) ? $pre : 0;
     
    494497    return $date;
    495498}
     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 */
     509function 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  
    22Contributors: Automattic, wpmuguru, claudiosanches, peterfabian1000, vedjain, jamosova, obliviousharmony, konamiman, sadowski, royho, barryhughes-1
    33Tags: scheduler, cron
    4 Stable tag: 3.9.2
     4Stable tag: 3.9.3
    55License: GPLv3
    66Requires at least: 6.5
    7 Tested up to: 6.7
    8 Requires PHP: 7.1
     7Tested up to: 6.8
     8Requires PHP: 7.2
    99
    1010Action Scheduler - Job Queue for WordPress
     
    3030## Learn More
    3131
    32 To learn more about how to Action Scheduler works, and how to use it in your plugin, check out the docs on [ActionScheduler.org](https://actionscheduler.org).
     32To 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).
    3333
    3434There you will find:
     
    4747
    4848== 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.
    4962
    5063= 3.9.2 - 2025-02-03 =
Note: See TracChangeset for help on using the changeset viewer.