== Event Koi Lite - Events Calendar, Event Management, RSVP, and Tickets ==
Contributors: eventkoi, lesleysim, ahmedfouaddev
Donate link: https://donate.stripe.com/fZubJ1auN86Y1PU8cSdUY01
Tags: event calendar, event management, event tickets, event registration, rsvp
Requires at least: 6.7
Tested up to: 7.0
Requires PHP: 8.0
Stable tag: 1.3.28.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

A modern, unbloated WordPress events calendar plugin. Sell tickets, create an events calendar or list, manage RSVPs and attendees.

== Description ==

**EventKoi Lite is a modern WordPress events calendar plugin** built for site owners who want an unbloated and intuitive event management plugin. Create and manage in-person and virtual events, display a beautiful events calendar or event list, sell tickets, event bookings, manage RSVPs and attendees, all from a clean, intuitive admin.

https://youtu.be/7D2M6G9-q9w

✓ **Events calendar & event list** — Display events in a calendar, list, or grid view using blocks, shortcodes, Elementor, or Beaver Builder
✓ **Event registration & RSVP** — Let attendees register for events, manage capacity, and check in with check-in codes
✓ **Sell event tickets with WooCommerce** — Create multiple ticket types per event, set capacity and pricing, and sell tickets using any WooCommerce payment gateway including Stripe and PayPal
✓ **Attendee management** — Export your attendee list and manage check-ins from your WordPress admin
✓ **In-person and virtual events** — Supports Google Maps for venues and auto-detects visitor timezone for virtual and international events
✓ **Google Calendar, iCal & Outlook sync** — Let attendees add events to their own calendar with one click
✓ **Accessible & responsive** — Keyboard navigation, ARIA labels, and a fully mobile-friendly events calendar
✓ **Event SEO** — Automatic JSON-LD structured data markup so your events appear in Google search results and rich snippets
✓ **Blocks, shortcodes & page builders** — Works with Gutenberg, Elementor, and Beaver Builder out of the box
✓ Secure, well-built code that follows WordPress coding standards
✓ Active development, responsive support, and thorough documentation

**Need recurring events, unlimited calendars, and custom fields? [Upgrade to EventKoi Pro →](https://eventkoi.com/pricing)**


##Event management

- Add multiple event days, each with its own start and end time
- Create multiple venue events. Combine in-person and virtual event locations
- Create in-person events with Google Maps venue embedding
- Create virtual events with automatic visitor timezone detection
- Use your WordPress site's date, time, and timezone settings
- Customize event page templates in the block editor
- Localization-ready


###Events Calendar & Event Listing

- Embed an events calendar using a block, shortcode, Elementor widget, or Beaver Builder module
- Display an event listing as a list or grid view
- Filter events by date range or calendar
- Accessible calendar views with full keyboard navigation and ARIA labels
- Fully responsive and mobile-friendly for all screen sizes
- Set the calendar's starting day of the week
- Choose 12 or 24-hour time display
- Organize all your events under your events calendar. Upgrade to Pro for multiple calendars to segment events by category, location, or type


## Event Registration & RSVP Management

- Set event capacity and display remaining spots to encourage signups
- Let attendees submit and update their event registration (RSVP)
- Send automated confirmation emails with check-in codes
- Manage attendee registration and check-ins from WordPress admin
- Export your full attendee list


## Sell Event Tickets & Event Booking with WooCommerce

- Use any WooCommerce payment gateway (Stripe, PayPal, and more) to sell tickets directly from your WordPress site
- Create multiple ticket types per event (e.g. General Admission, VIP, Early Bird)
- Set individual pricing, capacity, and availability for each ticket type
- Offer free tickets or paid tickets
- Set ticket sale windows — open and close ticket sales on specific dates
- Set a maximum number of tickets per order
- Show or hide remaining ticket quantities to create urgency
- Add terms and conditions per ticket type
- Require buyers to have a WordPress account, or auto-create one at checkout
- Automated ticket confirmation email with check-in code sent on purchase
- Automated refund confirmation emails
- Manage all ticket orders and attendees from your WordPress admin
- Track tickets sold and total earnings with built-in reporting
- Export your full attendee list


## Calendar Sync & Sharing

- Let visitors add events to Google Calendar, iCalendar, Outlook 365, or Outlook Live
- Auto-detect visitor timezone for virtual and international events
- Social sharing built in


## Event SEO & Structured Data

EventKoi Lite automatically outputs JSON-LD structured data for every event, helping your events appear in Google Search rich results and event snippets. Structured data is built in, no configuration needed.


## Page Builder Integrations

- **Elementor:** Embed an events calendar or event data using native Elementor widgets
- **Beaver Builder:** Embed an events calendar or event data using native Beaver Builder modules


## Block editor and shortcode support
- **Shortcode builder:** Build shortcodes with multiple queries to display a calendar or list of events
- **Block Editor:** Add an events calendar, event query loop block or event data block directly in the WordPress editor


## Import events from The Events Calendar

- Switching from The Events Calendar? Import your events in minutes with our built-in migration tool
- Event titles, descriptions, dates, times, and timezones
- All-day and multi-day event settings
- Venue and location data
- Organizer information
- Event categories
- Recurrence rules (converted to EventKoi's recurring event format)
- Google Maps embed settings
- Featured images
- Duplicate events detector. Re-running the importer won't create duplicates.

##Get advanced features with EventKoi Pro

- **Recurring events**
	- Create advanced rules for events that repeat daily, weekly, monthly, yearly,
	- Edit individual event instances (custom name, location, description, and more)
	- Automatically create a dedicated event series page
- **Custom fields**
	- Add custom fields and field groups to any event
	- Import custom fields from The Events Calendar
- **Multiple event calendars**
	- Lite includes one calendar. Pro unlocks unlimited calendars so you can segment events by type, department,
  location, or audience
- **Advanced Elementor and Beaver Builder integrations**
	-  Build custom templates and use Loop features to build queryable event lists.
- **Priority support**
- **30-day money-back guarantee**
**[Get EventKoi Pro →](https://eventkoi.com/pricing)**

## Helpful links

-  [EventKoi documentation](https://eventkoi.com/docs/?utm_source=pluginreadme-helpfullink&utm_medium=web&utm_campaign=16-12-25)
- [EventKoi blog](https://eventkoi.com/blog/?utm_source=pluginreadme-helpfullink&utm_medium=web&utm_campaign=16-12-25)
- [Support Forum](https://wordpress.org/support/plugin/eventkoi-lite/) (please check existing threads before starting a new one)
- [Contact us](https://eventkoi.com/contact/?utm_source=pluginreadme-helpfullink&utm_medium=web&utm_campaign=16-12-25) (for non-support related questions)

## Screenshots

1. Calendar view
2. Site visitors can add an event to their own calendar
3. Site visitors can share events via social media and email
4. Calendars come with timezone detection, timezone switcher, and 12/24 hour clock
5. Events list view
6. Events management in WP Admin
7. Create event settings

== Installation ==

Installing EventKoi Lite is easy.

= Installation =

1. In your WP Admin, select Plugins, then Add plugin.
2. In the Search Plugins field, type in "EventKoi Lite"
3. When you find EventKoi Lite, click on Install Now.
4. The installation will run, then click on Activate.

= Configuring your events calendar =

1. Once the plugin is activated, head to Events, then Settings.
2. From there you can configure when you week starts, your working days, and 12/24-hour clock.

= Create your first event =

1. Head to Events > Events and select Add event
2. Fill out the form to create your event.

= Add your calendar to your site =

Head to Events > Calendar and select **Default calendar**. Then select the **Embed** tab.
There, you will see 3 ways to embed the calendar into your site:

1. Your calendar comes with a default link. Out of the box, the link is: https://yourwebsite.com/calendar/default-calendar/
2. Using either shortcodes in any page or post: [eventkoi_calendar display=calendar] or [eventkoi_calendar display=list] depending on whether you want a calendar or list view.
3. Adding a block in any page or post: Type in "/eventkoi" and then select either "EventKoi Calendar" or "EventKoi List" depending on whether you want a list or calendar view.

== Frequently Asked Questions ==

= Does it work with block themes and classic themes? =
Yes. EventKoi Lite works with both block and classic themes. You can use our blocks or shortcodes to build your events calendar.

= Can I display a responsive events calendar on mobile? =
Yes. The EventKoi events calendar is fully responsive and mobile-friendly, and
includes accessible keyboard navigation and ARIA labels.

= Does EventKoi Lite include recurring events? =
Recurring events are available in EventKoi Pro. Pro supports daily, weekly,
monthly, and yearly recurring events with advanced rules.

= I'm currently using The Events Calendar. Can I migrate my events to EventKoi? =
Yes. EventKoi Lite includes a built-in migration tool that imports your events from The Events Calendar, including dates, venues, categories, recurrence rules, and featured images. Already-migrated events are skipped automatically so you can run it more than once safely.

= Does EventKoi Lite support virtual events and timezones? =
Yes. You can create virtual events, and the events calendar automatically
detects your visitor's timezone so they always see events in their local time.

= Does EventKoi Lite support event registration? =
Yes. EventKoi Lite includes an RSVP and event registration system. Set capacity, collect attendee sign-ups, send confirmation emails with check-in codes, and manage check-ins from your WordPress admin.

= Does EventKoi Lite support selling event tickets & event booking? =
Yes. EventKoi Lite includes a full event ticketing system powered by WooCommerce. Create multiple ticket types per event with individual pricing and capacity, and accept payments through any WooCommerce payment gateway including Stripe and PayPal. Buyers receive an automated confirmation email with a check-in code for check-in.

= Can I create free and paid ticket types for the same event? =
Yes. Each ticket type has its own price — set it to $0 for free tickets or any amount for paid tickets. You can mix free and paid ticket types on a single event.

= Does EventKoi Lite work with Stripe and PayPal for ticket sales? =
Yes. EventKoi uses WooCommerce's standard checkout, which means any WooCommerce payment gateway works out of the box — including Stripe, PayPal, and many others.

= My calendar or event page shows "Page not found." =
Go to Settings > Permalinks and click Save Changes to refresh rewrite rules.

= Can I customize the event template? =
Yes. If you're using a block theme, you can go to Appearance > Editor > Templates and customise the Event template. If you're using a classic theme, you can edit the template files.

= Does EventKoi Lite help my events appear in Google Search? =
Yes. EventKoi Lite automatically adds JSON-LD structured data markup to every event page. This helps Google understand your events and can display them as rich results in search. No setup required.


== External services ==

This plugin can connect to the **Google Maps JavaScript API** in order to display interactive maps inside event and calendar views.
It sends your configured Google Maps API key (if provided) along with requests made by the visitor's browser when viewing a page that contains an embedded map. No personal data is sent by the plugin itself, but Google may collect usage data in accordance with their policies. This connection only happens if maps are enabled in the plugin settings and a page with an event location map is viewed.
This service is provided by Google LLC: [Terms of Service](https://cloud.google.com/maps-platform/terms), [Privacy Policy](https://policies.google.com/privacy).

== Changelog ==

= 1.3.28.0 – Theme compatibility fixes – 2026-07-24 =
* Fix: The plugin loaded style utilities globally, which could restyle theme elements that share common class names. On some themes (such as Total), buttons collapsed into thin slivers. All plugin styles are now scoped to EventKoi containers and can no longer affect the rest of your site.
* Fix: EventKoi shortcodes placed inside Beaver Builder modules were rewritten before they could render, so values such as custom fields showed nothing. Shortcodes now render their values correctly in Beaver Builder and Beaver Themer layouts.
* Fix: Rank Math served a stale sitemap after events were created, updated or deleted, because its cache was only refreshed for changes made in wp-admin. The sitemap now updates immediately after every event change.

= 1.3.27.0 – List view and page builder fixes – 2026-07-23 =
* Fix: In the calendar List view, the date and time of each event could disappear on desktop when a page builder theme (such as Beaver Builder) loaded its own styles after ours. Each row now shows its date reliably, and toolbar icons no longer turn white on those themes.
* Fix: The Event Query Loop no longer shows the No results message next to actual results on sites with no published blog posts. When there really are no events, your customized No results content is displayed instead of a generic message.
* Improved: When importing from The Events Calendar, a warning now explains when the ticket currency does not match your checkout currency, and paid ticket types are imported without pricing instead of being skipped silently.

= 1.3.26.0 – Plugin fields in the event editor – 2026-07-21 =
* New: Fields added by other plugins, such as ACF, Pods and Meta Box, now appear in a panel on the event editor, so you no longer have to open the WordPress editor to fill them in. The panel saves separately with its own Save button, warns you before you leave with unsaved changes, and hides itself on sites where no plugin adds any fields.
* New: Events have an Excerpt field, shown beside the slug, for the short summary themes and blocks display in listings.
* Fix: Translations of the admin and calendar interface were never loaded, so every language showed English text regardless of how much had been translated. Translated strings now apply.
* Fix: Times in 24-hour mode keep their minutes, and French sites show the 15h style instead of a bare number that read as a count of events.
* Fix: The month dropdown and Subscribe menu no longer sit behind page-builder layouts.
* Fix: Draft and password-protected event details are no longer exposed through the public tickets, RSVP and iCal endpoints.
* Fix: Calendar labels and ticket durations follow the site timezone.
* Fix: Custom fields on event pages follow the order set in settings, including across groups.
* Fix: The calendar list view defaults to upcoming events and never shows a blank date column.
* Fix: The calendar shows a retry option instead of failing silently when it cannot load.


= 1.3.25.0 – Free tickets and clearer ticket settings – 2026-07-16 =
* New: Sell free tickets. Set a ticket price to 0 and buyers check out without a payment step; their tickets are emailed as usual and the order is marked Free in Ticket sales.
* New: Ticket types that are not on sale yet now show their sales start date in the ticket selection modal, so buyers can see when an early-bird or later tier opens.
* New: Choose which unavailable ticket types stay visible with separate Display sold out, Display upcoming, and Display ended controls, replacing the single Show unavailable tickets toggle.
* New: Developer filters eventkoi_events_query_args and eventkoi_query_loop_query_vars let you add custom taxonomy or query constraints to event listings.
* Improve: The tickets settings tab is grouped into clearer sections: Display options, Terms and conditions, and Create tickets.
* Improve: The admin ticket-sale email now records the terms and conditions text even when the acceptance checkbox is optional.
* Improve: The event editor preview keeps the am/pm suffix in every language.
* Improve: The Events Calendar importer counts pending events correctly and shows a clearer notice when already-imported events are skipped, and import notices are fully translatable.

= 1.3.24.0 – Add attendees manually and import Event Tickets – 2026-07-13 =
* New: Add an attendee by hand from the event's Attendees tab. Creates a free, completed order with its own check-in code, for ticket transfers or competition winners, and it can never oversell your capacity.
* New: The Events Calendar importer now brings over Event Tickets ticket types (RSVP and Tickets Commerce) with their prices, capacity, sold seats, and sale windows. Attendee records and WooCommerce tickets are counted and reported, not imported.
* Fix: Calendar times in 12-hour mode now always show the am/pm suffix in every language, so a bare hour can no longer be mistaken for a count.
* Fix: Event images in the Query Loop now link to the event page itself for multi-day events, matching the title link, instead of one highlighted date.

= 1.3.23.2 – Theme compatibility and importer fixes – 2026-07-13 =
* Fix: RSVP status buttons and other controls no longer lose their text or get repainted by page-builder button styles (like the Elementor global kit).
* Fix: The Events Calendar importer now keeps each event's original URL slug, so links to imported events keep working.
* Fix: A TEC event's Website link no longer marks the imported event as online or hybrid. It is kept in the event description instead.
* Fix: The importer no longer creates a ticket priced in the wrong currency when the TEC event's currency differs from your store currency.
* Fix: Imported events now copy the "Show time zone" display setting from The Events Calendar.

= 1.3.23.1 – Email and ticket count fixes – 2026-07-09 =
* Fix: Admin notification emails (like the new ticket sale notification) now keep your formatting and paragraphs when you save the template.
* Fix: A ticket type's remaining count is now capped to the event's total remaining, so it can never show more available than the event has left.

= 1.3.23.0 – Resizable checkout terms box – 2026-07-09 =
* Improvement: The terms and conditions box at checkout can now be dragged taller, so visitors on larger screens can read long terms without scrolling a small window.

= 1.3.22.0 – Editor, calendar and checkout fixes – 2026-07-08 =
* Fix: Pasting into the rich text editor now strips inline styles and stray formatting from Google Docs and Word, while keeping your headings, lists, links, and bold or italic text.
* Fix: The calendar list view no longer shows an empty grey image box for events that have no picture.
* Fix: Recurring event summaries now list the weekdays in calendar order instead of the order they were picked.
* Fix: On mobile checkout, the terms and agreements now sit inside the scrollable area of the window, so long terms no longer cover the rest of the checkout.
* Fix: A few more strings are now translatable, including the "From" starting price and the calendar "Copy feed link".
* Fix: Custom taxonomy boxes with no terms are now hidden, and each ticket agreement gets a unique checkbox id so two can never share one.
* Improvement: The terms-acceptance tag is now listed in the email settings, so you can add the buyer's accepted terms to the admin sale notification.

= 1.3.21.0 – Price from attendance, event taxonomies & smoother imports – 2026-07-06 =
* New: A new "Price from" attendance option shows a starting price on the event page and links visitors to an external ticketing site.
* New: Assign your site's registered taxonomies (like Places or Activities) right on the event form, without opening the WordPress editor.
* New: The event page tickets box now shows how many tickets are left, when the show-remaining setting is on.
* New: Add multiple agreement checkboxes at checkout (for example privacy, refund policy and other consents). Each one is recorded on the order and listed in the admin sale email.
* New: The admin sale-notification email now records the buyer's terms acceptance, with the exact terms text as it was at checkout.
* Improvement: When importing from The Events Calendar, if events land in calendars other than the default (which Lite doesn't display), you now see a notice with a one-click option to move them all into the default calendar.
* Improvement: Importing a recurring event from The Events Calendar now brings in its first occurrence as a standard event, with a note that full recurring events are a Pro feature, so it is clear nothing was imported incorrectly.
* Improvement: Event URL bases can now include a nested path such as agenda/calendar; the slash is preserved instead of being stripped or turned into a dash.
* Fix: On narrow phones, the calendar toolbar now wraps so the Subscribe button and the Month/Week/List switch never overflow the screen.
* Fix: The calendar and list views no longer collapse to a narrow strip on flex-based classic themes such as Astra.
* Fix: The event template share icon now follows the button's text colour instead of a fixed grey.
* Fix: Icon-only buttons, like the ticket quantity steppers, stay intact under themes that reset button styling, such as Hello Elementor.
* Fix: In the Divi builder, the Event module's "Current event" option can now be selected when building an event template.
* Fix: Ticket agreement checkboxes now always get a unique id, so two agreements can never share a single checkbox at checkout.

= 1.3.20.1 – Calendar subscribe button & block fixes – 2026-07-01 =
* New: A Subscribe button on the calendar lets visitors add the whole calendar (a single calendar, several, or all) to their own Apple, Google, or Outlook calendar in one click, and it updates automatically as your events change.
* Fix: In the block editor, the Event Data location field now honours center and right alignment, matching how it already looked on the front end.

= 1.3.20.0 – Query Loop pagination, theme headings & ticket sales fixes – 2026-06-30 =
* Fix: The Event Query Loop now paginates correctly. Page two no longer repeats the events from page one when the results fit on a single page.
* Fix: Event page headings (the title and the headings in the description) now consistently follow your theme's heading styles. A leftover style reset that still overrode some heading sizes and weights has been removed.
* Fix: When an event has ticket types with different sales dates, the ticket sales window text is no longer shown incorrectly. If any ticket type has no start date, the "sales start" line is hidden, and the same applies to the end date.
* Fix: More counters now use proper singular and plural forms, so translations read correctly.

= 1.3.19.0 – Calendar list view, mobile checkout & theme-friendly titles – 2026-06-25 =
* New: The calendar now has a List view in the Month/Week switcher, with search, and each event shows its calendar's colour and name.
* New: The block editor calendar preview now includes the List view too, so the editor matches the front end.
* Fix: The event title now follows your theme's H1 styling instead of the plugin's hardcoded size, weight and colour.
* Fix: Event images in the calendar list view are no longer stretched when they aren't 3:2; they're cropped to fit.
* Fix: On mobile, the ticket checkout shows the terms in a scrollable box and opens as a full-screen sheet, so the form fields and the checkout button stay reachable, and the location pin no longer shrinks.
* Fix: Broader translation coverage. More strings that were stitched together from fragments are now single translatable strings, and more counters use proper plural forms.
* Fix: Fixed a crash in the calendar block's editor preview, and the preview now loads events.

= 1.3.18.0 – Per-field location data, ticket controls & translation coverage – 2026-06-24 =
* New: Location data is now split into separate fields (name, address, unit, city, state, country, postal code), so the Event Data block, Query Loop and bindings can show just the city, just the address, and so on.
* New: Set a total ticket quantity cap per event, and require a Terms & Conditions checkbox before a ticket order or RSVP can be submitted.
* New: Each calendar now has a subscribable iCal feed visitors can add to their own calendar app.
* New: A single-package toggle for multi-day, selected-date events, so the whole set of dates can be treated as one package.
* New: A "has location" flag for page builders, so you can show or hide elements based on whether an event has a location.
* Improvement: The Beaver Builder calendar module can now show multiple calendars, or all of them, at once.
* Improvement: Admin pages now have descriptive, per-screen titles in the browser tab.
* Improvement: Much broader translation coverage. Many admin and frontend strings that could not be translated before are now translatable, sentences that were stitched together from fragments were rewritten as whole strings, and counters use proper plural forms.
* Fix: Headings inside the event description now follow your theme's heading styles instead of being flattened by the plugin's styles.
* Fix: "Upcoming" event lists now keep events that are currently in progress, by testing the end time, and a duplicate settings tab on the Query Loop block was removed.
* Fix: The Date with Summary field now lists every date of a multi-date event on the front end, matching the editor.
* Fix: RSVP summaries now resolve correctly for selected-date and package events instead of failing.
* Fix: Corrected package date ordering, the per-day purchase guard, and Beaver Builder legacy calendar selection.

= 1.3.17.3 – Translations, mobile dialogs & accented slugs – 2026-06-19 =
* New: The React interface (calendar, RSVP, share) now applies your Loco/.mo translations, so the UI is fully translatable, not just the PHP strings.
* Improvement: On mobile, the RSVP and share dialogs are now full-width sheets with a fixed header, a scrollable body and a fixed footer, so nothing is cut off and every control stays reachable.
* Fix: Slugs from accented titles now fold to ASCII (é→e, ç→c, ß→ss) instead of replacing each accent with a dash, giving clean URLs for French and other accented languages.

= 1.3.17.2 – Calendar search refinements – 2026-06-18 =
* Fix: Typing in calendar search no longer drops focus after the first letter.
* Fix: Search now also finds events that have already taken place, sorted after upcoming ones.
* Fix: The search results list scrolls on its own without dragging the page, and closes on Escape or a click outside.

= 1.3.17.1 – SiteGround Optimizer compatibility – 2026-06-18 =
* Fix: The calendar now renders correctly when SiteGround Optimizer's JavaScript minification is enabled. Its minifier was mangling the bundle into a syntax error that left the calendar blank for visitors.

= 1.3.17.0 – Calendar search & importer ACF fix – 2026-06-18 =
* New: Calendar search now finds events across all months, not only the month currently in view.
* Fix: The Events Calendar importer now keeps ACF fields as ACF, so your existing ACF shortcodes keep resolving, instead of dropping them on import.

= 1.3.16.0 – Maintenance release – 2026-06-17 =
* Maintenance: Version alignment with EventKoi Pro. No functional changes in EventKoi Lite for this release.

= 1.3.15.0 – RSVP & checkout custom fields, ticket terms, calendar fixes – 2026-06-15 =
* New: Add custom fields to the RSVP form with the eventkoi_rsvp_fields filter (for example a first/last name split), validated and saved with each RSVP.
* New: Add custom fields to the ticket checkout form with the eventkoi_checkout_fields filter, saved with the order.
* New: Ticket terms and conditions now show in the purchase dialog and can be output with [eventkoi data="tickets_terms_conditions"].
* Improvement: Per-block date and time format controls on the Event Data block.
* Improvement: Calendar search results pagination now has Previous and Next month controls.
* Fix: Week view no longer drops events on weeks that span two months, and month navigation is faster.
* Fix: Selected-day event titles in the Event Query Loop now link to the parent event instead of a single day.
* Fix: The WordPress editor link is always available so ACF, SEO, and other plugin panels can be reached.

= 1.3.14.1 – Calendar & Query Loop front-end fixes – 2026-06-07 =
* Fix: The frontend calendar no longer fails to render (which could drop recurring instances on some weeks) on hosts where a JavaScript optimizer alters the React runtime.
* Fix: The Event Query Loop block now keeps its Wide and Full width alignment on the front end.
* Fix: Virtual event locations in the Event Query Loop now render as a clickable link using the configured link text instead of a bare URL.

= 1.3.14.0 – Security fix & calendar conflict fixes – 2026-06-04 =
* Security: Event REST endpoints now restrict draft, pending, and private events to users who can edit them, preventing unauthenticated access to unpublished event data (CVE-2026-10029).
* Improvement: The "See all events in series" back-link can now be shown or hidden per event, overriding the global setting.
* Fix: Beaver Builder conflicts. Calendar toolbar visibility is now theme-proof, sizing uses px so it no longer shrinks under themes with a small root font, and submission styles only load when a submission form is present.
* Fix: Editing an event no longer resets its slug, map coordinates are preserved, and the SEO editor link is gated correctly.

= 1.3.13.1 – Calendar event title & display fixes – 2026-06-01 =
* Fix: Event titles no longer disappear from calendar tiles in month and week views.
* Fix: Events that fall outside the visible week are no longer hidden.
* Improvement: Month view now shows the calendar-coloured dot indicator on event tiles.
* Improvement: Toolbar focus outlines on the previous/next and month controls are no longer clipped.

= 1.3.13.0 – Calendar search, translations & multi-day display polish – 2026-05-31 =
* New: Frontend Submissions preview tab in Settings (full event submission is available in EventKoi Pro).
* Improvement: Calendar search now scopes results by month, with clearer previous/next month controls.
* Improvement: Week view — multi-day events now show their time range and a "Full day" label on spanning days.
* Improvement: Event editor toolbar — single-row layout, H1–H4 toggle-off, clearer "Switch to HTML" labels, and video/YouTube button icons.
* Improvement: More calendar and event labels are now translatable.
* Improvement: More stable event ordering in the calendar shortcode.
* Fix: Event Query Loop block filters.
* Fix: Dates not rendering on continuous (multi-day) standard events.


= 1.3.12.2 – Fix fatal on single event pages – 2026-05-26 =
* Fix: Single event pages crashed with a PHP fatal ("Call to protected method Event::get_instance_field from scope Schema") whenever the JSON-LD generator ran. Method visibility corrected to public, matching the Pro codebase. Affected 1.3.12.0 and 1.3.12.1.

= 1.3.12.1 – WordPress 7.0 compatibility – 2026-05-24 =
* Compatibility: tested against WordPress 7.0 — admin Settings, calendar, event editor and frontend all verified.

= 1.3.12.0 – Google-style week view, timezone-aware pipeline & dozens of fixes – 2026-05-21 =
* New: REST API supports custom orderby on `/wp/v2/eventkoi_event` (start_date, event_start, upcoming, past) for use in core Query Loop blocks and headless integrations.
* New: Empty Trash button on the Events list (subtle link after bulk actions).
* Improvement: Week view — Google-style overlap cascade so stacked events stay readable instead of collapsing into "+more".
* Improvement: Week view — sticky event title on multi-day continuation bars (title visible on every visible day, not just the first).
* Improvement: Week view — compact Google-style time format (`9 AM` / `3pm` depending on the 12/24-hr toggle).
* Improvement: Week view — red "now" indicator line.
* Improvement: Week view — non-working days tinted using the working_days setting.
* Improvement: Month view — compact time prefix on dot-style events.
* Improvement: Week view — Google-style multi-day + all-day chip layout.
* Improvement: Event popover anchors at the click point instead of jumping.
* Improvement: Calendar + List blocks — "Select all calendars" is now honored in the editor preview (matches the frontend).
* Improvement: Calendar block editor preview lands on the current week when timeframe is set to "week".
* Improvement: Events admin — top toolbar layout (selected count left, pagination right) matches the footer.
* Improvement: Empty states for "Event not found" and "Event in Trash" — centered card with icon + CTA.
* Improvement: Sold-out ticket widget stays visible (with sold-out label) instead of disappearing once capacity is reached.
* Improvement: Event editor date and media UX hardened — end-time defaults, draft cleanup, structured-field guards.
* Improvement: Tickets / Orders / Emails — instance-aware titles, itemized refunds, multi-seat expansion fixes.
* Improvement: RSVPs — standard events can now run in event-wide RSVP mode (vs. per-instance).
* Improvement: TEC importer — paragraphs preserved, address split into structured fields, organizer email/phone/website mapped, `_EventCost` mapped to ticket price, `_EventURL` imported as virtual location.
* Improvement: Per-event ownership checks across admin endpoints + healer audit trail.
* Improvement: i18n — more admin strings wrapped in `__()` for Loco / translate.wp.org.
* Improvement: Default "Display timezone in event page" toggle now defaults ON for new events.
* Fix: Multi-day timed events — time now shows on every visible day instead of only the last; nested "+1 more" stops cascading.
* Fix: iCal export — full RFC 5545 compliance (CRLF, line folding, proper PRODID, RRULE syntax).
* Fix: JSON-LD — recurring event endDate is now Google-compliant; each instance gets its own JSON-LD block.
* Fix: iCal UIDs are stable across recurrences (previously regenerated, breaking subscriber dedup).
* Fix: Recurrence cap enforced on UNTIL-style rules; recurring rule summary validated against the cap.
* Fix: Ticket checkout — TOCTOU race fixed (no more oversell under load).
* Fix: Tickets — duplication and refund-state regressions resolved.
* Fix: RSVP capacity claim uses FOR UPDATE locking so two concurrent submitters don't both succeed against the last slot.
* Fix: RSVP CSV export sanitises against Excel formula injection.
* Fix: RSVP prefetch no longer leaks event meta into unauthenticated responses.
* Fix: Calendar admin — archive-view event color leak fixed; static-singleton state resets between renders.
* Fix: Editor block preview no longer renders the wrong week when timeframe is "week".
* Fix: Bulk confirm dialogs surface backend errors instead of silently failing.
* Fix: Sorting in admin tables is disabled when pagination is server-side, so sort no longer reorders just the current page.
* Fix: RSVP phantom-instance gate — RSVPs no longer attach to non-existent instances.
* Fix: "Invalid Date" guard in attendee TZ normalize.
* Fix: Plugin `.zip` build now excludes `.vite-hot` and agent artifacts.

= 1.3.11.0 – User permissions & custom date/time formats – 2026-05-11 =
* New: Settings → User permissions — grant non-admin WP roles access to specific EventKoi areas (events, calendars, attendees, orders, settings sub-tabs) without sharing the admin password. Admins always have full access; the panel is empty by default so existing behaviour is unchanged until you grant something.
* New: Settings → Default settings → custom Date format and Time format inputs. Type a PHP date format string (e.g. `Y-m-d`, `d-M-Y \a\t H:i`) to override WP Settings → General everywhere EventKoi renders dates (events list, single event, calendar/list blocks, RSVP and ticket emails, dynamic tags). Leave blank to keep using WordPress defaults.
* Improvement: When a custom Time format is set, the 12/24-hour toggle is bypassed so the typed string wins as-is. With the field blank, the toggle keeps working exactly as before.
* Improvement: Calendar grid event tile labels now honour the 12/24-hour toggle (sites set to 24-hour see `13:00` instead of `1pm`).
* Fix: Recurring event series pages now honour the custom time format on every listed instance (previously some instances ignored it).
* Fix: Resolves a WP 6.7 "Translation loading triggered too early" notice introduced by the permissions filter.

= 1.3.10.0 – RSVP windows, button states & block polish – 2026-05-11 =
* New: RSVP availability window — set start and end dates for when RSVPs open and close on each event.
* New: RSVP button now reflects three states — "RSVP" when open, "RSVP: Closed" when capacity is reached or the RSVP window has ended, and "Event ended" once the event itself is over.
* New: "RSVP opens soon" label automatically appears within 24 hours of the configured open date.
* New: "Select all calendars" toggle on the Calendar and List blocks — automatically include every calendar (including ones added later) without having to re-edit existing pages.
* New: WooCommerce next-steps panel on Settings → Payments — quick links to set up payments and currency in WooCommerce when WC checkout is selected.
* New: "Sold out" Get-tickets button label when the entire event's inventory is exhausted, replacing the old confusing "open the modal to find out".
* New: Pagination now also appears at the top of admin data tables for faster navigation.
* New: Editor color picker upgrades, calendar dot indicators, text alignment and heading-level controls on event blocks.
* Improvement: "Allow RSVP edits" now defaults ON for new events. The default RSVP confirmation email link line now auto-swaps between "View / manage your RSVP" and "View event page" based on the toggle (custom templates pass through unchanged).
* Improvement: WooCommerce next-steps panel only renders when WooCommerce is installed and active.
* Fix: RSVP defaults (allow edits, show remaining) now reach the new-event template correctly.
* Fix: TDZ ReferenceError that was hiding the entire RSVP widget on the frontend.
* Fix: RSVPs stay attached to their event when an event's date changes.

= 1.3.9.9 – Translatable admin, calendar timezone fixes & editor polish – 2026-05-03 =
* i18n: Full admin React UI is now translatable via Loco Translate, WP.org translation packs, or bundled JSON — previously the admin stayed in English even when the site locale was set. POT regenerated with all new strings.
* Fix: Continuous standard events with specific times were being shown in the All-day lane in calendar Week view (and as full-width strips in Month view). They now render in their correct time slots.
* Fix: Picking a start or end time could roll the date back a day when the browser timezone differed from the site timezone. Times now apply in the site timezone consistently.
* Fix: Auto-filled end date inherits the picked start time, so users no longer hit "End date cannot be before the start date" the moment they add a non-midnight start time.
* Fix: "Display timezone in event page" toggle is now respected on the frontend — when off, the timezone label no longer appears on the event page.
* Fix: Completed events were leaking into the Upcoming Query Loop, and future events into the Past Query Loop.
* Fix: WordPress was prepending `http://` to `[eventkoi … as=link]` URLs, producing broken double-protocol links. Bogus prefix is stripped on render.
* Fix: Standalone editor preview now resolves every `event_*` dynamic token (date, time, timezone, etc.) instead of showing `{Field Name}` placeholders.
* Fix: Scalar custom fields (text, textarea, dropdown, radio, checkbox, url) auto-unwrap in the `[eventkoi]` shortcode by default, matching url-typed behavior.
* Fix: Tickets "Change currency" link points to WooCommerce settings when WooCommerce is the checkout method, instead of EventKoi settings.
* Fix: QR check-in handler now redirects logged-out users to the login URL (HTML) and surfaces a "Log in" button in the JSON overlay.
* Fix: Editing a saved event no longer crashes due to a missing translation import in the description component.
* Improvement: The Page Numbers block "Number of links" (mid_size) attribute is now honored by EK Query Loop pagination on the frontend.

= 1.3.9.8 – Past events query, recurring date polish & ticket-delete safeguards – 2026-04-28 =
* New: "Past events" query option in the Event Query Loop block — sort completed events with their most recent past occurrence, mirroring how "Upcoming events" rolls forward over time.
* New: Event Data block exposes the full set of canonical event tokens — separate `event_date`, `event_time`, `event_date_year`, `event_date_month`, `event_date_day`, `event_date_iso`, plus ticket-data tokens (capacity, sold, sold_out, low_stock, ticket_count, ticket_summary, sales_start/end), RSVP tokens (capacity, remaining, going, full), and ticket price + date format presets.
* New: `event_date` and `event_time` dynamic tokens for Elementor, Divi, Beaver Builder and shortcode pickers.
* Improvement: Recurring events in query loops now display the next upcoming occurrence (not the original series start) — and Past mode shows the latest past occurrence.
* Improvement: Recurring "ends on" defaults to one year from today, so newly created recurring events are bounded out of the box.
* Improvement: Event Query Loop grid is now responsive on tablet and mobile breakpoints.
* Improvement: Admin pages share a unified 1280px content width.
* Improvement: Ticket counts column reads "N ticket(s)" / "N RSVP(s)" with proper pluralization, and reflects gateway-completed orders only.
* Improvement: Drop the recurring rule summary from the ticket checkout modal — buyers see only what they're booking.
* Improvement: New events default to timed (not all-day).
* Improvement: Ticket delete now requires confirmation and is only persisted when you click Save — refresh restores tickets you removed by mistake.
* Improvement: Date rendering uses a single helper across surfaces — all-day toggle, click-to-deselect, recurring scoped to Pro.
* Improvement: Calendar week view renders 24-hour gutter labels and tightens border stacking in month + week views.
* Improvement: Calendar week view now lands on the current week (not the start of the displayed month) when you toggle from Month.
* Fix: Recurring "ends on" date is inclusive — the user-picked end date is now part of the series instead of being silently dropped.
* Fix: Block Visibility extension is honored on Calendar/List/event-data blocks.
* Fix: Switching the WordPress timezone setting no longer crashes the site when `gmt_offset` returns an empty string.
* Fix: Wrapper classes from `render_block` filters are preserved on Calendar and List blocks.
* Fix: Accent characters in event titles sanitize correctly into slugs.
* Fix: Event description list styling is preserved on the front end.
* Fix: All-day axis cell border restored in calendar week view for proper grid alignment.
* Fix: Renderers honor a per-row `instance_ts` so Elementor/Divi/Beaver loops show the correct occurrence date.

= 1.3.9.7 – Ticket Save Fixes & Loco Translate Compatibility – 2026-04-19 =
* Fix: Tickets are now saved correctly from the event's Tickets tab. Previously, ticket rows could be discarded when the event was saved or when switching tabs.
* Improvement: Tickets auto-save when you switch to another tab, so edits are no longer lost if you forget to click Save.
* Improvement: Fixed ~700 translation strings that used the wrong textdomain, so translations now load as expected.
* Improvement: Translations saved to the plugin's own languages folder (Loco Translate's "Author" location) are now picked up.

= 1.3.9.6 – Ampersand & Calendar Block Fixes – 2026-04-19 =
* Fix: Ampersand (&) now displays correctly in calendar names across the admin, multiselect dropdowns, builder module dropdowns, and frontend calendar archive page.
* Fix: Calendar block no longer shows "Invalid calendar" when the default calendar option is missing or points to a deleted term. The block now resolves from its own attributes first, then the default option, then the first available calendar.
* Improvement: Self-healing default calendar option — if the stored reference is invalid, it is repointed automatically to a real calendar on the next page load.
* Improvement: Empty-state calendar block shows a friendlier message; admins also get a "Create a calendar" link.
* Improvement: Block editor no longer seeds the calendar block with an invalid default ID when the default option is missing.

= 1.3.9.5 – Divi Integration (Beta) & Fixes – 2026-04-18 =
* New: Added Divi Builder integration (Beta) — Calendar and Event modules for embedding EventKoi content in Divi layouts.
* New: Added admin notification email templates for New RSVP and New ticket sale events.
* Improvement: Admin notification emails now use the saved sender name and email from the Emails settings.
* Improvement: Site instance ID UUID is now backfilled automatically on version bump.
* Fix: Prevented a fatal error in the admin sale notification pipeline.
* Fix: Fixed archive/unarchive for ticket sales on global and per-event views.
* Fix: Fixed theme CSS bleed into FullCalendar cells on Divi-like themes.

= 1.3.9.4 – UI & Calendar Improvements – 2026-04-12 =
* Improvement: Centralized confirmation dialogs with consistent centered modal design across all destructive actions.
* Improvement: Calendars page now shows only the default calendar with a clean, focused layout.
* Improvement: Multiple calendars is now a Pro-only feature with clear upgrade prompts.
* Fix: Bulk actions on the global ticket sales page now correctly show Archive/Unarchive instead of Duplicate/Move to trash.

= 1.3.9.3 – WooCommerce Gateway & Reporting Fixes – 2026-04-11 =
* Improvement: Tickets are now issued as soon as a WooCommerce order moves to "processing", so every gateway (including Cash on Delivery and Bank Transfer) works out of the box.
* Fix: Orders with a partial refund now display the correct "Partially refunded" status on the Orders list and per-event sales history.
* Fix: Ticket sales totals and per-event stats no longer mix amounts from different WooCommerce currencies.
* Fix: In-progress checkout holds are no longer counted toward sales stats.

= 1.3.9.2 – Order Sync & Ticket UI Polish – 2026-04-11 =
* Improvement: Ticket refund emails now fire automatically when a WooCommerce order is refunded.
* Improvement: Orders list CSV export and sales history CSV export are now working.
* Improvement: WooCommerce order links in orders, attendees and sales history open in the same tab.
* Improvement: `master_checkin_code` is populated from WooCommerce order meta so check-in works consistently.
* Improvement: Attendees tab now refreshes reliably after ticket status changes.
* Fix: Fatal error in `Orders::create_order` caused by a stray Stripe class reference.
* Fix: Order status filter tabs on the Tickets > Orders page now point at the correct base.
* Fix: Event status dropdown is hidden on non-event admin pages.
* Fix: React "Rules of Hooks" error on the Event Attendees tab.
* Fix: Removed an undefined `isResendEmail` reference in the Attendees component.
* Fix: Hidden the attendees bulk-actions toolbar when no row-level actions are available.

= 1.3.9.1 – Payments & UX Improvements – 2026-04-10 =
* Improvement: Billing information (name, email) is now auto-filled for logged-in users during ticket checkout.
* Improvement: Clearer error messaging when WooCommerce is not installed.
* Improvement: Removed Beta badges from ticket-related UI.

= 1.3.9.0 – Ticket Sales, Import Tools & More – 2026-04-10 =
* New: Added ticket sales feature (Beta) — sell paid tickets for events via Stripe or WooCommerce.
* New: Added Payments settings page for Stripe Connect and checkout configuration.
* New: Added ticket management, sales history, and attendee tracking per event.
* New: Added order management with real-time updates, filtering, and CSV export.
* New: Added event import from The Events Calendar (TEC) — full migration tool.
* New: Added URL-based event import — import events by pasting a URL.
* New: Added import tools to Events dropdown menu for easy access.
* Improvement: Added Beta badges to ticket-related UI sections.
* Improvement: Admin dashboard performance optimizations.
* Improvement: Updated JSON-LD structured data output.
* Improvement: Accessibility improvements.
* Fix: Fixed REST API responses breaking when third-party plugins emit PHP notices.
* Fix: Fixed Stripe webhook secret handling for array-shaped values.
* Fix: Fixed wrong text domain in block descriptions.
* Fix: Fixed Google Maps settings card and onboarding UI.

= 1.3.0.3 – Time Format Fix – 2026-03-27 =
* Fix: Fixed 12/24-hour time format setting not being respected across event pages, calendar views, admin UI, and auto-detect timezone display.

= 1.3.0.2 – Fixes & Improvements – 2026-03-21 =
* Fix: Fixed pagination on single event pages being incorrectly redirected by WordPress canonical URL handling (affects Beaver Builder loop pagination).
* Fix: Improved REST API key header resolution to support both hyphenated and underscored header formats.
* Fix: Fixed comma-delimited calendar selection parsing from UI controls.
* Improvement: Updated support links to point to WordPress.org support forum.

= 1.3.0.1 – Stability & Compatibility Fixes – 2026-02-27 =
* Fix: Prevented empty `location` schema output for events without physical address data.
* Fix: Improved default template resolution consistency for Elementor and Bricks templates.
* Fix: Improved `[eventkoi_calendar display=list]` shortcode argument handling (`orderby`, `order`, `per_page`, `max_results`, `date_start`, `date_end`, `expand`).
* Fix: Improved calendar list query normalization and guardrails for safer ordering, pagination, and filtering.
* Fix: Improved activation recovery by ensuring core Lite tables are created/recovered reliably.

= 1.3.0.0 – RSVP – 2026-01-29 =
* New: Added RSVP creation and management.

= 1.2.1.0 – Local timezone display & settings – 2026-01-13 =
* New: Added auto-detect timezone setting so visitors can see event times in their local timezone.
* Improvement: Event date/time output now includes timezone metadata for accurate client-side conversion.
* Improvement: Added a Custom Fields settings preview for Pro.
* Fix: Ensured demo event imagery loads reliably in onboarding.

= 1.2.0.2 – Timezone fix – 2026-01-01 =
* Fix: Fixed calendar day headers shifting when the server timezone differs from the WordPress timezone.

= 1.2.0.1 – Style fixes – 2025-12-23 =
* Fix: Fixed image styling in the Event Query Loop block.
* Fix: Fixed Event Data block styling.

= 1.2.0.0 – Elementor Widgets & Onboarding – 2025-12-16 =
* New: Added Elementor Event Data widget to drop event details anywhere.
* New: Added Elementor Event Calendar widget to embed calendars visually.
* New: Introduced a quick start plugin tour plus onboarding hints to guide first-time setup.
* Improvement: Added missing translation strings and refreshed the POT file.
* Fix: Event counts now update correctly in the Events list.
* Fix: `eventkoi` shortcode now displays the event image reliably.

= 1.1.0.1 – JS Import Fix – 2025-12-04 =
* Fix: Added missing JavaScript imports so frontend assets load reliably.

= 1.1.0 – Query Loop Blocks & Data Enhancements – 2025-12-03 =
* New: Added EK Event Query Loop variation (with EK Event Data child block) to display events using core/query controls and pagination.
* New: Added `/eventkoi/v1/query_events` endpoint and expanded `/calendar_events` to support paging, ordering, and date filters for block previews.
* Improvement: Query Loop server render now injects EventKoi event data.

= 1.0.14 – Admin Event Description Editor Fix – 2025-11-10 =
* Fix: Resolved issue where the event description editor in the admin sometimes failed to display or save properly.

= 1.0.13 – Week View Layout & Header Improvements – 2025-10-21 =
* Improvement: Redesigned week view header to show weekday names and dates on separate lines for better readability.
* Improvement: Enhanced alignment and font styling for week/day headers across all screen sizes.
* Fix: Removed weird day numbers appearing beside months in month view.
* Fix: Adjusted locale handling to ensure consistent weekday labels across languages.

= 1.0.12 – Important bugfix – 2025-10-20 =
* Fix: Fixed issue with recurring instances not loading. (May require saving permalinks again)

= 1.0.11 – Performance, Accessibility & Calendar Enhancements – 2025-10-19 =
* Improvement: Improved weekly view and navigation consistency in the calendar UI.
* Improvement: Optimized backend query performance for faster event loading.
* Improvement: Enhanced accessibility in frontend calendar and single event views.
* Fix: Minor styling and layout adjustments for better responsiveness.
* Fix: Corrected small inconsistencies in timezone and localization handling.

= 1.0.10 – Calendar View & Localization Fixes – 2025-10-09 =
* Fix: Resolved layout and navigation issues in the weekly calendar view.
* Fix: Corrected locale handling and improved date/time formatting consistency.
* Improvement: Enhanced localization support across admin and frontend.
* Improvement: Improved responsiveness and stability in calendar rendering.

= 1.0.0 – Initial public release – 2025-10-07 =
* Initial public release of EventKoi Lite plugin.
* Core event creation and management features.
* Built-in support for single-day and multi-day events.
