@cdx-ui/components 0.2.3 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +24 -0
- package/README.md +2 -0
- package/coverage.svg +1 -1
- package/docs/components/accordion/content.md +538 -0
- package/docs/components/alert/content.md +203 -0
- package/docs/components/alert-dialog/content.md +319 -0
- package/docs/components/avatar/content.md +368 -0
- package/docs/components/avatar/design.md +202 -0
- package/docs/components/badge/content.md +225 -0
- package/docs/components/bottom-sheet/content.md +353 -0
- package/docs/components/bottom-sheet/design.md +249 -0
- package/docs/components/box/content.md +141 -0
- package/docs/components/breadcrumbs/content.md +169 -0
- package/docs/components/button/content.md +398 -0
- package/docs/components/button/design.md +258 -0
- package/docs/components/calendar/content.md +137 -0
- package/docs/components/card/content.md +283 -0
- package/docs/components/carousel/content.md +417 -0
- package/docs/components/checkbox/content.md +236 -0
- package/docs/components/checkbox/design.md +214 -0
- package/docs/components/chip/content.md +439 -0
- package/docs/components/chip/design.md +418 -0
- package/docs/components/color-area/content.md +84 -0
- package/docs/components/color-field/content.md +132 -0
- package/docs/components/color-picker/content.md +209 -0
- package/docs/components/color-slider/content.md +118 -0
- package/docs/components/color-swatch/content.md +62 -0
- package/docs/components/color-swatch-picker/content.md +124 -0
- package/docs/components/content.md +98 -0
- package/docs/components/currency-input/content.md +205 -0
- package/docs/components/data-grid/content.md +521 -0
- package/docs/components/date-field/content.md +147 -0
- package/docs/components/date-picker/content.md +360 -0
- package/docs/components/date-range-picker/content.md +301 -0
- package/docs/components/date-time-field/content.md +157 -0
- package/docs/components/date-time-list/content.md +105 -0
- package/docs/components/date-time-picker/content.md +272 -0
- package/docs/components/dialog/content.md +436 -0
- package/docs/components/dialog/design.md +192 -0
- package/docs/components/divider/content.md +112 -0
- package/docs/components/drawer/content.md +428 -0
- package/docs/components/field/content.md +277 -0
- package/docs/components/form/content.md +62 -0
- package/docs/components/full-screen-dialog/content.md +881 -0
- package/docs/components/heading/content.md +55 -0
- package/docs/components/icon/content.md +190 -0
- package/docs/components/icon-button/content.md +200 -0
- package/docs/components/icon-button/design.md +165 -0
- package/docs/components/image/content.md +104 -0
- package/docs/components/input/content.md +346 -0
- package/docs/components/input/design.md +389 -0
- package/docs/components/insurance-disclosure/content.md +103 -0
- package/docs/components/link/content.md +180 -0
- package/docs/components/link/design.md +160 -0
- package/docs/components/list-item/content.md +695 -0
- package/docs/components/menu/content.md +1254 -0
- package/docs/components/month-calendar/content.md +84 -0
- package/docs/components/month-picker/content.md +273 -0
- package/docs/components/otp-input/content.md +327 -0
- package/docs/components/progress-bar/content.md +87 -0
- package/docs/components/progress-circle/content.md +176 -0
- package/docs/components/progress-segmented/content.md +119 -0
- package/docs/components/quick-action-button/content.md +154 -0
- package/docs/components/quick-action-button/design.md +170 -0
- package/docs/components/radio/content.md +224 -0
- package/docs/components/range-calendar/content.md +123 -0
- package/docs/components/reorderable-list/content.md +311 -0
- package/docs/components/scoped-theme/content.md +47 -0
- package/docs/components/scroll-shadow/content.md +693 -0
- package/docs/components/select/content.md +473 -0
- package/docs/components/select/design.md +301 -0
- package/docs/components/skeleton/content.md +104 -0
- package/docs/components/slider/content.md +423 -0
- package/docs/components/stack/content.md +161 -0
- package/docs/components/switch/content.md +150 -0
- package/docs/components/switch/design.md +208 -0
- package/docs/components/table/content.md +548 -0
- package/docs/components/table-pagination/content.md +177 -0
- package/docs/components/tabs/content.md +297 -0
- package/docs/components/text/content.md +142 -0
- package/docs/components/textarea/content.md +222 -0
- package/docs/components/tile/content.md +702 -0
- package/docs/components/toast/content.md +456 -0
- package/docs/components/toggle-button/content.md +505 -0
- package/docs/components/tooltip/content.md +350 -0
- package/docs/components/virtualized-list/content.md +250 -0
- package/docs/foundations/content.md +9 -0
- package/docs/foundations/expressions/icons/content.md +19 -0
- package/docs/foundations/styles/tokens/all-tokens/content.md +192 -0
- package/docs/foundations/styles/tokens/what-are-tokens/content.md +33 -0
- package/docs/foundations/styles/tokens/what-are-tokens/design.md +33 -0
- package/docs/getting-started/content.md +4 -0
- package/docs/getting-started/designers/content.md +13 -0
- package/docs/getting-started/designers/design.md +13 -0
- package/docs/getting-started/developers/accessibility/content.md +31 -0
- package/docs/getting-started/developers/content.md +612 -0
- package/docs/getting-started/developers/styling/content.md +195 -0
- package/docs/llms.txt +195 -0
- package/docs/patterns/account-management/content.md +75 -0
- package/docs/patterns/authentication/content.md +50 -0
- package/docs/patterns/content.md +10 -0
- package/docs/patterns/dashboard/content.md +34 -0
- package/docs/patterns/empty-states/content.md +32 -0
- package/docs/patterns/forms/content.md +108 -0
- package/docs/patterns/onboarding/content.md +69 -0
- package/docs/patterns/payments/content.md +35 -0
- package/docs/patterns/settings/content.md +72 -0
- package/docs/resources/content.md +9 -0
- package/docs/resources/figma-libraries/content.md +42 -0
- package/docs/resources/release-notes/0.0.1-beta.118/content.md +27 -0
- package/docs/resources/release-notes/0.0.1-beta.122/content.md +21 -0
- package/docs/resources/release-notes/0.0.1-beta.124/content.md +16 -0
- package/docs/resources/release-notes/0.0.1-beta.126/content.md +10 -0
- package/docs/resources/release-notes/0.0.1-beta.127/content.md +14 -0
- package/docs/resources/release-notes/0.0.1-beta.128/content.md +9 -0
- package/docs/resources/release-notes/0.0.1-beta.129/content.md +18 -0
- package/docs/resources/release-notes/0.0.1-beta.130/content.md +18 -0
- package/docs/resources/release-notes/0.0.1-beta.133/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.134/content.md +17 -0
- package/docs/resources/release-notes/0.0.1-beta.136/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.137/content.md +10 -0
- package/docs/resources/release-notes/0.0.1-beta.138/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.139/content.md +13 -0
- package/docs/resources/release-notes/0.0.1-beta.140/content.md +26 -0
- package/docs/resources/release-notes/0.0.1-beta.141/content.md +63 -0
- package/docs/resources/release-notes/0.0.1-beta.142/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.143/content.md +12 -0
- package/docs/resources/release-notes/0.0.1-beta.144/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.145/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.147/content.md +10 -0
- package/docs/resources/release-notes/0.0.1-beta.149/content.md +10 -0
- package/docs/resources/release-notes/0.0.1-beta.150/content.md +13 -0
- package/docs/resources/release-notes/0.0.1-beta.152/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.154/content.md +15 -0
- package/docs/resources/release-notes/0.0.1-beta.156/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.158/content.md +9 -0
- package/docs/resources/release-notes/0.0.1-beta.159/content.md +11 -0
- package/docs/resources/release-notes/0.0.1-beta.160/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.161/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.163/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.164/content.md +9 -0
- package/docs/resources/release-notes/0.0.1-beta.166/content.md +17 -0
- package/docs/resources/release-notes/0.0.1-beta.167/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.168/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.169/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.171/content.md +16 -0
- package/docs/resources/release-notes/0.0.1-beta.172/content.md +24 -0
- package/docs/resources/release-notes/0.0.1-beta.173/content.md +15 -0
- package/docs/resources/release-notes/0.0.1-beta.174/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.176/content.md +32 -0
- package/docs/resources/release-notes/0.0.1-beta.179/content.md +11 -0
- package/docs/resources/release-notes/0.0.1-beta.182/content.md +13 -0
- package/docs/resources/release-notes/0.0.1-beta.185/content.md +7 -0
- package/docs/resources/release-notes/0.0.1-beta.187/content.md +27 -0
- package/docs/resources/release-notes/0.1.1/content.md +23 -0
- package/docs/resources/release-notes/0.1.2/content.md +7 -0
- package/docs/resources/release-notes/0.1.4/content.md +19 -0
- package/docs/resources/release-notes/0.1.5/content.md +7 -0
- package/docs/resources/release-notes/0.1.6/content.md +7 -0
- package/docs/resources/release-notes/0.2.0/content.md +31 -0
- package/docs/resources/release-notes/0.2.1/content.md +17 -0
- package/docs/resources/release-notes/0.2.2/content.md +11 -0
- package/docs/resources/release-notes/0.2.3/content.md +15 -0
- package/docs/resources/release-notes/0.2.4/content.md +17 -0
- package/docs/resources/release-notes/content.md +65 -0
- package/lib/commonjs/components/Box/Box.js +9 -1
- package/lib/commonjs/components/Box/Box.js.map +1 -1
- package/lib/commonjs/components/Breadcrumbs/index.js +28 -3
- package/lib/commonjs/components/Breadcrumbs/index.js.map +1 -1
- package/lib/commonjs/components/Breadcrumbs/styles.js +27 -0
- package/lib/commonjs/components/Breadcrumbs/styles.js.map +1 -1
- package/lib/commonjs/components/DateTimeList/index.js +11 -26
- package/lib/commonjs/components/DateTimeList/index.js.map +1 -1
- package/lib/commonjs/components/DateTimeList/styles.js +2 -12
- package/lib/commonjs/components/DateTimeList/styles.js.map +1 -1
- package/lib/commonjs/components/ListItem/index.js.map +1 -1
- package/lib/commonjs/components/ListItem/styles.js +2 -1
- package/lib/commonjs/components/ListItem/styles.js.map +1 -1
- package/lib/commonjs/components/Menu/index.js +11 -5
- package/lib/commonjs/components/Menu/index.js.map +1 -1
- package/lib/commonjs/components/ScrollShadow/gradient.js +29 -0
- package/lib/commonjs/components/ScrollShadow/gradient.js.map +1 -0
- package/lib/commonjs/components/ScrollShadow/index.js +171 -44
- package/lib/commonjs/components/ScrollShadow/index.js.map +1 -1
- package/lib/commonjs/components/ScrollShadow/styles.js +58 -14
- package/lib/commonjs/components/ScrollShadow/styles.js.map +1 -1
- package/lib/commonjs/components/ScrollShadow/useComposedScrollHandler.js +63 -0
- package/lib/commonjs/components/ScrollShadow/useComposedScrollHandler.js.map +1 -0
- package/lib/commonjs/components/ScrollShadow/useScrollShadow.js +48 -8
- package/lib/commonjs/components/ScrollShadow/useScrollShadow.js.map +1 -1
- package/lib/commonjs/components/Stack/HStack.js +6 -2
- package/lib/commonjs/components/Stack/HStack.js.map +1 -1
- package/lib/commonjs/components/Stack/VStack.js +6 -2
- package/lib/commonjs/components/Stack/VStack.js.map +1 -1
- package/lib/commonjs/components/Tabs/index.js +16 -23
- package/lib/commonjs/components/Tabs/index.js.map +1 -1
- package/lib/commonjs/components/Tabs/styles.js +1 -10
- package/lib/commonjs/components/Tabs/styles.js.map +1 -1
- package/lib/commonjs/figma/ListItem.SectionHeader.figma.js +20 -5
- package/lib/commonjs/figma/ListItem.SectionHeader.figma.js.map +1 -1
- package/lib/commonjs/index.js +10 -10
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/components/Box/Box.js +9 -1
- package/lib/module/components/Box/Box.js.map +1 -1
- package/lib/module/components/Breadcrumbs/index.js +29 -4
- package/lib/module/components/Breadcrumbs/index.js.map +1 -1
- package/lib/module/components/Breadcrumbs/styles.js +26 -0
- package/lib/module/components/Breadcrumbs/styles.js.map +1 -1
- package/lib/module/components/DateTimeList/index.js +12 -27
- package/lib/module/components/DateTimeList/index.js.map +1 -1
- package/lib/module/components/DateTimeList/styles.js +1 -11
- package/lib/module/components/DateTimeList/styles.js.map +1 -1
- package/lib/module/components/ListItem/index.js.map +1 -1
- package/lib/module/components/ListItem/styles.js +2 -1
- package/lib/module/components/ListItem/styles.js.map +1 -1
- package/lib/module/components/Menu/index.js +11 -5
- package/lib/module/components/Menu/index.js.map +1 -1
- package/lib/module/components/ScrollShadow/gradient.js +24 -0
- package/lib/module/components/ScrollShadow/gradient.js.map +1 -0
- package/lib/module/components/ScrollShadow/index.js +170 -48
- package/lib/module/components/ScrollShadow/index.js.map +1 -1
- package/lib/module/components/ScrollShadow/styles.js +57 -13
- package/lib/module/components/ScrollShadow/styles.js.map +1 -1
- package/lib/module/components/ScrollShadow/useComposedScrollHandler.js +57 -0
- package/lib/module/components/ScrollShadow/useComposedScrollHandler.js.map +1 -0
- package/lib/module/components/ScrollShadow/useScrollShadow.js +46 -8
- package/lib/module/components/ScrollShadow/useScrollShadow.js.map +1 -1
- package/lib/module/components/Stack/HStack.js +6 -2
- package/lib/module/components/Stack/HStack.js.map +1 -1
- package/lib/module/components/Stack/VStack.js +6 -2
- package/lib/module/components/Stack/VStack.js.map +1 -1
- package/lib/module/components/Tabs/index.js +17 -24
- package/lib/module/components/Tabs/index.js.map +1 -1
- package/lib/module/components/Tabs/styles.js +0 -9
- package/lib/module/components/Tabs/styles.js.map +1 -1
- package/lib/module/figma/ListItem.SectionHeader.figma.js +20 -5
- package/lib/module/figma/ListItem.SectionHeader.figma.js.map +1 -1
- package/lib/module/index.js +6 -1
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/animation/hooks/usePopupDialogContentAnimation.d.ts +2 -2
- package/lib/typescript/animation/hooks/usePopupOverlayAnimation.d.ts +2 -2
- package/lib/typescript/components/Box/Box.d.ts +4 -0
- package/lib/typescript/components/Box/Box.d.ts.map +1 -1
- package/lib/typescript/components/Breadcrumbs/index.d.ts +3 -1
- package/lib/typescript/components/Breadcrumbs/index.d.ts.map +1 -1
- package/lib/typescript/components/Breadcrumbs/styles.d.ts +2 -0
- package/lib/typescript/components/Breadcrumbs/styles.d.ts.map +1 -1
- package/lib/typescript/components/DateTimeList/index.d.ts.map +1 -1
- package/lib/typescript/components/DateTimeList/styles.d.ts +1 -4
- package/lib/typescript/components/DateTimeList/styles.d.ts.map +1 -1
- package/lib/typescript/components/ListItem/index.d.ts +5 -4
- package/lib/typescript/components/ListItem/index.d.ts.map +1 -1
- package/lib/typescript/components/ListItem/styles.d.ts +1 -1
- package/lib/typescript/components/ListItem/styles.d.ts.map +1 -1
- package/lib/typescript/components/Menu/index.d.ts.map +1 -1
- package/lib/typescript/components/ScrollShadow/gradient.d.ts +7 -0
- package/lib/typescript/components/ScrollShadow/gradient.d.ts.map +1 -0
- package/lib/typescript/components/ScrollShadow/index.d.ts +57 -15
- package/lib/typescript/components/ScrollShadow/index.d.ts.map +1 -1
- package/lib/typescript/components/ScrollShadow/styles.d.ts +8 -2
- package/lib/typescript/components/ScrollShadow/styles.d.ts.map +1 -1
- package/lib/typescript/components/ScrollShadow/useComposedScrollHandler.d.ts +13 -0
- package/lib/typescript/components/ScrollShadow/useComposedScrollHandler.d.ts.map +1 -0
- package/lib/typescript/components/ScrollShadow/useScrollShadow.d.ts +15 -2
- package/lib/typescript/components/ScrollShadow/useScrollShadow.d.ts.map +1 -1
- package/lib/typescript/components/Stack/HStack.d.ts +3 -2
- package/lib/typescript/components/Stack/HStack.d.ts.map +1 -1
- package/lib/typescript/components/Stack/VStack.d.ts +3 -2
- package/lib/typescript/components/Stack/VStack.d.ts.map +1 -1
- package/lib/typescript/components/Tabs/index.d.ts.map +1 -1
- package/lib/typescript/components/Tabs/styles.d.ts +0 -7
- package/lib/typescript/components/Tabs/styles.d.ts.map +1 -1
- package/lib/typescript/components/Toast/animation.d.ts +3 -3
- package/lib/typescript/components/Toast/animation.d.ts.map +1 -1
- package/lib/typescript/figma/ListItem.SectionHeader.figma.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +6 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/package.json +11 -9
- package/src/components/Box/Box.tsx +18 -4
- package/src/components/Breadcrumbs/index.tsx +28 -4
- package/src/components/Breadcrumbs/styles.ts +30 -0
- package/src/components/DateTimeList/index.tsx +13 -26
- package/src/components/DateTimeList/styles.ts +1 -10
- package/src/components/ListItem/index.tsx +5 -4
- package/src/components/ListItem/styles.ts +1 -0
- package/src/components/Menu/index.tsx +11 -8
- package/src/components/ScrollShadow/gradient.ts +48 -0
- package/src/components/ScrollShadow/index.tsx +300 -69
- package/src/components/ScrollShadow/styles.ts +45 -28
- package/src/components/ScrollShadow/useComposedScrollHandler.ts +58 -0
- package/src/components/ScrollShadow/useScrollShadow.ts +72 -10
- package/src/components/Stack/HStack.tsx +8 -4
- package/src/components/Stack/VStack.tsx +8 -4
- package/src/components/Tabs/index.tsx +25 -35
- package/src/components/Tabs/styles.ts +0 -9
- package/src/index.ts +8 -1
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# Styling and customization (https://design.candescent.com/docs/getting-started/developers/styling)
|
|
2
|
+
|
|
3
|
+
This guide is for anyone writing screens on top of Forge UI: developers at financial institutions (FIs) building integrations, Candescent product teams, and the AI coding agents that work for either. The rules are the same for everyone, and each one is written so that it can be followed literally. It covers building screens with Forge UI components, not authoring new components.
|
|
4
|
+
|
|
5
|
+
## Why these rules exist
|
|
6
|
+
|
|
7
|
+
Forge UI components ship with their look, and that look comes from design tokens. Each FI's theme sets those tokens at runtime, and dark mode swaps them. A style you hard-code on a component doesn't follow the tokens. It shows the wrong brand, it breaks in dark mode, and it can stop working when a Forge UI release changes the component's internals. If you leave the look to the component, your screen stays correct across every theme and every upgrade.
|
|
8
|
+
|
|
9
|
+
## Where each change belongs
|
|
10
|
+
|
|
11
|
+
| To change | Use |
|
|
12
|
+
| ---------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
|
|
13
|
+
| Brand colors and fonts across the whole app | The FI theme: a `ThemeOverride` applied with `applyThemeOverride` from [`@cdx-ui/styles`](https://www.npmjs.com/package/@cdx-ui/styles) |
|
|
14
|
+
| How a component looks | Its props, such as `variant`, `color` and `size` |
|
|
15
|
+
| Where a component sits in its parent | `className`, with placement classes only |
|
|
16
|
+
| Screen layout, padding and section backgrounds | Layout primitives |
|
|
17
|
+
| A dark or inverse section | `ScopedTheme` |
|
|
18
|
+
| Anything none of these cover | A request to the Forge UI team. Don't override the component. |
|
|
19
|
+
|
|
20
|
+
## The rules
|
|
21
|
+
|
|
22
|
+
1. Use components as shipped. Choose their look with props: `variant`, `color`, `size`, `fullWidth`, `fullBleed`, and on `Text`, `weight` and `italic`.
|
|
23
|
+
2. `className` on a Forge UI component, or on any of its parts, only places it in its parent.
|
|
24
|
+
3. Layout primitives can also take layout classes, spacing-scale padding and semantic surface backgrounds.
|
|
25
|
+
4. Use semantic tokens only.
|
|
26
|
+
5. Don't restate a default.
|
|
27
|
+
6. Put dark and inverse sections in `ScopedTheme`.
|
|
28
|
+
7. Import everything from the public `@cdx-ui/*` entry points.
|
|
29
|
+
8. When a design needs something Forge UI doesn't ship, use the closest variant and request the rest. Don't override.
|
|
30
|
+
|
|
31
|
+
The sections below explain each rule, with a wrong and a right example.
|
|
32
|
+
|
|
33
|
+
## Set the look with props
|
|
34
|
+
|
|
35
|
+
Every component's API table lists the props that choose its look. Reach for them first, and treat a missing prop as a request, not a reason to write classes.
|
|
36
|
+
|
|
37
|
+
```tsx
|
|
38
|
+
// Wrong: a hand-picked color that ignores the FI theme and dark mode
|
|
39
|
+
<Button className="bg-red-600">
|
|
40
|
+
<Button.Label className="text-white">Close account</Button.Label>
|
|
41
|
+
</Button>
|
|
42
|
+
|
|
43
|
+
// Right
|
|
44
|
+
<Button color="danger">
|
|
45
|
+
<Button.Label>Close account</Button.Label>
|
|
46
|
+
</Button>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Text, Heading and Icon
|
|
50
|
+
|
|
51
|
+
- **Color:** `Text` and `Icon` take `color`: `primary`, `secondary`, `tertiary`, `action`, `danger`, `warning`, `success` or `info`. Each maps to its `text-content-*` token. `primary` is the default, so leave it off.
|
|
52
|
+
- **Typography:** `Text` takes `size`, `weight` and `italic`. `Heading` takes `size` only.
|
|
53
|
+
- **Nesting:** a `Text` inside another text element (a `Text`, a `Heading`, or a slot such as `Button.Label`) inherits its color, size and weight. Set only what differs.
|
|
54
|
+
- **Alignment:** `text-center`, `text-start` and `text-end` are allowed as classes. Never use `text-left` or `text-right`, which break right-to-left layouts.
|
|
55
|
+
- **Casing:** `uppercase` is allowed as a class.
|
|
56
|
+
- **Icon size:** use a `size-*` class on the spacing scale. The default is `size-5`, so don't restate it, and don't pass a numeric `size`.
|
|
57
|
+
|
|
58
|
+
```tsx
|
|
59
|
+
// Wrong: color, typography and a default restated through className
|
|
60
|
+
<Text className="body-sm font-semibold text-content-secondary text-left">Pending</Text>
|
|
61
|
+
<Icon as={Info} className="size-5 text-content-action" />
|
|
62
|
+
|
|
63
|
+
// Right
|
|
64
|
+
<Text size="sm" weight="semibold" color="secondary" className="text-start">
|
|
65
|
+
Pending
|
|
66
|
+
</Text>
|
|
67
|
+
<Icon as={Info} color="action" />
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
> [!WARNING]
|
|
71
|
+
>
|
|
72
|
+
> **Text on a colored surface**
|
|
73
|
+
>
|
|
74
|
+
> The `text-content-*-on-strong` and `text-content-*-on-subtle` tokens have no prop. Use them as a
|
|
75
|
+
> class only when your own code paints the surface underneath, such as a `Box` with
|
|
76
|
+
> `bg-surface-action-strong`. For a status message use `Alert`; for a dark section use
|
|
77
|
+
> `ScopedTheme`.
|
|
78
|
+
|
|
79
|
+
## Place components with className
|
|
80
|
+
|
|
81
|
+
On a Forge UI component, `className` positions the component in its parent and nothing else.
|
|
82
|
+
|
|
83
|
+
| Allowed | Examples |
|
|
84
|
+
| --------------------------- | --------------------------------------------------------- |
|
|
85
|
+
| Flex placement | `flex-1`, `grow`, `shrink-0`, `self-start`, `self-center` |
|
|
86
|
+
| Width constraints | `w-full`, `max-w-md`, `min-w-0` |
|
|
87
|
+
| Margin on the spacing scale | `mt-4`, `mx-2` |
|
|
88
|
+
|
|
89
|
+
Padding, backgrounds, borders, radii, colors, typography and heights are not allowed, on the component or on any of its parts. Between siblings, prefer a stack's `space` prop to margins.
|
|
90
|
+
|
|
91
|
+
```tsx
|
|
92
|
+
// Wrong: restyling Card parts to match a mockup
|
|
93
|
+
<Card className="rounded-2xl bg-surface-secondary">
|
|
94
|
+
<Card.Content className="px-5 py-4">...</Card.Content>
|
|
95
|
+
</Card>
|
|
96
|
+
|
|
97
|
+
// Right: the card keeps its padding and surface; className only places it
|
|
98
|
+
<Card className="w-full max-w-md">
|
|
99
|
+
<Card.Content>...</Card.Content>
|
|
100
|
+
</Card>
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Lay out screens with layout primitives
|
|
104
|
+
|
|
105
|
+
`Box`, `HStack`, `VStack`, `ScrollView`, `SafeAreaView` and `KeyboardAvoidingView` have no look of their own. They can take layout classes (`flex-row`, `items-center`, `justify-between`, `flex-wrap`), padding on the spacing scale, and a semantic surface background (`bg-surface-*`). `Box` is the general-purpose container: use it wherever you would reach for a `View`. On `HStack` and `VStack`, set the gap between children with `space`, not `gap-*`.
|
|
106
|
+
|
|
107
|
+
```tsx
|
|
108
|
+
// Wrong: a react-native View with pixel values
|
|
109
|
+
import { View } from 'react-native';
|
|
110
|
+
|
|
111
|
+
<View style={{ padding: 20, gap: 12 }}>...</View>;
|
|
112
|
+
|
|
113
|
+
// Right
|
|
114
|
+
import { VStack } from '@cdx-ui/components';
|
|
115
|
+
|
|
116
|
+
<VStack space="md" className="p-5">
|
|
117
|
+
...
|
|
118
|
+
</VStack>;
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Don't add a `Box` or a stack that does nothing. If a design's spacing doesn't match a component's default, keep the default and raise the difference with whoever owns the design.
|
|
122
|
+
|
|
123
|
+
## Use semantic tokens
|
|
124
|
+
|
|
125
|
+
Use the semantic token families: `text-content-*`, `bg-surface-*` and `border-stroke-*`. They resolve to each FI's brand and to dark mode. Never use:
|
|
126
|
+
|
|
127
|
+
- Primitive tokens, the ones that end in a number (`bg-brand-500`, `text-base-700`).
|
|
128
|
+
- Hex or rgb values, `white` and `black`.
|
|
129
|
+
- Arbitrary `[...]` values and pixel values, in classes or in `style`.
|
|
130
|
+
|
|
131
|
+
To change what a semantic token resolves to for your brand, change the FI theme, not the class.
|
|
132
|
+
|
|
133
|
+
## Don't restate defaults
|
|
134
|
+
|
|
135
|
+
A default written out by hand looks like a deliberate choice and outlives the default when it changes. Leave off `color="primary"` on `Text`, `size-5` on `Icon`, `variant="solid"` on `Button`, `w-full` next to `fullWidth`, and accessibility roles a component already sets.
|
|
136
|
+
|
|
137
|
+
## Dark and inverse surfaces
|
|
138
|
+
|
|
139
|
+
Wrap a dark or inverse section in [`ScopedTheme`](https://design.candescent.com/docs/components/scoped-theme/content.md). Every component inside it switches tokens, so you never pick contrast colors by hand.
|
|
140
|
+
|
|
141
|
+
```tsx
|
|
142
|
+
// Wrong
|
|
143
|
+
<Box className="bg-black">
|
|
144
|
+
<Text className="text-white">Premium rewards</Text>
|
|
145
|
+
</Box>
|
|
146
|
+
|
|
147
|
+
// Right
|
|
148
|
+
<ScopedTheme theme="dark">
|
|
149
|
+
<Card>
|
|
150
|
+
<Card.Content>
|
|
151
|
+
<Text>Premium rewards</Text>
|
|
152
|
+
</Card.Content>
|
|
153
|
+
</Card>
|
|
154
|
+
</ScopedTheme>
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Imports
|
|
158
|
+
|
|
159
|
+
- Use `Box` in place of `View`. `View` from `react-native` is not part of the Forge UI API, and the `View` export of `@cdx-ui/components` is deprecated.
|
|
160
|
+
- Import `ScrollView`, `SafeAreaView` and `KeyboardAvoidingView` from `@cdx-ui/components`, not from `react-native`.
|
|
161
|
+
- Don't wrap Forge UI components with `withUniwind`; they already accept `className`.
|
|
162
|
+
- Don't import from `@cdx-ui/primitives` or from deep paths inside a package. Only the public entry points are a stable API across releases.
|
|
163
|
+
- Merge class names with `cn` from `@cdx-ui/utils`.
|
|
164
|
+
|
|
165
|
+
## When the design needs something Forge UI doesn't ship
|
|
166
|
+
|
|
167
|
+
1. Use the closest shipped variant, prop or composition.
|
|
168
|
+
2. Leave a `TODO` comment that names what is missing, so the gap is easy to find later.
|
|
169
|
+
3. Request it from the Forge UI team. Candescent teams use `#forge-design-system` on Slack. FI teams go through their Candescent contact.
|
|
170
|
+
|
|
171
|
+
Don't override the component to close the gap. The override is the part that breaks for the next theme, in dark mode, and in the next release.
|
|
172
|
+
|
|
173
|
+
## For AI coding agents
|
|
174
|
+
|
|
175
|
+
Every page on this site is also available as markdown: add `/content.md` to the page URL. `/llms.txt` at the site root indexes every page that way, and `/llms-full.txt` holds them all in one file. Point your agent's instructions file (such as `AGENTS.md`, `CLAUDE.md` or a Cursor rule) at this page's `content.md` instead of copying the rules into it, so the agent picks up changes as Forge UI evolves.
|
|
176
|
+
|
|
177
|
+
When generating or reviewing code:
|
|
178
|
+
|
|
179
|
+
- Before writing a class on a Forge UI component, check the API table on that component's page for a prop that does the same job.
|
|
180
|
+
- When a rule blocks the design, don't work around it. Apply the closest variant, leave the `TODO`, and tell the person you're working for what's missing.
|
|
181
|
+
- Review your own output for these patterns before you finish:
|
|
182
|
+
|
|
183
|
+
| Pattern | Fix |
|
|
184
|
+
| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------ |
|
|
185
|
+
| `text-content-*`, `body-*` or `font-*` classes on `Text` or `Icon` | Use the `color`, `size` and `weight` props |
|
|
186
|
+
| Padding, background, border, radius or height classes on a Forge UI component or its parts | Remove them. Use props, or move layout to a layout primitive |
|
|
187
|
+
| `style={...}` on a Forge UI component | Remove it. Use props or placement classes |
|
|
188
|
+
| Primitive tokens, hex or rgb values, `white`, `black`, or `[...]` values | Use a semantic token |
|
|
189
|
+
| `text-left` or `text-right` | Use `text-start` or `text-end` |
|
|
190
|
+
| `View` imported from `react-native` or `@cdx-ui/components` | Use `Box` |
|
|
191
|
+
| `ScrollView`, `SafeAreaView` or `KeyboardAvoidingView` imported from `react-native` | Import it from `@cdx-ui/components` |
|
|
192
|
+
| Imports from `@cdx-ui/primitives` or a deep package path | Import from the package's public entry point |
|
|
193
|
+
| `withUniwind` around a Forge UI component | Remove the wrapper |
|
|
194
|
+
| A dark section built from `bg-black` and `text-white` | Use `ScopedTheme` |
|
|
195
|
+
| A default restated, such as `color="primary"` or `size-5` on `Icon` | Remove it |
|
package/docs/llms.txt
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# Forge UI
|
|
2
|
+
|
|
3
|
+
> Forge UI is Candescent's cross-platform component library for digital banking apps. One React Native and React Native Web codebase targets iOS, Android and web, and each financial institution (FI) brand themes it through design tokens.
|
|
4
|
+
|
|
5
|
+
Links point at each page's `content.md`, which carries the page's prose, demo source and generated prop tables. `design.md`, linked where a page has one, carries design guidance. Drop the `/content.md` suffix for the HTML page. [llms-full.txt](https://design.candescent.com/llms-full.txt) concatenates every page.
|
|
6
|
+
|
|
7
|
+
- Install and configure Forge UI: [Installation](getting-started/developers/content.md)
|
|
8
|
+
- How to style screens built with Forge UI: [Styling and customization](getting-started/developers/styling/content.md)
|
|
9
|
+
|
|
10
|
+
## Docs
|
|
11
|
+
|
|
12
|
+
- Getting Started
|
|
13
|
+
- [Getting Started](getting-started/content.md): Everything you need to start designing and building with Forge UI.
|
|
14
|
+
- [Designers](getting-started/designers/content.md): Start designing with our guidelines, best practices, and Figma libraries. Design guidance: [design.md](getting-started/designers/design.md)
|
|
15
|
+
- Developers: Install and configure Forge UI, then build screens that keep FI theming and dark mode working.
|
|
16
|
+
- [Installation](getting-started/developers/content.md): Install and configure Forge UI in an Expo, React Native, or Vite + React web project.
|
|
17
|
+
- [Styling and customization](getting-started/developers/styling/content.md): What to style on a screen built with Forge UI, and what to leave to the components so FI theming, dark mode and upgrades keep working.
|
|
18
|
+
- [Accessibility](getting-started/developers/accessibility/content.md): What Forge UI components handle for screen readers, keyboards and assistive technology, and what a screen built with them still has to provide.
|
|
19
|
+
- Foundations
|
|
20
|
+
- [Foundations](foundations/content.md): The core principles, tokens, and shared visual language of the design system.
|
|
21
|
+
|
|
22
|
+
- **Styles**
|
|
23
|
+
- Tokens: Named design decisions for color, type, spacing, and more that keep every brand consistent.
|
|
24
|
+
- [What are tokens?](foundations/styles/tokens/what-are-tokens/content.md): Design tokens are the single source of truth for foundational design decisions. Design guidance: [design.md](foundations/styles/tokens/what-are-tokens/design.md)
|
|
25
|
+
- [All design tokens](foundations/styles/tokens/all-tokens/content.md): Design tokens are the single source of truth for foundational design decisions.
|
|
26
|
+
|
|
27
|
+
- **Expressions**
|
|
28
|
+
- [Icons](foundations/expressions/icons/content.md): Browse all available icons in the Forge UI icon library. Search, filter, and copy import statements.
|
|
29
|
+
- Components
|
|
30
|
+
- [Components](components/content.md): Every component is built for the Votiv experience across web and mobile, on a common React Native architecture.
|
|
31
|
+
|
|
32
|
+
- **Action**
|
|
33
|
+
- [Button](components/button/content.md): A pressable action element for triggering events. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--React-Native-Components?node-id=119-72), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/actions-button--default) Design guidance: [design.md](components/button/design.md)
|
|
34
|
+
- [Icon Button](components/icon-button/content.md): A button that displays only an icon, used for compact actions where the icon clearly communicates intent. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--React-Native-Components?node-id=427-5235), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/actions-iconbutton--default) Design guidance: [design.md](components/icon-button/design.md)
|
|
35
|
+
- [Toggle Button](components/toggle-button/content.md): A button that stays pressed when selected, used standalone or in a group for single- or multiple-choice actions. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/actions-togglebutton--default)
|
|
36
|
+
- [Link](components/link/content.md): A link is interactive text that navigates to another location, either inside or outside the app. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--React-Native-Components?node-id=457-874), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/actions-link--open-in-new-tab) Design guidance: [design.md](components/link/design.md)
|
|
37
|
+
- [Quick Action Button](components/quick-action-button/content.md): A circular icon action with a supporting label for compact action groups. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=5283-1723), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/actions-quickactionbutton--default) Design guidance: [design.md](components/quick-action-button/design.md)
|
|
38
|
+
|
|
39
|
+
- **Input & selection**
|
|
40
|
+
- [Checkbox](components/checkbox/content.md): A checkbox is an input control that allows the user to select multiple options from a set of options or a single yes/no option. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--React-Native-Components?node-id=366-383), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/inputs-checkbox--states) Design guidance: [design.md](components/checkbox/design.md)
|
|
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
|
+
- [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
|
+
- [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)
|
|
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)
|
|
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
|
+
- [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)
|
|
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
|
+
- [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
|
+
- [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)
|
|
53
|
+
- [Color Area](components/color-area/content.md): A two-dimensional control for selecting saturation and brightness in the HSB color space. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/inputs-colorarea--default)
|
|
54
|
+
- [Color Slider](components/color-slider/content.md): A one-dimensional control for selecting a channel from an opaque RGB, HSL, or HSB color. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/inputs-colorslider--default)
|
|
55
|
+
- [Color Field](components/color-field/content.md): A text field for editing an opaque color or one RGB or HSL channel. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/inputs-colorfield--default)
|
|
56
|
+
- [Color Swatch](components/color-swatch/content.md): A presentational sample of an opaque color in configurable sizes and shapes. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/inputs-colorswatch--default)
|
|
57
|
+
- [Color Swatch Picker](components/color-swatch-picker/content.md): A radio-style compound for choosing from consumer-supplied color presets. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/inputs-colorswatchpicker--default)
|
|
58
|
+
- [Switch](components/switch/content.md): A toggle control that lets users turn a single option on or off. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=308-19827), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/inputs-switch--default) Design guidance: [design.md](components/switch/design.md)
|
|
59
|
+
- [Tile](components/tile/content.md): A composable, selectable card/row for pick-one or pick-many flows such as account pickers and category selectors. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=8843-7101), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/surfaces-tile--default)
|
|
60
|
+
|
|
61
|
+
- **Date & time**
|
|
62
|
+
- [Calendar](components/calendar/content.md): A single-date day grid for selecting a date, with month navigation and a year picker. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=11954-3139), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/date-time-calendar--default)
|
|
63
|
+
- [Date Field](components/date-field/content.md): A segmented input for typing a date or a month, with values exchanged as DateId strings. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=11787-9802), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/date-time-datefield--default)
|
|
64
|
+
- [Date Picker](components/date-picker/content.md): A compound date picker pairing a segmented date field with a calendar in a popover, dialog, bottom sheet, or inline surface. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=12349-9879), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/date-time-datepicker--standalone)
|
|
65
|
+
- [Date Range Picker](components/date-range-picker/content.md): A compound date range picker pairing dual segmented date fields with a range calendar in a popover, dialog, bottom sheet, or inline surface. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=12449-28564), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/date-time-daterangepicker--standalone)
|
|
66
|
+
- [Date Time Field](components/date-time-field/content.md): A segmented input for typing a date and time together, with values exchanged as DateTimeId strings. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=11787-10754)
|
|
67
|
+
- [Date Time List](components/date-time-list/content.md): A scroll-wheel picker for choosing a date and time across separate columns, with values exchanged as DateTimeId strings.
|
|
68
|
+
- [Date Time Picker](components/date-time-picker/content.md): A compound date and time picker pairing a segmented field with scroll-wheel columns in a popover, dialog, or bottom sheet. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/date-time-datetimepicker--dialog)
|
|
69
|
+
- [Month Calendar](components/month-calendar/content.md): A month and year grid for selecting a single month, with a year picker and year navigation. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=12010-27571), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/date-time-monthcalendar--default)
|
|
70
|
+
- [Month Picker](components/month-picker/content.md): A compound month picker pairing a segmented date field in month mode with a month calendar in a popover, dialog, bottom sheet, or inline surface. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/date-time-monthpicker--standalone)
|
|
71
|
+
|
|
72
|
+
- **Indicators & status**
|
|
73
|
+
- [Badge](components/badge/content.md): A small status annotation that wraps a child control and positions an indicator at a corner. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=6894-409), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/content-badge--default)
|
|
74
|
+
- [Chip](components/chip/content.md): Chips are compact elements that represent an input, attribute, or action. They allow users to enter information, make selections, filter content, or trigger actions. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--React-Native-Components?node-id=444-13403), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/content-chip--default) Design guidance: [design.md](components/chip/design.md)
|
|
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
|
+
- [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
|
+
- [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
|
+
- [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
|
+
- **Content display**
|
|
81
|
+
- [Accordion](components/accordion/content.md): A vertically stacked set of disclosure items for showing and hiding related content. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--React-Native-Components?node-id=11210-5320), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/surfaces-accordion--default)
|
|
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
|
+
- [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
|
+
- [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)
|
|
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
|
+
- [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
|
+
- [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
|
+
- [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)
|
|
90
|
+
- [Virtualized List](components/virtualized-list/content.md): A performant virtualized list for large datasets — only visible rows mount at a time. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=4040-4933), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/layout-virtualizedlist--large-data-set)
|
|
91
|
+
- [Text](components/text/content.md): Body text with a responsive, token-based typography scale. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--React-Native-Components?node-id=400-3), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/content-text--default)
|
|
92
|
+
- [Heading](components/heading/content.md): Semantic heading text with an accessible, token-based typography scale. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--React-Native-Components?node-id=399-3385), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/content-heading--default)
|
|
93
|
+
|
|
94
|
+
- **Feedback**
|
|
95
|
+
- [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)
|
|
96
|
+
- [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
|
+
- [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
|
+
- [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)
|
|
99
|
+
- [Tooltip](components/tooltip/content.md): A contextual hint overlay anchored to a trigger element. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=12996-1099), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/overlays-tooltip--default)
|
|
100
|
+
- [Toast](components/toast/content.md): A brief notification that confirms an action or reports a background result without interrupting the current task. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=5170-8043), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/feedback-toast--default)
|
|
101
|
+
|
|
102
|
+
- **Surfaces & layout**
|
|
103
|
+
- [Bottom Sheet](components/bottom-sheet/content.md): A surface that slides up from the bottom of the screen to present secondary tasks without leaving the current context. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=3187-706), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/overlays-bottomsheet--default) Design guidance: [design.md](components/bottom-sheet/design.md)
|
|
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
|
+
- [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
|
+
- [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
|
+
- [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
|
+
- [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
|
+
- [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)
|
|
110
|
+
|
|
111
|
+
- **Navigation**
|
|
112
|
+
- [Breadcrumbs](components/breadcrumbs/content.md): A navigation trail that shows the current page within a hierarchy. Resources: [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/navigation-breadcrumbs--default)
|
|
113
|
+
- [Tabs](components/tabs/content.md): A set of layered sections that displays one content panel at a time. Resources: [Figma](https://www.figma.com/design/0lEVMVlLj8ZS4fgItr3pmd/%E2%AD%90-Forge-DS--Components?node-id=10266-3192), [Storybook](https://victorious-wave-0daadf00f.6.azurestaticapps.net/?path=/story/navigation-tabs--default)
|
|
114
|
+
|
|
115
|
+
- **Data & tables**
|
|
116
|
+
- [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)
|
|
117
|
+
- [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)
|
|
118
|
+
- [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)
|
|
119
|
+
- Patterns
|
|
120
|
+
- [Patterns](patterns/content.md): Reusable combinations of components that address common user experiences. Browse by category to find a ready-to-use pattern.
|
|
121
|
+
- [Authentication](patterns/authentication/content.md): Login, signup, OTP verification, and biometric authentication screens.
|
|
122
|
+
- [Account Management](patterns/account-management/content.md): Account summaries, detail headers, and account-level actions.
|
|
123
|
+
- [Payments](patterns/payments/content.md): Transfers, bill pay, quick actions, and payment confirmation flows.
|
|
124
|
+
- [Onboarding](patterns/onboarding/content.md): Welcome screens, setup wizards, and guided first-run experiences.
|
|
125
|
+
- [Settings](patterns/settings/content.md): User preferences, notification controls, and account settings.
|
|
126
|
+
- [Dashboard](patterns/dashboard/content.md): Home screens, greetings, summaries, and at-a-glance views.
|
|
127
|
+
- [Forms](patterns/forms/content.md): Data entry patterns for personal info, addresses, and profile editing.
|
|
128
|
+
- [Empty States](patterns/empty-states/content.md): Placeholder screens shown when content is not yet available.
|
|
129
|
+
- Resources
|
|
130
|
+
- [Resources](resources/content.md): Release notes and other reference material for working with Forge UI.
|
|
131
|
+
|
|
132
|
+
- **Tools**
|
|
133
|
+
- [Figma libraries](resources/figma-libraries/content.md): Access our official design system Figma libraries
|
|
134
|
+
|
|
135
|
+
- **Changelogs**
|
|
136
|
+
- Release notes
|
|
137
|
+
- [Release notes](resources/release-notes/content.md): What changed in every published version of the Forge UI packages.
|
|
138
|
+
|
|
139
|
+
## Release notes
|
|
140
|
+
|
|
141
|
+
- [0.2.4](resources/release-notes/0.2.4/content.md): ScrollShadow fades scroll edges on iOS, Android, and web; ListItem.SectionHeader adds a gradient variant for account-style lists.
|
|
142
|
+
- [0.2.3](resources/release-notes/0.2.3/content.md): ReorderableList brings drag-and-drop list reordering on web and native; Tile flat rows show the selected background again.
|
|
143
|
+
- [0.2.2](resources/release-notes/0.2.2/content.md): Fixes web Text layout in production, Button solid edges on native, and Field required labels on web.
|
|
144
|
+
- [0.2.1](resources/release-notes/0.2.1/content.md): Calendar and DatePicker add isDateUnavailable and shared typed-entry validation integrated with Field and @cdx-ui/formatters.
|
|
145
|
+
- [0.2.0](resources/release-notes/0.2.0/content.md): Native font embedding and per-face utilities removed; adds color picker family, semantic Text/Icon colors, and ToggleButton.Group compound API.
|
|
146
|
+
- [0.1.6](resources/release-notes/0.1.6/content.md): Adds ToggleButton and ToggleButtonGroup for persistent pressed states and single- or multi-select toolbar controls on web and native.
|
|
147
|
+
- [0.1.5](resources/release-notes/0.1.5/content.md): Figma Code Connect templates now cover Switch, progress, tabs, tiles, dates, toasts, sliders, and other components for Dev Mode snippets.
|
|
148
|
+
- [0.1.4](resources/release-notes/0.1.4/content.md): Per-face font utilities are removed on web—use typography composites with font-weight. Adds Drawer, Menu filter rows, Avatar variants, and banking icons.
|
|
149
|
+
- [0.1.2](resources/release-notes/0.1.2/content.md): Radio supports a read-only state for showing a selected option without allowing changes.
|
|
150
|
+
- [0.1.1](resources/release-notes/0.1.1/content.md): Forge UI moves from 0.0.1-beta.188 to 0.1.1 on the 0.x line; update every @cdx-ui/* package to the new version together.
|
|
151
|
+
- [0.0.1-beta.187](resources/release-notes/0.0.1-beta.187/content.md): Adds @cdx-ui/data-grid for web tabular data, plus Table and TablePagination components for data-heavy screens.
|
|
152
|
+
- [0.0.1-beta.185](resources/release-notes/0.0.1-beta.185/content.md): New Table compound component for presenting tabular data with header, body, footer, and cell sub-components on web and native.
|
|
153
|
+
- [0.0.1-beta.182](resources/release-notes/0.0.1-beta.182/content.md): CurrencyInput now accepts returnKeyType to control the keyboard return key on mobile.
|
|
154
|
+
- [0.0.1-beta.179](resources/release-notes/0.0.1-beta.179/content.md): Theme customization now uses explicit ThemeOverride inputs, selections, and token overrides instead of bundled preset themes.
|
|
155
|
+
- [0.0.1-beta.176](resources/release-notes/0.0.1-beta.176/content.md): Finalizes Accordion composition with a single Content slot and fixes Form web data-attribute warnings and Accordion focus rings.
|
|
156
|
+
- [0.0.1-beta.174](resources/release-notes/0.0.1-beta.174/content.md): Icons and checkbox selection groups no longer trigger web accessibility console warnings.
|
|
157
|
+
- [0.0.1-beta.173](resources/release-notes/0.0.1-beta.173/content.md): Theme editor adopts Forge UI instead of MUI, Select shares Menu surface behavior, and ForgeDesignProvider no longer loops on safe-area updates.
|
|
158
|
+
- [0.0.1-beta.172](resources/release-notes/0.0.1-beta.172/content.md): Adds Accordion for expandable single- or multi-select disclosure sections with compound trigger and content slots.
|
|
159
|
+
- [0.0.1-beta.171](resources/release-notes/0.0.1-beta.171/content.md): Slider supports two-thumb range selection with array value, per-thumb labels, and vertical orientation.
|
|
160
|
+
- [0.0.1-beta.169](resources/release-notes/0.0.1-beta.169/content.md): @cdx-ui/styles adds MUI and CDS CSS bridges and a ./theming entry point so Forge UI and MUI can share FI theme overrides.
|
|
161
|
+
- [0.0.1-beta.168](resources/release-notes/0.0.1-beta.168/content.md): ProgressSegmented removes the deprecated total prop; use segments to set the segment count.
|
|
162
|
+
- [0.0.1-beta.167](resources/release-notes/0.0.1-beta.167/content.md): Select.Content adds placement, offset, and crossOffset props to reposition dropdown overlays, with improved anchored overlay positioning near viewport edges.
|
|
163
|
+
- [0.0.1-beta.166](resources/release-notes/0.0.1-beta.166/content.md): Theme overrides expand through a catalog-driven model in @cdx-ui/styles, with Theme Editor persistence fixes and a Chip font token correction.
|
|
164
|
+
- [0.0.1-beta.164](resources/release-notes/0.0.1-beta.164/content.md): The deprecated Button strong variant is removed; replace it with solid before upgrading.
|
|
165
|
+
- [0.0.1-beta.163](resources/release-notes/0.0.1-beta.163/content.md): Button hover and pressed states now use the correct surface design tokens.
|
|
166
|
+
- [0.0.1-beta.161](resources/release-notes/0.0.1-beta.161/content.md): Style Dictionary updates to v5 for a security fix in @cdx-ui/styles token generation.
|
|
167
|
+
- [0.0.1-beta.160](resources/release-notes/0.0.1-beta.160/content.md): Menu adds anchored overlay lists for actions and selections, with checkbox, radio, and placement options.
|
|
168
|
+
- [0.0.1-beta.159](resources/release-notes/0.0.1-beta.159/content.md): Palette generation uses OKLCH with designer contrast ratios; theme override types and getting-started guidance are updated.
|
|
169
|
+
- [0.0.1-beta.158](resources/release-notes/0.0.1-beta.158/content.md): Theme overrides resolve DTCG token-reference aliases at runtime, and Theme Editor preserves custom override fields on round-trip.
|
|
170
|
+
- [0.0.1-beta.156](resources/release-notes/0.0.1-beta.156/content.md): BottomSheet now scrolls correctly on Android when content includes a VirtualizedList.
|
|
171
|
+
- [0.0.1-beta.154](resources/release-notes/0.0.1-beta.154/content.md): Adds @cdx-ui/native for Expo font loading and Metro config; useForgeFonts and withForgeMetroConfig move out of @cdx-ui/styles and @cdx-ui/components.
|
|
172
|
+
- [0.0.1-beta.152](resources/release-notes/0.0.1-beta.152/content.md): Radio draws the focus ring on the indicator only, suppressing the browser default outline around the entire control.
|
|
173
|
+
- [0.0.1-beta.150](resources/release-notes/0.0.1-beta.150/content.md): Dialog and Alert render above Bottom Sheet overlays, fixing stacked modal layering.
|
|
174
|
+
- [0.0.1-beta.149](resources/release-notes/0.0.1-beta.149/content.md): Sparkle custom icon joins @cdx-ui/icons with outlined and filled variants.
|
|
175
|
+
- [0.0.1-beta.147](resources/release-notes/0.0.1-beta.147/content.md): Design token values update for poise, prestige, and pulse presets — review theme overrides if you customize specific tokens.
|
|
176
|
+
- [0.0.1-beta.145](resources/release-notes/0.0.1-beta.145/content.md): Adds Tooltip for short contextual hints with hover, focus, and click triggers, placement control, and an optional arrow on web and native.
|
|
177
|
+
- [0.0.1-beta.144](resources/release-notes/0.0.1-beta.144/content.md): Checkbox isReadOnly now renders with correct read-only styling so the control displays its state without allowing interaction.
|
|
178
|
+
- [0.0.1-beta.143](resources/release-notes/0.0.1-beta.143/content.md): ProgressCircle adds a circular progress indicator with determinate values, indeterminate loading, and small or large sizes.
|
|
179
|
+
- [0.0.1-beta.142](resources/release-notes/0.0.1-beta.142/content.md): Checkbox and Radio keyboard navigation on web keeps tab order through disabled items and focuses the selected radio.
|
|
180
|
+
- [0.0.1-beta.141](resources/release-notes/0.0.1-beta.141/content.md): Date and time pickers join Forge UI with DatePicker, DateRangePicker, DateTimePicker, MonthPicker, and a new @cdx-ui/formatters package.
|
|
181
|
+
- [0.0.1-beta.140](resources/release-notes/0.0.1-beta.140/content.md): @cdx-ui/utils re-exports cva and VariantProps; Select documentation consolidates on the docs site with live demos.
|
|
182
|
+
- [0.0.1-beta.139](resources/release-notes/0.0.1-beta.139/content.md): Carousel adds PrevButton and NextButton for ghost icon prev/next navigation, nested in Carousel or composed via useCarousel().
|
|
183
|
+
- [0.0.1-beta.138](resources/release-notes/0.0.1-beta.138/content.md): WhatsApp icon is themeable again after reverting a premature fixed-color brand-icon carve-out and package license files.
|
|
184
|
+
- [0.0.1-beta.137](resources/release-notes/0.0.1-beta.137/content.md): Tabs indicator animation now completes in 150ms for snappier tab switching.
|
|
185
|
+
- [0.0.1-beta.136](resources/release-notes/0.0.1-beta.136/content.md): Font overrides applied with applyThemeOverride now persist inside ScopedTheme scopes instead of being shadowed.
|
|
186
|
+
- [0.0.1-beta.134](resources/release-notes/0.0.1-beta.134/content.md): Published @cdx-ui packages declare MIT license metadata; versions published before this release are unchanged.
|
|
187
|
+
- [0.0.1-beta.133](resources/release-notes/0.0.1-beta.133/content.md): Button asChild no longer overrides child role and event handlers when composing with Link or other interactive elements.
|
|
188
|
+
- [0.0.1-beta.130](resources/release-notes/0.0.1-beta.130/content.md): Import ForgeDesignProvider directly from @cdx-ui/components.
|
|
189
|
+
- [0.0.1-beta.129](resources/release-notes/0.0.1-beta.129/content.md): Tabs and Breadcrumbs documentation ships; Tabs.Tab interaction props are now internal-only.
|
|
190
|
+
- [0.0.1-beta.128](resources/release-notes/0.0.1-beta.128/content.md): Design token values update from the design system source for poise, prestige, and pulse presets.
|
|
191
|
+
- [0.0.1-beta.127](resources/release-notes/0.0.1-beta.127/content.md): Internal release — docs demo drift guard and a CI coverage-threshold gate.
|
|
192
|
+
- [0.0.1-beta.126](resources/release-notes/0.0.1-beta.126/content.md): ThemeEditor no longer fires onChange on mount before the user edits a control.
|
|
193
|
+
- [0.0.1-beta.124](resources/release-notes/0.0.1-beta.124/content.md): Breadcrumbs joins the component set for hierarchical navigation trails.
|
|
194
|
+
- [0.0.1-beta.122](resources/release-notes/0.0.1-beta.122/content.md): Tabs arrives with a scroll-shadow affordance for overflowing tab strips.
|
|
195
|
+
- [0.0.1-beta.118](resources/release-notes/0.0.1-beta.118/content.md): Color and variant props are standardised across components; tint and default are renamed.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Account Management (https://design.candescent.com/docs/patterns/account-management)
|
|
2
|
+
|
|
3
|
+
## Account List Card
|
|
4
|
+
|
|
5
|
+
Accounts grouped by type under a gradient section header, with balances, a status chip, and a payment action.
|
|
6
|
+
|
|
7
|
+
**Platforms:** iOS, Android, Web
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
import { Button, Card, Chip, HStack, ListItem, Text } from '@cdx-ui/components';
|
|
11
|
+
|
|
12
|
+
const accounts = [
|
|
13
|
+
{
|
|
14
|
+
name: 'Visa Platinum Plus',
|
|
15
|
+
last4: '0275',
|
|
16
|
+
balance: '$9,834.67',
|
|
17
|
+
balanceLabel: 'Outstanding balance',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: 'Auto loan',
|
|
21
|
+
last4: '0865',
|
|
22
|
+
balance: '$15,620.11',
|
|
23
|
+
balanceLabel: 'Outstanding balance',
|
|
24
|
+
status: { label: 'Payment overdue', tone: 'danger' },
|
|
25
|
+
},
|
|
26
|
+
] as const;
|
|
27
|
+
|
|
28
|
+
export default function AccountListCardBlock() {
|
|
29
|
+
return (
|
|
30
|
+
<Card fullBleed className="w-full max-w-md">
|
|
31
|
+
<Card.Content>
|
|
32
|
+
<ListItem.SectionHeader variant="gradient" showDivider={false}>
|
|
33
|
+
Credit & loans
|
|
34
|
+
</ListItem.SectionHeader>
|
|
35
|
+
{accounts.map((account, index) => (
|
|
36
|
+
<ListItem
|
|
37
|
+
key={account.last4}
|
|
38
|
+
crossAlign="start"
|
|
39
|
+
showSeparator={index < accounts.length - 1}
|
|
40
|
+
onPress={() => {}}
|
|
41
|
+
>
|
|
42
|
+
<ListItem.Content>
|
|
43
|
+
<HStack space="sm" className="items-baseline">
|
|
44
|
+
<ListItem.Title>{account.name}</ListItem.Title>
|
|
45
|
+
<Text size="sm" color="secondary">
|
|
46
|
+
•••{account.last4}
|
|
47
|
+
</Text>
|
|
48
|
+
</HStack>
|
|
49
|
+
<Text size="xl" weight="semibold">
|
|
50
|
+
{account.balance}
|
|
51
|
+
</Text>
|
|
52
|
+
<ListItem.Description>{account.balanceLabel}</ListItem.Description>
|
|
53
|
+
{'status' in account ? (
|
|
54
|
+
<Chip
|
|
55
|
+
variant="subtle"
|
|
56
|
+
size="small"
|
|
57
|
+
color={account.status.tone}
|
|
58
|
+
className="mt-1 self-start"
|
|
59
|
+
>
|
|
60
|
+
<Chip.Label>{account.status.label}</Chip.Label>
|
|
61
|
+
</Chip>
|
|
62
|
+
) : null}
|
|
63
|
+
</ListItem.Content>
|
|
64
|
+
</ListItem>
|
|
65
|
+
))}
|
|
66
|
+
</Card.Content>
|
|
67
|
+
<Card.Footer>
|
|
68
|
+
<Button variant="outline" color="action" fullWidth onPress={() => {}}>
|
|
69
|
+
<Button.Label>Pay due bills</Button.Label>
|
|
70
|
+
</Button>
|
|
71
|
+
</Card.Footer>
|
|
72
|
+
</Card>
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
```
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Authentication (https://design.candescent.com/docs/patterns/authentication)
|
|
2
|
+
|
|
3
|
+
## Simple Login
|
|
4
|
+
|
|
5
|
+
A minimal login form with username, password, and a forgot-password link.
|
|
6
|
+
|
|
7
|
+
**Platforms:** iOS, Android, Web
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
import { Button, Card, Field, Heading, Input, Link, Text, VStack } from '@cdx-ui/components';
|
|
11
|
+
|
|
12
|
+
export default function LoginSimpleBlock() {
|
|
13
|
+
return (
|
|
14
|
+
<Card className="w-full max-w-sm">
|
|
15
|
+
<Card.Header>
|
|
16
|
+
<VStack space="sm" className="items-center">
|
|
17
|
+
<Heading>Sign in</Heading>
|
|
18
|
+
<Text color="secondary">Enter your credentials to access your account</Text>
|
|
19
|
+
</VStack>
|
|
20
|
+
</Card.Header>
|
|
21
|
+
<Card.Content>
|
|
22
|
+
<VStack space="lg">
|
|
23
|
+
<Field>
|
|
24
|
+
<Field.Label>Username</Field.Label>
|
|
25
|
+
<Input>
|
|
26
|
+
<Input.Field placeholder="Enter your username" />
|
|
27
|
+
</Input>
|
|
28
|
+
</Field>
|
|
29
|
+
<Field>
|
|
30
|
+
<Field.Label>Password</Field.Label>
|
|
31
|
+
<Input>
|
|
32
|
+
<Input.Field placeholder="Enter your password" secureTextEntry />
|
|
33
|
+
</Input>
|
|
34
|
+
</Field>
|
|
35
|
+
<Button fullWidth>
|
|
36
|
+
<Button.Label>Sign In</Button.Label>
|
|
37
|
+
</Button>
|
|
38
|
+
</VStack>
|
|
39
|
+
</Card.Content>
|
|
40
|
+
<Card.Footer>
|
|
41
|
+
<VStack space="sm" className="items-center">
|
|
42
|
+
<Link>
|
|
43
|
+
<Link.Label>Forgot password?</Link.Label>
|
|
44
|
+
</Link>
|
|
45
|
+
</VStack>
|
|
46
|
+
</Card.Footer>
|
|
47
|
+
</Card>
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
```
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Patterns (https://design.candescent.com/docs/patterns)
|
|
2
|
+
|
|
3
|
+
- [Authentication](https://design.candescent.com/docs/patterns/authentication/content.md) — Login, signup, OTP verification, and biometric authentication screens.
|
|
4
|
+
- [Account Management](https://design.candescent.com/docs/patterns/account-management/content.md) — Account summaries, detail headers, and account-level actions.
|
|
5
|
+
- [Payments](https://design.candescent.com/docs/patterns/payments/content.md) — Transfers, bill pay, quick actions, and payment confirmation flows.
|
|
6
|
+
- [Onboarding](https://design.candescent.com/docs/patterns/onboarding/content.md) — Welcome screens, setup wizards, and guided first-run experiences.
|
|
7
|
+
- [Settings](https://design.candescent.com/docs/patterns/settings/content.md) — User preferences, notification controls, and account settings.
|
|
8
|
+
- [Dashboard](https://design.candescent.com/docs/patterns/dashboard/content.md) — Home screens, greetings, summaries, and at-a-glance views.
|
|
9
|
+
- [Forms](https://design.candescent.com/docs/patterns/forms/content.md) — Data entry patterns for personal info, addresses, and profile editing.
|
|
10
|
+
- [Empty States](https://design.candescent.com/docs/patterns/empty-states/content.md) — Placeholder screens shown when content is not yet available.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Dashboard (https://design.candescent.com/docs/patterns/dashboard)
|
|
2
|
+
|
|
3
|
+
## Dashboard Greeting
|
|
4
|
+
|
|
5
|
+
A personalized greeting header with search, notifications, and avatar.
|
|
6
|
+
|
|
7
|
+
**Platforms:** iOS, Android
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
import { Avatar, Badge, Heading, HStack, IconButton, Text, VStack } from '@cdx-ui/components';
|
|
11
|
+
import { Notifications, Search } from '@cdx-ui/icons';
|
|
12
|
+
|
|
13
|
+
export default function DashboardGreetingBlock() {
|
|
14
|
+
return (
|
|
15
|
+
<HStack className="w-full max-w-md items-center justify-between py-4 px-4">
|
|
16
|
+
<VStack space="xs">
|
|
17
|
+
<Text size="sm" color="secondary">
|
|
18
|
+
Good morning,
|
|
19
|
+
</Text>
|
|
20
|
+
<Heading>Bernadette</Heading>
|
|
21
|
+
</VStack>
|
|
22
|
+
<HStack space="sm" className="items-center">
|
|
23
|
+
<IconButton as={Search} accessibilityLabel="Search" />
|
|
24
|
+
<Badge label={3} color="danger" overlap="circular" accessibilityLabel="3 notifications">
|
|
25
|
+
<IconButton as={Notifications} accessibilityLabel="Notifications" />
|
|
26
|
+
</Badge>
|
|
27
|
+
<Avatar size="lg">
|
|
28
|
+
<Avatar.Text>Bernadette Miller</Avatar.Text>
|
|
29
|
+
</Avatar>
|
|
30
|
+
</HStack>
|
|
31
|
+
</HStack>
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
```
|