Warning Text

Warning text is a short warning about something important, such as the legal consequence of an action or of not acting: an icon and one bold line of text. It is the GOV.UK and DHCW warning-text pattern, headless.

Status: beta — implemented and unit-tested in all eight headless libraries; not yet exercised in composed flows.

The component renders a <div> holding an optional icon and a <strong> line. The consumer supplies the icon (Lily bundles none), the visually hidden prefix such as "Warning" in their own language, and the text. The component adds no ARIA beyond hiding the icon, draws nothing and carries no strings of its own.

Example

Warning You can be fined up to £5,000 if you do not register.
Show demo markup
<div class="warning-text"><span class="warning-text-icon" aria-hidden="true">!</span><strong class="warning-text-text"><span class="visually-hidden">Warning</span> You can be fined up to £5,000 if you do not register.</strong></div>

Inline SVG icon

Warning You must appeal within 1 year of getting your decision letter.
Show markup
<div class="warning-text"><span class="warning-text-icon" aria-hidden="true"><svg viewBox="0 0 24 24" width="24" height="24" focusable="false"><circle cx="12" cy="12" r="11" fill="currentColor"/><rect x="11" y="6" width="2" height="8" fill="Canvas"/><rect x="11" y="16" width="2" height="2" fill="Canvas"/></svg></span><strong class="warning-text-text"><span class="visually-hidden">Warning</span> You must appeal within 1 year of getting your decision letter.</strong></div>
Usage example
<WarningText>
  {#snippet icon()}!{/snippet}
  <span class="visually-hidden">Warning</span>
  You can be fined up to £5,000 if you do not register.
</WarningText>
Show Svelte source
// In your Svelte component:
import WarningText from "lily-design-system-svelte-headless/components/WarningText/WarningText.svelte";

<WarningText>
  <!-- content -->
</WarningText>

Usage

<WarningText>
  {#snippet icon()}!{/snippet}
  <span class="visually-hidden">Warning</span>
  You can be fined up to £5,000 if you do not register.
</WarningText>

Props

Prop Type Default Description
class string "" Appended to the base class
icon slot — Optional decorative icon, rendered inside an aria-hidden span
children slot — The visually hidden prefix, then the warning text
...restProps HTML attributes — Spread onto the root <div>

Keyboard Interactions

  • None. The element is not focusable.

ARIA

  • No role: the root is a plain <div>, read in page order with the content around it, so it is not announced when the page loads
  • aria-hidden="true" on .warning-text-icon, so a glyph such as "!" is not read out
  • The consumer's visually hidden prefix tells a screen reader user the kind of message before its text
  • Do not put aria-label on the root: a <div> with no role cannot be named, and the label would replace nothing

When to Use

  • To warn users about something important near the action or decision it relates to, such as the legal consequences of an action, or of not taking one
  • When the warning fits in one short line or sentence and needs no heading or further content

When Not to Use

  • Use WarningCallout — for a warning that needs a heading or several sentences, such as time-critical or health-affecting information on a content page
  • Use InsetText — for helpful information that should stand out but is not a warning
  • Use Alert — for a status message that appears or changes while the page is open and must be announced (role="alert")
  • Use Notification — for a brief message about an event or update outside the user's current task
  • Use ErrorMessage and ErrorSummary — for errors in what the user entered
  • Do not use for routine or reversible consequences, or repeat it so often on a page that it stops standing out

Headless

This component decides semantics only: the elements, the class hooks and hiding the icon. It decides no icon, colour, size, weight, spacing or visually-hidden technique.

Styles

Target .warning-text, .warning-text-icon and .warning-text-text. The <strong> is bold by default in browsers; keep it bold even where a reset removes user-agent styles. The reference themes do not restyle it yet. No default styles are included in the component.

Testing

  • Renders a <div> with class warning-text and appends the consumer class
  • A supplied icon renders inside .warning-text-icon with aria-hidden="true"; with no icon, no wrapper is rendered
  • The children render inside strong.warning-text-text, the hidden prefix included
  • The component adds no text of its own; rest props reach the root

Advice

  • Hidden prefix: Put a visually hidden prefix such as "Warning" at the start of the content so a screen reader user hears the kind of message before its text. Lily ships no English and no prop for it: supply the string in your own language, hidden with your own visually-hidden class (clip it; never display: none, which hides it from screen readers too). GOV.UK notes you may need to rewrite the hidden text to fit your context.
  • Icon: Supply the icon as text (GOV.UK and DHCW use "!" in a circle drawn with CSS) or an inline SVG. It is hidden from assistive technology, so it must not carry meaning the text lacks. Draw it with currentColor and the page background so it follows a user's colour overrides, and check it in forced-colours mode.
  • Dark backgrounds: DHCW has a reverse variant for dark backgrounds; use the consumer class or a data-* attribute on the root for it.
  • Placement: Keep it close to the action or decision it is about. Do not use it to report errors.

Implementation Notes

  • Renders <div class="warning-text {class}">
  • When an icon is supplied, it renders first, inside <span class="warning-text-icon" aria-hidden="true"> (the Angular port always renders this wrapper, empty when nothing is projected into [icon])
  • The children render inside <strong class="warning-text-text">: the visually hidden prefix first, then the text
  • restProps spread onto the root; no state, no behaviour, no live region
  • The hidden prefix is content, not a prop, as in warning-callout: Lily ships no English default and no prop for it

Related components

  • warning-callout
  • inset-text
  • alert
  • notification
  • error-message

References


Lily™ and Lily Design System™ are trademarks.

Canonical contract

Generated from this component's canonical metadata — the machine-checked source the implementations are held to.

Metadata

  • Component: warning-text
  • PascalCase: WarningText
  • Description: a short warning shown as an icon and a bold line of text, with a visually hidden prefix supplied by the consumer
  • Status: beta — implemented and unit-tested in all eight headless libraries; not yet exercised in composed flows
  • HTML tag: <div>
  • CSS class: .warning-text
  • Interactive: no

ARIA

  • None added on the root: it is a plain <div> with no role, so do not give it aria-label (a generic element cannot be named)
  • aria-hidden="true" on the icon wrapper, so a glyph such as "!" is not read
  • The hidden prefix gives screen reader users the kind of message before its text

Keyboard

  • None. The component is not focusable

Props

  • class: string (default: "") -- appended to the base class
  • icon: slot (optional) -- the decorative icon; rendered inside the aria-hidden wrapper
  • children: slot (required) -- the visually hidden prefix, then the warning text
  • ...restProps: HTML attributes -- spread onto the root <div>

Markdown

This page as Markdown, for people and AI tools: warning-text.md