@material/web 1.0.0-pre.14 → 1.0.0-pre.15

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 (258) hide show
  1. package/README.md +5 -5
  2. package/all.d.ts +4 -8
  3. package/all.js +4 -8
  4. package/all.js.map +1 -1
  5. package/button/{_tonal-button.scss → _filled-tonal-button.scss} +1 -1
  6. package/button/{tonal-button.d.ts → filled-tonal-button.d.ts} +3 -3
  7. package/button/{tonal-button.js → filled-tonal-button.js} +9 -9
  8. package/button/filled-tonal-button.js.map +1 -0
  9. package/button/internal/{_tonal-button.scss → _filled-tonal-button.scss} +7 -7
  10. package/button/internal/_shared.scss +12 -7
  11. package/button/internal/_touch-target.scss +5 -1
  12. package/button/internal/button.d.ts +6 -10
  13. package/button/internal/button.js +10 -43
  14. package/button/internal/button.js.map +1 -1
  15. package/button/internal/elevated-styles.css.js +1 -1
  16. package/button/internal/elevated-styles.css.js.map +1 -1
  17. package/button/internal/filled-styles.css.js +1 -1
  18. package/button/internal/filled-styles.css.js.map +1 -1
  19. package/button/internal/{tonal-button.d.ts → filled-tonal-button.d.ts} +2 -2
  20. package/button/internal/{tonal-button.js → filled-tonal-button.js} +3 -3
  21. package/button/internal/filled-tonal-button.js.map +1 -0
  22. package/button/internal/filled-tonal-styles.css.js +9 -0
  23. package/button/internal/filled-tonal-styles.css.js.map +1 -0
  24. package/button/internal/{tonal-styles.scss → filled-tonal-styles.scss} +2 -2
  25. package/button/internal/outlined-styles.css.js +1 -1
  26. package/button/internal/outlined-styles.css.js.map +1 -1
  27. package/button/internal/shared-styles.css.js +1 -1
  28. package/button/internal/shared-styles.css.js.map +1 -1
  29. package/button/internal/text-styles.css.js +1 -1
  30. package/button/internal/text-styles.css.js.map +1 -1
  31. package/checkbox/internal/_checkbox.scss +22 -78
  32. package/checkbox/internal/checkbox-styles.css.js +1 -1
  33. package/checkbox/internal/checkbox-styles.css.js.map +1 -1
  34. package/checkbox/internal/checkbox.d.ts +77 -6
  35. package/checkbox/internal/checkbox.js +123 -14
  36. package/checkbox/internal/checkbox.js.map +1 -1
  37. package/chips/internal/_shared.scss +8 -0
  38. package/chips/internal/chip-set.js +1 -3
  39. package/chips/internal/chip-set.js.map +1 -1
  40. package/chips/internal/chip.js +1 -3
  41. package/chips/internal/chip.js.map +1 -1
  42. package/chips/internal/filter-chip.d.ts +1 -0
  43. package/chips/internal/filter-chip.js +12 -6
  44. package/chips/internal/filter-chip.js.map +1 -1
  45. package/chips/internal/shared-styles.css.js +1 -1
  46. package/chips/internal/shared-styles.css.js.map +1 -1
  47. package/common.d.ts +2 -6
  48. package/common.js +2 -6
  49. package/common.js.map +1 -1
  50. package/dialog/harness.d.ts +1 -6
  51. package/dialog/harness.js +2 -43
  52. package/dialog/harness.js.map +1 -1
  53. package/dialog/internal/_dialog.scss +165 -281
  54. package/dialog/internal/animations.d.ts +47 -0
  55. package/dialog/internal/animations.js +117 -0
  56. package/dialog/internal/animations.js.map +1 -0
  57. package/dialog/internal/dialog-styles.css.js +1 -1
  58. package/dialog/internal/dialog-styles.css.js.map +1 -1
  59. package/dialog/internal/dialog.d.ts +76 -169
  60. package/dialog/internal/dialog.js +251 -475
  61. package/dialog/internal/dialog.js.map +1 -1
  62. package/fab/internal/_fab.scss +4 -0
  63. package/fab/internal/_shared.scss +12 -0
  64. package/fab/internal/fab-styles.css.js +1 -1
  65. package/fab/internal/fab-styles.css.js.map +1 -1
  66. package/fab/internal/shared-styles.css.js +1 -1
  67. package/fab/internal/shared-styles.css.js.map +1 -1
  68. package/fab/internal/shared.d.ts +0 -4
  69. package/fab/internal/shared.js +3 -13
  70. package/fab/internal/shared.js.map +1 -1
  71. package/focus/internal/_focus-ring.scss +52 -48
  72. package/focus/internal/focus-ring-styles.css.js +1 -1
  73. package/focus/internal/focus-ring-styles.css.js.map +1 -1
  74. package/focus/internal/focus-ring.d.ts +2 -1
  75. package/focus/internal/focus-ring.js +10 -0
  76. package/focus/internal/focus-ring.js.map +1 -1
  77. package/icon/internal/_icon.scss +18 -17
  78. package/icon/internal/icon-styles.css.js +1 -1
  79. package/icon/internal/icon-styles.css.js.map +1 -1
  80. package/icon/internal/icon.d.ts +1 -0
  81. package/icon/internal/icon.js +9 -0
  82. package/icon/internal/icon.js.map +1 -1
  83. package/iconbutton/{_standard-icon-button.scss → _icon-button.scss} +1 -1
  84. package/iconbutton/{standard-icon-button.d.ts → icon-button.d.ts} +2 -2
  85. package/iconbutton/{standard-icon-button.js → icon-button.js} +7 -7
  86. package/iconbutton/icon-button.js.map +1 -0
  87. package/iconbutton/internal/_filled-icon-button.scss +8 -6
  88. package/iconbutton/internal/_filled-tonal-icon-button.scss +8 -6
  89. package/iconbutton/internal/{_standard-icon-button.scss → _icon-button.scss} +8 -8
  90. package/iconbutton/internal/_outlined-icon-button.scss +14 -14
  91. package/iconbutton/internal/_shared.scss +6 -9
  92. package/iconbutton/internal/filled-styles.css.js +1 -1
  93. package/iconbutton/internal/filled-styles.css.js.map +1 -1
  94. package/iconbutton/internal/filled-tonal-styles.css.js +1 -1
  95. package/iconbutton/internal/filled-tonal-styles.css.js.map +1 -1
  96. package/iconbutton/internal/icon-button.d.ts +10 -1
  97. package/iconbutton/internal/icon-button.js +17 -2
  98. package/iconbutton/internal/icon-button.js.map +1 -1
  99. package/iconbutton/internal/outlined-styles.css.js +1 -1
  100. package/iconbutton/internal/outlined-styles.css.js.map +1 -1
  101. package/iconbutton/internal/shared-styles.css.js +1 -1
  102. package/iconbutton/internal/shared-styles.css.js.map +1 -1
  103. package/iconbutton/internal/standard-styles.css.js +1 -1
  104. package/iconbutton/internal/standard-styles.css.js.map +1 -1
  105. package/iconbutton/internal/standard-styles.scss +2 -2
  106. package/internal/aria/delegate.d.ts +1 -1
  107. package/internal/aria/delegate.js +1 -1
  108. package/internal/aria/delegate.js.map +1 -1
  109. package/internal/controller/element-internals.d.ts +35 -0
  110. package/internal/controller/element-internals.js +24 -0
  111. package/internal/controller/element-internals.js.map +1 -0
  112. package/internal/controller/form-submitter.d.ts +60 -0
  113. package/internal/controller/form-submitter.js +69 -0
  114. package/internal/controller/form-submitter.js.map +1 -0
  115. package/labs/navigationbar/internal/navigation-bar.js +1 -3
  116. package/labs/navigationbar/internal/navigation-bar.js.map +1 -1
  117. package/labs/navigationdrawer/internal/navigation-drawer-modal.js +1 -3
  118. package/labs/navigationdrawer/internal/navigation-drawer-modal.js.map +1 -1
  119. package/labs/navigationdrawer/internal/navigation-drawer.js +1 -3
  120. package/labs/navigationdrawer/internal/navigation-drawer.js.map +1 -1
  121. package/labs/navigationtab/internal/navigation-tab.js +1 -3
  122. package/labs/navigationtab/internal/navigation-tab.js.map +1 -1
  123. package/labs/segmentedbutton/internal/outlined-styles.css.js +1 -1
  124. package/labs/segmentedbutton/internal/outlined-styles.css.js.map +1 -1
  125. package/labs/segmentedbutton/internal/segmented-button.js +1 -3
  126. package/labs/segmentedbutton/internal/segmented-button.js.map +1 -1
  127. package/labs/segmentedbuttonset/internal/outlined-styles.css.js +1 -1
  128. package/labs/segmentedbuttonset/internal/outlined-styles.css.js.map +1 -1
  129. package/labs/segmentedbuttonset/internal/segmented-button-set.js +1 -3
  130. package/labs/segmentedbuttonset/internal/segmented-button-set.js.map +1 -1
  131. package/list/internal/list.d.ts +2 -2
  132. package/list/internal/list.js +1 -3
  133. package/list/internal/list.js.map +1 -1
  134. package/list/internal/listitem/_list-item.scss +20 -54
  135. package/list/internal/listitem/list-item-styles.css.js +1 -1
  136. package/list/internal/listitem/list-item-styles.css.js.map +1 -1
  137. package/list/internal/listitem/list-item.d.ts +15 -3
  138. package/list/internal/listitem/list-item.js +43 -10
  139. package/list/internal/listitem/list-item.js.map +1 -1
  140. package/menu/internal/menu.js +3 -4
  141. package/menu/internal/menu.js.map +1 -1
  142. package/menu/internal/menuitem/_menu-item.scss +1 -1
  143. package/menu/internal/menuitem/forced-colors-styles.css.js +1 -1
  144. package/menu/internal/menuitem/forced-colors-styles.css.js.map +1 -1
  145. package/menu/internal/menuitem/forced-colors-styles.scss +1 -1
  146. package/menu/internal/menuitem/menu-item-styles.css.js +1 -1
  147. package/menu/internal/menuitem/menu-item-styles.css.js.map +1 -1
  148. package/menu/internal/menuitem/menu-item.d.ts +9 -0
  149. package/menu/internal/menuitem/menu-item.js +18 -4
  150. package/menu/internal/menuitem/menu-item.js.map +1 -1
  151. package/menu/internal/shared.d.ts +45 -38
  152. package/menu/internal/shared.js +29 -40
  153. package/menu/internal/shared.js.map +1 -1
  154. package/menu/internal/submenuitem/sub-menu-item.d.ts +22 -12
  155. package/menu/internal/submenuitem/sub-menu-item.js +39 -24
  156. package/menu/internal/submenuitem/sub-menu-item.js.map +1 -1
  157. package/menu/menu-item.d.ts +1 -1
  158. package/menu/menu-item.js +0 -1
  159. package/menu/menu-item.js.map +1 -1
  160. package/menu/menu.d.ts +1 -1
  161. package/menu/menu.js +0 -1
  162. package/menu/menu.js.map +1 -1
  163. package/menu/sub-menu-item.d.ts +1 -1
  164. package/menu/sub-menu-item.js +0 -1
  165. package/menu/sub-menu-item.js.map +1 -1
  166. package/package.json +1 -3
  167. package/progress/internal/progress.js +1 -3
  168. package/progress/internal/progress.js.map +1 -1
  169. package/radio/internal/_radio.scss +38 -24
  170. package/radio/internal/forced-colors-styles.css.js +1 -1
  171. package/radio/internal/forced-colors-styles.css.js.map +1 -1
  172. package/radio/internal/forced-colors-styles.scss +4 -4
  173. package/radio/internal/radio-styles.css.js +1 -1
  174. package/radio/internal/radio-styles.css.js.map +1 -1
  175. package/radio/internal/radio.js +7 -6
  176. package/radio/internal/radio.js.map +1 -1
  177. package/select/internal/_filled-select.scss +2 -2
  178. package/select/internal/_outlined-select.scss +2 -2
  179. package/select/internal/_shared.scss +30 -0
  180. package/select/internal/filled-select-styles.css.js +1 -1
  181. package/select/internal/filled-select-styles.css.js.map +1 -1
  182. package/select/internal/outlined-select-styles.css.js +1 -1
  183. package/select/internal/outlined-select-styles.css.js.map +1 -1
  184. package/select/internal/select.d.ts +0 -5
  185. package/select/internal/select.js +11 -16
  186. package/select/internal/select.js.map +1 -1
  187. package/select/internal/selectoption/select-option.d.ts +5 -6
  188. package/select/internal/selectoption/select-option.js +8 -9
  189. package/select/internal/selectoption/select-option.js.map +1 -1
  190. package/select/internal/shared-styles.css.js +1 -1
  191. package/select/internal/shared-styles.css.js.map +1 -1
  192. package/select/internal/shared.d.ts +5 -9
  193. package/select/internal/shared.js +13 -11
  194. package/select/internal/shared.js.map +1 -1
  195. package/slider/internal/slider.js +1 -3
  196. package/slider/internal/slider.js.map +1 -1
  197. package/switch/internal/_handle.scss +12 -12
  198. package/switch/internal/_icon.scss +8 -8
  199. package/switch/internal/_track.scss +10 -10
  200. package/switch/internal/forced-colors-styles.css.js +1 -1
  201. package/switch/internal/forced-colors-styles.css.js.map +1 -1
  202. package/switch/internal/forced-colors-styles.scss +12 -12
  203. package/switch/internal/switch-styles.css.js +1 -1
  204. package/switch/internal/switch-styles.css.js.map +1 -1
  205. package/switch/internal/switch.js +1 -3
  206. package/switch/internal/switch.js.map +1 -1
  207. package/tabs/internal/_tab.scss +1 -1
  208. package/tabs/internal/_tabs.scss +1 -0
  209. package/tabs/internal/tab.d.ts +3 -9
  210. package/tabs/internal/tab.js +4 -7
  211. package/tabs/internal/tab.js.map +1 -1
  212. package/tabs/internal/tabs.d.ts +1 -4
  213. package/tabs/internal/tabs.js +5 -10
  214. package/tabs/internal/tabs.js.map +1 -1
  215. package/textfield/harness.js +4 -0
  216. package/textfield/harness.js.map +1 -1
  217. package/textfield/internal/text-field.js +1 -4
  218. package/textfield/internal/text-field.js.map +1 -1
  219. package/tokens/_index.scss +1 -0
  220. package/tokens/_md-comp-checkbox.scss +16 -16
  221. package/tokens/_md-comp-dialog.scss +2 -1
  222. package/tokens/_md-comp-elevated-button.scss +14 -12
  223. package/tokens/_md-comp-filled-button.scss +14 -12
  224. package/tokens/_md-comp-filled-icon-button.scss +23 -8
  225. package/tokens/_md-comp-filled-select.scss +19 -1
  226. package/tokens/_md-comp-filled-tonal-button.scss +14 -12
  227. package/tokens/_md-comp-filled-tonal-icon-button.scss +23 -8
  228. package/tokens/_md-comp-icon-button.scss +24 -11
  229. package/tokens/_md-comp-icon.scss +32 -0
  230. package/tokens/_md-comp-outlined-button.scss +14 -12
  231. package/tokens/_md-comp-outlined-icon-button.scss +26 -12
  232. package/tokens/_md-comp-outlined-segmented-button.scss +2 -2
  233. package/tokens/_md-comp-radio-button.scss +20 -9
  234. package/tokens/_md-comp-switch.scss +66 -32
  235. package/tokens/_md-comp-text-button.scss +14 -12
  236. package/button/internal/tonal-button.js.map +0 -1
  237. package/button/internal/tonal-styles.css.js +0 -9
  238. package/button/internal/tonal-styles.css.js.map +0 -1
  239. package/button/tonal-button.js.map +0 -1
  240. package/dialog/internal/_tokens.scss +0 -66
  241. package/icon/internal/_md-comp-icon.scss +0 -18
  242. package/iconbutton/standard-icon-button.js.map +0 -1
  243. package/list/internal/listitemlink/list-item-link-only.d.ts +0 -23
  244. package/list/internal/listitemlink/list-item-link-only.js +0 -36
  245. package/list/internal/listitemlink/list-item-link-only.js.map +0 -1
  246. package/list/internal/listitemlink/list-item-link.d.ts +0 -18
  247. package/list/internal/listitemlink/list-item-link.js +0 -42
  248. package/list/internal/listitemlink/list-item-link.js.map +0 -1
  249. package/list/list-item-link.d.ts +0 -53
  250. package/list/list-item-link.js +0 -57
  251. package/list/list-item-link.js.map +0 -1
  252. package/menu/internal/menuitemlink/menu-item-link.d.ts +0 -23
  253. package/menu/internal/menuitemlink/menu-item-link.js +0 -49
  254. package/menu/internal/menuitemlink/menu-item-link.js.map +0 -1
  255. package/menu/menu-item-link.d.ts +0 -33
  256. package/menu/menu-item-link.js +0 -38
  257. package/menu/menu-item-link.js.map +0 -1
  258. /package/button/internal/{tonal-styles.css.d.ts → filled-tonal-styles.css.d.ts} +0 -0
@@ -3,374 +3,258 @@
3
3
  // SPDX-License-Identifier: Apache-2.0
4
4
  //
5
5
 
6
- // PUBLIC PROPERTIES
7
-
8
6
  // go/keep-sorted start
7
+ @use 'sass:list';
9
8
  @use 'sass:map';
10
9
  // go/keep-sorted end
11
10
  // go/keep-sorted start
12
- @use '../../elevation/elevation';
13
- @use '../../internal/sass/theme';
14
- @use './tokens';
11
+ @use '../../tokens';
15
12
  // go/keep-sorted end
16
13
 
14
+ @mixin theme($tokens) {
15
+ $supported-tokens: list.join(
16
+ tokens.$md-comp-dialog-supported-tokens,
17
+ (
18
+ 'container-shape-start-start',
19
+ 'container-shape-start-end',
20
+ 'container-shape-end-end',
21
+ 'container-shape-end-start'
22
+ )
23
+ );
24
+
25
+ @each $token, $value in $tokens {
26
+ @if list.index($supported-tokens, $token) == null {
27
+ @error 'Token `#{$token}` is not a supported token.';
28
+ }
29
+
30
+ @if $value {
31
+ --md-dialog-#{$token}: #{$value};
32
+ }
33
+ }
34
+ }
35
+
17
36
  @mixin styles() {
18
37
  $tokens: tokens.md-comp-dialog-values();
19
- $tokens: theme.create-theme-vars($tokens, 'dialog');
38
+ $md-sys-color: tokens.md-sys-color-values-light();
39
+ $md-sys-motion: tokens.md-sys-motion-values();
20
40
 
21
41
  :host {
22
42
  @each $token, $value in $tokens {
23
- --_#{$token}: #{$value};
43
+ --_#{$token}: var(--md-dialog-#{$token}, #{$value});
24
44
  }
25
45
 
26
- // Private properties for drag data.
27
- --_container-drag-inline-start: initial;
28
- --_container-drag-block-start: initial;
29
- }
46
+ // Support logical shape properties
47
+ --_container-shape-start-start: var(
48
+ --md-dialog-container-shape-start-start,
49
+ var(--_container-shape)
50
+ );
51
+ --_container-shape-start-end: var(
52
+ --md-dialog-container-shape-start-end,
53
+ var(--_container-shape)
54
+ );
55
+ --_container-shape-end-end: var(
56
+ --md-dialog-container-shape-end-end,
57
+ var(--_container-shape)
58
+ );
59
+ --_container-shape-end-start: var(
60
+ --md-dialog-container-shape-end-start,
61
+ var(--_container-shape)
62
+ );
30
63
 
31
- @media (prefers-reduced-motion: reduce) {
32
- :host {
33
- --_opening-transition-duration: 0;
34
- --_closing-transition-duration: 0;
35
- }
64
+ border-start-start-radius: var(--_container-shape-start-start);
65
+ border-start-end-radius: var(--_container-shape-start-end);
66
+ border-end-end-radius: var(--_container-shape-end-end);
67
+ border-end-start-radius: var(--_container-shape-end-start);
68
+ display: contents;
69
+ margin: auto;
70
+ max-height: min(560px, calc(100% - 48px));
71
+ max-width: min(560px, calc(100% - 48px));
72
+ min-height: 140px;
73
+ min-width: 280px;
74
+ position: fixed;
75
+ height: fit-content;
76
+ width: fit-content;
36
77
  }
37
78
 
38
- .dialog {
39
- position: fixed;
40
- align-items: center;
41
- justify-content: center;
42
- box-sizing: border-box;
43
- inset: 0;
44
- block-size: 100dvh;
45
- inline-size: 100dvw;
46
- max-block-size: 100dvh;
47
- max-inline-size: 100dvw;
48
- border: none;
79
+ dialog {
49
80
  background: transparent;
81
+ border: none;
82
+ border-radius: inherit;
83
+ flex-direction: column;
84
+ height: inherit;
85
+ margin: inherit;
86
+ max-height: inherit;
87
+ max-width: inherit;
88
+ min-height: inherit;
89
+ min-width: inherit;
90
+ outline: none;
91
+ overflow: visible;
50
92
  padding: 0;
51
- margin: 0;
52
- overflow: clip;
53
- }
54
-
55
- // stylelint-disable-next-line selector-pseudo-class-no-unknown --
56
- // New platform pseudo-class
57
- .dialog:not(:modal) {
58
- z-index: 10000;
59
- pointer-events: none;
93
+ width: inherit;
60
94
  }
61
95
 
62
- .dialog[open] {
96
+ dialog[open] {
63
97
  display: flex;
64
98
  }
65
99
 
66
- .dialog::backdrop {
67
- // Per spec, custom properties don't inherit to backdrop so we avoid using it.
100
+ ::backdrop {
101
+ // Can't use ::backdrop since Firefox does not allow animations on it.
68
102
  background: none;
69
103
  }
70
104
 
71
- // Note, using ::before as scrim because ::backdrop cannot inherit custom properties.
72
- .dialog::before {
73
- content: '';
74
- position: absolute;
75
- z-index: -1;
105
+ .scrim {
106
+ background: map.get($md-sys-color, 'scrim');
107
+ display: none;
76
108
  inset: 0;
77
- block-size: 100dvh;
78
- inline-size: 100dvw;
109
+ opacity: 32%;
79
110
  pointer-events: none;
111
+ position: fixed;
112
+ z-index: 1;
80
113
  }
81
114
 
82
- // Hide scrim when modeless.
83
- :host([modeless]) .dialog:before {
84
- display: none;
85
- }
86
-
87
- .container {
88
- position: absolute;
89
-
90
- inset-inline-start: var(
91
- --_container-drag-inline-start,
92
- var(--_container-inset-inline-start)
93
- );
94
- inset-inline-end: var(--_container-inset-inline-end);
95
- inset-block-start: var(
96
- --_container-drag-block-start,
97
- var(--_container-inset-block-start)
98
- );
99
- inset-block-end: var(--_container-inset-block-end);
100
-
101
- background-color: var(--_container-color);
102
- border-radius: var(--_container-shape);
115
+ :host([open]) .scrim {
103
116
  display: flex;
104
- flex-direction: column;
105
- box-sizing: border-box;
106
- pointer-events: auto;
107
- min-block-size: var(--_container-min-block-size);
108
- max-block-size: var(--_container-max-block-size);
109
- min-inline-size: var(--_container-min-inline-size);
110
- max-inline-size: var(--_container-max-inline-size);
111
- padding-block-start: var(--_container-block-padding);
112
- padding-block-end: var(--_container-block-padding);
113
- }
114
-
115
- md-elevation {
116
- @include elevation.theme(
117
- (
118
- 'level': var(--_container-elevation),
119
- )
120
- );
121
117
  }
122
118
 
123
- .container > * {
124
- box-sizing: border-box;
125
- // Apply pad left/right here so scrollbar is not indented.
126
- padding-inline-start: var(--_container-inline-padding);
127
- padding-inline-end: var(--_container-inline-padding);
119
+ h2 {
120
+ all: unset;
121
+ align-self: stretch;
128
122
  }
129
123
 
130
- .header {
131
- display: flex;
132
- flex-direction: column;
124
+ .headline {
133
125
  align-items: center;
134
- gap: var(--_header-spacing);
135
- -webkit-font-smoothing: antialiased;
136
126
  color: var(--_headline-color);
137
- font: var(--_headline-type);
138
- }
139
-
140
- .content {
141
- flex: 1;
142
- overflow: auto;
143
- margin-block-start: var(--_content-block-start-spacing);
144
- margin-block-end: var(--_content-block-end-spacing);
145
- -webkit-font-smoothing: antialiased;
146
- color: var(--_supporting-text-color);
147
- font: var(--_supporting-text-type);
148
- }
149
-
150
- .footer {
151
127
  display: flex;
128
+ flex-direction: column;
129
+ font: var(--_headline-type);
152
130
  position: relative;
153
- flex-wrap: wrap;
154
- align-items: center;
155
- justify-content: flex-end;
156
- box-sizing: border-box;
157
- gap: var(--_action-spacing);
158
131
  }
159
132
 
160
- .footerHidden {
161
- --_content-block-end-spacing: 0px;
162
- }
163
-
164
- .footerHidden .footer {
165
- display: none;
133
+ slot[name='headline']::slotted(*) {
134
+ align-items: center;
135
+ align-self: stretch;
136
+ display: flex;
137
+ gap: 8px;
138
+ margin: 24px 24px 0;
166
139
  }
167
140
 
168
- .stacked .footer {
169
- flex-direction: column;
170
- align-items: flex-end;
141
+ .icon {
142
+ display: flex;
171
143
  }
172
144
 
173
- .scrollable .content {
174
- border-block-start: var(--_with-divider-divider-height) solid transparent;
175
- border-block-end: var(--_with-divider-divider-height) solid transparent;
145
+ slot[name='icon']::slotted(*) {
146
+ color: var(--_icon-color);
147
+ fill: currentColor;
148
+ font-size: var(--_icon-size);
149
+ margin-top: 24px;
150
+ height: var(--_icon-size);
151
+ width: var(--_icon-size);
176
152
  }
177
153
 
178
- .scroll-divider-header .content {
179
- border-block-start-color: var(--_with-divider-divider-color);
154
+ .has-icon slot[name='headline']::slotted(*) {
155
+ justify-content: center;
156
+ margin-top: 16px;
180
157
  }
181
158
 
182
- .scroll-divider-footer:not(.footerHidden) .content {
183
- border-block-end-color: var(--_with-divider-divider-color);
159
+ .scrollable slot[name='headline']::slotted(*) {
160
+ margin-bottom: 16px;
184
161
  }
185
162
 
186
- .dragging {
187
- user-select: none;
188
- cursor: move;
189
- touch-action: none;
163
+ .scrollable.has-headline slot[name='content']::slotted(*) {
164
+ margin-top: 8px;
190
165
  }
191
166
 
192
- // Transitions for open/closed states
193
167
  .container {
194
- will-change: transform, opacity;
195
- transition-property: transform;
168
+ border-radius: inherit;
169
+ display: flex;
170
+ flex: 1;
171
+ flex-direction: column;
196
172
  overflow: hidden;
173
+ position: relative;
174
+ transform-origin: top;
197
175
  }
198
176
 
199
- .container > * {
200
- transition-timing-function: inherit;
201
- transition-duration: inherit;
202
- transition-property: opacity, transform;
203
- will-change: transform, opacity;
204
- opacity: 0;
205
- }
206
-
207
- :host([transition][showing-open]) .container > * {
208
- opacity: 1;
209
- transform: none;
210
- }
211
-
212
- :host([transition][showing-open]) .container {
213
- opacity: 1;
214
- transform: none;
215
- }
216
-
217
- .dialog::before {
218
- transition: background-color linear;
219
- background-color: transparent;
220
- }
221
-
222
- :host([showing-open]) .dialog::before {
223
- background-color: var(--_scrim-color);
224
- }
225
-
226
- :host([opening]) .dialog::before {
227
- transition-duration: calc(var(--_opening-transition-duration) / 2);
228
- }
229
-
230
- :host([closing]) .dialog::before {
231
- transition-duration: calc(var(--_closing-transition-duration) / 2);
232
- }
233
-
234
- :host([opening]) .container {
235
- transition-duration: var(--_opening-transition-duration);
236
- transition-timing-function: var(--_opening-transition-easing);
237
- }
238
-
239
- :host([closing]) .container {
240
- transition-duration: var(--_closing-transition-duration);
241
- transition-timing-function: var(--_closing-transition-easing);
242
- }
243
-
244
- :host([trasition][closing]) .container > * {
245
- transform: none;
246
- opacity: 0;
247
- }
248
-
249
- :host([transition='grow-down']) {
250
- --_opening-transform: scale(1, 0.1) translateY(-20%);
251
- --_closing-transform: scale(1, 0.9) translateY(-10%);
252
- --_origin: top;
253
- --_opening-content-transform: scale(1, 2);
254
- --_origin-footer: bottom;
255
- }
256
-
257
- :host([transition='grow-up']) {
258
- --_opening-transform: scale(1, 0.1) translateY(20%);
259
- --_closing-transform: scale(1, 0.9) translateY(10%);
260
- --_origin: bottom;
261
- --_opening-content-transform: scale(1, 2);
262
- --_origin-footer: bottom;
263
- }
264
-
265
- :host([transition='grow-left']) {
266
- --_opening-transform: scale(0.1, 1) translateX(20%);
267
- --_closing-transform: scale(0.9, 1) translateX(10%);
268
- --_origin: right;
269
- --_opening-content-transform: none;
270
- --_origin-footer: none;
177
+ .container::before {
178
+ background: var(--_container-color);
179
+ content: '';
180
+ inset: 0;
181
+ position: absolute;
271
182
  }
272
183
 
273
- :host([transition='grow-right']) {
274
- --_opening-transform: scale(0.1, 1) translateX(-20%);
275
- --_closing-transform: scale(0.9, 1) translateX(-10%);
276
- --_origin: left;
277
- --_opening-content-transform: none;
278
- --_origin-footer: none;
184
+ .scroller {
185
+ flex: 1;
186
+ overflow: hidden;
187
+ z-index: 0; // needed to display scrollbars on Chrome linux
279
188
  }
280
189
 
281
- :host([transition^='grow-']) .container {
282
- transform-origin: var(--_origin);
283
- transform: var(--_opening-transform);
190
+ .scrollable .scroller {
191
+ // Only add scrollbars if the content is overflowing. This prevents extra
192
+ // space from appearing on platforms that reserve scrollbar space.
193
+ // Note: we only scroll vertically. Horizontal scrolling should be handled
194
+ // by the content.
195
+ overflow-y: scroll;
284
196
  }
285
197
 
286
- :host([transition^='grow-']) .container > * {
287
- transform-origin: var(--_origin);
288
- transform: var(--_opening-content-transform);
198
+ .content {
199
+ color: var(--_supporting-text-color);
200
+ font: var(--_supporting-text-type);
201
+ position: relative;
289
202
  }
290
203
 
291
- :host([transition^='grow-']) .footer {
292
- transform-origin: var(--_origin-footer);
204
+ slot[name='content']::slotted(*) {
205
+ margin: 24px;
293
206
  }
294
207
 
295
- :host([transition^='grow-'][closing]) {
296
- transform: var(--_closing-transform);
208
+ // Anchors are used with an IntersectionObserver to determine when the content
209
+ // has scrolled.
210
+ .anchor {
211
+ position: absolute;
297
212
  }
298
213
 
299
- :host([transition='shrink']) .container {
300
- transform: scale(1.2);
214
+ .top.anchor {
215
+ top: 0;
301
216
  }
302
217
 
303
- :host([transition='grow']) .container {
304
- transform: scale(0.8);
218
+ .bottom.anchor {
219
+ bottom: 0;
305
220
  }
306
221
 
307
- :host([transition='shrink'][closing]) .container,
308
- :host([transition='grow'][closing]) .container {
309
- transition-duration: 0;
310
- transform: none;
222
+ .actions {
223
+ position: relative;
311
224
  }
312
225
 
313
- // fullscreen
314
- :host([showing-fullscreen]) {
315
- --_container-max-block-size: none;
316
- --_container-max-inline-size: none;
226
+ slot[name='actions']::slotted(*) {
227
+ display: flex;
228
+ gap: 8px;
229
+ justify-content: flex-end;
230
+ margin: 16px 24px 24px;
317
231
  }
318
232
 
319
- :host([showing-fullscreen]) .container {
320
- block-size: 100dvh;
321
- inline-size: 100dvw;
322
- border-radius: 0px;
323
- padding-block-start: 0;
324
- padding-block-end: 0;
233
+ .has-actions slot[name='content']::slotted(*) {
234
+ margin-bottom: 8px;
325
235
  }
326
236
 
327
- :host([showing-fullscreen]) .header {
328
- justify-content: space-between;
329
- flex-direction: row;
330
- max-block-size: var(--_fullscreen-header-block-size);
331
- padding-block-start: var(--_fullscreen-container-block-padding);
332
- // TODO: should there be explicit tokens for these?
333
- padding-inline: 4px;
334
- --_header-spacing: 4px;
237
+ md-divider {
238
+ display: none;
239
+ position: absolute;
335
240
  }
336
241
 
337
- :host([showing-fullscreen]) .content {
338
- margin-block-start: 0;
339
- margin-block-end: 0;
242
+ .has-headline.show-top-divider .headline md-divider,
243
+ .has-actions.show-bottom-divider .actions md-divider {
244
+ display: flex;
340
245
  }
341
246
 
342
- :host([showing-fullscreen]) .footer {
343
- max-block-size: var(--_fullscreen-footer-block-size);
344
- padding-block-end: var(--_fullscreen-container-block-padding);
247
+ .headline md-divider {
248
+ bottom: 0;
345
249
  }
346
250
 
347
- // Hide bottom divider on fullscreen since it's common not to have footer actions.
348
- :host([showing-fullscreen]) .scroll-divider-footer .content {
349
- border-block-end-color: transparent;
251
+ .actions md-divider {
252
+ top: 0;
350
253
  }
351
254
 
352
- // High contrast mode
353
- @media screen and (forced-colors: active), (-ms-high-contrast: active) {
354
- .container {
355
- outline: windowtext solid 2px;
255
+ @media (forced-colors: active) {
256
+ dialog {
257
+ outline: 2px solid WindowText;
356
258
  }
357
259
  }
358
-
359
- // Slot styling
360
- [name='headline-prefix']::slotted(*),
361
- [name='headline-suffix']::slotted(*) {
362
- color: var(--_icon-color);
363
- font-size: var(--_icon-size);
364
- }
365
-
366
- [name='header']::slotted(*) {
367
- flex: 1;
368
- align-self: stretch;
369
- display: flex;
370
- align-items: center;
371
- }
372
-
373
- :host([showing-fullscreen]) [name='headline']::slotted(*) {
374
- flex: 1;
375
- }
376
260
  }
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * A dialog animation's arguments. See `Element.prototype.animate`.
8
+ */
9
+ export type DialogAnimationArgs = Parameters<Element['animate']>;
10
+ /**
11
+ * A collection of dialog animations. Each element of a dialog may have multiple
12
+ * animations.
13
+ */
14
+ export interface DialogAnimation {
15
+ /**
16
+ * Animations for the dialog itself.
17
+ */
18
+ dialog?: DialogAnimationArgs[];
19
+ /**
20
+ * Animations for the scrim backdrop.
21
+ */
22
+ scrim?: DialogAnimationArgs[];
23
+ /**
24
+ * Animations for the container of the dialog.
25
+ */
26
+ container?: DialogAnimationArgs[];
27
+ /**
28
+ * Animations for the headline section.
29
+ */
30
+ headline?: DialogAnimationArgs[];
31
+ /**
32
+ * Animations for the contents section.
33
+ */
34
+ content?: DialogAnimationArgs[];
35
+ /**
36
+ * Animations for the actions section.
37
+ */
38
+ actions?: DialogAnimationArgs[];
39
+ }
40
+ /**
41
+ * The default dialog open animation.
42
+ */
43
+ export declare const DIALOG_DEFAULT_OPEN_ANIMATION: DialogAnimation;
44
+ /**
45
+ * The default dialog close animation.
46
+ */
47
+ export declare const DIALOG_DEFAULT_CLOSE_ANIMATION: DialogAnimation;