material-inspired-component-library 1.1.1 → 1.2.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 (57) hide show
  1. package/README.md +4 -0
  2. package/components/bottomsheet/index.scss +18 -16
  3. package/components/button/index.scss +6 -2
  4. package/components/card/index.scss +5 -2
  5. package/components/checkbox/index.scss +5 -4
  6. package/components/dialog/index.scss +28 -23
  7. package/components/iconbutton/index.scss +6 -2
  8. package/components/list/README.md +51 -21
  9. package/components/list/index.scss +122 -57
  10. package/components/list/index.ts +1 -1
  11. package/components/menu/index.scss +17 -13
  12. package/components/radio/index.scss +8 -5
  13. package/components/select/index.scss +1 -3
  14. package/components/sidesheet/index.scss +21 -19
  15. package/components/slider/README.md +8 -0
  16. package/components/slider/index.scss +140 -51
  17. package/components/slider/index.ts +67 -31
  18. package/components/switch/index.scss +11 -8
  19. package/components/textfield/index.scss +8 -5
  20. package/dist/bottomsheet.css +1 -1
  21. package/dist/button.css +1 -1
  22. package/dist/card.css +1 -1
  23. package/dist/checkbox.css +1 -1
  24. package/dist/dialog.css +1 -1
  25. package/dist/iconbutton.css +1 -1
  26. package/dist/list.css +1 -1
  27. package/dist/menu.css +1 -1
  28. package/dist/micl.css +1 -1
  29. package/dist/micl.js +1 -1
  30. package/dist/radio.css +1 -1
  31. package/dist/select.css +1 -1
  32. package/dist/sidesheet.css +1 -1
  33. package/dist/slider.css +1 -1
  34. package/dist/switch.css +1 -1
  35. package/dist/textfield.css +1 -1
  36. package/docs/accordion.html +1 -1
  37. package/docs/bottomsheet.html +2 -2
  38. package/docs/button.html +1 -1
  39. package/docs/card.html +1 -1
  40. package/docs/checkbox.html +1 -1
  41. package/docs/dialog.html +6 -6
  42. package/docs/divider.html +1 -1
  43. package/docs/iconbutton.html +1 -1
  44. package/docs/index.html +2 -2
  45. package/docs/list.html +51 -34
  46. package/docs/menu.html +15 -11
  47. package/docs/micl.css +1 -1
  48. package/docs/micl.js +1 -1
  49. package/docs/radio.html +1 -1
  50. package/docs/select.html +11 -9
  51. package/docs/sidesheet.html +1 -1
  52. package/docs/slider.html +57 -21
  53. package/docs/switch.html +1 -1
  54. package/docs/textfield.html +1 -1
  55. package/micl.ts +5 -1
  56. package/package.json +1 -1
  57. package/styles/layout.scss +74 -0
package/README.md CHANGED
@@ -97,6 +97,10 @@ The library currently consists of the following components:
97
97
 
98
98
  ## Change Log
99
99
 
100
+ ### 1.2.0 (17.08.2025)
101
+ **Features**
102
+ - **List**: Added support for switches inside list items.
103
+
100
104
  ### 1.1.0 (12.08.2025)
101
105
  **Features**
102
106
  - **Text field**: Added support for multi-line text fields.
@@ -30,6 +30,9 @@ dialog.micl-bottomsheet {
30
30
  --md-sys-bottomsheet-padding: 24px;
31
31
  --md-sys-bottomsheet-handle-width: 32px;
32
32
  --md-sys-bottomsheet-handle-height: 4px;
33
+ --md-sys-bottomsheet-motion-spatial: #{motion.$md-sys-motion-expressive-slow-spatial};
34
+ --md-sys-bottomsheet-motion-duration: #{motion.$md-sys-motion-expressive-slow-spatial-duration};
35
+ --md-sys-bottomsheet-motion-duration-reverse: #{motion.$md-sys-motion-expressive-default-spatial-duration};
33
36
 
34
37
  box-sizing: border-box;
35
38
  position: fixed;
@@ -51,10 +54,10 @@ dialog.micl-bottomsheet {
51
54
 
52
55
  &:not(.micl-bottomsheet--resizing) {
53
56
  transition:
54
- display var(--md-sys-motion-duration-medium1) allow-discrete,
55
- overlay var(--md-sys-motion-duration-medium1) allow-discrete,
56
- height var(--md-sys-motion-duration-medium1) linear(motion.$md-sys-motion-spring-default-spatial),
57
- opacity var(--md-sys-motion-duration-medium1) motion.$md-sys-motion-easing-emphasized-accelerate;
57
+ opacity var(--md-sys-bottomsheet-motion-duration-reverse) motion.$md-sys-motion-easing-emphasized-accelerate,
58
+ height var(--md-sys-bottomsheet-motion-duration-reverse) var(--md-sys-bottomsheet-motion-spatial),
59
+ overlay var(--md-sys-bottomsheet-motion-duration-reverse) linear allow-discrete,
60
+ display var(--md-sys-bottomsheet-motion-duration-reverse) linear allow-discrete;
58
61
  }
59
62
  &.micl-bottomsheet--resizing .micl-bottomsheet__headline {
60
63
  cursor: grabbing;
@@ -93,9 +96,9 @@ dialog.micl-bottomsheet {
93
96
  &::backdrop {
94
97
  background-color: rgba(0, 0, 0, 0);
95
98
  transition:
96
- display var(--md-sys-motion-duration-long2) linear allow-discrete,
97
- overlay var(--md-sys-motion-duration-long2) linear allow-discrete,
98
- background-color var(--md-sys-motion-duration-long2) linear;
99
+ overlay var(--md-sys-bottomsheet-motion-duration) linear allow-discrete,
100
+ display var(--md-sys-bottomsheet-motion-duration) linear allow-discrete,
101
+ background-color var(--md-sys-bottomsheet-motion-duration) linear;
99
102
  }
100
103
  &:popover-open,
101
104
  &[open] {
@@ -105,23 +108,22 @@ dialog.micl-bottomsheet {
105
108
 
106
109
  &:not(.micl-bottomsheet--resizing) {
107
110
  transition:
108
- display var(--md-sys-motion-duration-long2) linear allow-discrete,
109
- overlay var(--md-sys-motion-duration-long2) linear allow-discrete,
110
- height var(--md-sys-motion-duration-long2) linear(motion.$md-sys-motion-spring-default-spatial),
111
- opacity var(--md-sys-motion-duration-long2) motion.$md-sys-motion-easing-emphasized-decelerate;
111
+ opacity var(--md-sys-bottomsheet-motion-duration) motion.$md-sys-motion-easing-emphasized-decelerate,
112
+ height var(--md-sys-bottomsheet-motion-duration) var(--md-sys-bottomsheet-motion-spatial),
113
+ overlay var(--md-sys-bottomsheet-motion-duration) linear allow-discrete,
114
+ display var(--md-sys-bottomsheet-motion-duration) linear allow-discrete;
112
115
  }
113
116
  @starting-style {
114
117
  height: 0;
115
118
  opacity: 0;
116
119
  }
117
- &::backdrop {
118
- @starting-style {
119
- background-color: rgba(0, 0, 0, 0);
120
- }
121
- }
122
120
  }
123
121
  &[open]::backdrop {
124
122
  background-color: rgba(0, 0, 0, 0.2);
123
+
124
+ @starting-style {
125
+ background-color: rgba(0, 0, 0, 0);
126
+ }
125
127
  }
126
128
  }
127
129
 
@@ -51,10 +51,14 @@ button.micl-button-outlined-s,
51
51
  button.micl-button-outlined-m,
52
52
  button.micl-button-outlined-l,
53
53
  button.micl-button-outlined-xl {
54
+ --md-sys-button-motion-effects: #{motion.$md-sys-motion-expressive-fast-spatial};
55
+ --md-sys-button-motion-duration: #{motion.$md-sys-motion-expressive-fast-spatial-duration};
56
+ --md-sys-button-motion-duration-reverse: #{motion.$md-sys-motion-expressive-fast-spatial-duration};
57
+
54
58
  padding: 0;
55
59
  border: none;
56
60
  cursor: pointer;
57
- transition: border-radius var(--md-sys-motion-duration-extra-long4) linear(motion.$md-sys-motion-spring-fast-spatial);
61
+ transition: border-radius var(--md-sys-button-motion-duration) var(--md-sys-button-motion-effects);
58
62
 
59
63
  &:disabled {
60
64
  background-color: rgb(from var(--md-sys-color-on-surface) r g b / 10%);
@@ -68,7 +72,7 @@ button.micl-button-outlined-xl {
68
72
  }
69
73
  .micl-button__icon {
70
74
  font-variation-settings: 'FILL' 0;
71
- transition: font-variation-settings 600ms;
75
+ transition: font-variation-settings var(--md-sys-button-motion-duration) linear;
72
76
  }
73
77
  }
74
78
 
@@ -34,6 +34,9 @@
34
34
  .micl-card-elevated,
35
35
  .micl-card-filled,
36
36
  .micl-card-outlined {
37
+ --md-sys-card-motion-spatial: #{motion.$md-sys-motion-expressive-default-spatial};
38
+ --md-sys-card-motion-duration: #{motion.$md-sys-motion-expressive-default-spatial-duration};
39
+
37
40
  height: fit-content;
38
41
  margin: var(--md-sys-card-margin);
39
42
  border-radius: var(--md-sys-shape-corner-medium);
@@ -63,8 +66,8 @@
63
66
  height: 0;
64
67
  overflow: hidden;
65
68
  transition:
66
- content-visibility var(--md-sys-motion-duration-medium4) allow-discrete,
67
- height var(--md-sys-motion-duration-medium4) linear(motion.$md-sys-motion-spring-default-spatial);
69
+ height var(--md-sys-card-motion-duration) var(--md-sys-card-motion-spatial),
70
+ content-visibility var(--md-sys-card-motion-duration) linear allow-discrete;
68
71
  }
69
72
  &[open]::details-content {
70
73
  height: auto;
@@ -53,6 +53,7 @@
53
53
  }
54
54
 
55
55
  input[type=checkbox].micl-checkbox {
56
+ --md-sys-checkbox-motion-duration: #{motion.$md-sys-motion-expressive-slow-effects-duration};
56
57
  --md-sys-ripple-background-color: var(--md-sys-color-primary);
57
58
  --checkbox-container-color: transparent;
58
59
  --checkbox-container-border-color: var(--md-sys-color-on-surface-variant);
@@ -119,10 +120,10 @@ input[type=checkbox].micl-checkbox {
119
120
  var(--md-sys-checkbox-container-size) var(--md-sys-checkbox-container-size);
120
121
  clip-path: circle(var(--md-sys-checkbox-state-layer-radius));
121
122
  transition:
122
- --checkbox-outline-color var(--md-sys-motion-duration-medium2),
123
- --checkbox-state-layer-color var(--md-sys-motion-duration-medium2),
124
- --checkbox-container-color var(--md-sys-motion-duration-medium2) var(--md-sys-motion-duration-short4),
125
- --checkbox-container-border-color var(--md-sys-motion-duration-medium2);
123
+ --checkbox-outline-color var(--md-sys-checkbox-motion-duration),
124
+ --checkbox-state-layer-color var(--md-sys-checkbox-motion-duration),
125
+ --checkbox-container-color var(--md-sys-checkbox-motion-duration) var(--md-sys-motion-duration-short4),
126
+ --checkbox-container-border-color var(--md-sys-checkbox-motion-duration);
126
127
 
127
128
  &.micl-checkbox--error {
128
129
  --md-sys-ripple-background-color: var(--md-sys-color-error);
@@ -36,6 +36,10 @@
36
36
 
37
37
  dialog.micl-dialog,
38
38
  dialog.micl-dialog-fullscreen {
39
+ --md-sys-dialog-motion-spatial: #{motion.$md-sys-motion-expressive-fast-spatial};
40
+ --md-sys-dialog-motion-duration: #{motion.$md-sys-motion-expressive-fast-spatial-duration};
41
+ --md-sys-dialog-motion-duration-reverse: #{motion.$md-sys-motion-expressive-fast-spatial-duration};
42
+
39
43
  box-sizing: border-box;
40
44
  display: none;
41
45
  flex-direction: column;
@@ -55,12 +59,14 @@ dialog.micl-dialog-fullscreen {
55
59
  overflow: hidden;
56
60
  interpolate-size: allow-keywords;
57
61
  transition:
58
- display var(--md-sys-motion-duration-medium1) allow-discrete,
59
- overlay var(--md-sys-motion-duration-medium1) allow-discrete,
60
- inset-block-start var(--md-sys-motion-duration-medium1) linear,
61
- inset-inline-start var(--md-sys-motion-duration-medium1) linear,
62
- opacity var(--md-sys-motion-duration-medium1) motion.$md-sys-motion-easing-emphasized-decelerate,
63
- transform var(--md-sys-motion-duration-medium1) linear;
62
+ inset-block-start var(--md-sys-dialog-motion-duration-reverse) linear,
63
+ inset-inline-start var(--md-sys-dialog-motion-duration-reverse) linear,
64
+ width var(--md-sys-dialog-motion-duration-reverse) linear,
65
+ height var(--md-sys-dialog-motion-duration-reverse) linear,
66
+ transform var(--md-sys-dialog-motion-duration-reverse) linear,
67
+ opacity var(--md-sys-dialog-motion-duration-reverse) motion.$md-sys-motion-easing-emphasized-decelerate,
68
+ overlay var(--md-sys-dialog-motion-duration-reverse) linear allow-discrete,
69
+ display var(--md-sys-dialog-motion-duration-reverse) linear allow-discrete;
64
70
 
65
71
  @starting-style {
66
72
  height: fit-content;
@@ -79,14 +85,14 @@ dialog.micl-dialog-fullscreen {
79
85
  opacity: 1;
80
86
  transform: translate(calc(var(--md-sys-dialog-dir-factor) * -50%), -50%) scale(100%);
81
87
  transition:
82
- display var(--md-sys-motion-duration-medium2) linear allow-discrete,
83
- overlay var(--md-sys-motion-duration-medium2) linear allow-discrete,
84
- inset-block-start var(--md-sys-motion-duration-medium2) linear,
85
- inset-inline-start var(--md-sys-motion-duration-medium2) linear,
86
- width var(--md-sys-motion-duration-medium2) linear,
87
- height var(--md-sys-motion-duration-medium2) linear,
88
- opacity var(--md-sys-motion-duration-medium2) motion.$md-sys-motion-easing-emphasized-accelerate,
89
- transform var(--md-sys-motion-duration-medium2) linear;
88
+ inset-block-start var(--md-sys-dialog-motion-duration) linear,
89
+ inset-inline-start var(--md-sys-dialog-motion-duration) linear,
90
+ width var(--md-sys-dialog-motion-duration) linear,
91
+ height var(--md-sys-dialog-motion-duration) linear,
92
+ transform var(--md-sys-dialog-motion-duration) linear,
93
+ opacity var(--md-sys-dialog-motion-duration) motion.$md-sys-motion-easing-emphasized-accelerate,
94
+ overlay var(--md-sys-dialog-motion-duration) linear allow-discrete,
95
+ display var(--md-sys-dialog-motion-duration) linear allow-discrete;
90
96
 
91
97
  @starting-style {
92
98
  inset-block-start: anchor(start);
@@ -94,11 +100,6 @@ dialog.micl-dialog-fullscreen {
94
100
  opacity: 0;
95
101
  transform: translate(calc(var(--md-sys-dialog-dir-factor) * -50%), -50%) scale(50%);
96
102
  }
97
- &::backdrop {
98
- @starting-style {
99
- background-color: rgba(0, 0, 0, 0);
100
- }
101
- }
102
103
  }
103
104
  &:not([popover]) {
104
105
  inset-block-start: 50%;
@@ -121,12 +122,16 @@ dialog.micl-dialog-fullscreen {
121
122
  &::backdrop {
122
123
  background-color: rgba(0, 0, 0, 0);
123
124
  transition:
124
- display var(--md-sys-motion-duration-long2) linear allow-discrete,
125
- overlay var(--md-sys-motion-duration-long2) linear allow-discrete,
126
- background-color var(--md-sys-motion-duration-long2) linear;
125
+ background-color var(--md-sys-dialog-motion-duration) linear,
126
+ overlay var(--md-sys-dialog-motion-duration) linear allow-discrete,
127
+ display var(--md-sys-dialog-motion-duration) linear allow-discrete;
127
128
  }
128
129
  &[open]::backdrop {
129
130
  background-color: rgba(0, 0, 0, 0.2);
131
+
132
+ @starting-style {
133
+ background-color: rgba(0, 0, 0, 0);
134
+ }
130
135
  }
131
136
  &:hover {
132
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));
@@ -194,7 +199,7 @@ dialog.micl-dialog-fullscreen {
194
199
  column-gap: 8px;
195
200
  padding: var(--md-sys-dialog-padding);
196
201
  opacity: 1;
197
- transition: opacity var(--md-sys-motion-duration-medium1) linear;
202
+ transition: opacity var(--md-sys-dialog-motion-duration) linear;
198
203
  }
199
204
  }
200
205
 
@@ -45,6 +45,10 @@ button.micl-iconbutton-outlined-s,
45
45
  button.micl-iconbutton-outlined-m,
46
46
  button.micl-iconbutton-outlined-l,
47
47
  button.micl-iconbutton-outlined-xl {
48
+ --md-sys-iconbutton-motion-effects: #{motion.$md-sys-motion-expressive-fast-spatial};
49
+ --md-sys-iconbutton-motion-duration: #{motion.$md-sys-motion-expressive-fast-spatial-duration};
50
+ --md-sys-iconbutton-motion-duration-reverse: #{motion.$md-sys-motion-expressive-fast-spatial-duration};
51
+
48
52
  padding: 0;
49
53
  border: none;
50
54
  border-radius: var(--md-sys-shape-corner-full);
@@ -53,8 +57,8 @@ button.micl-iconbutton-outlined-xl {
53
57
  cursor: pointer;
54
58
  font-variation-settings: 'FILL' 0;
55
59
  transition:
56
- font-variation-settings 600ms,
57
- border-radius var(--md-sys-motion-duration-extra-long4) linear(motion.$md-sys-motion-spring-fast-spatial);
60
+ 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;
58
62
 
59
63
  &:disabled {
60
64
  background-color: rgb(from var(--md-sys-color-on-surface) r g b / 10%);
@@ -59,6 +59,20 @@ The List component offers three CSS classes to control the height and content ca
59
59
  </ul>
60
60
  ```
61
61
 
62
+ Use the anchor element to convert a list item into a hyperlink:
63
+
64
+ ```HTML
65
+ <ul class="micl-list" role="listbox">
66
+ <li class="micl-list-item-one" tabindex="0">
67
+ <a href="https://www.thetimes.com" tabindex="-1">
68
+ <span class="micl-list-item__text">
69
+ <span class="micl-list-item__headline">The Times</span>
70
+ </span>
71
+ </a>
72
+ </li>
73
+ </ul>
74
+ ```
75
+
62
76
  Adding the `micl-list-item--disabled` class to the `<li>` element causes the list item to be displayed in a disabled state.
63
77
 
64
78
  Add the `micl-list__divider` class to the `<ul>` element to automatically place a divider between each list item.
@@ -77,10 +91,10 @@ The text content of a list item can be preceded by various media elements:
77
91
  </li>
78
92
  ```
79
93
 
80
- - **Avatar**: Use `micl-list-item__avatar` with an avatar image (or icon).
94
+ - **Avatar**: Use `micl-list-item__avatar` with a text.
81
95
  ```HTML
82
96
  <li class="micl-list-item-two" tabindex="0">
83
- <span class="material-symbols-outlined micl-list-item__avatar">account_circle</span>
97
+ <span class="micl-list-item__avatar">BJ</span>
84
98
  <span class="micl-list-item__text">
85
99
  <span class="micl-list-item__headline">Bill Jones</span>
86
100
  <span class="micl-list-item__supporting-text">bill.jones@email.com</span>
@@ -111,35 +125,51 @@ The text content of a list item can be preceded by various media elements:
111
125
  ```
112
126
 
113
127
  ### Trailing Content
114
- The text of a list item may be followed by a trailing text or other elements (like a checkbox).
128
+ The text of a list item may be followed by a trailing text, imagery or other elements (like a checkbox).
115
129
 
116
- ```HTML
117
- <li class="micl-list-item-one" tabindex="0">
118
- <span class="micl-list-item__text">
119
- <span class="micl-list-item__headline">To-do items</span>
120
- </span>
121
- <span class="micl-list-item__trailing-text">100+</span>
122
- </li>
123
- ````
130
+ - **Icon**: Use `micl-list-item__icon` with a (Material Symbols) icon.
131
+ ```HTML
132
+ <li class="micl-list-item-two" tabindex="0">
133
+ <span class="micl-list-item__text">
134
+ <span class="micl-list-item__headline">Date and time</span>
135
+ <span class="micl-list-item__supporting-text">Timezones, calendar display</span>
136
+ </span>
137
+ <span class="material-symbols-outlined micl-list-item__icon" aria-hidden="true">more_horiz</span>
138
+ </li>
139
+ ```
140
+
141
+ - **Text**: Use `micl-list-item__trailing-text` with a short text.
142
+ ```HTML
143
+ <li class="micl-list-item-one" tabindex="0">
144
+ <span class="micl-list-item__text">
145
+ <span class="micl-list-item__headline">To-do items</span>
146
+ </span>
147
+ <span class="micl-list-item__trailing-text">100+</span>
148
+ </li>
149
+ ````
124
150
 
125
151
  ### Selecting List Items
126
- To enable selection of list items, integrate a checkbox component within the `<li>` element. The `micl-list-item__text` should typically wrap the headline and supporting text, acting as the label for the checkbox.
152
+ To enable selection of list items, integrate a checkbox or switch component within the `<li>` element.
127
153
 
128
154
  ```HTML
129
155
  <ul class="micl-list micl-list__divider" role="listbox">
130
156
  <li class="micl-list-item-two" tabindex="0">
131
- <label for="checkbox1" class="micl-list-item__text">
132
- <span class="micl-list-item__headline">Blue car</span>
133
- <span class="micl-list-item__supporting-text">A blue car with four wheels.</span>
134
- </label>
135
- <input type="checkbox" id="checkbox1" class="micl-checkbox" value="cb1" tabindex="-1">
157
+ <label>
158
+ <span class="micl-list-item__text">
159
+ <span class="micl-list-item__headline">Blue car</span>
160
+ <span class="micl-list-item__supporting-text">A blue car with four wheels.</span>
161
+ </label>
162
+ <input type="checkbox" id="mycheckbox" class="micl-checkbox" value="cb1" tabindex="-1">
163
+ </span>
136
164
  </li>
137
165
  <li class="micl-list-item-two" tabindex="0">
138
- <label for="checkbox2" class="micl-list-item__text">
139
- <span class="micl-list-item__headline">Red car</span>
140
- <span class="micl-list-item__supporting-text">A red car with tinted windows.</span>
166
+ <label>
167
+ <span class="micl-list-item__text">
168
+ <span class="micl-list-item__headline">Red car</span>
169
+ <span class="micl-list-item__supporting-text">A red car with tinted windows.</span>
170
+ </label>
171
+ <input type="checkbox" id="checkbox2" class="micl-switch" value="cb2" tabindex="-1">
141
172
  </label>
142
- <input type="checkbox" id="checkbox2" class="micl-checkbox" value="cb2" tabindex="-1">
143
173
  </li>
144
174
  </ul>
145
175
  ```