@equal-experts/kuat-react 0.14.0 → 0.15.0-beta.1

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.
Files changed (32) hide show
  1. package/agent-docs/AGENTS.md +1 -1
  2. package/agent-docs/README.md +1 -1
  3. package/agent-docs/components/callout.md +66 -0
  4. package/agent-docs/components/components.manifest.json +6 -0
  5. package/agent-docs/external/kuat-agent-rules/reference/accessibility/accessibility.md +27 -1
  6. package/agent-docs/external/kuat-agent-rules/reference/design-language/colour-usage.md +107 -0
  7. package/agent-docs/external/kuat-agent-rules/reference/design-language/colours.md +86 -11
  8. package/agent-docs/external/kuat-agent-rules/reference/design-language/tokens/colors.tokens.json +193 -5
  9. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-marketing/patterns/README.md +6 -0
  10. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-marketing/website.md +14 -0
  11. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/README.md +1 -0
  12. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/accessibility.md +0 -29
  13. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/colour-modes.md +58 -0
  14. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/component-decision-tree.md +3 -32
  15. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/component-registry.md +1 -1
  16. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/content/product-content.md +0 -26
  17. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/README.md +14 -5
  18. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/{forms.md → complete-a-form.md} +43 -53
  19. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/{dashboards.md → dashboard.md} +42 -51
  20. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/documentation.md +41 -51
  21. package/agent-docs/external/kuat-agent-rules/reference/media-types/web-product/patterns/{authentication.md → sign-in.md} +42 -52
  22. package/agent-docs/manifest.json +3 -3
  23. package/agent-docs/rules/LOADING-consumer.md +1 -1
  24. package/dist/callout-DFmAtUwR.js +46 -0
  25. package/dist/callout.d.ts +3 -0
  26. package/dist/callout.js +7 -0
  27. package/dist/components/ui/callout/callout.d.ts +19 -0
  28. package/dist/components/ui/callout/index.d.ts +2 -0
  29. package/dist/index.d.ts +2 -0
  30. package/dist/index.js +196 -193
  31. package/dist/style.css +1 -1
  32. package/package.json +5 -1
@@ -7,4 +7,4 @@ Rules for this install live under `agent-docs/` in `@equal-experts/kuat-core`, `
7
7
  3. Load component guides via `agent-docs/components/components.manifest.json`.
8
8
  4. Skills: `kuat-review`, `kuat-create` from [kuat-agent-docs](https://github.com/equalexperts/kuat-agent-docs).
9
9
 
10
- **Version:** 0.14.0 · **Rules snapshot:** 57ee7c45da82
10
+ **Version:** 0.15.0-beta.1 · **Rules snapshot:** 038a985b57fe
@@ -14,4 +14,4 @@ Curated agent docs bundled with `@equal-experts/kuat-core`, `@equal-experts/kuat
14
14
  node scripts/agent-docs/bundle-for-core.mjs
15
15
  ```
16
16
 
17
- Built against upstream ref: `57ee7c45da82`
17
+ Built against upstream ref: `038a985b57fe`
@@ -0,0 +1,66 @@
1
+ # Callout (`kuat:callout`)
2
+
3
+ ## Overview
4
+
5
+ Inline banner for surfacing a status message tied to a section of content: info, positive, warning, or issue. Supports a required title, an optional description, a per-type icon (shown by default, can be hidden), and an optional link-style action. Exported from `@equal-experts/kuat-react` / `@equal-experts/kuat-vue`.
6
+
7
+ ## When to use
8
+
9
+ - Persistent, in-page status messages tied to a section of content (e.g. explaining what a view shows, or that a save failed)
10
+ - Confirmations, warnings, or errors that should stay visible until the user navigates away or dismisses them via the action link
11
+
12
+ ## When not to use
13
+
14
+ - Transient, self-dismissing notifications — use `Sonner`
15
+ - Form field-level validation — use `Field`'s error slot
16
+ - A single inline icon+label with no message — use `Badge`
17
+
18
+ ## Variants
19
+
20
+ Four semantic `type` values, each with its own background tint and left border/icon accent:
21
+
22
+ - `info` (default) — ee-blue tint, `Info` icon
23
+ - `positive` — uptime-green tint, `CheckCircle2` icon
24
+ - `warning` — equal-ember tint, `AlertTriangle` icon
25
+ - `issue` — runtime-red tint, `XCircle` icon
26
+
27
+ ## States
28
+
29
+ - **Icon shown / hidden** — `icon` prop, default `true`. The icon glyph is chosen automatically from `type`; consumers cannot swap it independently.
30
+ - **With / without description** — omit `description` to render title only.
31
+ - **With / without action** — omit `action` to render no link. Only a link-style action ships in this release; additional action kinds (e.g. a button) may be added in future without changing the `title`/`description`/`icon` API.
32
+
33
+ ## Content guidance
34
+
35
+ - Title should be a short, complete statement of the status — it's the only text guaranteed to be read, since colour is never the sole signal (icon shape + title wording both carry the meaning, independent of the accent colour).
36
+ - Description is for supporting detail, not another restatement of the title.
37
+ - Action label should describe the action's effect (e.g. "Close message"), not just "Click here".
38
+
39
+ ## Behaviour
40
+
41
+ - Root element renders `role="status"` (polite live region) — appropriate for a persistent banner already present in the page, as opposed to a toast that should interrupt.
42
+ - The action renders as a real `<a href>` (with optional `target` and `onClick`), not a button — it's always a navigation/link affordance in this release.
43
+
44
+ ## Accessibility
45
+
46
+ - Status is never conveyed by colour alone: the icon shape (circle-i / check / triangle / x) and the title wording both signal the type independent of colour (WCAG 1.4.1).
47
+ - The icon and title text share the same neutral `--foreground` token — only the left border stripe and background use the per-type accent colour, so the icon remains legible regardless of type.
48
+ - All four `background`/`foreground` token pairs (`--callout-info`, `--callout-positive`, `--callout-warning`, `--callout-issue`, each with a `-foreground` counterpart) are covered by `pnpm tokens:contrast-check` in both light and dark mode.
49
+ - Icon is `aria-hidden="true"` — it's decorative reinforcement of the title text, not a separate accessible element.
50
+
51
+ ## API
52
+
53
+ Import from `@equal-experts/kuat-react` (subpath: `@equal-experts/kuat-react/callout`) or `@equal-experts/kuat-vue` (subpath: `@equal-experts/kuat-vue/callout`).
54
+
55
+ - `type?: "info" | "positive" | "warning" | "issue"` — default `"info"`
56
+ - `title` — required
57
+ - `description?` — optional
58
+ - `icon?: boolean` — default `true`
59
+ - `action?: { label: string; href: string; target?: string; onClick?: (event) => void }` — optional
60
+
61
+ See Storybook (`Feedback/Callout`) for live examples of every type and combination.
62
+
63
+ ## Related components
64
+
65
+ - `shadcn:sonner` (Kuat `Sonner`) — transient, self-dismissing toast notifications
66
+ - `kuat:field` — inline form-field validation messages
@@ -18,6 +18,12 @@
18
18
  "displayName": "KuatHeader",
19
19
  "path": "components/kuat-header.md",
20
20
  "sources": ["@equal-experts/kuat-react", "@equal-experts/kuat-vue"]
21
+ },
22
+ "kuat:callout": {
23
+ "slug": "callout",
24
+ "displayName": "Callout",
25
+ "path": "components/callout.md",
26
+ "sources": ["@equal-experts/kuat-react", "@equal-experts/kuat-vue"]
21
27
  }
22
28
  }
23
29
  }
@@ -99,11 +99,37 @@ When using colour for status (red/amber/green):
99
99
  3. **Include legend** - Always explain what colours mean
100
100
  4. **Consider colour blindness** - Red/green are commonly confused
101
101
 
102
+ ### Status / RAG Colour Values
103
+
104
+ The semantic layer in [colours.md](../design-language/colours.md#semantic--rag-colours) fixes the
105
+ status set — always pair with the listed shape/icon, never colour alone:
106
+
107
+ | State | Colour | Required text | Ratio |
108
+ |-------|--------|----------------|-------|
109
+ | Error / danger | Runtime Red `#a3152b` | White | 7.8:1 AAA |
110
+ | Warning | Equal Ember `#f07c00` | Dark Data (white **fails**, 2.8:1) | 5.6:1 AA |
111
+ | Success | Uptime Green `#11821b` | White | 5.0:1 AA |
112
+ | Info / call-out | Index Indigo `#352361` | White | 13.4:1 AAA |
113
+
114
+ Runtime Red and Uptime Green collapse under protanopia — the icon/shape/label partner is what
115
+ makes RAG status colour-blind safe, not the colour itself.
116
+
117
+ ### Accessible Link Colour (WIP)
118
+
119
+ EE Blue (`#1795d4`) fails body-text contrast (3.3:1 on white) and is reserved for buttons, icons,
120
+ and larger CTAs. Text links and small text use the semantic `link` token (`#0080be`) instead —
121
+ see [colour-usage.md](../design-language/colour-usage.md#links-vs-buttons--the-accessible-blue).
122
+ This value is deliberately just under the 4.5:1 AA threshold (4.34:1 on white, ≈97%) to stay close
123
+ to EE Blue, pending validation in real link contexts; a strict-AA fallback (`#007cb9`, 4.58:1)
124
+ exists if that validation doesn't hold.
125
+
102
126
  ### Charts and Data Visualisation
103
127
 
104
128
  - Use patterns or textures in addition to colours
105
- - Ensure adjacent colours have sufficient contrast
129
+ - Ensure adjacent colours have sufficient contrast (3:1 minimum, WCAG 1.4.11)
130
+ - Never place EE Blue and Transform Teal adjacent — near-identical lightness (1.01:1)
106
131
  - Provide data tables as alternatives to charts
132
+ - Full CVD rules and the categorical sequence: [colours.md](../design-language/colours.md#data-visualisation--categorical-order)
107
133
 
108
134
  ---
109
135
 
@@ -0,0 +1,107 @@
1
+ # Colour Usage
2
+
3
+ Tier, pairing, and role rules for the Equal Experts palette. This is the prose companion to
4
+ [colours.md](./colours.md) (generated — the token-derived swatches and values live there); this
5
+ file states the rules that govern *when* each tier applies. See
6
+ [accessibility.md](../accessibility/accessibility.md) for contrast targets and the never-colour-alone
7
+ rule, and each medium's own reference (`media-types/<medium>/`) for how a tier applies there.
8
+
9
+ Source: the June 2026 Nick Orme / Ed Ford colours lockdown.
10
+
11
+ ---
12
+
13
+ ## The tier model
14
+
15
+ Colour is governed by **what it is allowed to do**, not by which palette it belongs to.
16
+
17
+ | Tier | Contents | Where |
18
+ |------|----------|-------|
19
+ | **Tier 1 — Core** | The four brand hues (EE Blue, Transform Teal, Tech Blue, Equal Ember) + neutrals (Dark Data, The Cloud, Byte White) | Default for almost everything: product UI, adverts, the body of most slide decks |
20
+ | **Tier 2 — Extended accents** | The ten extended-palette colours | Exception only: small pull-out highlights, keyed diagrams, illustration accents. Capped at roughly 5–10% of a page's area |
21
+ | **Tier 3 — Data encoding** | The `categorical-1…8` sequence | Charts and data visualisation only |
22
+ | **Semantic / RAG** | `error`, `warning`, `success`, `info`, `link`, `interaction-state` | Cross-cutting — sits above all tiers, may appear in any scenario, reserved for meaning and never reused decoratively |
23
+
24
+ Core is what almost everyone should use almost all the time. The extended colours exist for
25
+ defined situations, used sparingly — flooding a layout with them reads as a different brand.
26
+
27
+ ---
28
+
29
+ ## Background floods
30
+
31
+ Full-page background floods are restricted to **Dark Data** or **Tech Blue** (or light greys /
32
+ The Cloud). **EE Blue, Transform Teal, and Equal Ember are not full-page fills** — they are
33
+ block/component-level backgrounds and accent/CTA colours only. A full-page EE Blue background is
34
+ too bright and swallows CTAs; the same logic applies to Transform Teal and Equal Ember.
35
+
36
+ ---
37
+
38
+ ## The three-stage blue
39
+
40
+ The blue family forms a deliberate three-step ramp:
41
+
42
+ **Tech Blue** (dark) → **EE Blue** (mid) → **Edge Blue** (light).
43
+
44
+ Edge Blue is the light end, brought in specifically for hover/active interaction states — it has
45
+ a defined product-UI role, not just decoration.
46
+
47
+ ---
48
+
49
+ ## Adjacency and pairing rules
50
+
51
+ - **Never place EE Blue and Transform Teal adjacent** in a categorical sequence, fill, or chart.
52
+ They share near-identical lightness (1.01:1 contrast) — indistinguishable in greyscale and for
53
+ many colour-vision-deficient viewers. Use one or the other per chart, not both.
54
+ - **The Fruity combination is decoration-only.** Runtime Red, Cursor Coral, Uptime Green, Logic
55
+ Lime, Signal Yellow, and Patch Peach together collapse under protanopia (Runtime Red and Uptime
56
+ Green become indistinguishable). Never use Fruity to encode data, status, or categories.
57
+ - **White text on Equal Ember fails** (2.8:1) — Equal Ember always takes Dark Data text.
58
+ - Dark-surface extended colours (Index Indigo, Packet Plum, Runtime Red, Uptime Green, Server
59
+ Slate) take white text; bright-surface extended colours (Logic Lime, Edge Blue, Signal Yellow,
60
+ Cursor Coral, Patch Peach) take Dark Data text — see [colours.md](./colours.md#pairing-summary)
61
+ for the generated pairing table.
62
+
63
+ ---
64
+
65
+ ## Server Slate vs the EE neutral scale
66
+
67
+ Server Slate is a distinct **brand grey** (a peer of the other extended colours, its own 50–950
68
+ scale). The EE neutral scale (Byte White → Dark Data) is a separate **UI neutral** scale for
69
+ surfaces, borders, and text. The two are kept apart because they serve different jobs: Server
70
+ Slate carries brand identity in a near-neutral tone; the neutral scale is the plain structural
71
+ scale product UI is built on.
72
+
73
+ ---
74
+
75
+ ## Links vs buttons — the accessible blue
76
+
77
+ EE Blue (`#1795d4`) fails body-text contrast (3.3:1 on white) but is retained for buttons, icons,
78
+ and larger CTAs, where it remains iconic and visually acceptable. Text links and small text use
79
+ the semantic `link` token instead (`#0080be`), a darkened EE Blue that keeps close to the brand
80
+ hue.
81
+
82
+ **The `link` value is WIP.** It is set deliberately just under the 4.5:1 AA threshold (4.34:1 on
83
+ white, ≈97%) to stay as close to EE Blue as possible — a brand-fidelity-over-strict-compliance
84
+ call, pending validation in real link contexts. A strict-AA fallback (`#007cb9`, 4.58:1) exists if
85
+ that validation doesn't hold up. Don't hard-code the current hex in a consuming app; reference the
86
+ `link` token so the value can move without a second migration.
87
+
88
+ ---
89
+
90
+ ## Named combinations
91
+
92
+ Brand groups colours into five named combinations — **Core, Data, Digital, Fruity, Ocean** — used
93
+ as mood/theme groupings for marketing and slide decks (Ocean reads cool/corporate, Fruity reads
94
+ energetic, and so on). These are theme palettes, not data-series orders: for charts, use the
95
+ Tier 3 categorical sequence in [colours.md](./colours.md), not a named combination. Fruity in
96
+ particular must never encode data (see above).
97
+
98
+ ---
99
+
100
+ ## Related
101
+
102
+ - [colours.md](./colours.md) — generated token values: brand colours, the extended palette, the
103
+ neutral scale, semantic roles, and the data-viz categorical order.
104
+ - [accessibility.md](../accessibility/accessibility.md) — contrast targets and the
105
+ never-colour-alone rule.
106
+ - `media-types/<medium>/` — how a tier applies in web product, web marketing, charts, slides, and
107
+ imagery.
@@ -88,24 +88,99 @@ How the brand palettes map to semantic roles in kuat-core `variables.css`. **Use
88
88
  | `--foreground` (`--brand-dark-data`) | text dark | `#212526` |
89
89
  | `--background` (`--brand-byte-white`) | white | `#ffffff` |
90
90
  | `--muted` (`--brand-the-cloud`) | Slate 100 | `#f5f5f5` |
91
- | `--destructive` | Red 600 | `#dc2626` |
91
+ | `--destructive` | Runtime Red 600 | `#a3152b` |
92
92
 
93
93
  Support scales (slate, red, indigo) back these aliases but are **not brand colours** — never use them directly as a brand colour.
94
94
 
95
95
  ---
96
96
 
97
- ## Neutral Colors
97
+ ## Extended Palette (exception-only)
98
+
99
+ Added in the June 2026 colours lockdown. **Core is primary; extended is exception-only** — see
100
+ [colour-usage.md](./colour-usage.md) for the tier model (data viz, keyed diagrams, small pull-outs).
101
+ Each is a flat peer scale (50–950), anchored at its measured lightness step, not forced to 500.
102
+
103
+ | Colour | Role | Value | Text on it |
104
+ |--------|------|-------|------------|
105
+ | Index Indigo | Info / call-out | `#352361` (step 800) | White |
106
+ | Packet Plum | Expressive accent / dark surface | `#853d7b` (step 600) | White |
107
+ | Runtime Red | Error / danger | `#a3152b` (step 600) | White |
108
+ | Uptime Green | Success | `#11821b` (step 500) | White |
109
+ | Server Slate | Near-neutral brand grey (distinct from the EE neutral scale) | `#4c5659` (step 600) | White |
110
+ | Logic Lime | Bright pull-out accent · display alias "Lime" | `#b1d923` (step 300) | Dark Data |
111
+ | Edge Blue | Hover/active state — light end of the 3-stage blue | `#a1c8e2` (step 200) | Dark Data |
112
+ | Signal Yellow | Bright pull-out accent · display alias "Sunflower" | `#ffd930` (step 300) | Dark Data |
113
+ | Cursor Coral | Decorative pull-out (not error) | `#ff5c5c` (step 400) | Dark Data |
114
+ | Patch Peach | Light warm pull-out accent | `#fca84e` (step 300) | Dark Data |
98
115
 
99
- For text, backgrounds, and UI elements:
116
+ ---
100
117
 
101
- | Color | Usage |
102
- |-------|-------|
103
- | White | Light backgrounds, text on dark |
104
- | Slate-50 to Slate-200 | Light backgrounds, subtle borders |
105
- | Slate-300 to Slate-500 | Secondary text, dividers |
106
- | Slate-600 to Slate-800 | Primary text (light mode) |
107
- | Slate-900 to Slate-950 | Headings, dark backgrounds |
108
- | Black | Maximum contrast, specific uses |
118
+ ## EE Neutral Scale
119
+
120
+ Monotonic Byte White Dark Data, distinct from Server Slate (a brand grey, not a UI neutral):
121
+
122
+ | Step | Value | Alias |
123
+ |------|-------|-------|
124
+ | 50 | `#ffffff` | **Byte White** |
125
+ | 100 | `#f5f5f5` | **The Cloud** |
126
+ | 200 | `#dbdbdb` | |
127
+ | 300 | `#c1c2c2` | |
128
+ | 400 | `#a7a9a9` | |
129
+ | 500 | `#8f9192` | |
130
+ | 600 | `#777a7a` | **Overcast** |
131
+ | 700 | `#606364` | |
132
+ | 800 | `#4a4d4e` | |
133
+ | 900 | `#35393a` | |
134
+ | 950 | `#212526` | **Dark Data** |
135
+
136
+ ---
137
+
138
+ ## Semantic / RAG Colours
139
+
140
+ Cross-cutting roles that mean a *specific thing* and may appear in any scenario — reserved for
141
+ meaning, never reused decoratively. Always pair with an icon/shape/label (WCAG 1.4.1 — never
142
+ colour alone).
143
+
144
+ | Role | Value | Required text | Notes |
145
+ |------|-------|----------------|-------|
146
+ | Error / danger | `#a3152b` | White | 7.8:1 AAA · replaces support #dc2626 |
147
+ | Warning | `#f07c00` | Dark Data | 5.6:1 AA · white text FAILS (2.8:1) |
148
+ | Success | `#11821b` | White | 5.0:1 AA |
149
+ | Info / call-out | `#352361` | White | 13.4:1 AAA |
150
+ | Text link / small text | `#0080be` | is the text | WIP — ~97% of AA on white (4.34:1), deliberately close to EE Blue; strict-AA fallback #007cb9 |
151
+ | Interaction state (hover/active) | `#a1c8e2` | Dark Data | 8.8:1 AAA |
152
+ | Error, on dark surfaces | `#d98786` | — | lighter step for on-dark text |
153
+ | Success, on dark surfaces | `#72b070` | — | lighter step for on-dark text |
154
+ | Info, on dark surfaces | `#a49ec1` | — | lighter step for on-dark text |
155
+
156
+ ---
157
+
158
+ ## Data Visualisation — Categorical Order
159
+
160
+ Tier 3 sequence for charts/data viz only. Use in order; stop when there are enough categories.
161
+ CVD-checked, lightness-separated. Never place EE Blue and Transform Teal adjacent.
162
+
163
+ 1. **EE Blue** `#1795d4`
164
+ 2. **Equal Ember** `#f07c00`
165
+ 3. **Tech Blue** `#22567c`
166
+ 4. **Logic Lime** `#b1d923`
167
+ 5. **Packet Plum** `#853d7b`
168
+ 6. **Edge Blue** `#a1c8e2`
169
+ 7. **Runtime Red** `#a3152b`
170
+ 8. **Signal Yellow** `#ffd930`
171
+
172
+ ---
173
+
174
+ ## Pairing Summary
175
+
176
+ **Dark surfaces (white text):** Index Indigo, Packet Plum, Runtime Red, Uptime Green, Server Slate, Dark Data.
177
+
178
+ **Bright surfaces (Dark Data text):** Logic Lime, Edge Blue, Signal Yellow, Cursor Coral, Patch Peach, EE Blue, Transform Teal, Equal Ember.
179
+
180
+ **Do not pair:**
181
+ - EE Blue `#1795d4` and Transform Teal `#269c9e` adjacent in a categorical sequence — 1.01:1 luminance, indistinguishable in greyscale/CVD.
182
+ - The Fruity combination (Runtime Red, Cursor Coral, Uptime Green, Logic Lime, Signal Yellow, Patch Peach) for any data encoding — collapses under protanopia. Decoration only.
183
+ - White text on Equal Ember `#f07c00` — fails at 2.8:1; use Dark Data.
109
184
 
110
185
  ---
111
186