Changeset 3439987
- Timestamp:
- 01/15/2026 04:23:22 AM (3 months ago)
- Location:
- mayo-events-manager
- Files:
-
- 209 added
- 9 edited
-
tags/1.8.4 (added)
-
tags/1.8.4/CLAUDE.md (added)
-
tags/1.8.4/CONTRIBUTE.md (added)
-
tags/1.8.4/LICENSE (added)
-
tags/1.8.4/assets (added)
-
tags/1.8.4/assets/css (added)
-
tags/1.8.4/assets/css/# TODO.md (added)
-
tags/1.8.4/assets/css/admin.css (added)
-
tags/1.8.4/assets/css/public.css (added)
-
tags/1.8.4/assets/js (added)
-
tags/1.8.4/assets/js/dist (added)
-
tags/1.8.4/assets/js/dist/admin.bundle.js (added)
-
tags/1.8.4/assets/js/dist/admin.bundle.js.LICENSE.txt (added)
-
tags/1.8.4/assets/js/dist/public.bundle.js (added)
-
tags/1.8.4/assets/js/dist/public.bundle.js.LICENSE.txt (added)
-
tags/1.8.4/bin (added)
-
tags/1.8.4/bin/install-wp-tests.sh (added)
-
tags/1.8.4/build.txt (added)
-
tags/1.8.4/composer.json (added)
-
tags/1.8.4/docs (added)
-
tags/1.8.4/docs/enhanced-email-notifications.md (added)
-
tags/1.8.4/docs/rest-api-authentication.md (added)
-
tags/1.8.4/docs/submitter-notifications.md (added)
-
tags/1.8.4/includes (added)
-
tags/1.8.4/includes/Admin.php (added)
-
tags/1.8.4/includes/Announcement.php (added)
-
tags/1.8.4/includes/CalendarFeed.php (added)
-
tags/1.8.4/includes/Frontend.php (added)
-
tags/1.8.4/includes/Rest (added)
-
tags/1.8.4/includes/Rest.php (added)
-
tags/1.8.4/includes/Rest/AnnouncementsController.php (added)
-
tags/1.8.4/includes/Rest/EventsController.php (added)
-
tags/1.8.4/includes/Rest/Helpers (added)
-
tags/1.8.4/includes/Rest/Helpers/EmailNotification.php (added)
-
tags/1.8.4/includes/Rest/Helpers/FileUpload.php (added)
-
tags/1.8.4/includes/Rest/Helpers/PreferencesSanitizer.php (added)
-
tags/1.8.4/includes/Rest/Helpers/ServiceBodyLookup.php (added)
-
tags/1.8.4/includes/Rest/Helpers/TaxonomyQuery.php (added)
-
tags/1.8.4/includes/Rest/SettingsController.php (added)
-
tags/1.8.4/includes/Rest/SubscribersController.php (added)
-
tags/1.8.4/includes/RssFeed.php (added)
-
tags/1.8.4/includes/Subscriber.php (added)
-
tags/1.8.4/includes/Widgets (added)
-
tags/1.8.4/includes/Widgets/AnnouncementWidget.php (added)
-
tags/1.8.4/mayo-events-manager.php (added)
-
tags/1.8.4/package.json (added)
-
tags/1.8.4/phpunit.xml (added)
-
tags/1.8.4/readme.txt (added)
-
tags/1.8.4/renovate.json (added)
-
tags/1.8.4/scripts (added)
-
tags/1.8.4/scripts/import-events-from-csv.py (added)
-
tags/1.8.4/scripts/sample-events.csv (added)
-
tags/1.8.4/support (added)
-
tags/1.8.4/support/banner-772x250.png (added)
-
tags/1.8.4/support/icon-256x256.png (added)
-
tags/1.8.4/templates (added)
-
tags/1.8.4/templates/archive-mayo-event.php (added)
-
tags/1.8.4/templates/details-mayo-announcement.php (added)
-
tags/1.8.4/templates/details-mayo-event.php (added)
-
tags/1.8.4/tests (added)
-
tags/1.8.4/tests/bootstrap.php (added)
-
tags/1.8.4/tests/integration (added)
-
tags/1.8.4/tests/integration/test-email-notifications.php (added)
-
tags/1.8.4/tests/integration/test-recurring-events.php (added)
-
tags/1.8.4/tests/integration/test-rest-announcements.php (added)
-
tags/1.8.4/tests/integration/test-rest-events.php (added)
-
tags/1.8.4/tests/integration/test-rest-settings.php (added)
-
tags/1.8.4/tests/integration/test-rest-subscribers.php (added)
-
tags/1.8.4/tests/integration/test-submitter-notifications.php (added)
-
tags/1.8.4/vendor (added)
-
tags/1.8.4/vendor/autoload.php (added)
-
tags/1.8.4/vendor/composer (added)
-
tags/1.8.4/vendor/composer/ClassLoader.php (added)
-
tags/1.8.4/vendor/composer/InstalledVersions.php (added)
-
tags/1.8.4/vendor/composer/LICENSE (added)
-
tags/1.8.4/vendor/composer/autoload_classmap.php (added)
-
tags/1.8.4/vendor/composer/autoload_namespaces.php (added)
-
tags/1.8.4/vendor/composer/autoload_psr4.php (added)
-
tags/1.8.4/vendor/composer/autoload_real.php (added)
-
tags/1.8.4/vendor/composer/autoload_static.php (added)
-
tags/1.8.4/vendor/composer/installed.json (added)
-
tags/1.8.4/vendor/composer/installed.php (added)
-
tags/1.8.4/vendor/composer/installers (added)
-
tags/1.8.4/vendor/composer/installers/.github (added)
-
tags/1.8.4/vendor/composer/installers/.github/workflows (added)
-
tags/1.8.4/vendor/composer/installers/.github/workflows/continuous-integration.yml (added)
-
tags/1.8.4/vendor/composer/installers/.github/workflows/lint.yml (added)
-
tags/1.8.4/vendor/composer/installers/.github/workflows/phpstan.yml (added)
-
tags/1.8.4/vendor/composer/installers/LICENSE (added)
-
tags/1.8.4/vendor/composer/installers/composer.json (added)
-
tags/1.8.4/vendor/composer/installers/src (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/AglInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/AkauntingInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/AsgardInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/AttogramInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/BaseInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/BitrixInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/BonefishInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/BotbleInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/CakePHPInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/ChefInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/CiviCrmInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/CockpitInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/Concrete5Installer.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/ConcreteCMSInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/CroogoInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/DecibelInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/DframeInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/DokuWikiInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/DolibarrInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/ElggInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/EliasisInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/ExpressionEngineInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/EzPlatformInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/ForkCMSInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/FuelInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/FuelphpInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/GravInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/HuradInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/ImageCMSInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/Installer.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/ItopInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/KanboardInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/KnownInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/KodiCMSInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/KohanaInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/LaravelInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/LavaLiteInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/LithiumInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/MODXEvoInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/MagentoInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/MajimaInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/MakoInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/MantisBTInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/MatomoInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/MauticInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/MayaInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/MiaoxingInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/ModxInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/OntoWikiInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/OsclassInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/OxidInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/PPIInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/PantheonInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/PhiftyInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/PhpBBInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/PiwikInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/PlentymarketsInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/Plugin.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/PortoInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/PrestashopInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/ProcessWireInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/PuppetInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/PxcmsInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/RadPHPInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/ReIndexInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/Redaxo5Installer.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/RedaxoInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/RoundcubeInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/SMFInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/ShopwareInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/SilverStripeInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/SiteDirectInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/StarbugInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/SyDESInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/SyliusInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/TaoInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/TastyIgniterInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/TheliaInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/TuskInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/UserFrostingInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/VanillaInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/VgmcpInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/WinterInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/WolfCMSInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/WordPressInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/YawikInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/ZendInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/Composer/Installers/ZikulaInstaller.php (added)
-
tags/1.8.4/vendor/composer/installers/src/bootstrap.php (added)
-
tags/1.8.4/vendor/composer/platform_check.php (added)
-
trunk/assets/js/dist/admin.bundle.js (modified) (1 diff)
-
trunk/assets/js/dist/public.bundle.js (modified) (1 diff)
-
trunk/build.txt (modified) (1 diff)
-
trunk/includes/Announcement.php (modified) (7 diffs)
-
trunk/includes/Rest (added)
-
trunk/includes/Rest.php (modified) (1 diff)
-
trunk/includes/Rest/AnnouncementsController.php (added)
-
trunk/includes/Rest/EventsController.php (added)
-
trunk/includes/Rest/Helpers (added)
-
trunk/includes/Rest/Helpers/EmailNotification.php (added)
-
trunk/includes/Rest/Helpers/FileUpload.php (added)
-
trunk/includes/Rest/Helpers/PreferencesSanitizer.php (added)
-
trunk/includes/Rest/Helpers/ServiceBodyLookup.php (added)
-
trunk/includes/Rest/Helpers/TaxonomyQuery.php (added)
-
trunk/includes/Rest/SettingsController.php (added)
-
trunk/includes/Rest/SubscribersController.php (added)
-
trunk/mayo-events-manager.php (modified) (2 diffs)
-
trunk/package.json (modified) (1 diff)
-
trunk/readme.txt (modified) (2 diffs)
-
trunk/tests/integration/test-rest-announcements.php (added)
-
trunk/tests/integration/test-rest-events.php (added)
-
trunk/tests/integration/test-rest-settings.php (added)
-
trunk/tests/integration/test-rest-subscribers.php (added)
-
trunk/vendor/composer/installed.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
mayo-events-manager/trunk/assets/js/dist/admin.bundle.js
r3436689 r3439987 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], F=B[1],I=R((0,e.useState)({subscription_categories:[],subscription_tags:[],subscription_service_bodies:[],subscription_new_option_behavior:"auto_include"}),2),L=I[0],z=I[1],G=R((0,e.useState)([]),2),U=G[0],W=G[1],Y=R((0,e.useState)([]),2),H=Y[0],q=Y[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),F(!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),F(!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:L.subscription_categories,subscription_tags:L.subscription_tags,subscription_service_bodies:L.subscription_service_bodies,subscription_new_option_behavior:L.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}),F(!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),F(!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:L.subscription_categories.includes(e.id),onChange:function(){return X("subscription_categories",e.id)}})}))),H.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"}},H.map(function(e){return React.createElement(n.CheckboxControl,{key:e.id,label:e.name,checked:L.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:L.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:L.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 F(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 L(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)?L(e,t):void 0}}function L(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=F((0,e.useState)(u.status),2),f=E[0],R=E[1],v=F((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 L(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=F((0,e.useState)([]),2),a=t[0],l=t[1],r=F((0,e.useState)(!0),2),c=r[0],o=r[1],i=F((0,e.useState)(null),2),u=i[0],m=i[1],d=F((0,e.useState)("all"),2),p=d[0],E=d[1],f=F((0,e.useState)(""),2),R=f[0],v=f[1],y=F((0,e.useState)(null),2),g=y[0],h=y[1],b=F((0,e.useState)(null),2),_=b[0],S=b[1],w=F((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=F(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 Y(e){return Y="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},Y(e)}function H(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?H(Object(n),!0).forEach(function(t){J(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):H(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"!=Y(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=Y(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Y(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(){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 ce(e){return ce="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},ce(e)}function oe(e){return function(e){if(Array.isArray(e))return Re(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||fe(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 ie(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?ie(Object(n),!0).forEach(function(t){se(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ie(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function se(e,t,n){return(t=function(e){var t=function(e){if("object"!=ce(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=ce(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==ce(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function me(){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 de(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]())):(de(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,de(e,l,"GeneratorFunction")),e.prototype=Object.create(m),e}return i.prototype=u,de(m,"constructor",u),de(u,"constructor",i),i.displayName="GeneratorFunction",de(u,l,"GeneratorFunction"),de(m),de(m,l,"Generator"),de(m,a,function(){return this}),de(m,"toString",function(){return"[object Generator]"}),(me=function(){return{w:r,m:d}})()}function de(e,t,n,a){var l=Object.defineProperty;try{l({},"",{})}catch(e){l=0}de=function(e,t,n,a){function r(t,n){de(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))},de(e,t,n,a)}function pe(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 Ee(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)||fe(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 fe(e,t){if(e){if("string"==typeof e)return Re(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)?Re(e,t):void 0}}function Re(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 ve=function(){var t,a,l=ee().serviceBodies,r=Ee((0,e.useState)(!1),2),c=r[0],o=r[1],i=Ee((0,e.useState)(""),2),u=i[0],m=i[1],d=Ee((0,e.useState)([]),2),p=d[0],E=d[1],f=Ee((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=me().m(function e(){var t,n;return me().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){pe(r,a,l,c,o,"next",e)}function o(e){pe(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),{},se({},e,t))})},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||(S?re():""),options:[{label:"-- No timezone set --",value:""}].concat(oe(le.map(function(e){return{label:e.label,value:e.value}}))),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(oe(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=Ee(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(oe(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(oe(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 ye(e){return ye="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},ye(e)}function ge(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(ye(e)+" is not iterable")}function he(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=Ne(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 be(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 _e(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?be(Object(n),!0).forEach(function(t){Se(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):be(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Se(e,t,n){return(t=function(e){var t=function(e){if("object"!=ye(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=ye(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==ye(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function we(){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 xe(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]())):(xe(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,xe(e,l,"GeneratorFunction")),e.prototype=Object.create(m),e}return i.prototype=u,xe(m,"constructor",u),xe(u,"constructor",i),i.displayName="GeneratorFunction",xe(u,l,"GeneratorFunction"),xe(m),xe(m,l,"Generator"),xe(m,a,function(){return this}),xe(m,"toString",function(){return"[object Generator]"}),(we=function(){return{w:r,m:d}})()}function xe(e,t,n,a){var l=Object.defineProperty;try{l({},"",{})}catch(e){l=0}xe=function(e,t,n,a){function r(t,n){xe(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))},xe(e,t,n,a)}function ke(e){return function(e){if(Array.isArray(e))return Pe(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Ne(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 Ce(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 Te(e){return function(){var t=this,n=arguments;return new Promise(function(a,l){var r=e.apply(t,n);function c(e){Ce(r,a,l,c,o,"next",e)}function o(e){Ce(r,a,l,c,o,"throw",e)}c(void 0)})}}function Ae(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)||Ne(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 Ne(e,t){if(e){if("string"==typeof e)return Pe(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)?Pe(e,t):void 0}}function Pe(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(ve,null))},icon:"calendar"});var Oe=function(t){var a=t.isOpen,l=t.onClose,r=t.onSelectEvent,c=t.onRemoveEvent,o=t.linkedEventRefs,i=(t.getRefKey,Ae((0,e.useState)(""),2)),u=i[0],m=i[1],d=Ae((0,e.useState)([]),2),p=d[0],E=d[1],f=Ae((0,e.useState)(!1),2),R=f[0],v=f[1],y=Ae((0,e.useState)(!1),2),g=y[0],h=y[1],b=Ae((0,e.useState)(1),2),_=b[0],S=b[1],w=Ae((0,e.useState)(!0),2),x=w[0],k=w[1],C=Ae((0,e.useState)(0),2),T=C[0],A=C[1],N=Ae((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=Te(we().m(function e(t,n,a){var l,r,c,o,i,u=arguments;return we().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(ke(e),ke(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 F=(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:F,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=Ae(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};const De=function(){var t=Ae((0,e.useState)(!1),2),a=t[0],l=t[1],r=Ae((0,e.useState)(!1),2),c=r[0],o=r[1],i=Ae((0,e.useState)(null),2),u=i[0],m=i[1],d=Ae((0,e.useState)([]),2),p=d[0],E=d[1],f=Ae((0,e.useState)(!1),2),R=f[0],v=f[1],y=Ae((0,e.useState)(!1),2),g=y[0],h=y[1],b=Ae((0,e.useState)(null),2),_=b[0],S=b[1],w=ee().serviceBodies,x=(0,ae.useSelect)(function(e){return e("core/editor").getCurrentPostType()}),k=(0,ae.useSelect)(function(e){return e("core/editor").getEditedPostAttribute("status")}),C=(0,ae.useSelect)(function(e){return e("core/editor").getEditedPostAttribute("meta")||{}}),T=(0,ae.useSelect)(function(e){return e("core/editor").getEditedPostAttribute("categories")||[]}),A=(0,ae.useSelect)(function(e){return e("core/editor").getEditedPostAttribute("tags")||[]}),N=(0,ae.useDispatch)("core/editor").editPost,P=C.service_body||"";if((0,e.useEffect)(function(){if("mayo_announcement"===x){var e=function(){var e=Te(we().m(function e(){var t,n;return we().w(function(e){for(;;)switch(e.p=e.n){case 0:return v(!0),e.p=1,e.n=2,s("/subscribers/count",{method:"POST",body:JSON.stringify({categories:T,tags:A,service_body:P})});case 2:t=e.v,m(t.count),E(t.subscribers||[]),e.n=4;break;case 3:e.p=3,n=e.v,console.error("Error fetching subscriber count:",n),m(null),E([]);case 4:v(!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)}}},[x,T,A,P]),(0,e.useEffect)(function(){if(!c&&"mayo_announcement"===x&&"auto-draft"===k){var e=new URLSearchParams(window.location.search).get("linked_event");if(e){var t=parseInt(e,10);if(!isNaN(t)&&t>0){var n=C.linked_event_refs||[];if(!n.some(function(e){return"local"===e.type&&e.id===t})){var a={type:"local",id:t};N({meta:_e(_e({},C),{},{linked_event_refs:[].concat(ke(n),[a])})})}}o(!0)}}},[x,k,c,C.linked_event_refs]),(0,e.useEffect)(function(){if("mayo_announcement"===x){var e=function(){var e=Te(we().m(function e(){var t,n;return we().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,S({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),S({service_bodies:[]});case 3:return e.a(2)}},e,null,[[0,2]])}));return function(){return e.apply(this,arguments)}}();e()}},[x]),"mayo_announcement"!==x)return null;var O=function(){if(!_||0===_.service_bodies.length)return w;var e=_.service_bodies.map(function(e){return e.toString()});return w.filter(function(t){return e.includes(t.id.toString())})}(),D=function(e,t){N({meta:_e(_e({},C),{},Se({},e,t))})},j=function(){return C.linked_event_refs&&Array.isArray(C.linked_event_refs)&&C.linked_event_refs.length>0?C.linked_event_refs:C.linked_events&&Array.isArray(C.linked_events)?C.linked_events.map(function(e){return{type:"local",id:e}}):[]},B=j(),M=function(e){return"local"===e.type?"local-".concat(e.id):"external-".concat(e.source_id,"-").concat(e.id)},F=function(e){var t=j().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)});D("linked_event_refs",t)},I=Ae((0,e.useState)({}),2),L=I[0],z=I[1],G=Ae((0,e.useState)(!1),2),U=G[0],W=G[1];return(0,e.useEffect)(function(){var e=function(){var e=Te(we().m(function e(){var t,n,a,l,r,c;return we().w(function(e){for(;;)switch(e.p=e.n){case 0:if(0!==(t=B.filter(function(e){return!L[M(e)]})).length){e.n=1;break}return e.a(2);case 1:W(!0),n={},a=he(t),e.p=2,r=we().m(function e(){var t,a,r,c,o,i;return we().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t=l.value,a=M(t),e.p=1,"local"!==t.type){e.n=3;break}return e.n=2,s("/events/".concat(t.id));case 2:(r=e.v)&&!r.code?n[a]={title:r.title||"Unknown Event",start_date:r.start_date||"",permalink:r.permalink||"",edit_link:r.edit_link||"",source:{type:"local",id:"local",name:"Local"}}:n[a]={title:"Event #".concat(t.id),start_date:"",permalink:"",edit_link:"",unavailable:!0,source:{type:"local",id:"local",name:"Local"}},e.n=6;break;case 3:return e.p=3,e.n=4,s("/events/search-all?per_page=100");case 4:c=e.v,o=(c.events||[]).find(function(e){return"external"===e.source.type&&e.source.id===t.source_id&&e.id===t.id}),n[a]=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=6;break;case 5:e.p=5,e.v,n[a]={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 6:e.n=8;break;case 7:e.p=7,i=e.v,console.error("Error fetching event details:",i),n[a]={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 8:return e.a(2)}},e,null,[[3,5],[1,7]])}),a.s();case 3:if((l=a.n()).done){e.n=5;break}return e.d(ge(r()),4);case 4:e.n=3;break;case 5:e.n=7;break;case 6:e.p=6,c=e.v,a.e(c);case 7:return e.p=7,a.f(),e.f(7);case 8:Object.keys(n).length>0&&z(function(e){return _e(_e({},e),n)}),W(!1);case 9:return e.a(2)}},e,null,[[2,6,7,8]])}));return function(){return e.apply(this,arguments)}}();B.length>0&&e()},[JSON.stringify(B)]),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:C.display_start_date||"",onChange:function(e){return D("display_start_date",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement("div",{style:{marginTop:"8px"}},React.createElement(n.TextControl,{label:"Time",type:"time",value:C.display_start_time||"",onChange:function(e){return D("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:C.display_end_date||"",onChange:function(e){return D("display_end_date",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),React.createElement("div",{style:{marginTop:"8px"}},React.createElement(n.TextControl,{label:"Time",type:"time",value:C.display_end_time||"",onChange:function(e){return D("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(n.PanelBody,{title:"Priority",initialOpen:!0},React.createElement(n.SelectControl,{label:"Priority Level",value:C.priority||"normal",options:[{label:"Low",value:"low"},{label:"Normal",value:"normal"},{label:"High",value:"high"},{label:"Urgent",value:"urgent"}],onChange:function(e){return D("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"}[C.priority||"normal"],fontWeight:600}},(C.priority||"normal").charAt(0).toUpperCase()+(C.priority||"normal").slice(1)))),React.createElement(n.PanelBody,{title:"Service Body",initialOpen:!0},React.createElement(n.SelectControl,{label:"Service Body",value:C.service_body||"",options:[{label:"Select a service body",value:""}].concat(ke(!_||0===_.service_bodies.length||_.service_bodies.map(function(e){return e.toString()}).includes("0")?[{label:"Unaffiliated (0)",value:"0"}]:[]),ke(O.map(function(e){return{label:"".concat(e.name," (").concat(e.id,")"),value:e.id}}))),onChange:function(e){return D("service_body",e)},__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),_&&_.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:"Linked Events",className:"mayo-linked-events"},React.createElement("p",{className:"components-base-control__help",style:{marginTop:0}},"Link this announcement to local or external events."),U&&B.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 event details...")),!U&&B.length>0&&React.createElement("div",{className:"mayo-linked-events-list",style:{marginBottom:"16px"}},B.map(function(e,t){var a=M(e),l=L[a]||{},r=l.title&&!l.title.startsWith("Event #")&&!l.title.startsWith("External Event #"),c="external"===e.type;return React.createElement("div",{key:a,style:{padding:"12px",backgroundColor:"#f9f9f9",borderRadius:"4px",marginBottom:"8px",borderLeft:"3px solid ".concat(c?"#ff9800":"#0073aa")}},React.createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"}},React.createElement("div",{style:{flex:1}},r||l.title?React.createElement(React.Fragment,null,React.createElement("strong",{style:{display:"block",marginBottom:"4px"}},l.title||(c?"External Event #".concat(e.id):"Event #".concat(e.id))),c&&l.source&&React.createElement("span",{style:{display:"inline-block",fontSize:"11px",backgroundColor:"#fff3e0",color:"#e65100",padding:"2px 6px",borderRadius:"3px",marginBottom:"4px"}},l.source.name||l.source.id),l.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=Ae(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}}(l.start_date)),React.createElement("div",{style:{display:"flex",gap:"8px",marginTop:"8px"}},l.permalink&&React.createElement("a",{href:l.permalink,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"}}),c?"View on External Site":"View"),!c&&l.edit_link&&React.createElement("a",{href:l.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"}},c?"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 F(e)},style:{marginLeft:"12px"}},"Remove")))})),React.createElement(n.Button,{variant:"secondary",onClick:function(){return l(!0)},style:{width:"100%",justifyContent:"center"}},React.createElement("span",{className:"dashicons dashicons-plus-alt2",style:{marginRight:"4px"}}),"Link Event"),React.createElement(Oe,{isOpen:a,onClose:function(){return l(!1)},onSelectEvent:function(e){!function(e){var t,n=j();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})||D("linked_event_refs",[].concat(ke(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};F(t)},linkedEventRefs:B,getRefKey:M})),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:u>0?"pointer":"default"},onClick:function(){return u>0&&h(!0)}},R?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:u>0?"underline":"none"}},React.createElement("strong",null,null!=u?u:0)," subscriber",1!==u?"s":""," will receive this announcement"))),React.createElement("p",{className:"components-base-control__help",style:{marginTop:"8px"}},"Based on selected categories, tags, and service body.",u>0&&" Click to view recipients."),g&&React.createElement(n.Modal,{title:"Email Recipients (".concat(p.length,")"),onRequestClose:function(){return h(!1)},style:{maxWidth:"600px",width:"100%"}},React.createElement("div",{style:{maxHeight:"400px",overflowY:"auto",border:"1px solid #ddd",borderRadius:"4px"}},p.length>0?p.map(function(e,t){var n,a;return React.createElement("div",{key:e.email,style:{padding:"12px",borderBottom:t<p.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 h(!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(De,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 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(){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 ce(e){return ce="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},ce(e)}function oe(e){return function(e){if(Array.isArray(e))return Re(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||fe(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 ie(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?ie(Object(n),!0).forEach(function(t){se(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ie(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function se(e,t,n){return(t=function(e){var t=function(e){if("object"!=ce(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=ce(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==ce(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function me(){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 de(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]())):(de(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,de(e,l,"GeneratorFunction")),e.prototype=Object.create(m),e}return i.prototype=u,de(m,"constructor",u),de(u,"constructor",i),i.displayName="GeneratorFunction",de(u,l,"GeneratorFunction"),de(m),de(m,l,"Generator"),de(m,a,function(){return this}),de(m,"toString",function(){return"[object Generator]"}),(me=function(){return{w:r,m:d}})()}function de(e,t,n,a){var l=Object.defineProperty;try{l({},"",{})}catch(e){l=0}de=function(e,t,n,a){function r(t,n){de(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))},de(e,t,n,a)}function pe(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 Ee(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)||fe(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 fe(e,t){if(e){if("string"==typeof e)return Re(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)?Re(e,t):void 0}}function Re(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 ve=function(){var t,a,l=ee().serviceBodies,r=Ee((0,e.useState)(!1),2),c=r[0],o=r[1],i=Ee((0,e.useState)(""),2),u=i[0],m=i[1],d=Ee((0,e.useState)([]),2),p=d[0],E=d[1],f=Ee((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=me().m(function e(){var t,n;return me().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){pe(r,a,l,c,o,"next",e)}function o(e){pe(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),{},se({},e,t))})},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||(S?re():""),options:[{label:"-- No timezone set --",value:""}].concat(oe(le.map(function(e){return{label:e.label,value:e.value}}))),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(oe(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=Ee(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(oe(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(oe(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 ye(e){return ye="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},ye(e)}function ge(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(ye(e)+" is not iterable")}function he(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=Ne(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 be(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 _e(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?be(Object(n),!0).forEach(function(t){Se(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):be(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Se(e,t,n){return(t=function(e){var t=function(e){if("object"!=ye(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=ye(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==ye(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function we(){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 xe(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]())):(xe(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,xe(e,l,"GeneratorFunction")),e.prototype=Object.create(m),e}return i.prototype=u,xe(m,"constructor",u),xe(u,"constructor",i),i.displayName="GeneratorFunction",xe(u,l,"GeneratorFunction"),xe(m),xe(m,l,"Generator"),xe(m,a,function(){return this}),xe(m,"toString",function(){return"[object Generator]"}),(we=function(){return{w:r,m:d}})()}function xe(e,t,n,a){var l=Object.defineProperty;try{l({},"",{})}catch(e){l=0}xe=function(e,t,n,a){function r(t,n){xe(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))},xe(e,t,n,a)}function ke(e){return function(e){if(Array.isArray(e))return Pe(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Ne(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 Ce(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 Te(e){return function(){var t=this,n=arguments;return new Promise(function(a,l){var r=e.apply(t,n);function c(e){Ce(r,a,l,c,o,"next",e)}function o(e){Ce(r,a,l,c,o,"throw",e)}c(void 0)})}}function Ae(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)||Ne(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 Ne(e,t){if(e){if("string"==typeof e)return Pe(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)?Pe(e,t):void 0}}function Pe(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(ve,null))},icon:"calendar"});var Oe=function(t){var a=t.isOpen,l=t.onClose,r=t.onSelectEvent,c=t.onRemoveEvent,o=t.linkedEventRefs,i=(t.getRefKey,Ae((0,e.useState)(""),2)),u=i[0],m=i[1],d=Ae((0,e.useState)([]),2),p=d[0],E=d[1],f=Ae((0,e.useState)(!1),2),R=f[0],v=f[1],y=Ae((0,e.useState)(!1),2),g=y[0],h=y[1],b=Ae((0,e.useState)(1),2),_=b[0],S=b[1],w=Ae((0,e.useState)(!0),2),x=w[0],k=w[1],C=Ae((0,e.useState)(0),2),T=C[0],A=C[1],N=Ae((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=Te(we().m(function e(t,n,a){var l,r,c,o,i,u=arguments;return we().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(ke(e),ke(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=Ae(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},De=[{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"}],je=function(t){var a=t.isOpen,l=t.onClose,r=t.onAddLink,c=Ae((0,e.useState)(""),2),o=c[0],i=c[1],u=Ae((0,e.useState)(""),2),s=u[0],m=u[1],d=Ae((0,e.useState)("external"),2),p=d[0],E=d[1],f=Ae((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"}},De.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 Be=function(){var t=Ae((0,e.useState)(!1),2),a=t[0],l=t[1],r=Ae((0,e.useState)(!1),2),c=r[0],o=r[1],i=Ae((0,e.useState)(!1),2),u=i[0],m=i[1],d=Ae((0,e.useState)(null),2),p=d[0],E=d[1],f=Ae((0,e.useState)([]),2),R=f[0],v=f[1],y=Ae((0,e.useState)(!1),2),g=y[0],h=y[1],b=Ae((0,e.useState)(!1),2),_=b[0],S=b[1],w=Ae((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||"";if((0,e.useEffect)(function(){if("mayo_announcement"===T){var e=function(){var e=Te(we().m(function e(){var t,n;return we().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:_e(_e({},N),{},{linked_event_refs:[].concat(ke(n),[a])})})}}m(!0)}}},[T,A,u,N.linked_event_refs]),(0,e.useEffect)(function(){if("mayo_announcement"===T){var e=function(){var e=Te(we().m(function e(){var t,n;return we().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]),"mayo_announcement"!==T)return null;var B=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())})}(),M=function(e,t){D({meta:_e(_e({},N),{},Se({},e,t))})},L=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}}):[]},I=L(),F=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)},z=function(e){var t=L().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});M("linked_event_refs",t)},G=Ae((0,e.useState)({}),2),U=G[0],W=G[1],H=Ae((0,e.useState)(!1),2),Y=H[0],q=H[1];return(0,e.useEffect)(function(){var e=function(){var e=Te(we().m(function e(){var t,n,a,l,r,c,o;return we().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t=I.filter(function(e){return"custom"!==e.type&&!U[F(e)]}),n={},I.filter(function(e){return"custom"===e.type}).forEach(function(e){var t=F(e);U[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&&W(function(e){return _e(_e({},e),n)}),0!==t.length){e.n=1;break}return e.a(2);case 1:q(!0),a={},l=he(t),e.p=2,c=we().m(function e(){var t,n,l,c,o,i;return we().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t=r.value,n=F(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(ge(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&&W(function(e){return _e(_e({},e),a)}),q(!1);case 9:return e.a(2)}},e,null,[[2,6,7,8]])}));return function(){return e.apply(this,arguments)}}();I.length>0&&e()},[JSON.stringify(I)]),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 M("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 M("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 M("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 M("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(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 M("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(ke(!x||0===x.service_bodies.length||x.service_bodies.map(function(e){return e.toString()}).includes("0")?[{label:"Unaffiliated (0)",value:"0"}]:[]),ke(B.map(function(e){return{label:"".concat(e.name," (").concat(e.id,")"),value:e.id}}))),onChange:function(e){return M("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."),Y&&I.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...")),!Y&&I.length>0&&React.createElement("div",{className:"mayo-linked-events-list",style:{marginBottom:"16px"}},I.map(function(e,t){var a,l,r,c,o=F(e),i=U[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=De.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=Ae(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 z(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(je,{isOpen:c,onClose:function(){return o(!1)},onAddLink:function(e){var t=L();M("linked_event_refs",[].concat(ke(t),[e]))}}),React.createElement(Oe,{isOpen:a,onClose:function(){return l(!1)},onSelectEvent:function(e){!function(e){var t,n=L();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})||M("linked_event_refs",[].concat(ke(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};z(t)},linkedEventRefs:I,getRefKey:F})),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(Be,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/assets/js/dist/public.bundle.js
r3436887 r3439987 1 1 /*! For license information please see public.bundle.js.LICENSE.txt */ 2 (()=>{"use strict";const e=wp.element,t=React;function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function a(){var e,t,n="function"==typeof Symbol?Symbol:{},o=n.iterator||"@@iterator",c=n.toStringTag||"@@toStringTag";function i(n,a,o,c){var i=a&&a.prototype instanceof s?a:s,u=Object.create(i.prototype);return r(u,"_invoke",function(n,a,r){var o,c,i,s=0,u=r||[],m=!1,d={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,c=0,i=e,d.n=n,l}};function f(n,a){for(c=n,i=a,t=0;!m&&s&&!r&&t<u.length;t++){var r,o=u[t],f=d.p,v=o[2];n>3?(r=v===a)&&(i=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=e):o[0]<=f&&((r=n<2&&f<o[1])?(c=0,d.v=a,d.n=o[1]):f<v&&(r=n<3||o[0]>a||a>v)&&(o[4]=n,o[5]=a,d.n=v,c=0))}if(r||n>1)return l;throw m=!0,a}return function(r,u,v){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&f(u,v),c=u,i=v;(t=c<2?e:i)||!m;){o||(c?c<3?(c>1&&(d.n=-1),f(c,i)):d.n=i:d.v=i);try{if(s=2,o){if(c||(r="next"),t=o[r]){if(!(t=t.call(o,i)))throw TypeError("iterator result is not an object");if(!t.done)return t;i=t.value,c<2&&(c=0)}else 1===c&&(t=o.return)&&t.call(o),c<2&&(i=TypeError("The iterator does not provide a '"+r+"' method"),c=1);o=e}else if((t=(m=d.n<0)?i:n.call(a,d))!==l)break}catch(t){o=e,c=1,i=t}finally{s=1}}return{value:t,done:m}}}(n,o,c),!0),u}var l={};function s(){}function u(){}function m(){}t=Object.getPrototypeOf;var d=[][o]?t(t([][o]())):(r(t={},o,function(){return this}),t),f=m.prototype=s.prototype=Object.create(d);function v(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,m):(e.__proto__=m,r(e,c,"GeneratorFunction")),e.prototype=Object.create(f),e}return u.prototype=m,r(f,"constructor",m),r(m,"constructor",u),u.displayName="GeneratorFunction",r(m,c,"GeneratorFunction"),r(f),r(f,c,"Generator"),r(f,o,function(){return this}),r(f,"toString",function(){return"[object Generator]"}),(a=function(){return{w:i,m:v}})()}function r(e,t,n,a){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}r=function(e,t,n,a){function c(t,n){r(e,t,function(e){return this._invoke(t,n,e)})}t?o?o(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 o(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 c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach(function(t){i(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function i(e,t,a){return(t=function(e){var t=function(e){if("object"!=n(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var a=t.call(e,"string");if("object"!=n(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==n(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t,n,a,r,o,c){try{var i=e[o](c),l=i.value}catch(e){return void n(e)}i.done?t(l):Promise.resolve(l).then(a,r)}function s(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,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return u(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)?u(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 u(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 m=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],d=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],f=function(e){return e.split("").map(function(e){var t=e.codePointAt(0);return t>127?"u".concat(t):e}).join("")},v=function(e,t){if(!e)return"";if("24hour"===t)return e;var n=s(e.split(":"),2),a=n[0],r=n[1],o=parseInt(a),c=o>=12?"PM":"AM";return"".concat(o%12||12,":").concat(r," ").concat(c)},y=function(e){try{return(new Date).toLocaleTimeString("en-US",{timeZone:e,timeZoneName:"short"}).split(" ")[2]}catch(t){return e.split("/").pop().replace("_"," ")}},p=function(e,t){var n=e.meta,a=n.event_start_date,r=n.event_end_date,o=n.event_start_time,c=n.event_end_time,i=n.timezone;if(!a)return"";if(!o)return"";var l="";if(r&&a!==r){var s=new Date(a+"T00:00:00"),u=new Date(r+"T00:00:00"),m="".concat(d[s.getMonth()]," ").concat(s.getDate()),f="".concat(d[u.getMonth()]," ").concat(u.getDate());l="".concat(m,", ").concat(v(o,t)," - ").concat(f,", ").concat(v(c||o,t))}else l=v(o,t),c&&(l+=" - ".concat(v(c,t)));return i&&(l+=" (".concat(y(i),")")),l},g=function(e){if(!e||"none"===e.type)return"";var t=e.type,n=e.interval,a=e.weekdays,r=void 0===a?[]:a,o=e.endDate,c=e.monthlyType,i=e.monthlyWeekday,l=e.monthlyDate,u="This event repeats ";switch(t){case"daily":u+=n>1?"every ".concat(n," days"):"daily";break;case"weekly":if(u+=n>1?"every ".concat(n," weeks"):"weekly",r&&r.length){var d=r.map(function(e){return m[parseInt(e)]});u+=" on ".concat(d.join(", "))}break;case"monthly":if(u+=n>1?"every ".concat(n," months"):"monthly","date"===c&&l)u+=" on day ".concat(l);else if("weekday"===c&&i){var f=s(i.split(",").map(Number),2),v=f[0],y=f[1];u+=" on the ".concat(v>0?["first","second","third","fourth","fifth"][v-1]:"last"," ").concat(m[y])}break;default:return""}return o&&(u+=" until ".concat(o)),u}, b=function(){var e,t=(e=a().m(function e(t){var n,r,o,i,l,s,u,m,d,f=arguments;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:return o=f.length>1&&void 0!==f[1]?f[1]:{},(i=(null===(n=window.mayoApiSettings)||void 0===n?void 0:n.root)||(null===(r=window.wpApiSettings)||void 0===r?void 0:r.root)||"/wp-json/").endsWith("/")||(i+="/"),l="".concat(i,"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=c(c({},{credentials:"same-origin",headers:{"Content-Type":"application/json","X-WP-Nonce":s}}),o),e.p=1,e.n=2,fetch(l,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,r){var o=e.apply(t,n);function c(e){l(o,a,r,c,i,"next",e)}function i(e){l(o,a,r,c,i,"throw",e)}c(void 0)})});return function(e){return t.apply(this,arguments)}}();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 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 _(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){R(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 R(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 w(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",r=n.toStringTag||"@@toStringTag";function o(n,a,r,o){var l=a&&a.prototype instanceof i?a:i,s=Object.create(l.prototype);return S(s,"_invoke",function(n,a,r){var o,i,l,s=0,u=r||[],m=!1,d={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,i=0,l=e,d.n=n,c}};function f(n,a){for(i=n,l=a,t=0;!m&&s&&!r&&t<u.length;t++){var r,o=u[t],f=d.p,v=o[2];n>3?(r=v===a)&&(l=o[(i=o[4])?5:(i=3,3)],o[4]=o[5]=e):o[0]<=f&&((r=n<2&&f<o[1])?(i=0,d.v=a,d.n=o[1]):f<v&&(r=n<3||o[0]>a||a>v)&&(o[4]=n,o[5]=a,d.n=v,i=0))}if(r||n>1)return c;throw m=!0,a}return function(r,u,v){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&f(u,v),i=u,l=v;(t=i<2?e:l)||!m;){o||(i?i<3?(i>1&&(d.n=-1),f(i,l)):d.n=l:d.v=l);try{if(s=2,o){if(i||(r="next"),t=o[r]){if(!(t=t.call(o,l)))throw TypeError("iterator result is not an object");if(!t.done)return t;l=t.value,i<2&&(i=0)}else 1===i&&(t=o.return)&&t.call(o),i<2&&(l=TypeError("The iterator does not provide a '"+r+"' method"),i=1);o=e}else if((t=(m=d.n<0)?l:n.call(a,d))!==c)break}catch(t){o=e,i=1,l=t}finally{s=1}}return{value:t,done:m}}}(n,r,o),!0),s}var c={};function i(){}function l(){}function s(){}t=Object.getPrototypeOf;var u=[][a]?t(t([][a]())):(S(t={},a,function(){return this}),t),m=s.prototype=i.prototype=Object.create(u);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,S(e,r,"GeneratorFunction")),e.prototype=Object.create(m),e}return l.prototype=s,S(m,"constructor",s),S(s,"constructor",l),l.displayName="GeneratorFunction",S(s,r,"GeneratorFunction"),S(m),S(m,r,"Generator"),S(m,a,function(){return this}),S(m,"toString",function(){return"[object Generator]"}),(w=function(){return{w:o,m:d}})()}function S(e,t,n,a){var r=Object.defineProperty;try{r({},"",{})}catch(e){r=0}S=function(e,t,n,a){function o(t,n){S(e,t,function(e){return this._invoke(t,n,e)})}t?r?r(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},S(e,t,n,a)}function N(e,t,n,a,r,o,c){try{var i=e[o](c),l=i.value}catch(e){return void n(e)}i.done?t(l):Promise.resolve(l).then(a,r)}function k(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,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return O(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)?O(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 O(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 T=(0,t.createContext)(),A=function(){return(0,t.useContext)(T)},j=function(e){var n=e.children,a=k((0,t.useState)([]),2),r=a[0],o=a[1],c=k((0,t.useState)({}),2),i=c[0],l=c[1],s=k((0,t.useState)(!0),2),u=s[0],m=s[1];return(0,t.useEffect)(function(){var e=function(){var e,t=(e=w().m(function e(){var t,n,a,r,c,i;return w().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,m(!0),e.n=1,b("/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)}),o(c),e.n=6;break;case 5:e.p=5,i=e.v,console.error("Error fetching service bodies:",i),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,r){var o=e.apply(t,n);function c(e){N(o,a,r,c,i,"next",e)}function i(e){N(o,a,r,c,i,"throw",e)}c(void 0)})});return function(){return t.apply(this,arguments)}}();e()},[]),React.createElement(T.Provider,{value:{serviceBodies:r,getServiceBodyName:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"local";if("local"===t){var n=r.find(function(t){return t.id===e});return(null==n?void 0:n.name)||"Out of Area"}if(i[t]){var a=i[t].find(function(t){return t.id===e});return(null==a?void 0:a.name)||"Out of Area"}return"Out of Area"},updateExternalServiceBodies:function(e,t){t&&Array.isArray(t)&&0!==t.length&&l(function(n){return _(_({},n),{},R({},e,t))})}}},u?React.createElement("div",null,"Loading..."):n)},x=[{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"}],C=function(){try{var e=Intl.DateTimeFormat().resolvedOptions().timeZone;return x.find(function(t){return t.value===e})?e:"America/New_York"}catch(e){return"America/New_York"}};function P(e){return P="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},P(e)}function D(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",r=n.toStringTag||"@@toStringTag";function o(n,a,r,o){var l=a&&a.prototype instanceof i?a:i,s=Object.create(l.prototype);return F(s,"_invoke",function(n,a,r){var o,i,l,s=0,u=r||[],m=!1,d={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,i=0,l=e,d.n=n,c}};function f(n,a){for(i=n,l=a,t=0;!m&&s&&!r&&t<u.length;t++){var r,o=u[t],f=d.p,v=o[2];n>3?(r=v===a)&&(l=o[(i=o[4])?5:(i=3,3)],o[4]=o[5]=e):o[0]<=f&&((r=n<2&&f<o[1])?(i=0,d.v=a,d.n=o[1]):f<v&&(r=n<3||o[0]>a||a>v)&&(o[4]=n,o[5]=a,d.n=v,i=0))}if(r||n>1)return c;throw m=!0,a}return function(r,u,v){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&f(u,v),i=u,l=v;(t=i<2?e:l)||!m;){o||(i?i<3?(i>1&&(d.n=-1),f(i,l)):d.n=l:d.v=l);try{if(s=2,o){if(i||(r="next"),t=o[r]){if(!(t=t.call(o,l)))throw TypeError("iterator result is not an object");if(!t.done)return t;l=t.value,i<2&&(i=0)}else 1===i&&(t=o.return)&&t.call(o),i<2&&(l=TypeError("The iterator does not provide a '"+r+"' method"),i=1);o=e}else if((t=(m=d.n<0)?l:n.call(a,d))!==c)break}catch(t){o=e,i=1,l=t}finally{s=1}}return{value:t,done:m}}}(n,r,o),!0),s}var c={};function i(){}function l(){}function s(){}t=Object.getPrototypeOf;var u=[][a]?t(t([][a]())):(F(t={},a,function(){return this}),t),m=s.prototype=i.prototype=Object.create(u);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,F(e,r,"GeneratorFunction")),e.prototype=Object.create(m),e}return l.prototype=s,F(m,"constructor",s),F(s,"constructor",l),l.displayName="GeneratorFunction",F(s,r,"GeneratorFunction"),F(m),F(m,r,"Generator"),F(m,a,function(){return this}),F(m,"toString",function(){return"[object Generator]"}),(D=function(){return{w:o,m:d}})()}function F(e,t,n,a){var r=Object.defineProperty;try{r({},"",{})}catch(e){r=0}F=function(e,t,n,a){function o(t,n){F(e,t,function(e){return this._invoke(t,n,e)})}t?r?r(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},F(e,t,n,a)}function I(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 M(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?I(Object(n),!0).forEach(function(t){L(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):I(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function L(e,t,n){return(t=function(e){var t=function(e){if("object"!=P(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=P(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==P(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function G(e,t,n,a,r,o,c){try{var i=e[o](c),l=i.value}catch(e){return void n(e)}i.done?t(l):Promise.resolve(l).then(a,r)}function B(e){return function(){var t=this,n=arguments;return new Promise(function(a,r){var o=e.apply(t,n);function c(e){G(o,a,r,c,i,"next",e)}function i(e){G(o,a,r,c,i,"throw",e)}c(void 0)})}}function U(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,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(e,t)||z(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 W(e){return function(e){if(Array.isArray(e))return q(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||z(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 z(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}}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}const H=function(){var t,n,a,r,o,c,i=document.getElementById("mayo-event-form"),l=null==i||null===(t=i.dataset)||void 0===t?void 0:t.settings,s=window[l]||{},u=(null==i||null===(n=i.dataset)||void 0===n?void 0:n.categories)||"",m=(0,e.useMemo)(function(){return u?u.split(",").map(function(e){return e.trim().toLowerCase()}):[]},[u]),d=(0,e.useMemo)(function(){return m.filter(function(e){return!e.startsWith("-")})},[m]),f=(0,e.useMemo)(function(){return m.filter(function(e){return e.startsWith("-")}).map(function(e){return e.substring(1)})},[m]),v=(null==i||null===(a=i.dataset)||void 0===a?void 0:a.tags)||"",y=(0,e.useMemo)(function(){return v?v.split(",").map(function(e){return e.trim().toLowerCase()}):[]},[v]),p=(0,e.useMemo)(function(){return y.filter(function(e){return!e.startsWith("-")})},[y]),g=(0,e.useMemo)(function(){return y.filter(function(e){return e.startsWith("-")}).map(function(e){return e.substring(1)})},[y]),h=function(e){var t=document.createElement("textarea");return t.innerHTML=e,t.value},E=s.additionalRequiredFields?s.additionalRequiredFields.split(",").map(function(e){return e.trim()}):[],_=[].concat(["event_name","event_type","service_body","email","event_start_date","event_start_time","event_end_time","event_end_date","timezone"],W(E)),R=U((0,e.useState)({event_name:"",event_type:"",event_start_date:"",event_end_date:"",event_start_time:"",event_end_time:"",timezone:C(),description:"",flyer:null,location_name:"",location_address:"",location_details:"",categories:[],tags:[],service_body:"",email:"",contact_name:"",recurring_pattern:{type:"none",interval:1,weekdays:[],endDate:"",monthlyType:"date",monthlyDate:"",monthlyWeekday:""}}),2),w=R[0],S=R[1],N=U((0,e.useState)(!1),2),k=N[0],O=N[1],T=U((0,e.useState)(null),2),j=T[0],P=T[1],F=U((0,e.useState)([]),2),I=F[0],G=F[1],z=U((0,e.useState)([]),2),q=z[0],H=z[1],J=U((0,e.useState)(null),2),Y=J[0],V=(J[1],A().serviceBodies),$=U((0,e.useState)(null),2),Z=$[0],K=$[1],X=U((0,e.useState)(!1),2),Q=X[0],ee=X[1],te=U((0,e.useState)({default_service_bodies:""}),2),ne=te[0],ae=te[1];(0,e.useEffect)(function(){var e=function(){var e=B(D().m(function e(){var t,n,a,r,o;return D().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,b("/settings");case 1:n=e.v,a={default_service_bodies:n.default_service_bodies||""},void 0!==s.defaultServiceBodies&&""!==s.defaultServiceBodies&&(a.default_service_bodies=s.defaultServiceBodies),ae(a),(r=null===(t=a.default_service_bodies)||void 0===t?void 0:t.split(",").map(function(e){return e.trim()}).filter(function(e){return e}))&&1===r.length&&S(function(e){return M(M({},e),{},{service_body:r[0]})}),e.n=3;break;case 2:e.p=2,o=e.v,console.error("Error fetching service body settings:",o);case 3:return e.a(2)}},e,null,[[0,2]])}));return function(){return e.apply(this,arguments)}}();e()},[s]),(0,e.useEffect)(function(){var e=function(){var e=B(D().m(function e(){var t,n,a,r,o,c,i,l,s;return D().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,Promise.all([fetch("/wp-json/wp/v2/categories?hide_empty=false&per_page=100"),fetch("/wp-json/wp/v2/tags?hide_empty=false&per_page=100")]);case 1:if(t=e.v,n=U(t,2),a=n[0],r=n[1],a.ok&&r.ok){e.n=2;break}throw new Error("Failed to fetch taxonomies");case 2:return e.n=3,a.json();case 3:return o=e.v,e.n=4,r.json();case 4:c=e.v,i=o.filter(function(e){var t=(e.slug||"").toLowerCase();return d.length>0?d.includes(t):!(f.length>0&&f.includes(t))}),l=c.filter(function(e){var t=(e.slug||"").toLowerCase();return p.length>0?p.includes(t):!(g.length>0&&g.includes(t))}),G(Array.isArray(i)?i:[]),H(Array.isArray(l)?l:[]),e.n=6;break;case 5:e.p=5,s=e.v,console.error("Error fetching taxonomies:",s),G([]),H([]);case 6:return e.a(2)}},e,null,[[0,5]])}));return function(){return e.apply(this,arguments)}}();e()},[d,f,p,g]);var re,oe,ce=function(){var e=B(D().m(function e(t){var n,a,r,o,c,i,l,s,u,m,d,f,v,y;return D().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t.preventDefault(),O(!0),P(null),e.p=1,!w.flyer){e.n=2;break}if(o=["image/jpeg","image/png","image/gif"],c=w.flyer.name.split(".").pop().toLowerCase(),i=["jpg","jpeg","png","gif"],o.includes(w.flyer.type)&&i.includes(c)){e.n=2;break}throw new Error("You did not attach a valid image file, so one will not be submitted. Please choose a valid image file (JPG, PNG, or GIF)");case 2:if(!((l=_.filter(function(e){return"flyer"===e?!w.flyer:!w[e]})).length>0)){e.n=3;break}throw new Error("Please fill in all required fields: ".concat(l.join(", ")));case 3:return s=new FormData,Object.keys(w).forEach(function(e){"flyer"===e&&w[e]instanceof File?s.append("flyer",w[e]):"categories"===e||"tags"===e?s.append(e,w[e].join(",")):"recurring_pattern"===e?s.append(e,JSON.stringify(w[e])):null!=w[e]&&""!==w[e]&&s.append(e,w[e])}),u=(null===(n=window.mayoApiSettings)||void 0===n?void 0:n.nonce)||(null===(a=document.querySelector("#_wpnonce"))||void 0===a?void 0:a.value)||(null===(r=window.wpApiSettings)||void 0===r?void 0:r.nonce),e.n=4,b("/submit-event",{method:"POST",body:s,credentials:"same-origin",headers:{"X-WP-Nonce":u}});case 4:if(!(m=e.v).id&&!m.success){e.n=5;break}P({type:"success",text:"Event submitted successfully!"}),f=null===(d=ne.default_service_bodies)||void 0===d?void 0:d.split(",").map(function(e){return e.trim()}).filter(function(e){return e}),v=f&&1===f.length?f[0]:"",console.log("Form reset - serviceBodySettings:",ne),console.log("Form reset - defaultIds:",f),console.log("Form reset - preservedServiceBody:",v),S({event_name:"",event_type:"",event_start_date:"",event_end_date:"",event_start_time:"",event_end_time:"",timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,description:"",flyer:null,location_name:"",location_address:"",location_details:"",categories:[],tags:[],service_body:v,email:"",contact_name:"",recurring_pattern:{type:"none",interval:1,weekdays:[],endDate:"",monthlyType:"date",monthlyDate:"",monthlyWeekday:""}}),K(null),e.n=6;break;case 5:throw new Error(m.message||"Failed to submit event");case 6:e.n=8;break;case 7:e.p=7,y=e.v,P({type:"error",text:y.message||"Error submitting form"});case 8:return e.p=8,O(!1),e.f(8);case 9:return e.a(2)}},e,null,[[1,7,8,9]])}));return function(t){return e.apply(this,arguments)}}(),ie=function(e){var t=e.target,n=t.name,a=t.value,r=t.files;if(r&&r[0]){var o=r[0],c=o.name.split(".").pop().toLowerCase();if(!["image/jpeg","image/png","image/gif"].includes(o.type)||!["jpg","jpeg","png","gif"].includes(c))return P({type:"error",text:"The selected file is not a valid image, so one will not be submitted. Please use a valid image file (JPG, PNG, or GIF)"}),e.target.value="",S(function(e){return M(M({},e),{},{flyer:null})}),void K(null);var i=new FileReader;i.onload=function(t){var n=new Image;n.onload=function(){K("image"),S(function(e){return M(M({},e),{},{flyer:o})}),P(null)},n.onerror=function(){P({type:"error",text:"The selected file is not a valid image, so one will not be submitted. Please choose a valid image file (JPG, PNG, or GIF)"}),e.target.value="",S(function(e){return M(M({},e),{},{flyer:null})}),K(null)},n.src=t.target.result},i.onerror=function(){P({type:"error",text:"Error reading the file"}),e.target.value="",S(function(e){return M(M({},e),{},{flyer:null})}),K(null)},i.readAsDataURL(o)}else S(function(e){return M(M({},e),{},L({},n,a))})},le=function(e){return _.includes(e)},se=function(){return w.event_start_date?new Date(w.event_start_date).getDate().toString():""},ue=function(){if(w.event_start_date){var e=new Date(w.event_start_date),t=Math.ceil(e.getDate()/7);return"".concat(t,",").concat(e.getDay())}return""},me=function(e){S(function(t){return M(M({},t),{},{recurring_pattern:M(M({},t.recurring_pattern),e)})})},de=[{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"}];return Y?React.createElement("div",{className:"mayo-error"},Y):React.createElement("div",{className:"mayo-event-form"},React.createElement("form",{onSubmit:ce},React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"event_name"},"Event Name ",le("event_name")&&"*"),React.createElement("input",{type:"text",id:"event_name",name:"event_name",value:w.event_name,onChange:ie,required:le("event_name")})),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"event_type"},"Event Type ",le("event_type")&&"*"),React.createElement("select",{id:"event_type",name:"event_type",value:w.event_type,onChange:ie,required:le("event_type")},React.createElement("option",{value:""},"Select Event Type"),React.createElement("option",{value:"Service"},"Service"),React.createElement("option",{value:"Activity"},"Activity"))),(!ne.default_service_bodies||(null===(oe=ne.default_service_bodies)||void 0===oe?void 0:oe.split(",").map(function(e){return e.trim()}).filter(function(e){return e})).length>1)&&React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"service_body"},"Service Body *"),React.createElement("select",{id:"service_body",name:"service_body",value:w.service_body,onChange:function(e){S(function(t){return M(M({},t),{},{service_body:e.target.value})})},required:!0},React.createElement("option",{value:""},"Select a service body"),(!ne.default_service_bodies||ne.default_service_bodies.includes("0"))&&React.createElement("option",{value:"0"},"Unaffiliated (0)"),function(){if(!ne.default_service_bodies)return V;var e=ne.default_service_bodies.split(",").map(function(e){return e.trim()}).filter(function(e){return e});return V.filter(function(t){return e.includes(t.id.toString())})}().map(function(e){return React.createElement("option",{key:e.id,value:e.id},e.name," (",e.id,")")}))),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"contact_name"},"Point of Contact Name (Private) *"),React.createElement("input",{type:"text",id:"contact_name",name:"contact_name",value:w.contact_name,onChange:ie,required:!0,placeholder:"Your name (will not be displayed publicly)"})),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"email"},"Point of Contact Email (Private) *"),React.createElement("input",{type:"email",id:"email",name:"email",value:w.email,onChange:ie,required:!0,placeholder:"Your email address (will not be displayed publicly)"})),React.createElement("div",{className:"mayo-datetime-group"},React.createElement("div",{className:"mayo-form-field"},React.createElement("label",null,"Start Date/Time *"),React.createElement("div",{className:"mayo-datetime-inputs"},React.createElement("input",{type:"date",id:"event_start_date",name:"event_start_date",value:w.event_start_date,onChange:ie,required:!0}),React.createElement("input",{type:"time",id:"event_start_time",name:"event_start_time",value:w.event_start_time,onChange:ie,required:!0}))),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",null,"End Date/Time *"),React.createElement("div",{className:"mayo-datetime-inputs"},React.createElement("input",{type:"date",id:"event_end_date",name:"event_end_date",value:w.event_end_date,onChange:ie}),React.createElement("input",{type:"time",id:"event_end_time",name:"event_end_time",value:w.event_end_time,onChange:ie,required:!0})))),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"timezone"},"Timezone ",le("timezone")&&"*"),React.createElement("select",{id:"timezone",name:"timezone",value:w.timezone,onChange:ie,required:le("timezone")},Object.entries((re={},x.forEach(function(e){re[e.region]||(re[e.region]=[]),re[e.region].push(e)}),re)).map(function(e){var t=U(e,2),n=t[0],a=t[1];return React.createElement("optgroup",{key:n,label:n},a.map(function(e){return React.createElement("option",{key:e.value,value:e.value},e.label)}))}))),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",null,"Recurring Pattern"),React.createElement("div",{className:"mayo-recurring-pattern"},React.createElement("select",{value:w.recurring_pattern.type,onChange:function(e){var t=e.target.value;me({type:t,interval:1,weekdays:[],endDate:"",monthlyType:"date",monthlyDate:"monthly"===t?se():"",monthlyWeekday:"monthly"===t?ue():""}),ee("none"!==t)}},React.createElement("option",{value:"none"},"No Recurrence"),React.createElement("option",{value:"daily"},"Daily"),React.createElement("option",{value:"weekly"},"Weekly"),React.createElement("option",{value:"monthly"},"Monthly")),Q&&React.createElement("div",{className:"mayo-recurring-options"},React.createElement("div",{className:"mayo-recurring-interval"},React.createElement("label",null,"Repeat every"),React.createElement("input",{type:"number",min:"1",value:w.recurring_pattern.interval,onChange:function(e){return me({interval:parseInt(e.target.value)})}}),React.createElement("span",null,"daily"===w.recurring_pattern.type?"days":"weekly"===w.recurring_pattern.type?"weeks":"months")),"weekly"===w.recurring_pattern.type&&React.createElement("div",{className:"mayo-weekday-controls"},React.createElement("label",null,"On these days"),de.map(function(e){return React.createElement("label",{key:e.value,className:"mayo-weekday-checkbox"},React.createElement("input",{type:"checkbox",checked:w.recurring_pattern.weekdays.includes(e.value),onChange:function(t){var n=t.target.checked?[].concat(W(w.recurring_pattern.weekdays),[e.value]):w.recurring_pattern.weekdays.filter(function(t){return t!==e.value});me({weekdays:n})}}),e.label)})),"monthly"===w.recurring_pattern.type&&React.createElement("div",{className:"mayo-monthly-pattern"},React.createElement("div",{className:"mayo-monthly-type"},React.createElement("label",null,"Monthly Pattern"),React.createElement("div",{className:"mayo-radio-group"},React.createElement("label",null,React.createElement("input",{type:"radio",name:"monthlyType",value:"date",checked:"date"===w.recurring_pattern.monthlyType,onChange:function(){return me({monthlyType:"date",monthlyDate:se(),monthlyWeekday:""})}}),"On a specific date"),React.createElement("label",null,React.createElement("input",{type:"radio",name:"monthlyType",value:"weekday",checked:"weekday"===w.recurring_pattern.monthlyType,onChange:function(){return me({monthlyType:"weekday",monthlyDate:"",monthlyWeekday:ue()})}}),"On a specific day"))),"date"===w.recurring_pattern.monthlyType&&React.createElement("div",{className:"mayo-monthly-date"},React.createElement("label",null,"Day of month"),React.createElement("input",{type:"number",min:"1",max:"31",value:w.recurring_pattern.monthlyDate||se(),onChange:function(e){return me({monthlyDate:e.target.value})}})),"weekday"===w.recurring_pattern.monthlyType&&React.createElement("div",{className:"mayo-monthly-weekday"},React.createElement("div",{className:"mayo-week-select"},React.createElement("label",null,"Week"),React.createElement("select",{value:(null===(r=w.recurring_pattern.monthlyWeekday)||void 0===r?void 0:r.split(",")[0])||"1",onChange:function(e){var t,n=(null===(t=w.recurring_pattern.monthlyWeekday)||void 0===t?void 0:t.split(",")[1])||"0";me({monthlyWeekday:"".concat(e.target.value,",").concat(n)})}},[{value:"1",label:"First"},{value:"2",label:"Second"},{value:"3",label:"Third"},{value:"4",label:"Fourth"},{value:"5",label:"Fifth"},{value:"-1",label:"Last"}].map(function(e){return React.createElement("option",{key:e.value,value:e.value},e.label)}))),React.createElement("div",{className:"mayo-day-select"},React.createElement("label",null,"Day"),React.createElement("select",{value:(null===(o=w.recurring_pattern.monthlyWeekday)||void 0===o?void 0:o.split(",")[1])||"0",onChange:function(e){var t,n=(null===(t=w.recurring_pattern.monthlyWeekday)||void 0===t?void 0:t.split(",")[0])||"1";me({monthlyWeekday:"".concat(n,",").concat(e.target.value)})}},de.map(function(e){return React.createElement("option",{key:e.value,value:e.value},e.label)}))))),React.createElement("div",{className:"mayo-recurring-end-date"},React.createElement("label",null,"End Date (optional)"),React.createElement("input",{type:"date",value:w.recurring_pattern.endDate,onChange:function(e){return me({endDate:e.target.value})}}))))),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"description"},"Description ",le("description")&&"*"),React.createElement("textarea",{id:"description",name:"description",value:w.description,onChange:ie,required:le("description")})),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",null,"Event Flyer ",le("flyer")&&"*"),React.createElement("div",{className:"mayo-upload-section"},!Z&&React.createElement(React.Fragment,null,React.createElement("input",{type:"file",id:"flyer-upload",name:"flyer",accept:"image/*",onChange:ie,required:le("flyer"),className:"mayo-file-input"}),React.createElement("label",{htmlFor:"flyer-upload",className:"mayo-upload-button"},"Upload Flyer"),React.createElement("p",{className:"mayo-upload-info"},"Supported file types: Images (.jpg, .jpeg, .png, .gif)",le("flyer")&&" (Required)"),j&&"error"===j.type&&j.text.includes("image")&&React.createElement("p",{className:"mayo-upload-error"},j.text)),Z&&React.createElement("div",{className:"mayo-upload-preview"},React.createElement("p",null,"Selected ","Image"===Z,": "," ",(null===(c=w.flyer)||void 0===c?void 0:c.name)||"No file selected"),React.createElement("button",{type:"button",onClick:function(){S(function(e){return M(M({},e),{},{flyer:null})}),K(null)},className:"mayo-clear-upload"},"Clear Upload")))),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"location_name"},"Location Name"),React.createElement("input",{type:"text",id:"location_name",name:"location_name",value:w.location_name,onChange:ie})),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"location_address"},"Address"),React.createElement("input",{type:"text",id:"location_address",name:"location_address",value:w.location_address,onChange:ie})),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"location_details"},"Location Details"),React.createElement("textarea",{id:"location_details",name:"location_details",value:w.location_details,onChange:ie,placeholder:"Additional details about the location (e.g., parking, entrance info)"})),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",null,"Categories"),React.createElement("div",{className:"mayo-taxonomy-list"},Array.isArray(I)&&I.map(function(e){return React.createElement("label",{key:null==e?void 0:e.id,className:"mayo-taxonomy-item"},React.createElement("input",{type:"checkbox",checked:w.categories.includes(null==e?void 0:e.id),onChange:function(t){var n=t.target.checked?[].concat(W(w.categories),[null==e?void 0:e.id]):w.categories.filter(function(t){return t!==(null==e?void 0:e.id)});S(M(M({},w),{},{categories:n}))}}),null!=e&&e.name?h(e.name):"Unnamed Category")}))),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",null,"Tags"),React.createElement("div",{className:"mayo-taxonomy-list"},Array.isArray(q)&&q.map(function(e){return React.createElement("label",{key:(null==e?void 0:e.id)||"default",className:"mayo-taxonomy-item"},React.createElement("input",{type:"checkbox",checked:w.tags.includes(null==e?void 0:e.name),onChange:function(t){var n=t.target.checked?[].concat(W(w.tags),[null==e?void 0:e.name]):w.tags.filter(function(t){return t!==(null==e?void 0:e.name)});S(M(M({},w),{},{tags:n}))}}),null!=e&&e.name?h(e.name):"Unnamed Tag")}))),React.createElement("button",{type:"submit",disabled:k,className:"mayo-submit-button"},k?"Submitting...":"Submit Event"),j&&React.createElement("div",{className:"mayo-message mayo-message-".concat(j.type)},"string"==typeof j.text?j.text:"An error occurred while submitting the form. Please try again.")))},J=function(e){var t=e.address,n=e.className,a=void 0===n?"mayo-location-address":n;if(!t)return null;var r=t.match(/(https?:\/\/[^\s]+)/g);return r&&r.length>0?React.createElement("a",{href:r[0],target:"_blank",rel:"noopener noreferrer",className:a,onClick:function(e){return e.stopPropagation()}},t):React.createElement("a",{href:"https://maps.google.com?q=".concat(encodeURIComponent(t)),target:"_blank",rel:"noopener noreferrer",className:a,onClick:function(e){return e.stopPropagation()}},t)};function Y(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 V=function(t){var n,a,r,o,c=t.event,i=t.timeFormat,l=t.forceExpanded,s=(r=(0,e.useState)(!1),o=2,function(e){if(Array.isArray(e))return e}(r)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(r,o)||function(e,t){if(e){if("string"==typeof e)return Y(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)?Y(e,t):void 0}}(r,o)||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.")}()),u=s[0],b=s[1];(0,e.useEffect)(function(){b(l)},[l]);var h=c.meta.event_start_date&&""!==c.meta.event_start_date&&!isNaN(new Date(c.meta.event_start_date+"T00:00:00").getTime()),E=h?new Date(c.meta.event_start_date+"T00:00:00"):null,_=c.meta.event_end_date&&c.meta.event_start_date!==c.meta.event_end_date,R=_?new Date(c.meta.event_end_date+"T00:00:00"):null,w=A(),S=w.getServiceBodyName,N=w.updateExternalServiceBodies;(0,e.useEffect)(function(){c.external_source&&c.external_source.service_bodies&&N(c.external_source.id,c.external_source.service_bodies)},[null===(n=c.external_source)||void 0===n?void 0:n.id,null===(a=c.external_source)||void 0===a?void 0:a.service_bodies,N]);var k=c.categories.map(function(e){return"mayo-event-category-".concat(f(e.name).toLowerCase().replace(/\s+/g,"-"))}).join(" "),O=c.tags.map(function(e){return"mayo-event-tag-".concat(f(e.name).toLowerCase().replace(/\s+/g,"-"))}).join(" "),T=c.meta.event_type?"mayo-event-type-".concat(f(c.meta.event_type).toLowerCase().replace(/\s+/g,"-")):"",j=c.external_source?c.external_source.id:"local",x=["mayo-event-card",k,O,T,"mayo-event-service-body-".concat(f(S(c.meta.service_body,j)).toLowerCase().replace(/\s+/g,"-"))].filter(Boolean).join(" ");return React.createElement("div",{className:x},React.createElement("div",{className:"mayo-event-header",onClick:function(){return b(!u)}},React.createElement("div",{className:"mayo-event-date-badge"},h?React.createElement(React.Fragment,null,_?React.createElement(React.Fragment,null,React.createElement("span",{className:"mayo-event-day-name"},m[E.getDay()]),React.createElement("span",{className:"mayo-event-day-number"},E.getDate()),React.createElement("span",{className:"mayo-event-month"},d[E.getMonth()],React.createElement("span",{className:"mayo-event-year"},E.getFullYear())),React.createElement("span",{className:"mayo-event-day-name"},m[R.getDay()]),React.createElement("span",{className:"mayo-event-day-number"},R.getDate()),React.createElement("span",{className:"mayo-event-month"},d[R.getMonth()],React.createElement("span",{className:"mayo-event-year"},R.getFullYear()))):React.createElement(React.Fragment,null,React.createElement("span",{className:"mayo-event-day-name"},m[E.getDay()]),React.createElement("span",{className:"mayo-event-day-number"},E.getDate()),React.createElement("span",{className:"mayo-event-month"},d[E.getMonth()],React.createElement("span",{className:"mayo-event-year"},E.getFullYear())))):React.createElement("span",{className:"mayo-event-date-error"},"No Date")),React.createElement("div",{className:"mayo-event-summary"},React.createElement("h3",{dangerouslySetInnerHTML:{__html:c.title.rendered}}),!h&&React.createElement("div",{className:"mayo-event-date-warning"},"This event has no date set"),React.createElement("div",{className:"mayo-event-brief"},React.createElement("span",{className:"mayo-event-type"},c.meta.event_type),p(c,i)&&React.createElement("span",{className:"mayo-event-time"},p(c,i)),c.external_source&&React.createElement("span",{className:"mayo-event-source"},"Source: ",c.external_source.url),c.meta.service_body&&React.createElement("span",{className:"mayo-event-service-body mayo-event-service-body-small"},S(c.meta.service_body,j)),(c.categories.length>0||c.tags.length>0)&&React.createElement("div",{className:"mayo-event-brief-taxonomies"},c.categories.map(function(e){return React.createElement("span",{key:e.id,className:"mayo-event-category mayo-event-category-small"},e.name)}),c.tags.map(function(e){return React.createElement("span",{key:e.id,className:"mayo-event-tag mayo-event-tag-small"},e.name)})))),React.createElement("span",{className:"mayo-caret dashicons ".concat(u?"dashicons-arrow-up-alt2":"dashicons-arrow-down-alt2")})),u&&React.createElement("div",{className:"mayo-event-details"},React.createElement("div",{className:"mayo-event-content"},React.createElement("div",{className:"mayo-event-metadata"},React.createElement("div",{className:"mayo-event-datetime-details"},React.createElement("h4",null,"Date & Time"),React.createElement("p",null,React.createElement("strong",null,"Start:")," ",c.meta.event_start_date," at ",v(c.meta.event_start_time,i),c.meta.timezone&&" (".concat(y(c.meta.timezone),")")),(c.meta.event_end_date||c.meta.event_end_time)&&React.createElement("p",null,React.createElement("strong",null,"End:")," ",c.meta.event_end_date||c.meta.event_start_date," at ",v(c.meta.event_end_time,i))),c.meta.event_type&&React.createElement("div",{className:"mayo-event-type-details"},React.createElement("h4",null,"Event Type"),React.createElement("p",null,c.meta.event_type))),React.createElement("div",{className:"mayo-event-description"},React.createElement("h4",null,"Description"),React.createElement("div",{dangerouslySetInnerHTML:{__html:c.content.rendered}})),c.featured_image&&React.createElement("div",{className:"mayo-event-attachments"},React.createElement("h4",null,"Event Flyer"),React.createElement("div",{className:"mayo-event-image"},React.createElement("div",{className:"mayo-image-actions"},React.createElement("a",{href:c.featured_image,download:!0,className:"mayo-image-link",onClick:function(e){return e.stopPropagation()}},"Download Flyer")),React.createElement("a",{href:c.featured_image,target:"_blank",rel:"noopener noreferrer"},React.createElement("img",{src:c.featured_image,alt:c.title.rendered}))))),(c.meta.location_name||c.meta.location_address||c.meta.location_details)&&React.createElement("div",{className:"mayo-event-location"},React.createElement("h4",null,"Location"),c.meta.location_name&&React.createElement("p",{className:"mayo-location-name"},c.meta.location_name),c.meta.location_address&&React.createElement("p",{className:"mayo-location-address"},React.createElement(J,{address:c.meta.location_address})),c.meta.location_details&&React.createElement("p",{className:"mayo-location-details"},c.meta.location_details)),c.meta.service_body&&React.createElement("div",null,React.createElement("h4",null,"Service Body"),React.createElement("p",null,S(c.meta.service_body,j))),React.createElement("div",{className:"mayo-event-taxonomies"},c.categories.length>0&&React.createElement("div",{className:"mayo-archive-event-categories"},c.categories.map(function(e){return React.createElement("span",{key:e.id,className:"mayo-event-category"},e.name)})),c.tags.length>0&&React.createElement("div",{className:"mayo-archive-event-tags"},c.tags.map(function(e){return React.createElement("span",{key:e.id,className:"mayo-event-tag"},e.name)}))),c.meta.recurring_pattern&&"none"!==c.meta.recurring_pattern.type&&React.createElement("div",{className:"mayo-event-recurring"},g(c.meta.recurring_pattern)),React.createElement("div",{className:"mayo-event-actions"},React.createElement("a",{href:c.link,className:"mayo-read-more",onClick:function(e){return e.stopPropagation()}},"Read More"))))},$=function(e){var t=e.event,n=e.timeFormat,a=t.meta.event_start_date&&""!==t.meta.event_start_date&&!isNaN(new Date(t.meta.event_start_date+"T00:00:00").getTime()),r=a?new Date(t.meta.event_start_date+"T00:00:00"):null,o=t.meta.event_end_date&&t.meta.event_start_date!==t.meta.event_end_date,c=o?new Date(t.meta.event_end_date+"T00:00:00"):null;return React.createElement("div",{key:"".concat(t.id,"-").concat(t.meta.event_start_date),className:"mayo-widget-event"},React.createElement("div",{className:"mayo-widget-event-date"},a?React.createElement(React.Fragment,null,o?React.createElement(React.Fragment,null,React.createElement("span",{className:"mayo-event-day-name"},m[r.getDay()]),React.createElement("span",{className:"mayo-event-day-number"},r.getDate()),React.createElement("span",{className:"mayo-event-month"},d[r.getMonth()]),React.createElement("span",{className:"mayo-event-range-separator"},"-"),React.createElement("span",{className:"mayo-event-day-name"},m[c.getDay()]),React.createElement("span",{className:"mayo-event-day-number"},c.getDate()),React.createElement("span",{className:"mayo-event-month"},d[c.getMonth()])):React.createElement(React.Fragment,null,React.createElement("span",{className:"mayo-event-day-name"},m[r.getDay()]),React.createElement("span",{className:"mayo-event-day-number"},r.getDate()),React.createElement("span",{className:"mayo-event-month"},d[r.getMonth()]))):React.createElement("span",{className:"mayo-event-date-error"},"No Date")),React.createElement("h4",{className:"mayo-widget-event-title"},t.title.rendered),!a&&React.createElement("div",{className:"mayo-event-date-warning"},"Event date not set"),p(t,n)&&React.createElement("div",{className:"mayo-widget-event-time"},p(t,n)),React.createElement("a",{href:t.link,className:"mayo-widget-event-link"},t.featured_image&&React.createElement("img",{src:t.featured_image,alt:t.title.rendered,className:"mayo-widget-event-image"})),React.createElement("div",{className:"mayo-widget-event-actions"},React.createElement("a",{href:t.link,className:"mayo-widget-event-link"},"Read More...")))},Z=function(t){var n=t.event,a=t.timeFormat,r=t.onClose,o=A().getServiceBodyName;(0,e.useEffect)(function(){var e=function(e){"Escape"===e.key&&r()};return document.addEventListener("keydown",e),document.body.style.overflow="hidden",function(){document.removeEventListener("keydown",e),document.body.style.overflow=""}},[r]);var c=n.meta.event_start_date&&""!==n.meta.event_start_date&&!isNaN(new Date(n.meta.event_start_date+"T00:00:00").getTime()),i=c?new Date(n.meta.event_start_date+"T00:00:00"):null,l=n.meta.event_end_date&&n.meta.event_start_date!==n.meta.event_end_date,s=l?new Date(n.meta.event_end_date+"T00:00:00"):null,u=n.external_source?n.external_source.id:"local";return React.createElement("div",{className:"mayo-event-modal-backdrop",onClick:function(e){e.target===e.currentTarget&&r()}},React.createElement("div",{className:"mayo-event-modal"},React.createElement("button",{className:"mayo-event-modal-close",onClick:r,title:"Close"},React.createElement("span",{className:"dashicons dashicons-no-alt"})),React.createElement("div",{className:"mayo-event-modal-header"},React.createElement("div",{className:"mayo-event-modal-date"},c?l?React.createElement("span",null,m[i.getDay()],", ",d[i.getMonth()]," ",i.getDate(),", ",i.getFullYear()," – ",m[s.getDay()],", ",d[s.getMonth()]," ",s.getDate(),", ",s.getFullYear()):React.createElement("span",null,m[i.getDay()],", ",d[i.getMonth()]," ",i.getDate(),", ",i.getFullYear()):React.createElement("span",{className:"mayo-event-date-error"},"No Date Set")),React.createElement("h2",{dangerouslySetInnerHTML:{__html:n.title.rendered}}),n.meta.event_type&&React.createElement("span",{className:"mayo-event-modal-type"},n.meta.event_type)),React.createElement("div",{className:"mayo-event-modal-body"},React.createElement("div",{className:"mayo-event-modal-meta"},React.createElement("div",{className:"mayo-event-modal-time"},React.createElement("span",{className:"dashicons dashicons-clock"}),React.createElement("span",null,p(n,a),n.meta.timezone&&" (".concat(y(n.meta.timezone),")"))),(n.meta.location_name||n.meta.location_address)&&React.createElement("div",{className:"mayo-event-modal-location"},React.createElement("span",{className:"dashicons dashicons-location"}),React.createElement("span",null,n.meta.location_name&&React.createElement("strong",null,n.meta.location_name),n.meta.location_name&&n.meta.location_address&&React.createElement("br",null),n.meta.location_address&&React.createElement(J,{address:n.meta.location_address}),n.meta.location_details&&React.createElement(React.Fragment,null,React.createElement("br",null),React.createElement("em",null,n.meta.location_details)))),n.meta.service_body&&React.createElement("div",{className:"mayo-event-modal-service-body"},React.createElement("span",{className:"dashicons dashicons-groups"}),React.createElement("span",null,o(n.meta.service_body,u))),n.external_source&&React.createElement("div",{className:"mayo-event-modal-source"},React.createElement("span",{className:"dashicons dashicons-admin-site"}),React.createElement("span",null,"Source: ",n.external_source.url))),n.content.rendered&&React.createElement("div",{className:"mayo-event-modal-description"},React.createElement("div",{dangerouslySetInnerHTML:{__html:n.content.rendered}})),n.featured_image&&React.createElement("div",{className:"mayo-event-modal-image"},React.createElement("a",{href:n.featured_image,target:"_blank",rel:"noopener noreferrer"},React.createElement("img",{src:n.featured_image,alt:n.title.rendered})),React.createElement("a",{href:n.featured_image,download:!0,className:"mayo-image-download"},React.createElement("span",{className:"dashicons dashicons-download"}),"Download Flyer")),(n.categories.length>0||n.tags.length>0)&&React.createElement("div",{className:"mayo-event-modal-taxonomies"},n.categories.map(function(e){return React.createElement("span",{key:e.id,className:"mayo-event-category"},e.name)}),n.tags.map(function(e){return React.createElement("span",{key:e.id,className:"mayo-event-tag"},e.name)})),n.meta.recurring_pattern&&"none"!==n.meta.recurring_pattern.type&&React.createElement("div",{className:"mayo-event-modal-recurring"},React.createElement("span",{className:"dashicons dashicons-update"}),React.createElement("span",null,g(n.meta.recurring_pattern)))),React.createElement("div",{className:"mayo-event-modal-footer"},React.createElement("a",{href:n.link,className:"mayo-event-modal-link"},"View Full Details",React.createElement("span",{className:"dashicons dashicons-arrow-right-alt2"})))))};function K(e){return K="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},K(e)}function X(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?X(Object(n),!0).forEach(function(t){ee(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):X(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ee(e,t,n){return(t=function(e){var t=function(e){if("object"!=K(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=K(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==K(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function te(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,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ne(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)?ne(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 ne(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 ae=function(t){for(var n,a=t.events,r=t.timeFormat,o=t.onMonthChange,c=t.loading,i=te((0,e.useState)(new Date),2),l=i[0],s=i[1],u=te((0,e.useState)(null),2),m=u[0],d=u[1],v=te((0,e.useState)(null),2),y=v[0],p=v[1],g=te((0,e.useState)({x:0,y:0}),2),b=g[0],h=g[1],E=A().getServiceBodyName,_=function(e){var t,n=["mayo-calendar-event"];if(null!==(t=e._calendarMeta)&&void 0!==t&&t.isMultiDay&&(n.push("mayo-multi-day-event"),e._calendarMeta.isFirstDay?n.push("mayo-multi-day-start"):e._calendarMeta.isLastDay?n.push("mayo-multi-day-end"):n.push("mayo-multi-day-middle")),e.categories.forEach(function(e){n.push("mayo-event-category-".concat(f(e.name).toLowerCase().replace(/\s+/g,"-")))}),e.tags.forEach(function(e){n.push("mayo-event-tag-".concat(f(e.name).toLowerCase().replace(/\s+/g,"-")))}),e.meta.event_type&&n.push("mayo-event-type-".concat(f(e.meta.event_type).toLowerCase().replace(/\s+/g,"-"))),e.meta.service_body){var a=e.external_source?e.external_source.id:"local",r=E(e.meta.service_body,a);n.push("mayo-event-service-body-".concat(f(r).toLowerCase().replace(/\s+/g,"-")))}return n.join(" ")},R=l.getFullYear(),w=l.getMonth(),S=new Date(R,w,1),N=new Date(R,w+1,0).getDate(),k=S.getDay(),O=function(e){return"".concat(e.getFullYear(),"-").concat(String(e.getMonth()+1).padStart(2,"0"),"-").concat(String(e.getDate()).padStart(2,"0"))},T=(0,e.useMemo)(function(){var e={};return a.forEach(function(t){if(t.meta.event_start_date)for(var n=new Date(t.meta.event_start_date+"T00:00:00"),a=t.meta.event_end_date?new Date(t.meta.event_end_date+"T00:00:00"):n,r=new Date(n);r<=a;){var o=O(r);e[o]||(e[o]=[]);var c=r.getTime()===n.getTime(),i=r.getTime()===a.getTime(),l=n.getTime()!==a.getTime();e[o].push(Q(Q({},t),{},{_calendarMeta:{isFirstDay:c,isLastDay:i,isMultiDay:l,displayDate:new Date(r)}})),r.setDate(r.getDate()+1)}}),Object.keys(e).forEach(function(t){e[t].sort(function(e,t){var n=e.meta.event_start_time||"00:00",a=t.meta.event_start_time||"00:00";return n.localeCompare(a)})}),e},[a]),j=function(e){if(!e)return"";var t=te(e.split(":"),2),n=t[0],a=t[1],o=parseInt(n,10);if("24hour"===r)return e;var c=o>=12?"pm":"am";return"".concat(o%12||12,":").concat(a).concat(c)},x=function(e){d(e)},C=function(e,t){var n=t.currentTarget.getBoundingClientRect();h({x:n.left+window.scrollX,y:n.bottom+window.scrollY+4}),p(e)},P=function(){p(null)},D=[],F=0;F<k;F++)D.push(React.createElement("div",{key:"empty-".concat(F),className:"mayo-calendar-day empty"}));for(var I=1;I<=N;I++){var M="".concat(R,"-").concat(String(w+1).padStart(2,"0"),"-").concat(String(I).padStart(2,"0")),L=T[M]||[],G=(new Date).toDateString()===new Date(R,w,I).toDateString();D.push(React.createElement("div",{key:M,className:"mayo-calendar-day ".concat(G?"today":""," ").concat(L.length>0?"has-events":"")},React.createElement("span",{className:"mayo-calendar-date"},I),React.createElement("div",{className:"mayo-calendar-events"},L.map(function(e,t){var n,a;return React.createElement("div",{key:"".concat(e.id,"-").concat(t),className:_(e),onClick:function(){return x(e)},onMouseEnter:function(t){return C(e,t)},onMouseLeave:P},e.meta.event_start_time&&(!(null!==(n=e._calendarMeta)&&void 0!==n&&n.isMultiDay)||(null===(a=e._calendarMeta)||void 0===a?void 0:a.isFirstDay))&&React.createElement("span",{className:"event-time"},j(e.meta.event_start_time)),React.createElement("span",{className:"event-title",dangerouslySetInnerHTML:{__html:e.title.rendered}}))}))))}return React.createElement(React.Fragment,null,React.createElement("div",{className:"mayo-calendar"},React.createElement("div",{className:"mayo-calendar-header"},React.createElement("button",{onClick:function(){var e=new Date(R,w-1,1);s(e),o&&o(e)},title:"Previous Month"},React.createElement("span",{className:"dashicons dashicons-arrow-left-alt2"})),React.createElement("h2",null,["January","February","March","April","May","June","July","August","September","October","November","December"][w]," ",R),React.createElement("div",{className:"mayo-calendar-header-right"},React.createElement("button",{onClick:function(){var e=new Date;s(e),o&&o(e)},className:"mayo-calendar-today-button",title:"Go to Today"},"Today"),React.createElement("button",{onClick:function(){var e=new Date(R,w+1,1);s(e),o&&o(e)},title:"Next Month"},React.createElement("span",{className:"dashicons dashicons-arrow-right-alt2"})))),React.createElement("div",{className:"mayo-calendar-grid".concat(c?" loading":"")},React.createElement("div",{className:"mayo-calendar-weekdays"},["Sun","Mon","Tue","Wed","Thu","Fri","Sat"].map(function(e){return React.createElement("div",{key:e,className:"mayo-calendar-weekday"},e)})),React.createElement("div",{className:"mayo-calendar-days"},D),c&&React.createElement("div",{className:"mayo-calendar-loading"},React.createElement("span",null,"Loading events...")))),m&&React.createElement(Z,{event:m,timeFormat:r,onClose:function(){d(null)}}),y&&React.createElement("div",{className:"mayo-calendar-tooltip",style:{position:"absolute",left:b.x,top:b.y}},(n=function(e){var t,n,a={title:(t=e.title.rendered.replace(/<[^>]*>/g,""),n=document.createElement("textarea"),n.innerHTML=t,n.value),time:null,location:null,eventType:null,serviceBody:null};if(e.meta.event_start_time&&(a.time=j(e.meta.event_start_time),e.meta.event_end_time&&(a.time+=" - "+j(e.meta.event_end_time))),e.meta.location_name&&(a.location=e.meta.location_name),e.meta.event_type&&(a.eventType=e.meta.event_type),e.meta.service_body){var r=e.external_source?e.external_source.id:"local",o=E(e.meta.service_body,r);o&&o!==e.meta.service_body&&(a.serviceBody=o)}return a}(y),React.createElement(React.Fragment,null,React.createElement("div",{className:"mayo-tooltip-title"},n.title),n.time&&React.createElement("div",{className:"mayo-tooltip-row"},React.createElement("span",{className:"dashicons dashicons-clock"}),n.time),n.location&&React.createElement("div",{className:"mayo-tooltip-row"},React.createElement("span",{className:"dashicons dashicons-location"}),n.location),n.eventType&&React.createElement("div",{className:"mayo-tooltip-row"},React.createElement("span",{className:"dashicons dashicons-tag"}),n.eventType),n.serviceBody&&React.createElement("div",{className:"mayo-tooltip-row"},React.createElement("span",{className:"dashicons dashicons-groups"}),n.serviceBody)))))};function re(e){return re="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},re(e)}function oe(e){return function(e){if(Array.isArray(e))return ye(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||ve(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 ce(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 ie(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ce(Object(n),!0).forEach(function(t){le(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ce(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function le(e,t,n){return(t=function(e){var t=function(e){if("object"!=re(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=re(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==re(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function se(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",r=n.toStringTag||"@@toStringTag";function o(n,a,r,o){var l=a&&a.prototype instanceof i?a:i,s=Object.create(l.prototype);return ue(s,"_invoke",function(n,a,r){var o,i,l,s=0,u=r||[],m=!1,d={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,i=0,l=e,d.n=n,c}};function f(n,a){for(i=n,l=a,t=0;!m&&s&&!r&&t<u.length;t++){var r,o=u[t],f=d.p,v=o[2];n>3?(r=v===a)&&(l=o[(i=o[4])?5:(i=3,3)],o[4]=o[5]=e):o[0]<=f&&((r=n<2&&f<o[1])?(i=0,d.v=a,d.n=o[1]):f<v&&(r=n<3||o[0]>a||a>v)&&(o[4]=n,o[5]=a,d.n=v,i=0))}if(r||n>1)return c;throw m=!0,a}return function(r,u,v){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&f(u,v),i=u,l=v;(t=i<2?e:l)||!m;){o||(i?i<3?(i>1&&(d.n=-1),f(i,l)):d.n=l:d.v=l);try{if(s=2,o){if(i||(r="next"),t=o[r]){if(!(t=t.call(o,l)))throw TypeError("iterator result is not an object");if(!t.done)return t;l=t.value,i<2&&(i=0)}else 1===i&&(t=o.return)&&t.call(o),i<2&&(l=TypeError("The iterator does not provide a '"+r+"' method"),i=1);o=e}else if((t=(m=d.n<0)?l:n.call(a,d))!==c)break}catch(t){o=e,i=1,l=t}finally{s=1}}return{value:t,done:m}}}(n,r,o),!0),s}var c={};function i(){}function l(){}function s(){}t=Object.getPrototypeOf;var u=[][a]?t(t([][a]())):(ue(t={},a,function(){return this}),t),m=s.prototype=i.prototype=Object.create(u);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,ue(e,r,"GeneratorFunction")),e.prototype=Object.create(m),e}return l.prototype=s,ue(m,"constructor",s),ue(s,"constructor",l),l.displayName="GeneratorFunction",ue(s,r,"GeneratorFunction"),ue(m),ue(m,r,"Generator"),ue(m,a,function(){return this}),ue(m,"toString",function(){return"[object Generator]"}),(se=function(){return{w:o,m:d}})()}function ue(e,t,n,a){var r=Object.defineProperty;try{r({},"",{})}catch(e){r=0}ue=function(e,t,n,a){function o(t,n){ue(e,t,function(e){return this._invoke(t,n,e)})}t?r?r(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},ue(e,t,n,a)}function me(e,t,n,a,r,o,c){try{var i=e[o](c),l=i.value}catch(e){return void n(e)}i.done?t(l):Promise.resolve(l).then(a,r)}function de(e){return function(){var t=this,n=arguments;return new Promise(function(a,r){var o=e.apply(t,n);function c(e){me(o,a,r,c,i,"next",e)}function i(e){me(o,a,r,c,i,"throw",e)}c(void 0)})}}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,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(e,t)||ve(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 ve(e,t){if(e){if("string"==typeof e)return ye(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)?ye(e,t):void 0}}function ye(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 pe=function(t){var n=t.widget,a=void 0!==n&&n,r=t.settings,o=void 0===r?{}:r,c=(0,e.useRef)(null),i=(0,e.useRef)(null),l=(0,e.useRef)(null),s=fe((0,e.useState)(!0),2),u=s[0],m=s[1],d=fe((0,e.useState)(null),2),f=d[0],v=d[1],y=fe((0,e.useState)([]),2),p=y[0],g=y[1],h=fe((0,e.useState)(1),2),E=h[0],_=h[1],R=fe((0,e.useState)("12hour"),2),w=R[0],S=R[1],N=fe((0,e.useState)(!1),2),k=N[0],O=N[1],T=fe((0,e.useState)(!0),2),j=T[0],x=T[1],P=fe((0,e.useState)(1),2),D=P[0],F=P[1],I=fe((0,e.useState)(!1),2),M=I[0],L=I[1],G=fe((0,e.useState)(new Set),2),B=(G[0],G[1]),U=fe((0,e.useState)(!1),2),W=(U[0],U[1],fe((0,e.useState)(!1),2)),z=(W[0],W[1],fe((0,e.useState)(!0),2)),q=(z[0],z[1],fe((0,e.useState)(!1),2)),H=q[0],J=q[1],Y=fe((0,e.useState)(!1),2),Z=Y[0],K=Y[1],X=fe((0,e.useState)((null==o?void 0:o.defaultView)||"list"),2),Q=X[0],ee=X[1],te=fe((0,e.useState)(new Date),2),ne=te[0],re=te[1],ce=fe((0,e.useState)([]),2),le=ce[0],ue=ce[1],me=fe((0,e.useState)(!1),2),ve=me[0],ye=me[1],pe=A().updateExternalServiceBodies,ge=C();(0,e.useEffect)(function(){O(a),S((null==o?void 0:o.timeFormat)||"12hour"),_(1),g([]),m(!0),v(null),x(!0),F(1),we(1)},[o,a]),(0,e.useEffect)(function(){var e=he("autoexpand"),t=null!==e?"true"===e:(null==o?void 0:o.autoexpand)||!1;J(t)},[null==o?void 0:o.autoexpand]),(0,e.useEffect)(function(){var e=he("view"),t=null!==e?e:(null==o?void 0:o.defaultView)||"list";"calendar"!==t&&"list"!==t||ee(t)},[null==o?void 0:o.defaultView]),(0,e.useEffect)(function(){H&&p.length>0&&(L(!0),B(new Set(p.map(function(e){return e.id}))))},[H,p]);var be=(0,e.useCallback)(function(e){e.length&&null!=o&&o.sourceIds&&(l.current&&clearTimeout(l.current),l.current=setTimeout(function(){var t=new Map;e.forEach(function(e){if(e.external_source&&e.external_source.service_bodies){var n=e.external_source.id,a=e.external_source.service_bodies;o.sourceIds.includes(n)&&t.set(n,a)}}),t.forEach(function(e,t){pe(t,e)})},300))},[null==o?void 0:o.sourceIds,pe]);(0,e.useEffect)(function(){p.length>0&&be(p)},[p,be]),(0,e.useEffect)(function(){if(null!=o&&o.infiniteScroll&&i.current&&j){var e=new IntersectionObserver(function(e){e[0].isIntersecting&&j&&!u&&E<D&&we(E+1)},{threshold:1});return e.observe(i.current),function(){i.current&&e.unobserve(i.current)}}},[j,u,E,D,null==o?void 0:o.infiniteScroll]);var he=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=new URLSearchParams(window.location.search);return n.has(e)?n.get(e):t},Ee=function(){var e,t=[],n={timeFormat:(null==o?void 0:o.timeFormat)||"12hour",perPage:(null==o?void 0:o.perPage)||10,infiniteScroll:null===(e=null==o?void 0:o.infiniteScroll)||void 0===e||e,autoexpand:(null==o?void 0:o.autoexpand)||!1,categories:(null==o?void 0:o.categories)||"",categoryRelation:(null==o?void 0:o.categoryRelation)||"OR",tags:(null==o?void 0:o.tags)||"",eventType:(null==o?void 0:o.eventType)||"",status:(null==o?void 0:o.status)||"publish",serviceBody:(null==o?void 0:o.serviceBody)||"",sourceIds:(null==o?void 0:o.sourceIds)||""};return"12hour"!==n.timeFormat&&t.push('time_format="'.concat(n.timeFormat,'"')),10!==n.perPage&&t.push('per_page="'.concat(n.perPage,'"')),!0!==n.infiniteScroll&&t.push('infinite_scroll="'.concat(n.infiniteScroll?"true":"false",'"')),!1!==n.autoexpand&&t.push('autoexpand="'.concat(n.autoexpand?"true":"false",'"')),n.categories&&t.push('categories="'.concat(n.categories,'"')),"OR"!==n.categoryRelation&&t.push('category_relation="'.concat(n.categoryRelation,'"')),n.tags&&t.push('tags="'.concat(n.tags,'"')),n.eventType&&t.push('event_type="'.concat(n.eventType,'"')),"publish"!==n.status&&t.push('status="'.concat(n.status,'"')),n.serviceBody&&t.push('service_body="'.concat(n.serviceBody,'"')),n.sourceIds&&t.push('source_ids="'.concat(n.sourceIds,'"')),t.length>0?"[mayo_event_list ".concat(t.join(" "),"]"):"[mayo_event_list]"},_e=function(){var e=de(se().m(function e(){var t,n,a;return se().w(function(e){for(;;)switch(e.p=e.n){case 0:return t=Ee(),e.p=1,e.n=2,navigator.clipboard.writeText(t);case 2:console.log("Shortcode copied to clipboard:",t),e.n=4;break;case 3:e.p=3,a=e.v,console.error("Failed to copy shortcode:",a),(n=document.createElement("textarea")).value=t,document.body.appendChild(n),n.focus(),n.select();try{document.execCommand("copy"),console.log("Shortcode copied to clipboard (fallback):",t)}catch(e){console.error("Fallback copy failed:",e)}document.body.removeChild(n);case 4:return e.a(2)}},e,null,[[1,3]])}));return function(){return e.apply(this,arguments)}}(),Re=function(e){var t=[],n=[];return e.forEach(function(e){var a=e.meta.event_start_date&&""!==e.meta.event_start_date&&!isNaN(new Date(e.meta.event_start_date).getTime()),r=ie(ie({},e),{},{hasValidDate:a,isInvalid:!a});a?t.push(r):n.push(r)}),[].concat(t,n)},we=function(){var e=de(se().m(function e(){var t,n,a,r,c,i,l,s,u,d,f,y,p,h,E,R,w,S,N,k,O=arguments;return se().w(function(e){for(;;)switch(e.p=e.n){case 0:return t=O.length>0&&void 0!==O[0]?O[0]:1,m(!0),e.p=1,a=null!==he("status")?he("status"):(null==o?void 0:o.status)||"publish",r=null!==he("event_type")?he("event_type"):(null==o?void 0:o.eventType)||"",c=null!==he("service_body")?he("service_body"):(null==o?void 0:o.serviceBody)||"",i=null!==he("relation")?he("relation"):(null==o?void 0:o.relation)||"AND",l=null!==he("categories")?he("categories"):(null==o?void 0:o.categories)||"",s=null!==he("category_relation")?he("category_relation"):(null==o?void 0:o.categoryRelation)||"OR",u=null!==he("tags")?he("tags"):(null==o?void 0:o.tags)||"",d=null!==he("source_ids")?he("source_ids"):(null==o?void 0:o.sourceIds)||"",f=null!==he("archive")?he("archive"):null!=o&&o.showArchived?"true":"false",y=null!==he("infinite_scroll")?"true"===he("infinite_scroll"):null===(n=null==o?void 0:o.infiniteScroll)||void 0===n||n,p=null!==he("per_page")?parseInt(he("per_page")):(null==o?void 0:o.perPage)||10,h=null!==he("order")?he("order"):(null==o?void 0:o.order)||"ASC",E="/events?status=".concat(a)+"&event_type=".concat(r)+"&service_body=".concat(c)+"&relation=".concat(i)+"&categories=".concat(l)+"&category_relation=".concat(s)+"&tags=".concat(u)+"&source_ids=".concat(d)+"&page=".concat(t)+"&per_page=".concat(p)+"&timezone=".concat(encodeURIComponent(ge))+"&archive=".concat(f)+"&order=".concat(h),e.n=2,b(E);case 2:R=e.v,w=Array.isArray(R)?R:R.events||[],S=R.pagination||{current_page:1,total_pages:Math.ceil(w.length/((null==o?void 0:o.perPage)||10))},N=Re(w),_(S.current_page),F(S.total_pages),x(S.current_page<S.total_pages),g(t>1&&y?function(e){return[].concat(oe(e),oe(N))}:N),m(!1),e.n=4;break;case 3:e.p=3,k=e.v,console.error("Error in fetchEvents:",k),v("Failed to load events: ".concat(k.message)),m(!1),x(!1);case 4:return e.a(2)}},e,null,[[1,3]])}));return function(){return e.apply(this,arguments)}}(),Se=function(){var e=de(se().m(function e(t,n){var a,r,c,i,l,s,u,m,d,f,v,y,p,g,h,E,_;return se().w(function(e){for(;;)switch(e.p=e.n){case 0:return ye(!0),e.p=1,a=null!==he("status")?he("status"):(null==o?void 0:o.status)||"publish",r=null!==he("event_type")?he("event_type"):(null==o?void 0:o.eventType)||"",c=null!==he("service_body")?he("service_body"):(null==o?void 0:o.serviceBody)||"",i=null!==he("relation")?he("relation"):(null==o?void 0:o.relation)||"AND",l=null!==he("categories")?he("categories"):(null==o?void 0:o.categories)||"",s=null!==he("category_relation")?he("category_relation"):(null==o?void 0:o.categoryRelation)||"OR",u=null!==he("tags")?he("tags"):(null==o?void 0:o.tags)||"",m=null!==he("source_ids")?he("source_ids"):(null==o?void 0:o.sourceIds)||"",d=null!==he("order")?he("order"):(null==o?void 0:o.order)||"ASC",f="".concat(t,"-").concat(String(n+1).padStart(2,"0"),"-01"),v=new Date(t,n+1,0).getDate(),y="".concat(t,"-").concat(String(n+1).padStart(2,"0"),"-").concat(String(v).padStart(2,"0")),p="/events?status=".concat(a)+"&event_type=".concat(r)+"&service_body=".concat(c)+"&relation=".concat(i)+"&categories=".concat(l)+"&category_relation=".concat(s)+"&tags=".concat(u)+"&source_ids=".concat(m)+"&timezone=".concat(encodeURIComponent(ge))+"&order=".concat(d)+"&start_date=".concat(f)+"&end_date=".concat(y)+"&per_page=100",e.n=2,b(p);case 2:g=e.v,h=Array.isArray(g)?g:g.events||[],E=Re(h),ue(E),ye(!1),e.n=4;break;case 3:e.p=3,_=e.v,console.error("Error in fetchCalendarEvents:",_),ye(!1);case 4:return e.a(2)}},e,null,[[1,3]])}));return function(t,n){return e.apply(this,arguments)}}();return(0,e.useEffect)(function(){"calendar"!==Q||k||Se(ne.getFullYear(),ne.getMonth())},[Q]),u&&0===p.length?React.createElement("div",null,"Loading events..."):f&&0===p.length?React.createElement("div",{className:"mayo-error"},f):p.length?React.createElement("div",{className:"mayo-event-list".concat("calendar"===Q?" mayo-calendar-view":""),ref:c},k?React.createElement("div",{className:"mayo-widget-events"},p.map(function(e){return React.createElement($,{key:"".concat(e.id,"-").concat(e.meta.event_start_date),event:e,timeFormat:w})})):React.createElement(React.Fragment,null,React.createElement("div",{className:"mayo-event-list-header"},React.createElement("div",{className:"mayo-view-toggle"},React.createElement("button",{className:"mayo-view-toggle-button ".concat("list"===Q?"active":""),onClick:function(){return ee("list")},title:"List View"},React.createElement("span",{className:"dashicons dashicons-list-view"})),React.createElement("button",{className:"mayo-view-toggle-button ".concat("calendar"===Q?"active":""),onClick:function(){return ee("calendar")},title:"Calendar View"},React.createElement("span",{className:"dashicons dashicons-calendar-alt"}))),React.createElement("div",{className:"mayo-event-list-actions"},"list"===Q&&React.createElement("button",{className:"mayo-expand-all-button",onClick:function(){return L(!M)},title:M?"Collapse All":"Expand All"},React.createElement("span",{className:"dashicons ".concat(M?"dashicons-arrow-up-alt2":"dashicons-arrow-down-alt2")})),React.createElement("button",{className:"mayo-print-button",onClick:function(){var e=window.open("","_blank"),t=document.title,n="\n <!DOCTYPE html>\n <html>\n <head>\n <title>".concat(t,' - Print View</title>\n <style>\n body {\n font-family: Arial, sans-serif;\n line-height: 1.6;\n color: #333;\n max-width: 800px;\n margin: 0 auto;\n padding: 20px;\n }\n .mayo-print-header {\n text-align: center;\n margin-bottom: 30px;\n padding-bottom: 20px;\n border-bottom: 2px solid #eee;\n }\n .mayo-print-event {\n margin-bottom: 30px;\n padding-bottom: 20px;\n border-bottom: 1px solid #eee;\n }\n .mayo-print-event:last-child {\n border-bottom: none;\n }\n .mayo-print-event-title {\n font-size: 1.4em;\n margin: 0 0 10px 0;\n color: #0073aa;\n }\n .mayo-print-event-meta {\n margin-bottom: 15px;\n color: #666;\n }\n .mayo-print-event-description {\n margin-top: 15px;\n }\n .mayo-print-event-taxonomies {\n margin-top: 15px;\n }\n .mayo-print-event-taxonomy {\n display: inline-block;\n padding: 3px 8px;\n margin: 0 5px 5px 0;\n border-radius: 3px;\n font-size: 0.9em;\n }\n .mayo-print-event-category {\n background: #e9ecef;\n color: #495057;\n }\n .mayo-print-event-tag {\n background: #e5f5e8;\n color: #1fa23d;\n }\n @media print {\n body {\n padding: 0;\n }\n .mayo-print-header {\n margin-bottom: 20px;\n }\n .mayo-print-event {\n page-break-inside: avoid;\n }\n }\n </style>\n </head>\n <body>\n <div class="mayo-print-header">\n <h1>').concat(t,"</h1>\n <p>Printed on ").concat((new Date).toLocaleString(),"</p>\n </div>\n ").concat(p.map(function(e){return'\n <div class="mayo-print-event">\n <h2 class="mayo-print-event-title">'.concat(e.title.rendered,'</h2>\n <div class="mayo-print-event-meta">\n <p><strong>Date:</strong> ').concat(e.meta.event_start_date).concat(e.meta.event_start_time?" at ".concat(e.meta.event_start_time):"","</p>\n ").concat(e.meta.event_type?"<p><strong>Type:</strong> ".concat(e.meta.event_type,"</p>"):"","\n ").concat(e.meta.location_name?"<p><strong>Location:</strong> ".concat(e.meta.location_name,"</p>"):"",'\n </div>\n <div class="mayo-print-event-description">\n ').concat(e.content.rendered,"\n </div>\n ").concat(e.categories.length>0||e.tags.length>0?'\n <div class="mayo-print-event-taxonomies">\n '.concat(e.categories.map(function(e){return'\n <span class="mayo-print-event-taxonomy mayo-print-event-category">'.concat(e.name,"</span>\n ")}).join(""),"\n ").concat(e.tags.map(function(e){return'\n <span class="mayo-print-event-taxonomy mayo-print-event-tag">'.concat(e.name,"</span>\n ")}).join(""),"\n </div>\n "):"","\n </div>\n ")}).join(""),"\n </body>\n </html>\n ");e.document.write(n),e.document.close(),e.onload=function(){e.print()}},title:"Print Events"},React.createElement("span",{className:"dashicons dashicons-printer"})),React.createElement("a",{href:function(){var e=new URLSearchParams;e.append("feed","mayo_events");var t=null!==he("event_type")?he("event_type"):(null==o?void 0:o.eventType)||"",n=null!==he("service_body")?he("service_body"):(null==o?void 0:o.serviceBody)||"",a=null!==he("relation")?he("relation"):(null==o?void 0:o.relation)||"AND",r=null!==he("categories")?he("categories"):(null==o?void 0:o.categories)||"",c=null!==he("category_relation")?he("category_relation"):(null==o?void 0:o.categoryRelation)||"OR",i=null!==he("tags")?he("tags"):(null==o?void 0:o.tags)||"";t&&e.append("event_type",t),n&&e.append("service_body",n),"AND"!==a&&e.append("relation",a),r&&e.append("categories",r),"OR"!==c&&e.append("category_relation",c),i&&e.append("tags",i);var l=e.toString();return"".concat(window.location.origin).concat(window.location.pathname).concat(l?"?"+l:"")}(),className:"mayo-rss-link",target:"_blank",rel:"noopener noreferrer",title:"Calendar Feed (ICS)"},React.createElement("span",{className:"dashicons dashicons-calendar"})),React.createElement("a",{href:"".concat(window.location.pathname,"?feed=mayo_rss"),className:"mayo-rss-link",target:"_blank",rel:"noopener noreferrer",title:"RSS Feed"},React.createElement("span",{className:"dashicons dashicons-rss"})),React.createElement("button",{className:"mayo-shortcode-button",onClick:function(){return K(!Z)},title:Z?"Hide Shortcode":"Show Shortcode"},React.createElement("span",{className:"dashicons dashicons-editor-code"})))),Z&&React.createElement("div",{className:"mayo-shortcode-display"},React.createElement("div",{className:"mayo-shortcode-header"},React.createElement("strong",null,"Shortcode for this event list:"),React.createElement("button",{className:"mayo-copy-shortcode",onClick:_e,title:"Copy to Clipboard"},React.createElement("span",{className:"dashicons dashicons-clipboard"}),"Copy")),React.createElement("div",{className:"mayo-shortcode-text"},React.createElement("code",null,Ee()))),"calendar"===Q?React.createElement(ae,{events:le,timeFormat:w,onMonthChange:function(e){re(e),Se(e.getFullYear(),e.getMonth())},loading:ve}):React.createElement("div",{className:"mayo-event-cards"},p.map(function(e){return React.createElement(V,{key:"".concat(e.id,"-").concat(e.meta.event_start_date),event:e,timeFormat:w,forceExpanded:M})}),null!==he("infinite_scroll")?"true"===he("infinite_scroll")&&j&&React.createElement("div",{ref:i,className:"mayo-infinite-loader"},u&&React.createElement("div",{className:"mayo-loader"},"Loading more events...")):(null==o?void 0:o.infiniteScroll)&&j&&React.createElement("div",{ref:i,className:"mayo-infinite-loader"},u&&React.createElement("div",{className:"mayo-loader"},"Loading more events..."))))):null!=o&&o.showArchived?React.createElement("div",{className:"mayo-no-events"},"No events found in the archive."):React.createElement("div",{className:"mayo-no-events"},"No upcoming events found.",React.createElement("a",{href:"".concat(window.location.pathname,"?archive=true"),className:"mayo-archive-link"},"View past events"))};function ge(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",r=n.toStringTag||"@@toStringTag";function o(n,a,r,o){var l=a&&a.prototype instanceof i?a:i,s=Object.create(l.prototype);return be(s,"_invoke",function(n,a,r){var o,i,l,s=0,u=r||[],m=!1,d={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,i=0,l=e,d.n=n,c}};function f(n,a){for(i=n,l=a,t=0;!m&&s&&!r&&t<u.length;t++){var r,o=u[t],f=d.p,v=o[2];n>3?(r=v===a)&&(l=o[(i=o[4])?5:(i=3,3)],o[4]=o[5]=e):o[0]<=f&&((r=n<2&&f<o[1])?(i=0,d.v=a,d.n=o[1]):f<v&&(r=n<3||o[0]>a||a>v)&&(o[4]=n,o[5]=a,d.n=v,i=0))}if(r||n>1)return c;throw m=!0,a}return function(r,u,v){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&f(u,v),i=u,l=v;(t=i<2?e:l)||!m;){o||(i?i<3?(i>1&&(d.n=-1),f(i,l)):d.n=l:d.v=l);try{if(s=2,o){if(i||(r="next"),t=o[r]){if(!(t=t.call(o,l)))throw TypeError("iterator result is not an object");if(!t.done)return t;l=t.value,i<2&&(i=0)}else 1===i&&(t=o.return)&&t.call(o),i<2&&(l=TypeError("The iterator does not provide a '"+r+"' method"),i=1);o=e}else if((t=(m=d.n<0)?l:n.call(a,d))!==c)break}catch(t){o=e,i=1,l=t}finally{s=1}}return{value:t,done:m}}}(n,r,o),!0),s}var c={};function i(){}function l(){}function s(){}t=Object.getPrototypeOf;var u=[][a]?t(t([][a]())):(be(t={},a,function(){return this}),t),m=s.prototype=i.prototype=Object.create(u);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,be(e,r,"GeneratorFunction")),e.prototype=Object.create(m),e}return l.prototype=s,be(m,"constructor",s),be(s,"constructor",l),l.displayName="GeneratorFunction",be(s,r,"GeneratorFunction"),be(m),be(m,r,"Generator"),be(m,a,function(){return this}),be(m,"toString",function(){return"[object Generator]"}),(ge=function(){return{w:o,m:d}})()}function be(e,t,n,a){var r=Object.defineProperty;try{r({},"",{})}catch(e){r=0}be=function(e,t,n,a){function o(t,n){be(e,t,function(e){return this._invoke(t,n,e)})}t?r?r(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},be(e,t,n,a)}function he(e,t,n,a,r,o,c){try{var i=e[o](c),l=i.value}catch(e){return void n(e)}i.done?t(l):Promise.resolve(l).then(a,r)}function Ee(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,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return _e(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(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 _e(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 Re=function(){var t=Ee((0,e.useState)([]),2),n=t[0],a=t[1],r=Ee((0,e.useState)(!0),2),o=r[0],c=r[1],i=Ee((0,e.useState)(null),2),l=i[0],s=i[1],u=A().getServiceBodyName;return(0,e.useEffect)(function(){var e=function(){var e,t=(e=ge().m(function e(){var t,n;return ge().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,b("/events?archive=true");case 1:(t=e.v)&&Array.isArray(t)?a(t):t&&t.events&&Array.isArray(t.events)?a(t.events):(console.warn("Unexpected API response format:",t),a([])),e.n=3;break;case 2:e.p=2,n=e.v,console.error("Error fetching events:",n),s("Failed to load events"),a([]);case 3:return e.p=3,c(!1),e.f(3);case 4:return e.a(2)}},e,null,[[0,2,3,4]])}),function(){var t=this,n=arguments;return new Promise(function(a,r){var o=e.apply(t,n);function c(e){he(o,a,r,c,i,"next",e)}function i(e){he(o,a,r,c,i,"throw",e)}c(void 0)})});return function(){return t.apply(this,arguments)}}();e()},[]),o?React.createElement("div",null,"Loading events..."):l?React.createElement("div",{className:"mayo-error"},l):n.length?React.createElement("div",{className:"mayo-archive-container"},React.createElement("div",{className:"mayo-archive-content"},React.createElement("header",{className:"mayo-archive-header"},React.createElement("h1",{className:"mayo-archive-title"},"Events")),React.createElement("div",{className:"mayo-archive-events"},n.map(function(e){var t,n;return React.createElement("article",{key:e.id,className:"mayo-archive-event"},React.createElement("div",{className:"mayo-archive-event-content"},e.featured_image&&React.createElement("div",{className:"mayo-archive-event-image"},React.createElement("a",{href:e.featured_image,target:"_blank",rel:"noopener noreferrer"},React.createElement("img",{src:e.featured_image,alt:e.title.rendered}))),React.createElement("div",{className:"mayo-archive-event-details"},React.createElement("h2",{className:"mayo-archive-event-title"},React.createElement("a",{href:e.link,dangerouslySetInnerHTML:{__html:e.title.rendered}})),React.createElement("div",{className:"mayo-archive-event-meta"},e.meta.event_type&&React.createElement("div",{className:"mayo-archive-event-type"},React.createElement("strong",null,"Type:")," ",e.meta.event_type),React.createElement("div",{className:"mayo-archive-event-datetime"},React.createElement("strong",null,"When:")," ",e.meta.event_start_date,e.meta.event_start_time&&" at ".concat(e.meta.event_start_time),(e.meta.event_end_date||e.meta.event_end_time)&&" - ",e.meta.event_end_date,e.meta.event_end_time&&" at ".concat(e.meta.event_end_time),e.meta.timezone&&" (".concat(y(e.meta.timezone),")")),(e.meta.location_name||e.meta.location_address)&&React.createElement("div",{className:"mayo-archive-event-location"},React.createElement("strong",null,"Where:")," ",e.meta.location_name,e.meta.location_name&&e.meta.location_address&&", ",e.meta.location_address),(null===(t=e.categories)||void 0===t?void 0:t.length)>0&&React.createElement("div",{className:"mayo-archive-event-categories"},e.categories.map(function(e){return React.createElement("span",{key:e.id,className:"mayo-event-category"},e.name)})),(null===(n=e.tags)||void 0===n?void 0:n.length)>0&&React.createElement("div",{className:"mayo-archive-event-tags"},e.tags.map(function(e){return React.createElement("span",{key:e.id,className:"mayo-event-tag"},e.name)}))),React.createElement("div",{className:"mayo-archive-event-excerpt",dangerouslySetInnerHTML:{__html:e.content.rendered}}),e.meta.service_body&&React.createElement("p",null,React.createElement("strong",null,"Service Body:")," ",u(e.meta.service_body)),React.createElement("a",{href:e.link,className:"mayo-archive-event-link"},"View Event Details"))))})))):React.createElement("div",{className:"mayo-no-events"},"No archived events found.")};function we(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",r=n.toStringTag||"@@toStringTag";function o(n,a,r,o){var l=a&&a.prototype instanceof i?a:i,s=Object.create(l.prototype);return Se(s,"_invoke",function(n,a,r){var o,i,l,s=0,u=r||[],m=!1,d={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,i=0,l=e,d.n=n,c}};function f(n,a){for(i=n,l=a,t=0;!m&&s&&!r&&t<u.length;t++){var r,o=u[t],f=d.p,v=o[2];n>3?(r=v===a)&&(l=o[(i=o[4])?5:(i=3,3)],o[4]=o[5]=e):o[0]<=f&&((r=n<2&&f<o[1])?(i=0,d.v=a,d.n=o[1]):f<v&&(r=n<3||o[0]>a||a>v)&&(o[4]=n,o[5]=a,d.n=v,i=0))}if(r||n>1)return c;throw m=!0,a}return function(r,u,v){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&f(u,v),i=u,l=v;(t=i<2?e:l)||!m;){o||(i?i<3?(i>1&&(d.n=-1),f(i,l)):d.n=l:d.v=l);try{if(s=2,o){if(i||(r="next"),t=o[r]){if(!(t=t.call(o,l)))throw TypeError("iterator result is not an object");if(!t.done)return t;l=t.value,i<2&&(i=0)}else 1===i&&(t=o.return)&&t.call(o),i<2&&(l=TypeError("The iterator does not provide a '"+r+"' method"),i=1);o=e}else if((t=(m=d.n<0)?l:n.call(a,d))!==c)break}catch(t){o=e,i=1,l=t}finally{s=1}}return{value:t,done:m}}}(n,r,o),!0),s}var c={};function i(){}function l(){}function s(){}t=Object.getPrototypeOf;var u=[][a]?t(t([][a]())):(Se(t={},a,function(){return this}),t),m=s.prototype=i.prototype=Object.create(u);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,Se(e,r,"GeneratorFunction")),e.prototype=Object.create(m),e}return l.prototype=s,Se(m,"constructor",s),Se(s,"constructor",l),l.displayName="GeneratorFunction",Se(s,r,"GeneratorFunction"),Se(m),Se(m,r,"Generator"),Se(m,a,function(){return this}),Se(m,"toString",function(){return"[object Generator]"}),(we=function(){return{w:o,m:d}})()}function Se(e,t,n,a){var r=Object.defineProperty;try{r({},"",{})}catch(e){r=0}Se=function(e,t,n,a){function o(t,n){Se(e,t,function(e){return this._invoke(t,n,e)})}t?r?r(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},Se(e,t,n,a)}function Ne(e,t,n,a,r,o,c){try{var i=e[o](c),l=i.value}catch(e){return void n(e)}i.done?t(l):Promise.resolve(l).then(a,r)}function ke(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,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(e,t)||function(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}}(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 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}const Te=function(){var t,n,a=ke((0,e.useState)(null),2),r=a[0],o=a[1],c=ke((0,e.useState)(!0),2),i=c[0],l=c[1],s=ke((0,e.useState)(null),2),u=s[0],m=s[1],d=ke((0,e.useState)([]),2),f=d[0],p=d[1],h=A().getServiceBodyName;if((0,e.useEffect)(function(){var e=function(){var e,t=(e=we().m(function e(){var t,n,a,r;return we().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,t=window.location.pathname.split("/"),n=t[t.length-2],e.n=1,b("/event/".concat(n));case 1:if(!(a=e.v)){e.n=2;break}o(a),a.linked_announcements&&p(a.linked_announcements),e.n=3;break;case 2:throw new Error("Event not found");case 3:e.n=5;break;case 4:e.p=4,r=e.v,console.error("Error fetching event:",r),m("Failed to load event details");case 5:return e.p=5,l(!1),e.f(5);case 6:return e.a(2)}},e,null,[[0,4,5,6]])}),function(){var t=this,n=arguments;return new Promise(function(a,r){var o=e.apply(t,n);function c(e){Ne(o,a,r,c,i,"next",e)}function i(e){Ne(o,a,r,c,i,"throw",e)}c(void 0)})});return function(){return t.apply(this,arguments)}}();e()},[]),i)return React.createElement("div",null,"Loading event details...");if(u)return React.createElement("div",{className:"mayo-error"},u);if(!r)return React.createElement("div",null,"Event not found");var E=r.title,_=r.content,R=r.meta,w=R.event_type,S=(R.event_start_date,R.event_end_date,R.event_start_time,R.event_end_time,R.timezone,R.location_name),N=R.location_address,k=R.location_details,O=R.recurring_pattern,T=R.service_body;return React.createElement("div",{className:"mayo-single-container"},React.createElement("article",{className:"mayo-single-event"},React.createElement("div",{className:"mayo-single-event-content"},React.createElement("header",{className:"mayo-single-event-header"},React.createElement("h1",{className:"mayo-single-event-title",dangerouslySetInnerHTML:{__html:E.rendered}})),f.length>0&&React.createElement("div",{className:"mayo-event-announcements"},f.map(function(e){var t={urgent:"#dc3545",high:"#ff9800",normal:"#0073aa",low:"#6c757d"},n=t[e.priority]||t.normal;return React.createElement("div",{key:e.id,className:"mayo-event-announcement-notice",style:{padding:"12px 16px",marginBottom:"16px",backgroundColor:"#fff8e1",borderLeft:"4px solid ".concat(n),borderRadius:"4px"}},React.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px",marginBottom:"4px"}},React.createElement("span",{className:"dashicons dashicons-megaphone",style:{color:n,fontSize:"18px"}}),React.createElement("strong",{style:{fontSize:"15px"}},e.title),e.priority&&"normal"!==e.priority&&React.createElement("span",{style:{backgroundColor:n,color:"#fff",padding:"2px 6px",borderRadius:"3px",fontSize:"10px",textTransform:"uppercase"}},e.priority)),e.excerpt&&React.createElement("p",{style:{margin:"8px 0 0",fontSize:"14px",color:"#555"},dangerouslySetInnerHTML:{__html:e.excerpt.replace(/<[^>]+>/g,"").substring(0,200)+(e.excerpt.length>200?"...":"")}}))})),r.featured_image&&React.createElement("div",{className:"mayo-single-event-image"},React.createElement("div",{className:"mayo-image-actions"},React.createElement("a",{href:r.featured_image,download:!0,className:"mayo-image-link"},"Download Flyer")),React.createElement("a",{href:r.featured_image,target:"_blank",rel:"noopener noreferrer"},React.createElement("img",{src:r.featured_image,alt:E.rendered}))),React.createElement("div",{className:"mayo-single-event-description"},React.createElement("h3",null,"Description"),React.createElement("div",{dangerouslySetInnerHTML:{__html:_.rendered}})),(S||N||k)&&React.createElement("div",{className:"mayo-single-event-location"},React.createElement("h3",null,"Location"),S&&React.createElement("p",{className:"mayo-location-name"},S),N&&React.createElement("p",{className:"mayo-location-address"},React.createElement(J,{address:N})),k&&React.createElement("p",{className:"mayo-location-details"},k)),React.createElement("div",{className:"mayo-single-event-meta"},w&&React.createElement("div",{className:"mayo-single-event-type"},React.createElement("h3",null,"Event Type"),React.createElement("p",null,w)),T&&React.createElement("div",{className:"mayo-single-event-service-body"},React.createElement("h3",null,"Service Body"),React.createElement("p",null,h(T))),React.createElement("div",{className:"mayo-single-event-datetime"},React.createElement("h3",null,"Date & Time"),React.createElement("p",null,React.createElement("strong",null,"Start:")," ",r.meta.event_start_date," at ",v(r.meta.event_start_time,"12hour"),r.meta.timezone&&" (".concat(y(r.meta.timezone),")")),(r.meta.event_end_date||r.meta.event_end_time)&&React.createElement("p",null,React.createElement("strong",null,"End:")," ",r.meta.event_end_date||r.meta.event_start_date," at ",v(r.meta.event_end_time,"12hour"))),O&&"none"!==O.type&&React.createElement("div",{className:"mayo-single-event-recurrence"},React.createElement("h3",null,"Recurring Event"),React.createElement("p",null,g(O))),React.createElement("div",{className:"mayo-single-event-taxonomies"},(null===(t=r.categories)||void 0===t?void 0:t.length)>0&&React.createElement("div",{className:"mayo-single-event-categories"},React.createElement("h3",null,"Categories"),r.categories.map(function(e){return React.createElement("a",{key:e.id,href:e.link},e.name)})),(null===(n=r.tags)||void 0===n?void 0:n.length)>0&&React.createElement("div",{className:"mayo-single-event-tags"},React.createElement("h3",null,"Tags"),r.tags.map(function(e){return React.createElement("a",{key:e.id,href:e.link},e.name)})))))))};function Ae(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 je=function(t){var n,a,r=t.announcements,o=t.currentIndex,c=t.onPrev,i=t.onNext,l=t.onClose,s=t.backgroundColor,u=t.textColor,m=t.autoRotateInterval,d=void 0===m?5e3:m,f=(0,e.useRef)(null),v=(n=(0,e.useState)(!1),a=2,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(n,a)||function(e,t){if(e){if("string"==typeof e)return Ae(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)?Ae(e,t):void 0}}(n,a)||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.")}()),y=v[0],p=v[1],g={};if(s&&(g.background=s),u&&(g.color=u),(0,e.useEffect)(function(){var e=function(){if(f.current){var e=f.current.offsetHeight;document.body.style.paddingTop="".concat(e,"px")}};return e(),window.addEventListener("resize",e),function(){document.body.style.paddingTop="",window.removeEventListener("resize",e)}},[r]),(0,e.useEffect)(function(){if(!(r.length<=1||y)){var e=setInterval(function(){i()},d);return function(){return clearInterval(e)}}},[r.length,y,i,d]),0===r.length)return null;var b=r[o];if(!b)return null;var h=r.length>1;return React.createElement("div",{className:"mayo-announcement-banner",ref:f,style:g,onMouseEnter:function(){return p(!0)},onMouseLeave:function(){return p(!1)}},React.createElement("div",{className:"mayo-announcement-banner-content"},h&&React.createElement("button",{className:"mayo-announcement-nav mayo-announcement-prev",onClick:c,title:"Previous"},React.createElement("span",{className:"dashicons dashicons-arrow-left-alt2"})),React.createElement("div",{className:"mayo-announcement-slider"},React.createElement("div",{key:o,className:"mayo-announcement-item mayo-slide-enter-down"},React.createElement("span",{className:"mayo-announcement-icon"},React.createElement("span",{className:"dashicons dashicons-megaphone"})),function(e){if(!e||"normal"===e)return null;var t={low:"#6c757d",high:"#ff9800",urgent:"#dc3545"};return React.createElement("span",{className:"mayo-announcement-priority",style:{backgroundColor:t[e]||t.normal,color:"#fff",padding:"2px 6px",borderRadius:"3px",fontSize:"10px",textTransform:"uppercase",marginRight:"8px"}},e)}(b.priority),React.createElement("a",{href:b.link,className:"mayo-announcement-title",dangerouslySetInnerHTML:{__html:b.title}}),b.linked_events&&b.linked_events.length>0&&React.createElement("span",{className:"mayo-announcement-linked-events",style:{marginLeft:"8px",fontSize:"12px",opacity:.9}},React.createElement("span",{className:"dashicons dashicons-calendar-alt",style:{fontSize:"12px",marginRight:"4px",verticalAlign:"middle"}}),b.linked_events.map(function(e,t){var n,a,r,o=e.source&&"external"===e.source.type,c=e.unavailable;return React.createElement("span",{key:"".concat((null===(n=e.source)||void 0===n?void 0:n.type)||"local","-").concat((null===(a=e.source)||void 0===a?void 0:a.id)||"local","-").concat(e.id)},c?React.createElement("span",{style:{opacity:.7,fontStyle:"italic"}},e.title):React.createElement("a",{href:e.permalink,target:o?"_blank":"_self",rel:o?"noopener noreferrer":void 0,style:{color:"inherit",textDecoration:"underline"}},e.title,o&&(null===(r=e.source)||void 0===r?void 0:r.name)&&React.createElement("span",{style:{opacity:.8,marginLeft:"2px"}},"(",e.source.name,")")),t<b.linked_events.length-1&&", ")})),h&&React.createElement("span",{className:"mayo-announcement-counter"},o+1," / ",r.length))),h&&React.createElement("button",{className:"mayo-announcement-nav mayo-announcement-next",onClick:i,title:"Next"},React.createElement("span",{className:"dashicons dashicons-arrow-right-alt2"}))),React.createElement("button",{className:"mayo-announcement-close",onClick:l,title:"Dismiss"},React.createElement("span",{className:"dashicons dashicons-no-alt"})))},xe=function(t){var n=t.announcements,a=(t.timeFormat,t.onClose),r=t.backgroundColor,o=t.textColor,c={};return r&&(c.background=r),o&&(c.color=o),(0,e.useEffect)(function(){var e=function(e){"Escape"===e.key&&a()};return document.addEventListener("keydown",e),document.body.style.overflow="hidden",function(){document.removeEventListener("keydown",e),document.body.style.overflow=""}},[a]),0===n.length?null:React.createElement("div",{className:"mayo-announcement-modal-backdrop",onClick:function(e){e.target===e.currentTarget&&a()}},React.createElement("div",{className:"mayo-announcement-modal"},React.createElement("button",{className:"mayo-announcement-modal-close",onClick:a,title:"Close"},React.createElement("span",{className:"dashicons dashicons-no-alt"})),React.createElement("div",{className:"mayo-announcement-modal-header",style:c},React.createElement("span",{className:"dashicons dashicons-megaphone"}),React.createElement("h2",null,"Announcements")),React.createElement("div",{className:"mayo-announcement-modal-body"},React.createElement("ul",{className:"mayo-announcement-list"},n.map(function(e){return React.createElement("li",{key:e.id,className:"mayo-announcement-list-item"},React.createElement("div",{className:"mayo-announcement-list-header"},function(e){if(!e||"normal"===e)return null;var t={low:"#6c757d",high:"#ff9800",urgent:"#dc3545"};return React.createElement("span",{className:"mayo-announcement-priority",style:{backgroundColor:t[e]||t.normal,color:"#fff",padding:"2px 6px",borderRadius:"3px",fontSize:"10px",textTransform:"uppercase",marginRight:"8px"}},e)}(e.priority)),React.createElement("a",{href:e.link,className:"mayo-announcement-list-title",dangerouslySetInnerHTML:{__html:e.title}}),e.excerpt&&React.createElement("div",{className:"mayo-announcement-list-excerpt",dangerouslySetInnerHTML:{__html:e.excerpt.replace(/<[^>]+>/g,"").substring(0,150)+"..."}}),e.linked_events&&e.linked_events.length>0&&React.createElement("div",{className:"mayo-announcement-linked-events",style:{marginTop:"8px",fontSize:"12px",color:"#666"}},React.createElement("span",{className:"dashicons dashicons-calendar-alt",style:{fontSize:"14px",marginRight:"4px",verticalAlign:"middle"}}),React.createElement("span",{style:{marginRight:"4px"}},"Related:"),e.linked_events.map(function(t,n){var a,r,o,c,i=t.source&&"external"===t.source.type,l=t.unavailable;return React.createElement("span",{key:"".concat((null===(a=t.source)||void 0===a?void 0:a.type)||"local","-").concat((null===(r=t.source)||void 0===r?void 0:r.id)||"local","-").concat(t.id)},l?React.createElement("span",{style:{color:"#999",fontStyle:"italic"}},t.title,i&&(null===(o=t.source)||void 0===o?void 0:o.name)&&React.createElement("span",{style:{fontSize:"10px",marginLeft:"4px"}},"(",t.source.name,")")):React.createElement("a",{href:t.permalink,target:i?"_blank":"_self",rel:i?"noopener noreferrer":void 0,style:{color:"#0073aa",textDecoration:"none"}},t.title,i&&(null===(c=t.source)||void 0===c?void 0:c.name)&&React.createElement("span",{style:{fontSize:"10px",color:"#888",marginLeft:"4px"}},"(",t.source.name,")")),n<e.linked_events.length-1&&", ")})))}))),React.createElement("div",{className:"mayo-announcement-modal-footer"},React.createElement("button",{className:"mayo-announcement-dismiss-button",onClick:a},"Dismiss"))))},Ce=function(e){var t=e.count,n=e.onClick,a=e.backgroundColor,r=e.textColor,o={};return a&&(o.background=a),r&&(o.color=r),React.createElement("button",{className:"mayo-announcement-bell",onClick:n,title:"".concat(t," announcement").concat(1!==t?"s":""," - Click to view"),style:o},React.createElement("span",{className:"dashicons dashicons-bell"}),t>0&&React.createElement("span",{className:"mayo-announcement-bell-badge"},t>9?"9+":t))};function Pe(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",r=n.toStringTag||"@@toStringTag";function o(n,a,r,o){var l=a&&a.prototype instanceof i?a:i,s=Object.create(l.prototype);return De(s,"_invoke",function(n,a,r){var o,i,l,s=0,u=r||[],m=!1,d={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,i=0,l=e,d.n=n,c}};function f(n,a){for(i=n,l=a,t=0;!m&&s&&!r&&t<u.length;t++){var r,o=u[t],f=d.p,v=o[2];n>3?(r=v===a)&&(l=o[(i=o[4])?5:(i=3,3)],o[4]=o[5]=e):o[0]<=f&&((r=n<2&&f<o[1])?(i=0,d.v=a,d.n=o[1]):f<v&&(r=n<3||o[0]>a||a>v)&&(o[4]=n,o[5]=a,d.n=v,i=0))}if(r||n>1)return c;throw m=!0,a}return function(r,u,v){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&f(u,v),i=u,l=v;(t=i<2?e:l)||!m;){o||(i?i<3?(i>1&&(d.n=-1),f(i,l)):d.n=l:d.v=l);try{if(s=2,o){if(i||(r="next"),t=o[r]){if(!(t=t.call(o,l)))throw TypeError("iterator result is not an object");if(!t.done)return t;l=t.value,i<2&&(i=0)}else 1===i&&(t=o.return)&&t.call(o),i<2&&(l=TypeError("The iterator does not provide a '"+r+"' method"),i=1);o=e}else if((t=(m=d.n<0)?l:n.call(a,d))!==c)break}catch(t){o=e,i=1,l=t}finally{s=1}}return{value:t,done:m}}}(n,r,o),!0),s}var c={};function i(){}function l(){}function s(){}t=Object.getPrototypeOf;var u=[][a]?t(t([][a]())):(De(t={},a,function(){return this}),t),m=s.prototype=i.prototype=Object.create(u);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,De(e,r,"GeneratorFunction")),e.prototype=Object.create(m),e}return l.prototype=s,De(m,"constructor",s),De(s,"constructor",l),l.displayName="GeneratorFunction",De(s,r,"GeneratorFunction"),De(m),De(m,r,"Generator"),De(m,a,function(){return this}),De(m,"toString",function(){return"[object Generator]"}),(Pe=function(){return{w:o,m:d}})()}function De(e,t,n,a){var r=Object.defineProperty;try{r({},"",{})}catch(e){r=0}De=function(e,t,n,a){function o(t,n){De(e,t,function(e){return this._invoke(t,n,e)})}t?r?r(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},De(e,t,n,a)}function Fe(e,t,n,a,r,o,c){try{var i=e[o](c),l=i.value}catch(e){return void n(e)}i.done?t(l):Promise.resolve(l).then(a,r)}function Ie(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,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Me(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)?Me(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 Me(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 Le=function(t){var n=t.settings,a=void 0===n?{}:n,r=Ie((0,e.useState)([]),2),o=r[0],c=r[1],i=Ie((0,e.useState)(!0),2),l=i[0],s=i[1],u=Ie((0,e.useState)(!1),2),m=(u[0],u[1]),d=Ie((0,e.useState)(!1),2),f=d[0],v=d[1],y=Ie((0,e.useState)(0),2),p=y[0],g=y[1],h=a.mode||"banner",E=a.categories||"",_=a.categoryRelation||"OR",R=a.tags||"",w=a.priority||"",S=a.timeFormat||"12hour",N=a.backgroundColor||"",k=a.textColor||"",O=a.orderBy||"date",T=a.order||"",A=(0,e.useCallback)(function(e){var t=e.sort().join("-");return"mayo_announcement_dismissed_".concat(h,"_").concat(t)},[h]),j=(0,e.useCallback)(function(e){if(0===e.length)return!1;var t=A(e),n=localStorage.getItem(t);if(!n)return!1;var a=parseInt(n,10);return Date.now()-a<864e5},[A]);(0,e.useEffect)(function(){var e=function(){var e,t=(e=Pe().m(function e(){var t,n,a,r,o;return Pe().w(function(e){for(;;)switch(e.p=e.n){case 0:return s(!0),e.p=1,t="/announcements?per_page=20",E&&(t+="&categories=".concat(encodeURIComponent(E))),_&&"OR"!==_&&(t+="&category_relation=".concat(encodeURIComponent(_))),R&&(t+="&tags=".concat(encodeURIComponent(R))),w&&(t+="&priority=".concat(encodeURIComponent(w))),O&&(t+="&orderby=".concat(encodeURIComponent(O))),T&&(t+="&order=".concat(encodeURIComponent(T))),e.n=2,b(t);case 2:n=e.v,a=Array.isArray(n)?n:n.announcements||[],c(a),r=a.map(function(e){return e.id}),j(r)&&(m(!0),v(!0)),e.n=4;break;case 3:e.p=3,o=e.v,console.error("Error fetching announcements:",o),c([]);case 4:return e.p=4,s(!1),e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}),function(){var t=this,n=arguments;return new Promise(function(a,r){var o=e.apply(t,n);function c(e){Fe(o,a,r,c,i,"next",e)}function i(e){Fe(o,a,r,c,i,"throw",e)}c(void 0)})});return function(){return t.apply(this,arguments)}}();e()},[E,_,R,w,O,T,j]);var x=(0,e.useCallback)(function(){var e=o.map(function(e){return e.id}),t=A(e);localStorage.setItem(t,Date.now().toString()),m(!0),v(!0)},[o,A]),C=(0,e.useCallback)(function(){m(!1),v(!1);var e=o.map(function(e){return e.id}),t=A(e);localStorage.removeItem(t)},[o,A]),P=(0,e.useCallback)(function(){g(function(e){return 0===e?o.length-1:e-1})},[o.length]),D=(0,e.useCallback)(function(){g(function(e){return e>=o.length-1?0:e+1})},[o.length]);return(0,e.useEffect)(function(){o.length>0&&p>=o.length&&g(0)},[o.length,p]),l||0===o.length?null:f?React.createElement("div",{className:"mayo-announcement-bell-wrapper mayo-announcement-bell-".concat(h)},React.createElement(Ce,{count:o.length,onClick:C,backgroundColor:N,textColor:k})):"modal"===h?React.createElement(xe,{announcements:o,timeFormat:S,onClose:x,backgroundColor:N,textColor:k}):React.createElement(je,{announcements:o,currentIndex:p,onPrev:P,onNext:D,onClose:x,backgroundColor:N,textColor:k})};function Ge(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",r=n.toStringTag||"@@toStringTag";function o(n,a,r,o){var l=a&&a.prototype instanceof i?a:i,s=Object.create(l.prototype);return Be(s,"_invoke",function(n,a,r){var o,i,l,s=0,u=r||[],m=!1,d={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,i=0,l=e,d.n=n,c}};function f(n,a){for(i=n,l=a,t=0;!m&&s&&!r&&t<u.length;t++){var r,o=u[t],f=d.p,v=o[2];n>3?(r=v===a)&&(l=o[(i=o[4])?5:(i=3,3)],o[4]=o[5]=e):o[0]<=f&&((r=n<2&&f<o[1])?(i=0,d.v=a,d.n=o[1]):f<v&&(r=n<3||o[0]>a||a>v)&&(o[4]=n,o[5]=a,d.n=v,i=0))}if(r||n>1)return c;throw m=!0,a}return function(r,u,v){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&f(u,v),i=u,l=v;(t=i<2?e:l)||!m;){o||(i?i<3?(i>1&&(d.n=-1),f(i,l)):d.n=l:d.v=l);try{if(s=2,o){if(i||(r="next"),t=o[r]){if(!(t=t.call(o,l)))throw TypeError("iterator result is not an object");if(!t.done)return t;l=t.value,i<2&&(i=0)}else 1===i&&(t=o.return)&&t.call(o),i<2&&(l=TypeError("The iterator does not provide a '"+r+"' method"),i=1);o=e}else if((t=(m=d.n<0)?l:n.call(a,d))!==c)break}catch(t){o=e,i=1,l=t}finally{s=1}}return{value:t,done:m}}}(n,r,o),!0),s}var c={};function i(){}function l(){}function s(){}t=Object.getPrototypeOf;var u=[][a]?t(t([][a]())):(Be(t={},a,function(){return this}),t),m=s.prototype=i.prototype=Object.create(u);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,Be(e,r,"GeneratorFunction")),e.prototype=Object.create(m),e}return l.prototype=s,Be(m,"constructor",s),Be(s,"constructor",l),l.displayName="GeneratorFunction",Be(s,r,"GeneratorFunction"),Be(m),Be(m,r,"Generator"),Be(m,a,function(){return this}),Be(m,"toString",function(){return"[object Generator]"}),(Ge=function(){return{w:o,m:d}})()}function Be(e,t,n,a){var r=Object.defineProperty;try{r({},"",{})}catch(e){r=0}Be=function(e,t,n,a){function o(t,n){Be(e,t,function(e){return this._invoke(t,n,e)})}t?r?r(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},Be(e,t,n,a)}function Ue(e,t,n,a,r,o,c){try{var i=e[o](c),l=i.value}catch(e){return void n(e)}i.done?t(l):Promise.resolve(l).then(a,r)}function We(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,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ze(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)?ze(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 ze(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 qe=function(){var t,n,a=We((0,e.useState)(null),2),r=a[0],o=a[1],c=We((0,e.useState)(!0),2),i=c[0],l=c[1],s=We((0,e.useState)(null),2),u=s[0],m=s[1],d=A().getServiceBodyName;if((0,e.useEffect)(function(){var e=function(){var e,t=(e=Ge().m(function e(){var t,n,a,r;return Ge().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,t=window.location.pathname.split("/"),n=t[t.length-2],e.n=1,b("/announcement-by-slug/".concat(n));case 1:if(!(a=e.v)){e.n=2;break}o(a),e.n=3;break;case 2:throw new Error("Announcement not found");case 3:e.n=5;break;case 4:e.p=4,r=e.v,console.error("Error fetching announcement:",r),m("Failed to load announcement");case 5:return e.p=5,l(!1),e.f(5);case 6:return e.a(2)}},e,null,[[0,4,5,6]])}),function(){var t=this,n=arguments;return new Promise(function(a,r){var o=e.apply(t,n);function c(e){Ue(o,a,r,c,i,"next",e)}function i(e){Ue(o,a,r,c,i,"throw",e)}c(void 0)})});return function(){return t.apply(this,arguments)}}();e()},[]),i)return React.createElement("div",{className:"mayo-single-container"},React.createElement("div",{className:"mayo-loading"},"Loading announcement..."));if(u)return React.createElement("div",{className:"mayo-single-container"},React.createElement("div",{className:"mayo-error"},u));if(!r)return React.createElement("div",{className:"mayo-single-container"},React.createElement("div",{className:"mayo-error"},"Announcement not found"));var f={urgent:"#dc3545",high:"#ff9800",normal:"#0073aa",low:"#6c757d"},v=f[r.priority]||f.normal,y=function(e,t){if(!e)return null;var n=e;return t&&(n+=" at ".concat(function(e){if(!e)return"";try{var t=We(e.split(":"),2),n=t[0],a=t[1],r=parseInt(n,10),o=r>=12?"PM":"AM";return"".concat(r%12||12,":").concat(a," ").concat(o)}catch(t){return e}}(t))),n};return React.createElement("div",{className:"mayo-single-container"},React.createElement("article",{className:"mayo-single-announcement mayo-priority-".concat(r.priority||"normal")},React.createElement("header",{className:"mayo-single-announcement-header"},React.createElement("div",{className:"mayo-announcement-priority-bar",style:{backgroundColor:v}}),React.createElement("h1",{className:"mayo-single-announcement-title"},React.createElement("span",{dangerouslySetInnerHTML:{__html:r.title}})),r.priority&&"normal"!==r.priority&&React.createElement("span",{className:"mayo-priority-badge",style:{backgroundColor:v}},r.priority)),r.featured_image&&React.createElement("div",{className:"mayo-single-announcement-image"},React.createElement("a",{href:r.featured_image,target:"_blank",rel:"noopener noreferrer"},React.createElement("img",{src:r.featured_image,alt:r.title}))),React.createElement("div",{className:"mayo-single-announcement-body"},React.createElement("div",{dangerouslySetInnerHTML:{__html:r.content}})),r.linked_events&&r.linked_events.length>0&&React.createElement("div",{className:"mayo-single-announcement-events"},React.createElement("h3",null,React.createElement("span",{className:"dashicons dashicons-calendar-alt"}),"Related Events"),React.createElement("ul",null,r.linked_events.map(function(e){var t,n,a,r,o=e.source&&"external"===e.source.type,c=e.unavailable;return React.createElement("li",{key:"".concat((null===(t=e.source)||void 0===t?void 0:t.type)||"local","-").concat((null===(n=e.source)||void 0===n?void 0:n.id)||"local","-").concat(e.id)},c?React.createElement("span",{className:"mayo-event-unavailable"},e.title,o&&(null===(a=e.source)||void 0===a?void 0:a.name)&&React.createElement("span",{className:"mayo-event-source"},"(",e.source.name,")")):React.createElement("a",{href:e.permalink,target:o?"_blank":"_self",rel:o?"noopener noreferrer":void 0},React.createElement("span",{className:"mayo-event-title"},e.title),e.start_date&&React.createElement("span",{className:"mayo-event-date"},e.start_date),o&&(null===(r=e.source)||void 0===r?void 0:r.name)&&React.createElement("span",{className:"mayo-event-source-badge"},e.source.name)))}))),React.createElement("div",{className:"mayo-single-announcement-meta"},r.service_body&&React.createElement("div",{className:"mayo-announcement-service-body"},React.createElement("h3",null,"Service Body"),React.createElement("p",null,d(r.service_body))),(r.display_start_date||r.display_end_date)&&React.createElement("div",{className:"mayo-announcement-display-window"},React.createElement("h3",null,"Display Window"),r.display_start_date&&React.createElement("p",null,React.createElement("strong",null,"From:")," ",y(r.display_start_date,r.display_start_time)),r.display_end_date&&React.createElement("p",null,React.createElement("strong",null,"Until:")," ",y(r.display_end_date,r.display_end_time)))),React.createElement("div",{className:"mayo-single-announcement-taxonomies"},(null===(t=r.categories)||void 0===t?void 0:t.length)>0&&React.createElement("div",{className:"mayo-single-announcement-categories"},React.createElement("h3",null,"Categories"),r.categories.map(function(e){return React.createElement("a",{key:e.id,href:e.link},e.name)})),(null===(n=r.tags)||void 0===n?void 0:n.length)>0&&React.createElement("div",{className:"mayo-single-announcement-tags"},React.createElement("h3",null,"Tags"),r.tags.map(function(e){return React.createElement("a",{key:e.id,href:e.link},e.name)})))))};function He(e){return He="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},He(e)}function Je(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",r=n.toStringTag||"@@toStringTag";function o(n,a,r,o){var l=a&&a.prototype instanceof i?a:i,s=Object.create(l.prototype);return Ye(s,"_invoke",function(n,a,r){var o,i,l,s=0,u=r||[],m=!1,d={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,i=0,l=e,d.n=n,c}};function f(n,a){for(i=n,l=a,t=0;!m&&s&&!r&&t<u.length;t++){var r,o=u[t],f=d.p,v=o[2];n>3?(r=v===a)&&(l=o[(i=o[4])?5:(i=3,3)],o[4]=o[5]=e):o[0]<=f&&((r=n<2&&f<o[1])?(i=0,d.v=a,d.n=o[1]):f<v&&(r=n<3||o[0]>a||a>v)&&(o[4]=n,o[5]=a,d.n=v,i=0))}if(r||n>1)return c;throw m=!0,a}return function(r,u,v){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&f(u,v),i=u,l=v;(t=i<2?e:l)||!m;){o||(i?i<3?(i>1&&(d.n=-1),f(i,l)):d.n=l:d.v=l);try{if(s=2,o){if(i||(r="next"),t=o[r]){if(!(t=t.call(o,l)))throw TypeError("iterator result is not an object");if(!t.done)return t;l=t.value,i<2&&(i=0)}else 1===i&&(t=o.return)&&t.call(o),i<2&&(l=TypeError("The iterator does not provide a '"+r+"' method"),i=1);o=e}else if((t=(m=d.n<0)?l:n.call(a,d))!==c)break}catch(t){o=e,i=1,l=t}finally{s=1}}return{value:t,done:m}}}(n,r,o),!0),s}var c={};function i(){}function l(){}function s(){}t=Object.getPrototypeOf;var u=[][a]?t(t([][a]())):(Ye(t={},a,function(){return this}),t),m=s.prototype=i.prototype=Object.create(u);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,Ye(e,r,"GeneratorFunction")),e.prototype=Object.create(m),e}return l.prototype=s,Ye(m,"constructor",s),Ye(s,"constructor",l),l.displayName="GeneratorFunction",Ye(s,r,"GeneratorFunction"),Ye(m),Ye(m,r,"Generator"),Ye(m,a,function(){return this}),Ye(m,"toString",function(){return"[object Generator]"}),(Je=function(){return{w:o,m:d}})()}function Ye(e,t,n,a){var r=Object.defineProperty;try{r({},"",{})}catch(e){r=0}Ye=function(e,t,n,a){function o(t,n){Ye(e,t,function(e){return this._invoke(t,n,e)})}t?r?r(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},Ye(e,t,n,a)}function Ve(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 $e(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ve(Object(n),!0).forEach(function(t){Ze(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ve(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Ze(e,t,n){return(t=function(e){var t=function(e){if("object"!=He(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=He(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==He(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ke(e,t,n,a,r,o,c){try{var i=e[o](c),l=i.value}catch(e){return void n(e)}i.done?t(l):Promise.resolve(l).then(a,r)}function Xe(e){return function(){var t=this,n=arguments;return new Promise(function(a,r){var o=e.apply(t,n);function c(e){Ke(o,a,r,c,i,"next",e)}function i(e){Ke(o,a,r,c,i,"throw",e)}c(void 0)})}}function Qe(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,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(e,t)||tt(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 et(e){return function(e){if(Array.isArray(e))return nt(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||tt(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 tt(e,t){if(e){if("string"==typeof e)return nt(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)?nt(e,t):void 0}}function nt(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 at=function(){var t,n,a,r,o=document.getElementById("mayo-announcement-form"),c=null==o||null===(t=o.dataset)||void 0===t?void 0:t.settings,i=window[c]||{},l=(null==o||null===(n=o.dataset)||void 0===n?void 0:n.categories)||"",s=(0,e.useMemo)(function(){return l?l.split(",").map(function(e){return e.trim().toLowerCase()}):[]},[l]),u=(0,e.useMemo)(function(){return s.filter(function(e){return!e.startsWith("-")})},[s]),m=(0,e.useMemo)(function(){return s.filter(function(e){return e.startsWith("-")}).map(function(e){return e.substring(1)})},[s]),d=(null==o||null===(a=o.dataset)||void 0===a?void 0:a.tags)||"",f=(0,e.useMemo)(function(){return d?d.split(",").map(function(e){return e.trim().toLowerCase()}):[]},[d]),v=(0,e.useMemo)(function(){return f.filter(function(e){return!e.startsWith("-")})},[f]),y=(0,e.useMemo)(function(){return f.filter(function(e){return e.startsWith("-")}).map(function(e){return e.substring(1)})},[f]),p=function(e){var t=document.createElement("textarea");return t.innerHTML=e,t.value},g=i.additionalRequiredFields?i.additionalRequiredFields.split(",").map(function(e){return e.trim()}):[],h=[].concat(["title","description","service_body","email","contact_name"],et(g)),E=!0===i.showFlyer||"true"===i.showFlyer,_=Qe((0,e.useState)({title:"",description:"",start_date:"",start_time:"",end_date:"",end_time:"",flyer:null,categories:[],tags:[],service_body:"",email:"",contact_name:""}),2),R=_[0],w=_[1],S=Qe((0,e.useState)(!1),2),N=S[0],k=S[1],O=Qe((0,e.useState)(null),2),T=O[0],j=O[1],x=Qe((0,e.useState)([]),2),C=x[0],P=x[1],D=Qe((0,e.useState)([]),2),F=D[0],I=D[1],M=Qe((0,e.useState)(null),2),L=M[0],G=(M[1],A().serviceBodies),B=Qe((0,e.useState)(null),2),U=B[0],W=B[1],z=Qe((0,e.useState)({default_service_bodies:""}),2),q=z[0],H=z[1],J=Qe((0,e.useState)({categories:[],tags:[],service_bodies:[]}),2),Y=J[0],V=J[1];(0,e.useEffect)(function(){var e=function(){var e=Xe(Je().m(function e(){var t,n,a,r,o,c,l,s;return Je().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,Promise.all([b("/settings"),b("/subscription-options")]);case 1:n=e.v,a=Qe(n,2),r=a[0],o=a[1],c={default_service_bodies:r.default_service_bodies||""},void 0!==i.defaultServiceBodies&&""!==i.defaultServiceBodies&&(c.default_service_bodies=i.defaultServiceBodies),H(c),V(o||{categories:[],tags:[],service_bodies:[]}),(l=null===(t=c.default_service_bodies)||void 0===t?void 0:t.split(",").map(function(e){return e.trim()}).filter(function(e){return e}))&&1===l.length&&w(function(e){return $e($e({},e),{},{service_body:l[0]})}),e.n=3;break;case 2:e.p=2,s=e.v,console.error("Error fetching settings:",s);case 3:return e.a(2)}},e,null,[[0,2]])}));return function(){return e.apply(this,arguments)}}();e()},[i]),(0,e.useEffect)(function(){var e=function(){var e=Xe(Je().m(function e(){var t,n,a,r,o,c,i,l,s,d,f;return Je().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,Promise.all([fetch("/wp-json/wp/v2/categories?hide_empty=false&per_page=100"),fetch("/wp-json/wp/v2/tags?hide_empty=false&per_page=100")]);case 1:if(t=e.v,n=Qe(t,2),a=n[0],r=n[1],a.ok&&r.ok){e.n=2;break}throw new Error("Failed to fetch taxonomies");case 2:return e.n=3,a.json();case 3:return o=e.v,e.n=4,r.json();case 4:c=e.v,i=Y.categories.map(function(e){return e.id}),l=Y.tags.map(function(e){return e.id}),s=o.filter(function(e){if(i.length>0&&!i.includes(e.id))return!1;var t=(e.slug||"").toLowerCase();return u.length>0?u.includes(t):!(m.length>0&&m.includes(t))}),d=c.filter(function(e){if(l.length>0&&!l.includes(e.id))return!1;var t=(e.slug||"").toLowerCase();return v.length>0?v.includes(t):!(y.length>0&&y.includes(t))}),P(Array.isArray(s)?s:[]),I(Array.isArray(d)?d:[]),e.n=6;break;case 5:e.p=5,f=e.v,console.error("Error fetching taxonomies:",f),P([]),I([]);case 6:return e.a(2)}},e,null,[[0,5]])}));return function(){return e.apply(this,arguments)}}();e()},[u,m,v,y,Y]);var $,Z,K=function(){var e=Xe(Je().m(function e(t){var n,a,r,o,c,i,l,s,u,m,d,f,v,y;return Je().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t.preventDefault(),k(!0),j(null),e.p=1,!R.flyer){e.n=2;break}if(o=["image/jpeg","image/png","image/gif"],c=R.flyer.name.split(".").pop().toLowerCase(),i=["jpg","jpeg","png","gif"],o.includes(R.flyer.type)&&i.includes(c)){e.n=2;break}throw new Error("You did not attach a valid image file. Please choose a valid image file (JPG, PNG, or GIF)");case 2:if(!((l=h.filter(function(e){return"flyer"===e?!R.flyer:!R[e]})).length>0)){e.n=3;break}throw new Error("Please fill in all required fields: ".concat(l.join(", ")));case 3:return s=new FormData,Object.keys(R).forEach(function(e){"flyer"===e&&R[e]instanceof File?s.append("flyer",R[e]):"categories"===e||"tags"===e?s.append(e,R[e].join(",")):null!=R[e]&&""!==R[e]&&s.append(e,R[e])}),u=(null===(n=window.mayoApiSettings)||void 0===n?void 0:n.nonce)||(null===(a=document.querySelector("#_wpnonce"))||void 0===a?void 0:a.value)||(null===(r=window.wpApiSettings)||void 0===r?void 0:r.nonce),e.n=4,b("/submit-announcement",{method:"POST",body:s,credentials:"same-origin",headers:{"X-WP-Nonce":u}});case 4:if(!(m=e.v).id&&!m.success){e.n=5;break}j({type:"success",text:"Announcement submitted successfully!"}),f=null===(d=q.default_service_bodies)||void 0===d?void 0:d.split(",").map(function(e){return e.trim()}).filter(function(e){return e}),v=f&&1===f.length?f[0]:"",w({title:"",description:"",start_date:"",start_time:"",end_date:"",end_time:"",flyer:null,categories:[],tags:[],service_body:v,email:"",contact_name:""}),W(null),e.n=6;break;case 5:throw new Error(m.message||"Failed to submit announcement");case 6:e.n=8;break;case 7:e.p=7,y=e.v,j({type:"error",text:y.message||"Error submitting form"});case 8:return e.p=8,k(!1),e.f(8);case 9:return e.a(2)}},e,null,[[1,7,8,9]])}));return function(t){return e.apply(this,arguments)}}(),X=function(e){var t=e.target,n=t.name,a=t.value,r=t.files;if(r&&r[0]){var o=r[0],c=o.name.split(".").pop().toLowerCase();if(!["image/jpeg","image/png","image/gif"].includes(o.type)||!["jpg","jpeg","png","gif"].includes(c))return j({type:"error",text:"The selected file is not a valid image. Please use a valid image file (JPG, PNG, or GIF)"}),e.target.value="",w(function(e){return $e($e({},e),{},{flyer:null})}),void W(null);var i=new FileReader;i.onload=function(t){var n=new Image;n.onload=function(){W("image"),w(function(e){return $e($e({},e),{},{flyer:o})}),j(null)},n.onerror=function(){j({type:"error",text:"The selected file is not a valid image. Please choose a valid image file (JPG, PNG, or GIF)"}),e.target.value="",w(function(e){return $e($e({},e),{},{flyer:null})}),W(null)},n.src=t.target.result},i.onerror=function(){j({type:"error",text:"Error reading the file"}),e.target.value="",w(function(e){return $e($e({},e),{},{flyer:null})}),W(null)},i.readAsDataURL(o)}else w(function(e){return $e($e({},e),{},Ze({},n,a))})},Q=function(e){return h.includes(e)};return L?React.createElement("div",{className:"mayo-error"},L):React.createElement("div",{className:"mayo-announcement-form"},React.createElement("form",{onSubmit:K},React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"title"},"Announcement Title ",Q("title")&&"*"),React.createElement("input",{type:"text",id:"title",name:"title",value:R.title,onChange:X,required:Q("title")})),(!q.default_service_bodies||(null===(Z=q.default_service_bodies)||void 0===Z?void 0:Z.split(",").map(function(e){return e.trim()}).filter(function(e){return e})).length>1)&&React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"service_body"},"Service Body *"),React.createElement("select",{id:"service_body",name:"service_body",value:R.service_body,onChange:function(e){w(function(t){return $e($e({},t),{},{service_body:e.target.value})})},required:!0},React.createElement("option",{value:""},"Select a service body"),!(($=Y.service_bodies.map(function(e){return e.id.toString()})).length>0&&!$.includes("0"))&&(!q.default_service_bodies||q.default_service_bodies.includes("0"))&&React.createElement("option",{value:"0"},"Unaffiliated (0)"),function(){var e=G,t=Y.service_bodies.map(function(e){return e.id.toString()});if(t.length>0&&(e=e.filter(function(e){return t.includes(e.id.toString())})),q.default_service_bodies){var n=q.default_service_bodies.split(",").map(function(e){return e.trim()}).filter(function(e){return e});e=e.filter(function(e){return n.includes(e.id.toString())})}return e}().map(function(e){return React.createElement("option",{key:e.id,value:e.id},e.name," (",e.id,")")}))),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"contact_name"},"Point of Contact Name (Private) *"),React.createElement("input",{type:"text",id:"contact_name",name:"contact_name",value:R.contact_name,onChange:X,required:!0,placeholder:"Your name (will not be displayed publicly)"})),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"email"},"Point of Contact Email (Private) *"),React.createElement("input",{type:"email",id:"email",name:"email",value:R.email,onChange:X,required:!0,placeholder:"Your email address (will not be displayed publicly)"})),React.createElement("fieldset",{className:"mayo-display-window-fieldset"},React.createElement("legend",null,"Display Window"),React.createElement("p",{className:"mayo-fieldset-description"},"Control when this announcement is visible on the site."),React.createElement("div",{className:"mayo-datetime-group"},React.createElement("div",{className:"mayo-datetime-row"},React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"start_date"},"Start Date ",Q("start_date")&&"*"),React.createElement("input",{type:"date",id:"start_date",name:"start_date",value:R.start_date,onChange:X,required:Q("start_date")})),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"start_time"},"Start Time ",Q("start_time")&&"*"),React.createElement("input",{type:"time",id:"start_time",name:"start_time",value:R.start_time,onChange:X,required:Q("start_time")}))),React.createElement("p",{className:"mayo-field-hint"},"Leave empty to start showing immediately"),React.createElement("div",{className:"mayo-datetime-row"},React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"end_date"},"End Date ",Q("end_date")&&"*"),React.createElement("input",{type:"date",id:"end_date",name:"end_date",value:R.end_date,onChange:X,required:Q("end_date")})),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"end_time"},"End Time ",Q("end_time")&&"*"),React.createElement("input",{type:"time",id:"end_time",name:"end_time",value:R.end_time,onChange:X,required:Q("end_time")}))),React.createElement("p",{className:"mayo-field-hint"},"Leave empty to show indefinitely"))),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"description"},"Description ",Q("description")&&"*"),React.createElement("textarea",{id:"description",name:"description",value:R.description,onChange:X,required:Q("description"),rows:"6"})),E&&React.createElement("div",{className:"mayo-form-field"},React.createElement("label",null,"Image/Flyer ",Q("flyer")&&"*"),React.createElement("div",{className:"mayo-upload-section"},!U&&React.createElement(React.Fragment,null,React.createElement("input",{type:"file",id:"flyer-upload",name:"flyer",accept:"image/*",onChange:X,required:Q("flyer"),className:"mayo-file-input"}),React.createElement("label",{htmlFor:"flyer-upload",className:"mayo-upload-button"},"Upload Image"),React.createElement("p",{className:"mayo-upload-info"},"Supported file types: Images (.jpg, .jpeg, .png, .gif)",Q("flyer")&&" (Required)")),U&&React.createElement("div",{className:"mayo-upload-preview"},React.createElement("p",null,"Selected: ",(null===(r=R.flyer)||void 0===r?void 0:r.name)||"No file selected"),React.createElement("button",{type:"button",onClick:function(){w(function(e){return $e($e({},e),{},{flyer:null})}),W(null)},className:"mayo-clear-upload"},"Clear Upload")))),C.length>0&&React.createElement("div",{className:"mayo-form-field"},React.createElement("label",null,"Categories"),React.createElement("div",{className:"mayo-taxonomy-list"},C.map(function(e){return React.createElement("label",{key:null==e?void 0:e.id,className:"mayo-taxonomy-item"},React.createElement("input",{type:"checkbox",checked:R.categories.includes(null==e?void 0:e.id),onChange:function(t){var n=t.target.checked?[].concat(et(R.categories),[null==e?void 0:e.id]):R.categories.filter(function(t){return t!==(null==e?void 0:e.id)});w($e($e({},R),{},{categories:n}))}}),null!=e&&e.name?p(e.name):"Unnamed Category")}))),F.length>0&&React.createElement("div",{className:"mayo-form-field"},React.createElement("label",null,"Tags"),React.createElement("div",{className:"mayo-taxonomy-list"},F.map(function(e){return React.createElement("label",{key:(null==e?void 0:e.id)||"default",className:"mayo-taxonomy-item"},React.createElement("input",{type:"checkbox",checked:R.tags.includes(null==e?void 0:e.name),onChange:function(t){var n=t.target.checked?[].concat(et(R.tags),[null==e?void 0:e.name]):R.tags.filter(function(t){return t!==(null==e?void 0:e.name)});w($e($e({},R),{},{tags:n}))}}),null!=e&&e.name?p(e.name):"Unnamed Tag")}))),React.createElement("button",{type:"submit",disabled:N,className:"mayo-submit-button"},N?"Submitting...":"Submit Announcement"),T&&React.createElement("div",{className:"mayo-message mayo-message-".concat(T.type)},"string"==typeof T.text?T.text:"An error occurred while submitting the form. Please try again.")))};function rt(e){return rt="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},rt(e)}function ot(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 ct(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ot(Object(n),!0).forEach(function(t){it(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ot(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function it(e,t,n){return(t=function(e){var t=function(e){if("object"!=rt(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=rt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==rt(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function lt(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",r=n.toStringTag||"@@toStringTag";function o(n,a,r,o){var l=a&&a.prototype instanceof i?a:i,s=Object.create(l.prototype);return st(s,"_invoke",function(n,a,r){var o,i,l,s=0,u=r||[],m=!1,d={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,i=0,l=e,d.n=n,c}};function f(n,a){for(i=n,l=a,t=0;!m&&s&&!r&&t<u.length;t++){var r,o=u[t],f=d.p,v=o[2];n>3?(r=v===a)&&(l=o[(i=o[4])?5:(i=3,3)],o[4]=o[5]=e):o[0]<=f&&((r=n<2&&f<o[1])?(i=0,d.v=a,d.n=o[1]):f<v&&(r=n<3||o[0]>a||a>v)&&(o[4]=n,o[5]=a,d.n=v,i=0))}if(r||n>1)return c;throw m=!0,a}return function(r,u,v){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&f(u,v),i=u,l=v;(t=i<2?e:l)||!m;){o||(i?i<3?(i>1&&(d.n=-1),f(i,l)):d.n=l:d.v=l);try{if(s=2,o){if(i||(r="next"),t=o[r]){if(!(t=t.call(o,l)))throw TypeError("iterator result is not an object");if(!t.done)return t;l=t.value,i<2&&(i=0)}else 1===i&&(t=o.return)&&t.call(o),i<2&&(l=TypeError("The iterator does not provide a '"+r+"' method"),i=1);o=e}else if((t=(m=d.n<0)?l:n.call(a,d))!==c)break}catch(t){o=e,i=1,l=t}finally{s=1}}return{value:t,done:m}}}(n,r,o),!0),s}var c={};function i(){}function l(){}function s(){}t=Object.getPrototypeOf;var u=[][a]?t(t([][a]())):(st(t={},a,function(){return this}),t),m=s.prototype=i.prototype=Object.create(u);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,st(e,r,"GeneratorFunction")),e.prototype=Object.create(m),e}return l.prototype=s,st(m,"constructor",s),st(s,"constructor",l),l.displayName="GeneratorFunction",st(s,r,"GeneratorFunction"),st(m),st(m,r,"Generator"),st(m,a,function(){return this}),st(m,"toString",function(){return"[object Generator]"}),(lt=function(){return{w:o,m:d}})()}function st(e,t,n,a){var r=Object.defineProperty;try{r({},"",{})}catch(e){r=0}st=function(e,t,n,a){function o(t,n){st(e,t,function(e){return this._invoke(t,n,e)})}t?r?r(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},st(e,t,n,a)}function ut(e,t,n,a,r,o,c){try{var i=e[o](c),l=i.value}catch(e){return void n(e)}i.done?t(l):Promise.resolve(l).then(a,r)}function mt(e){return function(){var t=this,n=arguments;return new Promise(function(a,r){var o=e.apply(t,n);function c(e){ut(o,a,r,c,i,"next",e)}function i(e){ut(o,a,r,c,i,"throw",e)}c(void 0)})}}function dt(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,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(e,t)||ft(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 ft(e,t){if(e){if("string"==typeof e)return vt(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)?vt(e,t):void 0}}function vt(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 yt=function(){var t=dt((0,e.useState)(""),2),n=t[0],a=t[1],r=dt((0,e.useState)(!1),2),o=r[0],c=r[1],i=dt((0,e.useState)(!0),2),l=i[0],s=i[1],u=dt((0,e.useState)(null),2),m=u[0],d=u[1],f=dt((0,e.useState)({categories:[],tags:[],service_bodies:[]}),2),v=f[0],y=f[1],p=dt((0,e.useState)({categories:[],tags:[],service_bodies:[]}),2),g=p[0],h=p[1],E=A().getServiceBodyName;(0,e.useEffect)(function(){var e=function(){var e=mt(lt().m(function e(){var t,n;return lt().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,b("/subscription-options");case 1:(t=e.v)&&y({categories:t.categories||[],tags:t.tags||[],service_bodies:t.service_bodies||[]}),e.n=3;break;case 2:e.p=2,n=e.v,console.error("Failed to fetch subscription options:",n);case 3:return e.p=3,s(!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 _=function(){return g.categories.length>0||g.tags.length>0||g.service_bodies.length>0},R=function(){return v.categories.length>0||v.tags.length>0||v.service_bodies.length>0},w=function(e,t){h(function(n){var a,r=n[e]||[],o=r.includes(t)?r.filter(function(e){return e!==t}):[].concat(function(e){if(Array.isArray(e))return vt(e)}(a=r)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(a)||ft(a)||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]);return ct(ct({},n),{},it({},e,o))})},S=function(){var e=mt(lt().m(function e(t){var r,o,i;return lt().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t.preventDefault(),!R()||_()){e.n=1;break}return d({type:"error",text:"Please select at least one preference to subscribe."}),e.a(2);case 1:return c(!0),d(null),e.p=2,r={email:n},R()&&(r.preferences=g),e.n=3,b("/subscribe",{method:"POST",body:JSON.stringify(r)});case 3:(o=e.v).success?(d({type:"success",text:o.message}),a(""),h({categories:[],tags:[],service_bodies:[]})):d({type:"error",text:o.message||"An error occurred. Please try again."}),e.n=5;break;case 4:e.p=4,i=e.v,d({type:"error",text:i.message||"An error occurred. Please try again."});case 5:return e.p=5,c(!1),e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}));return function(t){return e.apply(this,arguments)}}();return l?React.createElement("div",{className:"mayo-subscribe-form"},React.createElement("p",null,"Loading...")):React.createElement("div",{className:"mayo-subscribe-form"},React.createElement("form",{onSubmit:S},React.createElement("div",{className:"mayo-subscribe-input-group"},React.createElement("input",{type:"email",value:n,onChange:function(e){return a(e.target.value)},placeholder:"Enter your email address",required:!0,disabled:o,className:"mayo-subscribe-email"})),R()&&React.createElement("div",{className:"mayo-subscribe-preferences"},React.createElement("p",{className:"mayo-subscribe-preferences-label"},"Select what you'd like to receive notifications about:"),v.categories.length>0&&React.createElement("div",{className:"mayo-subscribe-preference-group"},React.createElement("span",{className:"mayo-subscribe-preference-heading"},"Categories"),React.createElement("div",{className:"mayo-subscribe-checkboxes"},v.categories.map(function(e){return React.createElement("label",{key:e.id,className:"mayo-subscribe-checkbox"},React.createElement("input",{type:"checkbox",checked:g.categories.includes(e.id),onChange:function(){return w("categories",e.id)},disabled:o}),React.createElement("span",null,e.name))}))),v.tags.length>0&&React.createElement("div",{className:"mayo-subscribe-preference-group"},React.createElement("span",{className:"mayo-subscribe-preference-heading"},"Tags"),React.createElement("div",{className:"mayo-subscribe-checkboxes"},v.tags.map(function(e){return React.createElement("label",{key:e.id,className:"mayo-subscribe-checkbox"},React.createElement("input",{type:"checkbox",checked:g.tags.includes(e.id),onChange:function(){return w("tags",e.id)},disabled:o}),React.createElement("span",null,e.name))}))),v.service_bodies.length>0&&React.createElement("div",{className:"mayo-subscribe-preference-group"},React.createElement("span",{className:"mayo-subscribe-preference-heading"},"Service Bodies"),React.createElement("div",{className:"mayo-subscribe-checkboxes"},v.service_bodies.map(function(e){return React.createElement("label",{key:e.id,className:"mayo-subscribe-checkbox"},React.createElement("input",{type:"checkbox",checked:g.service_bodies.includes(e.id),onChange:function(){return w("service_bodies",e.id)},disabled:o}),React.createElement("span",null,E(e.id,e.source_id)||e.name||e.id))})))),React.createElement("button",{type:"submit",disabled:o||R()&&!_(),className:"mayo-subscribe-button"},o?"Subscribing...":"Subscribe"),m&&React.createElement("div",{className:"mayo-subscribe-message mayo-subscribe-message-".concat(m.type)},m.text)))};document.addEventListener("DOMContentLoaded",function(){var t=document.getElementById("mayo-event-form"),n=document.querySelectorAll('[id^="mayo-event-list-"]'),a=document.getElementById("mayo-details-root"),r=document.getElementById("mayo-archive-root"),o=document.getElementById("mayo-announcement-details-root"),c=function(t,n){if(n){var a=n.dataset.instance,r=window["mayoEventSettings_".concat(a)]||{};n.classList.contains("mayo-widget-list")?(0,e.render)(React.createElement(j,null,React.createElement(t,{widget:!0,settings:r})),n):(0,e.render)(React.createElement(j,null,React.createElement(t,{settings:r})),n)}};n.forEach(function(e){c(pe,e)}),c(H,t),c(Te,a),c(Re,r),c(qe,o),document.querySelectorAll(".mayo-announcement-container").forEach(function(t){var n=t.dataset.instance,a="mayoAnnouncementSettings_".concat(n),r=window[a]||{};(0,e.render)(React.createElement(j,null,React.createElement(Le,{settings:r})),t)}),document.querySelectorAll(".mayo-subscribe-container").forEach(function(t){(0,e.render)(React.createElement(j,null,React.createElement(yt,null)),t)});var i=document.getElementById("mayo-announcement-form");i&&(0,e.render)(React.createElement(j,null,React.createElement(at,null)),i)})})();2 (()=>{"use strict";const e=wp.element,t=React;function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function a(){var e,t,n="function"==typeof Symbol?Symbol:{},o=n.iterator||"@@iterator",c=n.toStringTag||"@@toStringTag";function i(n,a,o,c){var i=a&&a.prototype instanceof s?a:s,u=Object.create(i.prototype);return r(u,"_invoke",function(n,a,r){var o,c,i,s=0,u=r||[],m=!1,d={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,c=0,i=e,d.n=n,l}};function f(n,a){for(c=n,i=a,t=0;!m&&s&&!r&&t<u.length;t++){var r,o=u[t],f=d.p,v=o[2];n>3?(r=v===a)&&(i=o[(c=o[4])?5:(c=3,3)],o[4]=o[5]=e):o[0]<=f&&((r=n<2&&f<o[1])?(c=0,d.v=a,d.n=o[1]):f<v&&(r=n<3||o[0]>a||a>v)&&(o[4]=n,o[5]=a,d.n=v,c=0))}if(r||n>1)return l;throw m=!0,a}return function(r,u,v){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&f(u,v),c=u,i=v;(t=c<2?e:i)||!m;){o||(c?c<3?(c>1&&(d.n=-1),f(c,i)):d.n=i:d.v=i);try{if(s=2,o){if(c||(r="next"),t=o[r]){if(!(t=t.call(o,i)))throw TypeError("iterator result is not an object");if(!t.done)return t;i=t.value,c<2&&(c=0)}else 1===c&&(t=o.return)&&t.call(o),c<2&&(i=TypeError("The iterator does not provide a '"+r+"' method"),c=1);o=e}else if((t=(m=d.n<0)?i:n.call(a,d))!==l)break}catch(t){o=e,c=1,i=t}finally{s=1}}return{value:t,done:m}}}(n,o,c),!0),u}var l={};function s(){}function u(){}function m(){}t=Object.getPrototypeOf;var d=[][o]?t(t([][o]())):(r(t={},o,function(){return this}),t),f=m.prototype=s.prototype=Object.create(d);function v(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,m):(e.__proto__=m,r(e,c,"GeneratorFunction")),e.prototype=Object.create(f),e}return u.prototype=m,r(f,"constructor",m),r(m,"constructor",u),u.displayName="GeneratorFunction",r(m,c,"GeneratorFunction"),r(f),r(f,c,"Generator"),r(f,o,function(){return this}),r(f,"toString",function(){return"[object Generator]"}),(a=function(){return{w:i,m:v}})()}function r(e,t,n,a){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}r=function(e,t,n,a){function c(t,n){r(e,t,function(e){return this._invoke(t,n,e)})}t?o?o(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 o(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 c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach(function(t){i(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function i(e,t,a){return(t=function(e){var t=function(e){if("object"!=n(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var a=t.call(e,"string");if("object"!=n(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==n(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t,n,a,r,o,c){try{var i=e[o](c),l=i.value}catch(e){return void n(e)}i.done?t(l):Promise.resolve(l).then(a,r)}function s(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,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return u(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)?u(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 u(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 m=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],d=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],f=function(e){return e.split("").map(function(e){var t=e.codePointAt(0);return t>127?"u".concat(t):e}).join("")},v=function(e,t){if(!e)return"";if("24hour"===t)return e;var n=s(e.split(":"),2),a=n[0],r=n[1],o=parseInt(a),c=o>=12?"PM":"AM";return"".concat(o%12||12,":").concat(r," ").concat(c)},y=function(e){try{return(new Date).toLocaleTimeString("en-US",{timeZone:e,timeZoneName:"short"}).split(" ")[2]}catch(t){return e.split("/").pop().replace("_"," ")}},p=function(e,t){var n=e.meta,a=n.event_start_date,r=n.event_end_date,o=n.event_start_time,c=n.event_end_time,i=n.timezone;if(!a)return"";if(!o)return"";var l="";if(r&&a!==r){var s=new Date(a+"T00:00:00"),u=new Date(r+"T00:00:00"),m="".concat(d[s.getMonth()]," ").concat(s.getDate()),f="".concat(d[u.getMonth()]," ").concat(u.getDate());l="".concat(m,", ").concat(v(o,t)," - ").concat(f,", ").concat(v(c||o,t))}else l=v(o,t),c&&(l+=" - ".concat(v(c,t)));return i&&(l+=" (".concat(y(i),")")),l},g=function(e){if(!e||"none"===e.type)return"";var t=e.type,n=e.interval,a=e.weekdays,r=void 0===a?[]:a,o=e.endDate,c=e.monthlyType,i=e.monthlyWeekday,l=e.monthlyDate,u="This event repeats ";switch(t){case"daily":u+=n>1?"every ".concat(n," days"):"daily";break;case"weekly":if(u+=n>1?"every ".concat(n," weeks"):"weekly",r&&r.length){var d=r.map(function(e){return m[parseInt(e)]});u+=" on ".concat(d.join(", "))}break;case"monthly":if(u+=n>1?"every ".concat(n," months"):"monthly","date"===c&&l)u+=" on day ".concat(l);else if("weekday"===c&&i){var f=s(i.split(",").map(Number),2),v=f[0],y=f[1];u+=" on the ".concat(v>0?["first","second","third","fourth","fifth"][v-1]:"last"," ").concat(m[y])}break;default:return""}return o&&(u+=" until ".concat(o)),u},h=function(){var e,t=(e=a().m(function e(t){var n,r,o,i,l,s,u,m,d,f=arguments;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:return o=f.length>1&&void 0!==f[1]?f[1]:{},(i=(null===(n=window.mayoApiSettings)||void 0===n?void 0:n.root)||(null===(r=window.wpApiSettings)||void 0===r?void 0:r.root)||"/wp-json/").endsWith("/")||(i+="/"),l="".concat(i,"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=c(c({},{credentials:"same-origin",headers:{"Content-Type":"application/json","X-WP-Nonce":s}}),o),e.p=1,e.n=2,fetch(l,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,r){var o=e.apply(t,n);function c(e){l(o,a,r,c,i,"next",e)}function i(e){l(o,a,r,c,i,"throw",e)}c(void 0)})});return function(e){return t.apply(this,arguments)}}();function b(e){return b="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},b(e)}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 _(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){R(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 R(e,t,n){return(t=function(e){var t=function(e){if("object"!=b(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=b(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==b(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function w(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",r=n.toStringTag||"@@toStringTag";function o(n,a,r,o){var l=a&&a.prototype instanceof i?a:i,s=Object.create(l.prototype);return S(s,"_invoke",function(n,a,r){var o,i,l,s=0,u=r||[],m=!1,d={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,i=0,l=e,d.n=n,c}};function f(n,a){for(i=n,l=a,t=0;!m&&s&&!r&&t<u.length;t++){var r,o=u[t],f=d.p,v=o[2];n>3?(r=v===a)&&(l=o[(i=o[4])?5:(i=3,3)],o[4]=o[5]=e):o[0]<=f&&((r=n<2&&f<o[1])?(i=0,d.v=a,d.n=o[1]):f<v&&(r=n<3||o[0]>a||a>v)&&(o[4]=n,o[5]=a,d.n=v,i=0))}if(r||n>1)return c;throw m=!0,a}return function(r,u,v){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&f(u,v),i=u,l=v;(t=i<2?e:l)||!m;){o||(i?i<3?(i>1&&(d.n=-1),f(i,l)):d.n=l:d.v=l);try{if(s=2,o){if(i||(r="next"),t=o[r]){if(!(t=t.call(o,l)))throw TypeError("iterator result is not an object");if(!t.done)return t;l=t.value,i<2&&(i=0)}else 1===i&&(t=o.return)&&t.call(o),i<2&&(l=TypeError("The iterator does not provide a '"+r+"' method"),i=1);o=e}else if((t=(m=d.n<0)?l:n.call(a,d))!==c)break}catch(t){o=e,i=1,l=t}finally{s=1}}return{value:t,done:m}}}(n,r,o),!0),s}var c={};function i(){}function l(){}function s(){}t=Object.getPrototypeOf;var u=[][a]?t(t([][a]())):(S(t={},a,function(){return this}),t),m=s.prototype=i.prototype=Object.create(u);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,S(e,r,"GeneratorFunction")),e.prototype=Object.create(m),e}return l.prototype=s,S(m,"constructor",s),S(s,"constructor",l),l.displayName="GeneratorFunction",S(s,r,"GeneratorFunction"),S(m),S(m,r,"Generator"),S(m,a,function(){return this}),S(m,"toString",function(){return"[object Generator]"}),(w=function(){return{w:o,m:d}})()}function S(e,t,n,a){var r=Object.defineProperty;try{r({},"",{})}catch(e){r=0}S=function(e,t,n,a){function o(t,n){S(e,t,function(e){return this._invoke(t,n,e)})}t?r?r(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},S(e,t,n,a)}function N(e,t,n,a,r,o,c){try{var i=e[o](c),l=i.value}catch(e){return void n(e)}i.done?t(l):Promise.resolve(l).then(a,r)}function k(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,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return O(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)?O(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 O(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 T=(0,t.createContext)(),A=function(){return(0,t.useContext)(T)},j=function(e){var n=e.children,a=k((0,t.useState)([]),2),r=a[0],o=a[1],c=k((0,t.useState)({}),2),i=c[0],l=c[1],s=k((0,t.useState)(!0),2),u=s[0],m=s[1];return(0,t.useEffect)(function(){var e=function(){var e,t=(e=w().m(function e(){var t,n,a,r,c,i;return w().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,m(!0),e.n=1,h("/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)}),o(c),e.n=6;break;case 5:e.p=5,i=e.v,console.error("Error fetching service bodies:",i),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,r){var o=e.apply(t,n);function c(e){N(o,a,r,c,i,"next",e)}function i(e){N(o,a,r,c,i,"throw",e)}c(void 0)})});return function(){return t.apply(this,arguments)}}();e()},[]),React.createElement(T.Provider,{value:{serviceBodies:r,getServiceBodyName:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"local";if("local"===t){var n=r.find(function(t){return t.id===e});return(null==n?void 0:n.name)||"Out of Area"}if(i[t]){var a=i[t].find(function(t){return t.id===e});return(null==a?void 0:a.name)||"Out of Area"}return"Out of Area"},updateExternalServiceBodies:function(e,t){t&&Array.isArray(t)&&0!==t.length&&l(function(n){return _(_({},n),{},R({},e,t))})}}},u?React.createElement("div",null,"Loading..."):n)},x=[{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"}],C=function(){try{var e=Intl.DateTimeFormat().resolvedOptions().timeZone;return x.find(function(t){return t.value===e})?e:"America/New_York"}catch(e){return"America/New_York"}};function P(e){return P="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},P(e)}function D(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",r=n.toStringTag||"@@toStringTag";function o(n,a,r,o){var l=a&&a.prototype instanceof i?a:i,s=Object.create(l.prototype);return F(s,"_invoke",function(n,a,r){var o,i,l,s=0,u=r||[],m=!1,d={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,i=0,l=e,d.n=n,c}};function f(n,a){for(i=n,l=a,t=0;!m&&s&&!r&&t<u.length;t++){var r,o=u[t],f=d.p,v=o[2];n>3?(r=v===a)&&(l=o[(i=o[4])?5:(i=3,3)],o[4]=o[5]=e):o[0]<=f&&((r=n<2&&f<o[1])?(i=0,d.v=a,d.n=o[1]):f<v&&(r=n<3||o[0]>a||a>v)&&(o[4]=n,o[5]=a,d.n=v,i=0))}if(r||n>1)return c;throw m=!0,a}return function(r,u,v){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&f(u,v),i=u,l=v;(t=i<2?e:l)||!m;){o||(i?i<3?(i>1&&(d.n=-1),f(i,l)):d.n=l:d.v=l);try{if(s=2,o){if(i||(r="next"),t=o[r]){if(!(t=t.call(o,l)))throw TypeError("iterator result is not an object");if(!t.done)return t;l=t.value,i<2&&(i=0)}else 1===i&&(t=o.return)&&t.call(o),i<2&&(l=TypeError("The iterator does not provide a '"+r+"' method"),i=1);o=e}else if((t=(m=d.n<0)?l:n.call(a,d))!==c)break}catch(t){o=e,i=1,l=t}finally{s=1}}return{value:t,done:m}}}(n,r,o),!0),s}var c={};function i(){}function l(){}function s(){}t=Object.getPrototypeOf;var u=[][a]?t(t([][a]())):(F(t={},a,function(){return this}),t),m=s.prototype=i.prototype=Object.create(u);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,F(e,r,"GeneratorFunction")),e.prototype=Object.create(m),e}return l.prototype=s,F(m,"constructor",s),F(s,"constructor",l),l.displayName="GeneratorFunction",F(s,r,"GeneratorFunction"),F(m),F(m,r,"Generator"),F(m,a,function(){return this}),F(m,"toString",function(){return"[object Generator]"}),(D=function(){return{w:o,m:d}})()}function F(e,t,n,a){var r=Object.defineProperty;try{r({},"",{})}catch(e){r=0}F=function(e,t,n,a){function o(t,n){F(e,t,function(e){return this._invoke(t,n,e)})}t?r?r(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},F(e,t,n,a)}function I(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 M(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?I(Object(n),!0).forEach(function(t){L(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):I(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function L(e,t,n){return(t=function(e){var t=function(e){if("object"!=P(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=P(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==P(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function G(e,t,n,a,r,o,c){try{var i=e[o](c),l=i.value}catch(e){return void n(e)}i.done?t(l):Promise.resolve(l).then(a,r)}function B(e){return function(){var t=this,n=arguments;return new Promise(function(a,r){var o=e.apply(t,n);function c(e){G(o,a,r,c,i,"next",e)}function i(e){G(o,a,r,c,i,"throw",e)}c(void 0)})}}function U(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,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(e,t)||W(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 z(e){return function(e){if(Array.isArray(e))return q(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||W(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 W(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}}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}const H=function(){var t,n,a,r,o,c,i=document.getElementById("mayo-event-form"),l=null==i||null===(t=i.dataset)||void 0===t?void 0:t.settings,s=window[l]||{},u=(null==i||null===(n=i.dataset)||void 0===n?void 0:n.categories)||"",m=(0,e.useMemo)(function(){return u?u.split(",").map(function(e){return e.trim().toLowerCase()}):[]},[u]),d=(0,e.useMemo)(function(){return m.filter(function(e){return!e.startsWith("-")})},[m]),f=(0,e.useMemo)(function(){return m.filter(function(e){return e.startsWith("-")}).map(function(e){return e.substring(1)})},[m]),v=(null==i||null===(a=i.dataset)||void 0===a?void 0:a.tags)||"",y=(0,e.useMemo)(function(){return v?v.split(",").map(function(e){return e.trim().toLowerCase()}):[]},[v]),p=(0,e.useMemo)(function(){return y.filter(function(e){return!e.startsWith("-")})},[y]),g=(0,e.useMemo)(function(){return y.filter(function(e){return e.startsWith("-")}).map(function(e){return e.substring(1)})},[y]),b=function(e){var t=document.createElement("textarea");return t.innerHTML=e,t.value},E=s.additionalRequiredFields?s.additionalRequiredFields.split(",").map(function(e){return e.trim()}):[],_=[].concat(["event_name","event_type","service_body","email","event_start_date","event_start_time","event_end_time","event_end_date","timezone"],z(E)),R=U((0,e.useState)({event_name:"",event_type:"",event_start_date:"",event_end_date:"",event_start_time:"",event_end_time:"",timezone:C(),description:"",flyer:null,location_name:"",location_address:"",location_details:"",categories:[],tags:[],service_body:"",email:"",contact_name:"",recurring_pattern:{type:"none",interval:1,weekdays:[],endDate:"",monthlyType:"date",monthlyDate:"",monthlyWeekday:""}}),2),w=R[0],S=R[1],N=U((0,e.useState)(!1),2),k=N[0],O=N[1],T=U((0,e.useState)(null),2),j=T[0],P=T[1],F=U((0,e.useState)([]),2),I=F[0],G=F[1],W=U((0,e.useState)([]),2),q=W[0],H=W[1],J=U((0,e.useState)(null),2),Y=J[0],V=(J[1],A().serviceBodies),$=U((0,e.useState)(null),2),Z=$[0],K=$[1],X=U((0,e.useState)(!1),2),Q=X[0],ee=X[1],te=U((0,e.useState)({default_service_bodies:""}),2),ne=te[0],ae=te[1];(0,e.useEffect)(function(){var e=function(){var e=B(D().m(function e(){var t,n,a,r,o;return D().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,h("/settings");case 1:n=e.v,a={default_service_bodies:n.default_service_bodies||""},void 0!==s.defaultServiceBodies&&""!==s.defaultServiceBodies&&(a.default_service_bodies=s.defaultServiceBodies),ae(a),(r=null===(t=a.default_service_bodies)||void 0===t?void 0:t.split(",").map(function(e){return e.trim()}).filter(function(e){return e}))&&1===r.length&&S(function(e){return M(M({},e),{},{service_body:r[0]})}),e.n=3;break;case 2:e.p=2,o=e.v,console.error("Error fetching service body settings:",o);case 3:return e.a(2)}},e,null,[[0,2]])}));return function(){return e.apply(this,arguments)}}();e()},[s]),(0,e.useEffect)(function(){var e=function(){var e=B(D().m(function e(){var t,n,a,r,o,c,i,l,s;return D().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,Promise.all([fetch("/wp-json/wp/v2/categories?hide_empty=false&per_page=100"),fetch("/wp-json/wp/v2/tags?hide_empty=false&per_page=100")]);case 1:if(t=e.v,n=U(t,2),a=n[0],r=n[1],a.ok&&r.ok){e.n=2;break}throw new Error("Failed to fetch taxonomies");case 2:return e.n=3,a.json();case 3:return o=e.v,e.n=4,r.json();case 4:c=e.v,i=o.filter(function(e){var t=(e.slug||"").toLowerCase();return d.length>0?d.includes(t):!(f.length>0&&f.includes(t))}),l=c.filter(function(e){var t=(e.slug||"").toLowerCase();return p.length>0?p.includes(t):!(g.length>0&&g.includes(t))}),G(Array.isArray(i)?i:[]),H(Array.isArray(l)?l:[]),e.n=6;break;case 5:e.p=5,s=e.v,console.error("Error fetching taxonomies:",s),G([]),H([]);case 6:return e.a(2)}},e,null,[[0,5]])}));return function(){return e.apply(this,arguments)}}();e()},[d,f,p,g]);var re,oe,ce=function(){var e=B(D().m(function e(t){var n,a,r,o,c,i,l,s,u,m,d,f,v,y;return D().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t.preventDefault(),O(!0),P(null),e.p=1,!w.flyer){e.n=2;break}if(o=["image/jpeg","image/png","image/gif"],c=w.flyer.name.split(".").pop().toLowerCase(),i=["jpg","jpeg","png","gif"],o.includes(w.flyer.type)&&i.includes(c)){e.n=2;break}throw new Error("You did not attach a valid image file, so one will not be submitted. Please choose a valid image file (JPG, PNG, or GIF)");case 2:if(!((l=_.filter(function(e){return"flyer"===e?!w.flyer:!w[e]})).length>0)){e.n=3;break}throw new Error("Please fill in all required fields: ".concat(l.join(", ")));case 3:return s=new FormData,Object.keys(w).forEach(function(e){"flyer"===e&&w[e]instanceof File?s.append("flyer",w[e]):"categories"===e||"tags"===e?s.append(e,w[e].join(",")):"recurring_pattern"===e?s.append(e,JSON.stringify(w[e])):null!=w[e]&&""!==w[e]&&s.append(e,w[e])}),u=(null===(n=window.mayoApiSettings)||void 0===n?void 0:n.nonce)||(null===(a=document.querySelector("#_wpnonce"))||void 0===a?void 0:a.value)||(null===(r=window.wpApiSettings)||void 0===r?void 0:r.nonce),e.n=4,h("/submit-event",{method:"POST",body:s,credentials:"same-origin",headers:{"X-WP-Nonce":u}});case 4:if(!(m=e.v).id&&!m.success){e.n=5;break}P({type:"success",text:"Event submitted successfully!"}),f=null===(d=ne.default_service_bodies)||void 0===d?void 0:d.split(",").map(function(e){return e.trim()}).filter(function(e){return e}),v=f&&1===f.length?f[0]:"",console.log("Form reset - serviceBodySettings:",ne),console.log("Form reset - defaultIds:",f),console.log("Form reset - preservedServiceBody:",v),S({event_name:"",event_type:"",event_start_date:"",event_end_date:"",event_start_time:"",event_end_time:"",timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,description:"",flyer:null,location_name:"",location_address:"",location_details:"",categories:[],tags:[],service_body:v,email:"",contact_name:"",recurring_pattern:{type:"none",interval:1,weekdays:[],endDate:"",monthlyType:"date",monthlyDate:"",monthlyWeekday:""}}),K(null),e.n=6;break;case 5:throw new Error(m.message||"Failed to submit event");case 6:e.n=8;break;case 7:e.p=7,y=e.v,P({type:"error",text:y.message||"Error submitting form"});case 8:return e.p=8,O(!1),e.f(8);case 9:return e.a(2)}},e,null,[[1,7,8,9]])}));return function(t){return e.apply(this,arguments)}}(),ie=function(e){var t=e.target,n=t.name,a=t.value,r=t.files;if(r&&r[0]){var o=r[0],c=o.name.split(".").pop().toLowerCase();if(!["image/jpeg","image/png","image/gif"].includes(o.type)||!["jpg","jpeg","png","gif"].includes(c))return P({type:"error",text:"The selected file is not a valid image, so one will not be submitted. Please use a valid image file (JPG, PNG, or GIF)"}),e.target.value="",S(function(e){return M(M({},e),{},{flyer:null})}),void K(null);var i=new FileReader;i.onload=function(t){var n=new Image;n.onload=function(){K("image"),S(function(e){return M(M({},e),{},{flyer:o})}),P(null)},n.onerror=function(){P({type:"error",text:"The selected file is not a valid image, so one will not be submitted. Please choose a valid image file (JPG, PNG, or GIF)"}),e.target.value="",S(function(e){return M(M({},e),{},{flyer:null})}),K(null)},n.src=t.target.result},i.onerror=function(){P({type:"error",text:"Error reading the file"}),e.target.value="",S(function(e){return M(M({},e),{},{flyer:null})}),K(null)},i.readAsDataURL(o)}else S(function(e){return M(M({},e),{},L({},n,a))})},le=function(e){return _.includes(e)},se=function(){return w.event_start_date?new Date(w.event_start_date).getDate().toString():""},ue=function(){if(w.event_start_date){var e=new Date(w.event_start_date),t=Math.ceil(e.getDate()/7);return"".concat(t,",").concat(e.getDay())}return""},me=function(e){S(function(t){return M(M({},t),{},{recurring_pattern:M(M({},t.recurring_pattern),e)})})},de=[{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"}];return Y?React.createElement("div",{className:"mayo-error"},Y):React.createElement("div",{className:"mayo-event-form"},React.createElement("form",{onSubmit:ce},React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"event_name"},"Event Name ",le("event_name")&&"*"),React.createElement("input",{type:"text",id:"event_name",name:"event_name",value:w.event_name,onChange:ie,required:le("event_name")})),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"event_type"},"Event Type ",le("event_type")&&"*"),React.createElement("select",{id:"event_type",name:"event_type",value:w.event_type,onChange:ie,required:le("event_type")},React.createElement("option",{value:""},"Select Event Type"),React.createElement("option",{value:"Service"},"Service"),React.createElement("option",{value:"Activity"},"Activity"))),(!ne.default_service_bodies||(null===(oe=ne.default_service_bodies)||void 0===oe?void 0:oe.split(",").map(function(e){return e.trim()}).filter(function(e){return e})).length>1)&&React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"service_body"},"Service Body *"),React.createElement("select",{id:"service_body",name:"service_body",value:w.service_body,onChange:function(e){S(function(t){return M(M({},t),{},{service_body:e.target.value})})},required:!0},React.createElement("option",{value:""},"Select a service body"),(!ne.default_service_bodies||ne.default_service_bodies.includes("0"))&&React.createElement("option",{value:"0"},"Unaffiliated (0)"),function(){if(!ne.default_service_bodies)return V;var e=ne.default_service_bodies.split(",").map(function(e){return e.trim()}).filter(function(e){return e});return V.filter(function(t){return e.includes(t.id.toString())})}().map(function(e){return React.createElement("option",{key:e.id,value:e.id},e.name," (",e.id,")")}))),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"contact_name"},"Point of Contact Name (Private) *"),React.createElement("input",{type:"text",id:"contact_name",name:"contact_name",value:w.contact_name,onChange:ie,required:!0,placeholder:"Your name (will not be displayed publicly)"})),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"email"},"Point of Contact Email (Private) *"),React.createElement("input",{type:"email",id:"email",name:"email",value:w.email,onChange:ie,required:!0,placeholder:"Your email address (will not be displayed publicly)"})),React.createElement("div",{className:"mayo-datetime-group"},React.createElement("div",{className:"mayo-form-field"},React.createElement("label",null,"Start Date/Time *"),React.createElement("div",{className:"mayo-datetime-inputs"},React.createElement("input",{type:"date",id:"event_start_date",name:"event_start_date",value:w.event_start_date,onChange:ie,required:!0}),React.createElement("input",{type:"time",id:"event_start_time",name:"event_start_time",value:w.event_start_time,onChange:ie,required:!0}))),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",null,"End Date/Time *"),React.createElement("div",{className:"mayo-datetime-inputs"},React.createElement("input",{type:"date",id:"event_end_date",name:"event_end_date",value:w.event_end_date,onChange:ie}),React.createElement("input",{type:"time",id:"event_end_time",name:"event_end_time",value:w.event_end_time,onChange:ie,required:!0})))),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"timezone"},"Timezone ",le("timezone")&&"*"),React.createElement("select",{id:"timezone",name:"timezone",value:w.timezone,onChange:ie,required:le("timezone")},Object.entries((re={},x.forEach(function(e){re[e.region]||(re[e.region]=[]),re[e.region].push(e)}),re)).map(function(e){var t=U(e,2),n=t[0],a=t[1];return React.createElement("optgroup",{key:n,label:n},a.map(function(e){return React.createElement("option",{key:e.value,value:e.value},e.label)}))}))),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",null,"Recurring Pattern"),React.createElement("div",{className:"mayo-recurring-pattern"},React.createElement("select",{value:w.recurring_pattern.type,onChange:function(e){var t=e.target.value;me({type:t,interval:1,weekdays:[],endDate:"",monthlyType:"date",monthlyDate:"monthly"===t?se():"",monthlyWeekday:"monthly"===t?ue():""}),ee("none"!==t)}},React.createElement("option",{value:"none"},"No Recurrence"),React.createElement("option",{value:"daily"},"Daily"),React.createElement("option",{value:"weekly"},"Weekly"),React.createElement("option",{value:"monthly"},"Monthly")),Q&&React.createElement("div",{className:"mayo-recurring-options"},React.createElement("div",{className:"mayo-recurring-interval"},React.createElement("label",null,"Repeat every"),React.createElement("input",{type:"number",min:"1",value:w.recurring_pattern.interval,onChange:function(e){return me({interval:parseInt(e.target.value)})}}),React.createElement("span",null,"daily"===w.recurring_pattern.type?"days":"weekly"===w.recurring_pattern.type?"weeks":"months")),"weekly"===w.recurring_pattern.type&&React.createElement("div",{className:"mayo-weekday-controls"},React.createElement("label",null,"On these days"),de.map(function(e){return React.createElement("label",{key:e.value,className:"mayo-weekday-checkbox"},React.createElement("input",{type:"checkbox",checked:w.recurring_pattern.weekdays.includes(e.value),onChange:function(t){var n=t.target.checked?[].concat(z(w.recurring_pattern.weekdays),[e.value]):w.recurring_pattern.weekdays.filter(function(t){return t!==e.value});me({weekdays:n})}}),e.label)})),"monthly"===w.recurring_pattern.type&&React.createElement("div",{className:"mayo-monthly-pattern"},React.createElement("div",{className:"mayo-monthly-type"},React.createElement("label",null,"Monthly Pattern"),React.createElement("div",{className:"mayo-radio-group"},React.createElement("label",null,React.createElement("input",{type:"radio",name:"monthlyType",value:"date",checked:"date"===w.recurring_pattern.monthlyType,onChange:function(){return me({monthlyType:"date",monthlyDate:se(),monthlyWeekday:""})}}),"On a specific date"),React.createElement("label",null,React.createElement("input",{type:"radio",name:"monthlyType",value:"weekday",checked:"weekday"===w.recurring_pattern.monthlyType,onChange:function(){return me({monthlyType:"weekday",monthlyDate:"",monthlyWeekday:ue()})}}),"On a specific day"))),"date"===w.recurring_pattern.monthlyType&&React.createElement("div",{className:"mayo-monthly-date"},React.createElement("label",null,"Day of month"),React.createElement("input",{type:"number",min:"1",max:"31",value:w.recurring_pattern.monthlyDate||se(),onChange:function(e){return me({monthlyDate:e.target.value})}})),"weekday"===w.recurring_pattern.monthlyType&&React.createElement("div",{className:"mayo-monthly-weekday"},React.createElement("div",{className:"mayo-week-select"},React.createElement("label",null,"Week"),React.createElement("select",{value:(null===(r=w.recurring_pattern.monthlyWeekday)||void 0===r?void 0:r.split(",")[0])||"1",onChange:function(e){var t,n=(null===(t=w.recurring_pattern.monthlyWeekday)||void 0===t?void 0:t.split(",")[1])||"0";me({monthlyWeekday:"".concat(e.target.value,",").concat(n)})}},[{value:"1",label:"First"},{value:"2",label:"Second"},{value:"3",label:"Third"},{value:"4",label:"Fourth"},{value:"5",label:"Fifth"},{value:"-1",label:"Last"}].map(function(e){return React.createElement("option",{key:e.value,value:e.value},e.label)}))),React.createElement("div",{className:"mayo-day-select"},React.createElement("label",null,"Day"),React.createElement("select",{value:(null===(o=w.recurring_pattern.monthlyWeekday)||void 0===o?void 0:o.split(",")[1])||"0",onChange:function(e){var t,n=(null===(t=w.recurring_pattern.monthlyWeekday)||void 0===t?void 0:t.split(",")[0])||"1";me({monthlyWeekday:"".concat(n,",").concat(e.target.value)})}},de.map(function(e){return React.createElement("option",{key:e.value,value:e.value},e.label)}))))),React.createElement("div",{className:"mayo-recurring-end-date"},React.createElement("label",null,"End Date (optional)"),React.createElement("input",{type:"date",value:w.recurring_pattern.endDate,onChange:function(e){return me({endDate:e.target.value})}}))))),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"description"},"Description ",le("description")&&"*"),React.createElement("textarea",{id:"description",name:"description",value:w.description,onChange:ie,required:le("description")})),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",null,"Event Flyer ",le("flyer")&&"*"),React.createElement("div",{className:"mayo-upload-section"},!Z&&React.createElement(React.Fragment,null,React.createElement("input",{type:"file",id:"flyer-upload",name:"flyer",accept:"image/*",onChange:ie,required:le("flyer"),className:"mayo-file-input"}),React.createElement("label",{htmlFor:"flyer-upload",className:"mayo-upload-button"},"Upload Flyer"),React.createElement("p",{className:"mayo-upload-info"},"Supported file types: Images (.jpg, .jpeg, .png, .gif)",le("flyer")&&" (Required)"),j&&"error"===j.type&&j.text.includes("image")&&React.createElement("p",{className:"mayo-upload-error"},j.text)),Z&&React.createElement("div",{className:"mayo-upload-preview"},React.createElement("p",null,"Selected ","Image"===Z,": "," ",(null===(c=w.flyer)||void 0===c?void 0:c.name)||"No file selected"),React.createElement("button",{type:"button",onClick:function(){S(function(e){return M(M({},e),{},{flyer:null})}),K(null)},className:"mayo-clear-upload"},"Clear Upload")))),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"location_name"},"Location Name"),React.createElement("input",{type:"text",id:"location_name",name:"location_name",value:w.location_name,onChange:ie})),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"location_address"},"Address"),React.createElement("input",{type:"text",id:"location_address",name:"location_address",value:w.location_address,onChange:ie})),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"location_details"},"Location Details"),React.createElement("textarea",{id:"location_details",name:"location_details",value:w.location_details,onChange:ie,placeholder:"Additional details about the location (e.g., parking, entrance info)"})),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",null,"Categories"),React.createElement("div",{className:"mayo-taxonomy-list"},Array.isArray(I)&&I.map(function(e){return React.createElement("label",{key:null==e?void 0:e.id,className:"mayo-taxonomy-item"},React.createElement("input",{type:"checkbox",checked:w.categories.includes(null==e?void 0:e.id),onChange:function(t){var n=t.target.checked?[].concat(z(w.categories),[null==e?void 0:e.id]):w.categories.filter(function(t){return t!==(null==e?void 0:e.id)});S(M(M({},w),{},{categories:n}))}}),null!=e&&e.name?b(e.name):"Unnamed Category")}))),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",null,"Tags"),React.createElement("div",{className:"mayo-taxonomy-list"},Array.isArray(q)&&q.map(function(e){return React.createElement("label",{key:(null==e?void 0:e.id)||"default",className:"mayo-taxonomy-item"},React.createElement("input",{type:"checkbox",checked:w.tags.includes(null==e?void 0:e.name),onChange:function(t){var n=t.target.checked?[].concat(z(w.tags),[null==e?void 0:e.name]):w.tags.filter(function(t){return t!==(null==e?void 0:e.name)});S(M(M({},w),{},{tags:n}))}}),null!=e&&e.name?b(e.name):"Unnamed Tag")}))),React.createElement("button",{type:"submit",disabled:k,className:"mayo-submit-button"},k?"Submitting...":"Submit Event"),j&&React.createElement("div",{className:"mayo-message mayo-message-".concat(j.type)},"string"==typeof j.text?j.text:"An error occurred while submitting the form. Please try again.")))},J=function(e){var t=e.address,n=e.className,a=void 0===n?"mayo-location-address":n;if(!t)return null;var r=t.match(/(https?:\/\/[^\s]+)/g);return r&&r.length>0?React.createElement("a",{href:r[0],target:"_blank",rel:"noopener noreferrer",className:a,onClick:function(e){return e.stopPropagation()}},t):React.createElement("a",{href:"https://maps.google.com?q=".concat(encodeURIComponent(t)),target:"_blank",rel:"noopener noreferrer",className:a,onClick:function(e){return e.stopPropagation()}},t)};function Y(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 V=function(t){var n,a,r,o,c=t.event,i=t.timeFormat,l=t.forceExpanded,s=(r=(0,e.useState)(!1),o=2,function(e){if(Array.isArray(e))return e}(r)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(r,o)||function(e,t){if(e){if("string"==typeof e)return Y(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)?Y(e,t):void 0}}(r,o)||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.")}()),u=s[0],h=s[1];(0,e.useEffect)(function(){h(l)},[l]);var b=c.meta.event_start_date&&""!==c.meta.event_start_date&&!isNaN(new Date(c.meta.event_start_date+"T00:00:00").getTime()),E=b?new Date(c.meta.event_start_date+"T00:00:00"):null,_=c.meta.event_end_date&&c.meta.event_start_date!==c.meta.event_end_date,R=_?new Date(c.meta.event_end_date+"T00:00:00"):null,w=A(),S=w.getServiceBodyName,N=w.updateExternalServiceBodies;(0,e.useEffect)(function(){c.external_source&&c.external_source.service_bodies&&N(c.external_source.id,c.external_source.service_bodies)},[null===(n=c.external_source)||void 0===n?void 0:n.id,null===(a=c.external_source)||void 0===a?void 0:a.service_bodies,N]);var k=c.categories.map(function(e){return"mayo-event-category-".concat(f(e.name).toLowerCase().replace(/\s+/g,"-"))}).join(" "),O=c.tags.map(function(e){return"mayo-event-tag-".concat(f(e.name).toLowerCase().replace(/\s+/g,"-"))}).join(" "),T=c.meta.event_type?"mayo-event-type-".concat(f(c.meta.event_type).toLowerCase().replace(/\s+/g,"-")):"",j=c.external_source?c.external_source.id:"local",x=["mayo-event-card",k,O,T,"mayo-event-service-body-".concat(f(S(c.meta.service_body,j)).toLowerCase().replace(/\s+/g,"-"))].filter(Boolean).join(" ");return React.createElement("div",{className:x},React.createElement("div",{className:"mayo-event-header",onClick:function(){return h(!u)}},React.createElement("div",{className:"mayo-event-date-badge"},b?React.createElement(React.Fragment,null,_?React.createElement(React.Fragment,null,React.createElement("span",{className:"mayo-event-day-name"},m[E.getDay()]),React.createElement("span",{className:"mayo-event-day-number"},E.getDate()),React.createElement("span",{className:"mayo-event-month"},d[E.getMonth()],React.createElement("span",{className:"mayo-event-year"},E.getFullYear())),React.createElement("span",{className:"mayo-event-day-name"},m[R.getDay()]),React.createElement("span",{className:"mayo-event-day-number"},R.getDate()),React.createElement("span",{className:"mayo-event-month"},d[R.getMonth()],React.createElement("span",{className:"mayo-event-year"},R.getFullYear()))):React.createElement(React.Fragment,null,React.createElement("span",{className:"mayo-event-day-name"},m[E.getDay()]),React.createElement("span",{className:"mayo-event-day-number"},E.getDate()),React.createElement("span",{className:"mayo-event-month"},d[E.getMonth()],React.createElement("span",{className:"mayo-event-year"},E.getFullYear())))):React.createElement("span",{className:"mayo-event-date-error"},"No Date")),React.createElement("div",{className:"mayo-event-summary"},React.createElement("h3",{dangerouslySetInnerHTML:{__html:c.title.rendered}}),!b&&React.createElement("div",{className:"mayo-event-date-warning"},"This event has no date set"),React.createElement("div",{className:"mayo-event-brief"},React.createElement("span",{className:"mayo-event-type"},c.meta.event_type),p(c,i)&&React.createElement("span",{className:"mayo-event-time"},p(c,i)),c.external_source&&React.createElement("span",{className:"mayo-event-source"},"Source: ",c.external_source.url),c.meta.service_body&&React.createElement("span",{className:"mayo-event-service-body mayo-event-service-body-small"},S(c.meta.service_body,j)),(c.categories.length>0||c.tags.length>0)&&React.createElement("div",{className:"mayo-event-brief-taxonomies"},c.categories.map(function(e){return React.createElement("span",{key:e.id,className:"mayo-event-category mayo-event-category-small"},e.name)}),c.tags.map(function(e){return React.createElement("span",{key:e.id,className:"mayo-event-tag mayo-event-tag-small"},e.name)})))),React.createElement("span",{className:"mayo-caret dashicons ".concat(u?"dashicons-arrow-up-alt2":"dashicons-arrow-down-alt2")})),u&&React.createElement("div",{className:"mayo-event-details"},React.createElement("div",{className:"mayo-event-content"},React.createElement("div",{className:"mayo-event-metadata"},React.createElement("div",{className:"mayo-event-datetime-details"},React.createElement("h4",null,"Date & Time"),React.createElement("p",null,React.createElement("strong",null,"Start:")," ",c.meta.event_start_date," at ",v(c.meta.event_start_time,i),c.meta.timezone&&" (".concat(y(c.meta.timezone),")")),(c.meta.event_end_date||c.meta.event_end_time)&&React.createElement("p",null,React.createElement("strong",null,"End:")," ",c.meta.event_end_date||c.meta.event_start_date," at ",v(c.meta.event_end_time,i))),c.meta.event_type&&React.createElement("div",{className:"mayo-event-type-details"},React.createElement("h4",null,"Event Type"),React.createElement("p",null,c.meta.event_type))),React.createElement("div",{className:"mayo-event-description"},React.createElement("h4",null,"Description"),React.createElement("div",{dangerouslySetInnerHTML:{__html:c.content.rendered}})),c.featured_image&&React.createElement("div",{className:"mayo-event-attachments"},React.createElement("h4",null,"Event Flyer"),React.createElement("div",{className:"mayo-event-image"},React.createElement("div",{className:"mayo-image-actions"},React.createElement("a",{href:c.featured_image,download:!0,className:"mayo-image-link",onClick:function(e){return e.stopPropagation()}},"Download Flyer")),React.createElement("a",{href:c.featured_image,target:"_blank",rel:"noopener noreferrer"},React.createElement("img",{src:c.featured_image,alt:c.title.rendered}))))),(c.meta.location_name||c.meta.location_address||c.meta.location_details)&&React.createElement("div",{className:"mayo-event-location"},React.createElement("h4",null,"Location"),c.meta.location_name&&React.createElement("p",{className:"mayo-location-name"},c.meta.location_name),c.meta.location_address&&React.createElement("p",{className:"mayo-location-address"},React.createElement(J,{address:c.meta.location_address})),c.meta.location_details&&React.createElement("p",{className:"mayo-location-details"},c.meta.location_details)),c.meta.service_body&&React.createElement("div",null,React.createElement("h4",null,"Service Body"),React.createElement("p",null,S(c.meta.service_body,j))),React.createElement("div",{className:"mayo-event-taxonomies"},c.categories.length>0&&React.createElement("div",{className:"mayo-archive-event-categories"},c.categories.map(function(e){return React.createElement("span",{key:e.id,className:"mayo-event-category"},e.name)})),c.tags.length>0&&React.createElement("div",{className:"mayo-archive-event-tags"},c.tags.map(function(e){return React.createElement("span",{key:e.id,className:"mayo-event-tag"},e.name)}))),c.meta.recurring_pattern&&"none"!==c.meta.recurring_pattern.type&&React.createElement("div",{className:"mayo-event-recurring"},g(c.meta.recurring_pattern)),React.createElement("div",{className:"mayo-event-actions"},React.createElement("a",{href:c.link,className:"mayo-read-more",onClick:function(e){return e.stopPropagation()}},"Read More"))))},$=function(e){var t=e.event,n=e.timeFormat,a=t.meta.event_start_date&&""!==t.meta.event_start_date&&!isNaN(new Date(t.meta.event_start_date+"T00:00:00").getTime()),r=a?new Date(t.meta.event_start_date+"T00:00:00"):null,o=t.meta.event_end_date&&t.meta.event_start_date!==t.meta.event_end_date,c=o?new Date(t.meta.event_end_date+"T00:00:00"):null;return React.createElement("div",{key:"".concat(t.id,"-").concat(t.meta.event_start_date),className:"mayo-widget-event"},React.createElement("div",{className:"mayo-widget-event-date"},a?React.createElement(React.Fragment,null,o?React.createElement(React.Fragment,null,React.createElement("span",{className:"mayo-event-day-name"},m[r.getDay()]),React.createElement("span",{className:"mayo-event-day-number"},r.getDate()),React.createElement("span",{className:"mayo-event-month"},d[r.getMonth()]),React.createElement("span",{className:"mayo-event-range-separator"},"-"),React.createElement("span",{className:"mayo-event-day-name"},m[c.getDay()]),React.createElement("span",{className:"mayo-event-day-number"},c.getDate()),React.createElement("span",{className:"mayo-event-month"},d[c.getMonth()])):React.createElement(React.Fragment,null,React.createElement("span",{className:"mayo-event-day-name"},m[r.getDay()]),React.createElement("span",{className:"mayo-event-day-number"},r.getDate()),React.createElement("span",{className:"mayo-event-month"},d[r.getMonth()]))):React.createElement("span",{className:"mayo-event-date-error"},"No Date")),React.createElement("h4",{className:"mayo-widget-event-title"},t.title.rendered),!a&&React.createElement("div",{className:"mayo-event-date-warning"},"Event date not set"),p(t,n)&&React.createElement("div",{className:"mayo-widget-event-time"},p(t,n)),React.createElement("a",{href:t.link,className:"mayo-widget-event-link"},t.featured_image&&React.createElement("img",{src:t.featured_image,alt:t.title.rendered,className:"mayo-widget-event-image"})),React.createElement("div",{className:"mayo-widget-event-actions"},React.createElement("a",{href:t.link,className:"mayo-widget-event-link"},"Read More...")))},Z=function(t){var n=t.event,a=t.timeFormat,r=t.onClose,o=A().getServiceBodyName;(0,e.useEffect)(function(){var e=function(e){"Escape"===e.key&&r()};return document.addEventListener("keydown",e),document.body.style.overflow="hidden",function(){document.removeEventListener("keydown",e),document.body.style.overflow=""}},[r]);var c=n.meta.event_start_date&&""!==n.meta.event_start_date&&!isNaN(new Date(n.meta.event_start_date+"T00:00:00").getTime()),i=c?new Date(n.meta.event_start_date+"T00:00:00"):null,l=n.meta.event_end_date&&n.meta.event_start_date!==n.meta.event_end_date,s=l?new Date(n.meta.event_end_date+"T00:00:00"):null,u=n.external_source?n.external_source.id:"local";return React.createElement("div",{className:"mayo-event-modal-backdrop",onClick:function(e){e.target===e.currentTarget&&r()}},React.createElement("div",{className:"mayo-event-modal"},React.createElement("button",{className:"mayo-event-modal-close",onClick:r,title:"Close"},React.createElement("span",{className:"dashicons dashicons-no-alt"})),React.createElement("div",{className:"mayo-event-modal-header"},React.createElement("div",{className:"mayo-event-modal-date"},c?l?React.createElement("span",null,m[i.getDay()],", ",d[i.getMonth()]," ",i.getDate(),", ",i.getFullYear()," – ",m[s.getDay()],", ",d[s.getMonth()]," ",s.getDate(),", ",s.getFullYear()):React.createElement("span",null,m[i.getDay()],", ",d[i.getMonth()]," ",i.getDate(),", ",i.getFullYear()):React.createElement("span",{className:"mayo-event-date-error"},"No Date Set")),React.createElement("h2",{dangerouslySetInnerHTML:{__html:n.title.rendered}}),n.meta.event_type&&React.createElement("span",{className:"mayo-event-modal-type"},n.meta.event_type)),React.createElement("div",{className:"mayo-event-modal-body"},React.createElement("div",{className:"mayo-event-modal-meta"},React.createElement("div",{className:"mayo-event-modal-time"},React.createElement("span",{className:"dashicons dashicons-clock"}),React.createElement("span",null,p(n,a),n.meta.timezone&&" (".concat(y(n.meta.timezone),")"))),(n.meta.location_name||n.meta.location_address)&&React.createElement("div",{className:"mayo-event-modal-location"},React.createElement("span",{className:"dashicons dashicons-location"}),React.createElement("span",null,n.meta.location_name&&React.createElement("strong",null,n.meta.location_name),n.meta.location_name&&n.meta.location_address&&React.createElement("br",null),n.meta.location_address&&React.createElement(J,{address:n.meta.location_address}),n.meta.location_details&&React.createElement(React.Fragment,null,React.createElement("br",null),React.createElement("em",null,n.meta.location_details)))),n.meta.service_body&&React.createElement("div",{className:"mayo-event-modal-service-body"},React.createElement("span",{className:"dashicons dashicons-groups"}),React.createElement("span",null,o(n.meta.service_body,u))),n.external_source&&React.createElement("div",{className:"mayo-event-modal-source"},React.createElement("span",{className:"dashicons dashicons-admin-site"}),React.createElement("span",null,"Source: ",n.external_source.url))),n.content.rendered&&React.createElement("div",{className:"mayo-event-modal-description"},React.createElement("div",{dangerouslySetInnerHTML:{__html:n.content.rendered}})),n.featured_image&&React.createElement("div",{className:"mayo-event-modal-image"},React.createElement("a",{href:n.featured_image,target:"_blank",rel:"noopener noreferrer"},React.createElement("img",{src:n.featured_image,alt:n.title.rendered})),React.createElement("a",{href:n.featured_image,download:!0,className:"mayo-image-download"},React.createElement("span",{className:"dashicons dashicons-download"}),"Download Flyer")),(n.categories.length>0||n.tags.length>0)&&React.createElement("div",{className:"mayo-event-modal-taxonomies"},n.categories.map(function(e){return React.createElement("span",{key:e.id,className:"mayo-event-category"},e.name)}),n.tags.map(function(e){return React.createElement("span",{key:e.id,className:"mayo-event-tag"},e.name)})),n.meta.recurring_pattern&&"none"!==n.meta.recurring_pattern.type&&React.createElement("div",{className:"mayo-event-modal-recurring"},React.createElement("span",{className:"dashicons dashicons-update"}),React.createElement("span",null,g(n.meta.recurring_pattern)))),React.createElement("div",{className:"mayo-event-modal-footer"},React.createElement("a",{href:n.link,className:"mayo-event-modal-link"},"View Full Details",React.createElement("span",{className:"dashicons dashicons-arrow-right-alt2"})))))};function K(e){return K="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},K(e)}function X(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?X(Object(n),!0).forEach(function(t){ee(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):X(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ee(e,t,n){return(t=function(e){var t=function(e){if("object"!=K(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=K(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==K(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function te(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,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ne(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)?ne(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 ne(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 ae=function(t){for(var n,a=t.events,r=t.timeFormat,o=t.onMonthChange,c=t.loading,i=te((0,e.useState)(new Date),2),l=i[0],s=i[1],u=te((0,e.useState)(null),2),m=u[0],d=u[1],v=te((0,e.useState)(null),2),y=v[0],p=v[1],g=te((0,e.useState)({x:0,y:0}),2),h=g[0],b=g[1],E=A().getServiceBodyName,_=function(e){var t,n=["mayo-calendar-event"];if(null!==(t=e._calendarMeta)&&void 0!==t&&t.isMultiDay&&(n.push("mayo-multi-day-event"),e._calendarMeta.isFirstDay?n.push("mayo-multi-day-start"):e._calendarMeta.isLastDay?n.push("mayo-multi-day-end"):n.push("mayo-multi-day-middle")),e.categories.forEach(function(e){n.push("mayo-event-category-".concat(f(e.name).toLowerCase().replace(/\s+/g,"-")))}),e.tags.forEach(function(e){n.push("mayo-event-tag-".concat(f(e.name).toLowerCase().replace(/\s+/g,"-")))}),e.meta.event_type&&n.push("mayo-event-type-".concat(f(e.meta.event_type).toLowerCase().replace(/\s+/g,"-"))),e.meta.service_body){var a=e.external_source?e.external_source.id:"local",r=E(e.meta.service_body,a);n.push("mayo-event-service-body-".concat(f(r).toLowerCase().replace(/\s+/g,"-")))}return n.join(" ")},R=l.getFullYear(),w=l.getMonth(),S=new Date(R,w,1),N=new Date(R,w+1,0).getDate(),k=S.getDay(),O=function(e){return"".concat(e.getFullYear(),"-").concat(String(e.getMonth()+1).padStart(2,"0"),"-").concat(String(e.getDate()).padStart(2,"0"))},T=(0,e.useMemo)(function(){var e={};return a.forEach(function(t){if(t.meta.event_start_date)for(var n=new Date(t.meta.event_start_date+"T00:00:00"),a=t.meta.event_end_date?new Date(t.meta.event_end_date+"T00:00:00"):n,r=new Date(n);r<=a;){var o=O(r);e[o]||(e[o]=[]);var c=r.getTime()===n.getTime(),i=r.getTime()===a.getTime(),l=n.getTime()!==a.getTime();e[o].push(Q(Q({},t),{},{_calendarMeta:{isFirstDay:c,isLastDay:i,isMultiDay:l,displayDate:new Date(r)}})),r.setDate(r.getDate()+1)}}),Object.keys(e).forEach(function(t){e[t].sort(function(e,t){var n=e.meta.event_start_time||"00:00",a=t.meta.event_start_time||"00:00";return n.localeCompare(a)})}),e},[a]),j=function(e){if(!e)return"";var t=te(e.split(":"),2),n=t[0],a=t[1],o=parseInt(n,10);if("24hour"===r)return e;var c=o>=12?"pm":"am";return"".concat(o%12||12,":").concat(a).concat(c)},x=function(e){d(e)},C=function(e,t){var n=t.currentTarget.getBoundingClientRect();b({x:n.left+window.scrollX,y:n.bottom+window.scrollY+4}),p(e)},P=function(){p(null)},D=[],F=0;F<k;F++)D.push(React.createElement("div",{key:"empty-".concat(F),className:"mayo-calendar-day empty"}));for(var I=1;I<=N;I++){var M="".concat(R,"-").concat(String(w+1).padStart(2,"0"),"-").concat(String(I).padStart(2,"0")),L=T[M]||[],G=(new Date).toDateString()===new Date(R,w,I).toDateString();D.push(React.createElement("div",{key:M,className:"mayo-calendar-day ".concat(G?"today":""," ").concat(L.length>0?"has-events":"")},React.createElement("span",{className:"mayo-calendar-date"},I),React.createElement("div",{className:"mayo-calendar-events"},L.map(function(e,t){var n,a;return React.createElement("div",{key:"".concat(e.id,"-").concat(t),className:_(e),onClick:function(){return x(e)},onMouseEnter:function(t){return C(e,t)},onMouseLeave:P},e.meta.event_start_time&&(!(null!==(n=e._calendarMeta)&&void 0!==n&&n.isMultiDay)||(null===(a=e._calendarMeta)||void 0===a?void 0:a.isFirstDay))&&React.createElement("span",{className:"event-time"},j(e.meta.event_start_time)),React.createElement("span",{className:"event-title",dangerouslySetInnerHTML:{__html:e.title.rendered}}))}))))}return React.createElement(React.Fragment,null,React.createElement("div",{className:"mayo-calendar"},React.createElement("div",{className:"mayo-calendar-header"},React.createElement("button",{onClick:function(){var e=new Date(R,w-1,1);s(e),o&&o(e)},title:"Previous Month"},React.createElement("span",{className:"dashicons dashicons-arrow-left-alt2"})),React.createElement("h2",null,["January","February","March","April","May","June","July","August","September","October","November","December"][w]," ",R),React.createElement("div",{className:"mayo-calendar-header-right"},React.createElement("button",{onClick:function(){var e=new Date;s(e),o&&o(e)},className:"mayo-calendar-today-button",title:"Go to Today"},"Today"),React.createElement("button",{onClick:function(){var e=new Date(R,w+1,1);s(e),o&&o(e)},title:"Next Month"},React.createElement("span",{className:"dashicons dashicons-arrow-right-alt2"})))),React.createElement("div",{className:"mayo-calendar-grid".concat(c?" loading":"")},React.createElement("div",{className:"mayo-calendar-weekdays"},["Sun","Mon","Tue","Wed","Thu","Fri","Sat"].map(function(e){return React.createElement("div",{key:e,className:"mayo-calendar-weekday"},e)})),React.createElement("div",{className:"mayo-calendar-days"},D),c&&React.createElement("div",{className:"mayo-calendar-loading"},React.createElement("span",null,"Loading events...")))),m&&React.createElement(Z,{event:m,timeFormat:r,onClose:function(){d(null)}}),y&&React.createElement("div",{className:"mayo-calendar-tooltip",style:{position:"absolute",left:h.x,top:h.y}},(n=function(e){var t,n,a={title:(t=e.title.rendered.replace(/<[^>]*>/g,""),n=document.createElement("textarea"),n.innerHTML=t,n.value),time:null,location:null,eventType:null,serviceBody:null};if(e.meta.event_start_time&&(a.time=j(e.meta.event_start_time),e.meta.event_end_time&&(a.time+=" - "+j(e.meta.event_end_time))),e.meta.location_name&&(a.location=e.meta.location_name),e.meta.event_type&&(a.eventType=e.meta.event_type),e.meta.service_body){var r=e.external_source?e.external_source.id:"local",o=E(e.meta.service_body,r);o&&o!==e.meta.service_body&&(a.serviceBody=o)}return a}(y),React.createElement(React.Fragment,null,React.createElement("div",{className:"mayo-tooltip-title"},n.title),n.time&&React.createElement("div",{className:"mayo-tooltip-row"},React.createElement("span",{className:"dashicons dashicons-clock"}),n.time),n.location&&React.createElement("div",{className:"mayo-tooltip-row"},React.createElement("span",{className:"dashicons dashicons-location"}),n.location),n.eventType&&React.createElement("div",{className:"mayo-tooltip-row"},React.createElement("span",{className:"dashicons dashicons-tag"}),n.eventType),n.serviceBody&&React.createElement("div",{className:"mayo-tooltip-row"},React.createElement("span",{className:"dashicons dashicons-groups"}),n.serviceBody)))))};function re(e){return re="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},re(e)}function oe(e){return function(e){if(Array.isArray(e))return ye(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||ve(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 ce(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 ie(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ce(Object(n),!0).forEach(function(t){le(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ce(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function le(e,t,n){return(t=function(e){var t=function(e){if("object"!=re(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=re(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==re(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function se(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",r=n.toStringTag||"@@toStringTag";function o(n,a,r,o){var l=a&&a.prototype instanceof i?a:i,s=Object.create(l.prototype);return ue(s,"_invoke",function(n,a,r){var o,i,l,s=0,u=r||[],m=!1,d={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,i=0,l=e,d.n=n,c}};function f(n,a){for(i=n,l=a,t=0;!m&&s&&!r&&t<u.length;t++){var r,o=u[t],f=d.p,v=o[2];n>3?(r=v===a)&&(l=o[(i=o[4])?5:(i=3,3)],o[4]=o[5]=e):o[0]<=f&&((r=n<2&&f<o[1])?(i=0,d.v=a,d.n=o[1]):f<v&&(r=n<3||o[0]>a||a>v)&&(o[4]=n,o[5]=a,d.n=v,i=0))}if(r||n>1)return c;throw m=!0,a}return function(r,u,v){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&f(u,v),i=u,l=v;(t=i<2?e:l)||!m;){o||(i?i<3?(i>1&&(d.n=-1),f(i,l)):d.n=l:d.v=l);try{if(s=2,o){if(i||(r="next"),t=o[r]){if(!(t=t.call(o,l)))throw TypeError("iterator result is not an object");if(!t.done)return t;l=t.value,i<2&&(i=0)}else 1===i&&(t=o.return)&&t.call(o),i<2&&(l=TypeError("The iterator does not provide a '"+r+"' method"),i=1);o=e}else if((t=(m=d.n<0)?l:n.call(a,d))!==c)break}catch(t){o=e,i=1,l=t}finally{s=1}}return{value:t,done:m}}}(n,r,o),!0),s}var c={};function i(){}function l(){}function s(){}t=Object.getPrototypeOf;var u=[][a]?t(t([][a]())):(ue(t={},a,function(){return this}),t),m=s.prototype=i.prototype=Object.create(u);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,ue(e,r,"GeneratorFunction")),e.prototype=Object.create(m),e}return l.prototype=s,ue(m,"constructor",s),ue(s,"constructor",l),l.displayName="GeneratorFunction",ue(s,r,"GeneratorFunction"),ue(m),ue(m,r,"Generator"),ue(m,a,function(){return this}),ue(m,"toString",function(){return"[object Generator]"}),(se=function(){return{w:o,m:d}})()}function ue(e,t,n,a){var r=Object.defineProperty;try{r({},"",{})}catch(e){r=0}ue=function(e,t,n,a){function o(t,n){ue(e,t,function(e){return this._invoke(t,n,e)})}t?r?r(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},ue(e,t,n,a)}function me(e,t,n,a,r,o,c){try{var i=e[o](c),l=i.value}catch(e){return void n(e)}i.done?t(l):Promise.resolve(l).then(a,r)}function de(e){return function(){var t=this,n=arguments;return new Promise(function(a,r){var o=e.apply(t,n);function c(e){me(o,a,r,c,i,"next",e)}function i(e){me(o,a,r,c,i,"throw",e)}c(void 0)})}}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,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(e,t)||ve(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 ve(e,t){if(e){if("string"==typeof e)return ye(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)?ye(e,t):void 0}}function ye(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 pe=function(t){var n=t.widget,a=void 0!==n&&n,r=t.settings,o=void 0===r?{}:r,c=(0,e.useRef)(null),i=(0,e.useRef)(null),l=(0,e.useRef)(null),s=fe((0,e.useState)(!0),2),u=s[0],m=s[1],d=fe((0,e.useState)(null),2),f=d[0],v=d[1],y=fe((0,e.useState)([]),2),p=y[0],g=y[1],b=fe((0,e.useState)(1),2),E=b[0],_=b[1],R=fe((0,e.useState)("12hour"),2),w=R[0],S=R[1],N=fe((0,e.useState)(!1),2),k=N[0],O=N[1],T=fe((0,e.useState)(!0),2),j=T[0],x=T[1],P=fe((0,e.useState)(1),2),D=P[0],F=P[1],I=fe((0,e.useState)(!1),2),M=I[0],L=I[1],G=fe((0,e.useState)(new Set),2),B=(G[0],G[1]),U=fe((0,e.useState)(!1),2),z=(U[0],U[1],fe((0,e.useState)(!1),2)),W=(z[0],z[1],fe((0,e.useState)(!0),2)),q=(W[0],W[1],fe((0,e.useState)(!1),2)),H=q[0],J=q[1],Y=fe((0,e.useState)(!1),2),Z=Y[0],K=Y[1],X=fe((0,e.useState)((null==o?void 0:o.defaultView)||"list"),2),Q=X[0],ee=X[1],te=fe((0,e.useState)(new Date),2),ne=te[0],re=te[1],ce=fe((0,e.useState)([]),2),le=ce[0],ue=ce[1],me=fe((0,e.useState)(!1),2),ve=me[0],ye=me[1],pe=A().updateExternalServiceBodies,ge=C();(0,e.useEffect)(function(){O(a),S((null==o?void 0:o.timeFormat)||"12hour"),_(1),g([]),m(!0),v(null),x(!0),F(1),we(1)},[o,a]),(0,e.useEffect)(function(){var e=be("autoexpand"),t=null!==e?"true"===e:(null==o?void 0:o.autoexpand)||!1;J(t)},[null==o?void 0:o.autoexpand]),(0,e.useEffect)(function(){var e=be("view"),t=null!==e?e:(null==o?void 0:o.defaultView)||"list";"calendar"!==t&&"list"!==t||ee(t)},[null==o?void 0:o.defaultView]),(0,e.useEffect)(function(){H&&p.length>0&&(L(!0),B(new Set(p.map(function(e){return e.id}))))},[H,p]);var he=(0,e.useCallback)(function(e){e.length&&null!=o&&o.sourceIds&&(l.current&&clearTimeout(l.current),l.current=setTimeout(function(){var t=new Map;e.forEach(function(e){if(e.external_source&&e.external_source.service_bodies){var n=e.external_source.id,a=e.external_source.service_bodies;o.sourceIds.includes(n)&&t.set(n,a)}}),t.forEach(function(e,t){pe(t,e)})},300))},[null==o?void 0:o.sourceIds,pe]);(0,e.useEffect)(function(){p.length>0&&he(p)},[p,he]),(0,e.useEffect)(function(){if(null!=o&&o.infiniteScroll&&i.current&&j){var e=new IntersectionObserver(function(e){e[0].isIntersecting&&j&&!u&&E<D&&we(E+1)},{threshold:1});return e.observe(i.current),function(){i.current&&e.unobserve(i.current)}}},[j,u,E,D,null==o?void 0:o.infiniteScroll]);var be=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=new URLSearchParams(window.location.search);return n.has(e)?n.get(e):t},Ee=function(){var e,t=[],n={timeFormat:(null==o?void 0:o.timeFormat)||"12hour",perPage:(null==o?void 0:o.perPage)||10,infiniteScroll:null===(e=null==o?void 0:o.infiniteScroll)||void 0===e||e,autoexpand:(null==o?void 0:o.autoexpand)||!1,categories:(null==o?void 0:o.categories)||"",categoryRelation:(null==o?void 0:o.categoryRelation)||"OR",tags:(null==o?void 0:o.tags)||"",eventType:(null==o?void 0:o.eventType)||"",status:(null==o?void 0:o.status)||"publish",serviceBody:(null==o?void 0:o.serviceBody)||"",sourceIds:(null==o?void 0:o.sourceIds)||""};return"12hour"!==n.timeFormat&&t.push('time_format="'.concat(n.timeFormat,'"')),10!==n.perPage&&t.push('per_page="'.concat(n.perPage,'"')),!0!==n.infiniteScroll&&t.push('infinite_scroll="'.concat(n.infiniteScroll?"true":"false",'"')),!1!==n.autoexpand&&t.push('autoexpand="'.concat(n.autoexpand?"true":"false",'"')),n.categories&&t.push('categories="'.concat(n.categories,'"')),"OR"!==n.categoryRelation&&t.push('category_relation="'.concat(n.categoryRelation,'"')),n.tags&&t.push('tags="'.concat(n.tags,'"')),n.eventType&&t.push('event_type="'.concat(n.eventType,'"')),"publish"!==n.status&&t.push('status="'.concat(n.status,'"')),n.serviceBody&&t.push('service_body="'.concat(n.serviceBody,'"')),n.sourceIds&&t.push('source_ids="'.concat(n.sourceIds,'"')),t.length>0?"[mayo_event_list ".concat(t.join(" "),"]"):"[mayo_event_list]"},_e=function(){var e=de(se().m(function e(){var t,n,a;return se().w(function(e){for(;;)switch(e.p=e.n){case 0:return t=Ee(),e.p=1,e.n=2,navigator.clipboard.writeText(t);case 2:console.log("Shortcode copied to clipboard:",t),e.n=4;break;case 3:e.p=3,a=e.v,console.error("Failed to copy shortcode:",a),(n=document.createElement("textarea")).value=t,document.body.appendChild(n),n.focus(),n.select();try{document.execCommand("copy"),console.log("Shortcode copied to clipboard (fallback):",t)}catch(e){console.error("Fallback copy failed:",e)}document.body.removeChild(n);case 4:return e.a(2)}},e,null,[[1,3]])}));return function(){return e.apply(this,arguments)}}(),Re=function(e){var t=[],n=[];return e.forEach(function(e){var a=e.meta.event_start_date&&""!==e.meta.event_start_date&&!isNaN(new Date(e.meta.event_start_date).getTime()),r=ie(ie({},e),{},{hasValidDate:a,isInvalid:!a});a?t.push(r):n.push(r)}),[].concat(t,n)},we=function(){var e=de(se().m(function e(){var t,n,a,r,c,i,l,s,u,d,f,y,p,b,E,R,w,S,N,k,O=arguments;return se().w(function(e){for(;;)switch(e.p=e.n){case 0:return t=O.length>0&&void 0!==O[0]?O[0]:1,m(!0),e.p=1,a=null!==be("status")?be("status"):(null==o?void 0:o.status)||"publish",r=null!==be("event_type")?be("event_type"):(null==o?void 0:o.eventType)||"",c=null!==be("service_body")?be("service_body"):(null==o?void 0:o.serviceBody)||"",i=null!==be("relation")?be("relation"):(null==o?void 0:o.relation)||"AND",l=null!==be("categories")?be("categories"):(null==o?void 0:o.categories)||"",s=null!==be("category_relation")?be("category_relation"):(null==o?void 0:o.categoryRelation)||"OR",u=null!==be("tags")?be("tags"):(null==o?void 0:o.tags)||"",d=null!==be("source_ids")?be("source_ids"):(null==o?void 0:o.sourceIds)||"",f=null!==be("archive")?be("archive"):null!=o&&o.showArchived?"true":"false",y=null!==be("infinite_scroll")?"true"===be("infinite_scroll"):null===(n=null==o?void 0:o.infiniteScroll)||void 0===n||n,p=null!==be("per_page")?parseInt(be("per_page")):(null==o?void 0:o.perPage)||10,b=null!==be("order")?be("order"):(null==o?void 0:o.order)||"ASC",E="/events?status=".concat(a)+"&event_type=".concat(r)+"&service_body=".concat(c)+"&relation=".concat(i)+"&categories=".concat(l)+"&category_relation=".concat(s)+"&tags=".concat(u)+"&source_ids=".concat(d)+"&page=".concat(t)+"&per_page=".concat(p)+"&timezone=".concat(encodeURIComponent(ge))+"&archive=".concat(f)+"&order=".concat(b),e.n=2,h(E);case 2:R=e.v,w=Array.isArray(R)?R:R.events||[],S=R.pagination||{current_page:1,total_pages:Math.ceil(w.length/((null==o?void 0:o.perPage)||10))},N=Re(w),_(S.current_page),F(S.total_pages),x(S.current_page<S.total_pages),g(t>1&&y?function(e){return[].concat(oe(e),oe(N))}:N),m(!1),e.n=4;break;case 3:e.p=3,k=e.v,console.error("Error in fetchEvents:",k),v("Failed to load events: ".concat(k.message)),m(!1),x(!1);case 4:return e.a(2)}},e,null,[[1,3]])}));return function(){return e.apply(this,arguments)}}(),Se=function(){var e=de(se().m(function e(t,n){var a,r,c,i,l,s,u,m,d,f,v,y,p,g,b,E,_;return se().w(function(e){for(;;)switch(e.p=e.n){case 0:return ye(!0),e.p=1,a=null!==be("status")?be("status"):(null==o?void 0:o.status)||"publish",r=null!==be("event_type")?be("event_type"):(null==o?void 0:o.eventType)||"",c=null!==be("service_body")?be("service_body"):(null==o?void 0:o.serviceBody)||"",i=null!==be("relation")?be("relation"):(null==o?void 0:o.relation)||"AND",l=null!==be("categories")?be("categories"):(null==o?void 0:o.categories)||"",s=null!==be("category_relation")?be("category_relation"):(null==o?void 0:o.categoryRelation)||"OR",u=null!==be("tags")?be("tags"):(null==o?void 0:o.tags)||"",m=null!==be("source_ids")?be("source_ids"):(null==o?void 0:o.sourceIds)||"",d=null!==be("order")?be("order"):(null==o?void 0:o.order)||"ASC",f="".concat(t,"-").concat(String(n+1).padStart(2,"0"),"-01"),v=new Date(t,n+1,0).getDate(),y="".concat(t,"-").concat(String(n+1).padStart(2,"0"),"-").concat(String(v).padStart(2,"0")),p="/events?status=".concat(a)+"&event_type=".concat(r)+"&service_body=".concat(c)+"&relation=".concat(i)+"&categories=".concat(l)+"&category_relation=".concat(s)+"&tags=".concat(u)+"&source_ids=".concat(m)+"&timezone=".concat(encodeURIComponent(ge))+"&order=".concat(d)+"&start_date=".concat(f)+"&end_date=".concat(y)+"&per_page=100",e.n=2,h(p);case 2:g=e.v,b=Array.isArray(g)?g:g.events||[],E=Re(b),ue(E),ye(!1),e.n=4;break;case 3:e.p=3,_=e.v,console.error("Error in fetchCalendarEvents:",_),ye(!1);case 4:return e.a(2)}},e,null,[[1,3]])}));return function(t,n){return e.apply(this,arguments)}}();return(0,e.useEffect)(function(){"calendar"!==Q||k||Se(ne.getFullYear(),ne.getMonth())},[Q]),u&&0===p.length?React.createElement("div",null,"Loading events..."):f&&0===p.length?React.createElement("div",{className:"mayo-error"},f):p.length?React.createElement("div",{className:"mayo-event-list".concat("calendar"===Q?" mayo-calendar-view":""),ref:c},k?React.createElement("div",{className:"mayo-widget-events"},p.map(function(e){return React.createElement($,{key:"".concat(e.id,"-").concat(e.meta.event_start_date),event:e,timeFormat:w})})):React.createElement(React.Fragment,null,React.createElement("div",{className:"mayo-event-list-header"},React.createElement("div",{className:"mayo-view-toggle"},React.createElement("button",{className:"mayo-view-toggle-button ".concat("list"===Q?"active":""),onClick:function(){return ee("list")},title:"List View"},React.createElement("span",{className:"dashicons dashicons-list-view"})),React.createElement("button",{className:"mayo-view-toggle-button ".concat("calendar"===Q?"active":""),onClick:function(){return ee("calendar")},title:"Calendar View"},React.createElement("span",{className:"dashicons dashicons-calendar-alt"}))),React.createElement("div",{className:"mayo-event-list-actions"},"list"===Q&&React.createElement("button",{className:"mayo-expand-all-button",onClick:function(){return L(!M)},title:M?"Collapse All":"Expand All"},React.createElement("span",{className:"dashicons ".concat(M?"dashicons-arrow-up-alt2":"dashicons-arrow-down-alt2")})),React.createElement("button",{className:"mayo-print-button",onClick:function(){var e=window.open("","_blank"),t=document.title,n="\n <!DOCTYPE html>\n <html>\n <head>\n <title>".concat(t,' - Print View</title>\n <style>\n body {\n font-family: Arial, sans-serif;\n line-height: 1.6;\n color: #333;\n max-width: 800px;\n margin: 0 auto;\n padding: 20px;\n }\n .mayo-print-header {\n text-align: center;\n margin-bottom: 30px;\n padding-bottom: 20px;\n border-bottom: 2px solid #eee;\n }\n .mayo-print-event {\n margin-bottom: 30px;\n padding-bottom: 20px;\n border-bottom: 1px solid #eee;\n }\n .mayo-print-event:last-child {\n border-bottom: none;\n }\n .mayo-print-event-title {\n font-size: 1.4em;\n margin: 0 0 10px 0;\n color: #0073aa;\n }\n .mayo-print-event-meta {\n margin-bottom: 15px;\n color: #666;\n }\n .mayo-print-event-description {\n margin-top: 15px;\n }\n .mayo-print-event-taxonomies {\n margin-top: 15px;\n }\n .mayo-print-event-taxonomy {\n display: inline-block;\n padding: 3px 8px;\n margin: 0 5px 5px 0;\n border-radius: 3px;\n font-size: 0.9em;\n }\n .mayo-print-event-category {\n background: #e9ecef;\n color: #495057;\n }\n .mayo-print-event-tag {\n background: #e5f5e8;\n color: #1fa23d;\n }\n @media print {\n body {\n padding: 0;\n }\n .mayo-print-header {\n margin-bottom: 20px;\n }\n .mayo-print-event {\n page-break-inside: avoid;\n }\n }\n </style>\n </head>\n <body>\n <div class="mayo-print-header">\n <h1>').concat(t,"</h1>\n <p>Printed on ").concat((new Date).toLocaleString(),"</p>\n </div>\n ").concat(p.map(function(e){return'\n <div class="mayo-print-event">\n <h2 class="mayo-print-event-title">'.concat(e.title.rendered,'</h2>\n <div class="mayo-print-event-meta">\n <p><strong>Date:</strong> ').concat(e.meta.event_start_date).concat(e.meta.event_start_time?" at ".concat(e.meta.event_start_time):"","</p>\n ").concat(e.meta.event_type?"<p><strong>Type:</strong> ".concat(e.meta.event_type,"</p>"):"","\n ").concat(e.meta.location_name?"<p><strong>Location:</strong> ".concat(e.meta.location_name,"</p>"):"",'\n </div>\n <div class="mayo-print-event-description">\n ').concat(e.content.rendered,"\n </div>\n ").concat(e.categories.length>0||e.tags.length>0?'\n <div class="mayo-print-event-taxonomies">\n '.concat(e.categories.map(function(e){return'\n <span class="mayo-print-event-taxonomy mayo-print-event-category">'.concat(e.name,"</span>\n ")}).join(""),"\n ").concat(e.tags.map(function(e){return'\n <span class="mayo-print-event-taxonomy mayo-print-event-tag">'.concat(e.name,"</span>\n ")}).join(""),"\n </div>\n "):"","\n </div>\n ")}).join(""),"\n </body>\n </html>\n ");e.document.write(n),e.document.close(),e.onload=function(){e.print()}},title:"Print Events"},React.createElement("span",{className:"dashicons dashicons-printer"})),React.createElement("a",{href:function(){var e=new URLSearchParams;e.append("feed","mayo_events");var t=null!==be("event_type")?be("event_type"):(null==o?void 0:o.eventType)||"",n=null!==be("service_body")?be("service_body"):(null==o?void 0:o.serviceBody)||"",a=null!==be("relation")?be("relation"):(null==o?void 0:o.relation)||"AND",r=null!==be("categories")?be("categories"):(null==o?void 0:o.categories)||"",c=null!==be("category_relation")?be("category_relation"):(null==o?void 0:o.categoryRelation)||"OR",i=null!==be("tags")?be("tags"):(null==o?void 0:o.tags)||"";t&&e.append("event_type",t),n&&e.append("service_body",n),"AND"!==a&&e.append("relation",a),r&&e.append("categories",r),"OR"!==c&&e.append("category_relation",c),i&&e.append("tags",i);var l=e.toString();return"".concat(window.location.origin).concat(window.location.pathname).concat(l?"?"+l:"")}(),className:"mayo-rss-link",target:"_blank",rel:"noopener noreferrer",title:"Calendar Feed (ICS)"},React.createElement("span",{className:"dashicons dashicons-calendar"})),React.createElement("a",{href:"".concat(window.location.pathname,"?feed=mayo_rss"),className:"mayo-rss-link",target:"_blank",rel:"noopener noreferrer",title:"RSS Feed"},React.createElement("span",{className:"dashicons dashicons-rss"})),React.createElement("button",{className:"mayo-shortcode-button",onClick:function(){return K(!Z)},title:Z?"Hide Shortcode":"Show Shortcode"},React.createElement("span",{className:"dashicons dashicons-editor-code"})))),Z&&React.createElement("div",{className:"mayo-shortcode-display"},React.createElement("div",{className:"mayo-shortcode-header"},React.createElement("strong",null,"Shortcode for this event list:"),React.createElement("button",{className:"mayo-copy-shortcode",onClick:_e,title:"Copy to Clipboard"},React.createElement("span",{className:"dashicons dashicons-clipboard"}),"Copy")),React.createElement("div",{className:"mayo-shortcode-text"},React.createElement("code",null,Ee()))),"calendar"===Q?React.createElement(ae,{events:le,timeFormat:w,onMonthChange:function(e){re(e),Se(e.getFullYear(),e.getMonth())},loading:ve}):React.createElement("div",{className:"mayo-event-cards"},p.map(function(e){return React.createElement(V,{key:"".concat(e.id,"-").concat(e.meta.event_start_date),event:e,timeFormat:w,forceExpanded:M})}),null!==be("infinite_scroll")?"true"===be("infinite_scroll")&&j&&React.createElement("div",{ref:i,className:"mayo-infinite-loader"},u&&React.createElement("div",{className:"mayo-loader"},"Loading more events...")):(null==o?void 0:o.infiniteScroll)&&j&&React.createElement("div",{ref:i,className:"mayo-infinite-loader"},u&&React.createElement("div",{className:"mayo-loader"},"Loading more events..."))))):null!=o&&o.showArchived?React.createElement("div",{className:"mayo-no-events"},"No events found in the archive."):React.createElement("div",{className:"mayo-no-events"},"No upcoming events found.",React.createElement("a",{href:"".concat(window.location.pathname,"?archive=true"),className:"mayo-archive-link"},"View past events"))};function ge(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",r=n.toStringTag||"@@toStringTag";function o(n,a,r,o){var l=a&&a.prototype instanceof i?a:i,s=Object.create(l.prototype);return he(s,"_invoke",function(n,a,r){var o,i,l,s=0,u=r||[],m=!1,d={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,i=0,l=e,d.n=n,c}};function f(n,a){for(i=n,l=a,t=0;!m&&s&&!r&&t<u.length;t++){var r,o=u[t],f=d.p,v=o[2];n>3?(r=v===a)&&(l=o[(i=o[4])?5:(i=3,3)],o[4]=o[5]=e):o[0]<=f&&((r=n<2&&f<o[1])?(i=0,d.v=a,d.n=o[1]):f<v&&(r=n<3||o[0]>a||a>v)&&(o[4]=n,o[5]=a,d.n=v,i=0))}if(r||n>1)return c;throw m=!0,a}return function(r,u,v){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&f(u,v),i=u,l=v;(t=i<2?e:l)||!m;){o||(i?i<3?(i>1&&(d.n=-1),f(i,l)):d.n=l:d.v=l);try{if(s=2,o){if(i||(r="next"),t=o[r]){if(!(t=t.call(o,l)))throw TypeError("iterator result is not an object");if(!t.done)return t;l=t.value,i<2&&(i=0)}else 1===i&&(t=o.return)&&t.call(o),i<2&&(l=TypeError("The iterator does not provide a '"+r+"' method"),i=1);o=e}else if((t=(m=d.n<0)?l:n.call(a,d))!==c)break}catch(t){o=e,i=1,l=t}finally{s=1}}return{value:t,done:m}}}(n,r,o),!0),s}var c={};function i(){}function l(){}function s(){}t=Object.getPrototypeOf;var u=[][a]?t(t([][a]())):(he(t={},a,function(){return this}),t),m=s.prototype=i.prototype=Object.create(u);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,he(e,r,"GeneratorFunction")),e.prototype=Object.create(m),e}return l.prototype=s,he(m,"constructor",s),he(s,"constructor",l),l.displayName="GeneratorFunction",he(s,r,"GeneratorFunction"),he(m),he(m,r,"Generator"),he(m,a,function(){return this}),he(m,"toString",function(){return"[object Generator]"}),(ge=function(){return{w:o,m:d}})()}function he(e,t,n,a){var r=Object.defineProperty;try{r({},"",{})}catch(e){r=0}he=function(e,t,n,a){function o(t,n){he(e,t,function(e){return this._invoke(t,n,e)})}t?r?r(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},he(e,t,n,a)}function be(e,t,n,a,r,o,c){try{var i=e[o](c),l=i.value}catch(e){return void n(e)}i.done?t(l):Promise.resolve(l).then(a,r)}function Ee(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,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return _e(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(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 _e(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 Re=function(){var t=Ee((0,e.useState)([]),2),n=t[0],a=t[1],r=Ee((0,e.useState)(!0),2),o=r[0],c=r[1],i=Ee((0,e.useState)(null),2),l=i[0],s=i[1],u=A().getServiceBodyName;return(0,e.useEffect)(function(){var e=function(){var e,t=(e=ge().m(function e(){var t,n;return ge().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,h("/events?archive=true");case 1:(t=e.v)&&Array.isArray(t)?a(t):t&&t.events&&Array.isArray(t.events)?a(t.events):(console.warn("Unexpected API response format:",t),a([])),e.n=3;break;case 2:e.p=2,n=e.v,console.error("Error fetching events:",n),s("Failed to load events"),a([]);case 3:return e.p=3,c(!1),e.f(3);case 4:return e.a(2)}},e,null,[[0,2,3,4]])}),function(){var t=this,n=arguments;return new Promise(function(a,r){var o=e.apply(t,n);function c(e){be(o,a,r,c,i,"next",e)}function i(e){be(o,a,r,c,i,"throw",e)}c(void 0)})});return function(){return t.apply(this,arguments)}}();e()},[]),o?React.createElement("div",null,"Loading events..."):l?React.createElement("div",{className:"mayo-error"},l):n.length?React.createElement("div",{className:"mayo-archive-container"},React.createElement("div",{className:"mayo-archive-content"},React.createElement("header",{className:"mayo-archive-header"},React.createElement("h1",{className:"mayo-archive-title"},"Events")),React.createElement("div",{className:"mayo-archive-events"},n.map(function(e){var t,n;return React.createElement("article",{key:e.id,className:"mayo-archive-event"},React.createElement("div",{className:"mayo-archive-event-content"},e.featured_image&&React.createElement("div",{className:"mayo-archive-event-image"},React.createElement("a",{href:e.featured_image,target:"_blank",rel:"noopener noreferrer"},React.createElement("img",{src:e.featured_image,alt:e.title.rendered}))),React.createElement("div",{className:"mayo-archive-event-details"},React.createElement("h2",{className:"mayo-archive-event-title"},React.createElement("a",{href:e.link,dangerouslySetInnerHTML:{__html:e.title.rendered}})),React.createElement("div",{className:"mayo-archive-event-meta"},e.meta.event_type&&React.createElement("div",{className:"mayo-archive-event-type"},React.createElement("strong",null,"Type:")," ",e.meta.event_type),React.createElement("div",{className:"mayo-archive-event-datetime"},React.createElement("strong",null,"When:")," ",e.meta.event_start_date,e.meta.event_start_time&&" at ".concat(e.meta.event_start_time),(e.meta.event_end_date||e.meta.event_end_time)&&" - ",e.meta.event_end_date,e.meta.event_end_time&&" at ".concat(e.meta.event_end_time),e.meta.timezone&&" (".concat(y(e.meta.timezone),")")),(e.meta.location_name||e.meta.location_address)&&React.createElement("div",{className:"mayo-archive-event-location"},React.createElement("strong",null,"Where:")," ",e.meta.location_name,e.meta.location_name&&e.meta.location_address&&", ",e.meta.location_address),(null===(t=e.categories)||void 0===t?void 0:t.length)>0&&React.createElement("div",{className:"mayo-archive-event-categories"},e.categories.map(function(e){return React.createElement("span",{key:e.id,className:"mayo-event-category"},e.name)})),(null===(n=e.tags)||void 0===n?void 0:n.length)>0&&React.createElement("div",{className:"mayo-archive-event-tags"},e.tags.map(function(e){return React.createElement("span",{key:e.id,className:"mayo-event-tag"},e.name)}))),React.createElement("div",{className:"mayo-archive-event-excerpt",dangerouslySetInnerHTML:{__html:e.content.rendered}}),e.meta.service_body&&React.createElement("p",null,React.createElement("strong",null,"Service Body:")," ",u(e.meta.service_body)),React.createElement("a",{href:e.link,className:"mayo-archive-event-link"},"View Event Details"))))})))):React.createElement("div",{className:"mayo-no-events"},"No archived events found.")};function we(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",r=n.toStringTag||"@@toStringTag";function o(n,a,r,o){var l=a&&a.prototype instanceof i?a:i,s=Object.create(l.prototype);return Se(s,"_invoke",function(n,a,r){var o,i,l,s=0,u=r||[],m=!1,d={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,i=0,l=e,d.n=n,c}};function f(n,a){for(i=n,l=a,t=0;!m&&s&&!r&&t<u.length;t++){var r,o=u[t],f=d.p,v=o[2];n>3?(r=v===a)&&(l=o[(i=o[4])?5:(i=3,3)],o[4]=o[5]=e):o[0]<=f&&((r=n<2&&f<o[1])?(i=0,d.v=a,d.n=o[1]):f<v&&(r=n<3||o[0]>a||a>v)&&(o[4]=n,o[5]=a,d.n=v,i=0))}if(r||n>1)return c;throw m=!0,a}return function(r,u,v){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&f(u,v),i=u,l=v;(t=i<2?e:l)||!m;){o||(i?i<3?(i>1&&(d.n=-1),f(i,l)):d.n=l:d.v=l);try{if(s=2,o){if(i||(r="next"),t=o[r]){if(!(t=t.call(o,l)))throw TypeError("iterator result is not an object");if(!t.done)return t;l=t.value,i<2&&(i=0)}else 1===i&&(t=o.return)&&t.call(o),i<2&&(l=TypeError("The iterator does not provide a '"+r+"' method"),i=1);o=e}else if((t=(m=d.n<0)?l:n.call(a,d))!==c)break}catch(t){o=e,i=1,l=t}finally{s=1}}return{value:t,done:m}}}(n,r,o),!0),s}var c={};function i(){}function l(){}function s(){}t=Object.getPrototypeOf;var u=[][a]?t(t([][a]())):(Se(t={},a,function(){return this}),t),m=s.prototype=i.prototype=Object.create(u);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,Se(e,r,"GeneratorFunction")),e.prototype=Object.create(m),e}return l.prototype=s,Se(m,"constructor",s),Se(s,"constructor",l),l.displayName="GeneratorFunction",Se(s,r,"GeneratorFunction"),Se(m),Se(m,r,"Generator"),Se(m,a,function(){return this}),Se(m,"toString",function(){return"[object Generator]"}),(we=function(){return{w:o,m:d}})()}function Se(e,t,n,a){var r=Object.defineProperty;try{r({},"",{})}catch(e){r=0}Se=function(e,t,n,a){function o(t,n){Se(e,t,function(e){return this._invoke(t,n,e)})}t?r?r(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},Se(e,t,n,a)}function Ne(e,t,n,a,r,o,c){try{var i=e[o](c),l=i.value}catch(e){return void n(e)}i.done?t(l):Promise.resolve(l).then(a,r)}function ke(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,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(e,t)||function(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}}(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 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}const Te=function(){var t,n,a=ke((0,e.useState)(null),2),r=a[0],o=a[1],c=ke((0,e.useState)(!0),2),i=c[0],l=c[1],s=ke((0,e.useState)(null),2),u=s[0],m=s[1],d=ke((0,e.useState)([]),2),f=d[0],p=d[1],b=A().getServiceBodyName;if((0,e.useEffect)(function(){var e=function(){var e,t=(e=we().m(function e(){var t,n,a,r;return we().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,t=window.location.pathname.split("/"),n=t[t.length-2],e.n=1,h("/event/".concat(n));case 1:if(!(a=e.v)){e.n=2;break}o(a),a.linked_announcements&&p(a.linked_announcements),e.n=3;break;case 2:throw new Error("Event not found");case 3:e.n=5;break;case 4:e.p=4,r=e.v,console.error("Error fetching event:",r),m("Failed to load event details");case 5:return e.p=5,l(!1),e.f(5);case 6:return e.a(2)}},e,null,[[0,4,5,6]])}),function(){var t=this,n=arguments;return new Promise(function(a,r){var o=e.apply(t,n);function c(e){Ne(o,a,r,c,i,"next",e)}function i(e){Ne(o,a,r,c,i,"throw",e)}c(void 0)})});return function(){return t.apply(this,arguments)}}();e()},[]),i)return React.createElement("div",null,"Loading event details...");if(u)return React.createElement("div",{className:"mayo-error"},u);if(!r)return React.createElement("div",null,"Event not found");var E=r.title,_=r.content,R=r.meta,w=R.event_type,S=(R.event_start_date,R.event_end_date,R.event_start_time,R.event_end_time,R.timezone,R.location_name),N=R.location_address,k=R.location_details,O=R.recurring_pattern,T=R.service_body;return React.createElement("div",{className:"mayo-single-container"},React.createElement("article",{className:"mayo-single-event"},React.createElement("div",{className:"mayo-single-event-content"},React.createElement("header",{className:"mayo-single-event-header"},React.createElement("h1",{className:"mayo-single-event-title",dangerouslySetInnerHTML:{__html:E.rendered}})),f.length>0&&React.createElement("div",{className:"mayo-event-announcements"},f.map(function(e){var t={urgent:"#dc3545",high:"#ff9800",normal:"#0073aa",low:"#6c757d"},n=t[e.priority]||t.normal;return React.createElement("div",{key:e.id,className:"mayo-event-announcement-notice",style:{padding:"12px 16px",marginBottom:"16px",backgroundColor:"#fff8e1",borderLeft:"4px solid ".concat(n),borderRadius:"4px"}},React.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px",marginBottom:"4px"}},React.createElement("span",{className:"dashicons dashicons-megaphone",style:{color:n,fontSize:"18px"}}),React.createElement("strong",{style:{fontSize:"15px"}},e.title),e.priority&&"normal"!==e.priority&&React.createElement("span",{style:{backgroundColor:n,color:"#fff",padding:"2px 6px",borderRadius:"3px",fontSize:"10px",textTransform:"uppercase"}},e.priority)),e.excerpt&&React.createElement("p",{style:{margin:"8px 0 0",fontSize:"14px",color:"#555"},dangerouslySetInnerHTML:{__html:e.excerpt.replace(/<[^>]+>/g,"").substring(0,200)+(e.excerpt.length>200?"...":"")}}))})),r.featured_image&&React.createElement("div",{className:"mayo-single-event-image"},React.createElement("div",{className:"mayo-image-actions"},React.createElement("a",{href:r.featured_image,download:!0,className:"mayo-image-link"},"Download Flyer")),React.createElement("a",{href:r.featured_image,target:"_blank",rel:"noopener noreferrer"},React.createElement("img",{src:r.featured_image,alt:E.rendered}))),React.createElement("div",{className:"mayo-single-event-description"},React.createElement("h3",null,"Description"),React.createElement("div",{dangerouslySetInnerHTML:{__html:_.rendered}})),(S||N||k)&&React.createElement("div",{className:"mayo-single-event-location"},React.createElement("h3",null,"Location"),S&&React.createElement("p",{className:"mayo-location-name"},S),N&&React.createElement("p",{className:"mayo-location-address"},React.createElement(J,{address:N})),k&&React.createElement("p",{className:"mayo-location-details"},k)),React.createElement("div",{className:"mayo-single-event-meta"},w&&React.createElement("div",{className:"mayo-single-event-type"},React.createElement("h3",null,"Event Type"),React.createElement("p",null,w)),T&&React.createElement("div",{className:"mayo-single-event-service-body"},React.createElement("h3",null,"Service Body"),React.createElement("p",null,b(T))),React.createElement("div",{className:"mayo-single-event-datetime"},React.createElement("h3",null,"Date & Time"),React.createElement("p",null,React.createElement("strong",null,"Start:")," ",r.meta.event_start_date," at ",v(r.meta.event_start_time,"12hour"),r.meta.timezone&&" (".concat(y(r.meta.timezone),")")),(r.meta.event_end_date||r.meta.event_end_time)&&React.createElement("p",null,React.createElement("strong",null,"End:")," ",r.meta.event_end_date||r.meta.event_start_date," at ",v(r.meta.event_end_time,"12hour"))),O&&"none"!==O.type&&React.createElement("div",{className:"mayo-single-event-recurrence"},React.createElement("h3",null,"Recurring Event"),React.createElement("p",null,g(O))),React.createElement("div",{className:"mayo-single-event-taxonomies"},(null===(t=r.categories)||void 0===t?void 0:t.length)>0&&React.createElement("div",{className:"mayo-single-event-categories"},React.createElement("h3",null,"Categories"),r.categories.map(function(e){return React.createElement("a",{key:e.id,href:e.link},e.name)})),(null===(n=r.tags)||void 0===n?void 0:n.length)>0&&React.createElement("div",{className:"mayo-single-event-tags"},React.createElement("h3",null,"Tags"),r.tags.map(function(e){return React.createElement("a",{key:e.id,href:e.link},e.name)})))))))};function Ae(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 je=function(t){var n,a,r=t.announcements,o=t.currentIndex,c=t.onPrev,i=t.onNext,l=t.onClose,s=t.backgroundColor,u=t.textColor,m=t.autoRotateInterval,d=void 0===m?5e3:m,f=(0,e.useRef)(null),v=(n=(0,e.useState)(!1),a=2,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(n,a)||function(e,t){if(e){if("string"==typeof e)return Ae(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)?Ae(e,t):void 0}}(n,a)||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.")}()),y=v[0],p=v[1],g={};if(s&&(g.background=s),u&&(g.color=u),(0,e.useEffect)(function(){var e=function(){if(f.current){var e=f.current.offsetHeight;document.body.style.paddingTop="".concat(e,"px")}};return e(),window.addEventListener("resize",e),function(){document.body.style.paddingTop="",window.removeEventListener("resize",e)}},[r]),(0,e.useEffect)(function(){if(!(r.length<=1||y)){var e=setInterval(function(){i()},d);return function(){return clearInterval(e)}}},[r.length,y,i,d]),0===r.length)return null;var h=r[o];if(!h)return null;var b=r.length>1;return React.createElement("div",{className:"mayo-announcement-banner",ref:f,style:g,onMouseEnter:function(){return p(!0)},onMouseLeave:function(){return p(!1)}},React.createElement("div",{className:"mayo-announcement-banner-content"},b&&React.createElement("button",{className:"mayo-announcement-nav mayo-announcement-prev",onClick:c,title:"Previous"},React.createElement("span",{className:"dashicons dashicons-arrow-left-alt2"})),React.createElement("div",{className:"mayo-announcement-slider"},React.createElement("div",{key:o,className:"mayo-announcement-item mayo-slide-enter-down"},React.createElement("span",{className:"mayo-announcement-icon"},React.createElement("span",{className:"dashicons dashicons-megaphone"})),function(e){if(!e||"normal"===e)return null;var t={low:"#6c757d",high:"#ff9800",urgent:"#dc3545"};return React.createElement("span",{className:"mayo-announcement-priority",style:{backgroundColor:t[e]||t.normal,color:"#fff",padding:"2px 6px",borderRadius:"3px",fontSize:"10px",textTransform:"uppercase",marginRight:"8px"}},e)}(h.priority),React.createElement("a",{href:h.link,className:"mayo-announcement-title",dangerouslySetInnerHTML:{__html:h.title}}),h.linked_events&&h.linked_events.length>0&&React.createElement("span",{className:"mayo-announcement-linked-events",style:{marginLeft:"8px",fontSize:"12px",opacity:.9}},h.linked_events.map(function(e,t){var n,a,r,o,c=e.source&&"custom"===e.source.type,i=e.source&&"external"===e.source.type,l=e.unavailable,s=c||i;return React.createElement("span",{key:"".concat((null===(n=e.source)||void 0===n?void 0:n.type)||"local","-").concat((null===(a=e.source)||void 0===a?void 0:a.id)||"local","-").concat(e.id)},l?React.createElement("span",{style:{opacity:.7,fontStyle:"italic"}},e.title):React.createElement(React.Fragment,null,c&&e.icon&&React.createElement("span",{className:"dashicons ".concat((o=e.icon,{external:"dashicons-external",hotel:"dashicons-building",info:"dashicons-info",calendar:"dashicons-calendar-alt",location:"dashicons-location",link:"dashicons-admin-links"}[o]||"dashicons-external")),style:{fontSize:"12px",marginRight:"2px",verticalAlign:"middle",width:"12px",height:"12px"}}),!c&&0===t&&React.createElement("span",{className:"dashicons dashicons-calendar-alt",style:{fontSize:"12px",marginRight:"4px",verticalAlign:"middle"}}),React.createElement("a",{href:e.permalink,target:s?"_blank":"_self",rel:s?"noopener noreferrer":void 0,style:{color:"inherit",textDecoration:"underline"}},e.title,i&&(null===(r=e.source)||void 0===r?void 0:r.name)&&React.createElement("span",{style:{opacity:.8,marginLeft:"2px"}},"(",e.source.name,")"))),t<h.linked_events.length-1&&", ")})),b&&React.createElement("span",{className:"mayo-announcement-counter"},o+1," / ",r.length))),b&&React.createElement("button",{className:"mayo-announcement-nav mayo-announcement-next",onClick:i,title:"Next"},React.createElement("span",{className:"dashicons dashicons-arrow-right-alt2"}))),React.createElement("button",{className:"mayo-announcement-close",onClick:l,title:"Dismiss"},React.createElement("span",{className:"dashicons dashicons-no-alt"})))},xe=function(t){var n=t.announcements,a=(t.timeFormat,t.onClose),r=t.backgroundColor,o=t.textColor,c={};return r&&(c.background=r),o&&(c.color=o),(0,e.useEffect)(function(){var e=function(e){"Escape"===e.key&&a()};return document.addEventListener("keydown",e),document.body.style.overflow="hidden",function(){document.removeEventListener("keydown",e),document.body.style.overflow=""}},[a]),0===n.length?null:React.createElement("div",{className:"mayo-announcement-modal-backdrop",onClick:function(e){e.target===e.currentTarget&&a()}},React.createElement("div",{className:"mayo-announcement-modal"},React.createElement("button",{className:"mayo-announcement-modal-close",onClick:a,title:"Close"},React.createElement("span",{className:"dashicons dashicons-no-alt"})),React.createElement("div",{className:"mayo-announcement-modal-header",style:c},React.createElement("span",{className:"dashicons dashicons-megaphone"}),React.createElement("h2",null,"Announcements")),React.createElement("div",{className:"mayo-announcement-modal-body"},React.createElement("ul",{className:"mayo-announcement-list"},n.map(function(e){return React.createElement("li",{key:e.id,className:"mayo-announcement-list-item"},React.createElement("div",{className:"mayo-announcement-list-header"},function(e){if(!e||"normal"===e)return null;var t={low:"#6c757d",high:"#ff9800",urgent:"#dc3545"};return React.createElement("span",{className:"mayo-announcement-priority",style:{backgroundColor:t[e]||t.normal,color:"#fff",padding:"2px 6px",borderRadius:"3px",fontSize:"10px",textTransform:"uppercase",marginRight:"8px"}},e)}(e.priority)),React.createElement("a",{href:e.link,className:"mayo-announcement-list-title",dangerouslySetInnerHTML:{__html:e.title}}),e.excerpt&&React.createElement("div",{className:"mayo-announcement-list-excerpt",dangerouslySetInnerHTML:{__html:e.excerpt.replace(/<[^>]+>/g,"").substring(0,150)+"..."}}),e.linked_events&&e.linked_events.length>0&&React.createElement("div",{className:"mayo-announcement-linked-events",style:{marginTop:"8px",fontSize:"12px",color:"#666"}},React.createElement("span",{style:{marginRight:"4px"}},"Related:"),e.linked_events.map(function(t,n){var a,r,o,c,i,l=t.source&&"custom"===t.source.type,s=t.source&&"external"===t.source.type,u=t.unavailable,m=l||s;return React.createElement("span",{key:"".concat((null===(a=t.source)||void 0===a?void 0:a.type)||"local","-").concat((null===(r=t.source)||void 0===r?void 0:r.id)||"local","-").concat(t.id)},u?React.createElement("span",{style:{color:"#999",fontStyle:"italic"}},t.title,s&&(null===(o=t.source)||void 0===o?void 0:o.name)&&React.createElement("span",{style:{fontSize:"10px",marginLeft:"4px"}},"(",t.source.name,")")):React.createElement(React.Fragment,null,l&&t.icon&&React.createElement("span",{className:"dashicons ".concat((i=t.icon,{external:"dashicons-external",hotel:"dashicons-building",info:"dashicons-info",calendar:"dashicons-calendar-alt",location:"dashicons-location",link:"dashicons-admin-links"}[i]||"dashicons-external")),style:{fontSize:"14px",marginRight:"2px",verticalAlign:"middle",width:"14px",height:"14px"}}),!l&&React.createElement("span",{className:"dashicons dashicons-calendar-alt",style:{fontSize:"14px",marginRight:"2px",verticalAlign:"middle"}}),React.createElement("a",{href:t.permalink,target:m?"_blank":"_self",rel:m?"noopener noreferrer":void 0,style:{color:"#0073aa",textDecoration:"none"}},t.title,s&&(null===(c=t.source)||void 0===c?void 0:c.name)&&React.createElement("span",{style:{fontSize:"10px",color:"#888",marginLeft:"4px"}},"(",t.source.name,")"))),n<e.linked_events.length-1&&", ")})))}))),React.createElement("div",{className:"mayo-announcement-modal-footer"},React.createElement("button",{className:"mayo-announcement-dismiss-button",onClick:a},"Dismiss"))))},Ce=function(e){var t=e.count,n=e.onClick,a=e.backgroundColor,r=e.textColor,o={};return a&&(o.background=a),r&&(o.color=r),React.createElement("button",{className:"mayo-announcement-bell",onClick:n,title:"".concat(t," announcement").concat(1!==t?"s":""," - Click to view"),style:o},React.createElement("span",{className:"dashicons dashicons-bell"}),t>0&&React.createElement("span",{className:"mayo-announcement-bell-badge"},t>9?"9+":t))};function Pe(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",r=n.toStringTag||"@@toStringTag";function o(n,a,r,o){var l=a&&a.prototype instanceof i?a:i,s=Object.create(l.prototype);return De(s,"_invoke",function(n,a,r){var o,i,l,s=0,u=r||[],m=!1,d={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,i=0,l=e,d.n=n,c}};function f(n,a){for(i=n,l=a,t=0;!m&&s&&!r&&t<u.length;t++){var r,o=u[t],f=d.p,v=o[2];n>3?(r=v===a)&&(l=o[(i=o[4])?5:(i=3,3)],o[4]=o[5]=e):o[0]<=f&&((r=n<2&&f<o[1])?(i=0,d.v=a,d.n=o[1]):f<v&&(r=n<3||o[0]>a||a>v)&&(o[4]=n,o[5]=a,d.n=v,i=0))}if(r||n>1)return c;throw m=!0,a}return function(r,u,v){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&f(u,v),i=u,l=v;(t=i<2?e:l)||!m;){o||(i?i<3?(i>1&&(d.n=-1),f(i,l)):d.n=l:d.v=l);try{if(s=2,o){if(i||(r="next"),t=o[r]){if(!(t=t.call(o,l)))throw TypeError("iterator result is not an object");if(!t.done)return t;l=t.value,i<2&&(i=0)}else 1===i&&(t=o.return)&&t.call(o),i<2&&(l=TypeError("The iterator does not provide a '"+r+"' method"),i=1);o=e}else if((t=(m=d.n<0)?l:n.call(a,d))!==c)break}catch(t){o=e,i=1,l=t}finally{s=1}}return{value:t,done:m}}}(n,r,o),!0),s}var c={};function i(){}function l(){}function s(){}t=Object.getPrototypeOf;var u=[][a]?t(t([][a]())):(De(t={},a,function(){return this}),t),m=s.prototype=i.prototype=Object.create(u);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,De(e,r,"GeneratorFunction")),e.prototype=Object.create(m),e}return l.prototype=s,De(m,"constructor",s),De(s,"constructor",l),l.displayName="GeneratorFunction",De(s,r,"GeneratorFunction"),De(m),De(m,r,"Generator"),De(m,a,function(){return this}),De(m,"toString",function(){return"[object Generator]"}),(Pe=function(){return{w:o,m:d}})()}function De(e,t,n,a){var r=Object.defineProperty;try{r({},"",{})}catch(e){r=0}De=function(e,t,n,a){function o(t,n){De(e,t,function(e){return this._invoke(t,n,e)})}t?r?r(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},De(e,t,n,a)}function Fe(e,t,n,a,r,o,c){try{var i=e[o](c),l=i.value}catch(e){return void n(e)}i.done?t(l):Promise.resolve(l).then(a,r)}function Ie(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,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Me(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)?Me(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 Me(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 Le=function(t){var n=t.settings,a=void 0===n?{}:n,r=Ie((0,e.useState)([]),2),o=r[0],c=r[1],i=Ie((0,e.useState)(!0),2),l=i[0],s=i[1],u=Ie((0,e.useState)(!1),2),m=(u[0],u[1]),d=Ie((0,e.useState)(!1),2),f=d[0],v=d[1],y=Ie((0,e.useState)(0),2),p=y[0],g=y[1],b=a.mode||"banner",E=a.categories||"",_=a.categoryRelation||"OR",R=a.tags||"",w=a.priority||"",S=a.timeFormat||"12hour",N=a.backgroundColor||"",k=a.textColor||"",O=a.orderBy||"date",T=a.order||"",A=(0,e.useCallback)(function(e){var t=e.sort().join("-");return"mayo_announcement_dismissed_".concat(b,"_").concat(t)},[b]),j=(0,e.useCallback)(function(e){if(0===e.length)return!1;var t=A(e),n=localStorage.getItem(t);if(!n)return!1;var a=parseInt(n,10);return Date.now()-a<864e5},[A]);(0,e.useEffect)(function(){var e=function(){var e,t=(e=Pe().m(function e(){var t,n,a,r,o;return Pe().w(function(e){for(;;)switch(e.p=e.n){case 0:return s(!0),e.p=1,t="/announcements?per_page=20",E&&(t+="&categories=".concat(encodeURIComponent(E))),_&&"OR"!==_&&(t+="&category_relation=".concat(encodeURIComponent(_))),R&&(t+="&tags=".concat(encodeURIComponent(R))),w&&(t+="&priority=".concat(encodeURIComponent(w))),O&&(t+="&orderby=".concat(encodeURIComponent(O))),T&&(t+="&order=".concat(encodeURIComponent(T))),e.n=2,h(t);case 2:n=e.v,a=Array.isArray(n)?n:n.announcements||[],c(a),r=a.map(function(e){return e.id}),j(r)&&(m(!0),v(!0)),e.n=4;break;case 3:e.p=3,o=e.v,console.error("Error fetching announcements:",o),c([]);case 4:return e.p=4,s(!1),e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}),function(){var t=this,n=arguments;return new Promise(function(a,r){var o=e.apply(t,n);function c(e){Fe(o,a,r,c,i,"next",e)}function i(e){Fe(o,a,r,c,i,"throw",e)}c(void 0)})});return function(){return t.apply(this,arguments)}}();e()},[E,_,R,w,O,T,j]);var x=(0,e.useCallback)(function(){var e=o.map(function(e){return e.id}),t=A(e);localStorage.setItem(t,Date.now().toString()),m(!0),v(!0)},[o,A]),C=(0,e.useCallback)(function(){m(!1),v(!1);var e=o.map(function(e){return e.id}),t=A(e);localStorage.removeItem(t)},[o,A]),P=(0,e.useCallback)(function(){g(function(e){return 0===e?o.length-1:e-1})},[o.length]),D=(0,e.useCallback)(function(){g(function(e){return e>=o.length-1?0:e+1})},[o.length]);return(0,e.useEffect)(function(){o.length>0&&p>=o.length&&g(0)},[o.length,p]),l||0===o.length?null:f?React.createElement("div",{className:"mayo-announcement-bell-wrapper mayo-announcement-bell-".concat(b)},React.createElement(Ce,{count:o.length,onClick:C,backgroundColor:N,textColor:k})):"modal"===b?React.createElement(xe,{announcements:o,timeFormat:S,onClose:x,backgroundColor:N,textColor:k}):React.createElement(je,{announcements:o,currentIndex:p,onPrev:P,onNext:D,onClose:x,backgroundColor:N,textColor:k})};function Ge(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",r=n.toStringTag||"@@toStringTag";function o(n,a,r,o){var l=a&&a.prototype instanceof i?a:i,s=Object.create(l.prototype);return Be(s,"_invoke",function(n,a,r){var o,i,l,s=0,u=r||[],m=!1,d={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,i=0,l=e,d.n=n,c}};function f(n,a){for(i=n,l=a,t=0;!m&&s&&!r&&t<u.length;t++){var r,o=u[t],f=d.p,v=o[2];n>3?(r=v===a)&&(l=o[(i=o[4])?5:(i=3,3)],o[4]=o[5]=e):o[0]<=f&&((r=n<2&&f<o[1])?(i=0,d.v=a,d.n=o[1]):f<v&&(r=n<3||o[0]>a||a>v)&&(o[4]=n,o[5]=a,d.n=v,i=0))}if(r||n>1)return c;throw m=!0,a}return function(r,u,v){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&f(u,v),i=u,l=v;(t=i<2?e:l)||!m;){o||(i?i<3?(i>1&&(d.n=-1),f(i,l)):d.n=l:d.v=l);try{if(s=2,o){if(i||(r="next"),t=o[r]){if(!(t=t.call(o,l)))throw TypeError("iterator result is not an object");if(!t.done)return t;l=t.value,i<2&&(i=0)}else 1===i&&(t=o.return)&&t.call(o),i<2&&(l=TypeError("The iterator does not provide a '"+r+"' method"),i=1);o=e}else if((t=(m=d.n<0)?l:n.call(a,d))!==c)break}catch(t){o=e,i=1,l=t}finally{s=1}}return{value:t,done:m}}}(n,r,o),!0),s}var c={};function i(){}function l(){}function s(){}t=Object.getPrototypeOf;var u=[][a]?t(t([][a]())):(Be(t={},a,function(){return this}),t),m=s.prototype=i.prototype=Object.create(u);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,Be(e,r,"GeneratorFunction")),e.prototype=Object.create(m),e}return l.prototype=s,Be(m,"constructor",s),Be(s,"constructor",l),l.displayName="GeneratorFunction",Be(s,r,"GeneratorFunction"),Be(m),Be(m,r,"Generator"),Be(m,a,function(){return this}),Be(m,"toString",function(){return"[object Generator]"}),(Ge=function(){return{w:o,m:d}})()}function Be(e,t,n,a){var r=Object.defineProperty;try{r({},"",{})}catch(e){r=0}Be=function(e,t,n,a){function o(t,n){Be(e,t,function(e){return this._invoke(t,n,e)})}t?r?r(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},Be(e,t,n,a)}function Ue(e,t,n,a,r,o,c){try{var i=e[o](c),l=i.value}catch(e){return void n(e)}i.done?t(l):Promise.resolve(l).then(a,r)}function ze(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,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return We(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)?We(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 We(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 qe=function(){var t,n,a=ze((0,e.useState)(null),2),r=a[0],o=a[1],c=ze((0,e.useState)(!0),2),i=c[0],l=c[1],s=ze((0,e.useState)(null),2),u=s[0],m=s[1],d=A().getServiceBodyName;if((0,e.useEffect)(function(){var e=function(){var e,t=(e=Ge().m(function e(){var t,n,a,r;return Ge().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,t=window.location.pathname.split("/"),n=t[t.length-2],e.n=1,h("/announcement-by-slug/".concat(n));case 1:if(!(a=e.v)){e.n=2;break}o(a),e.n=3;break;case 2:throw new Error("Announcement not found");case 3:e.n=5;break;case 4:e.p=4,r=e.v,console.error("Error fetching announcement:",r),m("Failed to load announcement");case 5:return e.p=5,l(!1),e.f(5);case 6:return e.a(2)}},e,null,[[0,4,5,6]])}),function(){var t=this,n=arguments;return new Promise(function(a,r){var o=e.apply(t,n);function c(e){Ue(o,a,r,c,i,"next",e)}function i(e){Ue(o,a,r,c,i,"throw",e)}c(void 0)})});return function(){return t.apply(this,arguments)}}();e()},[]),i)return React.createElement("div",{className:"mayo-single-container"},React.createElement("div",{className:"mayo-loading"},"Loading announcement..."));if(u)return React.createElement("div",{className:"mayo-single-container"},React.createElement("div",{className:"mayo-error"},u));if(!r)return React.createElement("div",{className:"mayo-single-container"},React.createElement("div",{className:"mayo-error"},"Announcement not found"));var f={urgent:"#dc3545",high:"#ff9800",normal:"#0073aa",low:"#6c757d"},v=f[r.priority]||f.normal,y=function(e,t){if(!e)return null;var n=e;return t&&(n+=" at ".concat(function(e){if(!e)return"";try{var t=ze(e.split(":"),2),n=t[0],a=t[1],r=parseInt(n,10),o=r>=12?"PM":"AM";return"".concat(r%12||12,":").concat(a," ").concat(o)}catch(t){return e}}(t))),n};return React.createElement("div",{className:"mayo-single-container"},React.createElement("article",{className:"mayo-single-announcement mayo-priority-".concat(r.priority||"normal")},React.createElement("header",{className:"mayo-single-announcement-header"},React.createElement("div",{className:"mayo-announcement-priority-bar",style:{backgroundColor:v}}),React.createElement("h1",{className:"mayo-single-announcement-title"},React.createElement("span",{dangerouslySetInnerHTML:{__html:r.title}})),r.priority&&"normal"!==r.priority&&React.createElement("span",{className:"mayo-priority-badge",style:{backgroundColor:v}},r.priority)),r.featured_image&&React.createElement("div",{className:"mayo-single-announcement-image"},React.createElement("a",{href:r.featured_image,target:"_blank",rel:"noopener noreferrer"},React.createElement("img",{src:r.featured_image,alt:r.title}))),React.createElement("div",{className:"mayo-single-announcement-body"},React.createElement("div",{dangerouslySetInnerHTML:{__html:r.content}})),r.linked_events&&r.linked_events.length>0&&React.createElement("div",{className:"mayo-single-announcement-events"},React.createElement("h3",null,React.createElement("span",{className:"dashicons dashicons-admin-links"}),"Related Links & Events"),React.createElement("ul",null,r.linked_events.map(function(e){var t,n,a,r,o,c=e.source&&"custom"===e.source.type,i=e.source&&"external"===e.source.type,l=e.unavailable,s=c||i;return React.createElement("li",{key:"".concat((null===(t=e.source)||void 0===t?void 0:t.type)||"local","-").concat((null===(n=e.source)||void 0===n?void 0:n.id)||"local","-").concat(e.id)},l?React.createElement("span",{className:"mayo-event-unavailable"},e.title,i&&(null===(a=e.source)||void 0===a?void 0:a.name)&&React.createElement("span",{className:"mayo-event-source"},"(",e.source.name,")")):React.createElement("a",{href:e.permalink,target:s?"_blank":"_self",rel:s?"noopener noreferrer":void 0},c&&e.icon&&React.createElement("span",{className:"dashicons ".concat((o=e.icon,{external:"dashicons-external",hotel:"dashicons-building",info:"dashicons-info",calendar:"dashicons-calendar-alt",location:"dashicons-location",link:"dashicons-admin-links"}[o]||"dashicons-external")," mayo-custom-link-icon")}),!c&&React.createElement("span",{className:"dashicons dashicons-calendar-alt mayo-event-icon"}),React.createElement("span",{className:"mayo-event-title"},e.title),e.start_date&&!c&&React.createElement("span",{className:"mayo-event-date"},e.start_date),c&&React.createElement("span",{className:"mayo-custom-link-badge"},"Link"),i&&(null===(r=e.source)||void 0===r?void 0:r.name)&&React.createElement("span",{className:"mayo-event-source-badge"},e.source.name)))}))),React.createElement("div",{className:"mayo-single-announcement-meta"},r.service_body&&React.createElement("div",{className:"mayo-announcement-service-body"},React.createElement("h3",null,"Service Body"),React.createElement("p",null,d(r.service_body))),(r.display_start_date||r.display_end_date)&&React.createElement("div",{className:"mayo-announcement-display-window"},React.createElement("h3",null,"Display Window"),r.display_start_date&&React.createElement("p",null,React.createElement("strong",null,"From:")," ",y(r.display_start_date,r.display_start_time)),r.display_end_date&&React.createElement("p",null,React.createElement("strong",null,"Until:")," ",y(r.display_end_date,r.display_end_time)))),React.createElement("div",{className:"mayo-single-announcement-taxonomies"},(null===(t=r.categories)||void 0===t?void 0:t.length)>0&&React.createElement("div",{className:"mayo-single-announcement-categories"},React.createElement("h3",null,"Categories"),r.categories.map(function(e){return React.createElement("a",{key:e.id,href:e.link},e.name)})),(null===(n=r.tags)||void 0===n?void 0:n.length)>0&&React.createElement("div",{className:"mayo-single-announcement-tags"},React.createElement("h3",null,"Tags"),r.tags.map(function(e){return React.createElement("a",{key:e.id,href:e.link},e.name)})))))};function He(e){return He="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},He(e)}function Je(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",r=n.toStringTag||"@@toStringTag";function o(n,a,r,o){var l=a&&a.prototype instanceof i?a:i,s=Object.create(l.prototype);return Ye(s,"_invoke",function(n,a,r){var o,i,l,s=0,u=r||[],m=!1,d={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,i=0,l=e,d.n=n,c}};function f(n,a){for(i=n,l=a,t=0;!m&&s&&!r&&t<u.length;t++){var r,o=u[t],f=d.p,v=o[2];n>3?(r=v===a)&&(l=o[(i=o[4])?5:(i=3,3)],o[4]=o[5]=e):o[0]<=f&&((r=n<2&&f<o[1])?(i=0,d.v=a,d.n=o[1]):f<v&&(r=n<3||o[0]>a||a>v)&&(o[4]=n,o[5]=a,d.n=v,i=0))}if(r||n>1)return c;throw m=!0,a}return function(r,u,v){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&f(u,v),i=u,l=v;(t=i<2?e:l)||!m;){o||(i?i<3?(i>1&&(d.n=-1),f(i,l)):d.n=l:d.v=l);try{if(s=2,o){if(i||(r="next"),t=o[r]){if(!(t=t.call(o,l)))throw TypeError("iterator result is not an object");if(!t.done)return t;l=t.value,i<2&&(i=0)}else 1===i&&(t=o.return)&&t.call(o),i<2&&(l=TypeError("The iterator does not provide a '"+r+"' method"),i=1);o=e}else if((t=(m=d.n<0)?l:n.call(a,d))!==c)break}catch(t){o=e,i=1,l=t}finally{s=1}}return{value:t,done:m}}}(n,r,o),!0),s}var c={};function i(){}function l(){}function s(){}t=Object.getPrototypeOf;var u=[][a]?t(t([][a]())):(Ye(t={},a,function(){return this}),t),m=s.prototype=i.prototype=Object.create(u);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,Ye(e,r,"GeneratorFunction")),e.prototype=Object.create(m),e}return l.prototype=s,Ye(m,"constructor",s),Ye(s,"constructor",l),l.displayName="GeneratorFunction",Ye(s,r,"GeneratorFunction"),Ye(m),Ye(m,r,"Generator"),Ye(m,a,function(){return this}),Ye(m,"toString",function(){return"[object Generator]"}),(Je=function(){return{w:o,m:d}})()}function Ye(e,t,n,a){var r=Object.defineProperty;try{r({},"",{})}catch(e){r=0}Ye=function(e,t,n,a){function o(t,n){Ye(e,t,function(e){return this._invoke(t,n,e)})}t?r?r(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},Ye(e,t,n,a)}function Ve(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 $e(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ve(Object(n),!0).forEach(function(t){Ze(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ve(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Ze(e,t,n){return(t=function(e){var t=function(e){if("object"!=He(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=He(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==He(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ke(e,t,n,a,r,o,c){try{var i=e[o](c),l=i.value}catch(e){return void n(e)}i.done?t(l):Promise.resolve(l).then(a,r)}function Xe(e){return function(){var t=this,n=arguments;return new Promise(function(a,r){var o=e.apply(t,n);function c(e){Ke(o,a,r,c,i,"next",e)}function i(e){Ke(o,a,r,c,i,"throw",e)}c(void 0)})}}function Qe(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,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(e,t)||tt(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 et(e){return function(e){if(Array.isArray(e))return nt(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||tt(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 tt(e,t){if(e){if("string"==typeof e)return nt(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)?nt(e,t):void 0}}function nt(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 at=function(){var t,n,a,r,o=document.getElementById("mayo-announcement-form"),c=null==o||null===(t=o.dataset)||void 0===t?void 0:t.settings,i=window[c]||{},l=(null==o||null===(n=o.dataset)||void 0===n?void 0:n.categories)||"",s=(0,e.useMemo)(function(){return l?l.split(",").map(function(e){return e.trim().toLowerCase()}):[]},[l]),u=(0,e.useMemo)(function(){return s.filter(function(e){return!e.startsWith("-")})},[s]),m=(0,e.useMemo)(function(){return s.filter(function(e){return e.startsWith("-")}).map(function(e){return e.substring(1)})},[s]),d=(null==o||null===(a=o.dataset)||void 0===a?void 0:a.tags)||"",f=(0,e.useMemo)(function(){return d?d.split(",").map(function(e){return e.trim().toLowerCase()}):[]},[d]),v=(0,e.useMemo)(function(){return f.filter(function(e){return!e.startsWith("-")})},[f]),y=(0,e.useMemo)(function(){return f.filter(function(e){return e.startsWith("-")}).map(function(e){return e.substring(1)})},[f]),p=function(e){var t=document.createElement("textarea");return t.innerHTML=e,t.value},g=i.additionalRequiredFields?i.additionalRequiredFields.split(",").map(function(e){return e.trim()}):[],b=[].concat(["title","description","service_body","email","contact_name"],et(g)),E=!0===i.showFlyer||"true"===i.showFlyer,_=Qe((0,e.useState)({title:"",description:"",start_date:"",start_time:"",end_date:"",end_time:"",flyer:null,categories:[],tags:[],service_body:"",email:"",contact_name:""}),2),R=_[0],w=_[1],S=Qe((0,e.useState)(!1),2),N=S[0],k=S[1],O=Qe((0,e.useState)(null),2),T=O[0],j=O[1],x=Qe((0,e.useState)([]),2),C=x[0],P=x[1],D=Qe((0,e.useState)([]),2),F=D[0],I=D[1],M=Qe((0,e.useState)(null),2),L=M[0],G=(M[1],A().serviceBodies),B=Qe((0,e.useState)(null),2),U=B[0],z=B[1],W=Qe((0,e.useState)({default_service_bodies:""}),2),q=W[0],H=W[1],J=Qe((0,e.useState)({categories:[],tags:[],service_bodies:[]}),2),Y=J[0],V=J[1];(0,e.useEffect)(function(){var e=function(){var e=Xe(Je().m(function e(){var t,n,a,r,o,c,l,s;return Je().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,Promise.all([h("/settings"),h("/subscription-options")]);case 1:n=e.v,a=Qe(n,2),r=a[0],o=a[1],c={default_service_bodies:r.default_service_bodies||""},void 0!==i.defaultServiceBodies&&""!==i.defaultServiceBodies&&(c.default_service_bodies=i.defaultServiceBodies),H(c),V(o||{categories:[],tags:[],service_bodies:[]}),(l=null===(t=c.default_service_bodies)||void 0===t?void 0:t.split(",").map(function(e){return e.trim()}).filter(function(e){return e}))&&1===l.length&&w(function(e){return $e($e({},e),{},{service_body:l[0]})}),e.n=3;break;case 2:e.p=2,s=e.v,console.error("Error fetching settings:",s);case 3:return e.a(2)}},e,null,[[0,2]])}));return function(){return e.apply(this,arguments)}}();e()},[i]),(0,e.useEffect)(function(){var e=function(){var e=Xe(Je().m(function e(){var t,n,a,r,o,c,i,l,s,d,f;return Je().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,Promise.all([fetch("/wp-json/wp/v2/categories?hide_empty=false&per_page=100"),fetch("/wp-json/wp/v2/tags?hide_empty=false&per_page=100")]);case 1:if(t=e.v,n=Qe(t,2),a=n[0],r=n[1],a.ok&&r.ok){e.n=2;break}throw new Error("Failed to fetch taxonomies");case 2:return e.n=3,a.json();case 3:return o=e.v,e.n=4,r.json();case 4:c=e.v,i=Y.categories.map(function(e){return e.id}),l=Y.tags.map(function(e){return e.id}),s=o.filter(function(e){if(i.length>0&&!i.includes(e.id))return!1;var t=(e.slug||"").toLowerCase();return u.length>0?u.includes(t):!(m.length>0&&m.includes(t))}),d=c.filter(function(e){if(l.length>0&&!l.includes(e.id))return!1;var t=(e.slug||"").toLowerCase();return v.length>0?v.includes(t):!(y.length>0&&y.includes(t))}),P(Array.isArray(s)?s:[]),I(Array.isArray(d)?d:[]),e.n=6;break;case 5:e.p=5,f=e.v,console.error("Error fetching taxonomies:",f),P([]),I([]);case 6:return e.a(2)}},e,null,[[0,5]])}));return function(){return e.apply(this,arguments)}}();e()},[u,m,v,y,Y]);var $,Z,K=function(){var e=Xe(Je().m(function e(t){var n,a,r,o,c,i,l,s,u,m,d,f,v,y;return Je().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t.preventDefault(),k(!0),j(null),e.p=1,!R.flyer){e.n=2;break}if(o=["image/jpeg","image/png","image/gif"],c=R.flyer.name.split(".").pop().toLowerCase(),i=["jpg","jpeg","png","gif"],o.includes(R.flyer.type)&&i.includes(c)){e.n=2;break}throw new Error("You did not attach a valid image file. Please choose a valid image file (JPG, PNG, or GIF)");case 2:if(!((l=b.filter(function(e){return"flyer"===e?!R.flyer:!R[e]})).length>0)){e.n=3;break}throw new Error("Please fill in all required fields: ".concat(l.join(", ")));case 3:return s=new FormData,Object.keys(R).forEach(function(e){"flyer"===e&&R[e]instanceof File?s.append("flyer",R[e]):"categories"===e||"tags"===e?s.append(e,R[e].join(",")):null!=R[e]&&""!==R[e]&&s.append(e,R[e])}),u=(null===(n=window.mayoApiSettings)||void 0===n?void 0:n.nonce)||(null===(a=document.querySelector("#_wpnonce"))||void 0===a?void 0:a.value)||(null===(r=window.wpApiSettings)||void 0===r?void 0:r.nonce),e.n=4,h("/submit-announcement",{method:"POST",body:s,credentials:"same-origin",headers:{"X-WP-Nonce":u}});case 4:if(!(m=e.v).id&&!m.success){e.n=5;break}j({type:"success",text:"Announcement submitted successfully!"}),f=null===(d=q.default_service_bodies)||void 0===d?void 0:d.split(",").map(function(e){return e.trim()}).filter(function(e){return e}),v=f&&1===f.length?f[0]:"",w({title:"",description:"",start_date:"",start_time:"",end_date:"",end_time:"",flyer:null,categories:[],tags:[],service_body:v,email:"",contact_name:""}),z(null),e.n=6;break;case 5:throw new Error(m.message||"Failed to submit announcement");case 6:e.n=8;break;case 7:e.p=7,y=e.v,j({type:"error",text:y.message||"Error submitting form"});case 8:return e.p=8,k(!1),e.f(8);case 9:return e.a(2)}},e,null,[[1,7,8,9]])}));return function(t){return e.apply(this,arguments)}}(),X=function(e){var t=e.target,n=t.name,a=t.value,r=t.files;if(r&&r[0]){var o=r[0],c=o.name.split(".").pop().toLowerCase();if(!["image/jpeg","image/png","image/gif"].includes(o.type)||!["jpg","jpeg","png","gif"].includes(c))return j({type:"error",text:"The selected file is not a valid image. Please use a valid image file (JPG, PNG, or GIF)"}),e.target.value="",w(function(e){return $e($e({},e),{},{flyer:null})}),void z(null);var i=new FileReader;i.onload=function(t){var n=new Image;n.onload=function(){z("image"),w(function(e){return $e($e({},e),{},{flyer:o})}),j(null)},n.onerror=function(){j({type:"error",text:"The selected file is not a valid image. Please choose a valid image file (JPG, PNG, or GIF)"}),e.target.value="",w(function(e){return $e($e({},e),{},{flyer:null})}),z(null)},n.src=t.target.result},i.onerror=function(){j({type:"error",text:"Error reading the file"}),e.target.value="",w(function(e){return $e($e({},e),{},{flyer:null})}),z(null)},i.readAsDataURL(o)}else w(function(e){return $e($e({},e),{},Ze({},n,a))})},Q=function(e){return b.includes(e)};return L?React.createElement("div",{className:"mayo-error"},L):React.createElement("div",{className:"mayo-announcement-form"},React.createElement("form",{onSubmit:K},React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"title"},"Announcement Title ",Q("title")&&"*"),React.createElement("input",{type:"text",id:"title",name:"title",value:R.title,onChange:X,required:Q("title")})),(!q.default_service_bodies||(null===(Z=q.default_service_bodies)||void 0===Z?void 0:Z.split(",").map(function(e){return e.trim()}).filter(function(e){return e})).length>1)&&React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"service_body"},"Service Body *"),React.createElement("select",{id:"service_body",name:"service_body",value:R.service_body,onChange:function(e){w(function(t){return $e($e({},t),{},{service_body:e.target.value})})},required:!0},React.createElement("option",{value:""},"Select a service body"),!(($=Y.service_bodies.map(function(e){return e.id.toString()})).length>0&&!$.includes("0"))&&(!q.default_service_bodies||q.default_service_bodies.includes("0"))&&React.createElement("option",{value:"0"},"Unaffiliated (0)"),function(){var e=G,t=Y.service_bodies.map(function(e){return e.id.toString()});if(t.length>0&&(e=e.filter(function(e){return t.includes(e.id.toString())})),q.default_service_bodies){var n=q.default_service_bodies.split(",").map(function(e){return e.trim()}).filter(function(e){return e});e=e.filter(function(e){return n.includes(e.id.toString())})}return e}().map(function(e){return React.createElement("option",{key:e.id,value:e.id},e.name," (",e.id,")")}))),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"contact_name"},"Point of Contact Name (Private) *"),React.createElement("input",{type:"text",id:"contact_name",name:"contact_name",value:R.contact_name,onChange:X,required:!0,placeholder:"Your name (will not be displayed publicly)"})),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"email"},"Point of Contact Email (Private) *"),React.createElement("input",{type:"email",id:"email",name:"email",value:R.email,onChange:X,required:!0,placeholder:"Your email address (will not be displayed publicly)"})),React.createElement("fieldset",{className:"mayo-display-window-fieldset"},React.createElement("legend",null,"Display Window"),React.createElement("p",{className:"mayo-fieldset-description"},"Control when this announcement is visible on the site."),React.createElement("div",{className:"mayo-datetime-group"},React.createElement("div",{className:"mayo-datetime-row"},React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"start_date"},"Start Date ",Q("start_date")&&"*"),React.createElement("input",{type:"date",id:"start_date",name:"start_date",value:R.start_date,onChange:X,required:Q("start_date")})),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"start_time"},"Start Time ",Q("start_time")&&"*"),React.createElement("input",{type:"time",id:"start_time",name:"start_time",value:R.start_time,onChange:X,required:Q("start_time")}))),React.createElement("p",{className:"mayo-field-hint"},"Leave empty to start showing immediately"),React.createElement("div",{className:"mayo-datetime-row"},React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"end_date"},"End Date ",Q("end_date")&&"*"),React.createElement("input",{type:"date",id:"end_date",name:"end_date",value:R.end_date,onChange:X,required:Q("end_date")})),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"end_time"},"End Time ",Q("end_time")&&"*"),React.createElement("input",{type:"time",id:"end_time",name:"end_time",value:R.end_time,onChange:X,required:Q("end_time")}))),React.createElement("p",{className:"mayo-field-hint"},"Leave empty to show indefinitely"))),React.createElement("div",{className:"mayo-form-field"},React.createElement("label",{htmlFor:"description"},"Description ",Q("description")&&"*"),React.createElement("textarea",{id:"description",name:"description",value:R.description,onChange:X,required:Q("description"),rows:"6"})),E&&React.createElement("div",{className:"mayo-form-field"},React.createElement("label",null,"Image/Flyer ",Q("flyer")&&"*"),React.createElement("div",{className:"mayo-upload-section"},!U&&React.createElement(React.Fragment,null,React.createElement("input",{type:"file",id:"flyer-upload",name:"flyer",accept:"image/*",onChange:X,required:Q("flyer"),className:"mayo-file-input"}),React.createElement("label",{htmlFor:"flyer-upload",className:"mayo-upload-button"},"Upload Image"),React.createElement("p",{className:"mayo-upload-info"},"Supported file types: Images (.jpg, .jpeg, .png, .gif)",Q("flyer")&&" (Required)")),U&&React.createElement("div",{className:"mayo-upload-preview"},React.createElement("p",null,"Selected: ",(null===(r=R.flyer)||void 0===r?void 0:r.name)||"No file selected"),React.createElement("button",{type:"button",onClick:function(){w(function(e){return $e($e({},e),{},{flyer:null})}),z(null)},className:"mayo-clear-upload"},"Clear Upload")))),C.length>0&&React.createElement("div",{className:"mayo-form-field"},React.createElement("label",null,"Categories"),React.createElement("div",{className:"mayo-taxonomy-list"},C.map(function(e){return React.createElement("label",{key:null==e?void 0:e.id,className:"mayo-taxonomy-item"},React.createElement("input",{type:"checkbox",checked:R.categories.includes(null==e?void 0:e.id),onChange:function(t){var n=t.target.checked?[].concat(et(R.categories),[null==e?void 0:e.id]):R.categories.filter(function(t){return t!==(null==e?void 0:e.id)});w($e($e({},R),{},{categories:n}))}}),null!=e&&e.name?p(e.name):"Unnamed Category")}))),F.length>0&&React.createElement("div",{className:"mayo-form-field"},React.createElement("label",null,"Tags"),React.createElement("div",{className:"mayo-taxonomy-list"},F.map(function(e){return React.createElement("label",{key:(null==e?void 0:e.id)||"default",className:"mayo-taxonomy-item"},React.createElement("input",{type:"checkbox",checked:R.tags.includes(null==e?void 0:e.name),onChange:function(t){var n=t.target.checked?[].concat(et(R.tags),[null==e?void 0:e.name]):R.tags.filter(function(t){return t!==(null==e?void 0:e.name)});w($e($e({},R),{},{tags:n}))}}),null!=e&&e.name?p(e.name):"Unnamed Tag")}))),React.createElement("button",{type:"submit",disabled:N,className:"mayo-submit-button"},N?"Submitting...":"Submit Announcement"),T&&React.createElement("div",{className:"mayo-message mayo-message-".concat(T.type)},"string"==typeof T.text?T.text:"An error occurred while submitting the form. Please try again.")))};function rt(e){return rt="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},rt(e)}function ot(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 ct(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ot(Object(n),!0).forEach(function(t){it(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ot(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function it(e,t,n){return(t=function(e){var t=function(e){if("object"!=rt(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=rt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==rt(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function lt(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",r=n.toStringTag||"@@toStringTag";function o(n,a,r,o){var l=a&&a.prototype instanceof i?a:i,s=Object.create(l.prototype);return st(s,"_invoke",function(n,a,r){var o,i,l,s=0,u=r||[],m=!1,d={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return o=t,i=0,l=e,d.n=n,c}};function f(n,a){for(i=n,l=a,t=0;!m&&s&&!r&&t<u.length;t++){var r,o=u[t],f=d.p,v=o[2];n>3?(r=v===a)&&(l=o[(i=o[4])?5:(i=3,3)],o[4]=o[5]=e):o[0]<=f&&((r=n<2&&f<o[1])?(i=0,d.v=a,d.n=o[1]):f<v&&(r=n<3||o[0]>a||a>v)&&(o[4]=n,o[5]=a,d.n=v,i=0))}if(r||n>1)return c;throw m=!0,a}return function(r,u,v){if(s>1)throw TypeError("Generator is already running");for(m&&1===u&&f(u,v),i=u,l=v;(t=i<2?e:l)||!m;){o||(i?i<3?(i>1&&(d.n=-1),f(i,l)):d.n=l:d.v=l);try{if(s=2,o){if(i||(r="next"),t=o[r]){if(!(t=t.call(o,l)))throw TypeError("iterator result is not an object");if(!t.done)return t;l=t.value,i<2&&(i=0)}else 1===i&&(t=o.return)&&t.call(o),i<2&&(l=TypeError("The iterator does not provide a '"+r+"' method"),i=1);o=e}else if((t=(m=d.n<0)?l:n.call(a,d))!==c)break}catch(t){o=e,i=1,l=t}finally{s=1}}return{value:t,done:m}}}(n,r,o),!0),s}var c={};function i(){}function l(){}function s(){}t=Object.getPrototypeOf;var u=[][a]?t(t([][a]())):(st(t={},a,function(){return this}),t),m=s.prototype=i.prototype=Object.create(u);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,st(e,r,"GeneratorFunction")),e.prototype=Object.create(m),e}return l.prototype=s,st(m,"constructor",s),st(s,"constructor",l),l.displayName="GeneratorFunction",st(s,r,"GeneratorFunction"),st(m),st(m,r,"Generator"),st(m,a,function(){return this}),st(m,"toString",function(){return"[object Generator]"}),(lt=function(){return{w:o,m:d}})()}function st(e,t,n,a){var r=Object.defineProperty;try{r({},"",{})}catch(e){r=0}st=function(e,t,n,a){function o(t,n){st(e,t,function(e){return this._invoke(t,n,e)})}t?r?r(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n:(o("next",0),o("throw",1),o("return",2))},st(e,t,n,a)}function ut(e,t,n,a,r,o,c){try{var i=e[o](c),l=i.value}catch(e){return void n(e)}i.done?t(l):Promise.resolve(l).then(a,r)}function mt(e){return function(){var t=this,n=arguments;return new Promise(function(a,r){var o=e.apply(t,n);function c(e){ut(o,a,r,c,i,"next",e)}function i(e){ut(o,a,r,c,i,"throw",e)}c(void 0)})}}function dt(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,r,o,c,i=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(s)throw r}}return i}}(e,t)||ft(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 ft(e,t){if(e){if("string"==typeof e)return vt(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)?vt(e,t):void 0}}function vt(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 yt=function(){var t=dt((0,e.useState)(""),2),n=t[0],a=t[1],r=dt((0,e.useState)(!1),2),o=r[0],c=r[1],i=dt((0,e.useState)(!0),2),l=i[0],s=i[1],u=dt((0,e.useState)(null),2),m=u[0],d=u[1],f=dt((0,e.useState)({categories:[],tags:[],service_bodies:[]}),2),v=f[0],y=f[1],p=dt((0,e.useState)({categories:[],tags:[],service_bodies:[]}),2),g=p[0],b=p[1],E=A().getServiceBodyName;(0,e.useEffect)(function(){var e=function(){var e=mt(lt().m(function e(){var t,n;return lt().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,h("/subscription-options");case 1:(t=e.v)&&y({categories:t.categories||[],tags:t.tags||[],service_bodies:t.service_bodies||[]}),e.n=3;break;case 2:e.p=2,n=e.v,console.error("Failed to fetch subscription options:",n);case 3:return e.p=3,s(!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 _=function(){return g.categories.length>0||g.tags.length>0||g.service_bodies.length>0},R=function(){return v.categories.length>0||v.tags.length>0||v.service_bodies.length>0},w=function(e,t){b(function(n){var a,r=n[e]||[],o=r.includes(t)?r.filter(function(e){return e!==t}):[].concat(function(e){if(Array.isArray(e))return vt(e)}(a=r)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(a)||ft(a)||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]);return ct(ct({},n),{},it({},e,o))})},S=function(){var e=mt(lt().m(function e(t){var r,o,i;return lt().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t.preventDefault(),!R()||_()){e.n=1;break}return d({type:"error",text:"Please select at least one preference to subscribe."}),e.a(2);case 1:return c(!0),d(null),e.p=2,r={email:n},R()&&(r.preferences=g),e.n=3,h("/subscribe",{method:"POST",body:JSON.stringify(r)});case 3:(o=e.v).success?(d({type:"success",text:o.message}),a(""),b({categories:[],tags:[],service_bodies:[]})):d({type:"error",text:o.message||"An error occurred. Please try again."}),e.n=5;break;case 4:e.p=4,i=e.v,d({type:"error",text:i.message||"An error occurred. Please try again."});case 5:return e.p=5,c(!1),e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}));return function(t){return e.apply(this,arguments)}}();return l?React.createElement("div",{className:"mayo-subscribe-form"},React.createElement("p",null,"Loading...")):React.createElement("div",{className:"mayo-subscribe-form"},React.createElement("form",{onSubmit:S},React.createElement("div",{className:"mayo-subscribe-input-group"},React.createElement("input",{type:"email",value:n,onChange:function(e){return a(e.target.value)},placeholder:"Enter your email address",required:!0,disabled:o,className:"mayo-subscribe-email"})),R()&&React.createElement("div",{className:"mayo-subscribe-preferences"},React.createElement("p",{className:"mayo-subscribe-preferences-label"},"Select what you'd like to receive notifications about:"),v.categories.length>0&&React.createElement("div",{className:"mayo-subscribe-preference-group"},React.createElement("span",{className:"mayo-subscribe-preference-heading"},"Categories"),React.createElement("div",{className:"mayo-subscribe-checkboxes"},v.categories.map(function(e){return React.createElement("label",{key:e.id,className:"mayo-subscribe-checkbox"},React.createElement("input",{type:"checkbox",checked:g.categories.includes(e.id),onChange:function(){return w("categories",e.id)},disabled:o}),React.createElement("span",null,e.name))}))),v.tags.length>0&&React.createElement("div",{className:"mayo-subscribe-preference-group"},React.createElement("span",{className:"mayo-subscribe-preference-heading"},"Tags"),React.createElement("div",{className:"mayo-subscribe-checkboxes"},v.tags.map(function(e){return React.createElement("label",{key:e.id,className:"mayo-subscribe-checkbox"},React.createElement("input",{type:"checkbox",checked:g.tags.includes(e.id),onChange:function(){return w("tags",e.id)},disabled:o}),React.createElement("span",null,e.name))}))),v.service_bodies.length>0&&React.createElement("div",{className:"mayo-subscribe-preference-group"},React.createElement("span",{className:"mayo-subscribe-preference-heading"},"Service Bodies"),React.createElement("div",{className:"mayo-subscribe-checkboxes"},v.service_bodies.map(function(e){return React.createElement("label",{key:e.id,className:"mayo-subscribe-checkbox"},React.createElement("input",{type:"checkbox",checked:g.service_bodies.includes(e.id),onChange:function(){return w("service_bodies",e.id)},disabled:o}),React.createElement("span",null,E(e.id,e.source_id)||e.name||e.id))})))),React.createElement("button",{type:"submit",disabled:o||R()&&!_(),className:"mayo-subscribe-button"},o?"Subscribing...":"Subscribe"),m&&React.createElement("div",{className:"mayo-subscribe-message mayo-subscribe-message-".concat(m.type)},m.text)))};document.addEventListener("DOMContentLoaded",function(){var t=document.getElementById("mayo-event-form"),n=document.querySelectorAll('[id^="mayo-event-list-"]'),a=document.getElementById("mayo-details-root"),r=document.getElementById("mayo-archive-root"),o=document.getElementById("mayo-announcement-details-root"),c=function(t,n){if(n){var a=n.dataset.instance,r=window["mayoEventSettings_".concat(a)]||{};n.classList.contains("mayo-widget-list")?(0,e.render)(React.createElement(j,null,React.createElement(t,{widget:!0,settings:r})),n):(0,e.render)(React.createElement(j,null,React.createElement(t,{settings:r})),n)}};n.forEach(function(e){c(pe,e)}),c(H,t),c(Te,a),c(Re,r),c(qe,o),document.querySelectorAll(".mayo-announcement-container").forEach(function(t){var n=t.dataset.instance,a="mayoAnnouncementSettings_".concat(n),r=window[a]||{};(0,e.render)(React.createElement(j,null,React.createElement(Le,{settings:r})),t)}),document.querySelectorAll(".mayo-subscribe-container").forEach(function(t){(0,e.render)(React.createElement(j,null,React.createElement(yt,null)),t)});var i=document.getElementById("mayo-announcement-form");i&&(0,e.render)(React.createElement(j,null,React.createElement(at,null)),i)})})(); -
mayo-events-manager/trunk/build.txt
r3436887 r3439987 1 5059e7607a895f1e603d50f792c1149350116875 1 7e6c86a95d7d24c5c5733b11c88300dca5c3010e -
mayo-events-manager/trunk/includes/Announcement.php
r3436887 r3439987 132 132 ]); 133 133 134 // New unified linked event refs that supports both local and external events134 // New unified linked event refs that supports local events, external events, and custom links 135 135 register_post_meta('mayo_announcement', 'linked_event_refs', [ 136 136 'show_in_rest' => [ … … 140 140 'type' => 'object', 141 141 'properties' => [ 142 'type' => ['type' => 'string', 'enum' => ['local', 'external' ]],142 'type' => ['type' => 'string', 'enum' => ['local', 'external', 'custom']], 143 143 'id' => ['type' => 'integer'], 144 144 'source_id' => ['type' => 'string'], 145 // Custom link properties 146 'url' => ['type' => 'string'], 147 'title' => ['type' => 'string'], 148 'icon' => ['type' => 'string', 'enum' => ['external', 'hotel', 'info', 'calendar', 'location', 'link']], 145 149 ], 146 'required' => ['type' , 'id']150 'required' => ['type'] 147 151 ] 148 152 ] … … 539 543 $linked_event_data = []; 540 544 545 // Separate custom links from events for ordering (custom links appear first) 546 $custom_links = []; 547 $event_links = []; 548 541 549 foreach ($linked_refs as $ref) { 542 550 $resolved = self::resolve_event_ref($ref); … … 552 560 // Handle start_date from meta object or direct field 553 561 $start_date = $resolved['start_date'] ?? ($resolved['meta']['event_start_date'] ?? ''); 554 $linked_event_data[] = [ 562 563 $link_data = [ 555 564 'id' => $resolved['id'], 556 565 'title' => $title, … … 559 568 'source' => $resolved['source'] ?? ['type' => 'local', 'id' => 'local', 'name' => 'Local'], 560 569 ]; 570 571 // Include icon for custom links 572 if ($ref['type'] === 'custom' && isset($resolved['icon'])) { 573 $link_data['icon'] = $resolved['icon']; 574 } 575 576 // Custom links go first, then events 577 if ($ref['type'] === 'custom') { 578 $custom_links[] = $link_data; 579 } else { 580 $event_links[] = $link_data; 581 } 561 582 } elseif ($ref['type'] === 'external' && !empty($ref['source_id'])) { 562 583 // External event unavailable - include placeholder with source info 563 584 $source = self::get_external_source($ref['source_id']); 564 585 $source_name = $source ? ($source['name'] ?? parse_url($source['url'], PHP_URL_HOST)) : 'External'; 565 $ linked_event_data[] = [586 $event_links[] = [ 566 587 'id' => $ref['id'], 567 588 'title' => 'Event details unavailable', … … 577 598 } 578 599 } 600 601 // Merge with custom links first, then events 602 $linked_event_data = array_merge($custom_links, $event_links); 579 603 580 604 $announcements[] = [ … … 793 817 * Resolve an event reference to full event details 794 818 * 795 * @param array $ref Event reference object {type, id, source_id? }819 * @param array $ref Event reference object {type, id, source_id?, url?, title?, icon?} 796 820 * @return array|null Resolved event details or null if unavailable 797 821 */ 798 822 public static function resolve_event_ref($ref) { 799 if (!is_array($ref) || !isset($ref['type']) || !isset($ref['id'])) { 823 if (!is_array($ref) || !isset($ref['type'])) { 824 return null; 825 } 826 827 // Handle custom links 828 if ($ref['type'] === 'custom') { 829 if (empty($ref['url']) || empty($ref['title'])) { 830 return null; 831 } 832 833 return [ 834 'id' => $ref['id'] ?? 0, 835 'title' => sanitize_text_field($ref['title']), 836 'permalink' => esc_url($ref['url']), 837 'icon' => isset($ref['icon']) ? sanitize_text_field($ref['icon']) : 'external', 838 'source' => [ 839 'type' => 'custom', 840 'id' => 'custom', 841 'name' => 'Custom Link', 842 ], 843 ]; 844 } 845 846 // Local and external events require an id 847 if (!isset($ref['id'])) { 800 848 return null; 801 849 } -
mayo-events-manager/trunk/includes/Rest.php
r3436887 r3439987 1 1 <?php 2 2 3 namespace BmltEnabled\Mayo; 3 4 4 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly5 if ( ! defined( 'ABSPATH' ) ) exit; 5 6 6 use DateTime; 7 use DateInterval; 8 use Imagick; 7 use BmltEnabled\Mayo\Rest\EventsController; 8 use BmltEnabled\Mayo\Rest\AnnouncementsController; 9 use BmltEnabled\Mayo\Rest\SubscribersController; 10 use BmltEnabled\Mayo\Rest\SettingsController; 9 11 12 /** 13 * REST API orchestrator 14 * 15 * Delegates route registration to domain-specific controllers. 16 * Provides backward compatibility wrappers for external callers. 17 */ 10 18 class Rest { 19 20 /** 21 * Initialize REST API 22 */ 11 23 public static function init() { 12 add_action('rest_api_init', function () { 13 register_rest_route('event-manager/v1', '/submit-event', [ 14 'methods' => 'POST', 15 'callback' => [__CLASS__, 'bmltenabled_mayo_submit_event'], 16 'permission_callback' => function() { 17 // Allow unauthenticated users to submit events 18 return true; 19 }, 20 ]); 21 22 register_rest_route('event-manager/v1', '/events', [ 23 'methods' => 'GET', 24 'callback' => [__CLASS__, 'bmltenabled_mayo_get_events'], 25 'permission_callback' => '__return_true', 26 ]); 27 28 register_rest_route('event-manager/v1', '/settings', [ 29 'methods' => 'GET', 30 'callback' => [__CLASS__, 'bmltenabled_mayo_get_settings'], 31 'permission_callback' => '__return_true', 32 ]); 33 34 register_rest_route('event-manager/v1', '/settings', [ 35 'methods' => 'POST', 36 'callback' => [__CLASS__, 'bmltenabled_mayo_update_settings'], 37 'permission_callback' => function() { 38 return current_user_can( 'manage_options' ); 39 } 40 ]); 41 42 register_rest_route('event-manager/v1', '/event/(?P<slug>[a-zA-Z0-9-]+)', [ 43 'methods' => 'GET', 44 'callback' => [__CLASS__, 'bmltenabled_mayo_get_event_details'], 45 'permission_callback' => '__return_true', // Adjust permissions as needed 46 ]); 47 48 // Announcement endpoints 49 register_rest_route('event-manager/v1', '/announcements', [ 50 'methods' => 'GET', 51 'callback' => [__CLASS__, 'get_announcements'], 52 'permission_callback' => '__return_true', 53 ]); 54 55 register_rest_route('event-manager/v1', '/announcement/(?P<id>\d+)', [ 56 'methods' => 'GET', 57 'callback' => [__CLASS__, 'get_announcement'], 58 'permission_callback' => '__return_true', 59 ]); 60 61 register_rest_route('event-manager/v1', '/announcement-by-slug/(?P<slug>[a-zA-Z0-9-]+)', [ 62 'methods' => 'GET', 63 'callback' => [__CLASS__, 'get_announcement_by_slug'], 64 'permission_callback' => '__return_true', 65 ]); 66 67 register_rest_route('event-manager/v1', '/submit-announcement', [ 68 'methods' => 'POST', 69 'callback' => [__CLASS__, 'submit_announcement'], 70 'permission_callback' => '__return_true', 71 ]); 72 73 register_rest_route('event-manager/v1', '/events/search', [ 74 'methods' => 'GET', 75 'callback' => [__CLASS__, 'search_events'], 76 'permission_callback' => '__return_true', // Public read access to published events 77 ]); 78 79 // Search both local and external events (for linking announcements) 80 register_rest_route('event-manager/v1', '/events/search-all', [ 81 'methods' => 'GET', 82 'callback' => [__CLASS__, 'search_all_events'], 83 'permission_callback' => function() { 84 return current_user_can('edit_posts'); 85 }, 86 ]); 87 88 // Get single event by ID 89 register_rest_route('event-manager/v1', '/events/(?P<id>\d+)', [ 90 'methods' => 'GET', 91 'callback' => [__CLASS__, 'get_event_by_id'], 92 'permission_callback' => '__return_true', 93 ]); 94 95 // Subscription endpoint 96 register_rest_route('event-manager/v1', '/subscribe', [ 97 'methods' => 'POST', 98 'callback' => [__CLASS__, 'subscribe'], 99 'permission_callback' => '__return_true', 100 ]); 101 102 // Get subscription options (categories, tags, service bodies enabled by admin) 103 register_rest_route('event-manager/v1', '/subscription-options', [ 104 'methods' => 'GET', 105 'callback' => [__CLASS__, 'get_subscription_options'], 106 'permission_callback' => '__return_true', 107 ]); 108 109 // Get subscriber preferences by token 110 register_rest_route('event-manager/v1', '/subscriber/(?P<token>[a-fA-F0-9]+)', [ 111 'methods' => 'GET', 112 'callback' => [__CLASS__, 'get_subscriber'], 113 'permission_callback' => '__return_true', 114 ]); 115 116 // Update subscriber preferences 117 register_rest_route('event-manager/v1', '/subscriber/(?P<token>[a-fA-F0-9]+)', [ 118 'methods' => 'PUT', 119 'callback' => [__CLASS__, 'update_subscriber'], 120 'permission_callback' => '__return_true', 121 ]); 122 123 // Get all subscribers (admin only) 124 register_rest_route('event-manager/v1', '/subscribers', [ 125 'methods' => 'GET', 126 'callback' => [__CLASS__, 'get_all_subscribers'], 127 'permission_callback' => function () { 128 return current_user_can('manage_options'); 129 }, 130 ]); 131 132 // Count matching subscribers (for announcement editor) 133 register_rest_route('event-manager/v1', '/subscribers/count', [ 134 'methods' => 'POST', 135 'callback' => [__CLASS__, 'count_matching_subscribers'], 136 'permission_callback' => function () { 137 return current_user_can('edit_posts'); 138 }, 139 ]); 140 141 // Update subscriber by ID (admin only) 142 register_rest_route('event-manager/v1', '/subscribers/(?P<id>\d+)', [ 143 'methods' => 'PUT', 144 'callback' => [__CLASS__, 'admin_update_subscriber'], 145 'permission_callback' => function () { 146 return current_user_can('manage_options'); 147 }, 148 ]); 149 150 // Delete subscriber by ID (admin only) 151 register_rest_route('event-manager/v1', '/subscribers/(?P<id>\d+)', [ 152 'methods' => 'DELETE', 153 'callback' => [__CLASS__, 'admin_delete_subscriber'], 154 'permission_callback' => function () { 155 return current_user_can('manage_options'); 156 }, 157 ]); 158 }); 24 add_action('rest_api_init', [__CLASS__, 'register_routes']); 159 25 } 160 26 161 public static function bmltenabled_mayo_submit_event($request) { 162 $params = $request->get_params(); 163 164 // Create the post first 165 $post_data = [ 166 'post_title' => sanitize_text_field($params['event_name']), 167 'post_content' => sanitize_textarea_field($params['description'] ?? ''), 168 'post_status' => 'pending', 169 'post_type' => 'mayo_event' 170 ]; 171 172 $post_id = wp_insert_post($post_data); 173 174 if (is_wp_error($post_id)) { 175 return new \WP_REST_Response([ 176 'success' => false, 177 'message' => $post_id->get_error_message() 178 ], 400); 179 } 27 /** 28 * Register all REST API routes by delegating to controllers 29 */ 30 public static function register_routes() { 31 EventsController::register_routes(); 32 AnnouncementsController::register_routes(); 33 SubscribersController::register_routes(); 34 SettingsController::register_routes(); 35 } 180 36 181 // Add all event metadata first 182 add_post_meta($post_id, 'event_type', sanitize_text_field($params['event_type'])); 183 add_post_meta($post_id, 'event_start_date', sanitize_text_field($params['event_start_date'])); 184 add_post_meta($post_id, 'event_end_date', sanitize_text_field($params['event_end_date'])); 185 add_post_meta($post_id, 'event_start_time', sanitize_text_field($params['event_start_time'])); 186 add_post_meta($post_id, 'event_end_time', sanitize_text_field($params['event_end_time'])); 187 add_post_meta($post_id, 'timezone', sanitize_text_field($params['timezone'])); 188 add_post_meta($post_id, 'service_body', sanitize_text_field($params['service_body'])); 189 add_post_meta($post_id, 'email', sanitize_email($params['email'])); 190 add_post_meta($post_id, 'contact_name', sanitize_text_field($params['contact_name'])); 37 // ======================================================================== 38 // Backward compatibility wrappers 39 // These methods delegate to the appropriate controller for external callers 40 // ======================================================================== 191 41 192 // Add recurring pattern metadata if provided 193 if (!empty($params['recurring_pattern'])) { 194 // Decode the JSON string if it's a string 195 $recurring_pattern = is_string($params['recurring_pattern']) 196 ? json_decode($params['recurring_pattern'], true) 197 : $params['recurring_pattern']; 198 199 // Ensure recurring_pattern is an array 200 if (!is_array($recurring_pattern)) { 201 $recurring_pattern = []; 202 } 203 204 // Sanitize the recurring pattern data 205 $sanitized_pattern = [ 206 'type' => isset($recurring_pattern['type']) ? sanitize_text_field($recurring_pattern['type']) : 'none', 207 'interval' => isset($recurring_pattern['interval']) ? intval($recurring_pattern['interval']) : 1, 208 'endDate' => isset($recurring_pattern['endDate']) ? sanitize_text_field($recurring_pattern['endDate']) : null 209 ]; 210 211 // Add type-specific fields 212 if (isset($recurring_pattern['type']) && $recurring_pattern['type'] === 'weekly' && !empty($recurring_pattern['weekdays']) && is_array($recurring_pattern['weekdays'])) { 213 $sanitized_pattern['weekdays'] = array_map('intval', $recurring_pattern['weekdays']); 214 } elseif (isset($recurring_pattern['type']) && $recurring_pattern['type'] === 'monthly') { 215 $sanitized_pattern['monthlyType'] = isset($recurring_pattern['monthlyType']) ? sanitize_text_field($recurring_pattern['monthlyType']) : 'date'; 216 if (isset($recurring_pattern['monthlyType']) && $recurring_pattern['monthlyType'] === 'date' && isset($recurring_pattern['monthlyDate'])) { 217 $sanitized_pattern['monthlyDate'] = intval($recurring_pattern['monthlyDate']); 218 } elseif (isset($recurring_pattern['monthlyWeekday'])) { 219 $sanitized_pattern['monthlyWeekday'] = sanitize_text_field($recurring_pattern['monthlyWeekday']); 220 } 221 } 222 223 add_post_meta($post_id, 'recurring_pattern', $sanitized_pattern); 224 } 225 226 // Add location metadata 227 if (!empty($params['location_name'])) { 228 add_post_meta($post_id, 'location_name', sanitize_text_field($params['location_name'])); 229 } 230 if (!empty($params['location_address'])) { 231 add_post_meta($post_id, 'location_address', sanitize_text_field($params['location_address'])); 232 } 233 if (!empty($params['location_details'])) { 234 add_post_meta($post_id, 'location_details', sanitize_text_field($params['location_details'])); 235 } 236 237 // Handle categories and tags 238 if (!empty($params['categories'])) { 239 $categories_array = explode(',', $params['categories']); 240 wp_set_post_categories($post_id, $categories_array); 241 } 242 if (!empty($params['tags'])) { 243 wp_set_post_tags($post_id, $params['tags']); 244 } 245 246 // Handle file uploads 247 $attachment_ids = []; 248 if (!empty($_FILES)) { 249 if (!function_exists('wp_handle_upload')) { 250 require_once(ABSPATH . 'wp-admin/includes/file.php'); 251 } 252 if (!function_exists('wp_generate_attachment_metadata')) { 253 require_once(ABSPATH . 'wp-admin/includes/image.php'); 254 } 255 if (!function_exists('wp_insert_attachment')) { 256 require_once(ABSPATH . 'wp-admin/includes/media.php'); 257 } 258 259 foreach ($_FILES as $file_key => $file) { 260 // Skip empty files 261 if (empty($file['name']) || $file['size'] <= 0) { 262 continue; 263 } 264 265 $uploaded_file = wp_handle_upload($file, array('test_form' => false)); 266 267 if (isset($uploaded_file['error'])) { 268 error_log('Upload error: ' . $uploaded_file['error']); 269 continue; 270 } 271 272 // Prepare attachment data 273 $attachment = array( 274 'guid' => $uploaded_file['url'], 275 'post_mime_type' => $uploaded_file['type'], 276 'post_title' => sanitize_file_name(basename($uploaded_file['file'])), 277 'post_content' => '', 278 'post_status' => 'inherit' 279 ); 280 281 // Insert attachment 282 $attachment_id = wp_insert_attachment($attachment, $uploaded_file['file'], $post_id); 283 if (!is_wp_error($attachment_id)) { 284 $attachment_data = wp_generate_attachment_metadata($attachment_id, $uploaded_file['file']); 285 wp_update_attachment_metadata($attachment_id, $attachment_data); 286 $attachment_ids[] = $attachment_id; 287 288 // Handle image files 289 if (strpos($uploaded_file['type'], 'image/') === 0) { 290 set_post_thumbnail($post_id, $attachment_id); 291 } 292 } 293 } 294 } 295 296 // Send email notification 297 self::send_event_submission_email($post_id, $params); 298 299 // Format response data 300 $formatted_event = self::format_event($post_id); 301 302 return new \WP_REST_Response($formatted_event, 200); 42 /** 43 * Format event data for API response 44 * 45 * @deprecated Use EventsController::format_event() directly 46 * @param int $post_id 47 * @return array 48 */ 49 public static function format_event($post_id) { 50 return EventsController::format_event($post_id); 303 51 } 304 52 305 53 /** 306 54 * Build email content for event notifications 307 * 308 * @ param array $params Event parameters309 * @param int $post_id Post ID310 * @param string $subject_template Subject template with %s placeholders311 * @param string $view_url URL for viewing the event312 * @return array Array with 'subject' and 'message' keys55 * 56 * @deprecated Use EventsController::build_event_email_content() directly 57 * @param array $params 58 * @param string $subject_template 59 * @param string $view_url 60 * @return array 313 61 */ 314 62 public static function build_event_email_content($params, $subject_template, $view_url) { 315 $settings = get_option('mayo_settings', []); 316 317 // Get service body name 318 $service_body_name = 'Unknown'; 319 $service_body_id = sanitize_text_field($params['service_body']); 320 321 if ($service_body_id === '0') { 322 $service_body_name = 'Unaffiliated'; 323 } elseif (!empty($service_body_id)) { 324 $bmlt_root_server = $settings['bmlt_root_server'] ?? ''; 325 if (!empty($bmlt_root_server)) { 326 $response = wp_remote_get($bmlt_root_server . '/client_interface/json/?switcher=GetServiceBodies'); 327 if (!is_wp_error($response)) { 328 $service_bodies = json_decode(wp_remote_retrieve_body($response), true); 329 if (is_array($service_bodies)) { 330 foreach ($service_bodies as $body) { 331 if ($body['id'] == $service_body_id) { 332 $service_body_name = $body['name']; 333 break; 334 } 335 } 336 } 337 } 338 } 339 } 340 341 // Format recurring pattern information 342 $recurring_info = ''; 343 if (!empty($params['recurring_pattern'])) { 344 $recurring_pattern = is_string($params['recurring_pattern']) 345 ? json_decode($params['recurring_pattern'], true) 346 : $params['recurring_pattern']; 347 348 if (is_array($recurring_pattern) && isset($recurring_pattern['type']) && $recurring_pattern['type'] !== 'none') { 349 $recurring_info = "\nRecurring Pattern: "; 350 switch ($recurring_pattern['type']) { 351 case 'daily': 352 $recurring_info .= "Daily"; 353 if (isset($recurring_pattern['interval']) && $recurring_pattern['interval'] > 1) { 354 $recurring_info .= " (every " . $recurring_pattern['interval'] . " days)"; 355 } 356 break; 357 case 'weekly': 358 $recurring_info .= "Weekly"; 359 if (isset($recurring_pattern['interval']) && $recurring_pattern['interval'] > 1) { 360 $recurring_info .= " (every " . $recurring_pattern['interval'] . " weeks)"; 361 } 362 if (!empty($recurring_pattern['weekdays'])) { 363 $weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; 364 $selected_days = array_map(function($day) use ($weekdays) { 365 return $weekdays[$day] ?? ''; 366 }, $recurring_pattern['weekdays']); 367 $recurring_info .= " on " . implode(', ', array_filter($selected_days)); 368 } 369 break; 370 case 'monthly': 371 $recurring_info .= "Monthly"; 372 if (isset($recurring_pattern['interval']) && $recurring_pattern['interval'] > 1) { 373 $recurring_info .= " (every " . $recurring_pattern['interval'] . " months)"; 374 } 375 if (isset($recurring_pattern['monthlyType']) && $recurring_pattern['monthlyType'] === 'date' && isset($recurring_pattern['monthlyDate'])) { 376 $recurring_info .= " on day " . $recurring_pattern['monthlyDate']; 377 } elseif (isset($recurring_pattern['monthlyWeekday'])) { 378 $recurring_info .= " on " . $recurring_pattern['monthlyWeekday']; 379 } 380 break; 381 } 382 383 if (!empty($recurring_pattern['endDate'])) { 384 $recurring_info .= " until " . $recurring_pattern['endDate']; 385 } 386 } 387 } 388 389 // Format location information 390 $location_info = ''; 391 if (!empty($params['location_name']) || !empty($params['location_address']) || !empty($params['location_details'])) { 392 $location_info = "\nLocation:"; 393 if (!empty($params['location_name'])) { 394 $location_info .= "\n Name: " . sanitize_text_field($params['location_name']); 395 } 396 if (!empty($params['location_address'])) { 397 $location_info .= "\n Address: " . sanitize_text_field($params['location_address']); 398 } 399 if (!empty($params['location_details'])) { 400 $location_info .= "\n Details: " . sanitize_text_field($params['location_details']); 401 } 402 } 403 404 // Format categories and tags 405 $categories_info = ''; 406 if (!empty($params['categories'])) { 407 $categories_info = "\nCategories: " . sanitize_text_field($params['categories']); 408 } 409 410 $tags_info = ''; 411 if (!empty($params['tags'])) { 412 $tags_info = "\nTags: " . sanitize_text_field($params['tags']); 413 } 414 415 // Check for file attachments 416 $attachments_info = ''; 417 if (!empty($_FILES)) { 418 $file_names = []; 419 foreach ($_FILES as $file_key => $file) { 420 if (!empty($file['name'])) { 421 $file_names[] = $file['name']; 422 } 423 } 424 if (!empty($file_names)) { 425 $attachments_info = "\nAttachments: " . implode(', ', $file_names); 426 } 427 } 428 429 // Build subject and message using provided templates 430 $subject = sprintf($subject_template, sanitize_text_field($params['event_name'])); 431 432 $message_template = "Event Name: %s\n" . 433 "Event Type: %s\n" . 434 "Service Body: %s (ID: %s)\n" . 435 "Start Date: %s\n" . 436 "Start Time: %s\n" . 437 "End Date: %s\n" . 438 "End Time: %s\n" . 439 "Timezone: %s\n" . 440 "Contact Name: %s\n" . 441 "Contact Email: %s%s%s%s%s%s\n\n" . 442 "Description:\n%s\n\n" . 443 "View the event: %s"; 444 445 $message = sprintf( 446 $message_template, 447 sanitize_text_field($params['event_name']), 448 sanitize_text_field($params['event_type']), 449 $service_body_name, 450 $service_body_id, 451 sanitize_text_field($params['event_start_date']), 452 sanitize_text_field($params['event_start_time']), 453 sanitize_text_field($params['event_end_date']), 454 sanitize_text_field($params['event_end_time']), 455 sanitize_text_field($params['timezone']), 456 sanitize_text_field($params['contact_name']), 457 sanitize_email($params['email']), 458 $recurring_info, 459 $location_info, 460 $categories_info, 461 $tags_info, 462 $attachments_info, 463 sanitize_textarea_field($params['description'] ?? ''), 464 $view_url 465 ); 466 467 return [ 468 'subject' => $subject, 469 'message' => $message 470 ]; 471 } 472 473 private static function send_event_submission_email($post_id, $params) { 474 // Get notification email from settings 475 $settings = get_option('mayo_settings', []); 476 $notification_email = isset($settings['notification_email']) && !empty($settings['notification_email']) 477 ? $settings['notification_email'] 478 : get_option('admin_email'); // Fallback to admin email if not set 479 480 // Process multiple email addresses 481 $to = []; 482 if (strpos($notification_email, ',') !== false || strpos($notification_email, ';') !== false) { 483 // Split by comma or semicolon and trim each email 484 $emails = preg_split('/[,;]/', $notification_email); 485 foreach ($emails as $email) { 486 $email = trim($email); 487 if (is_email($email)) { 488 $to[] = $email; 489 } 490 } 491 } else { 492 // Single email 493 $to = $notification_email; 494 } 495 496 // If no valid emails found, use admin email 497 if (empty($to)) { 498 $to = get_option('admin_email'); 499 } 500 501 // Build email content using shared method 502 $subject_template = 'New Event Submission: %s'; 503 $view_url = admin_url('post.php?post=' . $post_id . '&action=edit'); 504 505 $email_content = self::build_event_email_content($params, $subject_template, $view_url); 506 507 wp_mail($to, $email_content['subject'], $email_content['message']); 508 } 509 510 private static function get_local_events($params) { 511 $is_archive = false; 512 513 if (isset($params['archive'])) { 514 $archive = sanitize_text_field(wp_unslash($params['archive'])); 515 if ($archive === 'true') { 516 $is_archive = true; 517 } 518 } 519 520 $status = isset($params['status']) ? sanitize_text_field(wp_unslash($params['status'])) : 'publish'; 521 $eventType = isset($params['event_type']) ? sanitize_text_field(wp_unslash($params['event_type'])) : ''; 522 $serviceBody = isset($params['service_body']) ? sanitize_text_field(wp_unslash($params['service_body'])) : ''; 523 $relation = isset($params['relation']) ? sanitize_text_field(wp_unslash($params['relation'])) : 'AND'; 524 $categories = isset($params['categories']) ? sanitize_text_field(wp_unslash($params['categories'])) : ''; 525 $categoryRelation = isset($params['category_relation']) ? strtoupper(sanitize_text_field(wp_unslash($params['category_relation']))) : 'OR'; 526 $tags = isset($params['tags']) ? sanitize_text_field(wp_unslash($params['tags'])) : ''; 527 $timezone = isset($params['timezone']) ? urldecode(sanitize_text_field(wp_unslash($params['timezone']))) : wp_timezone_string(); 528 529 // Date range parameters for calendar view 530 $range_start = isset($params['start_date']) ? sanitize_text_field(wp_unslash($params['start_date'])) : null; 531 $range_end = isset($params['end_date']) ? sanitize_text_field(wp_unslash($params['end_date'])) : null; 532 $has_date_range = !empty($range_start) && !empty($range_end); 533 534 $today = new DateTime('now', new \DateTimeZone($timezone)); 535 $today->setTime(0, 0, 0); // Start of today 536 $current_date = $today->format('Y-m-d'); 537 538 539 540 $events = []; 541 542 // 1. Get all non-recurring events (we'll filter them later based on archive mode) 543 $non_recurring_events = self::query_events($status, $eventType, $serviceBody, $relation, $categories, $categoryRelation, $tags, null); 544 545 $events = array_merge($events, $non_recurring_events); 546 547 // 2. Get all events with recurring patterns, regardless of start date 548 $recurring_meta_query = [ 549 [ 550 'key' => 'recurring_pattern', 551 'compare' => 'EXISTS' 552 ], 553 [ 554 'key' => 'recurring_pattern', 555 'value' => 'none', 556 'compare' => '!=' 557 ] 558 ]; 559 560 // Add event type filter if specified 561 if (!empty($eventType)) { 562 $recurring_meta_query[] = [ 563 'key' => 'event_type', 564 'value' => $eventType, 565 'compare' => '=' 566 ]; 567 } 568 569 // Add service body filter if specified 570 if (!empty($serviceBody)) { 571 $service_bodies = array_map('trim', explode(',', $serviceBody)); 572 $recurring_meta_query[] = [ 573 'key' => 'service_body', 574 'value' => $service_bodies, 575 'compare' => 'IN' 576 ]; 577 } 578 579 // Always set AND relation for this query 580 $recurring_meta_query['relation'] = 'AND'; 581 582 $args = [ 583 'post_type' => 'mayo_event', 584 'posts_per_page' => -1, 585 'post_status' => $status, 586 'meta_query' => $recurring_meta_query, 587 ]; 588 589 // Merge in taxonomy args (handles both include and exclude with '-' prefix) 590 $taxonomy_args = self::build_taxonomy_args($categories, $categoryRelation, $tags); 591 $args = array_merge($args, $taxonomy_args); 592 593 $recurring_posts = get_posts($args); 594 595 // Process recurring posts and generate occurrences 596 foreach ($recurring_posts as $post) { 597 try { 598 $recurring_pattern = get_post_meta($post->ID, 'recurring_pattern', true); 599 $start_date = get_post_meta($post->ID, 'event_start_date', true); 600 601 if (!$recurring_pattern || !$start_date || $recurring_pattern['type'] === 'none') { 602 continue; 603 } 604 605 $recurring_events = self::generate_recurring_events($post, $recurring_pattern); 606 607 // Filter recurring events based on date range or archive mode 608 // Prepare date range objects for filtering if needed 609 $filter_range_start = $has_date_range ? new DateTime($range_start) : null; 610 $filter_range_end = $has_date_range ? new DateTime($range_end) : null; 611 if ($filter_range_start) $filter_range_start->setTime(0, 0, 0); 612 if ($filter_range_end) $filter_range_end->setTime(23, 59, 59); 613 614 $filtered_recurring_events = array_filter($recurring_events, function($event) use ($today, $is_archive, $has_date_range, $filter_range_start, $filter_range_end) { 615 if (!isset($event['meta']['event_start_date']) || empty($event['meta']['event_start_date'])) { 616 return false; 617 } 618 619 try { 620 $start_date_str = $event['meta']['event_start_date']; 621 $start_date = new DateTime($start_date_str); 622 $start_date->setTime(0, 0, 0); 623 624 // Determine the event's end date 625 $end_date_str = isset($event['meta']['event_end_date']) && !empty($event['meta']['event_end_date']) 626 ? $event['meta']['event_end_date'] 627 : $start_date_str; 628 $end_date = new DateTime($end_date_str); 629 $end_date->setTime(23, 59, 59); 630 631 // If date range is specified (calendar view), filter by that range 632 if ($has_date_range) { 633 // Include event if it overlaps with the range at all 634 return $start_date <= $filter_range_end && $end_date >= $filter_range_start; 635 } 636 637 if ($is_archive) { 638 // Archive mode: only show events that have completely ended 639 return $end_date < $today; 640 } else { 641 // Normal mode: show events that are ongoing or in the future 642 return $start_date >= $today || $end_date >= $today; 643 } 644 } catch (\Exception $e) { 645 error_log('Mayo Events API: Error parsing recurring event date: ' . $e->getMessage()); 646 return false; 647 } 648 }); 649 650 if (count($filtered_recurring_events) > 0) { 651 $events = array_merge($events, $filtered_recurring_events); 652 } 653 } catch (\Exception $e) { 654 error_log('Mayo Events API: Error processing recurring event: ' . $e->getMessage()); 655 } 656 } 657 658 // Apply date filtering based on archive mode or date range 659 $range_start_dt = $has_date_range ? new DateTime($range_start) : null; 660 $range_end_dt = $has_date_range ? new DateTime($range_end) : null; 661 if ($range_start_dt) $range_start_dt->setTime(0, 0, 0); 662 if ($range_end_dt) $range_end_dt->setTime(23, 59, 59); 663 664 $events = array_filter($events, function($event) use ($today, $is_archive, $has_date_range, $range_start_dt, $range_end_dt) { 665 if (!isset($event['meta']['event_start_date']) || empty($event['meta']['event_start_date'])) { 666 return false; 667 } 668 669 try { 670 $start_date_str = $event['meta']['event_start_date']; 671 $start_date = new DateTime($start_date_str); 672 $start_date->setTime(0, 0, 0); 673 674 // Determine the event's end date (use end_date if available, otherwise use start_date) 675 $end_date_str = isset($event['meta']['event_end_date']) && !empty($event['meta']['event_end_date']) 676 ? $event['meta']['event_end_date'] 677 : $start_date_str; 678 $end_date = new DateTime($end_date_str); 679 $end_date->setTime(23, 59, 59); 680 681 // If date range is specified (calendar view), filter by that range 682 if ($has_date_range) { 683 // Include event if it overlaps with the range at all 684 // Event overlaps if: event_start <= range_end AND event_end >= range_start 685 return $start_date <= $range_end_dt && $end_date >= $range_start_dt; 686 } 687 688 if ($is_archive) { 689 // Archive mode: only show events that have completely ended (end date is in the past) 690 return $end_date < $today; 691 } else { 692 // Normal mode: show events that are ongoing or in the future 693 // (start date is today or later, OR end date is today or later) 694 return $start_date >= $today || $end_date >= $today; 695 } 696 } catch (\Exception $e) { 697 error_log('Mayo Events API: Error parsing event date: ' . $e->getMessage()); 698 return false; 699 } 700 }); 701 702 return $events; 703 } 704 705 /** 706 * Helper method to parse categories/tags string and separate includes from excludes 707 * Items prefixed with '-' are excluded, others are included 708 */ 709 private static function parse_taxonomy_filter($filter_string) { 710 if (empty($filter_string)) { 711 return ['include' => '', 'exclude' => '']; 712 } 713 714 $items = array_map('trim', explode(',', $filter_string)); 715 $include = []; 716 $exclude = []; 717 718 foreach ($items as $item) { 719 if (empty($item)) { 720 continue; 721 } 722 if (strpos($item, '-') === 0) { 723 // Remove the leading '-' and add to exclude list 724 $exclude[] = substr($item, 1); 725 } else { 726 $include[] = $item; 727 } 728 } 729 730 return [ 731 'include' => implode(',', $include), 732 'exclude' => implode(',', $exclude) 733 ]; 63 return EventsController::build_event_email_content($params, $subject_template, $view_url); 734 64 } 735 65 736 66 /** 737 * Helper method to build taxonomy query args for categories and tags 738 * Handles both inclusion and exclusion (items prefixed with '-') 67 * Get events (for RSS feed and other internal callers) 739 68 * 740 * @ param string $categories Comma-separated category slugs (prefix with '-' to exclude)741 * @param string $categoryRelation 'AND' or 'OR' - how to match multiple categories742 * @ param string $tags Comma-separated tag slugs (prefix with '-' to exclude)69 * @deprecated Use EventsController::get_events() directly 70 * @param \WP_REST_Request|null $request 71 * @return \WP_REST_Response 743 72 */ 744 private static function build_taxonomy_args($categories, $categoryRelation = 'OR', $tags = '') { 745 $cat_filter = self::parse_taxonomy_filter($categories); 746 $tag_filter = self::parse_taxonomy_filter($tags); 747 748 $args = []; 749 $tax_query = []; 750 751 // Handle category inclusion via tax_query (supports AND/OR relation) 752 if (!empty($cat_filter['include'])) { 753 $include_cat_slugs = array_map('trim', explode(',', $cat_filter['include'])); 754 $include_cat_ids = []; 755 foreach ($include_cat_slugs as $slug) { 756 $term = get_term_by('slug', $slug, 'category'); 757 if ($term) { 758 $include_cat_ids[] = $term->term_id; 759 } 760 } 761 if (!empty($include_cat_ids)) { 762 // 'IN' = posts with ANY of these categories (OR) 763 // 'AND' = posts with ALL of these categories (AND) 764 $operator = strtoupper($categoryRelation) === 'AND' ? 'AND' : 'IN'; 765 $tax_query[] = [ 766 'taxonomy' => 'category', 767 'field' => 'term_id', 768 'terms' => $include_cat_ids, 769 'operator' => $operator 770 ]; 771 } 73 public static function bmltenabled_mayo_get_events($request = null) { 74 if ($request === null) { 75 $request = new \WP_REST_Request('GET', '/event-manager/v1/events'); 772 76 } 773 774 // Handle category exclusion via tax_query 775 if (!empty($cat_filter['exclude'])) { 776 $exclude_cat_slugs = array_map('trim', explode(',', $cat_filter['exclude'])); 777 $exclude_cat_ids = []; 778 foreach ($exclude_cat_slugs as $slug) { 779 $term = get_term_by('slug', $slug, 'category'); 780 if ($term) { 781 $exclude_cat_ids[] = $term->term_id; 782 } 783 } 784 if (!empty($exclude_cat_ids)) { 785 $tax_query[] = [ 786 'taxonomy' => 'category', 787 'field' => 'term_id', 788 'terms' => $exclude_cat_ids, 789 'operator' => 'NOT IN' 790 ]; 791 } 792 } 793 794 // Handle tag inclusion 795 if (!empty($tag_filter['include'])) { 796 $args['tag'] = $tag_filter['include']; 797 } 798 799 // Handle tag exclusion via tax_query 800 if (!empty($tag_filter['exclude'])) { 801 $exclude_tag_slugs = array_map('trim', explode(',', $tag_filter['exclude'])); 802 $exclude_tag_ids = []; 803 foreach ($exclude_tag_slugs as $slug) { 804 $term = get_term_by('slug', $slug, 'post_tag'); 805 if ($term) { 806 $exclude_tag_ids[] = $term->term_id; 807 } 808 } 809 if (!empty($exclude_tag_ids)) { 810 $tax_query[] = [ 811 'taxonomy' => 'post_tag', 812 'field' => 'term_id', 813 'terms' => $exclude_tag_ids, 814 'operator' => 'NOT IN' 815 ]; 816 } 817 } 818 819 // Add tax_query if we have any taxonomy conditions 820 if (!empty($tax_query)) { 821 $tax_query['relation'] = 'AND'; 822 $args['tax_query'] = $tax_query; 823 } 824 825 return $args; 826 } 827 828 /** 829 * Helper method to query events with the given parameters 830 */ 831 private static function query_events($status, $eventType, $serviceBody, $relation, $categories, $categoryRelation, $tags, $min_date = null) { 832 $meta_query = []; 833 834 // Handle event type 835 if (!empty($eventType)) { 836 $meta_query[] = [ 837 'key' => 'event_type', 838 'value' => $eventType, 839 'compare' => '=' 840 ]; 841 } 842 843 // Handle service body 844 if (!empty($serviceBody)) { 845 $service_bodies = array_map('trim', explode(',', $serviceBody)); 846 $meta_query[] = [ 847 'key' => 'service_body', 848 'value' => $service_bodies, 849 'compare' => 'IN' 850 ]; 851 } 852 853 // Add date filter if specified 854 if (!is_null($min_date)) { 855 $meta_query[] = [ 856 'key' => 'event_start_date', 857 'value' => $min_date, 858 'compare' => '>=', 859 'type' => 'DATE' 860 ]; 861 } 862 863 if (count($meta_query) > 0) { 864 $meta_query['relation'] = $relation; 865 } 866 867 // Build base args 868 $args = [ 869 'post_type' => 'mayo_event', 870 'posts_per_page' => -1, 871 'post_status' => $status, 872 'meta_query' => $meta_query, 873 ]; 874 875 // Merge in taxonomy args (handles both include and exclude with '-' prefix) 876 $taxonomy_args = self::build_taxonomy_args($categories, $categoryRelation, $tags); 877 $args = array_merge($args, $taxonomy_args); 878 879 // Get posts with error handling 880 $posts = get_posts($args); 881 $events = []; 882 883 foreach ($posts as $post) { 884 try { 885 $events[] = self::format_event($post); 886 } catch (\Exception $e) { 887 error_log('Mayo Events API: Error formatting event: ' . $e->getMessage()); 888 } 889 } 890 891 // Additional filtering for multi-day events that might be missed by the initial query 892 if (!is_null($min_date)) { 893 $today = new DateTime($min_date); 894 $today->setTime(0, 0, 0); 895 896 $events = array_filter($events, function($event) use ($today) { 897 if (!isset($event['meta']['event_start_date']) || empty($event['meta']['event_start_date'])) { 898 return false; 899 } 900 901 try { 902 $start_date_str = $event['meta']['event_start_date']; 903 $start_date = new DateTime($start_date_str); 904 $start_date->setTime(0, 0, 0); 905 906 // Check if start date is in the future 907 if ($start_date >= $today) { 908 return true; 909 } 910 911 // If start date is in the past, check if end date is in the future 912 if (isset($event['meta']['event_end_date']) && !empty($event['meta']['event_end_date'])) { 913 $end_date_str = $event['meta']['event_end_date']; 914 $end_date = new DateTime($end_date_str); 915 $end_date->setTime(23, 59, 59); 916 return $end_date >= $today; 917 } 918 919 return false; 920 } catch (\Exception $e) { 921 error_log('Mayo Events API: Error parsing event date: ' . $e->getMessage()); 922 return false; 923 } 924 }); 925 } 926 927 return $events; 928 } 929 930 private static function fetch_external_events($source) { 931 try { 932 // Build query parameters 933 $params = []; 934 if (!empty($source['event_type'])) $params['event_type'] = $source['event_type']; 935 if (!empty($source['service_body'])) $params['service_body'] = $source['service_body']; 936 if (!empty($source['categories'])) $params['categories'] = $source['categories']; 937 if (!empty($source['tags'])) $params['tags'] = $source['tags']; 938 939 // Pass archive and timezone parameters if they exist in the original request 940 if (isset($_GET['archive'])) $params['archive'] = $_GET['archive']; 941 if (isset($_GET['timezone'])) $params['timezone'] = $_GET['timezone']; 942 943 $params['per_page'] = 100; 944 945 // Build URL with parameters 946 $url = add_query_arg($params, trailingslashit($source['url']) . 'wp-json/event-manager/v1/events'); 947 948 $response = wp_remote_get($url, [ 949 'timeout' => 15, 950 'sslverify' => true 951 ]); 952 953 if (is_wp_error($response)) { 954 error_log('External Events Error: ' . $response->get_error_message()); 955 return []; 956 } 957 958 $body = wp_remote_retrieve_body($response); 959 $data = json_decode($body, true); 960 961 // Handle both new (with pagination) and old response formats 962 $events = isset($data['events']) ? $data['events'] : $data; 963 964 if (!is_array($events)) return []; 965 966 // Fetch service bodies from the external source 967 $service_bodies = self::fetch_external_service_bodies($source); 968 969 // Add source information to each event 970 foreach ($events as &$event) { 971 $event['external_source'] = [ 972 'id' => $source['id'], 973 'url' => parse_url($source['url'], PHP_URL_HOST), 974 'name' => $source['name'] ?? parse_url($source['url'], PHP_URL_HOST), 975 'service_bodies' => $service_bodies 976 ]; 977 } 978 979 return $events; 980 } catch (\Exception $e) { 981 error_log('External Events Error: ' . $e->getMessage()); 982 return []; 983 } 984 } 985 986 /** 987 * Fetch service bodies from an external source 988 * 989 * @param array $source The external source configuration 990 * @return array Array of service bodies 991 */ 992 private static function fetch_external_service_bodies($source) { 993 try { 994 // Get BMLT root server from the external source 995 $settings_url = trailingslashit($source['url']) . 'wp-json/event-manager/v1/settings'; 996 997 $settings_response = wp_remote_get($settings_url, [ 998 'timeout' => 15, 999 'sslverify' => true 1000 ]); 1001 1002 if (is_wp_error($settings_response)) { 1003 error_log('External Settings Error: ' . $settings_response->get_error_message()); 1004 return []; 1005 } 1006 1007 $settings_body = wp_remote_retrieve_body($settings_response); 1008 $settings = json_decode($settings_body, true); 1009 1010 if (empty($settings['bmlt_root_server'])) { 1011 error_log('External source has no BMLT root server configured: ' . $source['url']); 1012 return []; 1013 } 1014 1015 // Fetch service bodies from the BMLT root server 1016 $bmlt_url = add_query_arg('switcher', 'GetServiceBodies', trailingslashit($settings['bmlt_root_server']) . 'client_interface/json/'); 1017 1018 $bmlt_response = wp_remote_get($bmlt_url, [ 1019 'timeout' => 15, 1020 'sslverify' => true 1021 ]); 1022 1023 if (is_wp_error($bmlt_response)) { 1024 error_log('External BMLT Error: ' . $bmlt_response->get_error_message()); 1025 return []; 1026 } 1027 1028 $bmlt_body = wp_remote_retrieve_body($bmlt_response); 1029 $service_bodies = json_decode($bmlt_body, true); 1030 1031 if (!is_array($service_bodies)) { 1032 error_log('Invalid service bodies response from external source: ' . $source['url']); 1033 return []; 1034 } 1035 1036 return $service_bodies; 1037 } catch (\Exception $e) { 1038 error_log('External Service Bodies Error: ' . $e->getMessage()); 1039 return []; 1040 } 1041 } 1042 1043 public static function bmltenabled_mayo_get_events() { 1044 // Prevent any output that might interfere with headers 1045 $previous_error_reporting = error_reporting(); 1046 error_reporting(E_ERROR | E_PARSE); // Only report serious errors during API calls 1047 1048 $events = []; 1049 $local_events = []; 1050 1051 // Pagination parameters 1052 $page = isset($_GET['page']) ? max(1, intval($_GET['page'])) : 1; 1053 $per_page = isset($_GET['per_page']) ? max(1, intval($_GET['per_page'])) : 10; 1054 1055 // Date range parameters for calendar view 1056 $start_date = isset($_GET['start_date']) ? sanitize_text_field($_GET['start_date']) : null; 1057 $end_date = isset($_GET['end_date']) ? sanitize_text_field($_GET['end_date']) : null; 1058 1059 // Get source IDs from request 1060 $sourceIds = isset($_GET['source_ids']) ? 1061 array_map('trim', array_filter(explode(',', $_GET['source_ids']))) : 1062 []; 1063 1064 // Get local events by default unless source_ids is explicitly set and doesn't include 'local' 1065 if (empty($sourceIds) || in_array('local', $sourceIds)) { 1066 $local_events = self::get_local_events($_GET); 1067 1068 $events = array_merge($events, array_map(function($event) { 1069 $event['source'] = [ 1070 'id' => 'local', 1071 'name' => 'Local Events', 1072 'url' => get_site_url() 1073 ]; 1074 return $event; 1075 }, $local_events)); 1076 } 1077 1078 // Get external events from specified sources 1079 if (!empty($sourceIds)) { 1080 $external_sources = get_option('mayo_external_sources', []); 1081 $enabled_sources = []; 1082 1083 // Filter enabled sources that match the requested source IDs 1084 foreach ($external_sources as $source) { 1085 if (in_array($source['id'], $sourceIds) && $source['enabled']) { 1086 $enabled_sources[] = $source; 1087 } 1088 } 1089 1090 // If we have enabled sources, fetch events in parallel 1091 if (!empty($enabled_sources)) { 1092 foreach ($enabled_sources as $source) { 1093 try { 1094 $source_events = self::fetch_external_events($source); 1095 1096 if (!empty($source_events)) { 1097 error_log('Received ' . count($source_events) . ' events from source: ' . $source['url']); 1098 $events = array_merge($events, $source_events); 1099 } 1100 } catch (\Exception $e) { 1101 error_log('Error fetching events from source ' . $source['url'] . ': ' . $e->getMessage()); 1102 } 1103 } 1104 1105 if (!empty($external_events)) { 1106 $events = array_merge($events, $external_events); 1107 } 1108 } 1109 } 1110 1111 // Get sort order from request (default to ASC for backwards compatibility) 1112 $order = isset($_GET['order']) ? strtoupper(sanitize_text_field($_GET['order'])) : 'ASC'; 1113 if ($order !== 'ASC' && $order !== 'DESC') { 1114 $order = 'ASC'; // Fallback to ASC for invalid values 1115 } 1116 1117 // Sort all events by date 1118 usort($events, function($a, $b) use ($order) { 1119 // Check if required meta fields exist 1120 if (!isset($a['meta']['event_start_date'])) { 1121 return 1; // Move items with missing dates to the end 1122 } 1123 if (!isset($b['meta']['event_start_date'])) { 1124 return -1; // Move items with missing dates to the end 1125 } 1126 1127 $dateA = $a['meta']['event_start_date'] . ' ' . (isset($a['meta']['event_start_time']) ? $a['meta']['event_start_time'] : '00:00:00'); 1128 $dateB = $b['meta']['event_start_date'] . ' ' . (isset($b['meta']['event_start_time']) ? $b['meta']['event_start_time'] : '00:00:00'); 1129 1130 // Handle invalid dates 1131 $timeA = strtotime($dateA); 1132 $timeB = strtotime($dateB); 1133 1134 if ($timeA === false && $timeB === false) { 1135 return 0; 1136 } elseif ($timeA === false) { 1137 return 1; 1138 } elseif ($timeB === false) { 1139 return -1; 1140 } 1141 1142 // Apply sort order 1143 if ($order === 'DESC') { 1144 return $timeB - $timeA; // Descending: latest first 1145 } 1146 return $timeA - $timeB; // Ascending: earliest first 1147 }); 1148 1149 // Apply pagination 1150 $total_events = count($events); 1151 $total_pages = ceil($total_events / $per_page); 1152 1153 // Ensure page is within bounds 1154 $page = min($page, max(1, $total_pages)); 1155 1156 // Get the subset of events for the current page 1157 $offset = ($page - 1) * $per_page; 1158 $paginated_events = array_slice($events, $offset, $per_page); 1159 1160 // Restore previous error reporting level 1161 error_reporting($previous_error_reporting); 1162 1163 return new \WP_REST_Response([ 1164 'events' => $paginated_events, 1165 'pagination' => [ 1166 'total' => $total_events, 1167 'per_page' => $per_page, 1168 'current_page' => $page, 1169 'total_pages' => $total_pages 1170 ] 1171 ]); 1172 } 1173 1174 private static function generate_recurring_events($post, $pattern) { 1175 $weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; 1176 $events = []; 1177 $start = new DateTime(get_post_meta($post->ID, 'event_start_date', true)); 1178 $end = !empty($pattern['endDate']) ? new DateTime($pattern['endDate']) : null; 1179 1180 // Get skipped occurrences 1181 $skipped_occurrences = get_post_meta($post->ID, 'skipped_occurrences', true) ?: []; 1182 1183 // Set a reasonable limit to prevent infinite loops (5 years worth of events) 1184 $max_events = 0; 1185 if ($pattern['type'] === 'daily') { 1186 $max_events = 365 * 5; // 5 years of daily events 1187 } elseif ($pattern['type'] === 'weekly') { 1188 $max_events = 52 * 5; // 5 years of weekly events 1189 } elseif ($pattern['type'] === 'monthly') { 1190 $max_events = 12 * 5; // 5 years of monthly events 1191 } 1192 1193 if ($pattern['type'] === 'monthly') { 1194 // Start from the next interval month after the initial event 1195 $current = clone $start; 1196 $interval = $pattern['interval']; 1197 $current->modify('first day of +' . $interval . ' month'); 1198 1199 while (($end === null || $current <= $end) && count($events) < $max_events) { 1200 // Store the year and month for this iteration 1201 $current_year = (int)$current->format('Y'); 1202 $current_month = (int)$current->format('m'); 1203 1204 if (isset($pattern['monthlyType']) && $pattern['monthlyType'] === 'date') { 1205 // Specific date of month 1206 $day = (int)$pattern['monthlyDate']; 1207 1208 // Check if the day exists in current month 1209 $days_in_month = (int)$current->format('t'); 1210 if ($day > $days_in_month) { 1211 // Move to next interval month and continue 1212 $current->modify('first day of +' . $interval . ' month'); 1213 continue; 1214 } 1215 1216 // Set to the specific day of the current month 1217 $current->setDate($current_year, $current_month, $day); 1218 } else { 1219 // Specific weekday (e.g., 2nd Thursday) 1220 if (!isset($pattern['monthlyWeekday'])) { 1221 // Move to next interval month 1222 $current->modify('first day of +' . $interval . ' month'); 1223 continue; 1224 } 1225 1226 list($week, $weekday) = explode(',', $pattern['monthlyWeekday']); 1227 $week = (int)$week; 1228 $weekday = (int)$weekday; 1229 1230 // Start from first day of current month for calculation 1231 $current->setDate($current_year, $current_month, 1); 1232 1233 if ($week > 0) { 1234 // For nth weekday, we need to: 1235 // 1. Go to the first day of the month 1236 // 2. Find the first occurrence of the weekday 1237 // 3. Add (week-1) weeks to get to the nth occurrence 1238 $current->modify('first ' . $weekdays[$weekday] . ' of this month'); 1239 if ($week > 1) { 1240 $current->modify('+' . ($week - 1) . ' weeks'); 1241 } 1242 } else { 1243 // Last occurrence 1244 $current->modify('last ' . $weekdays[$weekday] . ' of this month'); 1245 } 1246 } 1247 1248 if ($current <= $end || $end === null) { 1249 // Check if this date is not in skipped occurrences 1250 $current_date = $current->format('Y-m-d'); 1251 if (!in_array($current_date, $skipped_occurrences)) { 1252 $events[] = self::format_recurring_event($post, clone $current); 1253 } 1254 } 1255 1256 // Move to next interval month - reset to first day to ensure proper advancement 1257 $current->setDate($current_year, $current_month, 1); 1258 $current->modify('+' . $interval . ' month'); 1259 } 1260 } else { 1261 $interval = new DateInterval('P' . $pattern['interval'] . 1262 ($pattern['type'] === 'daily' ? 'D' : 1263 ($pattern['type'] === 'weekly' ? 'W' : 'M'))); 1264 1265 // Start from the next interval after the initial event 1266 $current = clone $start; 1267 $current->add($interval); 1268 1269 while (($end === null || $current <= $end) && count($events) < $max_events) { 1270 if ($pattern['type'] === 'weekly' && !empty($pattern['weekdays'])) { 1271 // For weekly pattern, we need to check each day in the interval 1272 $interval_start = clone $current; 1273 $interval_end = clone $current; 1274 $interval_end->add($interval); 1275 1276 // Check each day in the interval 1277 while ($interval_start < $interval_end && count($events) < $max_events) { 1278 $current_day = $interval_start->format('w'); // 0 (Sunday) to 6 (Saturday) 1279 1280 if (in_array($current_day, $pattern['weekdays'])) { 1281 // Check if this date is not in skipped occurrences 1282 $current_date = $interval_start->format('Y-m-d'); 1283 if (!in_array($current_date, $skipped_occurrences)) { 1284 $events[] = self::format_recurring_event($post, clone $interval_start); 1285 } 1286 } 1287 1288 $interval_start->modify('+1 day'); 1289 } 1290 } else { 1291 // For daily patterns, just add the event and move to next interval 1292 // Check if this date is not in skipped occurrences 1293 $current_date = $current->format('Y-m-d'); 1294 if (!in_array($current_date, $skipped_occurrences)) { 1295 $events[] = self::format_recurring_event($post, $current); 1296 } 1297 } 1298 1299 $current->add($interval); 1300 } 1301 } 1302 1303 return $events; 1304 } 1305 1306 private static function format_recurring_event($post, $date) { 1307 $event = self::format_event($post); 1308 $event['meta']['event_start_date'] = $date->format('Y-m-d'); 1309 1310 // Calculate the proper end date based on the original event's duration 1311 $original_start_date = get_post_meta($post->ID, 'event_start_date', true); 1312 $original_end_date = get_post_meta($post->ID, 'event_end_date', true); 1313 1314 if ($original_start_date && $original_end_date) { 1315 // Calculate the duration between original start and end dates 1316 $original_start = new DateTime($original_start_date); 1317 $original_end = new DateTime($original_end_date); 1318 $duration = $original_start->diff($original_end); 1319 1320 // Apply the same duration to the new start date 1321 $new_end_date = clone $date; 1322 $new_end_date->add($duration); 1323 $event['meta']['event_end_date'] = $new_end_date->format('Y-m-d'); 1324 } else { 1325 // Fallback: if no end date is set, use the same date as start 1326 $event['meta']['event_end_date'] = $date->format('Y-m-d'); 1327 } 1328 1329 $event['recurring'] = true; 1330 return $event; 1331 } 1332 1333 /** 1334 * Format event data for API response 1335 */ 1336 public static function format_event($post_id) { 1337 $post = get_post($post_id); 1338 1339 if (!$post) { 1340 return null; 1341 } 1342 1343 $data = [ 1344 'id' => $post->ID, 1345 'title' => [ 1346 'rendered' => html_entity_decode(get_the_title($post), ENT_QUOTES, 'UTF-8') 1347 ], 1348 'content' => [ 1349 'rendered' => apply_filters('the_content', $post->post_content) 1350 ], 1351 'link' => get_permalink($post), 1352 'meta' => [ 1353 // Default values for required fields 1354 'event_start_date' => '', 1355 'event_end_date' => '', 1356 'event_start_time' => '', 1357 'event_end_time' => '', 1358 'timezone' => '', 1359 'event_type' => '', 1360 'service_body' => '', 1361 'location_name' => '', 1362 'location_address' => '', 1363 'location_details' => '', 1364 ] 1365 ]; 1366 1367 // Get featured image 1368 if (has_post_thumbnail($post)) { 1369 $data['featured_image'] = get_the_post_thumbnail_url($post, 'large'); 1370 } 1371 1372 1373 // Get event meta fields 1374 $meta_fields = [ 1375 'event_type', 1376 'event_start_date', 1377 'event_end_date', 1378 'event_start_time', 1379 'event_end_time', 1380 'timezone', 1381 'recurring_pattern', 1382 'location_name', 1383 'location_address', 1384 'location_details', 1385 'service_body', 1386 ]; 1387 1388 foreach ($meta_fields as $field) { 1389 $value = get_post_meta($post->ID, $field, true); 1390 if ($value) { 1391 $data['meta'][$field] = $value; 1392 } 1393 } 1394 1395 // Get categories and tags 1396 $data['categories'] = static::get_terms($post, 'category'); 1397 $data['tags'] = static::get_terms($post, 'post_tag'); 1398 1399 // Get linked announcements (active only for public display) 1400 $data['linked_announcements'] = Announcement::get_announcements_for_event($post->ID); 1401 1402 return $data; 1403 } 1404 1405 public static function bmltenabled_mayo_get_settings() { 1406 $settings = get_option('mayo_settings', []); 1407 $external_sources = get_option('mayo_external_sources', []); 1408 1409 return new \WP_REST_Response([ 1410 'bmlt_root_server' => $settings['bmlt_root_server'] ?? '', 1411 'notification_email' => $settings['notification_email'] ?? '', 1412 'default_service_bodies' => $settings['default_service_bodies'] ?? '', 1413 'external_sources' => $external_sources, 1414 'subscription_categories' => $settings['subscription_categories'] ?? [], 1415 'subscription_tags' => $settings['subscription_tags'] ?? [], 1416 'subscription_service_bodies' => $settings['subscription_service_bodies'] ?? [], 1417 'subscription_new_option_behavior' => $settings['subscription_new_option_behavior'] ?? 'opt_in' 1418 ]); 1419 } 1420 1421 public static function bmltenabled_mayo_update_settings($request) { 1422 if (!current_user_can('manage_options')) { 1423 return new \WP_Error( 1424 'rest_forbidden', 1425 __('Sorry, you are not allowed to update settings.'), 1426 ['status' => 401] 1427 ); 1428 } 1429 1430 $params = $request->get_params(); 1431 $settings = get_option('mayo_settings', []); 1432 1433 // Update BMLT root server 1434 if (isset($params['bmlt_root_server'])) { 1435 $settings['bmlt_root_server'] = sanitize_text_field($params['bmlt_root_server']); 1436 } 1437 1438 // Update notification email 1439 if (isset($params['notification_email'])) { 1440 // Sanitize the email list 1441 $email_list = sanitize_text_field($params['notification_email']); 1442 1443 // Validate each email in the list 1444 if (!empty($email_list)) { 1445 $emails = preg_split('/[,;]/', $email_list); 1446 $valid_emails = []; 1447 1448 foreach ($emails as $email) { 1449 $email = trim($email); 1450 if (is_email($email)) { 1451 $valid_emails[] = $email; 1452 } 1453 } 1454 1455 // Join valid emails with commas 1456 $settings['notification_email'] = implode(', ', $valid_emails); 1457 } else { 1458 $settings['notification_email'] = ''; 1459 } 1460 } 1461 1462 // Update default service bodies 1463 if (isset($params['default_service_bodies'])) { 1464 $service_bodies = sanitize_text_field($params['default_service_bodies']); 1465 $settings['default_service_bodies'] = $service_bodies; 1466 } 1467 1468 // Update external sources 1469 if (isset($params['external_sources']) && is_array($params['external_sources'])) { 1470 $external_sources = self::sanitize_sources($params['external_sources']); 1471 update_option('mayo_external_sources', $external_sources); 1472 } 1473 1474 // Update subscription settings 1475 if (isset($params['subscription_categories']) && is_array($params['subscription_categories'])) { 1476 $settings['subscription_categories'] = array_map('intval', $params['subscription_categories']); 1477 } 1478 1479 if (isset($params['subscription_tags']) && is_array($params['subscription_tags'])) { 1480 $settings['subscription_tags'] = array_map('intval', $params['subscription_tags']); 1481 } 1482 1483 if (isset($params['subscription_service_bodies']) && is_array($params['subscription_service_bodies'])) { 1484 $settings['subscription_service_bodies'] = array_map('sanitize_text_field', $params['subscription_service_bodies']); 1485 } 1486 1487 if (isset($params['subscription_new_option_behavior'])) { 1488 $behavior = sanitize_text_field($params['subscription_new_option_behavior']); 1489 if (in_array($behavior, ['opt_in', 'auto_include'])) { 1490 $settings['subscription_new_option_behavior'] = $behavior; 1491 } 1492 } 1493 1494 update_option('mayo_settings', $settings); 1495 1496 return new \WP_REST_Response([ 1497 'success' => true, 1498 'settings' => [ 1499 'bmlt_root_server' => $settings['bmlt_root_server'] ?? '', 1500 'notification_email' => $settings['notification_email'] ?? '', 1501 'default_service_bodies' => $settings['default_service_bodies'] ?? '', 1502 'external_sources' => get_option('mayo_external_sources', []), 1503 'subscription_categories' => $settings['subscription_categories'] ?? [], 1504 'subscription_tags' => $settings['subscription_tags'] ?? [], 1505 'subscription_service_bodies' => $settings['subscription_service_bodies'] ?? [], 1506 'subscription_new_option_behavior' => $settings['subscription_new_option_behavior'] ?? 'opt_in' 1507 ] 1508 ]); 1509 } 1510 1511 public static function bmltenabled_mayo_get_event_details($request) { 1512 $slug = $request['slug']; 1513 $query = new \WP_Query([ 1514 'post_type' => 'mayo_event', 1515 'name' => $slug, 1516 'posts_per_page' => 1, 1517 ]); 1518 1519 if ($query->have_posts()) { 1520 $query->the_post(); 1521 $event = self::format_event(get_post()); 1522 wp_reset_postdata(); 1523 return rest_ensure_response($event); 1524 } 1525 1526 return new \WP_Error('no_event', 'Event not found', ['status' => 404]); 1527 } 1528 1529 /** 1530 * Get terms for a post 1531 * 1532 * @param WP_Post|int $post Post object or post ID 1533 * @param string $taxonomy Taxonomy name 1534 * @return array Array of term objects 1535 */ 1536 private static function get_terms($post, $taxonomy) { 1537 $post_id = is_object($post) ? $post->ID : $post; 1538 1539 $terms = wp_get_post_terms($post_id, $taxonomy, array( 1540 'fields' => 'all' 1541 )); 1542 1543 if (is_wp_error($terms)) { 1544 return array(); 1545 } 1546 1547 return array_map(function($term) { 1548 return array( 1549 'id' => $term->term_id, 1550 'name' => html_entity_decode($term->name), 1551 'slug' => $term->slug, 1552 'link' => get_term_link($term) 1553 ); 1554 }, $terms); 1555 } 1556 1557 /** 1558 * Generate a readable ID for external sources 1559 * 1560 * @return string A readable ID 1561 */ 1562 private static function generate_readable_id() { 1563 $prefix = 'source_'; 1564 $random = substr(md5(uniqid(rand(), true)), 0, 8); 1565 return $prefix . $random; 1566 } 1567 1568 // Add this new method to ensure nonce is available 1569 public static function enqueue_scripts() { 1570 // Add this to your plugin's enqueue_scripts action 1571 wp_localize_script('mayo-public', 'mayoApiSettings', [ 1572 'root' => esc_url_raw(rest_url()), 1573 'nonce' => wp_create_nonce('wp_rest') 1574 ]); 1575 } 1576 1577 /** 1578 * Sanitize external sources 1579 * 1580 * @param array $sources Array of external sources 1581 * @return array Sanitized external sources 1582 */ 1583 private static function sanitize_sources($sources) { 1584 $sanitized_sources = []; 1585 1586 foreach ($sources as $source) { 1587 if (empty($source['url'])) continue; 1588 1589 // Keep existing ID or generate new readable one 1590 $id = !empty($source['id']) ? sanitize_text_field($source['id']) : self::generate_readable_id(); 1591 1592 $sanitized_sources[] = [ 1593 'id' => $id, 1594 'url' => esc_url_raw(trim($source['url'])), 1595 'name' => sanitize_text_field($source['name'] ?? ''), 1596 'event_type' => sanitize_text_field($source['event_type'] ?? ''), 1597 'service_body' => sanitize_text_field($source['service_body'] ?? ''), 1598 'categories' => sanitize_text_field($source['categories'] ?? ''), 1599 'tags' => sanitize_text_field($source['tags'] ?? ''), 1600 'enabled' => (bool) ($source['enabled'] ?? false) 1601 ]; 1602 } 1603 1604 return $sanitized_sources; 1605 } 1606 1607 /** 1608 * Get announcements with optional filtering 1609 * 1610 * @param WP_REST_Request $request 1611 * @return WP_REST_Response 1612 */ 1613 public static function get_announcements($request) { 1614 $params = $request->get_params(); 1615 1616 $priority = isset($params['priority']) ? sanitize_text_field($params['priority']) : ''; 1617 $categories = isset($params['categories']) ? sanitize_text_field($params['categories']) : ''; 1618 $categoryRelation = isset($params['category_relation']) ? strtoupper(sanitize_text_field($params['category_relation'])) : 'OR'; 1619 $tags = isset($params['tags']) ? sanitize_text_field($params['tags']) : ''; 1620 $linked_event = isset($params['linked_event']) ? intval($params['linked_event']) : 0; 1621 $active_only = !isset($params['active']) || $params['active'] !== 'false'; 1622 $orderby = isset($params['orderby']) ? sanitize_text_field($params['orderby']) : 'date'; 1623 $order = isset($params['order']) ? strtoupper(sanitize_text_field($params['order'])) : ''; 1624 1625 $today = current_time('Y-m-d'); 1626 1627 $args = [ 1628 'post_type' => 'mayo_announcement', 1629 'post_status' => 'publish', 1630 'posts_per_page' => -1, 1631 ]; 1632 1633 $meta_query = []; 1634 1635 // Filter by active display window 1636 if ($active_only) { 1637 $meta_query[] = [ 1638 'relation' => 'OR', 1639 [ 1640 'key' => 'display_start_date', 1641 'value' => $today, 1642 'compare' => '<=', 1643 'type' => 'DATE' 1644 ], 1645 [ 1646 'key' => 'display_start_date', 1647 'compare' => 'NOT EXISTS' 1648 ], 1649 [ 1650 'key' => 'display_start_date', 1651 'value' => '', 1652 'compare' => '=' 1653 ] 1654 ]; 1655 $meta_query[] = [ 1656 'relation' => 'OR', 1657 [ 1658 'key' => 'display_end_date', 1659 'value' => $today, 1660 'compare' => '>=', 1661 'type' => 'DATE' 1662 ], 1663 [ 1664 'key' => 'display_end_date', 1665 'compare' => 'NOT EXISTS' 1666 ], 1667 [ 1668 'key' => 'display_end_date', 1669 'value' => '', 1670 'compare' => '=' 1671 ] 1672 ]; 1673 } 1674 1675 // Filter by priority 1676 if (!empty($priority)) { 1677 $meta_query[] = [ 1678 'key' => 'priority', 1679 'value' => $priority, 1680 'compare' => '=' 1681 ]; 1682 } 1683 1684 // Filter by linked event 1685 if ($linked_event > 0) { 1686 $meta_query[] = [ 1687 'key' => 'linked_events', 1688 'value' => 'i:' . intval($linked_event) . ';', 1689 'compare' => 'LIKE' 1690 ]; 1691 } 1692 1693 if (!empty($meta_query)) { 1694 $meta_query['relation'] = 'AND'; 1695 $args['meta_query'] = $meta_query; 1696 } 1697 1698 // Handle taxonomy filters 1699 $taxonomy_args = self::build_taxonomy_args($categories, $categoryRelation, $tags); 1700 $args = array_merge($args, $taxonomy_args); 1701 1702 $posts = get_posts($args); 1703 1704 $announcements = []; 1705 foreach ($posts as $post) { 1706 $announcements[] = self::format_announcement($post); 1707 } 1708 1709 // Sort announcements 1710 $announcements = self::sort_announcements($announcements, $orderby, $order); 1711 1712 return new \WP_REST_Response([ 1713 'announcements' => $announcements, 1714 'total' => count($announcements) 1715 ]); 1716 } 1717 1718 /** 1719 * Sort announcements by specified field and order 1720 * 1721 * @param array $announcements Array of announcements 1722 * @param string $orderby Sort field (date, title, created) 1723 * @param string $order Sort direction (ASC, DESC) 1724 * @return array Sorted announcements 1725 */ 1726 private static function sort_announcements($announcements, $orderby, $order) { 1727 // Set smart defaults for order direction 1728 if (empty($order)) { 1729 $order = ($orderby === 'title') ? 'ASC' : 'DESC'; 1730 } 1731 1732 usort($announcements, function ($a, $b) use ($orderby, $order) { 1733 switch ($orderby) { 1734 case 'title': 1735 $cmp = strcasecmp($a['title'], $b['title']); 1736 break; 1737 case 'created': 1738 $cmp = strcmp($a['created_date'] ?? '', $b['created_date'] ?? ''); 1739 break; 1740 case 'date': 1741 default: 1742 $cmp = strcmp($a['display_start_date'] ?: '', $b['display_start_date'] ?: ''); 1743 break; 1744 } 1745 return $order === 'DESC' ? -$cmp : $cmp; 1746 }); 1747 1748 return $announcements; 1749 } 1750 1751 /** 1752 * Get a single announcement by ID 1753 * 1754 * @param WP_REST_Request $request 1755 * @return WP_REST_Response|WP_Error 1756 */ 1757 public static function get_announcement($request) { 1758 $id = intval($request['id']); 1759 $post = get_post($id); 1760 1761 if (!$post || $post->post_type !== 'mayo_announcement') { 1762 return new \WP_Error('not_found', 'Announcement not found', ['status' => 404]); 1763 } 1764 1765 return new \WP_REST_Response(self::format_announcement($post)); 1766 } 1767 1768 /** 1769 * Get announcement by slug 1770 * 1771 * @param WP_REST_Request $request 1772 * @return WP_REST_Response|WP_Error 1773 */ 1774 public static function get_announcement_by_slug($request) { 1775 $slug = sanitize_title($request['slug']); 1776 1777 $posts = get_posts([ 1778 'post_type' => 'mayo_announcement', 1779 'name' => $slug, 1780 'post_status' => 'publish', 1781 'posts_per_page' => 1, 1782 ]); 1783 1784 if (empty($posts)) { 1785 return new \WP_Error('not_found', 'Announcement not found', ['status' => 404]); 1786 } 1787 1788 return new \WP_REST_Response(self::format_announcement($posts[0])); 1789 } 1790 1791 /** 1792 * Submit a new announcement from the public form 1793 * 1794 * @param WP_REST_Request $request 1795 * @return WP_REST_Response 1796 */ 1797 public static function submit_announcement($request) { 1798 $params = $request->get_params(); 1799 1800 // Create the post 1801 $post_data = [ 1802 'post_title' => sanitize_text_field($params['title']), 1803 'post_content' => sanitize_textarea_field($params['description'] ?? ''), 1804 'post_status' => 'pending', 1805 'post_type' => 'mayo_announcement' 1806 ]; 1807 1808 $post_id = wp_insert_post($post_data); 1809 1810 if (is_wp_error($post_id)) { 1811 return new \WP_REST_Response([ 1812 'success' => false, 1813 'message' => $post_id->get_error_message() 1814 ], 400); 1815 } 1816 1817 // Add metadata 1818 if (!empty($params['service_body'])) { 1819 add_post_meta($post_id, 'service_body', sanitize_text_field($params['service_body'])); 1820 } 1821 if (!empty($params['email'])) { 1822 add_post_meta($post_id, 'email', sanitize_email($params['email'])); 1823 } 1824 if (!empty($params['contact_name'])) { 1825 add_post_meta($post_id, 'contact_name', sanitize_text_field($params['contact_name'])); 1826 } 1827 if (!empty($params['start_date'])) { 1828 add_post_meta($post_id, 'display_start_date', sanitize_text_field($params['start_date'])); 1829 } 1830 if (!empty($params['start_time'])) { 1831 add_post_meta($post_id, 'display_start_time', sanitize_text_field($params['start_time'])); 1832 } 1833 if (!empty($params['end_date'])) { 1834 add_post_meta($post_id, 'display_end_date', sanitize_text_field($params['end_date'])); 1835 } 1836 if (!empty($params['end_time'])) { 1837 add_post_meta($post_id, 'display_end_time', sanitize_text_field($params['end_time'])); 1838 } 1839 1840 // Handle categories and tags 1841 if (!empty($params['categories'])) { 1842 $categories_array = array_map('intval', explode(',', $params['categories'])); 1843 wp_set_post_categories($post_id, $categories_array); 1844 } 1845 if (!empty($params['tags'])) { 1846 wp_set_post_tags($post_id, $params['tags']); 1847 } 1848 1849 // Handle file uploads 1850 if (!empty($_FILES)) { 1851 if (!function_exists('wp_handle_upload')) { 1852 require_once(ABSPATH . 'wp-admin/includes/file.php'); 1853 } 1854 if (!function_exists('wp_generate_attachment_metadata')) { 1855 require_once(ABSPATH . 'wp-admin/includes/image.php'); 1856 } 1857 if (!function_exists('wp_insert_attachment')) { 1858 require_once(ABSPATH . 'wp-admin/includes/media.php'); 1859 } 1860 1861 foreach ($_FILES as $file_key => $file) { 1862 // Skip empty files 1863 if (empty($file['name']) || $file['size'] <= 0) { 1864 continue; 1865 } 1866 1867 $uploaded_file = wp_handle_upload($file, array('test_form' => false)); 1868 1869 if (isset($uploaded_file['error'])) { 1870 error_log('Upload error: ' . $uploaded_file['error']); 1871 continue; 1872 } 1873 1874 // Prepare attachment data 1875 $attachment = array( 1876 'guid' => $uploaded_file['url'], 1877 'post_mime_type' => $uploaded_file['type'], 1878 'post_title' => sanitize_file_name(basename($uploaded_file['file'])), 1879 'post_content' => '', 1880 'post_status' => 'inherit' 1881 ); 1882 1883 // Insert attachment 1884 $attachment_id = wp_insert_attachment($attachment, $uploaded_file['file'], $post_id); 1885 if (!is_wp_error($attachment_id)) { 1886 $attachment_data = wp_generate_attachment_metadata($attachment_id, $uploaded_file['file']); 1887 wp_update_attachment_metadata($attachment_id, $attachment_data); 1888 1889 // Set as featured image if it's an image 1890 if (strpos($uploaded_file['type'], 'image/') === 0) { 1891 set_post_thumbnail($post_id, $attachment_id); 1892 } 1893 } 1894 } 1895 } 1896 1897 // Send email notification 1898 self::send_announcement_submission_email($post_id, $params); 1899 1900 return new \WP_REST_Response([ 1901 'success' => true, 1902 'id' => $post_id, 1903 'message' => 'Announcement submitted successfully' 1904 ], 200); 1905 } 1906 1907 /** 1908 * Send email notification for announcement submission 1909 * 1910 * @param int $post_id Post ID 1911 * @param array $params Submission parameters 1912 */ 1913 private static function send_announcement_submission_email($post_id, $params) { 1914 $settings = get_option('mayo_settings', []); 1915 $notification_email = isset($settings['notification_email']) ? $settings['notification_email'] : get_option('admin_email'); 1916 1917 // Support multiple emails (comma or semicolon separated) 1918 $emails = preg_split('/[,;]\s*/', $notification_email); 1919 $valid_emails = array_filter($emails, 'is_email'); 1920 1921 if (empty($valid_emails)) { 1922 return; 1923 } 1924 1925 $site_name = get_bloginfo('name'); 1926 $subject = sprintf('[%s] New Announcement Submission: %s', $site_name, sanitize_text_field($params['title'])); 1927 1928 $message = "A new announcement has been submitted and is pending review.\n\n"; 1929 $message .= "Title: " . sanitize_text_field($params['title']) . "\n\n"; 1930 1931 // Dates 1932 if (!empty($params['start_date']) || !empty($params['end_date'])) { 1933 $start_date = !empty($params['start_date']) ? sanitize_text_field($params['start_date']) : 'Not set'; 1934 $end_date = !empty($params['end_date']) ? sanitize_text_field($params['end_date']) : 'Not set'; 1935 $message .= "Start Date: " . $start_date . "\n"; 1936 $message .= "End Date: " . $end_date . "\n\n"; 1937 } 1938 1939 $message .= "Description:\n" . sanitize_textarea_field($params['description'] ?? '') . "\n\n"; 1940 1941 // Service body info 1942 if (!empty($params['service_body'])) { 1943 $service_body_id = sanitize_text_field($params['service_body']); 1944 $message .= "Service Body ID: " . $service_body_id . "\n"; 1945 } 1946 1947 // Contact info 1948 $message .= "\nSubmitted by:\n"; 1949 $message .= "Name: " . sanitize_text_field($params['contact_name'] ?? 'Not provided') . "\n"; 1950 $message .= "Email: " . sanitize_email($params['email'] ?? 'Not provided') . "\n\n"; 1951 1952 // Categories 1953 if (!empty($params['categories'])) { 1954 $category_ids = array_map('intval', explode(',', $params['categories'])); 1955 $category_names = []; 1956 foreach ($category_ids as $cat_id) { 1957 $cat = get_category($cat_id); 1958 if ($cat) { 1959 $category_names[] = $cat->name; 1960 } 1961 } 1962 if (!empty($category_names)) { 1963 $message .= "Categories: " . implode(', ', $category_names) . "\n"; 1964 } 1965 } 1966 1967 // Tags 1968 if (!empty($params['tags'])) { 1969 $message .= "Tags: " . sanitize_text_field($params['tags']) . "\n"; 1970 } 1971 1972 // Edit link 1973 $edit_link = admin_url('post.php?post=' . $post_id . '&action=edit'); 1974 $message .= "\nReview and edit this announcement:\n" . $edit_link . "\n"; 1975 1976 $headers = ['Content-Type: text/plain; charset=UTF-8']; 1977 1978 foreach ($valid_emails as $email) { 1979 wp_mail(trim($email), $subject, $message, $headers); 1980 } 1981 } 1982 1983 /** 1984 * Search events for linking in announcement editor 1985 * 1986 * @param WP_REST_Request $request 1987 * @return WP_REST_Response 1988 */ 1989 public static function search_events($request) { 1990 $search = isset($request['search']) ? sanitize_text_field($request['search']) : ''; 1991 $limit = isset($request['limit']) ? intval($request['limit']) : 20; 1992 $include = isset($request['include']) ? sanitize_text_field($request['include']) : ''; 1993 1994 $args = [ 1995 'post_type' => 'mayo_event', 1996 'post_status' => 'publish', 1997 'posts_per_page' => $limit, 1998 'orderby' => 'meta_value', 1999 'meta_key' => 'event_start_date', 2000 'order' => 'ASC', 2001 ]; 2002 2003 // If include parameter is set, fetch specific event(s) by ID 2004 if (!empty($include)) { 2005 $ids = array_map('intval', explode(',', $include)); 2006 $args['post__in'] = $ids; 2007 $args['posts_per_page'] = count($ids); 2008 } elseif (!empty($search)) { 2009 $args['s'] = $search; 2010 } 2011 2012 $posts = get_posts($args); 2013 2014 $events = []; 2015 foreach ($posts as $post) { 2016 $events[] = [ 2017 'id' => $post->ID, 2018 'title' => html_entity_decode($post->post_title, ENT_QUOTES, 'UTF-8'), 2019 'start_date' => get_post_meta($post->ID, 'event_start_date', true), 2020 'permalink' => get_permalink($post->ID), 2021 'edit_link' => get_edit_post_link($post->ID, 'raw'), 2022 ]; 2023 } 2024 2025 return new \WP_REST_Response([ 2026 'events' => $events 2027 ]); 2028 } 2029 2030 /** 2031 * Search both local and external events 2032 * Used for linking events to announcements 2033 * Supports pagination for infinite scroll 2034 * 2035 * @param WP_REST_Request $request 2036 * @return WP_REST_Response 2037 */ 2038 public static function search_all_events($request) { 2039 $search = isset($request['search']) ? sanitize_text_field($request['search']) : ''; 2040 $per_page = isset($request['per_page']) ? intval($request['per_page']) : 20; 2041 $page = isset($request['page']) ? max(1, intval($request['page'])) : 1; 2042 $hide_past = isset($request['hide_past']) ? filter_var($request['hide_past'], FILTER_VALIDATE_BOOLEAN) : true; 2043 // Support legacy 'limit' parameter 2044 if (isset($request['limit']) && !isset($request['per_page'])) { 2045 $per_page = intval($request['limit']); 2046 } 2047 2048 $today = wp_date('Y-m-d'); 2049 $all_events = []; 2050 2051 // 1. Search local events - fetch more than needed to allow for sorting with external 2052 $local_args = [ 2053 'post_type' => 'mayo_event', 2054 'post_status' => 'publish', 2055 'posts_per_page' => -1, // Get all for proper sorting with external events 2056 'orderby' => 'meta_value', 2057 'meta_key' => 'event_start_date', 2058 'order' => 'ASC', 2059 ]; 2060 2061 if (!empty($search)) { 2062 $local_args['s'] = $search; 2063 } 2064 2065 // Filter to only future events if hide_past is true 2066 if ($hide_past) { 2067 $local_args['meta_query'] = [ 2068 [ 2069 'key' => 'event_start_date', 2070 'value' => $today, 2071 'compare' => '>=', 2072 'type' => 'DATE', 2073 ], 2074 ]; 2075 } 2076 2077 $local_posts = get_posts($local_args); 2078 2079 foreach ($local_posts as $post) { 2080 $all_events[] = [ 2081 'id' => $post->ID, 2082 'title' => html_entity_decode($post->post_title, ENT_QUOTES, 'UTF-8'), 2083 'slug' => $post->post_name, 2084 'start_date' => get_post_meta($post->ID, 'event_start_date', true), 2085 'permalink' => get_permalink($post->ID), 2086 'source' => [ 2087 'type' => 'local', 2088 'id' => 'local', 2089 'name' => 'Local', 2090 ], 2091 ]; 2092 } 2093 2094 // 2. Search external sources 2095 $external_sources = get_option('mayo_external_sources', []); 2096 2097 foreach ($external_sources as $source) { 2098 if (empty($source['enabled']) || empty($source['url'])) { 2099 continue; 2100 } 2101 2102 try { 2103 // Build search URL for external source - get all for proper pagination 2104 $params = ['per_page' => 100]; 2105 if (!empty($search)) { 2106 $params['search'] = $search; 2107 } 2108 2109 $url = add_query_arg($params, trailingslashit($source['url']) . 'wp-json/event-manager/v1/events'); 2110 2111 $response = wp_remote_get($url, [ 2112 'timeout' => 10, 2113 'sslverify' => true 2114 ]); 2115 2116 if (is_wp_error($response)) { 2117 continue; 2118 } 2119 2120 $body = wp_remote_retrieve_body($response); 2121 $data = json_decode($body, true); 2122 2123 // Handle both paginated and direct array response formats 2124 $events = isset($data['events']) ? $data['events'] : $data; 2125 2126 if (!is_array($events)) { 2127 continue; 2128 } 2129 2130 $source_name = $source['name'] ?? parse_url($source['url'], PHP_URL_HOST); 2131 $source_host = parse_url($source['url'], PHP_URL_HOST); 2132 2133 foreach ($events as $event) { 2134 // Handle title - may be string or {rendered: "..."} object from WP REST API 2135 $title = $event['title'] ?? 'Untitled Event'; 2136 if (is_array($title) && isset($title['rendered'])) { 2137 $title = $title['rendered']; 2138 } 2139 // Decode HTML entities for proper display 2140 $title = html_entity_decode($title, ENT_QUOTES, 'UTF-8'); 2141 2142 // Filter by search term if the external API doesn't support search param 2143 if (!empty($search)) { 2144 if (stripos($title, $search) === false) { 2145 continue; 2146 } 2147 } 2148 2149 // Get start date for filtering 2150 $start_date = $event['meta']['event_start_date'] ?? ($event['start_date'] ?? ''); 2151 2152 // Filter out past events if hide_past is true 2153 if ($hide_past && !empty($start_date) && $start_date < $today) { 2154 continue; 2155 } 2156 2157 // Use the link from the API response if available, otherwise construct it 2158 $permalink = $event['link'] ?? $event['permalink'] ?? (trailingslashit($source['url']) . 'event/' . ($event['slug'] ?? $event['id'])); 2159 2160 $all_events[] = [ 2161 'id' => $event['id'] ?? 0, 2162 'title' => $title, 2163 'slug' => $event['slug'] ?? '', 2164 'start_date' => $start_date, 2165 'permalink' => $permalink, 2166 'source' => [ 2167 'type' => 'external', 2168 'id' => $source['id'], 2169 'name' => $source_name, 2170 'url' => $source_host, 2171 ], 2172 ]; 2173 } 2174 } catch (\Exception $e) { 2175 error_log('Error searching external source ' . $source['url'] . ': ' . $e->getMessage()); 2176 continue; 2177 } 2178 } 2179 2180 // Sort all events by start_date 2181 usort($all_events, function($a, $b) { 2182 $dateA = $a['start_date'] ?? ''; 2183 $dateB = $b['start_date'] ?? ''; 2184 return strcmp($dateA, $dateB); 2185 }); 2186 2187 // Calculate pagination 2188 $total = count($all_events); 2189 $total_pages = ceil($total / $per_page); 2190 $offset = ($page - 1) * $per_page; 2191 2192 // Slice for current page 2193 $paginated_events = array_slice($all_events, $offset, $per_page); 2194 2195 return new \WP_REST_Response([ 2196 'events' => $paginated_events, 2197 'total' => $total, 2198 'total_pages' => $total_pages, 2199 'page' => $page, 2200 'per_page' => $per_page, 2201 ]); 2202 } 2203 2204 /** 2205 * Get a single event by ID 2206 * 2207 * @param WP_REST_Request $request 2208 * @return WP_REST_Response|WP_Error 2209 */ 2210 public static function get_event_by_id($request) { 2211 $id = intval($request['id']); 2212 $post = get_post($id); 2213 2214 if (!$post || $post->post_type !== 'mayo_event' || $post->post_status !== 'publish') { 2215 return new \WP_Error('not_found', 'Event not found', ['status' => 404]); 2216 } 2217 2218 return new \WP_REST_Response([ 2219 'id' => $post->ID, 2220 'title' => html_entity_decode($post->post_title, ENT_QUOTES, 'UTF-8'), 2221 'start_date' => get_post_meta($post->ID, 'event_start_date', true), 2222 'end_date' => get_post_meta($post->ID, 'event_end_date', true), 2223 'start_time' => get_post_meta($post->ID, 'event_start_time', true), 2224 'end_time' => get_post_meta($post->ID, 'event_end_time', true), 2225 'permalink' => get_permalink($post->ID), 2226 'edit_link' => get_edit_post_link($post->ID, 'raw'), 2227 ]); 2228 } 2229 2230 /** 2231 * Format announcement data for API response 2232 * 2233 * @param WP_Post $post 2234 * @return array 2235 */ 2236 private static function format_announcement($post) { 2237 $linked_refs = Announcement::get_linked_event_refs($post->ID); 2238 $linked_event_data = []; 2239 2240 foreach ($linked_refs as $ref) { 2241 $resolved = Announcement::resolve_event_ref($ref); 2242 if ($resolved) { 2243 // Handle both 'link' (from external API) and 'permalink' (from local) 2244 $permalink = $resolved['permalink'] ?? $resolved['link'] ?? '#'; 2245 // Handle title - may be string or {rendered: "..."} object from WP REST API 2246 $title = $resolved['title'] ?? 'Unknown Event'; 2247 if (is_array($title) && isset($title['rendered'])) { 2248 $title = $title['rendered']; 2249 } 2250 $title = html_entity_decode($title, ENT_QUOTES, 'UTF-8'); 2251 // Handle start_date from meta object or direct field 2252 $start_date = $resolved['start_date'] ?? ($resolved['meta']['event_start_date'] ?? ''); 2253 $linked_event_data[] = [ 2254 'id' => $resolved['id'], 2255 'title' => $title, 2256 'permalink' => $permalink, 2257 'start_date' => $start_date, 2258 'source' => $resolved['source'] ?? ['type' => 'local', 'id' => 'local', 'name' => 'Local'], 2259 ]; 2260 } elseif ($ref['type'] === 'external' && !empty($ref['source_id'])) { 2261 // External event unavailable - include placeholder with source info 2262 $source = Announcement::get_external_source($ref['source_id']); 2263 $source_name = $source ? ($source['name'] ?? parse_url($source['url'], PHP_URL_HOST)) : 'External'; 2264 $linked_event_data[] = [ 2265 'id' => $ref['id'], 2266 'title' => 'Event details unavailable', 2267 'permalink' => '#', 2268 'start_date' => '', 2269 'unavailable' => true, 2270 'source' => [ 2271 'type' => 'external', 2272 'id' => $ref['source_id'], 2273 'name' => $source_name, 2274 ], 2275 ]; 2276 } 2277 } 2278 2279 // Calculate is_active based on display dates 2280 $today = current_time('Y-m-d'); 2281 $display_start_date = get_post_meta($post->ID, 'display_start_date', true); 2282 $display_end_date = get_post_meta($post->ID, 'display_end_date', true); 2283 2284 $is_active = true; 2285 if ($display_start_date && $display_start_date > $today) { 2286 $is_active = false; 2287 } 2288 if ($display_end_date && $display_end_date < $today) { 2289 $is_active = false; 2290 } 2291 2292 $permalink = get_permalink($post->ID); 2293 2294 // Build edit link manually since get_edit_post_link may return null in REST context 2295 $edit_link = admin_url('post.php?post=' . $post->ID . '&action=edit'); 2296 2297 return [ 2298 'id' => $post->ID, 2299 'title' => html_entity_decode($post->post_title, ENT_QUOTES, 'UTF-8'), 2300 'content' => apply_filters('the_content', $post->post_content), 2301 'excerpt' => get_the_excerpt($post), 2302 'permalink' => $permalink, 2303 'link' => $permalink, 2304 'edit_link' => $edit_link, 2305 'display_start_date' => $display_start_date, 2306 'display_start_time' => get_post_meta($post->ID, 'display_start_time', true), 2307 'display_end_date' => $display_end_date, 2308 'display_end_time' => get_post_meta($post->ID, 'display_end_time', true), 2309 'priority' => get_post_meta($post->ID, 'priority', true) ?: 'normal', 2310 'service_body' => get_post_meta($post->ID, 'service_body', true) ?: '', 2311 'is_active' => $is_active, 2312 'linked_events' => $linked_event_data, 2313 'featured_image' => get_the_post_thumbnail_url($post->ID, 'medium'), 2314 'categories' => self::get_terms($post, 'category'), 2315 'tags' => self::get_terms($post, 'post_tag'), 2316 'created_date' => $post->post_date, 2317 ]; 2318 } 2319 2320 /** 2321 * Handle subscription requests 2322 * 2323 * @param WP_REST_Request $request 2324 * @return WP_REST_Response 2325 */ 2326 public static function subscribe($request) { 2327 $params = $request->get_params(); 2328 2329 $email = isset($params['email']) ? sanitize_email($params['email']) : ''; 2330 2331 if (empty($email)) { 2332 return new \WP_REST_Response([ 2333 'success' => false, 2334 'code' => 'missing_email', 2335 'message' => 'Email address is required.' 2336 ], 400); 2337 } 2338 2339 // Get preferences if provided 2340 $preferences = isset($params['preferences']) ? $params['preferences'] : null; 2341 2342 // Validate preferences structure if provided 2343 if ($preferences !== null) { 2344 if (!is_array($preferences)) { 2345 return new \WP_REST_Response([ 2346 'success' => false, 2347 'code' => 'invalid_preferences', 2348 'message' => 'Preferences must be an object.' 2349 ], 400); 2350 } 2351 2352 // Sanitize preferences 2353 $clean_preferences = [ 2354 'categories' => [], 2355 'tags' => [], 2356 'service_bodies' => [] 2357 ]; 2358 2359 if (isset($preferences['categories']) && is_array($preferences['categories'])) { 2360 $clean_preferences['categories'] = array_map('intval', $preferences['categories']); 2361 } 2362 if (isset($preferences['tags']) && is_array($preferences['tags'])) { 2363 $clean_preferences['tags'] = array_map('intval', $preferences['tags']); 2364 } 2365 if (isset($preferences['service_bodies']) && is_array($preferences['service_bodies'])) { 2366 $clean_preferences['service_bodies'] = array_map('sanitize_text_field', $preferences['service_bodies']); 2367 } 2368 2369 // Check that at least one preference is selected 2370 $total = count($clean_preferences['categories']) + 2371 count($clean_preferences['tags']) + 2372 count($clean_preferences['service_bodies']); 2373 2374 if ($total === 0) { 2375 return new \WP_REST_Response([ 2376 'success' => false, 2377 'code' => 'no_preferences', 2378 'message' => 'Please select at least one category, tag, or service body.' 2379 ], 400); 2380 } 2381 2382 $preferences = $clean_preferences; 2383 } 2384 2385 $result = Subscriber::subscribe($email, $preferences); 2386 2387 $status_code = $result['success'] ? 200 : 400; 2388 2389 return new \WP_REST_Response($result, $status_code); 2390 } 2391 2392 /** 2393 * Get subscription options (categories, tags, service bodies enabled by admin) 2394 * 2395 * @param WP_REST_Request $request 2396 * @return WP_REST_Response 2397 */ 2398 public static function get_subscription_options($request) { 2399 $settings = get_option('mayo_settings', []); 2400 2401 // Get enabled IDs from settings 2402 $enabled_categories = $settings['subscription_categories'] ?? []; 2403 $enabled_tags = $settings['subscription_tags'] ?? []; 2404 $enabled_service_bodies = $settings['subscription_service_bodies'] ?? []; 2405 2406 // Fetch category details 2407 $categories = []; 2408 if (!empty($enabled_categories)) { 2409 $terms = get_terms([ 2410 'taxonomy' => 'category', 2411 'include' => $enabled_categories, 2412 'hide_empty' => false 2413 ]); 2414 if (!is_wp_error($terms)) { 2415 foreach ($terms as $term) { 2416 $categories[] = [ 2417 'id' => $term->term_id, 2418 'name' => $term->name, 2419 'slug' => $term->slug 2420 ]; 2421 } 2422 } 2423 } 2424 2425 // Fetch tag details 2426 $tags = []; 2427 if (!empty($enabled_tags)) { 2428 $terms = get_terms([ 2429 'taxonomy' => 'post_tag', 2430 'include' => $enabled_tags, 2431 'hide_empty' => false 2432 ]); 2433 if (!is_wp_error($terms)) { 2434 foreach ($terms as $term) { 2435 $tags[] = [ 2436 'id' => $term->term_id, 2437 'name' => $term->name, 2438 'slug' => $term->slug 2439 ]; 2440 } 2441 } 2442 } 2443 2444 // Fetch service body details from BMLT 2445 $service_bodies = []; 2446 $bmlt_root_server = $settings['bmlt_root_server'] ?? ''; 2447 if (!empty($enabled_service_bodies) && !empty($bmlt_root_server)) { 2448 $response = wp_remote_get($bmlt_root_server . '/client_interface/json/?switcher=GetServiceBodies'); 2449 if (!is_wp_error($response)) { 2450 $all_bodies = json_decode(wp_remote_retrieve_body($response), true); 2451 if (is_array($all_bodies)) { 2452 foreach ($all_bodies as $body) { 2453 if (in_array($body['id'], $enabled_service_bodies)) { 2454 $service_bodies[] = [ 2455 'id' => $body['id'], 2456 'name' => $body['name'] 2457 ]; 2458 } 2459 } 2460 } 2461 } 2462 } 2463 2464 return new \WP_REST_Response([ 2465 'categories' => $categories, 2466 'tags' => $tags, 2467 'service_bodies' => $service_bodies 2468 ], 200); 2469 } 2470 2471 /** 2472 * Get subscriber data by token 2473 * 2474 * @param WP_REST_Request $request 2475 * @return WP_REST_Response 2476 */ 2477 public static function get_subscriber($request) { 2478 $token = $request->get_param('token'); 2479 2480 $subscriber = Subscriber::get_by_token($token); 2481 2482 if (!$subscriber) { 2483 return new \WP_REST_Response([ 2484 'success' => false, 2485 'code' => 'not_found', 2486 'message' => 'Subscriber not found.' 2487 ], 404); 2488 } 2489 2490 // Parse preferences 2491 $preferences = null; 2492 if (!empty($subscriber->preferences)) { 2493 $preferences = json_decode($subscriber->preferences, true); 2494 } 2495 2496 return new \WP_REST_Response([ 2497 'email' => $subscriber->email, 2498 'status' => $subscriber->status, 2499 'preferences' => $preferences 2500 ], 200); 2501 } 2502 2503 /** 2504 * Update subscriber preferences 2505 * 2506 * @param WP_REST_Request $request 2507 * @return WP_REST_Response 2508 */ 2509 public static function update_subscriber($request) { 2510 $token = $request->get_param('token'); 2511 $params = $request->get_params(); 2512 2513 $subscriber = Subscriber::get_by_token($token); 2514 2515 if (!$subscriber) { 2516 return new \WP_REST_Response([ 2517 'success' => false, 2518 'code' => 'not_found', 2519 'message' => 'Subscriber not found.' 2520 ], 404); 2521 } 2522 2523 if ($subscriber->status !== 'active') { 2524 return new \WP_REST_Response([ 2525 'success' => false, 2526 'code' => 'not_active', 2527 'message' => 'Subscription is not active.' 2528 ], 400); 2529 } 2530 2531 // Get and validate preferences 2532 $preferences = isset($params['preferences']) ? $params['preferences'] : null; 2533 2534 if ($preferences === null || !is_array($preferences)) { 2535 return new \WP_REST_Response([ 2536 'success' => false, 2537 'code' => 'invalid_preferences', 2538 'message' => 'Preferences must be provided.' 2539 ], 400); 2540 } 2541 2542 // Sanitize preferences 2543 $clean_preferences = [ 2544 'categories' => [], 2545 'tags' => [], 2546 'service_bodies' => [] 2547 ]; 2548 2549 if (isset($preferences['categories']) && is_array($preferences['categories'])) { 2550 $clean_preferences['categories'] = array_map('intval', $preferences['categories']); 2551 } 2552 if (isset($preferences['tags']) && is_array($preferences['tags'])) { 2553 $clean_preferences['tags'] = array_map('intval', $preferences['tags']); 2554 } 2555 if (isset($preferences['service_bodies']) && is_array($preferences['service_bodies'])) { 2556 $clean_preferences['service_bodies'] = array_map('sanitize_text_field', $preferences['service_bodies']); 2557 } 2558 2559 // Check that at least one preference is selected 2560 $total = count($clean_preferences['categories']) + 2561 count($clean_preferences['tags']) + 2562 count($clean_preferences['service_bodies']); 2563 2564 if ($total === 0) { 2565 return new \WP_REST_Response([ 2566 'success' => false, 2567 'code' => 'no_preferences', 2568 'message' => 'Please select at least one category, tag, or service body.' 2569 ], 400); 2570 } 2571 2572 $result = Subscriber::update_preferences($token, $clean_preferences); 2573 2574 if ($result) { 2575 return new \WP_REST_Response([ 2576 'success' => true, 2577 'message' => 'Preferences updated successfully.' 2578 ], 200); 2579 } else { 2580 return new \WP_REST_Response([ 2581 'success' => false, 2582 'code' => 'update_failed', 2583 'message' => 'Failed to update preferences.' 2584 ], 500); 2585 } 2586 } 2587 2588 /** 2589 * Get all subscribers (admin only) 2590 * 2591 * @param WP_REST_Request $request 2592 * @return WP_REST_Response 2593 */ 2594 public static function get_all_subscribers($request) 2595 { 2596 $subscribers = Subscriber::get_all_subscribers(); 2597 2598 // Get settings for preference name lookups 2599 $settings = get_option('mayo_settings', []); 2600 $bmlt_root_server = $settings['bmlt_root_server'] ?? ''; 2601 2602 // Cache for category/tag/service body name lookups 2603 $category_names = []; 2604 $tag_names = []; 2605 $service_body_names = []; 2606 2607 // Fetch all categories and tags for lookups 2608 $all_cats = get_terms(['taxonomy' => 'category', 'hide_empty' => false]); 2609 if (!is_wp_error($all_cats)) { 2610 foreach ($all_cats as $cat) { 2611 $category_names[$cat->term_id] = $cat->name; 2612 } 2613 } 2614 2615 $all_tags = get_terms(['taxonomy' => 'post_tag', 'hide_empty' => false]); 2616 if (!is_wp_error($all_tags)) { 2617 foreach ($all_tags as $tag) { 2618 $tag_names[$tag->term_id] = $tag->name; 2619 } 2620 } 2621 2622 // Fetch service bodies from BMLT 2623 if (!empty($bmlt_root_server)) { 2624 $sb_url = rtrim($bmlt_root_server, '/') 2625 . '/client_interface/json/?switcher=GetServiceBodies'; 2626 $response = wp_remote_get($sb_url, ['timeout' => 10]); 2627 if (!is_wp_error($response)) { 2628 $body = wp_remote_retrieve_body($response); 2629 $data = json_decode($body, true); 2630 if (is_array($data)) { 2631 foreach ($data as $sb) { 2632 if (isset($sb['id']) && isset($sb['name'])) { 2633 $service_body_names[(string) $sb['id']] = $sb['name']; 2634 } 2635 } 2636 } 2637 } 2638 } 2639 2640 // Format subscriber data 2641 $formatted = []; 2642 foreach ($subscribers as $subscriber) { 2643 $prefs = null; 2644 $prefs_display = []; 2645 2646 if (!empty($subscriber->preferences)) { 2647 $prefs = json_decode($subscriber->preferences, true); 2648 2649 if (is_array($prefs)) { 2650 // Resolve category names 2651 if (!empty($prefs['categories'])) { 2652 $cat_names = []; 2653 foreach ($prefs['categories'] as $cat_id) { 2654 $cat_names[] = $category_names[$cat_id] ?? "Category $cat_id"; 2655 } 2656 if (!empty($cat_names)) { 2657 $prefs_display['categories'] = $cat_names; 2658 } 2659 } 2660 2661 // Resolve tag names 2662 if (!empty($prefs['tags'])) { 2663 $tg_names = []; 2664 foreach ($prefs['tags'] as $tag_id) { 2665 $tg_names[] = $tag_names[$tag_id] ?? "Tag $tag_id"; 2666 } 2667 if (!empty($tg_names)) { 2668 $prefs_display['tags'] = $tg_names; 2669 } 2670 } 2671 2672 // Resolve service body names 2673 if (!empty($prefs['service_bodies'])) { 2674 $sb_names = []; 2675 foreach ($prefs['service_bodies'] as $sb_id) { 2676 $sb_names[] = $service_body_names[(string) $sb_id] 2677 ?? "Service Body $sb_id"; 2678 } 2679 if (!empty($sb_names)) { 2680 $prefs_display['service_bodies'] = $sb_names; 2681 } 2682 } 2683 } 2684 } 2685 2686 $formatted[] = [ 2687 'id' => $subscriber->id, 2688 'email' => $subscriber->email, 2689 'status' => $subscriber->status, 2690 'created_at' => $subscriber->created_at, 2691 'confirmed_at' => $subscriber->confirmed_at, 2692 'preferences' => $prefs, // Raw IDs for editing 2693 'preferences_display' => $prefs_display // Names for display 2694 ]; 2695 } 2696 2697 return new \WP_REST_Response($formatted, 200); 2698 } 2699 2700 /** 2701 * Count subscribers matching announcement criteria 2702 * 2703 * @param WP_REST_Request $request 2704 * @return WP_REST_Response 2705 */ 2706 public static function count_matching_subscribers($request) 2707 { 2708 $params = $request->get_json_params(); 2709 2710 $announcement_data = [ 2711 'categories' => $params['categories'] ?? [], 2712 'tags' => $params['tags'] ?? [], 2713 'service_body' => $params['service_body'] ?? null, 2714 ]; 2715 2716 $matching = Subscriber::get_matching_with_reasons($announcement_data); 2717 2718 // Return count and list of subscribers with reasons 2719 $subscribers = array_map(function ($item) { 2720 return [ 2721 'email' => $item['subscriber']->email, 2722 'reason' => $item['reason'] 2723 ]; 2724 }, $matching); 2725 2726 return new \WP_REST_Response([ 2727 'count' => count($matching), 2728 'subscribers' => $subscribers 2729 ], 200); 2730 } 2731 2732 /** 2733 * Update subscriber by ID (admin only) 2734 * 2735 * @param WP_REST_Request $request 2736 * @return WP_REST_Response 2737 */ 2738 public static function admin_update_subscriber($request) 2739 { 2740 $id = intval($request->get_param('id')); 2741 $params = $request->get_json_params(); 2742 2743 $updated = false; 2744 2745 // Update status if provided 2746 if (isset($params['status'])) { 2747 $valid_statuses = ['active', 'pending', 'unsubscribed']; 2748 if (in_array($params['status'], $valid_statuses, true)) { 2749 $updated = Subscriber::update_status($id, $params['status']) || $updated; 2750 } 2751 } 2752 2753 // Update preferences if provided 2754 if (isset($params['preferences'])) { 2755 $updated = Subscriber::update_preferences_by_id($id, $params['preferences']) || $updated; 2756 } 2757 2758 return new \WP_REST_Response([ 2759 'success' => true, 2760 'updated' => $updated 2761 ], 200); 2762 } 2763 2764 /** 2765 * Delete subscriber by ID (admin only) 2766 * 2767 * @param WP_REST_Request $request 2768 * @return WP_REST_Response 2769 */ 2770 public static function admin_delete_subscriber($request) 2771 { 2772 $id = intval($request->get_param('id')); 2773 2774 $deleted = Subscriber::delete($id); 2775 2776 if (!$deleted) { 2777 return new \WP_REST_Response([ 2778 'success' => false, 2779 'message' => 'Subscriber not found or could not be deleted' 2780 ], 404); 2781 } 2782 2783 return new \WP_REST_Response([ 2784 'success' => true 2785 ], 200); 77 return EventsController::get_events($request); 2786 78 } 2787 79 } -
mayo-events-manager/trunk/mayo-events-manager.php
r3436887 r3439987 4 4 * Plugin Name: Mayo Events Manager 5 5 * Description: A plugin for managing and displaying events. 6 * Version: 1.8. 36 * Version: 1.8.4 7 7 * Author: bmlt-enabled 8 8 * License: GPLv2 or later … … 21 21 } 22 22 23 define('MAYO_VERSION', '1.8. 3');23 define('MAYO_VERSION', '1.8.4'); 24 24 25 25 require_once __DIR__ . '/vendor/autoload.php'; -
mayo-events-manager/trunk/package.json
r3436887 r3439987 1 1 { 2 2 "name": "mayo", 3 "version": "1.8. 3",3 "version": "1.8.4", 4 4 "description": "", 5 5 "main": "index.js", -
mayo-events-manager/trunk/readme.txt
r3436887 r3439987 6 6 Requires at least: 6.7 7 7 Tested up to: 6.9 8 Stable tag: 1.8. 38 Stable tag: 1.8.4 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.4 = 191 * Added custom URL/link support for announcements with selectable icons. [#227] 189 192 190 193 = 1.8.3 = -
mayo-events-manager/trunk/vendor/composer/installed.php
r3436887 r3439987 2 2 'root' => array( 3 3 'name' => 'bmltenabled/mayo', 4 'pretty_version' => '1.8. 3',5 'version' => '1.8. 3.0',6 'reference' => ' 5059e7607a895f1e603d50f792c1149350116875',4 'pretty_version' => '1.8.4', 5 'version' => '1.8.4.0', 6 'reference' => '7e6c86a95d7d24c5c5733b11c88300dca5c3010e', 7 7 'type' => 'wordpress-plugin', 8 8 'install_path' => __DIR__ . '/../../', … … 12 12 'versions' => array( 13 13 'bmltenabled/mayo' => array( 14 'pretty_version' => '1.8. 3',15 'version' => '1.8. 3.0',16 'reference' => ' 5059e7607a895f1e603d50f792c1149350116875',14 'pretty_version' => '1.8.4', 15 'version' => '1.8.4.0', 16 'reference' => '7e6c86a95d7d24c5c5733b11c88300dca5c3010e', 17 17 'type' => 'wordpress-plugin', 18 18 'install_path' => __DIR__ . '/../../',
Note: See TracChangeset
for help on using the changeset viewer.