Plugin Directory

Changeset 3439987


Ignore:
Timestamp:
01/15/2026 04:23:22 AM (3 months ago)
Author:
bmltenabled
Message:

Deploy version 1.8.4

Location:
mayo-events-manager
Files:
209 added
9 edited

Legend:

Unmodified
Added
Removed
  • mayo-events-manager/trunk/assets/js/dist/admin.bundle.js

    r3436689 r3439987  
    11/*! 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  
    11/*! 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
     17e6c86a95d7d24c5c5733b11c88300dca5c3010e
  • mayo-events-manager/trunk/includes/Announcement.php

    r3436887 r3439987  
    132132        ]);
    133133
    134         // New unified linked event refs that supports both local and external events
     134        // New unified linked event refs that supports local events, external events, and custom links
    135135        register_post_meta('mayo_announcement', 'linked_event_refs', [
    136136            'show_in_rest' => [
     
    140140                        'type' => 'object',
    141141                        'properties' => [
    142                             'type' => ['type' => 'string', 'enum' => ['local', 'external']],
     142                            'type' => ['type' => 'string', 'enum' => ['local', 'external', 'custom']],
    143143                            'id' => ['type' => 'integer'],
    144144                            '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']],
    145149                        ],
    146                         'required' => ['type', 'id']
     150                        'required' => ['type']
    147151                    ]
    148152                ]
     
    539543            $linked_event_data = [];
    540544
     545            // Separate custom links from events for ordering (custom links appear first)
     546            $custom_links = [];
     547            $event_links = [];
     548
    541549            foreach ($linked_refs as $ref) {
    542550                $resolved = self::resolve_event_ref($ref);
     
    552560                    // Handle start_date from meta object or direct field
    553561                    $start_date = $resolved['start_date'] ?? ($resolved['meta']['event_start_date'] ?? '');
    554                     $linked_event_data[] = [
     562
     563                    $link_data = [
    555564                        'id' => $resolved['id'],
    556565                        'title' => $title,
     
    559568                        'source' => $resolved['source'] ?? ['type' => 'local', 'id' => 'local', 'name' => 'Local'],
    560569                    ];
     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                    }
    561582                } elseif ($ref['type'] === 'external' && !empty($ref['source_id'])) {
    562583                    // External event unavailable - include placeholder with source info
    563584                    $source = self::get_external_source($ref['source_id']);
    564585                    $source_name = $source ? ($source['name'] ?? parse_url($source['url'], PHP_URL_HOST)) : 'External';
    565                     $linked_event_data[] = [
     586                    $event_links[] = [
    566587                        'id' => $ref['id'],
    567588                        'title' => 'Event details unavailable',
     
    577598                }
    578599            }
     600
     601            // Merge with custom links first, then events
     602            $linked_event_data = array_merge($custom_links, $event_links);
    579603
    580604            $announcements[] = [
     
    793817     * Resolve an event reference to full event details
    794818     *
    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?}
    796820     * @return array|null Resolved event details or null if unavailable
    797821     */
    798822    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'])) {
    800848            return null;
    801849        }
  • mayo-events-manager/trunk/includes/Rest.php

    r3436887 r3439987  
    11<?php
     2
    23namespace BmltEnabled\Mayo;
    34
    4 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
     5if ( ! defined( 'ABSPATH' ) ) exit;
    56
    6 use DateTime;
    7 use DateInterval;
    8 use Imagick;
     7use BmltEnabled\Mayo\Rest\EventsController;
     8use BmltEnabled\Mayo\Rest\AnnouncementsController;
     9use BmltEnabled\Mayo\Rest\SubscribersController;
     10use BmltEnabled\Mayo\Rest\SettingsController;
    911
     12/**
     13 * REST API orchestrator
     14 *
     15 * Delegates route registration to domain-specific controllers.
     16 * Provides backward compatibility wrappers for external callers.
     17 */
    1018class Rest {
     19
     20    /**
     21     * Initialize REST API
     22     */
    1123    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']);
    15925    }
    16026
    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    }
    18036
    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    // ========================================================================
    19141
    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);
    30351    }
    30452
    30553    /**
    30654     * Build email content for event notifications
    307      * 
    308      * @param array $params Event parameters
    309      * @param int $post_id Post ID
    310      * @param string $subject_template Subject template with %s placeholders
    311      * @param string $view_url URL for viewing the event
    312      * @return array Array with 'subject' and 'message' keys
     55     *
     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
    31361     */
    31462    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);
    73464    }
    73565
    73666    /**
    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)
    73968     *
    740      * @param string $categories Comma-separated category slugs (prefix with '-' to exclude)
    741      * @param string $categoryRelation 'AND' or 'OR' - how to match multiple categories
    742      * @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
    74372     */
    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');
    77276        }
    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);
    278678    }
    278779}
  • mayo-events-manager/trunk/mayo-events-manager.php

    r3436887 r3439987  
    44 * Plugin Name: Mayo Events Manager
    55 * Description: A plugin for managing and displaying events.
    6  * Version: 1.8.3
     6 * Version: 1.8.4
    77 * Author: bmlt-enabled
    88 * License: GPLv2 or later
     
    2121}
    2222
    23 define('MAYO_VERSION', '1.8.3');
     23define('MAYO_VERSION', '1.8.4');
    2424
    2525require_once __DIR__ . '/vendor/autoload.php';
  • mayo-events-manager/trunk/package.json

    r3436887 r3439987  
    11{
    22  "name": "mayo",
    3   "version": "1.8.3",
     3  "version": "1.8.4",
    44  "description": "",
    55  "main": "index.js",
  • mayo-events-manager/trunk/readme.txt

    r3436887 r3439987  
    66Requires at least: 6.7
    77Tested up to: 6.9
    8 Stable tag: 1.8.3
     8Stable tag: 1.8.4
    99License: GPLv2 or later
    1010License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    187187
    188188== Changelog ==
     189
     190= 1.8.4 =
     191* Added custom URL/link support for announcements with selectable icons. [#227]
    189192
    190193= 1.8.3 =
  • mayo-events-manager/trunk/vendor/composer/installed.php

    r3436887 r3439987  
    22    'root' => array(
    33        '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',
    77        'type' => 'wordpress-plugin',
    88        'install_path' => __DIR__ . '/../../',
     
    1212    'versions' => array(
    1313        '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',
    1717            'type' => 'wordpress-plugin',
    1818            'install_path' => __DIR__ . '/../../',
Note: See TracChangeset for help on using the changeset viewer.