Changeset 3490312
- Timestamp:
- 03/24/2026 07:15:09 PM (8 days ago)
- Location:
- mayo-events-manager
- Files:
-
- 213 added
- 12 edited
-
tags/1.8.8 (added)
-
tags/1.8.8/CLAUDE.md (added)
-
tags/1.8.8/CONTRIBUTE.md (added)
-
tags/1.8.8/LICENSE (added)
-
tags/1.8.8/README.md (added)
-
tags/1.8.8/assets (added)
-
tags/1.8.8/assets/css (added)
-
tags/1.8.8/assets/css/# TODO.md (added)
-
tags/1.8.8/assets/css/admin.css (added)
-
tags/1.8.8/assets/css/public.css (added)
-
tags/1.8.8/assets/js (added)
-
tags/1.8.8/assets/js/dist (added)
-
tags/1.8.8/assets/js/dist/admin.bundle.js (added)
-
tags/1.8.8/assets/js/dist/admin.bundle.js.LICENSE.txt (added)
-
tags/1.8.8/assets/js/dist/public.bundle.js (added)
-
tags/1.8.8/assets/js/dist/public.bundle.js.LICENSE.txt (added)
-
tags/1.8.8/bin (added)
-
tags/1.8.8/bin/install-wp-tests.sh (added)
-
tags/1.8.8/build.txt (added)
-
tags/1.8.8/codecov.yml (added)
-
tags/1.8.8/composer.json (added)
-
tags/1.8.8/docs (added)
-
tags/1.8.8/docs/enhanced-email-notifications.md (added)
-
tags/1.8.8/docs/rest-api-authentication.md (added)
-
tags/1.8.8/docs/submitter-notifications.md (added)
-
tags/1.8.8/includes (added)
-
tags/1.8.8/includes/Admin.php (added)
-
tags/1.8.8/includes/Announcement.php (added)
-
tags/1.8.8/includes/CalendarFeed.php (added)
-
tags/1.8.8/includes/Frontend.php (added)
-
tags/1.8.8/includes/Rest (added)
-
tags/1.8.8/includes/Rest.php (added)
-
tags/1.8.8/includes/Rest/AnnouncementsController.php (added)
-
tags/1.8.8/includes/Rest/EventsController.php (added)
-
tags/1.8.8/includes/Rest/Helpers (added)
-
tags/1.8.8/includes/Rest/Helpers/EmailNotification.php (added)
-
tags/1.8.8/includes/Rest/Helpers/FileUpload.php (added)
-
tags/1.8.8/includes/Rest/Helpers/ParallelHttp.php (added)
-
tags/1.8.8/includes/Rest/Helpers/PreferencesSanitizer.php (added)
-
tags/1.8.8/includes/Rest/Helpers/ServiceBodyLookup.php (added)
-
tags/1.8.8/includes/Rest/Helpers/TaxonomyQuery.php (added)
-
tags/1.8.8/includes/Rest/SettingsController.php (added)
-
tags/1.8.8/includes/Rest/SubscribersController.php (added)
-
tags/1.8.8/includes/RssFeed.php (added)
-
tags/1.8.8/includes/Subscriber.php (added)
-
tags/1.8.8/includes/Widgets (added)
-
tags/1.8.8/includes/Widgets/AnnouncementWidget.php (added)
-
tags/1.8.8/mayo-events-manager.php (added)
-
tags/1.8.8/package.json (added)
-
tags/1.8.8/phpunit.xml (added)
-
tags/1.8.8/readme.txt (added)
-
tags/1.8.8/renovate.json (added)
-
tags/1.8.8/scripts (added)
-
tags/1.8.8/scripts/check-esc-url.sh (added)
-
tags/1.8.8/scripts/import-events-from-csv.py (added)
-
tags/1.8.8/scripts/sample-events.csv (added)
-
tags/1.8.8/support (added)
-
tags/1.8.8/support/banner-772x250.png (added)
-
tags/1.8.8/support/icon-256x256.png (added)
-
tags/1.8.8/templates (added)
-
tags/1.8.8/templates/archive-mayo-event.php (added)
-
tags/1.8.8/templates/details-mayo-announcement.php (added)
-
tags/1.8.8/templates/details-mayo-event.php (added)
-
tags/1.8.8/tests (added)
-
tags/1.8.8/tests/Unit (added)
-
tags/1.8.8/tests/Unit/AdminTest.php (added)
-
tags/1.8.8/tests/Unit/AnnouncementTest.php (added)
-
tags/1.8.8/tests/Unit/CalendarFeedTest.php (added)
-
tags/1.8.8/tests/Unit/FrontendTest.php (added)
-
tags/1.8.8/tests/Unit/Rest (added)
-
tags/1.8.8/tests/Unit/Rest/AnnouncementsControllerTest.php (added)
-
tags/1.8.8/tests/Unit/Rest/EventsControllerTest.php (added)
-
tags/1.8.8/tests/Unit/Rest/Helpers (added)
-
tags/1.8.8/tests/Unit/Rest/Helpers/EmailNotificationTest.php (added)
-
tags/1.8.8/tests/Unit/Rest/Helpers/FileUploadTest.php (added)
-
tags/1.8.8/tests/Unit/Rest/Helpers/PreferencesSanitizerTest.php (added)
-
tags/1.8.8/tests/Unit/Rest/Helpers/ServiceBodyLookupTest.php (added)
-
tags/1.8.8/tests/Unit/Rest/Helpers/TaxonomyQueryTest.php (added)
-
tags/1.8.8/tests/Unit/Rest/SettingsControllerTest.php (added)
-
tags/1.8.8/tests/Unit/Rest/SubscribersControllerTest.php (added)
-
tags/1.8.8/tests/Unit/RestTest.php (added)
-
tags/1.8.8/tests/Unit/RssFeedTest.php (added)
-
tags/1.8.8/tests/Unit/SubscriberTest.php (added)
-
tags/1.8.8/tests/Unit/TestCase.php (added)
-
tags/1.8.8/tests/Unit/Widgets (added)
-
tags/1.8.8/tests/Unit/Widgets/AnnouncementWidgetTest.php (added)
-
tags/1.8.8/tests/bootstrap.php (added)
-
tags/1.8.8/vendor (added)
-
tags/1.8.8/vendor/autoload.php (added)
-
tags/1.8.8/vendor/composer (added)
-
tags/1.8.8/vendor/composer/ClassLoader.php (added)
-
tags/1.8.8/vendor/composer/InstalledVersions.php (added)
-
tags/1.8.8/vendor/composer/LICENSE (added)
-
tags/1.8.8/vendor/composer/autoload_classmap.php (added)
-
tags/1.8.8/vendor/composer/autoload_namespaces.php (added)
-
tags/1.8.8/vendor/composer/autoload_psr4.php (added)
-
tags/1.8.8/vendor/composer/autoload_real.php (added)
-
tags/1.8.8/vendor/composer/autoload_static.php (added)
-
tags/1.8.8/vendor/composer/installed.json (added)
-
tags/1.8.8/vendor/composer/installed.php (added)
-
tags/1.8.8/vendor/composer/installers (added)
-
tags/1.8.8/vendor/composer/installers/.github (added)
-
tags/1.8.8/vendor/composer/installers/.github/workflows (added)
-
tags/1.8.8/vendor/composer/installers/.github/workflows/continuous-integration.yml (added)
-
tags/1.8.8/vendor/composer/installers/.github/workflows/lint.yml (added)
-
tags/1.8.8/vendor/composer/installers/.github/workflows/phpstan.yml (added)
-
tags/1.8.8/vendor/composer/installers/LICENSE (added)
-
tags/1.8.8/vendor/composer/installers/composer.json (added)
-
tags/1.8.8/vendor/composer/installers/src (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/AglInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/AkauntingInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/AsgardInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/AttogramInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/BaseInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/BitrixInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/BonefishInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/BotbleInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/CakePHPInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/ChefInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/CiviCrmInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/CockpitInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/Concrete5Installer.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/ConcreteCMSInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/CroogoInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/DecibelInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/DframeInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/DokuWikiInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/DolibarrInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/ElggInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/EliasisInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/ExpressionEngineInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/EzPlatformInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/ForkCMSInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/FuelInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/FuelphpInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/GravInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/HuradInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/ImageCMSInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/Installer.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/ItopInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/KanboardInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/KnownInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/KodiCMSInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/KohanaInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/LaravelInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/LavaLiteInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/LithiumInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/MODXEvoInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/MagentoInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/MajimaInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/MakoInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/MantisBTInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/MatomoInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/MauticInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/MayaInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/MiaoxingInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/ModxInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/OntoWikiInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/OsclassInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/OxidInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/PPIInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/PantheonInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/PhiftyInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/PhpBBInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/PiwikInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/PlentymarketsInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/Plugin.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/PortoInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/PrestashopInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/ProcessWireInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/PuppetInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/PxcmsInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/RadPHPInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/ReIndexInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/Redaxo5Installer.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/RedaxoInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/RoundcubeInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/SMFInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/ShopwareInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/SilverStripeInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/SiteDirectInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/StarbugInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/SyDESInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/SyliusInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/TaoInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/TastyIgniterInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/TheliaInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/TuskInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/UserFrostingInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/VanillaInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/VgmcpInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/WinterInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/WolfCMSInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/WordPressInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/YawikInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/ZendInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/Composer/Installers/ZikulaInstaller.php (added)
-
tags/1.8.8/vendor/composer/installers/src/bootstrap.php (added)
-
tags/1.8.8/vendor/composer/platform_check.php (added)
-
trunk/CLAUDE.md (modified) (2 diffs)
-
trunk/assets/css/admin.css (modified) (2 diffs)
-
trunk/assets/js/dist/admin.bundle.js (modified) (1 diff)
-
trunk/build.txt (modified) (1 diff)
-
trunk/includes/Admin.php (modified) (2 diffs)
-
trunk/includes/Rest/EventsController.php (modified) (16 diffs)
-
trunk/includes/Rest/Helpers/ParallelHttp.php (added)
-
trunk/includes/Rest/SettingsController.php (modified) (2 diffs)
-
trunk/mayo-events-manager.php (modified) (2 diffs)
-
trunk/package.json (modified) (1 diff)
-
trunk/readme.txt (modified) (2 diffs)
-
trunk/tests/Unit/AdminTest.php (modified) (4 diffs)
-
trunk/vendor/composer/installed.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
mayo-events-manager/trunk/CLAUDE.md
r3446645 r3490312 101 101 102 102 ### How to Update 103 1. **Add a new version section** at the top of the changelog (after `== Changelog ==`) 104 2. **Increment version number** appropriately: 105 - Patch (X.X.1): Bug fixes, minor improvements 106 - Minor (X.1.0): New features, non-breaking changes 107 - Major (1.X.0): Breaking changes, major rewrites 108 3. **Write clear, user-focused descriptions**: 103 1. **Add entries to the current (unreleased) version section** at the top of the changelog. Do NOT create a new version section or bump version numbers unless explicitly asked — versions are only bumped at release time. 104 2. **Write clear, user-focused descriptions**: 109 105 - Start with action words (Fixed, Added, Improved, etc.) 110 106 - Describe the user impact, not technical details … … 123 119 124 120 ### Version Consistency 125 Also update the version numberin:121 Only bump version numbers when explicitly asked to cut a release. When bumping, update in: 126 122 - `mayo-events-manager.php` (line 23: `MAYO_VERSION` constant) 127 123 - `readme.txt` (line 8: `Stable tag`) -
mayo-events-manager/trunk/assets/css/admin.css
r3432200 r3490312 429 429 } 430 430 431 .mayo-source-id-row { 432 display: inline-flex; 433 align-items: center; 434 gap: 8px; 435 margin-bottom: 8px; 436 } 437 431 438 .mayo-source-id { 432 439 font-family: monospace; … … 437 444 border-radius: 3px; 438 445 border: 1px solid #c5d9ed; 446 user-select: all; 447 } 448 449 .mayo-copy-id { 450 display: inline-flex; 451 align-items: center; 452 padding: 2px 4px; 453 background: none; 454 border: 1px solid #c5d9ed; 455 border-radius: 3px; 456 cursor: pointer; 457 color: #2271b1; 458 } 459 460 .mayo-copy-id:hover { 461 background: #f0f7fc; 439 462 } 440 463 -
mayo-events-manager/trunk/assets/js/dist/admin.bundle.js
r3442218 r3490312 1 1 /*! For license information please see admin.bundle.js.LICENSE.txt */ 2 (()=>{"use strict";const e=wp.element,t=function(){return React.createElement("div",{className:"wrap mayo-docs"},React.createElement("h1",null,"Shortcodes"),React.createElement("div",{className:"card",style:{marginBottom:"20px"}},React.createElement("h2",null,"Table of Contents"),React.createElement("ul",{style:{listStyle:"disc",marginLeft:"20px",lineHeight:"2"}},React.createElement("li",null,React.createElement("a",{href:"#event-list"},"[mayo_event_list] - Event List Shortcode")),React.createElement("li",null,React.createElement("a",{href:"#event-form"},"[mayo_event_form] - Event Submission Form Shortcode")),React.createElement("li",null,React.createElement("a",{href:"#announcement"},"[mayo_announcement] - Announcement Shortcode")),React.createElement("li",null,React.createElement("a",{href:"#announcement-form"},"[mayo_announcement_form] - Announcement Submission Form Shortcode")),React.createElement("li",null,React.createElement("a",{href:"#subscribe"},"[mayo_subscribe] - Email Subscription Form Shortcode")))),React.createElement("div",{className:"card",id:"event-list"},React.createElement("h2",null,"Event List Shortcode"),React.createElement("p",null,"Use this shortcode to display a list of upcoming events:"),React.createElement("pre",null,React.createElement("code",null,"[mayo_event_list]")),React.createElement("h3",null,"Optional Parameters"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Parameter"),React.createElement("th",null,"Description"),React.createElement("th",null,"Default"),React.createElement("th",null,"Options"),React.createElement("th",null,"Overridable via Querystring?"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,"infinite_scroll"),React.createElement("td",null,"Enable automatic loading of more events as user scrolls down the page"),React.createElement("td",null,"true"),React.createElement("td",null,"true, false"),React.createElement("td",null,"Yes")),React.createElement("tr",null,React.createElement("td",null,"autoexpand"),React.createElement("td",null,"Automatically expand all events when the page loads"),React.createElement("td",null,"false"),React.createElement("td",null,"true, false"),React.createElement("td",null,"Yes")),React.createElement("tr",null,React.createElement("td",null,"categories"),React.createElement("td",null,"Filter by category slugs (comma-separated). Prefix a slug with a minus sign (-) to exclude it."),React.createElement("td",null,"empty (all categories)"),React.createElement("td",null,"e.g., ",React.createElement("pre",null,"meetings,workshops")," or ",React.createElement("pre",null,"-meetings,-workshops")," (exclude meetings and workshops)"),React.createElement("td",null,"Yes")),React.createElement("tr",null,React.createElement("td",null,"category_relation"),React.createElement("td",null,"How to match multiple categories: AND (must have all) or OR (must have any)"),React.createElement("td",null,"OR"),React.createElement("td",null,"AND, OR"),React.createElement("td",null,"Yes")),React.createElement("tr",null,React.createElement("td",null,"tags"),React.createElement("td",null,"Filter by tag slugs (comma-separated). Prefix a slug with a minus sign (-) to exclude it."),React.createElement("td",null,"empty (all tags)"),React.createElement("td",null,"e.g., ",React.createElement("pre",null,"featured,ticketed")," (include only featured or ticketed), ",React.createElement("pre",null,"featured+ticketed")," (is an and condition), or ",React.createElement("pre",null,"-featured,-ticketed")," (exclude featured and ticketed). For more information see the Wordpress documentation on ",React.createElement("a",{target:"_blank",href:"https://developer.wordpress.org/reference/classes/wp_query/#tag-parameters"},"Tag Parameters"),"."),React.createElement("td",null,"Yes")),React.createElement("tr",null,React.createElement("td",null,"event_type"),React.createElement("td",null,"Filter by event type"),React.createElement("td",null,"empty (all types)"),React.createElement("td",null,"Service, Activity"),React.createElement("td",null,"Yes (only one event type at a time)")),React.createElement("tr",null,React.createElement("td",null,"time_format"),React.createElement("td",null,"Format for displaying time"),React.createElement("td",null,"12hour"),React.createElement("td",null,"12hour, 24hour"),React.createElement("td",null,"No")),React.createElement("tr",null,React.createElement("td",null,"per_page"),React.createElement("td",null,"Number of events to show per page"),React.createElement("td",null,"10"),React.createElement("td",null,"Any positive number"),React.createElement("td",null,"Yes")),React.createElement("tr",null,React.createElement("td",null,"status"),React.createElement("td",null,"Shows events with a given status"),React.createElement("td",null,"publish"),React.createElement("td",null,"publish, pending"),React.createElement("td",null,"Yes (only one status at a time)")),React.createElement("tr",null,React.createElement("td",null,"service_body"),React.createElement("td",null,"Filter events by service body IDs (comma-separated)"),React.createElement("td",null,"empty (all service bodies)"),React.createElement("td",null,'e.g., "1,2,3" (shows events from any of the specified service bodies)'),React.createElement("td",null,"Yes")),React.createElement("tr",null,React.createElement("td",null,"source_ids"),React.createElement("td",null,"Filter events by source IDs (comma-separated)"),React.createElement("td",null,"empty (local events only)"),React.createElement("td",null,'e.g., "local,source_123,source_456"'),React.createElement("td",null,"Yes")),React.createElement("tr",null,React.createElement("td",null,"archive"),React.createElement("td",null,"Show only past events that have completely ended (excluding current and future events)"),React.createElement("td",null,"false"),React.createElement("td",null,"true, false"),React.createElement("td",null,"Yes")),React.createElement("tr",null,React.createElement("td",null,"order"),React.createElement("td",null,"Sort order for events by start date and time"),React.createElement("td",null,"ASC"),React.createElement("td",null,"ASC (earliest first), DESC (latest first)"),React.createElement("td",null,"Yes")),React.createElement("tr",null,React.createElement("td",null,"timezone"),React.createElement("td",null,"Timezone to use for date filtering"),React.createElement("td",null,"Browser's timezone"),React.createElement("td",null,'Any valid IANA timezone (e.g., "America/New_York", "Europe/London")'),React.createElement("td",null,"Yes")),React.createElement("tr",null,React.createElement("td",null,"view"),React.createElement("td",null,"Default view mode for displaying events"),React.createElement("td",null,"list"),React.createElement("td",null,"list, calendar"),React.createElement("td",null,"Yes")))),React.createElement("h3",null,"Example with Parameters"),React.createElement("pre",null,React.createElement("code",null,'[mayo_event_list time_format="24hour" per_page="5" categories="meetings,workshops" tags="featured" event_type="Service" service_body="1,2,3" source_ids="local,source_123" archive="false" order="ASC" timezone="America/New_York" view="calendar"]')),React.createElement("h3",null,"Example with Category/Tag Exclusions"),React.createElement("pre",null,React.createElement("code",null,'[mayo_event_list categories="-announcements,-alerts" tags="-archived"]')),React.createElement("p",null,React.createElement("em",null,'Shows all events except those with the "announcements" or "alerts" categories, and excludes the "archived" tag.')),React.createElement("h3",null,"Example with Querystring Overrides"),React.createElement("pre",null,React.createElement("code",null,'https://example.com/events?status=pending&categories=meetings,workshops&event_type=Service&service_body="1,2,3"&source_ids=local,source_123&archive=true&order=DESC&timezone=America/New_York&infinite_scroll=false&per_page=20&view=calendar')),React.createElement("h3",null,"Notes"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,"Prefix category or tag slugs with a minus sign (-) to exclude them from the event list"),React.createElement("li",null,"You can mix inclusions and exclusions: ",React.createElement("code",null,'categories="meetings,-cancelled"')," shows meetings but not cancelled ones"),React.createElement("li",null,"The ",React.createElement("code",null,"view")," parameter allows you to display events in either a list or calendar format. Users can toggle between views using the buttons in the header."),React.createElement("li",null,"Local events are always included by default unless specifically excluded"),React.createElement("li",null,"To include only local events, use ",React.createElement("code",null,'source_ids="local"')),React.createElement("li",null,"To exclude local events, specify only external source IDs (e.g., ",React.createElement("code",null,'source_ids="source_123,source_456"'),")"),React.createElement("li",null,"To include all events (local and external), leave source_ids empty"),React.createElement("li",null,"When ",React.createElement("code",null,'archive="true"'),", only past events that have completely ended will be shown (excludes current and future events)"),React.createElement("li",null,"When ",React.createElement("code",null,'archive="false"')," (default), only upcoming and ongoing events will be shown"),React.createElement("li",null,"Use ",React.createElement("code",null,'order="DESC"')," with ",React.createElement("code",null,'archive="true"')," to show most recent past events first"),React.createElement("li",null,"Use ",React.createElement("code",null,'order="ASC"')," (default) to show events in chronological order (earliest first)"),React.createElement("li",null,"The ",React.createElement("code",null,"timezone")," parameter ensures date filtering is accurate across different time zones"),React.createElement("li",null,"Events are loaded using infinite scroll automatically as the user scrolls down the page"))),React.createElement("div",{className:"card",id:"event-form"},React.createElement("h2",null,"Event Submission Form Shortcode"),React.createElement("p",null,"The Event Submission Form Shortcode allows users to submit new events to your site. The form includes fields for event name, type, start date, end date, and more."),React.createElement("p",null,"When a new event is submitted, an email notification will be sent to the email addresses configured in the plugin settings. Multiple email addresses can be specified, separated by commas or semicolons."),React.createElement("h3",null,"Shortcode"),React.createElement("code",null,"[mayo_event_form]"),React.createElement("h3",null,"Default Required Fields"),React.createElement("p",null,"The following fields are always required and cannot be overridden:"),React.createElement("ul",null,React.createElement("li",null,"Event Name (event_name)"),React.createElement("li",null,"Event Type (event_type)"),React.createElement("li",null,"Service Body (service_body)"),React.createElement("li",null,"Email (email)"),React.createElement("li",null,"Start Date (event_start_date)"),React.createElement("li",null,"Start Time (event_start_time)"),React.createElement("li",null,"End Date (event_end_date)"),React.createElement("li",null,"End Time (event_end_time)"),React.createElement("li",null,"Timezone (timezone)")),React.createElement("h3",null,"Optional Parameters"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Parameter"),React.createElement("th",null,"Description"),React.createElement("th",null,"Default"),React.createElement("th",null,"Available Fields"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,"additional_required_fields"),React.createElement("td",null,"Comma-separated list of additional fields that should be required"),React.createElement("td",null,"empty (no additional required fields)"),React.createElement("td",null,React.createElement("ul",null,React.createElement("li",null,"description"),React.createElement("li",null,"location_name"),React.createElement("li",null,"location_address"),React.createElement("li",null,"location_details"),React.createElement("li",null,"flyer")))),React.createElement("tr",null,React.createElement("td",null,"categories"),React.createElement("td",null,"Comma-separated list of category slugs that should be available in the form. Prefix a category with a minus sign (-) to exclude it."),React.createElement("td",null,"empty (all categories)"),React.createElement("td",null,"e.g., ",React.createElement("pre",null,"meetings,workshops")," to show only meetings and workshops, or ",React.createElement("pre",null,"-meetings,-workshops")," to show all categories except meetings and workshops")),React.createElement("tr",null,React.createElement("td",null,"tags"),React.createElement("td",null,"Comma-separated list of tag slugs that should be available in the form. Prefix a tag with a minus sign (-) to exclude it. Tag slugs are always compared in lowercase."),React.createElement("td",null,"empty (all tags)"),React.createElement("td",null,"e.g., ",React.createElement("pre",null,"featured,ticketed")," to show only featured and ticketed tags, or ",React.createElement("pre",null,"-featured,-ticketed")," to show all tags except featured and ticketed")),React.createElement("tr",null,React.createElement("td",null,"default_service_bodies"),React.createElement("td",null,"Comma-separated list of service body IDs to restrict the form to specific service bodies. Perfect for multi-site setups where each site should only allow events for specific service bodies."),React.createElement("td",null,"empty (all service bodies)"),React.createElement("td",null,"e.g., ",React.createElement("pre",null,"1,2,3")," to allow only service bodies 1, 2, and 3, or ",React.createElement("pre",null,"0")," for only Unaffiliated events. If only one service body is specified, the field will be hidden and auto-selected.")))),React.createElement("h3",null,"Examples"),React.createElement("h4",null,"Standard Form with Additional Requirements"),React.createElement("pre",null,React.createElement("code",null,'[mayo_event_form additional_required_fields="flyer,location_name,location_address" categories="meetings,workshops" tags="featured,-ticketed"]')),React.createElement("h4",null,"Multi-Site Configuration - Restrict to Specific Service Bodies"),React.createElement("pre",null,React.createElement("code",null,'[mayo_event_form default_service_bodies="1,2,5" categories="meetings"]')),React.createElement("p",null,React.createElement("em",null,"Perfect for multi-site setups where each subsite should only allow events for specific service bodies.")),React.createElement("h4",null,"Single Service Body (Auto-Hidden)"),React.createElement("pre",null,React.createElement("code",null,'[mayo_event_form default_service_bodies="3"]')),React.createElement("p",null,React.createElement("em",null,"When only one service body is specified, the service body field is hidden and automatically selected.")),React.createElement("h3",null,"Notes"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,"Default required fields are always enforced"),React.createElement("li",null,"Additional required fields will be marked with an asterisk (*)"),React.createElement("li",null,"Form validation will ensure all required fields are filled"))),React.createElement("div",{className:"card",id:"announcement"},React.createElement("h2",null,"Announcement Shortcode"),React.createElement("p",null,"Use this shortcode to display announcements as banners or modals. Announcements are managed separately from events and are useful for:"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,"Meeting closures or changes"),React.createElement("li",null,"Weather alerts"),React.createElement("li",null,"Breaking news or important updates"),React.createElement("li",null,"Promoting upcoming events (can be linked to events)"),React.createElement("li",null,"Post-event thank you messages")),React.createElement("pre",null,React.createElement("code",null,"[mayo_announcement]")),React.createElement("h3",null,"How It Works"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,"Announcements have their own display window (",React.createElement("code",null,"display_start_date")," and ",React.createElement("code",null,"display_end_date"),")"),React.createElement("li",null,"Can optionally be linked to one or more events"),React.createElement("li",null,"Priority levels (low/normal/high/urgent) affect display order and styling"),React.createElement("li",null,React.createElement("strong",null,"Banner mode:")," Shows a fixed bar at the top of the viewport with carousel navigation for multiple announcements"),React.createElement("li",null,React.createElement("strong",null,"Modal mode:")," Shows a centered popup with a list of all matching announcements"),React.createElement("li",null,"When dismissed, announcements stay hidden for 24 hours but can be re-opened via a bell icon in the bottom-right corner")),React.createElement("h3",null,"Optional Parameters"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Parameter"),React.createElement("th",null,"Description"),React.createElement("th",null,"Default"),React.createElement("th",null,"Options"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,"mode"),React.createElement("td",null,"Display mode for announcements"),React.createElement("td",null,"banner"),React.createElement("td",null,"banner (sticky top bar), modal (popup)")),React.createElement("tr",null,React.createElement("td",null,"categories"),React.createElement("td",null,"Filter by category slugs (comma-separated)"),React.createElement("td",null,"empty (all categories)"),React.createElement("td",null,"e.g., ",React.createElement("pre",null,"announcements,alerts"))),React.createElement("tr",null,React.createElement("td",null,"category_relation"),React.createElement("td",null,"How to match multiple categories: AND (must have all) or OR (must have any)"),React.createElement("td",null,"OR"),React.createElement("td",null,"AND, OR")),React.createElement("tr",null,React.createElement("td",null,"tags"),React.createElement("td",null,"Filter by tag slugs (comma-separated)"),React.createElement("td",null,"empty (all tags)"),React.createElement("td",null,"e.g., ",React.createElement("pre",null,"urgent,featured")," (include only urgent or featured), ",React.createElement("pre",null,"urgent+featured")," (is an and condition), or ",React.createElement("pre",null,"-urgent,-featured")," (exclude urgent and featured)")),React.createElement("tr",null,React.createElement("td",null,"priority"),React.createElement("td",null,"Filter by priority level"),React.createElement("td",null,"empty (all priorities)"),React.createElement("td",null,"low, normal, high, urgent")),React.createElement("tr",null,React.createElement("td",null,"show_linked_events"),React.createElement("td",null,"Show linked event titles with the announcement"),React.createElement("td",null,"false"),React.createElement("td",null,"true, false")),React.createElement("tr",null,React.createElement("td",null,"time_format"),React.createElement("td",null,"Format for displaying time"),React.createElement("td",null,"12hour"),React.createElement("td",null,"12hour, 24hour")),React.createElement("tr",null,React.createElement("td",null,"background_color"),React.createElement("td",null,"Custom background color for the banner/modal header/bell icon"),React.createElement("td",null,"empty (uses CSS default)"),React.createElement("td",null,"Any hex color, e.g., ",React.createElement("pre",null,"#ff6600"))),React.createElement("tr",null,React.createElement("td",null,"text_color"),React.createElement("td",null,"Custom text color for the banner/modal header/bell icon"),React.createElement("td",null,"empty (uses CSS default)"),React.createElement("td",null,"Any hex color, e.g., ",React.createElement("pre",null,"#ffffff"))),React.createElement("tr",null,React.createElement("td",null,"orderby"),React.createElement("td",null,"Field to sort announcements by"),React.createElement("td",null,"date"),React.createElement("td",null,"date (display start date), title (alphabetical), created (post creation date)")),React.createElement("tr",null,React.createElement("td",null,"order"),React.createElement("td",null,"Sort direction"),React.createElement("td",null,"DESC for date/created, ASC for title"),React.createElement("td",null,"ASC (ascending), DESC (descending)")))),React.createElement("h3",null,"Examples"),React.createElement("h4",null,"Default Banner Mode"),React.createElement("pre",null,React.createElement("code",null,"[mayo_announcement]")),React.createElement("h4",null,"Modal Popup"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement mode="modal"]')),React.createElement("h4",null,"Filter by Category"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement categories="announcements,alerts"]')),React.createElement("h4",null,"Show Only Urgent Announcements"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement priority="urgent"]')),React.createElement("h4",null,"Show Linked Events"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement show_linked_events="true"]')),React.createElement("h4",null,"Combined Parameters"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement mode="banner" categories="announcements" tags="urgent" priority="high" time_format="24hour"]')),React.createElement("h4",null,"Custom Colors"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement background_color="#ff6600" text_color="#ffffff"]')),React.createElement("h4",null,"Red Alert Style"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement background_color="#dc3545" text_color="#fff" priority="urgent"]')),React.createElement("h4",null,"Sort by Title (Alphabetical)"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement orderby="title"]')),React.createElement("h4",null,"Sort by Created Date (Newest First)"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement orderby="created" order="DESC"]')),React.createElement("h3",null,"Widget Usage"),React.createElement("p",null,"For site-wide announcements without editing templates, use the ",React.createElement("strong",null,'"Mayo Event Announcements"')," widget:"),React.createElement("ol",null,React.createElement("li",null,"Go to ",React.createElement("strong",null,"Appearance → Widgets")),React.createElement("li",null,'Add the "Mayo Event Announcements" widget to any widget area (footer recommended for site-wide display)'),React.createElement("li",null,"Configure the display mode, categories, tags, priority, and time format")),React.createElement("h3",null,"Creating Announcements"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,"Go to ",React.createElement("strong",null,"Mayo → Announcements → Add New")),React.createElement("li",null,"Enter the announcement title and content"),React.createElement("li",null,"Set the ",React.createElement("strong",null,"Display Start Date")," to when you want the announcement to start showing"),React.createElement("li",null,"Set the ",React.createElement("strong",null,"Display End Date")," to when you want the announcement to stop showing"),React.createElement("li",null,"Choose a ",React.createElement("strong",null,"Priority Level")," (urgent announcements appear first)"),React.createElement("li",null,"Optionally ",React.createElement("strong",null,"link to events")," if this announcement relates to specific events")),React.createElement("h3",null,"Linking Events"),React.createElement("p",null,"Announcements can be linked to events in two ways:"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,React.createElement("strong",null,"From the Announcement editor:"),' Search and add events in the "Linked Events" panel'),React.createElement("li",null,React.createElement("strong",null,"From the Event editor:"),' Click "Create Announcement for This Event" in the "Linked Announcements" panel')),React.createElement("h3",null,"Notes"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,"Announcements have independent display windows from events"),React.createElement("li",null,"Use announcements to promote events before they start, or recap after they end"),React.createElement("li",null,"Priority levels: ",React.createElement("strong",null,"urgent")," (red), ",React.createElement("strong",null,"high")," (orange), ",React.createElement("strong",null,"normal")," (blue), ",React.createElement("strong",null,"low")," (gray)"),React.createElement("li",null,"Use categories or tags to control which announcements appear"),React.createElement("li",null,"Multiple announcements are shown as a carousel in banner mode, or as a list in modal mode"))),React.createElement("div",{className:"card",id:"announcement-form"},React.createElement("h2",null,"Announcement Submission Form Shortcode"),React.createElement("p",null,"The Announcement Submission Form Shortcode allows users to submit new announcements to your site. This works similarly to the event form but for announcements."),React.createElement("p",null,'When a new announcement is submitted, an email notification will be sent to the email addresses configured in the plugin settings. The announcement will have a "pending" status until approved by an administrator.'),React.createElement("h3",null,"Shortcode"),React.createElement("code",null,"[mayo_announcement_form]"),React.createElement("h3",null,"Default Required Fields"),React.createElement("p",null,"The following fields are always required:"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,"Announcement Title (title)"),React.createElement("li",null,"Description (description)"),React.createElement("li",null,"Service Body (service_body)"),React.createElement("li",null,"Point of Contact Name (contact_name)"),React.createElement("li",null,"Point of Contact Email (email)")),React.createElement("h3",null,"Optional Fields"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,"Start Date (start_date) - When the announcement should start displaying"),React.createElement("li",null,"Start Time (start_time) - Time of day the announcement should start"),React.createElement("li",null,"End Date (end_date) - When the announcement should stop displaying"),React.createElement("li",null,"End Time (end_time) - Time of day the announcement should end"),React.createElement("li",null,"Image/Flyer (flyer) - An image attachment for the announcement"),React.createElement("li",null,"Categories - Standard WordPress categories"),React.createElement("li",null,"Tags - Standard WordPress tags")),React.createElement("h3",null,"Optional Parameters"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Parameter"),React.createElement("th",null,"Description"),React.createElement("th",null,"Default"),React.createElement("th",null,"Options"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,"additional_required_fields"),React.createElement("td",null,"Comma-separated list of additional fields that should be required"),React.createElement("td",null,"empty (no additional required fields)"),React.createElement("td",null,React.createElement("ul",null,React.createElement("li",null,"start_date"),React.createElement("li",null,"start_time"),React.createElement("li",null,"end_date"),React.createElement("li",null,"end_time"),React.createElement("li",null,"flyer")))),React.createElement("tr",null,React.createElement("td",null,"categories"),React.createElement("td",null,"Comma-separated list of category slugs that should be available in the form. Prefix a category with a minus sign (-) to exclude it."),React.createElement("td",null,"empty (uses subscription settings)"),React.createElement("td",null,"e.g., ",React.createElement("pre",null,"announcements,alerts")," or ",React.createElement("pre",null,"-internal"))),React.createElement("tr",null,React.createElement("td",null,"tags"),React.createElement("td",null,"Comma-separated list of tag slugs that should be available in the form. Prefix a tag with a minus sign (-) to exclude it."),React.createElement("td",null,"empty (uses subscription settings)"),React.createElement("td",null,"e.g., ",React.createElement("pre",null,"urgent,featured")," or ",React.createElement("pre",null,"-archived"))),React.createElement("tr",null,React.createElement("td",null,"default_service_bodies"),React.createElement("td",null,"Comma-separated list of service body IDs to restrict the form to specific service bodies."),React.createElement("td",null,"empty (uses subscription settings)"),React.createElement("td",null,"e.g., ",React.createElement("pre",null,"1,2,3")," or ",React.createElement("pre",null,"0")," for Unaffiliated. If only one is specified, the field is hidden and auto-selected.")),React.createElement("tr",null,React.createElement("td",null,"show_flyer"),React.createElement("td",null,"Show the image/flyer upload field"),React.createElement("td",null,"false"),React.createElement("td",null,"true, false")))),React.createElement("h3",null,"Examples"),React.createElement("h4",null,"Basic Form"),React.createElement("pre",null,React.createElement("code",null,"[mayo_announcement_form]")),React.createElement("h4",null,"With Flyer Upload"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement_form show_flyer="true"]')),React.createElement("h4",null,"With Required Dates"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement_form additional_required_fields="start_date,end_date"]')),React.createElement("h4",null,"Restricted to Specific Service Bodies"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement_form default_service_bodies="1,2,5"]')),React.createElement("h4",null,"Single Service Body (Auto-Hidden)"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement_form default_service_bodies="3"]')),React.createElement("p",null,React.createElement("em",null,"When only one service body is specified, the field is hidden and automatically selected.")),React.createElement("h4",null,"Filter Categories and Tags"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement_form categories="announcements,alerts" tags="urgent,featured"]')),React.createElement("h4",null,"Full Configuration"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement_form show_flyer="true" additional_required_fields="start_date,end_date,flyer" default_service_bodies="1,2" categories="announcements"]')),React.createElement("h3",null,"Notes"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,"Categories, tags, and service bodies are filtered by subscription settings configured in ",React.createElement("strong",null,"Mayo → Settings → Subscription Preferences")),React.createElement("li",null,"Shortcode parameters further restrict the available options (intersection of both)"),React.createElement("li",null,"Contact name and email are private fields used for admin communication only"),React.createElement("li",null,'Submitted announcements are set to "pending" status and require admin approval'),React.createElement("li",null,"Admin receives email notification when new announcements are submitted"),React.createElement("li",null,"Start/end dates correspond to the announcement's display window"))),React.createElement("div",{className:"card",id:"subscribe"},React.createElement("h2",null,"Email Subscription Form Shortcode"),React.createElement("p",null,"Use this shortcode to display an email subscription form. Users can subscribe to receive announcement notifications via email:"),React.createElement("pre",null,React.createElement("code",null,"[mayo_subscribe]")),React.createElement("h3",null,"How It Works"),React.createElement("ol",{style:{marginLeft:"20px",lineHeight:"1.8"}},React.createElement("li",null,React.createElement("strong",null,"User enters email:")," A simple form with an email input field"),React.createElement("li",null,React.createElement("strong",null,"Confirmation email sent:")," User receives an email with a confirmation link (double opt-in)"),React.createElement("li",null,React.createElement("strong",null,"User confirms:")," Clicking the link activates their subscription"),React.createElement("li",null,React.createElement("strong",null,"Receive announcements:")," When announcements are published, subscribers get an email with the full content"),React.createElement("li",null,React.createElement("strong",null,"Easy unsubscribe:")," Each email includes a one-click unsubscribe link")),React.createElement("h3",null,"Features"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,React.createElement("strong",null,"Double opt-in:")," Confirmation email ensures valid addresses and prevents spam"),React.createElement("li",null,React.createElement("strong",null,"Full content delivery:")," Announcement emails include the complete content plus a link to view on site"),React.createElement("li",null,React.createElement("strong",null,"Token-based security:")," Unsubscribe links use cryptographically secure tokens (no login required)"),React.createElement("li",null,React.createElement("strong",null,"Spam folder reminder:")," Users are reminded to check spam/junk folders for the confirmation email"),React.createElement("li",null,React.createElement("strong",null,"Re-subscription support:")," Previously unsubscribed users can re-subscribe")),React.createElement("h3",null,"Example"),React.createElement("pre",null,React.createElement("code",null,"[mayo_subscribe]")),React.createElement("h3",null,"Email Flow"),React.createElement("h4",null,"Confirmation Email"),React.createElement("p",null,"Sent immediately when a user subscribes:"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,'Subject: "Please confirm your subscription to [Site Name] announcements"'),React.createElement("li",null,"Contains a unique confirmation link"),React.createElement("li",null,"Includes note about checking spam folder")),React.createElement("h4",null,"Announcement Email"),React.createElement("p",null,"Sent to all confirmed subscribers when an announcement is published:"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,'Subject: "[Site Name] [Announcement Title]"'),React.createElement("li",null,"Full announcement content in plain text"),React.createElement("li",null,"Link to view on site"),React.createElement("li",null,"One-click unsubscribe link")),React.createElement("h3",null,"Notes"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,"Emails are sent using WordPress's ",React.createElement("code",null,"wp_mail()")," function"),React.createElement("li",null,'The "From" address uses your WordPress email settings'),React.createElement("li",null,"Subscribers are stored in a custom database table (",React.createElement("code",null,"wp_mayo_subscribers"),")"),React.createElement("li",null,"Emails are only sent when announcements are first published (not on updates)"),React.createElement("li",null,"The preferences column is reserved for future filtering options"))))},n=wp.components;function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function l(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",c=n.toStringTag||"@@toStringTag";function o(n,a,l,c){var o=a&&a.prototype instanceof u?a:u,s=Object.create(o.prototype);return r(s,"_invoke",function(n,a,l){var r,c,o,u=0,s=l||[],m=!1,d={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,n){return r=t,c=0,o=e,d.n=n,i}};function p(n,a){for(c=n,o=a,t=0;!m&&u&&!l&&t<s.length;t++){var l,r=s[t],p=d.p,E=r[2];n>3?(l=E===a)&&(o=r[(c=r[4])?5:(c=3,3)],r[4]=r[5]=e):r[0]<=p&&((l=n<2&&p<r[1])?(c=0,d.v=a,d.n=r[1]):p<E&&(l=n<3||r[0]>a||a>E)&&(r[4]=n,r[5]=a,d.n=E,c=0))}if(l||n>1)return i;throw m=!0,a}return function(l,s,E){if(u>1)throw TypeError("Generator is already running");for(m&&1===s&&p(s,E),c=s,o=E;(t=c<2?e:o)||!m;){r||(c?c<3?(c>1&&(d.n=-1),p(c,o)):d.n=o:d.v=o);try{if(u=2,r){if(c||(l="next"),t=r[l]){if(!(t=t.call(r,o)))throw TypeError("iterator result is not an object");if(!t.done)return t;o=t.value,c<2&&(c=0)}else 1===c&&(t=r.return)&&t.call(r),c<2&&(o=TypeError("The iterator does not provide a '"+l+"' method"),c=1);r=e}else if((t=(m=d.n<0)?o:n.call(a,d))!==i)break}catch(t){r=e,c=1,o=t}finally{u=1}}return{value:t,done:m}}}(n,l,c),!0),s}var i={};function u(){}function s(){}function m(){}t=Object.getPrototypeOf;var d=[][a]?t(t([][a]())):(r(t={},a,function(){return this}),t),p=m.prototype=u.prototype=Object.create(d);function E(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,m):(e.__proto__=m,r(e,c,"GeneratorFunction")),e.prototype=Object.create(p),e}return s.prototype=m,r(p,"constructor",m),r(m,"constructor",s),s.displayName="GeneratorFunction",r(m,c,"GeneratorFunction"),r(p),r(p,c,"Generator"),r(p,a,function(){return this}),r(p,"toString",function(){return"[object Generator]"}),(l=function(){return{w:o,m:E}})()}function r(e,t,n,a){var l=Object.defineProperty;try{l({},"",{})}catch(e){l=0}r=function(e,t,n,a){function c(t,n){r(e,t,function(e){return this._invoke(t,n,e)})}t?l?l(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(c("next",0),c("throw",1),c("return",2))},r(e,t,n,a)}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?c(Object(n),!0).forEach(function(t){i(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):c(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function i(e,t,n){return(t=function(e){var t=function(e){if("object"!=a(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=a(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==a(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function u(e,t,n,a,l,r,c){try{var o=e[r](c),i=o.value}catch(e){return void n(e)}o.done?t(i):Promise.resolve(i).then(a,l)}var s=function(){var e,t=(e=l().m(function e(t){var n,a,r,c,i,u,s,m,d,p=arguments;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:return r=p.length>1&&void 0!==p[1]?p[1]:{},(c=(null===(n=window.mayoApiSettings)||void 0===n?void 0:n.root)||(null===(a=window.wpApiSettings)||void 0===a?void 0:a.root)||"/wp-json/").endsWith("/")||(c+="/"),i="".concat(c,"event-manager/v1").concat(t),u="",window.mayoApiSettings&&window.mayoApiSettings.nonce?u=window.mayoApiSettings.nonce:window.wpApiSettings&&window.wpApiSettings.nonce&&(u=window.wpApiSettings.nonce),s=o(o({},{credentials:"same-origin",headers:{"Content-Type":"application/json","X-WP-Nonce":u}}),r),e.p=1,e.n=2,fetch(i,s);case 2:if((m=e.v).ok){e.n=3;break}throw new Error("API error: ".concat(m.status," ").concat(m.statusText));case 3:return e.n=4,m.json();case 4:return e.a(2,e.v);case 5:throw e.p=5,d=e.v,console.error("API fetch error:",d),d;case 6:return e.a(2)}},e,null,[[1,5]])}),function(){var t=this,n=arguments;return new Promise(function(a,l){var r=e.apply(t,n);function c(e){u(r,a,l,c,o,"next",e)}function o(e){u(r,a,l,c,o,"throw",e)}c(void 0)})});return function(e){return t.apply(this,arguments)}}();function m(e){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},m(e)}function d(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",l=n.toStringTag||"@@toStringTag";function r(n,a,l,r){var i=a&&a.prototype instanceof o?a:o,u=Object.create(i.prototype);return p(u,"_invoke",function(n,a,l){var r,o,i,u=0,s=l||[],m=!1,d={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,n){return r=t,o=0,i=e,d.n=n,c}};function p(n,a){for(o=n,i=a,t=0;!m&&u&&!l&&t<s.length;t++){var l,r=s[t],p=d.p,E=r[2];n>3?(l=E===a)&&(i=r[(o=r[4])?5:(o=3,3)],r[4]=r[5]=e):r[0]<=p&&((l=n<2&&p<r[1])?(o=0,d.v=a,d.n=r[1]):p<E&&(l=n<3||r[0]>a||a>E)&&(r[4]=n,r[5]=a,d.n=E,o=0))}if(l||n>1)return c;throw m=!0,a}return function(l,s,E){if(u>1)throw TypeError("Generator is already running");for(m&&1===s&&p(s,E),o=s,i=E;(t=o<2?e:i)||!m;){r||(o?o<3?(o>1&&(d.n=-1),p(o,i)):d.n=i:d.v=i);try{if(u=2,r){if(o||(l="next"),t=r[l]){if(!(t=t.call(r,i)))throw TypeError("iterator result is not an object");if(!t.done)return t;i=t.value,o<2&&(o=0)}else 1===o&&(t=r.return)&&t.call(r),o<2&&(i=TypeError("The iterator does not provide a '"+l+"' method"),o=1);r=e}else if((t=(m=d.n<0)?i:n.call(a,d))!==c)break}catch(t){r=e,o=1,i=t}finally{u=1}}return{value:t,done:m}}}(n,l,r),!0),u}var c={};function o(){}function i(){}function u(){}t=Object.getPrototypeOf;var s=[][a]?t(t([][a]())):(p(t={},a,function(){return this}),t),m=u.prototype=o.prototype=Object.create(s);function E(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,u):(e.__proto__=u,p(e,l,"GeneratorFunction")),e.prototype=Object.create(m),e}return i.prototype=u,p(m,"constructor",u),p(u,"constructor",i),i.displayName="GeneratorFunction",p(u,l,"GeneratorFunction"),p(m),p(m,l,"Generator"),p(m,a,function(){return this}),p(m,"toString",function(){return"[object Generator]"}),(d=function(){return{w:r,m:E}})()}function p(e,t,n,a){var l=Object.defineProperty;try{l({},"",{})}catch(e){l=0}p=function(e,t,n,a){function r(t,n){p(e,t,function(e){return this._invoke(t,n,e)})}t?l?l(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(r("next",0),r("throw",1),r("return",2))},p(e,t,n,a)}function E(e,t,n,a,l,r,c){try{var o=e[r](c),i=o.value}catch(e){return void n(e)}o.done?t(i):Promise.resolve(i).then(a,l)}function f(e){return function(){var t=this,n=arguments;return new Promise(function(a,l){var r=e.apply(t,n);function c(e){E(r,a,l,c,o,"next",e)}function o(e){E(r,a,l,c,o,"throw",e)}c(void 0)})}}function R(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,l,r,c,o=[],i=!0,u=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(a=r.call(n)).done)&&(o.push(a.value),o.length!==t);i=!0);}catch(e){u=!0,l=e}finally{try{if(!i&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(u)throw l}}return o}}(e,t)||b(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?v(Object(n),!0).forEach(function(t){g(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):v(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function g(e,t,n){return(t=function(e){var t=function(e){if("object"!=m(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=m(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==m(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function h(e){return function(e){if(Array.isArray(e))return _(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||b(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function b(e,t){if(e){if("string"==typeof e)return _(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_(e,t):void 0}}function _(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var S=function(e){if(!e)return!1;try{return"https:"===new URL(e).protocol}catch(e){return!1}},w=function(e){return!e||e.split(/[,;]/).map(function(e){return e.trim()}).filter(function(e){return e}).every(function(e){return function(e){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)}(e)})};const x=function(){var t=R((0,e.useState)({bmlt_root_server:"",notification_email:"",default_service_bodies:""}),2),a=t[0],l=t[1],r=R((0,e.useState)(!0),2),c=r[0],o=r[1],i=R((0,e.useState)(!1),2),u=i[0],m=i[1],p=R((0,e.useState)(null),2),E=p[0],v=p[1],b=R((0,e.useState)(null),2),_=b[0],x=b[1],k=R((0,e.useState)([]),2),C=k[0],T=k[1],A=R((0,e.useState)(null),2),N=A[0],P=A[1],O=R((0,e.useState)(null),2),D=O[0],j=O[1],B=R((0,e.useState)(!1),2),M=B[0],L=B[1],I=R((0,e.useState)({subscription_categories:[],subscription_tags:[],subscription_service_bodies:[],subscription_new_option_behavior:"auto_include"}),2),F=I[0],z=I[1],G=R((0,e.useState)([]),2),U=G[0],W=G[1],H=R((0,e.useState)([]),2),Y=H[0],q=H[1],J=R((0,e.useState)([]),2),$=J[0],K=J[1];(0,e.useEffect)(function(){var e=function(){var e=f(d().m(function e(){var t,n,a,r,c,i,u,m,p,E;return d().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,o(!0),v(null),e.n=1,s("/settings");case 1:return t=e.v,l({bmlt_root_server:t.bmlt_root_server||"",notification_email:t.notification_email||"",default_service_bodies:t.default_service_bodies||""}),T(Array.isArray(t.external_sources)?t.external_sources:[]),z({subscription_categories:t.subscription_categories||[],subscription_tags:t.subscription_tags||[],subscription_service_bodies:t.subscription_service_bodies||[],subscription_new_option_behavior:t.subscription_new_option_behavior||"opt_in"}),e.p=2,e.n=3,fetch("/wp-json/wp/v2/categories?per_page=100");case 3:if(!(n=e.v).ok){e.n=5;break}return e.n=4,n.json();case 4:a=e.v,W(a.map(function(e){return{id:e.id,name:e.name}}));case 5:e.n=7;break;case 6:e.p=6,m=e.v,console.error("Failed to load categories:",m);case 7:return e.p=7,e.n=8,fetch("/wp-json/wp/v2/tags?per_page=100");case 8:if(!(r=e.v).ok){e.n=10;break}return e.n=9,r.json();case 9:c=e.v,q(c.map(function(e){return{id:e.id,name:e.name}}));case 10:e.n=12;break;case 11:e.p=11,p=e.v,console.error("Failed to load tags:",p);case 12:if(!t.bmlt_root_server){e.n=18;break}return e.p=13,e.n=14,fetch(t.bmlt_root_server+"/client_interface/json/?switcher=GetServiceBodies");case 14:if(!(i=e.v).ok){e.n=16;break}return e.n=15,i.json();case 15:u=e.v,K(u.map(function(e){return{id:e.id,name:e.name,parent_id:e.parent_id||"0"}}));case 16:e.n=18;break;case 17:e.p=17,E=e.v,console.error("Failed to load service bodies:",E);case 18:e.n=20;break;case 19:e.p=19,e.v,v("Failed to load settings. Please refresh the page and try again.");case 20:return e.p=20,o(!1),e.f(20);case 21:return e.a(2)}},e,null,[[13,17],[7,11],[2,6],[0,19,20,21]])}));return function(){return e.apply(this,arguments)}}();e()},[]);var V=function(e,t){l(function(n){return y(y({},n),{},g({},e,t))})},Z=function(){var e=f(d().m(function e(){var t,n,l,r;return d().w(function(e){for(;;)switch(e.p=e.n){case 0:if(e.p=0,m(!0),v(null),S(D.url)){e.n=1;break}throw new Error("External source URL must use HTTPS protocol.");case 1:return t=y(y({},D),{},{event_type:D.event_type||""}),n=h(C),null!==N?n[N]=t:M&&n.push(t),e.n=2,s("/settings",{method:"POST",body:JSON.stringify(y(y({},a),{},{external_sources:n}))});case 2:l=e.v,T(l.settings.external_sources),j(null),P(null),L(!1),x("External source saved successfully!"),setTimeout(function(){return x(null)},3e3),e.n=4;break;case 3:e.p=3,r=e.v,v(r.message||"Failed to save external source.");case 4:return e.p=4,m(!1),e.f(4);case 5:return e.a(2)}},e,null,[[0,3,4,5]])}));return function(){return e.apply(this,arguments)}}(),Q=function(){var e=f(d().m(function e(t){var n;return d().w(function(e){for(;;)switch(e.p=e.n){case 0:if(confirm("Are you sure you want to delete this external source?")){e.n=1;break}return e.a(2);case 1:return e.p=1,m(!0),n=C.filter(function(e,n){return n!==t}),e.n=2,s("/settings",{method:"POST",body:JSON.stringify(y(y({},a),{},{external_sources:n}))});case 2:T(n),j(null),P(null),L(!1),x("External source deleted successfully!"),setTimeout(function(){return x(null)},3e3),e.n=4;break;case 3:e.p=3,e.v,v("Failed to delete external source.");case 4:return e.p=4,m(!1),e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}));return function(t){return e.apply(this,arguments)}}(),X=function(e,t){z(function(n){var a=n[e]||[],l=a.includes(t);return y(y({},n),{},g({},e,l?a.filter(function(e){return e!==t}):[].concat(h(a),[t])))})},ee=function(){var e=f(d().m(function e(){var t;return d().w(function(e){for(;;)switch(e.p=e.n){case 0:if(e.p=0,m(!0),v(null),S(a.bmlt_root_server)){e.n=1;break}throw new Error("BMLT Root Server URL must use HTTPS protocol.");case 1:if(!a.notification_email||w(a.notification_email)){e.n=2;break}throw new Error("Please enter valid email addresses for notifications. Multiple emails can be separated by commas or semicolons.");case 2:return e.n=3,s("/settings",{method:"POST",body:JSON.stringify({bmlt_root_server:a.bmlt_root_server,notification_email:a.notification_email,default_service_bodies:a.default_service_bodies,external_sources:C,subscription_categories:F.subscription_categories,subscription_tags:F.subscription_tags,subscription_service_bodies:F.subscription_service_bodies,subscription_new_option_behavior:F.subscription_new_option_behavior})});case 3:e.v,x("Settings saved successfully!"),setTimeout(function(){return x(null)},3e3),e.n=5;break;case 4:e.p=4,t=e.v,v(t.message||"Failed to save settings.");case 5:return e.p=5,m(!1),e.f(5);case 6:return e.a(2)}},e,null,[[0,4,5,6]])}));return function(){return e.apply(this,arguments)}}();return c?React.createElement("div",{className:"mayo-settings-loading"},React.createElement(n.Spinner,null)," Loading settings..."):React.createElement("div",{className:"mayo-settings-page"},React.createElement("h1",null,"Mayo Events Manager Settings"),React.createElement(n.Notice,{status:"warning",isDismissible:!1},React.createElement("p",null,React.createElement("strong",null,"Important:"),' This plugin requires Pretty Permalinks to be enabled for the REST API to function correctly. If you\'re experiencing 404 errors when accessing external source or settings BMLT server, please ensure your WordPress site is using Pretty Permalinks (Settings → Permalinks) and not the "Plain" setting.')),E&&React.createElement(n.Notice,{status:"error",isDismissible:!0,onRemove:function(){return v(null)}},E),_&&React.createElement(n.Notice,{status:"success",isDismissible:!0,onRemove:function(){return x(null)}},_),React.createElement(n.Panel,null,React.createElement(n.PanelBody,{title:"BMLT Settings",initialOpen:!0},React.createElement(n.PanelRow,null,React.createElement(n.TextControl,{label:"BMLT Root Server URL",value:a.bmlt_root_server,onChange:function(e){return V("bmlt_root_server",e)},help:a.bmlt_root_server&&!S(a.bmlt_root_server)?"URL must start with 'https://'":"Enter the URL of your BMLT root server (e.g., https://bmlt.example.org/main_server)",className:a.bmlt_root_server&&!S(a.bmlt_root_server)?"mayo-invalid-url":"",__next40pxDefaultSize:!0})),React.createElement(n.PanelRow,null,React.createElement(n.TextControl,{label:"Notification Email",value:a.notification_email,onChange:function(e){return V("notification_email",e)},help:a.notification_email&&!w(a.notification_email)?"Please enter valid email addresses. Multiple emails can be separated by commas or semicolons.":"Email addresses to receive event submission notifications. Multiple emails can be separated by commas or semicolons. Leave empty to send to all admins.",className:a.notification_email&&!w(a.notification_email)?"mayo-invalid-email":"",__next40pxDefaultSize:!0}))),React.createElement(n.PanelBody,{title:"Service Body Configuration",initialOpen:!0},React.createElement(n.PanelRow,null,React.createElement(n.TextControl,{label:"Restricted Service Bodies",value:a.default_service_bodies,onChange:function(e){return V("default_service_bodies",e)},help:"Comma-separated list of service body IDs (e.g., 1,2,3). When specified, only these service bodies will be available for event submission. Leave empty to allow all service bodies. Use '0' for Unaffiliated. Perfect for multi-site setups where each site should only show specific service bodies.",placeholder:"e.g., 1,2,3,0",__next40pxDefaultSize:!0})),React.createElement(n.PanelRow,null,React.createElement(n.Button,{isPrimary:!0,onClick:ee,isBusy:u,disabled:u||a.bmlt_root_server&&!S(a.bmlt_root_server)||a.notification_email&&!w(a.notification_email)},u?"Saving...":"Save Settings")))),React.createElement(n.Panel,null,React.createElement(n.PanelBody,{title:"External Event Sources",initialOpen:!0},React.createElement("div",{className:"mayo-external-sources-list"},C.map(function(e,t){return React.createElement("div",{key:e.id,className:"mayo-external-source-item"},React.createElement("div",{className:"mayo-external-source-info"},React.createElement("strong",null,e.name||e.url),React.createElement("div",{className:"mayo-external-source-details"},React.createElement("span",{className:"mayo-source-id"},"ID: ",e.id),e.event_type&&React.createElement("span",null,"Type: ",e.event_type),e.service_body&&React.createElement("span",null,"Service Body: ",e.service_body),React.createElement("span",{className:"mayo-source-status ".concat(e.enabled?"enabled":"disabled")},e.enabled?"Enabled":"Disabled"))),React.createElement("div",{className:"mayo-external-source-actions"},React.createElement(n.Button,{isSecondary:!0,onClick:function(){return function(e,t){j(e),P(t)}(e,t)}},"Edit"),React.createElement(n.Button,{isDestructive:!0,onClick:function(){return Q(t)}},"Delete")))})),React.createElement("div",{className:"mayo-external-sources-actions"},React.createElement(n.Button,{isPrimary:!0,onClick:function(){j({id:"",name:"",url:"",event_type:"",service_body:"",categories:"",tags:"",enabled:!0}),L(!0)},className:"mayo-add-source-button",disabled:M||null!==N},"Add New External Source")),(M||null!==N)&&D&&React.createElement("div",{className:"mayo-external-source-form"},React.createElement(n.TextControl,{label:"Site URL",value:D.url,onChange:function(e){return j(y(y({},D),{},{url:e}))},help:"Enter the URL of the WordPress site (e.g., https://example.com)",__next40pxDefaultSize:!0}),React.createElement(n.TextControl,{label:"Source Name",value:D.name,onChange:function(e){return j(y(y({},D),{},{name:e}))},help:"Enter a friendly name for this source (e.g., District 5 Website)",__next40pxDefaultSize:!0}),React.createElement(n.SelectControl,{label:"Event Type",value:D.event_type||"",options:[{label:"Select an event type",value:""},{label:"Activity",value:"Activity"},{label:"Service",value:"Service"}],onChange:function(e){j(y(y({},D),{},{event_type:e}))},help:"Select the event type",__next40pxDefaultSize:!0}),React.createElement(n.TextControl,{label:"Service Body",value:D.service_body,onChange:function(e){return j(y(y({},D),{},{service_body:e}))},help:"Filter by service body (optional)",__next40pxDefaultSize:!0}),React.createElement(n.TextControl,{label:"Categories",value:D.categories,onChange:function(e){return j(y(y({},D),{},{categories:e}))},help:"Filter by categories (comma-separated)",__next40pxDefaultSize:!0}),React.createElement(n.TextControl,{label:"Tags",value:D.tags,onChange:function(e){return j(y(y({},D),{},{tags:e}))},help:"Filter by tags (comma-separated)",__next40pxDefaultSize:!0}),React.createElement(n.ToggleControl,{label:"Enable Source",checked:D.enabled,onChange:function(e){return j(y(y({},D),{},{enabled:e}))}}),React.createElement("div",{className:"mayo-form-actions"},React.createElement(n.Button,{isPrimary:!0,onClick:Z,isBusy:u},u?"Saving...":"Save Source"),React.createElement(n.Button,{isSecondary:!0,onClick:function(){j(null),P(null),L(!1)}},"Cancel"))))),React.createElement(n.Panel,null,React.createElement(n.PanelBody,{title:"Subscription Preferences",initialOpen:!0},React.createElement("p",{className:"mayo-settings-description"},"Configure which categories, tags, and service bodies are available for subscribers to choose from when signing up for announcement notifications."),U.length>0&&React.createElement("div",{className:"mayo-subscription-section"},React.createElement("h4",null,"Categories available for subscription:"),React.createElement("div",{className:"mayo-checkbox-list",style:{border:"1px solid #ddd",borderRadius:"4px",background:"#fff",padding:"12px 16px",maxHeight:"300px",overflowY:"auto"}},U.map(function(e){return React.createElement(n.CheckboxControl,{key:e.id,label:e.name,checked:F.subscription_categories.includes(e.id),onChange:function(){return X("subscription_categories",e.id)}})}))),Y.length>0&&React.createElement("div",{className:"mayo-subscription-section"},React.createElement("h4",null,"Tags available for subscription:"),React.createElement("div",{className:"mayo-checkbox-list",style:{border:"1px solid #ddd",borderRadius:"4px",background:"#fff",padding:"12px 16px",maxHeight:"300px",overflowY:"auto"}},Y.map(function(e){return React.createElement(n.CheckboxControl,{key:e.id,label:e.name,checked:F.subscription_tags.includes(e.id),onChange:function(){return X("subscription_tags",e.id)}})}))),$.length>0&&React.createElement("div",{className:"mayo-subscription-section"},React.createElement("h4",null,"Service Bodies available for subscription:"),React.createElement("div",{className:"mayo-service-body-tree"},function(e){var t=h(e).sort(function(e,t){return e.name.localeCompare(t.name)}),n={},a=[];t.forEach(function(e){n[e.id]=[]}),t.forEach(function(e){var t=String(e.parent_id);"0"!==t&&n[t]?n[t].push(e):a.push(e)});var l=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,a=[];return e.forEach(function(e){var r;a.push(y(y({},e),{},{depth:t})),(null===(r=n[e.id])||void 0===r?void 0:r.length)>0&&(a=a.concat(l(n[e.id],t+1)))}),a};return l(a)}($).map(function(e){return React.createElement("div",{key:e.id,className:"mayo-tree-item",style:{paddingLeft:"".concat(24*e.depth,"px")}},React.createElement(n.CheckboxControl,{label:"".concat(e.name," (").concat(e.id,")"),checked:F.subscription_service_bodies.includes(e.id),onChange:function(){return X("subscription_service_bodies",e.id)}}))}))),React.createElement("div",{className:"mayo-subscription-section"},React.createElement("h4",null,"When new options are added:"),React.createElement(n.RadioControl,{selected:F.subscription_new_option_behavior,options:[{label:"Auto-include: Automatically add to existing subscribers",value:"auto_include"},{label:"Opt-in: Existing subscribers must manually add new options",value:"opt_in"}],onChange:function(e){return function(e,t){z(function(e){return y(y({},e),{},g({},"subscription_new_option_behavior",t))})}(0,e)}})),React.createElement(n.PanelRow,null,React.createElement(n.Button,{isPrimary:!0,onClick:ee,isBusy:u,disabled:u||a.bmlt_root_server&&!S(a.bmlt_root_server)||a.notification_email&&!w(a.notification_email)},u?"Saving...":"Save Settings")))))};function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}const C=function(){var t,n,a=(t=(0,e.useState)((new Date).toLocaleString()),n=1,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,l,r,c,o=[],i=!0,u=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(a=r.call(n)).done)&&(o.push(a.value),o.length!==t);i=!0);}catch(e){u=!0,l=e}finally{try{if(!i&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(u)throw l}}return o}}(t,n)||function(e,t){if(e){if("string"==typeof e)return k(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?k(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];return React.createElement("div",{className:"wrap mayo-docs"},React.createElement("h1",null,"CSS Classes Documentation"),React.createElement("div",{className:"card"},React.createElement("div",{className:"mayo-docs-header"},React.createElement("h2",null,"Dynamic CSS Classes"),React.createElement("div",{className:"mayo-docs-meta"},React.createElement("span",{className:"mayo-docs-last-updated"},"Last updated: ",a))),React.createElement("div",{className:"notice notice-warning"},React.createElement("p",null,React.createElement("strong",null,"Important:"),' This plugin does not include a built-in CSS editor. To style the event cards, you need to use another plugin like "Simple Custom CSS" or add CSS to your theme\'s stylesheet.')),React.createElement("p",null,"This documentation explains the dynamic CSS classes used in the Event Card and Calendar View components. These classes are generated based on event properties and can be used to style specific events."),React.createElement("div",{className:"mayo-tab-content"},React.createElement("h3",null,"Dynamic Classes"),React.createElement("p",null,"These classes are dynamically generated based on event properties:"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Class Pattern"),React.createElement("th",null,"Based On"),React.createElement("th",null,"Example"))),React.createElement("tbody",null,[{pattern:"mayo-event-category-{category-slug}",baseName:"mayo-event-category",description:"Class for event categories"},{pattern:"mayo-event-tag-{tag-slug}",baseName:"mayo-event-tag",description:"Class for event tags"},{pattern:"mayo-event-type-{event-type-slug}",baseName:"mayo-event-type",description:"Class for event types"},{pattern:"mayo-event-service-body-{service-body-slug}",baseName:"mayo-event-service-body",description:"Class for service bodies"}].map(function(e,t){var n="",a="";return e.baseName.includes("category")?(n="Event categories",a="mayo-event-category-meetings"):e.baseName.includes("tag")?(n="Event tags",a="mayo-event-tag-featured"):e.baseName.includes("type")?(n="Event type",a="mayo-event-type-service"):e.baseName.includes("service-body")&&(n="Service body",a="mayo-event-service-body-district-1"),React.createElement("tr",{key:t},React.createElement("td",null,React.createElement("code",null,e.pattern)),React.createElement("td",null,n),React.createElement("td",null,React.createElement("code",null,a)))}))),React.createElement("h4",null,"Special Characters Handling"),React.createElement("p",null,"Special characters and emojis in category, tag, event type, and service body names are converted to Unicode codes to ensure valid CSS class names:"),React.createElement("pre",null,React.createElement("code",null,'// Example: "Meeting 🎉" becomes "mayo-event-category-meeting-u127881"')),React.createElement("h4",null,"Small Variants"),React.createElement("p",null,"Categories and tags in the event brief section use small variants:"),React.createElement("ul",null,React.createElement("li",null,React.createElement("code",null,"mayo-event-category-small")),React.createElement("li",null,React.createElement("code",null,"mayo-event-tag-small"))),React.createElement("h4",null,"How to Add Custom CSS"),React.createElement("p",null,"To style the event cards, you need to add CSS to your theme or use a custom CSS plugin. Here are some recommended plugins:"),React.createElement("ul",null,React.createElement("li",null,React.createElement("a",{href:"https://wordpress.org/plugins/simple-custom-css/",target:"_blank",rel:"noopener noreferrer"},"Simple Custom CSS")),React.createElement("li",null,React.createElement("a",{href:"https://wordpress.org/plugins/custom-css-js/",target:"_blank",rel:"noopener noreferrer"},"Custom CSS and JS")),React.createElement("li",null,React.createElement("a",{href:"https://wordpress.org/plugins/advanced-custom-css/",target:"_blank",rel:"noopener noreferrer"},"Advanced Custom CSS"))),React.createElement("h4",null,"List View vs Calendar View Styling"),React.createElement("p",null,"The same dynamic classes are applied to both list view and calendar view events. This means your existing styles will automatically work in both views:"),React.createElement("pre",null,React.createElement("code",null,"\n/* This styles events in BOTH list and calendar views */\n.mayo-event-category-meetings {\n border-left: 4px solid #4a90e2;\n}\n ")),React.createElement("p",null,"If you want ",React.createElement("strong",null,"different")," styling for each view, use the base element class as a prefix:"),React.createElement("ul",null,React.createElement("li",null,React.createElement("code",null,".mayo-event-card")," - List view event cards"),React.createElement("li",null,React.createElement("code",null,".mayo-calendar-event")," - Calendar view event pills")),React.createElement("pre",null,React.createElement("code",null,"\n/* List view only */\n.mayo-event-card.mayo-event-category-meetings {\n border-left: 4px solid #4a90e2;\n}\n\n/* Calendar view only */\n.mayo-calendar-event.mayo-event-category-meetings {\n background-color: #e3f2fd;\n border-left: 3px solid #1976d2;\n}\n ")),React.createElement("h4",null,"Customization Example"),React.createElement("p",null,"Once you have a CSS editor, you can add rules like these:"),React.createElement("pre",null,React.createElement("code",null,'\n/* Style events with the "meetings" category (both views) */\n.mayo-event-category-meetings {\n border-left: 4px solid #4a90e2;\n}\n\n/* Style events with the "workshops" category (both views) */\n.mayo-event-category-workshops {\n border-left: 4px solid #e2844a;\n}\n\n/* Style service events (both views) */\n.mayo-event-type-service {\n background-color: #f0f7ff;\n}\n\n/* Style events from a specific service body (both views) */\n.mayo-event-service-body-district-1 {\n border-top: 2px solid #4a90e2;\n}\n\n/* Calendar view only: different background for activity events */\n.mayo-calendar-event.mayo-event-type-activity {\n background-color: #fff3e0;\n}\n ')))))},T=function(){var e=window.location.origin;return React.createElement("div",{className:"wrap mayo-docs"},React.createElement("h1",null,"API Documentation"),React.createElement("div",{className:"card"},React.createElement("h2",null,"Overview"),React.createElement("p",null,"The Mayo Events Manager provides a REST API for programmatic access to events and announcements. All endpoints use the namespace ",React.createElement("code",null,"event-manager/v1"),"."),React.createElement("p",null,React.createElement("strong",null,"Base URL:")," ",React.createElement("code",null,e,"/wp-json/event-manager/v1"))),React.createElement("div",{className:"card"},React.createElement("h2",null,"Table of Contents"),React.createElement("h3",null,"Event Endpoints"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,React.createElement("a",{href:"#get-events"},"GET /events")," - List events with filtering"),React.createElement("li",null,React.createElement("a",{href:"#get-event-slug"},"GET /event/","{slug}")," - Get event by slug"),React.createElement("li",null,React.createElement("a",{href:"#get-event-id"},"GET /events/","{id}")," - Get event by ID"),React.createElement("li",null,React.createElement("a",{href:"#search-events"},"GET /events/search")," - Search events"),React.createElement("li",null,React.createElement("a",{href:"#post-submit-event"},"POST /submit-event")," - Submit a new event")),React.createElement("h3",null,"Announcement Endpoints"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,React.createElement("a",{href:"#get-announcements"},"GET /announcements")," - List announcements"),React.createElement("li",null,React.createElement("a",{href:"#get-announcement-id"},"GET /announcement/","{id}")," - Get announcement by ID")),React.createElement("h3",null,"Settings Endpoints"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,React.createElement("a",{href:"#get-settings"},"GET /settings")," - Get plugin settings"),React.createElement("li",null,React.createElement("a",{href:"#post-settings"},"POST /settings")," - Update plugin settings")),React.createElement("h3",null,"Reference"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,React.createElement("a",{href:"#event-meta-fields"},"Event Meta Fields")),React.createElement("li",null,React.createElement("a",{href:"#announcement-response"},"Announcement Response Object")),React.createElement("li",null,React.createElement("a",{href:"#wordpress-rest-api"},"WordPress REST API")),React.createElement("li",null,React.createElement("a",{href:"#usage-examples"},"Usage Examples")))),React.createElement("div",{className:"card",id:"get-events"},React.createElement("h2",null,"GET /events"),React.createElement("p",null,"Retrieve a list of events with optional filtering and pagination."),React.createElement("h3",null,"Endpoint"),React.createElement("pre",null,React.createElement("code",null,"GET ",e,"/wp-json/event-manager/v1/events")),React.createElement("h3",null,"Query Parameters"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Parameter"),React.createElement("th",null,"Type"),React.createElement("th",null,"Default"),React.createElement("th",null,"Description"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"page")),React.createElement("td",null,"integer"),React.createElement("td",null,"1"),React.createElement("td",null,"Page number for pagination")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"per_page")),React.createElement("td",null,"integer"),React.createElement("td",null,"10"),React.createElement("td",null,"Number of events per page")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"status")),React.createElement("td",null,"string"),React.createElement("td",null,"publish"),React.createElement("td",null,"Post status filter (",React.createElement("code",null,"publish"),", ",React.createElement("code",null,"pending"),")")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"event_type")),React.createElement("td",null,"string"),React.createElement("td",null,"empty"),React.createElement("td",null,"Filter by event type (e.g., ",React.createElement("code",null,"Service"),", ",React.createElement("code",null,"Activity"),")")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"service_body")),React.createElement("td",null,"string"),React.createElement("td",null,"empty"),React.createElement("td",null,"Comma-separated service body IDs (e.g., ",React.createElement("code",null,"1,2,3"),")")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"categories")),React.createElement("td",null,"string"),React.createElement("td",null,"empty"),React.createElement("td",null,"Comma-separated category slugs. Prefix with ",React.createElement("code",null,"-")," to exclude (e.g., ",React.createElement("code",null,"meetings,-cancelled"),")")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"tags")),React.createElement("td",null,"string"),React.createElement("td",null,"empty"),React.createElement("td",null,"Comma-separated tag slugs. Prefix with ",React.createElement("code",null,"-")," to exclude")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"archive")),React.createElement("td",null,"boolean"),React.createElement("td",null,"false"),React.createElement("td",null,"When ",React.createElement("code",null,"true"),", returns only past events")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"order")),React.createElement("td",null,"string"),React.createElement("td",null,"ASC"),React.createElement("td",null,"Sort order: ",React.createElement("code",null,"ASC")," (earliest first) or ",React.createElement("code",null,"DESC")," (latest first)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"timezone")),React.createElement("td",null,"string"),React.createElement("td",null,"Server timezone"),React.createElement("td",null,"IANA timezone for date filtering (e.g., ",React.createElement("code",null,"America/New_York"),")")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"start_date")),React.createElement("td",null,"string"),React.createElement("td",null,"empty"),React.createElement("td",null,"Filter events starting from this date (YYYY-MM-DD format)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"end_date")),React.createElement("td",null,"string"),React.createElement("td",null,"empty"),React.createElement("td",null,"Filter events ending before this date (YYYY-MM-DD format)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"source_ids")),React.createElement("td",null,"string"),React.createElement("td",null,"empty"),React.createElement("td",null,"Comma-separated source IDs. Use ",React.createElement("code",null,"local")," for local events, or external source IDs")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"relation")),React.createElement("td",null,"string"),React.createElement("td",null,"AND"),React.createElement("td",null,"Relation between meta query conditions (",React.createElement("code",null,"AND")," or ",React.createElement("code",null,"OR"),")")))),React.createElement("h3",null,"Example Request"),React.createElement("pre",null,React.createElement("code",null,"GET ".concat(e,"/wp-json/event-manager/v1/events?per_page=5&categories=meetings&order=ASC"))),React.createElement("h3",null,"Example Response"),React.createElement("pre",null,React.createElement("code",null,'{\n "events": [\n {\n "id": 123,\n "title": {\n "rendered": "Monthly Meeting"\n },\n "content": {\n "rendered": "<p>Event description...</p>"\n },\n "link": "'.concat(e,'/mayo/monthly-meeting/",\n "meta": {\n "event_start_date": "2024-03-15",\n "event_end_date": "2024-03-15",\n "event_start_time": "19:00:00",\n "event_end_time": "21:00:00",\n "timezone": "America/New_York",\n "event_type": "Service",\n "service_body": "1",\n "location_name": "Community Center",\n "location_address": "123 Main St",\n "location_details": "Room 101"\n },\n "featured_image": "').concat(e,'/wp-content/uploads/2024/03/flyer.jpg",\n "categories": [\n {\n "id": 5,\n "name": "Meetings",\n "slug": "meetings",\n "link": "').concat(e,'/category/meetings/"\n }\n ],\n "tags": [],\n "source": {\n "id": "local",\n "name": "Local Events",\n "url": "').concat(e,'"\n }\n }\n ],\n "pagination": {\n "total": 25,\n "per_page": 5,\n "current_page": 1,\n "total_pages": 5\n }\n}')))),React.createElement("div",{className:"card",id:"get-event-slug"},React.createElement("h2",null,"GET /event/","{slug}"),React.createElement("p",null,"Retrieve details for a single event by its slug."),React.createElement("h3",null,"Endpoint"),React.createElement("pre",null,React.createElement("code",null,"GET ",e,"/wp-json/event-manager/v1/event/","{slug}")),React.createElement("h3",null,"Path Parameters"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Parameter"),React.createElement("th",null,"Type"),React.createElement("th",null,"Description"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"slug")),React.createElement("td",null,"string"),React.createElement("td",null,"The event's URL slug")))),React.createElement("h3",null,"Example Request"),React.createElement("pre",null,React.createElement("code",null,"GET ".concat(e,"/wp-json/event-manager/v1/event/monthly-meeting"))),React.createElement("h3",null,"Response"),React.createElement("p",null,"Returns a single event object (same structure as events in the list response)."),React.createElement("h3",null,"Error Response"),React.createElement("pre",null,React.createElement("code",null,'{\n "code": "no_event",\n "message": "Event not found",\n "data": {\n "status": 404\n }\n}'))),React.createElement("div",{className:"card",id:"get-event-id"},React.createElement("h2",null,"GET /events/","{id}"),React.createElement("p",null,"Retrieve a single event by its post ID."),React.createElement("h3",null,"Endpoint"),React.createElement("pre",null,React.createElement("code",null,"GET ",e,"/wp-json/event-manager/v1/events/","{id}")),React.createElement("h3",null,"Path Parameters"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Parameter"),React.createElement("th",null,"Type"),React.createElement("th",null,"Description"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"id")),React.createElement("td",null,"integer"),React.createElement("td",null,"The event's post ID")))),React.createElement("h3",null,"Example Request"),React.createElement("pre",null,React.createElement("code",null,"GET ".concat(e,"/wp-json/event-manager/v1/events/123"))),React.createElement("h3",null,"Example Response"),React.createElement("pre",null,React.createElement("code",null,'{\n "id": 123,\n "title": "Monthly Meeting",\n "start_date": "2024-03-15",\n "end_date": "2024-03-15",\n "start_time": "19:00:00",\n "end_time": "21:00:00",\n "permalink": "'.concat(e,'/mayo/monthly-meeting/",\n "edit_link": "').concat(e,'/wp-admin/post.php?post=123&action=edit"\n}'))),React.createElement("h3",null,"Error Response"),React.createElement("pre",null,React.createElement("code",null,'{\n "code": "not_found",\n "message": "Event not found",\n "data": {\n "status": 404\n }\n}'))),React.createElement("div",{className:"card",id:"search-events"},React.createElement("h2",null,"GET /events/search"),React.createElement("p",null,"Search events by title. Useful for finding events to link to announcements."),React.createElement("h3",null,"Endpoint"),React.createElement("pre",null,React.createElement("code",null,"GET ",e,"/wp-json/event-manager/v1/events/search")),React.createElement("h3",null,"Query Parameters"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Parameter"),React.createElement("th",null,"Type"),React.createElement("th",null,"Default"),React.createElement("th",null,"Description"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"search")),React.createElement("td",null,"string"),React.createElement("td",null,"empty"),React.createElement("td",null,"Search term to match against event titles")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"limit")),React.createElement("td",null,"integer"),React.createElement("td",null,"20"),React.createElement("td",null,"Maximum number of results to return")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"include")),React.createElement("td",null,"string"),React.createElement("td",null,"empty"),React.createElement("td",null,"Comma-separated event IDs to fetch specific events")))),React.createElement("h3",null,"Example Request"),React.createElement("pre",null,React.createElement("code",null,"GET ".concat(e,"/wp-json/event-manager/v1/events/search?search=meeting&limit=10"))),React.createElement("h3",null,"Example Response"),React.createElement("pre",null,React.createElement("code",null,'{\n "events": [\n {\n "id": 123,\n "title": "Monthly Meeting",\n "start_date": "2024-03-15",\n "permalink": "'.concat(e,'/mayo/monthly-meeting/",\n "edit_link": "').concat(e,'/wp-admin/post.php?post=123&action=edit"\n },\n {\n "id": 456,\n "title": "Regional Meeting",\n "start_date": "2024-04-01",\n "permalink": "').concat(e,'/mayo/regional-meeting/",\n "edit_link": "').concat(e,'/wp-admin/post.php?post=456&action=edit"\n }\n ]\n}')))),React.createElement("div",{className:"card",id:"post-submit-event"},React.createElement("h2",null,"POST /submit-event"),React.createElement("p",null,"Submit a new event. Events are created with ",React.createElement("code",null,"pending")," status and require admin approval."),React.createElement("h3",null,"Endpoint"),React.createElement("pre",null,React.createElement("code",null,"POST ",e,"/wp-json/event-manager/v1/submit-event")),React.createElement("h3",null,"Authentication"),React.createElement("p",null,"This endpoint is publicly accessible (no authentication required)."),React.createElement("h3",null,"Request Body (multipart/form-data)"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Field"),React.createElement("th",null,"Type"),React.createElement("th",null,"Required"),React.createElement("th",null,"Description"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"event_name")),React.createElement("td",null,"string"),React.createElement("td",null,"Yes"),React.createElement("td",null,"Event title")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"event_type")),React.createElement("td",null,"string"),React.createElement("td",null,"Yes"),React.createElement("td",null,"Event type (e.g., ",React.createElement("code",null,"Service"),", ",React.createElement("code",null,"Activity"),")")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"service_body")),React.createElement("td",null,"string"),React.createElement("td",null,"Yes"),React.createElement("td",null,"Service body ID (use ",React.createElement("code",null,"0")," for Unaffiliated)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"email")),React.createElement("td",null,"string"),React.createElement("td",null,"Yes"),React.createElement("td",null,"Contact email address")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"contact_name")),React.createElement("td",null,"string"),React.createElement("td",null,"Yes"),React.createElement("td",null,"Contact person's name")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"event_start_date")),React.createElement("td",null,"string"),React.createElement("td",null,"Yes"),React.createElement("td",null,"Start date (YYYY-MM-DD format)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"event_end_date")),React.createElement("td",null,"string"),React.createElement("td",null,"Yes"),React.createElement("td",null,"End date (YYYY-MM-DD format)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"event_start_time")),React.createElement("td",null,"string"),React.createElement("td",null,"Yes"),React.createElement("td",null,"Start time (HH:MM:SS format)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"event_end_time")),React.createElement("td",null,"string"),React.createElement("td",null,"Yes"),React.createElement("td",null,"End time (HH:MM:SS format)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"timezone")),React.createElement("td",null,"string"),React.createElement("td",null,"Yes"),React.createElement("td",null,"IANA timezone (e.g., ",React.createElement("code",null,"America/New_York"),")")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"description")),React.createElement("td",null,"string"),React.createElement("td",null,"No"),React.createElement("td",null,"Event description (HTML allowed)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"location_name")),React.createElement("td",null,"string"),React.createElement("td",null,"No"),React.createElement("td",null,"Venue name")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"location_address")),React.createElement("td",null,"string"),React.createElement("td",null,"No"),React.createElement("td",null,"Street address")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"location_details")),React.createElement("td",null,"string"),React.createElement("td",null,"No"),React.createElement("td",null,"Additional location info (room number, etc.)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"categories")),React.createElement("td",null,"string"),React.createElement("td",null,"No"),React.createElement("td",null,"Comma-separated category IDs")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"tags")),React.createElement("td",null,"string"),React.createElement("td",null,"No"),React.createElement("td",null,"Comma-separated tag names or IDs")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"recurring_pattern")),React.createElement("td",null,"JSON string"),React.createElement("td",null,"No"),React.createElement("td",null,"Recurring event configuration (see below)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"flyer")),React.createElement("td",null,"file"),React.createElement("td",null,"No"),React.createElement("td",null,"Event flyer image (set as featured image)")))),React.createElement("h3",null,"Recurring Pattern Object"),React.createElement("pre",null,React.createElement("code",null,'{\n "type": "weekly", // "none", "daily", "weekly", "monthly"\n "interval": 1, // Repeat every N days/weeks/months\n "weekdays": [1, 3, 5], // For weekly: days of week (0=Sun, 6=Sat)\n "monthlyType": "date", // For monthly: "date" or "weekday"\n "monthlyDate": 15, // For monthly by date: day of month\n "monthlyWeekday": "2,4", // For monthly by weekday: "week,day" (e.g., "2,4" = 2nd Thursday)\n "endDate": "2024-12-31" // When recurring pattern ends\n}')),React.createElement("h3",null,"Example Response"),React.createElement("pre",null,React.createElement("code",null,'{\n "id": 456,\n "title": {\n "rendered": "New Community Event"\n },\n "content": {\n "rendered": "<p>Event description...</p>"\n },\n "link": "'.concat(e,'/mayo/new-community-event/",\n "meta": {\n "event_start_date": "2024-04-01",\n "event_end_date": "2024-04-01",\n "event_start_time": "14:00:00",\n "event_end_time": "16:00:00",\n "timezone": "America/Los_Angeles",\n "event_type": "Activity",\n "service_body": "5",\n "location_name": "Park Pavilion",\n "location_address": "456 Oak Ave",\n "location_details": ""\n },\n "categories": [],\n "tags": []\n}')))),React.createElement("div",{className:"card",id:"get-announcements"},React.createElement("h2",null,"GET /announcements"),React.createElement("p",null,"Retrieve a list of announcements with optional filtering. By default, only returns announcements within their active display window."),React.createElement("h3",null,"Endpoint"),React.createElement("pre",null,React.createElement("code",null,"GET ",e,"/wp-json/event-manager/v1/announcements")),React.createElement("h3",null,"Query Parameters"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Parameter"),React.createElement("th",null,"Type"),React.createElement("th",null,"Default"),React.createElement("th",null,"Description"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"priority")),React.createElement("td",null,"string"),React.createElement("td",null,"empty"),React.createElement("td",null,"Filter by priority level: ",React.createElement("code",null,"low"),", ",React.createElement("code",null,"normal"),", ",React.createElement("code",null,"high"),", ",React.createElement("code",null,"urgent"))),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"categories")),React.createElement("td",null,"string"),React.createElement("td",null,"empty"),React.createElement("td",null,"Comma-separated category slugs")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"tags")),React.createElement("td",null,"string"),React.createElement("td",null,"empty"),React.createElement("td",null,"Comma-separated tag slugs")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"linked_event")),React.createElement("td",null,"integer"),React.createElement("td",null,"empty"),React.createElement("td",null,"Filter by linked event ID")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"active")),React.createElement("td",null,"string"),React.createElement("td",null,"true"),React.createElement("td",null,"Set to ",React.createElement("code",null,"false")," to include announcements outside their display window")))),React.createElement("h3",null,"Example Request"),React.createElement("pre",null,React.createElement("code",null,"GET ".concat(e,"/wp-json/event-manager/v1/announcements?priority=urgent"))),React.createElement("h3",null,"Example Response"),React.createElement("pre",null,React.createElement("code",null,'{\n "announcements": [\n {\n "id": 789,\n "title": "Weather Closure Notice",\n "content": "<p>Due to severe weather...</p>",\n "excerpt": "Due to severe weather...",\n "link": "'.concat(e,'/announcement/weather-closure/",\n "display_start_date": "2024-03-14",\n "display_end_date": "2024-03-16",\n "priority": "urgent",\n "linked_events": [\n {\n "id": 123,\n "title": "Monthly Meeting",\n "permalink": "').concat(e,'/mayo/monthly-meeting/",\n "start_date": "2024-03-15"\n }\n ],\n "featured_image": null,\n "categories": [],\n "tags": []\n }\n ],\n "total": 1\n}')))),React.createElement("div",{className:"card",id:"get-announcement-id"},React.createElement("h2",null,"GET /announcement/","{id}"),React.createElement("p",null,"Retrieve a single announcement by its post ID."),React.createElement("h3",null,"Endpoint"),React.createElement("pre",null,React.createElement("code",null,"GET ",e,"/wp-json/event-manager/v1/announcement/","{id}")),React.createElement("h3",null,"Path Parameters"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Parameter"),React.createElement("th",null,"Type"),React.createElement("th",null,"Description"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"id")),React.createElement("td",null,"integer"),React.createElement("td",null,"The announcement's post ID")))),React.createElement("h3",null,"Example Request"),React.createElement("pre",null,React.createElement("code",null,"GET ".concat(e,"/wp-json/event-manager/v1/announcement/789"))),React.createElement("h3",null,"Response"),React.createElement("p",null,"Returns a single announcement object (same structure as announcements in the list response)."),React.createElement("h3",null,"Error Response"),React.createElement("pre",null,React.createElement("code",null,'{\n "code": "not_found",\n "message": "Announcement not found",\n "data": {\n "status": 404\n }\n}'))),React.createElement("div",{className:"card",id:"get-settings"},React.createElement("h2",null,"GET /settings"),React.createElement("p",null,"Retrieve plugin settings. This endpoint is publicly accessible for frontend configuration."),React.createElement("h3",null,"Endpoint"),React.createElement("pre",null,React.createElement("code",null,"GET ",e,"/wp-json/event-manager/v1/settings")),React.createElement("h3",null,"Example Response"),React.createElement("pre",null,React.createElement("code",null,'{\n "bmlt_root_server": "https://bmlt.example.org/main_server",\n "notification_email": "events@example.org",\n "default_service_bodies": "1,2,3",\n "external_sources": [\n {\n "id": "source_abc123",\n "url": "https://other-site.org",\n "name": "Other Site Events",\n "event_type": "",\n "service_body": "",\n "categories": "",\n "tags": "",\n "enabled": true\n }\n ]\n}'))),React.createElement("div",{className:"card",id:"post-settings"},React.createElement("h2",null,"POST /settings"),React.createElement("p",null,"Update plugin settings. ",React.createElement("strong",null,"Requires administrator authentication.")),React.createElement("h3",null,"Endpoint"),React.createElement("pre",null,React.createElement("code",null,"POST ",e,"/wp-json/event-manager/v1/settings")),React.createElement("h3",null,"Authentication"),React.createElement("p",null,"Requires a logged-in user with ",React.createElement("code",null,"manage_options")," capability (administrator)."),React.createElement("p",null,"Include the WordPress REST API nonce in your request:"),React.createElement("pre",null,React.createElement("code",null,"// Using wp-api-fetch (recommended)\nimport apiFetch from '@wordpress/api-fetch';\napiFetch({ path: '/event-manager/v1/settings', method: 'POST', data: {...} });\n\n// Using fetch with nonce\nfetch('".concat(e,"/wp-json/event-manager/v1/settings', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-WP-Nonce': wpApiSettings.nonce\n },\n body: JSON.stringify({...})\n});"))),React.createElement("h3",null,"Request Body (JSON)"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Field"),React.createElement("th",null,"Type"),React.createElement("th",null,"Description"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"bmlt_root_server")),React.createElement("td",null,"string"),React.createElement("td",null,"BMLT root server URL")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"notification_email")),React.createElement("td",null,"string"),React.createElement("td",null,"Email address(es) for event submission notifications")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"default_service_bodies")),React.createElement("td",null,"string"),React.createElement("td",null,"Comma-separated service body IDs to restrict submissions")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"external_sources")),React.createElement("td",null,"array"),React.createElement("td",null,"Array of external source configurations")))),React.createElement("h3",null,"Example Response"),React.createElement("pre",null,React.createElement("code",null,'{\n "success": true,\n "settings": {\n "bmlt_root_server": "https://bmlt.example.org/main_server",\n "notification_email": "events@example.org",\n "default_service_bodies": "1,2,3",\n "external_sources": []\n }\n}')),React.createElement("h3",null,"Error Response (Unauthorized)"),React.createElement("pre",null,React.createElement("code",null,'{\n "code": "rest_forbidden",\n "message": "Sorry, you are not allowed to update settings.",\n "data": {\n "status": 401\n }\n}'))),React.createElement("div",{className:"card",id:"event-meta-fields"},React.createElement("h2",null,"Event Meta Fields"),React.createElement("p",null,"Events use the following meta fields, which are exposed via the WordPress REST API for the ",React.createElement("code",null,"mayo_event")," post type:"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Meta Key"),React.createElement("th",null,"Type"),React.createElement("th",null,"Description"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"event_type")),React.createElement("td",null,"string"),React.createElement("td",null,"Event type (Service, Activity, etc.)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"service_body")),React.createElement("td",null,"string"),React.createElement("td",null,"Service body ID")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"event_start_date")),React.createElement("td",null,"string"),React.createElement("td",null,"Start date (YYYY-MM-DD)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"event_end_date")),React.createElement("td",null,"string"),React.createElement("td",null,"End date (YYYY-MM-DD)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"event_start_time")),React.createElement("td",null,"string"),React.createElement("td",null,"Start time (HH:MM:SS)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"event_end_time")),React.createElement("td",null,"string"),React.createElement("td",null,"End time (HH:MM:SS)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"timezone")),React.createElement("td",null,"string"),React.createElement("td",null,"IANA timezone identifier")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"location_name")),React.createElement("td",null,"string"),React.createElement("td",null,"Venue name")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"location_address")),React.createElement("td",null,"string"),React.createElement("td",null,"Street address")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"location_details")),React.createElement("td",null,"string"),React.createElement("td",null,"Additional location information")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"contact_name")),React.createElement("td",null,"string"),React.createElement("td",null,"Contact person's name")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"email")),React.createElement("td",null,"string"),React.createElement("td",null,"Contact email address")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"recurring_pattern")),React.createElement("td",null,"object"),React.createElement("td",null,"Recurring event configuration")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"skipped_occurrences")),React.createElement("td",null,"array"),React.createElement("td",null,"Array of skipped dates for recurring events"))))),React.createElement("div",{className:"card",id:"announcement-response"},React.createElement("h2",null,"Announcement Response Object"),React.createElement("p",null,"Announcements returned from the API include the following fields:"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Field"),React.createElement("th",null,"Type"),React.createElement("th",null,"Description"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"id")),React.createElement("td",null,"integer"),React.createElement("td",null,"The announcement's post ID")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"title")),React.createElement("td",null,"string"),React.createElement("td",null,"Announcement title")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"content")),React.createElement("td",null,"string"),React.createElement("td",null,"Full announcement content (HTML)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"excerpt")),React.createElement("td",null,"string"),React.createElement("td",null,"Short excerpt of the announcement")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"link")),React.createElement("td",null,"string"),React.createElement("td",null,"Permalink to the announcement")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"edit_link")),React.createElement("td",null,"string"),React.createElement("td",null,"Admin edit URL for the announcement")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"display_start_date")),React.createElement("td",null,"string"),React.createElement("td",null,"When the announcement starts showing (YYYY-MM-DD)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"display_end_date")),React.createElement("td",null,"string"),React.createElement("td",null,"When the announcement stops showing (YYYY-MM-DD)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"priority")),React.createElement("td",null,"string"),React.createElement("td",null,"Priority level: ",React.createElement("code",null,"low"),", ",React.createElement("code",null,"normal"),", ",React.createElement("code",null,"high"),", or ",React.createElement("code",null,"urgent"))),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"linked_events")),React.createElement("td",null,"array"),React.createElement("td",null,"Array of linked event objects with ",React.createElement("code",null,"id"),", ",React.createElement("code",null,"title"),", ",React.createElement("code",null,"permalink"),", ",React.createElement("code",null,"start_date"))),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"is_active")),React.createElement("td",null,"boolean"),React.createElement("td",null,"Whether the announcement is currently within its display window")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"featured_image")),React.createElement("td",null,"string|null"),React.createElement("td",null,"URL of the featured image, if set")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"categories")),React.createElement("td",null,"array"),React.createElement("td",null,"Array of category objects")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"tags")),React.createElement("td",null,"array"),React.createElement("td",null,"Array of tag objects"))))),React.createElement("div",{className:"card",id:"wordpress-rest-api"},React.createElement("h2",null,"WordPress REST API"),React.createElement("p",null,"Events are also accessible via the standard WordPress REST API at ",React.createElement("code",null,"/wp-json/wp/v2/mayo_event"),"."),React.createElement("h3",null,"Example"),React.createElement("pre",null,React.createElement("code",null,"GET ".concat(e,"/wp-json/wp/v2/mayo_event?per_page=10&status=publish"))),React.createElement("p",null,"This provides access to all standard WordPress post fields plus the registered meta fields above.")),React.createElement("div",{className:"card",id:"usage-examples"},React.createElement("h2",null,"Usage Examples"),React.createElement("h3",null,"JavaScript (Fetch API)"),React.createElement("pre",null,React.createElement("code",null,"// Get upcoming events\nfetch('".concat(e,"/wp-json/event-manager/v1/events?per_page=10')\n .then(response => response.json())\n .then(data => {\n console.log('Events:', data.events);\n console.log('Total:', data.pagination.total);\n });\n\n// Get events for a specific service body\nfetch('").concat(e,"/wp-json/event-manager/v1/events?service_body=1,2')\n .then(response => response.json())\n .then(data => console.log(data));\n\n// Get past events (archive)\nfetch('").concat(e,"/wp-json/event-manager/v1/events?archive=true&order=DESC')\n .then(response => response.json())\n .then(data => console.log(data));\n\n// Get active announcements\nfetch('").concat(e,"/wp-json/event-manager/v1/announcements')\n .then(response => response.json())\n .then(data => console.log(data.announcements));\n\n// Get urgent announcements only\nfetch('").concat(e,"/wp-json/event-manager/v1/announcements?priority=urgent')\n .then(response => response.json())\n .then(data => console.log(data));"))),React.createElement("h3",null,"PHP (WordPress)"),React.createElement("pre",null,React.createElement("code",null,"// Get events using wp_remote_get\n$response = wp_remote_get('".concat(e,"/wp-json/event-manager/v1/events?per_page=5');\n\nif (!is_wp_error($response)) {\n $body = wp_remote_retrieve_body($response);\n $data = json_decode($body, true);\n\n foreach ($data['events'] as $event) {\n echo $event['title']['rendered'] . '<br>';\n }\n}"))),React.createElement("h3",null,"cURL"),React.createElement("pre",null,React.createElement("code",null,'# Get events\ncurl "'.concat(e,'/wp-json/event-manager/v1/events?per_page=5"\n\n# Get a single event\ncurl "').concat(e,'/wp-json/event-manager/v1/event/monthly-meeting"\n\n# Get settings\ncurl "').concat(e,'/wp-json/event-manager/v1/settings"\n\n# Get announcements\ncurl "').concat(e,'/wp-json/event-manager/v1/announcements"\n\n# Get announcements for a specific event (use linked_event filter)\ncurl "').concat(e,'/wp-json/event-manager/v1/announcements?linked_event=123"')))))};function A(e){return A="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},A(e)}function N(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",l=n.toStringTag||"@@toStringTag";function r(n,a,l,r){var i=a&&a.prototype instanceof o?a:o,u=Object.create(i.prototype);return P(u,"_invoke",function(n,a,l){var r,o,i,u=0,s=l||[],m=!1,d={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,n){return r=t,o=0,i=e,d.n=n,c}};function p(n,a){for(o=n,i=a,t=0;!m&&u&&!l&&t<s.length;t++){var l,r=s[t],p=d.p,E=r[2];n>3?(l=E===a)&&(i=r[(o=r[4])?5:(o=3,3)],r[4]=r[5]=e):r[0]<=p&&((l=n<2&&p<r[1])?(o=0,d.v=a,d.n=r[1]):p<E&&(l=n<3||r[0]>a||a>E)&&(r[4]=n,r[5]=a,d.n=E,o=0))}if(l||n>1)return c;throw m=!0,a}return function(l,s,E){if(u>1)throw TypeError("Generator is already running");for(m&&1===s&&p(s,E),o=s,i=E;(t=o<2?e:i)||!m;){r||(o?o<3?(o>1&&(d.n=-1),p(o,i)):d.n=i:d.v=i);try{if(u=2,r){if(o||(l="next"),t=r[l]){if(!(t=t.call(r,i)))throw TypeError("iterator result is not an object");if(!t.done)return t;i=t.value,o<2&&(o=0)}else 1===o&&(t=r.return)&&t.call(r),o<2&&(i=TypeError("The iterator does not provide a '"+l+"' method"),o=1);r=e}else if((t=(m=d.n<0)?i:n.call(a,d))!==c)break}catch(t){r=e,o=1,i=t}finally{u=1}}return{value:t,done:m}}}(n,l,r),!0),u}var c={};function o(){}function i(){}function u(){}t=Object.getPrototypeOf;var s=[][a]?t(t([][a]())):(P(t={},a,function(){return this}),t),m=u.prototype=o.prototype=Object.create(s);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,u):(e.__proto__=u,P(e,l,"GeneratorFunction")),e.prototype=Object.create(m),e}return i.prototype=u,P(m,"constructor",u),P(u,"constructor",i),i.displayName="GeneratorFunction",P(u,l,"GeneratorFunction"),P(m),P(m,l,"Generator"),P(m,a,function(){return this}),P(m,"toString",function(){return"[object Generator]"}),(N=function(){return{w:r,m:d}})()}function P(e,t,n,a){var l=Object.defineProperty;try{l({},"",{})}catch(e){l=0}P=function(e,t,n,a){function r(t,n){P(e,t,function(e){return this._invoke(t,n,e)})}t?l?l(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(r("next",0),r("throw",1),r("return",2))},P(e,t,n,a)}function O(e,t,n,a,l,r,c){try{var o=e[r](c),i=o.value}catch(e){return void n(e)}o.done?t(i):Promise.resolve(i).then(a,l)}function D(e){return function(){var t=this,n=arguments;return new Promise(function(a,l){var r=e.apply(t,n);function c(e){O(r,a,l,c,o,"next",e)}function o(e){O(r,a,l,c,o,"throw",e)}c(void 0)})}}function j(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function B(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?j(Object(n),!0).forEach(function(t){M(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):j(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function M(e,t,n){return(t=function(e){var t=function(e){if("object"!=A(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=A(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==A(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function L(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,l,r,c,o=[],i=!0,u=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(a=r.call(n)).done)&&(o.push(a.value),o.length!==t);i=!0);}catch(e){u=!0,l=e}finally{try{if(!i&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(u)throw l}}return o}}(e,t)||I(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function I(e,t){if(e){if("string"==typeof e)return F(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?F(e,t):void 0}}function F(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var z=function(t){var a,l,r,c,o,i,u=t.subscriber,s=t.options,m=t.onSave,d=t.onClose,p=t.saving,E=L((0,e.useState)(u.status),2),f=E[0],R=E[1],v=L((0,e.useState)(function(){var e=u.preferences||{};return{categories:(e.categories||[]).map(function(e){return Number(e)}),tags:(e.tags||[]).map(function(e){return Number(e)}),service_bodies:(e.service_bodies||[]).map(function(e){return String(e)})}}),2),y=v[0],g=v[1],h=function(e,t,n){g(function(a){var l,r=a[e]||[];return B(B({},a),{},M({},e,n?[].concat(function(e){if(Array.isArray(e))return F(e)}(l=r)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(l)||I(l)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[t]):r.filter(function(e){return e!==t})))})};return React.createElement(n.Modal,{title:"Edit Subscriber: ".concat(u.email),onRequestClose:d,className:"mayo-subscriber-edit-modal"},React.createElement("div",{style:{minWidth:"400px"}},React.createElement(n.SelectControl,{label:"Status",value:f,options:[{label:"Active",value:"active"},{label:"Pending",value:"pending"},{label:"Unsubscribed",value:"unsubscribed"}],onChange:R}),React.createElement("div",{style:{marginTop:"16px"}},React.createElement("h4",{style:{marginBottom:"8px"}},"Subscription Preferences"),React.createElement("p",{className:"description",style:{marginBottom:"12px"}},"Select which categories, tags, and service bodies this subscriber should receive notifications for. If none are selected, they will receive all announcements."),(null==s||null===(a=s.categories)||void 0===a?void 0:a.length)>0&&React.createElement("div",{style:{marginBottom:"16px"}},React.createElement("strong",{style:{display:"block",marginBottom:"8px"}},"Categories"),s.categories.map(function(e){return React.createElement(n.CheckboxControl,{key:e.id,label:e.name,checked:(t=e.id,y.categories.some(function(e){return Number(e)===Number(t)})),onChange:function(t){return h("categories",Number(e.id),t)}});var t})),(null==s||null===(l=s.tags)||void 0===l?void 0:l.length)>0&&React.createElement("div",{style:{marginBottom:"16px"}},React.createElement("strong",{style:{display:"block",marginBottom:"8px"}},"Tags"),s.tags.map(function(e){return React.createElement(n.CheckboxControl,{key:e.id,label:e.name,checked:(t=e.id,y.tags.some(function(e){return Number(e)===Number(t)})),onChange:function(t){return h("tags",Number(e.id),t)}});var t})),(null==s||null===(r=s.service_bodies)||void 0===r?void 0:r.length)>0&&React.createElement("div",{style:{marginBottom:"16px"}},React.createElement("strong",{style:{display:"block",marginBottom:"8px"}},"Service Bodies"),s.service_bodies.map(function(e){return React.createElement(n.CheckboxControl,{key:e.id,label:e.name,checked:(t=e.id,y.service_bodies.some(function(e){return String(e)===String(t)})),onChange:function(t){return h("service_bodies",String(e.id),t)}});var t})),!(null!=s&&null!==(c=s.categories)&&void 0!==c&&c.length)&&!(null!=s&&null!==(o=s.tags)&&void 0!==o&&o.length)&&!(null!=s&&null!==(i=s.service_bodies)&&void 0!==i&&i.length)&&React.createElement("p",{style:{color:"#646970",fontStyle:"italic"}},"No subscription options configured. Configure them in the Settings page.")),React.createElement("div",{style:{marginTop:"20px",display:"flex",gap:"8px",justifyContent:"flex-end"}},React.createElement(n.Button,{isSecondary:!0,onClick:d,disabled:p},"Cancel"),React.createElement(n.Button,{isPrimary:!0,onClick:function(){m(u.id,{status:f,preferences:y})},disabled:p},p?"Saving...":"Save Changes"))))};const G=function(){var t=L((0,e.useState)([]),2),a=t[0],l=t[1],r=L((0,e.useState)(!0),2),c=r[0],o=r[1],i=L((0,e.useState)(null),2),u=i[0],m=i[1],d=L((0,e.useState)("all"),2),p=d[0],E=d[1],f=L((0,e.useState)(""),2),R=f[0],v=f[1],y=L((0,e.useState)(null),2),g=y[0],h=y[1],b=L((0,e.useState)(null),2),_=b[0],S=b[1],w=L((0,e.useState)(!1),2),x=w[0],k=w[1];(0,e.useEffect)(function(){var e=function(){var e=D(N().m(function e(){var t,n,a,r,c;return N().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,Promise.all([s("/subscribers"),s("/subscription-options")]);case 1:t=e.v,n=L(t,2),a=n[0],r=n[1],l(a),S(r),e.n=3;break;case 2:e.p=2,c=e.v,m(c.message||"Failed to load subscribers");case 3:return e.p=3,o(!1),e.f(3);case 4:return e.a(2)}},e,null,[[0,2,3,4]])}));return function(){return e.apply(this,arguments)}}();e()},[]);var C=function(){var e=D(N().m(function e(t,n){var a,r;return N().w(function(e){for(;;)switch(e.p=e.n){case 0:return k(!0),e.p=1,e.n=2,s("/subscribers/".concat(t),{method:"PUT",body:JSON.stringify(n)});case 2:return e.n=3,s("/subscribers");case 3:a=e.v,l(a),h(null),e.n=5;break;case 4:e.p=4,r=e.v,alert("Failed to update subscriber: "+(r.message||"Unknown error"));case 5:return e.p=5,k(!1),e.f(5);case 6:return e.a(2)}},e,null,[[1,4,5,6]])}));return function(t,n){return e.apply(this,arguments)}}(),T=function(){var e=D(N().m(function e(t,n){var r;return N().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t.preventDefault(),window.confirm('Are you sure you want to delete subscriber "'.concat(n.email,'"? This action cannot be undone.'))){e.n=1;break}return e.a(2);case 1:return e.p=1,e.n=2,s("/subscribers/".concat(n.id),{method:"DELETE"});case 2:l(a.filter(function(e){return e.id!==n.id})),e.n=4;break;case 3:e.p=3,r=e.v,alert("Failed to delete subscriber: "+(r.message||"Unknown error"));case 4:return e.a(2)}},e,null,[[1,3]])}));return function(t,n){return e.apply(this,arguments)}}(),A=(0,e.useMemo)(function(){return a.filter(function(e){return!("all"!==p&&e.status!==p||R&&!e.email.toLowerCase().includes(R.toLowerCase()))})},[a,p,R]),P=(0,e.useMemo)(function(){var e={all:a.length,active:0,pending:0,unsubscribed:0};return a.forEach(function(t){void 0!==e[t.status]&&e[t.status]++}),e},[a]),O=function(e){return e?new Date(e).toLocaleDateString("en-US",{year:"numeric",month:"2-digit",day:"2-digit"}):"—"},j={category:{display:"inline-block",padding:"3px 8px",fontSize:"11px",backgroundColor:"#e3f2fd",color:"#1565c0",borderRadius:"3px",marginRight:"4px",marginBottom:"4px"},tag:{display:"inline-block",padding:"3px 8px",fontSize:"11px",backgroundColor:"#fff3e0",color:"#e65100",borderRadius:"3px",marginRight:"4px",marginBottom:"4px"},serviceBody:{display:"inline-block",padding:"3px 8px",fontSize:"11px",backgroundColor:"#e8f5e9",color:"#2e7d32",borderRadius:"3px",marginRight:"4px",marginBottom:"4px"},all:{display:"inline-block",padding:"3px 8px",fontSize:"11px",backgroundColor:"#f0f0f0",color:"#666",borderRadius:"3px"}};return c?React.createElement("div",{className:"wrap"},React.createElement("h1",{className:"wp-heading-inline"},"Subscribers"),React.createElement("hr",{className:"wp-header-end"}),React.createElement("div",{style:{padding:"20px",textAlign:"center"}},React.createElement(n.Spinner,null))):u?React.createElement("div",{className:"wrap"},React.createElement("h1",{className:"wp-heading-inline"},"Subscribers"),React.createElement("hr",{className:"wp-header-end"}),React.createElement("div",{className:"notice notice-error"},React.createElement("p",null,u))):React.createElement("div",{className:"wrap"},React.createElement("h1",{className:"wp-heading-inline"},"Subscribers"),React.createElement("hr",{className:"wp-header-end"}),React.createElement("ul",{className:"subsubsub"},React.createElement("li",{className:"all"},React.createElement("a",{href:"#",className:"all"===p?"current":"",onClick:function(e){e.preventDefault(),E("all")}},"All ",React.createElement("span",{className:"count"},"(",P.all,")"))," |"),React.createElement("li",{className:"active"},React.createElement("a",{href:"#",className:"active"===p?"current":"",onClick:function(e){e.preventDefault(),E("active")}},"Active ",React.createElement("span",{className:"count"},"(",P.active,")"))," |"),React.createElement("li",{className:"pending"},React.createElement("a",{href:"#",className:"pending"===p?"current":"",onClick:function(e){e.preventDefault(),E("pending")}},"Pending ",React.createElement("span",{className:"count"},"(",P.pending,")"))," |"),React.createElement("li",{className:"unsubscribed"},React.createElement("a",{href:"#",className:"unsubscribed"===p?"current":"",onClick:function(e){e.preventDefault(),E("unsubscribed")}},"Unsubscribed ",React.createElement("span",{className:"count"},"(",P.unsubscribed,")")))),React.createElement("p",{className:"search-box"},React.createElement("label",{className:"screen-reader-text",htmlFor:"subscriber-search-input"},"Search Subscribers:"),React.createElement("input",{type:"search",id:"subscriber-search-input",value:R,onChange:function(e){return v(e.target.value)},placeholder:"Search by email..."})),React.createElement("div",{style:{clear:"both"}}),React.createElement("table",{className:"wp-list-table widefat fixed striped table-view-list"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",{scope:"col",className:"manage-column column-email column-primary"},"Email"),React.createElement("th",{scope:"col",className:"manage-column column-status"},"Status"),React.createElement("th",{scope:"col",className:"manage-column column-date"},"Subscribed"),React.createElement("th",{scope:"col",className:"manage-column column-date"},"Confirmed"),React.createElement("th",{scope:"col",className:"manage-column column-preferences"},"Preferences"))),React.createElement("tbody",{id:"the-list"},0===A.length?React.createElement("tr",{className:"no-items"},React.createElement("td",{className:"colspanchange",colSpan:"5"},"No subscribers found.")):A.map(function(t){var n,a,l,r,c,o,i;return React.createElement(e.Fragment,{key:t.id},React.createElement("tr",null,React.createElement("td",{className:"email column-email column-primary","data-colname":"Email"},React.createElement("strong",null,t.email),React.createElement("div",{className:"row-actions visible",style:{visibility:"visible"}},React.createElement("span",{className:"edit"},React.createElement("button",{type:"button",className:"button button-small button-primary",onClick:function(){return h(t)},style:{marginRight:"4px"}},"Edit")),React.createElement("span",{className:"delete"},React.createElement("button",{type:"button",className:"button button-small button-link-delete",onClick:function(e){return T(e,t)},style:{color:"#b32d2e"}},"Delete")))),React.createElement("td",{className:"status column-status","data-colname":"Status"},React.createElement("span",{className:"mayo-subscriber-status mayo-status-".concat(t.status)},t.status.charAt(0).toUpperCase()+t.status.slice(1))),React.createElement("td",{className:"date column-date","data-colname":"Subscribed"},O(t.created_at)),React.createElement("td",{className:"date column-date","data-colname":"Confirmed"},O(t.confirmed_at)),React.createElement("td",{className:"preferences column-preferences","data-colname":"Preferences"},React.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"2px"}},((r=t.preferences)?((null===(c=r.categories)||void 0===c?void 0:c.length)||0)+((null===(o=r.tags)||void 0===o?void 0:o.length)||0)+((null===(i=r.service_bodies)||void 0===i?void 0:i.length)||0):0)>0?React.createElement(React.Fragment,null,null===(n=t.preferences.categories)||void 0===n?void 0:n.map(function(e,n){var a;return React.createElement("span",{key:"cat-".concat(e),style:j.category},(null===(a=t.preferences_display)||void 0===a||null===(a=a.categories)||void 0===a?void 0:a[n])||function(e){var t,n=null==_||null===(t=_.categories)||void 0===t?void 0:t.find(function(t){return String(t.id)===String(e)});return(null==n?void 0:n.name)||"Category ".concat(e)}(e))}),null===(a=t.preferences.tags)||void 0===a?void 0:a.map(function(e,n){var a;return React.createElement("span",{key:"tag-".concat(e),style:j.tag},(null===(a=t.preferences_display)||void 0===a||null===(a=a.tags)||void 0===a?void 0:a[n])||function(e){var t,n=null==_||null===(t=_.tags)||void 0===t?void 0:t.find(function(t){return String(t.id)===String(e)});return(null==n?void 0:n.name)||"Tag ".concat(e)}(e))}),null===(l=t.preferences.service_bodies)||void 0===l?void 0:l.map(function(e,n){var a;return React.createElement("span",{key:"sb-".concat(e),style:j.serviceBody},(null===(a=t.preferences_display)||void 0===a||null===(a=a.service_bodies)||void 0===a?void 0:a[n])||function(e){var t,n=null==_||null===(t=_.service_bodies)||void 0===t?void 0:t.find(function(t){return String(t.id)===String(e)});return(null==n?void 0:n.name)||"Service Body ".concat(e)}(e))})):React.createElement("span",{style:j.all},"All announcements")))))})),React.createElement("tfoot",null,React.createElement("tr",null,React.createElement("th",{scope:"col",className:"manage-column column-email column-primary"},"Email"),React.createElement("th",{scope:"col",className:"manage-column column-status"},"Status"),React.createElement("th",{scope:"col",className:"manage-column column-date"},"Subscribed"),React.createElement("th",{scope:"col",className:"manage-column column-date"},"Confirmed"),React.createElement("th",{scope:"col",className:"manage-column column-preferences"},"Preferences")))),React.createElement("div",{className:"tablenav bottom"},React.createElement("div",{className:"tablenav-pages one-page"},React.createElement("span",{className:"displaying-num"},A.length," item",1!==A.length?"s":""))),g&&React.createElement(z,{subscriber:g,options:_,onSave:C,onClose:function(){return h(null)},saving:x}))},U=wp.plugins,W=React;function H(e){return H="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},H(e)}function Y(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function q(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Y(Object(n),!0).forEach(function(t){J(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Y(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function J(e,t,n){return(t=function(e){var t=function(e){if("object"!=H(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=H(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==H(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function $(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",l=n.toStringTag||"@@toStringTag";function r(n,a,l,r){var i=a&&a.prototype instanceof o?a:o,u=Object.create(i.prototype);return K(u,"_invoke",function(n,a,l){var r,o,i,u=0,s=l||[],m=!1,d={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,n){return r=t,o=0,i=e,d.n=n,c}};function p(n,a){for(o=n,i=a,t=0;!m&&u&&!l&&t<s.length;t++){var l,r=s[t],p=d.p,E=r[2];n>3?(l=E===a)&&(i=r[(o=r[4])?5:(o=3,3)],r[4]=r[5]=e):r[0]<=p&&((l=n<2&&p<r[1])?(o=0,d.v=a,d.n=r[1]):p<E&&(l=n<3||r[0]>a||a>E)&&(r[4]=n,r[5]=a,d.n=E,o=0))}if(l||n>1)return c;throw m=!0,a}return function(l,s,E){if(u>1)throw TypeError("Generator is already running");for(m&&1===s&&p(s,E),o=s,i=E;(t=o<2?e:i)||!m;){r||(o?o<3?(o>1&&(d.n=-1),p(o,i)):d.n=i:d.v=i);try{if(u=2,r){if(o||(l="next"),t=r[l]){if(!(t=t.call(r,i)))throw TypeError("iterator result is not an object");if(!t.done)return t;i=t.value,o<2&&(o=0)}else 1===o&&(t=r.return)&&t.call(r),o<2&&(i=TypeError("The iterator does not provide a '"+l+"' method"),o=1);r=e}else if((t=(m=d.n<0)?i:n.call(a,d))!==c)break}catch(t){r=e,o=1,i=t}finally{u=1}}return{value:t,done:m}}}(n,l,r),!0),u}var c={};function o(){}function i(){}function u(){}t=Object.getPrototypeOf;var s=[][a]?t(t([][a]())):(K(t={},a,function(){return this}),t),m=u.prototype=o.prototype=Object.create(s);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,u):(e.__proto__=u,K(e,l,"GeneratorFunction")),e.prototype=Object.create(m),e}return i.prototype=u,K(m,"constructor",u),K(u,"constructor",i),i.displayName="GeneratorFunction",K(u,l,"GeneratorFunction"),K(m),K(m,l,"Generator"),K(m,a,function(){return this}),K(m,"toString",function(){return"[object Generator]"}),($=function(){return{w:r,m:d}})()}function K(e,t,n,a){var l=Object.defineProperty;try{l({},"",{})}catch(e){l=0}K=function(e,t,n,a){function r(t,n){K(e,t,function(e){return this._invoke(t,n,e)})}t?l?l(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(r("next",0),r("throw",1),r("return",2))},K(e,t,n,a)}function V(e,t,n,a,l,r,c){try{var o=e[r](c),i=o.value}catch(e){return void n(e)}o.done?t(i):Promise.resolve(i).then(a,l)}function Z(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,l,r,c,o=[],i=!0,u=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(a=r.call(n)).done)&&(o.push(a.value),o.length!==t);i=!0);}catch(e){u=!0,l=e}finally{try{if(!i&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(u)throw l}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Q(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Q(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Q(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var X=(0,W.createContext)(),ee=function(){return(0,W.useContext)(X)},te=function(e){var t=e.children,n=Z((0,W.useState)([]),2),a=n[0],l=n[1],r=Z((0,W.useState)({}),2),c=r[0],o=r[1],i=Z((0,W.useState)(!0),2),u=i[0],m=i[1];return(0,W.useEffect)(function(){var e=function(){var e,t=(e=$().m(function e(){var t,n,a,r,c,o;return $().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,m(!0),e.n=1,s("/settings");case 1:if(t=e.v,n=t.bmlt_root_server){e.n=2;break}throw new Error("BMLT root server URL not set");case 2:return e.n=3,fetch("".concat(n,"/client_interface/json/?switcher=GetServiceBodies"));case 3:return a=e.v,e.n=4,a.json();case 4:r=e.v,c=r.sort(function(e,t){return e.name.localeCompare(t.name)}),l(c),e.n=6;break;case 5:e.p=5,o=e.v,console.error("Error fetching service bodies:",o),setError("Failed to load service bodies");case 6:return e.p=6,m(!1),e.f(6);case 7:return e.a(2)}},e,null,[[0,5,6,7]])}),function(){var t=this,n=arguments;return new Promise(function(a,l){var r=e.apply(t,n);function c(e){V(r,a,l,c,o,"next",e)}function o(e){V(r,a,l,c,o,"throw",e)}c(void 0)})});return function(){return t.apply(this,arguments)}}();e()},[]),React.createElement(X.Provider,{value:{serviceBodies:a,getServiceBodyName:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"local";if("local"===t){var n=a.find(function(t){return t.id===e});return(null==n?void 0:n.name)||"Out of Area"}if(c[t]){var l=c[t].find(function(t){return t.id===e});return(null==l?void 0:l.name)||"Out of Area"}return"Out of Area"},updateExternalServiceBodies:function(e,t){t&&Array.isArray(t)&&0!==t.length&&o(function(n){return q(q({},n),{},J({},e,t))})}}},u?React.createElement("div",null,"Loading..."):t)};const ne=wp.editor,ae=wp.data;wp.i18n;var le=[{label:"Eastern Time (US/Canada)",value:"America/New_York",region:"North America"},{label:"Central Time (US/Canada)",value:"America/Chicago",region:"North America"},{label:"Mountain Time (US/Canada)",value:"America/Denver",region:"North America"},{label:"Pacific Time (US/Canada)",value:"America/Los_Angeles",region:"North America"},{label:"Alaska Time (US)",value:"America/Anchorage",region:"North America"},{label:"Hawaii Time (US)",value:"Pacific/Honolulu",region:"North America"},{label:"Atlantic Time (Canada)",value:"America/Halifax",region:"North America"},{label:"Newfoundland Time (Canada)",value:"America/St_Johns",region:"North America"},{label:"Mexico City Time",value:"America/Mexico_City",region:"North America"},{label:"London (GMT/BST)",value:"Europe/London",region:"Europe"},{label:"Paris (CET/CEST)",value:"Europe/Paris",region:"Europe"},{label:"Berlin (CET/CEST)",value:"Europe/Berlin",region:"Europe"},{label:"Rome (CET/CEST)",value:"Europe/Rome",region:"Europe"},{label:"Madrid (CET/CEST)",value:"Europe/Madrid",region:"Europe"},{label:"Amsterdam (CET/CEST)",value:"Europe/Amsterdam",region:"Europe"},{label:"Brussels (CET/CEST)",value:"Europe/Brussels",region:"Europe"},{label:"Zurich (CET/CEST)",value:"Europe/Zurich",region:"Europe"},{label:"Vienna (CET/CEST)",value:"Europe/Vienna",region:"Europe"},{label:"Stockholm (CET/CEST)",value:"Europe/Stockholm",region:"Europe"},{label:"Oslo (CET/CEST)",value:"Europe/Oslo",region:"Europe"},{label:"Copenhagen (CET/CEST)",value:"Europe/Copenhagen",region:"Europe"},{label:"Helsinki (EET/EEST)",value:"Europe/Helsinki",region:"Europe"},{label:"Athens (EET/EEST)",value:"Europe/Athens",region:"Europe"},{label:"Istanbul (TRT)",value:"Europe/Istanbul",region:"Europe"},{label:"Moscow (MSK)",value:"Europe/Moscow",region:"Europe"},{label:"Dublin (GMT/IST)",value:"Europe/Dublin",region:"Europe"},{label:"Lisbon (WET/WEST)",value:"Europe/Lisbon",region:"Europe"},{label:"Tokyo (JST)",value:"Asia/Tokyo",region:"Asia"},{label:"Shanghai (CST)",value:"Asia/Shanghai",region:"Asia"},{label:"Hong Kong (HKT)",value:"Asia/Hong_Kong",region:"Asia"},{label:"Singapore (SGT)",value:"Asia/Singapore",region:"Asia"},{label:"Seoul (KST)",value:"Asia/Seoul",region:"Asia"},{label:"Bangkok (ICT)",value:"Asia/Bangkok",region:"Asia"},{label:"Manila (PHT)",value:"Asia/Manila",region:"Asia"},{label:"Jakarta (WIB)",value:"Asia/Jakarta",region:"Asia"},{label:"Mumbai (IST)",value:"Asia/Kolkata",region:"Asia"},{label:"Dubai (GST)",value:"Asia/Dubai",region:"Asia"},{label:"Riyadh (AST)",value:"Asia/Riyadh",region:"Asia"},{label:"Tel Aviv (IST)",value:"Asia/Jerusalem",region:"Asia"},{label:"Dhaka (BST)",value:"Asia/Dhaka",region:"Asia"},{label:"Karachi (PKT)",value:"Asia/Karachi",region:"Asia"},{label:"Tashkent (UZT)",value:"Asia/Tashkent",region:"Asia"},{label:"Sydney (AEST/AEDT)",value:"Australia/Sydney",region:"Australia & Oceania"},{label:"Melbourne (AEST/AEDT)",value:"Australia/Melbourne",region:"Australia & Oceania"},{label:"Brisbane (AEST)",value:"Australia/Brisbane",region:"Australia & Oceania"},{label:"Perth (AWST)",value:"Australia/Perth",region:"Australia & Oceania"},{label:"Adelaide (ACST/ACDT)",value:"Australia/Adelaide",region:"Australia & Oceania"},{label:"Darwin (ACST)",value:"Australia/Darwin",region:"Australia & Oceania"},{label:"Hobart (AEST/AEDT)",value:"Australia/Hobart",region:"Australia & Oceania"},{label:"Auckland (NZST/NZDT)",value:"Pacific/Auckland",region:"Australia & Oceania"},{label:"Wellington (NZST/NZDT)",value:"Pacific/Auckland",region:"Australia & Oceania"},{label:"Fiji (FJT)",value:"Pacific/Fiji",region:"Australia & Oceania"},{label:"Cairo (EET)",value:"Africa/Cairo",region:"Africa"},{label:"Cape Town (SAST)",value:"Africa/Johannesburg",region:"Africa"},{label:"Lagos (WAT)",value:"Africa/Lagos",region:"Africa"},{label:"Nairobi (EAT)",value:"Africa/Nairobi",region:"Africa"},{label:"Casablanca (WET)",value:"Africa/Casablanca",region:"Africa"},{label:"Tunis (CET)",value:"Africa/Tunis",region:"Africa"},{label:"São Paulo (BRT)",value:"America/Sao_Paulo",region:"South America"},{label:"Buenos Aires (ART)",value:"America/Argentina/Buenos_Aires",region:"South America"},{label:"Santiago (CLT)",value:"America/Santiago",region:"South America"},{label:"Lima (PET)",value:"America/Lima",region:"South America"},{label:"Bogotá (COT)",value:"America/Bogota",region:"South America"},{label:"Caracas (VET)",value:"America/Caracas",region:"South America"}],re=function(){return le.map(function(e){return{label:e.label,value:e.value}})},ce=function(){try{var e=Intl.DateTimeFormat().resolvedOptions().timeZone;return le.find(function(t){return t.value===e})?e:"America/New_York"}catch(e){return"America/New_York"}};function oe(e){return oe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},oe(e)}function ie(e){return function(e){if(Array.isArray(e))return ve(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Re(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ue(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function se(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ue(Object(n),!0).forEach(function(t){me(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ue(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function me(e,t,n){return(t=function(e){var t=function(e){if("object"!=oe(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=oe(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==oe(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function de(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",l=n.toStringTag||"@@toStringTag";function r(n,a,l,r){var i=a&&a.prototype instanceof o?a:o,u=Object.create(i.prototype);return pe(u,"_invoke",function(n,a,l){var r,o,i,u=0,s=l||[],m=!1,d={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,n){return r=t,o=0,i=e,d.n=n,c}};function p(n,a){for(o=n,i=a,t=0;!m&&u&&!l&&t<s.length;t++){var l,r=s[t],p=d.p,E=r[2];n>3?(l=E===a)&&(i=r[(o=r[4])?5:(o=3,3)],r[4]=r[5]=e):r[0]<=p&&((l=n<2&&p<r[1])?(o=0,d.v=a,d.n=r[1]):p<E&&(l=n<3||r[0]>a||a>E)&&(r[4]=n,r[5]=a,d.n=E,o=0))}if(l||n>1)return c;throw m=!0,a}return function(l,s,E){if(u>1)throw TypeError("Generator is already running");for(m&&1===s&&p(s,E),o=s,i=E;(t=o<2?e:i)||!m;){r||(o?o<3?(o>1&&(d.n=-1),p(o,i)):d.n=i:d.v=i);try{if(u=2,r){if(o||(l="next"),t=r[l]){if(!(t=t.call(r,i)))throw TypeError("iterator result is not an object");if(!t.done)return t;i=t.value,o<2&&(o=0)}else 1===o&&(t=r.return)&&t.call(r),o<2&&(i=TypeError("The iterator does not provide a '"+l+"' method"),o=1);r=e}else if((t=(m=d.n<0)?i:n.call(a,d))!==c)break}catch(t){r=e,o=1,i=t}finally{u=1}}return{value:t,done:m}}}(n,l,r),!0),u}var c={};function o(){}function i(){}function u(){}t=Object.getPrototypeOf;var s=[][a]?t(t([][a]())):(pe(t={},a,function(){return this}),t),m=u.prototype=o.prototype=Object.create(s);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,u):(e.__proto__=u,pe(e,l,"GeneratorFunction")),e.prototype=Object.create(m),e}return i.prototype=u,pe(m,"constructor",u),pe(u,"constructor",i),i.displayName="GeneratorFunction",pe(u,l,"GeneratorFunction"),pe(m),pe(m,l,"Generator"),pe(m,a,function(){return this}),pe(m,"toString",function(){return"[object Generator]"}),(de=function(){return{w:r,m:d}})()}function pe(e,t,n,a){var l=Object.defineProperty;try{l({},"",{})}catch(e){l=0}pe=function(e,t,n,a){function r(t,n){pe(e,t,function(e){return this._invoke(t,n,e)})}t?l?l(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(r("next",0),r("throw",1),r("return",2))},pe(e,t,n,a)}function Ee(e,t,n,a,l,r,c){try{var o=e[r](c),i=o.value}catch(e){return void n(e)}o.done?t(i):Promise.resolve(i).then(a,l)}function fe(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,l,r,c,o=[],i=!0,u=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(a=r.call(n)).done)&&(o.push(a.value),o.length!==t);i=!0);}catch(e){u=!0,l=e}finally{try{if(!i&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(u)throw l}}return o}}(e,t)||Re(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Re(e,t){if(e){if("string"==typeof e)return ve(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ve(e,t):void 0}}function ve(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}const ye=function(){var t,a,l=ee().serviceBodies,r=fe((0,e.useState)(!1),2),c=r[0],o=r[1],i=fe((0,e.useState)(""),2),u=i[0],m=i[1],d=fe((0,e.useState)([]),2),p=d[0],E=d[1],f=fe((0,e.useState)(!1),2),R=f[0],v=f[1],y=(0,ae.useSelect)(function(e){return e("core/editor").getCurrentPostType()}),g=(0,ae.useSelect)(function(e){return e("core/editor").getCurrentPostId()}),h=(0,ae.useSelect)(function(e){return e("core/editor").getEditedPostAttribute("meta")||{}}),b=(0,ae.useDispatch)("core/editor").editPost,_=(0,ae.useSelect)(function(e){return e("core/editor").getEditedPostAttribute("status")});if((0,e.useEffect)(function(){if("mayo_event"===y&&g&&"auto-draft"!==_){var e=function(){var e,t=(e=de().m(function e(){var t,n;return de().w(function(e){for(;;)switch(e.p=e.n){case 0:return v(!0),e.p=1,e.n=2,s("/announcements?linked_event=".concat(g));case 2:t=e.v,E(t.announcements||[]),e.n=4;break;case 3:e.p=3,n=e.v,console.error("Error fetching linked announcements:",n),E([]);case 4:v(!1);case 5:return e.a(2)}},e,null,[[1,3]])}),function(){var t=this,n=arguments;return new Promise(function(a,l){var r=e.apply(t,n);function c(e){Ee(r,a,l,c,o,"next",e)}function o(e){Ee(r,a,l,c,o,"throw",e)}c(void 0)})});return function(){return t.apply(this,arguments)}}();e()}},[y,g,_]),"mayo_event"!==y)return null;var S="auto-draft"===_,w=function(e,t){b({meta:se(se({},h),{},me({},e,t))})};(0,e.useEffect)(function(){if(S&&!h.timezone){var e=ce();w("timezone",e)}},[S,h.timezone]);var x=h.recurring_pattern||{type:"none",interval:1,weekdays:[],endDate:"",monthlyType:"date",monthlyDate:"",monthlyWeekday:""},k=function(e){var t=se(se(se({},x),e),{},{weekdays:e.weekdays||x.weekdays||[]});w("recurring_pattern",t)},C=h.skipped_occurrences||[],T=[{value:0,label:"Sunday"},{value:1,label:"Monday"},{value:2,label:"Tuesday"},{value:3,label:"Wednesday"},{value:4,label:"Thursday"},{value:5,label:"Friday"},{value:6,label:"Saturday"}],A=function(){return h.event_start_date?new Date(h.event_start_date).getDate().toString():""},N=function(){if(h.event_start_date){var e=new Date(h.event_start_date),t=Math.ceil(e.getDate()/7);return"".concat(t,",").concat(e.getDay())}return""};return React.createElement(React.Fragment,null,React.createElement(ne.PluginDocumentSettingPanel,{name:"mayo-event-details",title:"Event Details",className:"mayo-event-details"},React.createElement(n.SelectControl,{label:"Event Type",value:h.event_type,options:[{label:"Select Event Type",value:""},{label:"Service",value:"Service"},{label:"Activity",value:"Activity"}],onChange:function(e){return w("event_type",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement(n.PanelBody,{title:"Event Date & Time",initialOpen:!0},React.createElement("div",{className:"mayo-sidebar-datetime"},React.createElement("p",{className:"mayo-sidebar-label"},"Start Date/Time"),React.createElement("div",{className:"mayo-sidebar-datetime-inputs"},React.createElement(n.TextControl,{type:"date",value:h.event_start_date,onChange:function(e){return w("event_start_date",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement(n.TextControl,{type:"time",value:h.event_start_time,onChange:function(e){return w("event_start_time",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0})),React.createElement("p",{className:"mayo-sidebar-label"},"End Date/Time"),React.createElement("div",{className:"mayo-sidebar-datetime-inputs"},React.createElement(n.TextControl,{type:"date",value:h.event_end_date,onChange:function(e){return w("event_end_date",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement(n.TextControl,{type:"time",value:h.event_end_time,onChange:function(e){return w("event_end_time",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}))),React.createElement(n.SelectControl,{label:"Timezone",value:h.timezone||"",options:[{label:"-- No timezone set --",value:""}].concat(ie(re())),onChange:function(e){return w("timezone",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0})),React.createElement(n.PanelBody,{title:"Recurring Pattern",initialOpen:!0},React.createElement(n.SelectControl,{label:"Repeat",value:x.type,options:[{label:"No Recurrence",value:"none"},{label:"Daily",value:"daily"},{label:"Weekly",value:"weekly"},{label:"Monthly",value:"monthly"}],onChange:function(e){return k({type:e})},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),"none"!==x.type&&React.createElement(React.Fragment,null,React.createElement("div",{className:"mayo-recurring-interval"},React.createElement(n.__experimentalNumberControl,{label:"Repeat every",min:1,value:x.interval,onChange:function(e){return k({interval:e})}}),React.createElement("span",null,"daily"===x.type?"days":"weekly"===x.type?"weeks":"months")),"weekly"===x.type&&React.createElement("div",{className:"mayo-weekday-controls"},React.createElement("p",{className:"components-base-control__label"},"On these days"),T.map(function(e){return React.createElement(n.CheckboxControl,{key:e.value,label:e.label,checked:x.weekdays.includes(e.value),onChange:function(t){var n=t?[].concat(ie(x.weekdays),[e.value]):x.weekdays.filter(function(t){return t!==e.value});k({weekdays:n})}})})),React.createElement(n.TextControl,{label:"End Date (optional)",type:"date",value:x.endDate,onChange:function(e){return k({endDate:e})},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0})),"monthly"===x.type&&React.createElement("div",{className:"mayo-monthly-pattern"},React.createElement(n.RadioControl,{label:"Monthly Pattern",selected:x.monthlyType||"date",options:[{label:"On a specific date",value:"date"},{label:"On a specific day",value:"weekday"}],onChange:function(e){return k({monthlyType:e,monthlyDate:"date"===e?A():"",monthlyWeekday:"weekday"===e?N():""})}}),"date"===x.monthlyType&&React.createElement(n.__experimentalNumberControl,{label:"Day of month",value:x.monthlyDate||A(),onChange:function(e){return k({monthlyDate:e})},min:1,max:31}),"weekday"===x.monthlyType&&React.createElement("div",{className:"mayo-monthly-weekday"},React.createElement(n.SelectControl,{label:"Week",value:(null===(t=x.monthlyWeekday)||void 0===t?void 0:t.split(",")[0])||"1",options:[{value:"1",label:"First"},{value:"2",label:"Second"},{value:"3",label:"Third"},{value:"4",label:"Fourth"},{value:"5",label:"Fifth"},{value:"-1",label:"Last"}],onChange:function(e){var t,n=(null===(t=x.monthlyWeekday)||void 0===t?void 0:t.split(",")[1])||"0";k({monthlyWeekday:"".concat(e,",").concat(n)})},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement(n.SelectControl,{label:"Day",value:(null===(a=x.monthlyWeekday)||void 0===a?void 0:a.split(",")[1])||"0",options:T,onChange:function(e){var t,n=(null===(t=x.monthlyWeekday)||void 0===t?void 0:t.split(",")[0])||"1";k({monthlyWeekday:"".concat(n,",").concat(e)})},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0})))),"none"!==x.type&&React.createElement(n.PanelBody,{title:"Skipped Occurrences",initialOpen:!1},React.createElement("p",{className:"components-base-control__help"},"Manage specific dates when this recurring event should not occur."),C.length>0&&React.createElement("div",{className:"mayo-skipped-occurrences-list"},React.createElement("p",{className:"components-base-control__label"},"Skipped Dates:"),C.map(function(e,t){return React.createElement("div",{key:t,className:"mayo-skipped-occurrence-item"},React.createElement("span",null,(l=(a=fe(e.split("-").map(Number),3))[0],r=a[1],c=a[2],new Date(l,r-1,c).toLocaleDateString("en-US",{weekday:"long",year:"numeric",month:"long",day:"numeric"}))),React.createElement(n.Button,{isSmall:!0,isDestructive:!0,onClick:function(){return t=e,n=C.filter(function(e){return e!==t}),void w("skipped_occurrences",n);var t,n}},"Remove"));var a,l,r,c})),c?React.createElement("div",{className:"mayo-add-skip-form"},React.createElement(n.TextControl,{type:"date",label:"Date to skip",value:u,onChange:m,__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement("div",{className:"mayo-add-skip-actions"},React.createElement(n.Button,{isPrimary:!0,isSmall:!0,onClick:function(){if(u){var e=[].concat(ie(C),[u]);w("skipped_occurrences",e),m(""),o(!1)}},disabled:!u},"Add Skip"),React.createElement(n.Button,{isSecondary:!0,isSmall:!0,onClick:function(){o(!1),m("")}},"Cancel"))):React.createElement(n.Button,{isSecondary:!0,isSmall:!0,onClick:function(){return o(!0)}},"Add Skipped Date")),React.createElement(n.PanelBody,{title:"Service Body",initialOpen:!0},React.createElement(n.SelectControl,{label:"Service Body",value:h.service_body,options:[{label:"Select a service body",value:""},{label:"Unaffiliated (0)",value:"0"}].concat(ie(l.map(function(e){return{label:"".concat(e.name," (").concat(e.id,")"),value:e.id}}))),onChange:function(e){return w("service_body",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0})),React.createElement(n.PanelBody,{title:"Location Details",initialOpen:!0},React.createElement(n.TextControl,{label:"Location Name",value:h.location_name,onChange:function(e){return w("location_name",e)},placeholder:"e.g., Community Center",__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement(n.TextControl,{label:"Address",value:h.location_address,onChange:function(e){return w("location_address",e)},placeholder:"Full address",__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement(n.TextControl,{label:"Location Details",value:h.location_details,onChange:function(e){return w("location_details",e)},placeholder:"Parking info, entrance details, etc.",__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}))),React.createElement(ne.PluginDocumentSettingPanel,{name:"mayo-point-of-contact",title:"Point of Contact",className:"mayo-private-contact"},React.createElement(n.PanelBody,{title:"Contact Information (Private)",initialOpen:!0},React.createElement(n.TextControl,{label:"Contact Name",value:h.contact_name,onChange:function(e){return w("contact_name",e)},placeholder:"Full name of the contact person",__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement(n.TextControl,{label:"Contact Email",value:h.email,onChange:function(e){return w("email",e)},placeholder:"Email address",type:"email",__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}))),!S&&React.createElement(ne.PluginDocumentSettingPanel,{name:"mayo-linked-announcements",title:"Linked Announcements",className:"mayo-linked-announcements"},React.createElement("p",{className:"components-base-control__help",style:{marginTop:0}},"Announcements that reference this event."),R&&React.createElement("div",{style:{textAlign:"center",padding:"16px"}},React.createElement(n.Spinner,null)),!R&&0===p.length&&React.createElement("p",{style:{color:"#666",fontStyle:"italic"}},"No announcements linked to this event."),!R&&p.length>0&&React.createElement("div",{className:"mayo-linked-announcements-list"},p.map(function(e){var t=e.is_active?"#46b450":e.display_start_date&&e.display_start_date>(new Date).toISOString().split("T")[0]?"#0073aa":"#dc3545",n=e.is_active?"Active":e.display_start_date&&e.display_start_date>(new Date).toISOString().split("T")[0]?"Scheduled":"Expired";return React.createElement("div",{key:e.id,style:{padding:"10px 12px",backgroundColor:"#f9f9f9",borderRadius:"4px",marginBottom:"8px",borderLeft:"3px solid ".concat(t)}},React.createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"}},React.createElement("strong",null,e.title),React.createElement("span",{style:{fontSize:"11px",color:t,fontWeight:600}},n)),React.createElement("div",{style:{fontSize:"12px",color:"#666",marginTop:"4px"}},"Priority: ",React.createElement("span",{style:{color:"urgent"===e.priority?"#dc3545":"high"===e.priority?"#ff9800":"low"===e.priority?"#6c757d":"#0073aa",fontWeight:600}},e.priority)),React.createElement("div",{style:{display:"flex",gap:"8px",marginTop:"8px"}},e.edit_link&&React.createElement("a",{href:e.edit_link,target:"_blank",rel:"noopener noreferrer",style:{display:"inline-flex",alignItems:"center",padding:"4px 8px",fontSize:"11px",backgroundColor:"#f0f0f0",border:"1px solid #c3c4c7",borderRadius:"3px",textDecoration:"none",color:"#2271b1",whiteSpace:"nowrap"}},React.createElement("span",{className:"dashicons dashicons-edit",style:{fontSize:"14px",marginRight:"4px",width:"14px",height:"14px"}}),"Edit")))})),React.createElement("div",{style:{marginTop:"12px"}},React.createElement(n.Button,{isSecondary:!0,href:"".concat(window.location.origin,"/wp-admin/post-new.php?post_type=mayo_announcement&linked_event=").concat(g),target:"_blank"},"Create Announcement"))))};function ge(e){return ge="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ge(e)}function he(e){if(null!=e){var t=e["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],n=0;if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length))return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}throw new TypeError(ge(e)+" is not iterable")}function be(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=Pe(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var a=0,l=function(){};return{s:l,n:function(){return a>=e.length?{done:!0}:{done:!1,value:e[a++]}},e:function(e){throw e},f:l}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,c=!0,o=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return c=e.done,e},e:function(e){o=!0,r=e},f:function(){try{c||null==n.return||n.return()}finally{if(o)throw r}}}}function _e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function Se(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?_e(Object(n),!0).forEach(function(t){we(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):_e(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function we(e,t,n){return(t=function(e){var t=function(e){if("object"!=ge(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=ge(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==ge(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xe(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",l=n.toStringTag||"@@toStringTag";function r(n,a,l,r){var i=a&&a.prototype instanceof o?a:o,u=Object.create(i.prototype);return ke(u,"_invoke",function(n,a,l){var r,o,i,u=0,s=l||[],m=!1,d={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,n){return r=t,o=0,i=e,d.n=n,c}};function p(n,a){for(o=n,i=a,t=0;!m&&u&&!l&&t<s.length;t++){var l,r=s[t],p=d.p,E=r[2];n>3?(l=E===a)&&(i=r[(o=r[4])?5:(o=3,3)],r[4]=r[5]=e):r[0]<=p&&((l=n<2&&p<r[1])?(o=0,d.v=a,d.n=r[1]):p<E&&(l=n<3||r[0]>a||a>E)&&(r[4]=n,r[5]=a,d.n=E,o=0))}if(l||n>1)return c;throw m=!0,a}return function(l,s,E){if(u>1)throw TypeError("Generator is already running");for(m&&1===s&&p(s,E),o=s,i=E;(t=o<2?e:i)||!m;){r||(o?o<3?(o>1&&(d.n=-1),p(o,i)):d.n=i:d.v=i);try{if(u=2,r){if(o||(l="next"),t=r[l]){if(!(t=t.call(r,i)))throw TypeError("iterator result is not an object");if(!t.done)return t;i=t.value,o<2&&(o=0)}else 1===o&&(t=r.return)&&t.call(r),o<2&&(i=TypeError("The iterator does not provide a '"+l+"' method"),o=1);r=e}else if((t=(m=d.n<0)?i:n.call(a,d))!==c)break}catch(t){r=e,o=1,i=t}finally{u=1}}return{value:t,done:m}}}(n,l,r),!0),u}var c={};function o(){}function i(){}function u(){}t=Object.getPrototypeOf;var s=[][a]?t(t([][a]())):(ke(t={},a,function(){return this}),t),m=u.prototype=o.prototype=Object.create(s);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,u):(e.__proto__=u,ke(e,l,"GeneratorFunction")),e.prototype=Object.create(m),e}return i.prototype=u,ke(m,"constructor",u),ke(u,"constructor",i),i.displayName="GeneratorFunction",ke(u,l,"GeneratorFunction"),ke(m),ke(m,l,"Generator"),ke(m,a,function(){return this}),ke(m,"toString",function(){return"[object Generator]"}),(xe=function(){return{w:r,m:d}})()}function ke(e,t,n,a){var l=Object.defineProperty;try{l({},"",{})}catch(e){l=0}ke=function(e,t,n,a){function r(t,n){ke(e,t,function(e){return this._invoke(t,n,e)})}t?l?l(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(r("next",0),r("throw",1),r("return",2))},ke(e,t,n,a)}function Ce(e){return function(e){if(Array.isArray(e))return Oe(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Pe(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Te(e,t,n,a,l,r,c){try{var o=e[r](c),i=o.value}catch(e){return void n(e)}o.done?t(i):Promise.resolve(i).then(a,l)}function Ae(e){return function(){var t=this,n=arguments;return new Promise(function(a,l){var r=e.apply(t,n);function c(e){Te(r,a,l,c,o,"next",e)}function o(e){Te(r,a,l,c,o,"throw",e)}c(void 0)})}}function Ne(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,l,r,c,o=[],i=!0,u=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(a=r.call(n)).done)&&(o.push(a.value),o.length!==t);i=!0);}catch(e){u=!0,l=e}finally{try{if(!i&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(u)throw l}}return o}}(e,t)||Pe(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Pe(e,t){if(e){if("string"==typeof e)return Oe(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Oe(e,t):void 0}}function Oe(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}(0,U.getPlugins)().some(function(e){return"mayo-event-details"===e.name})||(0,U.registerPlugin)("mayo-event-details",{render:function(){return React.createElement(te,null,React.createElement(ye,null))},icon:"calendar"});var De=function(t){var a=t.isOpen,l=t.onClose,r=t.onSelectEvent,c=t.onRemoveEvent,o=t.linkedEventRefs,i=(t.getRefKey,Ne((0,e.useState)(""),2)),u=i[0],m=i[1],d=Ne((0,e.useState)([]),2),p=d[0],E=d[1],f=Ne((0,e.useState)(!1),2),R=f[0],v=f[1],y=Ne((0,e.useState)(!1),2),g=y[0],h=y[1],b=Ne((0,e.useState)(1),2),_=b[0],S=b[1],w=Ne((0,e.useState)(!0),2),x=w[0],k=w[1],C=Ne((0,e.useState)(0),2),T=C[0],A=C[1],N=Ne((0,e.useState)(!0),2),P=N[0],O=N[1],D=(0,e.useRef)(null),j=(0,e.useRef)(null),B=function(e){return o.some(function(t){return"local"===t.type&&"local"===e.source.type?t.id===e.id:"external"===t.type&&"external"===e.source.type&&t.id===e.id&&t.source_id===e.source.id})},M=(0,e.useCallback)(function(){var e=Ae(xe().m(function e(t,n,a){var l,r,c,o,i,u=arguments;return xe().w(function(e){for(;;)switch(e.p=e.n){case 0:return l=u.length>3&&void 0!==u[3]&&u[3],1===n?v(!0):h(!0),e.p=1,r=new URLSearchParams({per_page:20,page:n,hide_past:a?"1":"0"}),t&&r.append("search",t),e.n=2,s("/events/search-all?".concat(r.toString()));case 2:c=e.v,o=c.events||[],E(l?function(e){return[].concat(Ce(e),Ce(o))}:o),A(c.total||0),k(n<(c.total_pages||1)),S(n),e.n=4;break;case 3:e.p=3,i=e.v,console.error("Error fetching events:",i),l||E([]),k(!1);case 4:return e.p=4,v(!1),h(!1),e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}));return function(t,n,a){return e.apply(this,arguments)}}(),[]);(0,e.useEffect)(function(){if(a)return j.current&&clearTimeout(j.current),j.current=setTimeout(function(){M(u,1,P,!1)},300),function(){j.current&&clearTimeout(j.current)}},[a,u,P,M]),(0,e.useEffect)(function(){a&&(m(""),E([]),S(1),k(!0),O(!0))},[a]);var L=(0,e.useCallback)(function(){if(D.current&&!R&&!g&&x){var e=D.current,t=e.scrollTop;e.scrollHeight-t-e.clientHeight<100&&M(u,_+1,P,!0)}},[R,g,x,u,_,P,M]);return a?React.createElement(n.Modal,{title:"Link Events",onRequestClose:l,style:{maxWidth:"600px",width:"100%"},className:"mayo-event-search-modal"},React.createElement("div",{style:{marginBottom:"16px"}},React.createElement(n.TextControl,{label:"Search Events",value:u,onChange:m,placeholder:"Search by event name...",__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginTop:"8px"}},React.createElement(n.CheckboxControl,{label:"Hide past events",checked:P,onChange:O,__nextHasNoMarginBottom:!0}),T>0&&React.createElement("span",{style:{fontSize:"12px",color:"#666"}},T," event",1!==T?"s":""," found"))),React.createElement("div",{ref:D,onScroll:L,style:{maxHeight:"400px",overflowY:"auto",border:"1px solid #ddd",borderRadius:"4px",backgroundColor:"#fff"}},R&&React.createElement("div",{style:{textAlign:"center",padding:"40px"}},React.createElement(n.Spinner,null),React.createElement("p",{style:{margin:"8px 0 0",color:"#666"}},"Loading events...")),!R&&0===p.length&&React.createElement("div",{style:{textAlign:"center",padding:"40px",color:"#666"}},u?'No events found matching "'.concat(u,'"'):"No events available"),!R&&p.map(function(e){var t="external"===e.source.type,a=B(e),l=t?"external-".concat(e.source.id,"-").concat(e.id):"local-".concat(e.id);return React.createElement("div",{key:l,style:{padding:"12px 16px",borderBottom:"1px solid #eee",cursor:"pointer",transition:"background-color 0.2s",backgroundColor:a?"#e8f5e9":"transparent",borderLeft:"4px solid ".concat(a?"#4caf50":t?"#ff9800":"#0073aa")},onClick:function(){return a?null:function(e){B(e)||r(e)}(e)},onMouseEnter:function(e){a||(e.currentTarget.style.backgroundColor="#f0f7ff")},onMouseLeave:function(e){a||(e.currentTarget.style.backgroundColor=a?"#e8f5e9":"transparent")}},React.createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"}},React.createElement("div",{style:{flex:1}},React.createElement("div",{style:{fontWeight:600,marginBottom:"4px",display:"flex",alignItems:"center"}},a&&React.createElement("span",{className:"dashicons dashicons-yes-alt",style:{color:"#4caf50",fontSize:"16px",marginRight:"6px",width:"16px",height:"16px"}}),e.title),e.start_date&&React.createElement("div",{style:{fontSize:"12px",color:"#666",marginBottom:"4px"}},React.createElement("span",{className:"dashicons dashicons-calendar-alt",style:{fontSize:"12px",marginRight:"4px",verticalAlign:"middle",width:"12px",height:"12px"}}),function(e){if(!e)return"";try{var t=Ne(e.split("-").map(Number),3),n=t[0],a=t[1],l=t[2];return new Date(n,a-1,l).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}catch(t){return e}}(e.start_date))),React.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px"}},React.createElement("span",{style:{fontSize:"10px",backgroundColor:t?"#fff3e0":"#e3f2fd",color:t?"#e65100":"#1565c0",padding:"3px 8px",borderRadius:"3px",whiteSpace:"nowrap"}},e.source.name),a&&React.createElement(n.Button,{isSmall:!0,isDestructive:!0,onClick:function(t){return function(e,t){t.stopPropagation(),c(e)}(e,t)},style:{minWidth:"auto"}},"Unlink"))))}),g&&React.createElement("div",{style:{textAlign:"center",padding:"16px"}},React.createElement(n.Spinner,null),React.createElement("span",{style:{marginLeft:"8px",color:"#666",fontSize:"12px"}},"Loading more...")),!R&&!g&&!x&&p.length>0&&React.createElement("div",{style:{textAlign:"center",padding:"12px",color:"#666",fontSize:"12px"}},"End of results")),React.createElement("div",{style:{marginTop:"16px",textAlign:"right"}},React.createElement(n.Button,{variant:"secondary",onClick:l},"Close"))):null},je=[{value:"external",label:"External Link",dashicon:"dashicons-external"},{value:"hotel",label:"Hotel/Lodging",dashicon:"dashicons-building"},{value:"info",label:"Information",dashicon:"dashicons-info"},{value:"calendar",label:"Calendar",dashicon:"dashicons-calendar-alt"},{value:"location",label:"Location",dashicon:"dashicons-location"},{value:"link",label:"Generic Link",dashicon:"dashicons-admin-links"}],Be=function(t){var a=t.isOpen,l=t.onClose,r=t.onAddLink,c=Ne((0,e.useState)(""),2),o=c[0],i=c[1],u=Ne((0,e.useState)(""),2),s=u[0],m=u[1],d=Ne((0,e.useState)("external"),2),p=d[0],E=d[1],f=Ne((0,e.useState)(""),2),R=f[0],v=f[1];(0,e.useEffect)(function(){a&&(i(""),m(""),E("external"),v(""))},[a]);var y=function(e){if(!e)return v("URL is required"),!1;try{return new URL(e),v(""),!0}catch(e){return v("Please enter a valid URL (e.g., https://example.com)"),!1}};return a?React.createElement(n.Modal,{title:"Add Custom Link",onRequestClose:l,style:{maxWidth:"500px",width:"100%"},className:"mayo-custom-link-modal"},React.createElement("div",{style:{marginBottom:"16px"}},React.createElement(n.TextControl,{label:"Link Title",value:s,onChange:m,placeholder:"e.g., Hotel Reservations",__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0})),React.createElement("div",{style:{marginBottom:"16px"}},React.createElement(n.TextControl,{label:"URL",value:o,onChange:function(e){i(e),R&&y(e)},placeholder:"https://example.com",type:"url",__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),R&&React.createElement("p",{style:{color:"#dc3545",fontSize:"12px",marginTop:"4px",marginBottom:0}},R)),React.createElement("div",{style:{marginBottom:"24px"}},React.createElement("label",{style:{display:"block",marginBottom:"8px",fontWeight:500}},"Icon"),React.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px"}},je.map(function(e){return React.createElement("button",{key:e.value,type:"button",onClick:function(){return E(e.value)},style:{display:"flex",flexDirection:"column",alignItems:"center",padding:"12px 16px",border:"2px solid ".concat(p===e.value?"#0073aa":"#ddd"),borderRadius:"4px",backgroundColor:p===e.value?"#f0f7ff":"#fff",cursor:"pointer",minWidth:"80px",transition:"all 0.2s"}},React.createElement("span",{className:"dashicons ".concat(e.dashicon),style:{fontSize:"24px",width:"24px",height:"24px",color:p===e.value?"#0073aa":"#666",marginBottom:"4px"}}),React.createElement("span",{style:{fontSize:"11px",color:p===e.value?"#0073aa":"#666"}},e.label))}))),React.createElement("div",{style:{display:"flex",justifyContent:"flex-end",gap:"8px"}},React.createElement(n.Button,{variant:"secondary",onClick:l},"Cancel"),React.createElement(n.Button,{variant:"primary",onClick:function(){y(o)&&s.trim()&&(r({type:"custom",id:Date.now(),url:o.trim(),title:s.trim(),icon:p}),l())},disabled:!s.trim()||!o.trim()},"Add Link"))):null};const Me=function(){var t=Ne((0,e.useState)(!1),2),a=t[0],l=t[1],r=Ne((0,e.useState)(!1),2),c=r[0],o=r[1],i=Ne((0,e.useState)(!1),2),u=i[0],m=i[1],d=Ne((0,e.useState)(null),2),p=d[0],E=d[1],f=Ne((0,e.useState)([]),2),R=f[0],v=f[1],y=Ne((0,e.useState)(!1),2),g=y[0],h=y[1],b=Ne((0,e.useState)(!1),2),_=b[0],S=b[1],w=Ne((0,e.useState)(null),2),x=w[0],k=w[1],C=ee().serviceBodies,T=(0,ae.useSelect)(function(e){return e("core/editor").getCurrentPostType()}),A=(0,ae.useSelect)(function(e){return e("core/editor").getEditedPostAttribute("status")}),N=(0,ae.useSelect)(function(e){return e("core/editor").getEditedPostAttribute("meta")||{}}),P=(0,ae.useSelect)(function(e){return e("core/editor").getEditedPostAttribute("categories")||[]}),O=(0,ae.useSelect)(function(e){return e("core/editor").getEditedPostAttribute("tags")||[]}),D=(0,ae.useDispatch)("core/editor").editPost,j=N.service_body||"";(0,e.useEffect)(function(){if("mayo_announcement"===T){var e=function(){var e=Ae(xe().m(function e(){var t,n;return xe().w(function(e){for(;;)switch(e.p=e.n){case 0:return h(!0),e.p=1,e.n=2,s("/subscribers/count",{method:"POST",body:JSON.stringify({categories:P,tags:O,service_body:j})});case 2:t=e.v,E(t.count),v(t.subscribers||[]),e.n=4;break;case 3:e.p=3,n=e.v,console.error("Error fetching subscriber count:",n),E(null),v([]);case 4:h(!1);case 5:return e.a(2)}},e,null,[[1,3]])}));return function(){return e.apply(this,arguments)}}(),t=setTimeout(e,300);return function(){return clearTimeout(t)}}},[T,P,O,j]),(0,e.useEffect)(function(){if(!u&&"mayo_announcement"===T&&"auto-draft"===A){var e=new URLSearchParams(window.location.search).get("linked_event");if(e){var t=parseInt(e,10);if(!isNaN(t)&&t>0){var n=N.linked_event_refs||[];if(!n.some(function(e){return"local"===e.type&&e.id===t})){var a={type:"local",id:t};D({meta:Se(Se({},N),{},{linked_event_refs:[].concat(Ce(n),[a])})})}}m(!0)}}},[T,A,u,N.linked_event_refs]),(0,e.useEffect)(function(){if("mayo_announcement"===T){var e=function(){var e=Ae(xe().m(function e(){var t,n;return xe().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,s("/settings");case 1:t=e.v,k({service_bodies:t.subscription_service_bodies||[]}),e.n=3;break;case 2:e.p=2,n=e.v,console.error("Error fetching subscription settings:",n),k({service_bodies:[]});case 3:return e.a(2)}},e,null,[[0,2]])}));return function(){return e.apply(this,arguments)}}();e()}},[T]);var B="auto-draft"===A;if((0,e.useEffect)(function(){if(B&&!N.display_timezone){var e=ce();D({meta:Se(Se({},N),{},{display_timezone:e})})}},[B,N.display_timezone]),"mayo_announcement"!==T)return null;var M=function(){if(!x||0===x.service_bodies.length)return C;var e=x.service_bodies.map(function(e){return e.toString()});return C.filter(function(t){return e.includes(t.id.toString())})}(),L=function(e,t){D({meta:Se(Se({},N),{},we({},e,t))})},I=function(){return N.linked_event_refs&&Array.isArray(N.linked_event_refs)&&N.linked_event_refs.length>0?N.linked_event_refs:N.linked_events&&Array.isArray(N.linked_events)?N.linked_events.map(function(e){return{type:"local",id:e}}):[]},F=I(),z=function(e){return"local"===e.type?"local-".concat(e.id):"custom"===e.type?"custom-".concat(e.id):"external-".concat(e.source_id,"-").concat(e.id)},G=function(e){var t=I().filter(function(t){return"local"===t.type&&"local"===e.type?t.id!==e.id:"external"===t.type&&"external"===e.type?!(t.id===e.id&&t.source_id===e.source_id):"custom"!==t.type||"custom"!==e.type||t.id!==e.id});L("linked_event_refs",t)},U=Ne((0,e.useState)({}),2),W=U[0],H=U[1],Y=Ne((0,e.useState)(!1),2),q=Y[0],J=Y[1];return(0,e.useEffect)(function(){var e=function(){var e=Ae(xe().m(function e(){var t,n,a,l,r,c,o;return xe().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t=F.filter(function(e){return"custom"!==e.type&&!W[z(e)]}),n={},F.filter(function(e){return"custom"===e.type}).forEach(function(e){var t=z(e);W[t]||(n[t]={title:e.title||"Custom Link",permalink:e.url||"#",icon:e.icon||"external",source:{type:"custom",id:"custom",name:"Custom Link"}})}),Object.keys(n).length>0&&H(function(e){return Se(Se({},e),n)}),0!==t.length){e.n=1;break}return e.a(2);case 1:J(!0),a={},l=be(t),e.p=2,c=xe().m(function e(){var t,n,l,c,o,i;return xe().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t=r.value,n=z(t),e.p=1,"local"!==t.type){e.n=3;break}return e.n=2,s("/events/".concat(t.id));case 2:(l=e.v)&&!l.code?a[n]={title:l.title||"Unknown Event",start_date:l.start_date||"",permalink:l.permalink||"",edit_link:l.edit_link||"",source:{type:"local",id:"local",name:"Local"}}:a[n]={title:"Event #".concat(t.id),start_date:"",permalink:"",edit_link:"",unavailable:!0,source:{type:"local",id:"local",name:"Local"}},e.n=7;break;case 3:if("external"!==t.type){e.n=7;break}return e.p=4,e.n=5,s("/events/search-all?per_page=100");case 5:c=e.v,o=(c.events||[]).find(function(e){return"external"===e.source.type&&e.source.id===t.source_id&&e.id===t.id}),a[n]=o?{title:o.title||"Unknown Event",start_date:o.start_date||"",permalink:o.permalink||"",edit_link:"",source:o.source}:{title:"External Event #".concat(t.id),start_date:"",permalink:"",edit_link:"",unavailable:!0,source:{type:"external",id:t.source_id,name:t.source_id}},e.n=7;break;case 6:e.p=6,e.v,a[n]={title:"External Event #".concat(t.id),start_date:"",permalink:"",edit_link:"",unavailable:!0,source:{type:"external",id:t.source_id,name:t.source_id}};case 7:e.n=9;break;case 8:e.p=8,i=e.v,console.error("Error fetching event details:",i),a[n]={title:"local"===t.type?"Event #".concat(t.id):"External Event #".concat(t.id),start_date:"",permalink:"",edit_link:"",unavailable:!0,source:"local"===t.type?{type:"local",id:"local",name:"Local"}:{type:"external",id:t.source_id,name:t.source_id}};case 9:return e.a(2)}},e,null,[[4,6],[1,8]])}),l.s();case 3:if((r=l.n()).done){e.n=5;break}return e.d(he(c()),4);case 4:e.n=3;break;case 5:e.n=7;break;case 6:e.p=6,o=e.v,l.e(o);case 7:return e.p=7,l.f(),e.f(7);case 8:Object.keys(a).length>0&&H(function(e){return Se(Se({},e),a)}),J(!1);case 9:return e.a(2)}},e,null,[[2,6,7,8]])}));return function(){return e.apply(this,arguments)}}();F.length>0&&e()},[JSON.stringify(F)]),React.createElement(React.Fragment,null,React.createElement(ne.PluginDocumentSettingPanel,{name:"mayo-announcement-details",title:"Announcement Settings",className:"mayo-announcement-details"},React.createElement(n.PanelBody,{title:"Display Window",initialOpen:!0},React.createElement("p",{className:"components-base-control__help",style:{marginTop:0,marginBottom:"12px"}},"Control when this announcement is visible on the frontend."),React.createElement("div",{style:{border:"1px solid #e0e0e0",borderRadius:"4px",padding:"12px",marginBottom:"12px",backgroundColor:"#fafafa"}},React.createElement("div",{style:{marginBottom:"4px"}},React.createElement("strong",{style:{fontSize:"12px",color:"#1e1e1e"}},"Start")),React.createElement(n.TextControl,{label:"Date",type:"date",value:N.display_start_date||"",onChange:function(e){return L("display_start_date",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement("div",{style:{marginTop:"8px"}},React.createElement(n.TextControl,{label:"Time",type:"time",value:N.display_start_time||"",onChange:function(e){return L("display_start_time",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0})),React.createElement("p",{className:"components-base-control__help",style:{marginTop:"8px",marginBottom:0}},"Leave empty to start showing immediately")),React.createElement("div",{style:{border:"1px solid #e0e0e0",borderRadius:"4px",padding:"12px",backgroundColor:"#fafafa"}},React.createElement("div",{style:{marginBottom:"4px"}},React.createElement("strong",{style:{fontSize:"12px",color:"#1e1e1e"}},"End")),React.createElement(n.TextControl,{label:"Date",type:"date",value:N.display_end_date||"",onChange:function(e){return L("display_end_date",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement("div",{style:{marginTop:"8px"}},React.createElement(n.TextControl,{label:"Time",type:"time",value:N.display_end_time||"",onChange:function(e){return L("display_end_time",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0})),React.createElement("p",{className:"components-base-control__help",style:{marginTop:"8px",marginBottom:0}},"Leave empty to show indefinitely")),React.createElement("div",{style:{marginTop:"12px"}},React.createElement(n.SelectControl,{label:"Timezone",value:N.display_timezone||"",options:[{label:"-- No timezone set --",value:""}].concat(Ce(re())),onChange:function(e){return L("display_timezone",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}))),React.createElement(n.PanelBody,{title:"Priority",initialOpen:!0},React.createElement(n.SelectControl,{label:"Priority Level",value:N.priority||"normal",options:[{label:"Low",value:"low"},{label:"Normal",value:"normal"},{label:"High",value:"high"},{label:"Urgent",value:"urgent"}],onChange:function(e){return L("priority",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement("p",{className:"components-base-control__help"},"Priority affects display order and styling.",React.createElement("span",{style:{display:"inline-block",marginLeft:"8px",color:{low:"#6c757d",normal:"#0073aa",high:"#ff9800",urgent:"#dc3545"}[N.priority||"normal"],fontWeight:600}},(N.priority||"normal").charAt(0).toUpperCase()+(N.priority||"normal").slice(1)))),React.createElement(n.PanelBody,{title:"Service Body",initialOpen:!0},React.createElement(n.SelectControl,{label:"Service Body",value:N.service_body||"",options:[{label:"Select a service body",value:""}].concat(Ce(!x||0===x.service_bodies.length||x.service_bodies.map(function(e){return e.toString()}).includes("0")?[{label:"Unaffiliated (0)",value:"0"}]:[]),Ce(M.map(function(e){return{label:"".concat(e.name," (").concat(e.id,")"),value:e.id}}))),onChange:function(e){return L("service_body",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),x&&x.service_bodies.length>0&&React.createElement("p",{className:"components-base-control__help",style:{marginTop:"8px"}},"Only service bodies enabled in"," ",React.createElement("a",{href:"/wp-admin/admin.php?page=mayo-settings",target:"_blank",rel:"noopener noreferrer"},"subscription settings")," ","are shown."))),React.createElement(ne.PluginDocumentSettingPanel,{name:"mayo-linked-events",title:"Links & Events",className:"mayo-linked-events"},React.createElement("p",{className:"components-base-control__help",style:{marginTop:0}},"Add custom links or link to events. Custom links appear first."),q&&F.length>0&&React.createElement("div",{style:{textAlign:"center",padding:"16px"}},React.createElement(n.Spinner,null),React.createElement("p",{style:{margin:"8px 0 0",color:"#666",fontSize:"12px"}},"Loading details...")),!q&&F.length>0&&React.createElement("div",{className:"mayo-linked-events-list",style:{marginBottom:"16px"}},F.map(function(e,t){var a,l,r,c,o=z(e),i=W[o]||{},u=i.title&&!i.title.startsWith("Event #")&&!i.title.startsWith("External Event #"),s="external"===e.type,m="custom"===e.type;return React.createElement("div",{key:o,style:{padding:"12px",backgroundColor:"#f9f9f9",borderRadius:"4px",marginBottom:"8px",borderLeft:"3px solid ".concat(m?"#9c27b0":s?"#ff9800":"#0073aa")}},React.createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"}},React.createElement("div",{style:{flex:1}},u||i.title||m?React.createElement(React.Fragment,null,React.createElement("div",{style:{display:"flex",alignItems:"center",marginBottom:"4px"}},m&&React.createElement("span",{className:"dashicons ".concat((r=e.icon||i.icon||"external",c=je.find(function(e){return e.value===r}),c?c.dashicon:"dashicons-external")),style:{fontSize:"16px",width:"16px",height:"16px",marginRight:"6px",color:"#9c27b0"}}),React.createElement("strong",null,i.title||e.title||(s?"External Event #".concat(e.id):"Event #".concat(e.id)))),React.createElement("span",{style:{display:"inline-block",fontSize:"11px",backgroundColor:m?"#f3e5f5":s?"#fff3e0":"#e3f2fd",color:m?"#7b1fa2":s?"#e65100":"#1565c0",padding:"2px 6px",borderRadius:"3px",marginBottom:"4px"}},m?"Custom Link":s?(null===(a=i.source)||void 0===a?void 0:a.name)||(null===(l=i.source)||void 0===l?void 0:l.id):"Local Event"),i.start_date&&React.createElement("div",{style:{color:"#666",fontSize:"12px",marginBottom:"8px"}},React.createElement("span",{className:"dashicons dashicons-calendar-alt",style:{fontSize:"14px",marginRight:"4px",verticalAlign:"middle"}}),function(e){if(!e)return"";try{var t=Ne(e.split("-").map(Number),3),n=t[0],a=t[1],l=t[2];return new Date(n,a-1,l).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}catch(t){return e}}(i.start_date)),React.createElement("div",{style:{display:"flex",gap:"8px",marginTop:"8px"}},(i.permalink||e.url)&&React.createElement("a",{href:i.permalink||e.url,target:"_blank",rel:"noopener noreferrer",style:{display:"inline-flex",alignItems:"center",padding:"4px 8px",fontSize:"11px",backgroundColor:"#f0f0f0",border:"1px solid #c3c4c7",borderRadius:"3px",textDecoration:"none",color:"#2271b1",whiteSpace:"nowrap"}},React.createElement("span",{className:"dashicons dashicons-external",style:{fontSize:"14px",marginRight:"4px",width:"14px",height:"14px"}}),m?"Open Link":s?"View on External Site":"View"),!s&&!m&&i.edit_link&&React.createElement("a",{href:i.edit_link,target:"_blank",rel:"noopener noreferrer",style:{display:"inline-flex",alignItems:"center",padding:"4px 8px",fontSize:"11px",backgroundColor:"#f0f0f0",border:"1px solid #c3c4c7",borderRadius:"3px",textDecoration:"none",color:"#2271b1",whiteSpace:"nowrap"}},React.createElement("span",{className:"dashicons dashicons-edit",style:{fontSize:"14px",marginRight:"4px",width:"14px",height:"14px"}}),"Edit"))):React.createElement("span",{style:{color:"#666"}},s?"External Event #".concat(e.id):"Event #".concat(e.id),React.createElement("span",{style:{fontSize:"12px",marginLeft:"8px"}},"(loading...)"))),React.createElement(n.Button,{isSmall:!0,isDestructive:!0,onClick:function(){return G(e)},style:{marginLeft:"12px"}},"Remove")))})),React.createElement("div",{style:{display:"flex",flexDirection:"column",gap:"8px"}},React.createElement(n.Button,{variant:"secondary",onClick:function(){return o(!0)},style:{justifyContent:"center"}},React.createElement("span",{className:"dashicons dashicons-admin-links",style:{marginRight:"4px"}}),"Add Custom Link"),React.createElement(n.Button,{variant:"secondary",onClick:function(){return l(!0)},style:{justifyContent:"center"}},React.createElement("span",{className:"dashicons dashicons-calendar-alt",style:{marginRight:"4px"}}),"Link Event")),React.createElement(Be,{isOpen:c,onClose:function(){return o(!1)},onAddLink:function(e){var t=I();L("linked_event_refs",[].concat(Ce(t),[e]))}}),React.createElement(De,{isOpen:a,onClose:function(){return l(!1)},onSelectEvent:function(e){!function(e){var t,n=I();t="local"===e.source.type?{type:"local",id:e.id}:{type:"external",id:e.id,source_id:e.source.id},n.some(function(e){return"local"===e.type&&"local"===t.type?e.id===t.id:"external"===e.type&&"external"===t.type&&e.id===t.id&&e.source_id===t.source_id})||L("linked_event_refs",[].concat(Ce(n),[t]))}(e)},onRemoveEvent:function(e){var t="local"===e.source.type?{type:"local",id:e.id}:{type:"external",id:e.id,source_id:e.source.id};G(t)},linkedEventRefs:F,getRefKey:z})),React.createElement(ne.PluginDocumentSettingPanel,{name:"mayo-email-recipients",title:"Email Recipients",className:"mayo-email-recipients"},React.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px",cursor:p>0?"pointer":"default"},onClick:function(){return p>0&&S(!0)}},g?React.createElement(n.Spinner,{style:{margin:0}}):React.createElement(React.Fragment,null,React.createElement("span",{className:"dashicons dashicons-email-alt",style:{color:"#2271b1",fontSize:"18px",width:"18px",height:"18px"}}),React.createElement("span",{style:{textDecoration:p>0?"underline":"none"}},React.createElement("strong",null,null!=p?p:0)," subscriber",1!==p?"s":""," will receive this announcement"))),React.createElement("p",{className:"components-base-control__help",style:{marginTop:"8px"}},"Based on selected categories, tags, and service body.",p>0&&" Click to view recipients."),_&&React.createElement(n.Modal,{title:"Email Recipients (".concat(R.length,")"),onRequestClose:function(){return S(!1)},style:{maxWidth:"600px",width:"100%"}},React.createElement("div",{style:{maxHeight:"400px",overflowY:"auto",border:"1px solid #ddd",borderRadius:"4px"}},R.length>0?R.map(function(e,t){var n,a;return React.createElement("div",{key:e.email,style:{padding:"12px",borderBottom:t<R.length-1?"1px solid #eee":"none"}},React.createElement("div",{style:{fontSize:"13px",fontWeight:500,marginBottom:"8px"}},e.email),React.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"6px"}},e.reason.all?React.createElement("span",{style:{display:"inline-block",padding:"3px 8px",fontSize:"11px",backgroundColor:"#f0f0f0",color:"#666",borderRadius:"3px"}},"Receives all announcements"):React.createElement(React.Fragment,null,null===(n=e.reason.categories)||void 0===n?void 0:n.map(function(e){return React.createElement("span",{key:e,style:{display:"inline-block",padding:"3px 8px",fontSize:"11px",backgroundColor:"#e3f2fd",color:"#1565c0",borderRadius:"3px"}},e)}),null===(a=e.reason.tags)||void 0===a?void 0:a.map(function(e){return React.createElement("span",{key:e,style:{display:"inline-block",padding:"3px 8px",fontSize:"11px",backgroundColor:"#fff3e0",color:"#e65100",borderRadius:"3px"}},e)}),e.reason.service_body&&React.createElement("span",{style:{display:"inline-block",padding:"3px 8px",fontSize:"11px",backgroundColor:"#e8f5e9",color:"#2e7d32",borderRadius:"3px"}},e.reason.service_body))))}):React.createElement("div",{style:{padding:"20px",textAlign:"center",color:"#666"}},"No matching subscribers")),React.createElement("div",{style:{marginTop:"16px",textAlign:"right"}},React.createElement(n.Button,{variant:"secondary",onClick:function(){return S(!1)}},"Close")))))};(0,U.getPlugins)().some(function(e){return"mayo-announcement-details"===e.name})||(0,U.registerPlugin)("mayo-announcement-details",{render:function(){return React.createElement(te,null,React.createElement(Me,null))},icon:"megaphone"}),document.addEventListener("DOMContentLoaded",function(){var n=document.getElementById("mayo-shortcode-root"),a=document.getElementById("mayo-settings-root"),l=document.getElementById("mayo-css-classes-root"),r=document.getElementById("mayo-api-docs-root"),c=document.getElementById("mayo-subscribers-root");n&&(0,e.render)(React.createElement(t,null),n),a&&(0,e.render)(React.createElement(x,null),a),l&&(0,e.render)(React.createElement(C,null),l),r&&(0,e.render)(React.createElement(T,null),r),c&&(0,e.render)(React.createElement(G,null),c)})})();2 (()=>{"use strict";const e=wp.element,t=function(){return React.createElement("div",{className:"wrap mayo-docs"},React.createElement("h1",null,"Shortcodes"),React.createElement("div",{className:"card",style:{marginBottom:"20px"}},React.createElement("h2",null,"Table of Contents"),React.createElement("ul",{style:{listStyle:"disc",marginLeft:"20px",lineHeight:"2"}},React.createElement("li",null,React.createElement("a",{href:"#event-list"},"[mayo_event_list] - Event List Shortcode")),React.createElement("li",null,React.createElement("a",{href:"#event-form"},"[mayo_event_form] - Event Submission Form Shortcode")),React.createElement("li",null,React.createElement("a",{href:"#announcement"},"[mayo_announcement] - Announcement Shortcode")),React.createElement("li",null,React.createElement("a",{href:"#announcement-form"},"[mayo_announcement_form] - Announcement Submission Form Shortcode")),React.createElement("li",null,React.createElement("a",{href:"#subscribe"},"[mayo_subscribe] - Email Subscription Form Shortcode")))),React.createElement("div",{className:"card",id:"event-list"},React.createElement("h2",null,"Event List Shortcode"),React.createElement("p",null,"Use this shortcode to display a list of upcoming events:"),React.createElement("pre",null,React.createElement("code",null,"[mayo_event_list]")),React.createElement("h3",null,"Optional Parameters"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Parameter"),React.createElement("th",null,"Description"),React.createElement("th",null,"Default"),React.createElement("th",null,"Options"),React.createElement("th",null,"Overridable via Querystring?"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,"infinite_scroll"),React.createElement("td",null,"Enable automatic loading of more events as user scrolls down the page"),React.createElement("td",null,"true"),React.createElement("td",null,"true, false"),React.createElement("td",null,"Yes")),React.createElement("tr",null,React.createElement("td",null,"autoexpand"),React.createElement("td",null,"Automatically expand all events when the page loads"),React.createElement("td",null,"false"),React.createElement("td",null,"true, false"),React.createElement("td",null,"Yes")),React.createElement("tr",null,React.createElement("td",null,"categories"),React.createElement("td",null,"Filter by category slugs (comma-separated). Prefix a slug with a minus sign (-) to exclude it."),React.createElement("td",null,"empty (all categories)"),React.createElement("td",null,"e.g., ",React.createElement("pre",null,"meetings,workshops")," or ",React.createElement("pre",null,"-meetings,-workshops")," (exclude meetings and workshops)"),React.createElement("td",null,"Yes")),React.createElement("tr",null,React.createElement("td",null,"category_relation"),React.createElement("td",null,"How to match multiple categories: AND (must have all) or OR (must have any)"),React.createElement("td",null,"OR"),React.createElement("td",null,"AND, OR"),React.createElement("td",null,"Yes")),React.createElement("tr",null,React.createElement("td",null,"tags"),React.createElement("td",null,"Filter by tag slugs (comma-separated). Prefix a slug with a minus sign (-) to exclude it."),React.createElement("td",null,"empty (all tags)"),React.createElement("td",null,"e.g., ",React.createElement("pre",null,"featured,ticketed")," (include only featured or ticketed), ",React.createElement("pre",null,"featured+ticketed")," (is an and condition), or ",React.createElement("pre",null,"-featured,-ticketed")," (exclude featured and ticketed). For more information see the Wordpress documentation on ",React.createElement("a",{target:"_blank",href:"https://developer.wordpress.org/reference/classes/wp_query/#tag-parameters"},"Tag Parameters"),"."),React.createElement("td",null,"Yes")),React.createElement("tr",null,React.createElement("td",null,"event_type"),React.createElement("td",null,"Filter by event type"),React.createElement("td",null,"empty (all types)"),React.createElement("td",null,"Service, Activity"),React.createElement("td",null,"Yes (only one event type at a time)")),React.createElement("tr",null,React.createElement("td",null,"time_format"),React.createElement("td",null,"Format for displaying time"),React.createElement("td",null,"12hour"),React.createElement("td",null,"12hour, 24hour"),React.createElement("td",null,"No")),React.createElement("tr",null,React.createElement("td",null,"per_page"),React.createElement("td",null,"Number of events to show per page"),React.createElement("td",null,"10"),React.createElement("td",null,"Any positive number"),React.createElement("td",null,"Yes")),React.createElement("tr",null,React.createElement("td",null,"status"),React.createElement("td",null,"Shows events with a given status"),React.createElement("td",null,"publish"),React.createElement("td",null,"publish, pending"),React.createElement("td",null,"Yes (only one status at a time)")),React.createElement("tr",null,React.createElement("td",null,"service_body"),React.createElement("td",null,"Filter events by service body IDs (comma-separated)"),React.createElement("td",null,"empty (all service bodies)"),React.createElement("td",null,'e.g., "1,2,3" (shows events from any of the specified service bodies)'),React.createElement("td",null,"Yes")),React.createElement("tr",null,React.createElement("td",null,"source_ids"),React.createElement("td",null,"Filter events by source IDs (comma-separated)"),React.createElement("td",null,"empty (local events only)"),React.createElement("td",null,'e.g., "local,source_123,source_456"'),React.createElement("td",null,"Yes")),React.createElement("tr",null,React.createElement("td",null,"archive"),React.createElement("td",null,"Show only past events that have completely ended (excluding current and future events)"),React.createElement("td",null,"false"),React.createElement("td",null,"true, false"),React.createElement("td",null,"Yes")),React.createElement("tr",null,React.createElement("td",null,"order"),React.createElement("td",null,"Sort order for events by start date and time"),React.createElement("td",null,"ASC"),React.createElement("td",null,"ASC (earliest first), DESC (latest first)"),React.createElement("td",null,"Yes")),React.createElement("tr",null,React.createElement("td",null,"timezone"),React.createElement("td",null,"Timezone to use for date filtering"),React.createElement("td",null,"Browser's timezone"),React.createElement("td",null,'Any valid IANA timezone (e.g., "America/New_York", "Europe/London")'),React.createElement("td",null,"Yes")),React.createElement("tr",null,React.createElement("td",null,"view"),React.createElement("td",null,"Default view mode for displaying events"),React.createElement("td",null,"list"),React.createElement("td",null,"list, calendar"),React.createElement("td",null,"Yes")))),React.createElement("h3",null,"Example with Parameters"),React.createElement("pre",null,React.createElement("code",null,'[mayo_event_list time_format="24hour" per_page="5" categories="meetings,workshops" tags="featured" event_type="Service" service_body="1,2,3" source_ids="local,source_123" archive="false" order="ASC" timezone="America/New_York" view="calendar"]')),React.createElement("h3",null,"Example with Category/Tag Exclusions"),React.createElement("pre",null,React.createElement("code",null,'[mayo_event_list categories="-announcements,-alerts" tags="-archived"]')),React.createElement("p",null,React.createElement("em",null,'Shows all events except those with the "announcements" or "alerts" categories, and excludes the "archived" tag.')),React.createElement("h3",null,"Example with Querystring Overrides"),React.createElement("pre",null,React.createElement("code",null,'https://example.com/events?status=pending&categories=meetings,workshops&event_type=Service&service_body="1,2,3"&source_ids=local,source_123&archive=true&order=DESC&timezone=America/New_York&infinite_scroll=false&per_page=20&view=calendar')),React.createElement("h3",null,"Notes"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,"Prefix category or tag slugs with a minus sign (-) to exclude them from the event list"),React.createElement("li",null,"You can mix inclusions and exclusions: ",React.createElement("code",null,'categories="meetings,-cancelled"')," shows meetings but not cancelled ones"),React.createElement("li",null,"The ",React.createElement("code",null,"view")," parameter allows you to display events in either a list or calendar format. Users can toggle between views using the buttons in the header."),React.createElement("li",null,"Local events are always included by default unless specifically excluded"),React.createElement("li",null,"To include only local events, use ",React.createElement("code",null,'source_ids="local"')),React.createElement("li",null,"To exclude local events, specify only external source IDs (e.g., ",React.createElement("code",null,'source_ids="source_123,source_456"'),")"),React.createElement("li",null,"To include all events (local and external), leave source_ids empty"),React.createElement("li",null,"When ",React.createElement("code",null,'archive="true"'),", only past events that have completely ended will be shown (excludes current and future events)"),React.createElement("li",null,"When ",React.createElement("code",null,'archive="false"')," (default), only upcoming and ongoing events will be shown"),React.createElement("li",null,"Use ",React.createElement("code",null,'order="DESC"')," with ",React.createElement("code",null,'archive="true"')," to show most recent past events first"),React.createElement("li",null,"Use ",React.createElement("code",null,'order="ASC"')," (default) to show events in chronological order (earliest first)"),React.createElement("li",null,"The ",React.createElement("code",null,"timezone")," parameter ensures date filtering is accurate across different time zones"),React.createElement("li",null,"Events are loaded using infinite scroll automatically as the user scrolls down the page"))),React.createElement("div",{className:"card",id:"event-form"},React.createElement("h2",null,"Event Submission Form Shortcode"),React.createElement("p",null,"The Event Submission Form Shortcode allows users to submit new events to your site. The form includes fields for event name, type, start date, end date, and more."),React.createElement("p",null,"When a new event is submitted, an email notification will be sent to the email addresses configured in the plugin settings. Multiple email addresses can be specified, separated by commas or semicolons."),React.createElement("h3",null,"Shortcode"),React.createElement("code",null,"[mayo_event_form]"),React.createElement("h3",null,"Default Required Fields"),React.createElement("p",null,"The following fields are always required and cannot be overridden:"),React.createElement("ul",null,React.createElement("li",null,"Event Name (event_name)"),React.createElement("li",null,"Event Type (event_type)"),React.createElement("li",null,"Service Body (service_body)"),React.createElement("li",null,"Email (email)"),React.createElement("li",null,"Start Date (event_start_date)"),React.createElement("li",null,"Start Time (event_start_time)"),React.createElement("li",null,"End Date (event_end_date)"),React.createElement("li",null,"End Time (event_end_time)"),React.createElement("li",null,"Timezone (timezone)")),React.createElement("h3",null,"Optional Parameters"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Parameter"),React.createElement("th",null,"Description"),React.createElement("th",null,"Default"),React.createElement("th",null,"Available Fields"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,"additional_required_fields"),React.createElement("td",null,"Comma-separated list of additional fields that should be required"),React.createElement("td",null,"empty (no additional required fields)"),React.createElement("td",null,React.createElement("ul",null,React.createElement("li",null,"description"),React.createElement("li",null,"location_name"),React.createElement("li",null,"location_address"),React.createElement("li",null,"location_details"),React.createElement("li",null,"flyer")))),React.createElement("tr",null,React.createElement("td",null,"categories"),React.createElement("td",null,"Comma-separated list of category slugs that should be available in the form. Prefix a category with a minus sign (-) to exclude it."),React.createElement("td",null,"empty (all categories)"),React.createElement("td",null,"e.g., ",React.createElement("pre",null,"meetings,workshops")," to show only meetings and workshops, or ",React.createElement("pre",null,"-meetings,-workshops")," to show all categories except meetings and workshops")),React.createElement("tr",null,React.createElement("td",null,"tags"),React.createElement("td",null,"Comma-separated list of tag slugs that should be available in the form. Prefix a tag with a minus sign (-) to exclude it. Tag slugs are always compared in lowercase."),React.createElement("td",null,"empty (all tags)"),React.createElement("td",null,"e.g., ",React.createElement("pre",null,"featured,ticketed")," to show only featured and ticketed tags, or ",React.createElement("pre",null,"-featured,-ticketed")," to show all tags except featured and ticketed")),React.createElement("tr",null,React.createElement("td",null,"default_service_bodies"),React.createElement("td",null,"Comma-separated list of service body IDs to restrict the form to specific service bodies. Perfect for multi-site setups where each site should only allow events for specific service bodies."),React.createElement("td",null,"empty (all service bodies)"),React.createElement("td",null,"e.g., ",React.createElement("pre",null,"1,2,3")," to allow only service bodies 1, 2, and 3, or ",React.createElement("pre",null,"0")," for only Unaffiliated events. If only one service body is specified, the field will be hidden and auto-selected.")))),React.createElement("h3",null,"Examples"),React.createElement("h4",null,"Standard Form with Additional Requirements"),React.createElement("pre",null,React.createElement("code",null,'[mayo_event_form additional_required_fields="flyer,location_name,location_address" categories="meetings,workshops" tags="featured,-ticketed"]')),React.createElement("h4",null,"Multi-Site Configuration - Restrict to Specific Service Bodies"),React.createElement("pre",null,React.createElement("code",null,'[mayo_event_form default_service_bodies="1,2,5" categories="meetings"]')),React.createElement("p",null,React.createElement("em",null,"Perfect for multi-site setups where each subsite should only allow events for specific service bodies.")),React.createElement("h4",null,"Single Service Body (Auto-Hidden)"),React.createElement("pre",null,React.createElement("code",null,'[mayo_event_form default_service_bodies="3"]')),React.createElement("p",null,React.createElement("em",null,"When only one service body is specified, the service body field is hidden and automatically selected.")),React.createElement("h3",null,"Notes"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,"Default required fields are always enforced"),React.createElement("li",null,"Additional required fields will be marked with an asterisk (*)"),React.createElement("li",null,"Form validation will ensure all required fields are filled"))),React.createElement("div",{className:"card",id:"announcement"},React.createElement("h2",null,"Announcement Shortcode"),React.createElement("p",null,"Use this shortcode to display announcements as banners or modals. Announcements are managed separately from events and are useful for:"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,"Meeting closures or changes"),React.createElement("li",null,"Weather alerts"),React.createElement("li",null,"Breaking news or important updates"),React.createElement("li",null,"Promoting upcoming events (can be linked to events)"),React.createElement("li",null,"Post-event thank you messages")),React.createElement("pre",null,React.createElement("code",null,"[mayo_announcement]")),React.createElement("h3",null,"How It Works"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,"Announcements have their own display window (",React.createElement("code",null,"display_start_date")," and ",React.createElement("code",null,"display_end_date"),")"),React.createElement("li",null,"Can optionally be linked to one or more events"),React.createElement("li",null,"Priority levels (low/normal/high/urgent) affect display order and styling"),React.createElement("li",null,React.createElement("strong",null,"Banner mode:")," Shows a fixed bar at the top of the viewport with carousel navigation for multiple announcements"),React.createElement("li",null,React.createElement("strong",null,"Modal mode:")," Shows a centered popup with a list of all matching announcements"),React.createElement("li",null,"When dismissed, announcements stay hidden for 24 hours but can be re-opened via a bell icon in the bottom-right corner")),React.createElement("h3",null,"Optional Parameters"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Parameter"),React.createElement("th",null,"Description"),React.createElement("th",null,"Default"),React.createElement("th",null,"Options"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,"mode"),React.createElement("td",null,"Display mode for announcements"),React.createElement("td",null,"banner"),React.createElement("td",null,"banner (sticky top bar), modal (popup)")),React.createElement("tr",null,React.createElement("td",null,"categories"),React.createElement("td",null,"Filter by category slugs (comma-separated)"),React.createElement("td",null,"empty (all categories)"),React.createElement("td",null,"e.g., ",React.createElement("pre",null,"announcements,alerts"))),React.createElement("tr",null,React.createElement("td",null,"category_relation"),React.createElement("td",null,"How to match multiple categories: AND (must have all) or OR (must have any)"),React.createElement("td",null,"OR"),React.createElement("td",null,"AND, OR")),React.createElement("tr",null,React.createElement("td",null,"tags"),React.createElement("td",null,"Filter by tag slugs (comma-separated)"),React.createElement("td",null,"empty (all tags)"),React.createElement("td",null,"e.g., ",React.createElement("pre",null,"urgent,featured")," (include only urgent or featured), ",React.createElement("pre",null,"urgent+featured")," (is an and condition), or ",React.createElement("pre",null,"-urgent,-featured")," (exclude urgent and featured)")),React.createElement("tr",null,React.createElement("td",null,"priority"),React.createElement("td",null,"Filter by priority level"),React.createElement("td",null,"empty (all priorities)"),React.createElement("td",null,"low, normal, high, urgent")),React.createElement("tr",null,React.createElement("td",null,"show_linked_events"),React.createElement("td",null,"Show linked event titles with the announcement"),React.createElement("td",null,"false"),React.createElement("td",null,"true, false")),React.createElement("tr",null,React.createElement("td",null,"time_format"),React.createElement("td",null,"Format for displaying time"),React.createElement("td",null,"12hour"),React.createElement("td",null,"12hour, 24hour")),React.createElement("tr",null,React.createElement("td",null,"background_color"),React.createElement("td",null,"Custom background color for the banner/modal header/bell icon"),React.createElement("td",null,"empty (uses CSS default)"),React.createElement("td",null,"Any hex color, e.g., ",React.createElement("pre",null,"#ff6600"))),React.createElement("tr",null,React.createElement("td",null,"text_color"),React.createElement("td",null,"Custom text color for the banner/modal header/bell icon"),React.createElement("td",null,"empty (uses CSS default)"),React.createElement("td",null,"Any hex color, e.g., ",React.createElement("pre",null,"#ffffff"))),React.createElement("tr",null,React.createElement("td",null,"orderby"),React.createElement("td",null,"Field to sort announcements by"),React.createElement("td",null,"date"),React.createElement("td",null,"date (display start date), title (alphabetical), created (post creation date)")),React.createElement("tr",null,React.createElement("td",null,"order"),React.createElement("td",null,"Sort direction"),React.createElement("td",null,"DESC for date/created, ASC for title"),React.createElement("td",null,"ASC (ascending), DESC (descending)")))),React.createElement("h3",null,"Examples"),React.createElement("h4",null,"Default Banner Mode"),React.createElement("pre",null,React.createElement("code",null,"[mayo_announcement]")),React.createElement("h4",null,"Modal Popup"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement mode="modal"]')),React.createElement("h4",null,"Filter by Category"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement categories="announcements,alerts"]')),React.createElement("h4",null,"Show Only Urgent Announcements"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement priority="urgent"]')),React.createElement("h4",null,"Show Linked Events"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement show_linked_events="true"]')),React.createElement("h4",null,"Combined Parameters"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement mode="banner" categories="announcements" tags="urgent" priority="high" time_format="24hour"]')),React.createElement("h4",null,"Custom Colors"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement background_color="#ff6600" text_color="#ffffff"]')),React.createElement("h4",null,"Red Alert Style"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement background_color="#dc3545" text_color="#fff" priority="urgent"]')),React.createElement("h4",null,"Sort by Title (Alphabetical)"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement orderby="title"]')),React.createElement("h4",null,"Sort by Created Date (Newest First)"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement orderby="created" order="DESC"]')),React.createElement("h3",null,"Widget Usage"),React.createElement("p",null,"For site-wide announcements without editing templates, use the ",React.createElement("strong",null,'"Mayo Event Announcements"')," widget:"),React.createElement("ol",null,React.createElement("li",null,"Go to ",React.createElement("strong",null,"Appearance → Widgets")),React.createElement("li",null,'Add the "Mayo Event Announcements" widget to any widget area (footer recommended for site-wide display)'),React.createElement("li",null,"Configure the display mode, categories, tags, priority, and time format")),React.createElement("h3",null,"Creating Announcements"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,"Go to ",React.createElement("strong",null,"Mayo → Announcements → Add New")),React.createElement("li",null,"Enter the announcement title and content"),React.createElement("li",null,"Set the ",React.createElement("strong",null,"Display Start Date")," to when you want the announcement to start showing"),React.createElement("li",null,"Set the ",React.createElement("strong",null,"Display End Date")," to when you want the announcement to stop showing"),React.createElement("li",null,"Choose a ",React.createElement("strong",null,"Priority Level")," (urgent announcements appear first)"),React.createElement("li",null,"Optionally ",React.createElement("strong",null,"link to events")," if this announcement relates to specific events")),React.createElement("h3",null,"Linking Events"),React.createElement("p",null,"Announcements can be linked to events in two ways:"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,React.createElement("strong",null,"From the Announcement editor:"),' Search and add events in the "Linked Events" panel'),React.createElement("li",null,React.createElement("strong",null,"From the Event editor:"),' Click "Create Announcement for This Event" in the "Linked Announcements" panel')),React.createElement("h3",null,"Notes"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,"Announcements have independent display windows from events"),React.createElement("li",null,"Use announcements to promote events before they start, or recap after they end"),React.createElement("li",null,"Priority levels: ",React.createElement("strong",null,"urgent")," (red), ",React.createElement("strong",null,"high")," (orange), ",React.createElement("strong",null,"normal")," (blue), ",React.createElement("strong",null,"low")," (gray)"),React.createElement("li",null,"Use categories or tags to control which announcements appear"),React.createElement("li",null,"Multiple announcements are shown as a carousel in banner mode, or as a list in modal mode"))),React.createElement("div",{className:"card",id:"announcement-form"},React.createElement("h2",null,"Announcement Submission Form Shortcode"),React.createElement("p",null,"The Announcement Submission Form Shortcode allows users to submit new announcements to your site. This works similarly to the event form but for announcements."),React.createElement("p",null,'When a new announcement is submitted, an email notification will be sent to the email addresses configured in the plugin settings. The announcement will have a "pending" status until approved by an administrator.'),React.createElement("h3",null,"Shortcode"),React.createElement("code",null,"[mayo_announcement_form]"),React.createElement("h3",null,"Default Required Fields"),React.createElement("p",null,"The following fields are always required:"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,"Announcement Title (title)"),React.createElement("li",null,"Description (description)"),React.createElement("li",null,"Service Body (service_body)"),React.createElement("li",null,"Point of Contact Name (contact_name)"),React.createElement("li",null,"Point of Contact Email (email)")),React.createElement("h3",null,"Optional Fields"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,"Start Date (start_date) - When the announcement should start displaying"),React.createElement("li",null,"Start Time (start_time) - Time of day the announcement should start"),React.createElement("li",null,"End Date (end_date) - When the announcement should stop displaying"),React.createElement("li",null,"End Time (end_time) - Time of day the announcement should end"),React.createElement("li",null,"Image/Flyer (flyer) - An image attachment for the announcement"),React.createElement("li",null,"Categories - Standard WordPress categories"),React.createElement("li",null,"Tags - Standard WordPress tags")),React.createElement("h3",null,"Optional Parameters"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Parameter"),React.createElement("th",null,"Description"),React.createElement("th",null,"Default"),React.createElement("th",null,"Options"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,"additional_required_fields"),React.createElement("td",null,"Comma-separated list of additional fields that should be required"),React.createElement("td",null,"empty (no additional required fields)"),React.createElement("td",null,React.createElement("ul",null,React.createElement("li",null,"start_date"),React.createElement("li",null,"start_time"),React.createElement("li",null,"end_date"),React.createElement("li",null,"end_time"),React.createElement("li",null,"flyer")))),React.createElement("tr",null,React.createElement("td",null,"categories"),React.createElement("td",null,"Comma-separated list of category slugs that should be available in the form. Prefix a category with a minus sign (-) to exclude it."),React.createElement("td",null,"empty (uses subscription settings)"),React.createElement("td",null,"e.g., ",React.createElement("pre",null,"announcements,alerts")," or ",React.createElement("pre",null,"-internal"))),React.createElement("tr",null,React.createElement("td",null,"tags"),React.createElement("td",null,"Comma-separated list of tag slugs that should be available in the form. Prefix a tag with a minus sign (-) to exclude it."),React.createElement("td",null,"empty (uses subscription settings)"),React.createElement("td",null,"e.g., ",React.createElement("pre",null,"urgent,featured")," or ",React.createElement("pre",null,"-archived"))),React.createElement("tr",null,React.createElement("td",null,"default_service_bodies"),React.createElement("td",null,"Comma-separated list of service body IDs to restrict the form to specific service bodies."),React.createElement("td",null,"empty (uses subscription settings)"),React.createElement("td",null,"e.g., ",React.createElement("pre",null,"1,2,3")," or ",React.createElement("pre",null,"0")," for Unaffiliated. If only one is specified, the field is hidden and auto-selected.")),React.createElement("tr",null,React.createElement("td",null,"show_flyer"),React.createElement("td",null,"Show the image/flyer upload field"),React.createElement("td",null,"false"),React.createElement("td",null,"true, false")))),React.createElement("h3",null,"Examples"),React.createElement("h4",null,"Basic Form"),React.createElement("pre",null,React.createElement("code",null,"[mayo_announcement_form]")),React.createElement("h4",null,"With Flyer Upload"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement_form show_flyer="true"]')),React.createElement("h4",null,"With Required Dates"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement_form additional_required_fields="start_date,end_date"]')),React.createElement("h4",null,"Restricted to Specific Service Bodies"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement_form default_service_bodies="1,2,5"]')),React.createElement("h4",null,"Single Service Body (Auto-Hidden)"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement_form default_service_bodies="3"]')),React.createElement("p",null,React.createElement("em",null,"When only one service body is specified, the field is hidden and automatically selected.")),React.createElement("h4",null,"Filter Categories and Tags"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement_form categories="announcements,alerts" tags="urgent,featured"]')),React.createElement("h4",null,"Full Configuration"),React.createElement("pre",null,React.createElement("code",null,'[mayo_announcement_form show_flyer="true" additional_required_fields="start_date,end_date,flyer" default_service_bodies="1,2" categories="announcements"]')),React.createElement("h3",null,"Notes"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,"Categories, tags, and service bodies are filtered by subscription settings configured in ",React.createElement("strong",null,"Mayo → Settings → Subscription Preferences")),React.createElement("li",null,"Shortcode parameters further restrict the available options (intersection of both)"),React.createElement("li",null,"Contact name and email are private fields used for admin communication only"),React.createElement("li",null,'Submitted announcements are set to "pending" status and require admin approval'),React.createElement("li",null,"Admin receives email notification when new announcements are submitted"),React.createElement("li",null,"Start/end dates correspond to the announcement's display window"))),React.createElement("div",{className:"card",id:"subscribe"},React.createElement("h2",null,"Email Subscription Form Shortcode"),React.createElement("p",null,"Use this shortcode to display an email subscription form. Users can subscribe to receive announcement notifications via email:"),React.createElement("pre",null,React.createElement("code",null,"[mayo_subscribe]")),React.createElement("h3",null,"How It Works"),React.createElement("ol",{style:{marginLeft:"20px",lineHeight:"1.8"}},React.createElement("li",null,React.createElement("strong",null,"User enters email:")," A simple form with an email input field"),React.createElement("li",null,React.createElement("strong",null,"Confirmation email sent:")," User receives an email with a confirmation link (double opt-in)"),React.createElement("li",null,React.createElement("strong",null,"User confirms:")," Clicking the link activates their subscription"),React.createElement("li",null,React.createElement("strong",null,"Receive announcements:")," When announcements are published, subscribers get an email with the full content"),React.createElement("li",null,React.createElement("strong",null,"Easy unsubscribe:")," Each email includes a one-click unsubscribe link")),React.createElement("h3",null,"Features"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,React.createElement("strong",null,"Double opt-in:")," Confirmation email ensures valid addresses and prevents spam"),React.createElement("li",null,React.createElement("strong",null,"Full content delivery:")," Announcement emails include the complete content plus a link to view on site"),React.createElement("li",null,React.createElement("strong",null,"Token-based security:")," Unsubscribe links use cryptographically secure tokens (no login required)"),React.createElement("li",null,React.createElement("strong",null,"Spam folder reminder:")," Users are reminded to check spam/junk folders for the confirmation email"),React.createElement("li",null,React.createElement("strong",null,"Re-subscription support:")," Previously unsubscribed users can re-subscribe")),React.createElement("h3",null,"Example"),React.createElement("pre",null,React.createElement("code",null,"[mayo_subscribe]")),React.createElement("h3",null,"Email Flow"),React.createElement("h4",null,"Confirmation Email"),React.createElement("p",null,"Sent immediately when a user subscribes:"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,'Subject: "Please confirm your subscription to [Site Name] announcements"'),React.createElement("li",null,"Contains a unique confirmation link"),React.createElement("li",null,"Includes note about checking spam folder")),React.createElement("h4",null,"Announcement Email"),React.createElement("p",null,"Sent to all confirmed subscribers when an announcement is published:"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,'Subject: "[Site Name] [Announcement Title]"'),React.createElement("li",null,"Full announcement content in plain text"),React.createElement("li",null,"Link to view on site"),React.createElement("li",null,"One-click unsubscribe link")),React.createElement("h3",null,"Notes"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,"Emails are sent using WordPress's ",React.createElement("code",null,"wp_mail()")," function"),React.createElement("li",null,'The "From" address uses your WordPress email settings'),React.createElement("li",null,"Subscribers are stored in a custom database table (",React.createElement("code",null,"wp_mayo_subscribers"),")"),React.createElement("li",null,"Emails are only sent when announcements are first published (not on updates)"),React.createElement("li",null,"The preferences column is reserved for future filtering options"))))},n=wp.components;function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function l(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",c=n.toStringTag||"@@toStringTag";function o(n,a,l,c){var o=a&&a.prototype instanceof s?a:s,u=Object.create(o.prototype);return r(u,"_invoke",function(n,a,l){var r,c,o,s=0,u=l||[],m=!1,d={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,n){return r=t,c=0,o=e,d.n=n,i}};function p(n,a){for(c=n,o=a,t=0;!m&&s&&!l&&t<u.length;t++){var l,r=u[t],p=d.p,E=r[2];n>3?(l=E===a)&&(o=r[(c=r[4])?5:(c=3,3)],r[4]=r[5]=e):r[0]<=p&&((l=n<2&&p<r[1])?(c=0,d.v=a,d.n=r[1]):p<E&&(l=n<3||r[0]>a||a>E)&&(r[4]=n,r[5]=a,d.n=E,c=0))}if(l||n>1)return i;throw m=!0,a}return function(l,u,E){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&p(u,E),c=u,o=E;(t=c<2?e:o)||!m;){r||(c?c<3?(c>1&&(d.n=-1),p(c,o)):d.n=o:d.v=o);try{if(s=2,r){if(c||(l="next"),t=r[l]){if(!(t=t.call(r,o)))throw TypeError("iterator result is not an object");if(!t.done)return t;o=t.value,c<2&&(c=0)}else 1===c&&(t=r.return)&&t.call(r),c<2&&(o=TypeError("The iterator does not provide a '"+l+"' method"),c=1);r=e}else if((t=(m=d.n<0)?o:n.call(a,d))!==i)break}catch(t){r=e,c=1,o=t}finally{s=1}}return{value:t,done:m}}}(n,l,c),!0),u}var i={};function s(){}function u(){}function m(){}t=Object.getPrototypeOf;var d=[][a]?t(t([][a]())):(r(t={},a,function(){return this}),t),p=m.prototype=s.prototype=Object.create(d);function E(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,m):(e.__proto__=m,r(e,c,"GeneratorFunction")),e.prototype=Object.create(p),e}return u.prototype=m,r(p,"constructor",m),r(m,"constructor",u),u.displayName="GeneratorFunction",r(m,c,"GeneratorFunction"),r(p),r(p,c,"Generator"),r(p,a,function(){return this}),r(p,"toString",function(){return"[object Generator]"}),(l=function(){return{w:o,m:E}})()}function r(e,t,n,a){var l=Object.defineProperty;try{l({},"",{})}catch(e){l=0}r=function(e,t,n,a){function c(t,n){r(e,t,function(e){return this._invoke(t,n,e)})}t?l?l(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(c("next",0),c("throw",1),c("return",2))},r(e,t,n,a)}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?c(Object(n),!0).forEach(function(t){i(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):c(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function i(e,t,n){return(t=function(e){var t=function(e){if("object"!=a(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=a(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==a(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t,n,a,l,r,c){try{var o=e[r](c),i=o.value}catch(e){return void n(e)}o.done?t(i):Promise.resolve(i).then(a,l)}var u=function(){var e,t=(e=l().m(function e(t){var n,a,r,c,i,s,u,m,d,p=arguments;return l().w(function(e){for(;;)switch(e.p=e.n){case 0:return r=p.length>1&&void 0!==p[1]?p[1]:{},(c=(null===(n=window.mayoApiSettings)||void 0===n?void 0:n.root)||(null===(a=window.wpApiSettings)||void 0===a?void 0:a.root)||"/wp-json/").endsWith("/")||(c+="/"),i="".concat(c,"event-manager/v1").concat(t),s="",window.mayoApiSettings&&window.mayoApiSettings.nonce?s=window.mayoApiSettings.nonce:window.wpApiSettings&&window.wpApiSettings.nonce&&(s=window.wpApiSettings.nonce),u=o(o({},{credentials:"same-origin",headers:{"Content-Type":"application/json","X-WP-Nonce":s}}),r),e.p=1,e.n=2,fetch(i,u);case 2:if((m=e.v).ok){e.n=3;break}throw new Error("API error: ".concat(m.status," ").concat(m.statusText));case 3:return e.n=4,m.json();case 4:return e.a(2,e.v);case 5:throw e.p=5,d=e.v,console.error("API fetch error:",d),d;case 6:return e.a(2)}},e,null,[[1,5]])}),function(){var t=this,n=arguments;return new Promise(function(a,l){var r=e.apply(t,n);function c(e){s(r,a,l,c,o,"next",e)}function o(e){s(r,a,l,c,o,"throw",e)}c(void 0)})});return function(e){return t.apply(this,arguments)}}();function m(e){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},m(e)}function d(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",l=n.toStringTag||"@@toStringTag";function r(n,a,l,r){var i=a&&a.prototype instanceof o?a:o,s=Object.create(i.prototype);return p(s,"_invoke",function(n,a,l){var r,o,i,s=0,u=l||[],m=!1,d={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,n){return r=t,o=0,i=e,d.n=n,c}};function p(n,a){for(o=n,i=a,t=0;!m&&s&&!l&&t<u.length;t++){var l,r=u[t],p=d.p,E=r[2];n>3?(l=E===a)&&(i=r[(o=r[4])?5:(o=3,3)],r[4]=r[5]=e):r[0]<=p&&((l=n<2&&p<r[1])?(o=0,d.v=a,d.n=r[1]):p<E&&(l=n<3||r[0]>a||a>E)&&(r[4]=n,r[5]=a,d.n=E,o=0))}if(l||n>1)return c;throw m=!0,a}return function(l,u,E){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&p(u,E),o=u,i=E;(t=o<2?e:i)||!m;){r||(o?o<3?(o>1&&(d.n=-1),p(o,i)):d.n=i:d.v=i);try{if(s=2,r){if(o||(l="next"),t=r[l]){if(!(t=t.call(r,i)))throw TypeError("iterator result is not an object");if(!t.done)return t;i=t.value,o<2&&(o=0)}else 1===o&&(t=r.return)&&t.call(r),o<2&&(i=TypeError("The iterator does not provide a '"+l+"' method"),o=1);r=e}else if((t=(m=d.n<0)?i:n.call(a,d))!==c)break}catch(t){r=e,o=1,i=t}finally{s=1}}return{value:t,done:m}}}(n,l,r),!0),s}var c={};function o(){}function i(){}function s(){}t=Object.getPrototypeOf;var u=[][a]?t(t([][a]())):(p(t={},a,function(){return this}),t),m=s.prototype=o.prototype=Object.create(u);function E(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,p(e,l,"GeneratorFunction")),e.prototype=Object.create(m),e}return i.prototype=s,p(m,"constructor",s),p(s,"constructor",i),i.displayName="GeneratorFunction",p(s,l,"GeneratorFunction"),p(m),p(m,l,"Generator"),p(m,a,function(){return this}),p(m,"toString",function(){return"[object Generator]"}),(d=function(){return{w:r,m:E}})()}function p(e,t,n,a){var l=Object.defineProperty;try{l({},"",{})}catch(e){l=0}p=function(e,t,n,a){function r(t,n){p(e,t,function(e){return this._invoke(t,n,e)})}t?l?l(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(r("next",0),r("throw",1),r("return",2))},p(e,t,n,a)}function E(e,t,n,a,l,r,c){try{var o=e[r](c),i=o.value}catch(e){return void n(e)}o.done?t(i):Promise.resolve(i).then(a,l)}function f(e){return function(){var t=this,n=arguments;return new Promise(function(a,l){var r=e.apply(t,n);function c(e){E(r,a,l,c,o,"next",e)}function o(e){E(r,a,l,c,o,"throw",e)}c(void 0)})}}function R(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,l,r,c,o=[],i=!0,s=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(a=r.call(n)).done)&&(o.push(a.value),o.length!==t);i=!0);}catch(e){s=!0,l=e}finally{try{if(!i&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw l}}return o}}(e,t)||b(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?v(Object(n),!0).forEach(function(t){g(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):v(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function g(e,t,n){return(t=function(e){var t=function(e){if("object"!=m(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=m(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==m(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function h(e){return function(e){if(Array.isArray(e))return _(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||b(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function b(e,t){if(e){if("string"==typeof e)return _(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_(e,t):void 0}}function _(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var S=function(e){if(!e)return!1;try{return"https:"===new URL(e).protocol}catch(e){return!1}},w=function(e){return!e||e.split(/[,;]/).map(function(e){return e.trim()}).filter(function(e){return e}).every(function(e){return function(e){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)}(e)})};const x=function(){var t=R((0,e.useState)({bmlt_root_server:"",notification_email:"",default_service_bodies:""}),2),a=t[0],l=t[1],r=R((0,e.useState)(!0),2),c=r[0],o=r[1],i=R((0,e.useState)(!1),2),s=i[0],m=i[1],p=R((0,e.useState)(null),2),E=p[0],v=p[1],b=R((0,e.useState)(null),2),_=b[0],x=b[1],k=R((0,e.useState)([]),2),C=k[0],T=k[1],A=R((0,e.useState)(null),2),N=A[0],P=A[1],O=R((0,e.useState)(null),2),D=O[0],j=O[1],B=R((0,e.useState)(!1),2),M=B[0],L=B[1],I=R((0,e.useState)({subscription_categories:[],subscription_tags:[],subscription_service_bodies:[],subscription_new_option_behavior:"auto_include"}),2),F=I[0],z=I[1],G=R((0,e.useState)([]),2),U=G[0],W=G[1],H=R((0,e.useState)([]),2),Y=H[0],q=H[1],J=R((0,e.useState)([]),2),$=J[0],K=J[1];(0,e.useEffect)(function(){var e=function(){var e=f(d().m(function e(){var t,n,a,r,c,i,s,m,p,E;return d().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,o(!0),v(null),e.n=1,u("/settings");case 1:return t=e.v,l({bmlt_root_server:t.bmlt_root_server||"",notification_email:t.notification_email||"",default_service_bodies:t.default_service_bodies||"",server_info:t.server_info||null}),T(Array.isArray(t.external_sources)?t.external_sources:[]),z({subscription_categories:t.subscription_categories||[],subscription_tags:t.subscription_tags||[],subscription_service_bodies:t.subscription_service_bodies||[],subscription_new_option_behavior:t.subscription_new_option_behavior||"opt_in"}),e.p=2,e.n=3,fetch("/wp-json/wp/v2/categories?per_page=100");case 3:if(!(n=e.v).ok){e.n=5;break}return e.n=4,n.json();case 4:a=e.v,W(a.map(function(e){return{id:e.id,name:e.name}}));case 5:e.n=7;break;case 6:e.p=6,m=e.v,console.error("Failed to load categories:",m);case 7:return e.p=7,e.n=8,fetch("/wp-json/wp/v2/tags?per_page=100");case 8:if(!(r=e.v).ok){e.n=10;break}return e.n=9,r.json();case 9:c=e.v,q(c.map(function(e){return{id:e.id,name:e.name}}));case 10:e.n=12;break;case 11:e.p=11,p=e.v,console.error("Failed to load tags:",p);case 12:if(!t.bmlt_root_server){e.n=18;break}return e.p=13,e.n=14,fetch(t.bmlt_root_server+"/client_interface/json/?switcher=GetServiceBodies");case 14:if(!(i=e.v).ok){e.n=16;break}return e.n=15,i.json();case 15:s=e.v,K(s.map(function(e){return{id:e.id,name:e.name,parent_id:e.parent_id||"0"}}));case 16:e.n=18;break;case 17:e.p=17,E=e.v,console.error("Failed to load service bodies:",E);case 18:e.n=20;break;case 19:e.p=19,e.v,v("Failed to load settings. Please refresh the page and try again.");case 20:return e.p=20,o(!1),e.f(20);case 21:return e.a(2)}},e,null,[[13,17],[7,11],[2,6],[0,19,20,21]])}));return function(){return e.apply(this,arguments)}}();e()},[]);var V=function(e,t){l(function(n){return y(y({},n),{},g({},e,t))})},Z=function(){var e=f(d().m(function e(){var t,n,l,r;return d().w(function(e){for(;;)switch(e.p=e.n){case 0:if(e.p=0,m(!0),v(null),S(D.url)){e.n=1;break}throw new Error("External source URL must use HTTPS protocol.");case 1:return t=y(y({},D),{},{event_type:D.event_type||""}),n=h(C),null!==N?n[N]=t:M&&n.push(t),e.n=2,u("/settings",{method:"POST",body:JSON.stringify(y(y({},a),{},{external_sources:n}))});case 2:l=e.v,T(l.settings.external_sources),j(null),P(null),L(!1),x("External source saved successfully!"),setTimeout(function(){return x(null)},3e3),e.n=4;break;case 3:e.p=3,r=e.v,v(r.message||"Failed to save external source.");case 4:return e.p=4,m(!1),e.f(4);case 5:return e.a(2)}},e,null,[[0,3,4,5]])}));return function(){return e.apply(this,arguments)}}(),Q=function(){var e=f(d().m(function e(t){var n;return d().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,navigator.clipboard.writeText(t);case 1:e.n=3;break;case 2:e.p=2,e.v,(n=document.createElement("textarea")).value=t,document.body.appendChild(n),n.select();try{document.execCommand("copy")}catch(e){}document.body.removeChild(n);case 3:return e.a(2)}},e,null,[[0,2]])}));return function(t){return e.apply(this,arguments)}}(),X=function(){var e=f(d().m(function e(t){var n;return d().w(function(e){for(;;)switch(e.p=e.n){case 0:if(confirm("Are you sure you want to delete this external source?")){e.n=1;break}return e.a(2);case 1:return e.p=1,m(!0),n=C.filter(function(e,n){return n!==t}),e.n=2,u("/settings",{method:"POST",body:JSON.stringify(y(y({},a),{},{external_sources:n}))});case 2:T(n),j(null),P(null),L(!1),x("External source deleted successfully!"),setTimeout(function(){return x(null)},3e3),e.n=4;break;case 3:e.p=3,e.v,v("Failed to delete external source.");case 4:return e.p=4,m(!1),e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}));return function(t){return e.apply(this,arguments)}}(),ee=function(e,t){z(function(n){var a=n[e]||[],l=a.includes(t);return y(y({},n),{},g({},e,l?a.filter(function(e){return e!==t}):[].concat(h(a),[t])))})},te=function(){var e=f(d().m(function e(){var t;return d().w(function(e){for(;;)switch(e.p=e.n){case 0:if(e.p=0,m(!0),v(null),S(a.bmlt_root_server)){e.n=1;break}throw new Error("BMLT Root Server URL must use HTTPS protocol.");case 1:if(!a.notification_email||w(a.notification_email)){e.n=2;break}throw new Error("Please enter valid email addresses for notifications. Multiple emails can be separated by commas or semicolons.");case 2:return e.n=3,u("/settings",{method:"POST",body:JSON.stringify({bmlt_root_server:a.bmlt_root_server,notification_email:a.notification_email,default_service_bodies:a.default_service_bodies,external_sources:C,subscription_categories:F.subscription_categories,subscription_tags:F.subscription_tags,subscription_service_bodies:F.subscription_service_bodies,subscription_new_option_behavior:F.subscription_new_option_behavior})});case 3:e.v,x("Settings saved successfully!"),setTimeout(function(){return x(null)},3e3),e.n=5;break;case 4:e.p=4,t=e.v,v(t.message||"Failed to save settings.");case 5:return e.p=5,m(!1),e.f(5);case 6:return e.a(2)}},e,null,[[0,4,5,6]])}));return function(){return e.apply(this,arguments)}}();return c?React.createElement("div",{className:"mayo-settings-loading"},React.createElement(n.Spinner,null)," Loading settings..."):React.createElement("div",{className:"mayo-settings-page"},React.createElement("h1",null,"Mayo Events Manager Settings"),React.createElement(n.Notice,{status:"warning",isDismissible:!1},React.createElement("p",null,React.createElement("strong",null,"Important:"),' This plugin requires Pretty Permalinks to be enabled for the REST API to function correctly. If you\'re experiencing 404 errors when accessing external source or settings BMLT server, please ensure your WordPress site is using Pretty Permalinks (Settings → Permalinks) and not the "Plain" setting.')),a.server_info&&!a.server_info.curl_available&&React.createElement(n.Notice,{status:"warning",isDismissible:!1},React.createElement("p",null,React.createElement("strong",null,"Performance Warning:")," The PHP curl extension is not installed. External source requests will be significantly slower. Ask your hosting provider to install the php-curl extension for PHP ",a.server_info.php_version,".")),a.server_info&&a.server_info.curl_available&&React.createElement(n.Notice,{status:"success",isDismissible:!1},React.createElement("p",null,"PHP ",a.server_info.php_version," with curl ",a.server_info.curl_version," detected.")),E&&React.createElement(n.Notice,{status:"error",isDismissible:!0,onRemove:function(){return v(null)}},E),_&&React.createElement(n.Notice,{status:"success",isDismissible:!0,onRemove:function(){return x(null)}},_),React.createElement(n.Panel,null,React.createElement(n.PanelBody,{title:"BMLT Settings",initialOpen:!0},React.createElement(n.PanelRow,null,React.createElement(n.TextControl,{label:"BMLT Root Server URL",value:a.bmlt_root_server,onChange:function(e){return V("bmlt_root_server",e)},help:a.bmlt_root_server&&!S(a.bmlt_root_server)?"URL must start with 'https://'":"Enter the URL of your BMLT root server (e.g., https://bmlt.example.org/main_server)",className:a.bmlt_root_server&&!S(a.bmlt_root_server)?"mayo-invalid-url":"",__next40pxDefaultSize:!0})),React.createElement(n.PanelRow,null,React.createElement(n.TextControl,{label:"Notification Email",value:a.notification_email,onChange:function(e){return V("notification_email",e)},help:a.notification_email&&!w(a.notification_email)?"Please enter valid email addresses. Multiple emails can be separated by commas or semicolons.":"Email addresses to receive event submission notifications. Multiple emails can be separated by commas or semicolons. Leave empty to send to all admins.",className:a.notification_email&&!w(a.notification_email)?"mayo-invalid-email":"",__next40pxDefaultSize:!0}))),React.createElement(n.PanelBody,{title:"Service Body Configuration",initialOpen:!0},React.createElement(n.PanelRow,null,React.createElement(n.TextControl,{label:"Restricted Service Bodies",value:a.default_service_bodies,onChange:function(e){return V("default_service_bodies",e)},help:"Comma-separated list of service body IDs (e.g., 1,2,3). When specified, only these service bodies will be available for event submission. Leave empty to allow all service bodies. Use '0' for Unaffiliated. Perfect for multi-site setups where each site should only show specific service bodies.",placeholder:"e.g., 1,2,3,0",__next40pxDefaultSize:!0})),React.createElement(n.PanelRow,null,React.createElement(n.Button,{isPrimary:!0,onClick:te,isBusy:s,disabled:s||a.bmlt_root_server&&!S(a.bmlt_root_server)||a.notification_email&&!w(a.notification_email)},s?"Saving...":"Save Settings")))),React.createElement(n.Panel,null,React.createElement(n.PanelBody,{title:"External Event Sources",initialOpen:!0},React.createElement("div",{className:"mayo-external-sources-list"},C.map(function(e,t){return React.createElement("div",{key:e.id,className:"mayo-external-source-item"},React.createElement("div",{className:"mayo-external-source-info"},React.createElement("strong",null,e.name||e.url),React.createElement("div",{className:"mayo-external-source-details"},React.createElement("div",{className:"mayo-source-id-row"},React.createElement("code",{className:"mayo-source-id"},e.id),React.createElement("button",{className:"mayo-copy-id",onClick:function(){return Q(e.id)},title:"Copy ID"},"Copy ID to clipboard")),React.createElement("div",{className:"mayo-source-meta"},React.createElement("span",null,"Type: ",e.event_type||"All"),e.service_body&&React.createElement("span",null,"Service Body: ",e.service_body),React.createElement("span",{className:"mayo-source-status ".concat(e.enabled?"enabled":"disabled")},e.enabled?"Enabled":"Disabled")))),React.createElement("div",{className:"mayo-external-source-actions"},React.createElement(n.Button,{isSecondary:!0,onClick:function(){return function(e,t){j(e),P(t)}(e,t)}},"Edit"),React.createElement(n.Button,{isDestructive:!0,onClick:function(){return X(t)}},"Delete")))})),React.createElement("div",{className:"mayo-external-sources-actions"},React.createElement(n.Button,{isPrimary:!0,onClick:function(){j({id:"",name:"",url:"",event_type:"",service_body:"",categories:"",tags:"",enabled:!0}),L(!0)},className:"mayo-add-source-button",disabled:M||null!==N},"Add New External Source")),(M||null!==N)&&D&&React.createElement("div",{className:"mayo-external-source-form"},React.createElement(n.TextControl,{label:"Site URL",value:D.url,onChange:function(e){return j(y(y({},D),{},{url:e}))},help:"Enter the URL of the WordPress site (e.g., https://example.com)",__next40pxDefaultSize:!0}),React.createElement(n.TextControl,{label:"Source Name",value:D.name,onChange:function(e){return j(y(y({},D),{},{name:e}))},help:"Enter a friendly name for this source (e.g., District 5 Website)",__next40pxDefaultSize:!0}),React.createElement(n.SelectControl,{label:"Event Type",value:D.event_type||"",options:[{label:"All Event Types",value:""},{label:"Activity",value:"Activity"},{label:"Service",value:"Service"}],onChange:function(e){j(y(y({},D),{},{event_type:e}))},help:"Select the event type",__next40pxDefaultSize:!0}),React.createElement(n.TextControl,{label:"Service Body",value:D.service_body,onChange:function(e){return j(y(y({},D),{},{service_body:e}))},help:"Filter by service body (optional)",__next40pxDefaultSize:!0}),React.createElement(n.TextControl,{label:"Categories",value:D.categories,onChange:function(e){return j(y(y({},D),{},{categories:e}))},help:"Filter by categories (comma-separated)",__next40pxDefaultSize:!0}),React.createElement(n.TextControl,{label:"Tags",value:D.tags,onChange:function(e){return j(y(y({},D),{},{tags:e}))},help:"Filter by tags (comma-separated)",__next40pxDefaultSize:!0}),React.createElement(n.ToggleControl,{label:"Enable Source",checked:D.enabled,onChange:function(e){return j(y(y({},D),{},{enabled:e}))}}),React.createElement("div",{className:"mayo-form-actions"},React.createElement(n.Button,{isPrimary:!0,onClick:Z,isBusy:s},s?"Saving...":"Save Source"),React.createElement(n.Button,{isSecondary:!0,onClick:function(){j(null),P(null),L(!1)}},"Cancel"))))),React.createElement(n.Panel,null,React.createElement(n.PanelBody,{title:"Subscription Preferences",initialOpen:!0},React.createElement("p",{className:"mayo-settings-description"},"Configure which categories, tags, and service bodies are available for subscribers to choose from when signing up for announcement notifications."),U.length>0&&React.createElement("div",{className:"mayo-subscription-section"},React.createElement("h4",null,"Categories available for subscription:"),React.createElement("div",{className:"mayo-checkbox-list",style:{border:"1px solid #ddd",borderRadius:"4px",background:"#fff",padding:"12px 16px",maxHeight:"300px",overflowY:"auto"}},U.map(function(e){return React.createElement(n.CheckboxControl,{key:e.id,label:e.name,checked:F.subscription_categories.includes(e.id),onChange:function(){return ee("subscription_categories",e.id)}})}))),Y.length>0&&React.createElement("div",{className:"mayo-subscription-section"},React.createElement("h4",null,"Tags available for subscription:"),React.createElement("div",{className:"mayo-checkbox-list",style:{border:"1px solid #ddd",borderRadius:"4px",background:"#fff",padding:"12px 16px",maxHeight:"300px",overflowY:"auto"}},Y.map(function(e){return React.createElement(n.CheckboxControl,{key:e.id,label:e.name,checked:F.subscription_tags.includes(e.id),onChange:function(){return ee("subscription_tags",e.id)}})}))),$.length>0&&React.createElement("div",{className:"mayo-subscription-section"},React.createElement("h4",null,"Service Bodies available for subscription:"),React.createElement("div",{className:"mayo-service-body-tree"},function(e){var t=h(e).sort(function(e,t){return e.name.localeCompare(t.name)}),n={},a=[];t.forEach(function(e){n[e.id]=[]}),t.forEach(function(e){var t=String(e.parent_id);"0"!==t&&n[t]?n[t].push(e):a.push(e)});var l=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,a=[];return e.forEach(function(e){var r;a.push(y(y({},e),{},{depth:t})),(null===(r=n[e.id])||void 0===r?void 0:r.length)>0&&(a=a.concat(l(n[e.id],t+1)))}),a};return l(a)}($).map(function(e){return React.createElement("div",{key:e.id,className:"mayo-tree-item",style:{paddingLeft:"".concat(24*e.depth,"px")}},React.createElement(n.CheckboxControl,{label:"".concat(e.name," (").concat(e.id,")"),checked:F.subscription_service_bodies.includes(e.id),onChange:function(){return ee("subscription_service_bodies",e.id)}}))}))),React.createElement("div",{className:"mayo-subscription-section"},React.createElement("h4",null,"When new options are added:"),React.createElement(n.RadioControl,{selected:F.subscription_new_option_behavior,options:[{label:"Auto-include: Automatically add to existing subscribers",value:"auto_include"},{label:"Opt-in: Existing subscribers must manually add new options",value:"opt_in"}],onChange:function(e){return function(e,t){z(function(e){return y(y({},e),{},g({},"subscription_new_option_behavior",t))})}(0,e)}})),React.createElement(n.PanelRow,null,React.createElement(n.Button,{isPrimary:!0,onClick:te,isBusy:s,disabled:s||a.bmlt_root_server&&!S(a.bmlt_root_server)||a.notification_email&&!w(a.notification_email)},s?"Saving...":"Save Settings")))))};function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}const C=function(){var t,n,a=(t=(0,e.useState)((new Date).toLocaleString()),n=1,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,l,r,c,o=[],i=!0,s=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(a=r.call(n)).done)&&(o.push(a.value),o.length!==t);i=!0);}catch(e){s=!0,l=e}finally{try{if(!i&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw l}}return o}}(t,n)||function(e,t){if(e){if("string"==typeof e)return k(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?k(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];return React.createElement("div",{className:"wrap mayo-docs"},React.createElement("h1",null,"CSS Classes Documentation"),React.createElement("div",{className:"card"},React.createElement("div",{className:"mayo-docs-header"},React.createElement("h2",null,"Dynamic CSS Classes"),React.createElement("div",{className:"mayo-docs-meta"},React.createElement("span",{className:"mayo-docs-last-updated"},"Last updated: ",a))),React.createElement("div",{className:"notice notice-warning"},React.createElement("p",null,React.createElement("strong",null,"Important:"),' This plugin does not include a built-in CSS editor. To style the event cards, you need to use another plugin like "Simple Custom CSS" or add CSS to your theme\'s stylesheet.')),React.createElement("p",null,"This documentation explains the dynamic CSS classes used in the Event Card and Calendar View components. These classes are generated based on event properties and can be used to style specific events."),React.createElement("div",{className:"mayo-tab-content"},React.createElement("h3",null,"Dynamic Classes"),React.createElement("p",null,"These classes are dynamically generated based on event properties:"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Class Pattern"),React.createElement("th",null,"Based On"),React.createElement("th",null,"Example"))),React.createElement("tbody",null,[{pattern:"mayo-event-category-{category-slug}",baseName:"mayo-event-category",description:"Class for event categories"},{pattern:"mayo-event-tag-{tag-slug}",baseName:"mayo-event-tag",description:"Class for event tags"},{pattern:"mayo-event-type-{event-type-slug}",baseName:"mayo-event-type",description:"Class for event types"},{pattern:"mayo-event-service-body-{service-body-slug}",baseName:"mayo-event-service-body",description:"Class for service bodies"}].map(function(e,t){var n="",a="";return e.baseName.includes("category")?(n="Event categories",a="mayo-event-category-meetings"):e.baseName.includes("tag")?(n="Event tags",a="mayo-event-tag-featured"):e.baseName.includes("type")?(n="Event type",a="mayo-event-type-service"):e.baseName.includes("service-body")&&(n="Service body",a="mayo-event-service-body-district-1"),React.createElement("tr",{key:t},React.createElement("td",null,React.createElement("code",null,e.pattern)),React.createElement("td",null,n),React.createElement("td",null,React.createElement("code",null,a)))}))),React.createElement("h4",null,"Special Characters Handling"),React.createElement("p",null,"Special characters and emojis in category, tag, event type, and service body names are converted to Unicode codes to ensure valid CSS class names:"),React.createElement("pre",null,React.createElement("code",null,'// Example: "Meeting 🎉" becomes "mayo-event-category-meeting-u127881"')),React.createElement("h4",null,"Small Variants"),React.createElement("p",null,"Categories and tags in the event brief section use small variants:"),React.createElement("ul",null,React.createElement("li",null,React.createElement("code",null,"mayo-event-category-small")),React.createElement("li",null,React.createElement("code",null,"mayo-event-tag-small"))),React.createElement("h4",null,"How to Add Custom CSS"),React.createElement("p",null,"To style the event cards, you need to add CSS to your theme or use a custom CSS plugin. Here are some recommended plugins:"),React.createElement("ul",null,React.createElement("li",null,React.createElement("a",{href:"https://wordpress.org/plugins/simple-custom-css/",target:"_blank",rel:"noopener noreferrer"},"Simple Custom CSS")),React.createElement("li",null,React.createElement("a",{href:"https://wordpress.org/plugins/custom-css-js/",target:"_blank",rel:"noopener noreferrer"},"Custom CSS and JS")),React.createElement("li",null,React.createElement("a",{href:"https://wordpress.org/plugins/advanced-custom-css/",target:"_blank",rel:"noopener noreferrer"},"Advanced Custom CSS"))),React.createElement("h4",null,"List View vs Calendar View Styling"),React.createElement("p",null,"The same dynamic classes are applied to both list view and calendar view events. This means your existing styles will automatically work in both views:"),React.createElement("pre",null,React.createElement("code",null,"\n/* This styles events in BOTH list and calendar views */\n.mayo-event-category-meetings {\n border-left: 4px solid #4a90e2;\n}\n ")),React.createElement("p",null,"If you want ",React.createElement("strong",null,"different")," styling for each view, use the base element class as a prefix:"),React.createElement("ul",null,React.createElement("li",null,React.createElement("code",null,".mayo-event-card")," - List view event cards"),React.createElement("li",null,React.createElement("code",null,".mayo-calendar-event")," - Calendar view event pills")),React.createElement("pre",null,React.createElement("code",null,"\n/* List view only */\n.mayo-event-card.mayo-event-category-meetings {\n border-left: 4px solid #4a90e2;\n}\n\n/* Calendar view only */\n.mayo-calendar-event.mayo-event-category-meetings {\n background-color: #e3f2fd;\n border-left: 3px solid #1976d2;\n}\n ")),React.createElement("h4",null,"Customization Example"),React.createElement("p",null,"Once you have a CSS editor, you can add rules like these:"),React.createElement("pre",null,React.createElement("code",null,'\n/* Style events with the "meetings" category (both views) */\n.mayo-event-category-meetings {\n border-left: 4px solid #4a90e2;\n}\n\n/* Style events with the "workshops" category (both views) */\n.mayo-event-category-workshops {\n border-left: 4px solid #e2844a;\n}\n\n/* Style service events (both views) */\n.mayo-event-type-service {\n background-color: #f0f7ff;\n}\n\n/* Style events from a specific service body (both views) */\n.mayo-event-service-body-district-1 {\n border-top: 2px solid #4a90e2;\n}\n\n/* Calendar view only: different background for activity events */\n.mayo-calendar-event.mayo-event-type-activity {\n background-color: #fff3e0;\n}\n ')))))},T=function(){var e=window.location.origin;return React.createElement("div",{className:"wrap mayo-docs"},React.createElement("h1",null,"API Documentation"),React.createElement("div",{className:"card"},React.createElement("h2",null,"Overview"),React.createElement("p",null,"The Mayo Events Manager provides a REST API for programmatic access to events and announcements. All endpoints use the namespace ",React.createElement("code",null,"event-manager/v1"),"."),React.createElement("p",null,React.createElement("strong",null,"Base URL:")," ",React.createElement("code",null,e,"/wp-json/event-manager/v1"))),React.createElement("div",{className:"card"},React.createElement("h2",null,"Table of Contents"),React.createElement("h3",null,"Event Endpoints"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,React.createElement("a",{href:"#get-events"},"GET /events")," - List events with filtering"),React.createElement("li",null,React.createElement("a",{href:"#get-event-slug"},"GET /event/","{slug}")," - Get event by slug"),React.createElement("li",null,React.createElement("a",{href:"#get-event-id"},"GET /events/","{id}")," - Get event by ID"),React.createElement("li",null,React.createElement("a",{href:"#search-events"},"GET /events/search")," - Search events"),React.createElement("li",null,React.createElement("a",{href:"#post-submit-event"},"POST /submit-event")," - Submit a new event")),React.createElement("h3",null,"Announcement Endpoints"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,React.createElement("a",{href:"#get-announcements"},"GET /announcements")," - List announcements"),React.createElement("li",null,React.createElement("a",{href:"#get-announcement-id"},"GET /announcement/","{id}")," - Get announcement by ID")),React.createElement("h3",null,"Settings Endpoints"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,React.createElement("a",{href:"#get-settings"},"GET /settings")," - Get plugin settings"),React.createElement("li",null,React.createElement("a",{href:"#post-settings"},"POST /settings")," - Update plugin settings")),React.createElement("h3",null,"Reference"),React.createElement("ul",{className:"ul-disc"},React.createElement("li",null,React.createElement("a",{href:"#event-meta-fields"},"Event Meta Fields")),React.createElement("li",null,React.createElement("a",{href:"#announcement-response"},"Announcement Response Object")),React.createElement("li",null,React.createElement("a",{href:"#wordpress-rest-api"},"WordPress REST API")),React.createElement("li",null,React.createElement("a",{href:"#usage-examples"},"Usage Examples")))),React.createElement("div",{className:"card",id:"get-events"},React.createElement("h2",null,"GET /events"),React.createElement("p",null,"Retrieve a list of events with optional filtering and pagination."),React.createElement("h3",null,"Endpoint"),React.createElement("pre",null,React.createElement("code",null,"GET ",e,"/wp-json/event-manager/v1/events")),React.createElement("h3",null,"Query Parameters"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Parameter"),React.createElement("th",null,"Type"),React.createElement("th",null,"Default"),React.createElement("th",null,"Description"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"page")),React.createElement("td",null,"integer"),React.createElement("td",null,"1"),React.createElement("td",null,"Page number for pagination")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"per_page")),React.createElement("td",null,"integer"),React.createElement("td",null,"10"),React.createElement("td",null,"Number of events per page")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"status")),React.createElement("td",null,"string"),React.createElement("td",null,"publish"),React.createElement("td",null,"Post status filter (",React.createElement("code",null,"publish"),", ",React.createElement("code",null,"pending"),")")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"event_type")),React.createElement("td",null,"string"),React.createElement("td",null,"empty"),React.createElement("td",null,"Filter by event type (e.g., ",React.createElement("code",null,"Service"),", ",React.createElement("code",null,"Activity"),")")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"service_body")),React.createElement("td",null,"string"),React.createElement("td",null,"empty"),React.createElement("td",null,"Comma-separated service body IDs (e.g., ",React.createElement("code",null,"1,2,3"),")")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"categories")),React.createElement("td",null,"string"),React.createElement("td",null,"empty"),React.createElement("td",null,"Comma-separated category slugs. Prefix with ",React.createElement("code",null,"-")," to exclude (e.g., ",React.createElement("code",null,"meetings,-cancelled"),")")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"tags")),React.createElement("td",null,"string"),React.createElement("td",null,"empty"),React.createElement("td",null,"Comma-separated tag slugs. Prefix with ",React.createElement("code",null,"-")," to exclude")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"archive")),React.createElement("td",null,"boolean"),React.createElement("td",null,"false"),React.createElement("td",null,"When ",React.createElement("code",null,"true"),", returns only past events")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"order")),React.createElement("td",null,"string"),React.createElement("td",null,"ASC"),React.createElement("td",null,"Sort order: ",React.createElement("code",null,"ASC")," (earliest first) or ",React.createElement("code",null,"DESC")," (latest first)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"timezone")),React.createElement("td",null,"string"),React.createElement("td",null,"Server timezone"),React.createElement("td",null,"IANA timezone for date filtering (e.g., ",React.createElement("code",null,"America/New_York"),")")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"start_date")),React.createElement("td",null,"string"),React.createElement("td",null,"empty"),React.createElement("td",null,"Filter events starting from this date (YYYY-MM-DD format)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"end_date")),React.createElement("td",null,"string"),React.createElement("td",null,"empty"),React.createElement("td",null,"Filter events ending before this date (YYYY-MM-DD format)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"source_ids")),React.createElement("td",null,"string"),React.createElement("td",null,"empty"),React.createElement("td",null,"Comma-separated source IDs. Use ",React.createElement("code",null,"local")," for local events, or external source IDs")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"relation")),React.createElement("td",null,"string"),React.createElement("td",null,"AND"),React.createElement("td",null,"Relation between meta query conditions (",React.createElement("code",null,"AND")," or ",React.createElement("code",null,"OR"),")")))),React.createElement("h3",null,"Example Request"),React.createElement("pre",null,React.createElement("code",null,"GET ".concat(e,"/wp-json/event-manager/v1/events?per_page=5&categories=meetings&order=ASC"))),React.createElement("h3",null,"Example Response"),React.createElement("pre",null,React.createElement("code",null,'{\n "events": [\n {\n "id": 123,\n "title": {\n "rendered": "Monthly Meeting"\n },\n "content": {\n "rendered": "<p>Event description...</p>"\n },\n "link": "'.concat(e,'/mayo/monthly-meeting/",\n "meta": {\n "event_start_date": "2024-03-15",\n "event_end_date": "2024-03-15",\n "event_start_time": "19:00:00",\n "event_end_time": "21:00:00",\n "timezone": "America/New_York",\n "event_type": "Service",\n "service_body": "1",\n "location_name": "Community Center",\n "location_address": "123 Main St",\n "location_details": "Room 101"\n },\n "featured_image": "').concat(e,'/wp-content/uploads/2024/03/flyer.jpg",\n "categories": [\n {\n "id": 5,\n "name": "Meetings",\n "slug": "meetings",\n "link": "').concat(e,'/category/meetings/"\n }\n ],\n "tags": [],\n "source": {\n "id": "local",\n "name": "Local Events",\n "url": "').concat(e,'"\n }\n }\n ],\n "pagination": {\n "total": 25,\n "per_page": 5,\n "current_page": 1,\n "total_pages": 5\n }\n}')))),React.createElement("div",{className:"card",id:"get-event-slug"},React.createElement("h2",null,"GET /event/","{slug}"),React.createElement("p",null,"Retrieve details for a single event by its slug."),React.createElement("h3",null,"Endpoint"),React.createElement("pre",null,React.createElement("code",null,"GET ",e,"/wp-json/event-manager/v1/event/","{slug}")),React.createElement("h3",null,"Path Parameters"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Parameter"),React.createElement("th",null,"Type"),React.createElement("th",null,"Description"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"slug")),React.createElement("td",null,"string"),React.createElement("td",null,"The event's URL slug")))),React.createElement("h3",null,"Example Request"),React.createElement("pre",null,React.createElement("code",null,"GET ".concat(e,"/wp-json/event-manager/v1/event/monthly-meeting"))),React.createElement("h3",null,"Response"),React.createElement("p",null,"Returns a single event object (same structure as events in the list response)."),React.createElement("h3",null,"Error Response"),React.createElement("pre",null,React.createElement("code",null,'{\n "code": "no_event",\n "message": "Event not found",\n "data": {\n "status": 404\n }\n}'))),React.createElement("div",{className:"card",id:"get-event-id"},React.createElement("h2",null,"GET /events/","{id}"),React.createElement("p",null,"Retrieve a single event by its post ID."),React.createElement("h3",null,"Endpoint"),React.createElement("pre",null,React.createElement("code",null,"GET ",e,"/wp-json/event-manager/v1/events/","{id}")),React.createElement("h3",null,"Path Parameters"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Parameter"),React.createElement("th",null,"Type"),React.createElement("th",null,"Description"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"id")),React.createElement("td",null,"integer"),React.createElement("td",null,"The event's post ID")))),React.createElement("h3",null,"Example Request"),React.createElement("pre",null,React.createElement("code",null,"GET ".concat(e,"/wp-json/event-manager/v1/events/123"))),React.createElement("h3",null,"Example Response"),React.createElement("pre",null,React.createElement("code",null,'{\n "id": 123,\n "title": "Monthly Meeting",\n "start_date": "2024-03-15",\n "end_date": "2024-03-15",\n "start_time": "19:00:00",\n "end_time": "21:00:00",\n "permalink": "'.concat(e,'/mayo/monthly-meeting/",\n "edit_link": "').concat(e,'/wp-admin/post.php?post=123&action=edit"\n}'))),React.createElement("h3",null,"Error Response"),React.createElement("pre",null,React.createElement("code",null,'{\n "code": "not_found",\n "message": "Event not found",\n "data": {\n "status": 404\n }\n}'))),React.createElement("div",{className:"card",id:"search-events"},React.createElement("h2",null,"GET /events/search"),React.createElement("p",null,"Search events by title. Useful for finding events to link to announcements."),React.createElement("h3",null,"Endpoint"),React.createElement("pre",null,React.createElement("code",null,"GET ",e,"/wp-json/event-manager/v1/events/search")),React.createElement("h3",null,"Query Parameters"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Parameter"),React.createElement("th",null,"Type"),React.createElement("th",null,"Default"),React.createElement("th",null,"Description"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"search")),React.createElement("td",null,"string"),React.createElement("td",null,"empty"),React.createElement("td",null,"Search term to match against event titles")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"limit")),React.createElement("td",null,"integer"),React.createElement("td",null,"20"),React.createElement("td",null,"Maximum number of results to return")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"include")),React.createElement("td",null,"string"),React.createElement("td",null,"empty"),React.createElement("td",null,"Comma-separated event IDs to fetch specific events")))),React.createElement("h3",null,"Example Request"),React.createElement("pre",null,React.createElement("code",null,"GET ".concat(e,"/wp-json/event-manager/v1/events/search?search=meeting&limit=10"))),React.createElement("h3",null,"Example Response"),React.createElement("pre",null,React.createElement("code",null,'{\n "events": [\n {\n "id": 123,\n "title": "Monthly Meeting",\n "start_date": "2024-03-15",\n "permalink": "'.concat(e,'/mayo/monthly-meeting/",\n "edit_link": "').concat(e,'/wp-admin/post.php?post=123&action=edit"\n },\n {\n "id": 456,\n "title": "Regional Meeting",\n "start_date": "2024-04-01",\n "permalink": "').concat(e,'/mayo/regional-meeting/",\n "edit_link": "').concat(e,'/wp-admin/post.php?post=456&action=edit"\n }\n ]\n}')))),React.createElement("div",{className:"card",id:"post-submit-event"},React.createElement("h2",null,"POST /submit-event"),React.createElement("p",null,"Submit a new event. Events are created with ",React.createElement("code",null,"pending")," status and require admin approval."),React.createElement("h3",null,"Endpoint"),React.createElement("pre",null,React.createElement("code",null,"POST ",e,"/wp-json/event-manager/v1/submit-event")),React.createElement("h3",null,"Authentication"),React.createElement("p",null,"This endpoint is publicly accessible (no authentication required)."),React.createElement("h3",null,"Request Body (multipart/form-data)"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Field"),React.createElement("th",null,"Type"),React.createElement("th",null,"Required"),React.createElement("th",null,"Description"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"event_name")),React.createElement("td",null,"string"),React.createElement("td",null,"Yes"),React.createElement("td",null,"Event title")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"event_type")),React.createElement("td",null,"string"),React.createElement("td",null,"Yes"),React.createElement("td",null,"Event type (e.g., ",React.createElement("code",null,"Service"),", ",React.createElement("code",null,"Activity"),")")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"service_body")),React.createElement("td",null,"string"),React.createElement("td",null,"Yes"),React.createElement("td",null,"Service body ID (use ",React.createElement("code",null,"0")," for Unaffiliated)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"email")),React.createElement("td",null,"string"),React.createElement("td",null,"Yes"),React.createElement("td",null,"Contact email address")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"contact_name")),React.createElement("td",null,"string"),React.createElement("td",null,"Yes"),React.createElement("td",null,"Contact person's name")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"event_start_date")),React.createElement("td",null,"string"),React.createElement("td",null,"Yes"),React.createElement("td",null,"Start date (YYYY-MM-DD format)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"event_end_date")),React.createElement("td",null,"string"),React.createElement("td",null,"Yes"),React.createElement("td",null,"End date (YYYY-MM-DD format)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"event_start_time")),React.createElement("td",null,"string"),React.createElement("td",null,"Yes"),React.createElement("td",null,"Start time (HH:MM:SS format)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"event_end_time")),React.createElement("td",null,"string"),React.createElement("td",null,"Yes"),React.createElement("td",null,"End time (HH:MM:SS format)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"timezone")),React.createElement("td",null,"string"),React.createElement("td",null,"Yes"),React.createElement("td",null,"IANA timezone (e.g., ",React.createElement("code",null,"America/New_York"),")")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"description")),React.createElement("td",null,"string"),React.createElement("td",null,"No"),React.createElement("td",null,"Event description (HTML allowed)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"location_name")),React.createElement("td",null,"string"),React.createElement("td",null,"No"),React.createElement("td",null,"Venue name")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"location_address")),React.createElement("td",null,"string"),React.createElement("td",null,"No"),React.createElement("td",null,"Street address")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"location_details")),React.createElement("td",null,"string"),React.createElement("td",null,"No"),React.createElement("td",null,"Additional location info (room number, etc.)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"categories")),React.createElement("td",null,"string"),React.createElement("td",null,"No"),React.createElement("td",null,"Comma-separated category IDs")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"tags")),React.createElement("td",null,"string"),React.createElement("td",null,"No"),React.createElement("td",null,"Comma-separated tag names or IDs")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"recurring_pattern")),React.createElement("td",null,"JSON string"),React.createElement("td",null,"No"),React.createElement("td",null,"Recurring event configuration (see below)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"flyer")),React.createElement("td",null,"file"),React.createElement("td",null,"No"),React.createElement("td",null,"Event flyer image (set as featured image)")))),React.createElement("h3",null,"Recurring Pattern Object"),React.createElement("pre",null,React.createElement("code",null,'{\n "type": "weekly", // "none", "daily", "weekly", "monthly"\n "interval": 1, // Repeat every N days/weeks/months\n "weekdays": [1, 3, 5], // For weekly: days of week (0=Sun, 6=Sat)\n "monthlyType": "date", // For monthly: "date" or "weekday"\n "monthlyDate": 15, // For monthly by date: day of month\n "monthlyWeekday": "2,4", // For monthly by weekday: "week,day" (e.g., "2,4" = 2nd Thursday)\n "endDate": "2024-12-31" // When recurring pattern ends\n}')),React.createElement("h3",null,"Example Response"),React.createElement("pre",null,React.createElement("code",null,'{\n "id": 456,\n "title": {\n "rendered": "New Community Event"\n },\n "content": {\n "rendered": "<p>Event description...</p>"\n },\n "link": "'.concat(e,'/mayo/new-community-event/",\n "meta": {\n "event_start_date": "2024-04-01",\n "event_end_date": "2024-04-01",\n "event_start_time": "14:00:00",\n "event_end_time": "16:00:00",\n "timezone": "America/Los_Angeles",\n "event_type": "Activity",\n "service_body": "5",\n "location_name": "Park Pavilion",\n "location_address": "456 Oak Ave",\n "location_details": ""\n },\n "categories": [],\n "tags": []\n}')))),React.createElement("div",{className:"card",id:"get-announcements"},React.createElement("h2",null,"GET /announcements"),React.createElement("p",null,"Retrieve a list of announcements with optional filtering. By default, only returns announcements within their active display window."),React.createElement("h3",null,"Endpoint"),React.createElement("pre",null,React.createElement("code",null,"GET ",e,"/wp-json/event-manager/v1/announcements")),React.createElement("h3",null,"Query Parameters"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Parameter"),React.createElement("th",null,"Type"),React.createElement("th",null,"Default"),React.createElement("th",null,"Description"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"priority")),React.createElement("td",null,"string"),React.createElement("td",null,"empty"),React.createElement("td",null,"Filter by priority level: ",React.createElement("code",null,"low"),", ",React.createElement("code",null,"normal"),", ",React.createElement("code",null,"high"),", ",React.createElement("code",null,"urgent"))),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"categories")),React.createElement("td",null,"string"),React.createElement("td",null,"empty"),React.createElement("td",null,"Comma-separated category slugs")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"tags")),React.createElement("td",null,"string"),React.createElement("td",null,"empty"),React.createElement("td",null,"Comma-separated tag slugs")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"linked_event")),React.createElement("td",null,"integer"),React.createElement("td",null,"empty"),React.createElement("td",null,"Filter by linked event ID")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"active")),React.createElement("td",null,"string"),React.createElement("td",null,"true"),React.createElement("td",null,"Set to ",React.createElement("code",null,"false")," to include announcements outside their display window")))),React.createElement("h3",null,"Example Request"),React.createElement("pre",null,React.createElement("code",null,"GET ".concat(e,"/wp-json/event-manager/v1/announcements?priority=urgent"))),React.createElement("h3",null,"Example Response"),React.createElement("pre",null,React.createElement("code",null,'{\n "announcements": [\n {\n "id": 789,\n "title": "Weather Closure Notice",\n "content": "<p>Due to severe weather...</p>",\n "excerpt": "Due to severe weather...",\n "link": "'.concat(e,'/announcement/weather-closure/",\n "display_start_date": "2024-03-14",\n "display_end_date": "2024-03-16",\n "priority": "urgent",\n "linked_events": [\n {\n "id": 123,\n "title": "Monthly Meeting",\n "permalink": "').concat(e,'/mayo/monthly-meeting/",\n "start_date": "2024-03-15"\n }\n ],\n "featured_image": null,\n "categories": [],\n "tags": []\n }\n ],\n "total": 1\n}')))),React.createElement("div",{className:"card",id:"get-announcement-id"},React.createElement("h2",null,"GET /announcement/","{id}"),React.createElement("p",null,"Retrieve a single announcement by its post ID."),React.createElement("h3",null,"Endpoint"),React.createElement("pre",null,React.createElement("code",null,"GET ",e,"/wp-json/event-manager/v1/announcement/","{id}")),React.createElement("h3",null,"Path Parameters"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Parameter"),React.createElement("th",null,"Type"),React.createElement("th",null,"Description"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"id")),React.createElement("td",null,"integer"),React.createElement("td",null,"The announcement's post ID")))),React.createElement("h3",null,"Example Request"),React.createElement("pre",null,React.createElement("code",null,"GET ".concat(e,"/wp-json/event-manager/v1/announcement/789"))),React.createElement("h3",null,"Response"),React.createElement("p",null,"Returns a single announcement object (same structure as announcements in the list response)."),React.createElement("h3",null,"Error Response"),React.createElement("pre",null,React.createElement("code",null,'{\n "code": "not_found",\n "message": "Announcement not found",\n "data": {\n "status": 404\n }\n}'))),React.createElement("div",{className:"card",id:"get-settings"},React.createElement("h2",null,"GET /settings"),React.createElement("p",null,"Retrieve plugin settings. This endpoint is publicly accessible for frontend configuration."),React.createElement("h3",null,"Endpoint"),React.createElement("pre",null,React.createElement("code",null,"GET ",e,"/wp-json/event-manager/v1/settings")),React.createElement("h3",null,"Example Response"),React.createElement("pre",null,React.createElement("code",null,'{\n "bmlt_root_server": "https://bmlt.example.org/main_server",\n "notification_email": "events@example.org",\n "default_service_bodies": "1,2,3",\n "external_sources": [\n {\n "id": "source_abc123",\n "url": "https://other-site.org",\n "name": "Other Site Events",\n "event_type": "",\n "service_body": "",\n "categories": "",\n "tags": "",\n "enabled": true\n }\n ]\n}'))),React.createElement("div",{className:"card",id:"post-settings"},React.createElement("h2",null,"POST /settings"),React.createElement("p",null,"Update plugin settings. ",React.createElement("strong",null,"Requires administrator authentication.")),React.createElement("h3",null,"Endpoint"),React.createElement("pre",null,React.createElement("code",null,"POST ",e,"/wp-json/event-manager/v1/settings")),React.createElement("h3",null,"Authentication"),React.createElement("p",null,"Requires a logged-in user with ",React.createElement("code",null,"manage_options")," capability (administrator)."),React.createElement("p",null,"Include the WordPress REST API nonce in your request:"),React.createElement("pre",null,React.createElement("code",null,"// Using wp-api-fetch (recommended)\nimport apiFetch from '@wordpress/api-fetch';\napiFetch({ path: '/event-manager/v1/settings', method: 'POST', data: {...} });\n\n// Using fetch with nonce\nfetch('".concat(e,"/wp-json/event-manager/v1/settings', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-WP-Nonce': wpApiSettings.nonce\n },\n body: JSON.stringify({...})\n});"))),React.createElement("h3",null,"Request Body (JSON)"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Field"),React.createElement("th",null,"Type"),React.createElement("th",null,"Description"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"bmlt_root_server")),React.createElement("td",null,"string"),React.createElement("td",null,"BMLT root server URL")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"notification_email")),React.createElement("td",null,"string"),React.createElement("td",null,"Email address(es) for event submission notifications")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"default_service_bodies")),React.createElement("td",null,"string"),React.createElement("td",null,"Comma-separated service body IDs to restrict submissions")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"external_sources")),React.createElement("td",null,"array"),React.createElement("td",null,"Array of external source configurations")))),React.createElement("h3",null,"Example Response"),React.createElement("pre",null,React.createElement("code",null,'{\n "success": true,\n "settings": {\n "bmlt_root_server": "https://bmlt.example.org/main_server",\n "notification_email": "events@example.org",\n "default_service_bodies": "1,2,3",\n "external_sources": []\n }\n}')),React.createElement("h3",null,"Error Response (Unauthorized)"),React.createElement("pre",null,React.createElement("code",null,'{\n "code": "rest_forbidden",\n "message": "Sorry, you are not allowed to update settings.",\n "data": {\n "status": 401\n }\n}'))),React.createElement("div",{className:"card",id:"event-meta-fields"},React.createElement("h2",null,"Event Meta Fields"),React.createElement("p",null,"Events use the following meta fields, which are exposed via the WordPress REST API for the ",React.createElement("code",null,"mayo_event")," post type:"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Meta Key"),React.createElement("th",null,"Type"),React.createElement("th",null,"Description"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"event_type")),React.createElement("td",null,"string"),React.createElement("td",null,"Event type (Service, Activity, etc.)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"service_body")),React.createElement("td",null,"string"),React.createElement("td",null,"Service body ID")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"event_start_date")),React.createElement("td",null,"string"),React.createElement("td",null,"Start date (YYYY-MM-DD)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"event_end_date")),React.createElement("td",null,"string"),React.createElement("td",null,"End date (YYYY-MM-DD)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"event_start_time")),React.createElement("td",null,"string"),React.createElement("td",null,"Start time (HH:MM:SS)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"event_end_time")),React.createElement("td",null,"string"),React.createElement("td",null,"End time (HH:MM:SS)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"timezone")),React.createElement("td",null,"string"),React.createElement("td",null,"IANA timezone identifier")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"location_name")),React.createElement("td",null,"string"),React.createElement("td",null,"Venue name")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"location_address")),React.createElement("td",null,"string"),React.createElement("td",null,"Street address")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"location_details")),React.createElement("td",null,"string"),React.createElement("td",null,"Additional location information")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"contact_name")),React.createElement("td",null,"string"),React.createElement("td",null,"Contact person's name")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"email")),React.createElement("td",null,"string"),React.createElement("td",null,"Contact email address")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"recurring_pattern")),React.createElement("td",null,"object"),React.createElement("td",null,"Recurring event configuration")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"skipped_occurrences")),React.createElement("td",null,"array"),React.createElement("td",null,"Array of skipped dates for recurring events"))))),React.createElement("div",{className:"card",id:"announcement-response"},React.createElement("h2",null,"Announcement Response Object"),React.createElement("p",null,"Announcements returned from the API include the following fields:"),React.createElement("table",{className:"widefat"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,"Field"),React.createElement("th",null,"Type"),React.createElement("th",null,"Description"))),React.createElement("tbody",null,React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"id")),React.createElement("td",null,"integer"),React.createElement("td",null,"The announcement's post ID")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"title")),React.createElement("td",null,"string"),React.createElement("td",null,"Announcement title")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"content")),React.createElement("td",null,"string"),React.createElement("td",null,"Full announcement content (HTML)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"excerpt")),React.createElement("td",null,"string"),React.createElement("td",null,"Short excerpt of the announcement")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"link")),React.createElement("td",null,"string"),React.createElement("td",null,"Permalink to the announcement")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"edit_link")),React.createElement("td",null,"string"),React.createElement("td",null,"Admin edit URL for the announcement")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"display_start_date")),React.createElement("td",null,"string"),React.createElement("td",null,"When the announcement starts showing (YYYY-MM-DD)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"display_end_date")),React.createElement("td",null,"string"),React.createElement("td",null,"When the announcement stops showing (YYYY-MM-DD)")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"priority")),React.createElement("td",null,"string"),React.createElement("td",null,"Priority level: ",React.createElement("code",null,"low"),", ",React.createElement("code",null,"normal"),", ",React.createElement("code",null,"high"),", or ",React.createElement("code",null,"urgent"))),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"linked_events")),React.createElement("td",null,"array"),React.createElement("td",null,"Array of linked event objects with ",React.createElement("code",null,"id"),", ",React.createElement("code",null,"title"),", ",React.createElement("code",null,"permalink"),", ",React.createElement("code",null,"start_date"))),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"is_active")),React.createElement("td",null,"boolean"),React.createElement("td",null,"Whether the announcement is currently within its display window")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"featured_image")),React.createElement("td",null,"string|null"),React.createElement("td",null,"URL of the featured image, if set")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"categories")),React.createElement("td",null,"array"),React.createElement("td",null,"Array of category objects")),React.createElement("tr",null,React.createElement("td",null,React.createElement("code",null,"tags")),React.createElement("td",null,"array"),React.createElement("td",null,"Array of tag objects"))))),React.createElement("div",{className:"card",id:"wordpress-rest-api"},React.createElement("h2",null,"WordPress REST API"),React.createElement("p",null,"Events are also accessible via the standard WordPress REST API at ",React.createElement("code",null,"/wp-json/wp/v2/mayo_event"),"."),React.createElement("h3",null,"Example"),React.createElement("pre",null,React.createElement("code",null,"GET ".concat(e,"/wp-json/wp/v2/mayo_event?per_page=10&status=publish"))),React.createElement("p",null,"This provides access to all standard WordPress post fields plus the registered meta fields above.")),React.createElement("div",{className:"card",id:"usage-examples"},React.createElement("h2",null,"Usage Examples"),React.createElement("h3",null,"JavaScript (Fetch API)"),React.createElement("pre",null,React.createElement("code",null,"// Get upcoming events\nfetch('".concat(e,"/wp-json/event-manager/v1/events?per_page=10')\n .then(response => response.json())\n .then(data => {\n console.log('Events:', data.events);\n console.log('Total:', data.pagination.total);\n });\n\n// Get events for a specific service body\nfetch('").concat(e,"/wp-json/event-manager/v1/events?service_body=1,2')\n .then(response => response.json())\n .then(data => console.log(data));\n\n// Get past events (archive)\nfetch('").concat(e,"/wp-json/event-manager/v1/events?archive=true&order=DESC')\n .then(response => response.json())\n .then(data => console.log(data));\n\n// Get active announcements\nfetch('").concat(e,"/wp-json/event-manager/v1/announcements')\n .then(response => response.json())\n .then(data => console.log(data.announcements));\n\n// Get urgent announcements only\nfetch('").concat(e,"/wp-json/event-manager/v1/announcements?priority=urgent')\n .then(response => response.json())\n .then(data => console.log(data));"))),React.createElement("h3",null,"PHP (WordPress)"),React.createElement("pre",null,React.createElement("code",null,"// Get events using wp_remote_get\n$response = wp_remote_get('".concat(e,"/wp-json/event-manager/v1/events?per_page=5');\n\nif (!is_wp_error($response)) {\n $body = wp_remote_retrieve_body($response);\n $data = json_decode($body, true);\n\n foreach ($data['events'] as $event) {\n echo $event['title']['rendered'] . '<br>';\n }\n}"))),React.createElement("h3",null,"cURL"),React.createElement("pre",null,React.createElement("code",null,'# Get events\ncurl "'.concat(e,'/wp-json/event-manager/v1/events?per_page=5"\n\n# Get a single event\ncurl "').concat(e,'/wp-json/event-manager/v1/event/monthly-meeting"\n\n# Get settings\ncurl "').concat(e,'/wp-json/event-manager/v1/settings"\n\n# Get announcements\ncurl "').concat(e,'/wp-json/event-manager/v1/announcements"\n\n# Get announcements for a specific event (use linked_event filter)\ncurl "').concat(e,'/wp-json/event-manager/v1/announcements?linked_event=123"')))))};function A(e){return A="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},A(e)}function N(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",l=n.toStringTag||"@@toStringTag";function r(n,a,l,r){var i=a&&a.prototype instanceof o?a:o,s=Object.create(i.prototype);return P(s,"_invoke",function(n,a,l){var r,o,i,s=0,u=l||[],m=!1,d={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,n){return r=t,o=0,i=e,d.n=n,c}};function p(n,a){for(o=n,i=a,t=0;!m&&s&&!l&&t<u.length;t++){var l,r=u[t],p=d.p,E=r[2];n>3?(l=E===a)&&(i=r[(o=r[4])?5:(o=3,3)],r[4]=r[5]=e):r[0]<=p&&((l=n<2&&p<r[1])?(o=0,d.v=a,d.n=r[1]):p<E&&(l=n<3||r[0]>a||a>E)&&(r[4]=n,r[5]=a,d.n=E,o=0))}if(l||n>1)return c;throw m=!0,a}return function(l,u,E){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&p(u,E),o=u,i=E;(t=o<2?e:i)||!m;){r||(o?o<3?(o>1&&(d.n=-1),p(o,i)):d.n=i:d.v=i);try{if(s=2,r){if(o||(l="next"),t=r[l]){if(!(t=t.call(r,i)))throw TypeError("iterator result is not an object");if(!t.done)return t;i=t.value,o<2&&(o=0)}else 1===o&&(t=r.return)&&t.call(r),o<2&&(i=TypeError("The iterator does not provide a '"+l+"' method"),o=1);r=e}else if((t=(m=d.n<0)?i:n.call(a,d))!==c)break}catch(t){r=e,o=1,i=t}finally{s=1}}return{value:t,done:m}}}(n,l,r),!0),s}var c={};function o(){}function i(){}function s(){}t=Object.getPrototypeOf;var u=[][a]?t(t([][a]())):(P(t={},a,function(){return this}),t),m=s.prototype=o.prototype=Object.create(u);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,P(e,l,"GeneratorFunction")),e.prototype=Object.create(m),e}return i.prototype=s,P(m,"constructor",s),P(s,"constructor",i),i.displayName="GeneratorFunction",P(s,l,"GeneratorFunction"),P(m),P(m,l,"Generator"),P(m,a,function(){return this}),P(m,"toString",function(){return"[object Generator]"}),(N=function(){return{w:r,m:d}})()}function P(e,t,n,a){var l=Object.defineProperty;try{l({},"",{})}catch(e){l=0}P=function(e,t,n,a){function r(t,n){P(e,t,function(e){return this._invoke(t,n,e)})}t?l?l(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(r("next",0),r("throw",1),r("return",2))},P(e,t,n,a)}function O(e,t,n,a,l,r,c){try{var o=e[r](c),i=o.value}catch(e){return void n(e)}o.done?t(i):Promise.resolve(i).then(a,l)}function D(e){return function(){var t=this,n=arguments;return new Promise(function(a,l){var r=e.apply(t,n);function c(e){O(r,a,l,c,o,"next",e)}function o(e){O(r,a,l,c,o,"throw",e)}c(void 0)})}}function j(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function B(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?j(Object(n),!0).forEach(function(t){M(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):j(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function M(e,t,n){return(t=function(e){var t=function(e){if("object"!=A(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=A(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==A(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function L(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,l,r,c,o=[],i=!0,s=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(a=r.call(n)).done)&&(o.push(a.value),o.length!==t);i=!0);}catch(e){s=!0,l=e}finally{try{if(!i&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw l}}return o}}(e,t)||I(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function I(e,t){if(e){if("string"==typeof e)return F(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?F(e,t):void 0}}function F(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var z=function(t){var a,l,r,c,o,i,s=t.subscriber,u=t.options,m=t.onSave,d=t.onClose,p=t.saving,E=L((0,e.useState)(s.status),2),f=E[0],R=E[1],v=L((0,e.useState)(function(){var e=s.preferences||{};return{categories:(e.categories||[]).map(function(e){return Number(e)}),tags:(e.tags||[]).map(function(e){return Number(e)}),service_bodies:(e.service_bodies||[]).map(function(e){return String(e)})}}),2),y=v[0],g=v[1],h=function(e,t,n){g(function(a){var l,r=a[e]||[];return B(B({},a),{},M({},e,n?[].concat(function(e){if(Array.isArray(e))return F(e)}(l=r)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(l)||I(l)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[t]):r.filter(function(e){return e!==t})))})};return React.createElement(n.Modal,{title:"Edit Subscriber: ".concat(s.email),onRequestClose:d,className:"mayo-subscriber-edit-modal"},React.createElement("div",{style:{minWidth:"400px"}},React.createElement(n.SelectControl,{label:"Status",value:f,options:[{label:"Active",value:"active"},{label:"Pending",value:"pending"},{label:"Unsubscribed",value:"unsubscribed"}],onChange:R}),React.createElement("div",{style:{marginTop:"16px"}},React.createElement("h4",{style:{marginBottom:"8px"}},"Subscription Preferences"),React.createElement("p",{className:"description",style:{marginBottom:"12px"}},"Select which categories, tags, and service bodies this subscriber should receive notifications for. If none are selected, they will receive all announcements."),(null==u||null===(a=u.categories)||void 0===a?void 0:a.length)>0&&React.createElement("div",{style:{marginBottom:"16px"}},React.createElement("strong",{style:{display:"block",marginBottom:"8px"}},"Categories"),u.categories.map(function(e){return React.createElement(n.CheckboxControl,{key:e.id,label:e.name,checked:(t=e.id,y.categories.some(function(e){return Number(e)===Number(t)})),onChange:function(t){return h("categories",Number(e.id),t)}});var t})),(null==u||null===(l=u.tags)||void 0===l?void 0:l.length)>0&&React.createElement("div",{style:{marginBottom:"16px"}},React.createElement("strong",{style:{display:"block",marginBottom:"8px"}},"Tags"),u.tags.map(function(e){return React.createElement(n.CheckboxControl,{key:e.id,label:e.name,checked:(t=e.id,y.tags.some(function(e){return Number(e)===Number(t)})),onChange:function(t){return h("tags",Number(e.id),t)}});var t})),(null==u||null===(r=u.service_bodies)||void 0===r?void 0:r.length)>0&&React.createElement("div",{style:{marginBottom:"16px"}},React.createElement("strong",{style:{display:"block",marginBottom:"8px"}},"Service Bodies"),u.service_bodies.map(function(e){return React.createElement(n.CheckboxControl,{key:e.id,label:e.name,checked:(t=e.id,y.service_bodies.some(function(e){return String(e)===String(t)})),onChange:function(t){return h("service_bodies",String(e.id),t)}});var t})),!(null!=u&&null!==(c=u.categories)&&void 0!==c&&c.length)&&!(null!=u&&null!==(o=u.tags)&&void 0!==o&&o.length)&&!(null!=u&&null!==(i=u.service_bodies)&&void 0!==i&&i.length)&&React.createElement("p",{style:{color:"#646970",fontStyle:"italic"}},"No subscription options configured. Configure them in the Settings page.")),React.createElement("div",{style:{marginTop:"20px",display:"flex",gap:"8px",justifyContent:"flex-end"}},React.createElement(n.Button,{isSecondary:!0,onClick:d,disabled:p},"Cancel"),React.createElement(n.Button,{isPrimary:!0,onClick:function(){m(s.id,{status:f,preferences:y})},disabled:p},p?"Saving...":"Save Changes"))))};const G=function(){var t=L((0,e.useState)([]),2),a=t[0],l=t[1],r=L((0,e.useState)(!0),2),c=r[0],o=r[1],i=L((0,e.useState)(null),2),s=i[0],m=i[1],d=L((0,e.useState)("all"),2),p=d[0],E=d[1],f=L((0,e.useState)(""),2),R=f[0],v=f[1],y=L((0,e.useState)(null),2),g=y[0],h=y[1],b=L((0,e.useState)(null),2),_=b[0],S=b[1],w=L((0,e.useState)(!1),2),x=w[0],k=w[1];(0,e.useEffect)(function(){var e=function(){var e=D(N().m(function e(){var t,n,a,r,c;return N().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,Promise.all([u("/subscribers"),u("/subscription-options")]);case 1:t=e.v,n=L(t,2),a=n[0],r=n[1],l(a),S(r),e.n=3;break;case 2:e.p=2,c=e.v,m(c.message||"Failed to load subscribers");case 3:return e.p=3,o(!1),e.f(3);case 4:return e.a(2)}},e,null,[[0,2,3,4]])}));return function(){return e.apply(this,arguments)}}();e()},[]);var C=function(){var e=D(N().m(function e(t,n){var a,r;return N().w(function(e){for(;;)switch(e.p=e.n){case 0:return k(!0),e.p=1,e.n=2,u("/subscribers/".concat(t),{method:"PUT",body:JSON.stringify(n)});case 2:return e.n=3,u("/subscribers");case 3:a=e.v,l(a),h(null),e.n=5;break;case 4:e.p=4,r=e.v,alert("Failed to update subscriber: "+(r.message||"Unknown error"));case 5:return e.p=5,k(!1),e.f(5);case 6:return e.a(2)}},e,null,[[1,4,5,6]])}));return function(t,n){return e.apply(this,arguments)}}(),T=function(){var e=D(N().m(function e(t,n){var r;return N().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t.preventDefault(),window.confirm('Are you sure you want to delete subscriber "'.concat(n.email,'"? This action cannot be undone.'))){e.n=1;break}return e.a(2);case 1:return e.p=1,e.n=2,u("/subscribers/".concat(n.id),{method:"DELETE"});case 2:l(a.filter(function(e){return e.id!==n.id})),e.n=4;break;case 3:e.p=3,r=e.v,alert("Failed to delete subscriber: "+(r.message||"Unknown error"));case 4:return e.a(2)}},e,null,[[1,3]])}));return function(t,n){return e.apply(this,arguments)}}(),A=(0,e.useMemo)(function(){return a.filter(function(e){return!("all"!==p&&e.status!==p||R&&!e.email.toLowerCase().includes(R.toLowerCase()))})},[a,p,R]),P=(0,e.useMemo)(function(){var e={all:a.length,active:0,pending:0,unsubscribed:0};return a.forEach(function(t){void 0!==e[t.status]&&e[t.status]++}),e},[a]),O=function(e){return e?new Date(e).toLocaleDateString("en-US",{year:"numeric",month:"2-digit",day:"2-digit"}):"—"},j={category:{display:"inline-block",padding:"3px 8px",fontSize:"11px",backgroundColor:"#e3f2fd",color:"#1565c0",borderRadius:"3px",marginRight:"4px",marginBottom:"4px"},tag:{display:"inline-block",padding:"3px 8px",fontSize:"11px",backgroundColor:"#fff3e0",color:"#e65100",borderRadius:"3px",marginRight:"4px",marginBottom:"4px"},serviceBody:{display:"inline-block",padding:"3px 8px",fontSize:"11px",backgroundColor:"#e8f5e9",color:"#2e7d32",borderRadius:"3px",marginRight:"4px",marginBottom:"4px"},all:{display:"inline-block",padding:"3px 8px",fontSize:"11px",backgroundColor:"#f0f0f0",color:"#666",borderRadius:"3px"}};return c?React.createElement("div",{className:"wrap"},React.createElement("h1",{className:"wp-heading-inline"},"Subscribers"),React.createElement("hr",{className:"wp-header-end"}),React.createElement("div",{style:{padding:"20px",textAlign:"center"}},React.createElement(n.Spinner,null))):s?React.createElement("div",{className:"wrap"},React.createElement("h1",{className:"wp-heading-inline"},"Subscribers"),React.createElement("hr",{className:"wp-header-end"}),React.createElement("div",{className:"notice notice-error"},React.createElement("p",null,s))):React.createElement("div",{className:"wrap"},React.createElement("h1",{className:"wp-heading-inline"},"Subscribers"),React.createElement("hr",{className:"wp-header-end"}),React.createElement("ul",{className:"subsubsub"},React.createElement("li",{className:"all"},React.createElement("a",{href:"#",className:"all"===p?"current":"",onClick:function(e){e.preventDefault(),E("all")}},"All ",React.createElement("span",{className:"count"},"(",P.all,")"))," |"),React.createElement("li",{className:"active"},React.createElement("a",{href:"#",className:"active"===p?"current":"",onClick:function(e){e.preventDefault(),E("active")}},"Active ",React.createElement("span",{className:"count"},"(",P.active,")"))," |"),React.createElement("li",{className:"pending"},React.createElement("a",{href:"#",className:"pending"===p?"current":"",onClick:function(e){e.preventDefault(),E("pending")}},"Pending ",React.createElement("span",{className:"count"},"(",P.pending,")"))," |"),React.createElement("li",{className:"unsubscribed"},React.createElement("a",{href:"#",className:"unsubscribed"===p?"current":"",onClick:function(e){e.preventDefault(),E("unsubscribed")}},"Unsubscribed ",React.createElement("span",{className:"count"},"(",P.unsubscribed,")")))),React.createElement("p",{className:"search-box"},React.createElement("label",{className:"screen-reader-text",htmlFor:"subscriber-search-input"},"Search Subscribers:"),React.createElement("input",{type:"search",id:"subscriber-search-input",value:R,onChange:function(e){return v(e.target.value)},placeholder:"Search by email..."})),React.createElement("div",{style:{clear:"both"}}),React.createElement("table",{className:"wp-list-table widefat fixed striped table-view-list"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",{scope:"col",className:"manage-column column-email column-primary"},"Email"),React.createElement("th",{scope:"col",className:"manage-column column-status"},"Status"),React.createElement("th",{scope:"col",className:"manage-column column-date"},"Subscribed"),React.createElement("th",{scope:"col",className:"manage-column column-date"},"Confirmed"),React.createElement("th",{scope:"col",className:"manage-column column-preferences"},"Preferences"))),React.createElement("tbody",{id:"the-list"},0===A.length?React.createElement("tr",{className:"no-items"},React.createElement("td",{className:"colspanchange",colSpan:"5"},"No subscribers found.")):A.map(function(t){var n,a,l,r,c,o,i;return React.createElement(e.Fragment,{key:t.id},React.createElement("tr",null,React.createElement("td",{className:"email column-email column-primary","data-colname":"Email"},React.createElement("strong",null,t.email),React.createElement("div",{className:"row-actions visible",style:{visibility:"visible"}},React.createElement("span",{className:"edit"},React.createElement("button",{type:"button",className:"button button-small button-primary",onClick:function(){return h(t)},style:{marginRight:"4px"}},"Edit")),React.createElement("span",{className:"delete"},React.createElement("button",{type:"button",className:"button button-small button-link-delete",onClick:function(e){return T(e,t)},style:{color:"#b32d2e"}},"Delete")))),React.createElement("td",{className:"status column-status","data-colname":"Status"},React.createElement("span",{className:"mayo-subscriber-status mayo-status-".concat(t.status)},t.status.charAt(0).toUpperCase()+t.status.slice(1))),React.createElement("td",{className:"date column-date","data-colname":"Subscribed"},O(t.created_at)),React.createElement("td",{className:"date column-date","data-colname":"Confirmed"},O(t.confirmed_at)),React.createElement("td",{className:"preferences column-preferences","data-colname":"Preferences"},React.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"2px"}},((r=t.preferences)?((null===(c=r.categories)||void 0===c?void 0:c.length)||0)+((null===(o=r.tags)||void 0===o?void 0:o.length)||0)+((null===(i=r.service_bodies)||void 0===i?void 0:i.length)||0):0)>0?React.createElement(React.Fragment,null,null===(n=t.preferences.categories)||void 0===n?void 0:n.map(function(e,n){var a;return React.createElement("span",{key:"cat-".concat(e),style:j.category},(null===(a=t.preferences_display)||void 0===a||null===(a=a.categories)||void 0===a?void 0:a[n])||function(e){var t,n=null==_||null===(t=_.categories)||void 0===t?void 0:t.find(function(t){return String(t.id)===String(e)});return(null==n?void 0:n.name)||"Category ".concat(e)}(e))}),null===(a=t.preferences.tags)||void 0===a?void 0:a.map(function(e,n){var a;return React.createElement("span",{key:"tag-".concat(e),style:j.tag},(null===(a=t.preferences_display)||void 0===a||null===(a=a.tags)||void 0===a?void 0:a[n])||function(e){var t,n=null==_||null===(t=_.tags)||void 0===t?void 0:t.find(function(t){return String(t.id)===String(e)});return(null==n?void 0:n.name)||"Tag ".concat(e)}(e))}),null===(l=t.preferences.service_bodies)||void 0===l?void 0:l.map(function(e,n){var a;return React.createElement("span",{key:"sb-".concat(e),style:j.serviceBody},(null===(a=t.preferences_display)||void 0===a||null===(a=a.service_bodies)||void 0===a?void 0:a[n])||function(e){var t,n=null==_||null===(t=_.service_bodies)||void 0===t?void 0:t.find(function(t){return String(t.id)===String(e)});return(null==n?void 0:n.name)||"Service Body ".concat(e)}(e))})):React.createElement("span",{style:j.all},"All announcements")))))})),React.createElement("tfoot",null,React.createElement("tr",null,React.createElement("th",{scope:"col",className:"manage-column column-email column-primary"},"Email"),React.createElement("th",{scope:"col",className:"manage-column column-status"},"Status"),React.createElement("th",{scope:"col",className:"manage-column column-date"},"Subscribed"),React.createElement("th",{scope:"col",className:"manage-column column-date"},"Confirmed"),React.createElement("th",{scope:"col",className:"manage-column column-preferences"},"Preferences")))),React.createElement("div",{className:"tablenav bottom"},React.createElement("div",{className:"tablenav-pages one-page"},React.createElement("span",{className:"displaying-num"},A.length," item",1!==A.length?"s":""))),g&&React.createElement(z,{subscriber:g,options:_,onSave:C,onClose:function(){return h(null)},saving:x}))},U=wp.plugins,W=React;function H(e){return H="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},H(e)}function Y(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function q(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Y(Object(n),!0).forEach(function(t){J(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Y(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function J(e,t,n){return(t=function(e){var t=function(e){if("object"!=H(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=H(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==H(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function $(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",l=n.toStringTag||"@@toStringTag";function r(n,a,l,r){var i=a&&a.prototype instanceof o?a:o,s=Object.create(i.prototype);return K(s,"_invoke",function(n,a,l){var r,o,i,s=0,u=l||[],m=!1,d={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,n){return r=t,o=0,i=e,d.n=n,c}};function p(n,a){for(o=n,i=a,t=0;!m&&s&&!l&&t<u.length;t++){var l,r=u[t],p=d.p,E=r[2];n>3?(l=E===a)&&(i=r[(o=r[4])?5:(o=3,3)],r[4]=r[5]=e):r[0]<=p&&((l=n<2&&p<r[1])?(o=0,d.v=a,d.n=r[1]):p<E&&(l=n<3||r[0]>a||a>E)&&(r[4]=n,r[5]=a,d.n=E,o=0))}if(l||n>1)return c;throw m=!0,a}return function(l,u,E){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&p(u,E),o=u,i=E;(t=o<2?e:i)||!m;){r||(o?o<3?(o>1&&(d.n=-1),p(o,i)):d.n=i:d.v=i);try{if(s=2,r){if(o||(l="next"),t=r[l]){if(!(t=t.call(r,i)))throw TypeError("iterator result is not an object");if(!t.done)return t;i=t.value,o<2&&(o=0)}else 1===o&&(t=r.return)&&t.call(r),o<2&&(i=TypeError("The iterator does not provide a '"+l+"' method"),o=1);r=e}else if((t=(m=d.n<0)?i:n.call(a,d))!==c)break}catch(t){r=e,o=1,i=t}finally{s=1}}return{value:t,done:m}}}(n,l,r),!0),s}var c={};function o(){}function i(){}function s(){}t=Object.getPrototypeOf;var u=[][a]?t(t([][a]())):(K(t={},a,function(){return this}),t),m=s.prototype=o.prototype=Object.create(u);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,K(e,l,"GeneratorFunction")),e.prototype=Object.create(m),e}return i.prototype=s,K(m,"constructor",s),K(s,"constructor",i),i.displayName="GeneratorFunction",K(s,l,"GeneratorFunction"),K(m),K(m,l,"Generator"),K(m,a,function(){return this}),K(m,"toString",function(){return"[object Generator]"}),($=function(){return{w:r,m:d}})()}function K(e,t,n,a){var l=Object.defineProperty;try{l({},"",{})}catch(e){l=0}K=function(e,t,n,a){function r(t,n){K(e,t,function(e){return this._invoke(t,n,e)})}t?l?l(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(r("next",0),r("throw",1),r("return",2))},K(e,t,n,a)}function V(e,t,n,a,l,r,c){try{var o=e[r](c),i=o.value}catch(e){return void n(e)}o.done?t(i):Promise.resolve(i).then(a,l)}function Z(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,l,r,c,o=[],i=!0,s=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(a=r.call(n)).done)&&(o.push(a.value),o.length!==t);i=!0);}catch(e){s=!0,l=e}finally{try{if(!i&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw l}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Q(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Q(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Q(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var X=(0,W.createContext)(),ee=function(){return(0,W.useContext)(X)},te=function(e){var t=e.children,n=Z((0,W.useState)([]),2),a=n[0],l=n[1],r=Z((0,W.useState)({}),2),c=r[0],o=r[1],i=Z((0,W.useState)(!0),2),s=i[0],m=i[1];return(0,W.useEffect)(function(){var e=function(){var e,t=(e=$().m(function e(){var t,n,a,r,c,o;return $().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,m(!0),e.n=1,u("/settings");case 1:if(t=e.v,n=t.bmlt_root_server){e.n=2;break}throw new Error("BMLT root server URL not set");case 2:return e.n=3,fetch("".concat(n,"/client_interface/json/?switcher=GetServiceBodies"));case 3:return a=e.v,e.n=4,a.json();case 4:r=e.v,c=r.sort(function(e,t){return e.name.localeCompare(t.name)}),l(c),e.n=6;break;case 5:e.p=5,o=e.v,console.error("Error fetching service bodies:",o),setError("Failed to load service bodies");case 6:return e.p=6,m(!1),e.f(6);case 7:return e.a(2)}},e,null,[[0,5,6,7]])}),function(){var t=this,n=arguments;return new Promise(function(a,l){var r=e.apply(t,n);function c(e){V(r,a,l,c,o,"next",e)}function o(e){V(r,a,l,c,o,"throw",e)}c(void 0)})});return function(){return t.apply(this,arguments)}}();e()},[]),React.createElement(X.Provider,{value:{serviceBodies:a,getServiceBodyName:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"local";if("local"===t){var n=a.find(function(t){return t.id===e});return(null==n?void 0:n.name)||"Out of Area"}if(c[t]){var l=c[t].find(function(t){return t.id===e});return(null==l?void 0:l.name)||"Out of Area"}return"Out of Area"},updateExternalServiceBodies:function(e,t){t&&Array.isArray(t)&&0!==t.length&&o(function(n){return q(q({},n),{},J({},e,t))})}}},s?React.createElement("div",null,"Loading..."):t)};const ne=wp.editor,ae=wp.data;wp.i18n;var le=[{label:"Eastern Time (US/Canada)",value:"America/New_York",region:"North America"},{label:"Central Time (US/Canada)",value:"America/Chicago",region:"North America"},{label:"Mountain Time (US/Canada)",value:"America/Denver",region:"North America"},{label:"Pacific Time (US/Canada)",value:"America/Los_Angeles",region:"North America"},{label:"Alaska Time (US)",value:"America/Anchorage",region:"North America"},{label:"Hawaii Time (US)",value:"Pacific/Honolulu",region:"North America"},{label:"Atlantic Time (Canada)",value:"America/Halifax",region:"North America"},{label:"Newfoundland Time (Canada)",value:"America/St_Johns",region:"North America"},{label:"Mexico City Time",value:"America/Mexico_City",region:"North America"},{label:"London (GMT/BST)",value:"Europe/London",region:"Europe"},{label:"Paris (CET/CEST)",value:"Europe/Paris",region:"Europe"},{label:"Berlin (CET/CEST)",value:"Europe/Berlin",region:"Europe"},{label:"Rome (CET/CEST)",value:"Europe/Rome",region:"Europe"},{label:"Madrid (CET/CEST)",value:"Europe/Madrid",region:"Europe"},{label:"Amsterdam (CET/CEST)",value:"Europe/Amsterdam",region:"Europe"},{label:"Brussels (CET/CEST)",value:"Europe/Brussels",region:"Europe"},{label:"Zurich (CET/CEST)",value:"Europe/Zurich",region:"Europe"},{label:"Vienna (CET/CEST)",value:"Europe/Vienna",region:"Europe"},{label:"Stockholm (CET/CEST)",value:"Europe/Stockholm",region:"Europe"},{label:"Oslo (CET/CEST)",value:"Europe/Oslo",region:"Europe"},{label:"Copenhagen (CET/CEST)",value:"Europe/Copenhagen",region:"Europe"},{label:"Helsinki (EET/EEST)",value:"Europe/Helsinki",region:"Europe"},{label:"Athens (EET/EEST)",value:"Europe/Athens",region:"Europe"},{label:"Istanbul (TRT)",value:"Europe/Istanbul",region:"Europe"},{label:"Moscow (MSK)",value:"Europe/Moscow",region:"Europe"},{label:"Dublin (GMT/IST)",value:"Europe/Dublin",region:"Europe"},{label:"Lisbon (WET/WEST)",value:"Europe/Lisbon",region:"Europe"},{label:"Tokyo (JST)",value:"Asia/Tokyo",region:"Asia"},{label:"Shanghai (CST)",value:"Asia/Shanghai",region:"Asia"},{label:"Hong Kong (HKT)",value:"Asia/Hong_Kong",region:"Asia"},{label:"Singapore (SGT)",value:"Asia/Singapore",region:"Asia"},{label:"Seoul (KST)",value:"Asia/Seoul",region:"Asia"},{label:"Bangkok (ICT)",value:"Asia/Bangkok",region:"Asia"},{label:"Manila (PHT)",value:"Asia/Manila",region:"Asia"},{label:"Jakarta (WIB)",value:"Asia/Jakarta",region:"Asia"},{label:"Mumbai (IST)",value:"Asia/Kolkata",region:"Asia"},{label:"Dubai (GST)",value:"Asia/Dubai",region:"Asia"},{label:"Riyadh (AST)",value:"Asia/Riyadh",region:"Asia"},{label:"Tel Aviv (IST)",value:"Asia/Jerusalem",region:"Asia"},{label:"Dhaka (BST)",value:"Asia/Dhaka",region:"Asia"},{label:"Karachi (PKT)",value:"Asia/Karachi",region:"Asia"},{label:"Tashkent (UZT)",value:"Asia/Tashkent",region:"Asia"},{label:"Sydney (AEST/AEDT)",value:"Australia/Sydney",region:"Australia & Oceania"},{label:"Melbourne (AEST/AEDT)",value:"Australia/Melbourne",region:"Australia & Oceania"},{label:"Brisbane (AEST)",value:"Australia/Brisbane",region:"Australia & Oceania"},{label:"Perth (AWST)",value:"Australia/Perth",region:"Australia & Oceania"},{label:"Adelaide (ACST/ACDT)",value:"Australia/Adelaide",region:"Australia & Oceania"},{label:"Darwin (ACST)",value:"Australia/Darwin",region:"Australia & Oceania"},{label:"Hobart (AEST/AEDT)",value:"Australia/Hobart",region:"Australia & Oceania"},{label:"Auckland (NZST/NZDT)",value:"Pacific/Auckland",region:"Australia & Oceania"},{label:"Wellington (NZST/NZDT)",value:"Pacific/Auckland",region:"Australia & Oceania"},{label:"Fiji (FJT)",value:"Pacific/Fiji",region:"Australia & Oceania"},{label:"Cairo (EET)",value:"Africa/Cairo",region:"Africa"},{label:"Cape Town (SAST)",value:"Africa/Johannesburg",region:"Africa"},{label:"Lagos (WAT)",value:"Africa/Lagos",region:"Africa"},{label:"Nairobi (EAT)",value:"Africa/Nairobi",region:"Africa"},{label:"Casablanca (WET)",value:"Africa/Casablanca",region:"Africa"},{label:"Tunis (CET)",value:"Africa/Tunis",region:"Africa"},{label:"São Paulo (BRT)",value:"America/Sao_Paulo",region:"South America"},{label:"Buenos Aires (ART)",value:"America/Argentina/Buenos_Aires",region:"South America"},{label:"Santiago (CLT)",value:"America/Santiago",region:"South America"},{label:"Lima (PET)",value:"America/Lima",region:"South America"},{label:"Bogotá (COT)",value:"America/Bogota",region:"South America"},{label:"Caracas (VET)",value:"America/Caracas",region:"South America"}],re=function(){return le.map(function(e){return{label:e.label,value:e.value}})},ce=function(){try{var e=Intl.DateTimeFormat().resolvedOptions().timeZone;return le.find(function(t){return t.value===e})?e:"America/New_York"}catch(e){return"America/New_York"}};function oe(e){return oe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},oe(e)}function ie(e){return function(e){if(Array.isArray(e))return ve(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Re(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function se(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?se(Object(n),!0).forEach(function(t){me(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):se(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function me(e,t,n){return(t=function(e){var t=function(e){if("object"!=oe(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=oe(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==oe(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function de(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",l=n.toStringTag||"@@toStringTag";function r(n,a,l,r){var i=a&&a.prototype instanceof o?a:o,s=Object.create(i.prototype);return pe(s,"_invoke",function(n,a,l){var r,o,i,s=0,u=l||[],m=!1,d={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,n){return r=t,o=0,i=e,d.n=n,c}};function p(n,a){for(o=n,i=a,t=0;!m&&s&&!l&&t<u.length;t++){var l,r=u[t],p=d.p,E=r[2];n>3?(l=E===a)&&(i=r[(o=r[4])?5:(o=3,3)],r[4]=r[5]=e):r[0]<=p&&((l=n<2&&p<r[1])?(o=0,d.v=a,d.n=r[1]):p<E&&(l=n<3||r[0]>a||a>E)&&(r[4]=n,r[5]=a,d.n=E,o=0))}if(l||n>1)return c;throw m=!0,a}return function(l,u,E){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&p(u,E),o=u,i=E;(t=o<2?e:i)||!m;){r||(o?o<3?(o>1&&(d.n=-1),p(o,i)):d.n=i:d.v=i);try{if(s=2,r){if(o||(l="next"),t=r[l]){if(!(t=t.call(r,i)))throw TypeError("iterator result is not an object");if(!t.done)return t;i=t.value,o<2&&(o=0)}else 1===o&&(t=r.return)&&t.call(r),o<2&&(i=TypeError("The iterator does not provide a '"+l+"' method"),o=1);r=e}else if((t=(m=d.n<0)?i:n.call(a,d))!==c)break}catch(t){r=e,o=1,i=t}finally{s=1}}return{value:t,done:m}}}(n,l,r),!0),s}var c={};function o(){}function i(){}function s(){}t=Object.getPrototypeOf;var u=[][a]?t(t([][a]())):(pe(t={},a,function(){return this}),t),m=s.prototype=o.prototype=Object.create(u);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,pe(e,l,"GeneratorFunction")),e.prototype=Object.create(m),e}return i.prototype=s,pe(m,"constructor",s),pe(s,"constructor",i),i.displayName="GeneratorFunction",pe(s,l,"GeneratorFunction"),pe(m),pe(m,l,"Generator"),pe(m,a,function(){return this}),pe(m,"toString",function(){return"[object Generator]"}),(de=function(){return{w:r,m:d}})()}function pe(e,t,n,a){var l=Object.defineProperty;try{l({},"",{})}catch(e){l=0}pe=function(e,t,n,a){function r(t,n){pe(e,t,function(e){return this._invoke(t,n,e)})}t?l?l(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(r("next",0),r("throw",1),r("return",2))},pe(e,t,n,a)}function Ee(e,t,n,a,l,r,c){try{var o=e[r](c),i=o.value}catch(e){return void n(e)}o.done?t(i):Promise.resolve(i).then(a,l)}function fe(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,l,r,c,o=[],i=!0,s=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(a=r.call(n)).done)&&(o.push(a.value),o.length!==t);i=!0);}catch(e){s=!0,l=e}finally{try{if(!i&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw l}}return o}}(e,t)||Re(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Re(e,t){if(e){if("string"==typeof e)return ve(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ve(e,t):void 0}}function ve(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}const ye=function(){var t,a,l=ee().serviceBodies,r=fe((0,e.useState)(!1),2),c=r[0],o=r[1],i=fe((0,e.useState)(""),2),s=i[0],m=i[1],d=fe((0,e.useState)([]),2),p=d[0],E=d[1],f=fe((0,e.useState)(!1),2),R=f[0],v=f[1],y=(0,ae.useSelect)(function(e){return e("core/editor").getCurrentPostType()}),g=(0,ae.useSelect)(function(e){return e("core/editor").getCurrentPostId()}),h=(0,ae.useSelect)(function(e){return e("core/editor").getEditedPostAttribute("meta")||{}}),b=(0,ae.useDispatch)("core/editor").editPost,_=(0,ae.useSelect)(function(e){return e("core/editor").getEditedPostAttribute("status")});if((0,e.useEffect)(function(){if("mayo_event"===y&&g&&"auto-draft"!==_){var e=function(){var e,t=(e=de().m(function e(){var t,n;return de().w(function(e){for(;;)switch(e.p=e.n){case 0:return v(!0),e.p=1,e.n=2,u("/announcements?linked_event=".concat(g));case 2:t=e.v,E(t.announcements||[]),e.n=4;break;case 3:e.p=3,n=e.v,console.error("Error fetching linked announcements:",n),E([]);case 4:v(!1);case 5:return e.a(2)}},e,null,[[1,3]])}),function(){var t=this,n=arguments;return new Promise(function(a,l){var r=e.apply(t,n);function c(e){Ee(r,a,l,c,o,"next",e)}function o(e){Ee(r,a,l,c,o,"throw",e)}c(void 0)})});return function(){return t.apply(this,arguments)}}();e()}},[y,g,_]),"mayo_event"!==y)return null;var S="auto-draft"===_,w=function(e,t){b({meta:ue(ue({},h),{},me({},e,t))})};(0,e.useEffect)(function(){if(S&&!h.timezone){var e=ce();w("timezone",e)}},[S,h.timezone]);var x=h.recurring_pattern||{type:"none",interval:1,weekdays:[],endDate:"",monthlyType:"date",monthlyDate:"",monthlyWeekday:""},k=function(e){var t=ue(ue(ue({},x),e),{},{weekdays:e.weekdays||x.weekdays||[]});w("recurring_pattern",t)},C=h.skipped_occurrences||[],T=[{value:0,label:"Sunday"},{value:1,label:"Monday"},{value:2,label:"Tuesday"},{value:3,label:"Wednesday"},{value:4,label:"Thursday"},{value:5,label:"Friday"},{value:6,label:"Saturday"}],A=function(){return h.event_start_date?new Date(h.event_start_date).getDate().toString():""},N=function(){if(h.event_start_date){var e=new Date(h.event_start_date),t=Math.ceil(e.getDate()/7);return"".concat(t,",").concat(e.getDay())}return""};return React.createElement(React.Fragment,null,React.createElement(ne.PluginDocumentSettingPanel,{name:"mayo-event-details",title:"Event Details",className:"mayo-event-details"},React.createElement(n.SelectControl,{label:"Event Type",value:h.event_type,options:[{label:"Select Event Type",value:""},{label:"Service",value:"Service"},{label:"Activity",value:"Activity"}],onChange:function(e){return w("event_type",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement(n.PanelBody,{title:"Event Date & Time",initialOpen:!0},React.createElement("div",{className:"mayo-sidebar-datetime"},React.createElement("p",{className:"mayo-sidebar-label"},"Start Date/Time"),React.createElement("div",{className:"mayo-sidebar-datetime-inputs"},React.createElement(n.TextControl,{type:"date",value:h.event_start_date,onChange:function(e){return w("event_start_date",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement(n.TextControl,{type:"time",value:h.event_start_time,onChange:function(e){return w("event_start_time",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0})),React.createElement("p",{className:"mayo-sidebar-label"},"End Date/Time"),React.createElement("div",{className:"mayo-sidebar-datetime-inputs"},React.createElement(n.TextControl,{type:"date",value:h.event_end_date,onChange:function(e){return w("event_end_date",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement(n.TextControl,{type:"time",value:h.event_end_time,onChange:function(e){return w("event_end_time",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}))),React.createElement(n.SelectControl,{label:"Timezone",value:h.timezone||"",options:[{label:"-- No timezone set --",value:""}].concat(ie(re())),onChange:function(e){return w("timezone",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0})),React.createElement(n.PanelBody,{title:"Recurring Pattern",initialOpen:!0},React.createElement(n.SelectControl,{label:"Repeat",value:x.type,options:[{label:"No Recurrence",value:"none"},{label:"Daily",value:"daily"},{label:"Weekly",value:"weekly"},{label:"Monthly",value:"monthly"}],onChange:function(e){return k({type:e})},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),"none"!==x.type&&React.createElement(React.Fragment,null,React.createElement("div",{className:"mayo-recurring-interval"},React.createElement(n.__experimentalNumberControl,{label:"Repeat every",min:1,value:x.interval,onChange:function(e){return k({interval:e})}}),React.createElement("span",null,"daily"===x.type?"days":"weekly"===x.type?"weeks":"months")),"weekly"===x.type&&React.createElement("div",{className:"mayo-weekday-controls"},React.createElement("p",{className:"components-base-control__label"},"On these days"),T.map(function(e){return React.createElement(n.CheckboxControl,{key:e.value,label:e.label,checked:x.weekdays.includes(e.value),onChange:function(t){var n=t?[].concat(ie(x.weekdays),[e.value]):x.weekdays.filter(function(t){return t!==e.value});k({weekdays:n})}})})),React.createElement(n.TextControl,{label:"End Date (optional)",type:"date",value:x.endDate,onChange:function(e){return k({endDate:e})},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0})),"monthly"===x.type&&React.createElement("div",{className:"mayo-monthly-pattern"},React.createElement(n.RadioControl,{label:"Monthly Pattern",selected:x.monthlyType||"date",options:[{label:"On a specific date",value:"date"},{label:"On a specific day",value:"weekday"}],onChange:function(e){return k({monthlyType:e,monthlyDate:"date"===e?A():"",monthlyWeekday:"weekday"===e?N():""})}}),"date"===x.monthlyType&&React.createElement(n.__experimentalNumberControl,{label:"Day of month",value:x.monthlyDate||A(),onChange:function(e){return k({monthlyDate:e})},min:1,max:31}),"weekday"===x.monthlyType&&React.createElement("div",{className:"mayo-monthly-weekday"},React.createElement(n.SelectControl,{label:"Week",value:(null===(t=x.monthlyWeekday)||void 0===t?void 0:t.split(",")[0])||"1",options:[{value:"1",label:"First"},{value:"2",label:"Second"},{value:"3",label:"Third"},{value:"4",label:"Fourth"},{value:"5",label:"Fifth"},{value:"-1",label:"Last"}],onChange:function(e){var t,n=(null===(t=x.monthlyWeekday)||void 0===t?void 0:t.split(",")[1])||"0";k({monthlyWeekday:"".concat(e,",").concat(n)})},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement(n.SelectControl,{label:"Day",value:(null===(a=x.monthlyWeekday)||void 0===a?void 0:a.split(",")[1])||"0",options:T,onChange:function(e){var t,n=(null===(t=x.monthlyWeekday)||void 0===t?void 0:t.split(",")[0])||"1";k({monthlyWeekday:"".concat(n,",").concat(e)})},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0})))),"none"!==x.type&&React.createElement(n.PanelBody,{title:"Skipped Occurrences",initialOpen:!1},React.createElement("p",{className:"components-base-control__help"},"Manage specific dates when this recurring event should not occur."),C.length>0&&React.createElement("div",{className:"mayo-skipped-occurrences-list"},React.createElement("p",{className:"components-base-control__label"},"Skipped Dates:"),C.map(function(e,t){return React.createElement("div",{key:t,className:"mayo-skipped-occurrence-item"},React.createElement("span",null,(l=(a=fe(e.split("-").map(Number),3))[0],r=a[1],c=a[2],new Date(l,r-1,c).toLocaleDateString("en-US",{weekday:"long",year:"numeric",month:"long",day:"numeric"}))),React.createElement(n.Button,{isSmall:!0,isDestructive:!0,onClick:function(){return t=e,n=C.filter(function(e){return e!==t}),void w("skipped_occurrences",n);var t,n}},"Remove"));var a,l,r,c})),c?React.createElement("div",{className:"mayo-add-skip-form"},React.createElement(n.TextControl,{type:"date",label:"Date to skip",value:s,onChange:m,__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement("div",{className:"mayo-add-skip-actions"},React.createElement(n.Button,{isPrimary:!0,isSmall:!0,onClick:function(){if(s){var e=[].concat(ie(C),[s]);w("skipped_occurrences",e),m(""),o(!1)}},disabled:!s},"Add Skip"),React.createElement(n.Button,{isSecondary:!0,isSmall:!0,onClick:function(){o(!1),m("")}},"Cancel"))):React.createElement(n.Button,{isSecondary:!0,isSmall:!0,onClick:function(){return o(!0)}},"Add Skipped Date")),React.createElement(n.PanelBody,{title:"Service Body",initialOpen:!0},React.createElement(n.SelectControl,{label:"Service Body",value:h.service_body,options:[{label:"Select a service body",value:""},{label:"Unaffiliated (0)",value:"0"}].concat(ie(l.map(function(e){return{label:"".concat(e.name," (").concat(e.id,")"),value:e.id}}))),onChange:function(e){return w("service_body",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0})),React.createElement(n.PanelBody,{title:"Location Details",initialOpen:!0},React.createElement(n.TextControl,{label:"Location Name",value:h.location_name,onChange:function(e){return w("location_name",e)},placeholder:"e.g., Community Center",__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement(n.TextControl,{label:"Address",value:h.location_address,onChange:function(e){return w("location_address",e)},placeholder:"Full address",__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement(n.TextControl,{label:"Location Details",value:h.location_details,onChange:function(e){return w("location_details",e)},placeholder:"Parking info, entrance details, etc.",__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}))),React.createElement(ne.PluginDocumentSettingPanel,{name:"mayo-point-of-contact",title:"Point of Contact",className:"mayo-private-contact"},React.createElement(n.PanelBody,{title:"Contact Information (Private)",initialOpen:!0},React.createElement(n.TextControl,{label:"Contact Name",value:h.contact_name,onChange:function(e){return w("contact_name",e)},placeholder:"Full name of the contact person",__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement(n.TextControl,{label:"Contact Email",value:h.email,onChange:function(e){return w("email",e)},placeholder:"Email address",type:"email",__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}))),!S&&React.createElement(ne.PluginDocumentSettingPanel,{name:"mayo-linked-announcements",title:"Linked Announcements",className:"mayo-linked-announcements"},React.createElement("p",{className:"components-base-control__help",style:{marginTop:0}},"Announcements that reference this event."),R&&React.createElement("div",{style:{textAlign:"center",padding:"16px"}},React.createElement(n.Spinner,null)),!R&&0===p.length&&React.createElement("p",{style:{color:"#666",fontStyle:"italic"}},"No announcements linked to this event."),!R&&p.length>0&&React.createElement("div",{className:"mayo-linked-announcements-list"},p.map(function(e){var t=e.is_active?"#46b450":e.display_start_date&&e.display_start_date>(new Date).toISOString().split("T")[0]?"#0073aa":"#dc3545",n=e.is_active?"Active":e.display_start_date&&e.display_start_date>(new Date).toISOString().split("T")[0]?"Scheduled":"Expired";return React.createElement("div",{key:e.id,style:{padding:"10px 12px",backgroundColor:"#f9f9f9",borderRadius:"4px",marginBottom:"8px",borderLeft:"3px solid ".concat(t)}},React.createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"}},React.createElement("strong",null,e.title),React.createElement("span",{style:{fontSize:"11px",color:t,fontWeight:600}},n)),React.createElement("div",{style:{fontSize:"12px",color:"#666",marginTop:"4px"}},"Priority: ",React.createElement("span",{style:{color:"urgent"===e.priority?"#dc3545":"high"===e.priority?"#ff9800":"low"===e.priority?"#6c757d":"#0073aa",fontWeight:600}},e.priority)),React.createElement("div",{style:{display:"flex",gap:"8px",marginTop:"8px"}},e.edit_link&&React.createElement("a",{href:e.edit_link,target:"_blank",rel:"noopener noreferrer",style:{display:"inline-flex",alignItems:"center",padding:"4px 8px",fontSize:"11px",backgroundColor:"#f0f0f0",border:"1px solid #c3c4c7",borderRadius:"3px",textDecoration:"none",color:"#2271b1",whiteSpace:"nowrap"}},React.createElement("span",{className:"dashicons dashicons-edit",style:{fontSize:"14px",marginRight:"4px",width:"14px",height:"14px"}}),"Edit")))})),React.createElement("div",{style:{marginTop:"12px"}},React.createElement(n.Button,{isSecondary:!0,href:"".concat(window.location.origin,"/wp-admin/post-new.php?post_type=mayo_announcement&linked_event=").concat(g),target:"_blank"},"Create Announcement"))))};function ge(e){return ge="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ge(e)}function he(e){if(null!=e){var t=e["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],n=0;if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length))return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}throw new TypeError(ge(e)+" is not iterable")}function be(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=Pe(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var a=0,l=function(){};return{s:l,n:function(){return a>=e.length?{done:!0}:{done:!1,value:e[a++]}},e:function(e){throw e},f:l}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,c=!0,o=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return c=e.done,e},e:function(e){o=!0,r=e},f:function(){try{c||null==n.return||n.return()}finally{if(o)throw r}}}}function _e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,a)}return n}function Se(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?_e(Object(n),!0).forEach(function(t){we(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):_e(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function we(e,t,n){return(t=function(e){var t=function(e){if("object"!=ge(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=ge(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==ge(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xe(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",l=n.toStringTag||"@@toStringTag";function r(n,a,l,r){var i=a&&a.prototype instanceof o?a:o,s=Object.create(i.prototype);return ke(s,"_invoke",function(n,a,l){var r,o,i,s=0,u=l||[],m=!1,d={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,n){return r=t,o=0,i=e,d.n=n,c}};function p(n,a){for(o=n,i=a,t=0;!m&&s&&!l&&t<u.length;t++){var l,r=u[t],p=d.p,E=r[2];n>3?(l=E===a)&&(i=r[(o=r[4])?5:(o=3,3)],r[4]=r[5]=e):r[0]<=p&&((l=n<2&&p<r[1])?(o=0,d.v=a,d.n=r[1]):p<E&&(l=n<3||r[0]>a||a>E)&&(r[4]=n,r[5]=a,d.n=E,o=0))}if(l||n>1)return c;throw m=!0,a}return function(l,u,E){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&p(u,E),o=u,i=E;(t=o<2?e:i)||!m;){r||(o?o<3?(o>1&&(d.n=-1),p(o,i)):d.n=i:d.v=i);try{if(s=2,r){if(o||(l="next"),t=r[l]){if(!(t=t.call(r,i)))throw TypeError("iterator result is not an object");if(!t.done)return t;i=t.value,o<2&&(o=0)}else 1===o&&(t=r.return)&&t.call(r),o<2&&(i=TypeError("The iterator does not provide a '"+l+"' method"),o=1);r=e}else if((t=(m=d.n<0)?i:n.call(a,d))!==c)break}catch(t){r=e,o=1,i=t}finally{s=1}}return{value:t,done:m}}}(n,l,r),!0),s}var c={};function o(){}function i(){}function s(){}t=Object.getPrototypeOf;var u=[][a]?t(t([][a]())):(ke(t={},a,function(){return this}),t),m=s.prototype=o.prototype=Object.create(u);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,ke(e,l,"GeneratorFunction")),e.prototype=Object.create(m),e}return i.prototype=s,ke(m,"constructor",s),ke(s,"constructor",i),i.displayName="GeneratorFunction",ke(s,l,"GeneratorFunction"),ke(m),ke(m,l,"Generator"),ke(m,a,function(){return this}),ke(m,"toString",function(){return"[object Generator]"}),(xe=function(){return{w:r,m:d}})()}function ke(e,t,n,a){var l=Object.defineProperty;try{l({},"",{})}catch(e){l=0}ke=function(e,t,n,a){function r(t,n){ke(e,t,function(e){return this._invoke(t,n,e)})}t?l?l(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(r("next",0),r("throw",1),r("return",2))},ke(e,t,n,a)}function Ce(e){return function(e){if(Array.isArray(e))return Oe(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Pe(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Te(e,t,n,a,l,r,c){try{var o=e[r](c),i=o.value}catch(e){return void n(e)}o.done?t(i):Promise.resolve(i).then(a,l)}function Ae(e){return function(){var t=this,n=arguments;return new Promise(function(a,l){var r=e.apply(t,n);function c(e){Te(r,a,l,c,o,"next",e)}function o(e){Te(r,a,l,c,o,"throw",e)}c(void 0)})}}function Ne(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,l,r,c,o=[],i=!0,s=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(a=r.call(n)).done)&&(o.push(a.value),o.length!==t);i=!0);}catch(e){s=!0,l=e}finally{try{if(!i&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw l}}return o}}(e,t)||Pe(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Pe(e,t){if(e){if("string"==typeof e)return Oe(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Oe(e,t):void 0}}function Oe(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}(0,U.getPlugins)().some(function(e){return"mayo-event-details"===e.name})||(0,U.registerPlugin)("mayo-event-details",{render:function(){return React.createElement(te,null,React.createElement(ye,null))},icon:"calendar"});var De=function(t){var a=t.isOpen,l=t.onClose,r=t.onSelectEvent,c=t.onRemoveEvent,o=t.linkedEventRefs,i=(t.getRefKey,Ne((0,e.useState)(""),2)),s=i[0],m=i[1],d=Ne((0,e.useState)([]),2),p=d[0],E=d[1],f=Ne((0,e.useState)(!1),2),R=f[0],v=f[1],y=Ne((0,e.useState)(!1),2),g=y[0],h=y[1],b=Ne((0,e.useState)(1),2),_=b[0],S=b[1],w=Ne((0,e.useState)(!0),2),x=w[0],k=w[1],C=Ne((0,e.useState)(0),2),T=C[0],A=C[1],N=Ne((0,e.useState)(!0),2),P=N[0],O=N[1],D=(0,e.useRef)(null),j=(0,e.useRef)(null),B=function(e){return o.some(function(t){return"local"===t.type&&"local"===e.source.type?t.id===e.id:"external"===t.type&&"external"===e.source.type&&t.id===e.id&&t.source_id===e.source.id})},M=(0,e.useCallback)(function(){var e=Ae(xe().m(function e(t,n,a){var l,r,c,o,i,s=arguments;return xe().w(function(e){for(;;)switch(e.p=e.n){case 0:return l=s.length>3&&void 0!==s[3]&&s[3],1===n?v(!0):h(!0),e.p=1,r=new URLSearchParams({per_page:20,page:n,hide_past:a?"1":"0"}),t&&r.append("search",t),e.n=2,u("/events/search-all?".concat(r.toString()));case 2:c=e.v,o=c.events||[],E(l?function(e){return[].concat(Ce(e),Ce(o))}:o),A(c.total||0),k(n<(c.total_pages||1)),S(n),e.n=4;break;case 3:e.p=3,i=e.v,console.error("Error fetching events:",i),l||E([]),k(!1);case 4:return e.p=4,v(!1),h(!1),e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}));return function(t,n,a){return e.apply(this,arguments)}}(),[]);(0,e.useEffect)(function(){if(a)return j.current&&clearTimeout(j.current),j.current=setTimeout(function(){M(s,1,P,!1)},300),function(){j.current&&clearTimeout(j.current)}},[a,s,P,M]),(0,e.useEffect)(function(){a&&(m(""),E([]),S(1),k(!0),O(!0))},[a]);var L=(0,e.useCallback)(function(){if(D.current&&!R&&!g&&x){var e=D.current,t=e.scrollTop;e.scrollHeight-t-e.clientHeight<100&&M(s,_+1,P,!0)}},[R,g,x,s,_,P,M]);return a?React.createElement(n.Modal,{title:"Link Events",onRequestClose:l,style:{maxWidth:"600px",width:"100%"},className:"mayo-event-search-modal"},React.createElement("div",{style:{marginBottom:"16px"}},React.createElement(n.TextControl,{label:"Search Events",value:s,onChange:m,placeholder:"Search by event name...",__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginTop:"8px"}},React.createElement(n.CheckboxControl,{label:"Hide past events",checked:P,onChange:O,__nextHasNoMarginBottom:!0}),T>0&&React.createElement("span",{style:{fontSize:"12px",color:"#666"}},T," event",1!==T?"s":""," found"))),React.createElement("div",{ref:D,onScroll:L,style:{maxHeight:"400px",overflowY:"auto",border:"1px solid #ddd",borderRadius:"4px",backgroundColor:"#fff"}},R&&React.createElement("div",{style:{textAlign:"center",padding:"40px"}},React.createElement(n.Spinner,null),React.createElement("p",{style:{margin:"8px 0 0",color:"#666"}},"Loading events...")),!R&&0===p.length&&React.createElement("div",{style:{textAlign:"center",padding:"40px",color:"#666"}},s?'No events found matching "'.concat(s,'"'):"No events available"),!R&&p.map(function(e){var t="external"===e.source.type,a=B(e),l=t?"external-".concat(e.source.id,"-").concat(e.id):"local-".concat(e.id);return React.createElement("div",{key:l,style:{padding:"12px 16px",borderBottom:"1px solid #eee",cursor:"pointer",transition:"background-color 0.2s",backgroundColor:a?"#e8f5e9":"transparent",borderLeft:"4px solid ".concat(a?"#4caf50":t?"#ff9800":"#0073aa")},onClick:function(){return a?null:function(e){B(e)||r(e)}(e)},onMouseEnter:function(e){a||(e.currentTarget.style.backgroundColor="#f0f7ff")},onMouseLeave:function(e){a||(e.currentTarget.style.backgroundColor=a?"#e8f5e9":"transparent")}},React.createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"}},React.createElement("div",{style:{flex:1}},React.createElement("div",{style:{fontWeight:600,marginBottom:"4px",display:"flex",alignItems:"center"}},a&&React.createElement("span",{className:"dashicons dashicons-yes-alt",style:{color:"#4caf50",fontSize:"16px",marginRight:"6px",width:"16px",height:"16px"}}),e.title),e.start_date&&React.createElement("div",{style:{fontSize:"12px",color:"#666",marginBottom:"4px"}},React.createElement("span",{className:"dashicons dashicons-calendar-alt",style:{fontSize:"12px",marginRight:"4px",verticalAlign:"middle",width:"12px",height:"12px"}}),function(e){if(!e)return"";try{var t=Ne(e.split("-").map(Number),3),n=t[0],a=t[1],l=t[2];return new Date(n,a-1,l).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}catch(t){return e}}(e.start_date))),React.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px"}},React.createElement("span",{style:{fontSize:"10px",backgroundColor:t?"#fff3e0":"#e3f2fd",color:t?"#e65100":"#1565c0",padding:"3px 8px",borderRadius:"3px",whiteSpace:"nowrap"}},e.source.name),a&&React.createElement(n.Button,{isSmall:!0,isDestructive:!0,onClick:function(t){return function(e,t){t.stopPropagation(),c(e)}(e,t)},style:{minWidth:"auto"}},"Unlink"))))}),g&&React.createElement("div",{style:{textAlign:"center",padding:"16px"}},React.createElement(n.Spinner,null),React.createElement("span",{style:{marginLeft:"8px",color:"#666",fontSize:"12px"}},"Loading more...")),!R&&!g&&!x&&p.length>0&&React.createElement("div",{style:{textAlign:"center",padding:"12px",color:"#666",fontSize:"12px"}},"End of results")),React.createElement("div",{style:{marginTop:"16px",textAlign:"right"}},React.createElement(n.Button,{variant:"secondary",onClick:l},"Close"))):null},je=[{value:"external",label:"External Link",dashicon:"dashicons-external"},{value:"hotel",label:"Hotel/Lodging",dashicon:"dashicons-building"},{value:"info",label:"Information",dashicon:"dashicons-info"},{value:"calendar",label:"Calendar",dashicon:"dashicons-calendar-alt"},{value:"location",label:"Location",dashicon:"dashicons-location"},{value:"link",label:"Generic Link",dashicon:"dashicons-admin-links"}],Be=function(t){var a=t.isOpen,l=t.onClose,r=t.onAddLink,c=Ne((0,e.useState)(""),2),o=c[0],i=c[1],s=Ne((0,e.useState)(""),2),u=s[0],m=s[1],d=Ne((0,e.useState)("external"),2),p=d[0],E=d[1],f=Ne((0,e.useState)(""),2),R=f[0],v=f[1];(0,e.useEffect)(function(){a&&(i(""),m(""),E("external"),v(""))},[a]);var y=function(e){if(!e)return v("URL is required"),!1;try{return new URL(e),v(""),!0}catch(e){return v("Please enter a valid URL (e.g., https://example.com)"),!1}};return a?React.createElement(n.Modal,{title:"Add Custom Link",onRequestClose:l,style:{maxWidth:"500px",width:"100%"},className:"mayo-custom-link-modal"},React.createElement("div",{style:{marginBottom:"16px"}},React.createElement(n.TextControl,{label:"Link Title",value:u,onChange:m,placeholder:"e.g., Hotel Reservations",__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0})),React.createElement("div",{style:{marginBottom:"16px"}},React.createElement(n.TextControl,{label:"URL",value:o,onChange:function(e){i(e),R&&y(e)},placeholder:"https://example.com",type:"url",__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),R&&React.createElement("p",{style:{color:"#dc3545",fontSize:"12px",marginTop:"4px",marginBottom:0}},R)),React.createElement("div",{style:{marginBottom:"24px"}},React.createElement("label",{style:{display:"block",marginBottom:"8px",fontWeight:500}},"Icon"),React.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px"}},je.map(function(e){return React.createElement("button",{key:e.value,type:"button",onClick:function(){return E(e.value)},style:{display:"flex",flexDirection:"column",alignItems:"center",padding:"12px 16px",border:"2px solid ".concat(p===e.value?"#0073aa":"#ddd"),borderRadius:"4px",backgroundColor:p===e.value?"#f0f7ff":"#fff",cursor:"pointer",minWidth:"80px",transition:"all 0.2s"}},React.createElement("span",{className:"dashicons ".concat(e.dashicon),style:{fontSize:"24px",width:"24px",height:"24px",color:p===e.value?"#0073aa":"#666",marginBottom:"4px"}}),React.createElement("span",{style:{fontSize:"11px",color:p===e.value?"#0073aa":"#666"}},e.label))}))),React.createElement("div",{style:{display:"flex",justifyContent:"flex-end",gap:"8px"}},React.createElement(n.Button,{variant:"secondary",onClick:l},"Cancel"),React.createElement(n.Button,{variant:"primary",onClick:function(){y(o)&&u.trim()&&(r({type:"custom",id:Date.now(),url:o.trim(),title:u.trim(),icon:p}),l())},disabled:!u.trim()||!o.trim()},"Add Link"))):null};const Me=function(){var t=Ne((0,e.useState)(!1),2),a=t[0],l=t[1],r=Ne((0,e.useState)(!1),2),c=r[0],o=r[1],i=Ne((0,e.useState)(!1),2),s=i[0],m=i[1],d=Ne((0,e.useState)(null),2),p=d[0],E=d[1],f=Ne((0,e.useState)([]),2),R=f[0],v=f[1],y=Ne((0,e.useState)(!1),2),g=y[0],h=y[1],b=Ne((0,e.useState)(!1),2),_=b[0],S=b[1],w=Ne((0,e.useState)(null),2),x=w[0],k=w[1],C=ee().serviceBodies,T=(0,ae.useSelect)(function(e){return e("core/editor").getCurrentPostType()}),A=(0,ae.useSelect)(function(e){return e("core/editor").getEditedPostAttribute("status")}),N=(0,ae.useSelect)(function(e){return e("core/editor").getEditedPostAttribute("meta")||{}}),P=(0,ae.useSelect)(function(e){return e("core/editor").getEditedPostAttribute("categories")||[]}),O=(0,ae.useSelect)(function(e){return e("core/editor").getEditedPostAttribute("tags")||[]}),D=(0,ae.useDispatch)("core/editor").editPost,j=N.service_body||"";(0,e.useEffect)(function(){if("mayo_announcement"===T){var e=function(){var e=Ae(xe().m(function e(){var t,n;return xe().w(function(e){for(;;)switch(e.p=e.n){case 0:return h(!0),e.p=1,e.n=2,u("/subscribers/count",{method:"POST",body:JSON.stringify({categories:P,tags:O,service_body:j})});case 2:t=e.v,E(t.count),v(t.subscribers||[]),e.n=4;break;case 3:e.p=3,n=e.v,console.error("Error fetching subscriber count:",n),E(null),v([]);case 4:h(!1);case 5:return e.a(2)}},e,null,[[1,3]])}));return function(){return e.apply(this,arguments)}}(),t=setTimeout(e,300);return function(){return clearTimeout(t)}}},[T,P,O,j]),(0,e.useEffect)(function(){if(!s&&"mayo_announcement"===T&&"auto-draft"===A){var e=new URLSearchParams(window.location.search).get("linked_event");if(e){var t=parseInt(e,10);if(!isNaN(t)&&t>0){var n=N.linked_event_refs||[];if(!n.some(function(e){return"local"===e.type&&e.id===t})){var a={type:"local",id:t};D({meta:Se(Se({},N),{},{linked_event_refs:[].concat(Ce(n),[a])})})}}m(!0)}}},[T,A,s,N.linked_event_refs]),(0,e.useEffect)(function(){if("mayo_announcement"===T){var e=function(){var e=Ae(xe().m(function e(){var t,n;return xe().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,u("/settings");case 1:t=e.v,k({service_bodies:t.subscription_service_bodies||[]}),e.n=3;break;case 2:e.p=2,n=e.v,console.error("Error fetching subscription settings:",n),k({service_bodies:[]});case 3:return e.a(2)}},e,null,[[0,2]])}));return function(){return e.apply(this,arguments)}}();e()}},[T]);var B="auto-draft"===A;if((0,e.useEffect)(function(){if(B&&!N.display_timezone){var e=ce();D({meta:Se(Se({},N),{},{display_timezone:e})})}},[B,N.display_timezone]),"mayo_announcement"!==T)return null;var M=function(){if(!x||0===x.service_bodies.length)return C;var e=x.service_bodies.map(function(e){return e.toString()});return C.filter(function(t){return e.includes(t.id.toString())})}(),L=function(e,t){D({meta:Se(Se({},N),{},we({},e,t))})},I=function(){return N.linked_event_refs&&Array.isArray(N.linked_event_refs)&&N.linked_event_refs.length>0?N.linked_event_refs:N.linked_events&&Array.isArray(N.linked_events)?N.linked_events.map(function(e){return{type:"local",id:e}}):[]},F=I(),z=function(e){return"local"===e.type?"local-".concat(e.id):"custom"===e.type?"custom-".concat(e.id):"external-".concat(e.source_id,"-").concat(e.id)},G=function(e){var t=I().filter(function(t){return"local"===t.type&&"local"===e.type?t.id!==e.id:"external"===t.type&&"external"===e.type?!(t.id===e.id&&t.source_id===e.source_id):"custom"!==t.type||"custom"!==e.type||t.id!==e.id});L("linked_event_refs",t)},U=Ne((0,e.useState)({}),2),W=U[0],H=U[1],Y=Ne((0,e.useState)(!1),2),q=Y[0],J=Y[1];return(0,e.useEffect)(function(){var e=function(){var e=Ae(xe().m(function e(){var t,n,a,l,r,c,o;return xe().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t=F.filter(function(e){return"custom"!==e.type&&!W[z(e)]}),n={},F.filter(function(e){return"custom"===e.type}).forEach(function(e){var t=z(e);W[t]||(n[t]={title:e.title||"Custom Link",permalink:e.url||"#",icon:e.icon||"external",source:{type:"custom",id:"custom",name:"Custom Link"}})}),Object.keys(n).length>0&&H(function(e){return Se(Se({},e),n)}),0!==t.length){e.n=1;break}return e.a(2);case 1:J(!0),a={},l=be(t),e.p=2,c=xe().m(function e(){var t,n,l,c,o,i;return xe().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t=r.value,n=z(t),e.p=1,"local"!==t.type){e.n=3;break}return e.n=2,u("/events/".concat(t.id));case 2:(l=e.v)&&!l.code?a[n]={title:l.title||"Unknown Event",start_date:l.start_date||"",permalink:l.permalink||"",edit_link:l.edit_link||"",source:{type:"local",id:"local",name:"Local"}}:a[n]={title:"Event #".concat(t.id),start_date:"",permalink:"",edit_link:"",unavailable:!0,source:{type:"local",id:"local",name:"Local"}},e.n=7;break;case 3:if("external"!==t.type){e.n=7;break}return e.p=4,e.n=5,u("/events/search-all?per_page=100");case 5:c=e.v,o=(c.events||[]).find(function(e){return"external"===e.source.type&&e.source.id===t.source_id&&e.id===t.id}),a[n]=o?{title:o.title||"Unknown Event",start_date:o.start_date||"",permalink:o.permalink||"",edit_link:"",source:o.source}:{title:"External Event #".concat(t.id),start_date:"",permalink:"",edit_link:"",unavailable:!0,source:{type:"external",id:t.source_id,name:t.source_id}},e.n=7;break;case 6:e.p=6,e.v,a[n]={title:"External Event #".concat(t.id),start_date:"",permalink:"",edit_link:"",unavailable:!0,source:{type:"external",id:t.source_id,name:t.source_id}};case 7:e.n=9;break;case 8:e.p=8,i=e.v,console.error("Error fetching event details:",i),a[n]={title:"local"===t.type?"Event #".concat(t.id):"External Event #".concat(t.id),start_date:"",permalink:"",edit_link:"",unavailable:!0,source:"local"===t.type?{type:"local",id:"local",name:"Local"}:{type:"external",id:t.source_id,name:t.source_id}};case 9:return e.a(2)}},e,null,[[4,6],[1,8]])}),l.s();case 3:if((r=l.n()).done){e.n=5;break}return e.d(he(c()),4);case 4:e.n=3;break;case 5:e.n=7;break;case 6:e.p=6,o=e.v,l.e(o);case 7:return e.p=7,l.f(),e.f(7);case 8:Object.keys(a).length>0&&H(function(e){return Se(Se({},e),a)}),J(!1);case 9:return e.a(2)}},e,null,[[2,6,7,8]])}));return function(){return e.apply(this,arguments)}}();F.length>0&&e()},[JSON.stringify(F)]),React.createElement(React.Fragment,null,React.createElement(ne.PluginDocumentSettingPanel,{name:"mayo-announcement-details",title:"Announcement Settings",className:"mayo-announcement-details"},React.createElement(n.PanelBody,{title:"Display Window",initialOpen:!0},React.createElement("p",{className:"components-base-control__help",style:{marginTop:0,marginBottom:"12px"}},"Control when this announcement is visible on the frontend."),React.createElement("div",{style:{border:"1px solid #e0e0e0",borderRadius:"4px",padding:"12px",marginBottom:"12px",backgroundColor:"#fafafa"}},React.createElement("div",{style:{marginBottom:"4px"}},React.createElement("strong",{style:{fontSize:"12px",color:"#1e1e1e"}},"Start")),React.createElement(n.TextControl,{label:"Date",type:"date",value:N.display_start_date||"",onChange:function(e){return L("display_start_date",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement("div",{style:{marginTop:"8px"}},React.createElement(n.TextControl,{label:"Time",type:"time",value:N.display_start_time||"",onChange:function(e){return L("display_start_time",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0})),React.createElement("p",{className:"components-base-control__help",style:{marginTop:"8px",marginBottom:0}},"Leave empty to start showing immediately")),React.createElement("div",{style:{border:"1px solid #e0e0e0",borderRadius:"4px",padding:"12px",backgroundColor:"#fafafa"}},React.createElement("div",{style:{marginBottom:"4px"}},React.createElement("strong",{style:{fontSize:"12px",color:"#1e1e1e"}},"End")),React.createElement(n.TextControl,{label:"Date",type:"date",value:N.display_end_date||"",onChange:function(e){return L("display_end_date",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement("div",{style:{marginTop:"8px"}},React.createElement(n.TextControl,{label:"Time",type:"time",value:N.display_end_time||"",onChange:function(e){return L("display_end_time",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0})),React.createElement("p",{className:"components-base-control__help",style:{marginTop:"8px",marginBottom:0}},"Leave empty to show indefinitely")),React.createElement("div",{style:{marginTop:"12px"}},React.createElement(n.SelectControl,{label:"Timezone",value:N.display_timezone||"",options:[{label:"-- No timezone set --",value:""}].concat(Ce(re())),onChange:function(e){return L("display_timezone",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}))),React.createElement(n.PanelBody,{title:"Priority",initialOpen:!0},React.createElement(n.SelectControl,{label:"Priority Level",value:N.priority||"normal",options:[{label:"Low",value:"low"},{label:"Normal",value:"normal"},{label:"High",value:"high"},{label:"Urgent",value:"urgent"}],onChange:function(e){return L("priority",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement("p",{className:"components-base-control__help"},"Priority affects display order and styling.",React.createElement("span",{style:{display:"inline-block",marginLeft:"8px",color:{low:"#6c757d",normal:"#0073aa",high:"#ff9800",urgent:"#dc3545"}[N.priority||"normal"],fontWeight:600}},(N.priority||"normal").charAt(0).toUpperCase()+(N.priority||"normal").slice(1)))),React.createElement(n.PanelBody,{title:"Service Body",initialOpen:!0},React.createElement(n.SelectControl,{label:"Service Body",value:N.service_body||"",options:[{label:"Select a service body",value:""}].concat(Ce(!x||0===x.service_bodies.length||x.service_bodies.map(function(e){return e.toString()}).includes("0")?[{label:"Unaffiliated (0)",value:"0"}]:[]),Ce(M.map(function(e){return{label:"".concat(e.name," (").concat(e.id,")"),value:e.id}}))),onChange:function(e){return L("service_body",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),x&&x.service_bodies.length>0&&React.createElement("p",{className:"components-base-control__help",style:{marginTop:"8px"}},"Only service bodies enabled in"," ",React.createElement("a",{href:"/wp-admin/admin.php?page=mayo-settings",target:"_blank",rel:"noopener noreferrer"},"subscription settings")," ","are shown."))),React.createElement(ne.PluginDocumentSettingPanel,{name:"mayo-linked-events",title:"Links & Events",className:"mayo-linked-events"},React.createElement("p",{className:"components-base-control__help",style:{marginTop:0}},"Add custom links or link to events. Custom links appear first."),q&&F.length>0&&React.createElement("div",{style:{textAlign:"center",padding:"16px"}},React.createElement(n.Spinner,null),React.createElement("p",{style:{margin:"8px 0 0",color:"#666",fontSize:"12px"}},"Loading details...")),!q&&F.length>0&&React.createElement("div",{className:"mayo-linked-events-list",style:{marginBottom:"16px"}},F.map(function(e,t){var a,l,r,c,o=z(e),i=W[o]||{},s=i.title&&!i.title.startsWith("Event #")&&!i.title.startsWith("External Event #"),u="external"===e.type,m="custom"===e.type;return React.createElement("div",{key:o,style:{padding:"12px",backgroundColor:"#f9f9f9",borderRadius:"4px",marginBottom:"8px",borderLeft:"3px solid ".concat(m?"#9c27b0":u?"#ff9800":"#0073aa")}},React.createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"}},React.createElement("div",{style:{flex:1}},s||i.title||m?React.createElement(React.Fragment,null,React.createElement("div",{style:{display:"flex",alignItems:"center",marginBottom:"4px"}},m&&React.createElement("span",{className:"dashicons ".concat((r=e.icon||i.icon||"external",c=je.find(function(e){return e.value===r}),c?c.dashicon:"dashicons-external")),style:{fontSize:"16px",width:"16px",height:"16px",marginRight:"6px",color:"#9c27b0"}}),React.createElement("strong",null,i.title||e.title||(u?"External Event #".concat(e.id):"Event #".concat(e.id)))),React.createElement("span",{style:{display:"inline-block",fontSize:"11px",backgroundColor:m?"#f3e5f5":u?"#fff3e0":"#e3f2fd",color:m?"#7b1fa2":u?"#e65100":"#1565c0",padding:"2px 6px",borderRadius:"3px",marginBottom:"4px"}},m?"Custom Link":u?(null===(a=i.source)||void 0===a?void 0:a.name)||(null===(l=i.source)||void 0===l?void 0:l.id):"Local Event"),i.start_date&&React.createElement("div",{style:{color:"#666",fontSize:"12px",marginBottom:"8px"}},React.createElement("span",{className:"dashicons dashicons-calendar-alt",style:{fontSize:"14px",marginRight:"4px",verticalAlign:"middle"}}),function(e){if(!e)return"";try{var t=Ne(e.split("-").map(Number),3),n=t[0],a=t[1],l=t[2];return new Date(n,a-1,l).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}catch(t){return e}}(i.start_date)),React.createElement("div",{style:{display:"flex",gap:"8px",marginTop:"8px"}},(i.permalink||e.url)&&React.createElement("a",{href:i.permalink||e.url,target:"_blank",rel:"noopener noreferrer",style:{display:"inline-flex",alignItems:"center",padding:"4px 8px",fontSize:"11px",backgroundColor:"#f0f0f0",border:"1px solid #c3c4c7",borderRadius:"3px",textDecoration:"none",color:"#2271b1",whiteSpace:"nowrap"}},React.createElement("span",{className:"dashicons dashicons-external",style:{fontSize:"14px",marginRight:"4px",width:"14px",height:"14px"}}),m?"Open Link":u?"View on External Site":"View"),!u&&!m&&i.edit_link&&React.createElement("a",{href:i.edit_link,target:"_blank",rel:"noopener noreferrer",style:{display:"inline-flex",alignItems:"center",padding:"4px 8px",fontSize:"11px",backgroundColor:"#f0f0f0",border:"1px solid #c3c4c7",borderRadius:"3px",textDecoration:"none",color:"#2271b1",whiteSpace:"nowrap"}},React.createElement("span",{className:"dashicons dashicons-edit",style:{fontSize:"14px",marginRight:"4px",width:"14px",height:"14px"}}),"Edit"))):React.createElement("span",{style:{color:"#666"}},u?"External Event #".concat(e.id):"Event #".concat(e.id),React.createElement("span",{style:{fontSize:"12px",marginLeft:"8px"}},"(loading...)"))),React.createElement(n.Button,{isSmall:!0,isDestructive:!0,onClick:function(){return G(e)},style:{marginLeft:"12px"}},"Remove")))})),React.createElement("div",{style:{display:"flex",flexDirection:"column",gap:"8px"}},React.createElement(n.Button,{variant:"secondary",onClick:function(){return o(!0)},style:{justifyContent:"center"}},React.createElement("span",{className:"dashicons dashicons-admin-links",style:{marginRight:"4px"}}),"Add Custom Link"),React.createElement(n.Button,{variant:"secondary",onClick:function(){return l(!0)},style:{justifyContent:"center"}},React.createElement("span",{className:"dashicons dashicons-calendar-alt",style:{marginRight:"4px"}}),"Link Event")),React.createElement(Be,{isOpen:c,onClose:function(){return o(!1)},onAddLink:function(e){var t=I();L("linked_event_refs",[].concat(Ce(t),[e]))}}),React.createElement(De,{isOpen:a,onClose:function(){return l(!1)},onSelectEvent:function(e){!function(e){var t,n=I();t="local"===e.source.type?{type:"local",id:e.id}:{type:"external",id:e.id,source_id:e.source.id},n.some(function(e){return"local"===e.type&&"local"===t.type?e.id===t.id:"external"===e.type&&"external"===t.type&&e.id===t.id&&e.source_id===t.source_id})||L("linked_event_refs",[].concat(Ce(n),[t]))}(e)},onRemoveEvent:function(e){var t="local"===e.source.type?{type:"local",id:e.id}:{type:"external",id:e.id,source_id:e.source.id};G(t)},linkedEventRefs:F,getRefKey:z})),React.createElement(ne.PluginDocumentSettingPanel,{name:"mayo-email-recipients",title:"Email Recipients",className:"mayo-email-recipients"},React.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px",cursor:p>0?"pointer":"default"},onClick:function(){return p>0&&S(!0)}},g?React.createElement(n.Spinner,{style:{margin:0}}):React.createElement(React.Fragment,null,React.createElement("span",{className:"dashicons dashicons-email-alt",style:{color:"#2271b1",fontSize:"18px",width:"18px",height:"18px"}}),React.createElement("span",{style:{textDecoration:p>0?"underline":"none"}},React.createElement("strong",null,null!=p?p:0)," subscriber",1!==p?"s":""," will receive this announcement"))),React.createElement("p",{className:"components-base-control__help",style:{marginTop:"8px"}},"Based on selected categories, tags, and service body.",p>0&&" Click to view recipients."),_&&React.createElement(n.Modal,{title:"Email Recipients (".concat(R.length,")"),onRequestClose:function(){return S(!1)},style:{maxWidth:"600px",width:"100%"}},React.createElement("div",{style:{maxHeight:"400px",overflowY:"auto",border:"1px solid #ddd",borderRadius:"4px"}},R.length>0?R.map(function(e,t){var n,a;return React.createElement("div",{key:e.email,style:{padding:"12px",borderBottom:t<R.length-1?"1px solid #eee":"none"}},React.createElement("div",{style:{fontSize:"13px",fontWeight:500,marginBottom:"8px"}},e.email),React.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"6px"}},e.reason.all?React.createElement("span",{style:{display:"inline-block",padding:"3px 8px",fontSize:"11px",backgroundColor:"#f0f0f0",color:"#666",borderRadius:"3px"}},"Receives all announcements"):React.createElement(React.Fragment,null,null===(n=e.reason.categories)||void 0===n?void 0:n.map(function(e){return React.createElement("span",{key:e,style:{display:"inline-block",padding:"3px 8px",fontSize:"11px",backgroundColor:"#e3f2fd",color:"#1565c0",borderRadius:"3px"}},e)}),null===(a=e.reason.tags)||void 0===a?void 0:a.map(function(e){return React.createElement("span",{key:e,style:{display:"inline-block",padding:"3px 8px",fontSize:"11px",backgroundColor:"#fff3e0",color:"#e65100",borderRadius:"3px"}},e)}),e.reason.service_body&&React.createElement("span",{style:{display:"inline-block",padding:"3px 8px",fontSize:"11px",backgroundColor:"#e8f5e9",color:"#2e7d32",borderRadius:"3px"}},e.reason.service_body))))}):React.createElement("div",{style:{padding:"20px",textAlign:"center",color:"#666"}},"No matching subscribers")),React.createElement("div",{style:{marginTop:"16px",textAlign:"right"}},React.createElement(n.Button,{variant:"secondary",onClick:function(){return S(!1)}},"Close")))))};(0,U.getPlugins)().some(function(e){return"mayo-announcement-details"===e.name})||(0,U.registerPlugin)("mayo-announcement-details",{render:function(){return React.createElement(te,null,React.createElement(Me,null))},icon:"megaphone"}),document.addEventListener("DOMContentLoaded",function(){var n=document.getElementById("mayo-shortcode-root"),a=document.getElementById("mayo-settings-root"),l=document.getElementById("mayo-css-classes-root"),r=document.getElementById("mayo-api-docs-root"),c=document.getElementById("mayo-subscribers-root");n&&(0,e.render)(React.createElement(t,null),n),a&&(0,e.render)(React.createElement(x,null),a),l&&(0,e.render)(React.createElement(C,null),l),r&&(0,e.render)(React.createElement(T,null),r),c&&(0,e.render)(React.createElement(G,null),c)})})(); -
mayo-events-manager/trunk/build.txt
r3484175 r3490312 1 282e9adc304c300f0350021dc737d87a7e504733 1 ec0e1a084a5abcee29d12898f7406a09d56e1950 -
mayo-events-manager/trunk/includes/Admin.php
r3428761 r3490312 218 218 } 219 219 220 private static $service_body_map = null; 221 222 public static function get_service_body_map() { 223 if (self::$service_body_map !== null) { 224 return self::$service_body_map; 225 } 226 227 $cached = get_transient('mayo_service_body_map'); 228 if ($cached !== false) { 229 self::$service_body_map = $cached; 230 return self::$service_body_map; 231 } 232 233 $map = []; 234 $settings = get_option('mayo_settings', []); 235 $bmlt_root_server = $settings['bmlt_root_server'] ?? ''; 236 237 if (!empty($bmlt_root_server)) { 238 $response = wp_remote_get($bmlt_root_server . '/client_interface/json/?switcher=GetServiceBodies'); 239 240 if (!is_wp_error($response)) { 241 $service_bodies = json_decode(wp_remote_retrieve_body($response), true); 242 243 if (is_array($service_bodies)) { 244 foreach ($service_bodies as $body) { 245 $map[$body['id']] = $body['name']; 246 } 247 } 248 } 249 } 250 251 set_transient('mayo_service_body_map', $map, 600); 252 self::$service_body_map = $map; 253 return self::$service_body_map; 254 } 255 220 256 public static function render_custom_columns($column, $post_id) { 221 257 switch ($column) { … … 227 263 if ($service_body_id === '0') { 228 264 echo esc_html('Unaffiliated (0)'); 265 } elseif (empty($service_body_id)) { 266 echo esc_html('—'); 229 267 } else { 230 // Get the service body name from the BMLT root server 231 $settings = get_option('mayo_settings', []); 232 $bmlt_root_server = $settings['bmlt_root_server'] ?? ''; 233 $found = false; 234 235 if (!empty($bmlt_root_server)) { 236 $response = wp_remote_get($bmlt_root_server . '/client_interface/json/?switcher=GetServiceBodies'); 237 238 if (!is_wp_error($response)) { 239 $service_bodies = json_decode(wp_remote_retrieve_body($response), true); 240 241 if (is_array($service_bodies)) { 242 foreach ($service_bodies as $body) { 243 if ($body['id'] == $service_body_id) { 244 echo esc_html($body['name'] . ' (' . $body['id'] . ')'); 245 $found = true; 246 break; 247 } 248 } 249 } 250 } 251 } 252 253 // Fallback if we couldn't get the name 254 if (!$found) { 255 if (empty($service_body_id)) { 256 echo esc_html('—'); 257 } else { 258 echo esc_html('Service Body (' . $service_body_id . ')'); 259 } 268 $map = self::get_service_body_map(); 269 if (isset($map[$service_body_id])) { 270 echo esc_html($map[$service_body_id] . ' (' . $service_body_id . ')'); 271 } else { 272 echo esc_html('Service Body (' . $service_body_id . ')'); 260 273 } 261 274 } -
mayo-events-manager/trunk/includes/Rest/EventsController.php
r3442218 r3490312 11 11 use BmltEnabled\Mayo\Rest\Helpers\FileUpload; 12 12 use BmltEnabled\Mayo\Rest\Helpers\EmailNotification; 13 use BmltEnabled\Mayo\Rest\Helpers\ParallelHttp; 13 14 use BmltEnabled\Mayo\Rest\Helpers\ServiceBodyLookup; 14 15 … … 172 173 error_reporting(E_ERROR | E_PARSE); 173 174 175 $include_debug = (isset($_GET['debug']) && $_GET['debug'] === '1') 176 || (isset($_REQUEST['debug']) && $_REQUEST['debug'] === '1'); 177 if ($include_debug) { 178 $t_total = microtime(true); 179 $debug = ['external_sources' => []]; 180 } 181 174 182 $events = []; 175 183 $sources = []; … … 186 194 // Get local events by default unless source_ids is explicitly set and doesn't include 'local' 187 195 if (empty($sourceIds) || in_array('local', $sourceIds)) { 196 if ($include_debug) { 197 $t0 = microtime(true); 198 } 188 199 $local_events = self::get_local_events($_GET); 200 if ($include_debug) { 201 $debug['local_events'] = [ 202 'duration_ms' => round((microtime(true) - $t0) * 1000), 203 'count' => count($local_events), 204 ]; 205 } 189 206 190 207 // Add local source to sources array … … 218 235 219 236 if (!empty($enabled_sources)) { 220 foreach ($enabled_sources as $source) { 221 try { 222 $result = self::fetch_external_events($source); 223 224 if (!empty($result['events'])) { 225 $events = array_merge($events, $result['events']); 226 } 227 228 if (!empty($result['source'])) { 229 $sources[$source['id']] = $result['source']; 230 } 231 } catch (\Exception $e) { 232 error_log('Error fetching events from source ' . $source['url'] . ': ' . $e->getMessage()); 233 } 234 } 235 } 237 $external_result = self::fetch_all_external_events($enabled_sources, $include_debug); 238 $events = array_merge($events, $external_result['events']); 239 foreach ($external_result['sources'] as $id => $source_info) { 240 $sources[$id] = $source_info; 241 } 242 if ($include_debug) { 243 $debug['external_sources'] = $external_result['_debug']; 244 } 245 } 246 } 247 248 if ($include_debug) { 249 $t_sort = microtime(true); 236 250 } 237 251 … … 278 292 $paginated_events = array_slice($events, $offset, $per_page); 279 293 294 if ($include_debug) { 295 $debug['sorting_pagination_ms'] = round((microtime(true) - $t_sort) * 1000); 296 $debug['total_events_before_pagination'] = $total_events; 297 $debug['total_duration_ms'] = round((microtime(true) - $t_total) * 1000); 298 } 299 280 300 error_reporting($previous_error_reporting); 281 301 282 return new \WP_REST_Response([302 $response_data = [ 283 303 'events' => $paginated_events, 284 304 'sources' => array_values($sources), … … 289 309 'total_pages' => $total_pages 290 310 ] 291 ]); 311 ]; 312 313 if ($include_debug) { 314 $response_data['_debug'] = $debug; 315 } 316 317 return new \WP_REST_Response($response_data); 292 318 } 293 319 … … 837 863 838 864 if (!empty($eventType)) { 839 $recurring_meta_query[] = [ 840 'key' => 'event_type', 841 'value' => $eventType, 842 'compare' => '=' 843 ]; 865 if (str_contains($eventType, ',')) { 866 $event_types = array_map('trim', explode(',', $eventType)); 867 $recurring_meta_query[] = [ 868 'key' => 'event_type', 869 'value' => $event_types, 870 'compare' => 'IN' 871 ]; 872 } else { 873 $recurring_meta_query[] = [ 874 'key' => 'event_type', 875 'value' => $eventType, 876 'compare' => '=' 877 ]; 878 } 844 879 } 845 880 … … 999 1034 1000 1035 if (!empty($eventType)) { 1001 $meta_query[] = [ 1002 'key' => 'event_type', 1003 'value' => $eventType, 1004 'compare' => '=' 1005 ]; 1036 if (str_contains($eventType, ',')) { 1037 $event_types = array_map('trim', explode(',', $eventType)); 1038 $meta_query[] = [ 1039 'key' => 'event_type', 1040 'value' => $event_types, 1041 'compare' => 'IN' 1042 ]; 1043 } else { 1044 $meta_query[] = [ 1045 'key' => 'event_type', 1046 'value' => $eventType, 1047 'compare' => '=' 1048 ]; 1049 } 1006 1050 } 1007 1051 … … 1085 1129 1086 1130 /** 1131 * Fetch events from all external sources in parallel. 1132 * 1133 * Phase 1: Fire events + settings fetches for all sources in parallel. 1134 * Phase 2: Parse settings to get BMLT URLs, fire BMLT fetches in parallel. 1135 * Phase 3: Assemble results. 1136 * 1137 * @param array $sources Array of enabled source configurations 1138 * @param bool $include_debug Whether to include debug timing info 1139 * @return array ['events' => [...], 'sources' => [...], '_debug' => [...]] 1140 */ 1141 private static function fetch_all_external_events(array $sources, bool $include_debug): array 1142 { 1143 $all_events = []; 1144 $all_sources = []; 1145 $all_debug = []; 1146 1147 // --- Phase 1: Build events + settings URLs, fire in parallel --- 1148 $phase1_requests = []; 1149 $source_map = []; // keyed by source id for quick lookup 1150 1151 foreach ($sources as $source) { 1152 $sid = $source['id']; 1153 $source_map[$sid] = $source; 1154 1155 // Events URL (same logic as fetch_external_events) 1156 $params = []; 1157 if (!empty($source['event_type'])) { 1158 $params['event_type'] = $source['event_type']; 1159 } 1160 if (!empty($source['service_body'])) { 1161 $params['service_body'] = $source['service_body']; 1162 } 1163 if (!empty($source['categories'])) { 1164 $params['categories'] = $source['categories']; 1165 } 1166 if (!empty($source['tags'])) { 1167 $params['tags'] = $source['tags']; 1168 } 1169 if (isset($_GET['archive'])) { 1170 $params['archive'] = $_GET['archive']; 1171 } 1172 if (isset($_GET['timezone'])) { 1173 $params['timezone'] = $_GET['timezone']; 1174 } 1175 $params['per_page'] = 100; 1176 1177 $events_url = add_query_arg($params, trailingslashit($source['url']) . 'wp-json/event-manager/v1/events'); 1178 $settings_url = trailingslashit($source['url']) . 'wp-json/event-manager/v1/settings'; 1179 1180 $phase1_requests["{$sid}:events"] = $events_url; 1181 $phase1_requests["{$sid}:settings"] = $settings_url; 1182 } 1183 1184 $phase1_results = ParallelHttp::get_multiple($phase1_requests); 1185 1186 // --- Phase 2: Parse settings responses, build BMLT URLs, fire in parallel --- 1187 $phase2_requests = []; 1188 1189 foreach ($sources as $source) { 1190 $sid = $source['id']; 1191 $settings_r = $phase1_results["{$sid}:settings"]; 1192 1193 if ($settings_r['error'] !== null || $settings_r['status'] !== 200) { 1194 continue; 1195 } 1196 1197 $settings = json_decode($settings_r['body'], true); 1198 if (empty($settings['bmlt_root_server'])) { 1199 continue; 1200 } 1201 1202 $bmlt_url = add_query_arg( 1203 'switcher', 1204 'GetServiceBodies', 1205 trailingslashit($settings['bmlt_root_server']) . 'client_interface/json/' 1206 ); 1207 $phase2_requests["{$sid}:bmlt"] = $bmlt_url; 1208 } 1209 1210 $phase2_results = !empty($phase2_requests) ? ParallelHttp::get_multiple($phase2_requests) : []; 1211 1212 // --- Phase 3: Assemble results --- 1213 foreach ($sources as $source) { 1214 $sid = $source['id']; 1215 $source_debug = []; 1216 1217 if ($include_debug) { 1218 $source_debug['source_id'] = $sid; 1219 $source_debug['source_url'] = $source['url']; 1220 $source_debug['calls'] = []; 1221 } 1222 1223 // Parse events response 1224 $events_r = $phase1_results["{$sid}:events"]; 1225 1226 if ($include_debug) { 1227 $source_debug['calls']['events_fetch'] = [ 1228 'url' => $phase1_requests["{$sid}:events"], 1229 'duration_ms' => $events_r['duration_ms'], 1230 'status' => $events_r['error'] ?? $events_r['status'], 1231 'size_bytes' => $events_r['size_bytes'], 1232 ]; 1233 } 1234 1235 $events = []; 1236 if ($events_r['error'] === null && $events_r['status'] === 200) { 1237 $data = json_decode($events_r['body'], true); 1238 $events = isset($data['events']) ? $data['events'] : $data; 1239 if (!is_array($events)) { 1240 $events = []; 1241 } 1242 } else { 1243 error_log('External Events Error for source ' . $source['url'] . ': ' . ($events_r['error'] ?? 'HTTP ' . $events_r['status'])); 1244 } 1245 1246 // Parse settings + BMLT response for service bodies 1247 $service_bodies = []; 1248 $settings_r = $phase1_results["{$sid}:settings"]; 1249 1250 if ($include_debug) { 1251 $source_debug['calls']['service_bodies_fetch'] = [ 1252 'calls' => [], 1253 ]; 1254 1255 $source_debug['calls']['service_bodies_fetch']['calls']['settings_fetch'] = [ 1256 'url' => $phase1_requests["{$sid}:settings"], 1257 'duration_ms' => $settings_r['duration_ms'], 1258 'status' => $settings_r['error'] ?? $settings_r['status'], 1259 'size_bytes' => $settings_r['size_bytes'], 1260 ]; 1261 } 1262 1263 if (isset($phase2_results["{$sid}:bmlt"])) { 1264 $bmlt_r = $phase2_results["{$sid}:bmlt"]; 1265 1266 if ($include_debug) { 1267 $source_debug['calls']['service_bodies_fetch']['calls']['bmlt_fetch'] = [ 1268 'url' => $phase2_requests["{$sid}:bmlt"], 1269 'duration_ms' => $bmlt_r['duration_ms'], 1270 'status' => $bmlt_r['error'] ?? $bmlt_r['status'], 1271 'size_bytes' => $bmlt_r['size_bytes'], 1272 ]; 1273 } 1274 1275 if ($bmlt_r['error'] === null && $bmlt_r['status'] === 200) { 1276 $decoded = json_decode($bmlt_r['body'], true); 1277 if (is_array($decoded)) { 1278 $service_bodies = $decoded; 1279 } 1280 } 1281 } 1282 1283 if ($include_debug) { 1284 $source_debug['calls']['service_bodies_fetch']['duration_ms'] = 1285 ($settings_r['duration_ms'] ?? 0) 1286 + (isset($phase2_results["{$sid}:bmlt"]) ? $phase2_results["{$sid}:bmlt"]['duration_ms'] : 0); 1287 } 1288 1289 // Build source info 1290 $source_name = $source['name'] ?? parse_url($source['url'], PHP_URL_HOST); 1291 $source_info = [ 1292 'id' => $sid, 1293 'url' => parse_url($source['url'], PHP_URL_HOST), 1294 'name' => $source_name, 1295 'service_bodies' => $service_bodies, 1296 ]; 1297 1298 // Tag events with source info 1299 foreach ($events as &$event) { 1300 $event['source_id'] = $sid; 1301 $event['source'] = [ 1302 'type' => 'external', 1303 'id' => $sid, 1304 'name' => $source_name, 1305 ]; 1306 } 1307 unset($event); 1308 1309 if ($include_debug) { 1310 $source_debug['event_count'] = count($events); 1311 } 1312 1313 $all_events = array_merge($all_events, $events); 1314 $all_sources[$sid] = $source_info; 1315 1316 if ($include_debug) { 1317 $all_debug[] = $source_debug; 1318 } 1319 } 1320 1321 return [ 1322 'events' => $all_events, 1323 'sources' => $all_sources, 1324 '_debug' => $all_debug, 1325 ]; 1326 } 1327 1328 /** 1087 1329 * Fetch events from external source 1088 1330 * … … 1090 1332 * @return array Array with 'events' and 'source' keys 1091 1333 */ 1092 private static function fetch_external_events($source) { 1334 private static function fetch_external_events($source, $include_debug = false) { 1335 $debug = ['calls' => []]; 1093 1336 try { 1094 1337 $params = []; … … 1105 1348 $url = add_query_arg($params, trailingslashit($source['url']) . 'wp-json/event-manager/v1/events'); 1106 1349 1350 if ($include_debug) { 1351 $t0 = microtime(true); 1352 } 1107 1353 $response = wp_remote_get($url, [ 1108 1354 'timeout' => 15, 1109 1355 'sslverify' => true 1110 1356 ]); 1357 if ($include_debug) { 1358 $events_body_raw = is_wp_error($response) ? '' : wp_remote_retrieve_body($response); 1359 $debug['calls']['events_fetch'] = [ 1360 'url' => $url, 1361 'duration_ms' => round((microtime(true) - $t0) * 1000), 1362 'status' => is_wp_error($response) ? $response->get_error_message() : wp_remote_retrieve_response_code($response), 1363 'size_bytes' => strlen($events_body_raw), 1364 ]; 1365 } 1111 1366 1112 1367 if (is_wp_error($response)) { 1113 1368 error_log('External Events Error: ' . $response->get_error_message()); 1114 return ['events' => [], 'source' => null ];1369 return ['events' => [], 'source' => null, '_debug' => $include_debug ? $debug : null]; 1115 1370 } 1116 1371 … … 1120 1375 $events = isset($data['events']) ? $data['events'] : $data; 1121 1376 1122 if (!is_array($events)) return ['events' => [], 'source' => null ];1377 if (!is_array($events)) return ['events' => [], 'source' => null, '_debug' => $include_debug ? $debug : null]; 1123 1378 1124 1379 // Fetch service bodies once for this source 1125 $service_bodies = self::fetch_external_service_bodies($source); 1380 if ($include_debug) { 1381 $t0 = microtime(true); 1382 } 1383 $sb_result = self::fetch_external_service_bodies($source, $include_debug); 1384 if ($include_debug) { 1385 $service_bodies = $sb_result['data']; 1386 $debug['calls']['service_bodies_fetch'] = [ 1387 'duration_ms' => round((microtime(true) - $t0) * 1000), 1388 'calls' => $sb_result['_debug'], 1389 ]; 1390 } else { 1391 $service_bodies = $sb_result; 1392 } 1126 1393 1127 1394 // Build source info (with service bodies at source level, not per-event) … … 1143 1410 } 1144 1411 1412 if ($include_debug) { 1413 $debug['event_count'] = count($events); 1414 } 1415 1145 1416 return [ 1146 1417 'events' => $events, 1147 'source' => $source_info 1418 'source' => $source_info, 1419 '_debug' => $include_debug ? $debug : null, 1148 1420 ]; 1149 1421 } catch (\Exception $e) { 1150 1422 error_log('External Events Error: ' . $e->getMessage()); 1151 return ['events' => [], 'source' => null ];1423 return ['events' => [], 'source' => null, '_debug' => $include_debug ? $debug : null]; 1152 1424 } 1153 1425 } … … 1159 1431 * @return array 1160 1432 */ 1161 private static function fetch_external_service_bodies($source) { 1433 private static function fetch_external_service_bodies($source, $include_debug = false) { 1434 $debug = []; 1162 1435 try { 1163 1436 $settings_url = trailingslashit($source['url']) . 'wp-json/event-manager/v1/settings'; 1164 1437 1438 if ($include_debug) { 1439 $t0 = microtime(true); 1440 } 1165 1441 $settings_response = wp_remote_get($settings_url, [ 1166 1442 'timeout' => 15, 1167 1443 'sslverify' => true 1168 1444 ]); 1445 if ($include_debug) { 1446 $settings_body_raw = is_wp_error($settings_response) ? '' : wp_remote_retrieve_body($settings_response); 1447 $debug['settings_fetch'] = [ 1448 'url' => $settings_url, 1449 'duration_ms' => round((microtime(true) - $t0) * 1000), 1450 'status' => is_wp_error($settings_response) ? $settings_response->get_error_message() : wp_remote_retrieve_response_code($settings_response), 1451 'size_bytes' => strlen($settings_body_raw), 1452 ]; 1453 } 1169 1454 1170 1455 if (is_wp_error($settings_response)) { 1171 return [];1456 return $include_debug ? ['data' => [], '_debug' => $debug] : []; 1172 1457 } 1173 1458 … … 1176 1461 1177 1462 if (empty($settings['bmlt_root_server'])) { 1178 return [];1463 return $include_debug ? ['data' => [], '_debug' => $debug] : []; 1179 1464 } 1180 1465 1181 1466 $bmlt_url = add_query_arg('switcher', 'GetServiceBodies', trailingslashit($settings['bmlt_root_server']) . 'client_interface/json/'); 1182 1467 1468 if ($include_debug) { 1469 $t0 = microtime(true); 1470 } 1183 1471 $bmlt_response = wp_remote_get($bmlt_url, [ 1184 1472 'timeout' => 15, 1185 1473 'sslverify' => true 1186 1474 ]); 1475 if ($include_debug) { 1476 $bmlt_body_raw = is_wp_error($bmlt_response) ? '' : wp_remote_retrieve_body($bmlt_response); 1477 $debug['bmlt_fetch'] = [ 1478 'url' => $bmlt_url, 1479 'duration_ms' => round((microtime(true) - $t0) * 1000), 1480 'status' => is_wp_error($bmlt_response) ? $bmlt_response->get_error_message() : wp_remote_retrieve_response_code($bmlt_response), 1481 'size_bytes' => strlen($bmlt_body_raw), 1482 ]; 1483 } 1187 1484 1188 1485 if (is_wp_error($bmlt_response)) { 1189 return [];1486 return $include_debug ? ['data' => [], '_debug' => $debug] : []; 1190 1487 } 1191 1488 … … 1194 1491 1195 1492 if (!is_array($service_bodies)) { 1196 return [];1197 } 1198 1199 return $ service_bodies;1493 return $include_debug ? ['data' => [], '_debug' => $debug] : []; 1494 } 1495 1496 return $include_debug ? ['data' => $service_bodies, '_debug' => $debug] : $service_bodies; 1200 1497 } catch (\Exception $e) { 1201 return [];1498 return $include_debug ? ['data' => [], '_debug' => $debug] : []; 1202 1499 } 1203 1500 } -
mayo-events-manager/trunk/includes/Rest/SettingsController.php
r3439987 r3490312 39 39 $external_sources = get_option('mayo_external_sources', []); 40 40 41 return new \WP_REST_Response([41 $response_data = [ 42 42 'bmlt_root_server' => $settings['bmlt_root_server'] ?? '', 43 43 'notification_email' => $settings['notification_email'] ?? '', … … 48 48 'subscription_service_bodies' => $settings['subscription_service_bodies'] ?? [], 49 49 'subscription_new_option_behavior' => $settings['subscription_new_option_behavior'] ?? 'opt_in' 50 ]); 50 ]; 51 52 if (current_user_can('manage_options')) { 53 $response_data['server_info'] = [ 54 'php_version' => PHP_VERSION, 55 'curl_available' => extension_loaded('curl'), 56 'curl_version' => extension_loaded('curl') ? curl_version()['version'] : null, 57 ]; 58 } 59 60 return new \WP_REST_Response($response_data); 51 61 } 52 62 -
mayo-events-manager/trunk/mayo-events-manager.php
r3484175 r3490312 4 4 * Plugin Name: Mayo Events Manager 5 5 * Description: A plugin for managing and displaying events. 6 * Version: 1.8. 76 * Version: 1.8.8 7 7 * Author: bmlt-enabled 8 8 * License: GPLv2 or later … … 21 21 } 22 22 23 define('MAYO_VERSION', '1.8. 7');23 define('MAYO_VERSION', '1.8.8'); 24 24 25 25 require_once __DIR__ . '/vendor/autoload.php'; -
mayo-events-manager/trunk/package.json
r3484175 r3490312 1 1 { 2 2 "name": "mayo", 3 "version": "1.8. 7",3 "version": "1.8.8", 4 4 "description": "", 5 5 "main": "index.js", -
mayo-events-manager/trunk/readme.txt
r3484175 r3490312 6 6 Requires at least: 6.7 7 7 Tested up to: 6.9 8 Stable tag: 1.8. 78 Stable tag: 1.8.8 9 9 License: GPLv2 or later 10 10 License URI: http://www.gnu.org/licenses/gpl-2.0.html … … 187 187 188 188 == Changelog == 189 190 = 1.8.8 = 191 * Added copy-to-clipboard button for external source IDs in Settings, making IDs easier to select and copy. [#254] 192 * Improved external source layout with ID displayed in a distinct box on its own row. 193 * Added diagnostic timing instrumentation to the events API for debugging slow external source requests. Append `&debug=1` to see per-call timing breakdown. 194 * Improved performance of external source fetching by parallelizing HTTP requests. Sites with multiple external sources will see significantly faster load times. 195 * Changed external source event type dropdown from "Select an event type" to "All Event Types" to clarify that leaving it blank fetches all types. 196 * Added support for comma-separated event types in the REST API (e.g., `event_type=Activity,Service`), enabling a single external source to fetch multiple event types in one request. 197 * Fixed admin events list page taking minutes to load when many events exist by caching service body lookups instead of making an HTTP request per row. 198 * Added server health check warning on settings page when PHP curl extension is missing, which causes significantly slower external source requests. 189 199 190 200 = 1.8.7 = -
mayo-events-manager/trunk/tests/Unit/AdminTest.php
r3442218 r3490312 280 280 */ 281 281 public function testRenderCustomColumnsOutputsServiceBodyFallback(): void { 282 // Reset static cache from prior tests 283 $ref = new \ReflectionProperty(Admin::class, 'service_body_map'); 284 $ref->setAccessible(true); 285 $ref->setValue(null, null); 286 282 287 $this->setPostMeta(402, [ 283 288 'service_body' => '999' 284 289 ]); 290 291 Functions\when('get_transient')->justReturn(false); 292 Functions\when('set_transient')->justReturn(true); 285 293 286 294 $this->mockWpRemoteGet([ … … 304 312 $this->setPostMeta(403, [ 305 313 'service_body' => '' 306 ]);307 308 $this->mockWpRemoteGet([309 'GetServiceBodies' => [310 'code' => 200,311 'body' => []312 ]313 314 ]); 314 315 … … 592 593 */ 593 594 public function testRenderCustomColumnsOutputsServiceBodyFromBmlt(): void { 595 // Reset static cache from prior tests 596 $ref = new \ReflectionProperty(Admin::class, 'service_body_map'); 597 $ref->setAccessible(true); 598 $ref->setValue(null, null); 599 594 600 $this->setPostMeta(412, [ 595 601 'service_body' => '5' 596 602 ]); 603 604 Functions\when('get_transient')->justReturn(false); 605 Functions\when('set_transient')->justReturn(true); 597 606 598 607 $this->mockWpRemoteGet([ … … 1047 1056 */ 1048 1057 public function testRenderCustomColumnsServiceBodyWithBmltError(): void { 1058 // Reset static cache from prior tests 1059 $ref = new \ReflectionProperty(Admin::class, 'service_body_map'); 1060 $ref->setAccessible(true); 1061 $ref->setValue(null, null); 1062 1049 1063 $this->setPostMeta(422, [ 1050 1064 'service_body' => '123' 1051 1065 ]); 1066 1067 Functions\when('get_transient')->justReturn(false); 1068 Functions\when('set_transient')->justReturn(true); 1052 1069 1053 1070 // wp_remote_get returns WP_Error which is_wp_error() will detect -
mayo-events-manager/trunk/vendor/composer/installed.php
r3484175 r3490312 2 2 'root' => array( 3 3 'name' => 'bmltenabled/mayo', 4 'pretty_version' => '1.8. 7',5 'version' => '1.8. 7.0',6 'reference' => ' 282e9adc304c300f0350021dc737d87a7e504733',4 'pretty_version' => '1.8.8', 5 'version' => '1.8.8.0', 6 'reference' => 'ec0e1a084a5abcee29d12898f7406a09d56e1950', 7 7 'type' => 'wordpress-plugin', 8 8 'install_path' => __DIR__ . '/../../', … … 12 12 'versions' => array( 13 13 'bmltenabled/mayo' => array( 14 'pretty_version' => '1.8. 7',15 'version' => '1.8. 7.0',16 'reference' => ' 282e9adc304c300f0350021dc737d87a7e504733',14 'pretty_version' => '1.8.8', 15 'version' => '1.8.8.0', 16 'reference' => 'ec0e1a084a5abcee29d12898f7406a09d56e1950', 17 17 'type' => 'wordpress-plugin', 18 18 'install_path' => __DIR__ . '/../../',
Note: See TracChangeset
for help on using the changeset viewer.