@deepgram/styles 0.0.9 → 0.1.3
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/README.md +1 -1
- package/design-system.yaml +2591 -0
- package/dist/deepgram.css +2 -2966
- package/dist/deepgram.expanded.css +450 -644
- package/lib/deepgram.css +391 -470
- package/package.json +7 -3
- package/tailwind.config.js +78 -109
|
@@ -0,0 +1,2591 @@
|
|
|
1
|
+
# yaml-language-server: $schema=https://design.dx.deepgram.com/.well-known/design-system-schema-v1.json
|
|
2
|
+
|
|
3
|
+
version: "1.0"
|
|
4
|
+
|
|
5
|
+
# =============================================================================
|
|
6
|
+
# DESIGN TOKENS
|
|
7
|
+
# =============================================================================
|
|
8
|
+
tokens:
|
|
9
|
+
variables:
|
|
10
|
+
"--dg-base-font-size": "16px"
|
|
11
|
+
"--dg-border-width": "0.125rem"
|
|
12
|
+
"--dg-primary": "#13ef95"
|
|
13
|
+
"--dg-secondary": "#149afb"
|
|
14
|
+
|
|
15
|
+
colors:
|
|
16
|
+
brand:
|
|
17
|
+
primary:
|
|
18
|
+
value: "var(--dg-primary, #13ef95)"
|
|
19
|
+
variable: "--dg-primary"
|
|
20
|
+
fallback: "#13ef95"
|
|
21
|
+
secondary:
|
|
22
|
+
value: "var(--dg-secondary, #149afb)"
|
|
23
|
+
variable: "--dg-secondary"
|
|
24
|
+
fallback: "#149afb"
|
|
25
|
+
|
|
26
|
+
background:
|
|
27
|
+
almost-black: "#050506"
|
|
28
|
+
default: "#0b0b0c"
|
|
29
|
+
charcoal: "#1a1a1f"
|
|
30
|
+
translucent: "rgba(0, 0, 0, 0.5)"
|
|
31
|
+
|
|
32
|
+
border:
|
|
33
|
+
default: "#2c2c33"
|
|
34
|
+
pebble: "#4e4e52"
|
|
35
|
+
slate: "#949498"
|
|
36
|
+
|
|
37
|
+
text:
|
|
38
|
+
default: "#fbfbff"
|
|
39
|
+
fog: "#edede2"
|
|
40
|
+
platinum: "#e1e1e5"
|
|
41
|
+
muted: "#949498"
|
|
42
|
+
|
|
43
|
+
status:
|
|
44
|
+
success: "#12b76a"
|
|
45
|
+
warning: "#fec84b"
|
|
46
|
+
danger: "#f04438"
|
|
47
|
+
|
|
48
|
+
gradient:
|
|
49
|
+
start: "#008fc1"
|
|
50
|
+
end: "#00f099"
|
|
51
|
+
|
|
52
|
+
fonts:
|
|
53
|
+
sans:
|
|
54
|
+
family: ["Inter", "-apple-system", "BlinkMacSystemFont", "Segoe UI", "Roboto", "Helvetica", "Arial", "sans-serif"]
|
|
55
|
+
tailwind-key: "dg-sans"
|
|
56
|
+
noto:
|
|
57
|
+
family: ["Noto Sans", "-apple-system", "BlinkMacSystemFont", "Segoe UI", "Roboto", "Helvetica", "Arial", "sans-serif"]
|
|
58
|
+
tailwind-key: "dg-noto"
|
|
59
|
+
mono:
|
|
60
|
+
family: ["Fira Code", "Monaco", "Consolas", "Courier New", "monospace"]
|
|
61
|
+
tailwind-key: "dg-mono"
|
|
62
|
+
|
|
63
|
+
spacing:
|
|
64
|
+
xs: "0.25rem"
|
|
65
|
+
sm: "0.5rem"
|
|
66
|
+
md: "1rem"
|
|
67
|
+
lg: "1.5rem"
|
|
68
|
+
xl: "2rem"
|
|
69
|
+
2xl: "3rem"
|
|
70
|
+
"128": "32rem"
|
|
71
|
+
|
|
72
|
+
border-radius:
|
|
73
|
+
sm: "0.25rem"
|
|
74
|
+
md: "0.5rem"
|
|
75
|
+
lg: "0.75rem"
|
|
76
|
+
xl: "1rem"
|
|
77
|
+
|
|
78
|
+
shadows:
|
|
79
|
+
sm: "0 0.0625rem 0.125rem 0 rgba(0, 0, 0, 0.05)"
|
|
80
|
+
md: "0 0.25rem 0.375rem -0.0625rem rgba(0, 0, 0, 0.1), 0 0.125rem 0.25rem -0.0625rem rgba(0, 0, 0, 0.06)"
|
|
81
|
+
lg: "0 0.625rem 0.9375rem -0.1875rem rgba(0, 0, 0, 0.1), 0 0.25rem 0.375rem -0.125rem rgba(0, 0, 0, 0.05)"
|
|
82
|
+
|
|
83
|
+
logos:
|
|
84
|
+
primary:
|
|
85
|
+
path: "assets/deepgram-dark.svg"
|
|
86
|
+
alt: "Deepgram"
|
|
87
|
+
|
|
88
|
+
# =============================================================================
|
|
89
|
+
# BASE STYLES (applied via Tailwind plugin addBase)
|
|
90
|
+
# =============================================================================
|
|
91
|
+
base:
|
|
92
|
+
html:
|
|
93
|
+
properties:
|
|
94
|
+
fontSize: "var(--dg-base-font-size, 16px)"
|
|
95
|
+
scrollBehavior: "smooth"
|
|
96
|
+
body:
|
|
97
|
+
properties:
|
|
98
|
+
fontFamily: "theme(fontFamily.dg-sans)"
|
|
99
|
+
WebkitFontSmoothing: "antialiased"
|
|
100
|
+
MozOsxFontSmoothing: "grayscale"
|
|
101
|
+
backgroundColor: "theme(colors.dg-background)"
|
|
102
|
+
color: "theme(colors.dg-text)"
|
|
103
|
+
lineHeight: "theme(lineHeight.normal)"
|
|
104
|
+
"h1, h2, h3, h4, h5, h6":
|
|
105
|
+
properties:
|
|
106
|
+
fontFamily: "theme(fontFamily.dg-noto)"
|
|
107
|
+
fontWeight: "theme(fontWeight.bold)"
|
|
108
|
+
h1:
|
|
109
|
+
properties:
|
|
110
|
+
fontSize: "theme(fontSize.4xl)"
|
|
111
|
+
media:
|
|
112
|
+
"(min-width: 768px)":
|
|
113
|
+
properties:
|
|
114
|
+
fontSize: "theme(fontSize.5xl)"
|
|
115
|
+
h2:
|
|
116
|
+
properties:
|
|
117
|
+
fontSize: "theme(fontSize.3xl)"
|
|
118
|
+
media:
|
|
119
|
+
"(min-width: 768px)":
|
|
120
|
+
properties:
|
|
121
|
+
fontSize: "theme(fontSize.4xl)"
|
|
122
|
+
h3:
|
|
123
|
+
properties:
|
|
124
|
+
fontSize: "theme(fontSize.2xl)"
|
|
125
|
+
media:
|
|
126
|
+
"(min-width: 768px)":
|
|
127
|
+
properties:
|
|
128
|
+
fontSize: "theme(fontSize.3xl)"
|
|
129
|
+
h4:
|
|
130
|
+
properties:
|
|
131
|
+
fontSize: "theme(fontSize.xl)"
|
|
132
|
+
media:
|
|
133
|
+
"(min-width: 768px)":
|
|
134
|
+
properties:
|
|
135
|
+
fontSize: "theme(fontSize.2xl)"
|
|
136
|
+
"code, pre":
|
|
137
|
+
properties:
|
|
138
|
+
fontFamily: "theme(fontFamily.dg-mono)"
|
|
139
|
+
a:
|
|
140
|
+
properties:
|
|
141
|
+
color: "theme(colors.dg-primary)"
|
|
142
|
+
transitionProperty: "color"
|
|
143
|
+
transitionDuration: "200ms"
|
|
144
|
+
"&:hover":
|
|
145
|
+
opacity: "0.8"
|
|
146
|
+
|
|
147
|
+
# =============================================================================
|
|
148
|
+
# CUSTOM UTILITIES (applied via Tailwind plugin addUtilities)
|
|
149
|
+
# =============================================================================
|
|
150
|
+
utilities:
|
|
151
|
+
".dg-gradient-border":
|
|
152
|
+
properties:
|
|
153
|
+
backgroundImage: "linear-gradient(rgb(0, 0, 0), rgb(0, 0, 0)), linear-gradient(90deg, color-mix(in srgb, var(--dg-secondary, #149afb) 70%, #000), color-mix(in srgb, var(--dg-primary, #13ef95) 70%, #000), color-mix(in srgb, var(--dg-secondary, #149afb) 70%, #000), color-mix(in srgb, var(--dg-primary, #13ef95) 70%, #000))"
|
|
154
|
+
backgroundOrigin: "padding-box, border-box"
|
|
155
|
+
backgroundClip: "padding-box, border-box"
|
|
156
|
+
backgroundRepeat: "no-repeat"
|
|
157
|
+
backgroundPosition: "center"
|
|
158
|
+
backgroundSize: "100% 100%"
|
|
159
|
+
backgroundColor: "rgb(0, 0, 0)"
|
|
160
|
+
".dg-bg-reset":
|
|
161
|
+
properties:
|
|
162
|
+
backgroundImage: "none"
|
|
163
|
+
backgroundOrigin: "padding-box"
|
|
164
|
+
backgroundClip: "border-box"
|
|
165
|
+
backgroundRepeat: "repeat"
|
|
166
|
+
backgroundPosition: "0% 0%"
|
|
167
|
+
backgroundSize: "auto"
|
|
168
|
+
".dg-glow-cyan-green":
|
|
169
|
+
properties:
|
|
170
|
+
boxShadow: "color-mix(in srgb, var(--dg-primary, #13ef95) 20%, transparent) 0.375rem 0 0.9375rem 0, color-mix(in srgb, var(--dg-secondary, #149afb) 20%, transparent) -0.375rem 0 0.9375rem 0"
|
|
171
|
+
".dg-shadow-subtle":
|
|
172
|
+
properties:
|
|
173
|
+
boxShadow: "rgba(38, 44, 52, 0.05) 0 0.0625rem 0.125rem"
|
|
174
|
+
|
|
175
|
+
# =============================================================================
|
|
176
|
+
# COMPONENTS
|
|
177
|
+
# =============================================================================
|
|
178
|
+
components:
|
|
179
|
+
|
|
180
|
+
# ---------------------------------------------------------------------------
|
|
181
|
+
# BUTTONS
|
|
182
|
+
# ---------------------------------------------------------------------------
|
|
183
|
+
btn:
|
|
184
|
+
metadata:
|
|
185
|
+
title: "Primary Button"
|
|
186
|
+
description: "Main call-to-action button with primary brand color"
|
|
187
|
+
category: "application-ui"
|
|
188
|
+
section: "Elements"
|
|
189
|
+
subsection: "Buttons"
|
|
190
|
+
tags: [button, primary, cta, action]
|
|
191
|
+
css:
|
|
192
|
+
".dg-btn":
|
|
193
|
+
apply: "inline-flex items-center justify-center px-5 py-1.5 leading-[2] font-dg-sans font-semibold text-base rounded capitalize whitespace-nowrap cursor-pointer select-none outline-none w-fit disabled:opacity-50 disabled:cursor-not-allowed"
|
|
194
|
+
properties:
|
|
195
|
+
gap: "0.5rem"
|
|
196
|
+
height: "3rem"
|
|
197
|
+
variants:
|
|
198
|
+
sm:
|
|
199
|
+
css:
|
|
200
|
+
".dg-btn--sm":
|
|
201
|
+
apply: "px-5 py-2 font-bold text-sm"
|
|
202
|
+
properties:
|
|
203
|
+
height: "2.25rem"
|
|
204
|
+
primary:
|
|
205
|
+
css:
|
|
206
|
+
".dg-btn--primary":
|
|
207
|
+
apply: "border border-transparent relative dg-text-white dg-gradient-border dg-glow-cyan-green"
|
|
208
|
+
".dg-btn--primary:hover":
|
|
209
|
+
apply: "border-transparent text-black dg-bg-reset bg-white dg-shadow-subtle"
|
|
210
|
+
secondary:
|
|
211
|
+
css:
|
|
212
|
+
".dg-btn--secondary":
|
|
213
|
+
apply: "border border-transparent bg-white text-black"
|
|
214
|
+
".dg-btn--secondary:hover":
|
|
215
|
+
apply: "border border-white bg-black dg-text-white"
|
|
216
|
+
ghost:
|
|
217
|
+
css:
|
|
218
|
+
".dg-btn--ghost":
|
|
219
|
+
apply: "border border-dg-slate bg-transparent dg-text-white"
|
|
220
|
+
".dg-btn--ghost:hover":
|
|
221
|
+
apply: "border-transparent text-black dg-bg-reset bg-white dg-shadow-subtle"
|
|
222
|
+
danger-ghost:
|
|
223
|
+
css:
|
|
224
|
+
".dg-btn--danger-ghost":
|
|
225
|
+
apply: "border border-dg-danger bg-transparent dg-text-white"
|
|
226
|
+
".dg-btn--danger-ghost:hover":
|
|
227
|
+
apply: "border-transparent bg-dg-danger dg-text-white"
|
|
228
|
+
icon-only:
|
|
229
|
+
css:
|
|
230
|
+
".dg-btn--icon-only":
|
|
231
|
+
apply: "px-2 size-12"
|
|
232
|
+
".dg-btn--icon-only.dg-btn--sm":
|
|
233
|
+
apply: "size-6"
|
|
234
|
+
collapse:
|
|
235
|
+
css:
|
|
236
|
+
".dg-btn--collapse":
|
|
237
|
+
apply: "inline-flex"
|
|
238
|
+
media:
|
|
239
|
+
"(max-width: 768px)":
|
|
240
|
+
".dg-btn--collapse":
|
|
241
|
+
apply: "w-full justify-center"
|
|
242
|
+
elements:
|
|
243
|
+
icon:
|
|
244
|
+
css:
|
|
245
|
+
".dg-btn i, .dg-btn svg":
|
|
246
|
+
properties:
|
|
247
|
+
flex-shrink: "0"
|
|
248
|
+
examples:
|
|
249
|
+
- title: "Primary Button"
|
|
250
|
+
description: "Default primary button element"
|
|
251
|
+
ast:
|
|
252
|
+
tag: button
|
|
253
|
+
props:
|
|
254
|
+
type: button
|
|
255
|
+
class: "dg-btn dg-btn--primary"
|
|
256
|
+
children:
|
|
257
|
+
- "Primary Action"
|
|
258
|
+
- title: "Primary Button as Link"
|
|
259
|
+
description: "Button styles applied to a link - perfect for navigation CTAs"
|
|
260
|
+
ast:
|
|
261
|
+
tag: a
|
|
262
|
+
props:
|
|
263
|
+
href: "#"
|
|
264
|
+
class: "dg-btn dg-btn--primary"
|
|
265
|
+
children:
|
|
266
|
+
- "Get Started"
|
|
267
|
+
- title: "Primary Button with Icon Before"
|
|
268
|
+
description: "Icon placed before text"
|
|
269
|
+
ast:
|
|
270
|
+
tag: button
|
|
271
|
+
props:
|
|
272
|
+
type: button
|
|
273
|
+
class: "dg-btn dg-btn--primary"
|
|
274
|
+
children:
|
|
275
|
+
- tag: i
|
|
276
|
+
props:
|
|
277
|
+
class: "fas fa-play"
|
|
278
|
+
- "Start Recording"
|
|
279
|
+
- title: "Primary Link with Icon After"
|
|
280
|
+
description: "Link styled as button with trailing icon"
|
|
281
|
+
ast:
|
|
282
|
+
tag: a
|
|
283
|
+
props:
|
|
284
|
+
href: "#"
|
|
285
|
+
class: "dg-btn dg-btn--primary"
|
|
286
|
+
children:
|
|
287
|
+
- "Continue"
|
|
288
|
+
- tag: i
|
|
289
|
+
props:
|
|
290
|
+
class: "fas fa-arrow-right"
|
|
291
|
+
- title: "Small Primary Button"
|
|
292
|
+
description: "Compact version for tight spaces"
|
|
293
|
+
ast:
|
|
294
|
+
tag: button
|
|
295
|
+
props:
|
|
296
|
+
type: button
|
|
297
|
+
class: "dg-btn dg-btn--primary dg-btn--sm"
|
|
298
|
+
children:
|
|
299
|
+
- "Primary"
|
|
300
|
+
- title: "Small Primary Link"
|
|
301
|
+
description: "Compact link styled as button"
|
|
302
|
+
ast:
|
|
303
|
+
tag: a
|
|
304
|
+
props:
|
|
305
|
+
href: "#"
|
|
306
|
+
class: "dg-btn dg-btn--primary dg-btn--sm"
|
|
307
|
+
children:
|
|
308
|
+
- "Sign Up"
|
|
309
|
+
- title: "Custom Color Primary Button"
|
|
310
|
+
description: "Primary button with custom brand colors using CSS variables"
|
|
311
|
+
ast:
|
|
312
|
+
tag: div
|
|
313
|
+
props:
|
|
314
|
+
style: "--dg-primary: #a855f7; --dg-secondary: #ec4899;"
|
|
315
|
+
children:
|
|
316
|
+
- tag: button
|
|
317
|
+
props:
|
|
318
|
+
type: button
|
|
319
|
+
class: "dg-btn dg-btn--primary"
|
|
320
|
+
children:
|
|
321
|
+
- tag: i
|
|
322
|
+
props:
|
|
323
|
+
class: "fas fa-sparkles"
|
|
324
|
+
- "Custom Purple Brand"
|
|
325
|
+
|
|
326
|
+
btn-secondary:
|
|
327
|
+
metadata:
|
|
328
|
+
title: "Secondary Button"
|
|
329
|
+
description: "Secondary action button with alternative styling"
|
|
330
|
+
category: "application-ui"
|
|
331
|
+
section: "Elements"
|
|
332
|
+
subsection: "Buttons"
|
|
333
|
+
tags: [button, secondary, action]
|
|
334
|
+
examples:
|
|
335
|
+
- title: "Secondary Button"
|
|
336
|
+
description: "Default secondary button element"
|
|
337
|
+
ast:
|
|
338
|
+
tag: button
|
|
339
|
+
props:
|
|
340
|
+
type: button
|
|
341
|
+
class: "dg-btn dg-btn--secondary"
|
|
342
|
+
children:
|
|
343
|
+
- "Secondary Action"
|
|
344
|
+
- title: "Secondary Button as Link"
|
|
345
|
+
description: "Button styles applied to a link"
|
|
346
|
+
ast:
|
|
347
|
+
tag: a
|
|
348
|
+
props:
|
|
349
|
+
href: "#"
|
|
350
|
+
class: "dg-btn dg-btn--secondary"
|
|
351
|
+
children:
|
|
352
|
+
- "Learn More"
|
|
353
|
+
- title: "Secondary Button with Icon Before"
|
|
354
|
+
description: "Icon placed before text"
|
|
355
|
+
ast:
|
|
356
|
+
tag: button
|
|
357
|
+
props:
|
|
358
|
+
type: button
|
|
359
|
+
class: "dg-btn dg-btn--secondary"
|
|
360
|
+
children:
|
|
361
|
+
- tag: i
|
|
362
|
+
props:
|
|
363
|
+
class: "fas fa-download"
|
|
364
|
+
- "Download"
|
|
365
|
+
- title: "Secondary Link with Icon After"
|
|
366
|
+
description: "Link styled as button with trailing icon"
|
|
367
|
+
ast:
|
|
368
|
+
tag: a
|
|
369
|
+
props:
|
|
370
|
+
href: "#"
|
|
371
|
+
class: "dg-btn dg-btn--secondary"
|
|
372
|
+
children:
|
|
373
|
+
- "View Docs"
|
|
374
|
+
- tag: i
|
|
375
|
+
props:
|
|
376
|
+
class: "fas fa-external-link-alt"
|
|
377
|
+
- title: "Small Secondary Button"
|
|
378
|
+
description: "Compact version for tight spaces"
|
|
379
|
+
ast:
|
|
380
|
+
tag: button
|
|
381
|
+
props:
|
|
382
|
+
type: button
|
|
383
|
+
class: "dg-btn dg-btn--secondary dg-btn--sm"
|
|
384
|
+
children:
|
|
385
|
+
- "Cancel"
|
|
386
|
+
- title: "Small Secondary Link"
|
|
387
|
+
description: "Compact link styled as secondary button"
|
|
388
|
+
ast:
|
|
389
|
+
tag: a
|
|
390
|
+
props:
|
|
391
|
+
href: "#"
|
|
392
|
+
class: "dg-btn dg-btn--secondary dg-btn--sm"
|
|
393
|
+
children:
|
|
394
|
+
- "More Info"
|
|
395
|
+
|
|
396
|
+
btn-ghost:
|
|
397
|
+
metadata:
|
|
398
|
+
title: "Ghost Button"
|
|
399
|
+
description: "Minimal button with transparent background and border"
|
|
400
|
+
category: "application-ui"
|
|
401
|
+
section: "Elements"
|
|
402
|
+
subsection: "Buttons"
|
|
403
|
+
tags: [button, ghost, minimal, tertiary]
|
|
404
|
+
examples:
|
|
405
|
+
- title: "Ghost Button"
|
|
406
|
+
description: "Default ghost button element"
|
|
407
|
+
ast:
|
|
408
|
+
tag: button
|
|
409
|
+
props:
|
|
410
|
+
type: button
|
|
411
|
+
class: "dg-btn dg-btn--ghost"
|
|
412
|
+
children:
|
|
413
|
+
- "Ghost Action"
|
|
414
|
+
- title: "Ghost Button as Link"
|
|
415
|
+
description: "Button styles applied to a link"
|
|
416
|
+
ast:
|
|
417
|
+
tag: a
|
|
418
|
+
props:
|
|
419
|
+
href: "#"
|
|
420
|
+
class: "dg-btn dg-btn--ghost"
|
|
421
|
+
children:
|
|
422
|
+
- "View Details"
|
|
423
|
+
- title: "Ghost Button with Icon Before"
|
|
424
|
+
description: "Icon placed before text"
|
|
425
|
+
ast:
|
|
426
|
+
tag: button
|
|
427
|
+
props:
|
|
428
|
+
type: button
|
|
429
|
+
class: "dg-btn dg-btn--ghost"
|
|
430
|
+
children:
|
|
431
|
+
- tag: i
|
|
432
|
+
props:
|
|
433
|
+
class: "fas fa-cog"
|
|
434
|
+
- "Settings"
|
|
435
|
+
- title: "Ghost Link with Icon After"
|
|
436
|
+
description: "Link styled as button with trailing icon"
|
|
437
|
+
ast:
|
|
438
|
+
tag: a
|
|
439
|
+
props:
|
|
440
|
+
href: "#"
|
|
441
|
+
class: "dg-btn dg-btn--ghost"
|
|
442
|
+
children:
|
|
443
|
+
- "Explore"
|
|
444
|
+
- tag: i
|
|
445
|
+
props:
|
|
446
|
+
class: "fas fa-chevron-right"
|
|
447
|
+
- title: "Small Ghost Button"
|
|
448
|
+
description: "Compact version for tight spaces"
|
|
449
|
+
ast:
|
|
450
|
+
tag: button
|
|
451
|
+
props:
|
|
452
|
+
type: button
|
|
453
|
+
class: "dg-btn dg-btn--ghost dg-btn--sm"
|
|
454
|
+
children:
|
|
455
|
+
- "Close"
|
|
456
|
+
- title: "Small Ghost Link"
|
|
457
|
+
description: "Compact link styled as ghost button"
|
|
458
|
+
ast:
|
|
459
|
+
tag: a
|
|
460
|
+
props:
|
|
461
|
+
href: "#"
|
|
462
|
+
class: "dg-btn dg-btn--ghost dg-btn--sm"
|
|
463
|
+
children:
|
|
464
|
+
- "Skip"
|
|
465
|
+
|
|
466
|
+
btn-danger-ghost:
|
|
467
|
+
metadata:
|
|
468
|
+
title: "Danger Ghost Button"
|
|
469
|
+
description: "Destructive action button with ghost styling"
|
|
470
|
+
category: "application-ui"
|
|
471
|
+
section: "Elements"
|
|
472
|
+
subsection: "Buttons"
|
|
473
|
+
tags: [button, danger, ghost, destructive, delete]
|
|
474
|
+
examples:
|
|
475
|
+
- title: "Danger Ghost Button"
|
|
476
|
+
ast:
|
|
477
|
+
tag: button
|
|
478
|
+
props:
|
|
479
|
+
type: button
|
|
480
|
+
class: "dg-btn dg-btn--danger-ghost"
|
|
481
|
+
children:
|
|
482
|
+
- "Delete"
|
|
483
|
+
- title: "Danger Ghost Button as Link"
|
|
484
|
+
ast:
|
|
485
|
+
tag: a
|
|
486
|
+
props:
|
|
487
|
+
href: "#"
|
|
488
|
+
class: "dg-btn dg-btn--danger-ghost"
|
|
489
|
+
children:
|
|
490
|
+
- "Remove Account"
|
|
491
|
+
- title: "Danger Ghost Button with Icon"
|
|
492
|
+
ast:
|
|
493
|
+
tag: button
|
|
494
|
+
props:
|
|
495
|
+
type: button
|
|
496
|
+
class: "dg-btn dg-btn--danger-ghost"
|
|
497
|
+
children:
|
|
498
|
+
- tag: i
|
|
499
|
+
props:
|
|
500
|
+
class: "fas fa-trash"
|
|
501
|
+
- "Delete Recording"
|
|
502
|
+
- title: "Small Danger Ghost Button"
|
|
503
|
+
ast:
|
|
504
|
+
tag: button
|
|
505
|
+
props:
|
|
506
|
+
type: button
|
|
507
|
+
class: "dg-btn dg-btn--danger-ghost dg-btn--sm"
|
|
508
|
+
children:
|
|
509
|
+
- "Remove"
|
|
510
|
+
- title: "Small Danger Ghost Link"
|
|
511
|
+
ast:
|
|
512
|
+
tag: a
|
|
513
|
+
props:
|
|
514
|
+
href: "#"
|
|
515
|
+
class: "dg-btn dg-btn--danger-ghost dg-btn--sm"
|
|
516
|
+
children:
|
|
517
|
+
- "Discard"
|
|
518
|
+
|
|
519
|
+
btn-icon:
|
|
520
|
+
metadata:
|
|
521
|
+
title: "Icon Button"
|
|
522
|
+
description: "Icon-only button for compact actions"
|
|
523
|
+
category: "application-ui"
|
|
524
|
+
section: "Elements"
|
|
525
|
+
subsection: "Buttons"
|
|
526
|
+
tags: [button, icon, compact]
|
|
527
|
+
examples:
|
|
528
|
+
- title: "Icon Button"
|
|
529
|
+
ast:
|
|
530
|
+
tag: button
|
|
531
|
+
props:
|
|
532
|
+
type: button
|
|
533
|
+
class: "dg-btn dg-btn--primary dg-btn--icon-only"
|
|
534
|
+
children:
|
|
535
|
+
- tag: i
|
|
536
|
+
props:
|
|
537
|
+
class: "fas fa-microphone"
|
|
538
|
+
- title: "Small Icon Button"
|
|
539
|
+
ast:
|
|
540
|
+
tag: button
|
|
541
|
+
props:
|
|
542
|
+
type: button
|
|
543
|
+
class: "dg-btn dg-btn--ghost dg-btn--icon-only dg-btn--sm"
|
|
544
|
+
children:
|
|
545
|
+
- tag: i
|
|
546
|
+
props:
|
|
547
|
+
class: "fas fa-times"
|
|
548
|
+
|
|
549
|
+
btn-small:
|
|
550
|
+
metadata:
|
|
551
|
+
title: "Small Button"
|
|
552
|
+
description: "Compact button for tight spaces"
|
|
553
|
+
category: "application-ui"
|
|
554
|
+
section: "Elements"
|
|
555
|
+
subsection: "Buttons"
|
|
556
|
+
tags: [button, small, compact]
|
|
557
|
+
examples:
|
|
558
|
+
- title: "Small Primary Button"
|
|
559
|
+
description: "Compact primary button for tight spaces"
|
|
560
|
+
ast:
|
|
561
|
+
tag: button
|
|
562
|
+
props:
|
|
563
|
+
type: button
|
|
564
|
+
class: "dg-btn dg-btn--primary dg-btn--sm"
|
|
565
|
+
children:
|
|
566
|
+
- "Save"
|
|
567
|
+
- title: "Small Primary Link"
|
|
568
|
+
description: "Compact link styled as primary button"
|
|
569
|
+
ast:
|
|
570
|
+
tag: a
|
|
571
|
+
props:
|
|
572
|
+
href: "#"
|
|
573
|
+
class: "dg-btn dg-btn--primary dg-btn--sm"
|
|
574
|
+
children:
|
|
575
|
+
- "Edit"
|
|
576
|
+
- title: "Small Secondary Button"
|
|
577
|
+
ast:
|
|
578
|
+
tag: button
|
|
579
|
+
props:
|
|
580
|
+
type: button
|
|
581
|
+
class: "dg-btn dg-btn--secondary dg-btn--sm"
|
|
582
|
+
children:
|
|
583
|
+
- "Cancel"
|
|
584
|
+
- title: "Small Secondary Link"
|
|
585
|
+
ast:
|
|
586
|
+
tag: a
|
|
587
|
+
props:
|
|
588
|
+
href: "#"
|
|
589
|
+
class: "dg-btn dg-btn--secondary dg-btn--sm"
|
|
590
|
+
children:
|
|
591
|
+
- "View"
|
|
592
|
+
- title: "Small Ghost Button"
|
|
593
|
+
ast:
|
|
594
|
+
tag: button
|
|
595
|
+
props:
|
|
596
|
+
type: button
|
|
597
|
+
class: "dg-btn dg-btn--ghost dg-btn--sm"
|
|
598
|
+
children:
|
|
599
|
+
- "Close"
|
|
600
|
+
- title: "Small Ghost Link"
|
|
601
|
+
ast:
|
|
602
|
+
tag: a
|
|
603
|
+
props:
|
|
604
|
+
href: "#"
|
|
605
|
+
class: "dg-btn dg-btn--ghost dg-btn--sm"
|
|
606
|
+
children:
|
|
607
|
+
- "Skip"
|
|
608
|
+
|
|
609
|
+
btn-collapse:
|
|
610
|
+
metadata:
|
|
611
|
+
title: "Collapse Button"
|
|
612
|
+
description: "Responsive button that expands full-width on mobile"
|
|
613
|
+
category: "application-ui"
|
|
614
|
+
section: "Elements"
|
|
615
|
+
subsection: "Buttons"
|
|
616
|
+
tags: [button, responsive, mobile]
|
|
617
|
+
examples:
|
|
618
|
+
- title: "Collapse Primary Button"
|
|
619
|
+
ast:
|
|
620
|
+
tag: button
|
|
621
|
+
props:
|
|
622
|
+
type: button
|
|
623
|
+
class: "dg-btn dg-btn--primary dg-btn--collapse"
|
|
624
|
+
children:
|
|
625
|
+
- "Full Width on Mobile"
|
|
626
|
+
- title: "Collapse Ghost Button"
|
|
627
|
+
ast:
|
|
628
|
+
tag: button
|
|
629
|
+
props:
|
|
630
|
+
type: button
|
|
631
|
+
class: "dg-btn dg-btn--ghost dg-btn--collapse"
|
|
632
|
+
children:
|
|
633
|
+
- "Responsive Ghost"
|
|
634
|
+
|
|
635
|
+
# ---------------------------------------------------------------------------
|
|
636
|
+
# BUTTON GROUPS
|
|
637
|
+
# ---------------------------------------------------------------------------
|
|
638
|
+
action-group:
|
|
639
|
+
metadata:
|
|
640
|
+
title: "Button Group"
|
|
641
|
+
description: "Horizontal group of buttons with consistent spacing"
|
|
642
|
+
category: "application-ui"
|
|
643
|
+
section: "Elements"
|
|
644
|
+
subsection: "Button Groups"
|
|
645
|
+
tags: [button, group, actions]
|
|
646
|
+
css:
|
|
647
|
+
".dg-action-group":
|
|
648
|
+
apply: "flex flex-wrap justify-center gap-4"
|
|
649
|
+
media:
|
|
650
|
+
"(max-width: 640px)":
|
|
651
|
+
".dg-action-group":
|
|
652
|
+
apply: "flex-col items-stretch"
|
|
653
|
+
".dg-action-group .dg-btn":
|
|
654
|
+
apply: "w-full"
|
|
655
|
+
examples:
|
|
656
|
+
- title: "Button Group"
|
|
657
|
+
ast:
|
|
658
|
+
tag: div
|
|
659
|
+
props:
|
|
660
|
+
class: "dg-action-group"
|
|
661
|
+
children:
|
|
662
|
+
- tag: button
|
|
663
|
+
props:
|
|
664
|
+
type: button
|
|
665
|
+
class: "dg-btn dg-btn--primary"
|
|
666
|
+
children:
|
|
667
|
+
- "Primary"
|
|
668
|
+
- tag: button
|
|
669
|
+
props:
|
|
670
|
+
type: button
|
|
671
|
+
class: "dg-btn dg-btn--secondary"
|
|
672
|
+
children:
|
|
673
|
+
- "Secondary"
|
|
674
|
+
- tag: button
|
|
675
|
+
props:
|
|
676
|
+
type: button
|
|
677
|
+
class: "dg-btn dg-btn--ghost"
|
|
678
|
+
children:
|
|
679
|
+
- "Ghost"
|
|
680
|
+
- title: "Multiple Actions"
|
|
681
|
+
ast:
|
|
682
|
+
tag: div
|
|
683
|
+
props:
|
|
684
|
+
class: "dg-action-group"
|
|
685
|
+
children:
|
|
686
|
+
- tag: button
|
|
687
|
+
props:
|
|
688
|
+
type: button
|
|
689
|
+
class: "dg-btn dg-btn--primary"
|
|
690
|
+
children:
|
|
691
|
+
- "Save Changes"
|
|
692
|
+
- tag: button
|
|
693
|
+
props:
|
|
694
|
+
type: button
|
|
695
|
+
class: "dg-btn dg-btn--ghost"
|
|
696
|
+
children:
|
|
697
|
+
- "Cancel"
|
|
698
|
+
- title: "Action Group with Icons"
|
|
699
|
+
ast:
|
|
700
|
+
tag: div
|
|
701
|
+
props:
|
|
702
|
+
class: "dg-action-group"
|
|
703
|
+
children:
|
|
704
|
+
- tag: button
|
|
705
|
+
props:
|
|
706
|
+
type: button
|
|
707
|
+
class: "dg-btn dg-btn--primary"
|
|
708
|
+
children:
|
|
709
|
+
- tag: i
|
|
710
|
+
props:
|
|
711
|
+
class: "fas fa-play"
|
|
712
|
+
- "Start"
|
|
713
|
+
- tag: button
|
|
714
|
+
props:
|
|
715
|
+
type: button
|
|
716
|
+
class: "dg-btn dg-btn--danger-ghost"
|
|
717
|
+
children:
|
|
718
|
+
- tag: i
|
|
719
|
+
props:
|
|
720
|
+
class: "fas fa-stop"
|
|
721
|
+
- "Stop"
|
|
722
|
+
|
|
723
|
+
# ---------------------------------------------------------------------------
|
|
724
|
+
# LAYOUT - SECTIONS
|
|
725
|
+
# ---------------------------------------------------------------------------
|
|
726
|
+
section:
|
|
727
|
+
metadata:
|
|
728
|
+
title: "Section"
|
|
729
|
+
description: "Reusable content section with responsive padding"
|
|
730
|
+
category: "application-ui"
|
|
731
|
+
section: "Layout"
|
|
732
|
+
subsection: "Containers"
|
|
733
|
+
tags: [section, layout, container]
|
|
734
|
+
css:
|
|
735
|
+
".dg-section":
|
|
736
|
+
apply: "w-full"
|
|
737
|
+
properties:
|
|
738
|
+
padding: "0.75rem"
|
|
739
|
+
margin-bottom: "1rem"
|
|
740
|
+
media:
|
|
741
|
+
"(min-width: 640px)":
|
|
742
|
+
".dg-section":
|
|
743
|
+
properties:
|
|
744
|
+
padding: "1.25rem 1rem"
|
|
745
|
+
margin-bottom: "1.5rem"
|
|
746
|
+
"(min-width: 1024px)":
|
|
747
|
+
".dg-section":
|
|
748
|
+
properties:
|
|
749
|
+
padding: "2rem 1.5rem"
|
|
750
|
+
margin-bottom: "2rem"
|
|
751
|
+
variants:
|
|
752
|
+
compact:
|
|
753
|
+
css:
|
|
754
|
+
".dg-section--compact":
|
|
755
|
+
properties:
|
|
756
|
+
padding: "0.5rem"
|
|
757
|
+
margin-bottom: "0.5rem"
|
|
758
|
+
media:
|
|
759
|
+
"(min-width: 640px)":
|
|
760
|
+
".dg-section--compact":
|
|
761
|
+
properties:
|
|
762
|
+
padding: "0.75rem"
|
|
763
|
+
margin-bottom: "0.75rem"
|
|
764
|
+
spacious:
|
|
765
|
+
css:
|
|
766
|
+
".dg-section--spacious":
|
|
767
|
+
properties:
|
|
768
|
+
padding: "1.5rem 0.75rem"
|
|
769
|
+
margin-bottom: "2rem"
|
|
770
|
+
media:
|
|
771
|
+
"(min-width: 640px)":
|
|
772
|
+
".dg-section--spacious":
|
|
773
|
+
properties:
|
|
774
|
+
padding: "2rem 1.5rem"
|
|
775
|
+
margin-bottom: "2.5rem"
|
|
776
|
+
bordered:
|
|
777
|
+
css:
|
|
778
|
+
".dg-section--bordered":
|
|
779
|
+
apply: "rounded-lg border border-dg-pebble bg-dg-charcoal"
|
|
780
|
+
elevated:
|
|
781
|
+
css:
|
|
782
|
+
".dg-section--elevated":
|
|
783
|
+
apply: "rounded-lg border border-dg-pebble bg-dg-charcoal shadow-dg-md"
|
|
784
|
+
fieldset:
|
|
785
|
+
css:
|
|
786
|
+
".dg-section--fieldset":
|
|
787
|
+
apply: "rounded-lg border border-dg-pebble relative"
|
|
788
|
+
properties:
|
|
789
|
+
padding-top: "2rem"
|
|
790
|
+
".dg-section--fieldset .dg-section-heading":
|
|
791
|
+
apply: "absolute bg-dg-background dg-text-muted uppercase tracking-wide font-semibold text-base px-2 m-0"
|
|
792
|
+
properties:
|
|
793
|
+
top: "-0.75rem"
|
|
794
|
+
left: "1rem"
|
|
795
|
+
media:
|
|
796
|
+
"(min-width: 640px)":
|
|
797
|
+
".dg-section--fieldset":
|
|
798
|
+
properties:
|
|
799
|
+
padding-top: "2.5rem"
|
|
800
|
+
".dg-section--fieldset .dg-section-heading":
|
|
801
|
+
properties:
|
|
802
|
+
font-size: "1.125rem"
|
|
803
|
+
examples:
|
|
804
|
+
- title: "Section"
|
|
805
|
+
ast:
|
|
806
|
+
tag: div
|
|
807
|
+
props:
|
|
808
|
+
class: "dg-section"
|
|
809
|
+
children:
|
|
810
|
+
- tag: p
|
|
811
|
+
children:
|
|
812
|
+
- "Section content"
|
|
813
|
+
|
|
814
|
+
# ---------------------------------------------------------------------------
|
|
815
|
+
# LAYOUT - CARDS
|
|
816
|
+
# ---------------------------------------------------------------------------
|
|
817
|
+
card:
|
|
818
|
+
metadata:
|
|
819
|
+
title: "Card"
|
|
820
|
+
description: "Flexible card container with multiple variants"
|
|
821
|
+
category: "application-ui"
|
|
822
|
+
section: "Layout"
|
|
823
|
+
subsection: "Cards"
|
|
824
|
+
tags: [card, container, layout]
|
|
825
|
+
css:
|
|
826
|
+
".dg-card":
|
|
827
|
+
apply: "w-full rounded-lg border border-dg-pebble bg-dg-charcoal flex flex-col p-3 mb-3 shadow-dg-sm transition-shadow duration-200"
|
|
828
|
+
".dg-card:hover":
|
|
829
|
+
apply: "shadow-dg-md"
|
|
830
|
+
media:
|
|
831
|
+
"(min-width: 640px)":
|
|
832
|
+
".dg-card":
|
|
833
|
+
apply: "p-4 mb-4"
|
|
834
|
+
"(min-width: 1024px)":
|
|
835
|
+
".dg-card":
|
|
836
|
+
apply: "p-6"
|
|
837
|
+
variants:
|
|
838
|
+
compact:
|
|
839
|
+
css:
|
|
840
|
+
".dg-card--compact":
|
|
841
|
+
apply: "p-2"
|
|
842
|
+
media:
|
|
843
|
+
"(min-width: 640px)":
|
|
844
|
+
".dg-card--compact":
|
|
845
|
+
apply: "p-3"
|
|
846
|
+
spacious:
|
|
847
|
+
css:
|
|
848
|
+
".dg-card--spacious":
|
|
849
|
+
apply: "p-4"
|
|
850
|
+
media:
|
|
851
|
+
"(min-width: 640px)":
|
|
852
|
+
".dg-card--spacious":
|
|
853
|
+
apply: "p-6"
|
|
854
|
+
"(min-width: 1024px)":
|
|
855
|
+
".dg-card--spacious":
|
|
856
|
+
apply: "p-8"
|
|
857
|
+
bordered:
|
|
858
|
+
css:
|
|
859
|
+
".dg-card--bordered":
|
|
860
|
+
apply: "border-2 border-dg-slate"
|
|
861
|
+
structured:
|
|
862
|
+
css:
|
|
863
|
+
".dg-card--structured":
|
|
864
|
+
apply: "p-0 justify-between"
|
|
865
|
+
selectable:
|
|
866
|
+
css:
|
|
867
|
+
".dg-card--selectable":
|
|
868
|
+
apply: "cursor-pointer transition-all duration-200 border-2 border-dg-pebble"
|
|
869
|
+
properties:
|
|
870
|
+
padding: "1.25rem"
|
|
871
|
+
".dg-card--selectable:hover":
|
|
872
|
+
apply: "border-dg-slate"
|
|
873
|
+
".dg-card--selectable:has(input[type=\"radio\"]:checked)":
|
|
874
|
+
apply: "border-dg-primary"
|
|
875
|
+
properties:
|
|
876
|
+
background: "rgba(19, 239, 149, 0.05)"
|
|
877
|
+
".dg-sr-only":
|
|
878
|
+
apply: "sr-only"
|
|
879
|
+
".dg-card--selectable input[type=\"radio\"]":
|
|
880
|
+
apply: "sr-only"
|
|
881
|
+
".dg-card--selectable__indicator":
|
|
882
|
+
apply: "hidden"
|
|
883
|
+
".dg-card--selectable__icon":
|
|
884
|
+
apply: "dg-text-white"
|
|
885
|
+
properties:
|
|
886
|
+
margin-right: "0.5rem"
|
|
887
|
+
".dg-card--selectable__content":
|
|
888
|
+
apply: "flex-1 flex flex-col gap-1"
|
|
889
|
+
".dg-card--selectable .dg-item-title":
|
|
890
|
+
apply: "text-base font-semibold dg-text-white"
|
|
891
|
+
properties:
|
|
892
|
+
display: "flex"
|
|
893
|
+
align-items: "center"
|
|
894
|
+
".dg-card--selectable .dg-prose":
|
|
895
|
+
apply: "text-sm dg-text-muted"
|
|
896
|
+
media:
|
|
897
|
+
"(max-width: 767px)":
|
|
898
|
+
".dg-card--selectable__content":
|
|
899
|
+
apply: "flex-row items-center gap-3"
|
|
900
|
+
".dg-card--selectable .dg-item-title":
|
|
901
|
+
properties:
|
|
902
|
+
margin-bottom: "0"
|
|
903
|
+
flex-shrink: "0"
|
|
904
|
+
".dg-card--selectable .dg-prose":
|
|
905
|
+
properties:
|
|
906
|
+
flex: "1"
|
|
907
|
+
white-space: "nowrap"
|
|
908
|
+
overflow: "hidden"
|
|
909
|
+
text-overflow: "ellipsis"
|
|
910
|
+
"(min-width: 768px)":
|
|
911
|
+
".dg-card--selectable .dg-item-title":
|
|
912
|
+
properties:
|
|
913
|
+
margin-bottom: "0.25rem"
|
|
914
|
+
file-upload:
|
|
915
|
+
css:
|
|
916
|
+
".dg-card--file-upload":
|
|
917
|
+
apply: "cursor-pointer transition-all duration-200 border-2 border-dashed border-dg-pebble"
|
|
918
|
+
properties:
|
|
919
|
+
padding: "1.25rem"
|
|
920
|
+
".dg-card--file-upload:hover":
|
|
921
|
+
apply: "border-dg-slate"
|
|
922
|
+
".dg-card--file-upload:has(input[type=\"checkbox\"]:checked)":
|
|
923
|
+
apply: "border-dg-primary border-solid"
|
|
924
|
+
properties:
|
|
925
|
+
background: "rgba(19, 239, 149, 0.05)"
|
|
926
|
+
".dg-card--file-upload input[type=\"file\"], .dg-card--file-upload input[type=\"checkbox\"]":
|
|
927
|
+
apply: "sr-only"
|
|
928
|
+
".dg-card--file-upload__icon":
|
|
929
|
+
apply: "dg-text-white"
|
|
930
|
+
properties:
|
|
931
|
+
margin-right: "0.5rem"
|
|
932
|
+
".dg-card--file-upload__content":
|
|
933
|
+
apply: "flex-1 flex flex-col gap-1"
|
|
934
|
+
".dg-card--file-upload .dg-item-title":
|
|
935
|
+
apply: "text-base font-semibold dg-text-white"
|
|
936
|
+
properties:
|
|
937
|
+
display: "flex"
|
|
938
|
+
align-items: "center"
|
|
939
|
+
".dg-card--file-upload .dg-prose":
|
|
940
|
+
apply: "text-sm dg-text-muted"
|
|
941
|
+
media:
|
|
942
|
+
"(max-width: 767px)":
|
|
943
|
+
".dg-card--file-upload__content":
|
|
944
|
+
apply: "flex-row items-center gap-3"
|
|
945
|
+
".dg-card--file-upload .dg-item-title":
|
|
946
|
+
properties:
|
|
947
|
+
margin-bottom: "0"
|
|
948
|
+
flex-shrink: "0"
|
|
949
|
+
".dg-card--file-upload .dg-prose":
|
|
950
|
+
properties:
|
|
951
|
+
flex: "1"
|
|
952
|
+
white-space: "nowrap"
|
|
953
|
+
overflow: "hidden"
|
|
954
|
+
text-overflow: "ellipsis"
|
|
955
|
+
"(min-width: 768px)":
|
|
956
|
+
".dg-card--file-upload .dg-item-title":
|
|
957
|
+
properties:
|
|
958
|
+
margin-bottom: "0.25rem"
|
|
959
|
+
elements:
|
|
960
|
+
image:
|
|
961
|
+
css:
|
|
962
|
+
".dg-card__image":
|
|
963
|
+
apply: "w-full overflow-hidden flex-shrink-0"
|
|
964
|
+
properties:
|
|
965
|
+
border-radius: "0.5rem 0.5rem 0 0"
|
|
966
|
+
".dg-card__image img":
|
|
967
|
+
apply: "w-full h-full object-cover block"
|
|
968
|
+
".dg-card__image--small":
|
|
969
|
+
apply: "h-[7.5rem]"
|
|
970
|
+
".dg-card__image--medium":
|
|
971
|
+
apply: "h-[10rem]"
|
|
972
|
+
".dg-card__image--large":
|
|
973
|
+
apply: "h-[15rem]"
|
|
974
|
+
".dg-card__image--aspect-4-3":
|
|
975
|
+
apply: "aspect-[4/3] h-auto"
|
|
976
|
+
icon:
|
|
977
|
+
css:
|
|
978
|
+
".dg-card__icon":
|
|
979
|
+
apply: "flex items-center p-3 pt-6"
|
|
980
|
+
".dg-card__icon i, .dg-card__icon svg":
|
|
981
|
+
apply: "text-5xl dg-text-primary"
|
|
982
|
+
".dg-card__icon--left":
|
|
983
|
+
apply: "justify-start"
|
|
984
|
+
".dg-card__icon--center":
|
|
985
|
+
apply: "justify-center"
|
|
986
|
+
".dg-card__icon--right":
|
|
987
|
+
apply: "justify-end"
|
|
988
|
+
media:
|
|
989
|
+
"(min-width: 640px)":
|
|
990
|
+
".dg-card__icon":
|
|
991
|
+
apply: "p-4 pt-8"
|
|
992
|
+
"(min-width: 1024px)":
|
|
993
|
+
".dg-card__icon":
|
|
994
|
+
apply: "px-6 pb-6 pt-10"
|
|
995
|
+
header:
|
|
996
|
+
css:
|
|
997
|
+
".dg-card__header":
|
|
998
|
+
apply: "flex flex-col gap-2 p-3"
|
|
999
|
+
media:
|
|
1000
|
+
"(min-width: 640px)":
|
|
1001
|
+
".dg-card__header":
|
|
1002
|
+
apply: "p-4"
|
|
1003
|
+
"(min-width: 1024px)":
|
|
1004
|
+
".dg-card__header":
|
|
1005
|
+
apply: "px-6 pt-6 pb-0"
|
|
1006
|
+
body:
|
|
1007
|
+
css:
|
|
1008
|
+
".dg-card__body":
|
|
1009
|
+
apply: "flex flex-col gap-3 p-3 flex-1"
|
|
1010
|
+
media:
|
|
1011
|
+
"(min-width: 640px)":
|
|
1012
|
+
".dg-card__body":
|
|
1013
|
+
apply: "p-4"
|
|
1014
|
+
"(min-width: 1024px)":
|
|
1015
|
+
".dg-card__body":
|
|
1016
|
+
apply: "px-6 pb-6 pt-0"
|
|
1017
|
+
footer:
|
|
1018
|
+
css:
|
|
1019
|
+
".dg-card__footer":
|
|
1020
|
+
apply: "flex items-center gap-3 p-3 border-t border-transparent mt-auto"
|
|
1021
|
+
".dg-card__footer--bordered":
|
|
1022
|
+
apply: "border-t-dg-pebble"
|
|
1023
|
+
media:
|
|
1024
|
+
"(min-width: 640px)":
|
|
1025
|
+
".dg-card__footer":
|
|
1026
|
+
apply: "p-4"
|
|
1027
|
+
"(min-width: 1024px)":
|
|
1028
|
+
".dg-card__footer":
|
|
1029
|
+
apply: "p-6"
|
|
1030
|
+
examples:
|
|
1031
|
+
- title: "Default Card"
|
|
1032
|
+
ast:
|
|
1033
|
+
tag: div
|
|
1034
|
+
props:
|
|
1035
|
+
class: "dg-card"
|
|
1036
|
+
children:
|
|
1037
|
+
- tag: h3
|
|
1038
|
+
props:
|
|
1039
|
+
class: "dg-card-heading"
|
|
1040
|
+
children:
|
|
1041
|
+
- "Card Title"
|
|
1042
|
+
- tag: p
|
|
1043
|
+
children:
|
|
1044
|
+
- "Card content goes here."
|
|
1045
|
+
- title: "Compact Card"
|
|
1046
|
+
ast:
|
|
1047
|
+
tag: div
|
|
1048
|
+
props:
|
|
1049
|
+
class: "dg-card dg-card--compact"
|
|
1050
|
+
children:
|
|
1051
|
+
- tag: h3
|
|
1052
|
+
props:
|
|
1053
|
+
class: "dg-card-heading"
|
|
1054
|
+
children:
|
|
1055
|
+
- "Compact Card"
|
|
1056
|
+
- tag: p
|
|
1057
|
+
children:
|
|
1058
|
+
- "Card content goes here."
|
|
1059
|
+
- title: "Spacious Card"
|
|
1060
|
+
ast:
|
|
1061
|
+
tag: div
|
|
1062
|
+
props:
|
|
1063
|
+
class: "dg-card dg-card--spacious"
|
|
1064
|
+
children:
|
|
1065
|
+
- tag: h3
|
|
1066
|
+
props:
|
|
1067
|
+
class: "dg-card-heading"
|
|
1068
|
+
children:
|
|
1069
|
+
- "Spacious Card"
|
|
1070
|
+
- tag: p
|
|
1071
|
+
children:
|
|
1072
|
+
- "Card content goes here."
|
|
1073
|
+
- title: "Card with Image and Footer"
|
|
1074
|
+
description: "Structured card with image, header, body, and footer"
|
|
1075
|
+
ast:
|
|
1076
|
+
tag: div
|
|
1077
|
+
props:
|
|
1078
|
+
class: "dg-card dg-card--structured"
|
|
1079
|
+
style: "max-width: 400px;"
|
|
1080
|
+
children:
|
|
1081
|
+
- tag: div
|
|
1082
|
+
props:
|
|
1083
|
+
class: "dg-card__image dg-card__image--medium"
|
|
1084
|
+
children:
|
|
1085
|
+
- tag: img
|
|
1086
|
+
props:
|
|
1087
|
+
src: "https://images.unsplash.com/photo-1519389950473-47ba0277781c?w=800&h=400&fit=crop"
|
|
1088
|
+
alt: "Technology workspace"
|
|
1089
|
+
- tag: div
|
|
1090
|
+
props:
|
|
1091
|
+
class: "dg-card__header"
|
|
1092
|
+
children:
|
|
1093
|
+
- tag: h3
|
|
1094
|
+
props:
|
|
1095
|
+
class: "dg-card-heading"
|
|
1096
|
+
children:
|
|
1097
|
+
- "Build with APIs"
|
|
1098
|
+
- tag: div
|
|
1099
|
+
props:
|
|
1100
|
+
class: "dg-card__body"
|
|
1101
|
+
children:
|
|
1102
|
+
- tag: p
|
|
1103
|
+
props:
|
|
1104
|
+
class: "dg-prose"
|
|
1105
|
+
children:
|
|
1106
|
+
- "Voice AI Infrastructure for Builders. For developers and product teams ready to move fast with flexible APIs."
|
|
1107
|
+
- tag: div
|
|
1108
|
+
props:
|
|
1109
|
+
class: "dg-card__footer"
|
|
1110
|
+
children:
|
|
1111
|
+
- tag: button
|
|
1112
|
+
props:
|
|
1113
|
+
class: "dg-btn dg-btn--primary"
|
|
1114
|
+
children:
|
|
1115
|
+
- "Start Building"
|
|
1116
|
+
- title: "Card with Icon (Left Aligned)"
|
|
1117
|
+
description: "Card with Font Awesome icon, left-aligned (default)"
|
|
1118
|
+
ast:
|
|
1119
|
+
tag: div
|
|
1120
|
+
props:
|
|
1121
|
+
class: "dg-card dg-card--structured"
|
|
1122
|
+
style: "max-width: 400px;"
|
|
1123
|
+
children:
|
|
1124
|
+
- tag: div
|
|
1125
|
+
props:
|
|
1126
|
+
class: "dg-card__icon dg-card__icon--left"
|
|
1127
|
+
children:
|
|
1128
|
+
- tag: i
|
|
1129
|
+
props:
|
|
1130
|
+
class: "fas fa-rocket"
|
|
1131
|
+
- tag: div
|
|
1132
|
+
props:
|
|
1133
|
+
class: "dg-card__header"
|
|
1134
|
+
children:
|
|
1135
|
+
- tag: h3
|
|
1136
|
+
props:
|
|
1137
|
+
class: "dg-card-heading"
|
|
1138
|
+
children:
|
|
1139
|
+
- "Fast Integration"
|
|
1140
|
+
- tag: div
|
|
1141
|
+
props:
|
|
1142
|
+
class: "dg-card__body"
|
|
1143
|
+
children:
|
|
1144
|
+
- tag: p
|
|
1145
|
+
props:
|
|
1146
|
+
class: "dg-prose"
|
|
1147
|
+
children:
|
|
1148
|
+
- "Get started quickly with our streamlined API and comprehensive documentation."
|
|
1149
|
+
- tag: div
|
|
1150
|
+
props:
|
|
1151
|
+
class: "dg-card__footer"
|
|
1152
|
+
children:
|
|
1153
|
+
- tag: button
|
|
1154
|
+
props:
|
|
1155
|
+
class: "dg-btn dg-btn--primary"
|
|
1156
|
+
children:
|
|
1157
|
+
- "Get Started"
|
|
1158
|
+
|
|
1159
|
+
# ---------------------------------------------------------------------------
|
|
1160
|
+
# LAYOUT - CODE BLOCK
|
|
1161
|
+
# ---------------------------------------------------------------------------
|
|
1162
|
+
code-block:
|
|
1163
|
+
metadata:
|
|
1164
|
+
title: "Code Block"
|
|
1165
|
+
description: "Preformatted code/text display with scrolling"
|
|
1166
|
+
category: "application-ui"
|
|
1167
|
+
section: "Page Examples"
|
|
1168
|
+
subsection: "Detail Screens"
|
|
1169
|
+
tags: [code, pre, monospace]
|
|
1170
|
+
css:
|
|
1171
|
+
".dg-code-block":
|
|
1172
|
+
apply: "w-full rounded-lg border border-dg-pebble bg-dg-charcoal overflow-auto p-2 my-3 max-h-[12.5rem]"
|
|
1173
|
+
properties:
|
|
1174
|
+
-webkit-overflow-scrolling: "touch"
|
|
1175
|
+
".dg-code-block pre":
|
|
1176
|
+
apply: "m-0 p-0 font-dg-mono text-xs dg-text-fog whitespace-pre-wrap break-words"
|
|
1177
|
+
properties:
|
|
1178
|
+
line-height: "1.3"
|
|
1179
|
+
media:
|
|
1180
|
+
"(min-width: 640px)":
|
|
1181
|
+
".dg-code-block":
|
|
1182
|
+
apply: "p-3 my-4 max-h-[15.625rem]"
|
|
1183
|
+
".dg-code-block pre":
|
|
1184
|
+
apply: "text-sm"
|
|
1185
|
+
"(min-width: 1024px)":
|
|
1186
|
+
".dg-code-block":
|
|
1187
|
+
apply: "max-h-[18.75rem]"
|
|
1188
|
+
variants:
|
|
1189
|
+
compact:
|
|
1190
|
+
css:
|
|
1191
|
+
".dg-code-block--compact":
|
|
1192
|
+
apply: "max-h-[7.5rem] p-1"
|
|
1193
|
+
media:
|
|
1194
|
+
"(min-width: 640px)":
|
|
1195
|
+
".dg-code-block--compact":
|
|
1196
|
+
apply: "max-h-[9.375rem] p-2"
|
|
1197
|
+
tall:
|
|
1198
|
+
css:
|
|
1199
|
+
".dg-code-block--tall":
|
|
1200
|
+
apply: "max-h-[18.75rem]"
|
|
1201
|
+
media:
|
|
1202
|
+
"(min-width: 640px)":
|
|
1203
|
+
".dg-code-block--tall":
|
|
1204
|
+
apply: "max-h-[25rem]"
|
|
1205
|
+
"(min-width: 1024px)":
|
|
1206
|
+
".dg-code-block--tall":
|
|
1207
|
+
apply: "max-h-[31.25rem]"
|
|
1208
|
+
no-scroll:
|
|
1209
|
+
css:
|
|
1210
|
+
".dg-code-block--no-scroll":
|
|
1211
|
+
apply: "overflow-visible max-h-none"
|
|
1212
|
+
examples:
|
|
1213
|
+
- title: "Code Block"
|
|
1214
|
+
ast:
|
|
1215
|
+
tag: div
|
|
1216
|
+
props:
|
|
1217
|
+
class: "dg-code-block"
|
|
1218
|
+
children:
|
|
1219
|
+
- tag: pre
|
|
1220
|
+
children:
|
|
1221
|
+
- "const dg = new Deepgram(apiKey);\nconst response = await dg.transcription.preRecorded(\n { url: audioUrl },\n { model: 'nova-3' }\n);"
|
|
1222
|
+
|
|
1223
|
+
# ---------------------------------------------------------------------------
|
|
1224
|
+
# TYPOGRAPHY - HERO
|
|
1225
|
+
# ---------------------------------------------------------------------------
|
|
1226
|
+
hero:
|
|
1227
|
+
metadata:
|
|
1228
|
+
title: "Hero Section"
|
|
1229
|
+
description: "Large page header with title, subtitle, and call-to-action buttons"
|
|
1230
|
+
category: "application-ui"
|
|
1231
|
+
section: "Headings"
|
|
1232
|
+
subsection: "Page Headings"
|
|
1233
|
+
tags: [hero, header, heading, cta]
|
|
1234
|
+
css:
|
|
1235
|
+
".dg-hero-title":
|
|
1236
|
+
apply: "text-center font-bold font-dg-noto text-5xl leading-tight mb-6 bg-gradient-to-r from-dg-secondary to-dg-primary bg-clip-text"
|
|
1237
|
+
properties:
|
|
1238
|
+
-webkit-text-fill-color: "transparent"
|
|
1239
|
+
letter-spacing: "-0.02em"
|
|
1240
|
+
font-feature-settings: "\"liga\" 0, \"dlig\" 0, \"hlig\" 0, \"ordn\" 0, \"ss09\", \"kern\""
|
|
1241
|
+
font-kerning: "normal"
|
|
1242
|
+
".dg-hero":
|
|
1243
|
+
apply: "w-full text-center py-16 px-4"
|
|
1244
|
+
".dg-hero__content":
|
|
1245
|
+
apply: "flex flex-col gap-6 mx-auto max-w-[53.125rem]"
|
|
1246
|
+
".dg-hero__announcement":
|
|
1247
|
+
apply: "inline-flex items-center justify-center rounded-full border bg-dg-translucent border-dg-slate/30 py-2 px-5 mx-auto mb-2 no-underline cursor-pointer w-fit gap-3 transition-all duration-200"
|
|
1248
|
+
".dg-hero__announcement:hover":
|
|
1249
|
+
apply: "border-dg-primary -translate-y-0.5"
|
|
1250
|
+
properties:
|
|
1251
|
+
background-color: "rgba(19, 239, 149, 0.1)"
|
|
1252
|
+
box-shadow: "0 0.25rem 0.75rem rgba(19, 239, 149, 0.15)"
|
|
1253
|
+
".dg-hero__announcement-text":
|
|
1254
|
+
apply: "dg-text-white text-sm font-normal whitespace-nowrap"
|
|
1255
|
+
".dg-hero__announcement-cta":
|
|
1256
|
+
apply: "inline-flex items-center dg-text-secondary text-sm font-semibold gap-2 transition-[gap] duration-200"
|
|
1257
|
+
".dg-hero__announcement:hover .dg-hero__announcement-cta":
|
|
1258
|
+
apply: "gap-3"
|
|
1259
|
+
".dg-hero__body":
|
|
1260
|
+
apply: "text-center dg-text-fog text-lg leading-7 font-normal mx-auto max-w-[53.125rem]"
|
|
1261
|
+
".dg-hero__actions":
|
|
1262
|
+
apply: "flex items-center justify-center flex-wrap gap-4 mt-2"
|
|
1263
|
+
media:
|
|
1264
|
+
"(max-width: 1024px)":
|
|
1265
|
+
".dg-hero-title":
|
|
1266
|
+
apply: "text-4xl"
|
|
1267
|
+
"(max-width: 768px)":
|
|
1268
|
+
".dg-hero-title":
|
|
1269
|
+
apply: "text-3xl"
|
|
1270
|
+
".dg-hero":
|
|
1271
|
+
apply: "py-12 px-4"
|
|
1272
|
+
".dg-hero__content":
|
|
1273
|
+
apply: "gap-5"
|
|
1274
|
+
".dg-hero__body":
|
|
1275
|
+
apply: "text-base leading-relaxed"
|
|
1276
|
+
"(max-width: 640px)":
|
|
1277
|
+
".dg-hero-title":
|
|
1278
|
+
apply: "text-2xl"
|
|
1279
|
+
".dg-hero":
|
|
1280
|
+
apply: "py-8 px-4"
|
|
1281
|
+
".dg-hero__announcement-text":
|
|
1282
|
+
apply: "text-xs whitespace-normal"
|
|
1283
|
+
".dg-hero__announcement-cta":
|
|
1284
|
+
apply: "text-xs"
|
|
1285
|
+
".dg-hero__body":
|
|
1286
|
+
apply: "text-[0.9375rem] leading-normal"
|
|
1287
|
+
".dg-hero__actions":
|
|
1288
|
+
apply: "flex-col w-full"
|
|
1289
|
+
".dg-hero__actions > *":
|
|
1290
|
+
apply: "w-full"
|
|
1291
|
+
examples:
|
|
1292
|
+
- title: "Full Hero with Announcement"
|
|
1293
|
+
ast:
|
|
1294
|
+
tag: section
|
|
1295
|
+
props:
|
|
1296
|
+
class: "dg-hero"
|
|
1297
|
+
children:
|
|
1298
|
+
- tag: div
|
|
1299
|
+
props:
|
|
1300
|
+
class: "dg-hero__content"
|
|
1301
|
+
children:
|
|
1302
|
+
- tag: a
|
|
1303
|
+
props:
|
|
1304
|
+
href: "#"
|
|
1305
|
+
class: "dg-hero__announcement"
|
|
1306
|
+
children:
|
|
1307
|
+
- tag: span
|
|
1308
|
+
props:
|
|
1309
|
+
class: "dg-hero__announcement-text"
|
|
1310
|
+
children:
|
|
1311
|
+
- "New: Meet Flux - speech recognition for real-time voice agents"
|
|
1312
|
+
- tag: span
|
|
1313
|
+
props:
|
|
1314
|
+
class: "dg-hero__announcement-cta"
|
|
1315
|
+
children:
|
|
1316
|
+
- "Try It Now →"
|
|
1317
|
+
- tag: h1
|
|
1318
|
+
props:
|
|
1319
|
+
class: "dg-hero-title"
|
|
1320
|
+
children:
|
|
1321
|
+
- "Voice AI APIs that just work"
|
|
1322
|
+
- tag: p
|
|
1323
|
+
props:
|
|
1324
|
+
class: "dg-hero__body"
|
|
1325
|
+
children:
|
|
1326
|
+
- "Build with the most accurate, realistic, and cost-effective APIs for speech-to-text, text-to-speech, and voice agents."
|
|
1327
|
+
- tag: div
|
|
1328
|
+
props:
|
|
1329
|
+
class: "dg-hero__actions"
|
|
1330
|
+
children:
|
|
1331
|
+
- tag: button
|
|
1332
|
+
props:
|
|
1333
|
+
class: "dg-btn dg-btn--primary"
|
|
1334
|
+
type: button
|
|
1335
|
+
children:
|
|
1336
|
+
- "Sign Up Free"
|
|
1337
|
+
- tag: button
|
|
1338
|
+
props:
|
|
1339
|
+
class: "dg-btn dg-btn--secondary"
|
|
1340
|
+
type: button
|
|
1341
|
+
children:
|
|
1342
|
+
- "Playground"
|
|
1343
|
+
- title: "Simple Hero"
|
|
1344
|
+
ast:
|
|
1345
|
+
tag: section
|
|
1346
|
+
props:
|
|
1347
|
+
class: "dg-hero"
|
|
1348
|
+
children:
|
|
1349
|
+
- tag: div
|
|
1350
|
+
props:
|
|
1351
|
+
class: "dg-hero__content"
|
|
1352
|
+
children:
|
|
1353
|
+
- tag: h1
|
|
1354
|
+
props:
|
|
1355
|
+
class: "dg-hero-title"
|
|
1356
|
+
children:
|
|
1357
|
+
- "Welcome to Our Platform"
|
|
1358
|
+
- tag: p
|
|
1359
|
+
props:
|
|
1360
|
+
class: "dg-hero__body"
|
|
1361
|
+
children:
|
|
1362
|
+
- "Build amazing experiences with our component library"
|
|
1363
|
+
- title: "Hero with Single CTA"
|
|
1364
|
+
ast:
|
|
1365
|
+
tag: section
|
|
1366
|
+
props:
|
|
1367
|
+
class: "dg-hero"
|
|
1368
|
+
children:
|
|
1369
|
+
- tag: div
|
|
1370
|
+
props:
|
|
1371
|
+
class: "dg-hero__content"
|
|
1372
|
+
children:
|
|
1373
|
+
- tag: h1
|
|
1374
|
+
props:
|
|
1375
|
+
class: "dg-hero-title"
|
|
1376
|
+
children:
|
|
1377
|
+
- "Get Started Today"
|
|
1378
|
+
- tag: p
|
|
1379
|
+
props:
|
|
1380
|
+
class: "dg-hero__body"
|
|
1381
|
+
children:
|
|
1382
|
+
- "Join thousands of developers building with Deepgram"
|
|
1383
|
+
- tag: div
|
|
1384
|
+
props:
|
|
1385
|
+
class: "dg-hero__actions"
|
|
1386
|
+
children:
|
|
1387
|
+
- tag: button
|
|
1388
|
+
props:
|
|
1389
|
+
class: "dg-btn dg-btn--primary"
|
|
1390
|
+
type: button
|
|
1391
|
+
children:
|
|
1392
|
+
- "Start Building"
|
|
1393
|
+
|
|
1394
|
+
# ---------------------------------------------------------------------------
|
|
1395
|
+
# TYPOGRAPHY - HEADINGS
|
|
1396
|
+
# ---------------------------------------------------------------------------
|
|
1397
|
+
section-heading:
|
|
1398
|
+
metadata:
|
|
1399
|
+
title: "Section Header"
|
|
1400
|
+
description: "Consistent section heading with multiple levels"
|
|
1401
|
+
category: "application-ui"
|
|
1402
|
+
section: "Headings"
|
|
1403
|
+
subsection: "Section Headings"
|
|
1404
|
+
tags: [heading, section, title]
|
|
1405
|
+
css:
|
|
1406
|
+
".dg-section-heading":
|
|
1407
|
+
apply: "font-semibold font-dg-noto text-2xl dg-text-white mb-6 flex flex-wrap items-baseline gap-2"
|
|
1408
|
+
".dg-section-heading small":
|
|
1409
|
+
apply: "font-normal text-base dg-text-muted"
|
|
1410
|
+
media:
|
|
1411
|
+
"(max-width: 640px)":
|
|
1412
|
+
".dg-section-heading":
|
|
1413
|
+
apply: "text-xl mb-3 gap-1.5"
|
|
1414
|
+
".dg-section-heading small":
|
|
1415
|
+
apply: "text-sm"
|
|
1416
|
+
examples:
|
|
1417
|
+
- title: "Section Heading"
|
|
1418
|
+
ast:
|
|
1419
|
+
tag: h2
|
|
1420
|
+
props:
|
|
1421
|
+
class: "dg-section-heading"
|
|
1422
|
+
children:
|
|
1423
|
+
- "Section Title"
|
|
1424
|
+
- title: "Section Heading with Context"
|
|
1425
|
+
ast:
|
|
1426
|
+
tag: h2
|
|
1427
|
+
props:
|
|
1428
|
+
class: "dg-section-heading"
|
|
1429
|
+
children:
|
|
1430
|
+
- "Transcription Results"
|
|
1431
|
+
- tag: small
|
|
1432
|
+
children:
|
|
1433
|
+
- "3 files processed"
|
|
1434
|
+
|
|
1435
|
+
page-heading:
|
|
1436
|
+
metadata:
|
|
1437
|
+
title: "Page Heading"
|
|
1438
|
+
description: "Simple page heading with title and optional description"
|
|
1439
|
+
category: "application-ui"
|
|
1440
|
+
section: "Headings"
|
|
1441
|
+
subsection: "Page Headings"
|
|
1442
|
+
tags: [heading, page, title, description]
|
|
1443
|
+
css:
|
|
1444
|
+
".dg-page-heading":
|
|
1445
|
+
apply: "mb-8"
|
|
1446
|
+
".dg-page-heading__title":
|
|
1447
|
+
apply: "font-semibold font-dg-noto text-4xl dg-text-white mb-2 leading-tight"
|
|
1448
|
+
".dg-page-heading__description":
|
|
1449
|
+
apply: "dg-text-muted text-lg leading-relaxed m-0 max-w-[65ch]"
|
|
1450
|
+
media:
|
|
1451
|
+
"(max-width: 768px)":
|
|
1452
|
+
".dg-page-heading__title":
|
|
1453
|
+
apply: "text-3xl"
|
|
1454
|
+
".dg-page-heading__description":
|
|
1455
|
+
apply: "text-base"
|
|
1456
|
+
"(max-width: 640px)":
|
|
1457
|
+
".dg-page-heading":
|
|
1458
|
+
apply: "mb-6"
|
|
1459
|
+
".dg-page-heading__title":
|
|
1460
|
+
apply: "text-2xl"
|
|
1461
|
+
".dg-page-heading__description":
|
|
1462
|
+
apply: "text-[0.9375rem]"
|
|
1463
|
+
examples:
|
|
1464
|
+
- title: "Simple Page Heading"
|
|
1465
|
+
ast:
|
|
1466
|
+
tag: div
|
|
1467
|
+
props:
|
|
1468
|
+
class: "dg-page-heading"
|
|
1469
|
+
children:
|
|
1470
|
+
- tag: h1
|
|
1471
|
+
props:
|
|
1472
|
+
class: "dg-page-heading__title"
|
|
1473
|
+
children:
|
|
1474
|
+
- "Dashboard"
|
|
1475
|
+
- title: "Page Heading with Description"
|
|
1476
|
+
ast:
|
|
1477
|
+
tag: div
|
|
1478
|
+
props:
|
|
1479
|
+
class: "dg-page-heading"
|
|
1480
|
+
children:
|
|
1481
|
+
- tag: h1
|
|
1482
|
+
props:
|
|
1483
|
+
class: "dg-page-heading__title"
|
|
1484
|
+
children:
|
|
1485
|
+
- "Transcription"
|
|
1486
|
+
- tag: p
|
|
1487
|
+
props:
|
|
1488
|
+
class: "dg-page-heading__description"
|
|
1489
|
+
children:
|
|
1490
|
+
- "Upload audio files or record live to get accurate transcriptions powered by Deepgram."
|
|
1491
|
+
|
|
1492
|
+
card-heading:
|
|
1493
|
+
metadata:
|
|
1494
|
+
title: "Card Heading"
|
|
1495
|
+
description: "Heading for card components"
|
|
1496
|
+
category: "application-ui"
|
|
1497
|
+
section: "Headings"
|
|
1498
|
+
subsection: "Section Headings"
|
|
1499
|
+
tags: [heading, card, title]
|
|
1500
|
+
css:
|
|
1501
|
+
".dg-card-heading":
|
|
1502
|
+
apply: "font-medium font-dg-noto text-xl dg-text-white mb-3 flex flex-wrap items-baseline gap-1.5"
|
|
1503
|
+
".dg-card-heading small":
|
|
1504
|
+
apply: "font-normal text-sm dg-text-muted"
|
|
1505
|
+
examples:
|
|
1506
|
+
- title: "Card Heading"
|
|
1507
|
+
ast:
|
|
1508
|
+
tag: h3
|
|
1509
|
+
props:
|
|
1510
|
+
class: "dg-card-heading"
|
|
1511
|
+
children:
|
|
1512
|
+
- "Card Title"
|
|
1513
|
+
|
|
1514
|
+
item-title:
|
|
1515
|
+
metadata:
|
|
1516
|
+
title: "Item Title"
|
|
1517
|
+
description: "Title for list items and small components"
|
|
1518
|
+
category: "application-ui"
|
|
1519
|
+
section: "Headings"
|
|
1520
|
+
subsection: "Section Headings"
|
|
1521
|
+
tags: [heading, item, title]
|
|
1522
|
+
css:
|
|
1523
|
+
".dg-item-title":
|
|
1524
|
+
apply: "font-medium font-dg-noto text-base dg-text-white mb-1 flex flex-wrap items-baseline gap-1"
|
|
1525
|
+
".dg-item-title small":
|
|
1526
|
+
apply: "font-normal text-xs dg-text-muted"
|
|
1527
|
+
examples:
|
|
1528
|
+
- title: "Item Title"
|
|
1529
|
+
ast:
|
|
1530
|
+
tag: h4
|
|
1531
|
+
props:
|
|
1532
|
+
class: "dg-item-title"
|
|
1533
|
+
children:
|
|
1534
|
+
- "Item Name"
|
|
1535
|
+
|
|
1536
|
+
# ---------------------------------------------------------------------------
|
|
1537
|
+
# TYPOGRAPHY - PROSE
|
|
1538
|
+
# ---------------------------------------------------------------------------
|
|
1539
|
+
prose:
|
|
1540
|
+
metadata:
|
|
1541
|
+
title: "Prose"
|
|
1542
|
+
description: "Body text component with responsive sizing"
|
|
1543
|
+
category: "application-ui"
|
|
1544
|
+
section: "Headings"
|
|
1545
|
+
subsection: "Section Headings"
|
|
1546
|
+
tags: [text, prose, body, paragraph]
|
|
1547
|
+
css:
|
|
1548
|
+
".dg-prose":
|
|
1549
|
+
apply: "w-full dg-text-fog text-sm leading-snug mb-3"
|
|
1550
|
+
".dg-prose.dg-prose--block":
|
|
1551
|
+
apply: "max-w-none w-full"
|
|
1552
|
+
media:
|
|
1553
|
+
"(min-width: 640px)":
|
|
1554
|
+
".dg-prose":
|
|
1555
|
+
apply: "text-base mb-4 max-w-[65ch]"
|
|
1556
|
+
variants:
|
|
1557
|
+
large:
|
|
1558
|
+
css:
|
|
1559
|
+
".dg-prose--large":
|
|
1560
|
+
apply: "text-base"
|
|
1561
|
+
media:
|
|
1562
|
+
"(min-width: 640px)":
|
|
1563
|
+
".dg-prose--large":
|
|
1564
|
+
apply: "text-lg"
|
|
1565
|
+
"(min-width: 1024px)":
|
|
1566
|
+
".dg-prose--large":
|
|
1567
|
+
apply: "text-xl"
|
|
1568
|
+
small:
|
|
1569
|
+
css:
|
|
1570
|
+
".dg-prose--small":
|
|
1571
|
+
apply: "text-xs dg-text-muted"
|
|
1572
|
+
media:
|
|
1573
|
+
"(min-width: 640px)":
|
|
1574
|
+
".dg-prose--small":
|
|
1575
|
+
apply: "text-sm"
|
|
1576
|
+
examples:
|
|
1577
|
+
- title: "Prose"
|
|
1578
|
+
ast:
|
|
1579
|
+
tag: p
|
|
1580
|
+
props:
|
|
1581
|
+
class: "dg-prose"
|
|
1582
|
+
children:
|
|
1583
|
+
- "Body text content goes here."
|
|
1584
|
+
|
|
1585
|
+
# ---------------------------------------------------------------------------
|
|
1586
|
+
# FORMS
|
|
1587
|
+
# ---------------------------------------------------------------------------
|
|
1588
|
+
input:
|
|
1589
|
+
metadata:
|
|
1590
|
+
title: "Input Group"
|
|
1591
|
+
description: "Text input fields with labels, placeholders, and validation states"
|
|
1592
|
+
category: "application-ui"
|
|
1593
|
+
section: "Forms"
|
|
1594
|
+
subsection: "Input Groups"
|
|
1595
|
+
tags: [input, text, form, field, label]
|
|
1596
|
+
css:
|
|
1597
|
+
".dg-input":
|
|
1598
|
+
apply: "w-full px-4 py-3 rounded border border-dg-pebble bg-dg-charcoal dg-text-white font-dg-sans text-sm outline-none transition-all duration-300 shadow-dg-sm"
|
|
1599
|
+
properties:
|
|
1600
|
+
height: "2.75rem"
|
|
1601
|
+
".dg-input::placeholder":
|
|
1602
|
+
apply: "dg-text-muted"
|
|
1603
|
+
".dg-input:focus":
|
|
1604
|
+
apply: "border-dg-primary"
|
|
1605
|
+
properties:
|
|
1606
|
+
box-shadow: "0 0 0 0.0625rem theme(colors.dg-primary)"
|
|
1607
|
+
".dg-input:disabled":
|
|
1608
|
+
apply: "opacity-50 cursor-not-allowed"
|
|
1609
|
+
variants:
|
|
1610
|
+
inline:
|
|
1611
|
+
css:
|
|
1612
|
+
".dg-input--inline":
|
|
1613
|
+
apply: "min-w-[12.5rem]"
|
|
1614
|
+
full:
|
|
1615
|
+
css:
|
|
1616
|
+
".dg-input--full":
|
|
1617
|
+
apply: "max-w-none"
|
|
1618
|
+
select:
|
|
1619
|
+
css:
|
|
1620
|
+
".dg-input[type=\"select\"], select.dg-input":
|
|
1621
|
+
apply: "appearance-none"
|
|
1622
|
+
properties:
|
|
1623
|
+
background-image: "url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='rgb(255,255,255)' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e\")"
|
|
1624
|
+
background-position: "right 0.75rem center"
|
|
1625
|
+
background-repeat: "no-repeat"
|
|
1626
|
+
background-size: "1.5em 1.5em"
|
|
1627
|
+
padding-right: "2.5rem"
|
|
1628
|
+
examples:
|
|
1629
|
+
- title: "Basic Text Input"
|
|
1630
|
+
ast:
|
|
1631
|
+
tag: div
|
|
1632
|
+
props:
|
|
1633
|
+
class: "dg-form-field"
|
|
1634
|
+
children:
|
|
1635
|
+
- tag: label
|
|
1636
|
+
props:
|
|
1637
|
+
class: "dg-form-label"
|
|
1638
|
+
children:
|
|
1639
|
+
- "Email Address"
|
|
1640
|
+
- tag: input
|
|
1641
|
+
props:
|
|
1642
|
+
type: text
|
|
1643
|
+
class: "dg-input"
|
|
1644
|
+
placeholder: "you@example.com"
|
|
1645
|
+
- title: "Input with Helper Text"
|
|
1646
|
+
ast:
|
|
1647
|
+
tag: div
|
|
1648
|
+
props:
|
|
1649
|
+
class: "dg-form-field"
|
|
1650
|
+
children:
|
|
1651
|
+
- tag: label
|
|
1652
|
+
props:
|
|
1653
|
+
class: "dg-form-label"
|
|
1654
|
+
children:
|
|
1655
|
+
- "API Key"
|
|
1656
|
+
- tag: input
|
|
1657
|
+
props:
|
|
1658
|
+
type: text
|
|
1659
|
+
class: "dg-input"
|
|
1660
|
+
placeholder: "Enter your Deepgram API key"
|
|
1661
|
+
- tag: span
|
|
1662
|
+
props:
|
|
1663
|
+
class: "dg-form-helper"
|
|
1664
|
+
children:
|
|
1665
|
+
- "Find your API key in the Deepgram Console"
|
|
1666
|
+
- title: "Input with Error"
|
|
1667
|
+
ast:
|
|
1668
|
+
tag: div
|
|
1669
|
+
props:
|
|
1670
|
+
class: "dg-form-field dg-form-field--error"
|
|
1671
|
+
children:
|
|
1672
|
+
- tag: label
|
|
1673
|
+
props:
|
|
1674
|
+
class: "dg-form-label"
|
|
1675
|
+
children:
|
|
1676
|
+
- "Email"
|
|
1677
|
+
- tag: input
|
|
1678
|
+
props:
|
|
1679
|
+
type: email
|
|
1680
|
+
class: "dg-input"
|
|
1681
|
+
value: "invalid-email"
|
|
1682
|
+
- tag: span
|
|
1683
|
+
props:
|
|
1684
|
+
class: "dg-form-helper"
|
|
1685
|
+
children:
|
|
1686
|
+
- "Please enter a valid email address"
|
|
1687
|
+
|
|
1688
|
+
textarea:
|
|
1689
|
+
metadata:
|
|
1690
|
+
title: "Textarea"
|
|
1691
|
+
description: "Multi-line text input"
|
|
1692
|
+
category: "application-ui"
|
|
1693
|
+
section: "Forms"
|
|
1694
|
+
subsection: "Input Groups"
|
|
1695
|
+
tags: [textarea, input, form]
|
|
1696
|
+
css:
|
|
1697
|
+
".dg-textarea":
|
|
1698
|
+
apply: "dg-input"
|
|
1699
|
+
properties:
|
|
1700
|
+
min-height: "6.25rem"
|
|
1701
|
+
resize: "vertical"
|
|
1702
|
+
height: "auto"
|
|
1703
|
+
examples:
|
|
1704
|
+
- title: "Textarea"
|
|
1705
|
+
ast:
|
|
1706
|
+
tag: div
|
|
1707
|
+
props:
|
|
1708
|
+
class: "dg-form-field"
|
|
1709
|
+
children:
|
|
1710
|
+
- tag: label
|
|
1711
|
+
props:
|
|
1712
|
+
class: "dg-form-label"
|
|
1713
|
+
children:
|
|
1714
|
+
- "Message"
|
|
1715
|
+
- tag: textarea
|
|
1716
|
+
props:
|
|
1717
|
+
class: "dg-textarea"
|
|
1718
|
+
placeholder: "Enter your message..."
|
|
1719
|
+
|
|
1720
|
+
checkbox:
|
|
1721
|
+
metadata:
|
|
1722
|
+
title: "Checkbox"
|
|
1723
|
+
description: "Checkbox inputs for multi-select options"
|
|
1724
|
+
category: "application-ui"
|
|
1725
|
+
section: "Forms"
|
|
1726
|
+
subsection: "Checkboxes"
|
|
1727
|
+
tags: [checkbox, input, form, select]
|
|
1728
|
+
css:
|
|
1729
|
+
".dg-checkbox":
|
|
1730
|
+
apply: "appearance-none w-5 h-5 rounded border border-dg-pebble bg-dg-charcoal cursor-pointer transition-all duration-200 flex-shrink-0"
|
|
1731
|
+
properties:
|
|
1732
|
+
position: "relative"
|
|
1733
|
+
".dg-checkbox:checked":
|
|
1734
|
+
apply: "bg-dg-primary border-dg-primary"
|
|
1735
|
+
".dg-checkbox:checked::after":
|
|
1736
|
+
properties:
|
|
1737
|
+
content: "\"\""
|
|
1738
|
+
position: "absolute"
|
|
1739
|
+
left: "0.375rem"
|
|
1740
|
+
top: "0.125rem"
|
|
1741
|
+
width: "0.3125rem"
|
|
1742
|
+
height: "0.625rem"
|
|
1743
|
+
border: "solid black"
|
|
1744
|
+
border-width: "0 0.125rem 0.125rem 0"
|
|
1745
|
+
transform: "rotate(45deg)"
|
|
1746
|
+
".dg-checkbox:focus":
|
|
1747
|
+
apply: "outline-none"
|
|
1748
|
+
properties:
|
|
1749
|
+
box-shadow: "0 0 0 0.125rem theme(colors.dg-primary/50)"
|
|
1750
|
+
".dg-checkbox-label":
|
|
1751
|
+
apply: "flex items-start gap-2 cursor-pointer text-sm dg-text-fog"
|
|
1752
|
+
".dg-checkbox-label:hover .dg-checkbox":
|
|
1753
|
+
apply: "border-dg-slate"
|
|
1754
|
+
".dg-checkbox-description":
|
|
1755
|
+
apply: "flex flex-col gap-2"
|
|
1756
|
+
".dg-checkbox-group":
|
|
1757
|
+
apply: "flex flex-col gap-3"
|
|
1758
|
+
examples:
|
|
1759
|
+
- title: "Basic Checkbox"
|
|
1760
|
+
ast:
|
|
1761
|
+
tag: label
|
|
1762
|
+
props:
|
|
1763
|
+
class: "dg-checkbox-label"
|
|
1764
|
+
children:
|
|
1765
|
+
- tag: input
|
|
1766
|
+
props:
|
|
1767
|
+
type: checkbox
|
|
1768
|
+
class: "dg-checkbox"
|
|
1769
|
+
- "Enable notifications"
|
|
1770
|
+
- title: "Checkbox Group"
|
|
1771
|
+
ast:
|
|
1772
|
+
tag: div
|
|
1773
|
+
props:
|
|
1774
|
+
class: "dg-checkbox-group"
|
|
1775
|
+
children:
|
|
1776
|
+
- tag: label
|
|
1777
|
+
props:
|
|
1778
|
+
class: "dg-checkbox-label"
|
|
1779
|
+
children:
|
|
1780
|
+
- tag: input
|
|
1781
|
+
props:
|
|
1782
|
+
type: checkbox
|
|
1783
|
+
class: "dg-checkbox"
|
|
1784
|
+
- "Speech-to-Text"
|
|
1785
|
+
- tag: label
|
|
1786
|
+
props:
|
|
1787
|
+
class: "dg-checkbox-label"
|
|
1788
|
+
children:
|
|
1789
|
+
- tag: input
|
|
1790
|
+
props:
|
|
1791
|
+
type: checkbox
|
|
1792
|
+
class: "dg-checkbox"
|
|
1793
|
+
- "Text-to-Speech"
|
|
1794
|
+
|
|
1795
|
+
form-field:
|
|
1796
|
+
metadata:
|
|
1797
|
+
title: "Form Section"
|
|
1798
|
+
description: "Form section container with optional heading"
|
|
1799
|
+
category: "application-ui"
|
|
1800
|
+
section: "Forms"
|
|
1801
|
+
subsection: "Form Layouts"
|
|
1802
|
+
tags: [form, section, layout]
|
|
1803
|
+
css:
|
|
1804
|
+
".dg-form-field":
|
|
1805
|
+
apply: "flex flex-col gap-3 mb-4 w-full"
|
|
1806
|
+
".dg-form-field--full":
|
|
1807
|
+
apply: "max-w-none"
|
|
1808
|
+
".dg-form-field--error .dg-input, .dg-form-field--error .dg-textarea":
|
|
1809
|
+
apply: "border-dg-danger"
|
|
1810
|
+
".dg-form-field--error .dg-form-helper":
|
|
1811
|
+
apply: "dg-text-danger"
|
|
1812
|
+
".dg-form-field--success .dg-input, .dg-form-field--success .dg-textarea":
|
|
1813
|
+
apply: "border-dg-success"
|
|
1814
|
+
".dg-form-field--success .dg-form-helper":
|
|
1815
|
+
apply: "dg-text-success"
|
|
1816
|
+
".dg-form-label":
|
|
1817
|
+
apply: "text-sm font-medium dg-text-white"
|
|
1818
|
+
".dg-form-error":
|
|
1819
|
+
apply: "text-xs dg-text-danger block"
|
|
1820
|
+
properties:
|
|
1821
|
+
margin: "0"
|
|
1822
|
+
".dg-form-helper":
|
|
1823
|
+
apply: "text-xs dg-text-muted block"
|
|
1824
|
+
properties:
|
|
1825
|
+
margin: "0"
|
|
1826
|
+
media:
|
|
1827
|
+
"(min-width: 640px)":
|
|
1828
|
+
".dg-form-field":
|
|
1829
|
+
apply: "max-w-md"
|
|
1830
|
+
examples:
|
|
1831
|
+
- title: "Simple Form Section"
|
|
1832
|
+
ast:
|
|
1833
|
+
tag: div
|
|
1834
|
+
props:
|
|
1835
|
+
class: "dg-form-field"
|
|
1836
|
+
children:
|
|
1837
|
+
- tag: label
|
|
1838
|
+
props:
|
|
1839
|
+
class: "dg-form-label"
|
|
1840
|
+
children:
|
|
1841
|
+
- "Name"
|
|
1842
|
+
- tag: input
|
|
1843
|
+
props:
|
|
1844
|
+
type: text
|
|
1845
|
+
class: "dg-input"
|
|
1846
|
+
placeholder: "Enter your name"
|
|
1847
|
+
|
|
1848
|
+
drag-drop-zone:
|
|
1849
|
+
metadata:
|
|
1850
|
+
title: "File Upload Zone"
|
|
1851
|
+
description: "Drag-and-drop file upload area with click-to-browse"
|
|
1852
|
+
category: "application-ui"
|
|
1853
|
+
section: "Forms"
|
|
1854
|
+
subsection: "Input Groups"
|
|
1855
|
+
tags: [file, upload, drag-drop, input]
|
|
1856
|
+
css:
|
|
1857
|
+
".dg-drag-drop-zone":
|
|
1858
|
+
apply: "relative border-2 border-dashed border-dg-pebble rounded-lg bg-dg-charcoal transition-all duration-200 flex flex-col items-center justify-center gap-3 cursor-pointer"
|
|
1859
|
+
properties:
|
|
1860
|
+
padding: "3rem 2rem"
|
|
1861
|
+
min-height: "12.5rem"
|
|
1862
|
+
".dg-drag-drop-zone:hover":
|
|
1863
|
+
apply: "border-dg-slate bg-dg-background"
|
|
1864
|
+
".dg-drag-drop-zone.drag-over":
|
|
1865
|
+
apply: "border-dg-primary bg-dg-translucent"
|
|
1866
|
+
".dg-drag-drop-zone__input":
|
|
1867
|
+
apply: "absolute inset-0 w-full h-full opacity-0 cursor-pointer"
|
|
1868
|
+
".dg-drag-drop-zone__icon":
|
|
1869
|
+
apply: "text-5xl dg-text-muted"
|
|
1870
|
+
".dg-drag-drop-zone:hover .dg-drag-drop-zone__icon":
|
|
1871
|
+
apply: "dg-text-primary"
|
|
1872
|
+
".dg-drag-drop-zone__text":
|
|
1873
|
+
apply: "text-base dg-text-white font-medium"
|
|
1874
|
+
".dg-drag-drop-zone__hint":
|
|
1875
|
+
apply: "text-sm dg-text-muted"
|
|
1876
|
+
examples:
|
|
1877
|
+
- title: "File Upload Zone"
|
|
1878
|
+
ast:
|
|
1879
|
+
tag: div
|
|
1880
|
+
props:
|
|
1881
|
+
class: "dg-drag-drop-zone"
|
|
1882
|
+
children:
|
|
1883
|
+
- tag: input
|
|
1884
|
+
props:
|
|
1885
|
+
type: file
|
|
1886
|
+
class: "dg-drag-drop-zone__input"
|
|
1887
|
+
- tag: i
|
|
1888
|
+
props:
|
|
1889
|
+
class: "fas fa-cloud-upload-alt dg-drag-drop-zone__icon"
|
|
1890
|
+
- tag: p
|
|
1891
|
+
props:
|
|
1892
|
+
class: "dg-drag-drop-zone__text"
|
|
1893
|
+
children:
|
|
1894
|
+
- "Drop files here or click to browse"
|
|
1895
|
+
- tag: p
|
|
1896
|
+
props:
|
|
1897
|
+
class: "dg-drag-drop-zone__hint"
|
|
1898
|
+
children:
|
|
1899
|
+
- "Supports MP3, WAV, FLAC up to 100MB"
|
|
1900
|
+
|
|
1901
|
+
# ---------------------------------------------------------------------------
|
|
1902
|
+
# STATUS & FEEDBACK
|
|
1903
|
+
# ---------------------------------------------------------------------------
|
|
1904
|
+
status:
|
|
1905
|
+
metadata:
|
|
1906
|
+
title: "Status Banner"
|
|
1907
|
+
description: "Alert/notification banner with different status variants"
|
|
1908
|
+
category: "application-ui"
|
|
1909
|
+
section: "Feedback"
|
|
1910
|
+
subsection: "Alerts"
|
|
1911
|
+
tags: [alert, status, notification, banner]
|
|
1912
|
+
css:
|
|
1913
|
+
".dg-status":
|
|
1914
|
+
apply: "w-full italic dg-text-fog text-sm leading-snug py-1 my-2"
|
|
1915
|
+
media:
|
|
1916
|
+
"(min-width: 640px)":
|
|
1917
|
+
".dg-status":
|
|
1918
|
+
apply: "text-base py-2 my-3"
|
|
1919
|
+
variants:
|
|
1920
|
+
info:
|
|
1921
|
+
css:
|
|
1922
|
+
".dg-status--info":
|
|
1923
|
+
apply: "dg-text-fog"
|
|
1924
|
+
success:
|
|
1925
|
+
css:
|
|
1926
|
+
".dg-status--success":
|
|
1927
|
+
apply: "dg-text-success"
|
|
1928
|
+
warning:
|
|
1929
|
+
css:
|
|
1930
|
+
".dg-status--warning":
|
|
1931
|
+
apply: "dg-text-warning"
|
|
1932
|
+
error:
|
|
1933
|
+
css:
|
|
1934
|
+
".dg-status--error":
|
|
1935
|
+
apply: "dg-text-danger"
|
|
1936
|
+
primary:
|
|
1937
|
+
css:
|
|
1938
|
+
".dg-status--primary":
|
|
1939
|
+
apply: "dg-text-primary"
|
|
1940
|
+
secondary:
|
|
1941
|
+
css:
|
|
1942
|
+
".dg-status--secondary":
|
|
1943
|
+
apply: "dg-text-secondary"
|
|
1944
|
+
with-icon:
|
|
1945
|
+
css:
|
|
1946
|
+
".dg-status--with-icon":
|
|
1947
|
+
apply: "flex items-start gap-1"
|
|
1948
|
+
".dg-status--with-icon .dg-status__icon":
|
|
1949
|
+
apply: "flex-shrink-0 text-[1em] mt-[0.1em]"
|
|
1950
|
+
compact:
|
|
1951
|
+
css:
|
|
1952
|
+
".dg-status--compact":
|
|
1953
|
+
apply: "my-1 py-0.5 text-xs"
|
|
1954
|
+
media:
|
|
1955
|
+
"(min-width: 640px)":
|
|
1956
|
+
".dg-status--compact":
|
|
1957
|
+
apply: "text-sm"
|
|
1958
|
+
examples:
|
|
1959
|
+
- title: "Info Status"
|
|
1960
|
+
ast:
|
|
1961
|
+
tag: div
|
|
1962
|
+
props:
|
|
1963
|
+
class: "dg-status dg-status--info"
|
|
1964
|
+
children:
|
|
1965
|
+
- "Processing your request..."
|
|
1966
|
+
- title: "Success Status"
|
|
1967
|
+
ast:
|
|
1968
|
+
tag: div
|
|
1969
|
+
props:
|
|
1970
|
+
class: "dg-status dg-status--success"
|
|
1971
|
+
children:
|
|
1972
|
+
- "Operation completed successfully!"
|
|
1973
|
+
- title: "Warning Status"
|
|
1974
|
+
ast:
|
|
1975
|
+
tag: div
|
|
1976
|
+
props:
|
|
1977
|
+
class: "dg-status dg-status--warning"
|
|
1978
|
+
children:
|
|
1979
|
+
- "This action cannot be undone."
|
|
1980
|
+
- title: "Error Status"
|
|
1981
|
+
ast:
|
|
1982
|
+
tag: div
|
|
1983
|
+
props:
|
|
1984
|
+
class: "dg-status dg-status--error"
|
|
1985
|
+
children:
|
|
1986
|
+
- "An error occurred. Please try again."
|
|
1987
|
+
|
|
1988
|
+
spinner:
|
|
1989
|
+
metadata:
|
|
1990
|
+
title: "Spinner"
|
|
1991
|
+
description: "Loading spinner animation"
|
|
1992
|
+
category: "application-ui"
|
|
1993
|
+
section: "Feedback"
|
|
1994
|
+
subsection: "Alerts"
|
|
1995
|
+
tags: [spinner, loading, progress]
|
|
1996
|
+
css:
|
|
1997
|
+
".dg-spinner":
|
|
1998
|
+
apply: "rounded-full size-10 border-[3px] border-dg-pebble border-t-dg-primary mx-auto mb-3 animate-spin"
|
|
1999
|
+
".dg-processing-title":
|
|
2000
|
+
apply: "font-medium font-dg-noto text-xl dg-text-white mb-1"
|
|
2001
|
+
examples:
|
|
2002
|
+
- title: "Spinner"
|
|
2003
|
+
ast:
|
|
2004
|
+
tag: div
|
|
2005
|
+
props:
|
|
2006
|
+
class: "dg-spinner"
|
|
2007
|
+
|
|
2008
|
+
modal:
|
|
2009
|
+
metadata:
|
|
2010
|
+
title: "Modal"
|
|
2011
|
+
description: "Modal overlay with content"
|
|
2012
|
+
category: "application-ui"
|
|
2013
|
+
section: "Feedback"
|
|
2014
|
+
subsection: "Alerts"
|
|
2015
|
+
tags: [modal, overlay, dialog]
|
|
2016
|
+
css:
|
|
2017
|
+
".dg-modal-overlay":
|
|
2018
|
+
apply: "hidden fixed inset-0 items-center justify-center bg-black/80 z-50"
|
|
2019
|
+
".dg-modal-overlay.visible, .dg-modal-overlay--visible":
|
|
2020
|
+
apply: "flex"
|
|
2021
|
+
".dg-modal-content":
|
|
2022
|
+
apply: "text-center max-w-[25rem] m-3"
|
|
2023
|
+
examples:
|
|
2024
|
+
- title: "Modal"
|
|
2025
|
+
ast:
|
|
2026
|
+
tag: div
|
|
2027
|
+
props:
|
|
2028
|
+
class: "dg-modal-overlay dg-modal-overlay--visible"
|
|
2029
|
+
style: "position: relative; min-height: 200px;"
|
|
2030
|
+
children:
|
|
2031
|
+
- tag: div
|
|
2032
|
+
props:
|
|
2033
|
+
class: "dg-modal-content"
|
|
2034
|
+
children:
|
|
2035
|
+
- tag: div
|
|
2036
|
+
props:
|
|
2037
|
+
class: "dg-spinner"
|
|
2038
|
+
- tag: p
|
|
2039
|
+
props:
|
|
2040
|
+
class: "dg-processing-title"
|
|
2041
|
+
children:
|
|
2042
|
+
- "Processing..."
|
|
2043
|
+
|
|
2044
|
+
# ---------------------------------------------------------------------------
|
|
2045
|
+
# LAYOUT UTILITIES
|
|
2046
|
+
# ---------------------------------------------------------------------------
|
|
2047
|
+
constrain-width:
|
|
2048
|
+
metadata:
|
|
2049
|
+
title: "Constrained Container"
|
|
2050
|
+
description: "Max-width container for readable content areas"
|
|
2051
|
+
category: "application-ui"
|
|
2052
|
+
section: "Layout"
|
|
2053
|
+
subsection: "Containers"
|
|
2054
|
+
tags: [container, layout, max-width]
|
|
2055
|
+
css:
|
|
2056
|
+
".dg-constrain-width":
|
|
2057
|
+
apply: "w-full"
|
|
2058
|
+
".dg-center-h":
|
|
2059
|
+
apply: "mx-auto"
|
|
2060
|
+
media:
|
|
2061
|
+
"(min-width: 640px)":
|
|
2062
|
+
".dg-constrain-width":
|
|
2063
|
+
apply: "max-w-[70rem] mx-auto"
|
|
2064
|
+
examples:
|
|
2065
|
+
- title: "Constrained Container"
|
|
2066
|
+
ast:
|
|
2067
|
+
tag: div
|
|
2068
|
+
props:
|
|
2069
|
+
class: "dg-constrain-width"
|
|
2070
|
+
children:
|
|
2071
|
+
- tag: p
|
|
2072
|
+
props:
|
|
2073
|
+
class: "dg-prose"
|
|
2074
|
+
children:
|
|
2075
|
+
- "Content within a max-width container for readability."
|
|
2076
|
+
|
|
2077
|
+
grid-mobile-stack:
|
|
2078
|
+
metadata:
|
|
2079
|
+
title: "Responsive Grid"
|
|
2080
|
+
description: "Grid that stacks on mobile and displays side-by-side on desktop"
|
|
2081
|
+
category: "application-ui"
|
|
2082
|
+
section: "Layout"
|
|
2083
|
+
subsection: "Containers"
|
|
2084
|
+
tags: [grid, responsive, layout]
|
|
2085
|
+
css:
|
|
2086
|
+
".dg-grid-mobile-stack":
|
|
2087
|
+
apply: "flex flex-col gap-4"
|
|
2088
|
+
".dg-grid-mobile-stack > *":
|
|
2089
|
+
apply: "flex-1"
|
|
2090
|
+
media:
|
|
2091
|
+
"(min-width: 640px)":
|
|
2092
|
+
".dg-grid-mobile-stack":
|
|
2093
|
+
apply: "flex-row gap-4"
|
|
2094
|
+
examples:
|
|
2095
|
+
- title: "Responsive Grid"
|
|
2096
|
+
ast:
|
|
2097
|
+
tag: div
|
|
2098
|
+
props:
|
|
2099
|
+
class: "dg-grid-mobile-stack"
|
|
2100
|
+
children:
|
|
2101
|
+
- tag: div
|
|
2102
|
+
props:
|
|
2103
|
+
class: "dg-card"
|
|
2104
|
+
children:
|
|
2105
|
+
- tag: p
|
|
2106
|
+
children:
|
|
2107
|
+
- "Column 1"
|
|
2108
|
+
- tag: div
|
|
2109
|
+
props:
|
|
2110
|
+
class: "dg-card"
|
|
2111
|
+
children:
|
|
2112
|
+
- tag: p
|
|
2113
|
+
children:
|
|
2114
|
+
- "Column 2"
|
|
2115
|
+
|
|
2116
|
+
# ---------------------------------------------------------------------------
|
|
2117
|
+
# COLUMNS (THREE-COLUMN LAYOUT)
|
|
2118
|
+
# ---------------------------------------------------------------------------
|
|
2119
|
+
columns:
|
|
2120
|
+
metadata:
|
|
2121
|
+
title: "Three-Column Layout"
|
|
2122
|
+
description: "A simple responsive three-column layout that stacks on mobile"
|
|
2123
|
+
category: "application-ui"
|
|
2124
|
+
section: "Layout"
|
|
2125
|
+
subsection: "Multi-Column Layouts"
|
|
2126
|
+
tags: [layout, three-column, sidebar, responsive]
|
|
2127
|
+
css:
|
|
2128
|
+
".dg-columns":
|
|
2129
|
+
apply: "flex flex-col w-full"
|
|
2130
|
+
".dg-columns__wrapper":
|
|
2131
|
+
apply: "flex flex-col flex-1 min-w-0"
|
|
2132
|
+
".dg-column":
|
|
2133
|
+
apply: "px-4 py-6 min-w-0"
|
|
2134
|
+
".dg-column--main":
|
|
2135
|
+
apply: "flex-1"
|
|
2136
|
+
".dg-column--sidebar-left": {}
|
|
2137
|
+
".dg-column--sidebar-right":
|
|
2138
|
+
properties:
|
|
2139
|
+
position: "relative"
|
|
2140
|
+
media:
|
|
2141
|
+
"(min-width: 640px)":
|
|
2142
|
+
".dg-column":
|
|
2143
|
+
apply: "px-6"
|
|
2144
|
+
"(min-width: 768px)":
|
|
2145
|
+
".dg-columns":
|
|
2146
|
+
apply: "flex-row"
|
|
2147
|
+
"(min-width: 768px) and (max-width: 1279px)":
|
|
2148
|
+
".dg-column--sidebar-right":
|
|
2149
|
+
properties:
|
|
2150
|
+
position: "fixed"
|
|
2151
|
+
top: "65px"
|
|
2152
|
+
right: "0"
|
|
2153
|
+
height: "calc(100vh - 65px)"
|
|
2154
|
+
width: "16rem"
|
|
2155
|
+
flex-shrink: "0"
|
|
2156
|
+
transition: "transform 300ms ease"
|
|
2157
|
+
z-index: "20"
|
|
2158
|
+
box-shadow: "-4px 0 16px rgba(0, 0, 0, 0.5)"
|
|
2159
|
+
".dg-column--sidebar-right.dg-column--sm":
|
|
2160
|
+
properties:
|
|
2161
|
+
width: "20rem"
|
|
2162
|
+
".dg-column--sidebar-right.dg-column--lg":
|
|
2163
|
+
properties:
|
|
2164
|
+
width: "24rem"
|
|
2165
|
+
".dg-column--sidebar-right.dg-column--xl":
|
|
2166
|
+
properties:
|
|
2167
|
+
width: "32rem"
|
|
2168
|
+
".dg-column--sidebar-right.collapsed":
|
|
2169
|
+
properties:
|
|
2170
|
+
transform: "translateX(calc(100% - 2rem))"
|
|
2171
|
+
"(min-width: 1024px)":
|
|
2172
|
+
".dg-columns__wrapper":
|
|
2173
|
+
apply: "flex-row"
|
|
2174
|
+
".dg-column--sidebar-left":
|
|
2175
|
+
apply: "w-48 flex-shrink-0"
|
|
2176
|
+
".dg-column--sidebar-left.dg-column--sm":
|
|
2177
|
+
apply: "w-64 flex-shrink-0"
|
|
2178
|
+
".dg-column--sidebar-left.dg-column--lg":
|
|
2179
|
+
apply: "w-96 flex-shrink-0"
|
|
2180
|
+
".dg-column--sidebar-left.dg-column--xl":
|
|
2181
|
+
apply: "w-128 flex-shrink-0"
|
|
2182
|
+
"(min-width: 1280px)":
|
|
2183
|
+
".dg-column--sidebar-right":
|
|
2184
|
+
properties:
|
|
2185
|
+
width: "16rem"
|
|
2186
|
+
flex-shrink: "0"
|
|
2187
|
+
".dg-column--sidebar-right.dg-column--sm":
|
|
2188
|
+
properties:
|
|
2189
|
+
width: "20rem"
|
|
2190
|
+
flex-shrink: "0"
|
|
2191
|
+
".dg-column--sidebar-right.dg-column--lg":
|
|
2192
|
+
properties:
|
|
2193
|
+
width: "24rem"
|
|
2194
|
+
flex-shrink: "0"
|
|
2195
|
+
".dg-column--sidebar-right.dg-column--xl":
|
|
2196
|
+
properties:
|
|
2197
|
+
width: "32rem"
|
|
2198
|
+
flex-shrink: "0"
|
|
2199
|
+
examples:
|
|
2200
|
+
- title: "Three-Column Layout"
|
|
2201
|
+
ast:
|
|
2202
|
+
tag: div
|
|
2203
|
+
props:
|
|
2204
|
+
class: "dg-columns"
|
|
2205
|
+
style: "min-height: 300px;"
|
|
2206
|
+
children:
|
|
2207
|
+
- tag: div
|
|
2208
|
+
props:
|
|
2209
|
+
class: "dg-columns__wrapper"
|
|
2210
|
+
children:
|
|
2211
|
+
- tag: aside
|
|
2212
|
+
props:
|
|
2213
|
+
class: "dg-column dg-column--sidebar-left"
|
|
2214
|
+
style: "background: rgba(255,255,255,0.03);"
|
|
2215
|
+
children:
|
|
2216
|
+
- tag: p
|
|
2217
|
+
props:
|
|
2218
|
+
class: "dg-prose"
|
|
2219
|
+
children:
|
|
2220
|
+
- "Left Sidebar"
|
|
2221
|
+
- tag: main
|
|
2222
|
+
props:
|
|
2223
|
+
class: "dg-column dg-column--main"
|
|
2224
|
+
children:
|
|
2225
|
+
- tag: p
|
|
2226
|
+
props:
|
|
2227
|
+
class: "dg-prose"
|
|
2228
|
+
children:
|
|
2229
|
+
- "Main Content"
|
|
2230
|
+
- tag: aside
|
|
2231
|
+
props:
|
|
2232
|
+
class: "dg-column dg-column--sidebar-right"
|
|
2233
|
+
style: "background: rgba(255,255,255,0.03);"
|
|
2234
|
+
children:
|
|
2235
|
+
- tag: p
|
|
2236
|
+
props:
|
|
2237
|
+
class: "dg-prose"
|
|
2238
|
+
children:
|
|
2239
|
+
- "Right Sidebar"
|
|
2240
|
+
|
|
2241
|
+
# ---------------------------------------------------------------------------
|
|
2242
|
+
# APPLICATION SHELLS
|
|
2243
|
+
# ---------------------------------------------------------------------------
|
|
2244
|
+
header:
|
|
2245
|
+
metadata:
|
|
2246
|
+
title: "Header"
|
|
2247
|
+
description: "Application header with logo and navigation"
|
|
2248
|
+
category: "application-ui"
|
|
2249
|
+
section: "Application Shells"
|
|
2250
|
+
subsection: "Stacked Layouts"
|
|
2251
|
+
tags: [header, navigation, layout]
|
|
2252
|
+
css:
|
|
2253
|
+
".dg-header":
|
|
2254
|
+
apply: "w-full"
|
|
2255
|
+
properties:
|
|
2256
|
+
background: "#050506"
|
|
2257
|
+
padding: "1rem 1.5rem"
|
|
2258
|
+
border-bottom: "1px solid rgba(255, 255, 255, 0.1)"
|
|
2259
|
+
".dg-header__container":
|
|
2260
|
+
apply: "flex items-center justify-between max-w-screen-2xl mx-auto"
|
|
2261
|
+
".dg-header__logo":
|
|
2262
|
+
apply: "flex items-center gap-3"
|
|
2263
|
+
".dg-header__logo-image":
|
|
2264
|
+
apply: "h-8 w-auto"
|
|
2265
|
+
".dg-header__logo-text":
|
|
2266
|
+
apply: "font-dg-noto font-bold text-xl dg-text-white"
|
|
2267
|
+
".dg-header__nav":
|
|
2268
|
+
apply: "flex items-center gap-4"
|
|
2269
|
+
".dg-header__profile-link":
|
|
2270
|
+
apply: "-m-1.5 p-1.5 block"
|
|
2271
|
+
".dg-header__profile-avatar":
|
|
2272
|
+
apply: "size-8 rounded-full bg-gray-800 outline -outline-offset-1 outline-white/10"
|
|
2273
|
+
media:
|
|
2274
|
+
"(max-width: 768px)":
|
|
2275
|
+
".dg-header":
|
|
2276
|
+
properties:
|
|
2277
|
+
padding: "0.75rem 1rem"
|
|
2278
|
+
".dg-header__logo-text":
|
|
2279
|
+
apply: "text-lg"
|
|
2280
|
+
examples:
|
|
2281
|
+
- title: "Simple Header with Logo"
|
|
2282
|
+
ast:
|
|
2283
|
+
tag: header
|
|
2284
|
+
props:
|
|
2285
|
+
class: "dg-header"
|
|
2286
|
+
children:
|
|
2287
|
+
- tag: div
|
|
2288
|
+
props:
|
|
2289
|
+
class: "dg-header__container"
|
|
2290
|
+
children:
|
|
2291
|
+
- tag: div
|
|
2292
|
+
props:
|
|
2293
|
+
class: "dg-header__logo"
|
|
2294
|
+
children:
|
|
2295
|
+
- tag: span
|
|
2296
|
+
props:
|
|
2297
|
+
class: "dg-header__logo-text"
|
|
2298
|
+
children:
|
|
2299
|
+
- "Deepgram"
|
|
2300
|
+
- title: "Header with Navigation"
|
|
2301
|
+
ast:
|
|
2302
|
+
tag: header
|
|
2303
|
+
props:
|
|
2304
|
+
class: "dg-header"
|
|
2305
|
+
children:
|
|
2306
|
+
- tag: div
|
|
2307
|
+
props:
|
|
2308
|
+
class: "dg-header__container"
|
|
2309
|
+
children:
|
|
2310
|
+
- tag: div
|
|
2311
|
+
props:
|
|
2312
|
+
class: "dg-header__logo"
|
|
2313
|
+
children:
|
|
2314
|
+
- tag: span
|
|
2315
|
+
props:
|
|
2316
|
+
class: "dg-header__logo-text"
|
|
2317
|
+
children:
|
|
2318
|
+
- "Deepgram"
|
|
2319
|
+
- tag: nav
|
|
2320
|
+
props:
|
|
2321
|
+
class: "dg-header__nav"
|
|
2322
|
+
children:
|
|
2323
|
+
- tag: a
|
|
2324
|
+
props:
|
|
2325
|
+
href: "#"
|
|
2326
|
+
class: "dg-link"
|
|
2327
|
+
children:
|
|
2328
|
+
- "Docs"
|
|
2329
|
+
- tag: a
|
|
2330
|
+
props:
|
|
2331
|
+
href: "#"
|
|
2332
|
+
class: "dg-link"
|
|
2333
|
+
children:
|
|
2334
|
+
- "API"
|
|
2335
|
+
|
|
2336
|
+
footer:
|
|
2337
|
+
metadata:
|
|
2338
|
+
title: "Footer"
|
|
2339
|
+
description: "Simple footer for page layouts"
|
|
2340
|
+
category: "application-ui"
|
|
2341
|
+
section: "Application Shells"
|
|
2342
|
+
subsection: "Stacked Layouts"
|
|
2343
|
+
tags: [footer, layout]
|
|
2344
|
+
css:
|
|
2345
|
+
".dg-footer":
|
|
2346
|
+
apply: "text-center border-t border-dg-pebble mt-16"
|
|
2347
|
+
examples:
|
|
2348
|
+
- title: "Simple Footer"
|
|
2349
|
+
ast:
|
|
2350
|
+
tag: footer
|
|
2351
|
+
props:
|
|
2352
|
+
class: "dg-footer"
|
|
2353
|
+
children:
|
|
2354
|
+
- tag: div
|
|
2355
|
+
props:
|
|
2356
|
+
class: "dg-section"
|
|
2357
|
+
children:
|
|
2358
|
+
- tag: p
|
|
2359
|
+
props:
|
|
2360
|
+
class: "dg-text-tagline"
|
|
2361
|
+
children:
|
|
2362
|
+
- "© 2024 Deepgram. All rights reserved."
|
|
2363
|
+
- title: "Footer with Links"
|
|
2364
|
+
ast:
|
|
2365
|
+
tag: footer
|
|
2366
|
+
props:
|
|
2367
|
+
class: "dg-footer"
|
|
2368
|
+
children:
|
|
2369
|
+
- tag: div
|
|
2370
|
+
props:
|
|
2371
|
+
class: "dg-section"
|
|
2372
|
+
children:
|
|
2373
|
+
- tag: div
|
|
2374
|
+
props:
|
|
2375
|
+
class: "dg-social-links"
|
|
2376
|
+
children:
|
|
2377
|
+
- tag: a
|
|
2378
|
+
props:
|
|
2379
|
+
href: "#"
|
|
2380
|
+
class: "dg-social-link"
|
|
2381
|
+
children:
|
|
2382
|
+
- tag: i
|
|
2383
|
+
props:
|
|
2384
|
+
class: "fab fa-github"
|
|
2385
|
+
- tag: a
|
|
2386
|
+
props:
|
|
2387
|
+
href: "#"
|
|
2388
|
+
class: "dg-social-link"
|
|
2389
|
+
children:
|
|
2390
|
+
- tag: i
|
|
2391
|
+
props:
|
|
2392
|
+
class: "fab fa-twitter"
|
|
2393
|
+
- tag: p
|
|
2394
|
+
props:
|
|
2395
|
+
class: "dg-text-tagline"
|
|
2396
|
+
children:
|
|
2397
|
+
- "© 2024 Deepgram. All rights reserved."
|
|
2398
|
+
|
|
2399
|
+
# ---------------------------------------------------------------------------
|
|
2400
|
+
# LINKS
|
|
2401
|
+
# ---------------------------------------------------------------------------
|
|
2402
|
+
link:
|
|
2403
|
+
metadata:
|
|
2404
|
+
title: "Link"
|
|
2405
|
+
description: "Primary link with hover effect"
|
|
2406
|
+
category: "application-ui"
|
|
2407
|
+
section: "Navigation"
|
|
2408
|
+
subsection: "Navbars"
|
|
2409
|
+
tags: [link, navigation]
|
|
2410
|
+
css:
|
|
2411
|
+
".dg-link":
|
|
2412
|
+
apply: "dg-text-primary transition-opacity duration-200"
|
|
2413
|
+
".dg-link:hover":
|
|
2414
|
+
apply: "opacity-80"
|
|
2415
|
+
".dg-social-link":
|
|
2416
|
+
apply: "dg-text-fog transition-colors duration-200 text-xl"
|
|
2417
|
+
".dg-social-link:hover":
|
|
2418
|
+
apply: "dg-text-primary"
|
|
2419
|
+
examples:
|
|
2420
|
+
- title: "Link"
|
|
2421
|
+
ast:
|
|
2422
|
+
tag: a
|
|
2423
|
+
props:
|
|
2424
|
+
href: "#"
|
|
2425
|
+
class: "dg-link"
|
|
2426
|
+
children:
|
|
2427
|
+
- "Learn more"
|
|
2428
|
+
|
|
2429
|
+
# ---------------------------------------------------------------------------
|
|
2430
|
+
# TEXT UTILITIES
|
|
2431
|
+
# ---------------------------------------------------------------------------
|
|
2432
|
+
text-utilities:
|
|
2433
|
+
metadata:
|
|
2434
|
+
title: "Text Utilities"
|
|
2435
|
+
description: "Text color and typography utility classes"
|
|
2436
|
+
category: "application-ui"
|
|
2437
|
+
section: "Elements"
|
|
2438
|
+
subsection: "Buttons"
|
|
2439
|
+
tags: [text, color, utility]
|
|
2440
|
+
css:
|
|
2441
|
+
".dg-text-center":
|
|
2442
|
+
apply: "text-center"
|
|
2443
|
+
".dg-text-danger":
|
|
2444
|
+
apply: "text-dg-danger"
|
|
2445
|
+
".dg-text-success":
|
|
2446
|
+
apply: "text-dg-success"
|
|
2447
|
+
".dg-text-warning":
|
|
2448
|
+
apply: "text-dg-warning"
|
|
2449
|
+
".dg-text-primary":
|
|
2450
|
+
apply: "text-dg-primary"
|
|
2451
|
+
".dg-text-secondary":
|
|
2452
|
+
apply: "text-dg-secondary"
|
|
2453
|
+
".dg-text-muted":
|
|
2454
|
+
apply: "text-dg-muted"
|
|
2455
|
+
".dg-text-fog":
|
|
2456
|
+
apply: "text-dg-fog"
|
|
2457
|
+
".dg-text-white":
|
|
2458
|
+
apply: "text-white"
|
|
2459
|
+
".dg-text-tagline":
|
|
2460
|
+
apply: "text-center dg-text-fog text-sm"
|
|
2461
|
+
".dg-text-subtitle":
|
|
2462
|
+
apply: "dg-text-fog text-sm"
|
|
2463
|
+
".dg-text-heading":
|
|
2464
|
+
apply: "dg-text-white text-base font-medium"
|
|
2465
|
+
".dg-text-heading--with-margin":
|
|
2466
|
+
apply: "dg-text-white text-base font-medium mb-1"
|
|
2467
|
+
".dg-text-legal":
|
|
2468
|
+
apply: "text-xs dg-text-muted text-center"
|
|
2469
|
+
examples:
|
|
2470
|
+
- title: "Text Colors"
|
|
2471
|
+
ast:
|
|
2472
|
+
tag: div
|
|
2473
|
+
props:
|
|
2474
|
+
class: "dg-prose"
|
|
2475
|
+
children:
|
|
2476
|
+
- tag: span
|
|
2477
|
+
props:
|
|
2478
|
+
class: "dg-text-primary"
|
|
2479
|
+
children:
|
|
2480
|
+
- "Primary "
|
|
2481
|
+
- tag: span
|
|
2482
|
+
props:
|
|
2483
|
+
class: "dg-text-secondary"
|
|
2484
|
+
children:
|
|
2485
|
+
- "Secondary "
|
|
2486
|
+
- tag: span
|
|
2487
|
+
props:
|
|
2488
|
+
class: "dg-text-success"
|
|
2489
|
+
children:
|
|
2490
|
+
- "Success "
|
|
2491
|
+
- tag: span
|
|
2492
|
+
props:
|
|
2493
|
+
class: "dg-text-danger"
|
|
2494
|
+
children:
|
|
2495
|
+
- "Danger"
|
|
2496
|
+
|
|
2497
|
+
# ---------------------------------------------------------------------------
|
|
2498
|
+
# NEWSLETTER
|
|
2499
|
+
# ---------------------------------------------------------------------------
|
|
2500
|
+
newsletter:
|
|
2501
|
+
metadata:
|
|
2502
|
+
title: "Newsletter Signup"
|
|
2503
|
+
description: "Newsletter subscription form with email input and privacy checkbox"
|
|
2504
|
+
category: "application-ui"
|
|
2505
|
+
section: "Forms"
|
|
2506
|
+
subsection: "Form Layouts"
|
|
2507
|
+
tags: [newsletter, form, email, signup, subscription]
|
|
2508
|
+
css:
|
|
2509
|
+
".dg-newsletter-container":
|
|
2510
|
+
apply: "flex flex-col gap-4"
|
|
2511
|
+
".dg-newsletter-container--compact":
|
|
2512
|
+
apply: "flex flex-col gap-3"
|
|
2513
|
+
".dg-newsletter-form":
|
|
2514
|
+
apply: "flex flex-col gap-4"
|
|
2515
|
+
".dg-newsletter-form--compact":
|
|
2516
|
+
apply: "flex flex-col gap-3"
|
|
2517
|
+
".dg-newsletter-form--inline":
|
|
2518
|
+
apply: "flex gap-2 w-full"
|
|
2519
|
+
".dg-newsletter-header":
|
|
2520
|
+
apply: "flex flex-col gap-3 items-start"
|
|
2521
|
+
".dg-newsletter-header__content":
|
|
2522
|
+
apply: "flex-1"
|
|
2523
|
+
".dg-newsletter-header__actions":
|
|
2524
|
+
apply: "w-full"
|
|
2525
|
+
".dg-logo-container":
|
|
2526
|
+
apply: "flex justify-center"
|
|
2527
|
+
".dg-logo":
|
|
2528
|
+
apply: "h-8 w-auto"
|
|
2529
|
+
".dg-social-links":
|
|
2530
|
+
apply: "flex justify-center gap-4"
|
|
2531
|
+
media:
|
|
2532
|
+
"(min-width: 640px)":
|
|
2533
|
+
".dg-newsletter-form--inline":
|
|
2534
|
+
apply: "w-auto"
|
|
2535
|
+
".dg-newsletter-header":
|
|
2536
|
+
apply: "flex-row items-center"
|
|
2537
|
+
".dg-newsletter-header__actions":
|
|
2538
|
+
apply: "w-auto"
|
|
2539
|
+
examples:
|
|
2540
|
+
- title: "Simple Newsletter"
|
|
2541
|
+
ast:
|
|
2542
|
+
tag: div
|
|
2543
|
+
props:
|
|
2544
|
+
class: "dg-newsletter-container"
|
|
2545
|
+
children:
|
|
2546
|
+
- tag: h3
|
|
2547
|
+
props:
|
|
2548
|
+
class: "dg-card-heading"
|
|
2549
|
+
children:
|
|
2550
|
+
- "Stay Updated"
|
|
2551
|
+
- tag: p
|
|
2552
|
+
props:
|
|
2553
|
+
class: "dg-prose"
|
|
2554
|
+
children:
|
|
2555
|
+
- "Get the latest news and updates from Deepgram."
|
|
2556
|
+
- tag: form
|
|
2557
|
+
props:
|
|
2558
|
+
class: "dg-newsletter-form"
|
|
2559
|
+
children:
|
|
2560
|
+
- tag: input
|
|
2561
|
+
props:
|
|
2562
|
+
type: email
|
|
2563
|
+
class: "dg-input"
|
|
2564
|
+
placeholder: "Enter your email"
|
|
2565
|
+
- tag: button
|
|
2566
|
+
props:
|
|
2567
|
+
type: submit
|
|
2568
|
+
class: "dg-btn dg-btn--primary"
|
|
2569
|
+
children:
|
|
2570
|
+
- "Subscribe"
|
|
2571
|
+
- title: "Inline Newsletter"
|
|
2572
|
+
ast:
|
|
2573
|
+
tag: div
|
|
2574
|
+
props:
|
|
2575
|
+
class: "dg-newsletter-container"
|
|
2576
|
+
children:
|
|
2577
|
+
- tag: form
|
|
2578
|
+
props:
|
|
2579
|
+
class: "dg-newsletter-form--inline"
|
|
2580
|
+
children:
|
|
2581
|
+
- tag: input
|
|
2582
|
+
props:
|
|
2583
|
+
type: email
|
|
2584
|
+
class: "dg-input"
|
|
2585
|
+
placeholder: "Enter your email"
|
|
2586
|
+
- tag: button
|
|
2587
|
+
props:
|
|
2588
|
+
type: submit
|
|
2589
|
+
class: "dg-btn dg-btn--primary"
|
|
2590
|
+
children:
|
|
2591
|
+
- "Subscribe"
|