@adres/mgda-ui 0.0.0-stage → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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,166 @@
|
|
|
1
|
+
---
|
|
2
|
+
# >>> DERIVED - regenerated by `npm run knowledge:sync`. Do not edit. <<<
|
|
3
|
+
derived:
|
|
4
|
+
schemaVersion: 1
|
|
5
|
+
id: entity-header
|
|
6
|
+
sourceFile: packages/design-system/src/components/entity-header.tsx
|
|
7
|
+
client: false
|
|
8
|
+
category: web-app-layout-navigation
|
|
9
|
+
categoryFromBarrel: web-app-layout-navigation
|
|
10
|
+
barrelExported: true
|
|
11
|
+
importPath: "@adres/mgda-ui"
|
|
12
|
+
exports:
|
|
13
|
+
- name: EntityHeader
|
|
14
|
+
kind: component
|
|
15
|
+
typeText: "ForwardRefExoticComponent<EntityHeaderProps & RefAttributes<HTMLDivElement>>"
|
|
16
|
+
- name: EntityHeaderProps
|
|
17
|
+
kind: type
|
|
18
|
+
- name: EntityHeaderSize
|
|
19
|
+
kind: type
|
|
20
|
+
- name: entityHeaderVariants
|
|
21
|
+
kind: variants
|
|
22
|
+
typeText: "TVReturnType<{ size: { md: { mark: string; }; lg: { mark: string; }; }; }, { root: string; identity: string; mark: string; text: string; subtitle: string; aside: string; }, undefined, { size: { md: { mark: string; }; lg:...[truncated]"
|
|
23
|
+
- name: entityInitials
|
|
24
|
+
kind: function
|
|
25
|
+
typeText: "(name: string) => string"
|
|
26
|
+
primaryExport: EntityHeader
|
|
27
|
+
subcomponents: []
|
|
28
|
+
props:
|
|
29
|
+
EntityHeader:
|
|
30
|
+
- name: actions
|
|
31
|
+
type: ReactNode
|
|
32
|
+
required: false
|
|
33
|
+
declaredIn: self
|
|
34
|
+
doc: "Actions such as Edit or Contact, aligned with the details."
|
|
35
|
+
- name: as
|
|
36
|
+
type: HeadingAs
|
|
37
|
+
required: false
|
|
38
|
+
declaredIn: self
|
|
39
|
+
doc: "Heading level for the name. Defaults to `h2`."
|
|
40
|
+
- name: details
|
|
41
|
+
type: ReactNode
|
|
42
|
+
required: false
|
|
43
|
+
declaredIn: self
|
|
44
|
+
doc: "Key facts beside the identity, typically `<DataList orientation=\"grid\">`."
|
|
45
|
+
- name: logo
|
|
46
|
+
type: "{ src: string; alt: string; }"
|
|
47
|
+
required: false
|
|
48
|
+
declaredIn: self
|
|
49
|
+
doc: "Logo image. Without it the mark shows initials from `name`."
|
|
50
|
+
- name: name
|
|
51
|
+
type: string
|
|
52
|
+
required: true
|
|
53
|
+
declaredIn: self
|
|
54
|
+
doc: "Organisation, company or property name."
|
|
55
|
+
- name: size
|
|
56
|
+
type: "\"lg\" | \"md\""
|
|
57
|
+
required: false
|
|
58
|
+
declaredIn: self
|
|
59
|
+
variantKey: true
|
|
60
|
+
- name: subtitle
|
|
61
|
+
type: ReactNode
|
|
62
|
+
required: false
|
|
63
|
+
declaredIn: self
|
|
64
|
+
doc: "Secondary line, e.g. the legal name or a registration number."
|
|
65
|
+
extendsProps:
|
|
66
|
+
- "Omit<React.HTMLAttributes<HTMLDivElement>, \"title\">"
|
|
67
|
+
- "VariantProps<typeof entityHeaderVariants>"
|
|
68
|
+
variants:
|
|
69
|
+
size:
|
|
70
|
+
kind: enum
|
|
71
|
+
options:
|
|
72
|
+
- md
|
|
73
|
+
- lg
|
|
74
|
+
default: lg
|
|
75
|
+
on: EntityHeader
|
|
76
|
+
variantSource: tv
|
|
77
|
+
compoundVariants: []
|
|
78
|
+
sizeMaps:
|
|
79
|
+
- NAME_SIZE
|
|
80
|
+
dataSlots:
|
|
81
|
+
- entity-header
|
|
82
|
+
dependsOn:
|
|
83
|
+
internal:
|
|
84
|
+
- heading
|
|
85
|
+
lib:
|
|
86
|
+
- cn
|
|
87
|
+
hooks: []
|
|
88
|
+
external:
|
|
89
|
+
- react
|
|
90
|
+
- tailwind-variants
|
|
91
|
+
contexts: []
|
|
92
|
+
stories:
|
|
93
|
+
- exportName: Default
|
|
94
|
+
id: components-entityheader--default
|
|
95
|
+
- exportName: WithDetails
|
|
96
|
+
id: components-entityheader--with-details
|
|
97
|
+
- exportName: WithActions
|
|
98
|
+
id: components-entityheader--with-actions
|
|
99
|
+
- exportName: Medium
|
|
100
|
+
id: components-entityheader--medium
|
|
101
|
+
storybookTitle: Components/EntityHeader
|
|
102
|
+
docsId: components-entityheader--documentation
|
|
103
|
+
argTypeOptions: {}
|
|
104
|
+
resolvedCleanly: true
|
|
105
|
+
contractHash: caa4ffb0e7be
|
|
106
|
+
factsHash: "1aa6f809d55f"
|
|
107
|
+
# >>> AUTHORED - humans own everything below this line. <<<
|
|
108
|
+
status: beta
|
|
109
|
+
summary: "The identity block for an organisation, brokerage or property: a logo or initials mark, the name as a heading, a secondary line, and slots for key details and actions."
|
|
110
|
+
useWhen:
|
|
111
|
+
- "the top of a company, brokerage or agency page or dashboard"
|
|
112
|
+
- "showing who a record belongs to with its key facts (licences, registration, contact)"
|
|
113
|
+
useInstead:
|
|
114
|
+
- id: page-header
|
|
115
|
+
when: "the page title is a task or section name rather than an organisation's identity"
|
|
116
|
+
- id: avatar
|
|
117
|
+
when: "only a small identity mark is needed, e.g. in a list row"
|
|
118
|
+
related:
|
|
119
|
+
- data-list
|
|
120
|
+
- page-header
|
|
121
|
+
- avatar
|
|
122
|
+
a11y:
|
|
123
|
+
notes:
|
|
124
|
+
- "The name renders as a real heading; set as to fit the page outline (h2 by default, h1 when it is the page title)."
|
|
125
|
+
- "Initials are decorative (aria-hidden) because the heading already names the organisation; a logo keeps its alt text."
|
|
126
|
+
radixHandles: false
|
|
127
|
+
pitfalls:
|
|
128
|
+
- "Pass a logo with meaningful alt text, or omit it to fall back to initials; do not pass an empty alt for a logo that is the only visible name."
|
|
129
|
+
- "details is a free slot; use DataList orientation=\"grid\" for licence-style facts so they align in columns."
|
|
130
|
+
- "Initials take the first letter of the first two words; for names where that misleads, pass a logo."
|
|
131
|
+
canonicalSnippet: |
|
|
132
|
+
import { EntityHeader } from "@adres/mgda-ui"
|
|
133
|
+
|
|
134
|
+
<EntityHeader
|
|
135
|
+
name="Remax RealEstate"
|
|
136
|
+
subtitle="Remax Real Estate Brokerage L.L.C."
|
|
137
|
+
details={brokerageDetails}
|
|
138
|
+
/>
|
|
139
|
+
reviewedAt: 2026-10-06
|
|
140
|
+
reviewedAgainstContractHash: caa4ffb0e7be
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Usage
|
|
144
|
+
|
|
145
|
+
`EntityHeader` names an organisation and shows its key facts. The mark is the
|
|
146
|
+
logo when given, otherwise initials from the name. `size` is `lg` by default
|
|
147
|
+
(56px mark, `h2`-sized name) or `md` (48px, `h3`-sized). From `lg` up the
|
|
148
|
+
identity and the details/actions sit in one row, bottom-aligned; below that
|
|
149
|
+
they stack.
|
|
150
|
+
|
|
151
|
+
Pair it with a grid `DataList` for licence-style details:
|
|
152
|
+
|
|
153
|
+
```tsx
|
|
154
|
+
<EntityHeader
|
|
155
|
+
name="Remax RealEstate"
|
|
156
|
+
subtitle="Remax Real Estate Brokerage L.L.C."
|
|
157
|
+
details={
|
|
158
|
+
<DataList orientation="grid" columns={4} size="sm">
|
|
159
|
+
<DataListItem>
|
|
160
|
+
<DataListLabel>Trade licence</DataListLabel>
|
|
161
|
+
<DataListValue>2120561384412A</DataListValue>
|
|
162
|
+
</DataListItem>
|
|
163
|
+
</DataList>
|
|
164
|
+
}
|
|
165
|
+
/>
|
|
166
|
+
```
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
# >>> DERIVED - regenerated by `npm run knowledge:sync`. Do not edit. <<<
|
|
3
|
+
derived:
|
|
4
|
+
schemaVersion: 1
|
|
5
|
+
id: feature-grid
|
|
6
|
+
sourceFile: packages/design-system/src/components/feature-grid.tsx
|
|
7
|
+
client: true
|
|
8
|
+
category: marketing
|
|
9
|
+
categoryFromBarrel: marketing
|
|
10
|
+
barrelExported: true
|
|
11
|
+
importPath: "@adres/mgda-ui"
|
|
12
|
+
exports:
|
|
13
|
+
- name: Feature
|
|
14
|
+
kind: type
|
|
15
|
+
- name: FeatureGrid
|
|
16
|
+
kind: component
|
|
17
|
+
typeText: "ForwardRefExoticComponent<FeatureGridProps & RefAttributes<HTMLElement>>"
|
|
18
|
+
- name: FeatureGridProps
|
|
19
|
+
kind: type
|
|
20
|
+
primaryExport: FeatureGrid
|
|
21
|
+
subcomponents: []
|
|
22
|
+
props:
|
|
23
|
+
FeatureGrid:
|
|
24
|
+
- name: columns
|
|
25
|
+
type: "2 | 3 | 4"
|
|
26
|
+
required: false
|
|
27
|
+
declaredIn: self
|
|
28
|
+
doc: "Number of columns at the largest breakpoint. Default 3."
|
|
29
|
+
- name: description
|
|
30
|
+
type: ReactNode
|
|
31
|
+
required: false
|
|
32
|
+
declaredIn: self
|
|
33
|
+
- name: eyebrow
|
|
34
|
+
type: ReactNode
|
|
35
|
+
required: false
|
|
36
|
+
declaredIn: self
|
|
37
|
+
- name: features
|
|
38
|
+
type: "Feature[]"
|
|
39
|
+
required: true
|
|
40
|
+
declaredIn: self
|
|
41
|
+
- name: title
|
|
42
|
+
type: ReactNode
|
|
43
|
+
required: false
|
|
44
|
+
declaredIn: self
|
|
45
|
+
extendsProps:
|
|
46
|
+
- "Omit<React.HTMLAttributes<HTMLElement>, \"title\">"
|
|
47
|
+
variants: {}
|
|
48
|
+
variantSource: none
|
|
49
|
+
compoundVariants: []
|
|
50
|
+
sizeMaps: []
|
|
51
|
+
dataSlots: []
|
|
52
|
+
dependsOn:
|
|
53
|
+
internal: []
|
|
54
|
+
lib:
|
|
55
|
+
- cn
|
|
56
|
+
- motion
|
|
57
|
+
hooks:
|
|
58
|
+
- use-reduced-motion
|
|
59
|
+
external:
|
|
60
|
+
- motion/react
|
|
61
|
+
- react
|
|
62
|
+
contexts: []
|
|
63
|
+
stories:
|
|
64
|
+
- exportName: Default
|
|
65
|
+
id: components-featuregrid--default
|
|
66
|
+
storybookTitle: Components/FeatureGrid
|
|
67
|
+
docsId: components-featuregrid--documentation
|
|
68
|
+
argTypeOptions: {}
|
|
69
|
+
resolvedCleanly: true
|
|
70
|
+
contractHash: "7a20bb0c641d"
|
|
71
|
+
factsHash: "31fa73977abb"
|
|
72
|
+
# >>> AUTHORED - humans own everything below this line. <<<
|
|
73
|
+
status: stable
|
|
74
|
+
summary: "A marketing feature showcase - an optional eyebrow/title/description header above a responsive grid of icon, title, and description cards, with scroll-triggered stagger animation."
|
|
75
|
+
useWhen:
|
|
76
|
+
- "showcasing several distinct product features or benefits together, each with its own icon, title, and description"
|
|
77
|
+
useInstead:
|
|
78
|
+
- id: cta
|
|
79
|
+
when: "the section should drive toward one action rather than showcase several features side by side"
|
|
80
|
+
related:
|
|
81
|
+
- cta
|
|
82
|
+
a11y:
|
|
83
|
+
notes:
|
|
84
|
+
- "Renders a real ul/li list for the features and an h2 for the section title when provided - the semantic list conveys a set of related items to assistive tech even without visible bullets."
|
|
85
|
+
- "Feature icons are decorative by convention here - the component adds no aria-hidden itself, so pass an icon element that is already inert (most icon libraries default to this) rather than one carrying its own accessible name that would compete with the feature's title."
|
|
86
|
+
radixHandles: false
|
|
87
|
+
pitfalls:
|
|
88
|
+
- "The header block (eyebrow/title/description) only renders at all when at least one of the three is provided - omitting all three does not leave empty space, it removes the block's margin too, so the grid sits flush at the top."
|
|
89
|
+
- "columns only changes the desktop breakpoint's column count - tablet is always a fixed 2-column layout and mobile is always 1, regardless of columns."
|
|
90
|
+
- "The stagger entrance animation runs on scroll-into-view, not on mount - a FeatureGrid already in the viewport on page load still needs to cross the configured viewport margin to trigger, so it can appear to animate oddly if only partially visible at load."
|
|
91
|
+
canonicalSnippet: |
|
|
92
|
+
import { FeatureGrid } from "@adres/mgda-ui"
|
|
93
|
+
|
|
94
|
+
const sectionTitle = "Everything you need"
|
|
95
|
+
const items = [
|
|
96
|
+
{ title: "Fast", description: "Optimized for speed." },
|
|
97
|
+
{ title: "Secure", description: "Encrypted by default." },
|
|
98
|
+
{ title: "Reliable", description: "99.9% uptime." },
|
|
99
|
+
]
|
|
100
|
+
|
|
101
|
+
<FeatureGrid title={sectionTitle} columns={3} features={items} />
|
|
102
|
+
reviewedAt: 2026-09-01
|
|
103
|
+
reviewedAgainstContractHash: "7a20bb0c641d"
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Usage
|
|
107
|
+
|
|
108
|
+
`FeatureGrid` showcases several distinct product features or benefits
|
|
109
|
+
together, each with its own icon, title, and description, above an optional
|
|
110
|
+
eyebrow/title/description section header. Reach for `CTA` instead when the
|
|
111
|
+
section should drive toward one action rather than showcase several
|
|
112
|
+
features side by side.
|
|
113
|
+
|
|
114
|
+
`columns` (2/3/4, default 3) only changes the desktop breakpoint's column
|
|
115
|
+
count - the grid is always 1 column on mobile and 2 on tablet regardless of
|
|
116
|
+
this prop.
|
|
117
|
+
|
|
118
|
+
The header block only renders when at least one of `eyebrow`/`title`/
|
|
119
|
+
`description` is provided - omit all three for a bare grid with no leading
|
|
120
|
+
margin, rather than passing empty strings.
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
---
|
|
2
|
+
# >>> DERIVED - regenerated by `npm run knowledge:sync`. Do not edit. <<<
|
|
3
|
+
derived:
|
|
4
|
+
schemaVersion: 1
|
|
5
|
+
id: feedback-bar
|
|
6
|
+
sourceFile: packages/design-system/src/components/feedback-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: FeedbackBar
|
|
14
|
+
kind: component
|
|
15
|
+
typeText: "ForwardRefExoticComponent<FeedbackBarProps & RefAttributes<HTMLDivElement>>"
|
|
16
|
+
- name: FeedbackBarProps
|
|
17
|
+
kind: type
|
|
18
|
+
primaryExport: FeedbackBar
|
|
19
|
+
subcomponents: []
|
|
20
|
+
props:
|
|
21
|
+
FeedbackBar:
|
|
22
|
+
- name: icon
|
|
23
|
+
type: ReactNode
|
|
24
|
+
required: false
|
|
25
|
+
declaredIn: self
|
|
26
|
+
doc: "Optional mark before the title, such as the assistant's logo."
|
|
27
|
+
- name: onClose
|
|
28
|
+
type: "(() => void)"
|
|
29
|
+
required: false
|
|
30
|
+
declaredIn: self
|
|
31
|
+
doc: "Shows the close button. Hide the bar yourself when it fires."
|
|
32
|
+
- name: onHelpful
|
|
33
|
+
type: "(() => void)"
|
|
34
|
+
required: false
|
|
35
|
+
declaredIn: self
|
|
36
|
+
- name: onNotHelpful
|
|
37
|
+
type: "(() => void)"
|
|
38
|
+
required: false
|
|
39
|
+
declaredIn: self
|
|
40
|
+
- name: title
|
|
41
|
+
type: string
|
|
42
|
+
required: true
|
|
43
|
+
declaredIn: self
|
|
44
|
+
doc: "The question, e.g. \"Was this helpful?\". Also names the group."
|
|
45
|
+
extendsProps:
|
|
46
|
+
- "React.HTMLAttributes<HTMLDivElement>"
|
|
47
|
+
variants: {}
|
|
48
|
+
variantSource: none
|
|
49
|
+
compoundVariants: []
|
|
50
|
+
sizeMaps: []
|
|
51
|
+
dataSlots:
|
|
52
|
+
- feedback-bar
|
|
53
|
+
dependsOn:
|
|
54
|
+
internal:
|
|
55
|
+
- button
|
|
56
|
+
lib:
|
|
57
|
+
- cn
|
|
58
|
+
hooks: []
|
|
59
|
+
external:
|
|
60
|
+
- lucide-react
|
|
61
|
+
- react
|
|
62
|
+
contexts: []
|
|
63
|
+
stories:
|
|
64
|
+
- exportName: Default
|
|
65
|
+
id: components-feedbackbar--default
|
|
66
|
+
- exportName: WithIcon
|
|
67
|
+
id: components-feedbackbar--with-icon
|
|
68
|
+
- exportName: WithoutClose
|
|
69
|
+
id: components-feedbackbar--without-close
|
|
70
|
+
storybookTitle: Components/FeedbackBar
|
|
71
|
+
docsId: components-feedbackbar--documentation
|
|
72
|
+
argTypeOptions: {}
|
|
73
|
+
resolvedCleanly: true
|
|
74
|
+
contractHash: ee4aafc6ae23
|
|
75
|
+
factsHash: b6acfc13fd70
|
|
76
|
+
# >>> AUTHORED - humans own everything below this line. <<<
|
|
77
|
+
status: beta
|
|
78
|
+
summary: "A compact \"Was this helpful?\" prompt: a title with an optional icon, thumbs up and down, and an optional close."
|
|
79
|
+
useWhen:
|
|
80
|
+
- "one quick helpful or not question for a whole conversation, help article or page"
|
|
81
|
+
- "a dismissible feedback prompt that should not compete with the content"
|
|
82
|
+
useInstead:
|
|
83
|
+
- id: answer-actions
|
|
84
|
+
when: "each assistant answer needs copy, rating with reasons, regenerate or report"
|
|
85
|
+
- id: message-actions
|
|
86
|
+
when: "only copy, thumbs and regenerate are needed under each message"
|
|
87
|
+
related:
|
|
88
|
+
- answer-actions
|
|
89
|
+
- message-actions
|
|
90
|
+
a11y:
|
|
91
|
+
notes:
|
|
92
|
+
- "The bar is a group named by its title, so the question is read before the buttons."
|
|
93
|
+
- "Thumbs are labelled \"Helpful\" and \"Not helpful\"; close is labelled \"Close\"."
|
|
94
|
+
- "The icon is decorative and aria-hidden."
|
|
95
|
+
radixHandles: false
|
|
96
|
+
pitfalls:
|
|
97
|
+
- "The bar keeps no state; hide it or swap in a thank-you from onHelpful, onNotHelpful and onClose."
|
|
98
|
+
- "The close button only appears when onClose is passed."
|
|
99
|
+
- "Show it once per conversation or page, not under every answer."
|
|
100
|
+
canonicalSnippet: |
|
|
101
|
+
import { FeedbackBar } from "@adres/mgda-ui"
|
|
102
|
+
|
|
103
|
+
{showFeedback && (
|
|
104
|
+
<FeedbackBar
|
|
105
|
+
title="Was this helpful?"
|
|
106
|
+
onHelpful={() => rate("up")}
|
|
107
|
+
onNotHelpful={() => rate("down")}
|
|
108
|
+
onClose={() => setShowFeedback(false)}
|
|
109
|
+
/>
|
|
110
|
+
)}
|
|
111
|
+
reviewedAt: 2026-10-06
|
|
112
|
+
reviewedAgainstContractHash: ee4aafc6ae23
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Usage
|
|
116
|
+
|
|
117
|
+
`FeedbackBar` asks one question, usually "Was this helpful?", with thumbs up
|
|
118
|
+
and down. Put it once at the end of a conversation, help article or page.
|
|
119
|
+
Pass `icon` for a mark before the title, such as the assistant's logo, and
|
|
120
|
+
`onClose` to add a close button behind a divider.
|
|
121
|
+
|
|
122
|
+
The bar keeps no state. Handle `onHelpful` and `onNotHelpful` to record the
|
|
123
|
+
answer, then hide the bar or replace it with a thank-you line.
|
|
124
|
+
|
|
125
|
+
## Anatomy
|
|
126
|
+
|
|
127
|
+
- `FeedbackBar` - bordered bar: optional icon and title, thumbs up and down, optional close.
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
# >>> DERIVED - regenerated by `npm run knowledge:sync`. Do not edit. <<<
|
|
3
|
+
derived:
|
|
4
|
+
schemaVersion: 1
|
|
5
|
+
id: footer
|
|
6
|
+
sourceFile: packages/design-system/src/components/footer.tsx
|
|
7
|
+
client: false
|
|
8
|
+
category: marketing
|
|
9
|
+
categoryFromBarrel: marketing
|
|
10
|
+
barrelExported: true
|
|
11
|
+
importPath: "@adres/mgda-ui"
|
|
12
|
+
exports:
|
|
13
|
+
- name: Footer
|
|
14
|
+
kind: component
|
|
15
|
+
typeText: "({ className, brand, tagline, columns, legal, social, ...props }: FooterProps) => Element"
|
|
16
|
+
- name: FooterColumn
|
|
17
|
+
kind: type
|
|
18
|
+
- name: FooterLink
|
|
19
|
+
kind: type
|
|
20
|
+
- name: FooterProps
|
|
21
|
+
kind: type
|
|
22
|
+
primaryExport: Footer
|
|
23
|
+
subcomponents: []
|
|
24
|
+
props:
|
|
25
|
+
Footer:
|
|
26
|
+
- name: brand
|
|
27
|
+
type: ReactNode
|
|
28
|
+
required: false
|
|
29
|
+
declaredIn: self
|
|
30
|
+
- name: columns
|
|
31
|
+
type: "FooterColumn[]"
|
|
32
|
+
required: false
|
|
33
|
+
declaredIn: self
|
|
34
|
+
- name: legal
|
|
35
|
+
type: ReactNode
|
|
36
|
+
required: false
|
|
37
|
+
declaredIn: self
|
|
38
|
+
- name: social
|
|
39
|
+
type: ReactNode
|
|
40
|
+
required: false
|
|
41
|
+
declaredIn: self
|
|
42
|
+
- name: tagline
|
|
43
|
+
type: ReactNode
|
|
44
|
+
required: false
|
|
45
|
+
declaredIn: self
|
|
46
|
+
extendsProps:
|
|
47
|
+
- "React.HTMLAttributes<HTMLElement>"
|
|
48
|
+
variants: {}
|
|
49
|
+
variantSource: none
|
|
50
|
+
compoundVariants: []
|
|
51
|
+
sizeMaps: []
|
|
52
|
+
dataSlots: []
|
|
53
|
+
dependsOn:
|
|
54
|
+
internal: []
|
|
55
|
+
lib:
|
|
56
|
+
- cn
|
|
57
|
+
hooks: []
|
|
58
|
+
external:
|
|
59
|
+
- react
|
|
60
|
+
contexts: []
|
|
61
|
+
stories:
|
|
62
|
+
- exportName: Default
|
|
63
|
+
id: components-footer--default
|
|
64
|
+
storybookTitle: Components/Footer
|
|
65
|
+
docsId: components-footer--documentation
|
|
66
|
+
argTypeOptions: {}
|
|
67
|
+
resolvedCleanly: true
|
|
68
|
+
contractHash: e9fe69ab9f52
|
|
69
|
+
factsHash: "9f015cae8e69"
|
|
70
|
+
# >>> AUTHORED - humans own everything below this line. <<<
|
|
71
|
+
status: stable
|
|
72
|
+
summary: "The page-level footer: an optional brand/tagline/social block, a responsive column grid of link groups, and a legal line."
|
|
73
|
+
useWhen:
|
|
74
|
+
- "every marketing (and typically app-level) page needs a consistent closing footer with navigation links, brand, and legal text"
|
|
75
|
+
related:
|
|
76
|
+
- logo-cloud
|
|
77
|
+
a11y:
|
|
78
|
+
notes:
|
|
79
|
+
- "columns renders each link as a real anchor and each column as its own list - no extra ARIA is needed for the link groups themselves, but give the footer's own landmark role thought: a footer at the page root is an automatic contentinfo landmark, one nested inside another sectioning element is not."
|
|
80
|
+
radixHandles: false
|
|
81
|
+
pitfalls:
|
|
82
|
+
- "The grid only switches to the multi-column brand+links layout when columns is a non-empty array - passing an empty array, or omitting it, collapses to a single column, silently dropping the intended side-by-side layout rather than rendering empty column slots."
|
|
83
|
+
- "The column grid caps visually at 4 columns via a CSS variable - passing more than 4 FooterColumn entries still renders all of them, just wrapped or compressed rather than each getting its own dedicated grid track."
|
|
84
|
+
- "legal and social are both freeform ReactNode with no built-in structure - legal is typically a copyright line, social is typically a row of icon links, but the component enforces neither; get the semantics (real links, accessible icon labels) right in what is passed."
|
|
85
|
+
canonicalSnippet: |
|
|
86
|
+
import { Footer } from "@adres/mgda-ui"
|
|
87
|
+
|
|
88
|
+
const columns = [
|
|
89
|
+
{ heading: "Product", links: [{ label: "Features", href: "/features" }] },
|
|
90
|
+
{ heading: "Company", links: [{ label: "About", href: "/about" }] },
|
|
91
|
+
]
|
|
92
|
+
const legalText = "(c) 2026 Adres. All rights reserved."
|
|
93
|
+
|
|
94
|
+
<Footer columns={columns} legal={legalText} />
|
|
95
|
+
reviewedAt: 2026-09-01
|
|
96
|
+
reviewedAgainstContractHash: e9fe69ab9f52
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Usage
|
|
100
|
+
|
|
101
|
+
`Footer` is the page-level closing footer - an optional brand/tagline/social
|
|
102
|
+
block on the left, a responsive grid of link-group columns, and a legal
|
|
103
|
+
line underneath. Reach for `LogoCloud` separately, often placed just above
|
|
104
|
+
or inside a footer, when the goal is showing partner or customer logos as a
|
|
105
|
+
trust signal, not navigation links.
|
|
106
|
+
|
|
107
|
+
The multi-column layout only activates when `columns` is a non-empty array -
|
|
108
|
+
an empty or omitted `columns` collapses to a single column with just the
|
|
109
|
+
brand block, rather than reserving empty grid space. The column count caps
|
|
110
|
+
visually at 4 via a CSS variable, so a fifth or later column still renders,
|
|
111
|
+
just without its own dedicated grid track.
|
|
112
|
+
|
|
113
|
+
`legal` and `social` are both freeform `ReactNode` with no enforced
|
|
114
|
+
structure - typically a copyright string and a row of icon links
|
|
115
|
+
respectively, but get their real semantics (actual links, accessible icon
|
|
116
|
+
labels) right in what is passed, since the component adds none itself.
|