mtrl 0.10.3 → 0.10.5

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 (226) hide show
  1. package/README.md +15 -5
  2. package/dist/README.md +15 -5
  3. package/dist/components/bottom-app-bar/bottom-app-bar.js +2 -1
  4. package/dist/components/bottom-app-bar/index.d.ts +3 -1
  5. package/dist/components/button/api.js +3 -0
  6. package/dist/components/button/constants.d.ts +2 -0
  7. package/dist/components/button/index.d.ts +1 -0
  8. package/dist/components/button/types.d.ts +7 -1
  9. package/dist/components/button-group/button-group.js +3 -0
  10. package/dist/components/button-group/config.js +2 -2
  11. package/dist/components/button-group/constants.d.ts +8 -2
  12. package/dist/components/button-group/index.d.ts +1 -0
  13. package/dist/components/button-group/types.d.ts +2 -0
  14. package/dist/components/card/index.d.ts +21 -3
  15. package/dist/components/card/index.js +1 -1
  16. package/dist/components/card/types.d.ts +19 -3
  17. package/dist/components/carousel/api.d.ts +1 -0
  18. package/dist/components/carousel/api.js +4 -0
  19. package/dist/components/carousel/features/scroll.d.ts +1 -0
  20. package/dist/components/carousel/features/scroll.js +117 -2
  21. package/dist/components/carousel/types.d.ts +10 -0
  22. package/dist/components/checkbox/api.js +3 -0
  23. package/dist/components/checkbox/config.js +1 -0
  24. package/dist/components/checkbox/types.d.ts +8 -2
  25. package/dist/components/chips/types.d.ts +5 -1
  26. package/dist/components/datepicker/index.d.ts +3 -1
  27. package/dist/components/datepicker/index.js +1 -1
  28. package/dist/components/datepicker/render.js +3 -3
  29. package/dist/components/extended-fab/api.d.ts +2 -0
  30. package/dist/components/extended-fab/api.js +3 -0
  31. package/dist/components/extended-fab/config.d.ts +1 -0
  32. package/dist/components/extended-fab/config.js +1 -0
  33. package/dist/components/extended-fab/types.d.ts +2 -0
  34. package/dist/components/fab/api.d.ts +2 -0
  35. package/dist/components/fab/api.js +3 -0
  36. package/dist/components/fab/config.d.ts +1 -0
  37. package/dist/components/fab/config.js +1 -0
  38. package/dist/components/fab/constants.d.ts +2 -1
  39. package/dist/components/fab/types.d.ts +2 -0
  40. package/dist/components/fab-menu/fab-menu.js +2 -1
  41. package/dist/components/icon-button/api.js +3 -0
  42. package/dist/components/icon-button/constants.d.ts +2 -0
  43. package/dist/components/icon-button/types.d.ts +2 -0
  44. package/dist/components/index.d.ts +18 -5
  45. package/dist/components/index.js +2 -1
  46. package/dist/components/list/types.d.ts +5 -3
  47. package/dist/components/menu/features/keyboard.js +8 -5
  48. package/dist/components/menu/features/opener.js +1 -1
  49. package/dist/components/menu/index.d.ts +1 -0
  50. package/dist/components/progress/features/canvas.js +1 -1
  51. package/dist/components/progress/features/colors.d.ts +2 -1
  52. package/dist/components/progress/features/colors.js +20 -10
  53. package/dist/components/radios/api.d.ts +1 -0
  54. package/dist/components/radios/api.js +3 -0
  55. package/dist/components/radios/constants.d.ts +6 -6
  56. package/dist/components/radios/radio.d.ts +1 -0
  57. package/dist/components/radios/radio.js +1 -0
  58. package/dist/components/radios/types.d.ts +2 -0
  59. package/dist/components/search/features/states.d.ts +2 -0
  60. package/dist/components/search/features/states.js +12 -1
  61. package/dist/components/search/features/structure.js +2 -0
  62. package/dist/components/segmented-button/config.js +2 -2
  63. package/dist/components/select/api.js +3 -0
  64. package/dist/components/select/constants.d.ts +1 -1
  65. package/dist/components/select/features.js +2 -0
  66. package/dist/components/select/index.d.ts +1 -0
  67. package/dist/components/select/types.d.ts +4 -0
  68. package/dist/components/switch/api.js +3 -0
  69. package/dist/components/switch/config.js +1 -0
  70. package/dist/components/switch/index.d.ts +6 -2
  71. package/dist/components/switch/index.js +1 -1
  72. package/dist/components/switch/types.d.ts +6 -2
  73. package/dist/components/tabs/config.js +2 -2
  74. package/dist/components/tabs/index.d.ts +36 -3
  75. package/dist/components/tabs/index.js +2 -1
  76. package/dist/components/tabs/tab.js +8 -1
  77. package/dist/components/tabs/types.d.ts +2 -0
  78. package/dist/components/tabs/utils.js +2 -1
  79. package/dist/components/textfield/api.d.ts +5 -0
  80. package/dist/components/textfield/api.js +209 -188
  81. package/dist/components/textfield/config.js +4 -3
  82. package/dist/components/textfield/constants.d.ts +24 -7
  83. package/dist/components/textfield/constants.js +9 -7
  84. package/dist/components/textfield/features/index.d.ts +3 -1
  85. package/dist/components/textfield/features/index.js +1 -0
  86. package/dist/components/textfield/features/leading-icon.js +1 -0
  87. package/dist/components/textfield/features/placement.js +15 -2
  88. package/dist/components/textfield/features/required.d.ts +33 -0
  89. package/dist/components/textfield/features/required.js +50 -0
  90. package/dist/components/textfield/features/supporting-text.js +43 -21
  91. package/dist/components/textfield/features/trailing-icon.d.ts +23 -1
  92. package/dist/components/textfield/features/trailing-icon.js +39 -5
  93. package/dist/components/textfield/index.d.ts +16 -1
  94. package/dist/components/textfield/index.js +1 -0
  95. package/dist/components/textfield/textfield.js +2 -2
  96. package/dist/components/textfield/types.d.ts +33 -3
  97. package/dist/components/toolbar/toolbar.js +2 -1
  98. package/dist/components/tooltip/constants.d.ts +4 -1
  99. package/dist/components/top-app-bar/index.d.ts +3 -1
  100. package/dist/components/top-app-bar/top-app-bar.d.ts +2 -57
  101. package/dist/components/top-app-bar/top-app-bar.js +2 -1
  102. package/dist/core/utils/theme.d.ts +6 -2
  103. package/dist/core/utils/theme.js +12 -19
  104. package/dist/elements/carousel.d.ts +5 -0
  105. package/dist/elements/carousel.js +1 -0
  106. package/dist/elements/css/datepicker.js +1 -1
  107. package/dist/elements/css/textfield.js +1 -1
  108. package/dist/elements/dialog.js +1 -1
  109. package/dist/elements/index.d.ts +15 -4
  110. package/dist/elements/index.js +2 -1
  111. package/dist/elements/preupgrade.css +1 -1
  112. package/dist/elements/textfield.d.ts +1 -1
  113. package/dist/elements/textfield.js +1 -1
  114. package/dist/index.cjs +0 -0
  115. package/dist/index.d.ts +293 -3
  116. package/dist/index.js +7 -3
  117. package/dist/package.json +16 -13
  118. package/dist/react/dialog.d.ts +3 -0
  119. package/dist/react/dialog.js +3 -0
  120. package/dist/react/index.d.ts +4 -1
  121. package/dist/react/index.js +2 -1
  122. package/dist/solid/dialog.d.ts +3 -0
  123. package/dist/solid/dialog.js +3 -0
  124. package/dist/solid/index.d.ts +4 -1
  125. package/dist/solid/index.js +2 -1
  126. package/dist/styles/badge.css +1 -1
  127. package/dist/styles/base.css +2 -2
  128. package/dist/styles/bottom-app-bar.css +1 -1
  129. package/dist/styles/bottom-sheet.css +1 -1
  130. package/dist/styles/button-group.css +1 -1
  131. package/dist/styles/button.css +1 -1
  132. package/dist/styles/card.css +1 -1
  133. package/dist/styles/carousel.css +1 -1
  134. package/dist/styles/checkbox.css +1 -1
  135. package/dist/styles/chips.css +1 -1
  136. package/dist/styles/datepicker.css +2 -2
  137. package/dist/styles/dialog.css +1 -1
  138. package/dist/styles/divider.css +1 -1
  139. package/dist/styles/drawer.css +1 -1
  140. package/dist/styles/extended-fab.css +1 -1
  141. package/dist/styles/fab-menu.css +1 -1
  142. package/dist/styles/fab.css +1 -1
  143. package/dist/styles/icon-button.css +1 -1
  144. package/dist/styles/list.css +1 -1
  145. package/dist/styles/loading-indicator.css +1 -1
  146. package/dist/styles/menu.css +1 -1
  147. package/dist/styles/navigation-rail.css +1 -1
  148. package/dist/styles/progress.css +1 -1
  149. package/dist/styles/radios.css +1 -1
  150. package/dist/styles/search.css +1 -1
  151. package/dist/styles/segmented-button.css +1 -1
  152. package/dist/styles/select.css +1 -1
  153. package/dist/styles/side-sheet.css +1 -1
  154. package/dist/styles/slider.css +1 -1
  155. package/dist/styles/snackbar.css +1 -1
  156. package/dist/styles/split-button.css +1 -1
  157. package/dist/styles/switch.css +1 -1
  158. package/dist/styles/tabs.css +1 -1
  159. package/dist/styles/textfield.css +2 -2
  160. package/dist/styles/timepicker.css +1 -1
  161. package/dist/styles/toolbar.css +1 -1
  162. package/dist/styles/tooltip.css +1 -1
  163. package/dist/styles/top-app-bar.css +1 -1
  164. package/dist/styles/utilities.css +1 -1
  165. package/dist/styles.css +2 -2
  166. package/dist/svelte/Dialog.svelte +3 -0
  167. package/dist/svelte/index.d.ts +5 -1
  168. package/dist/svelte/index.js +5 -1
  169. package/dist/themes/autumn.css +2 -2
  170. package/dist/themes/baseline.css +2 -2
  171. package/dist/themes/brownbeige.css +2 -2
  172. package/dist/themes/browngreen.css +2 -2
  173. package/dist/themes/content.css +2 -2
  174. package/dist/themes/desert.css +2 -2
  175. package/dist/themes/expressive.css +2 -2
  176. package/dist/themes/fidelity.css +2 -2
  177. package/dist/themes/forest.css +2 -2
  178. package/dist/themes/fruit-salad.css +2 -2
  179. package/dist/themes/highcontrast.css +2 -2
  180. package/dist/themes/legacy.css +2 -2
  181. package/dist/themes/material.css +2 -2
  182. package/dist/themes/monochrome.css +2 -2
  183. package/dist/themes/neutral.css +2 -2
  184. package/dist/themes/ocean.css +2 -2
  185. package/dist/themes/rainbow.css +2 -2
  186. package/dist/themes/sageivory.css +2 -2
  187. package/dist/themes/spring.css +2 -2
  188. package/dist/themes/summer.css +2 -2
  189. package/dist/themes/sunset.css +2 -2
  190. package/dist/themes/tealcaramel.css +2 -2
  191. package/dist/themes/vibrant.css +2 -2
  192. package/dist/themes/winter.css +2 -2
  193. package/dist/vue/dialog.d.ts +3 -0
  194. package/dist/vue/dialog.js +3 -0
  195. package/dist/vue/index.d.ts +4 -1
  196. package/dist/vue/index.js +2 -1
  197. package/package.json +16 -13
  198. package/src/styles/abstract/_theme.scss +6 -6
  199. package/src/styles/abstract/_variables.scss +14 -4
  200. package/src/styles/components/_datepicker.scss +15 -2
  201. package/src/styles/components/_textfield.scss +61 -8
  202. package/src/styles/themes/_autumn.scss +173 -0
  203. package/src/styles/themes/_base-theme.scss +100 -12
  204. package/src/styles/themes/_baseline.scss +172 -0
  205. package/src/styles/themes/_brownbeige.scss +150 -0
  206. package/src/styles/themes/_browngreen.scss +183 -0
  207. package/src/styles/themes/_content.scss +148 -0
  208. package/src/styles/themes/_desert.scss +150 -0
  209. package/src/styles/themes/_expressive.scss +150 -0
  210. package/src/styles/themes/_fidelity.scss +148 -0
  211. package/src/styles/themes/_forest.scss +175 -0
  212. package/src/styles/themes/_fruit-salad.scss +150 -0
  213. package/src/styles/themes/_highcontrast.scss +74 -0
  214. package/src/styles/themes/_legacy.scss +181 -0
  215. package/src/styles/themes/_material.scss +181 -0
  216. package/src/styles/themes/_monochrome.scss +134 -0
  217. package/src/styles/themes/_neutral.scss +150 -0
  218. package/src/styles/themes/_ocean.scss +175 -0
  219. package/src/styles/themes/_rainbow.scss +150 -0
  220. package/src/styles/themes/_sageivory.scss +150 -0
  221. package/src/styles/themes/_spring.scss +171 -0
  222. package/src/styles/themes/_summer.scss +150 -0
  223. package/src/styles/themes/_sunset.scss +175 -0
  224. package/src/styles/themes/_tealcaramel.scss +150 -0
  225. package/src/styles/themes/_vibrant.scss +150 -0
  226. package/src/styles/themes/_winter.scss +181 -0
@@ -1,2 +1,2 @@
1
- /*! mtrl v0.10.3 | MIT */
2
- [data-theme=winter]{--mtrl-sys-color-primary: #406374;--mtrl-sys-color-on-primary: #ffffff;--mtrl-sys-color-primary-container: #c1e8fc;--mtrl-sys-color-on-primary-container: #001f29;--mtrl-sys-color-secondary: #4a626e;--mtrl-sys-color-on-secondary: #ffffff;--mtrl-sys-color-secondary-container: #cde6f5;--mtrl-sys-color-on-secondary-container: #061e28;--mtrl-sys-color-tertiary: #5d5b7d;--mtrl-sys-color-on-tertiary: #ffffff;--mtrl-sys-color-tertiary-container: #e2dfff;--mtrl-sys-color-on-tertiary-container: #191836;--mtrl-sys-color-surface: #fafcff;--mtrl-sys-color-surface-dim: #dae4e9;--mtrl-sys-color-surface-bright: #fafcff;--mtrl-sys-color-surface-container-lowest: #ffffff;--mtrl-sys-color-surface-container-low: #f5f8fb;--mtrl-sys-color-surface-container: #eff3f6;--mtrl-sys-color-surface-container-high: #e9edf0;--mtrl-sys-color-surface-container-highest: #e3e7ea;--mtrl-sys-color-on-surface: #191c1e;--mtrl-sys-color-on-surface-variant: #40484c;--mtrl-sys-color-outline: #70787d;--mtrl-sys-color-outline-variant: #c0c8cc;--mtrl-sys-color-inverse-surface: #2c3134;--mtrl-sys-color-inverse-on-surface: #edf1f4;--mtrl-sys-color-inverse-primary: #a8ccdf;--mtrl-sys-color-error: #B3261E;--mtrl-sys-color-on-error: #FFFFFF;--mtrl-sys-color-error-container: #F9DEDC;--mtrl-sys-color-on-error-container: #410E0B;--mtrl-sys-color-success: #007B5A;--mtrl-sys-color-on-success: #FFFFFF;--mtrl-sys-color-warning: #DD6D06;--mtrl-sys-color-on-warning: #FFFFFF;--mtrl-sys-color-info: #0061A4;--mtrl-sys-color-on-info: #FFFFFF}[data-theme=winter][data-theme-mode=dark]{--mtrl-sys-color-primary: #73d0ee;--mtrl-sys-color-on-primary: #003545;--mtrl-sys-color-primary-container: #224c5b;--mtrl-sys-color-on-primary-container: #c1e8fc;--mtrl-sys-color-secondary: #b1cad9;--mtrl-sys-color-on-secondary: #1d343f;--mtrl-sys-color-secondary-container: #334b56;--mtrl-sys-color-on-secondary-container: #cde6f5;--mtrl-sys-color-tertiary: #c6c3eb;--mtrl-sys-color-on-tertiary: #2e2d4d;--mtrl-sys-color-tertiary-container: #454364;--mtrl-sys-color-on-tertiary-container: #e2dfff;--mtrl-sys-color-surface: #191c1e;--mtrl-sys-color-surface-dim: #101416;--mtrl-sys-color-surface-bright: #35393c;--mtrl-sys-color-surface-container-lowest: #0d0e10;--mtrl-sys-color-surface-container-low: #191c1e;--mtrl-sys-color-surface-container: #1d2022;--mtrl-sys-color-surface-container-high: #272a2d;--mtrl-sys-color-surface-container-highest: #323539;--mtrl-sys-color-on-surface: #e1e3e5;--mtrl-sys-color-on-surface-variant: #c0c8cc;--mtrl-sys-color-outline: #8a9297;--mtrl-sys-color-outline-variant: #40484c;--mtrl-sys-color-inverse-surface: #e1e3e5;--mtrl-sys-color-inverse-on-surface: #2c3134;--mtrl-sys-color-inverse-primary: #406374;--mtrl-sys-color-error: #F2B8B5;--mtrl-sys-color-on-error: #601410;--mtrl-sys-color-error-container: #8C1D18;--mtrl-sys-color-on-error-container: #F9DEDC;--mtrl-sys-color-success: #85CFA9;--mtrl-sys-color-on-success: #00392D;--mtrl-sys-color-warning: #FFB95C;--mtrl-sys-color-on-warning: #3F2200;--mtrl-sys-color-info: #99CBFF;--mtrl-sys-color-on-info: #003060}
1
+ /*! mtrl v0.10.5 | MIT */
2
+ [data-theme=winter]{--mtrl-sys-color-primary: #406374;--mtrl-sys-color-on-primary: #ffffff;--mtrl-sys-color-primary-container: #c1e8fc;--mtrl-sys-color-on-primary-container: #001f29;--mtrl-sys-color-secondary: #4a626e;--mtrl-sys-color-on-secondary: #ffffff;--mtrl-sys-color-secondary-container: #cde6f5;--mtrl-sys-color-on-secondary-container: #061e28;--mtrl-sys-color-tertiary: #5d5b7d;--mtrl-sys-color-on-tertiary: #ffffff;--mtrl-sys-color-tertiary-container: #e2dfff;--mtrl-sys-color-on-tertiary-container: #191836;--mtrl-sys-color-surface: #fafcff;--mtrl-sys-color-surface-dim: #dae4e9;--mtrl-sys-color-surface-bright: #fafcff;--mtrl-sys-color-surface-container-lowest: #ffffff;--mtrl-sys-color-surface-container-low: #f5f8fb;--mtrl-sys-color-surface-container: #eff3f6;--mtrl-sys-color-surface-container-high: #e9edf0;--mtrl-sys-color-surface-container-highest: #e3e7ea;--mtrl-sys-color-on-surface: #191c1e;--mtrl-sys-color-on-surface-variant: #40484c;--mtrl-sys-color-outline: #70787d;--mtrl-sys-color-outline-variant: #c0c8cc;--mtrl-sys-color-inverse-surface: #2c3134;--mtrl-sys-color-inverse-on-surface: #edf1f4;--mtrl-sys-color-inverse-primary: #a8ccdf;--mtrl-sys-color-error: #B3261E;--mtrl-sys-color-on-error: #FFFFFF;--mtrl-sys-color-error-container: #F9DEDC;--mtrl-sys-color-on-error-container: #410E0B;--mtrl-sys-color-success: #006C4E;--mtrl-sys-color-on-success: #FFFFFF;--mtrl-sys-color-warning: #974800;--mtrl-sys-color-on-warning: #FFFFFF;--mtrl-sys-color-info: #0061A4;--mtrl-sys-color-on-info: #FFFFFF}[data-theme=winter][data-theme-mode=dark]{--mtrl-sys-color-primary: #73d0ee;--mtrl-sys-color-on-primary: #003545;--mtrl-sys-color-primary-container: #224c5b;--mtrl-sys-color-on-primary-container: #c1e8fc;--mtrl-sys-color-secondary: #b1cad9;--mtrl-sys-color-on-secondary: #1d343f;--mtrl-sys-color-secondary-container: #334b56;--mtrl-sys-color-on-secondary-container: #cde6f5;--mtrl-sys-color-tertiary: #c6c3eb;--mtrl-sys-color-on-tertiary: #2e2d4d;--mtrl-sys-color-tertiary-container: #454364;--mtrl-sys-color-on-tertiary-container: #e2dfff;--mtrl-sys-color-surface: #191c1e;--mtrl-sys-color-surface-dim: #101416;--mtrl-sys-color-surface-bright: #35393c;--mtrl-sys-color-surface-container-lowest: #0d0e10;--mtrl-sys-color-surface-container-low: #191c1e;--mtrl-sys-color-surface-container: #1d2022;--mtrl-sys-color-surface-container-high: #272a2d;--mtrl-sys-color-surface-container-highest: #323539;--mtrl-sys-color-on-surface: #e1e3e5;--mtrl-sys-color-on-surface-variant: #c0c8cc;--mtrl-sys-color-outline: #8a9297;--mtrl-sys-color-outline-variant: #40484c;--mtrl-sys-color-inverse-surface: #e1e3e5;--mtrl-sys-color-inverse-on-surface: #2c3134;--mtrl-sys-color-inverse-primary: #406374;--mtrl-sys-color-error: #F2B8B5;--mtrl-sys-color-on-error: #601410;--mtrl-sys-color-error-container: #8C1D18;--mtrl-sys-color-on-error-container: #F9DEDC;--mtrl-sys-color-success: #8CD6AF;--mtrl-sys-color-on-success: #003824;--mtrl-sys-color-warning: #FFB95C;--mtrl-sys-color-on-warning: #462A00;--mtrl-sys-color-info: #99CBFF;--mtrl-sys-color-on-info: #003355}[data-theme=winter]:is([data-theme-contrast=medium],[data-theme-contrast=high]):not([data-theme-mode=dark]){--mtrl-sys-color-on-error-container: #ffffff;--mtrl-sys-color-on-primary-container: #ffffff;--mtrl-sys-color-on-secondary-container: #ffffff;--mtrl-sys-color-on-tertiary-container: #ffffff;--mtrl-sys-color-on-primary-fixed: #ffffff;--mtrl-sys-color-on-primary-fixed-variant: #ffffff;--mtrl-sys-color-on-secondary-fixed: #ffffff;--mtrl-sys-color-on-secondary-fixed-variant: #ffffff;--mtrl-sys-color-on-tertiary-fixed: #ffffff;--mtrl-sys-color-on-tertiary-fixed-variant: #ffffff;--mtrl-sys-color-surface: #f5fafd;--mtrl-sys-color-surface-bright: #f5fafd;--mtrl-sys-color-surface-variant: #dce4e9;--mtrl-sys-color-inverse-primary: #8ad0ee}[data-theme=winter]:is([data-theme-contrast=medium],[data-theme-contrast=high])[data-theme-mode=dark]{--mtrl-sys-color-primary-fixed: #bbe9ff;--mtrl-sys-color-primary-fixed-dim: #8ad0ee;--mtrl-sys-color-secondary-fixed: #cde6f5;--mtrl-sys-color-secondary-fixed-dim: #b1cad8;--mtrl-sys-color-tertiary-fixed: #e3dfff;--mtrl-sys-color-tertiary-fixed-dim: #c6c2ea;--mtrl-sys-color-surface: #0f1417;--mtrl-sys-color-surface-dim: #0f1417;--mtrl-sys-color-surface-variant: #40484c;--mtrl-sys-color-on-surface: #ffffff;--mtrl-sys-color-inverse-surface: #dee3e6;--mtrl-sys-color-inverse-primary: #004e64}[data-theme=winter][data-theme-contrast=medium]:not([data-theme-mode=dark]){--mtrl-sys-color-error: #740006;--mtrl-sys-color-error-container: #cf2c27;--mtrl-sys-color-primary: #003b4d;--mtrl-sys-color-primary-container: #287590;--mtrl-sys-color-secondary: #213944;--mtrl-sys-color-secondary-container: #58707d;--mtrl-sys-color-tertiary: #343352;--mtrl-sys-color-tertiary-container: #6c698c;--mtrl-sys-color-primary-fixed: #287590;--mtrl-sys-color-primary-fixed-dim: #005c76;--mtrl-sys-color-secondary-fixed: #58707d;--mtrl-sys-color-secondary-fixed-dim: #405864;--mtrl-sys-color-tertiary-fixed: #6c698c;--mtrl-sys-color-tertiary-fixed-dim: #535173;--mtrl-sys-color-surface-dim: #c2c7ca;--mtrl-sys-color-surface-container-low: #f0f4f8;--mtrl-sys-color-surface-container: #e4e9ec;--mtrl-sys-color-surface-container-high: #d9dde1;--mtrl-sys-color-surface-container-highest: #cdd2d6;--mtrl-sys-color-on-surface: #0d1214;--mtrl-sys-color-on-surface-variant: #2f373b;--mtrl-sys-color-outline: #4c5458;--mtrl-sys-color-outline-variant: #666e73;--mtrl-sys-color-inverse-on-surface: #edf1f5}[data-theme=winter][data-theme-contrast=medium][data-theme-mode=dark]{--mtrl-sys-color-error: #ffd2cc;--mtrl-sys-color-on-error: #540003;--mtrl-sys-color-error-container: #ff5449;--mtrl-sys-color-on-error-container: #000000;--mtrl-sys-color-primary: #abe5ff;--mtrl-sys-color-on-primary: #002a37;--mtrl-sys-color-primary-container: #529ab6;--mtrl-sys-color-on-primary-container: #000000;--mtrl-sys-color-secondary: #c7e0ee;--mtrl-sys-color-on-secondary: #0f2933;--mtrl-sys-color-secondary-container: #7c94a1;--mtrl-sys-color-on-secondary-container: #000000;--mtrl-sys-color-tertiary: #dcd8ff;--mtrl-sys-color-on-tertiary: #242241;--mtrl-sys-color-tertiary-container: #908db2;--mtrl-sys-color-on-tertiary-container: #000000;--mtrl-sys-color-on-primary-fixed: #00131b;--mtrl-sys-color-on-primary-fixed-variant: #003b4d;--mtrl-sys-color-on-secondary-fixed: #00131c;--mtrl-sys-color-on-secondary-fixed-variant: #213944;--mtrl-sys-color-on-tertiary-fixed: #0f0d2b;--mtrl-sys-color-on-tertiary-fixed-variant: #343352;--mtrl-sys-color-surface-bright: #404548;--mtrl-sys-color-surface-container-lowest: #04080a;--mtrl-sys-color-surface-container-low: #191e21;--mtrl-sys-color-surface-container: #23292b;--mtrl-sys-color-surface-container-high: #2e3336;--mtrl-sys-color-surface-container-highest: #393e41;--mtrl-sys-color-on-surface-variant: #d6dde2;--mtrl-sys-color-outline: #abb3b8;--mtrl-sys-color-outline-variant: #899196;--mtrl-sys-color-inverse-on-surface: #262b2d}[data-theme=winter][data-theme-contrast=high]:not([data-theme-mode=dark]){--mtrl-sys-color-error: #600004;--mtrl-sys-color-error-container: #98000a;--mtrl-sys-color-primary: #00313f;--mtrl-sys-color-primary-container: #005066;--mtrl-sys-color-secondary: #162f3a;--mtrl-sys-color-secondary-container: #354c58;--mtrl-sys-color-tertiary: #2a2948;--mtrl-sys-color-tertiary-container: #474666;--mtrl-sys-color-primary-fixed: #005066;--mtrl-sys-color-primary-fixed-dim: #003848;--mtrl-sys-color-secondary-fixed: #354c58;--mtrl-sys-color-secondary-fixed-dim: #1d3641;--mtrl-sys-color-tertiary-fixed: #474666;--mtrl-sys-color-tertiary-fixed-dim: #312f4e;--mtrl-sys-color-surface-dim: #b5b9bd;--mtrl-sys-color-surface-container-low: #edf1f5;--mtrl-sys-color-surface-container: #dee3e6;--mtrl-sys-color-surface-container-high: #d0d5d8;--mtrl-sys-color-surface-container-highest: #c2c7ca;--mtrl-sys-color-on-surface: #000000;--mtrl-sys-color-on-surface-variant: #000000;--mtrl-sys-color-outline: #252d31;--mtrl-sys-color-outline-variant: #424a4e;--mtrl-sys-color-inverse-on-surface: #ffffff}[data-theme=winter][data-theme-contrast=high][data-theme-mode=dark]{--mtrl-sys-color-error: #ffece9;--mtrl-sys-color-on-error: #000000;--mtrl-sys-color-error-container: #ffaea4;--mtrl-sys-color-on-error-container: #220001;--mtrl-sys-color-primary: #ddf3ff;--mtrl-sys-color-on-primary: #000000;--mtrl-sys-color-primary-container: #86ccea;--mtrl-sys-color-on-primary-container: #000d14;--mtrl-sys-color-secondary: #def3ff;--mtrl-sys-color-on-secondary: #000000;--mtrl-sys-color-secondary-container: #adc6d4;--mtrl-sys-color-on-secondary-container: #000d14;--mtrl-sys-color-tertiary: #f2eeff;--mtrl-sys-color-on-tertiary: #000000;--mtrl-sys-color-tertiary-container: #c2bfe6;--mtrl-sys-color-on-tertiary-container: #090725;--mtrl-sys-color-on-primary-fixed: #000000;--mtrl-sys-color-on-primary-fixed-variant: #00131b;--mtrl-sys-color-on-secondary-fixed: #000000;--mtrl-sys-color-on-secondary-fixed-variant: #00131c;--mtrl-sys-color-on-tertiary-fixed: #000000;--mtrl-sys-color-on-tertiary-fixed-variant: #0f0d2b;--mtrl-sys-color-surface-bright: #4c5154;--mtrl-sys-color-surface-container-lowest: #000000;--mtrl-sys-color-surface-container-low: #1b2023;--mtrl-sys-color-surface-container: #2c3134;--mtrl-sys-color-surface-container-high: #373c3f;--mtrl-sys-color-surface-container-highest: #42474a;--mtrl-sys-color-on-surface-variant: #ffffff;--mtrl-sys-color-outline: #e9f1f6;--mtrl-sys-color-outline-variant: #bcc4c9;--mtrl-sys-color-inverse-on-surface: #000000}@media(prefers-contrast: more){[data-theme=winter]:not([data-theme-contrast]):not([data-theme-mode=dark]){--mtrl-sys-color-error: #600004;--mtrl-sys-color-error-container: #98000a;--mtrl-sys-color-on-error-container: #ffffff;--mtrl-sys-color-primary: #00313f;--mtrl-sys-color-primary-container: #005066;--mtrl-sys-color-on-primary-container: #ffffff;--mtrl-sys-color-secondary: #162f3a;--mtrl-sys-color-secondary-container: #354c58;--mtrl-sys-color-on-secondary-container: #ffffff;--mtrl-sys-color-tertiary: #2a2948;--mtrl-sys-color-tertiary-container: #474666;--mtrl-sys-color-on-tertiary-container: #ffffff;--mtrl-sys-color-primary-fixed: #005066;--mtrl-sys-color-primary-fixed-dim: #003848;--mtrl-sys-color-on-primary-fixed: #ffffff;--mtrl-sys-color-on-primary-fixed-variant: #ffffff;--mtrl-sys-color-secondary-fixed: #354c58;--mtrl-sys-color-secondary-fixed-dim: #1d3641;--mtrl-sys-color-on-secondary-fixed: #ffffff;--mtrl-sys-color-on-secondary-fixed-variant: #ffffff;--mtrl-sys-color-tertiary-fixed: #474666;--mtrl-sys-color-tertiary-fixed-dim: #312f4e;--mtrl-sys-color-on-tertiary-fixed: #ffffff;--mtrl-sys-color-on-tertiary-fixed-variant: #ffffff;--mtrl-sys-color-surface: #f5fafd;--mtrl-sys-color-surface-dim: #b5b9bd;--mtrl-sys-color-surface-bright: #f5fafd;--mtrl-sys-color-surface-variant: #dce4e9;--mtrl-sys-color-surface-container-low: #edf1f5;--mtrl-sys-color-surface-container: #dee3e6;--mtrl-sys-color-surface-container-high: #d0d5d8;--mtrl-sys-color-surface-container-highest: #c2c7ca;--mtrl-sys-color-on-surface: #000000;--mtrl-sys-color-on-surface-variant: #000000;--mtrl-sys-color-outline: #252d31;--mtrl-sys-color-outline-variant: #424a4e;--mtrl-sys-color-inverse-on-surface: #ffffff;--mtrl-sys-color-inverse-primary: #8ad0ee}[data-theme=winter]:not([data-theme-contrast])[data-theme-mode=dark]{--mtrl-sys-color-error: #ffece9;--mtrl-sys-color-on-error: #000000;--mtrl-sys-color-error-container: #ffaea4;--mtrl-sys-color-on-error-container: #220001;--mtrl-sys-color-primary: #ddf3ff;--mtrl-sys-color-on-primary: #000000;--mtrl-sys-color-primary-container: #86ccea;--mtrl-sys-color-on-primary-container: #000d14;--mtrl-sys-color-secondary: #def3ff;--mtrl-sys-color-on-secondary: #000000;--mtrl-sys-color-secondary-container: #adc6d4;--mtrl-sys-color-on-secondary-container: #000d14;--mtrl-sys-color-tertiary: #f2eeff;--mtrl-sys-color-on-tertiary: #000000;--mtrl-sys-color-tertiary-container: #c2bfe6;--mtrl-sys-color-on-tertiary-container: #090725;--mtrl-sys-color-primary-fixed: #bbe9ff;--mtrl-sys-color-primary-fixed-dim: #8ad0ee;--mtrl-sys-color-on-primary-fixed: #000000;--mtrl-sys-color-on-primary-fixed-variant: #00131b;--mtrl-sys-color-secondary-fixed: #cde6f5;--mtrl-sys-color-secondary-fixed-dim: #b1cad8;--mtrl-sys-color-on-secondary-fixed: #000000;--mtrl-sys-color-on-secondary-fixed-variant: #00131c;--mtrl-sys-color-tertiary-fixed: #e3dfff;--mtrl-sys-color-tertiary-fixed-dim: #c6c2ea;--mtrl-sys-color-on-tertiary-fixed: #000000;--mtrl-sys-color-on-tertiary-fixed-variant: #0f0d2b;--mtrl-sys-color-surface: #0f1417;--mtrl-sys-color-surface-dim: #0f1417;--mtrl-sys-color-surface-bright: #4c5154;--mtrl-sys-color-surface-variant: #40484c;--mtrl-sys-color-surface-container-lowest: #000000;--mtrl-sys-color-surface-container-low: #1b2023;--mtrl-sys-color-surface-container: #2c3134;--mtrl-sys-color-surface-container-high: #373c3f;--mtrl-sys-color-surface-container-highest: #42474a;--mtrl-sys-color-on-surface: #ffffff;--mtrl-sys-color-on-surface-variant: #ffffff;--mtrl-sys-color-outline: #e9f1f6;--mtrl-sys-color-outline-variant: #bcc4c9;--mtrl-sys-color-inverse-surface: #dee3e6;--mtrl-sys-color-inverse-on-surface: #000000;--mtrl-sys-color-inverse-primary: #004e64}}
@@ -1,3 +1,6 @@
1
+ import "mtrl/elements/css/progress";
2
+ import "mtrl/elements/css/button";
3
+ import "mtrl/elements/css/divider";
1
4
  import "mtrl/elements/css/dialog";
2
5
  import { type DialogSpec, type DialogElement } from "../elements/dialog.js";
3
6
  import { type MComponent } from "./create.js";
@@ -1,5 +1,8 @@
1
1
  // src/vue/dialog.ts
2
2
  // Generated by scripts/generate-adapters.ts from src/elements. Do not edit.
3
+ import "mtrl/elements/css/progress";
4
+ import "mtrl/elements/css/button";
5
+ import "mtrl/elements/css/divider";
3
6
  import "mtrl/elements/css/dialog";
4
7
  import { dialogElement, defineDialog } from "../elements/dialog.js";
5
8
  import { createComponent } from "./create.js";
@@ -18,7 +18,10 @@ export { MFab } from "./fab.js";
18
18
  export { MExtendedFab } from "./extended-fab.js";
19
19
  export { MCheckbox } from "./checkbox.js";
20
20
  export { MSlider } from "./slider.js";
21
- export { MTextfield } from "./textfield.js";
21
+ export { MTextfield as MTextField } from "./textfield.js";
22
+ export {
23
+ /** @deprecated Use MTextField: M3 writes "text field" as two words. Removed in 1.0 (FLO-383). */
24
+ MTextfield, } from "./textfield.js";
22
25
  export { MRadios } from "./radios.js";
23
26
  export { MNavigationRail } from "./navigation-rail.js";
24
27
  export { MDrawer } from "./drawer.js";
package/dist/vue/index.js CHANGED
@@ -11,7 +11,8 @@ export { MFab } from "./fab.js";
11
11
  export { MExtendedFab } from "./extended-fab.js";
12
12
  export { MCheckbox } from "./checkbox.js";
13
13
  export { MSlider } from "./slider.js";
14
- export { MTextfield } from "./textfield.js";
14
+ export { MTextfield as MTextField } from "./textfield.js";
15
+ export { MTextfield, } from "./textfield.js";
15
16
  export { MRadios } from "./radios.js";
16
17
  export { MNavigationRail } from "./navigation-rail.js";
17
18
  export { MDrawer } from "./drawer.js";
package/package.json CHANGED
@@ -1,23 +1,26 @@
1
1
  {
2
2
  "name": "mtrl",
3
- "version": "0.10.3",
4
- "description": "A functional TypeScript/JavaScript component library with composable architecture based on Material Design 3",
3
+ "version": "0.10.5",
4
+ "description": "Material Design 3 components for the web: plain JavaScript, web components, and React, Vue, Svelte and Solid components. TypeScript, zero dependencies.",
5
5
  "author": "floor",
6
6
  "license": "MIT",
7
7
  "keywords": [
8
- "component",
9
- "library",
10
- "ui",
11
- "user interface",
12
- "typescript",
13
- "functional",
14
- "composable",
15
8
  "material design 3",
9
+ "material design",
10
+ "material 3",
16
11
  "md3",
17
- "testing",
18
- "jsdom",
19
- "tested",
20
- "type-safe"
12
+ "m3",
13
+ "material you",
14
+ "components",
15
+ "ui",
16
+ "web components",
17
+ "custom elements",
18
+ "typescript",
19
+ "react",
20
+ "vue",
21
+ "svelte",
22
+ "solid",
23
+ "design system"
21
24
  ],
22
25
  "sideEffects": [
23
26
  "**/*.css",
@@ -96,14 +96,14 @@ $mtrl-sys-shape: (
96
96
  --#{$prefix}-sys-color-error-container: #8C1D18;
97
97
  --#{$prefix}-sys-color-on-error-container: #F9DEDC;
98
98
 
99
- --#{$prefix}-sys-color-success: #85CFA9;
100
- --#{$prefix}-sys-color-on-success: #00392D;
99
+ --#{$prefix}-sys-color-success: #8CD6AF;
100
+ --#{$prefix}-sys-color-on-success: #003824;
101
101
 
102
102
  --#{$prefix}-sys-color-warning: #FFB95C;
103
- --#{$prefix}-sys-color-on-warning: #3F2200;
103
+ --#{$prefix}-sys-color-on-warning: #462A00;
104
104
 
105
105
  --#{$prefix}-sys-color-info: #99CBFF;
106
- --#{$prefix}-sys-color-on-info: #003060;
106
+ --#{$prefix}-sys-color-on-info: #003355;
107
107
 
108
108
  // Neutral colors
109
109
  --#{$prefix}-sys-color-surface: #1C1B1F;
@@ -151,10 +151,10 @@ $mtrl-sys-shape: (
151
151
  --#{$prefix}-sys-color-error-container: #F9DEDC;
152
152
  --#{$prefix}-sys-color-on-error-container: #410E0B;
153
153
 
154
- --#{$prefix}-sys-color-success: #007B5A;
154
+ --#{$prefix}-sys-color-success: #006C4E;
155
155
  --#{$prefix}-sys-color-on-success: #FFFFFF;
156
156
 
157
- --#{$prefix}-sys-color-warning: #DD6D06;
157
+ --#{$prefix}-sys-color-warning: #974800;
158
158
  --#{$prefix}-sys-color-on-warning: #FFFFFF;
159
159
 
160
160
  --#{$prefix}-sys-color-info: #0061A4;
@@ -438,7 +438,8 @@ $button-shape-tokens: (
438
438
  @return $fallback;
439
439
  }
440
440
 
441
- // Textfield configuration
441
+ // Text field configuration. `$textfield` is the 0.10 name, deprecated for
442
+ // `$text-field` (FLO-383) and removed in 1.0; it keeps working until then.
442
443
  $textfield: (
443
444
  // The width of a field the page does not size (TextFieldDefaults.MinWidth)
444
445
  'width': 280px,
@@ -453,8 +454,17 @@ $textfield: (
453
454
  'icon-size': 24px
454
455
  ) !default;
455
456
 
456
- // Add textfield function
457
- @function textfield($key) {
457
+ // The text field's map, under the name 1.0 keeps (FLO-383): the same map as
458
+ // `$textfield` unless a theme configures this one.
459
+ $text-field: $textfield !default;
460
+
461
+ /// A text field measurement: `v.text-field('height')`.
462
+ @function text-field($key) {
458
463
  @if $key == 'border-radius' { @return shape('extra-small'); }
459
- @return map.get($textfield, $key);
464
+ @return map.get($text-field, $key);
465
+ }
466
+
467
+ /// Deprecated: use `text-field()`. Removed in 1.0 (FLO-383).
468
+ @function textfield($key) {
469
+ @return text-field($key);
460
470
  }
@@ -35,6 +35,8 @@ $component: '#{base.$prefix}-datepicker';
35
35
  &__help { color: t.color('on-surface-variant'); }
36
36
  &__error { color: t.color('error'); &:empty { display: none; } }
37
37
  &__calendar {
38
+ // The day grid's inline padding, shared by the range band's bleed into it.
39
+ --#{$component}-grid-inset: 12px;
38
40
  box-sizing: border-box; padding: 0; border: 0;
39
41
  width: 360px; max-width: calc(100vw - 32px); max-height: calc(100dvh - 32px);
40
42
  overflow: auto; color: t.color('on-surface'); background: t.color('surface-container-high');
@@ -54,7 +56,7 @@ $component: '#{base.$prefix}-datepicker';
54
56
  .#{$component}__save { position: absolute; inset-inline-end: 12px; top: 8px; }
55
57
  .#{$component}__title { margin-bottom: 0; }
56
58
  .#{$component}__headline { @include m.typography('title-large'); }
57
- .#{$component}__weekdays { padding: 0 12px; }
59
+ .#{$component}__weekdays { padding: 0 var(--#{$component}-grid-inset); }
58
60
  }
59
61
  &__list { flex: 1; min-height: 0; position: relative; overflow-y: auto; overscroll-behavior: contain; }
60
62
  &__subhead { @include m.typography('title-small'); color: t.color('on-surface-variant'); padding: 20px 24px 8px; }
@@ -87,7 +89,7 @@ $component: '#{base.$prefix}-datepicker';
87
89
  &--animate[open] { animation: #{$component}-appear v.motion('duration-short3') v.motion('easing-standard'); }
88
90
  @media (prefers-reduced-motion: reduce) { &--animate[open] { animation: none; } }
89
91
  // No bottom padding: the modal is Compose's 568dp, the footer included. FLO-277.
90
- &__days { padding: 0 12px; }
92
+ &__days { padding: 0 var(--#{$component}-grid-inset); }
91
93
  // The months' scroll-snapping track: one month per page, no visible scrollbar.
92
94
  // Swipe, trackpad and wheel paging are the browser's own. FLO-274.
93
95
  &__track {
@@ -104,12 +106,23 @@ $component: '#{base.$prefix}-datepicker';
104
106
  // drawRangeBackground); it was rounded to the cell edge. In-range days read
105
107
  // on-secondary-container. FLO-277.
106
108
  &__cell--range {
109
+ position: relative;
107
110
  background: linear-gradient(transparent 4px, t.color('secondary-container') 4px, t.color('secondary-container') 44px, transparent 44px) no-repeat;
108
111
  .#{$component}__day:not(.#{$component}__day--selected) { color: t.color('on-secondary-container'); }
109
112
  }
110
113
  &__cell--range-start { background-size: 50% 100%; background-position: 100% 0; &:dir(rtl) { background-position: 0 0; } }
111
114
  &__cell--range-end { background-size: 50% 100%; background-position: 0 0; &:dir(rtl) { background-position: 100% 0; } }
112
115
  &__cell--range-start#{&}__cell--range-end { background: none; }
116
+ // Where the range wraps to the next week, the band runs on through the grid's inline
117
+ // padding to the container edge, as m3.material.io's range picker draws it: the row
118
+ // it leaves to the end edge, the row it continues on from the start edge. Under the
119
+ // day by tree order: the day's own ::before and ::after are its selection and layer.
120
+ &__cell--range:is(:last-child:not(&__cell--range-end), :first-child:not(&__cell--range-start))::before {
121
+ content: ''; position: absolute; top: 4px; width: var(--#{$component}-grid-inset); height: 40px;
122
+ background: t.color('secondary-container');
123
+ }
124
+ &__cell--range:last-child::before { inset-inline-start: 100%; }
125
+ &__cell--range:first-child::before { inset-inline-end: 100%; }
113
126
  &__day {
114
127
  position: relative; isolation: isolate; width: 100%; height: 48px; padding: 0; border: 0;
115
128
  background: transparent; color: t.color('on-surface'); cursor: pointer;
@@ -380,10 +380,11 @@ $component: "#{base.$prefix}-textfield";
380
380
  color: t.color("error");
381
381
  }
382
382
 
383
- // Required indicator
383
+ // The required asterisk (FLO-301): part of the label, in its colour and
384
+ // straight after its text, as Material Web appends it. It was the error
385
+ // colour with a 4px gap, a style no element carried until now.
384
386
  &__required {
385
- color: t.color("error");
386
- margin-left: 4px;
387
+ color: inherit;
387
388
  }
388
389
 
389
390
  // Accessibility
@@ -411,11 +412,6 @@ $component: "#{base.$prefix}-textfield";
411
412
  transform-origin: right top;
412
413
  }
413
414
 
414
- &__required {
415
- margin-left: 0;
416
- margin-right: 4px;
417
- }
418
-
419
415
  &__prefix {
420
416
  left: auto;
421
417
  right: 16px;
@@ -1155,3 +1151,60 @@ $component: "#{base.$prefix}-textfield";
1155
1151
  }
1156
1152
  }
1157
1153
  }
1154
+
1155
+ // ============================================================================
1156
+ // An interactive trailing icon (FLO-301)
1157
+ // ============================================================================
1158
+ // With `trailingIconLabel` the trailing icon is a button: M3 draws an
1159
+ // interactive trailing icon as an icon button, as Compose's trailing slot holds
1160
+ // an IconButton, so a 40dp round state layer centred on the 24dp icon and a 48dp
1161
+ // target. Last in the file, and two classes, so the variant and density rules
1162
+ // that place the decorative icon keep its centre but not its size.
1163
+ .#{$component}__trailing-icon.#{$component}__trailing-icon--button {
1164
+ right: 4px;
1165
+ width: 40px;
1166
+ height: 40px;
1167
+ padding: 0;
1168
+ border: 0;
1169
+ border-radius: 50%;
1170
+ background: transparent;
1171
+ font: inherit;
1172
+ cursor: pointer;
1173
+ @include m.touch-target(48px);
1174
+ // The mixin makes its host relative; the icon stays placed in the field
1175
+ position: absolute;
1176
+
1177
+ // One state layer whose opacity the states set, as the icon button draws it
1178
+ &::before {
1179
+ content: "";
1180
+ position: absolute;
1181
+ inset: 0;
1182
+ border-radius: inherit;
1183
+ background-color: currentColor;
1184
+ opacity: 0;
1185
+ pointer-events: none;
1186
+ }
1187
+
1188
+ &:hover:not(:disabled)::before {
1189
+ opacity: 0.08;
1190
+ }
1191
+
1192
+ &:focus-visible {
1193
+ outline: 2px solid t.color("secondary");
1194
+ outline-offset: 2px;
1195
+ }
1196
+
1197
+ &:focus-visible::before,
1198
+ &:active:not(:disabled)::before {
1199
+ opacity: 0.1;
1200
+ }
1201
+
1202
+ &:disabled {
1203
+ cursor: default;
1204
+ }
1205
+
1206
+ @include m.rtl {
1207
+ right: auto;
1208
+ left: 4px;
1209
+ }
1210
+ }
@@ -1,4 +1,5 @@
1
1
  // src/styles/themes/_autumn.scss
2
+ // Medium/high contrast: Tonal Spot from seed #795548, secondary from #a02a2a, tertiary from #4d6642.
2
3
  @use "../abstract/base" as *;
3
4
  @use "base-theme" as *;
4
5
 
@@ -116,3 +117,175 @@
116
117
  --#{$prefix}-sys-color-inverse-primary: #7a5649;
117
118
  }
118
119
  }
120
+
121
+ // contrast roles: generated, do not edit
122
+ @include create-theme-contrast("autumn", (
123
+ medium: (
124
+ light: (
125
+ error: #740006,
126
+ error-container: #cf2c27,
127
+ on-error-container: #ffffff,
128
+ primary: #5d260f,
129
+ primary-container: #a05a40,
130
+ on-primary-container: #ffffff,
131
+ secondary: #72040e,
132
+ secondary-container: #bf413e,
133
+ on-secondary-container: #ffffff,
134
+ tertiary: #253c1c,
135
+ tertiary-container: #5a744f,
136
+ on-tertiary-container: #ffffff,
137
+ primary-fixed: #a05a40,
138
+ primary-fixed-dim: #83432a,
139
+ on-primary-fixed: #ffffff,
140
+ on-primary-fixed-variant: #ffffff,
141
+ secondary-fixed: #bf413e,
142
+ secondary-fixed-dim: #9e2929,
143
+ on-secondary-fixed: #ffffff,
144
+ on-secondary-fixed-variant: #ffffff,
145
+ tertiary-fixed: #5a744f,
146
+ tertiary-fixed-dim: #435b38,
147
+ on-tertiary-fixed: #ffffff,
148
+ on-tertiary-fixed-variant: #ffffff,
149
+ surface: #fff8f6,
150
+ surface-dim: #d4c3be,
151
+ surface-bright: #fff8f6,
152
+ surface-variant: #f5ded6,
153
+ surface-container-low: #fff1ec,
154
+ surface-container: #f7e4df,
155
+ surface-container-high: #ebd9d4,
156
+ surface-container-highest: #dfcec9,
157
+ on-surface: #180f0c,
158
+ on-surface-variant: #41332e,
159
+ outline: #5f4f4a,
160
+ outline-variant: #7b6963,
161
+ inverse-surface: #392e2b,
162
+ inverse-on-surface: #ffede7,
163
+ inverse-primary: #ffb59a,
164
+ ),
165
+ dark: (
166
+ error: #ffd2cc,
167
+ on-error: #540003,
168
+ error-container: #ff5449,
169
+ on-error-container: #000000,
170
+ primary: #ffd3c4,
171
+ on-primary: #471602,
172
+ primary-container: #ca7d60,
173
+ on-primary-container: #000000,
174
+ secondary: #ffd2ce,
175
+ on-secondary: #540007,
176
+ secondary-container: #ef645e,
177
+ on-secondary-container: #000000,
178
+ tertiary: #c8e5b8,
179
+ on-tertiary: #152b0d,
180
+ tertiary-container: #7d9870,
181
+ on-tertiary-container: #000000,
182
+ primary-fixed-dim: #ffb59a,
183
+ on-primary-fixed: #260700,
184
+ on-primary-fixed-variant: #5d260f,
185
+ on-secondary-fixed: #2d0002,
186
+ on-secondary-fixed-variant: #72040e,
187
+ on-tertiary-fixed: #021500,
188
+ on-tertiary-fixed-variant: #253c1c,
189
+ surface: #1a110e,
190
+ surface-dim: #1a110e,
191
+ surface-bright: #4d423e,
192
+ surface-variant: #53433e,
193
+ surface-container-lowest: #0d0604,
194
+ surface-container-low: #251c18,
195
+ surface-container: #302622,
196
+ surface-container-high: #3b302d,
197
+ surface-container-highest: #463b37,
198
+ on-surface: #ffffff,
199
+ on-surface-variant: #eed8d0,
200
+ outline: #c2ada7,
201
+ outline-variant: #a08c86,
202
+ inverse-surface: #f1dfd9,
203
+ inverse-on-surface: #322824,
204
+ inverse-primary: #73371f,
205
+ ),
206
+ ),
207
+ high: (
208
+ light: (
209
+ error: #600004,
210
+ error-container: #98000a,
211
+ on-error-container: #ffffff,
212
+ primary: #4f1c06,
213
+ primary-container: #753820,
214
+ on-primary-container: #ffffff,
215
+ secondary: #600009,
216
+ secondary-container: #8e1c1f,
217
+ on-secondary-container: #ffffff,
218
+ tertiary: #1b3213,
219
+ tertiary-container: #374f2e,
220
+ on-tertiary-container: #ffffff,
221
+ primary-fixed: #753820,
222
+ primary-fixed-dim: #58220c,
223
+ on-primary-fixed: #ffffff,
224
+ on-primary-fixed-variant: #ffffff,
225
+ secondary-fixed: #8e1c1f,
226
+ secondary-fixed-dim: #6d000b,
227
+ on-secondary-fixed: #ffffff,
228
+ on-secondary-fixed-variant: #ffffff,
229
+ tertiary-fixed: #374f2e,
230
+ tertiary-fixed-dim: #213819,
231
+ on-tertiary-fixed: #ffffff,
232
+ on-tertiary-fixed-variant: #ffffff,
233
+ surface: #fff8f6,
234
+ surface-dim: #c6b5b0,
235
+ surface-bright: #fff8f6,
236
+ surface-variant: #f5ded6,
237
+ surface-container-low: #ffede7,
238
+ surface-container: #f1dfd9,
239
+ surface-container-high: #e2d1cb,
240
+ surface-container-highest: #d4c3be,
241
+ on-surface: #000000,
242
+ on-surface-variant: #000000,
243
+ outline: #362924,
244
+ outline-variant: #554641,
245
+ inverse-surface: #392e2b,
246
+ inverse-on-surface: #ffffff,
247
+ inverse-primary: #ffb59a,
248
+ ),
249
+ dark: (
250
+ error: #ffece9,
251
+ on-error: #000000,
252
+ error-container: #ffaea4,
253
+ on-error-container: #220001,
254
+ primary: #ffece6,
255
+ on-primary: #000000,
256
+ primary-container: #ffb093,
257
+ on-primary-container: #1c0400,
258
+ secondary: #ffecea,
259
+ on-secondary: #000000,
260
+ secondary-container: #ffaea7,
261
+ on-secondary-container: #220001,
262
+ tertiary: #dbf9ca,
263
+ on-tertiary: #000000,
264
+ tertiary-container: #afcb9f,
265
+ on-tertiary-container: #010f00,
266
+ primary-fixed-dim: #ffb59a,
267
+ on-primary-fixed: #000000,
268
+ on-primary-fixed-variant: #260700,
269
+ on-secondary-fixed: #000000,
270
+ on-secondary-fixed-variant: #2d0002,
271
+ on-tertiary-fixed: #000000,
272
+ on-tertiary-fixed-variant: #021500,
273
+ surface: #1a110e,
274
+ surface-dim: #1a110e,
275
+ surface-bright: #5a4d49,
276
+ surface-variant: #53433e,
277
+ surface-container-lowest: #000000,
278
+ surface-container-low: #271e1a,
279
+ surface-container: #392e2b,
280
+ surface-container-high: #443935,
281
+ surface-container-highest: #504440,
282
+ on-surface: #ffffff,
283
+ on-surface-variant: #ffffff,
284
+ outline: #ffece6,
285
+ outline-variant: #d4beb7,
286
+ inverse-surface: #f1dfd9,
287
+ inverse-on-surface: #000000,
288
+ inverse-primary: #73371f,
289
+ ),
290
+ ),
291
+ ));
@@ -1,4 +1,5 @@
1
1
  // src/styles/themes/_base-theme.scss
2
+ @use 'sass:map';
2
3
  @use '../abstract/base' as *;
3
4
 
4
5
  // Base theme definition with common properties and structure
@@ -8,34 +9,121 @@
8
9
  }
9
10
  }
10
11
 
12
+ // Media queries cannot condition one member of a selector list. Emit high
13
+ // values in both explicit and system activation rules so standard/inherited
14
+ // tokens stay untouched when the system preference is off.
15
+ @function contrast-scope($name) {
16
+ @if $name == "baseline" {
17
+ @return ':is([data-theme="baseline"], :root:not([data-theme]))';
18
+ }
19
+ @return '[data-theme="#{$name}"]';
20
+ }
21
+
22
+ @mixin contrast-values($tokens, $mode) {
23
+ @each $role, $value in map.get($tokens, $mode) {
24
+ --#{$prefix}-sys-color-#{$role}: #{$value};
25
+ }
26
+ }
27
+
28
+ @mixin contrast-modes($name, $tokens) {
29
+ // Light must not leak into dark when its unchanged roles are omitted.
30
+ &:not([data-theme-mode="dark"]) {
31
+ @if $name == "baseline" {
32
+ &[data-theme] {
33
+ @include contrast-values($tokens, light);
34
+ }
35
+ } @else {
36
+ @include contrast-values($tokens, light);
37
+ }
38
+ }
39
+ @if $name == "baseline" {
40
+ // Match baseline's standard palette: the unthemed root ignores the mode
41
+ // attribute, following only the OS scheme and the manual dark class.
42
+ @media not (prefers-color-scheme: dark) {
43
+ &:root:not([data-theme]):not(.dark-theme) {
44
+ @include contrast-values($tokens, light);
45
+ }
46
+ }
47
+ &[data-theme][data-theme-mode="dark"], &:root:not([data-theme]).dark-theme {
48
+ @include contrast-values($tokens, dark);
49
+ }
50
+ @media (prefers-color-scheme: dark) {
51
+ &:root:not([data-theme]):not(.dark-theme) {
52
+ @include contrast-values($tokens, dark);
53
+ }
54
+ }
55
+ } @else {
56
+ &[data-theme-mode="dark"] {
57
+ @include contrast-values($tokens, dark);
58
+ }
59
+ }
60
+ }
61
+
62
+ @mixin create-theme-contrast($name, $levels) {
63
+ $scope: contrast-scope($name);
64
+ $high: map.get($levels, high);
65
+ $shared: (light: (), dark: ());
66
+ $distinct: $levels;
67
+ @each $mode, $tokens in map.get($levels, medium) {
68
+ @each $role, $value in $tokens {
69
+ @if $value == map.get($high, $mode, $role) {
70
+ $shared: map.set($shared, $mode, $role, $value);
71
+ @each $level in (medium, high) {
72
+ $distinct: map.set($distinct, $level, $mode, map.remove(map.get($distinct, $level, $mode), $role));
73
+ }
74
+ }
75
+ }
76
+ }
77
+ #{$scope}:is([data-theme-contrast="medium"], [data-theme-contrast="high"]) {
78
+ @include contrast-modes($name, $shared);
79
+ }
80
+ @each $level, $tokens in $distinct {
81
+ #{$scope}[data-theme-contrast="#{$level}"] {
82
+ @include contrast-modes($name, $tokens);
83
+ }
84
+ }
85
+ @media (prefers-contrast: more) {
86
+ #{$scope}:not([data-theme-contrast]) {
87
+ @include contrast-modes($name, $high);
88
+ }
89
+ }
90
+ }
91
+
11
92
  // Success, warning and info: not M3 scheme roles, so no scheme generates them.
12
93
  // Every theme takes these values, baseline included (FLO-329).
94
+ // Each keeps its colour's HCT hue and chroma (material-color-utilities) at the
95
+ // tones M3 uses for a role and its on-role: light tone 40 on 100, dark tone 80
96
+ // on 20 (ColorSpec2021 primary / onPrimary). Those tones clear 4.5:1, so none
97
+ // is shifted further (FLO-407).
13
98
  @mixin status-roles-light() {
14
- // Success colors
15
- --#{$prefix}-sys-color-success: #007B5A;
99
+ // Success: #007B5A (hue 169, chroma 43) brought from tone 46 to 40. 6.45:1.
100
+ --#{$prefix}-sys-color-success: #006C4E;
16
101
  --#{$prefix}-sys-color-on-success: #FFFFFF;
17
102
 
18
- // Warning colors
19
- --#{$prefix}-sys-color-warning: #DD6D06;
103
+ // Warning: #DD6D06 (hue 51, chroma 63) was tone 58, 3.35:1 under white.
104
+ // Tone 40 is #974800, 6.48:1, still orange.
105
+ --#{$prefix}-sys-color-warning: #974800;
20
106
  --#{$prefix}-sys-color-on-warning: #FFFFFF;
21
107
 
22
- // Info colors
108
+ // Info: #0061A4 is already tone 40 of its palette. 6.47:1.
23
109
  --#{$prefix}-sys-color-info: #0061A4;
24
110
  --#{$prefix}-sys-color-on-info: #FFFFFF;
25
111
  }
26
112
 
27
113
  @mixin status-roles-dark() {
28
- // Success colors
29
- --#{$prefix}-sys-color-success: #85CFA9;
30
- --#{$prefix}-sys-color-on-success: #00392D;
114
+ // Success: #85CFA9 (hue 165, chroma 37) at tone 80, on-role at tone 20. 7.76:1.
115
+ --#{$prefix}-sys-color-success: #8CD6AF;
116
+ --#{$prefix}-sys-color-on-success: #003824;
31
117
 
32
- // Warning colors
118
+ // Warning: #FFB95C is already tone 80 (hue 71, chroma 43). Its on-role was
119
+ // tone 16; tone 20 is #462A00. 7.76:1.
33
120
  --#{$prefix}-sys-color-warning: #FFB95C;
34
- --#{$prefix}-sys-color-on-warning: #3F2200;
121
+ --#{$prefix}-sys-color-on-warning: #462A00;
35
122
 
36
- // Info colors
123
+ // Info: #99CBFF is already tone 80. Its on-role was tone 20 in hue, not of
124
+ // this palette; tone 20 is #003355. 7.69:1.
37
125
  --#{$prefix}-sys-color-info: #99CBFF;
38
- --#{$prefix}-sys-color-on-info: #003060;
126
+ --#{$prefix}-sys-color-on-info: #003355;
39
127
  }
40
128
 
41
129
  // Common status colors that should be available in all themes