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
@@ -1 +1 @@
1
- !function(e,o){"object"==typeof exports&&"object"==typeof module?module.exports=o():"function"==typeof define&&define.amd?define([],o):"object"==typeof exports?exports.micl=o():e.micl=o()}(self,()=>(()=>{"use strict";var e={};return(e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})})(e),e})());
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.micl=t():e.micl=t()}(self,()=>(()=>{"use strict";var e={56(e,t,n){const o=globalThis.__miclRegistry??={map:{},rippled:new WeakSet,activated:!1},r=()=>Object.keys(o.map).join(","),i=e=>Object.entries(o.map).find(([t,{type:n}])=>e.matches(t)&&e instanceof n)?.[1],a=e=>{const t=i(e);t&&"function"==typeof t.component.initialize&&t.component.initialize(e)},l=e=>{const t=i(e);t&&"function"==typeof t.component.cleanup&&t.component.cleanup(e)},c=e=>{const t=r();if(!t)return;const n=e.target.closest(t);if(!(n instanceof HTMLElement))return;const o=i(n),a=e.type;o&&"function"==typeof o.component[a]&&o.component[a]?.(e)},s=()=>{o.activated||(o.activated=!0,new MutationObserver(e=>{e.forEach(e=>{"childList"===e.type&&(e.addedNodes.forEach(e=>{if(e instanceof HTMLElement){const t=r();t&&e.matches(t)&&a(e),t&&e.querySelectorAll(t).forEach(a)}}),e.removedNodes.forEach(e=>{if(e instanceof HTMLElement){const t=r();t&&e.matches(t)&&l(e),(e=>{const t=r();t&&e.querySelectorAll(t).forEach(l)})(e)}}))})}).observe(document.body,{childList:!0,subtree:!0}),(e=>{const t=r();t&&e.querySelectorAll(t).forEach(a),e.querySelectorAll('[class*="micl-"], [class*="micl-"] > summary').forEach(e=>{o.rippled.has(e)||"1"===window.getComputedStyle(e).getPropertyValue("--micl-ripple")&&(e.addEventListener("pointerdown",t=>{if(t.currentTarget.classList.contains("micl-card--nonactionable"))return;t.stopPropagation();const n=e.getBoundingClientRect();e.style.setProperty("--micl-x",(t.clientX-n.left)/n.width*100+"%"),e.style.setProperty("--micl-y",(t.clientY-n.top)/n.height*100+"%"),e.classList.remove("micl-rippling"),e.offsetWidth,e.classList.add("micl-rippling");const o=t=>{"micl-ripple"===t.animationName&&(e.classList.remove("micl-rippling"),e.style.removeProperty("--micl-x"),e.style.removeProperty("--micl-y"),e.removeEventListener("animationend",o))};e.addEventListener("animationend",o)}),o.rippled.add(e))}),document.documentElement.style.setProperty("--md-sys-scrollbar-thumb-color",window.getComputedStyle(document.body).getPropertyValue("--md-sys-color-outline").trim())})(document),document.addEventListener("change",c),document.addEventListener("input",c),document.addEventListener("keydown",c))},d=()=>{document.removeEventListener("DOMContentLoaded",d),s()};"loading"!==document.readyState?s():document.addEventListener("DOMContentLoaded",d),n.d(t,["register",0,(e,t,n)=>(o.map[e]={component:t,type:n},o.activated&&document.querySelectorAll(e).forEach(a),t)])}};const t={};function n(o){const r=t[o];if(void 0!==r)return r.exports;const i=t[o]={exports:{}};return e[o](i,i.exports,n),i.exports}n.d=(e,t)=>{if(Array.isArray(t))for(var o=0;o<t.length;){var r=t[o++],i=t[o++];n.o(e,r)?0===i&&o++:0===i?Object.defineProperty(e,r,{enumerable:!0,value:t[o++]}):Object.defineProperty(e,r,{enumerable:!0,get:i})}else for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};let o={};n.r(o);var r=n(56);const i="dialog.micl-dialog.micl-timepicker",a="micl-timepicker__",l="micl-timepicker__dial--hidden",c="micl-timepicker--selected",s=(()=>{try{const e=new Intl.DateTimeFormat(void 0,{hour:"numeric"}).resolvedOptions().hourCycle;return"h11"===e||"h12"===e}catch(e){return!1}})(),d=(e,t)=>e.querySelector(t),m=e=>e instanceof HTMLInputElement||e instanceof HTMLButtonElement,u=e=>!!e&&!e.classList.contains(l),p=(e,t)=>{e.classList.toggle(c,t)},f=e=>document.querySelector(`[data-timepicker="${e.id}"],[popovertarget="${e.id}"],[commandfor="${e.id}"]`),y=e=>"hour"===e?{min:s?1:0,max:s?12:23}:{min:0,max:59},v=(e,t,n)=>{e.querySelectorAll("data").forEach(e=>e.classList.remove(`${a}time--selected`));const o=e.querySelector(`data[data-${t}][value="${n}"]`);let r="";o?(r=window.getComputedStyle(o).getPropertyValue("--micl-angle"),o.classList.add(`${a}time--selected`)):"minute"===t&&(r=`${Math.round(360*parseInt(n,10)/60-90)}deg`),r&&e.style.setProperty("--micl-angle",r)},g=(e,t,n,o,r=!0)=>{let i=parseInt(n||"0",10);if(isNaN(i))return;const l=d(e,`input[name=${t}]`);if(l){if("hour"===t&&o&&s){const t=e.querySelector(`.${a}am`),n=e.querySelector(`.${a}pm`);i>=12?(n&&(n.checked=!0),i>12&&(i-=12)):(t&&(t.checked=!0),0===i&&(i=12))}if(l.value=`${i}`.padStart(2,"0"),r){const n=d(e,`.${a}dial`);if(!n)return;v(n,t,l.value)}}},h=(e,t,n)=>{if("ArrowDown"!==n.key&&"ArrowUp"!==n.key)return;n.preventDefault();const{max:o,min:r}=y(t.name);let i=parseInt(t.value,10)||0;if(i+="ArrowUp"===n.key?1:-1,(i<r||i>o)&&(i=i<r?o:r,"hour"===t.name&&s)){const t=e.querySelector("input[name=period]:not(:checked)");t?.click()}g(e,t.name,`${i}`)},E=(0,r.register)(i,{initialize:e=>{if(e.dataset.miclinitialized)return;const t=d(e,"form"),n=d(e,`.${a}inputmode`),o=d(e,`.${a}dial`),r=[d(e,"input[name=hour]"),d(e,"input[name=minute]")].filter(e=>null!==e);if(!t||r.length<2)return;e.dataset.miclinitialized="1",r.forEach((t,n)=>{(e=>{const{min:t,max:n}=y(e.name);let o;o="hour"===e.name?s?"(0[1-9]|1[0-2])":"(0[0-9]|1[0-9]|2[0-3])":"(0[0-9]|[1-5][0-9])";const r={maxlength:"2",pattern:o,inputmode:"numeric",autocomplete:"off",role:"spinbutton",min:String(t),max:String(n)};for(const t in r)e.setAttribute(t,r[t])})(t),o&&t.toggleAttribute("readonly",u(o)),t.addEventListener("keydown",h.bind(null,e,t)),t.addEventListener("focus",()=>{p(r[0===n?1:0],!1),p(t,!0),o&&(((e,t)=>{e.querySelectorAll("data").forEach(e=>{e.dataset[t]&&(e.textContent=e.dataset[t],e.value=e.dataset[t].padStart(2,"0")),e.classList.contains(`${a}dial-inner`)&&e.classList["hour"===t?"remove":"add"](l)})})(o,t.name),v(o,t.name,t.value))}),t.addEventListener("blur",()=>{u(o)||((e=>{const{max:t,min:n}=y(e.name);let o=parseInt(e.value,10);isNaN(o)&&(o=n),o>t&&(o=t),o<0&&(o=n),e.value=String(o).padStart(2,"0")})(t),p(t,!1))})});const i=e.querySelector(`.${a}period`);if(i&&s&&(["am","pm"].forEach(e=>{let t=document.createElement("input");t.type="radio",t.name="period",t.className=`${a}${e}`,t.value=e,t.ariaLabel=e.toUpperCase(),i.appendChild(t)}),i.classList.toggle(l,!s)),n?.addEventListener("click",()=>{o?.classList.toggle(l),r.forEach(e=>{e.toggleAttribute("readonly",u(o))}),u(o)&&r[0].focus()}),o){(e=>{let t=s?300:270;for(let n=s?1:0;n<=(s?12:23);n++){const o=document.createElement("data");o.value=`${n}`.padStart(2,"0"),o.textContent=`${n}`,o.dataset.hour=`${n}`,o.style.setProperty("--micl-angle",`${t}deg`),!s&&n>=12?o.classList.add(`${a}dial-inner`):o.dataset.minute=""+5*n%60,e.appendChild(o),t=(t+30)%360}const n=document.createElement("span");n.className=`${a}track`,e.appendChild(n)})(o);const t=(t,n)=>{const o=document.elementFromPoint(t,n);o&&"DATA"===o.tagName&&g(e,e.querySelector(`input[name=hour].${c}`)?"hour":"minute",o.value)};o.addEventListener("pointerdown",e=>{o.classList.add(`${a}dial--dragging`),t(e.clientX,e.clientY),o.setPointerCapture(e.pointerId)}),o.addEventListener("pointermove",e=>{o.classList.contains(`${a}dial--dragging`)&&t(e.clientX,e.clientY)});const n=e=>{o.classList.remove(`${a}dial--dragging`),o.releasePointerCapture(e.pointerId)};o.addEventListener("pointerup",n),o.addEventListener("pointercancel",n)}e.addEventListener("beforetoggle",t=>{if("open"===t.oldState)return;let n=document.activeElement;if((!m(n)||n.dataset.timepicker!==e.id&&n.popoverTargetElement!==e&&n.commandForElement!==e)&&(n=f(e)),!m(n))return;e._miclInvoker=n;const o=(n.value||n.textContent).split(":");2===o.length&&(g(e,"hour",o[0],!0),g(e,"minute",o[1],!1,!1))}),e.addEventListener("close",()=>{if(!e.returnValue)return;let n=e._miclInvoker;if(n||(n=f(e)),!m(n))return;const o=t.elements;let r=parseInt(o.namedItem("hour")?.value||"0",10);if(isNaN(r))return;s&&(r%=12,"pm"===o.namedItem("period")?.value&&(r+=12));const i=parseInt(o.namedItem("minute")?.value||"0",10);if(isNaN(i))return;const a=`${r}`.padStart(2,"0")+":"+`${i}`.padStart(2,"0");n.value=a,n instanceof HTMLInputElement?(n.dispatchEvent(new Event("change",{bubbles:!0})),n.dispatchEvent(new Event("input",{bubbles:!0}))):n.textContent=a})}},HTMLDialogElement);return n.d(o,["default",0,E,"timepickerSelector",0,i]),o})());
@@ -0,0 +1,35 @@
1
+ //
2
+ // Copyright © 2025 Hermana AS
3
+ //
4
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ // of this software and associated documentation files (the "Software"), to deal
6
+ // in the Software without restriction, including without limitation the rights
7
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ // copies of the Software, and to permit persons to whom the Software is
9
+ // furnished to do so, subject to the following conditions:
10
+ //
11
+ // The above copyright notice and this permission notice shall be included in all
12
+ // copies or substantial portions of the Software.
13
+ //
14
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ // SOFTWARE.
21
+
22
+ // Pure declarations only — @use of this module must never emit CSS.
23
+ // The emitted foundation styles (:root tokens, @property registrations,
24
+ // utility classes) live in foundations/base, which is compiled once into
25
+ // micl.css and standalone as dist/base.css.
26
+
27
+ $md-sys-icon-size: 24px;
28
+
29
+ $md-sys-padding-xxs: 4px;
30
+ $md-sys-padding-xs: 8px;
31
+ $md-sys-padding-s: 12px;
32
+ $md-sys-padding-m: 16px;
33
+ $md-sys-padding-l: 20px;
34
+ $md-sys-padding-xl: 24px;
35
+ $md-sys-padding-xxl: 28px;
@@ -19,62 +19,23 @@
19
19
  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
20
  // SOFTWARE.
21
21
 
22
- $md-sys-icon-size: 24px;
22
+ // Shared foundation styles, emitted exactly once: the :root design tokens,
23
+ // the @property registrations the ripple effect depends on, and the generic
24
+ // utility classes. Included in micl.css; consumers loading per-component CSS
25
+ // files must load dist/base.css first (once).
23
26
 
24
- $md-sys-padding-xxs: 4px;
25
- $md-sys-padding-xs: 8px;
26
- $md-sys-padding-s: 12px;
27
- $md-sys-padding-m: 16px;
28
- $md-sys-padding-l: 20px;
29
- $md-sys-padding-xl: 24px;
30
- $md-sys-padding-xxl: 28px;
27
+ @use '../index' as foundations;
31
28
 
32
29
  :root {
33
- --md-sys-icon-size: #{$md-sys-icon-size};
30
+ --md-sys-icon-size: #{foundations.$md-sys-icon-size};
34
31
 
35
- --md-sys-padding-xxs: #{$md-sys-padding-xxs};
36
- --md-sys-padding-xs: #{$md-sys-padding-xs};
37
- --md-sys-padding-s: #{$md-sys-padding-s};
38
- --md-sys-padding-m: #{$md-sys-padding-m};
39
- --md-sys-padding-l: #{$md-sys-padding-l};
40
- --md-sys-padding-xl: #{$md-sys-padding-xl};
41
- --md-sys-padding-xxl: #{$md-sys-padding-xxl};
42
- }
43
-
44
- .micl-hidden {
45
- display: none !important;
46
- }
47
- .micl-no-transition {
48
- transition: none !important;
49
- }
50
- .micl-flex--vcenter {
51
- display: flex;
52
- flex-direction: row;
53
- align-items: center;
54
- }
55
-
56
- .micl-grid-field,
57
- .micl-grid-iconfield {
58
- box-sizing: border-box;
59
- display: grid;
60
- row-gap: var(--md-sys-padding-xl, 24px);
61
- }
62
- .micl-grid-iconfield {
63
- grid-template-columns: 48px 1fr;
64
- }
65
- .micl-grid-iconfield__icon {
66
- grid-column: 1;
67
- margin-block-start: 0.6rem;
68
- }
69
- .micl-grid-iconfield__field {
70
- grid-column: 2;
71
- }
72
-
73
- .micl-link {
74
- display: flex;
75
- align-items: center;
76
- justify-content: center;
77
- text-decoration: none;
32
+ --md-sys-padding-xxs: #{foundations.$md-sys-padding-xxs};
33
+ --md-sys-padding-xs: #{foundations.$md-sys-padding-xs};
34
+ --md-sys-padding-s: #{foundations.$md-sys-padding-s};
35
+ --md-sys-padding-m: #{foundations.$md-sys-padding-m};
36
+ --md-sys-padding-l: #{foundations.$md-sys-padding-l};
37
+ --md-sys-padding-xl: #{foundations.$md-sys-padding-xl};
38
+ --md-sys-padding-xxl: #{foundations.$md-sys-padding-xxl};
78
39
  }
79
40
 
80
41
  @property --micl-ripple {
@@ -82,15 +43,19 @@ $md-sys-padding-xxl: 28px;
82
43
  inherits: false;
83
44
  initial-value: 0;
84
45
  }
46
+ // The ripple coordinates are percentages: the runtime sets the touch point as a percentage of the
47
+ // element, which pins the gradient box (background-position) and the circle within it (circle at)
48
+ // to the same element point at every background-size.
49
+ // The 50% initial value doubles as a centered fallback.
85
50
  @property --micl-x {
86
- syntax: '<length>';
51
+ syntax: '<length-percentage>';
87
52
  inherits: false;
88
- initial-value: -100000px;
53
+ initial-value: 50%;
89
54
  }
90
55
  @property --micl-y {
91
- syntax: '<length>';
56
+ syntax: '<length-percentage>';
92
57
  inherits: false;
93
- initial-value: -100000px;
58
+ initial-value: 50%;
94
59
  }
95
60
  @property --micl-width {
96
61
  syntax: '<length>';
@@ -0,0 +1,37 @@
1
+ //
2
+ // Copyright © 2025 Hermana AS
3
+ //
4
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ // of this software and associated documentation files (the "Software"), to deal
6
+ // in the Software without restriction, including without limitation the rights
7
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ // copies of the Software, and to permit persons to whom the Software is
9
+ // furnished to do so, subject to the following conditions:
10
+ //
11
+ // The above copyright notice and this permission notice shall be included in all
12
+ // copies or substantial portions of the Software.
13
+ //
14
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ // SOFTWARE.
21
+
22
+ .micl-grid-field,
23
+ .micl-grid-iconfield {
24
+ box-sizing: border-box;
25
+ display: grid;
26
+ row-gap: var(--md-sys-padding-xl, 24px);
27
+ }
28
+ .micl-grid-iconfield {
29
+ grid-template-columns: 48px 1fr;
30
+ }
31
+ .micl-grid-iconfield__icon {
32
+ grid-column: 1;
33
+ margin-block-start: 0.6rem;
34
+ }
35
+ .micl-grid-iconfield__field {
36
+ grid-column: 2;
37
+ }
@@ -23,59 +23,60 @@
23
23
 
24
24
  @include shape.corner('medium');
25
25
 
26
- $md-sys-window-compact-max: 599px;
27
- $md-sys-window-medium-min: 600px;
28
- $md-sys-window-medium-max: 839px;
29
- $md-sys-window-expanded-min: 840px;
30
- $md-sys-window-expanded-max: 1199px;
31
- $md-sys-window-large-min: 1200px;
32
- $md-sys-window-large-max: 1599px;
33
- $md-sys-window-extralarge-min: 1600px;
26
+ $md-sys-breakpoint-compact-max: 599px;
27
+ $md-sys-breakpoint-medium-min: 600px;
28
+ $md-sys-breakpoint-medium-max: 839px;
29
+ $md-sys-breakpoint-expanded-min: 840px;
30
+ $md-sys-breakpoint-expanded-max: 1199px;
31
+ $md-sys-breakpoint-large-min: 1200px;
32
+ $md-sys-breakpoint-large-max: 1599px;
33
+ $md-sys-breakpoint-extralarge-min: 1600px;
34
34
 
35
35
  $md-sys-window-margin-compact: 16px;
36
- $md-sys-window-margin-medium: 24px;
37
- $md-sys-window-margin-expanded: 24px;
38
- $md-sys-window-margin-large: 24px;
39
- $md-sys-window-margin-extralarge: 24px;
36
+ $md-sys-window-margin: 24px; // medium and larger breakpoints
40
37
 
41
38
  $md-sys-pane-spacer: 24px;
42
39
 
40
+ $md-sys-pane-fixed-width-expanded: 360px;
41
+ $md-sys-pane-fixed-width-large: 412px;
42
+
43
43
  :root {
44
44
  --md-sys-layout-pane-spacer: #{$md-sys-pane-spacer};
45
+ --md-sys-layout-window-margin: #{$md-sys-window-margin};
45
46
 
46
- @media (max-width: $md-sys-window-compact-max) {
47
+ @media (max-width: $md-sys-breakpoint-compact-max) {
47
48
  --md-sys-layout-window-margin: #{$md-sys-window-margin-compact};
48
49
  }
49
- @media (min-width: $md-sys-window-medium-min) and (max-width: $md-sys-window-medium-max) {
50
- --md-sys-layout-window-margin: #{$md-sys-window-margin-medium};
51
- }
52
- @media (min-width: $md-sys-window-expanded-min) and (max-width: $md-sys-window-expanded-max) {
53
- --md-sys-layout-window-margin: #{$md-sys-window-margin-expanded};
50
+ @media (min-width: $md-sys-breakpoint-expanded-min) and (max-width: $md-sys-breakpoint-expanded-max) {
51
+ --md-sys-layout-pane-fixed-width: #{$md-sys-pane-fixed-width-expanded};
54
52
  }
55
- @media (min-width: $md-sys-window-large-min) and (max-width: $md-sys-window-large-max) {
56
- --md-sys-layout-window-margin: #{$md-sys-window-margin-large};
57
- }
58
- @media (min-width: $md-sys-window-extralarge-min) {
59
- --md-sys-layout-window-margin: #{$md-sys-window-margin-extralarge};
53
+ @media (min-width: $md-sys-breakpoint-large-min) {
54
+ --md-sys-layout-pane-fixed-width: #{$md-sys-pane-fixed-width-large};
60
55
  }
61
56
  }
62
57
 
63
58
  .micl-window {
64
- padding: 0 var(--md-sys-layout-window-margin) var(--md-sys-layout-window-margin);
59
+ padding:
60
+ env(safe-area-inset-top, 0px)
61
+ calc(var(--md-sys-layout-window-margin) + env(safe-area-inset-right, 0px))
62
+ calc(var(--md-sys-layout-window-margin) + env(safe-area-inset-bottom, 0px))
63
+ calc(var(--md-sys-layout-window-margin) + env(safe-area-inset-left, 0px));
65
64
  margin: 0;
66
65
  background-color: var(--md-sys-color-surface);
67
66
 
68
- .micl-body .micl-appbar {
67
+ .micl-panes .micl-appbar {
69
68
  margin-inline: calc(-1 * var(--md-sys-layout-window-margin));
70
69
  }
71
- &:not(.micl-window--spatial):has(nav.micl-navigationrail) .micl-body .micl-appbar {
70
+ &:not(.micl-window--spatial):has(nav.micl-navigationrail) .micl-panes .micl-appbar {
72
71
  margin-inline-start: 0;
73
72
  }
74
73
  &.micl-window--spatial {
75
74
  --md-sys-layout-spatial-radius: calc(var(--md-sys-shape-corner-medium) + var(--md-sys-layout-window-margin));
76
75
 
77
76
  display: flex;
78
- padding-block: calc(2 * var(--md-sys-layout-window-margin));
77
+ padding-block:
78
+ calc(2 * var(--md-sys-layout-window-margin) + env(safe-area-inset-top, 0px))
79
+ calc(2 * var(--md-sys-layout-window-margin) + env(safe-area-inset-bottom, 0px));
79
80
  gap: var(--md-sys-layout-window-margin);
80
81
 
81
82
  .micl-navigationrail {
@@ -87,7 +88,7 @@ $md-sys-pane-spacer: 24px;
87
88
  padding-block-end: var(--md-sys-navigationrail-top-space, 0px);
88
89
  border-radius: var(--md-sys-layout-spatial-radius);
89
90
  }
90
- .micl-body {
91
+ .micl-panes {
91
92
  background: transparent;
92
93
  }
93
94
  .micl-pane {
@@ -97,19 +98,25 @@ $md-sys-pane-spacer: 24px;
97
98
  }
98
99
  }
99
100
  }
100
- .micl-body {
101
+ .micl-panes {
101
102
  box-sizing: border-box;
102
103
  display: flex;
103
104
  flex-direction: row;
104
105
  gap: var(--md-sys-comp-margin, 8px) var(--md-sys-layout-pane-spacer);
105
106
  background-color: inherit;
106
107
 
107
- &.micl-body--split:has(> .micl-pane:nth-child(2)) {
108
- .micl-pane {
109
- flex-basis: 50%;
108
+ &.micl-panes--split > .micl-pane + .micl-pane {
109
+ // The physical safety inset on the trailing pane's side of the screen.
110
+ --_layout-safe-inline-end: env(safe-area-inset-right, 0px);
111
+
112
+ box-sizing: border-box;
113
+ flex: 0 1 var(--_layout-stacked-pane-size, calc(50vw - var(--md-sys-layout-window-margin, 0px) - var(--_layout-safe-inline-end) - var(--md-sys-layout-pane-spacer) / 2));
114
+
115
+ &:dir(rtl) {
116
+ --_layout-safe-inline-end: env(safe-area-inset-left, 0px);
110
117
  }
111
118
  }
112
- &.micl-body--evenly .micl-pane {
119
+ &.micl-panes--evenly .micl-pane {
113
120
  flex: 1 1 0;
114
121
  }
115
122
  }
@@ -122,6 +129,8 @@ $md-sys-pane-spacer: 24px;
122
129
 
123
130
  &.micl-pane--fixed {
124
131
  flex: 0 0 auto;
132
+ box-sizing: border-box;
133
+ inline-size: var(--_layout-stacked-pane-size, var(--md-sys-layout-pane-fixed-width, auto));
125
134
  }
126
135
  &:has(> .micl-card-elevated, > .micl-card-filled, > .micl-card-outlined),
127
136
  &> *:has(> .micl-card-elevated, > .micl-card-filled, > .micl-card-outlined) {
@@ -153,59 +162,49 @@ $md-sys-pane-spacer: 24px;
153
162
  }
154
163
  }
155
164
 
156
- @media (max-width: $md-sys-window-compact-max) {
157
- .micl-body.micl-body--stacked-to-medium,
158
- .micl-body.micl-body--stacked-to-expanded,
159
- .micl-body.micl-body--stacked-to-large,
160
- .micl-body.micl-body--stacked-to-extralarge {
165
+ @media (max-width: $md-sys-breakpoint-compact-max) {
166
+ .micl-panes.micl-panes--stacked-to-medium {
167
+ --_layout-stacked-pane-size: auto;
168
+
161
169
  flex-direction: column;
162
170
  }
163
- .micl-pane.micl-pane--hidden-to-medium,
164
- .micl-pane.micl-pane--hidden-to-expanded,
165
- .micl-pane.micl-pane--hidden-to-large,
166
- .micl-pane.micl-pane--hidden-to-extralarge {
171
+ .micl-pane.micl-pane--hidden-to-medium {
167
172
  display: none;
168
173
  }
169
- .micl-pane__columns.micl-pane__columns--stacked-to-medium,
170
- .micl-pane__columns.micl-pane__columns--stacked-to-expanded,
171
- .micl-pane__columns.micl-pane__columns--stacked-to-large,
172
- .micl-pane__columns.micl-pane__columns--stacked-to-extralarge {
174
+ .micl-pane__columns.micl-pane__columns--stacked-to-medium {
173
175
  flex-direction: column;
174
176
  }
175
177
  }
176
- @media (min-width: $md-sys-window-medium-min) and (max-width: $md-sys-window-medium-max) {
177
- .micl-body.micl-body--stacked-to-expanded,
178
- .micl-body.micl-body--stacked-to-large,
179
- .micl-body.micl-body--stacked-to-extralarge {
178
+ @media (max-width: $md-sys-breakpoint-medium-max) {
179
+ .micl-panes.micl-panes--stacked-to-expanded {
180
+ --_layout-stacked-pane-size: auto;
181
+
180
182
  flex-direction: column;
181
183
  }
182
- .micl-pane.micl-pane--hidden-to-expanded,
183
- .micl-pane.micl-pane--hidden-to-large,
184
- .micl-pane.micl-pane--hidden-to-extralarge {
184
+ .micl-pane.micl-pane--hidden-to-expanded {
185
185
  display: none;
186
186
  }
187
- .micl-pane__columns.micl-pane__columns--stacked-to-expanded,
188
- .micl-pane__columns.micl-pane__columns--stacked-to-large,
189
- .micl-pane__columns.micl-pane__columns--stacked-to-extralarge {
187
+ .micl-pane__columns.micl-pane__columns--stacked-to-expanded {
190
188
  flex-direction: column;
191
189
  }
192
190
  }
193
- @media (min-width: $md-sys-window-expanded-min) and (max-width: $md-sys-window-expanded-max) {
194
- .micl-body.micl-body--stacked-to-large,
195
- .micl-body.micl-body--stacked-to-extralarge {
191
+ @media (max-width: $md-sys-breakpoint-expanded-max) {
192
+ .micl-panes.micl-panes--stacked-to-large {
193
+ --_layout-stacked-pane-size: auto;
194
+
196
195
  flex-direction: column;
197
196
  }
198
- .micl-pane.micl-pane--hidden-to-large,
199
- .micl-pane.micl-pane--hidden-to-extralarge {
197
+ .micl-pane.micl-pane--hidden-to-large {
200
198
  display: none;
201
199
  }
202
- .micl-pane__columns.micl-pane__columns--stacked-to-large,
203
- .micl-pane__columns.micl-pane__columns--stacked-to-extralarge {
200
+ .micl-pane__columns.micl-pane__columns--stacked-to-large {
204
201
  flex-direction: column;
205
202
  }
206
203
  }
207
- @media (min-width: $md-sys-window-large-min) and (max-width: $md-sys-window-large-max) {
208
- .micl-body.micl-body--stacked-to-extralarge {
204
+ @media (max-width: $md-sys-breakpoint-large-max) {
205
+ .micl-panes.micl-panes--stacked-to-extralarge {
206
+ --_layout-stacked-pane-size: auto;
207
+
209
208
  flex-direction: column;
210
209
  }
211
210
  .micl-pane.micl-pane--hidden-to-extralarge {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "material-inspired-component-library",
3
- "version": "8.1.0",
3
+ "version": "9.0.0",
4
4
  "description": "The Material-Inspired Component Library (MICL) offers a collection of beautifully crafted components leveraging native HTML markup, designed to align with the Material Design 3 guidelines.",
5
5
  "author": "MICL Hermana <micl.hermana@proton.me> (https://github.com/henkpb/micl)",
6
6
  "license": "MIT",
@@ -21,14 +21,19 @@
21
21
  "button",
22
22
  "card",
23
23
  "checkbox",
24
+ "chip",
24
25
  "date picker",
26
+ "date range picker",
25
27
  "dialog",
26
28
  "divider",
29
+ "field",
27
30
  "iconbutton",
28
31
  "layout",
29
32
  "list",
30
33
  "menu",
34
+ "navigation bar",
31
35
  "navigation rail",
36
+ "progress indicator",
32
37
  "radio button",
33
38
  "select",
34
39
  "shapes",
@@ -50,25 +55,34 @@
50
55
  },
51
56
  "main": "dist/micl.js",
52
57
  "types": "dist/micl.d.ts",
58
+ "files": [
59
+ "dist",
60
+ "styles.scss",
61
+ "styles/**/*.scss",
62
+ "foundations/**/*.scss",
63
+ "components/**/*.scss",
64
+ "components/**/README.md",
65
+ "themes"
66
+ ],
53
67
  "scripts": {
54
68
  "build": "webpack",
55
69
  "gen:shapes": "node tools/shapes/generate.mjs",
56
70
  "check:shapes": "node tools/shapes/check.mjs"
57
71
  },
58
- "sideEffects": false,
59
72
  "devDependencies": {
60
73
  "autoprefixer": "^10.5",
61
74
  "css-loader": "^7.1",
62
- "extract-loader": "^5.1",
63
- "file-loader": "^6.2",
64
75
  "glob": "^13.0",
65
76
  "mini-css-extract-plugin": "^2.10",
66
77
  "postcss-loader": "^8.2",
67
- "sass": "^1.99",
68
- "sass-loader": "^16.0",
69
- "ts-loader": "^9.5",
78
+ "sass": "^1.101",
79
+ "sass-loader": "^17.0",
80
+ "ts-loader": "^9.6",
70
81
  "typescript": "^6.0",
71
- "webpack": "^5.106",
72
- "webpack-cli": "^7.0"
82
+ "webpack": "^5.108",
83
+ "webpack-cli": "^7.2"
84
+ },
85
+ "allowScripts": {
86
+ "@parcel/watcher@2.5.6": true
73
87
  }
74
88
  }
@@ -20,6 +20,7 @@
20
20
  // SOFTWARE.
21
21
 
22
22
  @use 'sass:map';
23
+ @use 'motion';
23
24
 
24
25
  //
25
26
  // Set $master: true (via @use 'styles/statelayer' with ($master: true)) to install every
@@ -43,7 +44,7 @@ $_tokens: (
43
44
  focus-indicator-thickness: 3px,
44
45
  backdrop-opacity: 32%,
45
46
  ripple-opacity-factor: 0.6,
46
- ripple-duration: 5000ms,
47
+ ripple-duration: 750ms,
47
48
  );
48
49
 
49
50
  @if $master {
@@ -65,8 +66,15 @@ $_tokens: (
65
66
  }
66
67
 
67
68
  @keyframes micl-ripple {
68
- from { background-size: 0%, 100%; }
69
- to { background-size: 10000%, 100%; }
69
+ from {
70
+ background-size: 0% 0%, 100%;
71
+ animation-timing-function: motion.$md-sys-motion-easing-standard;
72
+ }
73
+ 60% {
74
+ background-size: 1000% 1000%, 100%;
75
+ animation-timing-function: motion.$md-sys-motion-easing-standard-accelerate;
76
+ }
77
+ to { background-size: 10000% 10000%, 100%; }
70
78
  }
71
79
  }
72
80
 
@@ -99,8 +107,15 @@ $_tokens: (
99
107
  @mixin keyframes {
100
108
  @if not $master {
101
109
  @keyframes micl-ripple {
102
- from { background-size: 0%, 100%; }
103
- to { background-size: 10000%, 100%; }
110
+ from {
111
+ background-size: 0% 0%, 100%;
112
+ animation-timing-function: motion.$md-sys-motion-easing-standard;
113
+ }
114
+ 60% {
115
+ background-size: 1000% 1000%, 100%;
116
+ animation-timing-function: motion.$md-sys-motion-easing-standard-accelerate;
117
+ }
118
+ to { background-size: 10000% 10000%, 100%; }
104
119
  }
105
120
  }
106
121
  }
package/styles.scss CHANGED
@@ -21,11 +21,12 @@
21
21
 
22
22
  @use 'styles/shape' with ($master: true);
23
23
  @use 'styles/elevation' with ($master: true);
24
+ @use 'styles/motion' with ($master: true);
24
25
  @use 'styles/statelayer' with ($master: true);
25
26
  @use 'styles/typography' with ($master: true);
26
- @use 'styles/motion' with ($master: true);
27
27
 
28
- @use 'foundations';
28
+ @use 'foundations/base';
29
+ @use 'foundations/field';
29
30
  @use 'foundations/layout';
30
31
  @use 'foundations/scrollbar';
31
32
 
@@ -38,6 +39,7 @@
38
39
  @use 'components/slider';
39
40
  @use 'components/button';
40
41
  @use 'components/iconbutton';
42
+ @use 'components/chip';
41
43
  @use 'components/list';
42
44
  @use 'components/menu';
43
45
  @use 'components/select';
@@ -48,6 +50,7 @@
48
50
  @use 'components/appbar';
49
51
  @use 'components/sidesheet';
50
52
  @use 'components/bottomsheet';
53
+ @use 'components/navigationbar';
51
54
  @use 'components/navigationrail';
52
55
  @use 'components/progressindicator';
53
56
  @use 'components/stepper';
@@ -1,14 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Bash(node *)",
5
- "WebSearch",
6
- "Bash(npm run *)",
7
- "WebFetch(domain:raw.githubusercontent.com)",
8
- "WebFetch(domain:android.googlesource.com)",
9
- "WebFetch(domain:m3.material.io)",
10
- "WebFetch(domain:github.com)",
11
- "Bash(xargs grep -l \"body\\\\|html\")"
12
- ]
13
- }
14
- }
package/.editorconfig DELETED
@@ -1,12 +0,0 @@
1
- # For GitHub
2
-
3
- root = true
4
-
5
- [*.{sass,css,ts,js}]
6
- charset = utf-8
7
- indent_style = space
8
- indent_size = 4
9
- tab_width = 4
10
- end_of_line = lf
11
- trim_trailing_whitespace = true
12
- insert_final_newline = true
package/.gitattributes DELETED
@@ -1,9 +0,0 @@
1
- * text=auto
2
-
3
- *.html text eol=lf
4
- *.scss text eol=lf
5
- *.css text eol=lf
6
- *.ts text eol=lf
7
- *.js text eol=lf
8
- *.md text eol=lf
9
- *.json text eol=lf
@@ -1,35 +0,0 @@
1
- ---
2
- name: Bug report
3
- about: Create a report to help us improve
4
- title: ''
5
- labels: ''
6
- assignees: ''
7
-
8
- ---
9
-
10
- **Describe the bug**
11
- A clear and concise description of what the bug is.
12
-
13
- **To Reproduce**
14
- Steps to reproduce the behavior:
15
- 1. Go to '...'
16
- 2. Click on '....'
17
- 3. Scroll down to '....'
18
- 4. See error
19
-
20
- **Expected behavior**
21
- A clear and concise description of what you expected to happen.
22
-
23
- **Screenshots**
24
- If applicable, add screenshots to help explain your problem.
25
-
26
- **Desktop (please complete the following information):**
27
- - Browser [e.g. chrome, safari]
28
- - Version [e.g. 22]
29
-
30
- **Smartphone (please complete the following information):**
31
- - Browser [e.g. chrome, safari]
32
- - Version [e.g. 22]
33
-
34
- **Additional context**
35
- Add any other context about the problem here.
@@ -1,20 +0,0 @@
1
- ---
2
- name: Feature request
3
- about: Suggest an idea for this project
4
- title: ''
5
- labels: ''
6
- assignees: ''
7
-
8
- ---
9
-
10
- **Is your feature request related to a problem? Please describe.**
11
- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12
-
13
- **Describe the solution you'd like**
14
- A clear and concise description of what you want to happen.
15
-
16
- **Describe alternatives you've considered**
17
- A clear and concise description of any alternative solutions or features you've considered.
18
-
19
- **Additional context**
20
- Add any other context or screenshots about the feature request here.