Record actions menu

The ⋮ „Další akce" in the top bar of a record detail (person, company, deal, meeting, document, Datamart segment, project) and in the head of the preview drawer. RecordActionsMenu (apps/web/src/components/record/RecordActionsMenu.tsx) for person / company / deal; the meeting (RecordMenu) and the project use the same trigger kebabTrigger (components/record/kebab-trigger.tsx). The menu itself is the canonical Menu button. Owner approval 6 Oct 2026 (acrm !4800, prototype proto/record-actions-menu@eabe09c8d).

When to use

  • Managing the record as a whole: merge, copy link, permissions („Nastavení práv"), change owner, delete.
  • Contextual record actions that do not belong as a button in the header (create an order from a deal, „Nezájem" from the status flow).
  • Rare, destructive or administrative actions — always in ⋮, never as a visible button in the bar. Owner 12 Oct 2026 (delete a user): „Jedná se o akci, která se nedělá běžně, ale jen jednou za čas. Není potřeba, aby byla stále vidět jako primární.“

When not to use

  • The record's primary action — that is a Button in the header or the page.
  • Actions on one row or one section — the row's own ⋮ (Menu button iconOnly sm).
  • Choosing a value — Picker menu.

Anatomy

  1. Trigger — the canonical IconButton dots-vertical ⋮ in the default size (30 px, control height), the same as SectionTopBar secondary actions, so the bar has one height and one symbol. aria-label „Další akce". Never ⋯, never sm in the top bar.
  2. Menu — Menu button rows, align="end". Order: contextual and non-destructive first → separator → „Smazat …" last, danger (--critical, trash glyph).
  3. An item the user may not run is not drawn (no disabled „Smazat"); the backend enforces the permission anyway.
  4. Height — the menu takes the room in the window (Popover fit-height); if it must scroll, it ends on a whole row.
  5. Phone — the same items in the bottom sheet „Další akce" with handle, title and the full-width „Hotovo"; the sheet also carries the record's view switch (Aktivity / Profil) and „Rozložení sekcí".

Best practices

Do

  • Feed items as data (RecordMenuItem, extraItems slot) so a foreign flow cannot draw its own look.
  • Name the item by what it does („Nastavení práv", „Změnit vlastníka"), never by state.
  • Confirm a destructive item through useConfirm.

Don't

  • No second menu or loose icon buttons for the same record actions in the header.
  • No „Sdílet" next to „Nastavení práv" — it is the same panel.
  • No greyed-out „Smazat" for a user without the right — leave it out (meeting aligned 6 Oct 2026).

Content

Verb first, sentence case: „Sloučit s jinou firmou…" (ellipsis when a dialog follows), „Zkopírovat odkaz", „Smazat firmu".

Menu button · Section top bar · Bottom sheet · Popover

Source: docs/section-top-bar/record-actions-menu.usage.md · GitLab