@codeforamerica/marcomms-design-system 1.0.0 → 1.0.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.
Files changed (91) hide show
  1. package/package.json +2 -1
  2. package/src/components/accordion.js +141 -0
  3. package/src/components/accordion.stories.js +56 -0
  4. package/src/components/avatar.js +62 -0
  5. package/src/components/avatar.stories.js +27 -0
  6. package/src/components/banner.js +152 -0
  7. package/src/components/banner.stories.js +115 -0
  8. package/src/components/bar.js +102 -0
  9. package/src/components/bar.stories.js +22 -0
  10. package/src/components/blob.js +119 -0
  11. package/src/components/blob.stories.js +64 -0
  12. package/src/components/box.js +55 -0
  13. package/src/components/box.stories.js +24 -0
  14. package/src/components/breadcrumbs.js +80 -0
  15. package/src/components/breadcrumbs.stories.js +27 -0
  16. package/src/components/button.js +167 -0
  17. package/src/components/button.scss +162 -0
  18. package/src/components/button.stories.js +49 -0
  19. package/src/components/callout.js +62 -0
  20. package/src/components/callout.stories.js +20 -0
  21. package/src/components/card.js +403 -0
  22. package/src/components/card.stories.js +170 -0
  23. package/src/components/carousel.js +182 -0
  24. package/src/components/carousel.stories.js +61 -0
  25. package/src/components/cta.js +99 -0
  26. package/src/components/cta.stories.js +22 -0
  27. package/src/components/details.scss +71 -0
  28. package/src/components/details.stories.js +27 -0
  29. package/src/components/flexible-layout.js +126 -0
  30. package/src/components/flexible-layout.stories.js +48 -0
  31. package/src/components/form-elements.scss +305 -0
  32. package/src/components/form-elements.stories.js +134 -0
  33. package/src/components/icon.js +41 -0
  34. package/src/components/icon.scss +31 -0
  35. package/src/components/icon.stories.js +16 -0
  36. package/src/components/label.js +63 -0
  37. package/src/components/label.stories.js +29 -0
  38. package/src/components/link-list.scss +80 -0
  39. package/src/components/link-list.stories.js +52 -0
  40. package/src/components/loader.scss +24 -0
  41. package/src/components/loader.stories.js +12 -0
  42. package/src/components/logo-card.js +93 -0
  43. package/src/components/logo-card.stories.js +48 -0
  44. package/src/components/nav.js +99 -0
  45. package/src/components/nav.stories.js +40 -0
  46. package/src/components/page-nav.js +171 -0
  47. package/src/components/page-nav.stories.js +112 -0
  48. package/src/components/pager.js +98 -0
  49. package/src/components/pager.stories.js +30 -0
  50. package/src/components/pagination.js +116 -0
  51. package/src/components/pagination.stories.js +30 -0
  52. package/src/components/person-card.js +240 -0
  53. package/src/components/person-card.stories.js +58 -0
  54. package/src/components/pill.js +33 -0
  55. package/src/components/pill.stories.js +23 -0
  56. package/src/components/promo.js +83 -0
  57. package/src/components/promo.stories.js +37 -0
  58. package/src/components/pullquote.js +42 -0
  59. package/src/components/pullquote.stories.js +16 -0
  60. package/src/components/quote.js +84 -0
  61. package/src/components/quote.stories.js +23 -0
  62. package/src/components/reveal.js +83 -0
  63. package/src/components/reveal.stories.js +40 -0
  64. package/src/components/slide.js +121 -0
  65. package/src/components/slide.stories.js +53 -0
  66. package/src/components/social-icon.js +233 -0
  67. package/src/components/social-icon.stories.js +36 -0
  68. package/src/components/stat.js +92 -0
  69. package/src/components/stat.stories.js +28 -0
  70. package/src/components/tab-list.js +114 -0
  71. package/src/components/tab-list.stories.js +18 -0
  72. package/src/components/tab.js +95 -0
  73. package/src/components/tab.stories.js +29 -0
  74. package/src/components/tile.js +150 -0
  75. package/src/components/tile.stories.js +41 -0
  76. package/src/components/transcript.js +44 -0
  77. package/src/components/transcript.stories.js +167 -0
  78. package/src/core/_base.scss +86 -0
  79. package/src/core/_grid.scss +295 -0
  80. package/src/core/_helpers.scss +111 -0
  81. package/src/core/_layout.scss +79 -0
  82. package/src/core/_reset.scss +53 -0
  83. package/src/core/_tokens.scss +251 -0
  84. package/src/core/_typography.scss +426 -0
  85. package/src/core/_wordpress.scss +27 -0
  86. package/src/core/colors.mdx +100 -0
  87. package/src/core/typography.mdx +66 -0
  88. package/src/shared/common.js +15 -0
  89. package/src/shared/layout.js +14 -0
  90. package/src/shared/typography.js +111 -0
  91. package/src/styles.scss +16 -0
@@ -0,0 +1,49 @@
1
+ import { html } from "lit-html";
2
+ import "./button.scss";
3
+
4
+ export default {
5
+ title: "Atoms/Button",
6
+ argTypes: {
7
+ theme: {
8
+ options: ["default", "primary", "outline", "outline-white", "prominent-link"],
9
+ control: { type: "inline-radio" },
10
+ },
11
+ size: {
12
+ options: ["sm", "md"],
13
+ control: { type: "inline-radio" },
14
+ defaultValue: "md",
15
+ },
16
+ },
17
+ };
18
+
19
+ const Template = ({ theme, size }) => html`
20
+ <div class="cfa-button cfa-button--${theme} cfa-button--${size}">Submit</div>
21
+ `;
22
+
23
+ export const Default = Template.bind({});
24
+ Default.args = {
25
+ theme: "default",
26
+ };
27
+
28
+ export const Primary = Template.bind({});
29
+ Primary.args = {
30
+ theme: "primary",
31
+ };
32
+
33
+ export const Outline = Template.bind({});
34
+ Outline.args = {
35
+ theme: "outline",
36
+ };
37
+
38
+ export const OutlineWhite = Template.bind({});
39
+ OutlineWhite.args = {
40
+ theme: "outline-white",
41
+ };
42
+ OutlineWhite.parameters = {
43
+ backgrounds: { default: "purple" },
44
+ };
45
+
46
+ export const ProminentLink = Template.bind({});
47
+ ProminentLink.args = {
48
+ theme: "prominent-link",
49
+ };
@@ -0,0 +1,62 @@
1
+ import { LitElement, html, css } from "lit";
2
+ import { commonStyles } from "../shared/common";
3
+ import "./icon";
4
+
5
+ class CallOut extends LitElement {
6
+ static styles = [
7
+ commonStyles,
8
+ css`
9
+ :host {
10
+ --background: var(--white);
11
+ --icon-color: var(--purple-80);
12
+ --link-color: var(--base-link-color);
13
+ --link-hover-color: var(--base-link-hover-color);
14
+ --text-color: var(--black);
15
+
16
+ display: block;
17
+ }
18
+
19
+ .callout {
20
+ align-items: flex-start;
21
+ background: var(--background);
22
+ box-shadow: var(--shadow-medium);
23
+ color: var(--text-color);
24
+ display: flex;
25
+ flex-direction: row;
26
+ gap: var(--spacing-component-2);
27
+ padding: var(--spacing-component-3);
28
+ }
29
+
30
+ .icon {
31
+ color: var(--icon-color);
32
+ flex-direction: column;
33
+ flex-grow: 0;
34
+ font-size: var(--font-size-h3);
35
+ height: 100%;
36
+ margin-block-start: -0.075em;
37
+ margin-inline-end: var(--spacing-component-2);
38
+ }
39
+
40
+ .callout + .callout {
41
+ margin-top: var(--spacing-layout-half);
42
+ }
43
+ `,
44
+ ];
45
+
46
+ render() {
47
+ return html`
48
+ <div class="callout">
49
+ <div class="icon">
50
+ <cfa-icon>info</cfa-icon>
51
+ </div>
52
+ <div class="text">
53
+ <slot></slot>
54
+ </div>
55
+ </div>
56
+ `;
57
+ }
58
+ }
59
+
60
+ if (!customElements.get("cfa-callout")) {
61
+ customElements.define("cfa-callout", CallOut);
62
+ }
@@ -0,0 +1,20 @@
1
+ import { html } from "lit-html";
2
+ import "./callout";
3
+
4
+ export default {
5
+ title: "Molecules/CallOut",
6
+ argTypes: {
7
+ text: { type: "string" },
8
+ },
9
+ };
10
+
11
+ const Template = ({ text }) => html`
12
+ <cfa-callout>
13
+ <div .innerHTML="${text}"></div>
14
+ </cfa-callout>
15
+ `;
16
+
17
+ export const Default = Template.bind({});
18
+ Default.args = {
19
+ text: 'It’s not time to go back to “normal,” but to reimagine the status quo. <a href="#">Learn more</a>',
20
+ };
@@ -0,0 +1,403 @@
1
+ import { LitElement, html, css, nothing, svg } from "lit";
2
+ import { commonStyles } from "../shared/common";
3
+ import { typographyStyles } from "../shared/typography";
4
+ import "./label";
5
+
6
+ class Card extends LitElement {
7
+ static properties = {
8
+ theme: {},
9
+ linkUrl: {},
10
+ linkTarget: {},
11
+ visualType: {},
12
+ visualUrl: {},
13
+ visualThumbnailUrl: {},
14
+ visualAltText: {},
15
+ eyebrow: {},
16
+ label: {},
17
+ title: {},
18
+ text: {},
19
+ metaText: {},
20
+ actionLabel: {},
21
+ };
22
+ static styles = [
23
+ commonStyles,
24
+ typographyStyles,
25
+ css`
26
+ :host {
27
+ --action-border-color: var(--purple-20);
28
+ --action-border-hover-color: var(--red-60);
29
+ --action-text-color: var(--purple-60);
30
+ --action-text-hover-color: var(--red-60);
31
+ --bg-color: var(--white);
32
+ --padding: var(--spacing-component-4);
33
+ --text-color: var(--black);
34
+
35
+ display: flex;
36
+ flex-direction: column;
37
+ margin-inline: auto;
38
+ max-width: 100%;
39
+ width: 100%;
40
+ }
41
+
42
+ .card,
43
+ a.card {
44
+ box-shadow: var(--shadow-small);
45
+ border: var(--hairline) solid var(--gray-20);
46
+ color: var(--text-color);
47
+ display: flex;
48
+ flex-direction: column;
49
+ flex: 1;
50
+ height: 100%;
51
+ text-decoration: none;
52
+ transition: 500ms;
53
+ }
54
+
55
+ a.card:hover {
56
+ --action-color: var(--action-hover-color);
57
+
58
+ box-shadow: var(--shadow-medium);
59
+ }
60
+
61
+ .content {
62
+ background-color: var(--bg-color);
63
+ display: flex;
64
+ flex-direction: column;
65
+ flex-grow: 1;
66
+ padding: var(--padding);
67
+ }
68
+
69
+ .header {
70
+ align-items: start;
71
+ display: flex;
72
+ flex-direction: column;
73
+ gap: var(--spacing-layout-half);
74
+ margin-block-end: var(--spacing-layout-half);
75
+ }
76
+
77
+ .body {
78
+ display: flex;
79
+ flex-flow: column nowrap;
80
+ gap: var(--spacing-layout-half);
81
+ height: 100%;
82
+ text-align: var(--text-alignment, start);
83
+ }
84
+
85
+ .eyebrow {
86
+ color: var(--purple-60);
87
+ }
88
+
89
+ .eyebrow + * {
90
+ margin-block-start: var(--spacing-component-2);
91
+ }
92
+
93
+ .meta-text {
94
+ color: var(--gray-60);
95
+ }
96
+
97
+ .action-label {
98
+ align-self: flex-start;
99
+ color: var(--action-text-color);
100
+ display: inline-block;
101
+ font-size: var(--font-size-small);
102
+ font-weight: bold;
103
+ margin-block-start: auto;
104
+ padding-block-start: var(--spacing-component-3);
105
+ }
106
+
107
+ a:hover .action-label {
108
+ color: var(--action-text-hover-color);
109
+ }
110
+
111
+ .action-label::after {
112
+ background: linear-gradient(
113
+ to top,
114
+ var(--action-border-hover-color) 0% 50%,
115
+ var(--action-border-color) 50% 100%
116
+ );
117
+ background-position: 0% 0%;
118
+ background-size: 100% 200%;
119
+ content: "";
120
+ display: block;
121
+ height: var(--spacing-component-2);
122
+ transition: background-position 0.3s;
123
+ }
124
+
125
+ a:hover .action-label::after {
126
+ background-position: 0% 100%;
127
+ }
128
+
129
+ .visual {
130
+ box-sizing: border-box;
131
+ display: flex;
132
+ height: auto;
133
+ height: var(--spacing-layout-7);
134
+ position: relative;
135
+ width: 100%;
136
+ }
137
+
138
+ img {
139
+ height: 100%;
140
+ object-fit: cover;
141
+ width: 100%;
142
+ }
143
+
144
+ .fallback-image {
145
+ background-color: var(--purple-80);
146
+ position: absolute;
147
+ inline-start: 0;
148
+ block-start: 0;
149
+ width: 100%;
150
+ height: 100%;
151
+ z-index: 0;
152
+ }
153
+
154
+ .fallback-image svg {
155
+ height: 100%;
156
+ width: 100%;
157
+ }
158
+
159
+ .visual picture {
160
+ position: relative;
161
+ z-index: 1;
162
+ width: 100%;
163
+ }
164
+
165
+ .image::after {
166
+ block-end: 0;
167
+ block-start: 0;
168
+ bottom: 0;
169
+ box-shadow: inset 0 -50px 50px -50px var(--black-60);
170
+ content: "";
171
+ inline-end: 0;
172
+ inline-start: 0;
173
+ position: absolute;
174
+ z-index: 2;
175
+ }
176
+
177
+ .logo {
178
+ background-color: var(--white, #fff);
179
+ box-sizing: border-box;
180
+ border-block-end: 1px solid var(--gray-20);
181
+ padding: var(--spacing-component-5);
182
+ }
183
+
184
+ .logo img {
185
+ object-fit: contain;
186
+ }
187
+
188
+ /* --- */
189
+
190
+ /* Theme: Compact Card */
191
+
192
+ .card--compact {
193
+ --padding: var(--spacing-component-3);
194
+ }
195
+
196
+ .card--compact .title {
197
+ font-size: var(--font-size-h4);
198
+ line-height: var(--line-height-h4);
199
+ }
200
+
201
+ .card--compact .action-label {
202
+ padding-block-start: 0;
203
+ }
204
+
205
+ /* --- */
206
+
207
+ /* Theme: Horizontal Card */
208
+
209
+ @media (min-width: 768px) {
210
+ .card--horizontal,
211
+ a.card--horizontal {
212
+ align-items: stretch;
213
+ flex-direction: row;
214
+ }
215
+
216
+ .card--horizontal .visual {
217
+ aspect-ratio: initial;
218
+ height: auto;
219
+ flex: 0 0 50%;
220
+ }
221
+
222
+ .card--horizontal .logo {
223
+ border-block-end: 0;
224
+ border-inline-end: 1px solid var(--gray-20);
225
+ }
226
+ }
227
+
228
+ /* --- */
229
+
230
+ /* Theme: Horizontal Compact Card */
231
+
232
+ @media (min-width: 768px) {
233
+ .card--horizontal-compact,
234
+ a.card--horizontal-compact {
235
+ align-items: stretch;
236
+ flex-direction: row;
237
+ }
238
+
239
+ .card--horizontal-compact .visual {
240
+ aspect-ratio: initial;
241
+ flex: 0 0 34%;
242
+ height: auto;
243
+ position: relative;
244
+ }
245
+
246
+ .card--horizontal-compact .image picture {
247
+ position: absolute;
248
+ height: 100%;
249
+ width: 100%;
250
+ }
251
+
252
+ .card--horizontal-compact .logo {
253
+ border-block-end: 0;
254
+ border-right: 1px solid var(--gray-20);
255
+ padding: var(--spacing-component-4);
256
+ }
257
+ }
258
+
259
+ .card--horizontal-compact,
260
+ a.card--horizontal-compact {
261
+ --padding: var(--spacing-component-3);
262
+ }
263
+
264
+ .card--horizontal-compact .body {
265
+ gap: var(--spacing-component-2);
266
+ }
267
+
268
+ .card--horizontal-compact .header {
269
+ margin-block-end: var(--spacing-component-2);
270
+ }
271
+
272
+ .card--horizontal-compact .title {
273
+ font-size: var(--font-size-h4);
274
+ line-height: var(--line-height-h4);
275
+ }
276
+
277
+ .card--horizontal-compact .action-label {
278
+ padding-block-start: var(--spacing-component-2);
279
+ }
280
+ `,
281
+ ];
282
+ visualTemplate() {
283
+ let template;
284
+
285
+ if (this.visualType === "image") {
286
+ template = html`
287
+ <div class="visual image">
288
+ <div class="fallback-image">
289
+ ${svg`
290
+ <svg
291
+ width="1600"
292
+ height="900"
293
+ viewBox="0 0 1600 900"
294
+ fill="none"
295
+ preserveAspectRatio="xMinYMin slice"
296
+ xmlns="http://www.w3.org/2000/svg"
297
+ >
298
+ <g clip-path="url(#clip0)">
299
+ <rect width="1600" height="900" fill="#2B1A78"/>
300
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M1218.12 -444.87C1375.54 -448.403 1528.96 -379.695 1624.93 -254.874C1718.97 -132.569 1729.75 28.0324 1697.74 178.942C1664.98 333.396 1596.67 491.622 1452.8 556.721C1311.8 620.52 1155.18 556.724 1017.04 486.944C883.26 419.362 752.204 329.485 715.393 184.213C677.697 35.4535 737.759 -117.225 833.568 -237.116C929.253 -356.852 1064.86 -441.431 1218.12 -444.87Z" fill="#5650BE"/>
301
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M372.893 247.378C457.708 243.989 548.299 262.758 600.503 329.652C652.21 395.908 640.741 485.984 623.238 568.169C605.287 652.459 579.269 741.096 503.945 783.041C424.143 827.479 324.366 822.072 243.48 779.638C165.755 738.862 118.175 659.045 102.906 572.65C88.5877 491.632 114.457 410.294 167.015 346.974C218.23 285.272 292.743 250.581 372.893 247.378Z" fill="#5650BE"/>
302
+ </g>
303
+ <defs>
304
+ <clipPath id="clip0">
305
+ <rect width="1600" height="900" fill="white"/>
306
+ </clipPath>
307
+ </defs>
308
+ </svg>
309
+ `}
310
+ </div>
311
+ ${this.visualUrl
312
+ ? html`
313
+ <picture>
314
+ <source srcset="${this.visualUrl}" />
315
+ <img
316
+ src="${this.visualThumbnailUrl}"
317
+ alt="${this.visualAltText}"
318
+ loading="lazy"
319
+ onerror="this.style.display='none'"
320
+ />
321
+ </picture>
322
+ `
323
+ : nothing}
324
+ </div>
325
+ `;
326
+ } else if (this.visualType === "logo") {
327
+ template = html`
328
+ <div class="visual logo">
329
+ <picture>
330
+ <source srcset="${this.visualUrl}" />
331
+ <img
332
+ src="${this.visualThumbnailUrl}"
333
+ alt="${this.visualAltText}"
334
+ loading="lazy"
335
+ />
336
+ </picture>
337
+ </div>
338
+ `;
339
+ }
340
+ return template;
341
+ }
342
+ cardContentTemplate() {
343
+ return html`
344
+ ${this.visualTemplate()}
345
+ <div class="content">
346
+ <div class="header">
347
+ <div>
348
+ ${this.eyebrow
349
+ ? html` <div class="eyebrow">${this.eyebrow}</div> `
350
+ : nothing}
351
+ ${this.title
352
+ ? html` <div class="h3 title">${this.title}</div> `
353
+ : nothing}
354
+ </div>
355
+ ${this.label
356
+ ? html`
357
+ <div>
358
+ <cfa-label color="green">${this.label}</cfa-label>
359
+ </div>
360
+ `
361
+ : nothing}
362
+ </div>
363
+ <div class="body">
364
+ ${this.text
365
+ ? html` <div class="small" .innerHTML="${this.text}"></div> `
366
+ : nothing}
367
+ ${this.metaText
368
+ ? html`
369
+ <div
370
+ class="meta-text small"
371
+ .innerHTML="${this.metaText}"
372
+ ></div>
373
+ `
374
+ : nothing}
375
+ ${this.actionLabel
376
+ ? html` <div class="action-label">${this.actionLabel}</div> `
377
+ : nothing}
378
+ </div>
379
+ </div>
380
+ `;
381
+ }
382
+ render() {
383
+ return html`
384
+ ${this.linkUrl
385
+ ? html`
386
+ <a
387
+ href="${this.linkUrl}"
388
+ target="${this.linkTarget}"
389
+ rel="${this.linkTarget == "_blank" ? "noopener" : nothing}"
390
+ class="card ${this.theme ? "card--" + this.theme : ""}"
391
+ >
392
+ ${this.cardContentTemplate()}
393
+ </a>
394
+ `
395
+ : html`
396
+ <div class="card ${this.theme ? "card--" + this.theme : ""}">
397
+ ${this.cardContentTemplate()}
398
+ </div>
399
+ `}
400
+ `;
401
+ }
402
+ }
403
+ customElements.define("cfa-card", Card);
@@ -0,0 +1,170 @@
1
+ import { html } from "lit-html";
2
+ import "./card";
3
+
4
+ export default {
5
+ title: "Molecules/Card",
6
+ argTypes: {
7
+ theme: {
8
+ defaultValue: "default",
9
+ options: ["default", "horizontal", "horizontal-compact"],
10
+ control: { type: "radio" },
11
+ },
12
+ eyebrow: { type: "string" },
13
+ title: { type: "string" },
14
+ label: { type: "string" },
15
+ text: { type: "string" },
16
+ metaText: { type: "string" },
17
+ linkUrl: { type: "string" },
18
+ linkTarget: {
19
+ defaultValue: "_self",
20
+ options: ["_self", "_blank"],
21
+ control: { type: "radio" },
22
+ },
23
+ actionLabel: { type: "string" },
24
+ visualType: {
25
+ defaultValue: "none",
26
+ options: ["none", "image", "logo"],
27
+ control: { type: "radio" },
28
+ },
29
+ visualUrl: { type: "string" },
30
+ visualAltText: { type: "string" },
31
+ },
32
+ };
33
+
34
+ const Template = ({
35
+ theme,
36
+ eyebrow,
37
+ title,
38
+ label,
39
+ text,
40
+ metaText,
41
+ linkUrl,
42
+ linkTarget,
43
+ actionLabel,
44
+ visualType,
45
+ visualUrl,
46
+ visualThumbnailUrl,
47
+ visualAltText,
48
+ }) => html`
49
+ <cfa-card
50
+ theme="${theme}"
51
+ linkUrl="${linkUrl}"
52
+ linkTarget="${linkTarget}"
53
+ visualType="${visualType}"
54
+ visualUrl="${visualUrl}"
55
+ visualThumbnailUrl="${visualThumbnailUrl}"
56
+ visualAltText="${visualAltText}"
57
+ eyebrow="${eyebrow}"
58
+ title="${title}"
59
+ label="${label}"
60
+ text="${text}"
61
+ metaText="${metaText}"
62
+ actionLabel="${actionLabel}"
63
+ >
64
+ </cfa-card>
65
+ `;
66
+
67
+ export const Default = Template.bind({});
68
+ Default.args = {
69
+ theme: "default",
70
+ eyebrow: "Program",
71
+ title: "Automatic Record Clearance",
72
+ label: "Now hiring",
73
+ text: "Working with state governments and communities to fundamentally transform the process of record clearance.",
74
+ metaText: "Updated September 29, 2022",
75
+ actionLabel: "Learn more",
76
+ linkUrl:
77
+ "https://codeforamerica.org/programs/criminal-justice/automatic-record-clearance/",
78
+ };
79
+
80
+ export const CardWithImage = Template.bind({});
81
+ CardWithImage.args = {
82
+ theme: "default",
83
+ eyebrow: "Program",
84
+ title: "Food benefits",
85
+ label: "",
86
+ text: "Improving access to food assistance and delivery of benefits.",
87
+ metaText: "",
88
+ linkUrl:
89
+ "https://codeforamerica.org/programs/social-safety-net/food-benefits/",
90
+ actionLabel: "Learn more",
91
+ visualType: "image",
92
+ visualUrl:
93
+ "https://files.codeforamerica.org/2021/05/28124702/illustration_grocery-768x576.png",
94
+ visualThumbnailUrl:
95
+ "https://files.codeforamerica.org/2021/05/28124702/illustration_grocery-150x150.png",
96
+ visualAltText: "Illustration of groceries in a shopping basket and paper bag",
97
+ };
98
+
99
+ export const CardWithLogo = Template.bind({});
100
+ CardWithLogo.args = {
101
+ theme: "default",
102
+ eyebrow: "Partner",
103
+ title: "Code for America",
104
+ label: "Accepting applications",
105
+ text: "",
106
+ metaText: "",
107
+ linkUrl: "https://codeforamerica.org",
108
+ actionLabel: "Learn more",
109
+ visualType: "logo",
110
+ visualUrl:
111
+ "https://files.codeforamerica.org/2021/05/28124702/code-for-america-logo-black.svg",
112
+ visualAltText: "Code for America logo",
113
+ };
114
+
115
+ export const CompactCard = Template.bind({});
116
+ CompactCard.args = {
117
+ theme: "compact",
118
+ eyebrow: "Program",
119
+ title: "Food benefits",
120
+ label: "",
121
+ text: "Improving access to food assistance and delivery of benefits.",
122
+ metaText: "",
123
+ linkUrl:
124
+ "https://codeforamerica.org/programs/social-safety-net/food-benefits/",
125
+ actionLabel: "Learn more",
126
+ visualType: "image",
127
+ visualUrl:
128
+ "https://files.codeforamerica.org/2021/05/28124702/illustration_grocery-768x576.png",
129
+ visualThumbnailUrl:
130
+ "https://files.codeforamerica.org/2021/05/28124702/illustration_grocery-150x150.png",
131
+ visualAltText: "Illustration of groceries in a shopping basket and paper bag",
132
+ };
133
+
134
+ export const HorizontalCard = Template.bind({});
135
+ HorizontalCard.args = {
136
+ theme: "horizontal",
137
+ eyebrow: "Program",
138
+ title: "Food benefits",
139
+ label: "",
140
+ text: "Improving access to food assistance and delivery of benefits.",
141
+ metaText: "",
142
+ linkUrl:
143
+ "https://codeforamerica.org/programs/social-safety-net/food-benefits/",
144
+ actionLabel: "Learn more",
145
+ visualType: "image",
146
+ visualUrl:
147
+ "https://files.codeforamerica.org/2021/05/28124702/illustration_grocery-768x576.png",
148
+ visualThumbnailUrl:
149
+ "https://files.codeforamerica.org/2021/05/28124702/illustration_grocery-150x150.png",
150
+ visualAltText: "Illustration of groceries in a shopping basket and paper bag",
151
+ };
152
+
153
+ export const HorizontalCompactCard = Template.bind({});
154
+ HorizontalCompactCard.args = {
155
+ theme: "horizontal-compact",
156
+ eyebrow: "Program",
157
+ title: "Food benefits",
158
+ label: "",
159
+ text: "Improving access to food assistance and delivery of benefits.",
160
+ metaText: "",
161
+ linkUrl:
162
+ "https://codeforamerica.org/programs/social-safety-net/food-benefits/",
163
+ actionLabel: "Learn more",
164
+ visualType: "image",
165
+ visualUrl:
166
+ "https://files.codeforamerica.org/2021/05/28124702/illustration_grocery-768x576.png",
167
+ visualThumbnailUrl:
168
+ "https://files.codeforamerica.org/2021/05/28124702/illustration_grocery-150x150.png",
169
+ visualAltText: "Illustration of groceries in a shopping basket and paper bag",
170
+ };