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:: 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
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::
and a <x-wirekit:: 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
windowfor 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.