@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.
Files changed (325) hide show
  1. package/brand-knowledge.json +451 -0
  2. package/knowledge/accordion.md +135 -0
  3. package/knowledge/activity-rings.md +123 -0
  4. package/knowledge/alert.md +184 -0
  5. package/knowledge/answer-actions.md +217 -0
  6. package/knowledge/aspect-ratio.md +82 -0
  7. package/knowledge/avatar.md +158 -0
  8. package/knowledge/badge.md +172 -0
  9. package/knowledge/bar-graph.md +167 -0
  10. package/knowledge/bento-grid.md +115 -0
  11. package/knowledge/blockquote.md +153 -0
  12. package/knowledge/box-list.md +177 -0
  13. package/knowledge/bullet-list.md +128 -0
  14. package/knowledge/button-group.md +179 -0
  15. package/knowledge/button.md +231 -0
  16. package/knowledge/calendar.md +168 -0
  17. package/knowledge/card.md +321 -0
  18. package/knowledge/cards-nav.md +170 -0
  19. package/knowledge/chain-of-thought.md +164 -0
  20. package/knowledge/chat-container.md +135 -0
  21. package/knowledge/chat-message.md +224 -0
  22. package/knowledge/checkbox-card.md +172 -0
  23. package/knowledge/checkbox.md +111 -0
  24. package/knowledge/citations.md +241 -0
  25. package/knowledge/combobox.md +265 -0
  26. package/knowledge/countdown-pill.md +153 -0
  27. package/knowledge/cta.md +118 -0
  28. package/knowledge/data-list.md +173 -0
  29. package/knowledge/data-table.md +220 -0
  30. package/knowledge/dialog.md +249 -0
  31. package/knowledge/drawer.md +236 -0
  32. package/knowledge/dropdown-menu.md +238 -0
  33. package/knowledge/dropzone.md +153 -0
  34. package/knowledge/email-chips-input.md +161 -0
  35. package/knowledge/empty-state.md +106 -0
  36. package/knowledge/entity-header.md +166 -0
  37. package/knowledge/feature-grid.md +120 -0
  38. package/knowledge/feedback-bar.md +127 -0
  39. package/knowledge/footer.md +116 -0
  40. package/knowledge/heading.md +189 -0
  41. package/knowledge/hero.md +361 -0
  42. package/knowledge/input-button.md +187 -0
  43. package/knowledge/input-group.md +185 -0
  44. package/knowledge/input.md +256 -0
  45. package/knowledge/inset.md +177 -0
  46. package/knowledge/kpi-card.md +206 -0
  47. package/knowledge/list-nav.md +181 -0
  48. package/knowledge/logo-cloud.md +102 -0
  49. package/knowledge/media-gallery.md +158 -0
  50. package/knowledge/message-actions.md +175 -0
  51. package/knowledge/nav-sidebar.md +225 -0
  52. package/knowledge/number-stepper.md +159 -0
  53. package/knowledge/page-header.md +109 -0
  54. package/knowledge/pagination.md +225 -0
  55. package/knowledge/popover.md +159 -0
  56. package/knowledge/pricing.md +132 -0
  57. package/knowledge/progress.md +156 -0
  58. package/knowledge/prompt-input.md +337 -0
  59. package/knowledge/prompt-suggestions.md +168 -0
  60. package/knowledge/quota-bar.md +160 -0
  61. package/knowledge/quote.md +116 -0
  62. package/knowledge/radio-card.md +172 -0
  63. package/knowledge/radio-group.md +135 -0
  64. package/knowledge/reasoning.md +142 -0
  65. package/knowledge/search.md +131 -0
  66. package/knowledge/section-nav.md +162 -0
  67. package/knowledge/segmented-control.md +181 -0
  68. package/knowledge/select-button.md +205 -0
  69. package/knowledge/select.md +210 -0
  70. package/knowledge/separator.md +75 -0
  71. package/knowledge/shimmer-text.md +140 -0
  72. package/knowledge/sidebar.md +227 -0
  73. package/knowledge/skeleton.md +142 -0
  74. package/knowledge/slider.md +133 -0
  75. package/knowledge/slideshow.md +159 -0
  76. package/knowledge/source.md +156 -0
  77. package/knowledge/spinner.md +120 -0
  78. package/knowledge/stat-strip.md +128 -0
  79. package/knowledge/stats.md +117 -0
  80. package/knowledge/step-indicator.md +157 -0
  81. package/knowledge/switch.md +88 -0
  82. package/knowledge/table.md +190 -0
  83. package/knowledge/tabs.md +169 -0
  84. package/knowledge/testimonials.md +115 -0
  85. package/knowledge/text-link.md +192 -0
  86. package/knowledge/text.md +194 -0
  87. package/knowledge/thinking-bar.md +115 -0
  88. package/knowledge/thinking-steps.md +140 -0
  89. package/knowledge/toaster.md +127 -0
  90. package/knowledge/toggle.md +113 -0
  91. package/knowledge/tool-call-card.md +241 -0
  92. package/knowledge/tooltip.md +120 -0
  93. package/knowledge/top-nav.md +138 -0
  94. package/knowledge.json +19854 -0
  95. package/package.json +94 -4
  96. package/src/components/accordion.stories.tsx +46 -0
  97. package/src/components/accordion.tsx +74 -0
  98. package/src/components/activity-rings.stories.tsx +73 -0
  99. package/src/components/activity-rings.tsx +121 -0
  100. package/src/components/alert.stories.tsx +43 -0
  101. package/src/components/alert.tsx +132 -0
  102. package/src/components/answer-actions.stories.tsx +54 -0
  103. package/src/components/answer-actions.test.tsx +37 -0
  104. package/src/components/answer-actions.tsx +313 -0
  105. package/src/components/aspect-ratio.stories.tsx +32 -0
  106. package/src/components/aspect-ratio.tsx +5 -0
  107. package/src/components/avatar.stories.tsx +40 -0
  108. package/src/components/avatar.tsx +154 -0
  109. package/src/components/badge.stories.tsx +27 -0
  110. package/src/components/badge.tsx +63 -0
  111. package/src/components/bar-graph.stories.tsx +28 -0
  112. package/src/components/bar-graph.tsx +204 -0
  113. package/src/components/bento-grid.stories.tsx +23 -0
  114. package/src/components/bento-grid.tsx +67 -0
  115. package/src/components/blockquote.stories.tsx +28 -0
  116. package/src/components/blockquote.tsx +88 -0
  117. package/src/components/box-list.stories.tsx +25 -0
  118. package/src/components/box-list.tsx +108 -0
  119. package/src/components/bullet-list.stories.tsx +22 -0
  120. package/src/components/bullet-list.tsx +101 -0
  121. package/src/components/button-group.stories.tsx +31 -0
  122. package/src/components/button-group.tsx +156 -0
  123. package/src/components/button.stories.tsx +66 -0
  124. package/src/components/button.test.ts +17 -0
  125. package/src/components/button.tsx +139 -0
  126. package/src/components/calendar.stories.tsx +25 -0
  127. package/src/components/calendar.tsx +367 -0
  128. package/src/components/card.stories.tsx +44 -0
  129. package/src/components/card.tsx +392 -0
  130. package/src/components/cards-nav.stories.tsx +35 -0
  131. package/src/components/cards-nav.tsx +115 -0
  132. package/src/components/chain-of-thought.stories.tsx +67 -0
  133. package/src/components/chain-of-thought.test.tsx +50 -0
  134. package/src/components/chain-of-thought.tsx +170 -0
  135. package/src/components/chat-container.stories.tsx +47 -0
  136. package/src/components/chat-container.test.tsx +49 -0
  137. package/src/components/chat-container.tsx +222 -0
  138. package/src/components/chat-message.stories.tsx +52 -0
  139. package/src/components/chat-message.test.tsx +36 -0
  140. package/src/components/chat-message.tsx +163 -0
  141. package/src/components/checkbox-card.stories.tsx +27 -0
  142. package/src/components/checkbox-card.tsx +200 -0
  143. package/src/components/checkbox.stories.tsx +26 -0
  144. package/src/components/checkbox.tsx +61 -0
  145. package/src/components/citations.stories.tsx +64 -0
  146. package/src/components/citations.test.tsx +61 -0
  147. package/src/components/citations.tsx +220 -0
  148. package/src/components/combobox.stories.tsx +184 -0
  149. package/src/components/combobox.test.tsx +82 -0
  150. package/src/components/combobox.tsx +407 -0
  151. package/src/components/countdown-pill.stories.tsx +24 -0
  152. package/src/components/countdown-pill.tsx +129 -0
  153. package/src/components/cta.stories.tsx +29 -0
  154. package/src/components/cta.tsx +52 -0
  155. package/src/components/data-list.stories.tsx +50 -0
  156. package/src/components/data-list.test.tsx +35 -0
  157. package/src/components/data-list.tsx +181 -0
  158. package/src/components/data-table.stories.tsx +29 -0
  159. package/src/components/data-table.tsx +200 -0
  160. package/src/components/dialog.stories.tsx +42 -0
  161. package/src/components/dialog.tsx +200 -0
  162. package/src/components/drawer.stories.tsx +48 -0
  163. package/src/components/drawer.tsx +385 -0
  164. package/src/components/dropdown-menu.stories.tsx +41 -0
  165. package/src/components/dropdown-menu.tsx +252 -0
  166. package/src/components/dropzone.stories.tsx +19 -0
  167. package/src/components/dropzone.tsx +250 -0
  168. package/src/components/email-chips-input.stories.tsx +135 -0
  169. package/src/components/email-chips-input.tsx +210 -0
  170. package/src/components/empty-state.stories.tsx +22 -0
  171. package/src/components/empty-state.tsx +35 -0
  172. package/src/components/entity-header.stories.tsx +43 -0
  173. package/src/components/entity-header.test.tsx +35 -0
  174. package/src/components/entity-header.tsx +92 -0
  175. package/src/components/feature-grid.stories.tsx +25 -0
  176. package/src/components/feature-grid.tsx +87 -0
  177. package/src/components/feedback-bar.stories.tsx +25 -0
  178. package/src/components/feedback-bar.test.tsx +24 -0
  179. package/src/components/feedback-bar.tsx +62 -0
  180. package/src/components/footer.stories.tsx +23 -0
  181. package/src/components/footer.tsx +78 -0
  182. package/src/components/heading.stories.tsx +45 -0
  183. package/src/components/heading.test.tsx +22 -0
  184. package/src/components/heading.tsx +77 -0
  185. package/src/components/hero.stories.tsx +38 -0
  186. package/src/components/hero.tsx +498 -0
  187. package/src/components/input-button.stories.tsx +19 -0
  188. package/src/components/input-button.tsx +112 -0
  189. package/src/components/input-group.stories.tsx +38 -0
  190. package/src/components/input-group.tsx +157 -0
  191. package/src/components/input.stories.tsx +31 -0
  192. package/src/components/input.tsx +284 -0
  193. package/src/components/inset.stories.tsx +29 -0
  194. package/src/components/inset.tsx +70 -0
  195. package/src/components/kpi-card.stories.tsx +29 -0
  196. package/src/components/kpi-card.tsx +284 -0
  197. package/src/components/list-nav.stories.tsx +22 -0
  198. package/src/components/list-nav.tsx +145 -0
  199. package/src/components/logo-cloud.stories.tsx +23 -0
  200. package/src/components/logo-cloud.tsx +42 -0
  201. package/src/components/media-gallery.stories.tsx +25 -0
  202. package/src/components/media-gallery.tsx +347 -0
  203. package/src/components/message-actions.stories.tsx +45 -0
  204. package/src/components/message-actions.test.tsx +32 -0
  205. package/src/components/message-actions.tsx +119 -0
  206. package/src/components/nav-sidebar.stories.tsx +58 -0
  207. package/src/components/nav-sidebar.test.tsx +54 -0
  208. package/src/components/nav-sidebar.tsx +462 -0
  209. package/src/components/number-stepper.stories.tsx +19 -0
  210. package/src/components/number-stepper.tsx +158 -0
  211. package/src/components/page-header.stories.tsx +25 -0
  212. package/src/components/page-header.tsx +64 -0
  213. package/src/components/pagination.stories.tsx +110 -0
  214. package/src/components/pagination.test.tsx +46 -0
  215. package/src/components/pagination.tsx +144 -0
  216. package/src/components/popover.stories.tsx +26 -0
  217. package/src/components/popover.tsx +62 -0
  218. package/src/components/pricing.stories.tsx +42 -0
  219. package/src/components/pricing.tsx +130 -0
  220. package/src/components/progress.stories.tsx +22 -0
  221. package/src/components/progress.tsx +189 -0
  222. package/src/components/prompt-input.stories.tsx +62 -0
  223. package/src/components/prompt-input.test.tsx +106 -0
  224. package/src/components/prompt-input.tsx +343 -0
  225. package/src/components/prompt-suggestions.stories.tsx +53 -0
  226. package/src/components/prompt-suggestions.test.tsx +37 -0
  227. package/src/components/prompt-suggestions.tsx +122 -0
  228. package/src/components/quota-bar.stories.tsx +19 -0
  229. package/src/components/quota-bar.tsx +191 -0
  230. package/src/components/quote.stories.tsx +18 -0
  231. package/src/components/quote.tsx +43 -0
  232. package/src/components/radio-card.stories.tsx +27 -0
  233. package/src/components/radio-card.tsx +225 -0
  234. package/src/components/radio-group.stories.tsx +32 -0
  235. package/src/components/radio-group.tsx +68 -0
  236. package/src/components/reasoning.stories.tsx +50 -0
  237. package/src/components/reasoning.test.tsx +48 -0
  238. package/src/components/reasoning.tsx +143 -0
  239. package/src/components/search.stories.tsx +18 -0
  240. package/src/components/search.tsx +133 -0
  241. package/src/components/section-nav.stories.tsx +59 -0
  242. package/src/components/section-nav.test.tsx +36 -0
  243. package/src/components/section-nav.tsx +146 -0
  244. package/src/components/segmented-control.stories.tsx +22 -0
  245. package/src/components/segmented-control.tsx +301 -0
  246. package/src/components/select-button.stories.tsx +27 -0
  247. package/src/components/select-button.tsx +174 -0
  248. package/src/components/select.stories.tsx +27 -0
  249. package/src/components/select.tsx +198 -0
  250. package/src/components/separator.stories.tsx +22 -0
  251. package/src/components/separator.tsx +23 -0
  252. package/src/components/shimmer-text.stories.tsx +23 -0
  253. package/src/components/shimmer-text.test.tsx +35 -0
  254. package/src/components/shimmer-text.tsx +43 -0
  255. package/src/components/sidebar.stories.tsx +25 -0
  256. package/src/components/sidebar.tsx +234 -0
  257. package/src/components/skeleton.stories.tsx +22 -0
  258. package/src/components/skeleton.tsx +96 -0
  259. package/src/components/slider.stories.tsx +20 -0
  260. package/src/components/slider.tsx +176 -0
  261. package/src/components/slideshow.stories.tsx +30 -0
  262. package/src/components/slideshow.tsx +291 -0
  263. package/src/components/source.stories.tsx +32 -0
  264. package/src/components/source.test.tsx +40 -0
  265. package/src/components/source.tsx +161 -0
  266. package/src/components/spinner.stories.tsx +19 -0
  267. package/src/components/spinner.tsx +76 -0
  268. package/src/components/stat-strip.stories.tsx +36 -0
  269. package/src/components/stat-strip.test.tsx +25 -0
  270. package/src/components/stat-strip.tsx +85 -0
  271. package/src/components/stats.stories.tsx +24 -0
  272. package/src/components/stats.tsx +83 -0
  273. package/src/components/step-indicator.stories.tsx +18 -0
  274. package/src/components/step-indicator.test.tsx +18 -0
  275. package/src/components/step-indicator.tsx +286 -0
  276. package/src/components/switch.stories.tsx +26 -0
  277. package/src/components/switch.tsx +32 -0
  278. package/src/components/table.stories.tsx +38 -0
  279. package/src/components/table.tsx +220 -0
  280. package/src/components/tabs.stories.tsx +25 -0
  281. package/src/components/tabs.tsx +276 -0
  282. package/src/components/testimonials.stories.tsx +22 -0
  283. package/src/components/testimonials.tsx +109 -0
  284. package/src/components/text-link.stories.tsx +47 -0
  285. package/src/components/text-link.test.tsx +18 -0
  286. package/src/components/text-link.tsx +88 -0
  287. package/src/components/text.stories.tsx +49 -0
  288. package/src/components/text.tsx +105 -0
  289. package/src/components/thinking-bar.stories.tsx +19 -0
  290. package/src/components/thinking-bar.test.tsx +27 -0
  291. package/src/components/thinking-bar.tsx +64 -0
  292. package/src/components/thinking-steps.stories.tsx +44 -0
  293. package/src/components/thinking-steps.test.tsx +42 -0
  294. package/src/components/thinking-steps.tsx +92 -0
  295. package/src/components/toaster.stories.tsx +80 -0
  296. package/src/components/toaster.tsx +36 -0
  297. package/src/components/toggle.stories.tsx +21 -0
  298. package/src/components/toggle.tsx +103 -0
  299. package/src/components/tool-call-card.stories.tsx +97 -0
  300. package/src/components/tool-call-card.test.tsx +88 -0
  301. package/src/components/tool-call-card.tsx +231 -0
  302. package/src/components/tooltip.stories.tsx +25 -0
  303. package/src/components/tooltip.tsx +43 -0
  304. package/src/components/top-nav.stories.tsx +20 -0
  305. package/src/components/top-nav.tsx +76 -0
  306. package/src/docs/Colors.stories.tsx +192 -0
  307. package/src/docs/GettingStarted.mdx +72 -0
  308. package/src/docs/Mcp.mdx +52 -0
  309. package/src/docs/Typography.stories.tsx +114 -0
  310. package/src/hooks/use-in-view.ts +32 -0
  311. package/src/hooks/use-reduced-motion.ts +26 -0
  312. package/src/index.ts +343 -0
  313. package/src/lib/cn.test.ts +67 -0
  314. package/src/lib/cn.ts +81 -0
  315. package/src/lib/motion.ts +109 -0
  316. package/src/lib/prefix-utilities.test.ts +56 -0
  317. package/src/lib/prefix-utilities.ts +50 -0
  318. package/src/styles/base.css +489 -0
  319. package/src/styles/motion.css +69 -0
  320. package/src/styles/overrides.css +44 -0
  321. package/src/styles/typography.css +173 -0
  322. package/src/theme/theme.css +391 -0
  323. package/src/theme/tokens.ts +29 -0
  324. package/src/theme/types.ts +26 -0
  325. 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.