@sableui/react 0.13.0 → 0.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -0
- package/CONTRIBUTING.md +1 -1
- package/README.md +6 -0
- package/bin/sable.mjs +23 -4
- package/dist/blocks/index.d.ts +1 -1
- package/dist/components/accordion/accordion.meta.js +2 -1
- package/dist/components/badge/badge.meta.js +2 -1
- package/dist/components/banner/banner.meta.js +4 -2
- package/dist/components/button-group/button-group.meta.js +2 -1
- package/dist/components/checkbox/checkbox.meta.js +2 -1
- package/dist/components/collapsible/collapsible.meta.js +2 -1
- package/dist/components/combobox/combobox.meta.js +4 -2
- package/dist/components/command-menu/command-menu.meta.js +6 -3
- package/dist/components/context-card/context-card.meta.js +2 -1
- package/dist/components/dialog/dialog.meta.js +6 -3
- package/dist/components/disclosure-picker/disclosure-picker.meta.js +2 -1
- package/dist/components/inline-status/inline-status.meta.js +2 -1
- package/dist/components/menu/menu.meta.js +2 -1
- package/dist/components/menubar/menubar.meta.js +2 -1
- package/dist/components/meter/meter.meta.js +2 -1
- package/dist/components/note/note.meta.js +2 -1
- package/dist/components/page-loader/page-loader.meta.js +2 -1
- package/dist/components/pill/pill.meta.js +2 -1
- package/dist/components/popover/popover.meta.js +4 -2
- package/dist/components/progress/progress.meta.js +2 -1
- package/dist/components/radio/radio.meta.js +2 -1
- package/dist/components/segmented-bar/segmented-bar.meta.js +2 -1
- package/dist/components/select/select.meta.js +4 -2
- package/dist/components/sheet/sheet.meta.js +4 -2
- package/dist/components/side-nav/side-nav.meta.js +2 -1
- package/dist/components/skeleton/skeleton.meta.js +2 -1
- package/dist/components/spinner/spinner.meta.js +2 -1
- package/dist/components/stepper/stepper.meta.js +4 -2
- package/dist/components/switch/switch.meta.js +2 -1
- package/dist/components/table/table.meta.js +2 -1
- package/dist/components/tabs/tabs.meta.js +4 -2
- package/dist/components/thinking-orb/thinking-orb.meta.js +4 -2
- package/dist/components/toast/toast.meta.js +2 -1
- package/dist/components/toggle/toggle.meta.js +2 -1
- package/dist/components/toolbar/toolbar.meta.js +2 -1
- package/dist/components/tooltip/tooltip.meta.js +2 -1
- package/dist/file-hashes.json +41 -41
- package/dist/index.d.ts +3 -3
- package/dist/index.js +1 -1
- package/dist/{meta-DVG8ceze.d.ts → meta-DX5r5wQL.d.ts} +8 -0
- package/dist/patterns/index.d.ts +1 -1
- package/llms/components/accordion.md +1 -1
- package/llms/components/badge.md +1 -1
- package/llms/components/banner.md +2 -2
- package/llms/components/button-group.md +1 -1
- package/llms/components/checkbox.md +1 -1
- package/llms/components/collapsible.md +1 -1
- package/llms/components/combobox.md +2 -2
- package/llms/components/command-menu.md +3 -3
- package/llms/components/context-card.md +1 -1
- package/llms/components/dialog.md +3 -3
- package/llms/components/disclosure-picker.md +1 -1
- package/llms/components/inline-status.md +1 -1
- package/llms/components/menu.md +1 -1
- package/llms/components/menubar.md +1 -1
- package/llms/components/meter.md +1 -1
- package/llms/components/note.md +1 -1
- package/llms/components/page-loader.md +1 -1
- package/llms/components/pill.md +1 -1
- package/llms/components/popover.md +2 -2
- package/llms/components/progress.md +1 -1
- package/llms/components/radio.md +1 -1
- package/llms/components/segmented-bar.md +1 -1
- package/llms/components/select.md +2 -2
- package/llms/components/sheet.md +2 -2
- package/llms/components/side-nav.md +1 -1
- package/llms/components/skeleton.md +1 -1
- package/llms/components/spinner.md +1 -1
- package/llms/components/stepper.md +2 -2
- package/llms/components/switch.md +1 -1
- package/llms/components/table.md +1 -1
- package/llms/components/tabs.md +2 -2
- package/llms/components/thinking-orb.md +2 -2
- package/llms/components/toast.md +1 -1
- package/llms/components/toggle.md +1 -1
- package/llms/components/toolbar.md +1 -1
- package/llms/components/tooltip.md +1 -1
- package/llms-full.txt +62 -54
- package/llms.txt +14 -6
- package/package.json +1 -1
- package/registry.json +215 -49
- package/skills/sable/SKILL.md +13 -4
|
@@ -14,8 +14,8 @@ Use Popover for anchored secondary content that needs more room than a tooltip b
|
|
|
14
14
|
|
|
15
15
|
- Do: Use it for small pickers, summaries, or contextual controls tied to a trigger.
|
|
16
16
|
- Do: Keep focus behavior and dismissal predictable.
|
|
17
|
-
- Don't: Do not use Popover for blocking confirmations, long forms, or critical information.
|
|
18
|
-
- Don't: Do not put a form that can fail validation inside one. A popover dismisses on outside click, which discards what the user typed with no warning — that is a Dialog.
|
|
17
|
+
- Don't: Do not use Popover for blocking confirmations, long forms, or critical information. → use **Dialog**
|
|
18
|
+
- Don't: Do not put a form that can fail validation inside one. A popover dismisses on outside click, which discards what the user typed with no warning — that is a Dialog. → use **Dialog**
|
|
19
19
|
|
|
20
20
|
### Anatomy
|
|
21
21
|
|
|
@@ -15,7 +15,7 @@ Use Progress to communicate determinate or indeterminate completion for a task o
|
|
|
15
15
|
- Do: Use determinate values when progress can be measured.
|
|
16
16
|
- Do: Pair the visual indicator with text when users need context or exact values.
|
|
17
17
|
- Don't: Do not use Progress as a decorative divider or status color bar.
|
|
18
|
-
- Don't: Do not use a determinate Progress for an unknown duration. A bar that sits at 90% is worse than a Spinner, because it makes a promise about time that you cannot keep.
|
|
18
|
+
- Don't: Do not use a determinate Progress for an unknown duration. A bar that sits at 90% is worse than a Spinner, because it makes a promise about time that you cannot keep. → use **Spinner**
|
|
19
19
|
|
|
20
20
|
### Anatomy
|
|
21
21
|
|
package/llms/components/radio.md
CHANGED
|
@@ -14,7 +14,7 @@ Use Radio when a user must choose exactly one option from a visible set.
|
|
|
14
14
|
|
|
15
15
|
- Do: Use it when all options should be visible for comparison.
|
|
16
16
|
- Do: Keep option labels mutually exclusive and easy to understand.
|
|
17
|
-
- Don't: Do not use Radio for independent toggles or multiple selection; use Checkbox or Switch.
|
|
17
|
+
- Don't: Do not use Radio for independent toggles or multiple selection; use Checkbox or Switch. → use **Checkbox**, **Switch**
|
|
18
18
|
- Don't: Do not use a radio group with only one option, and do not omit the Fieldset. Without the fieldset the options share no accessible name, so a screen reader reads the choices with no question attached.
|
|
19
19
|
|
|
20
20
|
### Anatomy
|
|
@@ -14,7 +14,7 @@ Use SegmentedBar when a stat card or row needs to show how a total divides into
|
|
|
14
14
|
|
|
15
15
|
- Do: Keep it to two to six segments and give the same category the same tone everywhere it appears.
|
|
16
16
|
- Do: Show the legend's shares in text ("42%") — colour identifies a segment, but the number is what a reader compares.
|
|
17
|
-
- Don't: Use it for a single value against a limit; that is Meter, which carries the meter role and its value.
|
|
17
|
+
- Don't: Use it for a single value against a limit; that is Meter, which carries the meter role and its value. → use **Meter**
|
|
18
18
|
- Don't: Rely on tone order alone to tell segments apart; a legend row per segment, with its label, is required.
|
|
19
19
|
|
|
20
20
|
### Anatomy
|
|
@@ -17,8 +17,8 @@ Use Select when users choose one value from a known, finite set. Use Combobox fo
|
|
|
17
17
|
- Do: Wrap in Field when the select belongs to a form so label, helper text, and errors are wired automatically.
|
|
18
18
|
- Do: Leave the trigger's type alone on mobile. Below the sm breakpoint the md trigger renders text-body-lg (17px) so it matches the Input and Textarea beside it, which carry that tier because iOS Safari zooms the page when a focused field computes under 16px. A custom field in the same row should follow: a second paired tier under a max-sm: variant, never a hand-set font-size.
|
|
19
19
|
- Do: Inside a <Workspace> a Select adapts automatically — trigger and popup both pick up the compact density, including across the portal. Do NOT hand-size it per call site; that was necessary before v0.41 and is now drift.
|
|
20
|
-
- Don't: Use Select for very large or fuzzy lists. Use Combobox when typing is the primary way to find an option.
|
|
21
|
-
- Don't: Use Select for binary on/off settings. Use Switch or Checkbox instead.
|
|
20
|
+
- Don't: Use Select for very large or fuzzy lists. Use Combobox when typing is the primary way to find an option. → use **Combobox**
|
|
21
|
+
- Don't: Use Select for binary on/off settings. Use Switch or Checkbox instead. → use **Switch**, **Checkbox**
|
|
22
22
|
|
|
23
23
|
### Anatomy
|
|
24
24
|
|
package/llms/components/sheet.md
CHANGED
|
@@ -15,8 +15,8 @@ Use Sheet for secondary workflows that slide in while preserving context from th
|
|
|
15
15
|
- Do: Use it for inspect, edit, filter, or create flows that relate to the current page.
|
|
16
16
|
- Do: Include clear title, close path, and footer actions for task-oriented sheets.
|
|
17
17
|
- Do: Give a bottom sheet snap points when it shows a summary first and detail on demand (a map result, a now-playing panel): `snapPoints={[0.4, 1]}`. The first stop is where it opens; put what matters at that height, because the rest is a drag away.
|
|
18
|
-
- Don't: Do not use Sheet for simple confirmations or deeply nested workflows.
|
|
19
|
-
- Don't: Do not use it on desktop where a Dialog fits. A sheet's affordance is edge-anchored travel for thumb reach; on a wide viewport it becomes a dialog that arrives from the wrong place.
|
|
18
|
+
- Don't: Do not use Sheet for simple confirmations or deeply nested workflows. → use **Dialog**
|
|
19
|
+
- Don't: Do not use it on desktop where a Dialog fits. A sheet's affordance is edge-anchored travel for thumb reach; on a wide viewport it becomes a dialog that arrives from the wrong place. → use **Dialog**
|
|
20
20
|
|
|
21
21
|
### Anatomy
|
|
22
22
|
|
|
@@ -16,7 +16,7 @@ Use SideNav for vertical navigation inside a settings page, documentation area,
|
|
|
16
16
|
- Do: Group related items with SideNavGroup when the rail has more than one conceptual area.
|
|
17
17
|
- Do: Use size='lg' and activeVariant='sidebar' when the nav is part of persistent app chrome.
|
|
18
18
|
- Do: Rows are rounded-sm, which nests in the usual rounded-lg p-2 frame. In any other rounded, padded frame give each item rounded-concentric-<outer>/<inset> — a same-radius row inset into a frame reads as a second system.
|
|
19
|
-
- Don't: Use SideNav for bottom mobile navigation; use BottomNav in AppShell's bottomNav slot.
|
|
19
|
+
- Don't: Use SideNav for bottom mobile navigation; use BottomNav in AppShell's bottomNav slot. → use **BottomNav**
|
|
20
20
|
- Don't: Mix content and sidebar active variants in the same rail unless individual items intentionally override the group.
|
|
21
21
|
|
|
22
22
|
### Anatomy
|
|
@@ -14,7 +14,7 @@ Use Skeleton to reserve space and hint at the shape of content while data is loa
|
|
|
14
14
|
|
|
15
15
|
- Do: Match the approximate size and rhythm of the eventual content.
|
|
16
16
|
- Do: Use it for content regions where layout stability matters during loading.
|
|
17
|
-
- Don't: Do not leave Skeleton visible after an error or empty state; switch to EmptyState (tone='destructive' for an error).
|
|
17
|
+
- Don't: Do not leave Skeleton visible after an error or empty state; switch to EmptyState (tone='destructive' for an error). → use **EmptyState**
|
|
18
18
|
- Don't: Do not use a skeleton whose shape differs from the content that replaces it. A mismatched placeholder causes a visible jump, which is worse than a brief spinner.
|
|
19
19
|
|
|
20
20
|
## Props
|
|
@@ -14,7 +14,7 @@ Use Spinner for short indeterminate waits where the user cannot know exact progr
|
|
|
14
14
|
|
|
15
15
|
- Do: Use it in compact panels or places where layout is already stable. In a button, use Button's loading prop rather than placing a Spinner by hand — it disables the button, sets aria-busy and sizes the spinner to the button's icon.
|
|
16
16
|
- Do: Pair it with accessible loading text when the surrounding label is not enough.
|
|
17
|
-
- Don't: Do not use Spinner as the only content for long waits or full page loading.
|
|
17
|
+
- Don't: Do not use Spinner as the only content for long waits or full page loading. → use **Skeleton**, **PageLoader**
|
|
18
18
|
- Don't: Do not use it without an accessible name or a nearby status message. A spinning icon is invisible to a screen reader, so the wait is announced as nothing at all.
|
|
19
19
|
|
|
20
20
|
## Props
|
|
@@ -15,8 +15,8 @@ Use Stepper above or beside a flow that is split into a known, small number of n
|
|
|
15
15
|
- Do: Drive it from one number (`current`) and override a single step's `status` only for what a number cannot say — a completed step that now needs attention is `status="error"`.
|
|
16
16
|
- Do: Name steps with a word or two ("Shipping", "Payment"). Go vertical when steps need a description or there are more than five; horizontal titles truncate first.
|
|
17
17
|
- Do: Give completed steps `onSelect` only when going back to edit them actually works, and keep the user's later answers when they do.
|
|
18
|
-
- Don't: Do not use Stepper for a task with unknown length or for a percentage. That is Progress; a stepper promises a fixed set of named stops.
|
|
19
|
-
- Don't: Do not use it as navigation between independent sections. Sections the user can visit in any order are Tabs; a stepper implies each step depends on the one before.
|
|
18
|
+
- Don't: Do not use Stepper for a task with unknown length or for a percentage. That is Progress; a stepper promises a fixed set of named stops. → use **Progress**
|
|
19
|
+
- Don't: Do not use it as navigation between independent sections. Sections the user can visit in any order are Tabs; a stepper implies each step depends on the one before. → use **Tabs**
|
|
20
20
|
- Don't: Do not make upcoming steps pressable to skip ahead. A step that looks reachable but is not is worse than one that is plainly locked.
|
|
21
21
|
|
|
22
22
|
### Anatomy
|
|
@@ -15,7 +15,7 @@ Use Switch for immediate on/off settings that take effect as a persistent prefer
|
|
|
15
15
|
- Do: Use it for binary settings where the label describes the enabled state.
|
|
16
16
|
- Do: Make the current state obvious through both position and accessible text.
|
|
17
17
|
- Don't: Do not phrase the label as a negative, such as "Don't send read receipts". Turning off a negative is a double negative, and the user has to solve it before they can act.
|
|
18
|
-
- Don't: Do not use Switch for one-time agreement, multi-select choices, or submit-only booleans.
|
|
18
|
+
- Don't: Do not use Switch for one-time agreement, multi-select choices, or submit-only booleans. → use **Checkbox**, **Radio**
|
|
19
19
|
- Don't: Do not use a Switch whose effect is not immediately visible somewhere. A toggle flipped with no observable consequence gives no confirmation it worked, so the user flips it again to check.
|
|
20
20
|
|
|
21
21
|
## Props
|
package/llms/components/table.md
CHANGED
|
@@ -16,7 +16,7 @@ Use Table for structured data with consistent columns and rows. Use DataTable wh
|
|
|
16
16
|
- Do: Keep cells concise and scannable; compose Badge, StatusDot, Avatar, or Button only when they clarify the row.
|
|
17
17
|
- Do: Use the built-in horizontal frame for overflow instead of squeezing columns until content becomes unreadable.
|
|
18
18
|
- Do: Put a table in a card with `<CardContent flush>`. The first and last columns then take the card's own padding (`--table-edge-px`), so they line up with the CardHeader at any density. Never hand-set `pl-6`/`pr-6` on edge cells.
|
|
19
|
-
- Don't: Use Table for heterogeneous items with no stable columns. Use Card, Entity, or a list composition instead.
|
|
19
|
+
- Don't: Use Table for heterogeneous items with no stable columns. Use Card, Entity, or a list composition instead. → use **Card**, **Entity**
|
|
20
20
|
- Don't: Put every possible action in every row. Use one primary row action, an OverflowMenu, or row detail navigation.
|
|
21
21
|
|
|
22
22
|
### Anatomy
|
package/llms/components/tabs.md
CHANGED
|
@@ -15,8 +15,8 @@ Use Tabs to switch between related panels within the same page context.
|
|
|
15
15
|
- Do: Use tabs when each panel is peer content and users may compare or switch often.
|
|
16
16
|
- Do: Keep tab labels short and make the active tab unmistakable.
|
|
17
17
|
- Do: Use variant="pill" for a short switcher inside a card or toolbar (Preview / Code, List / Grid); keep the default underline for sections of a page.
|
|
18
|
-
- Don't: Do not use Tabs for unrelated pages or primary navigation that needs distinct URLs.
|
|
19
|
-
- Don't: Do not use tabs for sequential steps. Tabs are peer views the user returns to in any order; a process with an order needs a stepper, or the user will skip ahead.
|
|
18
|
+
- Don't: Do not use Tabs for unrelated pages or primary navigation that needs distinct URLs. → use **SideNav**, **NavigationMenu**
|
|
19
|
+
- Don't: Do not use tabs for sequential steps. Tabs are peer views the user returns to in any order; a process with an order needs a stepper, or the user will skip ahead. → use **Stepper**
|
|
20
20
|
|
|
21
21
|
### Anatomy
|
|
22
22
|
|
|
@@ -15,8 +15,8 @@ Use ThinkingOrb while an AI agent is working and there is nothing specific to re
|
|
|
15
15
|
- Do: Reserve it for the single active agent state — the composer, the streaming message header, a standalone thinking screen. One orb on screen reads as intent; several read as decoration.
|
|
16
16
|
- Do: Switch mode to say what kind of work is happening: orbit for generic thinking, globe while searching or retrieving, mesh while relating sources or running tools. Pair it with a text status so the phase is legible without decoding the animation.
|
|
17
17
|
- Do: Use size="sm" inline in a message row or composer and size="lg" only when the orb is the main thing on screen. The size steps are separately tuned, not scaled, so the small one stays legible.
|
|
18
|
-
- Don't: Do not put one on every row of a list or in a repeated skeleton. Each orb runs its own animation frame loop painting hundreds of arcs; use Skeleton for content-shaped waits and Spinner inside buttons.
|
|
19
|
-
- Don't: Do not use it for a determinate wait. It carries no sense of how far along anything is — reach for Progress when a percentage exists.
|
|
18
|
+
- Don't: Do not put one on every row of a list or in a repeated skeleton. Each orb runs its own animation frame loop painting hundreds of arcs; use Skeleton for content-shaped waits and Spinner inside buttons. → use **Skeleton**, **Spinner**
|
|
19
|
+
- Don't: Do not use it for a determinate wait. It carries no sense of how far along anything is — reach for Progress when a percentage exists. → use **Progress**
|
|
20
20
|
- Don't: Do not rely on the animation alone to announce the wait. Give the label a short constant phrase (it is the role=status announcement) or place a status message next to it.
|
|
21
21
|
- Don't: Do not pass a label that changes while the orb is up. It is the accessible name of a live region, so every change re-announces the whole thing — feed it a per-token phase and a screen reader interrupts on each delta: "Chromatic drift" → "Chromatic drift · rgb-shift" → "Chromatic drift · rgb-shift → grain", which is unusable. The label names the wait ("Thinking"); the phase belongs in adjacent text, as in the "Inline with a status line" example. If the phase must be announced, announce it once when the turn settles from a separate live region — not per update.
|
|
22
22
|
|
package/llms/components/toast.md
CHANGED
|
@@ -15,7 +15,7 @@ Use Toast for transient feedback caused by a user action: saved, failed, copied,
|
|
|
15
15
|
- Do: Mount one ToastProvider near the app root before any code calls toast() or useToast().
|
|
16
16
|
- Do: Use toast.promise for async actions so loading, success, and error states stay tied to one notification.
|
|
17
17
|
- Do: Keep toast copy short and outcome-focused. Add an action only when it is immediately useful, such as Undo.
|
|
18
|
-
- Don't: Use Toast for critical blockers or persistent outages. Use Banner or Dialog when the user must notice and act.
|
|
18
|
+
- Don't: Use Toast for critical blockers or persistent outages. Use Banner or Dialog when the user must notice and act. → use **Banner**, **Dialog**
|
|
19
19
|
- Don't: Fire multiple toasts for one operation. Update the same toast when a task progresses.
|
|
20
20
|
- Don't: Put the only path to an action in a toast that auto-dismisses. An Undo that expires on a timer is data loss on a schedule, so error toasts and any toast carrying actionProps default to timeout 0 and wait to be read — pass an explicit timeout only when the action is also reachable somewhere else. When a timeout exists at all, 5s is the floor: anything shorter cannot be read and acted on.
|
|
21
21
|
|
|
@@ -15,7 +15,7 @@ Use Toggle for button-like controls that can be pressed on or off within a toolb
|
|
|
15
15
|
- Do: Use it for transient UI modes such as bold, preview, pin, or favorite.
|
|
16
16
|
- Do: Make the pressed state visually and programmatically clear.
|
|
17
17
|
- Do: Use ToggleGroup appearance="segmented" for a single-select view switch (List / Grid). It is the same capsule ThemeSwitcher wears — do not hand-build a track around a row of toggles.
|
|
18
|
-
- Don't: Do not use Toggle for persistent application settings; use Switch.
|
|
18
|
+
- Don't: Do not use Toggle for persistent application settings; use Switch. → use **Switch**
|
|
19
19
|
- Don't: Do not leave an icon-only Toggle without an accessible name. It announces as "button, pressed", which tells a screen-reader user the state but never what the state applies to.
|
|
20
20
|
|
|
21
21
|
### Anatomy
|
|
@@ -18,7 +18,7 @@ Use Toolbar when three or more related controls sit together and act on the same
|
|
|
18
18
|
- Do: Compose triggers and toggles through ToolbarButton's render prop — render={<MenuTrigger />}, render={<PopoverTrigger />}, or render={<Toggle value="bold" />} inside a ToggleGroup — so they join the toolbar's arrow-key order.
|
|
19
19
|
- Don't: Put a bare Button, Toggle or Input inside a Toolbar. It renders, but it is not a toolbar item: the arrow keys skip it and it takes its own tab stop, which is the inconsistency Toolbar exists to remove. Use ToolbarButton, ToolbarInput, or render through ToolbarButton.
|
|
20
20
|
- Don't: Wrap one or two buttons, or a dialog's Cancel/Confirm pair, in a Toolbar. Those are independent actions; arrow-key movement there is a surprise, not a shortcut. A plain row of Buttons is right.
|
|
21
|
-
- Don't: Use Toolbar for navigation between pages or views. Links that go somewhere are Tabs, SideNav or Breadcrumbs; ToolbarLink is for the odd link that sits among actions, like Help.
|
|
21
|
+
- Don't: Use Toolbar for navigation between pages or views. Links that go somewhere are Tabs, SideNav or Breadcrumbs; ToolbarLink is for the odd link that sits among actions, like Help. → use **Tabs**, **SideNav**, **Breadcrumbs**
|
|
22
22
|
- Don't: Give toolbar buttons primary or destructive fills by default. A toolbar is a quiet strip of tools; the ghost default keeps it from competing with the page's one primary action.
|
|
23
23
|
|
|
24
24
|
### Anatomy
|
|
@@ -14,7 +14,7 @@ Use Tooltip for brief nonessential hints tied to a specific control or piece of
|
|
|
14
14
|
|
|
15
15
|
- Do: Use it to name icon-only controls or clarify compact UI when the label cannot be visible.
|
|
16
16
|
- Do: Keep tooltip content short and noninteractive.
|
|
17
|
-
- Don't: Do not put critical instructions, errors, or interactive content inside Tooltip.
|
|
17
|
+
- Don't: Do not put critical instructions, errors, or interactive content inside Tooltip. → use **Popover**, **InlineStatus**
|
|
18
18
|
- Don't: Do not let a tooltip serve as an icon button's accessible name. A tooltip is not a name — without its own aria-label the button announces as "button", and the tooltip never opens for a screen reader at all.
|
|
19
19
|
|
|
20
20
|
### Anatomy
|