@latty-ds/web 0.8.1 → 0.10.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.
Files changed (45) hide show
  1. package/custom-elements.json +103 -33
  2. package/dist/components/accordion/index.js +44 -8
  3. package/dist/components/alert/index.js +72 -8
  4. package/dist/components/avatar/index.js +1 -1
  5. package/dist/components/badge/index.js +1 -1
  6. package/dist/components/breadcrumb/index.js +1 -1
  7. package/dist/components/button/button.d.ts +6 -0
  8. package/dist/components/button/index.js +29 -1
  9. package/dist/components/calendar/index.js +1 -1
  10. package/dist/components/checkbox/index.js +1 -1
  11. package/dist/components/chip/index.js +1 -1
  12. package/dist/components/color-input/index.js +44 -8
  13. package/dist/components/combobox/index.js +44 -8
  14. package/dist/components/date-input/index.js +45 -9
  15. package/dist/components/datepicker/index.js +44 -8
  16. package/dist/components/dialog/dialog.d.ts +11 -0
  17. package/dist/components/dialog/index.js +83 -10
  18. package/dist/components/divider/index.js +1 -1
  19. package/dist/components/dropdown/dropdown.d.ts +2 -0
  20. package/dist/components/dropdown/index.js +4 -3
  21. package/dist/components/icon-button/icon-button.d.ts +6 -0
  22. package/dist/components/icon-button/index.js +28 -0
  23. package/dist/components/list/index.js +1 -1
  24. package/dist/components/pagination/index.js +1 -1
  25. package/dist/components/radio/index.js +1 -1
  26. package/dist/components/radio-group/index.js +44 -8
  27. package/dist/components/select/index.js +54 -10
  28. package/dist/components/sidepanel/index.js +76 -11
  29. package/dist/components/sidepanel/sidepanel.d.ts +2 -0
  30. package/dist/components/slider/index.js +44 -8
  31. package/dist/components/snackbar/index.js +11 -3
  32. package/dist/components/snackbar/snackbar.d.ts +11 -0
  33. package/dist/components/surface/index.js +1 -1
  34. package/dist/components/switch/index.js +1 -1
  35. package/dist/components/tab/index.js +1 -1
  36. package/dist/components/tab-group/index.js +2 -2
  37. package/dist/components/table/index.js +1 -1
  38. package/dist/components/text/index.js +43 -7
  39. package/dist/components/text/text.d.ts +1 -0
  40. package/dist/components/textfield/index.js +44 -8
  41. package/dist/components/tooltip/index.js +43 -7
  42. package/dist/index.cjs +163 -44
  43. package/dist/index.js +163 -44
  44. package/dist/manifest.json +36 -0
  45. package/package.json +3 -3
@@ -42,7 +42,7 @@ import { css } from "lit";
42
42
  var accordionStyles = css`
43
43
  :host {
44
44
  display: block;
45
- font-family: var(--lt-typography-fontFamily, 'Hanken Grotesk', sans-serif);
45
+ font-family: var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif);
46
46
  width: 100%;
47
47
  }
48
48
 
@@ -198,67 +198,103 @@ var textStyles = css2`
198
198
  [part='base'] {
199
199
  margin: 0;
200
200
  color: inherit;
201
- font-family: var(--lt-typography-fontFamily, 'Hanken Grotesk', sans-serif);
201
+ font-family: var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif);
202
202
  }
203
203
 
204
204
  /* ── Display ─────────────────────────────────────────────────────────── */
205
205
 
206
206
  :host([variant='display-2xl']) [part='base'] {
207
+ font-family: var(
208
+ --lt-typography-fontFamilyHeading,
209
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
210
+ );
207
211
  font-size: clamp(2.5rem, 6vw, 4.5rem);
208
212
  font-weight: var(--lt-text-weight, 200);
209
213
  line-height: 1.1;
210
- letter-spacing: -0.02em;
214
+ letter-spacing: var(--lt-text-tracking, -0.02em);
211
215
  }
212
216
 
213
217
  :host([variant='display-xl']) [part='base'] {
218
+ font-family: var(
219
+ --lt-typography-fontFamilyHeading,
220
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
221
+ );
214
222
  font-size: clamp(2rem, 5vw, 3.75rem);
215
223
  font-weight: var(--lt-text-weight, 200);
216
224
  line-height: 1.1;
217
- letter-spacing: -0.02em;
225
+ letter-spacing: var(--lt-text-tracking, -0.02em);
218
226
  }
219
227
 
220
228
  :host([variant='display-lg']) [part='base'] {
229
+ font-family: var(
230
+ --lt-typography-fontFamilyHeading,
231
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
232
+ );
221
233
  font-size: clamp(2rem, 4vw, 3rem);
222
234
  font-weight: var(--lt-text-weight, 200);
223
235
  line-height: 1.15;
224
- letter-spacing: -0.01em;
236
+ letter-spacing: var(--lt-text-tracking, -0.01em);
225
237
  }
226
238
 
227
239
  /* ── Headings ─────────────────────────────────────────────────────────── */
228
240
 
229
241
  :host([variant='h1']) [part='base'] {
242
+ font-family: var(
243
+ --lt-typography-fontFamilyHeading,
244
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
245
+ );
230
246
  font-size: clamp(1.75rem, 2.5vw + 0.75rem, 2.5rem);
231
247
  font-weight: var(--lt-text-weight, 600);
232
248
  line-height: 1.2;
233
- letter-spacing: -0.02em;
249
+ letter-spacing: var(--lt-text-tracking, -0.02em);
234
250
  }
235
251
 
236
252
  :host([variant='h2']) [part='base'] {
253
+ font-family: var(
254
+ --lt-typography-fontFamilyHeading,
255
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
256
+ );
237
257
  font-size: clamp(1.5rem, 2vw + 0.5rem, 2rem);
238
258
  font-weight: var(--lt-text-weight, 600);
239
259
  line-height: 1.25;
240
- letter-spacing: -0.01em;
260
+ letter-spacing: var(--lt-text-tracking, -0.01em);
241
261
  }
242
262
 
243
263
  :host([variant='h3']) [part='base'] {
264
+ font-family: var(
265
+ --lt-typography-fontFamilyHeading,
266
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
267
+ );
244
268
  font-size: clamp(1.25rem, 1.5vw + 0.5rem, 1.5rem);
245
269
  font-weight: var(--lt-text-weight, 600);
246
270
  line-height: 1.3;
247
271
  }
248
272
 
249
273
  :host([variant='h4']) [part='base'] {
274
+ font-family: var(
275
+ --lt-typography-fontFamilyHeading,
276
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
277
+ );
250
278
  font-size: 1.25rem;
251
279
  font-weight: var(--lt-text-weight, 600);
252
280
  line-height: 1.35;
253
281
  }
254
282
 
255
283
  :host([variant='h5']) [part='base'] {
284
+ font-family: var(
285
+ --lt-typography-fontFamilyHeading,
286
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
287
+ );
256
288
  font-size: 1.125rem;
257
289
  font-weight: var(--lt-text-weight, 600);
258
290
  line-height: 1.4;
259
291
  }
260
292
 
261
293
  :host([variant='h6']) [part='base'] {
294
+ font-family: var(
295
+ --lt-typography-fontFamilyHeading,
296
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
297
+ );
262
298
  font-size: 1rem;
263
299
  font-weight: var(--lt-text-weight, 600);
264
300
  line-height: 1.4;
@@ -297,7 +333,7 @@ var textStyles = css2`
297
333
  font-size: 0.6875rem;
298
334
  font-weight: var(--lt-text-weight, 600);
299
335
  line-height: 1.2;
300
- letter-spacing: 0.08em;
336
+ letter-spacing: var(--lt-text-tracking, 0.08em);
301
337
  text-transform: uppercase;
302
338
  }
303
339
 
@@ -43,7 +43,7 @@ import { css } from "lit";
43
43
  var alertStyles = css`
44
44
  :host {
45
45
  display: block;
46
- font-family: var(--lt-typography-fontFamily, 'Hanken Grotesk', sans-serif);
46
+ font-family: var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif);
47
47
  opacity: 1;
48
48
  transform: translateY(0);
49
49
  transition:
@@ -408,6 +408,30 @@ var iconButtonStyles = css2`
408
408
  --_active-bg: var(--lt-bg-info-subtle);
409
409
  }
410
410
 
411
+ /* bordered — adds a border on top of whatever appearance is active; a no-op on
412
+ outlined, which already sets the same border color. */
413
+ :host([bordered][variant='primary']) {
414
+ --_border-color: var(--lt-border-primary-strong);
415
+ }
416
+ :host([bordered][variant='secondary']) {
417
+ --_border-color: var(--lt-border-secondary-strong);
418
+ }
419
+ :host([bordered][variant='neutral']) {
420
+ --_border-color: var(--lt-border-strong);
421
+ }
422
+ :host([bordered][variant='success']) {
423
+ --_border-color: var(--lt-border-success-strong);
424
+ }
425
+ :host([bordered][variant='warning']) {
426
+ --_border-color: var(--lt-border-warning-strong);
427
+ }
428
+ :host([bordered][variant='error']) {
429
+ --_border-color: var(--lt-border-error-strong);
430
+ }
431
+ :host([bordered][variant='info']) {
432
+ --_border-color: var(--lt-border-info-strong);
433
+ }
434
+
411
435
  /* round shape */
412
436
  :host([round]) [part='base'] {
413
437
  border-radius: 50%;
@@ -457,6 +481,7 @@ var IconButton = class extends ThemeableElement {
457
481
  this.label = "";
458
482
  this.variant = "neutral";
459
483
  this.appearance = "ghost";
484
+ this.bordered = false;
460
485
  this.size = "md";
461
486
  this.disabled = false;
462
487
  this.href = "";
@@ -503,6 +528,9 @@ __decorateClass([
503
528
  __decorateClass([
504
529
  property2({ reflect: true })
505
530
  ], IconButton.prototype, "appearance", 2);
531
+ __decorateClass([
532
+ property2({ type: Boolean, reflect: true })
533
+ ], IconButton.prototype, "bordered", 2);
506
534
  __decorateClass([
507
535
  property2({ reflect: true })
508
536
  ], IconButton.prototype, "size", 2);
@@ -547,67 +575,103 @@ var textStyles = css3`
547
575
  [part='base'] {
548
576
  margin: 0;
549
577
  color: inherit;
550
- font-family: var(--lt-typography-fontFamily, 'Hanken Grotesk', sans-serif);
578
+ font-family: var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif);
551
579
  }
552
580
 
553
581
  /* ── Display ─────────────────────────────────────────────────────────── */
554
582
 
555
583
  :host([variant='display-2xl']) [part='base'] {
584
+ font-family: var(
585
+ --lt-typography-fontFamilyHeading,
586
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
587
+ );
556
588
  font-size: clamp(2.5rem, 6vw, 4.5rem);
557
589
  font-weight: var(--lt-text-weight, 200);
558
590
  line-height: 1.1;
559
- letter-spacing: -0.02em;
591
+ letter-spacing: var(--lt-text-tracking, -0.02em);
560
592
  }
561
593
 
562
594
  :host([variant='display-xl']) [part='base'] {
595
+ font-family: var(
596
+ --lt-typography-fontFamilyHeading,
597
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
598
+ );
563
599
  font-size: clamp(2rem, 5vw, 3.75rem);
564
600
  font-weight: var(--lt-text-weight, 200);
565
601
  line-height: 1.1;
566
- letter-spacing: -0.02em;
602
+ letter-spacing: var(--lt-text-tracking, -0.02em);
567
603
  }
568
604
 
569
605
  :host([variant='display-lg']) [part='base'] {
606
+ font-family: var(
607
+ --lt-typography-fontFamilyHeading,
608
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
609
+ );
570
610
  font-size: clamp(2rem, 4vw, 3rem);
571
611
  font-weight: var(--lt-text-weight, 200);
572
612
  line-height: 1.15;
573
- letter-spacing: -0.01em;
613
+ letter-spacing: var(--lt-text-tracking, -0.01em);
574
614
  }
575
615
 
576
616
  /* ── Headings ─────────────────────────────────────────────────────────── */
577
617
 
578
618
  :host([variant='h1']) [part='base'] {
619
+ font-family: var(
620
+ --lt-typography-fontFamilyHeading,
621
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
622
+ );
579
623
  font-size: clamp(1.75rem, 2.5vw + 0.75rem, 2.5rem);
580
624
  font-weight: var(--lt-text-weight, 600);
581
625
  line-height: 1.2;
582
- letter-spacing: -0.02em;
626
+ letter-spacing: var(--lt-text-tracking, -0.02em);
583
627
  }
584
628
 
585
629
  :host([variant='h2']) [part='base'] {
630
+ font-family: var(
631
+ --lt-typography-fontFamilyHeading,
632
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
633
+ );
586
634
  font-size: clamp(1.5rem, 2vw + 0.5rem, 2rem);
587
635
  font-weight: var(--lt-text-weight, 600);
588
636
  line-height: 1.25;
589
- letter-spacing: -0.01em;
637
+ letter-spacing: var(--lt-text-tracking, -0.01em);
590
638
  }
591
639
 
592
640
  :host([variant='h3']) [part='base'] {
641
+ font-family: var(
642
+ --lt-typography-fontFamilyHeading,
643
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
644
+ );
593
645
  font-size: clamp(1.25rem, 1.5vw + 0.5rem, 1.5rem);
594
646
  font-weight: var(--lt-text-weight, 600);
595
647
  line-height: 1.3;
596
648
  }
597
649
 
598
650
  :host([variant='h4']) [part='base'] {
651
+ font-family: var(
652
+ --lt-typography-fontFamilyHeading,
653
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
654
+ );
599
655
  font-size: 1.25rem;
600
656
  font-weight: var(--lt-text-weight, 600);
601
657
  line-height: 1.35;
602
658
  }
603
659
 
604
660
  :host([variant='h5']) [part='base'] {
661
+ font-family: var(
662
+ --lt-typography-fontFamilyHeading,
663
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
664
+ );
605
665
  font-size: 1.125rem;
606
666
  font-weight: var(--lt-text-weight, 600);
607
667
  line-height: 1.4;
608
668
  }
609
669
 
610
670
  :host([variant='h6']) [part='base'] {
671
+ font-family: var(
672
+ --lt-typography-fontFamilyHeading,
673
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
674
+ );
611
675
  font-size: 1rem;
612
676
  font-weight: var(--lt-text-weight, 600);
613
677
  line-height: 1.4;
@@ -646,7 +710,7 @@ var textStyles = css3`
646
710
  font-size: 0.6875rem;
647
711
  font-weight: var(--lt-text-weight, 600);
648
712
  line-height: 1.2;
649
- letter-spacing: 0.08em;
713
+ letter-spacing: var(--lt-text-tracking, 0.08em);
650
714
  text-transform: uppercase;
651
715
  }
652
716
 
@@ -64,7 +64,7 @@ var avatarStyles = css`
64
64
  }
65
65
 
66
66
  .initials {
67
- font-family: var(--lt-typography-fontFamily, 'Hanken Grotesk', sans-serif);
67
+ font-family: var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif);
68
68
  font-weight: 600;
69
69
  letter-spacing: 0.02em;
70
70
  line-height: 1;
@@ -42,7 +42,7 @@ import { css } from "lit";
42
42
  var badgeStyles = css`
43
43
  :host {
44
44
  display: inline-flex;
45
- font-family: var(--lt-typography-fontFamily, 'Hanken Grotesk', sans-serif);
45
+ font-family: var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif);
46
46
  vertical-align: middle;
47
47
  }
48
48
 
@@ -58,7 +58,7 @@ var breadcrumbItemStyles = css`
58
58
  :host {
59
59
  align-items: center;
60
60
  display: inline-flex;
61
- font-family: var(--lt-typography-fontFamily, 'Hanken Grotesk', sans-serif);
61
+ font-family: var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif);
62
62
  font-size: 0.875rem;
63
63
  }
64
64
 
@@ -55,6 +55,12 @@ export declare class Button extends ThemeableElement {
55
55
  * @default 'filled'
56
56
  */
57
57
  appearance: ButtonAppearance;
58
+ /**
59
+ * Adds a variant-colored border on top of the current appearance. A no-op on
60
+ * `outlined` (which already has one); adds a border to `filled`/`ghost`.
61
+ * @default false
62
+ */
63
+ bordered: boolean;
58
64
  /**
59
65
  * Size of the button (affects height, font size, and padding).
60
66
  * @default 'md'
@@ -43,7 +43,7 @@ import { css } from "lit";
43
43
  var buttonStyles = css`
44
44
  :host {
45
45
  display: inline-block;
46
- font-family: var(--lt-typography-fontFamily, 'Hanken Grotesk', sans-serif);
46
+ font-family: var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif);
47
47
 
48
48
  /* Internal state props — set per variant/appearance below */
49
49
  --_color: var(--lt-text-on-primary);
@@ -277,6 +277,30 @@ var buttonStyles = css`
277
277
  opacity: 0.8;
278
278
  }
279
279
 
280
+ /* bordered — adds a border on top of whatever appearance is active; a no-op on
281
+ outlined, which already sets the same border color. */
282
+ :host([bordered][variant='primary']) {
283
+ --_border-color: var(--lt-border-primary-strong);
284
+ }
285
+ :host([bordered][variant='secondary']) {
286
+ --_border-color: var(--lt-border-secondary-strong);
287
+ }
288
+ :host([bordered][variant='neutral']) {
289
+ --_border-color: var(--lt-border-strong);
290
+ }
291
+ :host([bordered][variant='success']) {
292
+ --_border-color: var(--lt-border-success-strong);
293
+ }
294
+ :host([bordered][variant='warning']) {
295
+ --_border-color: var(--lt-border-warning-strong);
296
+ }
297
+ :host([bordered][variant='error']) {
298
+ --_border-color: var(--lt-border-error-strong);
299
+ }
300
+ :host([bordered][variant='info']) {
301
+ --_border-color: var(--lt-border-info-strong);
302
+ }
303
+
280
304
  /* loading */
281
305
  .spinner {
282
306
  animation: spin 700ms linear infinite;
@@ -442,6 +466,7 @@ var Button = class extends ThemeableElement {
442
466
  this._ariaForwarding = new AriaForwardingController(this, () => this.shadowRoot?.querySelector('[part="base"]'));
443
467
  this.variant = "primary";
444
468
  this.appearance = "filled";
469
+ this.bordered = false;
445
470
  this.size = "md";
446
471
  this.disabled = false;
447
472
  this.loading = false;
@@ -504,6 +529,9 @@ __decorateClass([
504
529
  __decorateClass([
505
530
  property3({ reflect: true })
506
531
  ], Button.prototype, "appearance", 2);
532
+ __decorateClass([
533
+ property3({ type: Boolean, reflect: true })
534
+ ], Button.prototype, "bordered", 2);
507
535
  __decorateClass([
508
536
  property3({ reflect: true })
509
537
  ], Button.prototype, "size", 2);
@@ -43,7 +43,7 @@ import { css } from "lit";
43
43
  var calendarStyles = css`
44
44
  :host {
45
45
  display: inline-block;
46
- font-family: var(--lt-typography-fontFamily, 'Hanken Grotesk', sans-serif);
46
+ font-family: var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif);
47
47
  }
48
48
 
49
49
  .calendar {
@@ -42,7 +42,7 @@ import { css } from "lit";
42
42
  var checkboxStyles = css`
43
43
  :host {
44
44
  display: inline-block;
45
- font-family: var(--lt-typography-fontFamily, 'Hanken Grotesk', sans-serif);
45
+ font-family: var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif);
46
46
  }
47
47
 
48
48
  .checkbox-wrapper {
@@ -43,7 +43,7 @@ import { css } from "lit";
43
43
  var chipStyles = css`
44
44
  :host {
45
45
  display: inline-flex;
46
- font-family: var(--lt-typography-fontFamily, 'Hanken Grotesk', sans-serif);
46
+ font-family: var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif);
47
47
  vertical-align: middle;
48
48
  }
49
49
 
@@ -41,7 +41,7 @@ import { css } from "lit";
41
41
  var colorInputStyles = css`
42
42
  :host {
43
43
  display: inline-block;
44
- font-family: var(--lt-typography-fontFamily, 'Hanken Grotesk', sans-serif);
44
+ font-family: var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif);
45
45
  width: 100%;
46
46
  }
47
47
 
@@ -212,67 +212,103 @@ var textStyles = css2`
212
212
  [part='base'] {
213
213
  margin: 0;
214
214
  color: inherit;
215
- font-family: var(--lt-typography-fontFamily, 'Hanken Grotesk', sans-serif);
215
+ font-family: var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif);
216
216
  }
217
217
 
218
218
  /* ── Display ─────────────────────────────────────────────────────────── */
219
219
 
220
220
  :host([variant='display-2xl']) [part='base'] {
221
+ font-family: var(
222
+ --lt-typography-fontFamilyHeading,
223
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
224
+ );
221
225
  font-size: clamp(2.5rem, 6vw, 4.5rem);
222
226
  font-weight: var(--lt-text-weight, 200);
223
227
  line-height: 1.1;
224
- letter-spacing: -0.02em;
228
+ letter-spacing: var(--lt-text-tracking, -0.02em);
225
229
  }
226
230
 
227
231
  :host([variant='display-xl']) [part='base'] {
232
+ font-family: var(
233
+ --lt-typography-fontFamilyHeading,
234
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
235
+ );
228
236
  font-size: clamp(2rem, 5vw, 3.75rem);
229
237
  font-weight: var(--lt-text-weight, 200);
230
238
  line-height: 1.1;
231
- letter-spacing: -0.02em;
239
+ letter-spacing: var(--lt-text-tracking, -0.02em);
232
240
  }
233
241
 
234
242
  :host([variant='display-lg']) [part='base'] {
243
+ font-family: var(
244
+ --lt-typography-fontFamilyHeading,
245
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
246
+ );
235
247
  font-size: clamp(2rem, 4vw, 3rem);
236
248
  font-weight: var(--lt-text-weight, 200);
237
249
  line-height: 1.15;
238
- letter-spacing: -0.01em;
250
+ letter-spacing: var(--lt-text-tracking, -0.01em);
239
251
  }
240
252
 
241
253
  /* ── Headings ─────────────────────────────────────────────────────────── */
242
254
 
243
255
  :host([variant='h1']) [part='base'] {
256
+ font-family: var(
257
+ --lt-typography-fontFamilyHeading,
258
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
259
+ );
244
260
  font-size: clamp(1.75rem, 2.5vw + 0.75rem, 2.5rem);
245
261
  font-weight: var(--lt-text-weight, 600);
246
262
  line-height: 1.2;
247
- letter-spacing: -0.02em;
263
+ letter-spacing: var(--lt-text-tracking, -0.02em);
248
264
  }
249
265
 
250
266
  :host([variant='h2']) [part='base'] {
267
+ font-family: var(
268
+ --lt-typography-fontFamilyHeading,
269
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
270
+ );
251
271
  font-size: clamp(1.5rem, 2vw + 0.5rem, 2rem);
252
272
  font-weight: var(--lt-text-weight, 600);
253
273
  line-height: 1.25;
254
- letter-spacing: -0.01em;
274
+ letter-spacing: var(--lt-text-tracking, -0.01em);
255
275
  }
256
276
 
257
277
  :host([variant='h3']) [part='base'] {
278
+ font-family: var(
279
+ --lt-typography-fontFamilyHeading,
280
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
281
+ );
258
282
  font-size: clamp(1.25rem, 1.5vw + 0.5rem, 1.5rem);
259
283
  font-weight: var(--lt-text-weight, 600);
260
284
  line-height: 1.3;
261
285
  }
262
286
 
263
287
  :host([variant='h4']) [part='base'] {
288
+ font-family: var(
289
+ --lt-typography-fontFamilyHeading,
290
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
291
+ );
264
292
  font-size: 1.25rem;
265
293
  font-weight: var(--lt-text-weight, 600);
266
294
  line-height: 1.35;
267
295
  }
268
296
 
269
297
  :host([variant='h5']) [part='base'] {
298
+ font-family: var(
299
+ --lt-typography-fontFamilyHeading,
300
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
301
+ );
270
302
  font-size: 1.125rem;
271
303
  font-weight: var(--lt-text-weight, 600);
272
304
  line-height: 1.4;
273
305
  }
274
306
 
275
307
  :host([variant='h6']) [part='base'] {
308
+ font-family: var(
309
+ --lt-typography-fontFamilyHeading,
310
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
311
+ );
276
312
  font-size: 1rem;
277
313
  font-weight: var(--lt-text-weight, 600);
278
314
  line-height: 1.4;
@@ -311,7 +347,7 @@ var textStyles = css2`
311
347
  font-size: 0.6875rem;
312
348
  font-weight: var(--lt-text-weight, 600);
313
349
  line-height: 1.2;
314
- letter-spacing: 0.08em;
350
+ letter-spacing: var(--lt-text-tracking, 0.08em);
315
351
  text-transform: uppercase;
316
352
  }
317
353