Icon button
canonSquare button carrying only an icon; label lives in the tooltip. Quiet at rest, variant="framed" for the bordered one, variant="secondary" (beta) for a hairline-bordered tool row.
variant="secondary" has ONE size (owner 19 Oct 2026, acrm ACRM-542): --control-h square + --ico-sm glyph; size/iconSize are ignored; text beside a row uses .acrm-icobtn-text (padding-inline --sp-4). Window headers stay quiet (AD 27 Sep 2026). variant="framed" (11 September 2026, BTN-A3) is a 1:1 port of the hand-drawn .pr-iconbtn / .rr-iconbtn, which were deleted with it: 32px wide on the base height, 1px --border-strong, --surface-100, --shadow-xs, --ico-sm glyph in --ink-700, hover --surface-75. Pressed, open and disabled deliberately keep the rest look, because the hand-drawn rules had no such states; the validator rule iconbtn-framed-raw blocks the old classes. Variant by CONTEXT (AD 26 Sep 2026, acrm !3910 — in the docstring): dense list row (ItemList, timeline, relations, thread, project/meeting/milestone row) = quiet size="sm"; detail header / toolbar = quiet default; variant="framed" ONLY next to framed siblings (rail action row, section header next to framed buttons, dialog footer next to Button default). Kebab = dots-vertical; a kebab with one item is replaced by the direct action (trash + confirm, link-off without danger) — rule "kebab with one action" landed as the wave C cleanup (AD 26 Sep 2026, acrm !3997: ProjectMilestonesSection trash, IdentityImageDialog trash, ProjectMeetingsTab link-off, none get a Popover around a single choice). Wave 16 (acrm !3997) finished the context rule above by migrating the last hand-drawn icon buttons onto it: 32px `.icobtn` (Uživatelé domains, segment detail/share ×2) → framed size default (30); 22px `.eml-icobtn` (draft/pinned mail rows) → `size="sm"`; 26px `.aichat-hbtn` (assistant panel header) → default, with `pressed` for the settings toggle; TabStrip scroll arrows → `size="sm"`. Exception kept: the App shell chrome's 32px `.as-icobtn` / `.as-util .icobtn` sits among 32–34px neighbours and stays hand-drawn. State pressed (acrm !3936): pressed?: boolean → aria-pressed + --active-surface, also on hover — for toggles (format, panel, template/AI in mail compose). The open look applies only to menu triggers ([aria-expanded=true][aria-haspopup]); a disclosure (collapse/expand) carries its state in the glyph. Link (`href`, AD 27 Sep 2026 — attachment download): renders `<a class="acrm-icobtn …">` with the same look, same pattern as `<Button href>` — real link semantics (middle-click, "save link as", a screen reader announces a link), `target="_blank"` gets `rel="noopener noreferrer"` merged in, `disabled` with `href` renders `<a aria-disabled>` without `href` (a link cannot be disabled by attribute). External/file URLs only — in-app navigation stays on the router. `ref` forwards onto the `<a>` too (review fix in !3997), so it can anchor a Popover. Touch target (owner 8 Oct 2026, acrm !4882, RULES §19): below 720 px an invisible ::after makes the tap area ≥ 44 × 44 without changing the look; checked on dev 8 Oct (⋮ top bar 42×44 at the screen edge, 0 stolen taps). Clipped targets fixed in acrm !4892 (checked on dev 8 Oct: Ajda 78×44, Pošta stars 44×44 except a row cut by the scroll edge). Remaining by design: column-header ⋮ 24×40 (header row is 40 px). Registry repaired 17 Oct 2026 (review F6): added exported Icon to react[].
Used in 474 files · 154 areas · 1727× — components/AiBadge, components/AppShell, components/Board, components/CallbackTakeoverModal, components/CheckMenu, components/DuplicatesPanel …
@acrm/ui <IconButton> <Icon>.acrm-icobtn .acrm-icobtn.sm .acrm-icobtn.framed .acrm-icobtn.secondarySourceStoryLegacy card buttons.htmlChangelog since 28. 9. 2026
- 5. 11. 2026feat(schůzky): štítek schůzky jde vybrat vždy, i bez Googlu — Upravit, Nová schůzka, řádek Štítek v detailu (ACRM-642)apps/web/src/ds/responsive.cssClaude · 1eb10f170
- 2. 11. 2026polish(filtr): na telefonu menu filtru v šuplíku na celou šířku a volby 44 pxapps/web/src/ds/responsive.cssŠtěpán · f0052e280
- 2. 11. 2026polish(dialogy): na telefonu rámovaný koš a ⋮ v patičce 44 px vždy, ne jen vedle ⋮ rozhodnutíapps/web/src/ds/responsive.cssŠtěpán · 05c5d74cb
- 1. 11. 2026polish(ds): položky nabídky v šuplíku ⋮ na telefonu 44 px i u BottomSheetuapps/web/src/ds/responsive.cssŠtěpán · 5bee5cd2d
- 29. 10. 2026fix(web): šuplík úkolu na telefonu, Ke schválení: pevná lišta Schválit | Vrátit | ⋮ v patičceapps/web/src/ds/responsive.cssClaude · 421ec2362
- 20. 10. 2026feat(komunikace): menu — sekce Další, přetahování pohledů, ikony a barvy štítků, složek a chatů (ACRM-558, 560–569)packages/ui/src/components/ds-icons.tsxŠtěpán · 5096a7e16
- 19. 10. 2026polish(ikony): řady ikon → IconButton secondary jedné velikosti (ACRM-542)packages/ui/src/components/IconButton.tsxŠtěpán · d182ee221
- 19. 10. 2026refactor(DS): ikona maximize/minimize místo arrows-maximize/minimizepackages/ui/src/components/ds-icons.tsxŠtěpán · 7c2884670
- 18. 10. 2026feat(komunikace): nástroje psaní — IconButton secondary, lišta formátování, ikona Předmětu, Sledovat vpravo (ACRM-540, 541, 542, 543)packages/ui/src/components/IconButton.tsxŠtěpán · 12a107a4b
- 17. 10. 2026feat(desktop): vlastní odkazy atol://open a položka „Otevřít v aplikaci Atol“ na webu (F2-6)packages/ui/src/components/ds-icons.tsxClaude · 24a5b801b
- 17. 10. 2026feat(ds): kanon bubliny — ChatBubble (přílohy uvnitř, meta pod bublinou, text jako ReactNode) + ikona messages-2packages/ui/src/components/ds-icons.tsxŠtěpán · 7198b6009
- 17. 10. 2026refactor(ds): tokeny podle významu — vrstvy, pohyb, focus ring, text na barvě (beze změny vzhledu)apps/web/src/ds/responsive.cssŠtěpán · 8cda81b26
- 11. 10. 2026feat(ds): lišta výběru na telefonu — „Vybrat všech N" v ⋮, lišta nepřekrývá CTA overlayeapps/web/src/ds/responsive.cssŠtěpán · 65e5a348a
- 8. 10. 2026fix(ds): dotykový cíl 44 px i u Ajdy a hvězdy v Poště, vzhled beze změnyapps/web/src/ds/responsive.cssŠtěpán · c22319a0a
- 8. 10. 2026fix(ds): .tbar-tools bez vlastní vrstvy — plocha tlačítek v liště roste svisle na střed (review !4882)apps/web/src/ds/responsive.cssŠtěpán · 7cb261ec1
- 8. 10. 2026fix(ds): rozšíření dotykového cíle nepřekrývá klikatelné sousedy (review !4882)apps/web/src/ds/responsive.cssŠtěpán · f1deb000b
- 8. 10. 2026fix(ds): dotykový cíl roste doprava a dolů — sousedovi nebere klepnutí (review !4882)apps/web/src/ds/responsive.cssŠtěpán · 205fc4a42
- 8. 10. 2026feat(ds): dotykový cíl ≥ 44 px u každého tlačítka na telefonu, vzhled beze změnyapps/web/src/ds/responsive.cssŠtěpán · 1d47a0871
- 6. 10. 2026fix(kalendář): třídy celodenní lišty bez „ad" — blokátor reklam je schovávalapps/web/src/ds/responsive.cssClaude · 6daeb9b2d
- 3. 10. 2026fix(segmenty): Průvodce na telefonu — taby nad panelem, panel přes celou šířkuapps/web/src/ds/responsive.cssŠtěpán · 78829f9cf
- 3. 10. 2026chore(ds): pryč mrtvá pravidla starého řádku milníku v railu (.prj-msrow, .prj-msgrip)apps/web/src/ds/responsive.cssŠtěpán · 69f756680
- 3. 10. 2026refactor(ds): Milníky na Přehledu = sdílený useReorder + .acrm-reorder-gapapps/web/src/ds/responsive.cssŠtěpán · 3383a1369
- 2. 10. 2026chore(ds): mrtvá CSS pravidla — vlna 2 (70 pravidel ve 12 souborech)apps/web/src/ds/responsive.cssŠtěpán · a8e48c131
- 2. 10. 2026polish(ds): glyfy railu, přepínače navigace a × štítku na --ico-* (parita s boxem)apps/web/src/ds/responsive.cssŠtěpán · 566eec74c
- 1. 10. 2026fix(karta): hlavička schůzky, úkolu a projektu na telefonu = schválený jeden řádek ‹ · název · ⋯apps/web/src/ds/responsive.cssŠtěpán · 436d0e9be
- 1. 10. 2026fix(karta): hlavička karty na telefonu drží nahoře; Esc nad šuplíkem ⋯ neodchází z kartyapps/web/src/ds/responsive.cssŠtěpán · cd39340d8
- 1. 10. 2026feat(karta): hlavička karty na telefonu = jeden řádek ‹ · jméno · ⋯ (osoba, firma, obchod)apps/web/src/ds/responsive.cssŠtěpán · cb7db2d02
- 1. 10. 2026fix(web): detail na telefonu = jeden scroll, rail bez stropu 42vh (R26)apps/web/src/ds/responsive.cssŠtěpán · 6503cee29
- 1. 10. 2026polish(web): vyber barvy a ikony na telefonu - vzorky pres celou sirku, cil 44 px, dlazdice max 44apps/web/src/ds/responsive.cssŠtěpán · c50a5e484
- 1. 10. 2026feat(web): kazdy dialog na telefonu = suplikapps/web/src/ds/responsive.cssŠtěpán · 865e409e1
- 1. 10. 2026feat(ui): suplik dialogu vyroste pro kotveny panel (pruzina), panel neopusti hraniceapps/web/src/ds/responsive.cssŠtěpán · a43b7b529
- 1. 10. 2026refactor(ui): holy Popover -> kanon (vlna 3) + nabidka v dialogu = panel v suplikuapps/web/src/ds/responsive.cssŠtěpán · 5a55c030f
- 1. 10. 2026feat(navigace): menu A1+A2+A4 — tiché počty, horní blok 6 položek, akce seznamůapps/web/src/ds/responsive.cssŠtěpán · 1c421c0e4
- 1. 10. 2026fix(ui): hledani v kazdem supliku na jedne leve hrane; sablony bez zvolene hodnotyapps/web/src/ds/responsive.cssŠtěpán · fb58d38bf
- 30. 9. 2026polish(ds): ikony clock-pause, headphones, message-question a school pro Koučink (náhled FA215)packages/ui/src/components/ds-icons.tsxClaude · 2a90e1c2d
- 30. 9. 2026feat(ds): tokeny nálady --sentiment-pos/neg a ikony pro analýzu schůzkypackages/ui/src/components/ds-icons.tsxClaude · 51a958ab3
- 30. 9. 2026fix(ui): ikony thumb-up/thumb-down = originál Tabler 3.31 (FA213)packages/ui/src/components/ds-icons.tsxŠtěpán · 499c995c2
- 30. 9. 2026fix(ds): ✕ řádku Multi-value editoru na dotyku trvale vidět (AD FA235)apps/web/src/ds/responsive.cssClaude · 914ea29be
- 30. 9. 2026refactor(ds): rozměry natvrdo na tokeny podle významu — vlna 1 (--tap-min, --tab-h + přesné hodnoty)apps/web/src/ds/responsive.cssŠtěpán · d9fe30719
- 30. 9. 2026fix(ui): nadpis supliku = --h2 (ne rez polozky); Promenne; Bez zasedackyapps/web/src/ds/responsive.cssŠtěpán · 2979bd926
- 30. 9. 2026feat(segment): panel sloupcu v3 - plus na konci hlavicky, hledani, oddelovac, sheet na telefonuapps/web/src/ds/responsive.cssŠtěpán · bc6465fd9
- 29. 9. 2026fix(web): sloupec Jméno/Název ve výpisu na telefonu na polovinu šířkyapps/web/src/ds/responsive.cssŠtěpán · 69be37149
- 28. 9. 2026fix(ui): položka nabídky = jeden řádek, bez šedé vysvětlivky (ACRM-375–377)apps/web/src/ds/responsive.cssŠtěpán · 1a87decfc
- 28. 9. 2026feat(web): řádek pohledu na telefonu podle Attio — Úkoly a Poštaapps/web/src/ds/responsive.cssŠtěpán · 99a87ae05