@ivds/core 0.1.1
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/CHANGELOG.md +45 -0
- package/README.md +215 -0
- package/lib/all.css +6802 -0
- package/lib/all.min.css +1 -0
- package/lib/base/base.css +215 -0
- package/lib/base/base.min.css +1 -0
- package/lib/components/_breadcrumb-mixins.scss +173 -0
- package/lib/components/_button-mixin.scss +120 -0
- package/lib/components/_card-mixin.scss +196 -0
- package/lib/components/_checkbox-mixin.scss +208 -0
- package/lib/components/_footer-mixin.scss +385 -0
- package/lib/components/_header-mixin.scss +275 -0
- package/lib/components/_navigation-mixins.scss +270 -0
- package/lib/components/_notification-mixin.scss +239 -0
- package/lib/components/_pagination-mixins.scss +280 -0
- package/lib/components/_radio-button-mixin.scss +207 -0
- package/lib/components/_tag-mixin.scss +261 -0
- package/lib/components/_text-input-mixin.scss +203 -0
- package/lib/components/all.css +3005 -0
- package/lib/components/all.min.css +1 -0
- package/lib/components/breadcrumb/breadcrumb.css +141 -0
- package/lib/components/breadcrumb/breadcrumb.min.css +1 -0
- package/lib/components/button/button.css +221 -0
- package/lib/components/button/button.min.css +1 -0
- package/lib/components/card/card.css +236 -0
- package/lib/components/card/card.min.css +1 -0
- package/lib/components/checkbox/checkbox.css +305 -0
- package/lib/components/checkbox/checkbox.min.css +1 -0
- package/lib/components/footer/footer.css +466 -0
- package/lib/components/footer/footer.min.css +1 -0
- package/lib/components/header/header.css +274 -0
- package/lib/components/header/header.min.css +1 -0
- package/lib/components/navigation/navigation.css +214 -0
- package/lib/components/navigation/navigation.min.css +1 -0
- package/lib/components/notification/notification.css +253 -0
- package/lib/components/notification/notification.min.css +1 -0
- package/lib/components/pagination/pagination.css +221 -0
- package/lib/components/pagination/pagination.min.css +1 -0
- package/lib/components/radio-button/radio-button.css +326 -0
- package/lib/components/radio-button/radio-button.min.css +1 -0
- package/lib/components/tag/tag.css +367 -0
- package/lib/components/tag/tag.min.css +1 -0
- package/lib/components/text-input/text-input.css +243 -0
- package/lib/components/text-input/text-input.min.css +1 -0
- package/lib/icons/icon-arrow-left.css +139 -0
- package/lib/icons/icon-arrow-left.min.css +1 -0
- package/lib/icons/icon-arrow-right.css +139 -0
- package/lib/icons/icon-arrow-right.min.css +1 -0
- package/lib/icons/icon-check.css +139 -0
- package/lib/icons/icon-check.min.css +1 -0
- package/lib/icons/icon-close.css +140 -0
- package/lib/icons/icon-close.min.css +1 -0
- package/lib/icons/icon-error.css +140 -0
- package/lib/icons/icon-error.min.css +1 -0
- package/lib/icons/icon-info.css +140 -0
- package/lib/icons/icon-info.min.css +1 -0
- package/lib/icons/icon-success.css +139 -0
- package/lib/icons/icon-success.min.css +1 -0
- package/lib/icons/icon-warning.css +139 -0
- package/lib/icons/icon-warning.min.css +1 -0
- package/lib/icons/icons.css +1158 -0
- package/lib/icons/icons.min.css +1 -0
- package/lib/utils/_flex.scss +200 -0
- package/lib/utils/_grid.scss +211 -0
- package/lib/utils/_layout.scss +253 -0
- package/lib/utils/_spacing.scss +260 -0
- package/lib/utils/_typography.scss +111 -0
- package/lib/utils/utils.css +2434 -0
- package/lib/utils/utils.min.css +1 -0
- package/lib/utils-only.css +2801 -0
- package/lib/utils-only.min.css +1 -0
- package/lib/variables/variables.css +2 -0
- package/lib/variables/variables.min.css +0 -0
- package/package.json +194 -0
- package/src/__tests__/example.test.scss +12 -0
- package/src/accessibility.stories.js +416 -0
- package/src/all.scss +9 -0
- package/src/base/_layout.scss +97 -0
- package/src/base/_reset.scss +85 -0
- package/src/base/_typography.scss +105 -0
- package/src/base/base.scss +6 -0
- package/src/components/all.scss +22 -0
- package/src/components/breadcrumb/_breadcrumb-mixins.scss +173 -0
- package/src/components/breadcrumb/breadcrumb.scss +68 -0
- package/src/components/breadcrumb/breadcrumb.stories.js +483 -0
- package/src/components/button/__tests__/button-mixins.test.scss +35 -0
- package/src/components/button/_button-mixin.scss +120 -0
- package/src/components/button/button.scss +126 -0
- package/src/components/button/button.stories.js +364 -0
- package/src/components/card/__tests__/card-mixins.test.scss +36 -0
- package/src/components/card/_card-mixin.scss +196 -0
- package/src/components/card/card.scss +193 -0
- package/src/components/card/card.stories.js +635 -0
- package/src/components/checkbox/_checkbox-mixin.scss +208 -0
- package/src/components/checkbox/checkbox.scss +141 -0
- package/src/components/checkbox/checkbox.stories.js +303 -0
- package/src/components/footer/_footer-mixin.scss +385 -0
- package/src/components/footer/footer.scss +86 -0
- package/src/components/footer/footer.stories.js +740 -0
- package/src/components/header/_header-mixin.scss +275 -0
- package/src/components/header/header.scss +84 -0
- package/src/components/header/header.stories.js +450 -0
- package/src/components/navigation/_navigation-mixins.scss +270 -0
- package/src/components/navigation/navigation.scss +64 -0
- package/src/components/navigation/navigation.stories.js +410 -0
- package/src/components/notification/_notification-mixin.scss +239 -0
- package/src/components/notification/notification.scss +118 -0
- package/src/components/notification/notification.stories.js +378 -0
- package/src/components/overview.stories.js +473 -0
- package/src/components/pagination/_pagination-mixins.scss +280 -0
- package/src/components/pagination/pagination.scss +76 -0
- package/src/components/pagination/pagination.stories.js +729 -0
- package/src/components/radio-button/_radio-button-mixin.scss +207 -0
- package/src/components/radio-button/radio-button.scss +178 -0
- package/src/components/radio-button/radio-button.stories.js +379 -0
- package/src/components/tag/_tag-mixin.scss +261 -0
- package/src/components/tag/tag.scss +244 -0
- package/src/components/tag/tag.stories.js +482 -0
- package/src/components/text-input/_text-input-mixin.scss +203 -0
- package/src/components/text-input/text-input.scss +150 -0
- package/src/components/text-input/text-input.stories.js +723 -0
- package/src/icons/_icon.scss +121 -0
- package/src/icons/icon-arrow-left.scss +23 -0
- package/src/icons/icon-arrow-right.scss +23 -0
- package/src/icons/icon-check.scss +23 -0
- package/src/icons/icon-close.scss +24 -0
- package/src/icons/icon-error.scss +24 -0
- package/src/icons/icon-info.scss +24 -0
- package/src/icons/icon-success.scss +23 -0
- package/src/icons/icon-warning.scss +23 -0
- package/src/icons/icons.scss +12 -0
- package/src/icons/icons.stories.js +249 -0
- package/src/icons/svg/arrow-left.svg +3 -0
- package/src/icons/svg/arrow-right.svg +3 -0
- package/src/icons/svg/check.svg +3 -0
- package/src/icons/svg/close.svg +4 -0
- package/src/icons/svg/error.svg +5 -0
- package/src/icons/svg/info.svg +5 -0
- package/src/icons/svg/success.svg +4 -0
- package/src/icons/svg/warning.svg +5 -0
- package/src/utils/__tests__/utilities.test.scss +37 -0
- package/src/utils/_flex.scss +200 -0
- package/src/utils/_grid.scss +211 -0
- package/src/utils/_layout.scss +253 -0
- package/src/utils/_spacing.scss +260 -0
- package/src/utils/_typography.scss +111 -0
- package/src/utils/utils.scss +8 -0
- package/src/variables/_borders.scss +15 -0
- package/src/variables/_breakpoints.scss +11 -0
- package/src/variables/_colors.scss +97 -0
- package/src/variables/_shadows.scss +14 -0
- package/src/variables/_spacing.scss +24 -0
- package/src/variables/_typography.scss +47 -0
- package/src/variables/variables.scss +9 -0
|
@@ -0,0 +1,635 @@
|
|
|
1
|
+
// Card component stories for Storybook
|
|
2
|
+
// Showcases all card variants, sections, layouts, and features
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
title: 'Core/Card',
|
|
6
|
+
parameters: {
|
|
7
|
+
docs: {
|
|
8
|
+
description: {
|
|
9
|
+
component: 'CSS-only card component using IVDS design tokens. Provides flexible layouts with header, body, footer, media sections, and multiple variants for different use cases.'
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
a11y: {
|
|
13
|
+
config: {
|
|
14
|
+
rules: [
|
|
15
|
+
{
|
|
16
|
+
id: 'color-contrast',
|
|
17
|
+
enabled: true
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
// Basic card
|
|
26
|
+
export const Default = () => `
|
|
27
|
+
<div class="ivds-card" style="max-width: 400px;">
|
|
28
|
+
<div class="ivds-card__header">
|
|
29
|
+
<h3 class="ivds-card__title">Card Title</h3>
|
|
30
|
+
<p class="ivds-card__subtitle">Card subtitle with additional information</p>
|
|
31
|
+
</div>
|
|
32
|
+
<div class="ivds-card__body">
|
|
33
|
+
<p class="ivds-card__content">
|
|
34
|
+
This is the main content area of the card. It can contain any type of content including text, images, or other components.
|
|
35
|
+
</p>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
`;
|
|
39
|
+
|
|
40
|
+
// Card with all sections
|
|
41
|
+
export const WithAllSections = () => `
|
|
42
|
+
<div class="ivds-card" style="max-width: 400px;">
|
|
43
|
+
<div class="ivds-card__header">
|
|
44
|
+
<h3 class="ivds-card__title">Complete Card</h3>
|
|
45
|
+
<p class="ivds-card__subtitle">With header, body, and footer</p>
|
|
46
|
+
</div>
|
|
47
|
+
<div class="ivds-card__body">
|
|
48
|
+
<p class="ivds-card__content">
|
|
49
|
+
This card demonstrates all available sections including header, body, and footer areas.
|
|
50
|
+
</p>
|
|
51
|
+
<div class="ivds-card__actions">
|
|
52
|
+
<button class="ivds-button ivds-button--primary">Primary Action</button>
|
|
53
|
+
<button class="ivds-button ivds-button--secondary">Secondary</button>
|
|
54
|
+
</div>
|
|
55
|
+
</div>
|
|
56
|
+
<div class="ivds-card__footer">
|
|
57
|
+
<small>Footer information or metadata</small>
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
`;
|
|
61
|
+
|
|
62
|
+
// Card with media
|
|
63
|
+
export const WithMedia = () => `
|
|
64
|
+
<div class="ivds-card" style="max-width: 400px;">
|
|
65
|
+
<div class="ivds-card__media" style="height: 200px; background: linear-gradient(45deg, #0ea5e9, #3b82f6); display: flex; align-items: center; justify-content: center; color: white; font-weight: 500;">
|
|
66
|
+
Media Area (Image/Video)
|
|
67
|
+
</div>
|
|
68
|
+
<div class="ivds-card__header">
|
|
69
|
+
<h3 class="ivds-card__title">Media Card</h3>
|
|
70
|
+
<p class="ivds-card__subtitle">Card with media section</p>
|
|
71
|
+
</div>
|
|
72
|
+
<div class="ivds-card__body">
|
|
73
|
+
<p class="ivds-card__content">
|
|
74
|
+
This card includes a media section at the top, perfect for images or videos.
|
|
75
|
+
</p>
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
`;
|
|
79
|
+
|
|
80
|
+
// Card variants
|
|
81
|
+
export const Variants = () => `
|
|
82
|
+
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 1.5rem;">
|
|
83
|
+
<div class="ivds-card">
|
|
84
|
+
<div class="ivds-card__header">
|
|
85
|
+
<h3 class="ivds-card__title">Default Card</h3>
|
|
86
|
+
</div>
|
|
87
|
+
<div class="ivds-card__body">
|
|
88
|
+
<p class="ivds-card__content">Default card with subtle shadow and border.</p>
|
|
89
|
+
</div>
|
|
90
|
+
</div>
|
|
91
|
+
|
|
92
|
+
<div class="ivds-card ivds-card--flat">
|
|
93
|
+
<div class="ivds-card__header">
|
|
94
|
+
<h3 class="ivds-card__title">Flat Card</h3>
|
|
95
|
+
</div>
|
|
96
|
+
<div class="ivds-card__body">
|
|
97
|
+
<p class="ivds-card__content">Flat card with no shadow or border.</p>
|
|
98
|
+
</div>
|
|
99
|
+
</div>
|
|
100
|
+
|
|
101
|
+
<div class="ivds-card ivds-card--bordered">
|
|
102
|
+
<div class="ivds-card__header">
|
|
103
|
+
<h3 class="ivds-card__title">Bordered Card</h3>
|
|
104
|
+
</div>
|
|
105
|
+
<div class="ivds-card__body">
|
|
106
|
+
<p class="ivds-card__content">Card with prominent border and no shadow.</p>
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
109
|
+
|
|
110
|
+
<div class="ivds-card ivds-card--elevated">
|
|
111
|
+
<div class="ivds-card__header">
|
|
112
|
+
<h3 class="ivds-card__title">Elevated Card</h3>
|
|
113
|
+
</div>
|
|
114
|
+
<div class="ivds-card__body">
|
|
115
|
+
<p class="ivds-card__content">Card with medium shadow for elevation.</p>
|
|
116
|
+
</div>
|
|
117
|
+
</div>
|
|
118
|
+
|
|
119
|
+
<div class="ivds-card ivds-card--floating">
|
|
120
|
+
<div class="ivds-card__header">
|
|
121
|
+
<h3 class="ivds-card__title">Floating Card</h3>
|
|
122
|
+
</div>
|
|
123
|
+
<div class="ivds-card__body">
|
|
124
|
+
<p class="ivds-card__content">Card with large shadow for floating effect.</p>
|
|
125
|
+
</div>
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
128
|
+
`;
|
|
129
|
+
|
|
130
|
+
// Interactive card
|
|
131
|
+
export const Interactive = () => `
|
|
132
|
+
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 1.5rem;">
|
|
133
|
+
<div class="ivds-card ivds-card--interactive" tabindex="0" role="button" aria-label="Interactive card example">
|
|
134
|
+
<div class="ivds-card__header">
|
|
135
|
+
<h3 class="ivds-card__title">Interactive Card</h3>
|
|
136
|
+
<p class="ivds-card__subtitle">Hover and click me!</p>
|
|
137
|
+
</div>
|
|
138
|
+
<div class="ivds-card__body">
|
|
139
|
+
<p class="ivds-card__content">
|
|
140
|
+
This card responds to hover and focus states with smooth animations.
|
|
141
|
+
</p>
|
|
142
|
+
</div>
|
|
143
|
+
</div>
|
|
144
|
+
|
|
145
|
+
<a href="#" class="ivds-card ivds-card--interactive" style="text-decoration: none; color: inherit;">
|
|
146
|
+
<div class="ivds-card__header">
|
|
147
|
+
<h3 class="ivds-card__title">Clickable Card</h3>
|
|
148
|
+
<p class="ivds-card__subtitle">I'm a link!</p>
|
|
149
|
+
</div>
|
|
150
|
+
<div class="ivds-card__body">
|
|
151
|
+
<p class="ivds-card__content">
|
|
152
|
+
This entire card is clickable and accessible as a link.
|
|
153
|
+
</p>
|
|
154
|
+
</div>
|
|
155
|
+
</a>
|
|
156
|
+
</div>
|
|
157
|
+
`;
|
|
158
|
+
|
|
159
|
+
// Card sizes
|
|
160
|
+
export const Sizes = () => `
|
|
161
|
+
<div style="display: flex; flex-direction: column; gap: 1.5rem;">
|
|
162
|
+
<div class="ivds-card ivds-card--compact" style="max-width: 400px;">
|
|
163
|
+
<div class="ivds-card__header">
|
|
164
|
+
<h3 class="ivds-card__title">Compact Card</h3>
|
|
165
|
+
<p class="ivds-card__subtitle">Reduced padding for tight spaces</p>
|
|
166
|
+
</div>
|
|
167
|
+
<div class="ivds-card__body">
|
|
168
|
+
<p class="ivds-card__content">This card uses compact spacing.</p>
|
|
169
|
+
</div>
|
|
170
|
+
<div class="ivds-card__footer">
|
|
171
|
+
<small>Compact footer</small>
|
|
172
|
+
</div>
|
|
173
|
+
</div>
|
|
174
|
+
|
|
175
|
+
<div class="ivds-card" style="max-width: 400px;">
|
|
176
|
+
<div class="ivds-card__header">
|
|
177
|
+
<h3 class="ivds-card__title">Default Card</h3>
|
|
178
|
+
<p class="ivds-card__subtitle">Standard padding for most use cases</p>
|
|
179
|
+
</div>
|
|
180
|
+
<div class="ivds-card__body">
|
|
181
|
+
<p class="ivds-card__content">This card uses default spacing.</p>
|
|
182
|
+
</div>
|
|
183
|
+
<div class="ivds-card__footer">
|
|
184
|
+
<small>Default footer</small>
|
|
185
|
+
</div>
|
|
186
|
+
</div>
|
|
187
|
+
|
|
188
|
+
<div class="ivds-card ivds-card--spacious" style="max-width: 400px;">
|
|
189
|
+
<div class="ivds-card__header">
|
|
190
|
+
<h3 class="ivds-card__title">Spacious Card</h3>
|
|
191
|
+
<p class="ivds-card__subtitle">Generous padding for important content</p>
|
|
192
|
+
</div>
|
|
193
|
+
<div class="ivds-card__body">
|
|
194
|
+
<p class="ivds-card__content">This card uses spacious padding.</p>
|
|
195
|
+
</div>
|
|
196
|
+
<div class="ivds-card__footer">
|
|
197
|
+
<small>Spacious footer</small>
|
|
198
|
+
</div>
|
|
199
|
+
</div>
|
|
200
|
+
</div>
|
|
201
|
+
`;
|
|
202
|
+
|
|
203
|
+
// Horizontal card layout
|
|
204
|
+
export const HorizontalLayout = () => `
|
|
205
|
+
<div class="ivds-card ivds-card--horizontal" style="max-width: 600px;">
|
|
206
|
+
<div class="ivds-card__media" style="background: linear-gradient(45deg, #10b981, #059669); display: flex; align-items: center; justify-content: center; color: white; font-weight: 500;">
|
|
207
|
+
Media
|
|
208
|
+
</div>
|
|
209
|
+
<div class="ivds-card__content-wrapper">
|
|
210
|
+
<div class="ivds-card__header">
|
|
211
|
+
<h3 class="ivds-card__title">Horizontal Card</h3>
|
|
212
|
+
<p class="ivds-card__subtitle">Side-by-side layout</p>
|
|
213
|
+
</div>
|
|
214
|
+
<div class="ivds-card__body">
|
|
215
|
+
<p class="ivds-card__content">
|
|
216
|
+
This card uses a horizontal layout with media on the left and content on the right.
|
|
217
|
+
</p>
|
|
218
|
+
<div class="ivds-card__actions">
|
|
219
|
+
<button class="ivds-button ivds-button--primary">Action</button>
|
|
220
|
+
</div>
|
|
221
|
+
</div>
|
|
222
|
+
</div>
|
|
223
|
+
</div>
|
|
224
|
+
`;
|
|
225
|
+
|
|
226
|
+
// Overlay card
|
|
227
|
+
export const OverlayCard = () => `
|
|
228
|
+
<div class="ivds-card ivds-card--overlay" style="max-width: 400px; height: 300px;">
|
|
229
|
+
<div class="ivds-card__media" style="height: 100%; background: linear-gradient(45deg, #f59e0b, #d97706); position: relative;">
|
|
230
|
+
<div class="ivds-card__overlay">
|
|
231
|
+
<h3 class="ivds-card__title">Overlay Card</h3>
|
|
232
|
+
<p class="ivds-card__subtitle">Content over media</p>
|
|
233
|
+
<p class="ivds-card__content">
|
|
234
|
+
This card overlays content on top of media with a gradient background.
|
|
235
|
+
</p>
|
|
236
|
+
<div class="ivds-card__actions">
|
|
237
|
+
<button class="ivds-button ivds-button--primary">Learn More</button>
|
|
238
|
+
</div>
|
|
239
|
+
</div>
|
|
240
|
+
</div>
|
|
241
|
+
</div>
|
|
242
|
+
`;
|
|
243
|
+
|
|
244
|
+
// Semantic variants
|
|
245
|
+
export const SemanticVariants = () => `
|
|
246
|
+
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 1.5rem;">
|
|
247
|
+
<div class="ivds-card ivds-card--success">
|
|
248
|
+
<div class="ivds-card__header">
|
|
249
|
+
<h3 class="ivds-card__title">Success Card</h3>
|
|
250
|
+
</div>
|
|
251
|
+
<div class="ivds-card__body">
|
|
252
|
+
<p class="ivds-card__content">
|
|
253
|
+
Used for positive messages, confirmations, or successful operations.
|
|
254
|
+
</p>
|
|
255
|
+
</div>
|
|
256
|
+
</div>
|
|
257
|
+
|
|
258
|
+
<div class="ivds-card ivds-card--warning">
|
|
259
|
+
<div class="ivds-card__header">
|
|
260
|
+
<h3 class="ivds-card__title">Warning Card</h3>
|
|
261
|
+
</div>
|
|
262
|
+
<div class="ivds-card__body">
|
|
263
|
+
<p class="ivds-card__content">
|
|
264
|
+
Used for cautionary messages or important notices that need attention.
|
|
265
|
+
</p>
|
|
266
|
+
</div>
|
|
267
|
+
</div>
|
|
268
|
+
|
|
269
|
+
<div class="ivds-card ivds-card--error">
|
|
270
|
+
<div class="ivds-card__header">
|
|
271
|
+
<h3 class="ivds-card__title">Error Card</h3>
|
|
272
|
+
</div>
|
|
273
|
+
<div class="ivds-card__body">
|
|
274
|
+
<p class="ivds-card__content">
|
|
275
|
+
Used for error messages, failed operations, or critical issues.
|
|
276
|
+
</p>
|
|
277
|
+
</div>
|
|
278
|
+
</div>
|
|
279
|
+
|
|
280
|
+
<div class="ivds-card ivds-card--info">
|
|
281
|
+
<div class="ivds-card__header">
|
|
282
|
+
<h3 class="ivds-card__title">Info Card</h3>
|
|
283
|
+
</div>
|
|
284
|
+
<div class="ivds-card__body">
|
|
285
|
+
<p class="ivds-card__content">
|
|
286
|
+
Used for informational messages, tips, or neutral notifications.
|
|
287
|
+
</p>
|
|
288
|
+
</div>
|
|
289
|
+
</div>
|
|
290
|
+
</div>
|
|
291
|
+
`;
|
|
292
|
+
|
|
293
|
+
// Card with complex content
|
|
294
|
+
export const ComplexContent = () => `
|
|
295
|
+
<div class="ivds-card ivds-card--elevated" style="max-width: 500px;">
|
|
296
|
+
<div class="ivds-card__media" style="height: 200px; background: linear-gradient(45deg, #3b82f6, #1d4ed8); display: flex; align-items: center; justify-content: center; color: white; font-weight: 500;">
|
|
297
|
+
Product Image
|
|
298
|
+
</div>
|
|
299
|
+
<div class="ivds-card__header">
|
|
300
|
+
<h3 class="ivds-card__title">Premium Product</h3>
|
|
301
|
+
<p class="ivds-card__subtitle">High-quality solution for professionals</p>
|
|
302
|
+
</div>
|
|
303
|
+
<div class="ivds-card__body">
|
|
304
|
+
<p class="ivds-card__content">
|
|
305
|
+
This premium product offers advanced features and exceptional performance for professional users who demand the best.
|
|
306
|
+
</p>
|
|
307
|
+
|
|
308
|
+
<div style="margin: 1rem 0;">
|
|
309
|
+
<div style="display: flex; justify-content: space-between; margin-bottom: 0.5rem;">
|
|
310
|
+
<span>Features:</span>
|
|
311
|
+
<span style="font-weight: 500;">★★★★★</span>
|
|
312
|
+
</div>
|
|
313
|
+
<div style="display: flex; justify-content: space-between; margin-bottom: 0.5rem;">
|
|
314
|
+
<span>Performance:</span>
|
|
315
|
+
<span style="font-weight: 500;">★★★★☆</span>
|
|
316
|
+
</div>
|
|
317
|
+
<div style="display: flex; justify-content: space-between;">
|
|
318
|
+
<span>Value:</span>
|
|
319
|
+
<span style="font-weight: 500;">★★★★★</span>
|
|
320
|
+
</div>
|
|
321
|
+
</div>
|
|
322
|
+
|
|
323
|
+
<div class="ivds-card__actions">
|
|
324
|
+
<button class="ivds-button ivds-button--primary">Buy Now - $299</button>
|
|
325
|
+
<button class="ivds-button ivds-button--secondary">Learn More</button>
|
|
326
|
+
</div>
|
|
327
|
+
</div>
|
|
328
|
+
<div class="ivds-card__footer">
|
|
329
|
+
<small>Free shipping • 30-day return policy • 2-year warranty</small>
|
|
330
|
+
</div>
|
|
331
|
+
</div>
|
|
332
|
+
`;
|
|
333
|
+
|
|
334
|
+
// Accessibility example
|
|
335
|
+
export const AccessibilityFeatures = () => `
|
|
336
|
+
<div style="display: flex; flex-direction: column; gap: 1.5rem; max-width: 500px;">
|
|
337
|
+
<article class="ivds-card" role="article" aria-labelledby="article-title">
|
|
338
|
+
<header class="ivds-card__header">
|
|
339
|
+
<h3 id="article-title" class="ivds-card__title">Accessible Article Card</h3>
|
|
340
|
+
<p class="ivds-card__subtitle">Published on March 15, 2024</p>
|
|
341
|
+
</header>
|
|
342
|
+
<div class="ivds-card__body">
|
|
343
|
+
<p class="ivds-card__content">
|
|
344
|
+
This card uses proper semantic HTML with article, header, and other elements for better accessibility.
|
|
345
|
+
</p>
|
|
346
|
+
<div class="ivds-card__actions">
|
|
347
|
+
<a href="#" class="ivds-button ivds-button--primary" aria-describedby="article-title">
|
|
348
|
+
Read Full Article
|
|
349
|
+
</a>
|
|
350
|
+
</div>
|
|
351
|
+
</div>
|
|
352
|
+
</article>
|
|
353
|
+
|
|
354
|
+
<div class="ivds-card ivds-card--interactive" tabindex="0" role="button" aria-label="Interactive notification card" aria-describedby="notification-content">
|
|
355
|
+
<div class="ivds-card__header">
|
|
356
|
+
<h3 class="ivds-card__title">Interactive Notification</h3>
|
|
357
|
+
</div>
|
|
358
|
+
<div class="ivds-card__body">
|
|
359
|
+
<p id="notification-content" class="ivds-card__content">
|
|
360
|
+
This card is keyboard accessible and includes proper ARIA labels for screen readers.
|
|
361
|
+
</p>
|
|
362
|
+
</div>
|
|
363
|
+
</div>
|
|
364
|
+
</div>
|
|
365
|
+
`;
|
|
366
|
+
|
|
367
|
+
// HTML code examples
|
|
368
|
+
export const HTMLCodeExamples = () => `
|
|
369
|
+
<div style="display: flex; flex-direction: column; gap: 2rem; max-width: 800px;">
|
|
370
|
+
<div>
|
|
371
|
+
<h3 style="margin-bottom: 1rem;">Basic Card HTML</h3>
|
|
372
|
+
<div style="margin-bottom: 1rem;">
|
|
373
|
+
<div class="ivds-card" style="max-width: 400px;">
|
|
374
|
+
<div class="ivds-card__header">
|
|
375
|
+
<h3 class="ivds-card__title">Card Title</h3>
|
|
376
|
+
<p class="ivds-card__subtitle">Card subtitle</p>
|
|
377
|
+
</div>
|
|
378
|
+
<div class="ivds-card__body">
|
|
379
|
+
<p class="ivds-card__content">This is the card content area.</p>
|
|
380
|
+
</div>
|
|
381
|
+
</div>
|
|
382
|
+
</div>
|
|
383
|
+
<pre style="background: #f8fafc; padding: 1rem; border-radius: 0.5rem; overflow-x: auto; font-size: 0.875rem;"><code><div class="ivds-card">
|
|
384
|
+
<div class="ivds-card__header">
|
|
385
|
+
<h3 class="ivds-card__title">Card Title</h3>
|
|
386
|
+
<p class="ivds-card__subtitle">Card subtitle</p>
|
|
387
|
+
</div>
|
|
388
|
+
<div class="ivds-card__body">
|
|
389
|
+
<p class="ivds-card__content">This is the card content area.</p>
|
|
390
|
+
</div>
|
|
391
|
+
</div></code></pre>
|
|
392
|
+
</div>
|
|
393
|
+
|
|
394
|
+
<div>
|
|
395
|
+
<h3 style="margin-bottom: 1rem;">Card with Actions HTML</h3>
|
|
396
|
+
<div style="margin-bottom: 1rem;">
|
|
397
|
+
<div class="ivds-card" style="max-width: 400px;">
|
|
398
|
+
<div class="ivds-card__header">
|
|
399
|
+
<h3 class="ivds-card__title">Product Card</h3>
|
|
400
|
+
</div>
|
|
401
|
+
<div class="ivds-card__body">
|
|
402
|
+
<p class="ivds-card__content">Product description goes here.</p>
|
|
403
|
+
<div class="ivds-card__actions">
|
|
404
|
+
<button class="ivds-button ivds-button--primary">Buy Now</button>
|
|
405
|
+
<button class="ivds-button ivds-button--secondary">Learn More</button>
|
|
406
|
+
</div>
|
|
407
|
+
</div>
|
|
408
|
+
</div>
|
|
409
|
+
</div>
|
|
410
|
+
<pre style="background: #f8fafc; padding: 1rem; border-radius: 0.5rem; overflow-x: auto; font-size: 0.875rem;"><code><div class="ivds-card">
|
|
411
|
+
<div class="ivds-card__header">
|
|
412
|
+
<h3 class="ivds-card__title">Product Card</h3>
|
|
413
|
+
</div>
|
|
414
|
+
<div class="ivds-card__body">
|
|
415
|
+
<p class="ivds-card__content">Product description goes here.</p>
|
|
416
|
+
<div class="ivds-card__actions">
|
|
417
|
+
<button class="ivds-button ivds-button--primary">Buy Now</button>
|
|
418
|
+
<button class="ivds-button ivds-button--secondary">Learn More</button>
|
|
419
|
+
</div>
|
|
420
|
+
</div>
|
|
421
|
+
</div></code></pre>
|
|
422
|
+
</div>
|
|
423
|
+
|
|
424
|
+
<div>
|
|
425
|
+
<h3 style="margin-bottom: 1rem;">Interactive Card HTML</h3>
|
|
426
|
+
<div style="margin-bottom: 1rem;">
|
|
427
|
+
<a href="#" class="ivds-card ivds-card--interactive" style="max-width: 400px; text-decoration: none; color: inherit;">
|
|
428
|
+
<div class="ivds-card__header">
|
|
429
|
+
<h3 class="ivds-card__title">Clickable Card</h3>
|
|
430
|
+
</div>
|
|
431
|
+
<div class="ivds-card__body">
|
|
432
|
+
<p class="ivds-card__content">This entire card is clickable.</p>
|
|
433
|
+
</div>
|
|
434
|
+
</a>
|
|
435
|
+
</div>
|
|
436
|
+
<pre style="background: #f8fafc; padding: 1rem; border-radius: 0.5rem; overflow-x: auto; font-size: 0.875rem;"><code><a href="#" class="ivds-card ivds-card--interactive">
|
|
437
|
+
<div class="ivds-card__header">
|
|
438
|
+
<h3 class="ivds-card__title">Clickable Card</h3>
|
|
439
|
+
</div>
|
|
440
|
+
<div class="ivds-card__body">
|
|
441
|
+
<p class="ivds-card__content">This entire card is clickable.</p>
|
|
442
|
+
</div>
|
|
443
|
+
</a></code></pre>
|
|
444
|
+
</div>
|
|
445
|
+
</div>
|
|
446
|
+
`;
|
|
447
|
+
|
|
448
|
+
// Real-world card examples
|
|
449
|
+
export const RealWorldExamples = () => `
|
|
450
|
+
<div style="display: flex; flex-direction: column; gap: 3rem;">
|
|
451
|
+
|
|
452
|
+
<!-- Product Cards -->
|
|
453
|
+
<div>
|
|
454
|
+
<h3 style="margin-bottom: 1.5rem;">Product Cards</h3>
|
|
455
|
+
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 1.5rem;">
|
|
456
|
+
<div class="ivds-card">
|
|
457
|
+
<div class="ivds-card__media" style="height: 200px; background: linear-gradient(45deg, #0ea5e9, #3b82f6); display: flex; align-items: center; justify-content: center; color: white; font-weight: 500;">
|
|
458
|
+
Product Image
|
|
459
|
+
</div>
|
|
460
|
+
<div class="ivds-card__header">
|
|
461
|
+
<h3 class="ivds-card__title">Premium Headphones</h3>
|
|
462
|
+
<p class="ivds-card__subtitle">$299.99</p>
|
|
463
|
+
</div>
|
|
464
|
+
<div class="ivds-card__body">
|
|
465
|
+
<p class="ivds-card__content">
|
|
466
|
+
High-quality wireless headphones with noise cancellation and 30-hour battery life.
|
|
467
|
+
</p>
|
|
468
|
+
<div style="margin: 1rem 0;">
|
|
469
|
+
<div class="ivds-tag-group">
|
|
470
|
+
<span class="ivds-tag ivds-tag--success">
|
|
471
|
+
<span class="ivds-tag__text">In Stock</span>
|
|
472
|
+
</span>
|
|
473
|
+
<span class="ivds-tag ivds-tag--info">
|
|
474
|
+
<span class="ivds-tag__text">Free Shipping</span>
|
|
475
|
+
</span>
|
|
476
|
+
</div>
|
|
477
|
+
</div>
|
|
478
|
+
<div class="ivds-card__actions">
|
|
479
|
+
<button class="ivds-button ivds-button--primary" style="flex: 1;">Add to Cart</button>
|
|
480
|
+
<button class="ivds-button ivds-button--secondary">♡</button>
|
|
481
|
+
</div>
|
|
482
|
+
</div>
|
|
483
|
+
</div>
|
|
484
|
+
|
|
485
|
+
<div class="ivds-card">
|
|
486
|
+
<div class="ivds-card__media" style="height: 200px; background: linear-gradient(45deg, #10b981, #059669); display: flex; align-items: center; justify-content: center; color: white; font-weight: 500;">
|
|
487
|
+
Product Image
|
|
488
|
+
</div>
|
|
489
|
+
<div class="ivds-card__header">
|
|
490
|
+
<h3 class="ivds-card__title">Smart Watch</h3>
|
|
491
|
+
<p class="ivds-card__subtitle">$199.99</p>
|
|
492
|
+
</div>
|
|
493
|
+
<div class="ivds-card__body">
|
|
494
|
+
<p class="ivds-card__content">
|
|
495
|
+
Feature-rich smartwatch with health monitoring and GPS tracking capabilities.
|
|
496
|
+
</p>
|
|
497
|
+
<div style="margin: 1rem 0;">
|
|
498
|
+
<div class="ivds-tag-group">
|
|
499
|
+
<span class="ivds-tag ivds-tag--warning">
|
|
500
|
+
<span class="ivds-tag__text">Low Stock</span>
|
|
501
|
+
</span>
|
|
502
|
+
<span class="ivds-tag ivds-tag--primary">
|
|
503
|
+
<span class="ivds-tag__text">Best Seller</span>
|
|
504
|
+
</span>
|
|
505
|
+
</div>
|
|
506
|
+
</div>
|
|
507
|
+
<div class="ivds-card__actions">
|
|
508
|
+
<button class="ivds-button ivds-button--primary" style="flex: 1;">Add to Cart</button>
|
|
509
|
+
<button class="ivds-button ivds-button--secondary">♡</button>
|
|
510
|
+
</div>
|
|
511
|
+
</div>
|
|
512
|
+
</div>
|
|
513
|
+
</div>
|
|
514
|
+
</div>
|
|
515
|
+
|
|
516
|
+
<!-- Profile Cards -->
|
|
517
|
+
<div>
|
|
518
|
+
<h3 style="margin-bottom: 1.5rem;">Team Member Cards</h3>
|
|
519
|
+
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 1.5rem;">
|
|
520
|
+
<div class="ivds-card">
|
|
521
|
+
<div class="ivds-card__header" style="text-align: center;">
|
|
522
|
+
<div style="width: 80px; height: 80px; border-radius: 50%; background: linear-gradient(45deg, #0ea5e9, #3b82f6); margin: 0 auto 1rem; display: flex; align-items: center; justify-content: center; color: white; font-size: 1.5rem; font-weight: 600;">
|
|
523
|
+
JD
|
|
524
|
+
</div>
|
|
525
|
+
<h3 class="ivds-card__title">John Doe</h3>
|
|
526
|
+
<p class="ivds-card__subtitle">Senior Frontend Developer</p>
|
|
527
|
+
</div>
|
|
528
|
+
<div class="ivds-card__body">
|
|
529
|
+
<p class="ivds-card__content">
|
|
530
|
+
Passionate about creating beautiful and accessible user interfaces. 5+ years of experience with React and TypeScript.
|
|
531
|
+
</p>
|
|
532
|
+
<div style="margin: 1rem 0;">
|
|
533
|
+
<div class="ivds-tag-group">
|
|
534
|
+
<span class="ivds-tag ivds-tag--primary">
|
|
535
|
+
<span class="ivds-tag__text">React</span>
|
|
536
|
+
</span>
|
|
537
|
+
<span class="ivds-tag ivds-tag--success">
|
|
538
|
+
<span class="ivds-tag__text">TypeScript</span>
|
|
539
|
+
</span>
|
|
540
|
+
<span class="ivds-tag ivds-tag--info">
|
|
541
|
+
<span class="ivds-tag__text">Design Systems</span>
|
|
542
|
+
</span>
|
|
543
|
+
</div>
|
|
544
|
+
</div>
|
|
545
|
+
<div class="ivds-card__actions">
|
|
546
|
+
<button class="ivds-button ivds-button--secondary" style="flex: 1;">View Profile</button>
|
|
547
|
+
<button class="ivds-button ivds-button--tertiary">Message</button>
|
|
548
|
+
</div>
|
|
549
|
+
</div>
|
|
550
|
+
</div>
|
|
551
|
+
|
|
552
|
+
<div class="ivds-card">
|
|
553
|
+
<div class="ivds-card__header" style="text-align: center;">
|
|
554
|
+
<div style="width: 80px; height: 80px; border-radius: 50%; background: linear-gradient(45deg, #10b981, #059669); margin: 0 auto 1rem; display: flex; align-items: center; justify-content: center; color: white; font-size: 1.5rem; font-weight: 600;">
|
|
555
|
+
JS
|
|
556
|
+
</div>
|
|
557
|
+
<h3 class="ivds-card__title">Jane Smith</h3>
|
|
558
|
+
<p class="ivds-card__subtitle">UX/UI Designer</p>
|
|
559
|
+
</div>
|
|
560
|
+
<div class="ivds-card__body">
|
|
561
|
+
<p class="ivds-card__content">
|
|
562
|
+
Creative designer focused on user-centered design and design systems. Expert in Figma and user research methodologies.
|
|
563
|
+
</p>
|
|
564
|
+
<div style="margin: 1rem 0;">
|
|
565
|
+
<div class="ivds-tag-group">
|
|
566
|
+
<span class="ivds-tag ivds-tag--warning">
|
|
567
|
+
<span class="ivds-tag__text">Figma</span>
|
|
568
|
+
</span>
|
|
569
|
+
<span class="ivds-tag ivds-tag--error">
|
|
570
|
+
<span class="ivds-tag__text">User Research</span>
|
|
571
|
+
</span>
|
|
572
|
+
<span class="ivds-tag ivds-tag--info">
|
|
573
|
+
<span class="ivds-tag__text">Prototyping</span>
|
|
574
|
+
</span>
|
|
575
|
+
</div>
|
|
576
|
+
</div>
|
|
577
|
+
<div class="ivds-card__actions">
|
|
578
|
+
<button class="ivds-button ivds-button--secondary" style="flex: 1;">View Profile</button>
|
|
579
|
+
<button class="ivds-button ivds-button--tertiary">Message</button>
|
|
580
|
+
</div>
|
|
581
|
+
</div>
|
|
582
|
+
</div>
|
|
583
|
+
</div>
|
|
584
|
+
</div>
|
|
585
|
+
|
|
586
|
+
<!-- Status Cards -->
|
|
587
|
+
<div>
|
|
588
|
+
<h3 style="margin-bottom: 1.5rem;">Status Cards</h3>
|
|
589
|
+
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 1.5rem;">
|
|
590
|
+
<div class="ivds-card ivds-card--success">
|
|
591
|
+
<div class="ivds-card__header">
|
|
592
|
+
<h3 class="ivds-card__title">System Status</h3>
|
|
593
|
+
</div>
|
|
594
|
+
<div class="ivds-card__body">
|
|
595
|
+
<p class="ivds-card__content">All systems are operational and running smoothly.</p>
|
|
596
|
+
<div style="margin-top: 1rem;">
|
|
597
|
+
<div style="display: flex; justify-content: space-between; margin-bottom: 0.5rem;">
|
|
598
|
+
<span>Uptime:</span>
|
|
599
|
+
<span style="font-weight: 500;">99.9%</span>
|
|
600
|
+
</div>
|
|
601
|
+
<div style="display: flex; justify-content: space-between;">
|
|
602
|
+
<span>Last Updated:</span>
|
|
603
|
+
<span style="font-weight: 500;">2 minutes ago</span>
|
|
604
|
+
</div>
|
|
605
|
+
</div>
|
|
606
|
+
</div>
|
|
607
|
+
</div>
|
|
608
|
+
|
|
609
|
+
<div class="ivds-card ivds-card--warning">
|
|
610
|
+
<div class="ivds-card__header">
|
|
611
|
+
<h3 class="ivds-card__title">Maintenance Notice</h3>
|
|
612
|
+
</div>
|
|
613
|
+
<div class="ivds-card__body">
|
|
614
|
+
<p class="ivds-card__content">Scheduled maintenance will occur tonight from 2:00 AM to 4:00 AM EST.</p>
|
|
615
|
+
<div class="ivds-card__actions">
|
|
616
|
+
<button class="ivds-button ivds-button--warning ivds-button--small">Learn More</button>
|
|
617
|
+
</div>
|
|
618
|
+
</div>
|
|
619
|
+
</div>
|
|
620
|
+
|
|
621
|
+
<div class="ivds-card ivds-card--error">
|
|
622
|
+
<div class="ivds-card__header">
|
|
623
|
+
<h3 class="ivds-card__title">Service Outage</h3>
|
|
624
|
+
</div>
|
|
625
|
+
<div class="ivds-card__body">
|
|
626
|
+
<p class="ivds-card__content">Email service is currently experiencing issues. We're working on a fix.</p>
|
|
627
|
+
<div class="ivds-card__actions">
|
|
628
|
+
<button class="ivds-button ivds-button--danger ivds-button--small">View Status</button>
|
|
629
|
+
</div>
|
|
630
|
+
</div>
|
|
631
|
+
</div>
|
|
632
|
+
</div>
|
|
633
|
+
</div>
|
|
634
|
+
</div>
|
|
635
|
+
`;
|