material-inspired-component-library 1.2.2 → 2.0.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 (59) hide show
  1. package/README.md +18 -0
  2. package/components/badge/README.md +65 -0
  3. package/components/badge/index.scss +68 -0
  4. package/components/button/README.md +1 -1
  5. package/components/button/index.scss +60 -89
  6. package/components/button/index.ts +5 -0
  7. package/components/card/index.scss +29 -30
  8. package/components/checkbox/index.scss +1 -6
  9. package/components/dialog/index.scss +11 -7
  10. package/components/iconbutton/README.md +1 -1
  11. package/components/iconbutton/index.scss +46 -80
  12. package/components/iconbutton/index.ts +5 -0
  13. package/components/list/index.scss +39 -30
  14. package/components/list/index.ts +10 -9
  15. package/components/menu/README.md +67 -4
  16. package/components/menu/index.scss +29 -29
  17. package/components/menu/index.ts +47 -16
  18. package/components/navigationrail/README.md +150 -0
  19. package/components/navigationrail/index.scss +468 -0
  20. package/components/{checkbox → navigationrail}/index.ts +12 -7
  21. package/components/radio/index.scss +22 -12
  22. package/components/select/index.scss +5 -11
  23. package/components/textfield/index.scss +8 -2
  24. package/dist/badge.css +1 -0
  25. package/dist/badge.js +1 -0
  26. package/dist/bottomsheet.css +1 -1
  27. package/dist/button.css +1 -1
  28. package/dist/card.css +1 -1
  29. package/dist/checkbox.css +1 -1
  30. package/dist/components/menu/index.d.ts +0 -11
  31. package/dist/components/navigationrail/index.d.ts +5 -0
  32. package/dist/dialog.css +1 -1
  33. package/dist/iconbutton.css +1 -1
  34. package/dist/list.css +1 -1
  35. package/dist/menu.css +1 -1
  36. package/dist/micl.css +1 -1
  37. package/dist/micl.js +1 -1
  38. package/dist/navigationrail.css +1 -0
  39. package/dist/navigationrail.js +1 -0
  40. package/dist/radio.css +1 -1
  41. package/dist/select.css +1 -1
  42. package/dist/slider.css +1 -1
  43. package/dist/switch.css +1 -1
  44. package/dist/textfield.css +1 -1
  45. package/docs/button.html +5 -5
  46. package/docs/docs.css +2 -1
  47. package/docs/docs.js +2 -2
  48. package/docs/index.html +35 -2
  49. package/docs/menu.html +183 -3
  50. package/docs/micl.css +1 -1
  51. package/docs/micl.js +1 -1
  52. package/docs/navigationrail.html +81 -0
  53. package/micl.ts +20 -25
  54. package/package.json +10 -7
  55. package/styles/statelayer.scss +14 -0
  56. package/styles.scss +18 -1
  57. package/webpack.config.js +37 -0
  58. package/dist/components/checkbox/index.d.ts +0 -5
  59. package/styles/ripple.scss +0 -50
@@ -21,7 +21,6 @@
21
21
 
22
22
  @use '../../styles/elevation';
23
23
  @use '../../styles/motion';
24
- @use '../../styles/ripple';
25
24
  @use '../../styles/shapes';
26
25
  @use '../../styles/statelayer';
27
26
  @use '../../styles/typography';
@@ -44,19 +43,46 @@
44
43
  interpolate-size: allow-keywords;
45
44
 
46
45
  &[tabindex='0']:not(.micl-card--disabled) {
47
- --miclripple: 1;
46
+ --micl-ripple: 1;
47
+ --statelayer-color: var(--md-sys-color-on-surface);
48
48
 
49
- @include ripple.effect;
49
+ background-image:
50
+ radial-gradient(circle at var(--micl-x, center) var(--micl-y, center), transparent 0%, rgb(from var(--statelayer-color) r g b / var(--statelayer-opacity)) 10%, transparent 10%),
51
+ linear-gradient(rgb(from var(--statelayer-color) r g b / var(--statelayer-opacity)));
52
+ background-repeat: no-repeat;
53
+ background-size: 10000%, 100%;
54
+ transition:
55
+ background-size 3000ms,
56
+ --statelayer-opacity var(--md-sys-card-motion-duration) linear;
50
57
 
51
58
  &:hover {
59
+ --statelayer-opacity: var(--md-sys-state-hover-state-layer-opacity);
60
+
52
61
  box-shadow: var(--md-sys-elevation-level1);
53
62
  cursor: pointer;
54
63
  }
55
64
  &:focus-visible {
65
+ --statelayer-opacity: var(--md-sys-state-focus-state-layer-opacity);
66
+
56
67
  outline: var(--md-sys-state-focus-indicator-thickness) solid var(--md-sys-color-secondary);
57
68
  outline-offset: var(--md-sys-state-focus-indicator-outer-offset);
58
69
  box-shadow: var(--md-sys-elevation-level1);
59
70
  }
71
+ &:active {
72
+ --statelayer-opacity: var(--md-sys-state-pressed-state-layer-opacity);
73
+
74
+ background-size: 0%, 100%;
75
+ transition: background-size 0ms;
76
+ }
77
+ &.micl-card--dragging {
78
+ --statelayer-opacity: var(--md-sys-state-dragged-state-layer-opacity);
79
+
80
+ box-shadow: var(--md-sys-elevation-level3);
81
+ cursor: grabbing;
82
+ }
83
+ .micl-card__content {
84
+ background-color: transparent;
85
+ }
60
86
  }
61
87
  &:not([tabindex='0']):not(.micl-card--disabled):has(> summary:focus-visible) {
62
88
  outline: var(--md-sys-state-focus-indicator-thickness) solid var(--md-sys-color-secondary);
@@ -86,20 +112,13 @@
86
112
 
87
113
  &[tabindex='0']:not(.micl-card--disabled) {
88
114
  &:hover {
89
- background-color: color-mix(in srgb, var(--md-sys-color-surface-container-low), var(--md-sys-color-on-surface) var(--md-sys-state-hover-state-layer-opacity));
90
115
  box-shadow: var(--md-sys-elevation-level2);
91
116
  }
92
- &:focus-visible {
93
- background-color: color-mix(in srgb, var(--md-sys-color-surface-container-low), var(--md-sys-color-on-surface) var(--md-sys-state-focus-state-layer-opacity));
94
- }
95
117
  &:active {
96
- background-color: color-mix(in srgb, var(--md-sys-color-surface-container-low), var(--md-sys-color-on-surface) var(--md-sys-state-pressed-state-layer-opacity));
97
118
  box-shadow: var(--md-sys-elevation-level1);
98
119
  }
99
120
  &.micl-card--dragging {
100
- background-color: color-mix(in srgb, var(--md-sys-color-surface-container-low), var(--md-sys-color-on-surface) var(--md-sys-state-dragged-state-layer-opacity));
101
121
  box-shadow: var(--md-sys-elevation-level4);
102
- cursor: grabbing;
103
122
  }
104
123
  }
105
124
  }
@@ -108,22 +127,12 @@
108
127
  box-shadow: var(--md-sys-elevation-level0);
109
128
 
110
129
  &[tabindex='0']:not(.micl-card--disabled) {
111
- &:hover {
112
- background-color: color-mix(in srgb, var(--md-sys-color-surface-container-highest), var(--md-sys-color-on-surface) var(--md-sys-state-hover-state-layer-opacity));
113
- }
114
130
  &:focus-visible {
115
- background-color: color-mix(in srgb, var(--md-sys-color-surface-container-highest), var(--md-sys-color-on-surface) var(--md-sys-state-focus-state-layer-opacity));
116
131
  box-shadow: var(--md-sys-elevation-level0);
117
132
  }
118
133
  &:active {
119
- background-color: color-mix(in srgb, var(--md-sys-color-surface-container-highest), var(--md-sys-color-on-surface) var(--md-sys-state-pressed-state-layer-opacity));
120
134
  box-shadow: var(--md-sys-elevation-level0);
121
135
  }
122
- &.micl-card--dragging {
123
- background-color: color-mix(in srgb, var(--md-sys-color-surface-container-highest), var(--md-sys-color-on-surface) var(--md-sys-state-dragged-state-layer-opacity));
124
- box-shadow: var(--md-sys-elevation-level3);
125
- cursor: grabbing;
126
- }
127
136
  }
128
137
  }
129
138
  .micl-card-outlined {
@@ -132,24 +141,14 @@
132
141
  border: 1px solid var(--md-sys-color-outline-variant);
133
142
 
134
143
  &[tabindex='0']:not(.micl-card--disabled) {
135
- &:hover {
136
- background-color: color-mix(in srgb, var(--md-sys-color-surface), var(--md-sys-color-on-surface) var(--md-sys-state-hover-state-layer-opacity));
137
- }
138
144
  &:focus-visible {
139
145
  border-color: var(--md-sys-color-on-surface);
140
- background-color: color-mix(in srgb, var(--md-sys-color-surface), var(--md-sys-color-on-surface) var(--md-sys-state-focus-state-layer-opacity));
141
146
  box-shadow: var(--md-sys-elevation-level0);
142
147
  }
143
148
  &:active {
144
149
  border-color: var(--md-sys-color-outline-variant);
145
- background-color: color-mix(in srgb, var(--md-sys-color-surface), var(--md-sys-color-on-surface) var(--md-sys-state-pressed-state-layer-opacity));
146
150
  box-shadow: var(--md-sys-elevation-level0);
147
151
  }
148
- &.micl-card--dragging {
149
- background-color: color-mix(in srgb, var(--md-sys-color-surface), var(--md-sys-color-on-surface) var(--md-sys-state-dragged-state-layer-opacity));
150
- box-shadow: var(--md-sys-elevation-level3);
151
- cursor: grabbing;
152
- }
153
152
  }
154
153
  }
155
154
 
@@ -20,7 +20,6 @@
20
20
  // SOFTWARE.
21
21
 
22
22
  @use '../../styles/motion';
23
- @use '../../styles/ripple';
24
23
  @use '../../styles/statelayer';
25
24
  @use '../../styles/typography';
26
25
 
@@ -54,7 +53,6 @@
54
53
 
55
54
  input[type=checkbox].micl-checkbox {
56
55
  --md-sys-checkbox-motion-duration: #{motion.$md-sys-motion-expressive-slow-effects-duration};
57
- --md-sys-ripple-background-color: var(--md-sys-color-primary);
58
56
  --checkbox-container-color: transparent;
59
57
  --checkbox-container-border-color: var(--md-sys-color-on-surface-variant);
60
58
 
@@ -126,7 +124,6 @@ input[type=checkbox].micl-checkbox {
126
124
  --checkbox-container-border-color var(--md-sys-checkbox-motion-duration);
127
125
 
128
126
  &.micl-checkbox--error {
129
- --md-sys-ripple-background-color: var(--md-sys-color-error);
130
127
  --checkbox-container-border-color: var(--md-sys-color-error);
131
128
  }
132
129
  &::after {
@@ -176,9 +173,7 @@ input[type=checkbox].micl-checkbox {
176
173
  }
177
174
  }
178
175
  &:not(:disabled) {
179
- --miclripple: 1;
180
-
181
- @include ripple.effect;
176
+ --micl-ripple: 1;
182
177
 
183
178
  cursor: pointer;
184
179
 
@@ -36,6 +36,7 @@
36
36
 
37
37
  dialog.micl-dialog,
38
38
  dialog.micl-dialog-fullscreen {
39
+ --statelayer-color: var(--md-sys-color-primary);
39
40
  --md-sys-dialog-motion-spatial: #{motion.$md-sys-motion-expressive-fast-spatial};
40
41
  --md-sys-dialog-motion-duration: #{motion.$md-sys-motion-expressive-fast-spatial-duration};
41
42
  --md-sys-dialog-motion-duration-reverse: #{motion.$md-sys-motion-expressive-fast-spatial-duration};
@@ -54,6 +55,8 @@ dialog.micl-dialog-fullscreen {
54
55
  border: none;
55
56
  border-radius: var(--md-sys-shape-corner-extra-large);
56
57
  background-color: var(--md-sys-color-surface-container-high);
58
+ background-image: linear-gradient(rgb(from var(--statelayer-color) r g b / var(--statelayer-opacity)));
59
+ background-repeat: no-repeat;
57
60
  box-shadow: var(--md-sys-elevation-level3);
58
61
  opacity: 0;
59
62
  overflow: hidden;
@@ -66,7 +69,8 @@ dialog.micl-dialog-fullscreen {
66
69
  transform var(--md-sys-dialog-motion-duration-reverse) linear,
67
70
  opacity var(--md-sys-dialog-motion-duration-reverse) motion.$md-sys-motion-easing-emphasized-decelerate,
68
71
  overlay var(--md-sys-dialog-motion-duration-reverse) linear allow-discrete,
69
- display var(--md-sys-dialog-motion-duration-reverse) linear allow-discrete;
72
+ display var(--md-sys-dialog-motion-duration-reverse) linear allow-discrete,
73
+ --statelayer-opacity var(--md-sys-dialog-motion-duration) linear;
70
74
 
71
75
  @starting-style {
72
76
  height: fit-content;
@@ -133,9 +137,9 @@ dialog.micl-dialog-fullscreen {
133
137
  background-color: rgba(0, 0, 0, 0);
134
138
  }
135
139
  }
136
- &:hover {
137
- background-color: color-mix(in srgb, var(--md-sys-color-surface-container-high), var(--md-sys-color-primary) var(--md-sys-state-hover-state-layer-opacity));
138
- }
140
+ // &:hover {
141
+ // --statelayer-opacity: var(--md-sys-state-hover-state-layer-opacity);
142
+ // }
139
143
 
140
144
  .micl-dialog__headline {
141
145
  display: flex;
@@ -213,9 +217,9 @@ dialog.micl-dialog-fullscreen {
213
217
  box-shadow: var(--md-sys-elevation-level0);
214
218
  timeline-scope: --headlineTimeline;
215
219
 
216
- &:hover {
217
- background-color: color-mix(in srgb, var(--md-sys-color-surface), var(--md-sys-color-primary) var(--md-sys-state-hover-state-layer-opacity));
218
- }
220
+ // &:hover {
221
+ // --statelayer-opacity: var(--md-sys-state-hover-state-layer-opacity);
222
+ // }
219
223
  .micl-dialog__headline {
220
224
  height: 56px;
221
225
  flex-direction: row;
@@ -20,7 +20,7 @@ Import the icon button styles into your project:
20
20
  ```
21
21
 
22
22
  ### JavaScript
23
- This component requires JavaScript for interactive features like the **ripple effect** and **toggle logic**:
23
+ This component requires JavaScript for interactive features like the **toggle logic**:
24
24
 
25
25
  ```JavaScript
26
26
  import micl from "material-inspired-component-library/dist/micl";
@@ -21,7 +21,6 @@
21
21
 
22
22
  @use '../../styles/elevation';
23
23
  @use '../../styles/motion';
24
- @use '../../styles/ripple';
25
24
  @use '../../styles/shapes';
26
25
  @use '../../styles/statelayer';
27
26
 
@@ -48,17 +47,25 @@ button.micl-iconbutton-outlined-xl {
48
47
  --md-sys-iconbutton-motion-effects: #{motion.$md-sys-motion-expressive-fast-spatial};
49
48
  --md-sys-iconbutton-motion-duration: #{motion.$md-sys-motion-expressive-fast-spatial-duration};
50
49
  --md-sys-iconbutton-motion-duration-reverse: #{motion.$md-sys-motion-expressive-fast-spatial-duration};
50
+ --micl-ripple: 1;
51
51
 
52
52
  padding: 0;
53
53
  border: none;
54
54
  border-radius: var(--md-sys-shape-corner-full);
55
55
  background-color: transparent;
56
+ background-image:
57
+ radial-gradient(circle at var(--micl-x, center) var(--micl-y, center), transparent 0%, rgb(from var(--statelayer-color) r g b / var(--statelayer-opacity)) 10%, transparent 10%),
58
+ linear-gradient(rgb(from var(--statelayer-color) r g b / var(--statelayer-opacity)));
59
+ background-repeat: no-repeat;
60
+ background-size: 10000%, 100%;
56
61
  color: var(--md-sys-color-on-surface-variant);
57
62
  cursor: pointer;
58
63
  font-variation-settings: 'FILL' 0;
59
64
  transition:
60
65
  border-radius var(--md-sys-iconbutton-motion-duration) var(--md-sys-iconbutton-motion-effects),
61
- font-variation-settings var(--md-sys-iconbutton-motion-duration) linear;
66
+ font-variation-settings var(--md-sys-iconbutton-motion-duration) linear,
67
+ background-size 3000ms,
68
+ --statelayer-opacity var(--md-sys-iconbutton-motion-duration) linear;
62
69
 
63
70
  &:disabled {
64
71
  background-color: rgb(from var(--md-sys-color-on-surface) r g b / 10%);
@@ -66,9 +73,15 @@ button.micl-iconbutton-outlined-xl {
66
73
  box-shadow: var(--md-sys-elevation-level0);
67
74
  cursor: default;
68
75
  }
69
- &:not(:disabled):focus-visible {
70
- outline: var(--md-sys-state-focus-indicator-thickness) solid var(--md-sys-color-secondary);
71
- outline-offset: 3px;
76
+ &:not(:disabled) {
77
+ &:focus-visible {
78
+ outline: var(--md-sys-state-focus-indicator-thickness) solid var(--md-sys-color-secondary);
79
+ outline-offset: 3px;
80
+ }
81
+ &:active {
82
+ background-size: 0%, 100%;
83
+ transition: background-size 0ms;
84
+ }
72
85
  }
73
86
  &:hover:not(:disabled),
74
87
  &.micl-button--toggle.micl-button--selected {
@@ -92,9 +105,6 @@ button.micl-iconbutton-outlined-xs {
92
105
  border-radius: var(--md-sys-shape-corner-large);
93
106
  }
94
107
  &:not(:disabled) {
95
- --miclripple: 1;
96
- @include ripple.effect;
97
-
98
108
  &:active {
99
109
  // border-radius: var(--md-sys-shape-corner-small);
100
110
  border-radius: var(--md-sys-shape-corner-medium);
@@ -146,9 +156,6 @@ button.micl-iconbutton-outlined-s {
146
156
  border-radius: var(--md-sys-shape-corner-large);
147
157
  }
148
158
  &:not(:disabled) {
149
- --miclripple: 1;
150
- @include ripple.effect;
151
-
152
159
  &:active {
153
160
  // border-radius: var(--md-sys-shape-corner-small);
154
161
  border-radius: var(--md-sys-shape-corner-medium);
@@ -197,9 +204,6 @@ button.micl-iconbutton-outlined-m {
197
204
  border-radius: var(--md-sys-shape-corner-large);
198
205
  }
199
206
  &:not(:disabled) {
200
- --miclripple: 1;
201
- @include ripple.effect;
202
-
203
207
  &:active {
204
208
  // border-radius: var(--md-sys-shape-corner-small);
205
209
  border-radius: var(--md-sys-shape-corner-medium);
@@ -237,9 +241,6 @@ button.micl-iconbutton-outlined-l {
237
241
  border-radius: var(--md-sys-shape-corner-extra-large);
238
242
  }
239
243
  &:not(:disabled) {
240
- --miclripple: 1;
241
- @include ripple.effect;
242
-
243
244
  &:active {
244
245
  border-radius: var(--md-sys-shape-corner-large);
245
246
  }
@@ -276,9 +277,6 @@ button.micl-iconbutton-outlined-xl {
276
277
  border-radius: var(--md-sys-shape-corner-extra-large);
277
278
  }
278
279
  &:not(:disabled) {
279
- --miclripple: 1;
280
- @include ripple.effect;
281
-
282
280
  &:active {
283
281
  border-radius: var(--md-sys-shape-corner-large);
284
282
  }
@@ -307,30 +305,22 @@ button.micl-iconbutton-standard-s,
307
305
  button.micl-iconbutton-standard-m,
308
306
  button.micl-iconbutton-standard-l,
309
307
  button.micl-iconbutton-standard-xl {
308
+ --statelayer-color: var(--md-sys-color-on-surface-variant);
309
+
310
310
  &:not(:disabled) {
311
311
  &.micl-button--toggle.micl-button--selected {
312
+ --statelayer-color: var(--md-sys-color-primary);
313
+
312
314
  color: var(--md-sys-color-primary);
313
315
  }
314
316
  &:hover {
315
- background-color: rgb(from var(--md-sys-color-on-surface-variant) r g b / var(--md-sys-state-hover-state-layer-opacity));
316
-
317
- &.micl-button--toggle.micl-button--selected {
318
- background-color: rgb(from var(--md-sys-color-primary) r g b / var(--md-sys-state-hover-state-layer-opacity));
319
- }
317
+ --statelayer-opacity: var(--md-sys-state-hover-state-layer-opacity);
320
318
  }
321
319
  &:focus-visible {
322
- background-color: rgb(from var(--md-sys-color-on-surface-variant) r g b / var(--md-sys-state-focus-state-layer-opacity));
323
-
324
- &.micl-button--toggle.micl-button--selected {
325
- background-color: rgb(from var(--md-sys-color-primary) r g b / var(--md-sys-state-focus-state-layer-opacity));
326
- }
320
+ --statelayer-opacity: var(--md-sys-state-focus-state-layer-opacity);
327
321
  }
328
322
  &:active {
329
- background-color: rgb(from var(--md-sys-color-on-surface-variant) r g b / var(--md-sys-state-pressed-state-layer-opacity));
330
-
331
- &.micl-button--toggle.micl-button--selected {
332
- background-color: rgb(from var(--md-sys-color-primary) r g b / var(--md-sys-state-pressed-state-layer-opacity));
333
- }
323
+ --statelayer-opacity: var(--md-sys-state-pressed-state-layer-opacity);
334
324
  }
335
325
  }
336
326
  }
@@ -341,34 +331,26 @@ button.micl-iconbutton-filled-s,
341
331
  button.micl-iconbutton-filled-m,
342
332
  button.micl-iconbutton-filled-l,
343
333
  button.micl-iconbutton-filled-xl {
334
+ --statelayer-color: var(--md-sys-color-on-primary);
335
+
344
336
  background-color: var(--md-sys-color-primary);
345
337
  color: var(--md-sys-color-on-primary);
346
338
 
347
339
  &:not(:disabled) {
348
340
  &.micl-button--toggle:not(.micl-button--selected) {
341
+ --statelayer-color: var(--md-sys-color-on-surface-variant);
342
+
349
343
  background-color: var(--md-sys-color-surface-container);
350
344
  color: var(--md-sys-color-on-surface-variant);
351
345
  }
352
346
  &:hover {
353
- background-color: color-mix(in srgb, var(--md-sys-color-primary), var(--md-sys-color-on-primary) var(--md-sys-state-hover-state-layer-opacity));
354
-
355
- &.micl-button--toggle:not(.micl-button--selected) {
356
- background-color: color-mix(in srgb, var(--md-sys-color-surface-container), var(--md-sys-color-on-surface-variant) var(--md-sys-state-hover-state-layer-opacity));
357
- }
347
+ --statelayer-opacity: var(--md-sys-state-hover-state-layer-opacity);
358
348
  }
359
349
  &:focus-visible {
360
- background-color: color-mix(in srgb, var(--md-sys-color-primary), var(--md-sys-color-on-primary) var(--md-sys-state-focus-state-layer-opacity));
361
-
362
- &.micl-button--toggle:not(.micl-button--selected) {
363
- background-color: color-mix(in srgb, var(--md-sys-color-surface-container), var(--md-sys-color-on-surface-variant) var(--md-sys-state-focus-state-layer-opacity));
364
- }
350
+ --statelayer-opacity: var(--md-sys-state-focus-state-layer-opacity);
365
351
  }
366
352
  &:active {
367
- background-color: color-mix(in srgb, var(--md-sys-color-primary), var(--md-sys-color-on-primary) var(--md-sys-state-pressed-state-layer-opacity));
368
-
369
- &.micl-button--toggle:not(.micl-button--selected) {
370
- background-color: color-mix(in srgb, var(--md-sys-color-surface-container), var(--md-sys-color-on-surface-variant) var(--md-sys-state-pressed-state-layer-opacity));
371
- }
353
+ --statelayer-opacity: var(--md-sys-state-pressed-state-layer-opacity);
372
354
  }
373
355
  }
374
356
  }
@@ -378,34 +360,26 @@ button.micl-iconbutton-tonal-s,
378
360
  button.micl-iconbutton-tonal-m,
379
361
  button.micl-iconbutton-tonal-l,
380
362
  button.micl-iconbutton-tonal-xl {
363
+ --statelayer-color: var(--md-sys-color-on-secondary-container);
364
+
381
365
  background-color: var(--md-sys-color-secondary-container);
382
366
  color: var(--md-sys-color-on-secondary-container);
383
367
 
384
368
  &:not(:disabled) {
385
369
  &.micl-button--toggle.micl-button--selected {
370
+ --statelayer-color: var(--md-sys-color-on-secondary);
371
+
386
372
  background-color: var(--md-sys-color-secondary);
387
373
  color: var(--md-sys-color-on-secondary);
388
374
  }
389
375
  &:hover {
390
- background-color: color-mix(in srgb, var(--md-sys-color-secondary-container), var(--md-sys-color-on-secondary-container) var(--md-sys-state-hover-state-layer-opacity));
391
-
392
- &.micl-button--toggle.micl-button--selected {
393
- background-color: color-mix(in srgb, var(--md-sys-color-secondary), var(--md-sys-color-on-secondary) var(--md-sys-state-hover-state-layer-opacity));
394
- }
376
+ --statelayer-opacity: var(--md-sys-state-hover-state-layer-opacity);
395
377
  }
396
378
  &:focus-visible {
397
- background-color: color-mix(in srgb, var(--md-sys-color-secondary-container), var(--md-sys-color-on-secondary-container) var(--md-sys-state-focus-state-layer-opacity));
398
-
399
- &.micl-button--toggle.micl-button--selected {
400
- background-color: color-mix(in srgb, var(--md-sys-color-secondary), var(--md-sys-color-on-secondary) var(--md-sys-state-focus-state-layer-opacity));
401
- }
379
+ --statelayer-opacity: var(--md-sys-state-focus-state-layer-opacity);
402
380
  }
403
381
  &:active {
404
- background-color: color-mix(in srgb, var(--md-sys-color-secondary-container), var(--md-sys-color-on-secondary-container) var(--md-sys-state-pressed-state-layer-opacity));
405
-
406
- &.micl-button--toggle.micl-button--selected {
407
- background-color: color-mix(in srgb, var(--md-sys-color-secondary), var(--md-sys-color-on-secondary) var(--md-sys-state-pressed-state-layer-opacity));
408
- }
382
+ --statelayer-opacity: var(--md-sys-state-pressed-state-layer-opacity);
409
383
  }
410
384
  }
411
385
  }
@@ -415,6 +389,8 @@ button.micl-iconbutton-outlined-s,
415
389
  button.micl-iconbutton-outlined-m,
416
390
  button.micl-iconbutton-outlined-l,
417
391
  button.micl-iconbutton-outlined-xl {
392
+ --statelayer-color: var(--md-sys-color-on-surface-variant);
393
+
418
394
  background-color: transparent;
419
395
  color: var(--md-sys-color-on-surface-variant);
420
396
 
@@ -440,29 +416,19 @@ button.micl-iconbutton-outlined-xl {
440
416
  }
441
417
  &:not(:disabled) {
442
418
  &.micl-button--toggle.micl-button--selected {
419
+ --statelayer-color: var(--md-sys-color-inverse-on-surface);
420
+
443
421
  background-color: var(--md-sys-color-inverse-surface);
444
422
  color: var(--md-sys-color-inverse-on-surface);
445
423
  }
446
424
  &:hover {
447
- background-color: rgb(from var(--md-sys-color-on-surface-variant) r g b / var(--md-sys-state-hover-state-layer-opacity));
448
-
449
- &.micl-button--toggle.micl-button--selected {
450
- background-color: color-mix(in srgb, var(--md-sys-color-inverse-surface), var(--md-sys-color-inverse-on-surface) var(--md-sys-state-hover-state-layer-opacity));
451
- }
425
+ --statelayer-opacity: var(--md-sys-state-hover-state-layer-opacity);
452
426
  }
453
427
  &:focus-visible {
454
- background-color: rgb(from var(--md-sys-color-on-surface-variant) r g b / var(--md-sys-state-focus-state-layer-opacity));
455
-
456
- &.micl-button--toggle.micl-button--selected {
457
- background-color: color-mix(in srgb, var(--md-sys-color-inverse-surface), var(--md-sys-color-inverse-on-surface) var(--md-sys-state-focus-state-layer-opacity));
458
- }
428
+ --statelayer-opacity: var(--md-sys-state-focus-state-layer-opacity);
459
429
  }
460
430
  &:active {
461
- background-color: rgb(from var(--md-sys-color-on-surface-variant) r g b / var(--md-sys-state-pressed-state-layer-opacity));
462
-
463
- &.micl-button--toggle.micl-button--selected {
464
- background-color: color-mix(in srgb, var(--md-sys-color-inverse-surface), var(--md-sys-color-inverse-on-surface) var(--md-sys-state-pressed-state-layer-opacity));
465
- }
431
+ --statelayer-opacity: var(--md-sys-state-pressed-state-layer-opacity);
466
432
  }
467
433
  }
468
434
  }
@@ -37,7 +37,12 @@ export default (() =>
37
37
  }
38
38
  }
39
39
  if (event.target.classList.contains('micl-button--toggle')) {
40
+ event.target.classList.add('micl-button--toggled');
40
41
  event.target.classList.toggle('micl-button--selected');
42
+ if (!!event.target.dataset.miclalt) {
43
+ [event.target.textContent, event.target.dataset.miclalt] =
44
+ [event.target.dataset.miclalt, event.target.textContent];
45
+ }
41
46
  }
42
47
  };
43
48