@flowstack-ui/brick 0.1.11 → 0.1.12

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 (129) hide show
  1. package/README.md +1 -1
  2. package/dist/agents/blockquote.json +68 -0
  3. package/dist/agents/blockquote.md +42 -0
  4. package/dist/agents/code-block.json +20 -4
  5. package/dist/agents/code-block.md +9 -4
  6. package/dist/agents/coverage.json +1211 -199
  7. package/dist/agents/em.json +57 -0
  8. package/dist/agents/em.md +39 -0
  9. package/dist/agents/highlight.json +73 -0
  10. package/dist/agents/highlight.md +43 -0
  11. package/dist/agents/interface-composition.json +14 -7
  12. package/dist/agents/interface-composition.md +5 -2
  13. package/dist/agents/kbd.json +62 -0
  14. package/dist/agents/kbd.md +40 -0
  15. package/dist/agents/layer-selection.json +125 -5
  16. package/dist/agents/layer-selection.md +12 -2
  17. package/dist/agents/manifest.json +37 -1
  18. package/dist/agents/mark.json +56 -0
  19. package/dist/agents/mark.md +38 -0
  20. package/dist/agents/prose.json +82 -0
  21. package/dist/agents/prose.md +50 -0
  22. package/dist/blockquote.d.ts +2 -0
  23. package/dist/blockquote.d.ts.map +1 -0
  24. package/dist/blockquote.js +2 -0
  25. package/dist/blockquote.js.map +1 -0
  26. package/dist/components/blockquote/Blockquote.d.ts +33 -0
  27. package/dist/components/blockquote/Blockquote.d.ts.map +1 -0
  28. package/dist/components/blockquote/Blockquote.js +36 -0
  29. package/dist/components/blockquote/Blockquote.js.map +1 -0
  30. package/dist/components/blockquote/index.d.ts +2 -0
  31. package/dist/components/blockquote/index.d.ts.map +1 -0
  32. package/dist/components/blockquote/index.js +2 -0
  33. package/dist/components/blockquote/index.js.map +1 -0
  34. package/dist/components/code-block/CodeBlock.d.ts +33 -0
  35. package/dist/components/code-block/CodeBlock.d.ts.map +1 -1
  36. package/dist/components/code-block/CodeBlock.js +60 -6
  37. package/dist/components/code-block/CodeBlock.js.map +1 -1
  38. package/dist/components/code-block/context.d.ts +2 -0
  39. package/dist/components/code-block/context.d.ts.map +1 -1
  40. package/dist/components/code-block/context.js.map +1 -1
  41. package/dist/components/code-block/index.d.ts +1 -1
  42. package/dist/components/code-block/index.d.ts.map +1 -1
  43. package/dist/components/code-block/index.js +1 -1
  44. package/dist/components/code-block/index.js.map +1 -1
  45. package/dist/components/em/Em.d.ts +9 -0
  46. package/dist/components/em/Em.d.ts.map +1 -0
  47. package/dist/components/em/Em.js +10 -0
  48. package/dist/components/em/Em.js.map +1 -0
  49. package/dist/components/em/index.d.ts +2 -0
  50. package/dist/components/em/index.d.ts.map +1 -0
  51. package/dist/components/em/index.js +2 -0
  52. package/dist/components/em/index.js.map +1 -0
  53. package/dist/components/highlight/Highlight.d.ts +9 -0
  54. package/dist/components/highlight/Highlight.d.ts.map +1 -0
  55. package/dist/components/highlight/Highlight.js +10 -0
  56. package/dist/components/highlight/Highlight.js.map +1 -0
  57. package/dist/components/highlight/index.d.ts +2 -0
  58. package/dist/components/highlight/index.d.ts.map +1 -0
  59. package/dist/components/highlight/index.js +2 -0
  60. package/dist/components/highlight/index.js.map +1 -0
  61. package/dist/components/kbd/Kbd.d.ts +13 -0
  62. package/dist/components/kbd/Kbd.d.ts.map +1 -0
  63. package/dist/components/kbd/Kbd.js +8 -0
  64. package/dist/components/kbd/Kbd.js.map +1 -0
  65. package/dist/components/kbd/index.d.ts +2 -0
  66. package/dist/components/kbd/index.d.ts.map +1 -0
  67. package/dist/components/kbd/index.js +2 -0
  68. package/dist/components/kbd/index.js.map +1 -0
  69. package/dist/components/mark/Mark.d.ts +13 -0
  70. package/dist/components/mark/Mark.d.ts.map +1 -0
  71. package/dist/components/mark/Mark.js +8 -0
  72. package/dist/components/mark/Mark.js.map +1 -0
  73. package/dist/components/mark/index.d.ts +2 -0
  74. package/dist/components/mark/index.d.ts.map +1 -0
  75. package/dist/components/mark/index.js +2 -0
  76. package/dist/components/mark/index.js.map +1 -0
  77. package/dist/components/prose/Prose.d.ts +12 -0
  78. package/dist/components/prose/Prose.d.ts.map +1 -0
  79. package/dist/components/prose/Prose.js +19 -0
  80. package/dist/components/prose/Prose.js.map +1 -0
  81. package/dist/components/prose/index.d.ts +2 -0
  82. package/dist/components/prose/index.d.ts.map +1 -0
  83. package/dist/components/prose/index.js +2 -0
  84. package/dist/components/prose/index.js.map +1 -0
  85. package/dist/em.d.ts +2 -0
  86. package/dist/em.d.ts.map +1 -0
  87. package/dist/em.js +2 -0
  88. package/dist/em.js.map +1 -0
  89. package/dist/highlight.d.ts +2 -0
  90. package/dist/highlight.d.ts.map +1 -0
  91. package/dist/highlight.js +2 -0
  92. package/dist/highlight.js.map +1 -0
  93. package/dist/index.d.ts +7 -1
  94. package/dist/index.d.ts.map +1 -1
  95. package/dist/index.js +7 -1
  96. package/dist/index.js.map +1 -1
  97. package/dist/kbd.d.ts +2 -0
  98. package/dist/kbd.d.ts.map +1 -0
  99. package/dist/kbd.js +2 -0
  100. package/dist/kbd.js.map +1 -0
  101. package/dist/mark.d.ts +2 -0
  102. package/dist/mark.d.ts.map +1 -0
  103. package/dist/mark.js +2 -0
  104. package/dist/mark.js.map +1 -0
  105. package/dist/prose.d.ts +2 -0
  106. package/dist/prose.d.ts.map +1 -0
  107. package/dist/prose.js +2 -0
  108. package/dist/prose.js.map +1 -0
  109. package/dist/styles/blockquote.css +2 -0
  110. package/dist/styles/blockquote.css.map +1 -0
  111. package/dist/styles/code-block.css +1 -1
  112. package/dist/styles/code-block.css.map +1 -1
  113. package/dist/styles/dropdown-menu.css.map +1 -1
  114. package/dist/styles/em.css +2 -0
  115. package/dist/styles/em.css.map +1 -0
  116. package/dist/styles/highlight.css +2 -0
  117. package/dist/styles/highlight.css.map +1 -0
  118. package/dist/styles/kbd.css +2 -0
  119. package/dist/styles/kbd.css.map +1 -0
  120. package/dist/styles/mark.css +2 -0
  121. package/dist/styles/mark.css.map +1 -0
  122. package/dist/styles/menubar.css.map +1 -1
  123. package/dist/styles/prose.css +2 -0
  124. package/dist/styles/prose.css.map +1 -0
  125. package/dist/styles/slider.css.map +1 -1
  126. package/dist/styles.css +1 -1
  127. package/dist/styles.css.map +1 -1
  128. package/dist/theme-contract.json +1418 -100
  129. package/package.json +36 -3
@@ -0,0 +1,57 @@
1
+ {
2
+ "schema": "flowstack.agent-component.v1",
3
+ "id": "em",
4
+ "name": "Em",
5
+ "package": "@flowstack-ui/brick",
6
+ "layer": "brick",
7
+ "kind": "component",
8
+ "purpose": "Apply native stress emphasis while preserving the surrounding Brick typography and foreground.",
9
+ "useWhen": [
10
+ "Words in a sentence need semantic stress emphasis that changes the meaning or cadence when spoken."
11
+ ],
12
+ "avoidWhen": [
13
+ {
14
+ "condition": "Text only needs an italic visual treatment without stress emphasis.",
15
+ "useInstead": "a deliberate application-owned visual recipe"
16
+ },
17
+ {
18
+ "condition": "Text needs importance rather than stress emphasis.",
19
+ "useInstead": "native strong inside the surrounding text owner"
20
+ }
21
+ ],
22
+ "composition": [
23
+ "Keep Em inside the Text, heading, link, or component content owner whose sentence it completes."
24
+ ],
25
+ "rules": [
26
+ {
27
+ "id": "em-native-semantics",
28
+ "level": "must",
29
+ "statement": "Use Em only for native stress emphasis and preserve its one em host; do not select it merely for italic paint."
30
+ },
31
+ {
32
+ "id": "em-inheritance",
33
+ "level": "must",
34
+ "statement": "Let Em inherit the surrounding typography and foreground rather than introducing a separate size, tone, or weight recipe."
35
+ },
36
+ {
37
+ "id": "em-css",
38
+ "level": "must",
39
+ "statement": "Load styles.css or core.css plus em.css."
40
+ }
41
+ ],
42
+ "commonMistakes": [
43
+ {
44
+ "mistake": "Using Em as a decorative italic label or replacing a sentence-level text owner with Em.",
45
+ "correction": "Keep Em inside meaningful surrounding copy and use it only when stress emphasis is semantically intended."
46
+ }
47
+ ],
48
+ "validation": [
49
+ "Confirm one native em element, inherited metrics and foreground, readable forced colors, normal selection and copy, and no tab stop or role.",
50
+ "Check nested sentence flow, localization, zoom, RTL, and CSS delivery."
51
+ ],
52
+ "related": [
53
+ "text",
54
+ "link",
55
+ "interface-composition"
56
+ ]
57
+ }
@@ -0,0 +1,39 @@
1
+ # Em agent guide
2
+
3
+ ## Purpose
4
+
5
+ Apply native stress emphasis while preserving the surrounding Brick typography and foreground.
6
+
7
+ ## Use when
8
+
9
+ - Words in a sentence need semantic stress emphasis that changes the meaning or cadence when spoken.
10
+
11
+ ## Choose something else when
12
+
13
+ - Text only needs an italic visual treatment without stress emphasis. Use a deliberate application-owned visual recipe.
14
+ - Text needs importance rather than stress emphasis. Use native strong inside the surrounding text owner.
15
+
16
+ ## Required composition
17
+
18
+ - Keep Em inside the Text, heading, link, or component content owner whose sentence it completes.
19
+
20
+ ## Rules
21
+
22
+ - **MUST:** Use Em only for native stress emphasis and preserve its one em host; do not select it merely for italic paint.
23
+ - **MUST:** Let Em inherit the surrounding typography and foreground rather than introducing a separate size, tone, or weight recipe.
24
+ - **MUST:** Load styles.css or core.css plus em.css.
25
+
26
+ ## Common mistakes
27
+
28
+ - **Avoid:** Using Em as a decorative italic label or replacing a sentence-level text owner with Em. **Instead:** Keep Em inside meaningful surrounding copy and use it only when stress emphasis is semantically intended.
29
+
30
+ ## Validation checklist
31
+
32
+ - Confirm one native em element, inherited metrics and foreground, readable forced colors, normal selection and copy, and no tab stop or role.
33
+ - Check nested sentence flow, localization, zoom, RTL, and CSS delivery.
34
+
35
+ ## Related guidance
36
+
37
+ - `text`
38
+ - `link`
39
+ - `interface-composition`
@@ -0,0 +1,73 @@
1
+ {
2
+ "schema": "flowstack.agent-component.v1",
3
+ "id": "highlight",
4
+ "name": "Highlight",
5
+ "package": "@flowstack-ui/brick",
6
+ "layer": "brick",
7
+ "kind": "component",
8
+ "purpose": "Discover literal queries in plain text through exact Atom behavior and render finished semantic match styling.",
9
+ "useWhen": [
10
+ "One plain text string needs deterministic visible query matches without recreating escaping, overlap, case, or whole-word behavior."
11
+ ],
12
+ "avoidWhen": [
13
+ {
14
+ "condition": "The relevant passage is already selected by the author.",
15
+ "useInstead": "Mark"
16
+ },
17
+ {
18
+ "condition": "Content is arbitrary React nodes or the application needs active result navigation.",
19
+ "useInstead": "application-owned rich-content traversal or search navigation"
20
+ }
21
+ ],
22
+ "composition": [
23
+ "Pass plain text through text and literal query values through query; keep surrounding sentence typography on Text or another content owner.",
24
+ "Let Highlight delegate all matching to Atom and keep search input, active result, counters, and navigation in the application."
25
+ ],
26
+ "rules": [
27
+ {
28
+ "id": "highlight-atom",
29
+ "level": "must",
30
+ "statement": "Use exact Atom Highlight behavior; do not copy or replace its segmentation, escaping, overlap, or exact-match logic."
31
+ },
32
+ {
33
+ "id": "highlight-plain-text",
34
+ "level": "must",
35
+ "statement": "Use Highlight only for plain text and literal queries, never by flattening or cloning arbitrary React content."
36
+ },
37
+ {
38
+ "id": "highlight-native",
39
+ "level": "must",
40
+ "statement": "Preserve Brick's fixed native span root and Atom-generated native mark matches."
41
+ },
42
+ {
43
+ "id": "highlight-recipes",
44
+ "level": "must",
45
+ "statement": "Select only the documented subtle, solid, or underline variant and accent or neutral tone."
46
+ },
47
+ {
48
+ "id": "highlight-state",
49
+ "level": "must",
50
+ "statement": "Keep search state, active-result navigation, counts, keyboard commands, and announcements outside Highlight."
51
+ },
52
+ {
53
+ "id": "highlight-css",
54
+ "level": "must",
55
+ "statement": "Load styles.css or core.css plus highlight.css."
56
+ }
57
+ ],
58
+ "commonMistakes": [
59
+ {
60
+ "mistake": "Using Mark or a consumer regular expression to discover query matches.",
61
+ "correction": "Pass the plain string and literal query to Highlight so exact Atom behavior owns segmentation."
62
+ }
63
+ ],
64
+ "validation": [
65
+ "Confirm literal, empty, repeated, overlapping, punctuation, Unicode, case-sensitive, whole-word, and first-match-only inputs preserve original text and copy order.",
66
+ "Confirm native span and mark output, closed recipes, forced colors, wrap, zoom, text spacing, localization, RTL, SSR, refs, and CSS delivery without focus or interaction."
67
+ ],
68
+ "related": [
69
+ "mark",
70
+ "text",
71
+ "interface-composition"
72
+ ]
73
+ }
@@ -0,0 +1,43 @@
1
+ # Highlight agent guide
2
+
3
+ ## Purpose
4
+
5
+ Discover literal queries in plain text through exact Atom behavior and render finished semantic match styling.
6
+
7
+ ## Use when
8
+
9
+ - One plain text string needs deterministic visible query matches without recreating escaping, overlap, case, or whole-word behavior.
10
+
11
+ ## Choose something else when
12
+
13
+ - The relevant passage is already selected by the author. Use Mark.
14
+ - Content is arbitrary React nodes or the application needs active result navigation. Use application-owned rich-content traversal or search navigation.
15
+
16
+ ## Required composition
17
+
18
+ - Pass plain text through text and literal query values through query; keep surrounding sentence typography on Text or another content owner.
19
+ - Let Highlight delegate all matching to Atom and keep search input, active result, counters, and navigation in the application.
20
+
21
+ ## Rules
22
+
23
+ - **MUST:** Use exact Atom Highlight behavior; do not copy or replace its segmentation, escaping, overlap, or exact-match logic.
24
+ - **MUST:** Use Highlight only for plain text and literal queries, never by flattening or cloning arbitrary React content.
25
+ - **MUST:** Preserve Brick's fixed native span root and Atom-generated native mark matches.
26
+ - **MUST:** Select only the documented subtle, solid, or underline variant and accent or neutral tone.
27
+ - **MUST:** Keep search state, active-result navigation, counts, keyboard commands, and announcements outside Highlight.
28
+ - **MUST:** Load styles.css or core.css plus highlight.css.
29
+
30
+ ## Common mistakes
31
+
32
+ - **Avoid:** Using Mark or a consumer regular expression to discover query matches. **Instead:** Pass the plain string and literal query to Highlight so exact Atom behavior owns segmentation.
33
+
34
+ ## Validation checklist
35
+
36
+ - Confirm literal, empty, repeated, overlapping, punctuation, Unicode, case-sensitive, whole-word, and first-match-only inputs preserve original text and copy order.
37
+ - Confirm native span and mark output, closed recipes, forced colors, wrap, zoom, text spacing, localization, RTL, SSR, refs, and CSS delivery without focus or interaction.
38
+
39
+ ## Related guidance
40
+
41
+ - `mark`
42
+ - `text`
43
+ - `interface-composition`
@@ -260,12 +260,12 @@
260
260
  },
261
261
  {
262
262
  "intent": "extended quotation and attribution",
263
- "use": "native figure, blockquote, and figcaption with Brick text content",
264
- "note": "Keep blockquote and figcaption as direct figure children when they form one self-contained unit, keep attribution outside the quoted content, and use cite only for the title of a referenced work.",
263
+ "use": "Blockquote",
264
+ "note": "Keep Content and Caption as siblings in Root, put the source URL on Content, and use Cite only for a referenced work or source.",
265
265
  "destinations": [
266
266
  {
267
- "kind": "native-application",
268
- "id": "native-quotation"
267
+ "kind": "component",
268
+ "id": "blockquote"
269
269
  },
270
270
  {
271
271
  "kind": "component",
@@ -341,9 +341,14 @@
341
341
  "statement": "Preserve document landmarks and semantic elements when Brick does not provide an owner; Brick-first is not permission to erase HTML meaning."
342
342
  },
343
343
  {
344
- "id": "interface-native-quotation",
344
+ "id": "interface-blockquote",
345
+ "level": "must",
346
+ "statement": "For an extended quotation, use Blockquote and preserve its figure Root, blockquote Content, sibling figcaption Caption, source URL, and cited-work semantics."
347
+ },
348
+ {
349
+ "id": "interface-prose-trust",
345
350
  "level": "must",
346
- "statement": "For an extended quotation, preserve native blockquote semantics and keep attribution outside the quoted content; when figure and figcaption associate the pair, keep blockquote and figcaption as direct figure children, use Brick content components inside them, and add narrow Block or application CSS only after supported composition cannot express the remaining relationship."
351
+ "statement": "Use Prose only after external content has been sanitized and parsed into trusted React children; keep heading hierarchy, landmarks, link destinations, media alternatives, table semantics, and trust policy application-owned."
347
352
  },
348
353
  {
349
354
  "id": "interface-responsive-navigation-data",
@@ -515,6 +520,8 @@
515
520
  "show",
516
521
  "hide",
517
522
  "accordion",
518
- "list"
523
+ "list",
524
+ "blockquote",
525
+ "highlight"
519
526
  ]
520
527
  }
@@ -32,7 +32,7 @@ Build complete interfaces from Brick's structural, content, navigation, action,
32
32
  - **grouped application actions:** use Toolbar. Do not use AppBar.Toolbar as an ARIA toolbar.
33
33
  - **several related disclosure sections:** use Accordion. Preserve Header, Trigger, Content, and ContentInner ownership; use Collapsible for one disclosure.
34
34
  - **semantic item or sequence content:** use List. Use structured row parts only when needed and keep Trailing compact on narrow screens.
35
- - **extended quotation and attribution:** use native figure, blockquote, and figcaption with Brick text content. Keep blockquote and figcaption as direct figure children when they form one self-contained unit, keep attribution outside the quoted content, and use cite only for the title of a referenced work.
35
+ - **extended quotation and attribution:** use Blockquote. Keep Content and Caption as siblings in Root, put the source URL on Content, and use Cite only for a referenced work or source.
36
36
 
37
37
  ## Rules
38
38
 
@@ -49,7 +49,8 @@ Build complete interfaces from Brick's structural, content, navigation, action,
49
49
  - **MUST:** Keep a real layout-item wrapper when it establishes flex or grid participation or the definite parent size required by ScrollArea, Carousel fill, or Image fill; asChild is not a wrapper-removal goal by itself.
50
50
  - **MUST:** Do not use Stack, Surface, Button, or another convenient component when a more specific Brick navigation, media, content, or interaction component owns the job.
51
51
  - **MUST:** Preserve document landmarks and semantic elements when Brick does not provide an owner; Brick-first is not permission to erase HTML meaning.
52
- - **MUST:** For an extended quotation, preserve native blockquote semantics and keep attribution outside the quoted content; when figure and figcaption associate the pair, keep blockquote and figcaption as direct figure children, use Brick content components inside them, and add narrow Block or application CSS only after supported composition cannot express the remaining relationship.
52
+ - **MUST:** For an extended quotation, use Blockquote and preserve its figure Root, blockquote Content, sibling figcaption Caption, source URL, and cited-work semantics.
53
+ - **MUST:** Use Prose only after external content has been sanitized and parsed into trusted React children; keep heading hierarchy, landmarks, link destinations, media alternatives, table semantics, and trust policy application-owned.
53
54
  - **MUST:** When desktop and mobile require distinct navigation components, share application-owned destination labels, hrefs, values, and ordering while preserving each pattern's correct Brick anatomy; do not duplicate navigation content or force one interaction tree across breakpoints.
54
55
  - **MUST:** Use Show and Hide for first-paint visibility; when a controlled interactive overlay may remain open across a breakpoint, synchronize its application state at that boundary so a hidden modal cannot retain focus, scroll lock, or isolation.
55
56
  - **SHOULD:** Express reusable brand values through semantic Brick tokens and a theme rather than repeating literal application values.
@@ -132,3 +133,5 @@ Emit this record for every native/framework fallback or direct stable-hook decla
132
133
  - `hide`
133
134
  - `accordion`
134
135
  - `list`
136
+ - `blockquote`
137
+ - `highlight`
@@ -0,0 +1,62 @@
1
+ {
2
+ "schema": "flowstack.agent-component.v1",
3
+ "id": "kbd",
4
+ "name": "Kbd",
5
+ "package": "@flowstack-ui/brick",
6
+ "layer": "brick",
7
+ "kind": "component",
8
+ "purpose": "Render native keyboard-input notation with finished Brick sizing and visual recipes.",
9
+ "useWhen": [
10
+ "Copy needs to name a physical or virtual keyboard key or show a compact authored key sequence."
11
+ ],
12
+ "avoidWhen": [
13
+ {
14
+ "condition": "The application must register or execute a shortcut.",
15
+ "useInstead": "application-owned keyboard behavior"
16
+ },
17
+ {
18
+ "condition": "The content is a technical literal rather than keyboard input.",
19
+ "useInstead": "Code"
20
+ }
21
+ ],
22
+ "composition": [
23
+ "Keep Kbd inside meaningful surrounding copy or repeat Kbd for each authored key in a sequence with visible separators outside the key hosts."
24
+ ],
25
+ "rules": [
26
+ {
27
+ "id": "kbd-native",
28
+ "level": "must",
29
+ "statement": "Preserve the one native kbd host and use it only for keyboard-input notation."
30
+ },
31
+ {
32
+ "id": "kbd-passive",
33
+ "level": "must",
34
+ "statement": "Do not register shortcuts, listen for keys, translate platform labels, or add interaction inside Kbd."
35
+ },
36
+ {
37
+ "id": "kbd-recipes",
38
+ "level": "must",
39
+ "statement": "Select only the documented raised, outline, subtle, or plain variant and sm, md, or lg size."
40
+ },
41
+ {
42
+ "id": "kbd-css",
43
+ "level": "must",
44
+ "statement": "Load styles.css or core.css plus kbd.css."
45
+ }
46
+ ],
47
+ "commonMistakes": [
48
+ {
49
+ "mistake": "Putting an entire shortcut such as Ctrl+Shift+P inside one Kbd host without authored separation.",
50
+ "correction": "Use one Kbd per key and keep visible separators in the surrounding content owner."
51
+ }
52
+ ],
53
+ "validation": [
54
+ "Confirm native kbd semantics, closed recipes, readable key sequences, selection and copy, forced colors, zoom, localization, RTL, and CSS delivery.",
55
+ "Confirm Kbd adds no tab stop, role, shortcut listener, or platform detection."
56
+ ],
57
+ "related": [
58
+ "code",
59
+ "text",
60
+ "interface-composition"
61
+ ]
62
+ }
@@ -0,0 +1,40 @@
1
+ # Kbd agent guide
2
+
3
+ ## Purpose
4
+
5
+ Render native keyboard-input notation with finished Brick sizing and visual recipes.
6
+
7
+ ## Use when
8
+
9
+ - Copy needs to name a physical or virtual keyboard key or show a compact authored key sequence.
10
+
11
+ ## Choose something else when
12
+
13
+ - The application must register or execute a shortcut. Use application-owned keyboard behavior.
14
+ - The content is a technical literal rather than keyboard input. Use Code.
15
+
16
+ ## Required composition
17
+
18
+ - Keep Kbd inside meaningful surrounding copy or repeat Kbd for each authored key in a sequence with visible separators outside the key hosts.
19
+
20
+ ## Rules
21
+
22
+ - **MUST:** Preserve the one native kbd host and use it only for keyboard-input notation.
23
+ - **MUST:** Do not register shortcuts, listen for keys, translate platform labels, or add interaction inside Kbd.
24
+ - **MUST:** Select only the documented raised, outline, subtle, or plain variant and sm, md, or lg size.
25
+ - **MUST:** Load styles.css or core.css plus kbd.css.
26
+
27
+ ## Common mistakes
28
+
29
+ - **Avoid:** Putting an entire shortcut such as Ctrl+Shift+P inside one Kbd host without authored separation. **Instead:** Use one Kbd per key and keep visible separators in the surrounding content owner.
30
+
31
+ ## Validation checklist
32
+
33
+ - Confirm native kbd semantics, closed recipes, readable key sequences, selection and copy, forced colors, zoom, localization, RTL, and CSS delivery.
34
+ - Confirm Kbd adds no tab stop, role, shortcut listener, or platform detection.
35
+
36
+ ## Related guidance
37
+
38
+ - `code`
39
+ - `text`
40
+ - `interface-composition`
@@ -36,14 +36,125 @@
36
36
  }
37
37
  ]
38
38
  },
39
+ {
40
+ "intent": "stress emphasis inside meaningful copy",
41
+ "use": "Em",
42
+ "note": "Keep Em inside the surrounding Text or component content owner and do not use it only for decorative italics.",
43
+ "destinations": [
44
+ {
45
+ "kind": "component",
46
+ "id": "em"
47
+ },
48
+ {
49
+ "kind": "component",
50
+ "id": "text"
51
+ }
52
+ ]
53
+ },
54
+ {
55
+ "intent": "static authored relevance inside meaningful copy",
56
+ "use": "Mark",
57
+ "note": "Choose Highlight when a query must discover and segment matches; use Mark only when the author already knows the relevant passage.",
58
+ "destinations": [
59
+ {
60
+ "kind": "component",
61
+ "id": "mark"
62
+ },
63
+ {
64
+ "kind": "component",
65
+ "id": "highlight"
66
+ },
67
+ {
68
+ "kind": "component",
69
+ "id": "text"
70
+ }
71
+ ]
72
+ },
73
+ {
74
+ "intent": "literal query matches inside one plain text string",
75
+ "use": "Highlight",
76
+ "note": "Pass plain text and literal queries to exact Atom-backed matching; keep rich-content traversal, search state, and active-result navigation in the application.",
77
+ "destinations": [
78
+ {
79
+ "kind": "component",
80
+ "id": "highlight"
81
+ },
82
+ {
83
+ "kind": "component",
84
+ "id": "mark"
85
+ },
86
+ {
87
+ "kind": "component",
88
+ "id": "text"
89
+ }
90
+ ]
91
+ },
92
+ {
93
+ "intent": "trusted long-form React content with coherent descendant typography",
94
+ "use": "Prose",
95
+ "note": "Sanitize and parse external content before it reaches Prose; keep document semantics and trust policy in the application, and use direct Brick components for richer anatomy.",
96
+ "destinations": [
97
+ {
98
+ "kind": "component",
99
+ "id": "prose"
100
+ },
101
+ {
102
+ "kind": "component",
103
+ "id": "text"
104
+ },
105
+ {
106
+ "kind": "component",
107
+ "id": "link"
108
+ },
109
+ {
110
+ "kind": "component",
111
+ "id": "list"
112
+ },
113
+ {
114
+ "kind": "component",
115
+ "id": "blockquote"
116
+ },
117
+ {
118
+ "kind": "component",
119
+ "id": "code-block"
120
+ },
121
+ {
122
+ "kind": "component",
123
+ "id": "table"
124
+ },
125
+ {
126
+ "kind": "component",
127
+ "id": "image"
128
+ }
129
+ ]
130
+ },
131
+ {
132
+ "intent": "keyboard-input notation inside meaningful copy",
133
+ "use": "Kbd",
134
+ "note": "Repeat one Kbd per authored key and keep visible separators outside; shortcut behavior and platform-label policy remain application-owned.",
135
+ "destinations": [
136
+ {
137
+ "kind": "component",
138
+ "id": "kbd"
139
+ },
140
+ {
141
+ "kind": "component",
142
+ "id": "text"
143
+ },
144
+ {
145
+ "kind": "component",
146
+ "id": "code"
147
+ }
148
+ ]
149
+ },
39
150
  {
40
151
  "intent": "extended quotation with visible attribution",
41
- "use": "native blockquote with Brick text content",
42
- "note": "Keep attribution outside blockquote; when the quotation and attribution form one self-contained unit, use native figure with direct blockquote and figcaption children. Cite names a referenced work, not the person quoted.",
152
+ "use": "Blockquote",
153
+ "note": "Keep Content and Caption as siblings in Root, put the source URL on Content, and use Cite for a referenced work or source rather than merely a person's name.",
43
154
  "destinations": [
44
155
  {
45
- "kind": "native-application",
46
- "id": "native-quotation"
156
+ "kind": "component",
157
+ "id": "blockquote"
47
158
  },
48
159
  {
49
160
  "kind": "component",
@@ -148,11 +259,15 @@
148
259
  {
149
260
  "intent": "preserved multi-line technical source",
150
261
  "use": "Code Block",
151
- "note": "Keep syntax tokenization in a consumer adapter and pass the exact plain source separately for copy behavior.",
262
+ "note": "Keep syntax tokenization in a consumer adapter, pass the exact plain source separately for copy behavior, author line metadata explicitly, and use the bounded/collapse contract for long source.",
152
263
  "destinations": [
153
264
  {
154
265
  "kind": "component",
155
266
  "id": "code-block"
267
+ },
268
+ {
269
+ "kind": "component",
270
+ "id": "collapsible"
156
271
  }
157
272
  ]
158
273
  },
@@ -1233,6 +1348,11 @@
1233
1348
  "stack",
1234
1349
  "grid",
1235
1350
  "text",
1351
+ "em",
1352
+ "mark",
1353
+ "highlight",
1354
+ "kbd",
1355
+ "blockquote",
1236
1356
  "image",
1237
1357
  "aspect-ratio",
1238
1358
  "code-block",
@@ -16,14 +16,19 @@ Choose the correct FLOWSTACK layer and require Brick-first composition when buil
16
16
 
17
17
  - **headings, paragraphs, captions, and eyebrows:** use Heading, Paragraph, Caption, or Eyebrow. Give Heading an explicit semantic level and choose its visual variant independently.
18
18
  - **other text with Brick typography:** use Text. Choose the semantic rendered element through its public API and author the intended letter case in content.
19
- - **extended quotation with visible attribution:** use native blockquote with Brick text content. Keep attribution outside blockquote; when the quotation and attribution form one self-contained unit, use native figure with direct blockquote and figcaption children. Cite names a referenced work, not the person quoted.
19
+ - **stress emphasis inside meaningful copy:** use Em. Keep Em inside the surrounding Text or component content owner and do not use it only for decorative italics.
20
+ - **static authored relevance inside meaningful copy:** use Mark. Choose Highlight when a query must discover and segment matches; use Mark only when the author already knows the relevant passage.
21
+ - **literal query matches inside one plain text string:** use Highlight. Pass plain text and literal queries to exact Atom-backed matching; keep rich-content traversal, search state, and active-result navigation in the application.
22
+ - **trusted long-form React content with coherent descendant typography:** use Prose. Sanitize and parse external content before it reaches Prose; keep document semantics and trust policy in the application, and use direct Brick components for richer anatomy.
23
+ - **keyboard-input notation inside meaningful copy:** use Kbd. Repeat one Kbd per authored key and keep visible separators outside; shortcut behavior and platform-label policy remain application-owned.
24
+ - **extended quotation with visible attribution:** use Blockquote. Keep Content and Caption as siblings in Root, put the source URL on Content, and use Cite for a referenced work or source rather than merely a person's name.
20
25
  - **one-dimensional alignment:** use Stack, HStack, or VStack. Use Grid for two-dimensional track relationships.
21
26
  - **bounded page width:** use Container. Use Surface or Card when the region also needs a visual boundary.
22
27
  - **top application or page bar:** use AppBar. Compose navigation and action components inside its sections.
23
28
  - **responsive presence:** use Show or Hide. Use CSS media visibility rather than rendering two JavaScript-controlled trees.
24
29
  - **image with resilient loading:** use Image. Use an adapter only when a framework image optimizer provides a measured capability Brick lacks.
25
30
  - **stable media or embed geometry before its content loads:** use AspectRatio. Choose Image when the asset owns resilient loading, Surface for a general visual boundary, and Skeleton for a temporary loading placeholder.
26
- - **preserved multi-line technical source:** use Code Block. Keep syntax tokenization in a consumer adapter and pass the exact plain source separately for copy behavior.
31
+ - **preserved multi-line technical source:** use Code Block. Keep syntax tokenization in a consumer adapter, pass the exact plain source separately for copy behavior, author line metadata explicitly, and use the bounded/collapse contract for long source.
27
32
  - **navigation destination:** use Link or Button with href. Use Link for ordinary navigation and Button only for an emphasized destination.
28
33
  - **grouped disclosure sections:** use Accordion. Choose Collapsible for one independent disclosure and Tabs for one shared switching panel.
29
34
  - **ordinary blocking task, form, settings flow, or focused information:** use Dialog. Choose AlertDialog for one urgent consequential decision and Drawer when the temporary task belongs at a screen edge.
@@ -97,6 +102,11 @@ Choose the correct FLOWSTACK layer and require Brick-first composition when buil
97
102
  - `stack`
98
103
  - `grid`
99
104
  - `text`
105
+ - `em`
106
+ - `mark`
107
+ - `highlight`
108
+ - `kbd`
109
+ - `blockquote`
100
110
  - `image`
101
111
  - `aspect-ratio`
102
112
  - `code-block`