73cc7d1dce
StopProductAssignment - remove() now uses functional setState — fixes a stale-closure bug where 'Remove all' only cleared the first product and rapid single removals could collide - assign() no longer re-fetches the full assigned list on every click; it now does an optimistic insert using the product already in allProducts, keyed by the row id returned from the RPC. Eliminates a network round-trip + brief UI flicker per click - clearAll() snapshots the ids at click time and stops on error so a failed remove doesn't silently continue - 'Press / to search' hint: moved `ha-modal-footer-hint` to the parent span (it was on the kbd), so the kbd styles from `.ha-modal-footer-hint kbd` actually apply; removed the redundant inline style and the duplicated className StopsHeaderActions (new) - Small client component that owns the Add Stop / Upload Schedule modals and renders the two header buttons. Wires into the PageHeader actions slot so the actions stay accessible from the StopsViewClient (where the StopTableClient filter bar is hidden by the shared search/status filter)