@latty-ds/web 0.9.0 → 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.
@@ -59,61 +59,97 @@ var textStyles = css`
59
59
  /* ── Display ─────────────────────────────────────────────────────────── */
60
60
 
61
61
  :host([variant='display-2xl']) [part='base'] {
62
+ font-family: var(
63
+ --lt-typography-fontFamilyHeading,
64
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
65
+ );
62
66
  font-size: clamp(2.5rem, 6vw, 4.5rem);
63
67
  font-weight: var(--lt-text-weight, 200);
64
68
  line-height: 1.1;
65
- letter-spacing: -0.02em;
69
+ letter-spacing: var(--lt-text-tracking, -0.02em);
66
70
  }
67
71
 
68
72
  :host([variant='display-xl']) [part='base'] {
73
+ font-family: var(
74
+ --lt-typography-fontFamilyHeading,
75
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
76
+ );
69
77
  font-size: clamp(2rem, 5vw, 3.75rem);
70
78
  font-weight: var(--lt-text-weight, 200);
71
79
  line-height: 1.1;
72
- letter-spacing: -0.02em;
80
+ letter-spacing: var(--lt-text-tracking, -0.02em);
73
81
  }
74
82
 
75
83
  :host([variant='display-lg']) [part='base'] {
84
+ font-family: var(
85
+ --lt-typography-fontFamilyHeading,
86
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
87
+ );
76
88
  font-size: clamp(2rem, 4vw, 3rem);
77
89
  font-weight: var(--lt-text-weight, 200);
78
90
  line-height: 1.15;
79
- letter-spacing: -0.01em;
91
+ letter-spacing: var(--lt-text-tracking, -0.01em);
80
92
  }
81
93
 
82
94
  /* ── Headings ─────────────────────────────────────────────────────────── */
83
95
 
84
96
  :host([variant='h1']) [part='base'] {
97
+ font-family: var(
98
+ --lt-typography-fontFamilyHeading,
99
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
100
+ );
85
101
  font-size: clamp(1.75rem, 2.5vw + 0.75rem, 2.5rem);
86
102
  font-weight: var(--lt-text-weight, 600);
87
103
  line-height: 1.2;
88
- letter-spacing: -0.02em;
104
+ letter-spacing: var(--lt-text-tracking, -0.02em);
89
105
  }
90
106
 
91
107
  :host([variant='h2']) [part='base'] {
108
+ font-family: var(
109
+ --lt-typography-fontFamilyHeading,
110
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
111
+ );
92
112
  font-size: clamp(1.5rem, 2vw + 0.5rem, 2rem);
93
113
  font-weight: var(--lt-text-weight, 600);
94
114
  line-height: 1.25;
95
- letter-spacing: -0.01em;
115
+ letter-spacing: var(--lt-text-tracking, -0.01em);
96
116
  }
97
117
 
98
118
  :host([variant='h3']) [part='base'] {
119
+ font-family: var(
120
+ --lt-typography-fontFamilyHeading,
121
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
122
+ );
99
123
  font-size: clamp(1.25rem, 1.5vw + 0.5rem, 1.5rem);
100
124
  font-weight: var(--lt-text-weight, 600);
101
125
  line-height: 1.3;
102
126
  }
103
127
 
104
128
  :host([variant='h4']) [part='base'] {
129
+ font-family: var(
130
+ --lt-typography-fontFamilyHeading,
131
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
132
+ );
105
133
  font-size: 1.25rem;
106
134
  font-weight: var(--lt-text-weight, 600);
107
135
  line-height: 1.35;
108
136
  }
109
137
 
110
138
  :host([variant='h5']) [part='base'] {
139
+ font-family: var(
140
+ --lt-typography-fontFamilyHeading,
141
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
142
+ );
111
143
  font-size: 1.125rem;
112
144
  font-weight: var(--lt-text-weight, 600);
113
145
  line-height: 1.4;
114
146
  }
115
147
 
116
148
  :host([variant='h6']) [part='base'] {
149
+ font-family: var(
150
+ --lt-typography-fontFamilyHeading,
151
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
152
+ );
117
153
  font-size: 1rem;
118
154
  font-weight: var(--lt-text-weight, 600);
119
155
  line-height: 1.4;
@@ -152,7 +188,7 @@ var textStyles = css`
152
188
  font-size: 0.6875rem;
153
189
  font-weight: var(--lt-text-weight, 600);
154
190
  line-height: 1.2;
155
- letter-spacing: 0.08em;
191
+ letter-spacing: var(--lt-text-tracking, 0.08em);
156
192
  text-transform: uppercase;
157
193
  }
158
194
 
@@ -13,6 +13,7 @@ import type { TextVariant, TextTag } from './text.types';
13
13
  *
14
14
  * @element lt-text
15
15
  * @cssprop [--lt-text-weight] - Overrides the default font-weight for the variant.
16
+ * @cssprop [--lt-text-tracking] - Overrides the default letter-spacing for the variant.
16
17
  *
17
18
  * @example
18
19
  * ```html
@@ -313,61 +313,97 @@ var textStyles = css2`
313
313
  /* ── Display ─────────────────────────────────────────────────────────── */
314
314
 
315
315
  :host([variant='display-2xl']) [part='base'] {
316
+ font-family: var(
317
+ --lt-typography-fontFamilyHeading,
318
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
319
+ );
316
320
  font-size: clamp(2.5rem, 6vw, 4.5rem);
317
321
  font-weight: var(--lt-text-weight, 200);
318
322
  line-height: 1.1;
319
- letter-spacing: -0.02em;
323
+ letter-spacing: var(--lt-text-tracking, -0.02em);
320
324
  }
321
325
 
322
326
  :host([variant='display-xl']) [part='base'] {
327
+ font-family: var(
328
+ --lt-typography-fontFamilyHeading,
329
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
330
+ );
323
331
  font-size: clamp(2rem, 5vw, 3.75rem);
324
332
  font-weight: var(--lt-text-weight, 200);
325
333
  line-height: 1.1;
326
- letter-spacing: -0.02em;
334
+ letter-spacing: var(--lt-text-tracking, -0.02em);
327
335
  }
328
336
 
329
337
  :host([variant='display-lg']) [part='base'] {
338
+ font-family: var(
339
+ --lt-typography-fontFamilyHeading,
340
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
341
+ );
330
342
  font-size: clamp(2rem, 4vw, 3rem);
331
343
  font-weight: var(--lt-text-weight, 200);
332
344
  line-height: 1.15;
333
- letter-spacing: -0.01em;
345
+ letter-spacing: var(--lt-text-tracking, -0.01em);
334
346
  }
335
347
 
336
348
  /* ── Headings ─────────────────────────────────────────────────────────── */
337
349
 
338
350
  :host([variant='h1']) [part='base'] {
351
+ font-family: var(
352
+ --lt-typography-fontFamilyHeading,
353
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
354
+ );
339
355
  font-size: clamp(1.75rem, 2.5vw + 0.75rem, 2.5rem);
340
356
  font-weight: var(--lt-text-weight, 600);
341
357
  line-height: 1.2;
342
- letter-spacing: -0.02em;
358
+ letter-spacing: var(--lt-text-tracking, -0.02em);
343
359
  }
344
360
 
345
361
  :host([variant='h2']) [part='base'] {
362
+ font-family: var(
363
+ --lt-typography-fontFamilyHeading,
364
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
365
+ );
346
366
  font-size: clamp(1.5rem, 2vw + 0.5rem, 2rem);
347
367
  font-weight: var(--lt-text-weight, 600);
348
368
  line-height: 1.25;
349
- letter-spacing: -0.01em;
369
+ letter-spacing: var(--lt-text-tracking, -0.01em);
350
370
  }
351
371
 
352
372
  :host([variant='h3']) [part='base'] {
373
+ font-family: var(
374
+ --lt-typography-fontFamilyHeading,
375
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
376
+ );
353
377
  font-size: clamp(1.25rem, 1.5vw + 0.5rem, 1.5rem);
354
378
  font-weight: var(--lt-text-weight, 600);
355
379
  line-height: 1.3;
356
380
  }
357
381
 
358
382
  :host([variant='h4']) [part='base'] {
383
+ font-family: var(
384
+ --lt-typography-fontFamilyHeading,
385
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
386
+ );
359
387
  font-size: 1.25rem;
360
388
  font-weight: var(--lt-text-weight, 600);
361
389
  line-height: 1.35;
362
390
  }
363
391
 
364
392
  :host([variant='h5']) [part='base'] {
393
+ font-family: var(
394
+ --lt-typography-fontFamilyHeading,
395
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
396
+ );
365
397
  font-size: 1.125rem;
366
398
  font-weight: var(--lt-text-weight, 600);
367
399
  line-height: 1.4;
368
400
  }
369
401
 
370
402
  :host([variant='h6']) [part='base'] {
403
+ font-family: var(
404
+ --lt-typography-fontFamilyHeading,
405
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
406
+ );
371
407
  font-size: 1rem;
372
408
  font-weight: var(--lt-text-weight, 600);
373
409
  line-height: 1.4;
@@ -406,7 +442,7 @@ var textStyles = css2`
406
442
  font-size: 0.6875rem;
407
443
  font-weight: var(--lt-text-weight, 600);
408
444
  line-height: 1.2;
409
- letter-spacing: 0.08em;
445
+ letter-spacing: var(--lt-text-tracking, 0.08em);
410
446
  text-transform: uppercase;
411
447
  }
412
448
 
@@ -176,61 +176,97 @@ var textStyles = css2`
176
176
  /* ── Display ─────────────────────────────────────────────────────────── */
177
177
 
178
178
  :host([variant='display-2xl']) [part='base'] {
179
+ font-family: var(
180
+ --lt-typography-fontFamilyHeading,
181
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
182
+ );
179
183
  font-size: clamp(2.5rem, 6vw, 4.5rem);
180
184
  font-weight: var(--lt-text-weight, 200);
181
185
  line-height: 1.1;
182
- letter-spacing: -0.02em;
186
+ letter-spacing: var(--lt-text-tracking, -0.02em);
183
187
  }
184
188
 
185
189
  :host([variant='display-xl']) [part='base'] {
190
+ font-family: var(
191
+ --lt-typography-fontFamilyHeading,
192
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
193
+ );
186
194
  font-size: clamp(2rem, 5vw, 3.75rem);
187
195
  font-weight: var(--lt-text-weight, 200);
188
196
  line-height: 1.1;
189
- letter-spacing: -0.02em;
197
+ letter-spacing: var(--lt-text-tracking, -0.02em);
190
198
  }
191
199
 
192
200
  :host([variant='display-lg']) [part='base'] {
201
+ font-family: var(
202
+ --lt-typography-fontFamilyHeading,
203
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
204
+ );
193
205
  font-size: clamp(2rem, 4vw, 3rem);
194
206
  font-weight: var(--lt-text-weight, 200);
195
207
  line-height: 1.15;
196
- letter-spacing: -0.01em;
208
+ letter-spacing: var(--lt-text-tracking, -0.01em);
197
209
  }
198
210
 
199
211
  /* ── Headings ─────────────────────────────────────────────────────────── */
200
212
 
201
213
  :host([variant='h1']) [part='base'] {
214
+ font-family: var(
215
+ --lt-typography-fontFamilyHeading,
216
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
217
+ );
202
218
  font-size: clamp(1.75rem, 2.5vw + 0.75rem, 2.5rem);
203
219
  font-weight: var(--lt-text-weight, 600);
204
220
  line-height: 1.2;
205
- letter-spacing: -0.02em;
221
+ letter-spacing: var(--lt-text-tracking, -0.02em);
206
222
  }
207
223
 
208
224
  :host([variant='h2']) [part='base'] {
225
+ font-family: var(
226
+ --lt-typography-fontFamilyHeading,
227
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
228
+ );
209
229
  font-size: clamp(1.5rem, 2vw + 0.5rem, 2rem);
210
230
  font-weight: var(--lt-text-weight, 600);
211
231
  line-height: 1.25;
212
- letter-spacing: -0.01em;
232
+ letter-spacing: var(--lt-text-tracking, -0.01em);
213
233
  }
214
234
 
215
235
  :host([variant='h3']) [part='base'] {
236
+ font-family: var(
237
+ --lt-typography-fontFamilyHeading,
238
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
239
+ );
216
240
  font-size: clamp(1.25rem, 1.5vw + 0.5rem, 1.5rem);
217
241
  font-weight: var(--lt-text-weight, 600);
218
242
  line-height: 1.3;
219
243
  }
220
244
 
221
245
  :host([variant='h4']) [part='base'] {
246
+ font-family: var(
247
+ --lt-typography-fontFamilyHeading,
248
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
249
+ );
222
250
  font-size: 1.25rem;
223
251
  font-weight: var(--lt-text-weight, 600);
224
252
  line-height: 1.35;
225
253
  }
226
254
 
227
255
  :host([variant='h5']) [part='base'] {
256
+ font-family: var(
257
+ --lt-typography-fontFamilyHeading,
258
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
259
+ );
228
260
  font-size: 1.125rem;
229
261
  font-weight: var(--lt-text-weight, 600);
230
262
  line-height: 1.4;
231
263
  }
232
264
 
233
265
  :host([variant='h6']) [part='base'] {
266
+ font-family: var(
267
+ --lt-typography-fontFamilyHeading,
268
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
269
+ );
234
270
  font-size: 1rem;
235
271
  font-weight: var(--lt-text-weight, 600);
236
272
  line-height: 1.4;
@@ -269,7 +305,7 @@ var textStyles = css2`
269
305
  font-size: 0.6875rem;
270
306
  font-weight: var(--lt-text-weight, 600);
271
307
  line-height: 1.2;
272
- letter-spacing: 0.08em;
308
+ letter-spacing: var(--lt-text-tracking, 0.08em);
273
309
  text-transform: uppercase;
274
310
  }
275
311
 
package/dist/index.cjs CHANGED
@@ -1514,61 +1514,97 @@ var textStyles = i`
1514
1514
  /* ── Display ─────────────────────────────────────────────────────────── */
1515
1515
 
1516
1516
  :host([variant='display-2xl']) [part='base'] {
1517
+ font-family: var(
1518
+ --lt-typography-fontFamilyHeading,
1519
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
1520
+ );
1517
1521
  font-size: clamp(2.5rem, 6vw, 4.5rem);
1518
1522
  font-weight: var(--lt-text-weight, 200);
1519
1523
  line-height: 1.1;
1520
- letter-spacing: -0.02em;
1524
+ letter-spacing: var(--lt-text-tracking, -0.02em);
1521
1525
  }
1522
1526
 
1523
1527
  :host([variant='display-xl']) [part='base'] {
1528
+ font-family: var(
1529
+ --lt-typography-fontFamilyHeading,
1530
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
1531
+ );
1524
1532
  font-size: clamp(2rem, 5vw, 3.75rem);
1525
1533
  font-weight: var(--lt-text-weight, 200);
1526
1534
  line-height: 1.1;
1527
- letter-spacing: -0.02em;
1535
+ letter-spacing: var(--lt-text-tracking, -0.02em);
1528
1536
  }
1529
1537
 
1530
1538
  :host([variant='display-lg']) [part='base'] {
1539
+ font-family: var(
1540
+ --lt-typography-fontFamilyHeading,
1541
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
1542
+ );
1531
1543
  font-size: clamp(2rem, 4vw, 3rem);
1532
1544
  font-weight: var(--lt-text-weight, 200);
1533
1545
  line-height: 1.15;
1534
- letter-spacing: -0.01em;
1546
+ letter-spacing: var(--lt-text-tracking, -0.01em);
1535
1547
  }
1536
1548
 
1537
1549
  /* ── Headings ─────────────────────────────────────────────────────────── */
1538
1550
 
1539
1551
  :host([variant='h1']) [part='base'] {
1552
+ font-family: var(
1553
+ --lt-typography-fontFamilyHeading,
1554
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
1555
+ );
1540
1556
  font-size: clamp(1.75rem, 2.5vw + 0.75rem, 2.5rem);
1541
1557
  font-weight: var(--lt-text-weight, 600);
1542
1558
  line-height: 1.2;
1543
- letter-spacing: -0.02em;
1559
+ letter-spacing: var(--lt-text-tracking, -0.02em);
1544
1560
  }
1545
1561
 
1546
1562
  :host([variant='h2']) [part='base'] {
1563
+ font-family: var(
1564
+ --lt-typography-fontFamilyHeading,
1565
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
1566
+ );
1547
1567
  font-size: clamp(1.5rem, 2vw + 0.5rem, 2rem);
1548
1568
  font-weight: var(--lt-text-weight, 600);
1549
1569
  line-height: 1.25;
1550
- letter-spacing: -0.01em;
1570
+ letter-spacing: var(--lt-text-tracking, -0.01em);
1551
1571
  }
1552
1572
 
1553
1573
  :host([variant='h3']) [part='base'] {
1574
+ font-family: var(
1575
+ --lt-typography-fontFamilyHeading,
1576
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
1577
+ );
1554
1578
  font-size: clamp(1.25rem, 1.5vw + 0.5rem, 1.5rem);
1555
1579
  font-weight: var(--lt-text-weight, 600);
1556
1580
  line-height: 1.3;
1557
1581
  }
1558
1582
 
1559
1583
  :host([variant='h4']) [part='base'] {
1584
+ font-family: var(
1585
+ --lt-typography-fontFamilyHeading,
1586
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
1587
+ );
1560
1588
  font-size: 1.25rem;
1561
1589
  font-weight: var(--lt-text-weight, 600);
1562
1590
  line-height: 1.35;
1563
1591
  }
1564
1592
 
1565
1593
  :host([variant='h5']) [part='base'] {
1594
+ font-family: var(
1595
+ --lt-typography-fontFamilyHeading,
1596
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
1597
+ );
1566
1598
  font-size: 1.125rem;
1567
1599
  font-weight: var(--lt-text-weight, 600);
1568
1600
  line-height: 1.4;
1569
1601
  }
1570
1602
 
1571
1603
  :host([variant='h6']) [part='base'] {
1604
+ font-family: var(
1605
+ --lt-typography-fontFamilyHeading,
1606
+ var(--lt-typography-fontFamilyPrimary, 'Hanken Grotesk', sans-serif)
1607
+ );
1572
1608
  font-size: 1rem;
1573
1609
  font-weight: var(--lt-text-weight, 600);
1574
1610
  line-height: 1.4;
@@ -1607,7 +1643,7 @@ var textStyles = i`
1607
1643
  font-size: 0.6875rem;
1608
1644
  font-weight: var(--lt-text-weight, 600);
1609
1645
  line-height: 1.2;
1610
- letter-spacing: 0.08em;
1646
+ letter-spacing: var(--lt-text-tracking, 0.08em);
1611
1647
  text-transform: uppercase;
1612
1648
  }
1613
1649
 
@@ -2015,6 +2051,30 @@ var buttonStyles = i`
2015
2051
  opacity: 0.8;
2016
2052
  }
2017
2053
 
2054
+ /* bordered — adds a border on top of whatever appearance is active; a no-op on
2055
+ outlined, which already sets the same border color. */
2056
+ :host([bordered][variant='primary']) {
2057
+ --_border-color: var(--lt-border-primary-strong);
2058
+ }
2059
+ :host([bordered][variant='secondary']) {
2060
+ --_border-color: var(--lt-border-secondary-strong);
2061
+ }
2062
+ :host([bordered][variant='neutral']) {
2063
+ --_border-color: var(--lt-border-strong);
2064
+ }
2065
+ :host([bordered][variant='success']) {
2066
+ --_border-color: var(--lt-border-success-strong);
2067
+ }
2068
+ :host([bordered][variant='warning']) {
2069
+ --_border-color: var(--lt-border-warning-strong);
2070
+ }
2071
+ :host([bordered][variant='error']) {
2072
+ --_border-color: var(--lt-border-error-strong);
2073
+ }
2074
+ :host([bordered][variant='info']) {
2075
+ --_border-color: var(--lt-border-info-strong);
2076
+ }
2077
+
2018
2078
  /* loading */
2019
2079
  .spinner {
2020
2080
  animation: spin 700ms linear infinite;
@@ -2175,6 +2235,7 @@ var Button = class extends ThemeableElement {
2175
2235
  this._ariaForwarding = new AriaForwardingController(this, () => this.shadowRoot?.querySelector('[part="base"]'));
2176
2236
  this.variant = "primary";
2177
2237
  this.appearance = "filled";
2238
+ this.bordered = false;
2178
2239
  this.size = "md";
2179
2240
  this.disabled = false;
2180
2241
  this.loading = false;
@@ -2237,6 +2298,9 @@ __decorateClass([
2237
2298
  __decorateClass([
2238
2299
  n4({ reflect: true })
2239
2300
  ], Button.prototype, "appearance", 2);
2301
+ __decorateClass([
2302
+ n4({ type: Boolean, reflect: true })
2303
+ ], Button.prototype, "bordered", 2);
2240
2304
  __decorateClass([
2241
2305
  n4({ reflect: true })
2242
2306
  ], Button.prototype, "size", 2);
@@ -3224,6 +3288,30 @@ var iconButtonStyles = i`
3224
3288
  --_active-bg: var(--lt-bg-info-subtle);
3225
3289
  }
3226
3290
 
3291
+ /* bordered — adds a border on top of whatever appearance is active; a no-op on
3292
+ outlined, which already sets the same border color. */
3293
+ :host([bordered][variant='primary']) {
3294
+ --_border-color: var(--lt-border-primary-strong);
3295
+ }
3296
+ :host([bordered][variant='secondary']) {
3297
+ --_border-color: var(--lt-border-secondary-strong);
3298
+ }
3299
+ :host([bordered][variant='neutral']) {
3300
+ --_border-color: var(--lt-border-strong);
3301
+ }
3302
+ :host([bordered][variant='success']) {
3303
+ --_border-color: var(--lt-border-success-strong);
3304
+ }
3305
+ :host([bordered][variant='warning']) {
3306
+ --_border-color: var(--lt-border-warning-strong);
3307
+ }
3308
+ :host([bordered][variant='error']) {
3309
+ --_border-color: var(--lt-border-error-strong);
3310
+ }
3311
+ :host([bordered][variant='info']) {
3312
+ --_border-color: var(--lt-border-info-strong);
3313
+ }
3314
+
3227
3315
  /* round shape */
3228
3316
  :host([round]) [part='base'] {
3229
3317
  border-radius: 50%;
@@ -3240,6 +3328,7 @@ var IconButton = class extends ThemeableElement {
3240
3328
  this.label = "";
3241
3329
  this.variant = "neutral";
3242
3330
  this.appearance = "ghost";
3331
+ this.bordered = false;
3243
3332
  this.size = "md";
3244
3333
  this.disabled = false;
3245
3334
  this.href = "";
@@ -3286,6 +3375,9 @@ __decorateClass([
3286
3375
  __decorateClass([
3287
3376
  n4({ reflect: true })
3288
3377
  ], IconButton.prototype, "appearance", 2);
3378
+ __decorateClass([
3379
+ n4({ type: Boolean, reflect: true })
3380
+ ], IconButton.prototype, "bordered", 2);
3289
3381
  __decorateClass([
3290
3382
  n4({ reflect: true })
3291
3383
  ], IconButton.prototype, "size", 2);
@@ -3402,6 +3494,8 @@ var Dialog = class extends ThemeableElement {
3402
3494
  this.closeOnEscape = true;
3403
3495
  this.uppercase = false;
3404
3496
  this.backdropBlur = false;
3497
+ this.elevation = "4";
3498
+ this.appearance = "filled";
3405
3499
  this.handleKeydown = (event) => {
3406
3500
  if (this.open && this.closeOnEscape && event.key === "Escape") {
3407
3501
  event.preventDefault();
@@ -3479,7 +3573,8 @@ var Dialog = class extends ThemeableElement {
3479
3573
  return T`
3480
3574
  <div class="backdrop" ?inert=${!this.open} @click=${this.handleBackdropClick} part="backdrop">
3481
3575
  <lt-surface
3482
- elevation="4"
3576
+ elevation=${this.elevation}
3577
+ appearance=${this.appearance}
3483
3578
  role="dialog"
3484
3579
  aria-modal="true"
3485
3580
  aria-labelledby="dialog-title"
@@ -3546,6 +3641,12 @@ __decorateClass([
3546
3641
  __decorateClass([
3547
3642
  n4({ type: Boolean, reflect: true, attribute: "backdrop-blur" })
3548
3643
  ], Dialog.prototype, "backdropBlur", 2);
3644
+ __decorateClass([
3645
+ n4({ reflect: true })
3646
+ ], Dialog.prototype, "elevation", 2);
3647
+ __decorateClass([
3648
+ n4({ reflect: true })
3649
+ ], Dialog.prototype, "appearance", 2);
3549
3650
  __decorateClass([
3550
3651
  e4("lt-surface")
3551
3652
  ], Dialog.prototype, "dialogElement", 2);
@@ -6038,7 +6139,15 @@ var Select = class extends ThemeableElement {
6038
6139
  </span>
6039
6140
  <lt-icon class="icon-end" name="caret-down"></lt-icon>
6040
6141
  </div>
6041
- <lt-surface class="dropdown" popover="manual" elevation="2" role="listbox">
6142
+ <lt-surface
6143
+ class="dropdown"
6144
+ popover="manual"
6145
+ elevation="2"
6146
+ appearance="outlined"
6147
+ background="--lt-bg-default"
6148
+ role="listbox"
6149
+ part="listbox"
6150
+ >
6042
6151
  <div class="options-container">
6043
6152
  ${this.options.map(
6044
6153
  (option) => T`
@@ -8638,6 +8747,8 @@ var Snackbar = class extends ThemeableElement {
8638
8747
  this.closable = true;
8639
8748
  this.actionLabel = "";
8640
8749
  this.icon = "";
8750
+ this.elevation = "5";
8751
+ this.appearance = "filled";
8641
8752
  }
8642
8753
  /** Shows the snackbar and starts the auto-dismiss timer. */
8643
8754
  show() {
@@ -8690,7 +8801,7 @@ var Snackbar = class extends ThemeableElement {
8690
8801
  render() {
8691
8802
  const iconName = this._resolvedIcon;
8692
8803
  return T`
8693
- <lt-surface elevation="5" background=${Snackbar._bgMap[this.variant]}>
8804
+ <lt-surface elevation=${this.elevation} appearance=${this.appearance} background=${Snackbar._bgMap[this.variant]}>
8694
8805
  <div class="inner" role="status" aria-live="polite" part="base">
8695
8806
  ${iconName ? T`<lt-icon class="variant-icon" name=${iconName} part="icon"></lt-icon>` : ""}
8696
8807
  <span class="message" part="message">
@@ -8737,6 +8848,12 @@ __decorateClass([
8737
8848
  __decorateClass([
8738
8849
  n4({ reflect: true })
8739
8850
  ], Snackbar.prototype, "icon", 2);
8851
+ __decorateClass([
8852
+ n4({ reflect: true })
8853
+ ], Snackbar.prototype, "elevation", 2);
8854
+ __decorateClass([
8855
+ n4({ reflect: true })
8856
+ ], Snackbar.prototype, "appearance", 2);
8740
8857
  Snackbar = __decorateClass([
8741
8858
  t3("lt-snackbar")
8742
8859
  ], Snackbar);
@@ -9244,6 +9361,7 @@ var dropdownStyles = [
9244
9361
 
9245
9362
  lt-surface.menu::part(surface) {
9246
9363
  overflow: hidden;
9364
+ padding-block: var(--lt-dropdown-menu-padding, var(--lt-spacing-2));
9247
9365
  }
9248
9366
  `
9249
9367
  ];
@@ -10396,28 +10514,28 @@ var sidepanelStyles = i`
10396
10514
  inset-block: 0;
10397
10515
  left: 0;
10398
10516
  transform: translateX(-100%);
10399
- box-shadow: 4px 0 24px rgba(0, 0, 0, 0.12);
10517
+ box-shadow: var(--lt-sidepanel-shadow, 4px 0 24px rgba(0, 0, 0, 0.12));
10400
10518
  }
10401
10519
 
10402
10520
  :host([anchor='right']) [part='panel'] {
10403
10521
  inset-block: 0;
10404
10522
  right: 0;
10405
10523
  transform: translateX(100%);
10406
- box-shadow: -4px 0 24px rgba(0, 0, 0, 0.12);
10524
+ box-shadow: var(--lt-sidepanel-shadow, -4px 0 24px rgba(0, 0, 0, 0.12));
10407
10525
  }
10408
10526
 
10409
10527
  :host([anchor='top']) [part='panel'] {
10410
10528
  inset-inline: 0;
10411
10529
  top: 0;
10412
10530
  transform: translateY(-100%);
10413
- box-shadow: 0 4px 24px rgba(0, 0, 0, 0.12);
10531
+ box-shadow: var(--lt-sidepanel-shadow, 0 4px 24px rgba(0, 0, 0, 0.12));
10414
10532
  }
10415
10533
 
10416
10534
  :host([anchor='bottom']) [part='panel'] {
10417
10535
  inset-inline: 0;
10418
10536
  bottom: 0;
10419
10537
  transform: translateY(100%);
10420
- box-shadow: 0 -4px 24px rgba(0, 0, 0, 0.12);
10538
+ box-shadow: var(--lt-sidepanel-shadow, 0 -4px 24px rgba(0, 0, 0, 0.12));
10421
10539
  }
10422
10540
 
10423
10541
  /* ── Open state — must come after anchors to win the cascade ────────────── */
@@ -10458,6 +10576,7 @@ var sidepanelStyles = i`
10458
10576
  .body {
10459
10577
  flex: 1;
10460
10578
  overflow-y: auto;
10579
+ padding: var(--lt-spacing-5);
10461
10580
  }
10462
10581
 
10463
10582
  /* ── Reduced motion ─────────────────────────────────────────────────────── */