@shortfuse/materialdesignweb 0.7.1-0 → 0.7.1-2

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 (138) hide show
  1. package/bin/generate-css.js +1 -2
  2. package/components/Badge.js +40 -3
  3. package/components/Body.js +16 -2
  4. package/components/BottomAppBar.js +25 -2
  5. package/components/Box.js +33 -3
  6. package/components/Button.js +146 -9
  7. package/components/Card.js +111 -3
  8. package/components/Checkbox.js +91 -3
  9. package/components/CheckboxIcon.js +92 -4
  10. package/components/Chip.js +38 -2
  11. package/components/Dialog.js +237 -3
  12. package/components/DialogActions.js +3 -2
  13. package/components/Divider.js +44 -3
  14. package/components/ExtendedFab.js +27 -2
  15. package/components/Fab.js +26 -2
  16. package/components/FilterChip.js +83 -2
  17. package/components/Headline.js +16 -2
  18. package/components/Icon.js +80 -4
  19. package/components/IconButton.js +153 -2
  20. package/components/Label.js +16 -2
  21. package/components/Layout.js +21 -3
  22. package/components/List.js +15 -2
  23. package/components/ListItem.js +229 -3
  24. package/components/ListOption.js +37 -3
  25. package/components/ListSelect.js +12 -2
  26. package/components/Menu.js +173 -3
  27. package/components/MenuItem.js +55 -2
  28. package/components/Nav.js +19 -2
  29. package/components/NavBar.js +37 -2
  30. package/components/NavBarItem.js +44 -2
  31. package/components/NavDrawer.js +34 -2
  32. package/components/NavDrawerItem.js +44 -2
  33. package/components/NavItem.js +183 -3
  34. package/components/NavRail.js +50 -2
  35. package/components/NavRailItem.js +25 -2
  36. package/components/Pane.js +263 -3
  37. package/components/Progress.js +469 -10
  38. package/components/Radio.js +97 -3
  39. package/components/RadioIcon.js +77 -5
  40. package/components/Ripple.js +76 -3
  41. package/components/SegmentedButton.js +97 -2
  42. package/components/SegmentedButtonGroup.js +15 -2
  43. package/components/Select.js +54 -2
  44. package/components/Shape.js +55 -18
  45. package/components/Slider.js +309 -3
  46. package/components/Snackbar.js +82 -2
  47. package/components/Surface.js +13 -4
  48. package/components/Switch.js +67 -4
  49. package/components/SwitchIcon.js +272 -5
  50. package/components/Tab.js +87 -3
  51. package/components/TabContent.js +21 -21
  52. package/components/TabList.js +131 -2
  53. package/components/TextArea.js +97 -3
  54. package/components/Title.js +16 -2
  55. package/components/Tooltip.js +42 -2
  56. package/components/TopAppBar.js +212 -3
  57. package/core/template.js +36 -9
  58. package/mixins/ControlMixin.js +65 -2
  59. package/mixins/DensityMixin.js +17 -3
  60. package/mixins/FlexableMixin.js +81 -3
  61. package/mixins/RippleMixin.js +15 -4
  62. package/mixins/ShapeMixin.js +279 -8
  63. package/mixins/StateMixin.js +87 -5
  64. package/mixins/SurfaceMixin.js +152 -3
  65. package/mixins/TextFieldMixin.js +661 -3
  66. package/mixins/ThemableMixin.js +206 -3
  67. package/mixins/TooltipTriggerMixin.js +30 -4
  68. package/mixins/TouchTargetMixin.js +29 -4
  69. package/package.json +2 -1
  70. package/theming/loader.js +0 -2
  71. package/components/Badge.css +0 -38
  72. package/components/Body.css +0 -14
  73. package/components/BottomAppBar.css +0 -23
  74. package/components/Box.css +0 -31
  75. package/components/Button.css +0 -147
  76. package/components/Card.css +0 -109
  77. package/components/Checkbox.css +0 -89
  78. package/components/CheckboxIcon.css +0 -90
  79. package/components/Chip.css +0 -35
  80. package/components/Dialog.css +0 -235
  81. package/components/Divider.css +0 -41
  82. package/components/ExtendedFab.css +0 -24
  83. package/components/Fab.css +0 -23
  84. package/components/FilterChip.css +0 -80
  85. package/components/Headline.css +0 -14
  86. package/components/Icon.css +0 -76
  87. package/components/IconButton.css +0 -150
  88. package/components/Label.css +0 -14
  89. package/components/Layout.css +0 -19
  90. package/components/List.css +0 -12
  91. package/components/ListItem.css +0 -224
  92. package/components/ListOption.css +0 -34
  93. package/components/ListSelect.css +0 -9
  94. package/components/Menu.css +0 -171
  95. package/components/MenuItem.css +0 -53
  96. package/components/Nav.css +0 -17
  97. package/components/NavBar.css +0 -34
  98. package/components/NavBarItem.css +0 -41
  99. package/components/NavDrawer.css +0 -31
  100. package/components/NavDrawerItem.css +0 -42
  101. package/components/NavItem.css +0 -181
  102. package/components/NavRail.css +0 -47
  103. package/components/NavRailItem.css +0 -25
  104. package/components/Outline.css +0 -138
  105. package/components/Pane.css +0 -261
  106. package/components/Progress.css +0 -75
  107. package/components/ProgressCircle.css +0 -226
  108. package/components/ProgressLine.css +0 -155
  109. package/components/Radio.css +0 -95
  110. package/components/RadioIcon.css +0 -73
  111. package/components/Ripple.css +0 -74
  112. package/components/SegmentedButton.css +0 -94
  113. package/components/SegmentedButtonGroup.css +0 -12
  114. package/components/Select.css +0 -52
  115. package/components/Shape.css +0 -132
  116. package/components/Slider.css +0 -307
  117. package/components/Snackbar.css +0 -80
  118. package/components/Surface.css +0 -10
  119. package/components/Switch.css +0 -64
  120. package/components/SwitchIcon.css +0 -178
  121. package/components/SwitchIconAnimations.css +0 -89
  122. package/components/Tab.css +0 -85
  123. package/components/TabList.css +0 -129
  124. package/components/TextArea.css +0 -93
  125. package/components/Title.css +0 -14
  126. package/components/Tooltip.css +0 -40
  127. package/components/TopAppBar.css +0 -209
  128. package/mixins/ControlMixin.css +0 -57
  129. package/mixins/DensityMixin.css +0 -40
  130. package/mixins/FlexableMixin.css +0 -79
  131. package/mixins/RippleMixin.css +0 -12
  132. package/mixins/ShapeMixin.css +0 -135
  133. package/mixins/StateMixin.css +0 -82
  134. package/mixins/SurfaceMixin.css +0 -150
  135. package/mixins/TextFieldMixin.css +0 -657
  136. package/mixins/ThemableMixin.css +0 -204
  137. package/mixins/TooltipTriggerMixin.css +0 -27
  138. package/mixins/TouchTargetMixin.css +0 -26
@@ -1,12 +1,48 @@
1
1
  import Button from './Button.js';
2
- import styles from './Chip.css' assert { type: 'css' };
3
2
 
4
3
  export default Button
5
4
  .extend()
6
5
  .observe({
7
6
  suggestion: 'boolean',
8
7
  })
9
- .css(styles)
8
+ .css`
9
+ /* https://m3.material.io/components/chips/specs */
10
+
11
+ :host {
12
+ --mdw-shape__size: 8px;
13
+ --mdw-ink: var(--mdw-color__on-surface);
14
+ padding-block: calc(4px + (var(--mdw-density) * 2px));
15
+ padding-inline: calc(16px + (var(--mdw-density) * 2px));
16
+
17
+ color: rgb(var(--mdw-ink));
18
+ }
19
+
20
+ :host(:where([suggestion])) {
21
+ --mdw-ink: var(--mdw-color__on-surface-variant);
22
+ }
23
+
24
+ :host(:where([icon])) {
25
+ gap: 8px;
26
+
27
+ padding-inline: calc(8px + (var(--mdw-density) * 2px)) calc(16px + (var(--mdw-density) * 2px));
28
+
29
+ }
30
+
31
+ #outline {
32
+ --mdw-ink: rgb(var(--mdw-color__on-surface-variant));
33
+ }
34
+
35
+ #outline:is([ink],[color]) {
36
+ /* stylelint-disable-next-line rule-selector-property-disallowed-list */
37
+ --mdw-ink: inherit;
38
+ }
39
+
40
+ #slot[disabled],
41
+ #icon[disabled] {
42
+ color: rgba(var(--mdw-color__on-surface), 0.38);
43
+ }
44
+
45
+ `
10
46
  .on({
11
47
  composed({ inline }) {
12
48
  const { slot, outline, icon } = this.refs;
@@ -7,8 +7,6 @@ import './DialogActions.js';
7
7
  import { handleTabKeyPress } from '../aria/modal.js';
8
8
  import CustomElement from '../core/CustomElement.js';
9
9
 
10
- import styles from './Dialog.css' assert { type: 'css' };
11
-
12
10
  /** @typedef {Object<string,any>} DialogStackState */
13
11
 
14
12
  /** @typedef {InstanceType<import('./Dialog.js').default>} Dialog */
@@ -250,7 +248,6 @@ export default CustomElement
250
248
  return true;
251
249
  },
252
250
  })
253
- .css(styles)
254
251
  .expressions({
255
252
  cancelAutoFocus({ default: d }) { return d === 'cancel'; },
256
253
  confirmAutoFocus({ default: d }) { return d === 'confirm'; },
@@ -281,6 +278,243 @@ export default CustomElement
281
278
  </mdw-surface>
282
279
  </dialog>
283
280
  `
281
+ .css`
282
+ /* https://m3.material.io/components/dialogs/specs */
283
+
284
+ :host {
285
+ --mdw-dialog__expand-duration: var(--mdw-motion-expand-duration, 250ms);
286
+ --mdw-dialog__simple-duration: var(--mdw-motion-simple-duration, 100ms);
287
+ --mdw-dialog__standard-easing: var(--mdw-motion-standard-easing, cubic-bezier(0.4, 0.0, 0.2, 1));
288
+ --mdw-dialog__deceleration-easing: var(--mdw-motion-deceleration-easing, cubic-bezier(0.0, 0.0, 0.2, 1));
289
+ --mdw-dialog__fade-in-duration: var(--mdw-motion-fade-in-duration, 150ms);
290
+
291
+ position: fixed;
292
+ inset: 0;
293
+
294
+ pointer-events: none;
295
+
296
+ z-index: 24;
297
+ }
298
+
299
+ #dialog {
300
+ position: fixed;
301
+ inset-block-start: 0;
302
+ inset-inline-start: 0;
303
+
304
+ display: flex;
305
+ align-items: center;
306
+ flex-direction: row;
307
+ justify-content: center;
308
+
309
+ box-sizing: border-box;
310
+ block-size:100%;
311
+ max-block-size: none;
312
+ inline-size:100%;
313
+ max-inline-size: none;
314
+ margin:0;
315
+ border: none;
316
+ padding: 48px;
317
+
318
+ opacity: 0;
319
+ /* visiblity:hidden still registers events, hide from pointer with scale(0) */
320
+ transform: scale(0);
321
+ visibility: hidden;
322
+ z-index: 24;
323
+
324
+ background-color: transparent;
325
+
326
+ transition-delay: 0s, 200ms, 200ms;
327
+ transition-duration: 200ms, 0s, 0s;
328
+ transition-property: opacity, transform, visibility;
329
+ transition-timing-function: ease-out;
330
+ will-change: opacity;
331
+ }
332
+
333
+ @media (min-width: 1440px) {
334
+ #dialog {
335
+ padding: 56px;
336
+ }
337
+ }
338
+
339
+ #dialog::backdrop {
340
+ /** Use scrim instead */
341
+ display: none;
342
+ }
343
+
344
+ #dialog[aria-hidden="false"],
345
+ #dialog:modal {
346
+ pointer-events: auto;
347
+
348
+ opacity: 1;
349
+
350
+ transform: none;
351
+ visibility: visible;
352
+
353
+ transition-delay: 0s;
354
+ transition-duration: 0s;
355
+ transition-timing-function: ease-in;
356
+ }
357
+
358
+ #scrim {
359
+ position: fixed;
360
+ inset: 0;
361
+
362
+ overflow-y: scroll;
363
+ overscroll-behavior: none;
364
+ overscroll-behavior: contain;
365
+ scrollbar-width: none;
366
+
367
+ block-size: 100%;
368
+ inline-size: 100%;
369
+
370
+ cursor: default;
371
+ pointer-events: inherit;
372
+ -webkit-tap-highlight-color: transparent;
373
+
374
+ opacity: 0.38;
375
+ z-index: 0;
376
+
377
+ background-color: rgb(var(--mdw-color__scrim));
378
+ }
379
+
380
+ #scrim::-webkit-scrollbar {
381
+ display: none;
382
+ }
383
+
384
+ #scrim::after {
385
+ content: '';
386
+
387
+ display: block;
388
+
389
+ block-size: 200%;
390
+ inline-size: 200%;
391
+ }
392
+ @keyframes scaleUpAnimation {
393
+ from {
394
+ transform: scaleY(0);
395
+ }
396
+
397
+ to {
398
+ transform: scaleY(1);
399
+ }
400
+ }
401
+
402
+ #surface {
403
+ --mdw-shape__size: 28px;
404
+
405
+ position: relative;
406
+
407
+ display: flex;
408
+ align-items: flex-start;
409
+ flex-direction: column;
410
+ -webkit-overflow-scrolling: touch;
411
+ overscroll-behavior: none;
412
+ overscroll-behavior: contain;
413
+
414
+ box-sizing: border-box;
415
+ max-block-size: 100%;
416
+ min-inline-size: 280px;
417
+ max-inline-size: 560px;
418
+ flex-shrink: 1;
419
+
420
+ padding-block-start: 8px;
421
+
422
+ transform: scale(1);
423
+ transform-origin: top center;
424
+ z-index: 24;
425
+
426
+ will-change: display, transform;
427
+ }
428
+
429
+ #surface[icon] {
430
+ align-items: center;
431
+ }
432
+
433
+ #surface[open] {
434
+ animation-name: scaleUpAnimation;
435
+ animation-duration: 200ms;
436
+ animation-direction: forwards;
437
+ }
438
+
439
+ #icon {
440
+ padding-block-start: 16px;
441
+
442
+ font-size: 24px;
443
+ }
444
+
445
+ #headline {
446
+ display: block;
447
+
448
+ padding-block-start: 16px;
449
+ padding-inline: 24px;
450
+
451
+ font: var(--mdw-typescale__headline-small__font);
452
+ letter-spacing: var(--mdw-typescale__headline-small__letter-spacing);
453
+ }
454
+
455
+ #headline:not([slotted]):empty {
456
+ display: none;
457
+ }
458
+
459
+ #body {
460
+ padding-block: 16px;
461
+ }
462
+
463
+ .content {
464
+ padding-inline: 24px;
465
+ }
466
+
467
+ #divider-top {
468
+ padding-block-start: 16px;
469
+ }
470
+
471
+ mdw-divider:not([size]) {
472
+ color: transparent;
473
+ }
474
+
475
+ mdw-divider[size="inset"] {
476
+ padding-inline: 24px;
477
+ }
478
+
479
+ #fixed {
480
+ display:block;
481
+
482
+ padding-block-start: 16px;
483
+
484
+ color: rgb(var(--mdw-color__on-surface-variant));
485
+
486
+ font: var(--mdw-typescale__body-medium__font);
487
+ letter-spacing: var(--mdw-typescale__body-medium__letter-spacing);
488
+ }
489
+
490
+ #fixed:not([slotted]) {
491
+ display: none;
492
+ }
493
+
494
+ #slot {
495
+ display:block;
496
+
497
+ overflow-y: auto;
498
+
499
+ color: rgb(var(--mdw-color__on-surface-variant));
500
+
501
+ font: var(--mdw-typescale__body-medium__font);
502
+ letter-spacing: var(--mdw-typescale__body-medium__letter-spacing);
503
+ }
504
+
505
+ #scroller {
506
+ display: block;
507
+ overflow-y: auto;
508
+ }
509
+
510
+ #form {
511
+ display: contents;
512
+ }
513
+
514
+ #form-slot::slotted(form) {
515
+ display: contents;
516
+ }
517
+ `
284
518
  .childEvents({
285
519
  dialog: {
286
520
  cancel(event) {
@@ -2,11 +2,12 @@ import CustomElement from '../core/CustomElement.js';
2
2
 
3
3
  export default CustomElement
4
4
  .extend()
5
- .css/* css */`
5
+ .css`
6
6
  :host {
7
7
  align-self: flex-end;
8
- padding-inline: 24px;
8
+
9
9
  margin-block: 24px;
10
+ padding-inline: 24px;
10
11
  }
11
12
  `
12
13
  .html/* html */`<slot id=slot></slot>`
@@ -1,13 +1,54 @@
1
1
  import CustomElement from '../core/CustomElement.js';
2
2
  import ThemableMixin from '../mixins/ThemableMixin.js';
3
3
 
4
- import styles from './Divider.css' assert { type: 'css' };
5
-
6
4
  export default CustomElement
7
5
  .mixin(ThemableMixin)
8
6
  .extend()
9
7
  .observe({
10
8
  vertical: 'boolean',
11
9
  })
12
- .css(styles)
10
+ .css`
11
+ /* https://m3.material.io/components/dividers/specs */
12
+
13
+ :host {
14
+ --mdw-ink: var(--mdw-color__outline-variant);
15
+ position: relative;
16
+
17
+ display: block;
18
+ overflow: visible;
19
+
20
+ box-sizing: border-box;
21
+ block-size: 0;
22
+ inline-size: 100%;
23
+
24
+ color: rgb(var(--mdw-ink));
25
+ }
26
+
27
+ :host::before {
28
+ content: '';
29
+
30
+ display: block;
31
+
32
+ box-sizing: border-box;
33
+ block-size: 1px;
34
+ inline-size: auto;
35
+
36
+ background-color: currentcolor;
37
+ }
38
+
39
+ :host([vertical]) {
40
+ display: inline-flex;
41
+ vertical-align: top;
42
+
43
+ block-size: auto;
44
+ min-block-size: 100%;
45
+ inline-size: 0;
46
+ }
47
+
48
+ :host([vertical])::before {
49
+ block-size: auto;
50
+ min-inline-size: 1px;
51
+ }
52
+
53
+ `
13
54
  .autoRegister('mdw-divider');
@@ -1,9 +1,34 @@
1
1
  import Button from './Button.js';
2
- import styles from './ExtendedFab.css' assert { type: 'css' };
3
2
 
4
3
  export default Button
5
4
  .extend()
6
- .css(styles)
5
+ .css`
6
+ /* https://m3.material.io/components/extended-fab/specs */
7
+
8
+ :host {
9
+ --mdw-bg: var(--mdw-color__primary-container);
10
+ --mdw-ink: var(--mdw-color__on-primary-container);
11
+ --mdw-shape__size: 16px;
12
+ --mdw-surface__tint: var(--mdw-surface__tint__3);
13
+ --mdw-surface__tint__raised: var(--mdw-surface__tint__4);
14
+ --mdw-surface__shadow__resting: var(--mdw-surface__shadow__3);
15
+ --mdw-surface__shadow__raised: var(--mdw-surface__shadow__4);
16
+ min-inline-size: 48px;
17
+ padding: calc(16px + (var(--mdw-density) * 2px));
18
+ }
19
+
20
+ #icon {
21
+ font-size: 24px;
22
+ }
23
+
24
+ :host([lowered]) {
25
+ --mdw-surface__tint: var(--mdw-surface__tint__1);
26
+ --mdw-surface__tint__raised: var(--mdw-surface__tint__2);
27
+ --mdw-surface__shadow__resting: var(--mdw-surface__shadow__1);
28
+ --mdw-surface__shadow__raised: var(--mdw-surface__shadow__2);
29
+ }
30
+
31
+ `
7
32
  .observe({
8
33
  filled: { empty: 'tonal' },
9
34
  elevated: { type: 'boolean', empty: true },
package/components/Fab.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import TooltipTriggerMixin from '../mixins/TooltipTriggerMixin.js';
2
2
 
3
3
  import ExtendedFab from './ExtendedFab.js';
4
- import styles from './Fab.css' assert { type: 'css' };
5
4
 
6
5
  export default ExtendedFab
7
6
  .mixin(TooltipTriggerMixin)
@@ -12,7 +11,32 @@ export default ExtendedFab
12
11
  value: null,
13
12
  },
14
13
  })
15
- .css(styles)
14
+ .css`
15
+ /* https://m3.material.io/components/floating-action-button/specs */
16
+
17
+ :host {
18
+ min-inline-size: 24px;
19
+ }
20
+
21
+ #icon {
22
+ font-size: 24px;
23
+ }
24
+
25
+ #icon[fab-size="large"] {
26
+ font-size: 36px;
27
+ }
28
+
29
+ :host([fab-size="small"]) {
30
+ --mdw-shape__size: 12px;
31
+ padding: calc(8px + (var(--mdw-density) * 2px));
32
+ }
33
+
34
+ :host([fab-size="large"]) {
35
+ --mdw-shape__size: 28px;
36
+ padding: calc(30px + (var(--mdw-density) * 2px));
37
+ }
38
+
39
+ `
16
40
  .on({
17
41
  composed() {
18
42
  const { slot, tooltipSlot, control, shape, icon } = this.refs;
@@ -1,7 +1,6 @@
1
1
  import './Icon.js';
2
2
 
3
3
  import Chip from './Chip.js';
4
- import styles from './FilterChip.css' assert { type: 'css' };
5
4
 
6
5
  export default Chip
7
6
  .extend()
@@ -19,7 +18,6 @@ export default Chip
19
18
  return null;
20
19
  },
21
20
  })
22
- .css(styles)
23
21
  .html/* html */`
24
22
  <mdw-icon _if={!icon} id=check-icon disabled={disabledState} selected={checked} aria-hidden=true>check</mdw-icon>
25
23
  <mdw-icon _if={computedTrailingIcon} id=trailing-icon aria-hidden=true src={trailingSrc}>{computedTrailingIcon}</mdw-icon>
@@ -48,4 +46,87 @@ export default Chip
48
46
  slot.after(trailingIcon);
49
47
  },
50
48
  })
49
+ .css`
50
+ /* https://m3.material.io/components/chips/specs */
51
+
52
+ /* Filter Chips can be elevated */
53
+
54
+ :host {
55
+ --mdw-ink: var(--mdw-color__on-secondary-container);
56
+ --mdw-bg: var(--mdw-color__secondary-container);
57
+ gap: 8px;
58
+
59
+ padding-inline-start: max(4px, calc(8px + (var(--mdw-density) * 2px)));
60
+ padding-inline-end: max(12px, calc(16px + (var(--mdw-density) * 2px)));
61
+
62
+ color: rgb(var(--mdw-color__on-surface-variant));
63
+
64
+ }
65
+
66
+ :host(:focus) {
67
+ --mdw-outline__rgb: var(--mdw-color__outline);
68
+ }
69
+
70
+ #icon[selected] {
71
+ font-variation-settings: 'FILL' 1;
72
+ }
73
+
74
+ #shape {
75
+ background-color: transparent;
76
+ }
77
+
78
+ :host(:where([trailing-icon],[dropdown],[trailing-src])) {
79
+ padding-inline-start: max(4px, calc(8px + (var(--mdw-density) * 2px)));
80
+ }
81
+
82
+ #shape[elevated] {
83
+ background-color: rgb(var(--mdw-color__surface));
84
+ }
85
+
86
+ #shape[selected] {
87
+ background-color: rgb(var(--mdw-bg));
88
+ }
89
+
90
+ :host([selected]) {
91
+ color: rgb(var(--mdw-ink));
92
+ }
93
+
94
+ #outline[selected] {
95
+ opacity: 0;
96
+ }
97
+
98
+ #trailing-icon {
99
+ position: relative;
100
+
101
+ font-size: 18px;
102
+ }
103
+
104
+ .mdw-chip__checkbox {
105
+ position: absolute;
106
+
107
+ max-block-size: 0;
108
+ max-inline-size: 0;
109
+
110
+ appearance: none;
111
+ pointer-events: none;
112
+ }
113
+
114
+ #check-icon {
115
+ font-size: 0;
116
+ }
117
+
118
+ #check-icon[selected] {
119
+ font-size: 18px;
120
+ }
121
+
122
+ #check-icon[disabled] {
123
+ color: rgba(var(--mdw-color__on-surface), 0.38);
124
+ }
125
+
126
+ #shape[disabled]:is([elevated],[selected]) {
127
+ background-color: rgba(var(--mdw-color__on-surface), 0.12);
128
+ /* color: rgba(var(--mdw-color__on-surface), 0.38); */
129
+ }
130
+
131
+ `
51
132
  .autoRegister('mdw-filter-chip');
@@ -1,12 +1,10 @@
1
1
  import ThemableMixin from '../mixins/ThemableMixin.js';
2
2
 
3
3
  import Box from './Box.js';
4
- import styles from './Headline.css' assert { type: 'css' };
5
4
 
6
5
  export default Box
7
6
  .mixin(ThemableMixin)
8
7
  .extend()
9
- .css(styles)
10
8
  .observe({
11
9
  ariaLevel: 'string',
12
10
  size: {
@@ -30,4 +28,20 @@ export default Box
30
28
  slot.setAttribute('aria-level', '{computeAriaLevel}');
31
29
  },
32
30
  })
31
+ .css`
32
+ :host {
33
+ font: var(--mdw-typescale__headline-large__font);
34
+ letter-spacing: var(--mdw-typescale__headline-large__letter-spacing);
35
+ }
36
+
37
+ :host([size="medium"]) {
38
+ font: var(--mdw-typescale__headline-medium__font);
39
+ letter-spacing: var(--mdw-typescale__headline-medium__letter-spacing);
40
+ }
41
+
42
+ :host([size="small"]) {
43
+ font: var(--mdw-typescale__headline-small__font);
44
+ letter-spacing: var(--mdw-typescale__headline-small__letter-spacing);
45
+ }
46
+ `
33
47
  .autoRegister('mdw-headline');
@@ -3,8 +3,6 @@
3
3
  import CustomElement from '../core/CustomElement.js';
4
4
  import ThemableMixin from '../mixins/ThemableMixin.js';
5
5
 
6
- import styles from './Icon.css' assert { type: 'css' };
7
-
8
6
  /** @type {Map<string, {path:string, viewBox:string}>} */
9
7
  const svgAliasMap = new Map();
10
8
  const unaliased = new Set();
@@ -84,7 +82,6 @@ export default class Icon extends CustomElement
84
82
  },
85
83
  },
86
84
  })
87
- .css(styles)
88
85
  .expressions({
89
86
  showSVG({ svg, _computedSVGPath }) {
90
87
  return Boolean(svg || _computedSVGPath);
@@ -93,7 +90,7 @@ export default class Icon extends CustomElement
93
90
  })
94
91
  .html/* html */`
95
92
  <link _if={_showSlot} id=link rel=stylesheet href={fontLibrary} />
96
- <svg _if="{showSVG}" id=svg viewBox="{_computedViewBox}">
93
+ <svg _if="{showSVG}" id="svg" viewBox="{_computedViewBox}">
97
94
  <use id="use" _if="{svg}" href="{svg}" fill="currentColor"/>
98
95
  <path id="path" _if="{_computedSVGPath}" d="{_computedSVGPath}"/>
99
96
  </svg>
@@ -106,6 +103,85 @@ export default class Icon extends CustomElement
106
103
  />
107
104
  <slot id=icon class={fontClass} hidden={!_showSlot} aria-hidden=true></slot>
108
105
  `
106
+ .css`
107
+ /* https://material.io/design/iconography/system-icons.html */
108
+
109
+ :host {
110
+ display: inline-block;
111
+ vertical-align: -11.5%;
112
+
113
+ block-size: 1em;
114
+ inline-size: 1em;
115
+
116
+ -webkit-user-select: none;
117
+ user-select: none;
118
+
119
+ font-variation-settings: 'FILL' 1;
120
+
121
+ transition-duration: 200ms;
122
+ /* stylelint-disable-next-line liberty/use-logical-spec -- Safari does not animate inline-size */
123
+ transition-property: inline-size, width;
124
+ }
125
+
126
+ :host(:is([color],[ink])) {
127
+ color: rgb(var(--mdw-ink));
128
+ }
129
+
130
+ #icon {
131
+ /* Clip bounds in case font is not ready */
132
+ display: block;
133
+ overflow: clip;
134
+
135
+ block-size: 1em;
136
+ inline-size: 1em;
137
+
138
+ font-size: inherit;
139
+ font-variation-settings: inherit;
140
+
141
+ transition-delay: 1ms;
142
+ transition-duration: 200ms;
143
+
144
+ transition-property: font-variation-settings;
145
+ }
146
+
147
+ #icon[hidden] {
148
+ display: none;
149
+ }
150
+
151
+ #svg {
152
+ display: block;
153
+
154
+ block-size: inherit;
155
+ inline-size: inherit;
156
+
157
+ fill: currentColor;
158
+
159
+ object-fit: cover;
160
+ }
161
+
162
+ #img {
163
+ display: block;
164
+
165
+ block-size: inherit;
166
+ inline-size: inherit;
167
+
168
+ object-fit: cover;
169
+
170
+ transition-delay: 1ms;
171
+ transition-duration: 200ms;
172
+ transition-property: filter;
173
+ }
174
+
175
+ #img[disabled] {
176
+ filter: grayscale();
177
+ }
178
+
179
+ .material-symbols-outlined {
180
+ /* https://github.com/google/material-design-icons/issues/750 */
181
+ direction: inherit;
182
+ }
183
+
184
+ `
109
185
  .childEvents({
110
186
  icon: {
111
187
  slotchange() {