@shortfuse/materialdesignweb 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/.browserslistrc +2 -1
  2. package/.eslintrc.json +59 -8
  3. package/.stylelintrc.json +94 -49
  4. package/CHANGELOG.md +12 -0
  5. package/README.md +1 -3
  6. package/adapters/datatable/column.js +27 -54
  7. package/adapters/datatable/index.js +69 -81
  8. package/adapters/dom/index.js +32 -47
  9. package/adapters/search/index.js +107 -133
  10. package/components/appbar/_spec.scss +77 -137
  11. package/components/banner/_spec.scss +28 -63
  12. package/components/bottomnav/_spec.scss +46 -54
  13. package/components/bottomnav/index.js +15 -20
  14. package/components/bottomnav/item.js +4 -5
  15. package/components/button/README.md +1 -1
  16. package/components/button/_spec.scss +43 -42
  17. package/components/button/_theme.scss +27 -50
  18. package/components/card/_spec.scss +61 -69
  19. package/components/chip/_spec.scss +21 -44
  20. package/components/chip/_theme.scss +79 -151
  21. package/components/chip/index.js +6 -4
  22. package/components/datatable/_spec.scss +36 -99
  23. package/components/datatable/_theme.scss +98 -124
  24. package/components/datatable/cell.js +1 -2
  25. package/components/datatable/columnheader.js +1 -2
  26. package/components/datatable/index.js +33 -47
  27. package/components/datatable/row.js +4 -5
  28. package/components/dialog/_spec.scss +53 -63
  29. package/components/dialog/_theme.scss +7 -0
  30. package/components/dialog/index.js +62 -88
  31. package/components/divider/_spec.scss +6 -8
  32. package/components/elevation/_spec.scss +1 -1
  33. package/components/fab/_spec.scss +30 -42
  34. package/components/fab/index.js +4 -8
  35. package/components/grid/_spec.scss +68 -211
  36. package/components/layout/_mixins.scss +0 -22
  37. package/components/layout/_spec.scss +267 -363
  38. package/components/layout/_theme.scss +10 -35
  39. package/components/layout/index.js +40 -50
  40. package/components/list/_spec.scss +57 -91
  41. package/components/list/_theme.scss +75 -84
  42. package/components/list/content.js +9 -13
  43. package/components/list/index.js +34 -38
  44. package/components/list/item.js +8 -11
  45. package/components/list/secondary.js +8 -9
  46. package/components/menu/_spec.scss +134 -167
  47. package/components/menu/index.js +45 -61
  48. package/components/menu/item.js +11 -19
  49. package/components/progress/_spec.scss +43 -34
  50. package/components/selection/_spec.scss +123 -133
  51. package/components/selection/_theme.scss +88 -120
  52. package/components/selection/index.js +9 -15
  53. package/components/selection/input.js +3 -5
  54. package/components/selection/radiogroup.js +8 -15
  55. package/components/slider/_spec.scss +23 -28
  56. package/components/snackbar/_spec.scss +17 -62
  57. package/components/snackbar/index.js +15 -21
  58. package/components/tab/_spec.scss +35 -50
  59. package/components/tab/content.js +33 -28
  60. package/components/tab/index.js +30 -33
  61. package/components/tab/item.js +4 -5
  62. package/components/tab/list.js +22 -36
  63. package/components/textfield/README.md +2 -2
  64. package/components/textfield/_spec.scss +241 -287
  65. package/components/textfield/_theme.scss +197 -232
  66. package/components/textfield/index.js +8 -16
  67. package/components/tooltip/_spec.scss +23 -26
  68. package/components/type/_spec.scss +19 -16
  69. package/core/_breakpoint.scss +33 -33
  70. package/core/_elevation.scss +40 -0
  71. package/core/_length.scss +0 -1
  72. package/core/_platform.scss +0 -22
  73. package/core/_type.scss +7 -6
  74. package/core/aria/button.js +4 -5
  75. package/core/aria/keyboard.js +1 -2
  76. package/core/aria/rovingtabindex.js +14 -17
  77. package/core/aria/tab.js +1 -2
  78. package/core/dom.js +18 -109
  79. package/core/overlay/_spec.scss +5 -8
  80. package/core/overlay/_theme.scss +126 -150
  81. package/core/overlay/index.js +19 -32
  82. package/core/ripple/_spec.scss +16 -17
  83. package/core/ripple/_theme.scss +13 -33
  84. package/core/ripple/index.js +36 -44
  85. package/core/theme/_aliases.scss +15 -0
  86. package/core/theme/_config.scss +8 -2
  87. package/core/theme/_functions.scss +22 -0
  88. package/core/theme/_palettes.scss +0 -1
  89. package/core/{color → theme}/_spec.scss +0 -0
  90. package/core/theme/_theme.scss +268 -0
  91. package/core/theme/index.scss +4 -0
  92. package/core/transition/index.js +73 -76
  93. package/docs/_flex.scss +7 -1
  94. package/docs/_menuoptions.js +2 -2
  95. package/docs/_partials/_appbar.eta +12 -14
  96. package/docs/_partials/_header.eta +41 -44
  97. package/docs/_sample-utils.js +15 -20
  98. package/docs/docs.scss +123 -87
  99. package/docs/framework.scss +26 -0
  100. package/docs/index.eta +2 -6
  101. package/docs/index.js +7 -0
  102. package/docs/pages/appbar.eta +22 -28
  103. package/docs/pages/bottomnav.js +17 -14
  104. package/docs/pages/button.js +10 -10
  105. package/docs/pages/card.js +20 -22
  106. package/docs/pages/chip.js +11 -13
  107. package/docs/pages/color.js +35 -36
  108. package/docs/pages/datatable.js +11 -15
  109. package/docs/pages/dialog.eta +9 -11
  110. package/docs/pages/dialog.js +6 -9
  111. package/docs/pages/dom.js +6 -9
  112. package/docs/pages/elevation.eta +10 -10
  113. package/docs/pages/fab.js +2 -3
  114. package/docs/pages/grid.js +5 -5
  115. package/docs/pages/list.js +1 -2
  116. package/docs/pages/menu.eta +17 -19
  117. package/docs/pages/menu.js +7 -11
  118. package/docs/pages/overlay.js +1 -2
  119. package/docs/pages/progress.eta +2 -2
  120. package/docs/pages/progress.js +1 -1
  121. package/docs/pages/ripple.js +1 -2
  122. package/docs/pages/search.eta +20 -24
  123. package/docs/pages/search.js +24 -41
  124. package/docs/pages/selection.eta +2 -6
  125. package/docs/pages/selection.js +3 -4
  126. package/docs/pages/snackbar.js +3 -4
  127. package/docs/pages/tab.eta +61 -75
  128. package/docs/pages/tab.js +16 -15
  129. package/docs/pages/textfield.eta +9 -8
  130. package/docs/pages/textfield.js +26 -23
  131. package/docs/pages/tooltip.eta +10 -12
  132. package/docs/pages/transition.js +5 -7
  133. package/docs/postrender.js +7 -5
  134. package/docs/pwa/pwa.eta +14 -16
  135. package/docs/pwa/pwa.js +19 -27
  136. package/docs/pwa/pwa.scss +12 -7
  137. package/docs/themes/theme-colored.scss +9 -11
  138. package/docs/themes/theme-default.scss +0 -14
  139. package/index.scss +27 -0
  140. package/jsconfig.json +7 -3
  141. package/package.json +26 -15
  142. package/tsconfig.json +16 -0
  143. package/{webpack.config.cjs → webpack.config.js} +105 -58
  144. package/components/template/_theme.scss +0 -27
  145. package/components/textfield/_mixins.scss +0 -52
  146. package/core/color/_theme.scss +0 -390
  147. package/core/color/index.scss +0 -2
  148. package/core/theme/_mixins.scss +0 -172
  149. package/core/theme/_variables.scss +0 -24
  150. package/docs/_mixins.pug +0 -155
  151. package/docs/pages/appbar.pug +0 -78
  152. package/docs/pages/bottomnav.pug +0 -137
  153. package/docs/pages/button.pug +0 -121
  154. package/docs/pages/card.pug +0 -74
  155. package/docs/pages/chip.pug +0 -91
  156. package/docs/pages/color.pug +0 -121
  157. package/docs/pages/datatable.pug +0 -283
  158. package/docs/pages/dialog.pug +0 -132
  159. package/docs/pages/dom.pug +0 -22
  160. package/docs/pages/elevation.pug +0 -25
  161. package/docs/pages/fab.pug +0 -66
  162. package/docs/pages/grid.pug +0 -95
  163. package/docs/pages/layout.pug +0 -7
  164. package/docs/pages/list.pug +0 -326
  165. package/docs/pages/menu.pug +0 -205
  166. package/docs/pages/overlay.pug +0 -55
  167. package/docs/pages/progress.pug +0 -16
  168. package/docs/pages/ripple.pug +0 -21
  169. package/docs/pages/search.pug +0 -165
  170. package/docs/pages/selection.pug +0 -74
  171. package/docs/pages/slider.pug +0 -17
  172. package/docs/pages/snackbar.pug +0 -60
  173. package/docs/pages/tab.pug +0 -304
  174. package/docs/pages/textfield.pug +0 -360
  175. package/docs/pages/tooltip.pug +0 -78
  176. package/docs/pages/transition.pug +0 -76
  177. package/docs/pages/type.pug +0 -29
  178. package/docs/pwa/_dialogs.pug +0 -96
  179. package/docs/pwa/_menus.pug +0 -11
  180. package/docs/pwa/pwa.pug +0 -325
  181. package/docs/spec.scss +0 -26
  182. package/docs/themes/_component-themes.scss +0 -26
  183. package/docs/themes/theme-colored-fallbacks.scss +0 -17
  184. package/docs/themes/theme-default-fallbacks.scss +0 -17
@@ -4,14 +4,28 @@
4
4
  @use '../../core/_length.scss' as *;
5
5
  @use '../../core/_type.scss' as type;
6
6
 
7
+ :root {
8
+ --mdw-banner__flex-wrap: nowrap;
9
+ --mdw-banner__text-padding-inline-start: 24px;
10
+ --mdw-banner__buttons-margin-inline-start: 0;
11
+ @include breakpoint.has16DPMargin() {
12
+ --mdw-banner__text-padding-inline-start: 16px;
13
+ }
14
+ @include breakpoint.minMediumWindow() {
15
+ --mdw-banner__flex-wrap: wrap;
16
+ --mdw-banner__buttons-margin-inline-start: 90px;
17
+ }
18
+ }
19
+
7
20
  .mdw-banner {
8
21
  display: flex;
9
22
  align-items: center;
10
23
  flex-direction: row;
24
+ flex-wrap: var(--mdw-banner__flex-wrap);
11
25
  justify-content: center;
12
26
 
13
- width: 100%;
14
- border-bottom: solid dp(1);
27
+ inline-size: 100%;
28
+ border-block-end: solid 1px;
15
29
  }
16
30
 
17
31
  .mdw-banner__container {
@@ -22,34 +36,18 @@
22
36
  align-items: center;
23
37
  flex-wrap: wrap;
24
38
  justify-content: flex-end;
25
-
39
+
26
40
  box-sizing: border-box;
27
- max-width: dp(960);
41
+ max-inline-size: 960px;
28
42
  flex: 1;
29
- padding-top: dp(8);
30
- padding-bottom: dp(7);
43
+ padding-block: 8px 7px;
31
44
  }
32
45
 
33
46
  .mdw-banner__icon {
34
47
  position: absolute;
35
- top: dp(24);
36
- right: auto;
37
- left: dp(16);
38
48
 
39
- :root[dir="rtl"] & {
40
- right: dp(16);
41
- left: auto;
42
- }
43
-
44
- & ~ .mdw-banner__text {
45
- margin-right: 0;
46
- margin-left: dp(40 + 16);
47
-
48
- :root[dir="rtl"] & {
49
- margin-right: dp(40 + 16);
50
- margin-left: 0;
51
- }
52
- }
49
+ inset-block-start: 24px;
50
+ inset-inline: 16px auto;
53
51
  }
54
52
 
55
53
  .mdw-banner__text {
@@ -58,24 +56,12 @@
58
56
 
59
57
  flex-grow: 1;
60
58
 
61
- padding-right: 0;
62
- padding-left: dp(24);
59
+ padding-inline-start: var(--mdw-banner__text-padding-inline-start);
63
60
 
64
61
  white-space: pre-line;
65
62
 
66
- :root[dir="rtl"] {
67
- padding-right: dp(24);
68
- padding-left: 0;
69
- }
70
-
71
- @include breakpoint.has16DPMargin() {
72
- padding-right: 0;
73
- padding-left: dp(16);
74
-
75
- :root[dir="rtl"] & {
76
- padding-right: dp(16);
77
- padding-left: 0;
78
- }
63
+ .mdw-banner__icon ~ & {
64
+ margin-inline: 56px 0; // 40 + 16
79
65
  }
80
66
  }
81
67
 
@@ -84,35 +70,14 @@
84
70
  flex-direction: row-reverse;
85
71
  flex-wrap: wrap;
86
72
  justify-content: flex-start;
87
-
88
- max-width: 100%;
73
+
74
+ max-inline-size: 100%;
89
75
  flex: none;
76
+ margin-inline-start: var(--mdw-banner__buttons-margin-inline-start);
90
77
 
91
78
  .mdw-button {
92
- margin-right: dp(8);
93
- margin-left: 0;
79
+ margin-inline: 0 8px;
94
80
 
95
81
  text-align: end;
96
-
97
- :root[dir="rtl"] & {
98
- margin-right: 0;
99
- margin-left: dp(8);
100
- }
101
- }
102
- }
103
-
104
- @include breakpoint.minMediumWindow {
105
- .mdw-banner {
106
- flex-wrap: nowrap;
107
- }
108
-
109
- .mdw-banner__buttons {
110
- margin-right: 0;
111
- margin-left: dp(90);
112
-
113
- :root[dir="rtl"] & {
114
- margin-right: dp(90);
115
- margin-left: 0;
116
- }
117
82
  }
118
83
  }
@@ -4,14 +4,28 @@
4
4
  @use '../../core/_motion.scss' as motion;
5
5
  @use '../../core/_type.scss' as type;
6
6
 
7
+ :root {
8
+ --mdw-bottomnav__label-opacity: 1;
9
+ --mdw-bottomnav__label-transform: none;
10
+ --mdw-bottomnav__icon-transform: #{translateY(8px)};
11
+ }
12
+
7
13
  .mdw-bottomnav {
8
14
  display: flex;
9
15
  position: relative;
10
16
  justify-content: center;
11
17
  overflow: hidden;
12
18
 
13
- min-height: dp(56);
14
- width: 100%;
19
+ min-block-size: 56px;
20
+ inline-size: 100%;
21
+
22
+ &[mdw-shifting] {
23
+ .mdw-bottomnav__item:not([aria-selected="true"]) {
24
+ --mdw-bottomnav__label-opacity: 0;
25
+ --mdw-bottomnav__label-transform: #{translateY(8px)};
26
+ --mdw-bottomnav__icon-transform: #{translateY(16px)};
27
+ }
28
+ }
15
29
  }
16
30
 
17
31
  .mdw-bottomnav__item {
@@ -21,12 +35,12 @@
21
35
  flex-direction: column;
22
36
  justify-content: flex-start;
23
37
  overflow: visible;
24
-
25
- min-width: dp(80);
26
- flex: dp(168);
38
+
39
+ min-inline-size: 80px;
40
+ flex: 168px;
27
41
  flex-grow: 0;
28
42
  // flex-shrink: 1;
29
- // flex-basis: dp(168);
43
+ // flex-basis: 168px;
30
44
  margin: 0;
31
45
  padding: 0;
32
46
 
@@ -38,7 +52,7 @@
38
52
  user-select: none;
39
53
 
40
54
  z-index: 0;
41
-
55
+
42
56
  border-radius: 0;
43
57
  box-shadow: none;
44
58
  }
@@ -46,56 +60,51 @@
46
60
  .mdw-bottomnav__icon {
47
61
  display: flex;
48
62
  position: absolute;
49
- top: 0;
50
- left: 50%;
51
-
63
+ inset-block-start: 0;
64
+ inset-inline-start: 50%;
65
+
66
+ margin-inline-start: -12px;
67
+
52
68
  margin: 0;
53
- margin-left: dp(-12);
54
69
  padding: 0;
55
70
 
71
+ pointer-events: none;
72
+
56
73
  transition-duration: motion.$shapeChangeDuration, motion.$simpleDuration;
57
74
  transition-property: transform, color;
58
75
  transition-timing-function: motion.$standardEasing;
59
76
 
60
- pointer-events: none;
61
- transform: translateY(dp(8));
77
+ transform: var(--mdw-bottomnav__icon-transform);
62
78
 
63
79
  &:last-child {
64
80
  // No label
65
- transform: translateY(dp(16));
81
+ transform: translateY(16px);
66
82
  }
67
83
  }
68
84
 
69
85
  .mdw-bottomnav__badge {
70
86
  position: absolute;
71
- top: 0;
72
- right: auto;
73
- left: dp(16);
87
+ inset-block-start: 0;
88
+ inset-inline: 16px auto;
74
89
 
75
-
76
90
  box-sizing: border-box;
77
- min-height: dp(8);
78
- min-width: dp(8);
79
- padding: dp(2);
91
+ min-block-size: 8px;
92
+ min-inline-size: 8px;
93
+ padding: 2px;
80
94
 
81
95
  visibility: hidden;
82
96
 
83
97
  z-index: 1;
84
98
 
85
- border-radius: dp(8);
99
+ border-radius: 8px;
86
100
 
87
101
  font: inherit;
88
102
 
89
103
  font-weight: type.$weightRegular;
90
- font-size: dp(10);
91
- line-height: dp(12);
104
+ font-size: 10px;
105
+ line-height: 12px;
92
106
  letter-spacing: normal;
93
107
 
94
- :root[dir="rtl"] & {
95
- right: dp(16);
96
- left: auto;
97
- }
98
-
99
108
  &[mdw-badge] {
100
109
  visibility: visible;
101
110
 
@@ -117,41 +126,24 @@
117
126
  @include type.addRules('caption');
118
127
  @include type.textTopToTop(32);
119
128
  @include type.baselineToBottom(8);
120
-
129
+
121
130
  // Overriding 12dp for baseline bottom with 8dp for oversized and textwrapped
122
131
  // Baseline top will ensure type.baselineToBottom is 12dp for standard layouts
123
132
 
124
133
  box-sizing: border-box;
125
- max-width: 100%;
126
- padding: 0 dp(12);
127
-
134
+ max-inline-size: 100%;
135
+ padding: 0 12px;
136
+
137
+ pointer-events: none;
138
+
128
139
  transition-duration: motion.$shapeChangeDuration;
129
140
  transition-property: transform, opacity, color;
130
141
  transition-timing-function: motion.$standardEasing;
131
142
 
132
- pointer-events: none;
143
+ opacity: var(--mdw-bottomnav__label-opacity);
144
+ transform: var(--mdw-bottomnav__label-transform);
133
145
 
134
146
  text-align: center;
135
147
  word-break: break-all;
136
148
  word-break: break-word;
137
149
  }
138
-
139
- .mdw-bottomnav[mdw-shifting] {
140
- .mdw-bottomnav__icon {
141
- transform: translateY(dp(16));
142
- }
143
-
144
- .mdw-bottomnav__label {
145
- opacity: 0;
146
- transform: translateY(dp(8));
147
- }
148
-
149
- .mdw-bottomnav__item[aria-selected="true"] > .mdw-bottomnav__label {
150
- opacity: 1;
151
- transform: translateY(0);
152
- }
153
-
154
- .mdw-bottomnav__item[aria-selected="true"] > .mdw-bottomnav__icon {
155
- transform: translateY(dp(8));
156
- }
157
- }
@@ -2,7 +2,6 @@
2
2
 
3
3
  import * as Keyboard from '../../core/aria/keyboard.js';
4
4
  import * as RovingTabIndex from '../../core/aria/rovingtabindex.js';
5
- import { iterateArrayLike } from '../../core/dom.js';
6
5
 
7
6
  import * as BottomNavItem from './item.js';
8
7
 
@@ -12,10 +11,8 @@ import * as BottomNavItem from './item.js';
12
11
  */
13
12
  function onTabIndexZeroed(event) {
14
13
  event.stopPropagation();
15
- /** @type {HTMLElement} */
16
- const bottomnavElement = (event.currentTarget);
17
- /** @type {HTMLElement} */
18
- const currentItem = (event.target);
14
+ const bottomnavElement = /** @type {HTMLElement} */ (event.currentTarget);
15
+ const currentItem = /** @type {HTMLElement} */ (event.target);
19
16
  RovingTabIndex.removeTabIndex(bottomnavElement.querySelectorAll('[role="tab"]'), [currentItem]);
20
17
  }
21
18
 
@@ -30,8 +27,7 @@ function onForwardsRequested(event) {
30
27
  }
31
28
  event.preventDefault();
32
29
  event.stopPropagation();
33
- /** @type {HTMLElement} */
34
- const bottomnavElement = (event.currentTarget);
30
+ const bottomnavElement = /** @type {HTMLElement} */ (event.currentTarget);
35
31
  RovingTabIndex.selectNext(bottomnavElement.querySelectorAll('[role="tab"]'));
36
32
  }
37
33
 
@@ -46,8 +42,7 @@ function onBackwardsRequested(event) {
46
42
  }
47
43
  event.preventDefault();
48
44
  event.stopPropagation();
49
- /** @type {HTMLElement} */
50
- const bottomnavElement = (event.currentTarget);
45
+ const bottomnavElement = /** @type {HTMLElement} */ (event.currentTarget);
51
46
  RovingTabIndex.selectPrevious(bottomnavElement.querySelectorAll('[role="tab"]'));
52
47
  }
53
48
 
@@ -66,18 +61,16 @@ export function setupARIA(bottomnavElement) {
66
61
  * @return {void}
67
62
  */
68
63
  export function onSelectedChangeEvent(event) {
69
- /** @type {HTMLElement} */
70
- const itemElement = (event.target);
64
+ const itemElement = /** @type {HTMLElement} */ (event.target);
71
65
  if (event.detail.value !== 'true') {
72
66
  return;
73
67
  }
74
- /** @type {HTMLElement} */
75
- const bottomnavElement = (event.currentTarget);
76
- iterateArrayLike(bottomnavElement.querySelectorAll('[role="tab"]'), (item) => {
68
+ const bottomnavElement = /** @type {HTMLElement} */ (event.currentTarget);
69
+ for (const item of bottomnavElement.querySelectorAll('[role="tab"]')) {
77
70
  if (item !== itemElement) {
78
71
  BottomNavItem.setSelected(item, false);
79
72
  }
80
- });
73
+ }
81
74
  }
82
75
 
83
76
  /**
@@ -86,16 +79,16 @@ export function onSelectedChangeEvent(event) {
86
79
  */
87
80
  export function attach(bottomnavElement) {
88
81
  setupARIA(bottomnavElement);
89
- /** @type {Element} */
90
- let selectedItem;
82
+ /** @type {?Element} */
83
+ let selectedItem = null;
91
84
  const items = bottomnavElement.getElementsByClassName('mdw-bottomnav__item');
92
85
 
93
- iterateArrayLike(items, (item) => {
86
+ for (const item of items) {
94
87
  BottomNavItem.attach(item);
95
88
  if (!selectedItem && item.getAttribute('aria-selected') === 'true') {
96
89
  selectedItem = item;
97
90
  }
98
- });
91
+ }
99
92
  if (!selectedItem) {
100
93
  selectedItem = items[0];
101
94
  }
@@ -118,5 +111,7 @@ export function detach(bottomnavElement) {
118
111
  bottomnavElement.removeEventListener(Keyboard.FORWARD_ARROW_KEY, onForwardsRequested);
119
112
  bottomnavElement.removeEventListener(Keyboard.BACK_ARROW_KEY, onBackwardsRequested);
120
113
  bottomnavElement.removeEventListener(RovingTabIndex.TABINDEX_ZEROED, onTabIndexZeroed);
121
- iterateArrayLike(bottomnavElement.getElementsByClassName('mdw-bottomnav__item'), BottomNavItem.detach);
114
+ for (const element of bottomnavElement.getElementsByClassName('mdw-bottomnav__item')) {
115
+ BottomNavItem.detach(element);
116
+ }
122
117
  }
@@ -1,7 +1,6 @@
1
1
  // https://www.w3.org/TR/wai-aria-1.1/#tab
2
2
 
3
3
  import * as AriaTab from '../../core/aria/tab.js';
4
- import { iterateArrayLike } from '../../core/dom.js';
5
4
  import * as Overlay from '../../core/overlay/index.js';
6
5
  import * as Ripple from '../../core/ripple/index.js';
7
6
 
@@ -22,8 +21,7 @@ export function setSelected(element, value, dispatchEvent = true) {
22
21
  * @return {void}
23
22
  */
24
23
  function onClick(event) {
25
- /** @type {HTMLElement} */
26
- const element = (event.currentTarget);
24
+ const element = /** @type {HTMLElement} */ (event.currentTarget);
27
25
  if (element.getAttribute('aria-disabled') === 'true') {
28
26
  return;
29
27
  }
@@ -36,8 +34,9 @@ function onClick(event) {
36
34
  */
37
35
  export function attachAria(element) {
38
36
  AriaTab.attach(element);
39
- iterateArrayLike(element.getElementsByClassName('mdw-bottomnav__icon'),
40
- (el) => el.setAttribute('aria-hidden', 'true'));
37
+ for (const el of element.getElementsByClassName('mdw-bottomnav__icon')) {
38
+ el.setAttribute('aria-hidden', 'true');
39
+ }
41
40
  }
42
41
 
43
42
  /**
@@ -51,7 +51,7 @@ button.mdw-button(disabled)
51
51
  # Javascript
52
52
 
53
53
  ```
54
- [...document.getElementsByClassName("mdw-button")].forEach(Button.attach);
54
+ for (const el of document.getElementsByClassName("mdw-button")) Button.attach(el);
55
55
  ```
56
56
 
57
57
  # Notes
@@ -1,16 +1,16 @@
1
1
  // https://material.io/guidelines/components/buttons.html#buttons-raised-buttons
2
2
  // https://material.io/guidelines/style/icons.html#
3
3
 
4
- @use '../../core/_breakpoint.scss' as breakpoint;
5
4
  @use '../../core/_elevation.scss' as elevation;
6
5
  @use '../../core/_length.scss' as *;
7
6
  @use '../../core/_motion.scss' as motion;
8
7
  @use '../../core/_platform.scss' as platform;
9
8
  @use '../../core/_type.scss' as type;
10
9
 
11
- $externalPadding: dp(8) !default;
12
- $minimumClickTarget: dp(48) !default;
13
- $outlineSize: dp(1) !default;
10
+ :root {
11
+ --mdw-button__click-target-size: 48px;
12
+ --mdw-button__outline-size: 1px;
13
+ }
14
14
 
15
15
  .mdw-button {
16
16
  display: inline-flex;
@@ -20,11 +20,11 @@ $outlineSize: dp(1) !default;
20
20
  overflow: hidden;
21
21
 
22
22
  box-sizing: border-box;
23
- height: dp(36);
24
- min-width: dp(64);
25
- margin: 0 dp(8);
23
+ block-size: 36px;
24
+ min-inline-size: 64px;
25
+ margin: 0 8px;
26
26
  border: none;
27
- padding: 0 dp(8);
27
+ padding: 0 8px;
28
28
 
29
29
  -moz-appearance: none;
30
30
  -webkit-appearance: none;
@@ -42,20 +42,21 @@ $outlineSize: dp(1) !default;
42
42
 
43
43
  z-index: 0;
44
44
 
45
- border-radius: dp(4);
45
+ border-radius: 4px;
46
46
  color: inherit;
47
47
 
48
48
  text-align: center;
49
49
  text-decoration: none;
50
-
50
+
51
51
  // Remove Firefox inner
52
+
52
53
  &::-moz-focus-inner {
53
54
  border: 0;
54
55
  }
55
56
 
56
57
  &[mdw-border-ink],
57
58
  &[mdw-surface] {
58
- padding: 0 dp(16);
59
+ padding: 0 16px;
59
60
  }
60
61
 
61
62
  &:not([mdw-surface]) {
@@ -63,6 +64,7 @@ $outlineSize: dp(1) !default;
63
64
  }
64
65
 
65
66
  // Don't override font icon properties
67
+
66
68
  &:not([mdw-icon]) {
67
69
  @include type.addRules('button');
68
70
  font-family: inherit;
@@ -71,25 +73,26 @@ $outlineSize: dp(1) !default;
71
73
 
72
74
  &[mdw-border-ink] {
73
75
  border-style: solid;
74
- border-width: $outlineSize;
76
+ border-width: var(--mdw-button__outline-size);
75
77
 
76
78
  &::before,
77
79
  & > .mdw-ripple {
78
80
  box-sizing: content-box;
79
- height: 100%;
80
- width: 100%;
81
- margin-top: -$outlineSize;
82
- margin-left: -$outlineSize;
83
- padding-right: 2 * $outlineSize;
84
- padding-bottom: 2 * $outlineSize;
81
+ block-size: 100%;
82
+ inline-size: 100%;
83
+ margin-block-start: calc(-1 * var(--mdw-button__outline-size));
84
+ margin-inline-start: calc(-1 * var(--mdw-button__outline-size));
85
+ padding-block-end: calc(2 * var(--mdw-button__outline-size));
86
+ padding-inline-end: calc(2 * var(--mdw-button__outline-size));
85
87
  }
86
88
  }
87
89
 
88
90
  // Icon properties
91
+
89
92
  &[mdw-icon] {
90
- height: dp(40);
91
- min-width: dp(40);
92
- padding: dp(8);
93
+ block-size: 40px;
94
+ min-inline-size: 40px;
95
+ padding: 8px;
93
96
 
94
97
  -moz-user-select: none;
95
98
  -ms-user-select: none;
@@ -98,12 +101,12 @@ $outlineSize: dp(1) !default;
98
101
 
99
102
  border-radius: 50%;
100
103
 
101
- font-size: dp(24); // Internal padding provided by font
104
+ font-size: 24px; // Internal padding provided by font
102
105
  }
103
106
 
104
107
  &[mdw-image] {
105
- height: dp(24);
106
- min-width: dp(24);
108
+ block-size: 24px;
109
+ min-inline-size: 24px;
107
110
  margin: 0;
108
111
  padding: 0;
109
112
 
@@ -116,11 +119,11 @@ $outlineSize: dp(1) !default;
116
119
 
117
120
  & > {
118
121
  position: absolute;
119
- top: 0;
120
- left: 0;
121
-
122
- height: 100%;
123
- width: auto;
122
+ inset-block-start: 0;
123
+ inset-inline-start: 0;
124
+
125
+ block-size: 100%;
126
+ inline-size: auto;
124
127
  }
125
128
  }
126
129
  }
@@ -131,31 +134,29 @@ $outlineSize: dp(1) !default;
131
134
  content: "";
132
135
 
133
136
  position: absolute;
134
- top: 50%;
135
- left: 0;
136
-
137
- height: $minimumClickTarget;
138
- width: 100%;
137
+ inset-block-start: 50%;
138
+ inset-inline-start: 0;
139
+
140
+ block-size: var(--mdw-button__click-target-size);
141
+ inline-size: 100%;
139
142
 
140
143
  transform: translateY(-50%);
141
144
  }
142
145
  }
143
146
 
144
147
  // Raised
145
- .mdw-button[mdw-raised] {
146
- box-shadow: elevation.boxShadow(2);
148
+
149
+ .mdw-button[mdw-raised]:not([disabled]):not([aria-disabled="true"]) {
150
+ @include elevation.boxShadowMixin(2);
147
151
 
148
152
  &:active {
149
- box-shadow: elevation.boxShadow(8);
153
+ @include elevation.boxShadowMixin(8);
150
154
  }
151
155
  }
152
156
 
157
+ // Disabled
153
158
  .mdw-button[disabled],
154
159
  .mdw-button[aria-disabled="true"] {
160
+ /* stylelint-disable-next-line plugin/no-unsupported-browser-features */
155
161
  cursor: not-allowed;
156
-
157
- &,
158
- &[mdw-raised] {
159
- box-shadow: elevation.boxShadow(0);
160
- }
161
162
  }