@adres/mgda-ui 0.0.0-stage → 0.0.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.
- package/brand-knowledge.json +451 -0
- package/knowledge/accordion.md +135 -0
- package/knowledge/activity-rings.md +123 -0
- package/knowledge/alert.md +184 -0
- package/knowledge/answer-actions.md +217 -0
- package/knowledge/aspect-ratio.md +82 -0
- package/knowledge/avatar.md +158 -0
- package/knowledge/badge.md +172 -0
- package/knowledge/bar-graph.md +167 -0
- package/knowledge/bento-grid.md +115 -0
- package/knowledge/blockquote.md +153 -0
- package/knowledge/box-list.md +177 -0
- package/knowledge/bullet-list.md +128 -0
- package/knowledge/button-group.md +179 -0
- package/knowledge/button.md +231 -0
- package/knowledge/calendar.md +168 -0
- package/knowledge/card.md +321 -0
- package/knowledge/cards-nav.md +170 -0
- package/knowledge/chain-of-thought.md +164 -0
- package/knowledge/chat-container.md +135 -0
- package/knowledge/chat-message.md +224 -0
- package/knowledge/checkbox-card.md +172 -0
- package/knowledge/checkbox.md +111 -0
- package/knowledge/citations.md +241 -0
- package/knowledge/combobox.md +265 -0
- package/knowledge/countdown-pill.md +153 -0
- package/knowledge/cta.md +118 -0
- package/knowledge/data-list.md +173 -0
- package/knowledge/data-table.md +220 -0
- package/knowledge/dialog.md +249 -0
- package/knowledge/drawer.md +236 -0
- package/knowledge/dropdown-menu.md +238 -0
- package/knowledge/dropzone.md +153 -0
- package/knowledge/email-chips-input.md +161 -0
- package/knowledge/empty-state.md +106 -0
- package/knowledge/entity-header.md +166 -0
- package/knowledge/feature-grid.md +120 -0
- package/knowledge/feedback-bar.md +127 -0
- package/knowledge/footer.md +116 -0
- package/knowledge/heading.md +189 -0
- package/knowledge/hero.md +361 -0
- package/knowledge/input-button.md +187 -0
- package/knowledge/input-group.md +185 -0
- package/knowledge/input.md +256 -0
- package/knowledge/inset.md +177 -0
- package/knowledge/kpi-card.md +206 -0
- package/knowledge/list-nav.md +181 -0
- package/knowledge/logo-cloud.md +102 -0
- package/knowledge/media-gallery.md +158 -0
- package/knowledge/message-actions.md +175 -0
- package/knowledge/nav-sidebar.md +225 -0
- package/knowledge/number-stepper.md +159 -0
- package/knowledge/page-header.md +109 -0
- package/knowledge/pagination.md +225 -0
- package/knowledge/popover.md +159 -0
- package/knowledge/pricing.md +132 -0
- package/knowledge/progress.md +156 -0
- package/knowledge/prompt-input.md +337 -0
- package/knowledge/prompt-suggestions.md +168 -0
- package/knowledge/quota-bar.md +160 -0
- package/knowledge/quote.md +116 -0
- package/knowledge/radio-card.md +172 -0
- package/knowledge/radio-group.md +135 -0
- package/knowledge/reasoning.md +142 -0
- package/knowledge/search.md +131 -0
- package/knowledge/section-nav.md +162 -0
- package/knowledge/segmented-control.md +181 -0
- package/knowledge/select-button.md +205 -0
- package/knowledge/select.md +210 -0
- package/knowledge/separator.md +75 -0
- package/knowledge/shimmer-text.md +140 -0
- package/knowledge/sidebar.md +227 -0
- package/knowledge/skeleton.md +142 -0
- package/knowledge/slider.md +133 -0
- package/knowledge/slideshow.md +159 -0
- package/knowledge/source.md +156 -0
- package/knowledge/spinner.md +120 -0
- package/knowledge/stat-strip.md +128 -0
- package/knowledge/stats.md +117 -0
- package/knowledge/step-indicator.md +157 -0
- package/knowledge/switch.md +88 -0
- package/knowledge/table.md +190 -0
- package/knowledge/tabs.md +169 -0
- package/knowledge/testimonials.md +115 -0
- package/knowledge/text-link.md +192 -0
- package/knowledge/text.md +194 -0
- package/knowledge/thinking-bar.md +115 -0
- package/knowledge/thinking-steps.md +140 -0
- package/knowledge/toaster.md +127 -0
- package/knowledge/toggle.md +113 -0
- package/knowledge/tool-call-card.md +241 -0
- package/knowledge/tooltip.md +120 -0
- package/knowledge/top-nav.md +138 -0
- package/knowledge.json +19854 -0
- package/package.json +94 -4
- package/src/components/accordion.stories.tsx +46 -0
- package/src/components/accordion.tsx +74 -0
- package/src/components/activity-rings.stories.tsx +73 -0
- package/src/components/activity-rings.tsx +121 -0
- package/src/components/alert.stories.tsx +43 -0
- package/src/components/alert.tsx +132 -0
- package/src/components/answer-actions.stories.tsx +54 -0
- package/src/components/answer-actions.test.tsx +37 -0
- package/src/components/answer-actions.tsx +313 -0
- package/src/components/aspect-ratio.stories.tsx +32 -0
- package/src/components/aspect-ratio.tsx +5 -0
- package/src/components/avatar.stories.tsx +40 -0
- package/src/components/avatar.tsx +154 -0
- package/src/components/badge.stories.tsx +27 -0
- package/src/components/badge.tsx +63 -0
- package/src/components/bar-graph.stories.tsx +28 -0
- package/src/components/bar-graph.tsx +204 -0
- package/src/components/bento-grid.stories.tsx +23 -0
- package/src/components/bento-grid.tsx +67 -0
- package/src/components/blockquote.stories.tsx +28 -0
- package/src/components/blockquote.tsx +88 -0
- package/src/components/box-list.stories.tsx +25 -0
- package/src/components/box-list.tsx +108 -0
- package/src/components/bullet-list.stories.tsx +22 -0
- package/src/components/bullet-list.tsx +101 -0
- package/src/components/button-group.stories.tsx +31 -0
- package/src/components/button-group.tsx +156 -0
- package/src/components/button.stories.tsx +66 -0
- package/src/components/button.test.ts +17 -0
- package/src/components/button.tsx +139 -0
- package/src/components/calendar.stories.tsx +25 -0
- package/src/components/calendar.tsx +367 -0
- package/src/components/card.stories.tsx +44 -0
- package/src/components/card.tsx +392 -0
- package/src/components/cards-nav.stories.tsx +35 -0
- package/src/components/cards-nav.tsx +115 -0
- package/src/components/chain-of-thought.stories.tsx +67 -0
- package/src/components/chain-of-thought.test.tsx +50 -0
- package/src/components/chain-of-thought.tsx +170 -0
- package/src/components/chat-container.stories.tsx +47 -0
- package/src/components/chat-container.test.tsx +49 -0
- package/src/components/chat-container.tsx +222 -0
- package/src/components/chat-message.stories.tsx +52 -0
- package/src/components/chat-message.test.tsx +36 -0
- package/src/components/chat-message.tsx +163 -0
- package/src/components/checkbox-card.stories.tsx +27 -0
- package/src/components/checkbox-card.tsx +200 -0
- package/src/components/checkbox.stories.tsx +26 -0
- package/src/components/checkbox.tsx +61 -0
- package/src/components/citations.stories.tsx +64 -0
- package/src/components/citations.test.tsx +61 -0
- package/src/components/citations.tsx +220 -0
- package/src/components/combobox.stories.tsx +184 -0
- package/src/components/combobox.test.tsx +82 -0
- package/src/components/combobox.tsx +407 -0
- package/src/components/countdown-pill.stories.tsx +24 -0
- package/src/components/countdown-pill.tsx +129 -0
- package/src/components/cta.stories.tsx +29 -0
- package/src/components/cta.tsx +52 -0
- package/src/components/data-list.stories.tsx +50 -0
- package/src/components/data-list.test.tsx +35 -0
- package/src/components/data-list.tsx +181 -0
- package/src/components/data-table.stories.tsx +29 -0
- package/src/components/data-table.tsx +200 -0
- package/src/components/dialog.stories.tsx +42 -0
- package/src/components/dialog.tsx +200 -0
- package/src/components/drawer.stories.tsx +48 -0
- package/src/components/drawer.tsx +385 -0
- package/src/components/dropdown-menu.stories.tsx +41 -0
- package/src/components/dropdown-menu.tsx +252 -0
- package/src/components/dropzone.stories.tsx +19 -0
- package/src/components/dropzone.tsx +250 -0
- package/src/components/email-chips-input.stories.tsx +135 -0
- package/src/components/email-chips-input.tsx +210 -0
- package/src/components/empty-state.stories.tsx +22 -0
- package/src/components/empty-state.tsx +35 -0
- package/src/components/entity-header.stories.tsx +43 -0
- package/src/components/entity-header.test.tsx +35 -0
- package/src/components/entity-header.tsx +92 -0
- package/src/components/feature-grid.stories.tsx +25 -0
- package/src/components/feature-grid.tsx +87 -0
- package/src/components/feedback-bar.stories.tsx +25 -0
- package/src/components/feedback-bar.test.tsx +24 -0
- package/src/components/feedback-bar.tsx +62 -0
- package/src/components/footer.stories.tsx +23 -0
- package/src/components/footer.tsx +78 -0
- package/src/components/heading.stories.tsx +45 -0
- package/src/components/heading.test.tsx +22 -0
- package/src/components/heading.tsx +77 -0
- package/src/components/hero.stories.tsx +38 -0
- package/src/components/hero.tsx +498 -0
- package/src/components/input-button.stories.tsx +19 -0
- package/src/components/input-button.tsx +112 -0
- package/src/components/input-group.stories.tsx +38 -0
- package/src/components/input-group.tsx +157 -0
- package/src/components/input.stories.tsx +31 -0
- package/src/components/input.tsx +284 -0
- package/src/components/inset.stories.tsx +29 -0
- package/src/components/inset.tsx +70 -0
- package/src/components/kpi-card.stories.tsx +29 -0
- package/src/components/kpi-card.tsx +284 -0
- package/src/components/list-nav.stories.tsx +22 -0
- package/src/components/list-nav.tsx +145 -0
- package/src/components/logo-cloud.stories.tsx +23 -0
- package/src/components/logo-cloud.tsx +42 -0
- package/src/components/media-gallery.stories.tsx +25 -0
- package/src/components/media-gallery.tsx +347 -0
- package/src/components/message-actions.stories.tsx +45 -0
- package/src/components/message-actions.test.tsx +32 -0
- package/src/components/message-actions.tsx +119 -0
- package/src/components/nav-sidebar.stories.tsx +58 -0
- package/src/components/nav-sidebar.test.tsx +54 -0
- package/src/components/nav-sidebar.tsx +462 -0
- package/src/components/number-stepper.stories.tsx +19 -0
- package/src/components/number-stepper.tsx +158 -0
- package/src/components/page-header.stories.tsx +25 -0
- package/src/components/page-header.tsx +64 -0
- package/src/components/pagination.stories.tsx +110 -0
- package/src/components/pagination.test.tsx +46 -0
- package/src/components/pagination.tsx +144 -0
- package/src/components/popover.stories.tsx +26 -0
- package/src/components/popover.tsx +62 -0
- package/src/components/pricing.stories.tsx +42 -0
- package/src/components/pricing.tsx +130 -0
- package/src/components/progress.stories.tsx +22 -0
- package/src/components/progress.tsx +189 -0
- package/src/components/prompt-input.stories.tsx +62 -0
- package/src/components/prompt-input.test.tsx +106 -0
- package/src/components/prompt-input.tsx +343 -0
- package/src/components/prompt-suggestions.stories.tsx +53 -0
- package/src/components/prompt-suggestions.test.tsx +37 -0
- package/src/components/prompt-suggestions.tsx +122 -0
- package/src/components/quota-bar.stories.tsx +19 -0
- package/src/components/quota-bar.tsx +191 -0
- package/src/components/quote.stories.tsx +18 -0
- package/src/components/quote.tsx +43 -0
- package/src/components/radio-card.stories.tsx +27 -0
- package/src/components/radio-card.tsx +225 -0
- package/src/components/radio-group.stories.tsx +32 -0
- package/src/components/radio-group.tsx +68 -0
- package/src/components/reasoning.stories.tsx +50 -0
- package/src/components/reasoning.test.tsx +48 -0
- package/src/components/reasoning.tsx +143 -0
- package/src/components/search.stories.tsx +18 -0
- package/src/components/search.tsx +133 -0
- package/src/components/section-nav.stories.tsx +59 -0
- package/src/components/section-nav.test.tsx +36 -0
- package/src/components/section-nav.tsx +146 -0
- package/src/components/segmented-control.stories.tsx +22 -0
- package/src/components/segmented-control.tsx +301 -0
- package/src/components/select-button.stories.tsx +27 -0
- package/src/components/select-button.tsx +174 -0
- package/src/components/select.stories.tsx +27 -0
- package/src/components/select.tsx +198 -0
- package/src/components/separator.stories.tsx +22 -0
- package/src/components/separator.tsx +23 -0
- package/src/components/shimmer-text.stories.tsx +23 -0
- package/src/components/shimmer-text.test.tsx +35 -0
- package/src/components/shimmer-text.tsx +43 -0
- package/src/components/sidebar.stories.tsx +25 -0
- package/src/components/sidebar.tsx +234 -0
- package/src/components/skeleton.stories.tsx +22 -0
- package/src/components/skeleton.tsx +96 -0
- package/src/components/slider.stories.tsx +20 -0
- package/src/components/slider.tsx +176 -0
- package/src/components/slideshow.stories.tsx +30 -0
- package/src/components/slideshow.tsx +291 -0
- package/src/components/source.stories.tsx +32 -0
- package/src/components/source.test.tsx +40 -0
- package/src/components/source.tsx +161 -0
- package/src/components/spinner.stories.tsx +19 -0
- package/src/components/spinner.tsx +76 -0
- package/src/components/stat-strip.stories.tsx +36 -0
- package/src/components/stat-strip.test.tsx +25 -0
- package/src/components/stat-strip.tsx +85 -0
- package/src/components/stats.stories.tsx +24 -0
- package/src/components/stats.tsx +83 -0
- package/src/components/step-indicator.stories.tsx +18 -0
- package/src/components/step-indicator.test.tsx +18 -0
- package/src/components/step-indicator.tsx +286 -0
- package/src/components/switch.stories.tsx +26 -0
- package/src/components/switch.tsx +32 -0
- package/src/components/table.stories.tsx +38 -0
- package/src/components/table.tsx +220 -0
- package/src/components/tabs.stories.tsx +25 -0
- package/src/components/tabs.tsx +276 -0
- package/src/components/testimonials.stories.tsx +22 -0
- package/src/components/testimonials.tsx +109 -0
- package/src/components/text-link.stories.tsx +47 -0
- package/src/components/text-link.test.tsx +18 -0
- package/src/components/text-link.tsx +88 -0
- package/src/components/text.stories.tsx +49 -0
- package/src/components/text.tsx +105 -0
- package/src/components/thinking-bar.stories.tsx +19 -0
- package/src/components/thinking-bar.test.tsx +27 -0
- package/src/components/thinking-bar.tsx +64 -0
- package/src/components/thinking-steps.stories.tsx +44 -0
- package/src/components/thinking-steps.test.tsx +42 -0
- package/src/components/thinking-steps.tsx +92 -0
- package/src/components/toaster.stories.tsx +80 -0
- package/src/components/toaster.tsx +36 -0
- package/src/components/toggle.stories.tsx +21 -0
- package/src/components/toggle.tsx +103 -0
- package/src/components/tool-call-card.stories.tsx +97 -0
- package/src/components/tool-call-card.test.tsx +88 -0
- package/src/components/tool-call-card.tsx +231 -0
- package/src/components/tooltip.stories.tsx +25 -0
- package/src/components/tooltip.tsx +43 -0
- package/src/components/top-nav.stories.tsx +20 -0
- package/src/components/top-nav.tsx +76 -0
- package/src/docs/Colors.stories.tsx +192 -0
- package/src/docs/GettingStarted.mdx +72 -0
- package/src/docs/Mcp.mdx +52 -0
- package/src/docs/Typography.stories.tsx +114 -0
- package/src/hooks/use-in-view.ts +32 -0
- package/src/hooks/use-reduced-motion.ts +26 -0
- package/src/index.ts +343 -0
- package/src/lib/cn.test.ts +67 -0
- package/src/lib/cn.ts +81 -0
- package/src/lib/motion.ts +109 -0
- package/src/lib/prefix-utilities.test.ts +56 -0
- package/src/lib/prefix-utilities.ts +50 -0
- package/src/styles/base.css +489 -0
- package/src/styles/motion.css +69 -0
- package/src/styles/overrides.css +44 -0
- package/src/styles/typography.css +173 -0
- package/src/theme/theme.css +391 -0
- package/src/theme/tokens.ts +29 -0
- package/src/theme/types.ts +26 -0
- package/README.md +0 -3
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
# >>> DERIVED - regenerated by `npm run knowledge:sync`. Do not edit. <<<
|
|
3
|
+
derived:
|
|
4
|
+
schemaVersion: 1
|
|
5
|
+
id: testimonials
|
|
6
|
+
sourceFile: packages/design-system/src/components/testimonials.tsx
|
|
7
|
+
client: true
|
|
8
|
+
category: marketing
|
|
9
|
+
categoryFromBarrel: marketing
|
|
10
|
+
barrelExported: true
|
|
11
|
+
importPath: "@adres/mgda-ui"
|
|
12
|
+
exports:
|
|
13
|
+
- name: Testimonial
|
|
14
|
+
kind: type
|
|
15
|
+
- name: Testimonials
|
|
16
|
+
kind: component
|
|
17
|
+
typeText: "({ className, eyebrow, title, items, columns, ...props }: TestimonialsProps) => Element"
|
|
18
|
+
- name: TestimonialsProps
|
|
19
|
+
kind: type
|
|
20
|
+
primaryExport: Testimonials
|
|
21
|
+
subcomponents: []
|
|
22
|
+
props:
|
|
23
|
+
Testimonials:
|
|
24
|
+
- name: columns
|
|
25
|
+
type: "2 | 3"
|
|
26
|
+
required: false
|
|
27
|
+
declaredIn: self
|
|
28
|
+
- name: eyebrow
|
|
29
|
+
type: ReactNode
|
|
30
|
+
required: false
|
|
31
|
+
declaredIn: self
|
|
32
|
+
- name: items
|
|
33
|
+
type: "Testimonial[]"
|
|
34
|
+
required: true
|
|
35
|
+
declaredIn: self
|
|
36
|
+
- name: title
|
|
37
|
+
type: ReactNode
|
|
38
|
+
required: false
|
|
39
|
+
declaredIn: self
|
|
40
|
+
extendsProps:
|
|
41
|
+
- "Omit<React.HTMLAttributes<HTMLElement>, \"title\">"
|
|
42
|
+
variants: {}
|
|
43
|
+
variantSource: none
|
|
44
|
+
compoundVariants: []
|
|
45
|
+
sizeMaps: []
|
|
46
|
+
dataSlots: []
|
|
47
|
+
dependsOn:
|
|
48
|
+
internal:
|
|
49
|
+
- card
|
|
50
|
+
lib:
|
|
51
|
+
- cn
|
|
52
|
+
- motion
|
|
53
|
+
hooks:
|
|
54
|
+
- use-reduced-motion
|
|
55
|
+
external:
|
|
56
|
+
- lucide-react
|
|
57
|
+
- motion/react
|
|
58
|
+
- react
|
|
59
|
+
contexts: []
|
|
60
|
+
stories:
|
|
61
|
+
- exportName: Default
|
|
62
|
+
id: components-testimonials--default
|
|
63
|
+
storybookTitle: Components/Testimonials
|
|
64
|
+
docsId: components-testimonials--documentation
|
|
65
|
+
argTypeOptions: {}
|
|
66
|
+
resolvedCleanly: true
|
|
67
|
+
contractHash: "5bfb9becebf2"
|
|
68
|
+
factsHash: "960d8c79406f"
|
|
69
|
+
# >>> AUTHORED - humans own everything below this line. <<<
|
|
70
|
+
status: stable
|
|
71
|
+
summary: "A grid of customer testimonial cards - quote, avatar or initial, name, role and company, and an optional star rating - with scroll-triggered stagger animation."
|
|
72
|
+
useWhen:
|
|
73
|
+
- "showcasing customer quotes as social proof on a marketing page"
|
|
74
|
+
useInstead:
|
|
75
|
+
- id: logo-cloud
|
|
76
|
+
when: "the social proof is company or brand logos, not attributed quotes"
|
|
77
|
+
related:
|
|
78
|
+
- logo-cloud
|
|
79
|
+
a11y:
|
|
80
|
+
notes:
|
|
81
|
+
- "Each card is a real figure/blockquote/figcaption - the quote, attribution, and card grouping all carry correct semantic structure without extra ARIA."
|
|
82
|
+
- "The star rating renders as plain decorative star icons with no accessible text equivalent, e.g. \"4 out of 5 stars\" - if the rating value itself needs to be announced to assistive tech, that is currently missing and would need to be added at the call site."
|
|
83
|
+
radixHandles: false
|
|
84
|
+
pitfalls:
|
|
85
|
+
- "avatar is optional - when omitted, the component falls back to a colored circle showing the first letter of name, not a placeholder image. Keep name meaningful even when no avatar is supplied, since it drives that fallback."
|
|
86
|
+
- "rating is on a 1-5 scale rendered as 5 stars total - passing a value outside that range still renders exactly 5 stars, just all filled or all unfilled depending on the comparison, since there is no clamping or validation."
|
|
87
|
+
- "role and company are joined with a middot only when at least one is present - passing just one of the two omits the separator entirely rather than leaving a dangling one."
|
|
88
|
+
- "columns only accepts 2 or 3 - there is no single-column or 4-plus option, unlike FeatureGrid's wider 2/3/4 range."
|
|
89
|
+
canonicalSnippet: |
|
|
90
|
+
import { Testimonials } from "@adres/mgda-ui"
|
|
91
|
+
|
|
92
|
+
const quotes = [
|
|
93
|
+
{ quote: "This tool transformed our workflow.", name: "Jane Cooper", role: "CTO", company: "Acme", rating: 5 },
|
|
94
|
+
{ quote: "Setup took minutes, not weeks.", name: "Alex Kim", role: "Founder", company: "Globex" },
|
|
95
|
+
]
|
|
96
|
+
|
|
97
|
+
<Testimonials items={quotes} columns={2} />
|
|
98
|
+
reviewedAt: 2026-09-01
|
|
99
|
+
reviewedAgainstContractHash: "5bfb9becebf2"
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Usage
|
|
103
|
+
|
|
104
|
+
`Testimonials` showcases customer quotes as social proof on a marketing
|
|
105
|
+
page - a grid of cards, each with a quote, attribution (avatar or initial
|
|
106
|
+
fallback, name, role and company), and an optional star rating. Reach for
|
|
107
|
+
`LogoCloud` instead when the social proof is company or brand logos rather
|
|
108
|
+
than attributed quotes.
|
|
109
|
+
|
|
110
|
+
`avatar` is optional; omitting it falls back to a colored circle showing the
|
|
111
|
+
first letter of `name`, so keep `name` meaningful even without a photo.
|
|
112
|
+
`role` and `company` are joined with a middot only when at least one is
|
|
113
|
+
present - passing just one omits the separator rather than leaving a
|
|
114
|
+
dangling one. `columns` only accepts `2` or `3`, a narrower range than
|
|
115
|
+
`FeatureGrid`'s.
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
---
|
|
2
|
+
# >>> DERIVED - regenerated by `npm run knowledge:sync`. Do not edit. <<<
|
|
3
|
+
derived:
|
|
4
|
+
schemaVersion: 1
|
|
5
|
+
id: text-link
|
|
6
|
+
sourceFile: packages/design-system/src/components/text-link.tsx
|
|
7
|
+
client: true
|
|
8
|
+
category: web-app-core-primitives
|
|
9
|
+
categoryFromBarrel: web-app-core-primitives
|
|
10
|
+
barrelExported: true
|
|
11
|
+
importPath: "@adres/mgda-ui"
|
|
12
|
+
exports:
|
|
13
|
+
- name: TextLink
|
|
14
|
+
kind: component
|
|
15
|
+
typeText: "ForwardRefExoticComponent<TextLinkProps & RefAttributes<HTMLAnchorElement>>"
|
|
16
|
+
- name: TextLinkColor
|
|
17
|
+
kind: type
|
|
18
|
+
- name: TextLinkProps
|
|
19
|
+
kind: type
|
|
20
|
+
- name: TextLinkSize
|
|
21
|
+
kind: type
|
|
22
|
+
- name: TextLinkUnderline
|
|
23
|
+
kind: type
|
|
24
|
+
- name: textLinkVariants
|
|
25
|
+
kind: variants
|
|
26
|
+
typeText: "TVReturnType<{ color: { primary: \"ax:text-primary-foreground\"; default: \"ax:text-foreground\"; muted: \"ax:text-muted-foreground ax:hover:text-foreground\"; }; underline: { hover: \"ax:no-underline ax:hover:underline\"; alway...[truncated]"
|
|
27
|
+
primaryExport: TextLink
|
|
28
|
+
subcomponents: []
|
|
29
|
+
props:
|
|
30
|
+
TextLink:
|
|
31
|
+
- name: asChild
|
|
32
|
+
type: boolean
|
|
33
|
+
required: false
|
|
34
|
+
declaredIn: self
|
|
35
|
+
doc: "Render the child instead of an `<a>`, e.g. a framework router link."
|
|
36
|
+
- name: color
|
|
37
|
+
type: "\"default\" | \"muted\" | \"primary\""
|
|
38
|
+
required: false
|
|
39
|
+
declaredIn: self
|
|
40
|
+
variantKey: true
|
|
41
|
+
- name: external
|
|
42
|
+
type: boolean
|
|
43
|
+
required: false
|
|
44
|
+
declaredIn: self
|
|
45
|
+
doc: "Opens in a new tab with `rel=\"noopener noreferrer\"` and announces that to screen readers."
|
|
46
|
+
- name: size
|
|
47
|
+
type: "\"1\" | \"2\" | \"3\" | \"4\" | \"5\""
|
|
48
|
+
required: false
|
|
49
|
+
declaredIn: self
|
|
50
|
+
variantKey: true
|
|
51
|
+
- name: underline
|
|
52
|
+
type: "\"always\" | \"hover\" | \"none\""
|
|
53
|
+
required: false
|
|
54
|
+
declaredIn: self
|
|
55
|
+
variantKey: true
|
|
56
|
+
- name: weight
|
|
57
|
+
type: "\"medium\" | \"regular\""
|
|
58
|
+
required: false
|
|
59
|
+
declaredIn: self
|
|
60
|
+
variantKey: true
|
|
61
|
+
extendsProps:
|
|
62
|
+
- "Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"color\">"
|
|
63
|
+
- "VariantProps<typeof textLinkVariants>"
|
|
64
|
+
variants:
|
|
65
|
+
color:
|
|
66
|
+
kind: enum
|
|
67
|
+
options:
|
|
68
|
+
- primary
|
|
69
|
+
- default
|
|
70
|
+
- muted
|
|
71
|
+
default: primary
|
|
72
|
+
on: TextLink
|
|
73
|
+
underline:
|
|
74
|
+
kind: enum
|
|
75
|
+
options:
|
|
76
|
+
- hover
|
|
77
|
+
- always
|
|
78
|
+
- none
|
|
79
|
+
default: hover
|
|
80
|
+
on: TextLink
|
|
81
|
+
size:
|
|
82
|
+
kind: enum
|
|
83
|
+
options:
|
|
84
|
+
- "1"
|
|
85
|
+
- "2"
|
|
86
|
+
- "3"
|
|
87
|
+
- "4"
|
|
88
|
+
- "5"
|
|
89
|
+
default: null
|
|
90
|
+
on: TextLink
|
|
91
|
+
weight:
|
|
92
|
+
kind: enum
|
|
93
|
+
options:
|
|
94
|
+
- regular
|
|
95
|
+
- medium
|
|
96
|
+
default: medium
|
|
97
|
+
on: TextLink
|
|
98
|
+
variantSource: tv
|
|
99
|
+
compoundVariants: []
|
|
100
|
+
sizeMaps: []
|
|
101
|
+
dataSlots:
|
|
102
|
+
- text-link
|
|
103
|
+
dependsOn:
|
|
104
|
+
internal: []
|
|
105
|
+
lib:
|
|
106
|
+
- cn
|
|
107
|
+
hooks: []
|
|
108
|
+
external:
|
|
109
|
+
- "@radix-ui/react-slot"
|
|
110
|
+
- react
|
|
111
|
+
- tailwind-variants
|
|
112
|
+
contexts: []
|
|
113
|
+
stories:
|
|
114
|
+
- exportName: Default
|
|
115
|
+
id: components-textlink--default
|
|
116
|
+
- exportName: InSentence
|
|
117
|
+
id: components-textlink--in-sentence
|
|
118
|
+
- exportName: Colors
|
|
119
|
+
id: components-textlink--colors
|
|
120
|
+
- exportName: External
|
|
121
|
+
id: components-textlink--external
|
|
122
|
+
storybookTitle: Components/TextLink
|
|
123
|
+
docsId: components-textlink--documentation
|
|
124
|
+
argTypeOptions:
|
|
125
|
+
color:
|
|
126
|
+
- primary
|
|
127
|
+
- default
|
|
128
|
+
- muted
|
|
129
|
+
underline:
|
|
130
|
+
- hover
|
|
131
|
+
- always
|
|
132
|
+
- none
|
|
133
|
+
weight:
|
|
134
|
+
- regular
|
|
135
|
+
- medium
|
|
136
|
+
resolvedCleanly: true
|
|
137
|
+
contractHash: "371061b97da3"
|
|
138
|
+
factsHash: "1143f8a3c08f"
|
|
139
|
+
# >>> AUTHORED - humans own everything below this line. <<<
|
|
140
|
+
status: stable
|
|
141
|
+
summary: "Inline text link with no box: inherits the surrounding text size, with primary, default or muted colour and a hover, always or no underline."
|
|
142
|
+
useWhen:
|
|
143
|
+
- "a link sits inside a sentence or label, such as 'Don't have an account? Create one'"
|
|
144
|
+
- "a standalone small link such as 'Forgot password?' beside a field label"
|
|
145
|
+
- "a link opens an external page in a new tab, via external"
|
|
146
|
+
useInstead:
|
|
147
|
+
- id: button
|
|
148
|
+
when: "the control should look like a button"
|
|
149
|
+
related:
|
|
150
|
+
- text
|
|
151
|
+
- button
|
|
152
|
+
a11y:
|
|
153
|
+
notes:
|
|
154
|
+
- "external adds target=_blank, rel=noopener noreferrer and a screen-reader-only '(opens in a new tab)' hint on a plain anchor."
|
|
155
|
+
- "With asChild the child owns its own content, so the external hint is not injected; add it to the child yourself."
|
|
156
|
+
- "The focus-visible ring is part of the base classes. Do not remove it through className."
|
|
157
|
+
radixHandles: false
|
|
158
|
+
pitfalls:
|
|
159
|
+
- "size is omitted by default so the link inherits the surrounding text size. Set it only when the link stands alone."
|
|
160
|
+
- "With a framework router, pass the router link as the child via asChild; do not nest an anchor inside TextLink."
|
|
161
|
+
- "For an action that should look like a link (Retry, Undo), pass a <button type=\"button\"> through asChild so it keeps button semantics."
|
|
162
|
+
canonicalSnippet: |
|
|
163
|
+
import { TextLink, Text } from "@adres/mgda-ui"
|
|
164
|
+
|
|
165
|
+
<Text as="p" size="2" color="muted">
|
|
166
|
+
Don't have an account? <TextLink href="/sign-up">Create one</TextLink>
|
|
167
|
+
</Text>
|
|
168
|
+
reviewedAt: 2026-10-05
|
|
169
|
+
reviewedAgainstContractHash: "371061b97da3"
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Usage
|
|
173
|
+
|
|
174
|
+
`TextLink` is the only link style in the system; `Button` has no `link`
|
|
175
|
+
variant. It carries no height or padding, so it sits inside a sentence without
|
|
176
|
+
shifting the line, and inherits the surrounding size unless `size` is set.
|
|
177
|
+
For a link-looking action, give it a `<button type="button">` through
|
|
178
|
+
`asChild` so the control keeps button semantics.
|
|
179
|
+
|
|
180
|
+
With Next.js, compose the router link through `asChild`:
|
|
181
|
+
|
|
182
|
+
```tsx
|
|
183
|
+
import NextLink from "next/link"
|
|
184
|
+
|
|
185
|
+
<TextLink asChild>
|
|
186
|
+
<NextLink href="/sign-up">Create one</NextLink>
|
|
187
|
+
</TextLink>
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
The default colour is `primary`, which uses the readable `primary-foreground`
|
|
191
|
+
token. `muted` suits secondary links like "Forgot password?" and darkens on
|
|
192
|
+
hover.
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
---
|
|
2
|
+
# >>> DERIVED - regenerated by `npm run knowledge:sync`. Do not edit. <<<
|
|
3
|
+
derived:
|
|
4
|
+
schemaVersion: 1
|
|
5
|
+
id: text
|
|
6
|
+
sourceFile: packages/design-system/src/components/text.tsx
|
|
7
|
+
client: false
|
|
8
|
+
category: web-app-core-primitives
|
|
9
|
+
categoryFromBarrel: web-app-core-primitives
|
|
10
|
+
barrelExported: true
|
|
11
|
+
importPath: "@adres/mgda-ui"
|
|
12
|
+
exports:
|
|
13
|
+
- name: Text
|
|
14
|
+
kind: component
|
|
15
|
+
typeText: "ForwardRefExoticComponent<TextProps & RefAttributes<HTMLElement>>"
|
|
16
|
+
- name: TextAlign
|
|
17
|
+
kind: type
|
|
18
|
+
- name: TextAs
|
|
19
|
+
kind: type
|
|
20
|
+
- name: TextColor
|
|
21
|
+
kind: type
|
|
22
|
+
- name: TextProps
|
|
23
|
+
kind: type
|
|
24
|
+
- name: TextSize
|
|
25
|
+
kind: type
|
|
26
|
+
- name: TextWeight
|
|
27
|
+
kind: type
|
|
28
|
+
- name: TextWrap
|
|
29
|
+
kind: type
|
|
30
|
+
primaryExport: Text
|
|
31
|
+
subcomponents: []
|
|
32
|
+
props:
|
|
33
|
+
Text:
|
|
34
|
+
- name: align
|
|
35
|
+
type: "\"center\" | \"left\" | \"right\""
|
|
36
|
+
required: false
|
|
37
|
+
declaredIn: self
|
|
38
|
+
variantKey: true
|
|
39
|
+
- name: as
|
|
40
|
+
type: TextAs
|
|
41
|
+
required: false
|
|
42
|
+
declaredIn: self
|
|
43
|
+
- name: color
|
|
44
|
+
type: "\"accent\" | \"default\" | \"destructive\" | \"muted\" | \"primary\" | \"strong\" | \"success\" | \"warning\""
|
|
45
|
+
required: false
|
|
46
|
+
declaredIn: self
|
|
47
|
+
variantKey: true
|
|
48
|
+
- name: size
|
|
49
|
+
type: "\"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" | \"8\" | \"9\""
|
|
50
|
+
required: false
|
|
51
|
+
declaredIn: self
|
|
52
|
+
variantKey: true
|
|
53
|
+
- name: truncate
|
|
54
|
+
type: boolean
|
|
55
|
+
required: false
|
|
56
|
+
declaredIn: self
|
|
57
|
+
- name: weight
|
|
58
|
+
type: "\"bold\" | \"light\" | \"medium\" | \"regular\""
|
|
59
|
+
required: false
|
|
60
|
+
declaredIn: self
|
|
61
|
+
variantKey: true
|
|
62
|
+
- name: wrap
|
|
63
|
+
type: TextWrap
|
|
64
|
+
required: false
|
|
65
|
+
declaredIn: self
|
|
66
|
+
extendsProps:
|
|
67
|
+
- "Omit<React.HTMLAttributes<HTMLElement>, \"color\">"
|
|
68
|
+
- "VariantProps<typeof textVariants>"
|
|
69
|
+
variants:
|
|
70
|
+
size:
|
|
71
|
+
kind: enum
|
|
72
|
+
options:
|
|
73
|
+
- "1"
|
|
74
|
+
- "2"
|
|
75
|
+
- "3"
|
|
76
|
+
- "4"
|
|
77
|
+
- "5"
|
|
78
|
+
- "6"
|
|
79
|
+
- "7"
|
|
80
|
+
- "8"
|
|
81
|
+
- "9"
|
|
82
|
+
default: "3"
|
|
83
|
+
on: Text
|
|
84
|
+
weight:
|
|
85
|
+
kind: enum
|
|
86
|
+
options:
|
|
87
|
+
- light
|
|
88
|
+
- regular
|
|
89
|
+
- medium
|
|
90
|
+
- bold
|
|
91
|
+
default: regular
|
|
92
|
+
on: Text
|
|
93
|
+
align:
|
|
94
|
+
kind: enum
|
|
95
|
+
options:
|
|
96
|
+
- left
|
|
97
|
+
- center
|
|
98
|
+
- right
|
|
99
|
+
default: null
|
|
100
|
+
on: Text
|
|
101
|
+
color:
|
|
102
|
+
kind: enum
|
|
103
|
+
options:
|
|
104
|
+
- default
|
|
105
|
+
- muted
|
|
106
|
+
- strong
|
|
107
|
+
- primary
|
|
108
|
+
- accent
|
|
109
|
+
- success
|
|
110
|
+
- warning
|
|
111
|
+
- destructive
|
|
112
|
+
default: default
|
|
113
|
+
on: Text
|
|
114
|
+
variantSource: cva
|
|
115
|
+
compoundVariants: []
|
|
116
|
+
sizeMaps:
|
|
117
|
+
- WRAP_CLASS
|
|
118
|
+
dataSlots: []
|
|
119
|
+
dependsOn:
|
|
120
|
+
internal: []
|
|
121
|
+
lib:
|
|
122
|
+
- cn
|
|
123
|
+
hooks: []
|
|
124
|
+
external:
|
|
125
|
+
- class-variance-authority
|
|
126
|
+
- react
|
|
127
|
+
contexts: []
|
|
128
|
+
stories:
|
|
129
|
+
- exportName: Default
|
|
130
|
+
id: components-text--default
|
|
131
|
+
- exportName: Muted
|
|
132
|
+
id: components-text--muted
|
|
133
|
+
- exportName: Scale
|
|
134
|
+
id: components-text--scale
|
|
135
|
+
storybookTitle: Components/Text
|
|
136
|
+
docsId: components-text--documentation
|
|
137
|
+
argTypeOptions: {}
|
|
138
|
+
resolvedCleanly: true
|
|
139
|
+
contractHash: "0cfc9a417441"
|
|
140
|
+
factsHash: e8cc808f5db3
|
|
141
|
+
# >>> AUTHORED - humans own everything below this line. <<<
|
|
142
|
+
status: stable
|
|
143
|
+
summary: "The generic polymorphic text primitive - size, weight, color, and alignment as props, rendered as any inline or block tag via as."
|
|
144
|
+
useWhen:
|
|
145
|
+
- "a piece of text needs size, weight, color, or alignment set through props instead of raw Tailwind classes"
|
|
146
|
+
- "the same text styling needs to render as a different HTML tag depending on context, via as"
|
|
147
|
+
useInstead:
|
|
148
|
+
- id: heading
|
|
149
|
+
when: "the text is a heading; Text cannot render h1-h6"
|
|
150
|
+
- id: text-link
|
|
151
|
+
when: "the text is a link"
|
|
152
|
+
- id: blockquote
|
|
153
|
+
when: "the content is specifically a longer quotation, not general text"
|
|
154
|
+
- id: quote
|
|
155
|
+
when: "the content is a short inline quotation"
|
|
156
|
+
related:
|
|
157
|
+
- heading
|
|
158
|
+
- text-link
|
|
159
|
+
- blockquote
|
|
160
|
+
- quote
|
|
161
|
+
a11y:
|
|
162
|
+
notes:
|
|
163
|
+
- "as picks the rendered tag but not its semantics beyond that tag's native meaning - as=\"label\" renders a real <label>, but Text does not wire htmlFor/id association the way Input's Field does; that association is still the caller's job."
|
|
164
|
+
radixHandles: false
|
|
165
|
+
pitfalls:
|
|
166
|
+
- "size is a numeric string scale (\"1\" through \"9\"), unrelated to Button/Input's sm/md/lg scale or Card's padding scale - there is no shared size vocabulary across these primitives."
|
|
167
|
+
- "size maps to the t-* typography utilities in typography.css (1->t-body-xs, 2->t-body-sm, 3->t-body-md, 4->t-body-lg, 5->t-body-xl, 6->t-h1, 7->t-display-sm, 8->t-display-md, 9->t-display-xl), so it inherits the canonical scale's line-height, weight, and tracking rather than raw text-* utilities. Prefer raw t-* classes with semantic HTML for new hand-authored UI; reach for the size prop only when the polymorphic prop API is actually needed."
|
|
168
|
+
canonicalSnippet: |
|
|
169
|
+
import { Text } from "@adres/mgda-ui"
|
|
170
|
+
|
|
171
|
+
<Text as="p" size="4" weight="medium" color="muted">
|
|
172
|
+
Track progress across your team.
|
|
173
|
+
</Text>
|
|
174
|
+
reviewedAt: 2026-08-31
|
|
175
|
+
reviewedAgainstContractHash: "0cfc9a417441"
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Usage
|
|
179
|
+
|
|
180
|
+
`Text` is the generic, polymorphic text primitive - reach for it any time text
|
|
181
|
+
needs `size`/`weight`/`color`/`align` set through props rather than raw
|
|
182
|
+
Tailwind classes, or needs to render as a different tag (`as="p"`, `"span"`,
|
|
183
|
+
`"label"`, `"strong"`, `"em"`, `"div"`) depending on where it's used. It has no
|
|
184
|
+
semantic meaning of its own beyond whatever tag `as` renders - reach for
|
|
185
|
+
`Blockquote` or `Quote` instead when the content is actually a quotation.
|
|
186
|
+
|
|
187
|
+
`size` is a numeric string scale (`"1"` through `"9"`, default `"3"`), not the
|
|
188
|
+
`sm`/`md`/`lg` scale used elsewhere in the system - it has its own vocabulary,
|
|
189
|
+
independent of `Button`, `Input`, or `Card`. Each numeric size maps to a `t-*`
|
|
190
|
+
utility class from `typography.css` (the canonical typography scale), so
|
|
191
|
+
`Text` and hand-authored markup using `t-*` classes directly stay visually in
|
|
192
|
+
sync, including brand-specific `t-*` overrides. For new hand-authored UI,
|
|
193
|
+
prefer raw `t-*` classes plus semantic HTML unless the prop-driven API is
|
|
194
|
+
needed.
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
# >>> DERIVED - regenerated by `npm run knowledge:sync`. Do not edit. <<<
|
|
3
|
+
derived:
|
|
4
|
+
schemaVersion: 1
|
|
5
|
+
id: thinking-bar
|
|
6
|
+
sourceFile: packages/design-system/src/components/thinking-bar.tsx
|
|
7
|
+
client: true
|
|
8
|
+
category: web-app-ai
|
|
9
|
+
categoryFromBarrel: web-app-ai
|
|
10
|
+
barrelExported: true
|
|
11
|
+
importPath: "@adres/mgda-ui"
|
|
12
|
+
exports:
|
|
13
|
+
- name: ThinkingBar
|
|
14
|
+
kind: component
|
|
15
|
+
typeText: "ForwardRefExoticComponent<ThinkingBarProps & RefAttributes<HTMLDivElement>>"
|
|
16
|
+
- name: ThinkingBarProps
|
|
17
|
+
kind: type
|
|
18
|
+
primaryExport: ThinkingBar
|
|
19
|
+
subcomponents: []
|
|
20
|
+
props:
|
|
21
|
+
ThinkingBar:
|
|
22
|
+
- name: onClick
|
|
23
|
+
type: "(() => void)"
|
|
24
|
+
required: false
|
|
25
|
+
declaredIn: self
|
|
26
|
+
doc: "Makes the label a button with a chevron, e.g. to open the reasoning."
|
|
27
|
+
- name: onStop
|
|
28
|
+
type: "(() => void)"
|
|
29
|
+
required: false
|
|
30
|
+
declaredIn: self
|
|
31
|
+
doc: "Adds a stop action on the right, e.g. to answer without more thinking."
|
|
32
|
+
- name: stopLabel
|
|
33
|
+
type: string
|
|
34
|
+
required: false
|
|
35
|
+
declaredIn: self
|
|
36
|
+
- name: text
|
|
37
|
+
type: string
|
|
38
|
+
required: false
|
|
39
|
+
declaredIn: self
|
|
40
|
+
doc: "The status, present tense."
|
|
41
|
+
extendsProps:
|
|
42
|
+
- "Omit<React.HTMLAttributes<HTMLDivElement>, \"onClick\">"
|
|
43
|
+
variants: {}
|
|
44
|
+
variantSource: none
|
|
45
|
+
compoundVariants: []
|
|
46
|
+
sizeMaps: []
|
|
47
|
+
dataSlots:
|
|
48
|
+
- thinking-bar
|
|
49
|
+
dependsOn:
|
|
50
|
+
internal:
|
|
51
|
+
- shimmer-text
|
|
52
|
+
lib:
|
|
53
|
+
- cn
|
|
54
|
+
hooks: []
|
|
55
|
+
external:
|
|
56
|
+
- lucide-react
|
|
57
|
+
- react
|
|
58
|
+
contexts: []
|
|
59
|
+
stories:
|
|
60
|
+
- exportName: Default
|
|
61
|
+
id: components-thinkingbar--default
|
|
62
|
+
- exportName: WithActions
|
|
63
|
+
id: components-thinkingbar--with-actions
|
|
64
|
+
storybookTitle: Components/ThinkingBar
|
|
65
|
+
docsId: components-thinkingbar--documentation
|
|
66
|
+
argTypeOptions: {}
|
|
67
|
+
resolvedCleanly: true
|
|
68
|
+
contractHash: "4d1a4990330b"
|
|
69
|
+
factsHash: c52823a95ecd
|
|
70
|
+
# >>> AUTHORED - humans own everything below this line. <<<
|
|
71
|
+
status: beta
|
|
72
|
+
summary: "One line that says the assistant is thinking: a shimmering status, an optional button to see more, and an optional action to stop and answer now."
|
|
73
|
+
useWhen:
|
|
74
|
+
- "an assistant is thinking before it answers and one status line is enough"
|
|
75
|
+
- "people should be able to skip the thinking and get an answer now"
|
|
76
|
+
useInstead:
|
|
77
|
+
- id: thinking-steps
|
|
78
|
+
when: "people should see the named steps the assistant is working through"
|
|
79
|
+
- id: reasoning
|
|
80
|
+
when: "the model's reasoning text should be readable as it streams"
|
|
81
|
+
related:
|
|
82
|
+
- shimmer-text
|
|
83
|
+
- reasoning
|
|
84
|
+
- thinking-steps
|
|
85
|
+
a11y:
|
|
86
|
+
notes:
|
|
87
|
+
- "Without onClick the status is plain text; with it, the label is a button and the chevron is aria-hidden."
|
|
88
|
+
- "The stop action is a real button named by stopLabel."
|
|
89
|
+
- "The bar is not a live region; announce thinking and done in a separate polite live region if needed."
|
|
90
|
+
radixHandles: false
|
|
91
|
+
pitfalls:
|
|
92
|
+
- "Remove the bar once the answer starts; it is only for the thinking phase."
|
|
93
|
+
- "Word text in the present tense, such as \"Thinking\" or \"Searching listings\"."
|
|
94
|
+
- "Pass onStop only when stopping really returns an answer; otherwise leave it out."
|
|
95
|
+
canonicalSnippet: |
|
|
96
|
+
import { ThinkingBar } from "@adres/mgda-ui"
|
|
97
|
+
|
|
98
|
+
{thinking && (
|
|
99
|
+
<ThinkingBar text="Thinking" onClick={openReasoning} onStop={answerNow} />
|
|
100
|
+
)}
|
|
101
|
+
reviewedAt: 2026-10-06
|
|
102
|
+
reviewedAgainstContractHash: "4d1a4990330b"
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Usage
|
|
106
|
+
|
|
107
|
+
`ThinkingBar` sits where the answer will appear while the assistant thinks.
|
|
108
|
+
`text` is the shimmering status ("Thinking" by default). Pass `onClick` to
|
|
109
|
+
make the status a button with a chevron, for example to open the reasoning,
|
|
110
|
+
and `onStop` to add a dotted-underline action on the right, "Answer now" by
|
|
111
|
+
default or `stopLabel`.
|
|
112
|
+
|
|
113
|
+
## Anatomy
|
|
114
|
+
|
|
115
|
+
- `ThinkingBar` - shimmering status (or status button with chevron) and an optional stop action.
|