@cdx-ui/components 0.3.5 → 0.3.7

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 (416) hide show
  1. package/README.md +1 -1
  2. package/coverage.svg +1 -1
  3. package/docs/components/bar-chart/content.md +703 -0
  4. package/docs/components/content.md +10 -1
  5. package/docs/components/country-flag/content.md +232 -0
  6. package/docs/components/data-grid/content.md +3 -1
  7. package/docs/components/icon/content.md +1 -1
  8. package/docs/components/input/content.md +1 -0
  9. package/docs/components/line-chart/content.md +567 -0
  10. package/docs/components/pie-chart/content.md +493 -0
  11. package/docs/components/progress-bar/content.md +164 -3
  12. package/docs/components/progress-segmented/content.md +1 -1
  13. package/docs/components/select/content.md +1 -0
  14. package/docs/components/stepper/content.md +599 -0
  15. package/docs/components/system-alert/content.md +533 -0
  16. package/docs/foundations/expressions/icons/content.md +2 -1
  17. package/docs/foundations/styles/tokens/all-tokens/content.md +2 -1
  18. package/docs/getting-started/developers/content.md +1 -1
  19. package/docs/llms.txt +12 -0
  20. package/docs/patterns/content.md +1 -0
  21. package/docs/patterns/dashboard/content.md +423 -19
  22. package/docs/patterns/insights/content.md +659 -0
  23. package/docs/resources/content.md +1 -0
  24. package/docs/resources/release-notes/0.3.5/content.md +7 -0
  25. package/docs/resources/release-notes/0.3.6/content.md +29 -0
  26. package/docs/resources/release-notes/content.md +2 -0
  27. package/docs/resources/skills/content.md +66 -0
  28. package/lib/commonjs/components/BarChart/geometry.js +1130 -0
  29. package/lib/commonjs/components/BarChart/geometry.js.map +1 -0
  30. package/lib/commonjs/components/BarChart/index.js +935 -0
  31. package/lib/commonjs/components/BarChart/index.js.map +1 -0
  32. package/lib/commonjs/components/BarChart/styles.js +26 -0
  33. package/lib/commonjs/components/BarChart/styles.js.map +1 -0
  34. package/lib/commonjs/components/Button/index.js +2 -2
  35. package/lib/commonjs/components/Button/index.js.map +1 -1
  36. package/lib/commonjs/components/CountryFlag/index.js +56 -0
  37. package/lib/commonjs/components/CountryFlag/index.js.map +1 -0
  38. package/lib/commonjs/components/Input/index.js.map +1 -1
  39. package/lib/commonjs/components/LineChart/geometry.js +698 -0
  40. package/lib/commonjs/components/LineChart/geometry.js.map +1 -0
  41. package/lib/commonjs/components/LineChart/index.js +744 -0
  42. package/lib/commonjs/components/LineChart/index.js.map +1 -0
  43. package/lib/commonjs/components/LineChart/styles.js +25 -0
  44. package/lib/commonjs/components/LineChart/styles.js.map +1 -0
  45. package/lib/commonjs/components/PieChart/geometry.js +216 -0
  46. package/lib/commonjs/components/PieChart/geometry.js.map +1 -0
  47. package/lib/commonjs/components/PieChart/index.js +476 -0
  48. package/lib/commonjs/components/PieChart/index.js.map +1 -0
  49. package/lib/commonjs/components/PieChart/styles.js +88 -0
  50. package/lib/commonjs/components/PieChart/styles.js.map +1 -0
  51. package/lib/commonjs/components/ProgressBar/index.js +44 -12
  52. package/lib/commonjs/components/ProgressBar/index.js.map +1 -1
  53. package/lib/commonjs/components/ProgressBar/styles.js +31 -2
  54. package/lib/commonjs/components/ProgressBar/styles.js.map +1 -1
  55. package/lib/commonjs/components/ProgressCircle/ProgressCircleRing.js +9 -31
  56. package/lib/commonjs/components/ProgressCircle/ProgressCircleRing.js.map +1 -1
  57. package/lib/commonjs/components/ProgressCircle/ProgressRing.js +52 -0
  58. package/lib/commonjs/components/ProgressCircle/ProgressRing.js.map +1 -0
  59. package/lib/commonjs/components/ScrollShadow/useScrollShadow.js +8 -7
  60. package/lib/commonjs/components/ScrollShadow/useScrollShadow.js.map +1 -1
  61. package/lib/commonjs/components/Select/index.js.map +1 -1
  62. package/lib/commonjs/components/Stepper/index.js +369 -0
  63. package/lib/commonjs/components/Stepper/index.js.map +1 -0
  64. package/lib/commonjs/components/Stepper/styles.js +211 -0
  65. package/lib/commonjs/components/Stepper/styles.js.map +1 -0
  66. package/lib/commonjs/components/Stepper/useStepperLabelFit.js +22 -0
  67. package/lib/commonjs/components/Stepper/useStepperLabelFit.js.map +1 -0
  68. package/lib/commonjs/components/Stepper/useStepperLabelFit.web.js +52 -0
  69. package/lib/commonjs/components/Stepper/useStepperLabelFit.web.js.map +1 -0
  70. package/lib/commonjs/components/Stepper/useStepperRingColors.js +31 -0
  71. package/lib/commonjs/components/Stepper/useStepperRingColors.js.map +1 -0
  72. package/lib/commonjs/components/SystemAlert/animation.js +218 -0
  73. package/lib/commonjs/components/SystemAlert/animation.js.map +1 -0
  74. package/lib/commonjs/components/SystemAlert/index.js +525 -0
  75. package/lib/commonjs/components/SystemAlert/index.js.map +1 -0
  76. package/lib/commonjs/components/SystemAlert/styles.js +178 -0
  77. package/lib/commonjs/components/SystemAlert/styles.js.map +1 -0
  78. package/lib/commonjs/components/SystemAlert/useSystemAlertStatusBarStyle.js +53 -0
  79. package/lib/commonjs/components/SystemAlert/useSystemAlertStatusBarStyle.js.map +1 -0
  80. package/lib/commonjs/components/Tabs/index.js +4 -0
  81. package/lib/commonjs/components/Tabs/index.js.map +1 -1
  82. package/lib/commonjs/components/Tabs/styles.js +1 -1
  83. package/lib/commonjs/components/Tabs/styles.js.map +1 -1
  84. package/lib/commonjs/components/chart/ChartInspector.js +610 -0
  85. package/lib/commonjs/components/chart/ChartInspector.js.map +1 -0
  86. package/lib/commonjs/components/chart/format.js +93 -0
  87. package/lib/commonjs/components/chart/format.js.map +1 -0
  88. package/lib/commonjs/components/chart/hiddenSvgProps.js +23 -0
  89. package/lib/commonjs/components/chart/hiddenSvgProps.js.map +1 -0
  90. package/lib/commonjs/components/chart/index.js +2 -0
  91. package/lib/commonjs/components/chart/index.js.map +1 -0
  92. package/lib/commonjs/components/chart/motion.js +97 -0
  93. package/lib/commonjs/components/chart/motion.js.map +1 -0
  94. package/lib/commonjs/components/chart/palette.js +178 -0
  95. package/lib/commonjs/components/chart/palette.js.map +1 -0
  96. package/lib/commonjs/components/chart/size.js +34 -0
  97. package/lib/commonjs/components/chart/size.js.map +1 -0
  98. package/lib/commonjs/components/chart/ticks.js +59 -0
  99. package/lib/commonjs/components/chart/ticks.js.map +1 -0
  100. package/lib/commonjs/components/chart/types.js +6 -0
  101. package/lib/commonjs/components/chart/types.js.map +1 -0
  102. package/lib/commonjs/components/chart/useChartHostWidth.js +27 -0
  103. package/lib/commonjs/components/chart/useChartHostWidth.js.map +1 -0
  104. package/lib/commonjs/components/index.js +72 -0
  105. package/lib/commonjs/components/index.js.map +1 -1
  106. package/lib/commonjs/figma/Accordion.figma.js +2 -2
  107. package/lib/commonjs/figma/Accordion.figma.js.map +1 -1
  108. package/lib/commonjs/figma/Alert.figma.js +7 -7
  109. package/lib/commonjs/figma/Alert.figma.js.map +1 -1
  110. package/lib/commonjs/figma/Badge.Indicator.figma.js +6 -5
  111. package/lib/commonjs/figma/Badge.Indicator.figma.js.map +1 -1
  112. package/lib/commonjs/figma/Badge.figma.js +22 -22
  113. package/lib/commonjs/figma/Badge.figma.js.map +1 -1
  114. package/lib/commonjs/figma/Button.figma.js +5 -2
  115. package/lib/commonjs/figma/Button.figma.js.map +1 -1
  116. package/lib/commonjs/figma/CLAUDE.md +1 -0
  117. package/lib/commonjs/figma/Card.Header.figma.js +8 -4
  118. package/lib/commonjs/figma/Card.Header.figma.js.map +1 -1
  119. package/lib/commonjs/figma/Card.figma.js +2 -1
  120. package/lib/commonjs/figma/Card.figma.js.map +1 -1
  121. package/lib/commonjs/figma/Chip.figma.js +2 -2
  122. package/lib/commonjs/figma/Chip.figma.js.map +1 -1
  123. package/lib/commonjs/figma/CurrencyInput.figma.js +1 -1
  124. package/lib/commonjs/figma/CurrencyInput.figma.js.map +1 -1
  125. package/lib/commonjs/figma/Dialog.figma.js +5 -2
  126. package/lib/commonjs/figma/Dialog.figma.js.map +1 -1
  127. package/lib/commonjs/figma/Divider.figma.js +1 -1
  128. package/lib/commonjs/figma/Divider.figma.js.map +1 -1
  129. package/lib/commonjs/figma/Drawer.figma.js +3 -3
  130. package/lib/commonjs/figma/Drawer.figma.js.map +1 -1
  131. package/lib/commonjs/figma/IconButton.figma.js +10 -4
  132. package/lib/commonjs/figma/IconButton.figma.js.map +1 -1
  133. package/lib/commonjs/figma/Input.figma.js +2 -1
  134. package/lib/commonjs/figma/Input.figma.js.map +1 -1
  135. package/lib/commonjs/figma/Insight.figma.js +3 -3
  136. package/lib/commonjs/figma/Insight.figma.js.map +1 -1
  137. package/lib/commonjs/figma/ProgressBar.figma.js +11 -2
  138. package/lib/commonjs/figma/ProgressBar.figma.js.map +1 -1
  139. package/lib/commonjs/figma/ProgressSegmented.figma.js +9 -1
  140. package/lib/commonjs/figma/ProgressSegmented.figma.js.map +1 -1
  141. package/lib/commonjs/figma/Select.figma.js +2 -1
  142. package/lib/commonjs/figma/Select.figma.js.map +1 -1
  143. package/lib/commonjs/figma/SystemAlert.Button.figma.js +28 -0
  144. package/lib/commonjs/figma/SystemAlert.Button.figma.js.map +1 -0
  145. package/lib/commonjs/figma/SystemAlert.Close.figma.js +22 -0
  146. package/lib/commonjs/figma/SystemAlert.Close.figma.js.map +1 -0
  147. package/lib/commonjs/figma/SystemAlert.Description.figma.js +20 -0
  148. package/lib/commonjs/figma/SystemAlert.Description.figma.js.map +1 -0
  149. package/lib/commonjs/figma/SystemAlert.IconButton.figma.js +31 -0
  150. package/lib/commonjs/figma/SystemAlert.IconButton.figma.js.map +1 -0
  151. package/lib/commonjs/figma/SystemAlert.figma.js +47 -0
  152. package/lib/commonjs/figma/SystemAlert.figma.js.map +1 -0
  153. package/lib/commonjs/styles.css +0 -1
  154. package/lib/module/components/BarChart/geometry.js +1110 -0
  155. package/lib/module/components/BarChart/geometry.js.map +1 -0
  156. package/lib/module/components/BarChart/index.js +929 -0
  157. package/lib/module/components/BarChart/index.js.map +1 -0
  158. package/lib/module/components/BarChart/styles.js +22 -0
  159. package/lib/module/components/BarChart/styles.js.map +1 -0
  160. package/lib/module/components/Button/index.js +2 -2
  161. package/lib/module/components/Button/index.js.map +1 -1
  162. package/lib/module/components/CountryFlag/index.js +52 -0
  163. package/lib/module/components/CountryFlag/index.js.map +1 -0
  164. package/lib/module/components/Input/index.js.map +1 -1
  165. package/lib/module/components/LineChart/geometry.js +685 -0
  166. package/lib/module/components/LineChart/geometry.js.map +1 -0
  167. package/lib/module/components/LineChart/index.js +738 -0
  168. package/lib/module/components/LineChart/index.js.map +1 -0
  169. package/lib/module/components/LineChart/styles.js +21 -0
  170. package/lib/module/components/LineChart/styles.js.map +1 -0
  171. package/lib/module/components/PieChart/geometry.js +209 -0
  172. package/lib/module/components/PieChart/geometry.js.map +1 -0
  173. package/lib/module/components/PieChart/index.js +471 -0
  174. package/lib/module/components/PieChart/index.js.map +1 -0
  175. package/lib/module/components/PieChart/styles.js +84 -0
  176. package/lib/module/components/PieChart/styles.js.map +1 -0
  177. package/lib/module/components/ProgressBar/index.js +47 -15
  178. package/lib/module/components/ProgressBar/index.js.map +1 -1
  179. package/lib/module/components/ProgressBar/styles.js +31 -2
  180. package/lib/module/components/ProgressBar/styles.js.map +1 -1
  181. package/lib/module/components/ProgressCircle/ProgressCircleRing.js +10 -32
  182. package/lib/module/components/ProgressCircle/ProgressCircleRing.js.map +1 -1
  183. package/lib/module/components/ProgressCircle/ProgressRing.js +48 -0
  184. package/lib/module/components/ProgressCircle/ProgressRing.js.map +1 -0
  185. package/lib/module/components/ScrollShadow/useScrollShadow.js +8 -7
  186. package/lib/module/components/ScrollShadow/useScrollShadow.js.map +1 -1
  187. package/lib/module/components/Select/index.js.map +1 -1
  188. package/lib/module/components/Stepper/index.js +360 -0
  189. package/lib/module/components/Stepper/index.js.map +1 -0
  190. package/lib/module/components/Stepper/styles.js +206 -0
  191. package/lib/module/components/Stepper/styles.js.map +1 -0
  192. package/lib/module/components/Stepper/useStepperLabelFit.js +18 -0
  193. package/lib/module/components/Stepper/useStepperLabelFit.js.map +1 -0
  194. package/lib/module/components/Stepper/useStepperLabelFit.web.js +48 -0
  195. package/lib/module/components/Stepper/useStepperLabelFit.web.js.map +1 -0
  196. package/lib/module/components/Stepper/useStepperRingColors.js +28 -0
  197. package/lib/module/components/Stepper/useStepperRingColors.js.map +1 -0
  198. package/lib/module/components/SystemAlert/animation.js +213 -0
  199. package/lib/module/components/SystemAlert/animation.js.map +1 -0
  200. package/lib/module/components/SystemAlert/index.js +515 -0
  201. package/lib/module/components/SystemAlert/index.js.map +1 -0
  202. package/lib/module/components/SystemAlert/styles.js +174 -0
  203. package/lib/module/components/SystemAlert/styles.js.map +1 -0
  204. package/lib/module/components/SystemAlert/useSystemAlertStatusBarStyle.js +49 -0
  205. package/lib/module/components/SystemAlert/useSystemAlertStatusBarStyle.js.map +1 -0
  206. package/lib/module/components/Tabs/index.js +4 -0
  207. package/lib/module/components/Tabs/index.js.map +1 -1
  208. package/lib/module/components/Tabs/styles.js +1 -1
  209. package/lib/module/components/Tabs/styles.js.map +1 -1
  210. package/lib/module/components/chart/ChartInspector.js +600 -0
  211. package/lib/module/components/chart/ChartInspector.js.map +1 -0
  212. package/lib/module/components/chart/format.js +84 -0
  213. package/lib/module/components/chart/format.js.map +1 -0
  214. package/lib/module/components/chart/hiddenSvgProps.js +20 -0
  215. package/lib/module/components/chart/hiddenSvgProps.js.map +1 -0
  216. package/lib/module/components/chart/index.js +2 -0
  217. package/lib/module/components/chart/index.js.map +1 -0
  218. package/lib/module/components/chart/motion.js +89 -0
  219. package/lib/module/components/chart/motion.js.map +1 -0
  220. package/lib/module/components/chart/palette.js +168 -0
  221. package/lib/module/components/chart/palette.js.map +1 -0
  222. package/lib/module/components/chart/size.js +29 -0
  223. package/lib/module/components/chart/size.js.map +1 -0
  224. package/lib/module/components/chart/ticks.js +55 -0
  225. package/lib/module/components/chart/ticks.js.map +1 -0
  226. package/lib/module/components/chart/types.js +4 -0
  227. package/lib/module/components/chart/types.js.map +1 -0
  228. package/lib/module/components/chart/useChartHostWidth.js +23 -0
  229. package/lib/module/components/chart/useChartHostWidth.js.map +1 -0
  230. package/lib/module/components/index.js +6 -0
  231. package/lib/module/components/index.js.map +1 -1
  232. package/lib/module/figma/Accordion.figma.js +2 -2
  233. package/lib/module/figma/Accordion.figma.js.map +1 -1
  234. package/lib/module/figma/Alert.figma.js +7 -7
  235. package/lib/module/figma/Alert.figma.js.map +1 -1
  236. package/lib/module/figma/Badge.Indicator.figma.js +6 -5
  237. package/lib/module/figma/Badge.Indicator.figma.js.map +1 -1
  238. package/lib/module/figma/Badge.figma.js +22 -22
  239. package/lib/module/figma/Badge.figma.js.map +1 -1
  240. package/lib/module/figma/Button.figma.js +5 -2
  241. package/lib/module/figma/Button.figma.js.map +1 -1
  242. package/lib/module/figma/CLAUDE.md +1 -0
  243. package/lib/module/figma/Card.Header.figma.js +8 -4
  244. package/lib/module/figma/Card.Header.figma.js.map +1 -1
  245. package/lib/module/figma/Card.figma.js +2 -1
  246. package/lib/module/figma/Card.figma.js.map +1 -1
  247. package/lib/module/figma/Chip.figma.js +2 -2
  248. package/lib/module/figma/Chip.figma.js.map +1 -1
  249. package/lib/module/figma/CurrencyInput.figma.js +1 -1
  250. package/lib/module/figma/CurrencyInput.figma.js.map +1 -1
  251. package/lib/module/figma/Dialog.figma.js +5 -2
  252. package/lib/module/figma/Dialog.figma.js.map +1 -1
  253. package/lib/module/figma/Divider.figma.js +1 -1
  254. package/lib/module/figma/Divider.figma.js.map +1 -1
  255. package/lib/module/figma/Drawer.figma.js +3 -3
  256. package/lib/module/figma/Drawer.figma.js.map +1 -1
  257. package/lib/module/figma/IconButton.figma.js +10 -4
  258. package/lib/module/figma/IconButton.figma.js.map +1 -1
  259. package/lib/module/figma/Input.figma.js +2 -1
  260. package/lib/module/figma/Input.figma.js.map +1 -1
  261. package/lib/module/figma/Insight.figma.js +3 -3
  262. package/lib/module/figma/Insight.figma.js.map +1 -1
  263. package/lib/module/figma/ProgressBar.figma.js +12 -2
  264. package/lib/module/figma/ProgressBar.figma.js.map +1 -1
  265. package/lib/module/figma/ProgressSegmented.figma.js +9 -1
  266. package/lib/module/figma/ProgressSegmented.figma.js.map +1 -1
  267. package/lib/module/figma/Select.figma.js +2 -1
  268. package/lib/module/figma/Select.figma.js.map +1 -1
  269. package/lib/module/figma/SystemAlert.Button.figma.js +22 -0
  270. package/lib/module/figma/SystemAlert.Button.figma.js.map +1 -0
  271. package/lib/module/figma/SystemAlert.Close.figma.js +18 -0
  272. package/lib/module/figma/SystemAlert.Close.figma.js.map +1 -0
  273. package/lib/module/figma/SystemAlert.Description.figma.js +14 -0
  274. package/lib/module/figma/SystemAlert.Description.figma.js.map +1 -0
  275. package/lib/module/figma/SystemAlert.IconButton.figma.js +25 -0
  276. package/lib/module/figma/SystemAlert.IconButton.figma.js.map +1 -0
  277. package/lib/module/figma/SystemAlert.figma.js +41 -0
  278. package/lib/module/figma/SystemAlert.figma.js.map +1 -0
  279. package/lib/module/styles.css +0 -1
  280. package/lib/typescript/components/BarChart/geometry.d.ts +236 -0
  281. package/lib/typescript/components/BarChart/geometry.d.ts.map +1 -0
  282. package/lib/typescript/components/BarChart/index.d.ts +193 -0
  283. package/lib/typescript/components/BarChart/index.d.ts.map +1 -0
  284. package/lib/typescript/components/BarChart/styles.d.ts +32 -0
  285. package/lib/typescript/components/BarChart/styles.d.ts.map +1 -0
  286. package/lib/typescript/components/CountryFlag/index.d.ts +35 -0
  287. package/lib/typescript/components/CountryFlag/index.d.ts.map +1 -0
  288. package/lib/typescript/components/Input/index.d.ts +2 -0
  289. package/lib/typescript/components/Input/index.d.ts.map +1 -1
  290. package/lib/typescript/components/LineChart/geometry.d.ts +248 -0
  291. package/lib/typescript/components/LineChart/geometry.d.ts.map +1 -0
  292. package/lib/typescript/components/LineChart/index.d.ts +105 -0
  293. package/lib/typescript/components/LineChart/index.d.ts.map +1 -0
  294. package/lib/typescript/components/LineChart/styles.d.ts +12 -0
  295. package/lib/typescript/components/LineChart/styles.d.ts.map +1 -0
  296. package/lib/typescript/components/PieChart/geometry.d.ts +43 -0
  297. package/lib/typescript/components/PieChart/geometry.d.ts.map +1 -0
  298. package/lib/typescript/components/PieChart/index.d.ts +147 -0
  299. package/lib/typescript/components/PieChart/index.d.ts.map +1 -0
  300. package/lib/typescript/components/PieChart/styles.d.ts +27 -0
  301. package/lib/typescript/components/PieChart/styles.d.ts.map +1 -0
  302. package/lib/typescript/components/ProgressBar/index.d.ts +16 -1
  303. package/lib/typescript/components/ProgressBar/index.d.ts.map +1 -1
  304. package/lib/typescript/components/ProgressBar/styles.d.ts +7 -2
  305. package/lib/typescript/components/ProgressBar/styles.d.ts.map +1 -1
  306. package/lib/typescript/components/ProgressCircle/ProgressCircleRing.d.ts.map +1 -1
  307. package/lib/typescript/components/ProgressCircle/ProgressRing.d.ts +17 -0
  308. package/lib/typescript/components/ProgressCircle/ProgressRing.d.ts.map +1 -0
  309. package/lib/typescript/components/ScrollShadow/useScrollShadow.d.ts.map +1 -1
  310. package/lib/typescript/components/Select/index.d.ts +2 -0
  311. package/lib/typescript/components/Select/index.d.ts.map +1 -1
  312. package/lib/typescript/components/Stepper/index.d.ts +68 -0
  313. package/lib/typescript/components/Stepper/index.d.ts.map +1 -0
  314. package/lib/typescript/components/Stepper/styles.d.ts +46 -0
  315. package/lib/typescript/components/Stepper/styles.d.ts.map +1 -0
  316. package/lib/typescript/components/Stepper/useStepperLabelFit.d.ts +15 -0
  317. package/lib/typescript/components/Stepper/useStepperLabelFit.d.ts.map +1 -0
  318. package/lib/typescript/components/Stepper/useStepperLabelFit.web.d.ts +10 -0
  319. package/lib/typescript/components/Stepper/useStepperLabelFit.web.d.ts.map +1 -0
  320. package/lib/typescript/components/Stepper/useStepperRingColors.d.ts +6 -0
  321. package/lib/typescript/components/Stepper/useStepperRingColors.d.ts.map +1 -0
  322. package/lib/typescript/components/SystemAlert/animation.d.ts +56 -0
  323. package/lib/typescript/components/SystemAlert/animation.d.ts.map +1 -0
  324. package/lib/typescript/components/SystemAlert/index.d.ts +110 -0
  325. package/lib/typescript/components/SystemAlert/index.d.ts.map +1 -0
  326. package/lib/typescript/components/SystemAlert/styles.d.ts +38 -0
  327. package/lib/typescript/components/SystemAlert/styles.d.ts.map +1 -0
  328. package/lib/typescript/components/SystemAlert/useSystemAlertStatusBarStyle.d.ts +14 -0
  329. package/lib/typescript/components/SystemAlert/useSystemAlertStatusBarStyle.d.ts.map +1 -0
  330. package/lib/typescript/components/Tabs/index.d.ts.map +1 -1
  331. package/lib/typescript/components/chart/ChartInspector.d.ts +101 -0
  332. package/lib/typescript/components/chart/ChartInspector.d.ts.map +1 -0
  333. package/lib/typescript/components/chart/format.d.ts +16 -0
  334. package/lib/typescript/components/chart/format.d.ts.map +1 -0
  335. package/lib/typescript/components/chart/hiddenSvgProps.d.ts +17 -0
  336. package/lib/typescript/components/chart/hiddenSvgProps.d.ts.map +1 -0
  337. package/lib/typescript/components/chart/index.d.ts +3 -0
  338. package/lib/typescript/components/chart/index.d.ts.map +1 -0
  339. package/lib/typescript/components/chart/motion.d.ts +27 -0
  340. package/lib/typescript/components/chart/motion.d.ts.map +1 -0
  341. package/lib/typescript/components/chart/palette.d.ts +44 -0
  342. package/lib/typescript/components/chart/palette.d.ts.map +1 -0
  343. package/lib/typescript/components/chart/size.d.ts +25 -0
  344. package/lib/typescript/components/chart/size.d.ts.map +1 -0
  345. package/lib/typescript/components/chart/ticks.d.ts +3 -0
  346. package/lib/typescript/components/chart/ticks.d.ts.map +1 -0
  347. package/lib/typescript/components/chart/types.d.ts +163 -0
  348. package/lib/typescript/components/chart/types.d.ts.map +1 -0
  349. package/lib/typescript/components/chart/useChartHostWidth.d.ts +9 -0
  350. package/lib/typescript/components/chart/useChartHostWidth.d.ts.map +1 -0
  351. package/lib/typescript/components/index.d.ts +6 -0
  352. package/lib/typescript/components/index.d.ts.map +1 -1
  353. package/lib/typescript/figma/Alert.figma.d.ts.map +1 -1
  354. package/lib/typescript/figma/Badge.Indicator.figma.d.ts.map +1 -1
  355. package/lib/typescript/figma/Badge.figma.d.ts.map +1 -1
  356. package/lib/typescript/figma/Button.figma.d.ts.map +1 -1
  357. package/lib/typescript/figma/Card.Header.figma.d.ts.map +1 -1
  358. package/lib/typescript/figma/Card.figma.d.ts.map +1 -1
  359. package/lib/typescript/figma/Dialog.figma.d.ts.map +1 -1
  360. package/lib/typescript/figma/IconButton.figma.d.ts.map +1 -1
  361. package/lib/typescript/figma/Input.figma.d.ts.map +1 -1
  362. package/lib/typescript/figma/ProgressBar.figma.d.ts.map +1 -1
  363. package/lib/typescript/figma/ProgressSegmented.figma.d.ts.map +1 -1
  364. package/lib/typescript/figma/Select.figma.d.ts.map +1 -1
  365. package/lib/typescript/figma/SystemAlert.Button.figma.d.ts +11 -0
  366. package/lib/typescript/figma/SystemAlert.Button.figma.d.ts.map +1 -0
  367. package/lib/typescript/figma/SystemAlert.Close.figma.d.ts +11 -0
  368. package/lib/typescript/figma/SystemAlert.Close.figma.d.ts.map +1 -0
  369. package/lib/typescript/figma/SystemAlert.Description.figma.d.ts +8 -0
  370. package/lib/typescript/figma/SystemAlert.Description.figma.d.ts.map +1 -0
  371. package/lib/typescript/figma/SystemAlert.IconButton.figma.d.ts +11 -0
  372. package/lib/typescript/figma/SystemAlert.IconButton.figma.d.ts.map +1 -0
  373. package/lib/typescript/figma/SystemAlert.figma.d.ts +8 -0
  374. package/lib/typescript/figma/SystemAlert.figma.d.ts.map +1 -0
  375. package/package.json +5 -5
  376. package/src/components/BarChart/geometry.ts +1469 -0
  377. package/src/components/BarChart/index.tsx +1417 -0
  378. package/src/components/BarChart/styles.ts +31 -0
  379. package/src/components/Button/index.tsx +1 -1
  380. package/src/components/CountryFlag/index.tsx +53 -0
  381. package/src/components/Input/index.tsx +2 -0
  382. package/src/components/LineChart/geometry.ts +957 -0
  383. package/src/components/LineChart/index.tsx +1106 -0
  384. package/src/components/LineChart/styles.ts +26 -0
  385. package/src/components/PieChart/geometry.ts +295 -0
  386. package/src/components/PieChart/index.tsx +715 -0
  387. package/src/components/PieChart/styles.ts +101 -0
  388. package/src/components/ProgressBar/index.tsx +66 -14
  389. package/src/components/ProgressBar/styles.ts +35 -4
  390. package/src/components/ProgressCircle/ProgressCircleRing.tsx +10 -39
  391. package/src/components/ProgressCircle/ProgressRing.tsx +60 -0
  392. package/src/components/ScrollShadow/useScrollShadow.ts +12 -11
  393. package/src/components/Select/index.tsx +2 -0
  394. package/src/components/Stepper/index.tsx +452 -0
  395. package/src/components/Stepper/styles.ts +234 -0
  396. package/src/components/Stepper/useStepperLabelFit.ts +21 -0
  397. package/src/components/Stepper/useStepperLabelFit.web.ts +53 -0
  398. package/src/components/Stepper/useStepperRingColors.ts +29 -0
  399. package/src/components/SystemAlert/animation.ts +252 -0
  400. package/src/components/SystemAlert/index.tsx +684 -0
  401. package/src/components/SystemAlert/styles.ts +212 -0
  402. package/src/components/SystemAlert/useSystemAlertStatusBarStyle.ts +57 -0
  403. package/src/components/Tabs/index.tsx +4 -0
  404. package/src/components/Tabs/styles.ts +1 -1
  405. package/src/components/chart/ChartInspector.tsx +726 -0
  406. package/src/components/chart/format.ts +95 -0
  407. package/src/components/chart/hiddenSvgProps.ts +15 -0
  408. package/src/components/chart/index.ts +24 -0
  409. package/src/components/chart/motion.ts +98 -0
  410. package/src/components/chart/palette.tsx +247 -0
  411. package/src/components/chart/size.ts +21 -0
  412. package/src/components/chart/ticks.ts +53 -0
  413. package/src/components/chart/types.ts +183 -0
  414. package/src/components/chart/useChartHostWidth.ts +26 -0
  415. package/src/components/index.ts +6 -0
  416. package/src/styles.css +0 -1
@@ -0,0 +1,533 @@
1
+ # System Alert (https://design.candescent.com/docs/components/system-alert)
2
+
3
+ Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=8228-5936), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/feedback-systemalert--default)
4
+
5
+ A compound component for one app-wide message, with sub-components for the icon, the description, and trailing actions. It renders in the document flow and pushes the page down; it is not an overlay, toast, or portal. Open and close it with `isOpen`, and it slides in and out while pushing the content below it.
6
+
7
+ ```tsx
8
+ import { SystemAlert } from '@cdx-ui/components';
9
+ ```
10
+
11
+ > [!WARNING]
12
+ >
13
+ > **Mount it above the header**
14
+ >
15
+ > Render `SystemAlert` as the first child of the screen root, outside any `SafeAreaView` and outside
16
+ > the page `ScrollView`. On a screen with a SystemAlert, the app header must not apply its own top
17
+ > inset. See [Placement](#placement).
18
+
19
+ ## Basic
20
+
21
+ `color` defaults to `info`. `SystemAlert.Icon` renders the default glyph for the current `color`; pass `as` to replace it. Without `isOpen`, the banner shows for as long as it is mounted, with no motion. That fits a message decided when the screen loads that stays for the whole visit.
22
+
23
+ ```tsx
24
+ import { SystemAlert } from '@cdx-ui/components';
25
+
26
+ export default function SystemAlertBasicDemo() {
27
+ return (
28
+ <SystemAlert>
29
+ <SystemAlert.Icon />
30
+ <SystemAlert.Description>
31
+ Branches are closed on November 11 for Veterans Day.
32
+ </SystemAlert.Description>
33
+ </SystemAlert>
34
+ );
35
+ }
36
+ ```
37
+
38
+ ## Colors
39
+
40
+ `color` sets the strong surface, the icon, the text, and every control. `danger` and `warning` interrupt screen readers; `success`, `info`, and `brand` announce politely. Use `brand` for announcements that carry no urgency.
41
+
42
+ ```tsx
43
+ import { SystemAlert, VStack } from '@cdx-ui/components';
44
+
45
+ export default function SystemAlertColorsDemo() {
46
+ return (
47
+ <VStack space="md" className="w-full">
48
+ <SystemAlert color="danger">
49
+ <SystemAlert.Icon />
50
+ <SystemAlert.Description>
51
+ Online banking is unavailable. We are working to restore service.
52
+ </SystemAlert.Description>
53
+ </SystemAlert>
54
+ <SystemAlert color="warning">
55
+ <SystemAlert.Icon />
56
+ <SystemAlert.Description>
57
+ Verify your email address to keep receiving statements.
58
+ </SystemAlert.Description>
59
+ </SystemAlert>
60
+ <SystemAlert color="success">
61
+ <SystemAlert.Icon />
62
+ <SystemAlert.Description>
63
+ Service has been restored. Thank you for your patience.
64
+ </SystemAlert.Description>
65
+ </SystemAlert>
66
+ <SystemAlert color="info">
67
+ <SystemAlert.Icon />
68
+ <SystemAlert.Description>
69
+ Branches are closed on November 11 for Veterans Day.
70
+ </SystemAlert.Description>
71
+ </SystemAlert>
72
+ <SystemAlert color="brand">
73
+ <SystemAlert.Icon />
74
+ <SystemAlert.Description>
75
+ New budgeting tools are now available in Insights.
76
+ </SystemAlert.Description>
77
+ </SystemAlert>
78
+ </VStack>
79
+ );
80
+ }
81
+ ```
82
+
83
+ ## Controlled
84
+
85
+ Set `isOpen` to open or close the banner while someone is on the screen, including when they dismiss it. Opening slides the banner down from the top edge, through the status-bar area, and then pushes the header and page down by its height. Closing reverses it. A banner with `isOpen={true}` on the first render appears in place without motion. `isOpen` is controlled only, so set it to `false` from `onClose`. Here, the bell button opens a `brand` banner, and dismissing it moves focus back to the bell.
86
+
87
+ ```tsx
88
+ import { useRef, useState, type ComponentRef } from 'react';
89
+ import {
90
+ Box,
91
+ Card,
92
+ Heading,
93
+ IconButton,
94
+ ListItem,
95
+ ScrollView,
96
+ SystemAlert,
97
+ Text,
98
+ } from '@cdx-ui/components';
99
+ import { Notifications } from '@cdx-ui/icons';
100
+
101
+ const ACCOUNTS = [
102
+ { id: 'checking', name: 'Everyday Checking · 6643', balance: '$2,450.00' },
103
+ { id: 'savings', name: 'High-Yield Savings · 1180', balance: '$12,875.42' },
104
+ { id: 'card', name: 'Rewards Visa · 3021', balance: '$684.19' },
105
+ { id: 'cd', name: '12-Month CD · 5507', balance: '$5,000.00' },
106
+ { id: 'auto', name: 'Auto Loan · 8812', balance: '$14,310.77' },
107
+ { id: 'mortgage', name: 'Mortgage · 2290', balance: '$212,904.03' },
108
+ ];
109
+
110
+ export default function SystemAlertPresenceDemo() {
111
+ const [isNoticeOpen, setIsNoticeOpen] = useState(false);
112
+ const openRef = useRef<ComponentRef<typeof IconButton>>(null);
113
+
114
+ const close = () => {
115
+ openRef.current?.focus();
116
+ setIsNoticeOpen(false);
117
+ };
118
+
119
+ return (
120
+ <Box className="h-120 w-full max-w-sm">
121
+ <Card fullBleed className="flex-1">
122
+ <SystemAlert color="brand" isOpen={isNoticeOpen} onClose={close}>
123
+ <SystemAlert.Icon />
124
+ <SystemAlert.Description>
125
+ New budgeting tools are now in Insights.
126
+ </SystemAlert.Description>
127
+ </SystemAlert>
128
+ <Card.Header>
129
+ <Heading size="sm">Accounts</Heading>
130
+ <IconButton
131
+ ref={openRef}
132
+ as={Notifications}
133
+ variant="ghost"
134
+ accessibilityLabel="What's new"
135
+ onPress={() => setIsNoticeOpen(true)}
136
+ />
137
+ </Card.Header>
138
+ <ScrollView className="flex-1">
139
+ {ACCOUNTS.map((account, index) => (
140
+ <ListItem key={account.id} showSeparator={index < ACCOUNTS.length - 1}>
141
+ <ListItem.Content>
142
+ <ListItem.Title>{account.name}</ListItem.Title>
143
+ <ListItem.Description>Available balance</ListItem.Description>
144
+ </ListItem.Content>
145
+ <ListItem.TrailingSlot>
146
+ <Text>{account.balance}</Text>
147
+ </ListItem.TrailingSlot>
148
+ </ListItem>
149
+ ))}
150
+ </ScrollView>
151
+ </Card>
152
+ </Box>
153
+ );
154
+ }
155
+ ```
156
+
157
+ > [!WARNING]
158
+ >
159
+ > **Keep it mounted**
160
+ >
161
+ > Close a banner with `isOpen={false}`; do not unmount it. Unmounting removes it in one frame, so
162
+ > the header and page jump up. While closed, the banner reserves a transparent strip the height of
163
+ > the top inset on iOS and Android, so the header below never applies its own top inset on that
164
+ > screen, open or closed. Unmounting removes the strip too, and the header slides under the status
165
+ > bar.
166
+
167
+ The closed strip is transparent, so match the colour behind the banner to the header. Either set the screen root's background to the header's colour and give the page `ScrollView` its own background, or wrap the banner in a `View` with the header's background. On web the inset is zero, so the closed banner takes no space.
168
+
169
+ Open `info` and `brand` banners, such as a "What's new" notice, from a control. Open `danger` and `warning` from app state, such as an outage, a failed payment, or a required verification, rather than from a control: an assertive alert interrupts screen reader users, which is wrong for something they just asked to see.
170
+
171
+ ## With actions
172
+
173
+ Put `SystemAlert.Action` and `SystemAlert.IconAction` inside `SystemAlert.Actions`. Set `onClose` to add a dismiss button as the last control. SystemAlert does not close itself: in `onClose`, move focus to a sensible target, then set `isOpen={false}`. Here, dismissing moves focus to the **Show alert** button, which opens the banner again.
174
+
175
+ ```tsx
176
+ import { useRef, useState, type ComponentRef } from 'react';
177
+ import { Button, SystemAlert, VStack } from '@cdx-ui/components';
178
+ import { Refresh } from '@cdx-ui/icons';
179
+
180
+ export default function SystemAlertWithActionsDemo() {
181
+ const [isOpen, setIsOpen] = useState(true);
182
+ const showRef = useRef<ComponentRef<typeof Button>>(null);
183
+
184
+ const close = () => {
185
+ showRef.current?.focus();
186
+ setIsOpen(false);
187
+ };
188
+
189
+ return (
190
+ <VStack space="lg" className="w-full items-start">
191
+ <SystemAlert color="info" isOpen={isOpen} onClose={close}>
192
+ <SystemAlert.Icon />
193
+ <SystemAlert.Description>
194
+ Mobile check deposit is down for maintenance until 6 AM ET.
195
+ </SystemAlert.Description>
196
+ <SystemAlert.Actions>
197
+ <SystemAlert.Action onPress={() => {}}>Details</SystemAlert.Action>
198
+ <SystemAlert.IconAction
199
+ as={Refresh}
200
+ accessibilityLabel="Check service status"
201
+ onPress={() => {}}
202
+ />
203
+ </SystemAlert.Actions>
204
+ </SystemAlert>
205
+ <Button ref={showRef} variant="outline" size="small" onPress={() => setIsOpen(true)}>
206
+ <Button.Label>Show alert</Button.Label>
207
+ </Button>
208
+ </VStack>
209
+ );
210
+ }
211
+ ```
212
+
213
+ ## Text wrapping
214
+
215
+ The description wraps and the banner grows downward, while the icon and trailing controls stay aligned with the first line. There is no default line limit. Use nested `Text` with `weight="bold"` for a lead-in.
216
+
217
+ ```tsx
218
+ import { Box, SystemAlert, Text } from '@cdx-ui/components';
219
+
220
+ export default function SystemAlertTextWrappingDemo() {
221
+ return (
222
+ <Box className="w-full max-w-xs">
223
+ <SystemAlert color="warning" onClose={() => {}}>
224
+ <SystemAlert.Icon />
225
+ <SystemAlert.Description>
226
+ <Text weight="bold">Action required:</Text> confirm your mailing address by December 1 to
227
+ keep receiving paper statements and tax documents.
228
+ </SystemAlert.Description>
229
+ <SystemAlert.Actions>
230
+ <SystemAlert.Action onPress={() => {}}>Confirm</SystemAlert.Action>
231
+ </SystemAlert.Actions>
232
+ </SystemAlert>
233
+ </Box>
234
+ );
235
+ }
236
+ ```
237
+
238
+ To clamp the message, set `numberOfLines` on `SystemAlert.Description`. Keep the link to the full message in `SystemAlert.Actions` so the ellipsis never clips it. Screen readers still read the full text.
239
+
240
+ ```tsx
241
+ import { Box, SystemAlert, Text } from '@cdx-ui/components';
242
+
243
+ export default function SystemAlertTruncatedDemo() {
244
+ return (
245
+ <Box className="w-full max-w-sm">
246
+ <SystemAlert color="info">
247
+ <SystemAlert.Icon />
248
+ <SystemAlert.Description numberOfLines={1}>
249
+ <Text weight="bold">Important:</Text> starting December 1, wire transfers submitted after
250
+ 4 PM ET are processed on the next business day.
251
+ </SystemAlert.Description>
252
+ <SystemAlert.Actions>
253
+ <SystemAlert.Action onPress={() => {}}>View details</SystemAlert.Action>
254
+ </SystemAlert.Actions>
255
+ </SystemAlert>
256
+ </Box>
257
+ );
258
+ }
259
+ ```
260
+
261
+ ## Placement
262
+
263
+ The banner is the first child of the screen root, then the header, then the page `ScrollView`. On iOS and Android the surface paints behind the status bar and the content row starts below the top safe-area inset; on web the inset is zero. Because it sits outside the `ScrollView`, it stays pinned while the page scrolls. Dismissing it slides it up, the header and page move up with it, and focus moves to the notifications button, whose warning dot shows there is an alert to reopen.
264
+
265
+ ```tsx
266
+ import { useRef, useState, type ComponentRef } from 'react';
267
+ import {
268
+ Badge,
269
+ Box,
270
+ Card,
271
+ Heading,
272
+ IconButton,
273
+ ListItem,
274
+ ScrollView,
275
+ SystemAlert,
276
+ } from '@cdx-ui/components';
277
+ import { Download, Notifications } from '@cdx-ui/icons';
278
+
279
+ const STATEMENTS = [
280
+ { id: '2026-09', period: 'September 2026', issued: 'Issued Oct 1' },
281
+ { id: '2026-08', period: 'August 2026', issued: 'Issued Sep 1' },
282
+ { id: '2026-07', period: 'July 2026', issued: 'Issued Aug 1' },
283
+ { id: '2026-06', period: 'June 2026', issued: 'Issued Jul 1' },
284
+ { id: '2026-05', period: 'May 2026', issued: 'Issued Jun 1' },
285
+ { id: '2026-04', period: 'April 2026', issued: 'Issued May 1' },
286
+ { id: '2026-03', period: 'March 2026', issued: 'Issued Apr 1' },
287
+ ];
288
+
289
+ export default function SystemAlertPlacementDemo() {
290
+ const [isAlertOpen, setIsAlertOpen] = useState(true);
291
+ const notificationsRef = useRef<ComponentRef<typeof IconButton>>(null);
292
+
293
+ const close = () => {
294
+ notificationsRef.current?.focus();
295
+ setIsAlertOpen(false);
296
+ };
297
+
298
+ return (
299
+ <Box className="h-120 w-full max-w-sm">
300
+ <Card fullBleed className="flex-1">
301
+ <SystemAlert color="warning" isOpen={isAlertOpen} onClose={close}>
302
+ <SystemAlert.Icon />
303
+ <SystemAlert.Description>
304
+ Verify your email address to keep receiving statements.
305
+ </SystemAlert.Description>
306
+ <SystemAlert.Actions>
307
+ <SystemAlert.Action onPress={() => {}}>Verify</SystemAlert.Action>
308
+ </SystemAlert.Actions>
309
+ </SystemAlert>
310
+ <Card.Header>
311
+ <Heading size="sm">Statements</Heading>
312
+ <Badge variant="dot" color="warning" overlap="circular">
313
+ <IconButton
314
+ ref={notificationsRef}
315
+ as={Notifications}
316
+ variant="ghost"
317
+ accessibilityLabel="Notifications, 1 alert"
318
+ onPress={() => setIsAlertOpen(true)}
319
+ />
320
+ </Badge>
321
+ </Card.Header>
322
+ <ScrollView className="flex-1">
323
+ {STATEMENTS.map((statement, index) => (
324
+ <ListItem key={statement.id} showSeparator={index < STATEMENTS.length - 1}>
325
+ <ListItem.Content>
326
+ <ListItem.Title>{statement.period}</ListItem.Title>
327
+ <ListItem.Description>{statement.issued}</ListItem.Description>
328
+ </ListItem.Content>
329
+ <ListItem.TrailingSlot>
330
+ <IconButton
331
+ as={Download}
332
+ variant="ghost"
333
+ accessibilityLabel={`Download ${statement.period} statement`}
334
+ onPress={() => {}}
335
+ />
336
+ </ListItem.TrailingSlot>
337
+ </ListItem>
338
+ ))}
339
+ </ScrollView>
340
+ </Card>
341
+ </Box>
342
+ );
343
+ }
344
+ ```
345
+
346
+ ## Multiple
347
+
348
+ Every banner pads by the top inset by default. When you stack a second banner below the first, set `hasSafeAreaInset={false}` on it so the inset is applied once. Use the same setting for a banner that does not sit at the top edge of the screen.
349
+
350
+ ```tsx
351
+ import { Box, SystemAlert } from '@cdx-ui/components';
352
+
353
+ export default function SystemAlertMultipleDemo() {
354
+ return (
355
+ <Box className="w-full">
356
+ <SystemAlert color="danger">
357
+ <SystemAlert.Icon />
358
+ <SystemAlert.Description>
359
+ Online banking is unavailable. We are working to restore service.
360
+ </SystemAlert.Description>
361
+ </SystemAlert>
362
+ <SystemAlert color="info" hasSafeAreaInset={false}>
363
+ <SystemAlert.Icon />
364
+ <SystemAlert.Description>
365
+ Branches are closed on November 11 for Veterans Day.
366
+ </SystemAlert.Description>
367
+ </SystemAlert>
368
+ </Box>
369
+ );
370
+ }
371
+ ```
372
+
373
+ ## API
374
+
375
+ ### SystemAlert
376
+
377
+ Root banner. Its `children` render in source order inside the content row, followed by the dismiss button when `onClose` is set. Children are not matched by type, so wrapping a sub-component in `memo()` or your own component keeps its place.
378
+
379
+ | Prop | Type | Default | Description |
380
+ | --- | --- | --- | --- |
381
+ | `className?` | `string` | — | — |
382
+ | `children?` | `ReactNode` | — | Rendered in order inside the content row, typically `SystemAlert.Icon`, `SystemAlert.Description`, and `SystemAlert.Actions`. |
383
+ | `color?` | `'danger' \| 'warning' \| 'success' \| 'info' \| 'brand'` | `'info'` | Colour treatment. Drives the surface, the default icon, and live-region urgency: `danger` and `warning` announce assertively, the rest politely. |
384
+ | `asChild?` | `boolean` | — | Replace the root element with the consumer's child element via `Slot`. When `true`, children render as-is: no body row and no close button. The `color` context is still provided so sub-components receive the correct styles. |
385
+ | `hasSafeAreaInset?` | `boolean` | `true` | Pad the top of the root by the top safe-area inset so the surface paints behind the status bar and the content row starts below it. Set `false` for a banner that does not sit at the top edge of the screen. The inset is zero on web and without a safe-area provider. |
386
+ | `onClose?` | `(() => void)` | — | Renders a dismiss button as the last control in the row. |
387
+ | `closeAccessibilityLabel?` | `string` | `'Dismiss alert'` | Accessible name for the dismiss button. |
388
+ | `isOpen?` | `boolean` | — | Controlled presence. Omit it for a banner that shows while mounted, with no motion. When set, SystemAlert stays mounted and owns presence: `false` → `true` slides the banner down from the top edge and pushes the content below it, and `true` → `false` reverses that, then removes the surface. `true` on first render shows the banner in place without motion. While closed with `hasSafeAreaInset`, a transparent strip the height of the top inset stays reserved, so the header below never applies the inset. Pick one mode per mount: switching between omitted and set is not supported. |
389
+ | `animation?` | `'disable-all'` | — | Pass `'disable-all'` to open and close in one frame, without motion. Has no effect without `isOpen`. |
390
+
391
+ Inherits all [`ViewProps`](https://reactnative.dev/docs/view#props).
392
+
393
+ | Attribute | danger / warning | success / info / brand |
394
+ | ------------------------- | ---------------- | ---------------------- |
395
+ | `role` | `alert` | `status` |
396
+ | `accessibilityLiveRegion` | `assertive` | `polite` |
397
+
398
+ The prop is `color`, not `severity`. This is a deliberate exception to the rule that props driving live-region urgency and icon selection are named `severity`. `brand` carries no urgency, so no severity value describes it, and `Toast` already uses `color` to choose both its icon and `role="alert"`. [`Alert`](https://design.candescent.com/docs/components/alert/content.md) keeps `severity`.
399
+
400
+ ## Sub-components
401
+
402
+ ### SystemAlert.Icon
403
+
404
+ Leading glyph, hidden from assistive tech. Renders `EmergencyHome` for `danger`, `Warning` for `warning`, `CheckCircle` for `success`, `Info` for `info`, and `Error` for `brand`. Override with `as`.
405
+
406
+ | Prop | Type | Default | Description |
407
+ | --- | --- | --- | --- |
408
+ | `className?` | `string` | — | Utility classes for size (`size-*`) and placement, merged after the defaults. |
409
+ | `children?` | `ReactNode` | — | — |
410
+ | `filled?` | `boolean` | — | When `true`, renders the filled variant of the icon (if available). Defaults to `false` (outlined). |
411
+ | `size?` | `string \| number` | — | Width and height of the icon, in pixels or any SVG length. The bare icon renders at 24 when omitted. |
412
+ | `data-testid?` | `string` | — | Test identifier forwarded to the rendered SVG. |
413
+ | `as?` | `ForgeIcon` | — | Override the default icon for the current `color` (`EmergencyHome`, `Warning`, `CheckCircle`, `Info`, or `Error` for `brand`). Not required when `asChild` is set. |
414
+ | `asChild?` | `boolean` | — | — |
415
+
416
+ Inherits all `ForgeIconProps` (react-native-svg `SvgProps` plus `filled` and `size`).
417
+
418
+ ### SystemAlert.Description
419
+
420
+ Message text in the banner's on-strong colour. It fills the space between the icon and the controls.
421
+
422
+ | Prop | Type | Default | Description |
423
+ | --- | --- | --- | --- |
424
+ | `className?` | `string` | — | — |
425
+ | `children?` | `ReactNode` | — | Message text. Wraps by default; pass `numberOfLines` to clamp it. With `isOpen` on the root, its plain text is what iOS announces when the banner opens, so it must be passed as children rather than resolved inside a child component. |
426
+ | `asChild?` | `boolean` | — | — |
427
+
428
+ Inherits all [`TextProps`](https://reactnative.dev/docs/text#props), including `numberOfLines`.
429
+
430
+ ### SystemAlert.Actions
431
+
432
+ Row of trailing controls, placed after `SystemAlert.Description`.
433
+
434
+ | Prop | Type | Default | Description |
435
+ | --- | --- | --- | --- |
436
+ | `className?` | `string` | — | — |
437
+ | `children?` | `ReactNode` | — | Typically `SystemAlert.Action` and `SystemAlert.IconAction`. |
438
+ | `asChild?` | `boolean` | — | — |
439
+
440
+ Inherits all [`ViewProps`](https://reactnative.dev/docs/view#props).
441
+
442
+ ### SystemAlert.Action
443
+
444
+ Text control rendered as a ghost, small [`Button`](https://design.candescent.com/docs/components/button/content.md), restyled so its label, hover, press, and focus ring stay legible on the strong surface. Children are wrapped in `Button.Label`.
445
+
446
+ | Prop | Type | Default | Description |
447
+ | --- | --- | --- | --- |
448
+ | `className?` | `string` | — | Additional Uniwind/Tailwind classes, merged after the button's own styles. |
449
+ | `children?` | `ReactNode` | — | Label text, rendered inside `Button.Label`. |
450
+
451
+ Inherits all `Button` props except `variant`, `color`, `size`, `fullWidth`, and `asChild`.
452
+
453
+ ### SystemAlert.IconAction
454
+
455
+ Icon-only control rendered as a ghost, small [`IconButton`](https://design.candescent.com/docs/components/icon-button/content.md), restyled for the strong surface like `SystemAlert.Action`.
456
+
457
+ | Prop | Type | Default | Description |
458
+ | --- | --- | --- | --- |
459
+ | `className?` | `string` | — | — |
460
+ | `children?` | `ReactNode \| ((state: PressableStateCallbackType) => React.ReactNode)` | — | Either children or a render prop that receives a boolean reflecting whether the component is currently pressed. |
461
+ | `as` | `ForgeIcon` | — | Forge icon component to render. |
462
+ | `accessibilityLabel` | `string` | — | Accessible name. Required: the control has no visible text. |
463
+
464
+ Inherits all `IconButton` props except `variant`, `color`, and `size`.
465
+
466
+ ## Hook
467
+
468
+ ### useSystemAlertStatusBarStyle
469
+
470
+ Returns the status-bar glyph style, `'light'` or `'dark'`, that matches a banner's text on its strong surface in the active theme. Pass it to whatever owns the status bar, such as `expo-status-bar`'s `style`, React Native `StatusBar`'s `barStyle` (as `'light-content'` or `'dark-content'`), or your navigator's status-bar option:
471
+
472
+ ```tsx
473
+ const statusBarStyle = useSystemAlertStatusBarStyle('danger');
474
+ ```
475
+
476
+ | Argument | Type | Description |
477
+ | -------- | ------------------ | -------------------- |
478
+ | `color` | `SystemAlertColor` | The banner's `color` |
479
+
480
+ ## Anatomy
481
+
482
+ | `data-slot` | Element |
483
+ | -------------------------- | ---------------------------------------------- |
484
+ | `system-alert` | Root surface |
485
+ | `system-alert-icon` | Leading icon |
486
+ | `system-alert-description` | Message text |
487
+ | `system-alert-actions` | Trailing controls row |
488
+ | `system-alert-action` | Text control |
489
+ | `system-alert-icon-action` | Icon-only control |
490
+ | `system-alert-close` | Dismiss button, rendered when `onClose` is set |
491
+
492
+ ## Constraints
493
+
494
+ - Mount SystemAlert as the first child of the screen root, above the header. Inside a `SafeAreaView`, or below a header that applies its own top inset, the top inset is applied twice. Inside the page `ScrollView`, the banner scrolls away.
495
+ - On a screen with a SystemAlert, the app header must not apply its own top inset. With `isOpen`, that holds while the banner is closed too, because the closed banner keeps the inset strip. If your navigator draws the header, turn its top inset off on that screen.
496
+ - The app sets the native status-bar style; SystemAlert does not, and neither platform adapts the glyphs to the banner on its own. The glyphs sit on the banner's surface, so match them to the banner's text colour with [`useSystemAlertStatusBarStyle`](#usesystemalertstatusbarstyle). Light and dark mode give different answers: in dark mode every strong surface is pale and needs dark glyphs. Apply the style only while the banner is open and its screen is focused, so it does not leak onto other tabs or a modal flow.
497
+ - Visibility is consumer-owned: SystemAlert never closes or dismisses itself. With `isOpen`, it animates open and closed in the document flow, never as an overlay. Without `isOpen`, it shows while mounted, and mounting or unmounting it moves the content below in one frame.
498
+ - Choose one mode per mount: switching a mounted banner between omitting `isOpen` and setting it is not supported.
499
+ - With `isOpen`, do not put margin classes on SystemAlert's `className`. The banner moves inside a clipping wrapper that cuts margins off; put spacing on a parent instead.
500
+ - With `isOpen` on stacked banners, the inset stays with the top banner. If the top banner closes while the second stays open, the top banner's strip keeps the status-bar area and the second banner does not paint behind the status bar.
501
+ - Motion turns off with Reduce Motion, `animation="disable-all"`, or a parent that disables animation, and the banner opens and closes in one frame.
502
+ - On web, an app-shell layout (a fixed-height column with its own scroll container) behaves as on native: an opening banner pushes the header and shrinks the scroll area.
503
+ - On a web page where the document scrolls, mount SystemAlert as the first child of the app root, above the layout.
504
+ - On a document-scroll page, keep the header in flow or `sticky`, not `fixed`. Flow cannot push a `fixed` header or sidebar, so the banner opens underneath it.
505
+ - On a document-scroll page, the push is visible only near the top of the page. Opened while the page is scrolled down, the browser keeps the visible content still and the banner opens out of view; screen readers still announce it.
506
+ - Content spans the full width on wide screens. There is no max-width container.
507
+
508
+ ## When to use
509
+
510
+ | Use `Alert` when… | Use `SystemAlert` when… |
511
+ | ----------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
512
+ | The message is about one section, form, or task on the page | The message applies to the whole app, such as a closure, an outage, or a required action |
513
+ | It sits inline in the content, next to what it describes | It sits at the top edge of the screen, above the header |
514
+ | It needs a separate title | A single line of copy, with an optional bold lead-in, is enough |
515
+
516
+ For brief confirmation of something the user just did, use [`Toast`](https://design.candescent.com/docs/components/toast/content.md).
517
+
518
+ ## Accessibility
519
+
520
+ | Attribute | Behavior |
521
+ | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
522
+ | **Live region** | `danger` and `warning` render `role="alert"` with an assertive live region and interrupt screen readers. `success`, `info`, and `brand` render `role="status"` with a polite live region. |
523
+ | **Announcement on mount** | A banner present when the screen first renders is not announced; live regions announce changes. Because it is the first element in reading order, screen reader users reach it first. |
524
+ | **Announcement on open** | With `isOpen`, opening announces the banner as it starts to slide, and focus does not move. iOS: SystemAlert announces the `SystemAlert.Description` text, interrupting speech for `danger` and `warning` and queuing it for the other colours. Android: the live region sits on a wrapper that stays mounted while closed, so TalkBack reads the opened banner as a change inside it. Web: inserting the `role="alert"` or `role="status"` surface announces it. |
525
+ | **Announcement text** | iOS reads the plain text passed as `SystemAlert.Description` children, including nested `Text`. Text a child component resolves itself, such as a translation component that takes a key, cannot be read: the banner opens without an announcement, and a development-only warning is logged on iOS. |
526
+ | **Closed strip** | The transparent inset strip of a closed controlled banner is not an accessibility element, so screen readers move straight to the header. |
527
+ | **Reading order** | First in the accessibility tree, before the header. Each control is a separate focus stop, and the dismiss button comes last. There is no focus trap and no Escape handling. |
528
+ | **Dismiss button** | Its label defaults to `Dismiss alert`; set `closeAccessibilityLabel` to change it. |
529
+ | **Dismissing** | Consumer-owned. SystemAlert calls `onClose` and does not close itself. In `onClose`, move focus to a sensible target first, such as the control that opened the banner or the header's first control, then set `isOpen={false}`. When the exit starts, the banner is hidden from assistive tech and stops receiving touches and clicks. Chrome ignores `aria-hidden` on an element that still holds focus, so focus left on the dismiss button keeps the closing banner exposed. |
530
+ | **Reduced motion** | With Reduce Motion on, a controlled banner opens and closes in one frame. On iOS and Android this needs `ForgeDesignProvider`; on web, `prefers-reduced-motion` applies. |
531
+ | **Icon** | Decorative. The meaning of `color` must also be in the description. |
532
+ | **`SystemAlert.IconAction`** | `accessibilityLabel` is required, because the control has no visible text. |
533
+ | **Truncation** | `numberOfLines` only clips visually; the full description stays in the accessibility tree. |
@@ -3,7 +3,8 @@
3
3
  Cross-platform icon library for Forge UI, built on [Material Symbols](https://fonts.google.com/icons) (outlined style, weight 400, optical size 24). Renders via `react-native-svg` and targets iOS, Android, and Web.
4
4
 
5
5
  3,986 icons are available, each with outlined and filled variants, plus support for custom
6
- SVGs.
6
+ SVGs. Country flags are a separate set and do not appear in the browser below. Render one with
7
+ [`CountryFlag`](https://design.candescent.com/docs/components/country-flag/content.md).
7
8
 
8
9
  ```bash
9
10
  pnpm add @cdx-ui/icons
@@ -209,4 +209,5 @@ Data-visualization colors, used as `bg-*` utilities. Light and Dark name the pri
209
209
  | `chart.categorical.5` | `bg-chart-categorical-5` | Categorical, 5 | `color.purple.600` | `color.purple.600` |
210
210
  | `chart.categorical.6` | `bg-chart-categorical-6` | Categorical, 6 | `color.neutral.600` | `color.neutral.600` |
211
211
  | `chart.simple.primary` | `bg-chart-simple-primary` | Simple, primary | `color.brand.500` | `color.brand.500` |
212
- | `chart.simple.secondary` | `bg-chart-simple-secondary` | Simple, secondary | `color.brand.950` | `color.brand.950` |
212
+ | `chart.simple.secondary` | `bg-chart-simple-secondary` | Simple, secondary | `color.brand.900` | `color.brand.900` |
213
+ | `chart.simple.tertiary` | `bg-chart-simple-tertiary` | Simple, tertiary | `color.brand.700` | `color.brand.700` |
@@ -93,7 +93,7 @@ Create `global.css` in your project root:
93
93
  - **`@custom-variant dark`** — Switches Tailwind v4's dark mode from `@media (prefers-color-scheme)` to class-based activation. Required for `ScopedTheme` to work on web. Harmless if you don't use `ScopedTheme` — global dark mode continues to work via `Uniwind.setTheme()`.
94
94
  - **`@cdx-ui/styles/theme.css`** — Design tokens (colors, spacing, radii, shadows, fonts) as a Tailwind v4 `@theme static` block, plus light/dark mode and platform font overrides via `@variant`.
95
95
  - **`@cdx-ui/styles/utilities.css`** — Composite typography utilities (`heading-xl`…`heading-xs`, `body-xl`…`body-xs`, `label-sm`, `label-xs`) used by `Heading`, `Text`, and `Link`. Each has a `-size` companion (`body-sm-size`) that sets only the font size, line height, and letter spacing, so nested text can change size and keep its inherited font family and weight.
96
- - **`@cdx-ui/components/styles.css`** — `@source` directive telling Tailwind where to scan for component utility classes.
96
+ - **`@cdx-ui/components/styles.css`** — `@source` directive telling Tailwind where to scan for component utility classes. If you use `DataGrid`, also import `@cdx-ui/data-grid/styles.css`, which does the same for `@cdx-ui/data-grid`.
97
97
 
98
98
  > [!NOTE]
99
99
  >
package/docs/llms.txt CHANGED
@@ -75,6 +75,7 @@ Links point at each page's `content.md`, which carries the page's prose, demo so
75
75
  - [Progress Bar](components/progress-bar/content.md): A continuous progress bar that visualizes determinate or indeterminate progress with a compound track and indicator. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=4927-541), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/feedback-progressbar--default)
76
76
  - [Progress Circle](components/progress-circle/content.md): A circular progress indicator that visualizes determinate or indeterminate progress with a compound ring and indicator. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=2616-182), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/feedback-progresscircle--default)
77
77
  - [Progress Segmented](components/progress-segmented/content.md): A segmented progress bar that visualizes step-by-step completion as a row of discrete segments. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--React-Native-Components?node-id=449-449), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/feedback-progresssegmented--default)
78
+ - [Stepper](components/stepper/content.md): A vertical or horizontal list of labeled steps that shows which step is current, which are complete, and how far each one has progressed. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/navigation-stepper--default)
78
79
  - [Skeleton](components/skeleton/content.md): A pulsing loading placeholder shaped via className — no intrinsic size, layout preserved while content loads. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=11476-16576), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/feedback-skeleton--default)
79
80
 
80
81
  - **Content display**
@@ -84,6 +85,7 @@ Links point at each page's `content.md`, which carries the page's prose, demo so
84
85
  - [Divider](components/divider/content.md): A horizontal or vertical separator for grouping related content, with an optional inline label. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=6771-8895), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/layout-divider--default)
85
86
  - [Insurance Disclosure](components/insurance-disclosure/content.md): Domain-specific regulatory disclosure — official FDIC lockup with optional copy for account footers, deposit screens, and onboarding. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=8550-3291), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/domain-insurancedisclosure--default)
86
87
  - [Icon](components/icon/content.md): A cross-platform SVG icon wrapper with semantic color, sizing, filled variants, and accessibility support. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--React-Native-Components?node-id=397-33), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/content-icon--default)
88
+ - [Country Flag](components/country-flag/content.md): A country flag rendered from an officially assigned ISO 3166-1 alpha-2 code. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/content-countryflag--default)
87
89
  - [Image](components/image/content.md): Displays local or remote images across native and web platforms. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=9091-16186), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/content-image--default)
88
90
  - [List Item](components/list-item/content.md): A composable row for display and navigation — accounts, transactions, alerts, settings, and nav rows. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--React-Native-Components?node-id=3710-4649), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/surfaces-listitem--default)
89
91
  - [Reorderable List](components/reorderable-list/content.md): A short, mount-all list that lets members drag rows into a new order via an explicit handle. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/layout-reorderablelist--default)
@@ -93,6 +95,7 @@ Links point at each page's `content.md`, which carries the page's prose, demo so
93
95
 
94
96
  - **Feedback**
95
97
  - [Alert](components/alert/content.md): An inline severity banner that renders contextual feedback — danger, warning, success, or info — with an optional title, body, and trailing actions. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--React-Native-Components?node-id=6665-19536), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/feedback-alert--default)
98
+ - [System Alert](components/system-alert/content.md): A full-width, strong-surface banner at the top of the screen for app-wide messages such as closures, outages, and required actions. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=8228-5936), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/feedback-systemalert--default)
96
99
  - [Alert Dialog](components/alert-dialog/content.md): A modal confirmation for destructive or important actions that requires an explicit response. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=4428-496), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/overlays-alertdialog--default)
97
100
  - [Dialog](components/dialog/content.md): A modal overlay that interrupts the user with critical information or decisions requiring immediate attention. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=4331-429), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/overlays-dialog--default) Design guidance: [design.md](components/dialog/design.md)
98
101
  - [Full Screen Dialog](components/full-screen-dialog/content.md): A modal page that covers the viewport with a back, title, and close header for single-step or multi-step tasks. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/overlays-fullscreendialog--default)
@@ -118,6 +121,11 @@ Links point at each page's `content.md`, which carries the page's prose, demo so
118
121
  - [Data Grid](components/data-grid/content.md): A web data grid with rows, columns, sort, filters, selection, and pagination. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/data-visualization-datagrid--default)
119
122
  - [Table](components/table/content.md): A presentational compound table for displaying tabular data with consistent Forge styling. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/data-visualization-table--default)
120
123
  - [Table Pagination](components/table-pagination/content.md): A compound pager for moving between pages of a list or table. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/navigation-tablepagination--default)
124
+
125
+ - **Charts**
126
+ - [Bar Chart](components/bar-chart/content.md): A vertical or horizontal bar chart for comparing categories, with grouped, stacked, overlay, and waterfall series. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/charts-barchart--default)
127
+ - [Line Chart](components/line-chart/content.md): A line or area chart for values over time, with per-series styling, dashed forecasts, and event markers. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/charts-linechart--default)
128
+ - [Pie Chart](components/pie-chart/content.md): A pie or donut chart for share-of-whole data, with a category legend, tooltip, and optional selection. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/charts-piechart--default)
121
129
  - Patterns
122
130
  - [Patterns](patterns/content.md): Reusable combinations of components that address common user experiences. Browse by category to find a ready-to-use pattern.
123
131
  - [Authentication](patterns/authentication/content.md): Login, signup, OTP verification, and biometric authentication screens.
@@ -126,6 +134,7 @@ Links point at each page's `content.md`, which carries the page's prose, demo so
126
134
  - [Onboarding](patterns/onboarding/content.md): Welcome screens, setup wizards, and guided first-run experiences.
127
135
  - [Settings](patterns/settings/content.md): User preferences, notification controls, and account settings.
128
136
  - [Dashboard](patterns/dashboard/content.md): Home screens, greetings, summaries, and at-a-glance views.
137
+ - [Insights](patterns/insights/content.md): Personalized insight cards that pair a headline with a chart, table, or actions.
129
138
  - [Forms](patterns/forms/content.md): Data entry patterns for personal info, addresses, and profile editing.
130
139
  - [Empty States](patterns/empty-states/content.md): Placeholder screens shown when content is not yet available.
131
140
  - Resources
@@ -133,6 +142,7 @@ Links point at each page's `content.md`, which carries the page's prose, demo so
133
142
 
134
143
  - **Tools**
135
144
  - [Figma libraries](resources/figma-libraries/content.md): Access our official design system Figma libraries
145
+ - [Agent skills](resources/skills/content.md): Teach AI coding agents to build with Forge UI components as they ship, without restyling them.
136
146
 
137
147
  - **Changelogs**
138
148
  - Release notes
@@ -140,6 +150,8 @@ Links point at each page's `content.md`, which carries the page's prose, demo so
140
150
 
141
151
  ## Release notes
142
152
 
153
+ - [0.3.6](resources/release-notes/0.3.6/content.md): Adds SystemAlert, bar, line, and pie charts on a shared MUI X-shaped API, Stepper, and a fix for tabs scroll controls.
154
+ - [0.3.5](resources/release-notes/0.3.5/content.md): Selected subtle Chip labels stay visible on Android when the variant changes from outline to subtle.
143
155
  - [0.3.4](resources/release-notes/0.3.4/content.md): Select adds multiple selection, in-list search, and a native bottom sheet; Input gains a subtle variant for fields inside popups and sheets.
144
156
  - [0.3.3](resources/release-notes/0.3.3/content.md): Insight and InsightStack add dismissible summary cards with status colors, optional AI styling, and stacked depth for insight feeds.
145
157
  - [0.3.2](resources/release-notes/0.3.2/content.md): CurrencyInput adds an outline variant for bordered amount fields; BottomSheet opens reliably in optimized web production builds.