material-inspired-component-library 8.1.0 → 9.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 (284) hide show
  1. package/README.md +106 -18
  2. package/components/README.md +1 -1
  3. package/components/accordion/README.md +6 -6
  4. package/components/alert/README.md +10 -10
  5. package/components/alert/index.scss +27 -52
  6. package/components/appbar/README.md +19 -6
  7. package/components/appbar/index.scss +40 -44
  8. package/components/badge/README.md +12 -10
  9. package/components/badge/index.scss +21 -25
  10. package/components/bottomsheet/README.md +26 -1
  11. package/components/bottomsheet/index.scss +58 -44
  12. package/components/button/README.md +70 -10
  13. package/components/button/_shared.scss +210 -0
  14. package/components/button/index.scss +75 -389
  15. package/components/card/README.md +97 -85
  16. package/components/card/index.scss +46 -65
  17. package/components/checkbox/README.md +25 -14
  18. package/{tools/shapes/check.mjs → components/checkbox/_label.scss} +37 -42
  19. package/components/checkbox/index.scss +66 -66
  20. package/components/chip/README.md +186 -0
  21. package/components/chip/index.scss +285 -0
  22. package/components/datepicker/README.md +79 -0
  23. package/components/datepicker/index.scss +346 -315
  24. package/components/dialog/README.md +20 -10
  25. package/components/dialog/index.scss +55 -66
  26. package/components/divider/README.md +16 -15
  27. package/components/divider/index.scss +9 -25
  28. package/components/iconbutton/README.md +63 -12
  29. package/components/iconbutton/index.scss +142 -303
  30. package/components/list/README.md +89 -156
  31. package/components/list/index.scss +34 -36
  32. package/components/menu/README.md +81 -155
  33. package/components/menu/index.scss +52 -58
  34. package/components/navigationbar/README.md +108 -0
  35. package/components/navigationbar/index.scss +185 -0
  36. package/components/navigationrail/README.md +62 -37
  37. package/components/navigationrail/_navitem.scss +96 -0
  38. package/components/navigationrail/index.scss +78 -132
  39. package/components/progressindicator/README.md +83 -47
  40. package/components/progressindicator/index.scss +622 -172
  41. package/components/radio/README.md +11 -9
  42. package/components/radio/index.scss +36 -33
  43. package/components/select/README.md +12 -7
  44. package/components/select/index.scss +26 -34
  45. package/components/shapes/README.md +3 -3
  46. package/components/shapes/index.scss +0 -1
  47. package/components/sidesheet/README.md +21 -9
  48. package/components/sidesheet/index.scss +38 -46
  49. package/components/slider/README.md +21 -0
  50. package/components/slider/index.scss +108 -139
  51. package/components/snackbar/README.md +32 -35
  52. package/components/snackbar/index.scss +10 -22
  53. package/components/stepper/README.md +14 -7
  54. package/components/stepper/index.scss +58 -39
  55. package/components/switch/README.md +22 -15
  56. package/components/switch/index.scss +68 -60
  57. package/components/textfield/README.md +48 -5
  58. package/components/textfield/index.scss +192 -248
  59. package/components/timepicker/README.md +53 -23
  60. package/components/timepicker/index.scss +110 -128
  61. package/dist/alert.css +1 -1
  62. package/dist/alert.js +1 -1
  63. package/dist/appbar.css +1 -1
  64. package/dist/appbar.js +1 -1
  65. package/dist/badge.css +1 -1
  66. package/dist/badge.js +1 -1
  67. package/dist/base.css +1 -0
  68. package/dist/base.js +1 -0
  69. package/dist/bottomsheet.css +1 -1
  70. package/dist/bottomsheet.js +1 -1
  71. package/dist/button.css +1 -1
  72. package/dist/button.js +1 -1
  73. package/dist/card.css +1 -1
  74. package/dist/card.js +1 -1
  75. package/dist/checkbox.css +1 -1
  76. package/dist/checkbox.js +1 -1
  77. package/dist/chip.css +1 -0
  78. package/dist/chip.js +1 -0
  79. package/dist/components/button/index.d.ts +1 -1
  80. package/dist/components/iconbutton/index.d.ts +2 -7
  81. package/dist/components/slider/index.d.ts +1 -1
  82. package/dist/components/textfield/index.d.ts +2 -2
  83. package/dist/datepicker.css +1 -1
  84. package/dist/datepicker.js +1 -1
  85. package/dist/dialog.css +1 -1
  86. package/dist/dialog.js +1 -1
  87. package/dist/divider.css +1 -1
  88. package/dist/divider.js +1 -1
  89. package/dist/field.css +1 -0
  90. package/dist/field.js +1 -0
  91. package/dist/foundations/form/index.js +1 -1
  92. package/dist/foundations/runtime.d.ts +15 -0
  93. package/dist/foundations/runtime.js +1 -0
  94. package/dist/iconbutton.css +1 -1
  95. package/dist/iconbutton.js +1 -1
  96. package/dist/layout.css +1 -1
  97. package/dist/layout.js +1 -1
  98. package/dist/list.css +1 -1
  99. package/dist/list.js +1 -1
  100. package/dist/menu.css +1 -1
  101. package/dist/menu.js +1 -1
  102. package/dist/micl.css +1 -1
  103. package/dist/micl.d.ts +14 -5
  104. package/dist/micl.js +1 -1
  105. package/dist/navigationbar.css +1 -0
  106. package/dist/navigationbar.js +1 -0
  107. package/dist/navigationrail.css +1 -1
  108. package/dist/navigationrail.js +1 -1
  109. package/dist/progressindicator.css +1 -1
  110. package/dist/progressindicator.js +1 -1
  111. package/dist/radio.css +1 -1
  112. package/dist/radio.js +1 -1
  113. package/dist/scrollbar.js +1 -1
  114. package/dist/select.css +1 -1
  115. package/dist/select.js +1 -1
  116. package/dist/shapes.css +1 -1
  117. package/dist/shapes.js +1 -1
  118. package/dist/sidesheet.css +1 -1
  119. package/dist/sidesheet.js +1 -1
  120. package/dist/slider.css +1 -1
  121. package/dist/slider.js +1 -1
  122. package/dist/snackbar.css +1 -1
  123. package/dist/snackbar.js +1 -1
  124. package/dist/stepper.css +1 -1
  125. package/dist/stepper.js +1 -1
  126. package/dist/switch.css +1 -1
  127. package/dist/switch.js +1 -1
  128. package/dist/textfield.css +1 -1
  129. package/dist/textfield.js +1 -1
  130. package/dist/timepicker.css +1 -1
  131. package/dist/timepicker.js +1 -1
  132. package/foundations/_index.scss +35 -0
  133. package/foundations/{index.scss → base/index.scss} +21 -56
  134. package/foundations/field/index.scss +37 -0
  135. package/foundations/layout/index.scss +64 -65
  136. package/package.json +23 -9
  137. package/styles/statelayer.scss +20 -5
  138. package/styles.scss +5 -2
  139. package/.claude/settings.local.json +0 -14
  140. package/.editorconfig +0 -12
  141. package/.gitattributes +0 -9
  142. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -35
  143. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  144. package/CLAUDE.md +0 -53
  145. package/CODE_OF_CONDUCT.md +0 -128
  146. package/components/bottomsheet/index.ts +0 -153
  147. package/components/button/index.ts +0 -79
  148. package/components/checkbox/index.ts +0 -148
  149. package/components/datepicker/index.ts +0 -693
  150. package/components/iconbutton/index.ts +0 -77
  151. package/components/list/index.ts +0 -138
  152. package/components/menu/index.ts +0 -145
  153. package/components/navigationrail/index.ts +0 -87
  154. package/components/progressindicator/index.ts +0 -77
  155. package/components/slider/index.ts +0 -149
  156. package/components/snackbar/index.ts +0 -118
  157. package/components/stepper/index.ts +0 -248
  158. package/components/textfield/index.ts +0 -188
  159. package/components/timepicker/index.ts +0 -413
  160. package/dist/components/progressindicator/index.d.ts +0 -6
  161. package/dist/foundations.css +0 -1
  162. package/dist/foundations.js +0 -1
  163. package/docs/accordion.html +0 -344
  164. package/docs/alert.html +0 -177
  165. package/docs/bottomsheet.html +0 -240
  166. package/docs/button.html +0 -290
  167. package/docs/card-awards.webp +0 -0
  168. package/docs/card-cabinet.webp +0 -0
  169. package/docs/card-city.webp +0 -0
  170. package/docs/card-fingerprint.webp +0 -0
  171. package/docs/card-holiday.webp +0 -0
  172. package/docs/card-names.webp +0 -0
  173. package/docs/card.html +0 -159
  174. package/docs/checkbox.html +0 -147
  175. package/docs/datepicker.html +0 -274
  176. package/docs/dialog.html +0 -195
  177. package/docs/divider.html +0 -139
  178. package/docs/docs.css +0 -26
  179. package/docs/docs.js +0 -139
  180. package/docs/iconbutton.html +0 -329
  181. package/docs/index.html +0 -431
  182. package/docs/list.html +0 -310
  183. package/docs/menu.html +0 -574
  184. package/docs/micl.css +0 -1
  185. package/docs/micl.js +0 -1
  186. package/docs/navigationrail.html +0 -138
  187. package/docs/progressindicator.html +0 -288
  188. package/docs/radio.html +0 -123
  189. package/docs/select.html +0 -337
  190. package/docs/shapes.css +0 -1
  191. package/docs/shapes.html +0 -159
  192. package/docs/shapes.js +0 -1
  193. package/docs/sidesheet.html +0 -149
  194. package/docs/slider.html +0 -141
  195. package/docs/snackbar.html +0 -102
  196. package/docs/stepper.html +0 -319
  197. package/docs/switch.html +0 -196
  198. package/docs/textfield.html +0 -208
  199. package/docs/themes/airblue/dark-hc.css +0 -51
  200. package/docs/themes/airblue/dark-mc.css +0 -51
  201. package/docs/themes/airblue/dark.css +0 -51
  202. package/docs/themes/airblue/light-hc.css +0 -51
  203. package/docs/themes/airblue/light-mc.css +0 -51
  204. package/docs/themes/airblue/light.css +0 -51
  205. package/docs/themes/airblue/theme.css +0 -306
  206. package/docs/themes/barnred/dark-hc.css +0 -51
  207. package/docs/themes/barnred/dark-mc.css +0 -51
  208. package/docs/themes/barnred/dark.css +0 -51
  209. package/docs/themes/barnred/light-hc.css +0 -51
  210. package/docs/themes/barnred/light-mc.css +0 -51
  211. package/docs/themes/barnred/light.css +0 -51
  212. package/docs/themes/barnred/theme.css +0 -306
  213. package/docs/themes/citrine/dark-hc.css +0 -51
  214. package/docs/themes/citrine/dark-mc.css +0 -51
  215. package/docs/themes/citrine/dark.css +0 -51
  216. package/docs/themes/citrine/light-hc.css +0 -51
  217. package/docs/themes/citrine/light-mc.css +0 -51
  218. package/docs/themes/citrine/light.css +0 -51
  219. package/docs/themes/citrine/theme.css +0 -306
  220. package/docs/themes/gray/dark-hc.css +0 -51
  221. package/docs/themes/gray/dark-mc.css +0 -51
  222. package/docs/themes/gray/dark.css +0 -51
  223. package/docs/themes/gray/light-hc.css +0 -51
  224. package/docs/themes/gray/light-mc.css +0 -51
  225. package/docs/themes/gray/light.css +0 -51
  226. package/docs/themes/gray/theme.css +0 -306
  227. package/docs/themes/greenery/dark-hc.css +0 -51
  228. package/docs/themes/greenery/dark-mc.css +0 -51
  229. package/docs/themes/greenery/dark.css +0 -51
  230. package/docs/themes/greenery/light-hc.css +0 -51
  231. package/docs/themes/greenery/light-mc.css +0 -51
  232. package/docs/themes/greenery/light.css +0 -51
  233. package/docs/themes/greenery/theme.css +0 -306
  234. package/docs/themes/hermana/dark-hc.css +0 -51
  235. package/docs/themes/hermana/dark-mc.css +0 -51
  236. package/docs/themes/hermana/dark.css +0 -51
  237. package/docs/themes/hermana/light-hc.css +0 -51
  238. package/docs/themes/hermana/light-mc.css +0 -51
  239. package/docs/themes/hermana/light.css +0 -51
  240. package/docs/themes/hermana/theme.css +0 -306
  241. package/docs/themes/illuminating/dark-hc.css +0 -51
  242. package/docs/themes/illuminating/dark-mc.css +0 -51
  243. package/docs/themes/illuminating/dark.css +0 -51
  244. package/docs/themes/illuminating/light-hc.css +0 -51
  245. package/docs/themes/illuminating/light-mc.css +0 -51
  246. package/docs/themes/illuminating/light.css +0 -51
  247. package/docs/themes/illuminating/theme.css +0 -306
  248. package/docs/themes/magenta/dark-hc.css +0 -51
  249. package/docs/themes/magenta/dark-mc.css +0 -51
  250. package/docs/themes/magenta/dark.css +0 -51
  251. package/docs/themes/magenta/light-hc.css +0 -51
  252. package/docs/themes/magenta/light-mc.css +0 -51
  253. package/docs/themes/magenta/light.css +0 -51
  254. package/docs/themes/magenta/theme.css +0 -306
  255. package/docs/themes/mocha/dark-hc.css +0 -51
  256. package/docs/themes/mocha/dark-mc.css +0 -51
  257. package/docs/themes/mocha/dark.css +0 -51
  258. package/docs/themes/mocha/light-hc.css +0 -51
  259. package/docs/themes/mocha/light-mc.css +0 -51
  260. package/docs/themes/mocha/light.css +0 -51
  261. package/docs/themes/mocha/theme.css +0 -306
  262. package/docs/themes/olivegreen/dark-hc.css +0 -51
  263. package/docs/themes/olivegreen/dark-mc.css +0 -51
  264. package/docs/themes/olivegreen/dark.css +0 -51
  265. package/docs/themes/olivegreen/light-hc.css +0 -51
  266. package/docs/themes/olivegreen/light-mc.css +0 -51
  267. package/docs/themes/olivegreen/light.css +0 -51
  268. package/docs/themes/olivegreen/theme.css +0 -306
  269. package/docs/themes/peri/dark-hc.css +0 -51
  270. package/docs/themes/peri/dark-mc.css +0 -51
  271. package/docs/themes/peri/dark.css +0 -51
  272. package/docs/themes/peri/light-hc.css +0 -51
  273. package/docs/themes/peri/light-mc.css +0 -51
  274. package/docs/themes/peri/light.css +0 -51
  275. package/docs/themes/peri/theme.css +0 -306
  276. package/docs/timepicker.html +0 -160
  277. package/foundations/form/index.ts +0 -174
  278. package/foundations/layout/README.md +0 -127
  279. package/intl.d.ts +0 -9
  280. package/micl.ts +0 -221
  281. package/styles/README.md +0 -196
  282. package/tools/shapes/generate.mjs +0 -828
  283. package/tsconfig.json +0 -116
  284. package/webpack.config.js +0 -104
@@ -19,7 +19,6 @@
19
19
  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
20
  // SOFTWARE.
21
21
 
22
- @use '../../foundations';
23
22
  @use '../../styles/motion';
24
23
  @use '../../styles/shape';
25
24
  @use '../../styles/statelayer';
@@ -35,15 +34,10 @@
35
34
  @include statelayer.property;
36
35
 
37
36
  @include typography.scale('headline-large');
37
+ @include typography.scale('title-large');
38
38
  @include typography.scale('body-large');
39
39
  @include typography.scale('label-large');
40
40
 
41
- :root {
42
- --md-comp-date-picker-docked-container-width: 360px;
43
- --md-comp-date-picker-modal-container-width: 360px;
44
- --md-comp-date-input-modal-container-width: 328px;
45
- }
46
-
47
41
  %view-transition-base {
48
42
  block-size: fit-content;
49
43
  opacity: 1;
@@ -62,6 +56,28 @@
62
56
  }
63
57
  }
64
58
 
59
+ // State layer background shared by the date cells and the year chips.
60
+ %statelayer-background {
61
+ --statelayer-color: var(--md-sys-color-on-surface-variant);
62
+ --statelayer-opacity: 0%;
63
+
64
+ background-image: linear-gradient(rgb(from var(--statelayer-color) r g b / var(--statelayer-opacity)));
65
+ background-repeat: no-repeat;
66
+ background-size: 100%;
67
+ background-clip: content-box;
68
+ transition: --statelayer-opacity var(--md-comp-date-picker-button-motion-duration) linear;
69
+
70
+ &:hover {
71
+ --statelayer-opacity: var(--md-sys-state-hover-state-layer-opacity);
72
+ }
73
+ &:focus-visible {
74
+ --statelayer-opacity: var(--md-sys-state-focus-state-layer-opacity);
75
+ }
76
+ &:active {
77
+ --statelayer-opacity: var(--md-sys-state-pressed-state-layer-opacity);
78
+ }
79
+ }
80
+
65
81
  dialog.micl-dialog.micl-datepicker {
66
82
  --md-comp-date-picker-motion-spatial: #{motion.$md-sys-motion-expressive-fast-effects};
67
83
  --md-comp-date-picker-motion-spatial-duration: #{motion.$md-sys-motion-expressive-default-spatial-duration};
@@ -69,6 +85,9 @@ dialog.micl-dialog.micl-datepicker {
69
85
  --md-comp-date-picker-motion-duration-reverse: #{motion.$md-sys-motion-expressive-fast-effects-duration};
70
86
  --md-comp-date-picker-button-motion-duration: #{motion.$md-sys-motion-expressive-fast-spatial-duration};
71
87
 
88
+ // Internal alias: the target size is referenced from many descendants.
89
+ --_target: var(--md-sys-target-size, 48px);
90
+
72
91
  inline-size: var(--md-comp-date-picker-modal-container-width, 360px);
73
92
 
74
93
  &:has(.micl-datepicker__input:not(.micl-datepicker__view-hidden)) {
@@ -88,96 +107,46 @@ dialog.micl-dialog.micl-datepicker {
88
107
  .micl-dialog__headline {
89
108
  display: grid;
90
109
  gap: 0;
91
- grid-template-columns: max-content 1fr var(--md-sys-target-size, 48px);
110
+ grid-template-columns: max-content 1fr var(--_target);
92
111
  grid-template-areas:
93
- "datepicker-supporting datepicker-supporting datepicker-supporting"
94
- "datepicker-close datepicker-action datepicker-action"
95
- "datepicker-close datepicker-headline datepicker-mode"
96
- "datepicker-divider datepicker-divider datepicker-divider"
97
- "datepicker-year-selector datepicker-year-selector datepicker-month-selector";
112
+ "sup sup sup"
113
+ "close act act"
114
+ "close head mode"
115
+ "div div div"
116
+ "ysel ysel msel";
98
117
  padding-inline-end: 12px;
99
118
  padding-block: 16px 4px;
100
119
 
101
- h1, h2, h3, h4, h5, h6, .micl-heading {
120
+ :is(h1, h2, h3, h4, h5, h6, .micl-heading) {
102
121
  @include typography.headline-large;
103
122
 
104
- grid-area: datepicker-headline;
123
+ grid-area: head;
105
124
  margin-block-start: 36px;
106
- color: var(--md-sys-color-on-surface-variant);
125
+ color: var(--md-comp-date-picker-header-headline-color, var(--md-sys-color-on-surface-variant));
107
126
  }
108
127
  .micl-dialog__supporting-text {
109
128
  @include typography.label-large;
110
129
 
111
- grid-area: datepicker-supporting;
112
- }
113
- .micl-datepicker__inputmode {
114
- grid-area: datepicker-mode;
115
- align-self: flex-end;
116
- justify-self: center;
130
+ grid-area: sup;
117
131
  }
118
132
  .micl-divider {
119
- grid-area: datepicker-divider;
133
+ grid-area: div;
120
134
  inline-size: calc(100% + 36px);
121
135
  margin-block-start: 11.5px;
122
136
  margin-inline: -24px;
123
137
  }
124
- .micl-datepicker__month-selector,
125
- .micl-datepicker__year-selector {
126
- display: grid;
127
- grid-template-rows: var(--md-sys-target-size, 48px);
128
- align-items: center;
138
+ }
139
+ // The range headline holds two dates, so the spec drops it to title-large.
140
+ // The larger margin keeps the divider below it in place.
141
+ &.micl-datepicker--range .micl-dialog__headline :is(h1, h2, h3, h4, h5, h6, .micl-heading) {
142
+ @include typography.title-large;
129
143
 
130
- &.micl-datepicker__view-hidden {
131
- display: none;
132
- }
133
- }
134
- .micl-datepicker__month-selector {
135
- grid-area: datepicker-month-selector;
136
- grid-template-areas: "datepicker-month-previous datepicker-month-next";
137
- grid-template-columns: var(--md-sys-target-size, 48px) var(--md-sys-target-size, 48px);
138
- justify-items: flex-end;
139
- justify-content: flex-end;
140
-
141
- .micl-datepicker__previous {
142
- grid-area: datepicker-month-previous;
143
- }
144
- .micl-datepicker__next {
145
- grid-area: datepicker-month-next;
146
- }
147
- }
148
- .micl-datepicker__year-selector {
149
- grid-area: datepicker-year-selector;
150
- grid-template-areas: "datepicker-year";
151
- grid-template-columns: 1fr;
152
- justify-items: flex-start;
153
- margin-inline-start: -8px;
154
-
155
- .micl-datepicker__previous {
156
- display: none;
157
- grid-area: datepicker-year-previous;
158
- }
159
- .micl-datepicker__next {
160
- display: none;
161
- grid-area: datepicker-year-next;
162
- }
163
- }
164
- .micl-datepicker__month {
165
- display: none;
166
- grid-area: datepicker-month;
167
- margin-inline: -12px auto;
168
- }
169
- .micl-datepicker__year {
170
- grid-area: datepicker-year;
171
- }
172
- .micl-datepicker__month:not(:disabled),
173
- .micl-datepicker__year:not(:disabled) {
174
- color: var(--md-sys-color-on-surface-variant);
175
- }
144
+ margin-block-start: 48px;
176
145
  }
177
146
 
178
147
  .micl-dialog__content {
179
148
  display: grid;
180
- grid-template-areas: "datepicker-view";
149
+ grid-template-areas: "view";
181
150
  position: relative;
182
151
  inline-size: 100%;
183
152
  max-block-size: 336px;
@@ -185,228 +154,10 @@ dialog.micl-dialog.micl-datepicker {
185
154
  padding-inline: 0;
186
155
  overflow: hidden auto;
187
156
  transition: min-block-size var(--md-comp-date-picker-motion-spatial-duration) var(--md-comp-date-picker-motion-spatial);
188
-
189
- .micl-datepicker__calendars {
190
- display: flex;
191
- grid-area: datepicker-view;
192
- position: absolute;
193
- inset-block-start: 0;
194
- inset-inline-start: 0;
195
- block-size: 100%;
196
- inline-size: 200%;
197
- opacity: 1;
198
- overflow: hidden;
199
- transform: translateX(0);
200
- transition:
201
- transform var(--md-comp-date-picker-motion-spatial-duration) var(--md-comp-date-picker-motion-spatial),
202
- opacity var(--md-comp-date-picker-motion-duration-reverse) linear,
203
- block-size var(--md-comp-date-picker-motion-duration-reverse) linear allow-discrete,
204
- display var(--md-comp-date-picker-motion-duration-reverse) linear allow-discrete;
205
-
206
- &.micl-datepicker__view-hidden {
207
- block-size: 0%;
208
- opacity: 0;
209
- transition-property: none;
210
- }
211
- &.micl-startleft,
212
- &.micl-moveright {
213
- transform: translateX(0%);
214
- }
215
- &.micl-startright,
216
- &.micl-moveleft {
217
- transform: translateX(-50%);
218
- }
219
-
220
- .micl-datepicker__calendar {
221
- flex-shrink: 0;
222
- block-size: 100%;
223
- inline-size: 50%;
224
-
225
- .micl-datepicker__calendar-inner {
226
- @include typography.body-large;
227
-
228
- box-sizing: border-box;
229
- display: grid;
230
- grid-template-columns: repeat(7, var(--md-sys-target-size, 48px));
231
- grid-template-rows: 40px repeat(6, var(--md-sys-target-size, 48px));
232
- block-size: 100%;
233
- inline-size: 100%;
234
- padding-inline: 12px;
235
-
236
- span, time {
237
- box-sizing: border-box;
238
- display: inline-flex;
239
- justify-content: center;
240
- border: none;
241
- color: var(--md-sys-color-on-surface);
242
- -webkit-tap-highlight-color: transparent;
243
- }
244
- time {
245
- --statelayer-color: var(--md-sys-color-on-surface-variant);
246
- --statelayer-opacity: 0%;
247
-
248
- align-items: center;
249
- border: 4px solid transparent;
250
- border-radius: var(--md-sys-shape-corner-full);
251
- background-image: linear-gradient(rgb(from var(--statelayer-color) r g b / var(--statelayer-opacity)));
252
- background-repeat: no-repeat;
253
- background-size: 100%;
254
- background-clip: content-box;
255
- transition: --statelayer-opacity var(--md-comp-date-picker-button-motion-duration) linear;
256
-
257
- &.micl-datepicker__today {
258
- outline: 1px solid var(--md-sys-color-primary);
259
- outline-offset: -5px;
260
- color: var(--md-sys-color-primary);
261
-
262
- &:hover,
263
- &:focus-visible,
264
- &:active {
265
- --statelayer-color: var(--md-sys-color-primary);
266
- }
267
- }
268
- &.micl-datepicker__selected {
269
- background-color: var(--md-sys-color-primary);
270
- color: var(--md-sys-color-on-primary);
271
-
272
- &:hover,
273
- &:focus-visible,
274
- &:active {
275
- --statelayer-color: var(--md-sys-color-on-primary);
276
- }
277
- }
278
- &.micl-datepicker__outside {
279
- color: rgb(from var(--md-sys-color-on-surface) r g b / var(--md-sys-state-disabled-state-layer-opacity, 38%));
280
- }
281
- &:not(.micl-datepicker__outside) {
282
- cursor: pointer;
283
- }
284
- &:hover {
285
- --statelayer-opacity: var(--md-sys-state-hover-state-layer-opacity, 8%);
286
- }
287
- &:focus-visible {
288
- --statelayer-opacity: var(--md-sys-state-focus-state-layer-opacity, 10%);
289
- }
290
- &:active {
291
- --statelayer-opacity: var(--md-sys-state-pressed-state-layer-opacity, 10%);
292
- }
293
- }
294
- }
295
- }
296
- }
297
- .micl-datepicker__months,
298
- .micl-datepicker__years,
299
- .micl-datepicker__input {
300
- grid-area: datepicker-view;
301
- @extend %view-transition-base;
302
- }
303
- .micl-datepicker__months {
304
- overflow-y: hidden;
305
-
306
- .micl-datepicker__months-inner {
307
- block-size: auto;
308
- inline-size: 100%;
309
- }
310
- label {
311
- @include typography.body-large;
312
-
313
- display: flex;
314
- align-items: center;
315
- block-size: var(--md-sys-target-size, 48px);
316
- gap: 8px;
317
- padding-inline-start: 16px;
318
- color: var(--md-sys-color-on-surface);
319
- cursor: pointer;
320
-
321
- input[type=radio] {
322
- appearance: none;
323
- margin: 0;
324
- }
325
- span {
326
- visibility: hidden;
327
- color: var(--md-sys-color-on-surface);
328
- }
329
- &:has(input:checked) {
330
- background-color: var(--md-sys-color-surface-variant);
331
-
332
- span {
333
- visibility: visible;
334
- }
335
- }
336
- }
337
- }
338
- .micl-datepicker__years {
339
- overflow-y: hidden;
340
-
341
- .micl-datepicker__years-inner {
342
- display: flex;
343
- flex-wrap: wrap;
344
- justify-content: center;
345
- block-size: auto;
346
- inline-size: 100%;
347
- }
348
- label {
349
- --statelayer-color: var(--md-sys-color-on-surface-variant);
350
- --statelayer-opacity: 0%;
351
-
352
- @include typography.body-large;
353
-
354
- display: inline-flex;
355
- align-items: center;
356
- justify-content: center;
357
- block-size: 36px;
358
- inline-size: 72px;
359
- margin: 8px;
360
- border: calc((var(--md-sys-target-size, 48px) - 36px) / 2) solid transparent;
361
- border-radius: calc(var(--md-sys-target-size, 48px) / 2);
362
- background-image: linear-gradient(rgb(from var(--statelayer-color) r g b / var(--statelayer-opacity)));
363
- background-repeat: no-repeat;
364
- background-size: 100%;
365
- background-clip: content-box;
366
- color: var(--md-sys-color-on-surface-variant);
367
- cursor: pointer;
368
- transition: --statelayer-opacity var(--md-comp-date-picker-button-motion-duration) linear;
369
-
370
- &:hover {
371
- --statelayer-opacity: var(--md-sys-state-hover-state-layer-opacity, 8%);
372
- }
373
- &:focus-visible {
374
- --statelayer-opacity: var(--md-sys-state-focus-state-layer-opacity, 10%);
375
- }
376
- &:active {
377
- --statelayer-opacity: var(--md-sys-state-pressed-state-layer-opacity, 10%);
378
- }
379
- &:has(input:checked) {
380
- color: var(--md-sys-color-on-primary);
381
- background-color: var(--md-sys-color-primary);
382
-
383
- &:hover,
384
- &:focus-visible,
385
- &:active {
386
- --statelayer-color: var(--md-sys-color-on-primary);
387
- }
388
- }
389
-
390
- input[type=radio] {
391
- appearance: none;
392
- margin: 0;
393
- }
394
- }
395
- }
396
- .micl-datepicker__input {
397
- padding-inline: 16px;
398
- margin-block-end: 16px;
399
-
400
- &.micl-datepicker__view-hidden,
401
- input[type=date]::-webkit-calendar-picker-indicator,
402
- input[type=date]::-webkit-inner-spin-button {
403
- display: none;
404
- }
405
- }
406
157
  }
407
158
 
408
159
  .micl-dialog__actions {
409
- padding: 8px 12px 12px 12px;
160
+ padding: 8px 12px 12px;
410
161
  }
411
162
 
412
163
  &.micl-dialog--docked {
@@ -414,36 +165,316 @@ dialog.micl-dialog.micl-datepicker {
414
165
  border-radius: var(--md-sys-shape-corner-large);
415
166
 
416
167
  .micl-dialog__headline {
417
- grid-template-areas: "datepicker-month-selector datepicker-year-selector";
168
+ grid-template-areas: "msel ysel";
418
169
  grid-template-columns: 1fr 1fr;
419
- padding: 8px 12px 18px 12px;
170
+ padding: 8px 12px 18px;
420
171
 
421
- h1, h2, h3, h4, h5, h6, .micl-heading,
172
+ :is(h1, h2, h3, h4, h5, h6, .micl-heading),
422
173
  .micl-dialog__supporting-text,
423
174
  .micl-datepicker__inputmode {
424
175
  display: none;
425
176
  }
426
- .micl-datepicker__month-selector {
427
- grid-template-areas: "datepicker-month-previous datepicker-month datepicker-month-next";
428
- grid-template-columns: var(--md-sys-target-size, 48px) 1fr var(--md-sys-target-size, 48px);
429
-
430
- .micl-datepicker__month {
431
- display: inline-flex;
432
- margin-inline: 0;
433
- }
434
- }
435
- .micl-datepicker__year-selector {
436
- grid-template-areas: "datepicker-year-previous datepicker-year datepicker-year-next";
437
- grid-template-columns: var(--md-sys-target-size, 48px) 1fr var(--md-sys-target-size, 48px);
438
-
439
- .micl-datepicker__previous,
440
- .micl-datepicker__next {
441
- display: block;
442
- }
443
- }
444
177
  }
445
178
  .micl-dialog__actions > button {
446
179
  margin-block: -2px;
447
180
  }
448
181
  }
449
182
  }
183
+
184
+ .micl-datepicker__inputmode {
185
+ grid-area: mode;
186
+ align-self: flex-end;
187
+ justify-self: center;
188
+ }
189
+
190
+ .micl-datepicker__month-selector,
191
+ .micl-datepicker__year-selector {
192
+ display: grid;
193
+ grid-template-rows: var(--_target);
194
+ align-items: center;
195
+
196
+ &.micl-datepicker__view-hidden {
197
+ display: none;
198
+ }
199
+ }
200
+ .micl-datepicker__month-selector {
201
+ grid-area: msel;
202
+ grid-template-areas: "mprev mnext";
203
+ grid-template-columns: var(--_target) var(--_target);
204
+ justify-items: flex-end;
205
+ justify-content: flex-end;
206
+
207
+ .micl-datepicker__previous {
208
+ grid-area: mprev;
209
+ }
210
+ .micl-datepicker__next {
211
+ grid-area: mnext;
212
+ }
213
+ }
214
+ .micl-datepicker__year-selector {
215
+ grid-area: ysel;
216
+ grid-template-areas: "yr";
217
+ grid-template-columns: 1fr;
218
+ justify-items: flex-start;
219
+ margin-inline-start: -8px;
220
+
221
+ .micl-datepicker__previous {
222
+ display: none;
223
+ grid-area: yprev;
224
+ }
225
+ .micl-datepicker__next {
226
+ display: none;
227
+ grid-area: ynext;
228
+ }
229
+ }
230
+ .micl-datepicker__month {
231
+ grid-area: mon;
232
+ margin-inline: -12px auto;
233
+ }
234
+ .micl-datepicker__month-selector .micl-datepicker__month {
235
+ display: none;
236
+ }
237
+ .micl-datepicker__year {
238
+ grid-area: yr;
239
+ }
240
+ .micl-datepicker__month:not(:disabled),
241
+ .micl-datepicker__year:not(:disabled) {
242
+ color: var(--md-sys-color-on-surface-variant);
243
+ }
244
+
245
+ .micl-dialog--docked {
246
+ :is(.micl-datepicker__month-selector, .micl-datepicker__year-selector) {
247
+ grid-template-columns: var(--_target) 1fr var(--_target);
248
+ }
249
+ .micl-datepicker__month-selector {
250
+ grid-template-areas: "mprev mon mnext";
251
+
252
+ .micl-datepicker__month {
253
+ display: inline-flex;
254
+ margin-inline: 0;
255
+ }
256
+ }
257
+ .micl-datepicker__year-selector {
258
+ grid-template-areas: "yprev yr ynext";
259
+
260
+ :is(.micl-datepicker__previous, .micl-datepicker__next) {
261
+ display: block;
262
+ }
263
+ }
264
+ }
265
+
266
+ .micl-datepicker__calendars {
267
+ display: flex;
268
+ grid-area: view;
269
+ position: absolute;
270
+ inset-block-start: 0;
271
+ inset-inline-start: 0;
272
+ block-size: 100%;
273
+ inline-size: 200%;
274
+ opacity: 1;
275
+ overflow: hidden;
276
+ transform: translateX(0);
277
+ transition:
278
+ transform var(--md-comp-date-picker-motion-spatial-duration) var(--md-comp-date-picker-motion-spatial),
279
+ opacity var(--md-comp-date-picker-motion-duration-reverse) linear,
280
+ block-size var(--md-comp-date-picker-motion-duration-reverse) linear allow-discrete,
281
+ display var(--md-comp-date-picker-motion-duration-reverse) linear allow-discrete;
282
+
283
+ &.micl-datepicker__view-hidden {
284
+ block-size: 0%;
285
+ opacity: 0;
286
+ transition-property: none;
287
+ }
288
+ &.micl-startleft,
289
+ &.micl-moveright {
290
+ transform: translateX(0%);
291
+ }
292
+ &.micl-startright,
293
+ &.micl-moveleft {
294
+ transform: translateX(-50%);
295
+ }
296
+ }
297
+ .micl-datepicker__calendar {
298
+ flex-shrink: 0;
299
+ block-size: 100%;
300
+ inline-size: 50%;
301
+ }
302
+ .micl-datepicker__calendar-inner {
303
+ @include typography.body-large;
304
+
305
+ box-sizing: border-box;
306
+ display: grid;
307
+ grid-template-columns: repeat(7, var(--_target));
308
+ grid-template-rows: 40px repeat(6, var(--_target));
309
+ block-size: 100%;
310
+ inline-size: 100%;
311
+ padding-inline: 12px;
312
+
313
+ span, time {
314
+ box-sizing: border-box;
315
+ display: inline-flex;
316
+ justify-content: center;
317
+ border: none;
318
+ -webkit-tap-highlight-color: transparent;
319
+ }
320
+ span {
321
+ color: var(--md-comp-date-picker-weekdays-label-text-color, var(--md-sys-color-on-surface));
322
+ }
323
+ time {
324
+ @extend %statelayer-background;
325
+
326
+ align-items: center;
327
+ border: 4px solid transparent;
328
+ border-radius: var(--md-sys-shape-corner-full);
329
+ color: var(--md-comp-date-picker-date-unselected-label-text-color, var(--md-sys-color-on-surface));
330
+
331
+ &.micl-datepicker__today {
332
+ outline: 1px solid var(--md-comp-date-picker-date-today-container-outline-color, var(--md-sys-color-primary));
333
+ outline-offset: -5px;
334
+ color: var(--md-comp-date-picker-date-today-label-text-color, var(--md-sys-color-primary));
335
+ }
336
+ &.micl-datepicker__selected {
337
+ background-color: var(--md-comp-date-picker-date-selected-container-color, var(--md-sys-color-primary));
338
+ color: var(--md-comp-date-picker-date-selected-label-text-color, var(--md-sys-color-on-primary));
339
+ }
340
+ // The active-indicator band of a range is painted by a pseudo-element
341
+ // on a negative z-index: below the cell's own state layer, selection
342
+ // circle and today-outline, which stay clipped by the circular
343
+ // border-radius (an element background cannot escape it). The band
344
+ // bleeds into the 4px transparent borders to meet the neighbour cells.
345
+ &:is(.micl-datepicker__inrange, .micl-datepicker__range-start, .micl-datepicker__range-end) {
346
+ position: relative;
347
+
348
+ &::before {
349
+ content: '';
350
+ position: absolute;
351
+ z-index: -1;
352
+ inset-block: 0;
353
+ inset-inline: -4px;
354
+ background-color: var(--md-comp-date-picker-range-selection-active-indicator-container-color, var(--md-sys-color-secondary-container));
355
+ }
356
+ }
357
+ &.micl-datepicker__inrange {
358
+ color: var(--md-comp-date-picker-selection-date-in-range-label-text-color, var(--md-sys-color-on-secondary-container));
359
+ }
360
+ // The endpoints only paint the half band facing the inside of the range.
361
+ &.micl-datepicker__range-start::before {
362
+ inset-inline: 50% -4px;
363
+ }
364
+ &.micl-datepicker__range-end::before {
365
+ inset-inline: -4px 50%;
366
+ }
367
+ // The state layer of a highlighted date follows its label color.
368
+ &:is(.micl-datepicker__today, .micl-datepicker__selected):is(:hover, :focus-visible, :active) {
369
+ --statelayer-color: currentColor;
370
+ }
371
+ &.micl-datepicker__outside {
372
+ color: rgb(from var(--md-sys-color-on-surface) r g b / var(--md-sys-state-disabled-state-layer-opacity));
373
+ }
374
+ &:not(.micl-datepicker__outside) {
375
+ cursor: pointer;
376
+ }
377
+ }
378
+ }
379
+
380
+ .micl-datepicker__months,
381
+ .micl-datepicker__years,
382
+ .micl-datepicker__input {
383
+ grid-area: view;
384
+ @extend %view-transition-base;
385
+ }
386
+ .micl-datepicker__months {
387
+ overflow-y: hidden;
388
+
389
+ .micl-datepicker__months-inner {
390
+ block-size: auto;
391
+ inline-size: 100%;
392
+ }
393
+ label {
394
+ @include typography.body-large;
395
+
396
+ display: flex;
397
+ align-items: center;
398
+ block-size: var(--_target);
399
+ gap: 8px;
400
+ padding-inline-start: 16px;
401
+ color: var(--md-sys-color-on-surface);
402
+ cursor: pointer;
403
+
404
+ span {
405
+ visibility: hidden;
406
+ color: var(--md-sys-color-on-surface);
407
+ }
408
+ &:has(input:checked) {
409
+ background-color: var(--md-sys-color-surface-variant);
410
+
411
+ span {
412
+ visibility: visible;
413
+ }
414
+ }
415
+ }
416
+ }
417
+ .micl-datepicker__years {
418
+ overflow-y: hidden;
419
+
420
+ .micl-datepicker__years-inner {
421
+ display: flex;
422
+ flex-wrap: wrap;
423
+ justify-content: center;
424
+ block-size: auto;
425
+ inline-size: 100%;
426
+ }
427
+ label {
428
+ @extend %statelayer-background;
429
+ @include typography.body-large;
430
+
431
+ display: inline-flex;
432
+ align-items: center;
433
+ justify-content: center;
434
+ block-size: 36px;
435
+ inline-size: 72px;
436
+ margin: 8px;
437
+ border: calc((var(--_target) - 36px) / 2) solid transparent;
438
+ border-radius: calc(var(--_target) / 2);
439
+ color: var(--md-comp-date-picker-selection-year-unselected-label-text-color, var(--md-sys-color-on-surface-variant));
440
+ cursor: pointer;
441
+
442
+ &:has(input:checked) {
443
+ color: var(--md-comp-date-picker-selection-year-selected-label-text-color, var(--md-sys-color-on-primary));
444
+ background-color: var(--md-comp-date-picker-selection-year-selected-container-color, var(--md-sys-color-primary));
445
+
446
+ // The state layer of the selected year follows its label color.
447
+ &:is(:hover, :focus-visible, :active) {
448
+ --statelayer-color: currentColor;
449
+ }
450
+ }
451
+ }
452
+ }
453
+ :is(.micl-datepicker__months, .micl-datepicker__years) input[type=radio] {
454
+ appearance: none;
455
+ margin: 0;
456
+ }
457
+ .micl-datepicker .micl-datepicker__input {
458
+ padding-inline: 16px;
459
+ margin-block-end: 16px;
460
+
461
+ &.micl-datepicker__view-hidden,
462
+ input[type=date]::-webkit-calendar-picker-indicator,
463
+ input[type=date]::-webkit-inner-spin-button {
464
+ display: none;
465
+ }
466
+ }
467
+ // In range mode the input view holds the start and end field side by side.
468
+ .micl-datepicker--range .micl-datepicker__input {
469
+ display: flex;
470
+ column-gap: 8px;
471
+
472
+ > * {
473
+ flex: 1 1 0;
474
+ min-inline-size: 0;
475
+ }
476
+ }
477
+
478
+ .micl-no-transition {
479
+ transition: none !important;
480
+ }