@expressivecss/expressive 0.14.1 → 0.15.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 (242) hide show
  1. package/CHANGELOG.md +88 -1
  2. package/README.md +1 -1
  3. package/dist/css/expressive.css +200 -241
  4. package/dist/css/expressive.css.map +1 -1
  5. package/dist/css/expressive.min.css +1 -1
  6. package/dist/css/expressive.min.css.map +1 -1
  7. package/dist/js/chunks/{chunk-4KMNFIFZ.mjs → chunk-33QVDDGR.mjs} +3 -3
  8. package/dist/js/chunks/{chunk-SPETGK25.mjs → chunk-45FER6RI.mjs} +5 -5
  9. package/dist/js/chunks/chunk-45FER6RI.mjs.map +7 -0
  10. package/dist/js/chunks/{chunk-GIW4K4SE.mjs → chunk-5CEAOLUA.mjs} +11 -10
  11. package/dist/js/chunks/{chunk-GIW4K4SE.mjs.map → chunk-5CEAOLUA.mjs.map} +2 -2
  12. package/dist/js/chunks/{chunk-LRZMJZ3T.mjs → chunk-6VATUZC6.mjs} +10 -6
  13. package/dist/js/chunks/chunk-6VATUZC6.mjs.map +7 -0
  14. package/dist/js/chunks/{chunk-QDAL4IYN.mjs → chunk-74MXKKLN.mjs} +2 -2
  15. package/dist/js/chunks/{chunk-QDAL4IYN.mjs.map → chunk-74MXKKLN.mjs.map} +2 -2
  16. package/dist/js/chunks/{chunk-CUQPB25U.mjs → chunk-AIURVCG6.mjs} +3 -3
  17. package/dist/js/chunks/{chunk-KHV6DZXX.mjs → chunk-BGZLF6JZ.mjs} +16 -16
  18. package/dist/js/chunks/chunk-BGZLF6JZ.mjs.map +7 -0
  19. package/dist/js/chunks/{chunk-BG6ZRB5H.mjs → chunk-C6CHEWYP.mjs} +2 -2
  20. package/dist/js/chunks/{chunk-GVGT6MIU.mjs → chunk-CK2XCICY.mjs} +2 -2
  21. package/dist/js/chunks/{chunk-KY6U46SM.mjs → chunk-CXXM2L4F.mjs} +8 -9
  22. package/dist/js/chunks/chunk-CXXM2L4F.mjs.map +7 -0
  23. package/dist/js/chunks/{chunk-Z2NRKI7R.mjs → chunk-DXGRXYYL.mjs} +25 -37
  24. package/dist/js/chunks/chunk-DXGRXYYL.mjs.map +7 -0
  25. package/dist/js/chunks/{chunk-MZ6Z24BX.mjs → chunk-FM5CZOUB.mjs} +3 -7
  26. package/dist/js/chunks/{chunk-MZ6Z24BX.mjs.map → chunk-FM5CZOUB.mjs.map} +2 -2
  27. package/dist/js/chunks/{chunk-5HQSGDZ5.mjs → chunk-GJL6GCIU.mjs} +34 -55
  28. package/dist/js/chunks/chunk-GJL6GCIU.mjs.map +7 -0
  29. package/dist/js/chunks/chunk-K3HZMFMD.mjs +135 -0
  30. package/dist/js/chunks/chunk-K3HZMFMD.mjs.map +7 -0
  31. package/dist/js/chunks/{chunk-TBM3FT7G.mjs → chunk-KHXZ2A4K.mjs} +12 -15
  32. package/dist/js/chunks/{chunk-TBM3FT7G.mjs.map → chunk-KHXZ2A4K.mjs.map} +2 -2
  33. package/dist/js/chunks/chunk-KQACNQ22.mjs +7 -0
  34. package/dist/js/chunks/{chunk-KBNN3QDH.mjs.map → chunk-KQACNQ22.mjs.map} +1 -1
  35. package/dist/js/chunks/{chunk-UEXCIMJZ.mjs → chunk-KUFHW3DS.mjs} +2 -2
  36. package/dist/js/chunks/{chunk-A7ALMYUR.mjs → chunk-KVJAVDBC.mjs} +7 -15
  37. package/dist/js/chunks/chunk-KVJAVDBC.mjs.map +7 -0
  38. package/dist/js/chunks/{chunk-YDCS5S3J.mjs → chunk-L27Q6ZMI.mjs} +2 -2
  39. package/dist/js/chunks/{chunk-NS2UMNZV.mjs → chunk-LQWUDNHZ.mjs} +3 -3
  40. package/dist/js/chunks/{chunk-MNPROCZF.mjs → chunk-M372EDXD.mjs} +4 -10
  41. package/dist/js/chunks/chunk-M372EDXD.mjs.map +7 -0
  42. package/dist/js/chunks/{chunk-YMSXJON6.mjs → chunk-M3MURWMB.mjs} +15 -12
  43. package/dist/js/chunks/{chunk-YMSXJON6.mjs.map → chunk-M3MURWMB.mjs.map} +2 -2
  44. package/dist/js/chunks/{chunk-JIDMQGK6.mjs → chunk-NUHMOAOY.mjs} +18 -33
  45. package/dist/js/chunks/chunk-NUHMOAOY.mjs.map +7 -0
  46. package/dist/js/chunks/{chunk-VGZSAFTX.mjs → chunk-OWG3LMUL.mjs} +7 -11
  47. package/dist/js/chunks/chunk-OWG3LMUL.mjs.map +7 -0
  48. package/dist/js/chunks/{chunk-LTWPGFBR.mjs → chunk-PD6HYHAE.mjs} +4 -15
  49. package/dist/js/chunks/chunk-PD6HYHAE.mjs.map +7 -0
  50. package/dist/js/chunks/{chunk-ZAS25YFD.mjs → chunk-PDG64UHF.mjs} +3 -3
  51. package/dist/js/chunks/{chunk-QERLECVU.mjs → chunk-PO3AXVR3.mjs} +38 -64
  52. package/dist/js/chunks/chunk-PO3AXVR3.mjs.map +7 -0
  53. package/dist/js/chunks/{chunk-ILP3PDTL.mjs → chunk-QYGK36OG.mjs} +7 -13
  54. package/dist/js/chunks/chunk-QYGK36OG.mjs.map +7 -0
  55. package/dist/js/chunks/{chunk-S3XDFGSZ.mjs → chunk-SFI2U4YW.mjs} +28 -44
  56. package/dist/js/chunks/chunk-SFI2U4YW.mjs.map +7 -0
  57. package/dist/js/chunks/{chunk-FS7XY3HT.mjs → chunk-SMY7GJSS.mjs} +3 -3
  58. package/dist/js/chunks/{chunk-O5XPWXIQ.mjs → chunk-TCCA2HDG.mjs} +39 -31
  59. package/dist/js/chunks/chunk-TCCA2HDG.mjs.map +7 -0
  60. package/dist/js/chunks/{chunk-PM655FXL.mjs → chunk-TSZYSW7F.mjs} +4 -4
  61. package/dist/js/chunks/{chunk-PM655FXL.mjs.map → chunk-TSZYSW7F.mjs.map} +2 -2
  62. package/dist/js/chunks/{chunk-UEZUJQ66.mjs → chunk-UAZSDUVP.mjs} +3 -4
  63. package/dist/js/chunks/{chunk-UEZUJQ66.mjs.map → chunk-UAZSDUVP.mjs.map} +2 -2
  64. package/dist/js/chunks/{chunk-6N2XAEFK.mjs → chunk-UBRZZWRA.mjs} +10 -8
  65. package/dist/js/chunks/chunk-UBRZZWRA.mjs.map +7 -0
  66. package/dist/js/chunks/{chunk-5BKHWHYY.mjs → chunk-UCOE7ZDL.mjs} +41 -46
  67. package/dist/js/chunks/chunk-UCOE7ZDL.mjs.map +7 -0
  68. package/dist/js/chunks/{chunk-4TKTLGEM.mjs → chunk-UETTGDLI.mjs} +3 -3
  69. package/dist/js/chunks/{chunk-RHRQKTTX.mjs → chunk-UNCRDLP6.mjs} +6 -9
  70. package/dist/js/chunks/chunk-UNCRDLP6.mjs.map +7 -0
  71. package/dist/js/chunks/{chunk-GUB3TNO2.mjs → chunk-VGNYF6FB.mjs} +3 -6
  72. package/dist/js/chunks/{chunk-GUB3TNO2.mjs.map → chunk-VGNYF6FB.mjs.map} +2 -2
  73. package/dist/js/chunks/{chunk-X7OCHZVF.mjs → chunk-VGPGBNGL.mjs} +4 -12
  74. package/dist/js/chunks/chunk-VGPGBNGL.mjs.map +7 -0
  75. package/dist/js/chunks/chunk-VKAUVTQY.mjs +1 -0
  76. package/dist/js/chunks/{chunk-HKT2S7VM.mjs → chunk-VM4FTS7L.mjs} +3 -3
  77. package/dist/js/chunks/{chunk-3GVFZ4XO.mjs → chunk-WDK4T63U.mjs} +8 -11
  78. package/dist/js/chunks/chunk-WDK4T63U.mjs.map +7 -0
  79. package/dist/js/chunks/{chunk-GZKEFWPM.mjs → chunk-WOCCTVUF.mjs} +38 -34
  80. package/dist/js/chunks/chunk-WOCCTVUF.mjs.map +7 -0
  81. package/dist/js/chunks/{chunk-QJABDLSD.mjs → chunk-WQYN5L4E.mjs} +11 -16
  82. package/dist/js/chunks/chunk-WQYN5L4E.mjs.map +7 -0
  83. package/dist/js/chunks/{chunk-DAIU5SLG.mjs → chunk-X4ISMKE2.mjs} +2 -2
  84. package/dist/js/chunks/{chunk-3DHK5CZU.mjs → chunk-XAEAEHIX.mjs} +6 -8
  85. package/dist/js/chunks/chunk-XAEAEHIX.mjs.map +7 -0
  86. package/dist/js/chunks/{chunk-4HZMB7LI.mjs → chunk-ZX6M7SWO.mjs} +24 -24
  87. package/dist/js/chunks/chunk-ZX6M7SWO.mjs.map +7 -0
  88. package/dist/js/expressive.cjs +484 -507
  89. package/dist/js/expressive.cjs.map +4 -4
  90. package/dist/js/expressive.js +484 -507
  91. package/dist/js/expressive.js.map +4 -4
  92. package/dist/js/expressive.min.js +10 -13
  93. package/dist/js/expressive.min.js.map +4 -4
  94. package/dist/js/expressive.mjs +54 -50
  95. package/dist/js/expressive.mjs.map +1 -1
  96. package/dist/js/internal/behaviors/bottomSheets.mjs +3 -3
  97. package/dist/js/internal/behaviors/dialogs.mjs +2 -2
  98. package/dist/js/internal/behaviors/forms.mjs +2 -2
  99. package/dist/js/internal/behaviors/sheetDrag.mjs +2 -2
  100. package/dist/js/internal/behaviors/sideSheets.mjs +3 -3
  101. package/dist/js/internal/components/appBar.mjs +2 -2
  102. package/dist/js/internal/components/autocomplete.mjs +4 -4
  103. package/dist/js/internal/components/barChart.mjs +4 -4
  104. package/dist/js/internal/components/buttonGroup.mjs +2 -2
  105. package/dist/js/internal/components/buttons.mjs +3 -3
  106. package/dist/js/internal/components/cards.mjs +3 -3
  107. package/dist/js/internal/components/carousel.mjs +3 -3
  108. package/dist/js/internal/components/characterCounter.mjs +2 -2
  109. package/dist/js/internal/components/chips.mjs +5 -5
  110. package/dist/js/internal/components/columnChart.mjs +3 -3
  111. package/dist/js/internal/components/commandPalette.mjs +3 -3
  112. package/dist/js/internal/components/confetti.mjs +2 -2
  113. package/dist/js/internal/components/datepicker.mjs +6 -6
  114. package/dist/js/internal/components/expandingCard.mjs +3 -3
  115. package/dist/js/internal/components/heatmapChart.mjs +3 -3
  116. package/dist/js/internal/components/index.mjs +47 -43
  117. package/dist/js/internal/components/keypad.mjs +9 -0
  118. package/dist/js/internal/components/keypad.mjs.map +7 -0
  119. package/dist/js/internal/components/lightbox.mjs +3 -3
  120. package/dist/js/internal/components/lineChart.mjs +6 -2
  121. package/dist/js/internal/components/mapView.mjs +3 -3
  122. package/dist/js/internal/components/menu.mjs +3 -3
  123. package/dist/js/internal/components/messageScroller.mjs +3 -3
  124. package/dist/js/internal/components/mixedChart.mjs +4 -4
  125. package/dist/js/internal/components/navigationRail.mjs +2 -2
  126. package/dist/js/internal/components/particles.mjs +2 -2
  127. package/dist/js/internal/components/pieChart.mjs +3 -3
  128. package/dist/js/internal/components/questionnaire.mjs +3 -3
  129. package/dist/js/internal/components/radarChart.mjs +3 -3
  130. package/dist/js/internal/components/radialChart.mjs +3 -3
  131. package/dist/js/internal/components/registry.mjs +41 -40
  132. package/dist/js/internal/components/richTextEditor.mjs +3 -3
  133. package/dist/js/internal/components/scrollspy.mjs +2 -2
  134. package/dist/js/internal/components/select.mjs +4 -4
  135. package/dist/js/internal/components/slider.mjs +3 -3
  136. package/dist/js/internal/components/snackbar.mjs +2 -2
  137. package/dist/js/internal/components/tabs.mjs +4 -4
  138. package/dist/js/internal/components/timepicker.mjs +4 -4
  139. package/dist/js/internal/components/tooltip.mjs +3 -3
  140. package/dist/js/internal/core/component.mjs +1 -1
  141. package/dist/js/internal/core/utils.mjs +1 -1
  142. package/dist/js/internal/plugins/dockedDisplayPlugin.mjs +2 -2
  143. package/dist/js/modular.mjs +54 -50
  144. package/dist/types/components/autocomplete.d.ts +1 -0
  145. package/dist/types/components/datepicker.d.ts +3 -4
  146. package/dist/types/components/expandingCard.d.ts +2 -0
  147. package/dist/types/components/index.d.ts +1 -0
  148. package/dist/types/components/keypad.d.ts +34 -0
  149. package/dist/types/components/lightbox.d.ts +3 -5
  150. package/dist/types/components/lineChart.d.ts +4 -0
  151. package/dist/types/components/menu.d.ts +1 -0
  152. package/dist/types/components/radialChart.d.ts +0 -1
  153. package/dist/types/components/registry.d.ts +4 -0
  154. package/dist/types/components/slider.d.ts +2 -0
  155. package/dist/types/components/snackbar.d.ts +1 -0
  156. package/dist/types/components/tabs.d.ts +4 -0
  157. package/dist/types/components/timepicker.d.ts +2 -0
  158. package/dist/types/modular.d.ts +1 -1
  159. package/dist/types/plugins/dockedDisplayPlugin.d.ts +1 -0
  160. package/package.json +1 -1
  161. package/src/sass/abstracts/_breakpoints.scss +0 -1
  162. package/src/sass/abstracts/_elevation.scss +1 -1
  163. package/src/sass/abstracts/_mixins.scss +20 -60
  164. package/src/sass/abstracts/_variables.scss +10 -0
  165. package/src/sass/base/_global.scss +3 -12
  166. package/src/sass/base/_index.scss +1 -1
  167. package/src/sass/components/_badges.scss +1 -8
  168. package/src/sass/components/_bar-chart.scss +1 -1
  169. package/src/sass/components/_button-groups.scss +31 -66
  170. package/src/sass/components/_cards.scss +6 -25
  171. package/src/sass/components/_carousel.scss +16 -55
  172. package/src/sass/components/_chips.scss +0 -6
  173. package/src/sass/components/_column-chart.scss +1 -1
  174. package/src/sass/components/_data-table.scss +1 -3
  175. package/src/sass/components/_datepicker.scss +3 -22
  176. package/src/sass/components/_dialog.scss +1 -4
  177. package/src/sass/components/_heatmap-chart.scss +2 -2
  178. package/src/sass/components/_icon-buttons.scss +0 -1
  179. package/src/sass/components/_index.scss +1 -0
  180. package/src/sass/components/_keypad.scss +162 -0
  181. package/src/sass/components/_lightbox.scss +3 -8
  182. package/src/sass/components/_map.scss +2 -2
  183. package/src/sass/components/_menu.scss +31 -74
  184. package/src/sass/components/_mixed-chart.scss +1 -1
  185. package/src/sass/components/_navbar.scss +9 -45
  186. package/src/sass/components/_navigation-rail.scss +23 -32
  187. package/src/sass/components/_page-footer.scss +15 -12
  188. package/src/sass/components/_panes.scss +2 -6
  189. package/src/sass/components/_progress.scss +6 -4
  190. package/src/sass/components/_side-sheet.scss +1 -4
  191. package/src/sass/components/_stepper.scss +0 -4
  192. package/src/sass/components/_timepicker.scss +4 -36
  193. package/src/sass/components/_toolbar.scss +0 -4
  194. package/src/sass/components/forms/_checkboxes.scss +37 -65
  195. package/src/sass/components/forms/_fieldset.scss +3 -3
  196. package/src/sass/components/forms/_file-input.scss +0 -1
  197. package/src/sass/components/forms/_radio-buttons.scss +10 -36
  198. package/src/sass/components/forms/_select.scss +0 -3
  199. package/src/sass/components/forms/_slider.scss +72 -259
  200. package/src/sass/tokens/_state.scss +2 -2
  201. package/src/sass/tokens/_theme.scss +1 -1
  202. package/src/sass/utilities/_colors.scss +6 -1
  203. package/src/sass/utilities/_index.scss +1 -1
  204. package/dist/js/chunks/chunk-3DHK5CZU.mjs.map +0 -7
  205. package/dist/js/chunks/chunk-3GVFZ4XO.mjs.map +0 -7
  206. package/dist/js/chunks/chunk-4HZMB7LI.mjs.map +0 -7
  207. package/dist/js/chunks/chunk-5BKHWHYY.mjs.map +0 -7
  208. package/dist/js/chunks/chunk-5HQSGDZ5.mjs.map +0 -7
  209. package/dist/js/chunks/chunk-6N2XAEFK.mjs.map +0 -7
  210. package/dist/js/chunks/chunk-A7ALMYUR.mjs.map +0 -7
  211. package/dist/js/chunks/chunk-GZKEFWPM.mjs.map +0 -7
  212. package/dist/js/chunks/chunk-ILP3PDTL.mjs.map +0 -7
  213. package/dist/js/chunks/chunk-JIDMQGK6.mjs.map +0 -7
  214. package/dist/js/chunks/chunk-KBNN3QDH.mjs +0 -7
  215. package/dist/js/chunks/chunk-KHV6DZXX.mjs.map +0 -7
  216. package/dist/js/chunks/chunk-KY6U46SM.mjs.map +0 -7
  217. package/dist/js/chunks/chunk-LRZMJZ3T.mjs.map +0 -7
  218. package/dist/js/chunks/chunk-LTWPGFBR.mjs.map +0 -7
  219. package/dist/js/chunks/chunk-MNPROCZF.mjs.map +0 -7
  220. package/dist/js/chunks/chunk-O5XPWXIQ.mjs.map +0 -7
  221. package/dist/js/chunks/chunk-QERLECVU.mjs.map +0 -7
  222. package/dist/js/chunks/chunk-QJABDLSD.mjs.map +0 -7
  223. package/dist/js/chunks/chunk-RHRQKTTX.mjs.map +0 -7
  224. package/dist/js/chunks/chunk-S3XDFGSZ.mjs.map +0 -7
  225. package/dist/js/chunks/chunk-SPETGK25.mjs.map +0 -7
  226. package/dist/js/chunks/chunk-VGZSAFTX.mjs.map +0 -7
  227. package/dist/js/chunks/chunk-X7OCHZVF.mjs.map +0 -7
  228. package/dist/js/chunks/chunk-Z2NRKI7R.mjs.map +0 -7
  229. package/dist/js/chunks/chunk-ZKZKNSLC.mjs +0 -1
  230. /package/dist/js/chunks/{chunk-4KMNFIFZ.mjs.map → chunk-33QVDDGR.mjs.map} +0 -0
  231. /package/dist/js/chunks/{chunk-CUQPB25U.mjs.map → chunk-AIURVCG6.mjs.map} +0 -0
  232. /package/dist/js/chunks/{chunk-BG6ZRB5H.mjs.map → chunk-C6CHEWYP.mjs.map} +0 -0
  233. /package/dist/js/chunks/{chunk-GVGT6MIU.mjs.map → chunk-CK2XCICY.mjs.map} +0 -0
  234. /package/dist/js/chunks/{chunk-UEXCIMJZ.mjs.map → chunk-KUFHW3DS.mjs.map} +0 -0
  235. /package/dist/js/chunks/{chunk-YDCS5S3J.mjs.map → chunk-L27Q6ZMI.mjs.map} +0 -0
  236. /package/dist/js/chunks/{chunk-NS2UMNZV.mjs.map → chunk-LQWUDNHZ.mjs.map} +0 -0
  237. /package/dist/js/chunks/{chunk-ZAS25YFD.mjs.map → chunk-PDG64UHF.mjs.map} +0 -0
  238. /package/dist/js/chunks/{chunk-FS7XY3HT.mjs.map → chunk-SMY7GJSS.mjs.map} +0 -0
  239. /package/dist/js/chunks/{chunk-4TKTLGEM.mjs.map → chunk-UETTGDLI.mjs.map} +0 -0
  240. /package/dist/js/chunks/{chunk-ZKZKNSLC.mjs.map → chunk-VKAUVTQY.mjs.map} +0 -0
  241. /package/dist/js/chunks/{chunk-HKT2S7VM.mjs.map → chunk-VM4FTS7L.mjs.map} +0 -0
  242. /package/dist/js/chunks/{chunk-DAIU5SLG.mjs.map → chunk-X4ISMKE2.mjs.map} +0 -0
@@ -177,210 +177,53 @@ input[type="range"] {
177
177
  margin: 0 8px;
178
178
  }
179
179
 
180
+ // A stop dot at one end of the track.
181
+ @function _stop($at) {
182
+ @return radial-gradient(
183
+ circle var(--md-comp-slider-stop-size) at var(--md-comp-slider-stop-at-#{$at}),
184
+ var(--md-comp-slider-stop-color) 99%,
185
+ transparent
186
+ );
187
+ }
188
+
189
+ // Four color stops: $before up to the handle, a gap around it, $after from there.
190
+ // $pos must stay a plain Sass value; interpolating it keeps the inner calc().
191
+ @function _handle-gap($before, $pos, $after) {
192
+ $start: max(0%, calc($pos - var(--md-comp-slider-gap) - var(--md-comp-slider-handle-width) / 2));
193
+ $end: min(100%, calc($pos + var(--md-comp-slider-gap) + var(--md-comp-slider-handle-width) / 2));
194
+ @return $before $start, transparent $start, transparent $end, $after $end;
195
+ }
196
+
197
+ $_active: var(--md-comp-slider-active-track-color);
198
+ $_inactive: var(--md-comp-slider-inactive-track-color);
199
+ $_active-pos: var(--md-comp-slider-active-position, var(--md-comp-slider-active-fraction));
200
+
180
201
  // Gap around the handle so the tracks do not run under it.
181
202
  @mixin range-track-fill {
182
203
  background-image:
183
- radial-gradient(
184
- circle var(--md-comp-slider-stop-size) at var(--md-comp-slider-stop-at-end),
185
- var(--md-comp-slider-stop-color) 99%,
186
- transparent
187
- ),
188
- linear-gradient(
189
- var(--md-comp-slider-gradient),
190
- var(--md-comp-slider-active-track-color)
191
- max(
192
- 0%,
193
- calc(
194
- var(--md-comp-slider-active-position, var(--md-comp-slider-active-fraction)) - var(--md-comp-slider-gap) -
195
- var(--md-comp-slider-handle-width) / 2
196
- )
197
- ),
198
- transparent
199
- max(
200
- 0%,
201
- calc(
202
- var(--md-comp-slider-active-position, var(--md-comp-slider-active-fraction)) - var(--md-comp-slider-gap) -
203
- var(--md-comp-slider-handle-width) / 2
204
- )
205
- ),
206
- transparent
207
- min(
208
- 100%,
209
- calc(
210
- var(--md-comp-slider-active-position, var(--md-comp-slider-active-fraction)) + var(--md-comp-slider-gap) +
211
- var(--md-comp-slider-handle-width) / 2
212
- )
213
- ),
214
- var(--md-comp-slider-inactive-track-color)
215
- min(
216
- 100%,
217
- calc(
218
- var(--md-comp-slider-active-position, var(--md-comp-slider-active-fraction)) + var(--md-comp-slider-gap) +
219
- var(--md-comp-slider-handle-width) / 2
220
- )
221
- )
222
- );
204
+ _stop(end),
205
+ linear-gradient(var(--md-comp-slider-gradient), _handle-gap($_active, $_active-pos, $_inactive));
223
206
  }
224
207
 
225
208
  @mixin range-track-fill-centered {
226
209
  background-image:
227
- radial-gradient(
228
- circle var(--md-comp-slider-stop-size) at var(--md-comp-slider-stop-at-start),
229
- var(--md-comp-slider-stop-color) 99%,
230
- transparent
231
- ),
232
- radial-gradient(
233
- circle var(--md-comp-slider-stop-size) at var(--md-comp-slider-stop-at-end),
234
- var(--md-comp-slider-stop-color) 99%,
235
- transparent
236
- ),
210
+ _stop(start),
211
+ _stop(end),
237
212
  linear-gradient(
238
213
  var(--md-comp-slider-gradient),
239
- var(--md-comp-slider-inactive-track-color)
240
- max(
241
- 0%,
242
- calc(
243
- min(50%, var(--md-comp-slider-active-position, var(--md-comp-slider-active-fraction))) - var(--md-comp-slider-gap) -
244
- var(--md-comp-slider-handle-width) / 2
245
- )
246
- ),
247
- transparent
248
- max(
249
- 0%,
250
- calc(
251
- min(50%, var(--md-comp-slider-active-position, var(--md-comp-slider-active-fraction))) - var(--md-comp-slider-gap) -
252
- var(--md-comp-slider-handle-width) / 2
253
- )
254
- ),
255
- transparent
256
- min(
257
- 100%,
258
- calc(
259
- min(50%, var(--md-comp-slider-active-position, var(--md-comp-slider-active-fraction))) + var(--md-comp-slider-gap) +
260
- var(--md-comp-slider-handle-width) / 2
261
- )
262
- ),
263
- var(--md-comp-slider-active-track-color)
264
- min(
265
- 100%,
266
- calc(
267
- min(50%, var(--md-comp-slider-active-position, var(--md-comp-slider-active-fraction))) + var(--md-comp-slider-gap) +
268
- var(--md-comp-slider-handle-width) / 2
269
- )
270
- ),
271
- var(--md-comp-slider-active-track-color)
272
- max(
273
- 0%,
274
- calc(
275
- max(50%, var(--md-comp-slider-active-position, var(--md-comp-slider-active-fraction))) - var(--md-comp-slider-gap) -
276
- var(--md-comp-slider-handle-width) / 2
277
- )
278
- ),
279
- transparent
280
- max(
281
- 0%,
282
- calc(
283
- max(50%, var(--md-comp-slider-active-position, var(--md-comp-slider-active-fraction))) - var(--md-comp-slider-gap) -
284
- var(--md-comp-slider-handle-width) / 2
285
- )
286
- ),
287
- transparent
288
- min(
289
- 100%,
290
- calc(
291
- max(50%, var(--md-comp-slider-active-position, var(--md-comp-slider-active-fraction))) + var(--md-comp-slider-gap) +
292
- var(--md-comp-slider-handle-width) / 2
293
- )
294
- ),
295
- var(--md-comp-slider-inactive-track-color)
296
- min(
297
- 100%,
298
- calc(
299
- max(50%, var(--md-comp-slider-active-position, var(--md-comp-slider-active-fraction))) + var(--md-comp-slider-gap) +
300
- var(--md-comp-slider-handle-width) / 2
301
- )
302
- )
214
+ _handle-gap($_inactive, min(50%, $_active-pos), $_active),
215
+ _handle-gap($_active, max(50%, $_active-pos), $_inactive)
303
216
  );
304
217
  }
305
218
 
306
219
  @mixin range-track-fill-dual {
307
220
  background-image:
308
- radial-gradient(
309
- circle var(--md-comp-slider-stop-size) at var(--md-comp-slider-stop-at-start),
310
- var(--md-comp-slider-stop-color) 99%,
311
- transparent
312
- ),
313
- radial-gradient(
314
- circle var(--md-comp-slider-stop-size) at var(--md-comp-slider-stop-at-end),
315
- var(--md-comp-slider-stop-color) 99%,
316
- transparent
317
- ),
221
+ _stop(start),
222
+ _stop(end),
318
223
  linear-gradient(
319
224
  var(--md-comp-slider-gradient),
320
- var(--md-comp-slider-inactive-track-color)
321
- max(
322
- 0%,
323
- calc(
324
- var(--md-comp-slider-start-position, var(--md-comp-slider-start-fraction)) - var(--md-comp-slider-gap) -
325
- var(--md-comp-slider-handle-width) / 2
326
- )
327
- ),
328
- transparent
329
- max(
330
- 0%,
331
- calc(
332
- var(--md-comp-slider-start-position, var(--md-comp-slider-start-fraction)) - var(--md-comp-slider-gap) -
333
- var(--md-comp-slider-handle-width) / 2
334
- )
335
- ),
336
- transparent
337
- min(
338
- 100%,
339
- calc(
340
- var(--md-comp-slider-start-position, var(--md-comp-slider-start-fraction)) + var(--md-comp-slider-gap) +
341
- var(--md-comp-slider-handle-width) / 2
342
- )
343
- ),
344
- var(--md-comp-slider-active-track-color)
345
- min(
346
- 100%,
347
- calc(
348
- var(--md-comp-slider-start-position, var(--md-comp-slider-start-fraction)) + var(--md-comp-slider-gap) +
349
- var(--md-comp-slider-handle-width) / 2
350
- )
351
- ),
352
- var(--md-comp-slider-active-track-color)
353
- max(
354
- 0%,
355
- calc(
356
- var(--md-comp-slider-end-position, var(--md-comp-slider-end-fraction)) - var(--md-comp-slider-gap) -
357
- var(--md-comp-slider-handle-width) / 2
358
- )
359
- ),
360
- transparent
361
- max(
362
- 0%,
363
- calc(
364
- var(--md-comp-slider-end-position, var(--md-comp-slider-end-fraction)) - var(--md-comp-slider-gap) -
365
- var(--md-comp-slider-handle-width) / 2
366
- )
367
- ),
368
- transparent
369
- min(
370
- 100%,
371
- calc(
372
- var(--md-comp-slider-end-position, var(--md-comp-slider-end-fraction)) + var(--md-comp-slider-gap) +
373
- var(--md-comp-slider-handle-width) / 2
374
- )
375
- ),
376
- var(--md-comp-slider-inactive-track-color)
377
- min(
378
- 100%,
379
- calc(
380
- var(--md-comp-slider-end-position, var(--md-comp-slider-end-fraction)) + var(--md-comp-slider-gap) +
381
- var(--md-comp-slider-handle-width) / 2
382
- )
383
- )
225
+ _handle-gap($_inactive, var(--md-comp-slider-start-position, var(--md-comp-slider-start-fraction)), $_active),
226
+ _handle-gap($_active, var(--md-comp-slider-end-position, var(--md-comp-slider-end-fraction)), $_inactive)
384
227
  );
385
228
  }
386
229
 
@@ -418,86 +261,56 @@ input[type="range"] {
418
261
  border-radius: calc(var(--md-comp-slider-handle-width) / 2);
419
262
  }
420
263
 
421
- input[type="range"]::-webkit-slider-runnable-track {
422
- @include range-track;
423
- @include range-track-fill;
424
- }
425
-
426
- input[type="range"]::-webkit-slider-thumb {
427
- @include range-thumb;
428
- margin-top: calc((var(--md-comp-slider-track-height) - var(--md-comp-slider-handle-height)) / 2);
429
- }
430
-
431
- input[type="range"]:hover:not(:disabled)::-webkit-slider-thumb {
432
- box-shadow: 0 0 0 18px color-mix(in oklab, var(--md-comp-slider-handle-color) 8%, transparent);
433
- }
434
-
435
- input[type="range"]:focus-visible:not(:disabled)::-webkit-slider-thumb {
436
- box-shadow: 0 0 0 18px color-mix(in oklab, var(--md-comp-slider-handle-color) 10%, transparent);
437
- }
438
-
439
- input[type="range"]:active:not(:disabled)::-webkit-slider-thumb {
440
- width: var(--md-comp-slider-handle-width-pressed);
441
- }
442
-
443
- :is(#{$_host}).centered [type="range"]::-webkit-slider-runnable-track {
444
- @include range-track-fill-centered;
445
- }
446
-
447
- :is(#{$_host}).vertical > [type="range"]::-webkit-slider-runnable-track {
448
- @include range-track-vertical;
449
- margin-left: calc((var(--md-comp-slider-handle-height) - var(--md-comp-slider-track-height)) / 2);
450
- }
451
-
452
- :is(#{$_host}).vertical > [type="range"]::-webkit-slider-thumb {
453
- @include range-thumb-vertical;
454
- margin-top: 0;
455
- margin-left: calc((var(--md-comp-slider-track-height) - var(--md-comp-slider-handle-height)) / 2);
456
- }
264
+ // One set of rules per engine: a browser drops a whole rule with a pseudo-element
265
+ // it does not know, so the two cannot share a selector list.
266
+ @each $track, $thumb in ("::-webkit-slider-runnable-track" "::-webkit-slider-thumb", "::-moz-range-track" "::-moz-range-thumb") {
267
+ $webkit: $thumb == "::-webkit-slider-thumb";
457
268
 
458
- :is(#{$_host}).vertical > [type="range"]:active:not(:disabled)::-webkit-slider-thumb {
459
- width: var(--md-comp-slider-handle-height);
460
- height: var(--md-comp-slider-handle-width-pressed);
461
- }
462
-
463
- input[type="range"]::-moz-range-track {
464
- @include range-track;
465
- @include range-track-fill;
466
- }
269
+ input[type="range"]#{$track} {
270
+ @include range-track;
271
+ @include range-track-fill;
272
+ }
467
273
 
468
- input[type="range"]::-moz-range-thumb {
469
- @include range-thumb;
470
- }
274
+ input[type="range"]#{$thumb} {
275
+ @include range-thumb;
276
+ @if $webkit {
277
+ margin-top: calc((var(--md-comp-slider-track-height) - var(--md-comp-slider-handle-height)) / 2);
278
+ }
279
+ }
471
280
 
472
- input[type="range"]:hover:not(:disabled)::-moz-range-thumb {
473
- box-shadow: 0 0 0 18px color-mix(in oklab, var(--md-comp-slider-handle-color) 8%, transparent);
474
- }
281
+ input[type="range"]:hover:not(:disabled)#{$thumb} {
282
+ box-shadow: 0 0 0 18px color-mix(in oklab, var(--md-comp-slider-handle-color) 8%, transparent);
283
+ }
475
284
 
476
- input[type="range"]:focus-visible:not(:disabled)::-moz-range-thumb {
477
- box-shadow: 0 0 0 18px color-mix(in oklab, var(--md-comp-slider-handle-color) 10%, transparent);
478
- }
285
+ input[type="range"]:focus-visible:not(:disabled)#{$thumb} {
286
+ box-shadow: 0 0 0 18px color-mix(in oklab, var(--md-comp-slider-handle-color) 10%, transparent);
287
+ }
479
288
 
480
- input[type="range"]:active:not(:disabled)::-moz-range-thumb {
481
- width: var(--md-comp-slider-handle-width-pressed);
482
- }
289
+ input[type="range"]:active:not(:disabled)#{$thumb} {
290
+ width: var(--md-comp-slider-handle-width-pressed);
291
+ }
483
292
 
484
- :is(#{$_host}).centered [type="range"]::-moz-range-track {
485
- @include range-track-fill-centered;
486
- }
293
+ :is(#{$_host}).centered [type="range"]#{$track} {
294
+ @include range-track-fill-centered;
295
+ }
487
296
 
488
- :is(#{$_host}).vertical > [type="range"]::-moz-range-track {
489
- @include range-track-vertical;
490
- margin-left: calc((var(--md-comp-slider-handle-height) - var(--md-comp-slider-track-height)) / 2);
491
- }
297
+ :is(#{$_host}).vertical > [type="range"]#{$track} {
298
+ @include range-track-vertical;
299
+ margin-left: calc((var(--md-comp-slider-handle-height) - var(--md-comp-slider-track-height)) / 2);
300
+ }
492
301
 
493
- :is(#{$_host}).vertical > [type="range"]::-moz-range-thumb {
494
- @include range-thumb-vertical;
495
- margin-left: calc((var(--md-comp-slider-track-height) - var(--md-comp-slider-handle-height)) / 2);
496
- }
302
+ :is(#{$_host}).vertical > [type="range"]#{$thumb} {
303
+ @include range-thumb-vertical;
304
+ @if $webkit {
305
+ margin-top: 0;
306
+ }
307
+ margin-left: calc((var(--md-comp-slider-track-height) - var(--md-comp-slider-handle-height)) / 2);
308
+ }
497
309
 
498
- :is(#{$_host}).vertical > [type="range"]:active:not(:disabled)::-moz-range-thumb {
499
- width: var(--md-comp-slider-handle-height);
500
- height: var(--md-comp-slider-handle-width-pressed);
310
+ :is(#{$_host}).vertical > [type="range"]:active:not(:disabled)#{$thumb} {
311
+ width: var(--md-comp-slider-handle-height);
312
+ height: var(--md-comp-slider-handle-width-pressed);
313
+ }
501
314
  }
502
315
 
503
316
  // Dual-handle range. Two inputs share one host; the host paints the track.
@@ -10,8 +10,8 @@
10
10
  // pressed are 0.1, not the 0.12 quoted in some secondary sources.
11
11
  //
12
12
  // Two shapes consume these. An overlay pseudo-element uses the number as an
13
- // `opacity` directly; a ring drawn with `color-mix()` needs a percentage, so it
14
- // multiplies by 100% - see the `state-layer-ring` mixin in abstracts.
13
+ // `opacity` directly; a `color-mix()` tint needs a percentage, which
14
+ // `state-opacity()` in abstracts supplies.
15
15
 
16
16
  @use "../abstracts" as *;
17
17
 
@@ -18,7 +18,7 @@
18
18
  //
19
19
  // The --md-sys-color-*-light / -dark pairs are deliberately left in place.
20
20
  // They are the documented way to re-theme the framework (see the docs' Themes
21
- // page) and several components reference them directly.
21
+ // page). Components read the live names, not the pairs.
22
22
 
23
23
  :root, :host {
24
24
  // `light dark` means: follow the OS unless an ancestor says otherwise.
@@ -19,7 +19,12 @@ $_role-named: "primary-container", "secondary-container", "tertiary-container";
19
19
  $_role-named-hosts: ":not(.extend):not(.fab-menu)";
20
20
 
21
21
  @each $role in $sys-color-roles {
22
- #{if(list.index($_role-named, $role), ".#{$role}#{$_role-named-hosts}", ".#{$role}")} {
22
+ $fill: ".#{$role}";
23
+ @if list.index($_role-named, $role) {
24
+ $fill: "#{$fill}#{$_role-named-hosts}";
25
+ }
26
+
27
+ #{$fill} {
23
28
  background-color: var(--md-sys-color-#{$role});
24
29
  }
25
30
 
@@ -5,6 +5,6 @@
5
5
  @forward "z-depth"; // .z-depth-0 ... .z-depth-5, .hoverable
6
6
  @forward "spacing"; // .m-3, .pt-2, .px-4, ...
7
7
  @forward "visibility"; // .hide, .hide-on-med-and-down, .show-on-large, ...
8
- @forward "helpers"; // alignment, floats, truncate, responsive media
8
+ @forward "helpers"; // alignment, flex, truncate, responsive media
9
9
  @forward "scroll-area"; // native scrolling with themed scrollbars
10
10
  @forward "shapes"; // .shape-pebble, .shape-scallop-6, ... (masks)
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/ts/components/radarChart.ts"],
4
- "sourcesContent": ["import { InitElements, InitElement } from '../core/component';\nimport { LineChart, LineChartOptions, COLORS, svgNode as node } from './lineChart';\n\nexport type RadarChartOptions = LineChartOptions;\n\n/** Grid rings, evenly spaced from the middle to the rim. */\nconst RINGS = 4;\n\n/**\n * Radar chart. It reads its <table> like LineChart, but each row is a spoke,\n * clockwise from the top, and each value column is a series drawn as a\n * shape joining its values on the spokes, from zero in the middle to the\n * scale's top at the rim. The row labels sit round the rim.\n *\n * Re-run `RadarChart.init(el)` after changing the table.\n */\nexport class RadarChart extends LineChart {\n protected get _type() {\n return 'radar-chart';\n }\n\n protected get _key() {\n return 'Expressive_RadarChart';\n }\n\n /** The scale starts at zero, the middle, so shapes compare by size. */\n protected get _fromZero() {\n return true;\n }\n\n protected get _circular() {\n return true;\n }\n\n static init(el: HTMLElement, options?: Partial<RadarChartOptions>): RadarChart;\n static init(els: InitElements<InitElement>, options?: Partial<RadarChartOptions>): RadarChart[];\n static init(\n els: HTMLElement | InitElements<InitElement>,\n options: Partial<RadarChartOptions> = {}\n ): RadarChart | RadarChart[] {\n return super.init(els as HTMLElement, options) as RadarChart | RadarChart[];\n }\n\n static getInstance(el: HTMLElement): RadarChart {\n return el['Expressive_RadarChart'];\n }\n\n /**\n * The cursor is a spoke turned by --turn, and the tooltip sits past its\n * tip. LineChart's points on the spoke keep their top, a share of the\n * radius, which stops at the rim and the middle like the shapes.\n */\n protected _place(index: number) {\n for (const dot of this._cursor.children as HTMLCollectionOf<HTMLElement>) {\n dot.style.top = `${Math.min(100, Math.max(0, parseFloat(dot.style.top)))}%`;\n }\n const turn = this._turn(index);\n this._cursor.style.setProperty('--turn', String(turn));\n this._tooltip.style.setProperty('--turn', String(turn));\n // On the right half it opens leftwards, over the chart.\n this._tooltip.classList.toggle('end', turn > 0 && turn < 0.5);\n }\n\n /** A row's spoke as a fraction of a turn clockwise from the top. */\n private _turn(index: number) {\n return index / this.labels.length;\n }\n\n /** Only the legend; the labels go round the rim in _draw. */\n protected _guides(): Element[] {\n return this._legend();\n }\n\n /** The nearest spoke to the pointer, by its angle from the middle. */\n protected _indexAt(e: PointerEvent) {\n const [turn] = this._polarAt(e);\n return Math.round(turn * this.labels.length) % this.labels.length;\n }\n\n /**\n * An SVG in a -50 to 50 box: the rings and spokes of the grid, then each\n * series' shape, with its points for .points. The rim is the box's edge;\n * the labels round it are HTML.\n */\n protected _draw(): Element {\n const at = (index: number, share: number) => {\n const angle = this._turn(index) * 2 * Math.PI;\n return `${(50 * share * Math.sin(angle)).toFixed(3)},${(-50 * share * Math.cos(angle)).toFixed(3)}`;\n };\n // The rim is the scale's top, so _y is the distance in from the rim.\n const share = (value: number) => Math.min(1, Math.max(0, 1 - this._y(value) / 100));\n const rows = this.labels.map((_, i) => i);\n const ring = (r: number) => `M${rows.map((i) => at(i, r)).join('L')}Z`;\n\n const svg = node('svg', { viewBox: '-50 -50 100 100', 'aria-hidden': 'true', focusable: 'false' });\n svg.append(node('path', {\n class: 'radar-chart-grid',\n d: Array.from({ length: RINGS }, (_, r) => ring((r + 1) / RINGS)).join('')\n + rows.map((i) => `M0,0L${at(i, 1)}`).join('')\n }));\n const points = this.el.classList.contains('points');\n this.series.forEach((series, s) => {\n const group = node('g', {\n class: `radar-chart-series ${series.className}`.trim(),\n 'data-series': String((s % COLORS) + 1)\n });\n // ponytail: a gap joins the spokes either side of it; mark gaps if charts need them.\n const drawn = rows.filter((i) => series.values[i] !== null);\n const corners = drawn.map((i) => at(i, share(series.values[i]!)));\n group.append(node('path', { class: 'radar-chart-shape', d: corners.length ? `M${corners.join('L')}Z` : '' }));\n // Round caps on zero-length lines, so CSS sizes the points in pixels.\n if (points) group.append(node('path', { class: 'radar-chart-points', d: corners.map((c) => `M${c}h0`).join('') }));\n svg.append(group);\n });\n\n const labels = document.createElement('ol');\n labels.className = 'radar-chart-axes';\n labels.setAttribute('aria-hidden', 'true');\n this.labels.forEach((text, i) => {\n const li = document.createElement('li');\n li.textContent = text;\n li.style.setProperty('--turn', String(this._turn(i)));\n labels.append(li);\n });\n\n const web = document.createElement('div');\n web.className = 'radar-chart-web';\n web.append(svg, labels);\n return web;\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["share"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/ts/components/select.ts"],
4
- "sourcesContent": ["import { Utils } from '../core/utils';\nimport { Menu, MenuOptions } from './menu';\nimport { Component, BaseOptions, InitElements, InitElement } from '../core/component';\n\nexport interface FormSelectOptions extends BaseOptions {\n /**\n * Classes to be added to the select wrapper element.\n * @default \"\"\n */\n classes: string;\n /**\n * Pass options object to select menu initialization.\n * @default {}\n */\n menuOptions: Partial<MenuOptions>;\n}\n\nconst _defaults: FormSelectOptions = {\n classes: '',\n menuOptions: {}\n};\n\ntype ValueStruct = {\n el: HTMLOptionElement;\n optionEl: HTMLElement;\n};\n\nexport class FormSelect extends Component<FormSelectOptions> {\n declare el: HTMLSelectElement;\n /** If this is a multiple select. */\n isMultiple: boolean;\n /**\n * Label associated with the current select element.\n * Is \"null\", if not detected.\n */\n labelEl: HTMLLabelElement;\n /** The generated menu element. */\n menuEl: HTMLElement;\n /** Text input that shows current selected option. */\n input: HTMLInputElement;\n /** Instance of the menu plugin for this select. */\n menu: Menu;\n /** The field wrapper around the native select. */\n wrapper: HTMLDivElement;\n selectOptions: (HTMLOptionElement | HTMLOptGroupElement)[];\n private _values: ValueStruct[];\n private _createdWrapper: boolean;\n private _originalLabels = new Map<HTMLLabelElement, { for: string | null; id: string | null }>();\n private _labelPlaceholder: Comment;\n private _form: HTMLFormElement | null;\n private _resetTimer: ReturnType<typeof setTimeout>;\n private _validationMessage: HTMLElement | null = null;\n nativeTabIndex: number;\n\n constructor(el: HTMLSelectElement, options: FormSelectOptions) {\n super(el, options, FormSelect);\n if (this.el.classList.contains('browser-default')) return;\n this.el['Expressive_FormSelect'] = this;\n\n this.options = {\n ...FormSelect.defaults,\n ...options\n };\n\n this.isMultiple = this.el.multiple;\n this.nativeTabIndex = this.el.tabIndex ?? -1;\n this.el.tabIndex = -1;\n this._values = [];\n this._createdWrapper = false;\n this._setupMenu();\n this._setupEventHandlers();\n }\n\n static get defaults(): FormSelectOptions {\n return _defaults;\n }\n\n /**\n * Initializes instance of FormSelect.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLSelectElement, options?: Partial<FormSelectOptions>): FormSelect;\n /**\n * Initializes instances of FormSelect.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(\n els: InitElements<HTMLSelectElement | InitElement>,\n options?: Partial<FormSelectOptions>\n ): FormSelect[];\n /**\n * Initializes instances of FormSelect.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(\n els: HTMLSelectElement | InitElements<HTMLSelectElement | InitElement>,\n options: Partial<FormSelectOptions> = {}\n ): FormSelect | FormSelect[] {\n return super.init(els, options, FormSelect);\n }\n\n static getInstance(el: HTMLElement): FormSelect {\n return el['Expressive_FormSelect'];\n }\n\n destroy() {\n this._removeEventHandlers();\n this._clearValidationError();\n // The Menu holds itself in the static Menu._menus registry\n // until its own destroy() runs, so dropping the elements is not enough -\n // every rebuilt select used to leave an instance behind for good.\n this.menu?.destroy();\n this._removeMenu();\n this.el.tabIndex = this.nativeTabIndex;\n this.el['Expressive_FormSelect'] = undefined;\n }\n\n /**\n * Re-read the native `<select>` and update the generated menu to match.\n *\n * Assigning `select.value` from script fires no `change` event, so nothing\n * else syncs the visible input text or the `.selected` state on the virtual\n * options. Adding or removing `<option>`s also requires this \u2014 the menu is\n * rebuilt from the native list, the field and Menu instance stay put.\n */\n refresh() {\n if (!this.menuEl) return;\n this._bindForm();\n const root = this.menuEl.getRootNode() as Document | ShadowRoot;\n const focused = this._values.find(value => value.optionEl.contains(root.activeElement))?.el;\n this.input.disabled = this.el.matches(':disabled');\n this.wrapper.classList.toggle('disabled', this.input.disabled);\n if (this.input.disabled) this.menu?.close();\n else if (!this.menu) this._initMenu();\n this.input.removeAttribute('aria-activedescendant');\n this._rebuildOptions();\n this._handleSelectChange();\n if (this.menu) this.menu.focusedIndex = -1;\n if (this.menu?.isOpen) {\n this.menu.recalculateDimensions();\n if (focused) (this._values.find(value => value.el === focused)?.optionEl ?? this.input).focus();\n }\n }\n\n _setupEventHandlers() {\n this._setupOptionHandlers();\n this.el.addEventListener('change', this._handleSelectChange);\n this.el.addEventListener('invalid', this._handleInvalid);\n this.el.addEventListener('focus', this._handleNativeFocus);\n this.input.addEventListener('click', this._handleInputClick);\n this.menuEl.addEventListener('focusin', this._handleOptionFocus);\n this._bindForm();\n }\n\n private _bindForm() {\n this._form?.removeEventListener('reset', this._handleReset);\n this._form = this.el.form;\n this._form?.addEventListener('reset', this._handleReset);\n }\n\n _removeEventHandlers() {\n this._removeOptionHandlers();\n this.el.removeEventListener('change', this._handleSelectChange);\n this.el.removeEventListener('invalid', this._handleInvalid);\n this.el.removeEventListener('focus', this._handleNativeFocus);\n this.input?.removeEventListener('click', this._handleInputClick);\n this.menuEl?.removeEventListener('focusin', this._handleOptionFocus);\n this._form?.removeEventListener('reset', this._handleReset);\n clearTimeout(this._resetTimer);\n }\n\n private _setupOptionHandlers() {\n this.menuEl.querySelectorAll('li:not(.optgroup)').forEach((el) => {\n el.addEventListener('click', this._handleOptionClick);\n el.addEventListener('keydown', this._handleOptionKeydown);\n });\n }\n\n private _removeOptionHandlers() {\n this.menuEl?.querySelectorAll('li:not(.optgroup)').forEach((el) => {\n el.removeEventListener('click', this._handleOptionClick);\n el.removeEventListener('keydown', this._handleOptionKeydown);\n });\n }\n\n _handleSelectChange = () => {\n this._setValueToInput();\n this._setSelectedStates();\n this._syncValidationError();\n };\n\n private _handleInvalid = (e: Event) => {\n if (e.defaultPrevented) return;\n if (!this._validationMessage) {\n this._validationMessage = document.createElement('small');\n this._validationMessage.id = this.input.id + '-error';\n this._validationMessage.className = 'supporting-text';\n this._validationMessage.style.color = 'var(--md-sys-color-error)';\n this.wrapper.append(this._validationMessage);\n this.input.setAttribute('aria-describedby',\n [this.input.getAttribute('aria-describedby'), this._validationMessage.id].filter(Boolean).join(' '));\n }\n this.input.ariaInvalid = 'true';\n this._syncValidationError();\n };\n\n // Native reporting chooses the control; static checks never focus. Wait until\n // reporting finishes so Firefox dismisses its native popup when focus moves.\n private _handleNativeFocus = () => queueMicrotask(() => {\n if (FormSelect.getInstance(this.el) === this && this.el.matches(':focus')) this.input.focus();\n });\n\n private _syncValidationError() {\n if (!this._validationMessage) return;\n if (this.el.willValidate && !this.el.validity.valid) {\n this._validationMessage.textContent = this.el.validationMessage;\n } else this._clearValidationError();\n }\n\n private _clearValidationError() {\n if (!this._validationMessage) return;\n const descriptions = this.input.getAttribute('aria-describedby')?.split(/\\s+/)\n .filter(id => id !== this._validationMessage.id).join(' ');\n if (descriptions) this.input.setAttribute('aria-describedby', descriptions);\n else this.input.removeAttribute('aria-describedby');\n this.input.ariaInvalid = this.el.ariaInvalid;\n this._validationMessage.remove();\n this._validationMessage = null;\n }\n\n private _handleReset = (e: Event) => {\n clearTimeout(this._resetTimer);\n this._resetTimer = setTimeout(() => {\n if (!e.defaultPrevented) {\n this._handleSelectChange();\n this._clearValidationError();\n }\n }, 0);\n };\n\n // Named rather than inline so that _removeEventHandlers can actually detach\n // it - an anonymous listener per option was unremovable.\n _handleOptionKeydown = (e: KeyboardEvent) => {\n if (e.key === ' ' || e.key === 'Enter') this._handleOptionClick(e);\n };\n\n _handleOptionClick = (e: MouseEvent | KeyboardEvent) => {\n e.preventDefault();\n const virtualOption = (e.target as HTMLLIElement).closest('li');\n this._selectOptionElement(virtualOption);\n e.stopPropagation();\n };\n\n private _handleOptionFocus = (e: FocusEvent) => {\n const target = e.target;\n if (!(target instanceof Element)) return;\n const li = target.closest('li[role=\"option\"]');\n if (li?.id) this.input.setAttribute('aria-activedescendant', li.id);\n };\n\n _arraysEqual<T, E>(a: T[], b: (E | T)[]) {\n if (a === b) return true;\n if (a == null || b == null) return false;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; ++i) if (a[i] !== b[i]) return false;\n return true;\n }\n\n _selectOptionElement(virtualOption: HTMLElement) {\n if (this.el.matches(':disabled')) return;\n if (\n !virtualOption.classList.contains('disabled') &&\n !virtualOption.classList.contains('optgroup')\n ) {\n const value = this._values.find((value) => value.optionEl === virtualOption);\n if (!value || value.el.matches(':disabled')) return;\n const previousSelectedValues = this.getSelectedValues();\n if (this.isMultiple) {\n this._toggleEntryFromArray(value);\n } else {\n this._deselectAll();\n this._selectValue(value);\n }\n this._handleSelectChange();\n const actualSelectedValues = this.getSelectedValues();\n const selectionHasChanged = !this._arraysEqual(previousSelectedValues, actualSelectedValues);\n if (selectionHasChanged)\n this.el.dispatchEvent(\n new Event('change', { bubbles: true, cancelable: true, composed: true })\n );\n }\n if (!this.isMultiple) this.menu?.close();\n }\n\n _handleInputClick = () => {\n if (this.menu && this.menu.isOpen) {\n this._setValueToInput();\n this._setSelectedStates();\n }\n };\n\n _setupMenu() {\n // The DOM already knows which labels belong to this control. Building a\n // selector out of the id instead meant an id with any CSS-special\n // character either threw or matched something else entirely.\n this.labelEl = this.el.labels?.[0] ?? null;\n Array.from(this.el.labels ?? []).forEach(label => {\n this._originalLabels.set(label, { for: label.getAttribute('for'), id: label.getAttribute('id') });\n });\n if (this.labelEl && !this.el.closest('label')) {\n this._labelPlaceholder = document.createComment('');\n this.labelEl.before(this._labelPlaceholder);\n }\n\n this._setupWrapper();\n this._hideNativeSelect();\n if (this.el.matches(':disabled')) this.wrapper.classList.add('disabled');\n\n this.menuEl = document.createElement('menu');\n this.menuEl.id = `select-options-${Utils.guid()}`;\n this.menuEl.setAttribute('popover', 'auto');\n this.menuEl.setAttribute('role', 'listbox');\n this.menuEl.ariaMultiSelectable = this.isMultiple.toString();\n if (this.isMultiple) this.menuEl.classList.add('multiple-select-menu');\n this._buildOptions();\n this.wrapper.append(this.menuEl);\n\n this._buildInput();\n this._buildCaret();\n this._initMenu();\n this._setSelectedStates();\n if (this._labelPlaceholder) this.input.after(this.labelEl);\n }\n\n private _setupWrapper() {\n const parent = this.el.parentElement;\n const reuse =\n parent &&\n parent.matches('.field') &&\n !parent.querySelector(':scope > .hide-select') &&\n !parent.querySelector(':scope > input, :scope > textarea');\n if (reuse) {\n this.wrapper = parent as HTMLDivElement;\n this._createdWrapper = false;\n } else {\n this.wrapper = document.createElement('div');\n this.wrapper.classList.add('field');\n this._createdWrapper = true;\n this.el.before(this.wrapper);\n }\n if (this.options.classes.length > 0) {\n this.wrapper.classList.add(...this.options.classes.split(' ').filter(Boolean));\n }\n }\n\n private _hideNativeSelect() {\n const hiddenDiv = document.createElement('div');\n hiddenDiv.classList.add('hide-select');\n hiddenDiv.ariaHidden = 'true';\n this.el.before(hiddenDiv);\n hiddenDiv.appendChild(this.el);\n if (this._createdWrapper) this.wrapper.append(hiddenDiv);\n }\n\n private _buildInput() {\n this.input = document.createElement('input');\n this.input.id = 'select-input-' + Utils.guid();\n // FormSelect owns this Menu. A later AutoInit must not replace it before\n // FormSelect can destroy its own instance during reinitialization.\n this.input.classList.add('menu-trigger', 'no-autoinit');\n this.input.type = 'text';\n this.input.readOnly = true;\n this.input.setAttribute('data-target', this.menuEl.id);\n this.input.ariaReadOnly = 'true';\n this.input.ariaRequired = this.el.hasAttribute('required').toString();\n this.input.disabled = this.el.matches(':disabled');\n this.input.setAttribute('tabindex', this.nativeTabIndex.toString());\n\n const attrs = this.el.attributes;\n for (let i = 0; i < attrs.length; ++i) {\n const attr = attrs[i];\n if (attr.name.startsWith('aria-')) this.input.setAttribute(attr.name, attr.value);\n }\n\n this.input.setAttribute('role', 'combobox');\n this.input.setAttribute('aria-haspopup', 'listbox');\n this.input.ariaExpanded = 'false';\n this.input.setAttribute('aria-controls', this.menuEl.id);\n this.input.placeholder = ' ';\n\n this._originalLabels.forEach((_, label) => { label.htmlFor = this.input.id; });\n // Moving the first label can change DOM order. Preserve the original naming\n // order without overriding an author's explicit accessible name.\n if (this._labelPlaceholder && this._originalLabels.size > 1 && !this.input.getAttribute('aria-label') && !this.input.getAttribute('aria-labelledby')) {\n this.input.setAttribute('aria-labelledby', Array.from(this._originalLabels.keys(), (label, index) => {\n if (!label.id) label.id = `${this.input.id}-label-${index}`;\n return label.id;\n }).join(' '));\n }\n\n this.wrapper.prepend(this.input);\n this._setValueToInput();\n }\n\n private _buildCaret() {\n const caret = document.createElement('span');\n caret.classList.add('caret');\n caret.setAttribute('aria-hidden', 'true');\n this.wrapper.prepend(caret);\n }\n\n private _initMenu() {\n if (this.el.matches(':disabled')) return;\n const menuOptions = { ...this.options.menuOptions };\n menuOptions.coverTrigger = false;\n const userOnOpenEnd = menuOptions.onOpenEnd;\n const userOnCloseEnd = menuOptions.onCloseEnd;\n menuOptions.onOpenEnd = () => {\n const selectedOption = this.menuEl.querySelector('.selected');\n if (selectedOption) {\n this.menu.focusedIndex = [...selectedOption.parentNode.children].indexOf(selectedOption);\n this.menu._focusFocusedItem();\n if (this.menu.isScrollable) {\n let scrollOffset =\n selectedOption.getBoundingClientRect().top -\n this.menuEl.getBoundingClientRect().top;\n scrollOffset -= this.menuEl.clientHeight / 2;\n this.menuEl.scrollTop = scrollOffset;\n }\n if (selectedOption.id) this.input.setAttribute('aria-activedescendant', selectedOption.id);\n }\n this.input.ariaExpanded = 'true';\n if (userOnOpenEnd && typeof userOnOpenEnd === 'function')\n userOnOpenEnd.call(this.menu, this.el);\n };\n menuOptions.onCloseEnd = () => {\n this.input.ariaExpanded = 'false';\n this.input.removeAttribute('aria-activedescendant');\n if (userOnCloseEnd && typeof userOnCloseEnd === 'function')\n userOnCloseEnd.call(this.menu, this.el);\n };\n menuOptions.closeOnClick = false;\n this.menu = Menu.init(this.input, menuOptions);\n }\n\n private _nativeOptions(): (HTMLOptGroupElement | HTMLOptionElement)[] {\n return <(HTMLOptGroupElement | HTMLOptionElement)[]>(\n Array.from(this.el.children).filter((el) => ['OPTION', 'OPTGROUP'].includes(el.tagName))\n );\n }\n\n private _buildOptions() {\n this.selectOptions = this._nativeOptions();\n this._values = [];\n this.selectOptions.forEach((realOption) => {\n if (realOption.tagName === 'OPTION') {\n const virtualOption = this._createAndAppendOptionWithIcon(\n realOption,\n this.isMultiple ? 'multiple' : undefined\n );\n this._addOptionToValues(realOption as HTMLOptionElement, virtualOption);\n } else if (realOption.tagName === 'OPTGROUP') {\n const groupId = 'opt-group-' + Utils.guid();\n const groupParent = document.createElement('li');\n groupParent.classList.add('optgroup');\n groupParent.tabIndex = -1;\n groupParent.setAttribute('role', 'group');\n groupParent.setAttribute('aria-labelledby', groupId);\n // Built as nodes, not markup: the optgroup's label attribute is\n // author content that may come from a server, and interpolating it\n // into innerHTML let it close the span and inject an element.\n const groupLabel = document.createElement('span');\n groupLabel.id = groupId;\n groupLabel.setAttribute('role', 'presentation');\n groupLabel.textContent = realOption.getAttribute('label') ?? '';\n groupParent.replaceChildren(groupLabel);\n this.menuEl.append(groupParent);\n\n const groupChildren = [];\n const selectOptions = <HTMLOptionElement[]>(\n Array.from(realOption.children).filter((el) => el.tagName === 'OPTION')\n );\n selectOptions.forEach((child) => {\n const virtualOption = this._createAndAppendOptionWithIcon(child, 'optgroup-option');\n groupChildren.push(virtualOption.id);\n this._addOptionToValues(child, virtualOption);\n });\n groupParent.setAttribute('aria-owns', groupChildren.join(' '));\n }\n });\n }\n\n private _rebuildOptions() {\n this._removeOptionHandlers();\n this.menuEl.replaceChildren();\n this._buildOptions();\n this._setupOptionHandlers();\n this.menu?._makeMenuFocusable();\n }\n\n _addOptionToValues(realOption: HTMLOptionElement, virtualOption: HTMLElement) {\n this._values.push({ el: realOption, optionEl: virtualOption });\n }\n\n _removeMenu() {\n this.wrapper?.querySelector(':scope > .caret')?.remove();\n this.input?.remove();\n this.menuEl?.remove();\n const hide = this.el.parentElement;\n if (hide?.classList.contains('hide-select')) hide.replaceWith(this.el);\n this._originalLabels.forEach((original, label) => {\n for (const name of ['for', 'id'] as const) {\n if (original[name] === null) label.removeAttribute(name);\n else label.setAttribute(name, original[name]);\n }\n });\n this._labelPlaceholder?.replaceWith(this.labelEl);\n if (!this.wrapper) return;\n if (this._createdWrapper) {\n this.wrapper.replaceWith(this.el);\n } else {\n this.wrapper.classList.remove('disabled');\n if (this.options.classes.length > 0) {\n this.wrapper.classList.remove(...this.options.classes.split(' ').filter(Boolean));\n }\n }\n }\n\n _createAndAppendOptionWithIcon(\n realOption: HTMLOptionElement | HTMLOptGroupElement,\n type: string\n ) {\n const li = document.createElement('li');\n li.id = 'select-option-' + Utils.guid();\n li.setAttribute('role', 'option');\n li.tabIndex = 0;\n const disabled = this.el.matches(':disabled') || realOption.matches(':disabled');\n if (disabled) {\n li.classList.add('disabled');\n li.ariaDisabled = 'true';\n li.tabIndex = -1;\n }\n if (type === 'optgroup-option') li.classList.add(type);\n\n // Text / Checkbox. An <option>'s content model is text, so its markup is\n // its text - copying it as nodes rather than through innerHTML keeps it\n // that way instead of handing it back to the parser.\n const optionText = realOption.textContent;\n const span = document.createElement('span');\n if (this.isMultiple && !disabled) {\n const label = document.createElement('label');\n const checkbox = document.createElement('input');\n checkbox.type = 'checkbox';\n checkbox.tabIndex = -1;\n const labelText = document.createElement('span');\n labelText.textContent = optionText;\n label.append(checkbox, labelText);\n span.appendChild(label);\n } else {\n span.textContent = optionText;\n }\n li.appendChild(span);\n\n const iconUrl = realOption.getAttribute('data-icon');\n let imageUrl: URL | undefined;\n if (iconUrl) {\n try {\n const url = new URL(iconUrl, this.el.ownerDocument.baseURI);\n if (['http:', 'https:', 'blob:'].includes(url.protocol) ||\n /^data:image\\/(?:avif|bmp|gif|jpeg|png|svg\\+xml|webp|x-icon)(?:;|,)/i.test(url.href)) {\n imageUrl = url;\n }\n } catch { /* Invalid icons must not prevent selection. */ }\n }\n // filter(Boolean): a doubled or trailing space yields an empty string,\n // and classList.add('') throws.\n const classes = realOption.getAttribute('class')?.split(' ').filter(Boolean);\n if (imageUrl) {\n const img = document.createElement('img');\n if (classes?.length) img.classList.add(...classes);\n img.src = imageUrl.href;\n img.ariaHidden = 'true';\n li.prepend(img);\n }\n this.menuEl.append(li);\n return li;\n }\n\n _selectValue(value: ValueStruct) {\n value.el.selected = true;\n value.optionEl.classList.add('selected');\n value.optionEl.ariaSelected = 'true';\n const checkbox = <HTMLInputElement>value.optionEl.querySelector('input[type=\"checkbox\"]');\n if (checkbox) checkbox.checked = true;\n }\n\n _deselectValue(value: ValueStruct) {\n value.el.selected = false;\n value.optionEl.classList.remove('selected');\n value.optionEl.ariaSelected = 'false';\n const checkbox = <HTMLInputElement>value.optionEl.querySelector('input[type=\"checkbox\"]');\n if (checkbox) checkbox.checked = false;\n }\n\n _deselectAll() {\n this._values.forEach((value) => this._deselectValue(value));\n }\n\n _isValueSelected(value: ValueStruct) {\n return value.el.selected;\n }\n\n _toggleEntryFromArray(value: ValueStruct) {\n if (this._isValueSelected(value)) this._deselectValue(value);\n else this._selectValue(value);\n }\n\n _getSelectedOptions(): HTMLOptionElement[] {\n return Array.prototype.filter.call(\n this.el.selectedOptions,\n (realOption: HTMLOptionElement) => realOption\n );\n }\n\n _setValueToInput() {\n this.input.value = this._getSelectedOptions().map(option => option.textContent.trim()).join(', ');\n }\n\n _setSelectedStates() {\n this._values.forEach((value) => {\n const optionIsSelected = value.el.selected;\n const cb = <HTMLInputElement>value.optionEl.querySelector('input[type=\"checkbox\"]');\n if (cb) cb.checked = optionIsSelected;\n if (optionIsSelected) {\n this._activateOption(this.menuEl, value.optionEl);\n } else {\n value.optionEl.classList.remove('selected');\n value.optionEl.ariaSelected = 'false';\n }\n });\n }\n\n _activateOption(ul: HTMLElement, li: HTMLElement) {\n if (!li) return;\n if (!this.isMultiple)\n ul.querySelectorAll('li.selected').forEach((row) => row.classList.remove('selected'));\n li.classList.add('selected');\n li.ariaSelected = 'true';\n }\n\n getSelectedValues() {\n return this._getSelectedOptions().map((realOption) => realOption.value);\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["value"]
7
- }