@titan-design/react-ui 0.1.0 → 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.
Files changed (236) hide show
  1. package/README.md +47 -1
  2. package/dist/{chunk-MGW37MPO.mjs → chunk-UXVRPOME.mjs} +173 -3
  3. package/dist/chunk-UXVRPOME.mjs.map +1 -0
  4. package/dist/index.d.mts +101 -12
  5. package/dist/index.d.ts +101 -12
  6. package/dist/index.js +1267 -468
  7. package/dist/index.js.map +1 -1
  8. package/dist/index.mjs +734 -112
  9. package/dist/index.mjs.map +1 -1
  10. package/dist/theme/index.d.mts +86 -1
  11. package/dist/theme/index.d.ts +86 -1
  12. package/dist/theme/index.js +166 -0
  13. package/dist/theme/index.js.map +1 -1
  14. package/dist/theme/index.mjs +1 -1
  15. package/package.json +22 -6
  16. package/src/components/custom/DateTime/DateTime.stories.tsx +180 -0
  17. package/src/components/custom/DateTime/DateTime.test.tsx +152 -0
  18. package/src/components/custom/DateTime/DateTime.tsx +235 -0
  19. package/src/components/custom/DateTime/index.ts +2 -0
  20. package/src/components/custom/EmptyState/EmptyState.stories.tsx +99 -0
  21. package/src/components/custom/EmptyState/EmptyState.test.tsx +106 -0
  22. package/src/components/custom/EmptyState/EmptyState.tsx +68 -0
  23. package/src/components/custom/EmptyState/index.ts +2 -0
  24. package/src/components/custom/Metric/Metric.stories.tsx +133 -0
  25. package/src/components/custom/Metric/Metric.test.tsx +120 -0
  26. package/src/components/custom/Metric/Metric.tsx +92 -0
  27. package/src/components/custom/Metric/index.ts +2 -0
  28. package/src/components/custom/Sidebar/Sidebar.stories.tsx +227 -0
  29. package/src/components/custom/Sidebar/Sidebar.test.tsx +185 -0
  30. package/src/components/custom/Sidebar/Sidebar.tsx +257 -0
  31. package/src/components/custom/Sidebar/index.ts +18 -0
  32. package/src/components/custom/Table/Table.stories.tsx +481 -0
  33. package/src/components/custom/Table/Table.test.tsx +531 -0
  34. package/src/components/custom/Table/Table.tsx +696 -0
  35. package/src/components/custom/Table/index.ts +22 -0
  36. package/src/components/custom/Typography/Typography.stories.tsx +153 -0
  37. package/src/components/custom/Typography/Typography.test.tsx +107 -0
  38. package/src/components/custom/Typography/Typography.tsx +218 -0
  39. package/src/components/custom/Typography/index.ts +19 -0
  40. package/src/components/custom/Workout/RestTimer.stories.tsx +71 -0
  41. package/src/components/custom/Workout/RestTimer.test.tsx +145 -0
  42. package/src/components/custom/Workout/RestTimer.tsx +172 -0
  43. package/src/components/custom/Workout/SupersetWrapper.stories.tsx +144 -0
  44. package/src/components/custom/Workout/SupersetWrapper.test.tsx +130 -0
  45. package/src/components/custom/Workout/SupersetWrapper.tsx +63 -0
  46. package/src/components/custom/Workout/index.ts +2 -0
  47. package/src/components/custom/index.ts +9 -0
  48. package/src/components/custom/stepper/Stepper.stories.tsx +245 -0
  49. package/src/components/custom/stepper/Stepper.test.tsx +230 -0
  50. package/src/components/custom/stepper/Stepper.tsx +250 -0
  51. package/src/components/custom/stepper/index.ts +10 -0
  52. package/src/components/index.ts +5 -0
  53. package/src/components/ui/alert/Alert.stories.tsx +154 -0
  54. package/src/components/ui/alert/Alert.test.tsx +202 -0
  55. package/src/components/ui/alert/Alert.tsx +170 -0
  56. package/src/components/ui/alert/index.ts +8 -0
  57. package/src/components/ui/autocomplete/Autocomplete.stories.tsx +299 -0
  58. package/src/components/ui/autocomplete/Autocomplete.test.tsx +247 -0
  59. package/src/components/ui/autocomplete/Autocomplete.tsx +332 -0
  60. package/src/components/ui/autocomplete/index.ts +2 -0
  61. package/src/components/ui/avatar/Avatar.stories.tsx +105 -0
  62. package/src/components/ui/avatar/Avatar.test.tsx +152 -0
  63. package/src/components/ui/avatar/Avatar.tsx +176 -0
  64. package/src/components/ui/avatar/index.ts +2 -0
  65. package/src/components/ui/badge/Badge.stories.tsx +100 -0
  66. package/src/components/ui/badge/Badge.test.tsx +103 -0
  67. package/src/components/ui/badge/Badge.tsx +119 -0
  68. package/src/components/ui/badge/index.ts +3 -0
  69. package/src/components/ui/breadcrumbs/Breadcrumbs.stories.tsx +70 -0
  70. package/src/components/ui/breadcrumbs/Breadcrumbs.test.tsx +156 -0
  71. package/src/components/ui/breadcrumbs/Breadcrumbs.tsx +127 -0
  72. package/src/components/ui/breadcrumbs/index.ts +2 -0
  73. package/src/components/ui/button/Button.stories.tsx +216 -0
  74. package/src/components/ui/button/Button.test.tsx +132 -0
  75. package/src/components/ui/button/Button.tsx +297 -0
  76. package/src/components/ui/button/index.ts +10 -0
  77. package/src/components/ui/card/Card.stories.tsx +443 -0
  78. package/src/components/ui/card/Card.test.tsx +294 -0
  79. package/src/components/ui/card/Card.tsx +401 -0
  80. package/src/components/ui/card/index.ts +20 -0
  81. package/src/components/ui/checkbox/Checkbox.stories.tsx +126 -0
  82. package/src/components/ui/checkbox/Checkbox.test.tsx +152 -0
  83. package/src/components/ui/checkbox/Checkbox.tsx +163 -0
  84. package/src/components/ui/checkbox/index.ts +2 -0
  85. package/src/components/ui/chip/Chip.stories.tsx +112 -0
  86. package/src/components/ui/chip/Chip.test.tsx +119 -0
  87. package/src/components/ui/chip/Chip.tsx +151 -0
  88. package/src/components/ui/chip/index.ts +2 -0
  89. package/src/components/ui/collapse/Collapse.stories.tsx +313 -0
  90. package/src/components/ui/collapse/Collapse.test.tsx +298 -0
  91. package/src/components/ui/collapse/Collapse.tsx +275 -0
  92. package/src/components/ui/collapse/index.ts +18 -0
  93. package/src/components/ui/data-row/DataRow.stories.tsx +78 -0
  94. package/src/components/ui/data-row/DataRow.test.tsx +78 -0
  95. package/src/components/ui/data-row/DataRow.tsx +29 -0
  96. package/src/components/ui/data-row/index.ts +2 -0
  97. package/src/components/ui/divider/Divider.stories.tsx +71 -0
  98. package/src/components/ui/divider/Divider.test.tsx +55 -0
  99. package/src/components/ui/divider/Divider.tsx +37 -0
  100. package/src/components/ui/divider/index.ts +2 -0
  101. package/src/components/ui/drawer/Drawer.stories.tsx +228 -0
  102. package/src/components/ui/drawer/Drawer.test.tsx +142 -0
  103. package/src/components/ui/drawer/Drawer.tsx +228 -0
  104. package/src/components/ui/drawer/index.ts +9 -0
  105. package/src/components/ui/form-field/FormField.stories.tsx +260 -0
  106. package/src/components/ui/form-field/FormField.test.tsx +280 -0
  107. package/src/components/ui/form-field/FormField.tsx +308 -0
  108. package/src/components/ui/form-field/index.ts +2 -0
  109. package/src/components/ui/help-tip/HelpTip.stories.tsx +250 -0
  110. package/src/components/ui/help-tip/HelpTip.test.tsx +198 -0
  111. package/src/components/ui/help-tip/HelpTip.tsx +229 -0
  112. package/src/components/ui/help-tip/index.ts +2 -0
  113. package/src/components/ui/icon-box/IconBox.stories.tsx +139 -0
  114. package/src/components/ui/icon-box/IconBox.test.tsx +120 -0
  115. package/src/components/ui/icon-box/IconBox.tsx +57 -0
  116. package/src/components/ui/icon-box/index.ts +1 -0
  117. package/src/components/ui/index.ts +38 -0
  118. package/src/components/ui/indicator/Indicator.stories.tsx +74 -0
  119. package/src/components/ui/indicator/Indicator.test.tsx +55 -0
  120. package/src/components/ui/indicator/Indicator.tsx +73 -0
  121. package/src/components/ui/indicator/index.ts +2 -0
  122. package/src/components/ui/input/Input.stories.tsx +192 -0
  123. package/src/components/ui/input/Input.test.tsx +86 -0
  124. package/src/components/ui/input/Input.tsx +273 -0
  125. package/src/components/ui/input/index.ts +2 -0
  126. package/src/components/ui/link/Link.stories.tsx +78 -0
  127. package/src/components/ui/link/Link.test.tsx +94 -0
  128. package/src/components/ui/link/Link.tsx +86 -0
  129. package/src/components/ui/link/index.ts +2 -0
  130. package/src/components/ui/list-item/ListItem.stories.tsx +146 -0
  131. package/src/components/ui/list-item/ListItem.test.tsx +128 -0
  132. package/src/components/ui/list-item/ListItem.tsx +89 -0
  133. package/src/components/ui/list-item/index.ts +14 -0
  134. package/src/components/ui/menu/Menu.stories.tsx +180 -0
  135. package/src/components/ui/menu/Menu.test.tsx +353 -0
  136. package/src/components/ui/menu/Menu.tsx +222 -0
  137. package/src/components/ui/menu/index.ts +2 -0
  138. package/src/components/ui/modal/Modal.stories.tsx +350 -0
  139. package/src/components/ui/modal/Modal.test.tsx +159 -0
  140. package/src/components/ui/modal/Modal.tsx +254 -0
  141. package/src/components/ui/modal/index.ts +19 -0
  142. package/src/components/ui/pill/Pill.stories.tsx +71 -0
  143. package/src/components/ui/pill/Pill.test.tsx +69 -0
  144. package/src/components/ui/pill/Pill.tsx +104 -0
  145. package/src/components/ui/pill/index.ts +2 -0
  146. package/src/components/ui/popover/Popover.stories.tsx +190 -0
  147. package/src/components/ui/popover/Popover.test.tsx +419 -0
  148. package/src/components/ui/popover/Popover.tsx +237 -0
  149. package/src/components/ui/popover/index.ts +2 -0
  150. package/src/components/ui/progress/Progress.stories.tsx +190 -0
  151. package/src/components/ui/progress/Progress.test.tsx +210 -0
  152. package/src/components/ui/progress/Progress.tsx +339 -0
  153. package/src/components/ui/progress/index.ts +9 -0
  154. package/src/components/ui/radio/Radio.stories.tsx +199 -0
  155. package/src/components/ui/radio/Radio.test.tsx +166 -0
  156. package/src/components/ui/radio/Radio.tsx +200 -0
  157. package/src/components/ui/radio/index.ts +2 -0
  158. package/src/components/ui/section/Section.stories.tsx +111 -0
  159. package/src/components/ui/section/Section.test.tsx +121 -0
  160. package/src/components/ui/section/Section.tsx +52 -0
  161. package/src/components/ui/section/index.ts +6 -0
  162. package/src/components/ui/select/Select.stories.tsx +286 -0
  163. package/src/components/ui/select/Select.test.tsx +200 -0
  164. package/src/components/ui/select/Select.tsx +243 -0
  165. package/src/components/ui/select/index.ts +2 -0
  166. package/src/components/ui/skeleton/Skeleton.stories.tsx +153 -0
  167. package/src/components/ui/skeleton/Skeleton.test.tsx +162 -0
  168. package/src/components/ui/skeleton/Skeleton.tsx +229 -0
  169. package/src/components/ui/skeleton/index.ts +16 -0
  170. package/src/components/ui/spinner/Spinner.stories.tsx +67 -0
  171. package/src/components/ui/spinner/Spinner.test.tsx +67 -0
  172. package/src/components/ui/spinner/Spinner.tsx +72 -0
  173. package/src/components/ui/spinner/index.ts +2 -0
  174. package/src/components/ui/stack/Stack.stories.tsx +127 -0
  175. package/src/components/ui/stack/Stack.test.tsx +184 -0
  176. package/src/components/ui/stack/Stack.tsx +76 -0
  177. package/src/components/ui/stack/index.ts +2 -0
  178. package/src/components/ui/surface/Surface.stories.tsx +91 -0
  179. package/src/components/ui/surface/Surface.test.tsx +63 -0
  180. package/src/components/ui/surface/Surface.tsx +51 -0
  181. package/src/components/ui/surface/index.ts +1 -0
  182. package/src/components/ui/switch/Switch.stories.tsx +111 -0
  183. package/src/components/ui/switch/Switch.test.tsx +112 -0
  184. package/src/components/ui/switch/Switch.tsx +103 -0
  185. package/src/components/ui/switch/index.ts +2 -0
  186. package/src/components/ui/tabs/Tabs.stories.tsx +213 -0
  187. package/src/components/ui/tabs/Tabs.test.tsx +192 -0
  188. package/src/components/ui/tabs/Tabs.tsx +253 -0
  189. package/src/components/ui/tabs/index.ts +16 -0
  190. package/src/components/ui/toast/Toast.stories.tsx +255 -0
  191. package/src/components/ui/toast/Toast.test.tsx +207 -0
  192. package/src/components/ui/toast/Toast.tsx +327 -0
  193. package/src/components/ui/toast/index.ts +9 -0
  194. package/src/components/ui/toolbar-button/ToolbarButton.stories.tsx +415 -0
  195. package/src/components/ui/toolbar-button/ToolbarButton.test.tsx +224 -0
  196. package/src/components/ui/toolbar-button/ToolbarButton.tsx +307 -0
  197. package/src/components/ui/toolbar-button/index.ts +7 -0
  198. package/src/components/ui/tooltip/Tooltip.stories.tsx +126 -0
  199. package/src/components/ui/tooltip/Tooltip.test.tsx +262 -0
  200. package/src/components/ui/tooltip/Tooltip.tsx +234 -0
  201. package/src/components/ui/tooltip/index.ts +2 -0
  202. package/src/index.ts +10 -0
  203. package/src/stories/PresetShowcase.stories.tsx +462 -0
  204. package/src/stories/ThemePresets.stories.tsx +85 -0
  205. package/src/test/setup.ts +19 -0
  206. package/src/theme/Colors.stories.tsx +258 -0
  207. package/src/theme/config.ts +193 -0
  208. package/src/theme/elevation.stories.tsx +346 -0
  209. package/src/theme/elevation.test.ts +27 -0
  210. package/src/theme/elevation.ts +567 -0
  211. package/src/theme/global.css +129 -1
  212. package/src/theme/index.ts +40 -0
  213. package/src/theme/presets/apply.ts +97 -0
  214. package/src/theme/presets/audiobook.ts +93 -0
  215. package/src/theme/presets/default.ts +6 -0
  216. package/src/theme/presets/index.ts +4 -0
  217. package/src/theme/presets/presets.test.ts +51 -0
  218. package/src/theme/presets/types.ts +76 -0
  219. package/src/theme/shadows.stories.tsx +523 -0
  220. package/src/theme/shadows.ts +439 -0
  221. package/src/theme/tokens/index.ts +2 -0
  222. package/src/theme/tokens/primitives.ts +354 -0
  223. package/src/theme/tokens/semantic.ts +381 -0
  224. package/src/types/jest-axe.d.ts +16 -0
  225. package/src/types/nativewind.d.ts +54 -0
  226. package/src/utils/avatar-color.test.ts +30 -0
  227. package/src/utils/avatar-color.ts +20 -0
  228. package/src/utils/cn.ts +14 -0
  229. package/src/utils/colors.ts +140 -0
  230. package/src/utils/form.ts +188 -0
  231. package/src/utils/index.ts +29 -0
  232. package/src/utils/useTheme.ts +72 -0
  233. package/src/web-jsx/jsx-dev-runtime.ts +28 -0
  234. package/src/web-jsx/jsx-runtime.ts +41 -0
  235. package/tailwind.config.js +53 -3
  236. package/dist/chunk-MGW37MPO.mjs.map +0 -1
@@ -0,0 +1,443 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite'
2
+ import { View, Text } from 'react-native'
3
+ import {
4
+ Card,
5
+ CardHeader,
6
+ CardTitle,
7
+ CardDescription,
8
+ CardContent,
9
+ CardFooter,
10
+ CardSkeleton,
11
+ CardInset,
12
+ } from './Card'
13
+ import { Button, ButtonText } from '../button'
14
+
15
+ const meta: Meta<typeof Card> = {
16
+ title: 'Components/Card',
17
+ component: Card,
18
+ tags: ['autodocs'],
19
+ argTypes: {
20
+ variant: {
21
+ control: 'select',
22
+ options: ['elevated', 'outline', 'filled'],
23
+ },
24
+ elevation: {
25
+ control: 'select',
26
+ options: [1, 2, 3],
27
+ description: 'Elevation level (1=subtle, 2=standard, 3=prominent)',
28
+ },
29
+ isInteractive: { control: 'boolean' },
30
+ isLoading: { control: 'boolean' },
31
+ borderColor: { control: 'color' },
32
+ bgColor: { control: 'color' },
33
+ },
34
+ }
35
+
36
+ export default meta
37
+ type Story = StoryObj<typeof Card>
38
+
39
+ export const Default: Story = {
40
+ render: (args) => (
41
+ <Card {...args} style={{ width: 320 }}>
42
+ <CardHeader>
43
+ <CardTitle>Card Title</CardTitle>
44
+ <CardDescription>Card description goes here</CardDescription>
45
+ </CardHeader>
46
+ <CardContent>
47
+ <Text className="text-text-secondary">
48
+ This is the card content. You can put any content here.
49
+ </Text>
50
+ </CardContent>
51
+ <CardFooter>
52
+ <Button variant="ghost" size="sm">
53
+ <ButtonText>Cancel</ButtonText>
54
+ </Button>
55
+ <Button size="sm">
56
+ <ButtonText>Save</ButtonText>
57
+ </Button>
58
+ </CardFooter>
59
+ </Card>
60
+ ),
61
+ }
62
+
63
+ export const Elevated: Story = {
64
+ args: {
65
+ variant: 'elevated',
66
+ },
67
+ render: (args) => (
68
+ <Card {...args} style={{ width: 320 }}>
69
+ <CardContent>
70
+ <Text className="text-text-primary">Elevated card with elevation</Text>
71
+ </CardContent>
72
+ </Card>
73
+ ),
74
+ }
75
+
76
+ export const Outline: Story = {
77
+ args: {
78
+ variant: 'outline',
79
+ },
80
+ render: (args) => (
81
+ <Card {...args} style={{ width: 320 }}>
82
+ <CardContent>
83
+ <Text className="text-text-primary">Outlined card with border</Text>
84
+ </CardContent>
85
+ </Card>
86
+ ),
87
+ }
88
+
89
+ export const Filled: Story = {
90
+ args: {
91
+ variant: 'filled',
92
+ },
93
+ render: (args) => (
94
+ <Card {...args} style={{ width: 320 }}>
95
+ <CardContent>
96
+ <Text className="text-text-primary">Filled card with background</Text>
97
+ </CardContent>
98
+ </Card>
99
+ ),
100
+ }
101
+
102
+ export const Interactive: Story = {
103
+ args: {
104
+ isInteractive: true,
105
+ },
106
+ render: (args) => (
107
+ <Card {...args} style={{ width: 320 }}>
108
+ <CardHeader>
109
+ <CardTitle>Interactive Card</CardTitle>
110
+ <CardDescription>Hover to see the effect</CardDescription>
111
+ </CardHeader>
112
+ <CardContent>
113
+ <Text className="text-text-secondary">
114
+ This card has hover effects when isInteractive is true.
115
+ </Text>
116
+ </CardContent>
117
+ </Card>
118
+ ),
119
+ }
120
+
121
+ export const SimpleCard: Story = {
122
+ render: () => (
123
+ <Card style={{ width: 320 }}>
124
+ <CardContent>
125
+ <Text className="text-text-primary">Simple card with just content</Text>
126
+ </CardContent>
127
+ </Card>
128
+ ),
129
+ }
130
+
131
+ export const ElevationLevels: Story = {
132
+ render: () => (
133
+ <View style={{ flexDirection: 'row', gap: 16, flexWrap: 'wrap' }}>
134
+ <Card elevation={1} style={{ width: 140 }}>
135
+ <CardContent>
136
+ <Text className="text-text-primary font-semibold">Subtle (1)</Text>
137
+ </CardContent>
138
+ </Card>
139
+ <Card elevation={2} style={{ width: 140 }}>
140
+ <CardContent>
141
+ <Text className="text-text-primary font-semibold">Standard (2)</Text>
142
+ </CardContent>
143
+ </Card>
144
+ <Card elevation={3} style={{ width: 140 }}>
145
+ <CardContent>
146
+ <Text className="text-text-primary font-semibold">Prominent (3)</Text>
147
+ </CardContent>
148
+ </Card>
149
+ </View>
150
+ ),
151
+ }
152
+
153
+ export const Clickable: Story = {
154
+ render: () => (
155
+ <Card
156
+ isInteractive
157
+ onPress={() => console.log('Card clicked!')}
158
+ style={{ width: 320 }}
159
+ >
160
+ <CardHeader>
161
+ <CardTitle>Clickable Card</CardTitle>
162
+ <CardDescription>Click anywhere on this card</CardDescription>
163
+ </CardHeader>
164
+ <CardContent>
165
+ <Text className="text-text-secondary">
166
+ This card has onPress handler and shows hover/press feedback.
167
+ </Text>
168
+ </CardContent>
169
+ </Card>
170
+ ),
171
+ }
172
+
173
+ export const Loading: Story = {
174
+ args: {
175
+ isLoading: true,
176
+ },
177
+ render: (args) => (
178
+ <Card {...args} style={{ width: 320 }}>
179
+ <CardHeader>
180
+ <CardTitle>Loading Card</CardTitle>
181
+ <CardDescription>Content is loading...</CardDescription>
182
+ </CardHeader>
183
+ <CardContent>
184
+ <Text className="text-text-secondary">
185
+ This content is hidden behind a loading spinner.
186
+ </Text>
187
+ </CardContent>
188
+ </Card>
189
+ ),
190
+ }
191
+
192
+ export const Skeleton: Story = {
193
+ render: () => (
194
+ <View style={{ gap: 16 }}>
195
+ <CardSkeleton style={{ width: 320 }} />
196
+ <CardSkeleton hasHeader hasFooter style={{ width: 320 }} />
197
+ <CardSkeleton hasHeader={false} contentLines={2} style={{ width: 320 }} />
198
+ </View>
199
+ ),
200
+ }
201
+
202
+ export const InsetElements: Story = {
203
+ render: () => (
204
+ <View style={{ gap: 16 }}>
205
+ <Card elevation={2} style={{ width: 320 }}>
206
+ <CardHeader>
207
+ <CardTitle>Card with Inset</CardTitle>
208
+ <CardDescription>Demonstrating inset elements within cards</CardDescription>
209
+ </CardHeader>
210
+ <CardContent>
211
+ <CardInset elevation={-1} className="p-4">
212
+ <Text className="text-text-secondary text-sm">
213
+ Shallow inset element (elevation -1)
214
+ </Text>
215
+ </CardInset>
216
+ </CardContent>
217
+ </Card>
218
+
219
+ <Card elevation={3} style={{ width: 320 }}>
220
+ <CardHeader>
221
+ <CardTitle>Deep Inset</CardTitle>
222
+ </CardHeader>
223
+ <CardContent>
224
+ <CardInset elevation={-2} className="p-4">
225
+ <Text className="text-text-secondary text-sm">
226
+ Deep inset element (elevation -2)
227
+ </Text>
228
+ </CardInset>
229
+ </CardContent>
230
+ </Card>
231
+
232
+ <Card elevation={2} style={{ width: 320 }}>
233
+ <CardHeader>
234
+ <CardTitle>Nested Insets</CardTitle>
235
+ </CardHeader>
236
+ <CardContent>
237
+ <CardInset elevation={-1} className="p-4 mb-4">
238
+ <Text className="text-text-secondary text-sm mb-2">
239
+ Outer inset (elevation -1)
240
+ </Text>
241
+ <CardInset elevation={-2} className="p-3">
242
+ <Text className="text-text-secondary text-xs">
243
+ Inner inset (elevation -2)
244
+ </Text>
245
+ </CardInset>
246
+ </CardInset>
247
+ </CardContent>
248
+ </Card>
249
+ </View>
250
+ ),
251
+ }
252
+
253
+ // Status colors from the theme (using CSS custom properties for theme compliance)
254
+ const statusColors = {
255
+ success: 'var(--color-status-success)',
256
+ successSubtle: 'var(--color-status-success-subtle)',
257
+ error: 'var(--color-status-error)',
258
+ errorSubtle: 'var(--color-status-error-subtle)',
259
+ warning: 'var(--color-status-warning)',
260
+ warningSubtle: 'var(--color-status-warning-subtle)',
261
+ info: 'var(--color-status-info)',
262
+ infoSubtle: 'var(--color-status-info-subtle)',
263
+ }
264
+
265
+ export const StatusOutlineCards: Story = {
266
+ render: () => (
267
+ <View style={{ gap: 16 }}>
268
+ <Text className="text-lg font-semibold text-text-primary mb-2">
269
+ Status Cards with Custom Border Colors
270
+ </Text>
271
+
272
+ <Card variant="outline" borderColor={statusColors.success} style={{ width: 320 }}>
273
+ <CardHeader>
274
+ <CardTitle>Success</CardTitle>
275
+ <CardDescription>Operation completed successfully</CardDescription>
276
+ </CardHeader>
277
+ <CardContent>
278
+ <Text className="text-text-secondary">
279
+ Your changes have been saved.
280
+ </Text>
281
+ </CardContent>
282
+ </Card>
283
+
284
+ <Card variant="outline" borderColor={statusColors.error} style={{ width: 320 }}>
285
+ <CardHeader>
286
+ <CardTitle>Error</CardTitle>
287
+ <CardDescription>Something went wrong</CardDescription>
288
+ </CardHeader>
289
+ <CardContent>
290
+ <Text className="text-text-secondary">
291
+ Please try again or contact support.
292
+ </Text>
293
+ </CardContent>
294
+ </Card>
295
+
296
+ <Card variant="outline" borderColor={statusColors.warning} style={{ width: 320 }}>
297
+ <CardHeader>
298
+ <CardTitle>Warning</CardTitle>
299
+ <CardDescription>Proceed with caution</CardDescription>
300
+ </CardHeader>
301
+ <CardContent>
302
+ <Text className="text-text-secondary">
303
+ This action cannot be undone.
304
+ </Text>
305
+ </CardContent>
306
+ </Card>
307
+
308
+ <Card variant="outline" borderColor={statusColors.info} style={{ width: 320 }}>
309
+ <CardHeader>
310
+ <CardTitle>Information</CardTitle>
311
+ <CardDescription>Good to know</CardDescription>
312
+ </CardHeader>
313
+ <CardContent>
314
+ <Text className="text-text-secondary">
315
+ New features are available in this release.
316
+ </Text>
317
+ </CardContent>
318
+ </Card>
319
+ </View>
320
+ ),
321
+ }
322
+
323
+ export const StatusFilledCards: Story = {
324
+ render: () => (
325
+ <View style={{ gap: 16 }}>
326
+ <Text className="text-lg font-semibold text-text-primary mb-2">
327
+ Status Cards with Custom Background Colors
328
+ </Text>
329
+
330
+ <Card
331
+ variant="outline"
332
+ borderColor={statusColors.success}
333
+ bgColor={statusColors.successSubtle}
334
+ style={{ width: 320 }}
335
+ >
336
+ <CardHeader>
337
+ <CardTitle>Success</CardTitle>
338
+ <CardDescription>Operation completed successfully</CardDescription>
339
+ </CardHeader>
340
+ <CardContent>
341
+ <Text className="text-text-secondary">
342
+ Your changes have been saved.
343
+ </Text>
344
+ </CardContent>
345
+ </Card>
346
+
347
+ <Card
348
+ variant="outline"
349
+ borderColor={statusColors.error}
350
+ bgColor={statusColors.errorSubtle}
351
+ style={{ width: 320 }}
352
+ >
353
+ <CardHeader>
354
+ <CardTitle>Error</CardTitle>
355
+ <CardDescription>Something went wrong</CardDescription>
356
+ </CardHeader>
357
+ <CardContent>
358
+ <Text className="text-text-secondary">
359
+ Please try again or contact support.
360
+ </Text>
361
+ </CardContent>
362
+ </Card>
363
+
364
+ <Card
365
+ variant="outline"
366
+ borderColor={statusColors.warning}
367
+ bgColor={statusColors.warningSubtle}
368
+ style={{ width: 320 }}
369
+ >
370
+ <CardHeader>
371
+ <CardTitle>Warning</CardTitle>
372
+ <CardDescription>Proceed with caution</CardDescription>
373
+ </CardHeader>
374
+ <CardContent>
375
+ <Text className="text-text-secondary">
376
+ This action cannot be undone.
377
+ </Text>
378
+ </CardContent>
379
+ </Card>
380
+
381
+ <Card
382
+ variant="outline"
383
+ borderColor={statusColors.info}
384
+ bgColor={statusColors.infoSubtle}
385
+ style={{ width: 320 }}
386
+ >
387
+ <CardHeader>
388
+ <CardTitle>Information</CardTitle>
389
+ <CardDescription>Good to know</CardDescription>
390
+ </CardHeader>
391
+ <CardContent>
392
+ <Text className="text-text-secondary">
393
+ New features are available in this release.
394
+ </Text>
395
+ </CardContent>
396
+ </Card>
397
+ </View>
398
+ ),
399
+ }
400
+
401
+ export const BrandColoredCards: Story = {
402
+ render: () => (
403
+ <View style={{ gap: 16 }}>
404
+ <Text className="text-lg font-semibold text-text-primary mb-2">
405
+ Brand Colored Cards
406
+ </Text>
407
+
408
+ <Card
409
+ variant="outline"
410
+ borderColor="var(--color-brand-primary)"
411
+ bgColor="var(--color-brand-primary-subtle)"
412
+ style={{ width: 320 }}
413
+ >
414
+ <CardHeader>
415
+ <CardTitle>Primary Brand</CardTitle>
416
+ <CardDescription>Orange brand color</CardDescription>
417
+ </CardHeader>
418
+ <CardContent>
419
+ <Text className="text-text-secondary">
420
+ Card with primary brand color styling.
421
+ </Text>
422
+ </CardContent>
423
+ </Card>
424
+
425
+ <Card
426
+ variant="outline"
427
+ borderColor="var(--color-brand-secondary)"
428
+ bgColor="var(--color-brand-secondary-subtle)"
429
+ style={{ width: 320 }}
430
+ >
431
+ <CardHeader>
432
+ <CardTitle>Secondary Brand</CardTitle>
433
+ <CardDescription>Steel brand color</CardDescription>
434
+ </CardHeader>
435
+ <CardContent>
436
+ <Text className="text-text-secondary">
437
+ Card with secondary brand color styling.
438
+ </Text>
439
+ </CardContent>
440
+ </Card>
441
+ </View>
442
+ ),
443
+ }