Skip to main content
Copy for LLM

Events

A dispatched event name is public API. Once you listen for one, renaming it breaks your code — so this page lists every event the catalog dispatches, not a curated selection, and says plainly which of them are on a convention we intend to keep.

For opening and closing overlays, Overlay Events is the deeper reference: it carries the payload shapes and the Livewire-side dispatch examples. This page is the complete inventory.

The convention

wirekit:<component>-<happening> — a colon after the namespace, hyphens inside the name.

window.addEventListener('wirekit:tab-changed', (e) => console.log(e.detail));

The colon is not decoration. It separates the namespace from the name the way <x-wirekit::button> does, and it cannot be mistaken for a CSS class or a hyphenated HTML attribute — which a bare wirekit-tab-changed can. Where a name has a natural sub-scope, a second colon groups it: wirekit:reading-progress:milestone.

Every component works on its own. These events exist so your application can react to what a component did, if it wants to — a listener is an addition, not a prerequisite.

Listening from Alpine

Reacting to a tab change

Overview panel.

Activity panel.

Settings panel.

Last event payload:

From a Livewire component the same event is dispatched with $this->dispatch('wirekit:tab-changed', name: 'activity').

Two directions, and the difference matters first

Some events WireKit dispatches — you add a listener and react. Others WireKit listens for — you dispatch them to drive a component. The tables below are the first kind. The second kind is almost entirely the overlay vocabulary (wirekit-modal-show, wirekit-drawer-close, wirekit-alert-dialog-close and their siblings), and it lives in Overlay Events with the payload each one expects.

If you are looking for "how do I open a modal from Livewire", that is the other page.

Outside the overlays, a component that listens for an event documents it on its own page: wirekit:file-upload-reset, for example, is on File Upload, wirekit:reveal, which starts every reveal whose trigger is manual, is on Reveal, and wirekit:saved, which tells x-wk-unsaved that a save went through, is on Unsaved Hint, with its counterpart wirekit:not-saved for a save that did not go through in A Save That Did Not Go Through.

The full inventory of what WireKit dispatches

On the convention

These use the namespace and the colon, and they are the shape new events will take.

Event Dispatched by
wirekit:badge-dismissed badge, when the reader dismisses a dismissible one
wirekit:branch-switcher:change branch-switcher, when a move settles; current and total carry the position
wirekit:cart-decrement cart-item with stepper="buttons", on each press of −; item carries the line's key
wirekit:cart-increment cart-item with stepper="buttons", on each press of +; item carries the line's key
wirekit:cart-remove cart-item
wirekit:command-palette-submit command-palette, on Enter with nothing highlighted; query carries what was typed
wirekit:copied code-block and clipboard-button, after each copy; succeeded says whether the clipboard took the text
wirekit:data-table-columns-changed data-table, when the reader shows or hides a column; hidden and visible carry the keys
wirekit:drawer-dismissed drawer, when the reader dismisses it
wirekit:event-calendar-day-select event-calendar with selectableDays, when the reader picks a day; date and eventIds carry it
wirekit:field-help every field with help, when the reader clicks its question mark; name and label carry the field
wirekit:hover-card-opened hover-card, once per opening, rising from the card, so its content can load when it opens; see Hover Card
wirekit:image-compare-slide image-compare
wirekit:inline-edit-confirmed inline-edit
wirekit:inline-edit-opened inline-edit
wirekit:input-cleared input, when the reader clears a clearable field; name carries the field's name
wirekit:modal-dismissed modal, when the reader dismisses it
wirekit:otp-complete otp-input
wirekit:quick-replies-select quick-replies, when the reader picks a reply; value, label and index carry it
wirekit:rail:toggled app-rail
wirekit:reading-bookmark:cleared reading-bookmark, on window, when the reader is back at the top; key names the bookmark
wirekit:reading-bookmark:saved reading-bookmark, on window, when it saves the reader's place; key, top and dwell carry it
wirekit:reading-progress:milestone reading-progress
wirekit:reading-spine:section-changed reading-spine
wirekit:replayed replay-button
wirekit:sidebar:toggle sidebar-collapse-toggle, on window, asking the sidebar whose id it names to fold, or every sidebar when it names none; you can send it yourself, see Sidebar
wirekit:sidebar:toggled sidebar-rail, on window, on every change and once on init; id, collapsed, chosenCollapsed and cause (init, toggle or viewport) carry it, see Sidebar
wirekit:sortable:moved sortable, when a card moves to another list; id, from and to carry the move
wirekit:sortable:reordered sortable
wirekit:tab-changed tabs
wirekit:theme-changed theme-controller

Namespaced with a hyphen

Older, and every one of them keeps working unchanged for the whole of v2 — the names below are the contract. They are listed apart because a new event will not be named this way.

Event Dispatched by
wirekit-command-palette-query command-palette
wirekit-command-palette-show command-palette.trigger
wirekit-countdown-expired countdown
wirekit-modal-show modal.trigger, when it is given a for
wirekit-overlay-stack-changed the overlay stack
wirekit-stream-event stream
wirekit-toast toast
wirekit-toast-{name} toast, scoped to one region

wirekit-toast-{name} is assembled at runtime from the region's name, so it is the one entry here that no static scan of this repository can confirm — worth knowing if you ever grep for it and come up empty.

wirekit-modal-show and wirekit-command-palette-show are the two names in this table that appear on both sides of the page. Each has always been an event you dispatch AT its component — that is what Overlay Events documents, and it stays true. They are listed here as well because a <x-wirekit::modal.trigger for="…"> and a <x-wirekit::command-palette.trigger> send them for you, so the library emits them too. One happening, one name: a trigger has to say the word its listener answers to, and a second spelling for the same thing would cost every reader the question of which one is real.

Without a namespace

These eleven carry no prefix at all, and four of them — slide, selection-change, sort-change, view-change — are generic enough to collide with an event from your own application or another library. slide is the most exposed of the four: a one-word verb, and the only name here that another library could plausibly pick for the same gesture. A collision here fails silently: both listeners run, and the wrong one may act on a payload it did not expect. Do not listen for these on window; scope the listener to the component's own element.

Event Dispatched by
cell-change status-matrix
conversation-reached-top conversation
event-click event-calendar
filter-change filter-builder
marker-click map
search-change data-table, filter-builder, multi-select and combobox in server mode
selection-change data-table
slide image-compare — and the component re-dispatches it as the namespaced wirekit:image-compare-slide, so both names reach you
sort-change data-table
tree-node-select tree-view
view-change event-calendar

They keep working for the whole of v2. Renaming them is a breaking change and belongs to a major version, alongside an alias period — not to a tidy-up.

Between WireKit's own instances

A few events carry a message from one instance of a component to another. A listener on window hears most of them, so they are named here, but they are wiring rather than something to build on: their names and payloads are not part of the promise at the top of this page. To react to what they coordinate, listen for the component's own event in the tables above.

Event Used by
wirekit:combobox-open combobox: opening one closes the others
wirekit:context-menu-open context-menu: opening one closes the others
wirekit:dropdown-open dropdown: opening one closes the others
wirekit:hover-card-open hover-card: opening one closes the others
wirekit:map-engine registerMapEngine(), so a map that mounted before its engine arrived can start
wirekit:menubar-open menubar: opening one closes the others
wirekit:navigation-menu-open navigation-menu: opening one closes the others
wirekit:popover-open popover: opening one closes the others
wirekit:sortable:receive sortable, handing a card to another list; sent to that list only, and it does not bubble
wirekit:sortable:reorder sortable on a kanban board: the list whose column turned reorder mode on or off tells the other lists; sent to the board only, and it does not bubble
wirekit:sortable:reorder-state sortable, telling its column's Reorder button whether the mode is on; sent to that button only, and it does not bubble
wirekit:sortable:reorder-toggle kanban column: a press on its Reorder button, heard by the column's list
wirekit:unsaved-leave unsaved-hint: Leave in the dialog that asks before a wire:navigate visit, heard by x-wk-unsaved.confirm, which goes on with the visit

What this means for your code

  • Listening is safe. Every name on this page is stable for v2.
  • Prefer scoping to the element over window for the unprefixed ten, because those are the ones that can collide.
  • Writing your own component? Use wirekit:-style names only for events you dispatch from WireKit components. Your own components should carry your own namespace, for exactly the reason this page exists.

Was this page helpful?

Thank you for your feedback!

Voting requires cookies or local storage. What we store