@cdx-ui/components 0.3.2 → 0.3.4

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 (125) hide show
  1. package/README.md +2 -2
  2. package/coverage.svg +1 -1
  3. package/docs/components/color-field/content.md +2 -2
  4. package/docs/components/content.md +6 -4
  5. package/docs/components/data-grid/content.md +125 -1
  6. package/docs/components/date-field/content.md +2 -2
  7. package/docs/components/date-time-field/content.md +2 -2
  8. package/docs/components/input/content.md +20 -2
  9. package/docs/components/input/design.md +1 -1
  10. package/docs/components/insight/content.md +644 -0
  11. package/docs/components/insight-stack/content.md +231 -0
  12. package/docs/components/insurance-disclosure/content.md +1 -1
  13. package/docs/components/otp-input/content.md +2 -2
  14. package/docs/components/select/content.md +223 -24
  15. package/docs/components/text/content.md +97 -0
  16. package/docs/foundations/styles/tokens/all-tokens/content.md +23 -3
  17. package/docs/llms.txt +8 -4
  18. package/docs/patterns/forms/content.md +407 -0
  19. package/docs/resources/release-notes/0.3.2/content.md +17 -0
  20. package/docs/resources/release-notes/0.3.3/content.md +23 -0
  21. package/docs/resources/release-notes/content.md +2 -0
  22. package/lib/commonjs/components/Drawer/index.js +1 -1
  23. package/lib/commonjs/components/Drawer/index.js.map +1 -1
  24. package/lib/commonjs/components/Input/index.js.map +1 -1
  25. package/lib/commonjs/components/Input/styles.js +13 -6
  26. package/lib/commonjs/components/Input/styles.js.map +1 -1
  27. package/lib/commonjs/components/Insight/index.js +438 -0
  28. package/lib/commonjs/components/Insight/index.js.map +1 -0
  29. package/lib/commonjs/components/Insight/insetRadius.js +35 -0
  30. package/lib/commonjs/components/Insight/insetRadius.js.map +1 -0
  31. package/lib/commonjs/components/Insight/styles.js +186 -0
  32. package/lib/commonjs/components/Insight/styles.js.map +1 -0
  33. package/lib/commonjs/components/InsightStack/index.js +93 -0
  34. package/lib/commonjs/components/InsightStack/index.js.map +1 -0
  35. package/lib/commonjs/components/InsightStack/styles.js +61 -0
  36. package/lib/commonjs/components/InsightStack/styles.js.map +1 -0
  37. package/lib/commonjs/components/OtpInput/index.js.map +1 -1
  38. package/lib/commonjs/components/Select/index.js +326 -24
  39. package/lib/commonjs/components/Select/index.js.map +1 -1
  40. package/lib/commonjs/components/Select/styles.js +32 -1
  41. package/lib/commonjs/components/Select/styles.js.map +1 -1
  42. package/lib/commonjs/components/index.js +24 -0
  43. package/lib/commonjs/components/index.js.map +1 -1
  44. package/lib/commonjs/components/picker/surfaces.js +18 -3
  45. package/lib/commonjs/components/picker/surfaces.js.map +1 -1
  46. package/lib/commonjs/figma/Insight.figma.js +73 -0
  47. package/lib/commonjs/figma/Insight.figma.js.map +1 -0
  48. package/lib/commonjs/figma/InsightStack.figma.js +39 -0
  49. package/lib/commonjs/figma/InsightStack.figma.js.map +1 -0
  50. package/lib/module/components/Drawer/index.js +1 -1
  51. package/lib/module/components/Drawer/index.js.map +1 -1
  52. package/lib/module/components/Input/index.js.map +1 -1
  53. package/lib/module/components/Input/styles.js +14 -6
  54. package/lib/module/components/Input/styles.js.map +1 -1
  55. package/lib/module/components/Insight/index.js +433 -0
  56. package/lib/module/components/Insight/index.js.map +1 -0
  57. package/lib/module/components/Insight/insetRadius.js +30 -0
  58. package/lib/module/components/Insight/insetRadius.js.map +1 -0
  59. package/lib/module/components/Insight/styles.js +183 -0
  60. package/lib/module/components/Insight/styles.js.map +1 -0
  61. package/lib/module/components/InsightStack/index.js +89 -0
  62. package/lib/module/components/InsightStack/index.js.map +1 -0
  63. package/lib/module/components/InsightStack/styles.js +58 -0
  64. package/lib/module/components/InsightStack/styles.js.map +1 -0
  65. package/lib/module/components/OtpInput/index.js.map +1 -1
  66. package/lib/module/components/Select/index.js +328 -26
  67. package/lib/module/components/Select/index.js.map +1 -1
  68. package/lib/module/components/Select/styles.js +31 -0
  69. package/lib/module/components/Select/styles.js.map +1 -1
  70. package/lib/module/components/index.js +2 -0
  71. package/lib/module/components/index.js.map +1 -1
  72. package/lib/module/components/picker/surfaces.js +17 -3
  73. package/lib/module/components/picker/surfaces.js.map +1 -1
  74. package/lib/module/figma/Insight.figma.js +67 -0
  75. package/lib/module/figma/Insight.figma.js.map +1 -0
  76. package/lib/module/figma/InsightStack.figma.js +33 -0
  77. package/lib/module/figma/InsightStack.figma.js.map +1 -0
  78. package/lib/typescript/components/ColorField/styles.d.ts +4 -2
  79. package/lib/typescript/components/ColorField/styles.d.ts.map +1 -1
  80. package/lib/typescript/components/DateField/styles.d.ts +4 -2
  81. package/lib/typescript/components/DateField/styles.d.ts.map +1 -1
  82. package/lib/typescript/components/Input/index.d.ts +3 -2
  83. package/lib/typescript/components/Input/index.d.ts.map +1 -1
  84. package/lib/typescript/components/Input/styles.d.ts +1 -1
  85. package/lib/typescript/components/Input/styles.d.ts.map +1 -1
  86. package/lib/typescript/components/Insight/index.d.ts +87 -0
  87. package/lib/typescript/components/Insight/index.d.ts.map +1 -0
  88. package/lib/typescript/components/Insight/insetRadius.d.ts +8 -0
  89. package/lib/typescript/components/Insight/insetRadius.d.ts.map +1 -0
  90. package/lib/typescript/components/Insight/styles.d.ts +33 -0
  91. package/lib/typescript/components/Insight/styles.d.ts.map +1 -0
  92. package/lib/typescript/components/InsightStack/index.d.ts +21 -0
  93. package/lib/typescript/components/InsightStack/index.d.ts.map +1 -0
  94. package/lib/typescript/components/InsightStack/styles.d.ts +11 -0
  95. package/lib/typescript/components/InsightStack/styles.d.ts.map +1 -0
  96. package/lib/typescript/components/OtpInput/index.d.ts +3 -2
  97. package/lib/typescript/components/OtpInput/index.d.ts.map +1 -1
  98. package/lib/typescript/components/Select/index.d.ts +73 -6
  99. package/lib/typescript/components/Select/index.d.ts.map +1 -1
  100. package/lib/typescript/components/Select/styles.d.ts +9 -0
  101. package/lib/typescript/components/Select/styles.d.ts.map +1 -1
  102. package/lib/typescript/components/index.d.ts +2 -0
  103. package/lib/typescript/components/index.d.ts.map +1 -1
  104. package/lib/typescript/components/picker/surfaces.d.ts +14 -3
  105. package/lib/typescript/components/picker/surfaces.d.ts.map +1 -1
  106. package/lib/typescript/figma/Insight.figma.d.ts +8 -0
  107. package/lib/typescript/figma/Insight.figma.d.ts.map +1 -0
  108. package/lib/typescript/figma/InsightStack.figma.d.ts +8 -0
  109. package/lib/typescript/figma/InsightStack.figma.d.ts.map +1 -0
  110. package/package.json +5 -5
  111. package/src/components/ColorField/styles.ts +3 -1
  112. package/src/components/DateField/styles.ts +6 -1
  113. package/src/components/Drawer/index.tsx +1 -1
  114. package/src/components/Input/index.tsx +3 -2
  115. package/src/components/Input/styles.ts +35 -15
  116. package/src/components/Insight/index.tsx +531 -0
  117. package/src/components/Insight/insetRadius.ts +30 -0
  118. package/src/components/Insight/styles.ts +193 -0
  119. package/src/components/InsightStack/index.tsx +86 -0
  120. package/src/components/InsightStack/styles.ts +61 -0
  121. package/src/components/OtpInput/index.tsx +3 -2
  122. package/src/components/Select/index.tsx +411 -29
  123. package/src/components/Select/styles.ts +36 -0
  124. package/src/components/index.ts +2 -0
  125. package/src/components/picker/surfaces.tsx +29 -4
@@ -124,6 +124,103 @@ export default function TextItalicDemo() {
124
124
  }
125
125
  ```
126
126
 
127
+ ## Nested
128
+
129
+ Place a `Text` inside another text element to style part of a sentence. A nested `Text` inherits `color`, `size`, `weight` and the font family from its parent, and each prop it sets overrides only that one.
130
+
131
+ ```tsx
132
+ import { Box, Text } from '@cdx-ui/components';
133
+
134
+ export default function TextNestedDemo() {
135
+ return (
136
+ <Box className="gap-4">
137
+ <Text color="secondary" size="lg" weight="medium">
138
+ Inherits everything: <Text>Your statement is ready to download.</Text>
139
+ </Text>
140
+ <Text color="secondary" size="lg" weight="medium">
141
+ Overrides color only: <Text color="danger">Your payment is past due.</Text>
142
+ </Text>
143
+ <Text color="secondary" size="lg" weight="medium">
144
+ Overrides size and weight:{' '}
145
+ <Text size="sm" weight="bold">
146
+ Your statement is ready to download.
147
+ </Text>
148
+ </Text>
149
+ <Text color="secondary" size="lg" weight="bold">
150
+ Overrides size only, keeps bold: <Text size="sm">Your statement is ready to download.</Text>
151
+ </Text>
152
+ </Box>
153
+ );
154
+ }
155
+ ```
156
+
157
+ ### Inside text slots
158
+
159
+ The same inheritance applies inside `Heading` and text slots such as `Button.Label` and `Alert.Description`, so emphasis follows the surrounding component's styles.
160
+
161
+ ```tsx
162
+ import { Alert, Box, Button, Heading, Text } from '@cdx-ui/components';
163
+
164
+ export default function TextNestedSlotsDemo() {
165
+ return (
166
+ <Box className="gap-4">
167
+ <Heading size="sm">
168
+ Inside a Heading: <Text color="action">Savings goals</Text>
169
+ </Heading>
170
+ <Button>
171
+ <Button.Label>
172
+ Inside Button.Label: <Text weight="bold">Transfer</Text>
173
+ </Button.Label>
174
+ </Button>
175
+ <Alert severity="info">
176
+ <Alert.Description>
177
+ Inside Alert.Description: <Text weight="semibold">Transfers settle by 5 p.m.</Text>
178
+ </Alert.Description>
179
+ </Alert>
180
+ </Box>
181
+ );
182
+ }
183
+ ```
184
+
185
+ ### Inline emphasis
186
+
187
+ Combine nested `Text` elements to highlight amounts, statuses and links within running copy.
188
+
189
+ ```tsx
190
+ import { Box, Text } from '@cdx-ui/components';
191
+
192
+ export default function TextNestedInlineDemo() {
193
+ return (
194
+ <Box className="gap-3">
195
+ <Text>
196
+ Your available balance is <Text weight="bold">$2,481.16</Text>, up{' '}
197
+ <Text color="success" weight="semibold">
198
+ $120.00
199
+ </Text>{' '}
200
+ since yesterday.
201
+ </Text>
202
+ <Text color="secondary" size="sm">
203
+ Posted <Text weight="medium">Oct 14</Text> · Pending{' '}
204
+ <Text color="warning" italic>
205
+ 2 transactions
206
+ </Text>
207
+ </Text>
208
+ <Text size="sm" color="tertiary">
209
+ By continuing you agree to the{' '}
210
+ <Text color="action" weight="medium">
211
+ Terms of Service
212
+ </Text>{' '}
213
+ and{' '}
214
+ <Text color="action" weight="medium">
215
+ Privacy Policy
216
+ </Text>
217
+ .
218
+ </Text>
219
+ </Box>
220
+ );
221
+ }
222
+ ```
223
+
127
224
  ## API
128
225
 
129
226
  ### Text
@@ -64,13 +64,13 @@ Text and icon colors, used as `text-*` utilities. Light and Dark name the primit
64
64
  | `content.neutral-on-subtle` | `text-content-neutral-on-subtle` | neutral, on subtle | `color.base.800` | `color.base.100` |
65
65
  | `content.info` | `text-content-info` | info | `color.sky.700` | `color.sky.500` |
66
66
  | `content.info-on-strong` | `text-content-info-on-strong` | info, on strong | `color.white` | `color.white` |
67
- | `content.info-on-subtle` | `text-content-info-on-subtle` | info, on subtle | `color.sky.900` | `color.sky.900` |
67
+ | `content.info-on-subtle` | `text-content-info-on-subtle` | info, on subtle | `color.sky.900` | `color.sky.100` |
68
68
  | `content.success` | `text-content-success` | success | `color.green.700` | `color.green.600` |
69
69
  | `content.success-on-strong` | `text-content-success-on-strong` | success, on strong | `color.white` | `color.white` |
70
- | `content.success-on-subtle` | `text-content-success-on-subtle` | success, on subtle | `color.green.900` | `color.green.900` |
70
+ | `content.success-on-subtle` | `text-content-success-on-subtle` | success, on subtle | `color.green.900` | `color.green.100` |
71
71
  | `content.warning` | `text-content-warning` | warning | `color.amber.700` | `color.amber.600` |
72
72
  | `content.warning-on-strong` | `text-content-warning-on-strong` | warning, on strong | `color.black` | `color.black` |
73
- | `content.warning-on-subtle` | `text-content-warning-on-subtle` | warning, on subtle | `color.amber.900` | `color.amber.900` |
73
+ | `content.warning-on-subtle` | `text-content-warning-on-subtle` | warning, on subtle | `color.amber.900` | `color.amber.100` |
74
74
  | `content.danger` | `text-content-danger` | danger | `color.red.700` | `color.red.300` |
75
75
  | `content.danger-on-strong` | `text-content-danger-on-strong` | danger, on strong | `color.white` | `color.red.900` |
76
76
  | `content.danger-on-subtle` | `text-content-danger-on-subtle` | danger, on subtle | `color.red.900` | `color.red.100` |
@@ -106,12 +106,24 @@ Background colors, used as `bg-*` utilities. Light and Dark name the primitive e
106
106
  | `surface.action.tint-hover` | `bg-surface-action-tint-hover` | Action, tint, hover | `color.brand.100` | `color.brand.900` |
107
107
  | `surface.action.tint-active` | `bg-surface-action-tint-active` | Action, tint, active | `color.brand.200` | `color.brand.800` |
108
108
  | `surface.brand.strong` | `bg-surface-brand-strong` | Brand, strong | `color.brand.700` | `color.brand.300` |
109
+ | `surface.brand.strong-hover` | `bg-surface-brand-strong-hover` | Brand, strong, hover | `color.brand.800` | `color.brand.200` |
110
+ | `surface.brand.strong-active` | `bg-surface-brand-strong-active` | Brand, strong, active | `color.brand.900` | `color.brand.100` |
109
111
  | `surface.brand.subtle` | `bg-surface-brand-subtle` | Brand, subtle | `color.brand.200` | `color.brand.900` |
112
+ | `surface.brand.subtle-hover` | `bg-surface-brand-subtle-hover` | Brand, subtle, hover | `color.brand.300` | `color.brand.800` |
113
+ | `surface.brand.subtle-active` | `bg-surface-brand-subtle-active` | Brand, subtle, active | `color.brand.400` | `color.brand.700` |
110
114
  | `surface.brand.tint` | `bg-surface-brand-tint` | Brand, tint | `color.brand.50` | `color.brand.950` |
115
+ | `surface.brand.tint-hover` | `bg-surface-brand-tint-hover` | Brand, tint, hover | `color.brand.100` | `color.brand.900` |
116
+ | `surface.brand.tint-active` | `bg-surface-brand-tint-active` | Brand, tint, active | `color.brand.200` | `color.brand.800` |
111
117
  | `surface.brand.core` | `bg-surface-brand-core` | Brand, core | `color.brand.input` | `color.brand.input` |
112
118
  | `surface.accent.strong` | `bg-surface-accent-strong` | Accent, strong | `color.accent.700` | `color.accent.300` |
119
+ | `surface.accent.strong-hover` | `bg-surface-accent-strong-hover` | Accent, strong, hover | `color.accent.800` | `color.accent.200` |
120
+ | `surface.accent.strong-active` | `bg-surface-accent-strong-active` | Accent, strong, active | `color.accent.900` | `color.accent.100` |
113
121
  | `surface.accent.subtle` | `bg-surface-accent-subtle` | Accent, subtle | `color.accent.200` | `color.accent.900` |
122
+ | `surface.accent.subtle-hover` | `bg-surface-accent-subtle-hover` | Accent, subtle, hover | `color.accent.300` | `color.accent.800` |
123
+ | `surface.accent.subtle-active` | `bg-surface-accent-subtle-active` | Accent, subtle, active | `color.accent.400` | `color.accent.700` |
114
124
  | `surface.accent.tint` | `bg-surface-accent-tint` | Accent, tint | `color.accent.50` | `color.accent.950` |
125
+ | `surface.accent.tint-hover` | `bg-surface-accent-tint-hover` | Accent, tint, hover | `color.accent.100` | `color.accent.900` |
126
+ | `surface.accent.tint-active` | `bg-surface-accent-tint-active` | Accent, tint, active | `color.accent.200` | `color.accent.800` |
115
127
  | `surface.accent.core` | `bg-surface-accent-core` | Accent, core | `color.accent.input` | `color.accent.input` |
116
128
  | `surface.danger.strong` | `bg-surface-danger-strong` | Danger, strong | `color.red.700` | `color.red.200` |
117
129
  | `surface.danger.strong-hover` | `bg-surface-danger-strong-hover` | Danger, strong, hover | `color.red.800` | `color.red.100` |
@@ -175,6 +187,14 @@ Border colors, used as `border-*` utilities. Light and Dark name the primitive e
175
187
  | `stroke.focus` | `border-stroke-focus` | focus | `color.brand.700` | `color.brand.300` |
176
188
  | `stroke.hover` | `border-stroke-hover` | hover | `color.base.950` | `color.base.50` |
177
189
  | `stroke.ring` | `border-stroke-ring` | ring | `color.base.950` | `color.white` |
190
+ | `stroke.accent` | `border-stroke-accent` | accent | `color.accent.700` | `color.accent.300` |
191
+ | `stroke.ai-end` | `border-stroke-ai-end` | ai-end | `color.accent.300` | `color.accent.300` |
192
+ | `stroke.ai-start` | `border-stroke-ai-start` | ai-start | `color.brand.400` | `color.brand.400` |
193
+ | `stroke.brand` | `border-stroke-brand` | brand | `color.brand.700` | `color.brand.300` |
194
+ | `stroke.danger-subtle` | `border-stroke-danger-subtle` | danger-subtle | `color.red.300` | `color.red.300` |
195
+ | `stroke.info-subtle` | `border-stroke-info-subtle` | info-subtle | `color.sky.300` | `color.sky.300` |
196
+ | `stroke.success-subtle` | `border-stroke-success-subtle` | success-subtle | `color.green.300` | `color.green.300` |
197
+ | `stroke.warning-subtle` | `border-stroke-warning-subtle` | warning-subtle | `color.amber.300` | `color.amber.300` |
178
198
 
179
199
  ### Chart
180
200
 
package/docs/llms.txt CHANGED
@@ -41,12 +41,12 @@ Links point at each page's `content.md`, which carries the page's prose, demo so
41
41
  - [Currency Input](components/currency-input/content.md): A calculator-style monetary input that formats digits as currency while the user types. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=10803-8259), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/inputs-currencyinput--default)
42
42
  - [Field](components/field/content.md): A form-control wrapper that coordinates labels, supporting text, validation messages, and shared state. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/inputs-field--default)
43
43
  - [Form](components/form/content.md): A container that spaces related fields vertically and renders a form on web or a view on native.
44
- - [Input Field](components/input/content.md): A single-line text entry with optional label, helper text, and adornments. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-CDS-V2--React-Native?node-id=159-22), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/inputs-input--default) Design guidance: [design.md](components/input/design.md)
44
+ - [Input](components/input/content.md): A single-line text entry with optional label, helper text, and adornments. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-CDS-V2--React-Native?node-id=159-22), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/inputs-input--default) Design guidance: [design.md](components/input/design.md)
45
45
  - [Menu](components/menu/content.md): Menus present actions or selectable options in an anchored overlay or a standalone list surface. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=7606-560), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/overlays-menu--default)
46
- - [OTP Input Field](components/otp-input/content.md): A controlled multi-cell input for one-time passwords and verification codes. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=5653-5035), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/inputs-otpinput--default)
46
+ - [OTP Input](components/otp-input/content.md): A controlled multi-cell input for one-time passwords and verification codes. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=5653-5035), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/inputs-otpinput--default)
47
47
  - [Radio](components/radio/content.md): A radio group is an input control that allows the user to select a single option from a set of mutually exclusive options. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--React-Native-Components?node-id=2603-62), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/inputs-radio--default)
48
48
  - [Range Calendar](components/range-calendar/content.md): A two-tap day grid for selecting a start and end date, with a continuous range band, month navigation, and a year picker. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=12118-58084), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/date-time-rangecalendar--default)
49
- - [Select](components/select/content.md): A form control that allows users to choose one option from a dropdown list. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--React-Native-Components?node-id=427-2296), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/inputs-select--default) Design guidance: [design.md](components/select/design.md)
49
+ - [Select](components/select/content.md): A form control that allows users to choose one or more options from a dropdown list. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--React-Native-Components?node-id=427-2296), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/inputs-select--default) Design guidance: [design.md](components/select/design.md)
50
50
  - [Textarea](components/textarea/content.md): A multi-line text entry for longer free-form content. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=7078-1235), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/inputs-textarea--default)
51
51
  - [Slider](components/slider/content.md): A control for selecting a numeric value along a track. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=11500-17763), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/inputs-slider--default)
52
52
  - [Color Picker](components/color-picker/content.md): A compound color picker that coordinates an opaque color value with a trigger and popover. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/inputs-colorpicker--default)
@@ -82,7 +82,7 @@ Links point at each page's `content.md`, which carries the page's prose, demo so
82
82
  - [Avatar](components/avatar/content.md): A visual representation of a user or entity, displayed as an image, initials, or fallback icon. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=449-377), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/content-avatar--default) Design guidance: [design.md](components/avatar/design.md)
83
83
  - [Carousel](components/carousel/content.md): A swipeable, paginated carousel for promotional banners, onboarding, and card browsing. Wraps react-native-reanimated-carousel with token-styled Pagination and Prev/Next nav button compounds plus useCarousel hook. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=11619-607), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/surfaces-carousel--default)
84
84
  - [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
- - [FDIC Digital Sign](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)
85
+ - [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
86
  - [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)
87
87
  - [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
88
  - [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)
@@ -104,6 +104,8 @@ Links point at each page's `content.md`, which carries the page's prose, demo so
104
104
  - [Box](components/box/content.md): The layout container for building screens, with semantic web elements through role and an asChild escape hatch. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/layout-box--default)
105
105
  - [Card](components/card/content.md): A composable surface for grouping related content, with optional brand stripe, header, content, and footer regions. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--React-Native-Components?node-id=456-14), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/surfaces-card--with-stripe)
106
106
  - [Drawer](components/drawer/content.md): A panel attached to an edge of the viewport or container, with modal and permanent presentations. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=9956-15204), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/overlays-drawer--default)
107
+ - [Insight](components/insight/content.md): A bordered card for a personalised, often AI-generated, insight, shown as a pressable summary or a detail card. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=13158-18419), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/surfaces-insight--default)
108
+ - [Insight Stack](components/insight-stack/content.md): Draws decorative cards behind a summary Insight to show that more insights are waiting. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=13652-32306), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/surfaces-insightstack--default)
107
109
  - [Scoped Theme](components/scoped-theme/content.md): Forces a specific theme on a component subtree, regardless of the application's global theme. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/theming-scopedtheme--default)
108
110
  - [Scroll Shadow](components/scroll-shadow/content.md): Fades the edges of a scroll view so overflowing content reads as scrollable on iOS, Android, and web. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/layout-scrollshadow--default)
109
111
  - [Stack](components/stack/content.md): Horizontal and vertical layout primitives with token-based spacing and optional reversed order. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/layout-vstack--default)
@@ -138,6 +140,8 @@ Links point at each page's `content.md`, which carries the page's prose, demo so
138
140
 
139
141
  ## Release notes
140
142
 
143
+ - [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.
144
+ - [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.
141
145
  - [0.3.1](resources/release-notes/0.3.1/content.md): DataGrid adds filterMode for server-side search and filters; IconButton adds warning, success, and info color options.
142
146
  - [0.3.0](resources/release-notes/0.3.0/content.md): Calendar and MonthCalendar year pickers scroll the full selectable range; BottomSheet adds fullBleed and updated Content and Footer padding.
143
147
  - [0.2.5](resources/release-notes/0.2.5/content.md): Box is the supported layout primitive with hardened stacks; View from @cdx-ui/components is deprecated. Align Expo apps with SDK 57 and React Native 0.86.
@@ -105,4 +105,411 @@ export default function DateRangeBlock() {
105
105
  </Card>
106
106
  );
107
107
  }
108
+ ```
109
+
110
+ ## Add Payee Form
111
+
112
+ A full-screen form with a contact card, sectioned fields, a bottom-sheet date picker, e-bill consent checkboxes, and a pinned submit button.
113
+
114
+ **Platforms:** iOS, Android
115
+
116
+ ```tsx
117
+ import { useState } from 'react';
118
+ import {
119
+ Avatar,
120
+ BottomSheet,
121
+ Box,
122
+ Button,
123
+ Card,
124
+ Checkbox,
125
+ CurrencyInput,
126
+ DateField,
127
+ DatePicker,
128
+ Divider,
129
+ Field,
130
+ Form,
131
+ FullScreenDialog,
132
+ Heading,
133
+ Input,
134
+ ListItem,
135
+ ScrollView,
136
+ Select,
137
+ Text,
138
+ VStack,
139
+ } from '@cdx-ui/components';
140
+ import type { DateId } from '@cdx-ui/formatters';
141
+
142
+ const PAYEE_TYPES = [
143
+ { value: 'utility', label: 'Utility' },
144
+ { value: 'credit-card', label: 'Credit card' },
145
+ { value: 'loan', label: 'Loan' },
146
+ { value: 'other', label: 'Other' },
147
+ ];
148
+
149
+ const STATES = [
150
+ { value: 'ca', label: 'California' },
151
+ { value: 'ma', label: 'Massachusetts' },
152
+ { value: 'ny', label: 'New York' },
153
+ { value: 'tx', label: 'Texas' },
154
+ ];
155
+
156
+ export default function AddPayeeFormBlock() {
157
+ const [open, setOpen] = useState(true);
158
+ const [amount, setAmount] = useState(0);
159
+ const [date, setDate] = useState<DateId | undefined>();
160
+ const [dateOpen, setDateOpen] = useState(false);
161
+ const [consents, setConsents] = useState<string[]>([]);
162
+
163
+ return (
164
+ <FullScreenDialog isOpen={open} onOpenChange={setOpen}>
165
+ <FullScreenDialog.Trigger asChild>
166
+ <Button>
167
+ <Button.Label>Add payee</Button.Label>
168
+ </Button>
169
+ </FullScreenDialog.Trigger>
170
+ <FullScreenDialog.Popup>
171
+ <FullScreenDialog.Header title="Add payee" />
172
+ <FullScreenDialog.Content>
173
+ <ScrollView className="flex-1">
174
+ <Box className="p-4">
175
+ <Form>
176
+ <Card fullBleed>
177
+ <Card.Stripe />
178
+ <Card.Content>
179
+ <ListItem showSeparator={false}>
180
+ <ListItem.LeadingSlot>
181
+ <Avatar color="info">
182
+ <Avatar.Text>Wellesley Bank</Avatar.Text>
183
+ </Avatar>
184
+ </ListItem.LeadingSlot>
185
+ <ListItem.Content>
186
+ <ListItem.Title>Wellesley Bank MA Checking</ListItem.Title>
187
+ </ListItem.Content>
188
+ </ListItem>
189
+ </Card.Content>
190
+ </Card>
191
+
192
+ <Text color="secondary">
193
+ Add a company or person you pay regularly. Details are saved to your payee list,
194
+ and you can schedule a payment as soon as the payee is added.
195
+ </Text>
196
+
197
+ <Card>
198
+ <Card.Header>
199
+ <Heading size="sm">Payee details</Heading>
200
+ </Card.Header>
201
+ <Card.Content>
202
+ <VStack space="lg">
203
+ <Field>
204
+ <Field.Label>Payee name</Field.Label>
205
+ <Input>
206
+ <Input.Field placeholder="Enter a name" />
207
+ </Input>
208
+ <Field.Helper>As it appears on your statement.</Field.Helper>
209
+ </Field>
210
+ <Field>
211
+ <Field.Label>Email</Field.Label>
212
+ <Input>
213
+ <Input.Field
214
+ autoCapitalize="none"
215
+ autoComplete="email"
216
+ keyboardType="email-address"
217
+ placeholder="example@domain.com"
218
+ />
219
+ </Input>
220
+ </Field>
221
+ <Field>
222
+ <Field.Label>Amount</Field.Label>
223
+ <CurrencyInput variant="outline" value={amount} onChangeValue={setAmount} />
224
+ </Field>
225
+ <Field>
226
+ <DatePicker
227
+ value={date}
228
+ onValueChange={setDate}
229
+ isOpen={dateOpen}
230
+ onOpenChange={setDateOpen}
231
+ >
232
+ <Field.Label>Date</Field.Label>
233
+ <DateField.Group fullWidth>
234
+ <DateField.Input />
235
+ <DateField.Suffix>
236
+ <DatePicker.Trigger>
237
+ <DatePicker.TriggerIndicator />
238
+ </DatePicker.Trigger>
239
+ </DateField.Suffix>
240
+ </DateField.Group>
241
+ <DatePicker.BottomSheet>
242
+ <BottomSheet.Header
243
+ title="Select date"
244
+ onClose={() => setDateOpen(false)}
245
+ />
246
+ <BottomSheet.Content>
247
+ <DatePicker.Calendar aria-label="Date" />
248
+ </BottomSheet.Content>
249
+ </DatePicker.BottomSheet>
250
+ </DatePicker>
251
+ <Field.Helper>The first date you want to pay this payee.</Field.Helper>
252
+ </Field>
253
+ <Field>
254
+ <Field.Label>Payee type</Field.Label>
255
+ <Select items={PAYEE_TYPES}>
256
+ <Select.Trigger>
257
+ <Select.Value placeholder="Select a type" />
258
+ </Select.Trigger>
259
+ <Select.Content>
260
+ {PAYEE_TYPES.map((type) => (
261
+ <Select.Item key={type.value} value={type.value}>
262
+ <Select.ItemLabel>{type.label}</Select.ItemLabel>
263
+ </Select.Item>
264
+ ))}
265
+ </Select.Content>
266
+ </Select>
267
+ </Field>
268
+ </VStack>
269
+ </Card.Content>
270
+ </Card>
271
+
272
+ <Card>
273
+ <Card.Header>
274
+ <Heading size="sm">Service address</Heading>
275
+ </Card.Header>
276
+ <Card.Content>
277
+ <VStack space="lg">
278
+ <Text color="secondary">
279
+ The service address is where the payee provides the service. It may be
280
+ different from your current primary address.
281
+ </Text>
282
+ <Field>
283
+ <Field.Label>Address line 1</Field.Label>
284
+ <Input>
285
+ <Input.Field autoComplete="address-line1" />
286
+ </Input>
287
+ </Field>
288
+ <Field>
289
+ <Field.Label>City</Field.Label>
290
+ <Input>
291
+ <Input.Field autoComplete="postal-address-locality" />
292
+ </Input>
293
+ </Field>
294
+ <Field>
295
+ <Field.Label>State</Field.Label>
296
+ <Select items={STATES}>
297
+ <Select.Trigger>
298
+ <Select.Value placeholder="Select a state" />
299
+ </Select.Trigger>
300
+ <Select.Content>
301
+ {STATES.map((state) => (
302
+ <Select.Item key={state.value} value={state.value}>
303
+ <Select.ItemLabel>{state.label}</Select.ItemLabel>
304
+ </Select.Item>
305
+ ))}
306
+ </Select.Content>
307
+ </Select>
308
+ </Field>
309
+ <Field>
310
+ <Field.Label>Zip code</Field.Label>
311
+ <Input>
312
+ <Input.Field autoComplete="postal-code" keyboardType="number-pad" />
313
+ </Input>
314
+ </Field>
315
+ </VStack>
316
+ </Card.Content>
317
+ </Card>
318
+
319
+ <Text color="secondary" size="sm">
320
+ Please read the terms of use carefully. They include important information about
321
+ receiving e-bills from this payee.
322
+ </Text>
323
+
324
+ <Checkbox.Group
325
+ value={consents}
326
+ onChange={setConsents}
327
+ aria-label="E-bill delivery"
328
+ >
329
+ <Card>
330
+ <Card.Content>
331
+ <Checkbox value="paperless">
332
+ <Checkbox.Label>
333
+ Send my bill here and stop delivering paper in the mail.
334
+ </Checkbox.Label>
335
+ </Checkbox>
336
+ </Card.Content>
337
+ </Card>
338
+ <Card>
339
+ <Card.Content>
340
+ <Checkbox value="trial">
341
+ <Checkbox.Label>
342
+ I want to try it first, for 15 days, and I will decide later if I want to
343
+ stop my paper bill. Send my bill both here and in the mail.
344
+ </Checkbox.Label>
345
+ </Checkbox>
346
+ </Card.Content>
347
+ </Card>
348
+ </Checkbox.Group>
349
+ </Form>
350
+ </Box>
351
+ </ScrollView>
352
+ <Divider />
353
+ <Box className="p-4">
354
+ <Button onPress={() => setOpen(false)}>
355
+ <Button.Label>Submit</Button.Label>
356
+ </Button>
357
+ </Box>
358
+ </FullScreenDialog.Content>
359
+ </FullScreenDialog.Popup>
360
+ </FullScreenDialog>
361
+ );
362
+ }
363
+ ```
364
+
365
+ ## Invite User Drawer
366
+
367
+ A side drawer form for inviting a user, with a role select and a searchable multi-select for team assignment that lists the chosen teams as removable chips.
368
+
369
+ **Platforms:** Web
370
+
371
+ ```tsx
372
+ import { useState } from 'react';
373
+ import { Close, ForwardToInbox } from '@cdx-ui/icons';
374
+ import {
375
+ Avatar,
376
+ Box,
377
+ Button,
378
+ Chip,
379
+ Drawer,
380
+ Field,
381
+ Icon,
382
+ Input,
383
+ Select,
384
+ VStack,
385
+ } from '@cdx-ui/components';
386
+
387
+ const roles = [
388
+ { value: 'admin', label: 'Admin' },
389
+ { value: 'editor', label: 'Editor' },
390
+ { value: 'viewer', label: 'Viewer' },
391
+ ];
392
+
393
+ const teams = [
394
+ { value: 'retail-banking', label: 'Retail Banking', initials: 'RB' },
395
+ { value: 'card-services', label: 'Card Services', initials: 'CS' },
396
+ { value: 'lending', label: 'Lending', initials: 'LE' },
397
+ { value: 'treasury', label: 'Treasury', initials: 'TR' },
398
+ { value: 'fraud-risk', label: 'Fraud & Risk', initials: 'FR' },
399
+ ];
400
+
401
+ export default function InviteUserDrawerBlock() {
402
+ const [fullName, setFullName] = useState('');
403
+ const [email, setEmail] = useState('');
404
+ const [role, setRole] = useState<string | undefined>();
405
+ const [teamIds, setTeamIds] = useState<string[]>([]);
406
+
407
+ const selectedTeams = teams.filter((team) => teamIds.includes(team.value));
408
+ const canSubmit =
409
+ fullName.trim() !== '' && email.trim() !== '' && role !== undefined && teamIds.length > 0;
410
+
411
+ const removeTeam = (value: string) => {
412
+ setTeamIds((ids) => ids.filter((id) => id !== value));
413
+ };
414
+
415
+ return (
416
+ <Box className="h-170 w-full flex-row justify-end">
417
+ <Drawer variant="permanent" placement="right" size="large">
418
+ <Drawer.Header>
419
+ <Drawer.LeadingSlot>
420
+ <Icon as={ForwardToInbox} className="size-6" />
421
+ </Drawer.LeadingSlot>
422
+ <Drawer.Title>Invite User</Drawer.Title>
423
+ </Drawer.Header>
424
+ <Drawer.Content>
425
+ <VStack space="lg">
426
+ <Field isRequired>
427
+ <Field.Label>Full name</Field.Label>
428
+ <Input>
429
+ <Input.Field placeholder="John Doe" value={fullName} onChangeText={setFullName} />
430
+ </Input>
431
+ </Field>
432
+ <Field isRequired>
433
+ <Field.Label>Email address</Field.Label>
434
+ <Input>
435
+ <Input.Field
436
+ placeholder="johndoe@email.com"
437
+ keyboardType="email-address"
438
+ autoCapitalize="none"
439
+ value={email}
440
+ onChangeText={setEmail}
441
+ />
442
+ </Input>
443
+ </Field>
444
+ <Field isRequired>
445
+ <Field.Label>Select Role</Field.Label>
446
+ <Select items={roles} value={role} onValueChange={setRole}>
447
+ <Select.Trigger>
448
+ <Select.Value placeholder="Select a role" />
449
+ </Select.Trigger>
450
+ <Select.Content>
451
+ {roles.map((r) => (
452
+ <Select.Item key={r.value} value={r.value}>
453
+ <Select.ItemLabel>{r.label}</Select.ItemLabel>
454
+ </Select.Item>
455
+ ))}
456
+ </Select.Content>
457
+ </Select>
458
+ </Field>
459
+ <Field isRequired>
460
+ <Field.Label>Assign teams</Field.Label>
461
+ <Select type="multiple" items={teams} value={teamIds} onValueChange={setTeamIds}>
462
+ <Select.Trigger>
463
+ <Select.Value placeholder="Select teams you want to assign to this user">
464
+ {({ isPlaceholder, selectedItems }) =>
465
+ isPlaceholder
466
+ ? null
467
+ : `${String(selectedItems.length)} ${selectedItems.length === 1 ? 'Team' : 'Teams'} selected`
468
+ }
469
+ </Select.Value>
470
+ </Select.Trigger>
471
+ <Select.Content>
472
+ <Select.Search placeholder="Search Teams" accessibilityLabel="Search teams" />
473
+ {teams.map((team) => (
474
+ <Select.Item key={team.value} value={team.value}>
475
+ <Select.ItemControl />
476
+ <Select.ItemLabel>{team.label}</Select.ItemLabel>
477
+ </Select.Item>
478
+ ))}
479
+ <Select.Empty>No teams found</Select.Empty>
480
+ </Select.Content>
481
+ </Select>
482
+ {selectedTeams.length > 0 ? (
483
+ <Box className="mt-3 flex-row flex-wrap gap-2">
484
+ {selectedTeams.map((team) => (
485
+ <Chip
486
+ key={team.value}
487
+ variant="outline"
488
+ accessibilityLabel={`Remove ${team.label}`}
489
+ onPress={() => removeTeam(team.value)}
490
+ >
491
+ <Chip.Avatar>
492
+ <Avatar.Text>{team.initials}</Avatar.Text>
493
+ </Chip.Avatar>
494
+ <Chip.Label>{team.label}</Chip.Label>
495
+ <Chip.Icon as={Close} position="trailing" />
496
+ </Chip>
497
+ ))}
498
+ </Box>
499
+ ) : null}
500
+ </Field>
501
+ </VStack>
502
+ </Drawer.Content>
503
+ <Drawer.Footer>
504
+ <Button variant="ghost">
505
+ <Button.Label>Cancel</Button.Label>
506
+ </Button>
507
+ <Button isDisabled={!canSubmit}>
508
+ <Button.Label>Send Invite</Button.Label>
509
+ </Button>
510
+ </Drawer.Footer>
511
+ </Drawer>
512
+ </Box>
513
+ );
514
+ }
108
515
  ```
@@ -0,0 +1,17 @@
1
+ # 0.3.2 (https://design.candescent.com/docs/resources/release-notes/0.3.2)
2
+
3
+ CurrencyInput adds an outline variant for bordered amount fields; BottomSheet opens reliably in optimized web production builds.
4
+
5
+ This release adds a bordered **[CurrencyInput](https://design.candescent.com/docs/components/currency-input/content.md)** style and fixes **[BottomSheet](https://design.candescent.com/docs/components/bottom-sheet/content.md)** sizing on optimized web builds.
6
+
7
+ ## What's new
8
+
9
+ **[CurrencyInput](https://design.candescent.com/docs/components/currency-input/content.md)** — Set `variant="outline"` for a bordered field that matches the outlined currency control in design specs. The outline layout keeps the currency prefix in secondary content color with tighter spacing to the amount, and pairs with `Field` for labels, hints, and validation like the default ghost style ([#826](https://github.com/dfh-candescent/forge-design-system/pull/826)).
10
+
11
+ ## Bug fixes
12
+
13
+ **[BottomSheet](https://design.candescent.com/docs/components/bottom-sheet/content.md)** — Modal sheets open at the correct height in production web bundles, so dynamic detents are no longer clipped below the backdrop and footers no longer cover scrollable content ([#829](https://github.com/dfh-candescent/forge-design-system/pull/829)).
14
+
15
+ ## Dependencies
16
+
17
+ **@cdx-ui/\*** — Upgrade every installed Forge UI package to `0.3.2` together when you adopt this release.