@netlify/spark-ui 1.2.0 → 1.4.0

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.
@@ -0,0 +1,7 @@
1
+ export type BUTTON_VARIANTS = 'primary' | 'secondary' | 'outline' | 'ghost';
2
+ export interface CallToActionProps {
3
+ id?: string;
4
+ text: string;
5
+ href: string;
6
+ variant?: BUTTON_VARIANTS;
7
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@netlify/spark-ui",
3
3
  "description": "Assets, design tokens, components, and utilities",
4
- "version": "1.2.0",
4
+ "version": "1.4.0",
5
5
  "type": "module",
6
6
  "main": "dist/components/preact/index.js",
7
7
  "types": "dist/components/preact/index.d.ts",
@@ -0,0 +1,69 @@
1
+ ---
2
+ interface Props {
3
+ id?: string;
4
+ href: string;
5
+ text?: string;
6
+ class?: string;
7
+ }
8
+
9
+ const { id, href, text, class: className, ...rest } = Astro.props;
10
+ ---
11
+
12
+ <a id={id} class:list={['n-action-link', className]} href={href} {...rest}>
13
+ <span>{text ? text : <slot />}</span><div class="n-action-link-icon">
14
+ <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" fill="none" viewBox="0 0 14 14">
15
+ <g stroke="currentColor" stroke-linecap="square" stroke-width="1.564" clip-path="url(#a)">
16
+ <path stroke-linejoin="round" d="M3.417 10.556 9.4 4.572"></path>
17
+ <path d="M9.88 9.381V4.093H4.59"></path>
18
+ </g>
19
+ </svg>
20
+ </div>
21
+ </a>
22
+
23
+ <style>
24
+ .n-action-link {
25
+ display: inline-block;
26
+ font-weight: var(--font-weight-medium);
27
+ font-size: var(--font-size-text-md);
28
+ text-wrap: pretty; /** Prevents orphan icon */
29
+ text-decoration: none;
30
+ color: var(--color-text);
31
+
32
+ span {
33
+ text-decoration: underline;
34
+ text-decoration-color: var(--color-link);
35
+ text-underline-offset: 0.1em;
36
+ }
37
+ }
38
+
39
+ .n-action-link-icon {
40
+ display: inline-flex;
41
+ overflow: hidden;
42
+ margin-inline-start: 0.1em;
43
+
44
+ svg {
45
+ color: var(--color-icon);
46
+ transition: translate 0.1s ease-out;
47
+ }
48
+ }
49
+
50
+ @media (any-hover: hover) {
51
+ .n-action-link:where(:hover, :focus-visible) .n-action-link-icon svg {
52
+ --_offset: 100%;
53
+ animation: n-action-link-hover 350ms cubic-bezier(0.85, 0, 0.15, 1) forwards;
54
+ }
55
+
56
+ @keyframes n-action-link-hover {
57
+ 0%,
58
+ 100% {
59
+ translate: 0 0;
60
+ }
61
+ 30% {
62
+ translate: calc(var(--_offset) * 2) calc(var(--_offset) * -2);
63
+ }
64
+ 31% {
65
+ translate: calc(var(--_offset) * -1) var(--_offset);
66
+ }
67
+ }
68
+ }
69
+ </style>
@@ -1,12 +1,17 @@
1
1
  ---
2
+ import { BUTTON_VARIANTS } from '@utils/types';
2
3
  import '../styles/buttons.css';
3
4
 
4
5
  interface Props {
5
- variant?: 'primary' | 'secondary' | 'outline' | 'ghost';
6
+ id?: string;
7
+ class?: string;
8
+ target?: string;
9
+ variant?: BUTTON_VARIANTS;
6
10
  href?: string;
7
11
  }
8
12
 
9
13
  const {
14
+ id,
10
15
  class: className,
11
16
  variant = 'primary',
12
17
  href,
@@ -17,6 +22,13 @@ const {
17
22
  const Element = href ? 'a' : 'button';
18
23
  ---
19
24
 
20
- <Element class:list={['button', className]} data-button-variant={variant} {href} {target} {...rest}>
25
+ <Element
26
+ {id}
27
+ class:list={['button', className]}
28
+ data-button-variant={variant}
29
+ {href}
30
+ {target}
31
+ {...rest}
32
+ >
21
33
  <slot />
22
34
  </Element>
@@ -0,0 +1,120 @@
1
+ ---
2
+ import ActionLink from './ActionLink.astro';
3
+ import Eyebrow from './Eyebrow.astro';
4
+
5
+ interface Props {
6
+ as?: HTMLElement;
7
+ eyebrow?: string;
8
+ paragraph?: string | HTMLElement;
9
+ headline?: string | HTMLElement;
10
+ link?: {
11
+ id?: string;
12
+ href: string;
13
+ text: string;
14
+ };
15
+ isCardClickable?: boolean;
16
+ }
17
+
18
+ const {
19
+ as = 'div',
20
+ eyebrow,
21
+ paragraph,
22
+ headline,
23
+ link,
24
+ isCardClickable,
25
+ class: className,
26
+ ...rest
27
+ } = Astro.props;
28
+
29
+ const Element = as;
30
+ ---
31
+
32
+ <Element class:list={['n-card n-flow', isCardClickable && 'n-card-clickable', className]} {...rest}>
33
+ {
34
+ Astro.slots.has('icon') && (
35
+ <div class="n-card-icon">
36
+ <slot name="icon" />
37
+ </div>
38
+ )
39
+ }
40
+ {
41
+ Astro.slots.has('image') && (
42
+ <div class="n-card-image">
43
+ <slot name="image" />
44
+ </div>
45
+ )
46
+ }
47
+ {eyebrow && <Eyebrow class="n-card-eyebrow">{eyebrow}</Eyebrow>}
48
+ {headline && <div class="n-card-headline" set:html={headline} />}
49
+ {paragraph && <div class="n-card-paragraph" set:html={paragraph} />}
50
+ <slot />
51
+ {
52
+ link && (
53
+ <ActionLink class="n-card-link" id={link.id} href={link.href}>
54
+ {link.text}
55
+ </ActionLink>
56
+ )
57
+ }
58
+ </Element>
59
+
60
+ <style>
61
+ .n-card {
62
+ position: relative;
63
+ padding: var(--space-m);
64
+ background-color: var(--card-bg-color);
65
+ border: 1px solid var(--card-border-color);
66
+ border-radius: var(--radius-m);
67
+ }
68
+
69
+ .n-card-headline {
70
+ font-size: var(--font-size-display-sm);
71
+ font-family: var(--font-family-display);
72
+ font-weight: var(--font-weight-bold);
73
+ line-height: var(--line-height-heading);
74
+ color: var(--heading-text-color);
75
+ }
76
+
77
+ .n-card-paragraph {
78
+ line-height: var(--line-height-text);
79
+ }
80
+
81
+ .n-card-eyebrow {
82
+ --n-flow-space: var(--space-l);
83
+ }
84
+
85
+ .n-card-paragraph:nth-last-child(2) {
86
+ margin-block-end: auto;
87
+ }
88
+
89
+ .n-card-link {
90
+ --n-flow-space: var(--space-l);
91
+ align-self: flex-start;
92
+ }
93
+
94
+ .n-card-image :global(img, picture) {
95
+ width: 100%;
96
+ height: auto;
97
+ border-radius: var(--radius-s);
98
+ object-fit: cover;
99
+ }
100
+
101
+ /** Clickable card */
102
+ .n-card-clickable {
103
+ transition: border-color 100ms cubic-bezier(0.25, 1, 0.5, 1);
104
+
105
+ &:hover {
106
+ border-color: var(--card-border-color-hover);
107
+ transition-duration: 200ms;
108
+ }
109
+ }
110
+
111
+ .n-card-clickable .n-card-link {
112
+ position: static;
113
+
114
+ &::after {
115
+ content: '';
116
+ position: absolute;
117
+ inset: 0;
118
+ }
119
+ }
120
+ </style>
@@ -0,0 +1,19 @@
1
+ ---
2
+ const { as = 'div', class: className, ...rest } = Astro.props;
3
+
4
+ const Element = as;
5
+ ---
6
+
7
+ <Element class:list={['eyebrow', className]} {...rest}>
8
+ <slot />
9
+ </Element>
10
+
11
+ <style>
12
+ .eyebrow {
13
+ font-size: var(--font-size-text-sm);
14
+ font-family: var(--font-family-mono);
15
+ line-height: var(--line-height-none);
16
+ color: var(--eyebrow-text-color);
17
+ text-transform: uppercase;
18
+ }
19
+ </style>
@@ -0,0 +1,106 @@
1
+ ---
2
+ import { CallToActionProps } from '@utils/types';
3
+ import Button from './Button.astro';
4
+ import Eyebrow from './Eyebrow.astro';
5
+
6
+ interface Props {
7
+ id?: string;
8
+ eyebrow?: string;
9
+ heading?: string;
10
+ headingLevel?: '1' | '2' | '3' | '4';
11
+ headingMaxWidth?: string;
12
+ text?: string;
13
+ textMaxWidth?: string;
14
+ alignment?: 'start' | 'center';
15
+ supporting?: string;
16
+ ctas?: CallToActionProps[];
17
+ class?: string;
18
+ }
19
+
20
+ const {
21
+ id,
22
+ eyebrow,
23
+ heading,
24
+ headingLevel = 2,
25
+ headingMaxWidth,
26
+ text,
27
+ textMaxWidth,
28
+ alignment = 'start',
29
+ class: className,
30
+ ctas,
31
+ ...rest
32
+ } = Astro.props;
33
+
34
+ const Heading = `h${headingLevel}` as any;
35
+
36
+ const customStyles =
37
+ headingMaxWidth || textMaxWidth
38
+ ? {
39
+ ...(headingMaxWidth && { '--n-heading-block-heading-max-width': headingMaxWidth }),
40
+ ...(textMaxWidth && { '--n-heading-block-text-max-width': textMaxWidth }),
41
+ }
42
+ : null;
43
+ ---
44
+
45
+ <div
46
+ {id}
47
+ class:list={[
48
+ 'n-heading-block n-flow',
49
+ alignment === 'center' && 'n-heading-block-center',
50
+ className,
51
+ ]}
52
+ style={customStyles}
53
+ {...rest}
54
+ >
55
+ {eyebrow && <Eyebrow class="n-heading-block-eyebrow">{eyebrow}</Eyebrow>}
56
+ {heading && <Heading class="n-heading-block-heading h1">{heading}</Heading>}
57
+ {text && <p class="n-heading-block-text" set:html={text} />}
58
+ {
59
+ ctas && ctas.length > 0 && (
60
+ <div class="n-heading-block-ctas n-cluster">
61
+ {ctas?.map((cta: CallToActionProps) => (
62
+ <Button id={cta.id} href={cta.href} variant={cta.variant}>
63
+ {cta.text}
64
+ </Button>
65
+ ))}
66
+ </div>
67
+ )
68
+ }
69
+ </div>
70
+
71
+ <style>
72
+ .n-heading-block {
73
+ padding-block: var(--space-xl);
74
+ }
75
+
76
+ .n-heading-block-center {
77
+ --n-cluster-justify: center;
78
+ text-align: center;
79
+ margin-inline: auto;
80
+
81
+ > * {
82
+ margin-inline: auto;
83
+ }
84
+ }
85
+
86
+ .n-heading-block-heading {
87
+ inline-size: min(100%, var(--n-heading-block-heading-max-width, 50rem));
88
+ text-wrap: balance;
89
+ }
90
+
91
+ .n-heading-block-text {
92
+ inline-size: min(100%, var(--n-heading-block-text-max-width, 35rem));
93
+ text-wrap: pretty;
94
+ }
95
+
96
+ .n-heading-block-ctas {
97
+ --n-flow-space: var(--space-l);
98
+ --n-cluster-gap: var(--space-xs);
99
+ }
100
+
101
+ @media (max-width: 30rem) {
102
+ .n-heading-block-ctas > * {
103
+ inline-size: 100%;
104
+ }
105
+ }
106
+ </style>
@@ -1,16 +1,20 @@
1
1
  .button {
2
2
  appearance: none;
3
3
  cursor: pointer;
4
+ outline-offset: 0.25rem;
4
5
  position: relative;
5
6
  display: inline-flex;
6
7
  align-items: center;
8
+ justify-content: center;
7
9
  gap: var(--space-xs);
8
10
  padding: 0.625rem 1.0625rem;
9
11
  font-size: var(--font-size-text-md);
10
12
  font-family: var(--font-family-display);
11
13
  font-weight: var(--font-weight-bold);
12
- line-height: normal;
14
+ line-height: var(--line-height-none);
13
15
  text-decoration: none;
16
+ text-align: center;
17
+ text-wrap: balance;
14
18
  color: var(--button-text-color, var(--button-primary-text-color));
15
19
  background-color: var(--button-bg-color, var(--button-primary-bg-color));
16
20
  border: 2px solid var(--button-border-color, var(--button-primary-bg-color));
@@ -21,7 +25,7 @@
21
25
  /* Button icons */
22
26
  svg {
23
27
  flex: none;
24
- height: var(--button-icon-size, 1.2cap);
28
+ height: var(--button-icon-size, 1.4cap);
25
29
  width: auto;
26
30
  fill: currentColor;
27
31
  }
@@ -66,6 +66,7 @@ body {
66
66
  font-size: var(--font-size-text-lg);
67
67
  font-weight: var(--font-weight-normal);
68
68
  line-height: var(--line-height-text);
69
+ color: var(--body-text-color);
69
70
  }
70
71
 
71
72
  b,
@@ -81,8 +82,17 @@ em {
81
82
 
82
83
  /* Headings */
83
84
  h1,
84
- .h1 {
85
+ h2,
86
+ h3,
87
+ h4,
88
+ h5,
89
+ h6 {
85
90
  font-family: var(--font-family-display);
91
+ color: var(--heading-text-color);
92
+ }
93
+
94
+ h1,
95
+ .h1 {
86
96
  font-size: var(--font-size-display-2xl);
87
97
  font-weight: var(--font-weight-extrabold);
88
98
  line-height: var(--line-height-heading);
@@ -90,7 +100,6 @@ h1,
90
100
 
91
101
  h2,
92
102
  .h2 {
93
- font-family: var(--font-family-display);
94
103
  font-size: var(--font-size-display-xl);
95
104
  font-weight: var(--font-weight-extrabold);
96
105
  line-height: var(--line-height-heading);
@@ -98,7 +107,6 @@ h2,
98
107
 
99
108
  h3,
100
109
  .h3 {
101
- font-family: var(--font-family-display);
102
110
  font-size: var(--font-size-display-lg);
103
111
  font-weight: var(--font-weight-bold);
104
112
  line-height: var(--line-height-heading);
@@ -106,7 +114,6 @@ h3,
106
114
 
107
115
  h4,
108
116
  .h4 {
109
- font-family: var(--font-family-display);
110
117
  font-size: var(--font-size-display-sm);
111
118
  font-weight: var(--font-weight-bold);
112
119
  line-height: var(--line-height-heading);
@@ -1,10 +1,30 @@
1
- .cluster {
1
+ .n-cluster {
2
+ --_gap-default: var(--space-m);
2
3
  display: flex;
3
4
  flex-wrap: wrap;
4
- column-gap: var(--column-gap, var(--gap, var(--space-m)));
5
- row-gap: var(--row-gap, var(--gap, var(--space-m)));
5
+ align-items: var(--n-cluster-align, center);
6
+ justify-content: var(--n-cluster-justify, flex-start);
7
+ column-gap: var(--n-cluster-column-gap, var(--n-cluster-gap, var(--_gap-default)));
8
+ row-gap: var(--n-cluster-row-gap, var(--n-cluster-gap, var(--_gap-default)));
6
9
  }
7
10
 
8
- .flow > * + * {
9
- margin-top: var(--flow-space, var(--space-m));
11
+ .n-flow {
12
+ display: flex;
13
+ flex-direction: column;
14
+ justify-content: var(--n-flow-justify, flex-start);
15
+ align-items: var(--n-flow-align, flex-start);
16
+
17
+ > * + * {
18
+ margin-block-start: var(--n-flow-space, var(--space-m));
19
+ }
20
+ }
21
+
22
+ .n-grid {
23
+ display: grid;
24
+ grid-template-columns: repeat(
25
+ var(--n-grid-repeat-count, auto-fill),
26
+ minmax(min(100%, var(--n-grid-column-min-size)), 1fr)
27
+ );
28
+ gap: var(--n-grid-gap, var(--space-m));
29
+ grid-auto-rows: var(--n-grid-auto-rows, auto);
10
30
  }
@@ -24,6 +24,9 @@
24
24
  --button-secondary-bg-color: color(srgb 0.047058823529411764 0.16470588235294117 0.16470588235294117 / 0.09803921568627451);
25
25
  --button-secondary-bg-color-hover: color(srgb 0.047058823529411764 0.16470588235294117 0.16470588235294117 / 0.14901960784313725);
26
26
  --button-secondary-text-color: var(--neutral-800);
27
+ --card-bg-color: var(--neutral-000);
28
+ --card-border-color: var(--neutral-200);
29
+ --card-border-color-hover: var(--neutral-300);
27
30
  --code-bg-color: var(--teal-900);
28
31
  --color-bg: var(--neutral-000);
29
32
  --color-bg-2: var(--neutral-100);
@@ -94,7 +97,7 @@
94
97
  --green-800: color(srgb 0.058823529411764705 0.2901960784313726 0.12941176470588237);
95
98
  --green-900: color(srgb 0.08235294117647059 0.16470588235294117 0.09803921568627451);
96
99
  --heading-text-color: var(--neutral-800);
97
- --line-height-heading: 1.25;
100
+ --line-height-heading: 1.1;
98
101
  --line-height-none: 1;
99
102
  --line-height-text: 1.5;
100
103
  --neutral-000: color(srgb 1 1 1);
@@ -172,114 +175,6 @@
172
175
  --title-text-color: color(srgb 0.32941176470588235 0.35294117647058826 0.3803921568627451 / 0.7490196078431373);
173
176
  }
174
177
 
175
- @media (prefers-color-scheme: light) {
176
- :root {
177
- --active-switcher-tab-bg-color: color(srgb 0.047058823529411764 0.16470588235294117 0.16470588235294117 / 0.047058823529411764);
178
- --button-outline-bg-color: color(srgb 0 0 0 / 0);
179
- --button-outline-bg-color-hover: color(srgb 0.19607843137254902 0.9019607843137255 0.8862745098039215 / 0.2);
180
- --button-outline-stroke-color: var(--neutral-800);
181
- --button-outline-text-color: var(--neutral-800);
182
- --button-primary-bg-color: var(--teal-200);
183
- --button-primary-bg-color-hover: var(--teal-100);
184
- --button-primary-text-color: var(--neutral-800);
185
- --button-secondary-bg-color: color(srgb 0.047058823529411764 0.16470588235294117 0.16470588235294117 / 0.09803921568627451);
186
- --button-secondary-bg-color-hover: color(srgb 0.047058823529411764 0.16470588235294117 0.16470588235294117 / 0.14901960784313725);
187
- --button-secondary-text-color: var(--neutral-800);
188
- --code-bg-color: var(--teal-900);
189
- --color-bg: var(--neutral-000);
190
- --color-bg-2: var(--neutral-100);
191
- --color-bg-3: var(--neutral-200);
192
- --color-disabled-bg: var(--neutral-200);
193
- --color-disabled-border: var(--neutral-400);
194
- --color-disabled-text: var(--neutral-400);
195
- --color-icon: var(--blue-700);
196
- --color-invalid-bg: var(--red-100);
197
- --color-invalid-border: var(--red-600);
198
- --color-invalid-text: var(--red-600);
199
- --color-link: var(--blue-700);
200
- --color-logo-inactive: color(srgb 0.7019607843137254 0.7019607843137254 0.7019607843137254);
201
- --color-logo-spark: var(--teal-400);
202
- --color-logo-type: var(--teal-800);
203
- --color-stroke: color(srgb 0 0 0 / 0.14901960784313725);
204
- --color-success-bg: var(--green-100);
205
- --color-success-border: var(--green-300);
206
- --color-success-text: var(--green-800);
207
- --color-text: var(--neutral-600);
208
- --color-text-accent: var(--teal-000);
209
- --color-text-weak: var(--neutral-500);
210
- --color-text-weaker: var(--neutral-400);
211
- --color-warning-bg: var(--gold-100);
212
- --color-warning-border: var(--gold-300);
213
- --color-warning-text: var(--gold-800);
214
- --eyebrow-text-color: var(--blue-700);
215
- --heading-text-color: var(--neutral-800);
216
- --neutral-000: color(srgb 1 1 1);
217
- --neutral-100: color(srgb 0.9647058823529412 0.9647058823529412 0.9686274509803922);
218
- --neutral-200: color(srgb 0.9137254901960784 0.9215686274509803 0.9294117647058824);
219
- --neutral-300: color(srgb 0.8196078431372549 0.8352941176470589 0.8549019607843137);
220
- --neutral-400: color(srgb 0.615686274509804 0.6549019607843137 0.6980392156862745);
221
- --neutral-500: color(srgb 0.4666666666666667 0.5019607843137255 0.5372549019607843);
222
- --neutral-600: color(srgb 0.32941176470588235 0.35294117647058826 0.3803921568627451);
223
- --neutral-700: color(srgb 0.20784313725490197 0.22745098039215686 0.24313725490196078);
224
- --neutral-800: color(srgb 0.09411764705882353 0.10196078431372549 0.10980392156862745);
225
- --switcher-tab-bg-color: color(srgb 1 1 1 / 0.047058823529411764);
226
- --title-text-color: color(srgb 0.32941176470588235 0.35294117647058826 0.3803921568627451 / 0.7490196078431373);
227
- }
228
- }
229
-
230
- [data-theme="light"] {
231
- --active-switcher-tab-bg-color: color(srgb 0.047058823529411764 0.16470588235294117 0.16470588235294117 / 0.047058823529411764);
232
- --button-outline-bg-color: color(srgb 0 0 0 / 0);
233
- --button-outline-bg-color-hover: color(srgb 0.19607843137254902 0.9019607843137255 0.8862745098039215 / 0.2);
234
- --button-outline-stroke-color: var(--neutral-800);
235
- --button-outline-text-color: var(--neutral-800);
236
- --button-primary-bg-color: var(--teal-200);
237
- --button-primary-bg-color-hover: var(--teal-100);
238
- --button-primary-text-color: var(--neutral-800);
239
- --button-secondary-bg-color: color(srgb 0.047058823529411764 0.16470588235294117 0.16470588235294117 / 0.09803921568627451);
240
- --button-secondary-bg-color-hover: color(srgb 0.047058823529411764 0.16470588235294117 0.16470588235294117 / 0.14901960784313725);
241
- --button-secondary-text-color: var(--neutral-800);
242
- --code-bg-color: var(--teal-900);
243
- --color-bg: var(--neutral-000);
244
- --color-bg-2: var(--neutral-100);
245
- --color-bg-3: var(--neutral-200);
246
- --color-disabled-bg: var(--neutral-200);
247
- --color-disabled-border: var(--neutral-400);
248
- --color-disabled-text: var(--neutral-400);
249
- --color-icon: var(--blue-700);
250
- --color-invalid-bg: var(--red-100);
251
- --color-invalid-border: var(--red-600);
252
- --color-invalid-text: var(--red-600);
253
- --color-link: var(--blue-700);
254
- --color-logo-inactive: color(srgb 0.7019607843137254 0.7019607843137254 0.7019607843137254);
255
- --color-logo-spark: var(--teal-400);
256
- --color-logo-type: var(--teal-800);
257
- --color-stroke: color(srgb 0 0 0 / 0.14901960784313725);
258
- --color-success-bg: var(--green-100);
259
- --color-success-border: var(--green-300);
260
- --color-success-text: var(--green-800);
261
- --color-text: var(--neutral-600);
262
- --color-text-accent: var(--teal-000);
263
- --color-text-weak: var(--neutral-500);
264
- --color-text-weaker: var(--neutral-400);
265
- --color-warning-bg: var(--gold-100);
266
- --color-warning-border: var(--gold-300);
267
- --color-warning-text: var(--gold-800);
268
- --eyebrow-text-color: var(--blue-700);
269
- --heading-text-color: var(--neutral-800);
270
- --neutral-000: color(srgb 1 1 1);
271
- --neutral-100: color(srgb 0.9647058823529412 0.9647058823529412 0.9686274509803922);
272
- --neutral-200: color(srgb 0.9137254901960784 0.9215686274509803 0.9294117647058824);
273
- --neutral-300: color(srgb 0.8196078431372549 0.8352941176470589 0.8549019607843137);
274
- --neutral-400: color(srgb 0.615686274509804 0.6549019607843137 0.6980392156862745);
275
- --neutral-500: color(srgb 0.4666666666666667 0.5019607843137255 0.5372549019607843);
276
- --neutral-600: color(srgb 0.32941176470588235 0.35294117647058826 0.3803921568627451);
277
- --neutral-700: color(srgb 0.20784313725490197 0.22745098039215686 0.24313725490196078);
278
- --neutral-800: color(srgb 0.09411764705882353 0.10196078431372549 0.10980392156862745);
279
- --switcher-tab-bg-color: color(srgb 1 1 1 / 0.047058823529411764);
280
- --title-text-color: color(srgb 0.32941176470588235 0.35294117647058826 0.3803921568627451 / 0.7490196078431373);
281
- }
282
-
283
178
  @media (prefers-color-scheme: dark) {
284
179
  :root {
285
180
  --active-switcher-tab-bg-color: color(srgb 0.047058823529411764 0.16470588235294117 0.16470588235294117);
@@ -293,6 +188,9 @@
293
188
  --button-secondary-bg-color: color(srgb 1 1 1 / 0.09803921568627451);
294
189
  --button-secondary-bg-color-hover: color(srgb 0.6549019607843137 1 0.9921568627450981 / 0.14901960784313725);
295
190
  --button-secondary-text-color: var(--teal-200);
191
+ --card-bg-color: var(--teal-900);
192
+ --card-border-color: var(--teal-900);
193
+ --card-border-color-hover: var(--teal-800);
296
194
  --code-bg-color: var(--teal-900);
297
195
  --color-bg: var(--neutral-800);
298
196
  --color-bg-2: var(--neutral-700);
@@ -347,6 +245,9 @@
347
245
  --button-secondary-bg-color: color(srgb 1 1 1 / 0.09803921568627451);
348
246
  --button-secondary-bg-color-hover: color(srgb 0.6549019607843137 1 0.9921568627450981 / 0.14901960784313725);
349
247
  --button-secondary-text-color: var(--teal-200);
248
+ --card-bg-color: var(--teal-900);
249
+ --card-border-color: var(--teal-900);
250
+ --card-border-color-hover: var(--teal-800);
350
251
  --code-bg-color: var(--teal-900);
351
252
  --color-bg: var(--neutral-800);
352
253
  --color-bg-2: var(--neutral-700);
@@ -388,3 +289,59 @@
388
289
  --title-text-color: color(srgb 0.8352941176470589 1 0.996078431372549 / 0.7490196078431373);
389
290
  }
390
291
 
292
+ [data-theme="light"] {
293
+ --active-switcher-tab-bg-color: color(srgb 0.047058823529411764 0.16470588235294117 0.16470588235294117 / 0.047058823529411764);
294
+ --button-outline-bg-color: color(srgb 0 0 0 / 0);
295
+ --button-outline-bg-color-hover: color(srgb 0.19607843137254902 0.9019607843137255 0.8862745098039215 / 0.2);
296
+ --button-outline-stroke-color: var(--neutral-800);
297
+ --button-outline-text-color: var(--neutral-800);
298
+ --button-primary-bg-color: var(--teal-200);
299
+ --button-primary-bg-color-hover: var(--teal-100);
300
+ --button-primary-text-color: var(--neutral-800);
301
+ --button-secondary-bg-color: color(srgb 0.047058823529411764 0.16470588235294117 0.16470588235294117 / 0.09803921568627451);
302
+ --button-secondary-bg-color-hover: color(srgb 0.047058823529411764 0.16470588235294117 0.16470588235294117 / 0.14901960784313725);
303
+ --button-secondary-text-color: var(--neutral-800);
304
+ --card-bg-color: var(--neutral-000);
305
+ --card-border-color: var(--neutral-200);
306
+ --card-border-color-hover: var(--neutral-300);
307
+ --code-bg-color: var(--teal-900);
308
+ --color-bg: var(--neutral-000);
309
+ --color-bg-2: var(--neutral-100);
310
+ --color-bg-3: var(--neutral-200);
311
+ --color-disabled-bg: var(--neutral-200);
312
+ --color-disabled-border: var(--neutral-400);
313
+ --color-disabled-text: var(--neutral-400);
314
+ --color-icon: var(--blue-700);
315
+ --color-invalid-bg: var(--red-100);
316
+ --color-invalid-border: var(--red-600);
317
+ --color-invalid-text: var(--red-600);
318
+ --color-link: var(--blue-700);
319
+ --color-logo-inactive: color(srgb 0.7019607843137254 0.7019607843137254 0.7019607843137254);
320
+ --color-logo-spark: var(--teal-400);
321
+ --color-logo-type: var(--teal-800);
322
+ --color-stroke: color(srgb 0 0 0 / 0.14901960784313725);
323
+ --color-success-bg: var(--green-100);
324
+ --color-success-border: var(--green-300);
325
+ --color-success-text: var(--green-800);
326
+ --color-text: var(--neutral-600);
327
+ --color-text-accent: var(--teal-000);
328
+ --color-text-weak: var(--neutral-500);
329
+ --color-text-weaker: var(--neutral-400);
330
+ --color-warning-bg: var(--gold-100);
331
+ --color-warning-border: var(--gold-300);
332
+ --color-warning-text: var(--gold-800);
333
+ --eyebrow-text-color: var(--blue-700);
334
+ --heading-text-color: var(--neutral-800);
335
+ --neutral-000: color(srgb 1 1 1);
336
+ --neutral-100: color(srgb 0.9647058823529412 0.9647058823529412 0.9686274509803922);
337
+ --neutral-200: color(srgb 0.9137254901960784 0.9215686274509803 0.9294117647058824);
338
+ --neutral-300: color(srgb 0.8196078431372549 0.8352941176470589 0.8549019607843137);
339
+ --neutral-400: color(srgb 0.615686274509804 0.6549019607843137 0.6980392156862745);
340
+ --neutral-500: color(srgb 0.4666666666666667 0.5019607843137255 0.5372549019607843);
341
+ --neutral-600: color(srgb 0.32941176470588235 0.35294117647058826 0.3803921568627451);
342
+ --neutral-700: color(srgb 0.20784313725490197 0.22745098039215686 0.24313725490196078);
343
+ --neutral-800: color(srgb 0.09411764705882353 0.10196078431372549 0.10980392156862745);
344
+ --switcher-tab-bg-color: color(srgb 1 1 1 / 0.047058823529411764);
345
+ --title-text-color: color(srgb 0.32941176470588235 0.35294117647058826 0.3803921568627451 / 0.7490196078431373);
346
+ }
347
+
@@ -6,4 +6,4 @@
6
6
  position: absolute;
7
7
  white-space: nowrap;
8
8
  width: 1px;
9
- }
9
+ }
@@ -0,0 +1,8 @@
1
+ export type BUTTON_VARIANTS = 'primary' | 'secondary' | 'outline' | 'ghost';
2
+
3
+ export interface CallToActionProps {
4
+ id?: string;
5
+ text: string;
6
+ href: string;
7
+ variant?: BUTTON_VARIANTS;
8
+ }