# `Flicker.Components.Palette`
[🔗](https://github.com/team-alembic/flicker/blob/v0.1.0/lib/flicker/components/palette.ex#L1)

The internal `Phoenix.LiveComponent` behind `Flicker.palette/1`
([Spec 008](https://github.com/team-alembic/flicker/blob/main/docs/specs/spec-008-command-palette.md)).

This module is not part of the public API — hosts never reference it
directly. `Flicker.palette/1` is the only supported entry point.

This is deliberately thin: overlay chrome (backdrop, panel, footer,
focus trap, scroll lock, `Escape`-to-close, and the `mod+k`
keyboard-activation open/close toggle) plus one nested
`Flicker.Components.Select` — the exact same core `Flicker.select/1`
runs — in controlled mode with `navigate_on_select: true`. Nothing here
duplicates or forks the search behaviour; the seam is entirely at this
wrapper.

## Open/close state

`open` is host-controlled (`Flicker.palette/1`'s `open` attr) but the
component also has to open/close itself on the `mod+k` chord and on
`Escape`/backdrop-click, with no server round trip to the host in
between. It reconciles the two with a simple edge-detected sync: the
host's `open` value is adopted whenever it *changes* between renders
(so a navbar button toggling it always wins), while in between host
renders the component is free to flip its own `panel_open` in response
to the chord/`Escape`/backdrop — and always tells the host about it via
`on_close` so host-side state doesn't drift.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
