@latty-ds/web 0.9.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -36,6 +36,12 @@ export declare class IconButton extends ThemeableElement {
36
36
  * @default 'ghost'
37
37
  */
38
38
  appearance: IconButtonAppearance;
39
+ /**
40
+ * Adds a variant-colored border on top of the current appearance. A no-op on
41
+ * `outlined` (which already has one); adds a border to `filled`/`ghost`.
42
+ * @default false
43
+ */
44
+ bordered: boolean;
39
45
  /**
40
46
  * Size of the button.
41
47
  * @default 'md'
@@ -255,6 +255,30 @@ var iconButtonStyles = css`
255
255
  --_active-bg: var(--lt-bg-info-subtle);
256
256
  }
257
257
 
258
+ /* bordered — adds a border on top of whatever appearance is active; a no-op on
259
+ outlined, which already sets the same border color. */
260
+ :host([bordered][variant='primary']) {
261
+ --_border-color: var(--lt-border-primary-strong);
262
+ }
263
+ :host([bordered][variant='secondary']) {
264
+ --_border-color: var(--lt-border-secondary-strong);
265
+ }
266
+ :host([bordered][variant='neutral']) {
267
+ --_border-color: var(--lt-border-strong);
268
+ }
269
+ :host([bordered][variant='success']) {
270
+ --_border-color: var(--lt-border-success-strong);
271
+ }
272
+ :host([bordered][variant='warning']) {
273
+ --_border-color: var(--lt-border-warning-strong);
274
+ }
275
+ :host([bordered][variant='error']) {
276
+ --_border-color: var(--lt-border-error-strong);
277
+ }
278
+ :host([bordered][variant='info']) {
279
+ --_border-color: var(--lt-border-info-strong);
280
+ }
281
+
258
282
  /* round shape */
259
283
  :host([round]) [part='base'] {
260
284
  border-radius: 50%;
@@ -304,6 +328,7 @@ var IconButton = class extends ThemeableElement {
304
328
  this.label = "";
305
329
  this.variant = "neutral";
306
330
  this.appearance = "ghost";
331
+ this.bordered = false;
307
332
  this.size = "md";
308
333
  this.disabled = false;
309
334
  this.href = "";
@@ -350,6 +375,9 @@ __decorateClass([
350
375
  __decorateClass([
351
376
  property2({ reflect: true })
352
377
  ], IconButton.prototype, "appearance", 2);
378
+ __decorateClass([
379
+ property2({ type: Boolean, reflect: true })
380
+ ], IconButton.prototype, "bordered", 2);
353
381
  __decorateClass([
354
382
  property2({ reflect: true })
355
383
  ], IconButton.prototype, "size", 2);
@@ -117,61 +117,97 @@ var textStyles = css2`
117
117
  /* ── Display ─────────────────────────────────────────────────────────── */
118
118
 
119
119
  :host([variant='display-2xl']) [part='base'] {
120
+ font-family: var(
121
+ --lt-typography-fontFamilyHeading,
122
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
123
+ );
120
124
  font-size: clamp(2.5rem, 6vw, 4.5rem);
121
125
  font-weight: var(--lt-text-weight, 200);
122
126
  line-height: 1.1;
123
- letter-spacing: -0.02em;
127
+ letter-spacing: var(--lt-text-tracking, -0.02em);
124
128
  }
125
129
 
126
130
  :host([variant='display-xl']) [part='base'] {
131
+ font-family: var(
132
+ --lt-typography-fontFamilyHeading,
133
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
134
+ );
127
135
  font-size: clamp(2rem, 5vw, 3.75rem);
128
136
  font-weight: var(--lt-text-weight, 200);
129
137
  line-height: 1.1;
130
- letter-spacing: -0.02em;
138
+ letter-spacing: var(--lt-text-tracking, -0.02em);
131
139
  }
132
140
 
133
141
  :host([variant='display-lg']) [part='base'] {
142
+ font-family: var(
143
+ --lt-typography-fontFamilyHeading,
144
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
145
+ );
134
146
  font-size: clamp(2rem, 4vw, 3rem);
135
147
  font-weight: var(--lt-text-weight, 200);
136
148
  line-height: 1.15;
137
- letter-spacing: -0.01em;
149
+ letter-spacing: var(--lt-text-tracking, -0.01em);
138
150
  }
139
151
 
140
152
  /* ── Headings ─────────────────────────────────────────────────────────── */
141
153
 
142
154
  :host([variant='h1']) [part='base'] {
155
+ font-family: var(
156
+ --lt-typography-fontFamilyHeading,
157
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
158
+ );
143
159
  font-size: clamp(1.75rem, 2.5vw + 0.75rem, 2.5rem);
144
160
  font-weight: var(--lt-text-weight, 600);
145
161
  line-height: 1.2;
146
- letter-spacing: -0.02em;
162
+ letter-spacing: var(--lt-text-tracking, -0.02em);
147
163
  }
148
164
 
149
165
  :host([variant='h2']) [part='base'] {
166
+ font-family: var(
167
+ --lt-typography-fontFamilyHeading,
168
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
169
+ );
150
170
  font-size: clamp(1.5rem, 2vw + 0.5rem, 2rem);
151
171
  font-weight: var(--lt-text-weight, 600);
152
172
  line-height: 1.25;
153
- letter-spacing: -0.01em;
173
+ letter-spacing: var(--lt-text-tracking, -0.01em);
154
174
  }
155
175
 
156
176
  :host([variant='h3']) [part='base'] {
177
+ font-family: var(
178
+ --lt-typography-fontFamilyHeading,
179
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
180
+ );
157
181
  font-size: clamp(1.25rem, 1.5vw + 0.5rem, 1.5rem);
158
182
  font-weight: var(--lt-text-weight, 600);
159
183
  line-height: 1.3;
160
184
  }
161
185
 
162
186
  :host([variant='h4']) [part='base'] {
187
+ font-family: var(
188
+ --lt-typography-fontFamilyHeading,
189
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
190
+ );
163
191
  font-size: 1.25rem;
164
192
  font-weight: var(--lt-text-weight, 600);
165
193
  line-height: 1.35;
166
194
  }
167
195
 
168
196
  :host([variant='h5']) [part='base'] {
197
+ font-family: var(
198
+ --lt-typography-fontFamilyHeading,
199
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
200
+ );
169
201
  font-size: 1.125rem;
170
202
  font-weight: var(--lt-text-weight, 600);
171
203
  line-height: 1.4;
172
204
  }
173
205
 
174
206
  :host([variant='h6']) [part='base'] {
207
+ font-family: var(
208
+ --lt-typography-fontFamilyHeading,
209
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
210
+ );
175
211
  font-size: 1rem;
176
212
  font-weight: var(--lt-text-weight, 600);
177
213
  line-height: 1.4;
@@ -210,7 +246,7 @@ var textStyles = css2`
210
246
  font-size: 0.6875rem;
211
247
  font-weight: var(--lt-text-weight, 600);
212
248
  line-height: 1.2;
213
- letter-spacing: 0.08em;
249
+ letter-spacing: var(--lt-text-tracking, 0.08em);
214
250
  text-transform: uppercase;
215
251
  }
216
252
 
@@ -1763,61 +1763,97 @@ var textStyles = css4`
1763
1763
  /* ── Display ─────────────────────────────────────────────────────────── */
1764
1764
 
1765
1765
  :host([variant='display-2xl']) [part='base'] {
1766
+ font-family: var(
1767
+ --lt-typography-fontFamilyHeading,
1768
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
1769
+ );
1766
1770
  font-size: clamp(2.5rem, 6vw, 4.5rem);
1767
1771
  font-weight: var(--lt-text-weight, 200);
1768
1772
  line-height: 1.1;
1769
- letter-spacing: -0.02em;
1773
+ letter-spacing: var(--lt-text-tracking, -0.02em);
1770
1774
  }
1771
1775
 
1772
1776
  :host([variant='display-xl']) [part='base'] {
1777
+ font-family: var(
1778
+ --lt-typography-fontFamilyHeading,
1779
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
1780
+ );
1773
1781
  font-size: clamp(2rem, 5vw, 3.75rem);
1774
1782
  font-weight: var(--lt-text-weight, 200);
1775
1783
  line-height: 1.1;
1776
- letter-spacing: -0.02em;
1784
+ letter-spacing: var(--lt-text-tracking, -0.02em);
1777
1785
  }
1778
1786
 
1779
1787
  :host([variant='display-lg']) [part='base'] {
1788
+ font-family: var(
1789
+ --lt-typography-fontFamilyHeading,
1790
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
1791
+ );
1780
1792
  font-size: clamp(2rem, 4vw, 3rem);
1781
1793
  font-weight: var(--lt-text-weight, 200);
1782
1794
  line-height: 1.15;
1783
- letter-spacing: -0.01em;
1795
+ letter-spacing: var(--lt-text-tracking, -0.01em);
1784
1796
  }
1785
1797
 
1786
1798
  /* ── Headings ─────────────────────────────────────────────────────────── */
1787
1799
 
1788
1800
  :host([variant='h1']) [part='base'] {
1801
+ font-family: var(
1802
+ --lt-typography-fontFamilyHeading,
1803
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
1804
+ );
1789
1805
  font-size: clamp(1.75rem, 2.5vw + 0.75rem, 2.5rem);
1790
1806
  font-weight: var(--lt-text-weight, 600);
1791
1807
  line-height: 1.2;
1792
- letter-spacing: -0.02em;
1808
+ letter-spacing: var(--lt-text-tracking, -0.02em);
1793
1809
  }
1794
1810
 
1795
1811
  :host([variant='h2']) [part='base'] {
1812
+ font-family: var(
1813
+ --lt-typography-fontFamilyHeading,
1814
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
1815
+ );
1796
1816
  font-size: clamp(1.5rem, 2vw + 0.5rem, 2rem);
1797
1817
  font-weight: var(--lt-text-weight, 600);
1798
1818
  line-height: 1.25;
1799
- letter-spacing: -0.01em;
1819
+ letter-spacing: var(--lt-text-tracking, -0.01em);
1800
1820
  }
1801
1821
 
1802
1822
  :host([variant='h3']) [part='base'] {
1823
+ font-family: var(
1824
+ --lt-typography-fontFamilyHeading,
1825
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
1826
+ );
1803
1827
  font-size: clamp(1.25rem, 1.5vw + 0.5rem, 1.5rem);
1804
1828
  font-weight: var(--lt-text-weight, 600);
1805
1829
  line-height: 1.3;
1806
1830
  }
1807
1831
 
1808
1832
  :host([variant='h4']) [part='base'] {
1833
+ font-family: var(
1834
+ --lt-typography-fontFamilyHeading,
1835
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
1836
+ );
1809
1837
  font-size: 1.25rem;
1810
1838
  font-weight: var(--lt-text-weight, 600);
1811
1839
  line-height: 1.35;
1812
1840
  }
1813
1841
 
1814
1842
  :host([variant='h5']) [part='base'] {
1843
+ font-family: var(
1844
+ --lt-typography-fontFamilyHeading,
1845
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
1846
+ );
1815
1847
  font-size: 1.125rem;
1816
1848
  font-weight: var(--lt-text-weight, 600);
1817
1849
  line-height: 1.4;
1818
1850
  }
1819
1851
 
1820
1852
  :host([variant='h6']) [part='base'] {
1853
+ font-family: var(
1854
+ --lt-typography-fontFamilyHeading,
1855
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
1856
+ );
1821
1857
  font-size: 1rem;
1822
1858
  font-weight: var(--lt-text-weight, 600);
1823
1859
  line-height: 1.4;
@@ -1856,7 +1892,7 @@ var textStyles = css4`
1856
1892
  font-size: 0.6875rem;
1857
1893
  font-weight: var(--lt-text-weight, 600);
1858
1894
  line-height: 1.2;
1859
- letter-spacing: 0.08em;
1895
+ letter-spacing: var(--lt-text-tracking, 0.08em);
1860
1896
  text-transform: uppercase;
1861
1897
  }
1862
1898
 
@@ -2071,7 +2107,15 @@ var Select = class extends ThemeableElement {
2071
2107
  </span>
2072
2108
  <lt-icon class="icon-end" name="caret-down"></lt-icon>
2073
2109
  </div>
2074
- <lt-surface class="dropdown" popover="manual" elevation="2" role="listbox">
2110
+ <lt-surface
2111
+ class="dropdown"
2112
+ popover="manual"
2113
+ elevation="2"
2114
+ appearance="outlined"
2115
+ background="--lt-bg-default"
2116
+ role="listbox"
2117
+ part="listbox"
2118
+ >
2075
2119
  <div class="options-container">
2076
2120
  ${this.options.map(
2077
2121
  (option) => html3`
@@ -75,28 +75,28 @@ var sidepanelStyles = css`
75
75
  inset-block: 0;
76
76
  left: 0;
77
77
  transform: translateX(-100%);
78
- box-shadow: 4px 0 24px rgba(0, 0, 0, 0.12);
78
+ box-shadow: var(--lt-sidepanel-shadow, 4px 0 24px rgba(0, 0, 0, 0.12));
79
79
  }
80
80
 
81
81
  :host([anchor='right']) [part='panel'] {
82
82
  inset-block: 0;
83
83
  right: 0;
84
84
  transform: translateX(100%);
85
- box-shadow: -4px 0 24px rgba(0, 0, 0, 0.12);
85
+ box-shadow: var(--lt-sidepanel-shadow, -4px 0 24px rgba(0, 0, 0, 0.12));
86
86
  }
87
87
 
88
88
  :host([anchor='top']) [part='panel'] {
89
89
  inset-inline: 0;
90
90
  top: 0;
91
91
  transform: translateY(-100%);
92
- box-shadow: 0 4px 24px rgba(0, 0, 0, 0.12);
92
+ box-shadow: var(--lt-sidepanel-shadow, 0 4px 24px rgba(0, 0, 0, 0.12));
93
93
  }
94
94
 
95
95
  :host([anchor='bottom']) [part='panel'] {
96
96
  inset-inline: 0;
97
97
  bottom: 0;
98
98
  transform: translateY(100%);
99
- box-shadow: 0 -4px 24px rgba(0, 0, 0, 0.12);
99
+ box-shadow: var(--lt-sidepanel-shadow, 0 -4px 24px rgba(0, 0, 0, 0.12));
100
100
  }
101
101
 
102
102
  /* ── Open state — must come after anchors to win the cascade ────────────── */
@@ -137,6 +137,7 @@ var sidepanelStyles = css`
137
137
  .body {
138
138
  flex: 1;
139
139
  overflow-y: auto;
140
+ padding: var(--lt-spacing-5);
140
141
  }
141
142
 
142
143
  /* ── Reduced motion ─────────────────────────────────────────────────────── */
@@ -386,6 +387,30 @@ var iconButtonStyles = css3`
386
387
  --_active-bg: var(--lt-bg-info-subtle);
387
388
  }
388
389
 
390
+ /* bordered — adds a border on top of whatever appearance is active; a no-op on
391
+ outlined, which already sets the same border color. */
392
+ :host([bordered][variant='primary']) {
393
+ --_border-color: var(--lt-border-primary-strong);
394
+ }
395
+ :host([bordered][variant='secondary']) {
396
+ --_border-color: var(--lt-border-secondary-strong);
397
+ }
398
+ :host([bordered][variant='neutral']) {
399
+ --_border-color: var(--lt-border-strong);
400
+ }
401
+ :host([bordered][variant='success']) {
402
+ --_border-color: var(--lt-border-success-strong);
403
+ }
404
+ :host([bordered][variant='warning']) {
405
+ --_border-color: var(--lt-border-warning-strong);
406
+ }
407
+ :host([bordered][variant='error']) {
408
+ --_border-color: var(--lt-border-error-strong);
409
+ }
410
+ :host([bordered][variant='info']) {
411
+ --_border-color: var(--lt-border-info-strong);
412
+ }
413
+
389
414
  /* round shape */
390
415
  :host([round]) [part='base'] {
391
416
  border-radius: 50%;
@@ -435,6 +460,7 @@ var IconButton = class extends ThemeableElement {
435
460
  this.label = "";
436
461
  this.variant = "neutral";
437
462
  this.appearance = "ghost";
463
+ this.bordered = false;
438
464
  this.size = "md";
439
465
  this.disabled = false;
440
466
  this.href = "";
@@ -481,6 +507,9 @@ __decorateClass([
481
507
  __decorateClass([
482
508
  property2({ reflect: true })
483
509
  ], IconButton.prototype, "appearance", 2);
510
+ __decorateClass([
511
+ property2({ type: Boolean, reflect: true })
512
+ ], IconButton.prototype, "bordered", 2);
484
513
  __decorateClass([
485
514
  property2({ reflect: true })
486
515
  ], IconButton.prototype, "size", 2);
@@ -531,61 +560,97 @@ var textStyles = css4`
531
560
  /* ── Display ─────────────────────────────────────────────────────────── */
532
561
 
533
562
  :host([variant='display-2xl']) [part='base'] {
563
+ font-family: var(
564
+ --lt-typography-fontFamilyHeading,
565
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
566
+ );
534
567
  font-size: clamp(2.5rem, 6vw, 4.5rem);
535
568
  font-weight: var(--lt-text-weight, 200);
536
569
  line-height: 1.1;
537
- letter-spacing: -0.02em;
570
+ letter-spacing: var(--lt-text-tracking, -0.02em);
538
571
  }
539
572
 
540
573
  :host([variant='display-xl']) [part='base'] {
574
+ font-family: var(
575
+ --lt-typography-fontFamilyHeading,
576
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
577
+ );
541
578
  font-size: clamp(2rem, 5vw, 3.75rem);
542
579
  font-weight: var(--lt-text-weight, 200);
543
580
  line-height: 1.1;
544
- letter-spacing: -0.02em;
581
+ letter-spacing: var(--lt-text-tracking, -0.02em);
545
582
  }
546
583
 
547
584
  :host([variant='display-lg']) [part='base'] {
585
+ font-family: var(
586
+ --lt-typography-fontFamilyHeading,
587
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
588
+ );
548
589
  font-size: clamp(2rem, 4vw, 3rem);
549
590
  font-weight: var(--lt-text-weight, 200);
550
591
  line-height: 1.15;
551
- letter-spacing: -0.01em;
592
+ letter-spacing: var(--lt-text-tracking, -0.01em);
552
593
  }
553
594
 
554
595
  /* ── Headings ─────────────────────────────────────────────────────────── */
555
596
 
556
597
  :host([variant='h1']) [part='base'] {
598
+ font-family: var(
599
+ --lt-typography-fontFamilyHeading,
600
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
601
+ );
557
602
  font-size: clamp(1.75rem, 2.5vw + 0.75rem, 2.5rem);
558
603
  font-weight: var(--lt-text-weight, 600);
559
604
  line-height: 1.2;
560
- letter-spacing: -0.02em;
605
+ letter-spacing: var(--lt-text-tracking, -0.02em);
561
606
  }
562
607
 
563
608
  :host([variant='h2']) [part='base'] {
609
+ font-family: var(
610
+ --lt-typography-fontFamilyHeading,
611
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
612
+ );
564
613
  font-size: clamp(1.5rem, 2vw + 0.5rem, 2rem);
565
614
  font-weight: var(--lt-text-weight, 600);
566
615
  line-height: 1.25;
567
- letter-spacing: -0.01em;
616
+ letter-spacing: var(--lt-text-tracking, -0.01em);
568
617
  }
569
618
 
570
619
  :host([variant='h3']) [part='base'] {
620
+ font-family: var(
621
+ --lt-typography-fontFamilyHeading,
622
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
623
+ );
571
624
  font-size: clamp(1.25rem, 1.5vw + 0.5rem, 1.5rem);
572
625
  font-weight: var(--lt-text-weight, 600);
573
626
  line-height: 1.3;
574
627
  }
575
628
 
576
629
  :host([variant='h4']) [part='base'] {
630
+ font-family: var(
631
+ --lt-typography-fontFamilyHeading,
632
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
633
+ );
577
634
  font-size: 1.25rem;
578
635
  font-weight: var(--lt-text-weight, 600);
579
636
  line-height: 1.35;
580
637
  }
581
638
 
582
639
  :host([variant='h5']) [part='base'] {
640
+ font-family: var(
641
+ --lt-typography-fontFamilyHeading,
642
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
643
+ );
583
644
  font-size: 1.125rem;
584
645
  font-weight: var(--lt-text-weight, 600);
585
646
  line-height: 1.4;
586
647
  }
587
648
 
588
649
  :host([variant='h6']) [part='base'] {
650
+ font-family: var(
651
+ --lt-typography-fontFamilyHeading,
652
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
653
+ );
589
654
  font-size: 1rem;
590
655
  font-weight: var(--lt-text-weight, 600);
591
656
  line-height: 1.4;
@@ -624,7 +689,7 @@ var textStyles = css4`
624
689
  font-size: 0.6875rem;
625
690
  font-weight: var(--lt-text-weight, 600);
626
691
  line-height: 1.2;
627
- letter-spacing: 0.08em;
692
+ letter-spacing: var(--lt-text-tracking, 0.08em);
628
693
  text-transform: uppercase;
629
694
  }
630
695
 
@@ -14,6 +14,8 @@ import '../text/text';
14
14
  * @part header - The header bar (contains label and close button)
15
15
  * @part close-button - The close button inside the header
16
16
  * @part body - The scrollable content area wrapping the default slot
17
+ *
18
+ * @cssprop [--lt-sidepanel-shadow] - Overrides the panel's box-shadow, for all anchor positions.
17
19
  */
18
20
  export declare class SidePanel extends ThemeableElement {
19
21
  static styles: import("lit").CSSResult[];
@@ -316,61 +316,97 @@ var textStyles = css3`
316
316
  /* ── Display ─────────────────────────────────────────────────────────── */
317
317
 
318
318
  :host([variant='display-2xl']) [part='base'] {
319
+ font-family: var(
320
+ --lt-typography-fontFamilyHeading,
321
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
322
+ );
319
323
  font-size: clamp(2.5rem, 6vw, 4.5rem);
320
324
  font-weight: var(--lt-text-weight, 200);
321
325
  line-height: 1.1;
322
- letter-spacing: -0.02em;
326
+ letter-spacing: var(--lt-text-tracking, -0.02em);
323
327
  }
324
328
 
325
329
  :host([variant='display-xl']) [part='base'] {
330
+ font-family: var(
331
+ --lt-typography-fontFamilyHeading,
332
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
333
+ );
326
334
  font-size: clamp(2rem, 5vw, 3.75rem);
327
335
  font-weight: var(--lt-text-weight, 200);
328
336
  line-height: 1.1;
329
- letter-spacing: -0.02em;
337
+ letter-spacing: var(--lt-text-tracking, -0.02em);
330
338
  }
331
339
 
332
340
  :host([variant='display-lg']) [part='base'] {
341
+ font-family: var(
342
+ --lt-typography-fontFamilyHeading,
343
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
344
+ );
333
345
  font-size: clamp(2rem, 4vw, 3rem);
334
346
  font-weight: var(--lt-text-weight, 200);
335
347
  line-height: 1.15;
336
- letter-spacing: -0.01em;
348
+ letter-spacing: var(--lt-text-tracking, -0.01em);
337
349
  }
338
350
 
339
351
  /* ── Headings ─────────────────────────────────────────────────────────── */
340
352
 
341
353
  :host([variant='h1']) [part='base'] {
354
+ font-family: var(
355
+ --lt-typography-fontFamilyHeading,
356
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
357
+ );
342
358
  font-size: clamp(1.75rem, 2.5vw + 0.75rem, 2.5rem);
343
359
  font-weight: var(--lt-text-weight, 600);
344
360
  line-height: 1.2;
345
- letter-spacing: -0.02em;
361
+ letter-spacing: var(--lt-text-tracking, -0.02em);
346
362
  }
347
363
 
348
364
  :host([variant='h2']) [part='base'] {
365
+ font-family: var(
366
+ --lt-typography-fontFamilyHeading,
367
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
368
+ );
349
369
  font-size: clamp(1.5rem, 2vw + 0.5rem, 2rem);
350
370
  font-weight: var(--lt-text-weight, 600);
351
371
  line-height: 1.25;
352
- letter-spacing: -0.01em;
372
+ letter-spacing: var(--lt-text-tracking, -0.01em);
353
373
  }
354
374
 
355
375
  :host([variant='h3']) [part='base'] {
376
+ font-family: var(
377
+ --lt-typography-fontFamilyHeading,
378
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
379
+ );
356
380
  font-size: clamp(1.25rem, 1.5vw + 0.5rem, 1.5rem);
357
381
  font-weight: var(--lt-text-weight, 600);
358
382
  line-height: 1.3;
359
383
  }
360
384
 
361
385
  :host([variant='h4']) [part='base'] {
386
+ font-family: var(
387
+ --lt-typography-fontFamilyHeading,
388
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
389
+ );
362
390
  font-size: 1.25rem;
363
391
  font-weight: var(--lt-text-weight, 600);
364
392
  line-height: 1.35;
365
393
  }
366
394
 
367
395
  :host([variant='h5']) [part='base'] {
396
+ font-family: var(
397
+ --lt-typography-fontFamilyHeading,
398
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
399
+ );
368
400
  font-size: 1.125rem;
369
401
  font-weight: var(--lt-text-weight, 600);
370
402
  line-height: 1.4;
371
403
  }
372
404
 
373
405
  :host([variant='h6']) [part='base'] {
406
+ font-family: var(
407
+ --lt-typography-fontFamilyHeading,
408
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
409
+ );
374
410
  font-size: 1rem;
375
411
  font-weight: var(--lt-text-weight, 600);
376
412
  line-height: 1.4;
@@ -409,7 +445,7 @@ var textStyles = css3`
409
445
  font-size: 0.6875rem;
410
446
  font-weight: var(--lt-text-weight, 600);
411
447
  line-height: 1.2;
412
- letter-spacing: 0.08em;
448
+ letter-spacing: var(--lt-text-tracking, 0.08em);
413
449
  text-transform: uppercase;
414
450
  }
415
451
 
@@ -251,6 +251,8 @@ var Snackbar = class extends ThemeableElement {
251
251
  this.closable = true;
252
252
  this.actionLabel = "";
253
253
  this.icon = "";
254
+ this.elevation = "5";
255
+ this.appearance = "filled";
254
256
  }
255
257
  /** Shows the snackbar and starts the auto-dismiss timer. */
256
258
  show() {
@@ -303,7 +305,7 @@ var Snackbar = class extends ThemeableElement {
303
305
  render() {
304
306
  const iconName = this._resolvedIcon;
305
307
  return html2`
306
- <lt-surface elevation="5" background=${Snackbar._bgMap[this.variant]}>
308
+ <lt-surface elevation=${this.elevation} appearance=${this.appearance} background=${Snackbar._bgMap[this.variant]}>
307
309
  <div class="inner" role="status" aria-live="polite" part="base">
308
310
  ${iconName ? html2`<lt-icon class="variant-icon" name=${iconName} part="icon"></lt-icon>` : ""}
309
311
  <span class="message" part="message">
@@ -350,6 +352,12 @@ __decorateClass([
350
352
  __decorateClass([
351
353
  property3({ reflect: true })
352
354
  ], Snackbar.prototype, "icon", 2);
355
+ __decorateClass([
356
+ property3({ reflect: true })
357
+ ], Snackbar.prototype, "elevation", 2);
358
+ __decorateClass([
359
+ property3({ reflect: true })
360
+ ], Snackbar.prototype, "appearance", 2);
353
361
  Snackbar = __decorateClass([
354
362
  customElement2("lt-snackbar")
355
363
  ], Snackbar);
@@ -1,5 +1,6 @@
1
1
  import { ThemeableElement } from '../../base';
2
2
  import type { SnackbarVariant } from './snackbar.types';
3
+ import type { SurfaceElevation, SurfaceAppearance } from '../surface/surface.types';
3
4
  import '@latty-ds/icons';
4
5
  import '../surface/surface';
5
6
  /**
@@ -45,6 +46,16 @@ export declare class Snackbar extends ThemeableElement {
45
46
  * set to `"none"` to suppress, or pass any icon name to override.
46
47
  */
47
48
  icon: string;
49
+ /**
50
+ * Elevation level of the internal surface, matching `lt-surface`'s scale.
51
+ * @default '5'
52
+ */
53
+ elevation: SurfaceElevation;
54
+ /**
55
+ * Visual appearance of the internal surface, matching `lt-surface`'s vocabulary.
56
+ * @default 'filled'
57
+ */
58
+ appearance: SurfaceAppearance;
48
59
  private _timer?;
49
60
  /** Shows the snackbar and starts the auto-dismiss timer. */
50
61
  show(): void;