@awc-ui/core 1.0.0-beta.3 → 1.0.0-beta.4

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 (498) hide show
  1. package/dist/cjs/lazy-loading-indicator-CoC-_DMs.js +69 -0
  2. package/dist/cjs/lazy-loading-indicator-CoC-_DMs.js.map +1 -0
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/cjs/md-accordion-item.cjs.entry.js +3 -3
  5. package/dist/cjs/md-app-bar.cjs.entry.js +1 -1
  6. package/dist/cjs/md-area-chart.cjs.entry.js +2 -2
  7. package/dist/cjs/md-autocomplete.cjs.entry.js +4 -3
  8. package/dist/cjs/md-autocomplete.cjs.entry.js.map +1 -1
  9. package/dist/cjs/md-avatar_2.cjs.entry.js +3 -3
  10. package/dist/cjs/md-badge.cjs.entry.js +2 -2
  11. package/dist/cjs/md-bar-chart.cjs.entry.js +2 -2
  12. package/dist/cjs/md-bottom-sheet.cjs.entry.js +4 -4
  13. package/dist/cjs/md-breadcrumbs.cjs.entry.js +2 -2
  14. package/dist/cjs/md-button-group.cjs.entry.js +2 -2
  15. package/dist/cjs/{md-button_7.cjs.entry.js → md-button_6.cjs.entry.js} +13 -38
  16. package/dist/cjs/md-button_6.cjs.entry.js.map +1 -0
  17. package/dist/cjs/md-checkbox.cjs.entry.js +2 -2
  18. package/dist/cjs/md-chip.cjs.entry.js +2 -2
  19. package/dist/cjs/md-date-picker.cjs.entry.js +1 -1
  20. package/dist/cjs/md-dialog.cjs.entry.js +2 -2
  21. package/dist/cjs/md-divider.cjs.entry.js +2 -2
  22. package/dist/cjs/md-fab-menu-item.cjs.entry.js +2 -2
  23. package/dist/cjs/md-fab-menu.cjs.entry.js +2 -2
  24. package/dist/cjs/md-fab.cjs.entry.js +2 -2
  25. package/dist/cjs/md-line-chart.cjs.entry.js +2 -2
  26. package/dist/cjs/md-list-item.cjs.entry.js +3 -3
  27. package/dist/cjs/md-list.cjs.entry.js +3 -3
  28. package/dist/cjs/md-loading-indicator-CmzdcYLR.js +33 -0
  29. package/dist/cjs/md-loading-indicator-CmzdcYLR.js.map +1 -0
  30. package/dist/cjs/md-loading-indicator.cjs.entry.js +11 -0
  31. package/dist/cjs/md-loading-indicator.cjs.entry.js.map +1 -0
  32. package/dist/cjs/md-menu_2.cjs.entry.js +5 -5
  33. package/dist/cjs/md-multi-select.cjs.entry.js +5 -4
  34. package/dist/cjs/md-multi-select.cjs.entry.js.map +1 -1
  35. package/dist/cjs/md-navigation-bar.cjs.entry.js +1 -1
  36. package/dist/cjs/md-navigation-tab.cjs.entry.js +2 -2
  37. package/dist/cjs/md-number-field.cjs.entry.js +2 -2
  38. package/dist/cjs/md-organization-chart.cjs.entry.js +2 -2
  39. package/dist/cjs/md-otp-field.cjs.entry.js +3 -3
  40. package/dist/cjs/md-search.cjs.entry.js +7 -6
  41. package/dist/cjs/md-search.cjs.entry.js.map +1 -1
  42. package/dist/cjs/md-select-option.cjs.entry.js +1 -1
  43. package/dist/cjs/md-select.cjs.entry.js +5 -4
  44. package/dist/cjs/md-select.cjs.entry.js.map +1 -1
  45. package/dist/cjs/md-slider.cjs.entry.js +2 -2
  46. package/dist/cjs/md-sparkline.cjs.entry.js +2 -2
  47. package/dist/cjs/md-status-dot.cjs.entry.js +1 -1
  48. package/dist/cjs/md-table.cjs.entry.js +3 -3
  49. package/dist/cjs/md-text-field.cjs.entry.js +7 -7
  50. package/dist/cjs/md-time-picker.cjs.entry.js +1 -1
  51. package/dist/cjs/md-transfer-list.cjs.entry.js +1 -1
  52. package/dist/cjs/md3.cjs.js +1 -1
  53. package/dist/collection/collection-manifest.json +1 -1
  54. package/dist/collection/components/md-accordion-item/md-accordion-item.js +3 -3
  55. package/dist/collection/components/md-app-bar/md-app-bar.js +1 -1
  56. package/dist/collection/components/md-area-chart/md-area-chart.js +2 -2
  57. package/dist/collection/components/md-autocomplete/md-autocomplete.js +4 -3
  58. package/dist/collection/components/md-autocomplete/md-autocomplete.js.map +1 -1
  59. package/dist/collection/components/md-avatar/md-avatar.js +2 -2
  60. package/dist/collection/components/md-badge/md-badge.js +2 -2
  61. package/dist/collection/components/md-bar-chart/md-bar-chart.js +2 -2
  62. package/dist/collection/components/md-bottom-sheet/md-bottom-sheet.js +4 -4
  63. package/dist/collection/components/md-breadcrumbs/md-breadcrumbs.js +2 -2
  64. package/dist/collection/components/md-button/md-button.js +4 -3
  65. package/dist/collection/components/md-button/md-button.js.map +1 -1
  66. package/dist/collection/components/md-button-group/md-button-group.js +2 -2
  67. package/dist/collection/components/md-card/md-card.js +2 -2
  68. package/dist/collection/components/md-checkbox/md-checkbox.js +2 -2
  69. package/dist/collection/components/md-chip/md-chip.js +2 -2
  70. package/dist/collection/components/md-date-picker/md-date-picker.js +1 -1
  71. package/dist/collection/components/md-dialog/md-dialog.js +2 -2
  72. package/dist/collection/components/md-divider/md-divider.js +2 -2
  73. package/dist/collection/components/md-fab/md-fab.js +2 -2
  74. package/dist/collection/components/md-fab-menu/md-fab-menu.js +2 -2
  75. package/dist/collection/components/md-fab-menu-item/md-fab-menu-item.js +2 -2
  76. package/dist/collection/components/md-icon-button/md-icon-button.js +4 -4
  77. package/dist/collection/components/md-line-chart/md-line-chart.js +2 -2
  78. package/dist/collection/components/md-list/md-list.js +3 -3
  79. package/dist/collection/components/md-list-item/md-list-item.js +3 -3
  80. package/dist/collection/components/md-loading-indicator/md-loading-indicator.js +2 -2
  81. package/dist/collection/components/md-menu/md-menu.js +3 -3
  82. package/dist/collection/components/md-menu-item/md-menu-item.js +2 -2
  83. package/dist/collection/components/md-multi-select/md-multi-select.js +5 -4
  84. package/dist/collection/components/md-multi-select/md-multi-select.js.map +1 -1
  85. package/dist/collection/components/md-navigation-bar/md-navigation-bar.js +1 -1
  86. package/dist/collection/components/md-navigation-tab/md-navigation-tab.js +2 -2
  87. package/dist/collection/components/md-number-field/md-number-field.js +2 -2
  88. package/dist/collection/components/md-organization-chart/md-organization-chart.js +2 -2
  89. package/dist/collection/components/md-otp-field/md-otp-field.js +3 -3
  90. package/dist/collection/components/md-ripple/md-ripple.js +1 -1
  91. package/dist/collection/components/md-search/md-search.js +7 -6
  92. package/dist/collection/components/md-search/md-search.js.map +1 -1
  93. package/dist/collection/components/md-select/md-select.js +5 -4
  94. package/dist/collection/components/md-select/md-select.js.map +1 -1
  95. package/dist/collection/components/md-select-option/md-select-option.js +1 -1
  96. package/dist/collection/components/md-slider/md-slider.js +2 -2
  97. package/dist/collection/components/md-sparkline/md-sparkline.js +2 -2
  98. package/dist/collection/components/md-status-dot/md-status-dot.js +1 -1
  99. package/dist/collection/components/md-table/md-table.js +3 -3
  100. package/dist/collection/components/md-text-field/md-text-field.js +7 -7
  101. package/dist/collection/components/md-time-picker/md-time-picker.js +1 -1
  102. package/dist/collection/components/md-tooltip/md-tooltip.js +1 -1
  103. package/dist/collection/components/md-transfer-list/md-transfer-list.js +1 -1
  104. package/dist/collection/utils/lazy-loading-indicator.js +62 -0
  105. package/dist/collection/utils/lazy-loading-indicator.js.map +1 -0
  106. package/dist/components/md-accordion-item.js +1 -1
  107. package/dist/components/md-app-bar.js +1 -1
  108. package/dist/components/md-area-chart.js +1 -1
  109. package/dist/components/md-area-chart.js.map +1 -1
  110. package/dist/components/md-autocomplete.js +1 -1
  111. package/dist/components/md-autocomplete.js.map +1 -1
  112. package/dist/components/md-avatar.js +1 -1
  113. package/dist/components/md-badge.js +1 -1
  114. package/dist/components/md-bar-chart.js +1 -1
  115. package/dist/components/md-bottom-sheet.js +1 -1
  116. package/dist/components/md-breadcrumb-item.js +1 -1
  117. package/dist/components/md-breadcrumbs.js +1 -1
  118. package/dist/components/md-button-group.js +1 -1
  119. package/dist/components/md-button.js +1 -1
  120. package/dist/components/md-card.js +1 -1
  121. package/dist/components/md-checkbox.js +1 -1
  122. package/dist/components/md-chip.js +1 -1
  123. package/dist/components/md-date-picker.js +1 -1
  124. package/dist/components/md-date-picker.js.map +1 -1
  125. package/dist/components/md-dialog.js +1 -1
  126. package/dist/components/md-dialog.js.map +1 -1
  127. package/dist/components/md-divider.js +1 -1
  128. package/dist/components/md-divider.js.map +1 -1
  129. package/dist/components/md-fab-menu-item.js +1 -1
  130. package/dist/components/md-fab-menu.js +1 -1
  131. package/dist/components/md-fab.js +1 -1
  132. package/dist/components/md-icon-button.js +1 -1
  133. package/dist/components/md-line-chart.js +1 -1
  134. package/dist/components/md-line-chart.js.map +1 -1
  135. package/dist/components/md-list-item.js +1 -1
  136. package/dist/components/md-list.js +1 -1
  137. package/dist/components/md-loading-indicator.js +1 -1
  138. package/dist/components/md-menu-item.js +1 -1
  139. package/dist/components/md-menu.js +1 -1
  140. package/dist/components/md-multi-select.js +1 -1
  141. package/dist/components/md-multi-select.js.map +1 -1
  142. package/dist/components/md-navigation-bar.js +1 -1
  143. package/dist/components/md-navigation-rail-tab.js +1 -1
  144. package/dist/components/md-navigation-rail.js +1 -1
  145. package/dist/components/md-navigation-tab.js +1 -1
  146. package/dist/components/md-number-field.js +1 -1
  147. package/dist/components/md-organization-chart.js +1 -1
  148. package/dist/components/md-otp-field.js +1 -1
  149. package/dist/components/md-radio.js +1 -1
  150. package/dist/components/md-ripple.js +1 -1
  151. package/dist/components/md-search.js +1 -1
  152. package/dist/components/md-search.js.map +1 -1
  153. package/dist/components/md-segmented-button.js +1 -1
  154. package/dist/components/md-select-option.js +1 -1
  155. package/dist/components/md-select.js +1 -1
  156. package/dist/components/md-side-sheet.js +1 -1
  157. package/dist/components/md-slider.js +1 -1
  158. package/dist/components/md-snackbar.js +1 -1
  159. package/dist/components/md-snackbar.js.map +1 -1
  160. package/dist/components/md-sparkline.js +1 -1
  161. package/dist/components/md-split-button.js +1 -1
  162. package/dist/components/md-status-dot.js +1 -1
  163. package/dist/components/md-step.js +1 -1
  164. package/dist/components/md-step.js.map +1 -1
  165. package/dist/components/md-stepper.js +1 -1
  166. package/dist/components/md-stepper.js.map +1 -1
  167. package/dist/components/md-sub-menu-item.js +1 -1
  168. package/dist/components/md-tab.js +1 -1
  169. package/dist/components/md-table-expand-toggle.js +1 -1
  170. package/dist/components/md-table-pagination.js +1 -1
  171. package/dist/components/md-table-pagination.js.map +1 -1
  172. package/dist/components/md-table.js +1 -1
  173. package/dist/components/md-text-field.js +1 -1
  174. package/dist/components/md-time-picker.js +1 -1
  175. package/dist/components/md-time-picker.js.map +1 -1
  176. package/dist/components/md-tooltip.js +1 -1
  177. package/dist/components/md-transfer-list.js +1 -1
  178. package/dist/components/{p-Eb44PPZa.js → p-1RSrsLOs.js} +2 -2
  179. package/dist/components/{p-D8oM1Kr3.js → p-2HV152w7.js} +2 -2
  180. package/dist/components/{p-BA2v4IuG.js → p-6ZDAcEKN.js} +2 -2
  181. package/dist/components/{p-BADA63mI.js → p-B2fYoYe9.js} +2 -2
  182. package/dist/components/p-B2fYoYe9.js.map +1 -0
  183. package/dist/components/{p-CCMritCA.js → p-C77M30dm.js} +2 -2
  184. package/dist/{components-csr/p-Bmu7RqHM.js → components/p-CNgkGl_1.js} +2 -2
  185. package/dist/components/p-CNgkGl_1.js.map +1 -0
  186. package/dist/components/{p-CtVItLby.js → p-D5Ht729E.js} +2 -2
  187. package/dist/components/p-DPqGg8C1.js +2 -0
  188. package/dist/components/p-DPqGg8C1.js.map +1 -0
  189. package/dist/components/{p-CTC8XAB6.js → p-De3E5Q8v.js} +2 -2
  190. package/dist/components/{p-B-JfuA2g.js → p-Dm_7DA1f.js} +2 -2
  191. package/dist/components/{p-DEzb9xsY.js → p-Dz3R-2Wn.js} +2 -2
  192. package/dist/components/{p-B-iHDK5h.js → p-Zjf9uhOr.js} +2 -2
  193. package/dist/components/{p-DfU4xY2F.js → p-ssLobpGS.js} +2 -2
  194. package/dist/components/{p-DYL-8C5C.js → p-zMR3UIR_.js} +2 -2
  195. package/dist/components-csr/md-accordion-item.js +1 -1
  196. package/dist/components-csr/md-app-bar.js +1 -1
  197. package/dist/components-csr/md-area-chart.js +1 -1
  198. package/dist/components-csr/md-area-chart.js.map +1 -1
  199. package/dist/components-csr/md-autocomplete.js +1 -1
  200. package/dist/components-csr/md-autocomplete.js.map +1 -1
  201. package/dist/components-csr/md-avatar.js +1 -1
  202. package/dist/components-csr/md-badge.js +1 -1
  203. package/dist/components-csr/md-bar-chart.js +1 -1
  204. package/dist/components-csr/md-bottom-sheet.js +1 -1
  205. package/dist/components-csr/md-breadcrumb-item.js +1 -1
  206. package/dist/components-csr/md-breadcrumbs.js +1 -1
  207. package/dist/components-csr/md-button-group.js +1 -1
  208. package/dist/components-csr/md-button.js +1 -1
  209. package/dist/components-csr/md-card.js +1 -1
  210. package/dist/components-csr/md-checkbox.js +1 -1
  211. package/dist/components-csr/md-chip.js +1 -1
  212. package/dist/components-csr/md-date-picker.js +1 -1
  213. package/dist/components-csr/md-date-picker.js.map +1 -1
  214. package/dist/components-csr/md-dialog.js +1 -1
  215. package/dist/components-csr/md-dialog.js.map +1 -1
  216. package/dist/components-csr/md-divider.js +1 -1
  217. package/dist/components-csr/md-divider.js.map +1 -1
  218. package/dist/components-csr/md-fab-menu-item.js +1 -1
  219. package/dist/components-csr/md-fab-menu.js +1 -1
  220. package/dist/components-csr/md-fab.js +1 -1
  221. package/dist/components-csr/md-icon-button.js +1 -1
  222. package/dist/components-csr/md-line-chart.js +1 -1
  223. package/dist/components-csr/md-line-chart.js.map +1 -1
  224. package/dist/components-csr/md-list-item.js +1 -1
  225. package/dist/components-csr/md-list.js +1 -1
  226. package/dist/components-csr/md-loading-indicator.js +1 -1
  227. package/dist/components-csr/md-menu-item.js +1 -1
  228. package/dist/components-csr/md-menu.js +1 -1
  229. package/dist/components-csr/md-multi-select.js +1 -1
  230. package/dist/components-csr/md-multi-select.js.map +1 -1
  231. package/dist/components-csr/md-navigation-bar.js +1 -1
  232. package/dist/components-csr/md-navigation-rail-tab.js +1 -1
  233. package/dist/components-csr/md-navigation-rail.js +1 -1
  234. package/dist/components-csr/md-navigation-tab.js +1 -1
  235. package/dist/components-csr/md-number-field.js +1 -1
  236. package/dist/components-csr/md-organization-chart.js +1 -1
  237. package/dist/components-csr/md-otp-field.js +1 -1
  238. package/dist/components-csr/md-radio.js +1 -1
  239. package/dist/components-csr/md-ripple.js +1 -1
  240. package/dist/components-csr/md-search.js +1 -1
  241. package/dist/components-csr/md-search.js.map +1 -1
  242. package/dist/components-csr/md-segmented-button.js +1 -1
  243. package/dist/components-csr/md-select-option.js +1 -1
  244. package/dist/components-csr/md-select.js +1 -1
  245. package/dist/components-csr/md-side-sheet.js +1 -1
  246. package/dist/components-csr/md-slider.js +1 -1
  247. package/dist/components-csr/md-snackbar.js +1 -1
  248. package/dist/components-csr/md-snackbar.js.map +1 -1
  249. package/dist/components-csr/md-sparkline.js +1 -1
  250. package/dist/components-csr/md-split-button.js +1 -1
  251. package/dist/components-csr/md-status-dot.js +1 -1
  252. package/dist/components-csr/md-step.js +1 -1
  253. package/dist/components-csr/md-step.js.map +1 -1
  254. package/dist/components-csr/md-stepper.js +1 -1
  255. package/dist/components-csr/md-stepper.js.map +1 -1
  256. package/dist/components-csr/md-sub-menu-item.js +1 -1
  257. package/dist/components-csr/md-tab.js +1 -1
  258. package/dist/components-csr/md-table-expand-toggle.js +1 -1
  259. package/dist/components-csr/md-table-pagination.js +1 -1
  260. package/dist/components-csr/md-table-pagination.js.map +1 -1
  261. package/dist/components-csr/md-table.js +1 -1
  262. package/dist/components-csr/md-text-field.js +1 -1
  263. package/dist/components-csr/md-time-picker.js +1 -1
  264. package/dist/components-csr/md-time-picker.js.map +1 -1
  265. package/dist/components-csr/md-tooltip.js +1 -1
  266. package/dist/components-csr/md-transfer-list.js +1 -1
  267. package/dist/components-csr/p-6WgHjhDg.js +2 -0
  268. package/dist/components-csr/p-6WgHjhDg.js.map +1 -0
  269. package/dist/components-csr/{p-C0DlKmRg.js → p-BEmwDSzw.js} +2 -2
  270. package/dist/components-csr/{p-DvXQXhgu.js → p-BQKzjYcY.js} +2 -2
  271. package/dist/components-csr/{p-CG6FaRlt.js → p-BWMwewtY.js} +2 -2
  272. package/dist/components-csr/{p--OUYjgKN.js → p-BZakoRau.js} +2 -2
  273. package/dist/components-csr/p-BZakoRau.js.map +1 -0
  274. package/dist/components-csr/{p-CSrxeWwL.js → p-Bkt_X-6v.js} +2 -2
  275. package/dist/components-csr/{p-Hm3X1iai.js → p-C3vB0Hd9.js} +2 -2
  276. package/dist/components-csr/{p-CrbzXk64.js → p-CF7mq5T7.js} +2 -2
  277. package/dist/components-csr/{p-DF19mmLl.js → p-CVMM-tdC.js} +2 -2
  278. package/dist/components-csr/{p-C4_7YnHT.js → p-DMQ-6aj8.js} +2 -2
  279. package/dist/components-csr/{p--TCJgZnE.js → p-DjKPc5EU.js} +2 -2
  280. package/dist/{components/p-Lsoo1B-2.js → components-csr/p-If0JHsYV.js} +2 -2
  281. package/dist/components-csr/p-If0JHsYV.js.map +1 -0
  282. package/dist/components-csr/{p-IWA0yIjJ.js → p-R_guULjT.js} +2 -2
  283. package/dist/components-csr/{p-uZbtHo-A.js → p-uSMrgqAy.js} +2 -2
  284. package/dist/esm/{a11y-C6CRqodW.js → a11y-BckJ95d7.js} +3 -3
  285. package/dist/esm/{a11y-C6CRqodW.js.map → a11y-BckJ95d7.js.map} +1 -1
  286. package/dist/esm/{bar-chart-ZZrajEkM.js → bar-chart-BuTyuCbt.js} +4 -4
  287. package/dist/esm/{bar-chart-ZZrajEkM.js.map → bar-chart-BuTyuCbt.js.map} +1 -1
  288. package/dist/esm/{chart-32olae06.js → chart-ByIhkqsG.js} +4 -4
  289. package/dist/esm/{chart-32olae06.js.map → chart-ByIhkqsG.js.map} +1 -1
  290. package/dist/esm/{hit-test-DHldf5Lm.js → hit-test-c_hI-yCX.js} +3 -3
  291. package/dist/esm/{hit-test-DHldf5Lm.js.map → hit-test-c_hI-yCX.js.map} +1 -1
  292. package/dist/esm/lazy-loading-indicator-BWFcjJiK.js +67 -0
  293. package/dist/esm/lazy-loading-indicator-BWFcjJiK.js.map +1 -0
  294. package/dist/esm/loader.js +1 -1
  295. package/dist/esm/md-accordion-item.entry.js +3 -3
  296. package/dist/esm/md-app-bar.entry.js +1 -1
  297. package/dist/esm/md-area-chart.entry.js +6 -6
  298. package/dist/esm/md-autocomplete.entry.js +4 -3
  299. package/dist/esm/md-autocomplete.entry.js.map +1 -1
  300. package/dist/esm/md-avatar_2.entry.js +3 -3
  301. package/dist/esm/md-badge.entry.js +2 -2
  302. package/dist/esm/md-bar-chart.entry.js +6 -6
  303. package/dist/esm/md-bottom-sheet.entry.js +4 -4
  304. package/dist/esm/md-breadcrumb-item.entry.js +1 -1
  305. package/dist/esm/md-breadcrumbs.entry.js +2 -2
  306. package/dist/esm/md-button-group.entry.js +2 -2
  307. package/dist/esm/{md-button_7.entry.js → md-button_6.entry.js} +15 -39
  308. package/dist/esm/md-button_6.entry.js.map +1 -0
  309. package/dist/esm/md-checkbox.entry.js +2 -2
  310. package/dist/esm/md-chip.entry.js +2 -2
  311. package/dist/esm/md-date-picker.entry.js +1 -1
  312. package/dist/esm/md-dialog.entry.js +2 -2
  313. package/dist/esm/md-divider.entry.js +2 -2
  314. package/dist/esm/md-fab-menu-item.entry.js +2 -2
  315. package/dist/esm/md-fab-menu.entry.js +2 -2
  316. package/dist/esm/md-fab.entry.js +2 -2
  317. package/dist/esm/md-line-chart.entry.js +6 -6
  318. package/dist/esm/md-list-item.entry.js +4 -4
  319. package/dist/esm/md-list.entry.js +3 -3
  320. package/dist/esm/md-loading-indicator-Bf-Pt29l.js +31 -0
  321. package/dist/esm/md-loading-indicator-Bf-Pt29l.js.map +1 -0
  322. package/dist/esm/md-loading-indicator.entry.js +5 -0
  323. package/dist/esm/md-loading-indicator.entry.js.map +1 -0
  324. package/dist/esm/md-menu_2.entry.js +5 -5
  325. package/dist/esm/md-multi-select.entry.js +5 -4
  326. package/dist/esm/md-multi-select.entry.js.map +1 -1
  327. package/dist/esm/md-navigation-bar.entry.js +1 -1
  328. package/dist/esm/md-navigation-rail-tab.entry.js +1 -1
  329. package/dist/esm/md-navigation-tab.entry.js +3 -3
  330. package/dist/esm/md-number-field.entry.js +2 -2
  331. package/dist/esm/md-organization-chart.entry.js +2 -2
  332. package/dist/esm/md-otp-field.entry.js +3 -3
  333. package/dist/esm/md-pie-chart.entry.js +2 -2
  334. package/dist/esm/md-search.entry.js +7 -6
  335. package/dist/esm/md-search.entry.js.map +1 -1
  336. package/dist/esm/md-select-option.entry.js +1 -1
  337. package/dist/esm/md-select.entry.js +5 -4
  338. package/dist/esm/md-select.entry.js.map +1 -1
  339. package/dist/esm/md-slider.entry.js +2 -2
  340. package/dist/esm/md-sparkline.entry.js +6 -6
  341. package/dist/esm/md-status-dot.entry.js +1 -1
  342. package/dist/esm/md-table.entry.js +3 -3
  343. package/dist/esm/md-text-field.entry.js +7 -7
  344. package/dist/esm/md-time-picker.entry.js +1 -1
  345. package/dist/esm/md-transfer-list.entry.js +1 -1
  346. package/dist/esm/md3.js +1 -1
  347. package/dist/esm/{rtl-DvOKnoqK.js → rtl-CVFH1DkU.js} +3 -3
  348. package/dist/esm/{rtl-DvOKnoqK.js.map → rtl-CVFH1DkU.js.map} +1 -1
  349. package/dist/esm/{url-BjYKc1Ge.js → url-BdEoSBtL.js} +3 -3
  350. package/dist/esm/{url-BjYKc1Ge.js.map → url-BdEoSBtL.js.map} +1 -1
  351. package/dist/md3/md3.esm.js +1 -1
  352. package/dist/md3/p-08f1c469.entry.js +2 -0
  353. package/dist/md3/{p-7f53a423.entry.js.map → p-08f1c469.entry.js.map} +1 -1
  354. package/dist/md3/{p-7112374d.entry.js → p-108f89d7.entry.js} +2 -2
  355. package/dist/md3/{p-d7e99f9e.entry.js → p-1112bffc.entry.js} +2 -2
  356. package/dist/md3/{p-ef7b1826.entry.js → p-114c270b.entry.js} +2 -2
  357. package/dist/md3/{p-944e69e0.entry.js → p-1835fe36.entry.js} +2 -2
  358. package/dist/md3/{p-22633b2d.entry.js → p-2ba2db3b.entry.js} +2 -2
  359. package/dist/md3/{p-1d7e0203.entry.js → p-3f64a27d.entry.js} +2 -2
  360. package/dist/md3/{p-bed8dfec.entry.js → p-43c708ad.entry.js} +2 -2
  361. package/dist/md3/{p-ae360663.entry.js → p-4b7cf934.entry.js} +2 -2
  362. package/dist/md3/{p-27135a6b.entry.js → p-4f26bd60.entry.js} +2 -2
  363. package/dist/md3/{p-2befc42c.entry.js → p-56c7c570.entry.js} +2 -2
  364. package/dist/md3/{p-0a599351.entry.js → p-56ca0c3c.entry.js} +2 -2
  365. package/dist/md3/{p-96c06b24.entry.js → p-5b63149a.entry.js} +2 -2
  366. package/dist/md3/{p-4ba3623e.entry.js → p-5f668b0a.entry.js} +2 -2
  367. package/dist/md3/{p-9b9677cc.entry.js → p-6237ddac.entry.js} +2 -2
  368. package/dist/md3/{p-b243284b.entry.js → p-6d65fc6a.entry.js} +2 -2
  369. package/dist/md3/{p-8b1ea5dc.entry.js → p-707b6d7c.entry.js} +2 -2
  370. package/dist/md3/{p-a49df43d.entry.js → p-71f1660b.entry.js} +2 -2
  371. package/dist/md3/{p-7858833e.entry.js → p-7501170f.entry.js} +2 -2
  372. package/dist/md3/{p-6ea7117d.entry.js → p-7d1686a7.entry.js} +2 -2
  373. package/dist/md3/p-7e7f0e45.entry.js +2 -0
  374. package/dist/md3/p-7e7f0e45.entry.js.map +1 -0
  375. package/dist/md3/{p-4aed552f.entry.js → p-80379565.entry.js} +2 -2
  376. package/dist/md3/p-830724e4.entry.js +2 -0
  377. package/dist/md3/p-830724e4.entry.js.map +1 -0
  378. package/dist/md3/{p-e3c37222.entry.js → p-87f88d62.entry.js} +2 -2
  379. package/dist/md3/p-8a7e0297.entry.js +2 -0
  380. package/dist/md3/p-8a7e0297.entry.js.map +1 -0
  381. package/dist/md3/{p-8135c606.entry.js → p-8bdcda53.entry.js} +2 -2
  382. package/dist/md3/p-9003a7d4.entry.js +2 -0
  383. package/dist/md3/p-9003a7d4.entry.js.map +1 -0
  384. package/dist/md3/{p-6bf632c7.entry.js → p-90ccf4c3.entry.js} +2 -2
  385. package/dist/md3/{p-BjYKc1Ge.js → p-BdEoSBtL.js} +2 -2
  386. package/dist/md3/{p-BjYKc1Ge.js.map → p-BdEoSBtL.js.map} +1 -1
  387. package/dist/md3/{p-DzPKu-Ma.js → p-CGqeEMjY.js} +2 -2
  388. package/dist/md3/{p-DzPKu-Ma.js.map → p-CGqeEMjY.js.map} +1 -1
  389. package/dist/md3/{p-DvOKnoqK.js → p-CVFH1DkU.js} +2 -2
  390. package/dist/md3/{p-DvOKnoqK.js.map → p-CVFH1DkU.js.map} +1 -1
  391. package/dist/md3/p-Cch92tDM.js +2 -0
  392. package/dist/md3/{p-RLxbNqRv.js.map → p-Cch92tDM.js.map} +1 -1
  393. package/dist/md3/p-D17cVKxS.js +2 -0
  394. package/dist/md3/p-D17cVKxS.js.map +1 -0
  395. package/dist/md3/{p-Bx6--dQF.js → p-DGtztV3K.js} +2 -2
  396. package/dist/md3/{p-Bx6--dQF.js.map → p-DGtztV3K.js.map} +1 -1
  397. package/dist/md3/p-DnKDoE8K.js +2 -0
  398. package/dist/md3/p-DnKDoE8K.js.map +1 -0
  399. package/dist/md3/{p-5f39b49d.entry.js → p-ab568d1c.entry.js} +2 -2
  400. package/dist/md3/p-ae30e899.entry.js +2 -0
  401. package/dist/md3/p-ae30e899.entry.js.map +1 -0
  402. package/dist/md3/p-b54bbf88.entry.js +2 -0
  403. package/dist/md3/p-b54bbf88.entry.js.map +1 -0
  404. package/dist/md3/{p-21c89d1d.entry.js → p-ba011453.entry.js} +2 -2
  405. package/dist/md3/{p-cdcea99f.entry.js → p-c2944c87.entry.js} +2 -2
  406. package/dist/md3/{p-3a4bd4eb.entry.js → p-cc6e8afd.entry.js} +2 -2
  407. package/dist/md3/{p-c0476406.entry.js → p-d8885f53.entry.js} +2 -2
  408. package/dist/md3/{p-da0c36d9.entry.js → p-db6fb4e1.entry.js} +2 -2
  409. package/dist/md3/{p-5929e59c.entry.js → p-dcba2857.entry.js} +2 -2
  410. package/dist/md3/{p-925768ac.entry.js → p-e357e8ac.entry.js} +2 -2
  411. package/dist/md3/{p-e6b09e71.entry.js → p-e5c6795e.entry.js} +2 -2
  412. package/dist/md3/{p-1e85b8a8.entry.js → p-e871663b.entry.js} +2 -2
  413. package/dist/md3/p-f297d786.entry.js +2 -0
  414. package/dist/md3/{p-38f82d34.entry.js.map → p-f297d786.entry.js.map} +1 -1
  415. package/dist/md3/{p-b5586b66.entry.js → p-f5399b73.entry.js} +2 -2
  416. package/dist/md3/{p-5c35f916.entry.js → p-fd686966.entry.js} +2 -2
  417. package/dist/md3/{p-C_ogF68H.js → p-nhfFYWzy.js} +2 -2
  418. package/dist/md3/{p-C_ogF68H.js.map → p-nhfFYWzy.js.map} +1 -1
  419. package/dist/types/utils/lazy-loading-indicator.d.ts +7 -0
  420. package/hydrate/index.js +172 -106
  421. package/hydrate/index.mjs +172 -106
  422. package/package.json +18 -4
  423. package/dist/cjs/md-button_7.cjs.entry.js.map +0 -1
  424. package/dist/components/p-BADA63mI.js.map +0 -1
  425. package/dist/components/p-Lsoo1B-2.js.map +0 -1
  426. package/dist/components-csr/p--OUYjgKN.js.map +0 -1
  427. package/dist/components-csr/p-Bmu7RqHM.js.map +0 -1
  428. package/dist/esm/md-button_7.entry.js.map +0 -1
  429. package/dist/md3/p-2dda08b2.entry.js +0 -2
  430. package/dist/md3/p-2dda08b2.entry.js.map +0 -1
  431. package/dist/md3/p-38f82d34.entry.js +0 -2
  432. package/dist/md3/p-5db87a9d.entry.js +0 -2
  433. package/dist/md3/p-5db87a9d.entry.js.map +0 -1
  434. package/dist/md3/p-637baee1.entry.js +0 -2
  435. package/dist/md3/p-637baee1.entry.js.map +0 -1
  436. package/dist/md3/p-7f53a423.entry.js +0 -2
  437. package/dist/md3/p-RLxbNqRv.js +0 -2
  438. package/dist/md3/p-b7602557.entry.js +0 -2
  439. package/dist/md3/p-b7602557.entry.js.map +0 -1
  440. package/dist/md3/p-eddae19a.entry.js +0 -2
  441. package/dist/md3/p-eddae19a.entry.js.map +0 -1
  442. /package/dist/components/{p-Eb44PPZa.js.map → p-1RSrsLOs.js.map} +0 -0
  443. /package/dist/components/{p-D8oM1Kr3.js.map → p-2HV152w7.js.map} +0 -0
  444. /package/dist/components/{p-BA2v4IuG.js.map → p-6ZDAcEKN.js.map} +0 -0
  445. /package/dist/components/{p-CCMritCA.js.map → p-C77M30dm.js.map} +0 -0
  446. /package/dist/components/{p-CtVItLby.js.map → p-D5Ht729E.js.map} +0 -0
  447. /package/dist/components/{p-CTC8XAB6.js.map → p-De3E5Q8v.js.map} +0 -0
  448. /package/dist/components/{p-B-JfuA2g.js.map → p-Dm_7DA1f.js.map} +0 -0
  449. /package/dist/components/{p-DEzb9xsY.js.map → p-Dz3R-2Wn.js.map} +0 -0
  450. /package/dist/components/{p-B-iHDK5h.js.map → p-Zjf9uhOr.js.map} +0 -0
  451. /package/dist/components/{p-DfU4xY2F.js.map → p-ssLobpGS.js.map} +0 -0
  452. /package/dist/components/{p-DYL-8C5C.js.map → p-zMR3UIR_.js.map} +0 -0
  453. /package/dist/components-csr/{p-C0DlKmRg.js.map → p-BEmwDSzw.js.map} +0 -0
  454. /package/dist/components-csr/{p-DvXQXhgu.js.map → p-BQKzjYcY.js.map} +0 -0
  455. /package/dist/components-csr/{p-CG6FaRlt.js.map → p-BWMwewtY.js.map} +0 -0
  456. /package/dist/components-csr/{p-CSrxeWwL.js.map → p-Bkt_X-6v.js.map} +0 -0
  457. /package/dist/components-csr/{p-Hm3X1iai.js.map → p-C3vB0Hd9.js.map} +0 -0
  458. /package/dist/components-csr/{p-CrbzXk64.js.map → p-CF7mq5T7.js.map} +0 -0
  459. /package/dist/components-csr/{p-DF19mmLl.js.map → p-CVMM-tdC.js.map} +0 -0
  460. /package/dist/components-csr/{p-C4_7YnHT.js.map → p-DMQ-6aj8.js.map} +0 -0
  461. /package/dist/components-csr/{p--TCJgZnE.js.map → p-DjKPc5EU.js.map} +0 -0
  462. /package/dist/components-csr/{p-IWA0yIjJ.js.map → p-R_guULjT.js.map} +0 -0
  463. /package/dist/components-csr/{p-uZbtHo-A.js.map → p-uSMrgqAy.js.map} +0 -0
  464. /package/dist/md3/{p-7112374d.entry.js.map → p-108f89d7.entry.js.map} +0 -0
  465. /package/dist/md3/{p-d7e99f9e.entry.js.map → p-1112bffc.entry.js.map} +0 -0
  466. /package/dist/md3/{p-ef7b1826.entry.js.map → p-114c270b.entry.js.map} +0 -0
  467. /package/dist/md3/{p-944e69e0.entry.js.map → p-1835fe36.entry.js.map} +0 -0
  468. /package/dist/md3/{p-22633b2d.entry.js.map → p-2ba2db3b.entry.js.map} +0 -0
  469. /package/dist/md3/{p-1d7e0203.entry.js.map → p-3f64a27d.entry.js.map} +0 -0
  470. /package/dist/md3/{p-bed8dfec.entry.js.map → p-43c708ad.entry.js.map} +0 -0
  471. /package/dist/md3/{p-ae360663.entry.js.map → p-4b7cf934.entry.js.map} +0 -0
  472. /package/dist/md3/{p-27135a6b.entry.js.map → p-4f26bd60.entry.js.map} +0 -0
  473. /package/dist/md3/{p-2befc42c.entry.js.map → p-56c7c570.entry.js.map} +0 -0
  474. /package/dist/md3/{p-0a599351.entry.js.map → p-56ca0c3c.entry.js.map} +0 -0
  475. /package/dist/md3/{p-96c06b24.entry.js.map → p-5b63149a.entry.js.map} +0 -0
  476. /package/dist/md3/{p-4ba3623e.entry.js.map → p-5f668b0a.entry.js.map} +0 -0
  477. /package/dist/md3/{p-9b9677cc.entry.js.map → p-6237ddac.entry.js.map} +0 -0
  478. /package/dist/md3/{p-b243284b.entry.js.map → p-6d65fc6a.entry.js.map} +0 -0
  479. /package/dist/md3/{p-8b1ea5dc.entry.js.map → p-707b6d7c.entry.js.map} +0 -0
  480. /package/dist/md3/{p-a49df43d.entry.js.map → p-71f1660b.entry.js.map} +0 -0
  481. /package/dist/md3/{p-7858833e.entry.js.map → p-7501170f.entry.js.map} +0 -0
  482. /package/dist/md3/{p-6ea7117d.entry.js.map → p-7d1686a7.entry.js.map} +0 -0
  483. /package/dist/md3/{p-4aed552f.entry.js.map → p-80379565.entry.js.map} +0 -0
  484. /package/dist/md3/{p-e3c37222.entry.js.map → p-87f88d62.entry.js.map} +0 -0
  485. /package/dist/md3/{p-8135c606.entry.js.map → p-8bdcda53.entry.js.map} +0 -0
  486. /package/dist/md3/{p-6bf632c7.entry.js.map → p-90ccf4c3.entry.js.map} +0 -0
  487. /package/dist/md3/{p-5f39b49d.entry.js.map → p-ab568d1c.entry.js.map} +0 -0
  488. /package/dist/md3/{p-21c89d1d.entry.js.map → p-ba011453.entry.js.map} +0 -0
  489. /package/dist/md3/{p-cdcea99f.entry.js.map → p-c2944c87.entry.js.map} +0 -0
  490. /package/dist/md3/{p-3a4bd4eb.entry.js.map → p-cc6e8afd.entry.js.map} +0 -0
  491. /package/dist/md3/{p-c0476406.entry.js.map → p-d8885f53.entry.js.map} +0 -0
  492. /package/dist/md3/{p-da0c36d9.entry.js.map → p-db6fb4e1.entry.js.map} +0 -0
  493. /package/dist/md3/{p-5929e59c.entry.js.map → p-dcba2857.entry.js.map} +0 -0
  494. /package/dist/md3/{p-925768ac.entry.js.map → p-e357e8ac.entry.js.map} +0 -0
  495. /package/dist/md3/{p-e6b09e71.entry.js.map → p-e5c6795e.entry.js.map} +0 -0
  496. /package/dist/md3/{p-1e85b8a8.entry.js.map → p-e871663b.entry.js.map} +0 -0
  497. /package/dist/md3/{p-b5586b66.entry.js.map → p-f5399b73.entry.js.map} +0 -0
  498. /package/dist/md3/{p-5c35f916.entry.js.map → p-fd686966.entry.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["mdButtonCss","MdButton","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","type","variant","size","shape","disabled","softDisabled","ripple","loading","icon","trailingIcon","href","target","toggle","selected","shapeMorph","mirrorIcon","suppressExpandIconFlip","fullWidth","connectedLeft","connectedRight","value","groupTabindex","roleOverride","density","hasSlottedLeadingIcon","hasSlottedTrailingIcon","pressed","handleClick","e","isDisabled","preventDefault","nextSelected","evt","mdClick","emit","originalEvent","defaultPrevented","mdChange","sanitizeHref","window","open","SAFE_WINDOW_FEATURES","internals","form","requestSubmit","reset","handleKeyDown","key","triggerRipple","el","click","setTimeout","handlePointerDown","handlePointerUp","componentDidLoad","shadow","shadowRoot","leadingSlot","querySelector","trailingSlot","addEventListener","assignedElements","length","render","isEffectivelyDisabled","hasLeadingIcon","hasTrailingIcon","h","Host","class","role","String","undefined","tabindex","onClick","onKeyDown","onPointerDown","onPointerUp","onPointerLeave","onPointerCancel","part","name","LazyLoadingIndicator"],"sources":["src/components/md-button/md-button.css?tag=md-button&encapsulation=shadow","src/components/md-button/md-button.tsx"],"sourcesContent":["/* ==========================================================\n md-button — Material Design 3 Common Button\n Spec: https://m3.material.io/components/buttons/specs\n API: https://developer.android.com/reference/kotlin/\n androidx/compose/material3/ButtonDefaults\n Supports M3 + M3 Expressive (size, shape)\n\n PUBLIC CSS CUSTOM PROPERTIES (override per-instance):\n --md-button-container-color Container background\n --md-button-label-color Label + icon text color\n --md-button-icon-color Icon-only color override\n --md-button-icon-size Icon dimensions\n --md-button-container-shape Border-radius override\n --md-button-outline-color Outlined border color\n --md-button-outline-width Outlined border width\n --md-button-width Fixed inline-size (default: auto)\n --md-button-min-width Minimum inline-size (default: per-size touch target)\n --md-button-max-width Maximum inline-size (default: none)\n --md-button-height Fixed block-size (default: auto)\n --md-button-min-height Minimum block-size (default: per-size touch target)\n\n CSS PARTS:\n state-layer State-layer overlay\n icon Leading icon (fallback)\n trailing-icon Trailing icon (fallback)\n label Label text wrapper\n loading Loading spinner\n\n SLOTS:\n leading-icon Custom leading icon (replaces icon prop)\n trailing-icon Custom trailing icon (replaces trailingIcon prop)\n\n RTL:\n Layout uses CSS logical properties throughout, so leading/\n trailing icons swap visual sides automatically in `dir=\"rtl\"`.\n Set the `mirror-icon` attribute on buttons that use directional\n glyphs (arrows, chevrons) so the icon path itself flips.\n ========================================================== */\n\n:host {\n --_container-color: var(--md-button-container-color, transparent);\n --_label-color: var(--md-button-label-color, var(--md-sys-color-primary));\n --_state-layer-color: var(--md-sys-color-primary);\n --_container-elevation: var(--md-sys-elevation-0, none);\n --_icon-size: var(--md-button-icon-size, 18px);\n\n /* Sizing — defaults come from each size class via --_size-* tokens.\n Public --md-button-{width,min-width,max-width,height,min-height}\n custom properties override per-instance for variable / full-width\n buttons without sacrificing the spec touch-target on resize. */\n --_width: var(--md-button-width, auto);\n /* Min-width tightens with density too (floored at 40px) so short-label\n buttons narrow, not just content-wide ones. Unchanged at density 0. */\n --_min-width: var(\n --md-button-min-width,\n max(40px, calc(var(--_size-min-width, 48px) + var(--md-sys-density-scale, 0) * 4px))\n );\n --_max-width: var(--md-button-max-width, none);\n --_height: var(--md-button-height, auto);\n /* Global density: on top of the size scale, each `data-density` rung (0…-4)\n trims 4px off the touch target, floored at 24px so small buttons stay\n usable. density-scale is 0 by default so the per-size height is unchanged. */\n --_min-height: var(\n --md-button-min-height,\n max(24px, calc(var(--_size-min-height, 32px) + var(--md-sys-density-scale, 0) * 4px))\n );\n\n display: inline-flex;\n align-items: center;\n justify-content: center;\n position: relative;\n overflow: hidden;\n cursor: pointer;\n user-select: none;\n text-decoration: none;\n border: none;\n /* Transparent resting outline; focus-visible swaps outline-color in instantly.\n Deliberately NOT transitioned — on hydration the host's pre-upgrade UA outline\n (style:none, color:currentColor) animates to solid/transparent, which renders a\n dark ring that fades out on every button. Most visible when many mount at once\n (e.g. the 42 day cells in md-date-picker). Instant focus ring matches M3. */\n outline: 3px solid transparent;\n outline-offset: 2px;\n box-sizing: border-box;\n inline-size: var(--_width);\n block-size: var(--_height);\n min-inline-size: var(--_min-width);\n min-block-size: var(--_min-height);\n max-inline-size: var(--_max-width);\n background-color: var(--_container-color);\n color: var(--_label-color);\n box-shadow: var(--_container-elevation);\n --_shape-round: 20px;\n transition:\n box-shadow var(--md-sys-motion-duration-short2, 100ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)),\n background-color var(--md-sys-motion-duration-short2, 100ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)),\n border-color var(--md-sys-motion-duration-short2, 100ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)),\n border-radius var(--md-sys-motion-duration-medium4, 400ms) var(--md-sys-motion-easing-emphasized-decelerate, cubic-bezier(0.05, 0.7, 0.1, 1)),\n color var(--md-sys-motion-duration-short2, 100ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1));\n -webkit-tap-highlight-color: transparent;\n vertical-align: middle;\n}\n\n/* ==========================================================\n 1. SIZE\n XS (32px) · SM (40px, default) · MD (48px) · LG (56px) · XL (96px)\n ========================================================== */\n/* Icon<->label gap tapers with density like the rest of the button: the\n container height and icon already shrink per rung, so a frozen gap made\n compact buttons read as loosely spaced. Each tier halves across the range\n (rate = base/8 per rung), floored at half its base. */\n:host(.md-button--xs) {\n --_icon-size: var(--md-button-icon-size, max(10px, calc(20px + var(--md-sys-density-scale, 0) * 2.5px)));\n --_shape-round: 16px;\n --_size-min-height: 32px;\n --_size-min-width: 48px;\n /* 25% across the density range, floored at half. At 50% the inset shrank\n faster than the button did — a -4 sm button was still 24px tall but had\n only 8px of side padding, which read crammed. */\n padding: 0 max(6px, calc(12px + var(--md-sys-density-scale, 0) * 0.75px));\n gap: max(2px, calc(4px + var(--md-sys-density-scale, 0) * 0.5px));\n font-family: var(--md-sys-typescale-label-medium-font-family, Roboto, sans-serif);\n font-size: max(10px, calc(12px + var(--md-sys-density-scale, 0) * 0.5px));\n font-weight: var(--md-sys-typescale-label-medium-font-weight, 500);\n letter-spacing: var(--md-sys-typescale-label-medium-letter-spacing, 0.5px);\n line-height: max(14px, calc(16px + var(--md-sys-density-scale, 0) * 0.5px));\n}\n\n:host(.md-button--sm) {\n --_icon-size: var(--md-button-icon-size, max(10px, calc(20px + var(--md-sys-density-scale, 0) * 2.5px)));\n --_shape-round: 20px;\n --_size-min-height: 40px;\n --_size-min-width: 58px;\n /* 25% across the density range, floored at half. At 50% the inset shrank\n faster than the button did — a -4 sm button was still 24px tall but had\n only 8px of side padding, which read crammed. */\n padding: 0 max(8px, calc(16px + var(--md-sys-density-scale, 0) * 1px));\n gap: max(4px, calc(8px + var(--md-sys-density-scale, 0) * 1px));\n font-family: var(--md-sys-typescale-label-large-font-family, Roboto, sans-serif);\n font-size: max(12px, calc(14px + var(--md-sys-density-scale, 0) * 0.5px));\n font-weight: var(--md-sys-typescale-label-large-font-weight, 500);\n letter-spacing: var(--md-sys-typescale-label-large-letter-spacing, 0.1px);\n line-height: max(16px, calc(20px + var(--md-sys-density-scale, 0) * 1px));\n}\n\n:host(.md-button--md) {\n --_icon-size: var(--md-button-icon-size, max(12px, calc(24px + var(--md-sys-density-scale, 0) * 3px)));\n --_shape-round: 28px;\n --_size-min-height: 56px;\n --_size-min-width: 72px;\n /* 25% across the density range, floored at half. At 50% the inset shrank\n faster than the button did — a -4 sm button was still 24px tall but had\n only 8px of side padding, which read crammed. */\n padding: 0 max(12px, calc(24px + var(--md-sys-density-scale, 0) * 1.5px));\n gap: max(4px, calc(8px + var(--md-sys-density-scale, 0) * 1px));\n font-family: var(--md-sys-typescale-title-small-font-family, Roboto, sans-serif);\n font-size: max(12px, calc(14px + var(--md-sys-density-scale, 0) * 0.5px));\n font-weight: var(--md-sys-typescale-title-small-font-weight, 500);\n letter-spacing: var(--md-sys-typescale-title-small-letter-spacing, 0.1px);\n line-height: max(16px, calc(20px + var(--md-sys-density-scale, 0) * 1px));\n}\n\n:host(.md-button--lg) {\n --_icon-size: var(--md-button-icon-size, max(16px, calc(32px + var(--md-sys-density-scale, 0) * 4px)));\n --_shape-round: 48px;\n --_size-min-height: 96px;\n --_size-min-width: 88px;\n /* 25% across the density range, floored at half. At 50% the inset shrank\n faster than the button did — a -4 sm button was still 24px tall but had\n only 8px of side padding, which read crammed. */\n padding: 0 max(24px, calc(48px + var(--md-sys-density-scale, 0) * 3px));\n gap: max(6px, calc(12px + var(--md-sys-density-scale, 0) * 1.5px));\n font-family: var(--md-sys-typescale-title-medium-font-family, Roboto, sans-serif);\n font-size: max(13px, calc(16px + var(--md-sys-density-scale, 0) * 0.5px));\n font-weight: var(--md-sys-typescale-title-medium-font-weight, 500);\n letter-spacing: var(--md-sys-typescale-title-medium-letter-spacing, 0.15px);\n line-height: max(18px, calc(24px + var(--md-sys-density-scale, 0) * 1px));\n}\n\n:host(.md-button--xl) {\n --_icon-size: var(--md-button-icon-size, max(20px, calc(40px + var(--md-sys-density-scale, 0) * 5px)));\n --_shape-round: 68px;\n --_size-min-height: 136px;\n --_size-min-width: 120px;\n /* 25% across the density range, floored at half. At 50% the inset shrank\n faster than the button did — a -4 sm button was still 24px tall but had\n only 8px of side padding, which read crammed. */\n padding: 0 max(32px, calc(64px + var(--md-sys-density-scale, 0) * 4px));\n gap: max(8px, calc(16px + var(--md-sys-density-scale, 0) * 2px));\n font-family: var(--md-sys-typescale-headline-small-font-family, Roboto, sans-serif);\n font-size: max(18px, calc(24px + var(--md-sys-density-scale, 0) * 1px));\n font-weight: var(--md-sys-typescale-headline-small-font-weight, 400);\n letter-spacing: var(--md-sys-typescale-headline-small-letter-spacing, 0px);\n line-height: max(24px, calc(32px + var(--md-sys-density-scale, 0) * 2px));\n}\n\n/* ==========================================================\n 1b. FULL WIDTH — block-level, fills inline axis\n `full-width` switches the host from inline-flex to flex and stretches\n inline-size to 100% of the containing block. The size's\n --_size-min-height (touch target) is still in force, so the button\n keeps its spec block-size unless --md-button-height overrides it.\n --md-button-width still wins if explicitly set.\n ========================================================== */\n:host(.md-button--full-width) {\n display: flex;\n --_width: var(--md-button-width, 100%);\n}\n\n/* ==========================================================\n 2. SHAPE\n Round (default) · Square (scaled corner radius)\n Round uses --_shape-round (height/2 per size) instead of\n corner-full (9999px) so the browser can smoothly interpolate\n border-radius transitions between resting and morphed states.\n --md-button-container-shape overrides both.\n ========================================================== */\n/* The RESTING radius is named (--_shape-rest) so the morph states below can be\n expressed as a blend back toward it. --_morph-to carries the morphed target\n and defaults to the resting value, so a button with no active morph state\n resolves to exactly its resting radius:\n\n calc(REST + FLAG * (MORPH - REST)) FLAG 1 -> MORPH, FLAG 0 -> REST\n\n That is what makes `data-shape-morph=\"off\"` / `shape-morph=\"off\"` freeze the\n shape (§13 in tokens.css) without a re-render and without :host-context,\n which Firefox does not implement. */\n:host(.md-button--round) {\n --_shape-rest: var(--md-button-container-shape, var(--_shape-round));\n border-radius: calc(var(--_shape-rest) + var(--md-sys-shape-morph-enabled, 1) * (var(--_morph-to, var(--_shape-rest)) - var(--_shape-rest)));\n}\n\n:host(.md-button--square.md-button--xs) { --_shape-rest: var(--md-button-container-shape, var(--md-sys-shape-corner-small, 8px)); border-radius: calc(var(--_shape-rest) + var(--md-sys-shape-morph-enabled, 1) * (var(--_morph-to, var(--_shape-rest)) - var(--_shape-rest))); }\n:host(.md-button--square.md-button--sm) { --_shape-rest: var(--md-button-container-shape, var(--md-sys-shape-corner-medium, 12px)); border-radius: calc(var(--_shape-rest) + var(--md-sys-shape-morph-enabled, 1) * (var(--_morph-to, var(--_shape-rest)) - var(--_shape-rest))); }\n:host(.md-button--square.md-button--md) { --_shape-rest: var(--md-button-container-shape, var(--md-sys-shape-corner-medium, 12px)); border-radius: calc(var(--_shape-rest) + var(--md-sys-shape-morph-enabled, 1) * (var(--_morph-to, var(--_shape-rest)) - var(--_shape-rest))); }\n:host(.md-button--square.md-button--lg) { --_shape-rest: var(--md-button-container-shape, var(--md-sys-shape-corner-large, 16px)); border-radius: calc(var(--_shape-rest) + var(--md-sys-shape-morph-enabled, 1) * (var(--_morph-to, var(--_shape-rest)) - var(--_shape-rest))); }\n:host(.md-button--square.md-button--xl) { --_shape-rest: var(--md-button-container-shape, var(--md-sys-shape-corner-extra-large, 28px)); border-radius: calc(var(--_shape-rest) + var(--md-sys-shape-morph-enabled, 1) * (var(--_morph-to, var(--_shape-rest)) - var(--_shape-rest))); }\n\n/* ==========================================================\n 2b. SHAPE MORPHING — M3 Expressive\n Uses direct border-radius overrides for reliable transitions.\n\n Order: selected rules FIRST, pressed rules LAST so pressed\n always wins while the pointer is down.\n\n Asymmetric timing (M3 motion tokens):\n Release / selected : medium4 (400ms) + emphasized-decelerate\n Press-in : short4 (200ms) + standard\n ========================================================== */\n\n/* ── Selected shape — round resting → square tokens when selected ── */\n:host(.md-button--shape-morph.md-button--round.md-button--selected.md-button--xs) { --_morph-to: var(--md-sys-shape-corner-small, 8px); }\n:host(.md-button--shape-morph.md-button--round.md-button--selected.md-button--sm) { --_morph-to: var(--md-sys-shape-corner-medium, 12px); }\n:host(.md-button--shape-morph.md-button--round.md-button--selected.md-button--md) { --_morph-to: var(--md-sys-shape-corner-medium, 12px); }\n:host(.md-button--shape-morph.md-button--round.md-button--selected.md-button--lg) { --_morph-to: var(--md-sys-shape-corner-large, 16px); }\n:host(.md-button--shape-morph.md-button--round.md-button--selected.md-button--xl) { --_morph-to: var(--md-sys-shape-corner-extra-large, 28px); }\n\n/* ── Selected shape — square resting → round when selected ── */\n:host(.md-button--shape-morph.md-button--square.md-button--selected) {\n --_morph-to: var(--md-button-container-shape, var(--_shape-round));\n}\n\n/* ── Pressed shape — both round & square morph to more square, overrides selected ── */\n:host(.md-button--pressed.md-button--xs) {\n --_morph-to: var(--md-sys-shape-corner-extra-small, 4px);\n transition-duration: var(--md-sys-motion-duration-short4, 200ms);\n transition-timing-function: var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1));\n}\n:host(.md-button--pressed.md-button--sm) {\n --_morph-to: var(--md-sys-shape-corner-small, 8px);\n transition-duration: var(--md-sys-motion-duration-short4, 200ms);\n transition-timing-function: var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1));\n}\n:host(.md-button--pressed.md-button--md) {\n --_morph-to: var(--md-sys-shape-corner-small, 8px);\n transition-duration: var(--md-sys-motion-duration-short4, 200ms);\n transition-timing-function: var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1));\n}\n:host(.md-button--pressed.md-button--lg) {\n --_morph-to: var(--md-sys-shape-corner-medium, 12px);\n transition-duration: var(--md-sys-motion-duration-short4, 200ms);\n transition-timing-function: var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1));\n}\n:host(.md-button--pressed.md-button--xl) {\n --_morph-to: var(--md-sys-shape-corner-large, 16px);\n transition-duration: var(--md-sys-motion-duration-short4, 200ms);\n transition-timing-function: var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1));\n}\n\n/* ==========================================================\n 2c. CONNECTED GROUP — per-corner border-radius\n Set by md-button-group when variant=\"connected\".\n shapeMorph is disabled for connected children so these rules\n only need to beat the base shape rules (section 2, specificity 0-1-0).\n ========================================================== */\n\n:host(.md-button--connected-left.md-button--xs),\n:host(.md-button--connected-right.md-button--xs) { --_c-inner: 4px; }\n:host(.md-button--connected-left.md-button--sm),\n:host(.md-button--connected-right.md-button--sm) { --_c-inner: 8px; }\n:host(.md-button--connected-left.md-button--md),\n:host(.md-button--connected-right.md-button--md) { --_c-inner: 8px; }\n:host(.md-button--connected-left.md-button--lg),\n:host(.md-button--connected-right.md-button--lg) { --_c-inner: 16px; }\n:host(.md-button--connected-left.md-button--xl),\n:host(.md-button--connected-right.md-button--xl) { --_c-inner: 20px; }\n\n/* Middle button — all corners inner */\n:host(.md-button--connected-left.md-button--connected-right) {\n border-radius: var(--_c-inner);\n}\n\n/* `connected-left` / `connected-right` reflect DOM-order siblings (set by\n md-button-group when a previous / next sibling exists), so the radii\n here must use logical corner properties to flip correctly under\n `dir=\"rtl\"`. The outer pill always lives on the free inline-start\n (first child) or inline-end (last child) edge. */\n\n/* First button (round) — pill on inline-start edge, inner on inline-end edge */\n:host(.md-button--round.md-button--connected-right:not(.md-button--connected-left)) {\n border-start-start-radius: var(--_shape-round);\n border-end-start-radius: var(--_shape-round);\n border-start-end-radius: var(--_c-inner);\n border-end-end-radius: var(--_c-inner);\n}\n\n/* Last button (round) — inner on inline-start edge, pill on inline-end edge */\n:host(.md-button--round.md-button--connected-left:not(.md-button--connected-right)) {\n border-start-start-radius: var(--_c-inner);\n border-end-start-radius: var(--_c-inner);\n border-start-end-radius: var(--_shape-round);\n border-end-end-radius: var(--_shape-round);\n}\n\n/* Square first / last — outer equals inner */\n:host(.md-button--square.md-button--connected-right:not(.md-button--connected-left)),\n:host(.md-button--square.md-button--connected-left:not(.md-button--connected-right)) {\n border-radius: var(--_c-inner);\n}\n\n/* ==========================================================\n 3. ICON PADDING\n An icon does NOT change the button's insets. The M3 Expressive size sheet\n specifies the SAME padding on both sides whether or not a leading icon is\n present (12/12, 16/16, 24/24, 48/48, 64/64) — the third number on those\n drawings is the icon-to-label gap, not a reduced leading inset. The size's\n base padding therefore applies symmetrically and there is nothing to override.\n ========================================================== */\n\n/* ==========================================================\n 4. COLOR VARIANTS\n --md-button-container-color and --md-button-label-color\n override the variant defaults when set.\n ========================================================== */\n\n/* Filled */\n:host(.md-button--filled) {\n --_container-color: var(--md-button-container-color, var(--md-sys-color-primary));\n --_label-color: var(--md-button-label-color, var(--md-sys-color-on-primary));\n --_state-layer-color: var(--md-sys-color-on-primary);\n}\n:host(.md-button--filled:hover) { --_container-elevation: var(--md-sys-elevation-1); }\n:host(.md-button--filled:active) { --_container-elevation: var(--md-sys-elevation-0, none); }\n:host(.md-button--filled:focus-visible) { --_container-elevation: var(--md-sys-elevation-0, none); }\n\n/* Outlined */\n:host(.md-button--outlined) {\n --_container-color: var(--md-button-container-color, transparent);\n --_label-color: var(--md-button-label-color, var(--md-sys-color-primary));\n --_state-layer-color: var(--md-sys-color-primary);\n border: var(--md-button-outline-width, 1px) solid var(--md-button-outline-color, var(--md-sys-color-outline));\n}\n:host(.md-button--outlined.md-button--xs) { padding: 0 max(3px, calc(11px + var(--md-sys-density-scale, 0) * 2px)); }\n:host(.md-button--outlined.md-button--sm) { padding: 0 max(7px, calc(23px + var(--md-sys-density-scale, 0) * 4px)); }\n:host(.md-button--outlined.md-button--md) { padding: 0 max(9px, calc(27px + var(--md-sys-density-scale, 0) * 4px)); }\n:host(.md-button--outlined.md-button--lg) { padding: 0 max(10px, calc(31px + var(--md-sys-density-scale, 0) * 4px)); }\n:host(.md-button--outlined.md-button--xl) { padding: 0 max(15px, calc(47px + var(--md-sys-density-scale, 0) * 2px)); }\n:host(.md-button--outlined:hover:not(.md-button--disabled)) {\n border-color: var(--md-button-outline-color, var(--md-sys-color-primary));\n}\n:host(.md-button--outlined:focus-visible) {\n border-color: var(--md-button-outline-color, var(--md-sys-color-primary));\n}\n\n/* Text */\n:host(.md-button--text) {\n --_container-color: var(--md-button-container-color, transparent);\n --_label-color: var(--md-button-label-color, var(--md-sys-color-primary));\n --_state-layer-color: var(--md-sys-color-primary);\n}\n:host(.md-button--text.md-button--xs) { padding: 0 max(3px, calc(8px + var(--md-sys-density-scale, 0) * 2px)); }\n:host(.md-button--text.md-button--sm) { padding: 0 max(4px, calc(12px + var(--md-sys-density-scale, 0) * 4px)); }\n:host(.md-button--text.md-button--md) { padding: 0 max(5px, calc(16px + var(--md-sys-density-scale, 0) * 4px)); }\n:host(.md-button--text.md-button--lg) { padding: 0 max(6px, calc(20px + var(--md-sys-density-scale, 0) * 4px)); }\n:host(.md-button--text.md-button--xl) { padding: 0 max(10px, calc(32px + var(--md-sys-density-scale, 0) * 2px)); }\n\n/* Elevated */\n:host(.md-button--elevated) {\n --_container-color: var(--md-button-container-color, var(--md-sys-color-surface-container-low));\n --_label-color: var(--md-button-label-color, var(--md-sys-color-primary));\n --_state-layer-color: var(--md-sys-color-primary);\n --_container-elevation: var(--md-sys-elevation-1);\n}\n:host(.md-button--elevated:hover) { --_container-elevation: var(--md-sys-elevation-2); }\n:host(.md-button--elevated:focus-visible) { --_container-elevation: var(--md-sys-elevation-1); }\n:host(.md-button--elevated:active) { --_container-elevation: var(--md-sys-elevation-1); }\n\n/* Tonal */\n:host(.md-button--tonal) {\n --_container-color: var(--md-button-container-color, var(--md-sys-color-secondary-container));\n --_label-color: var(--md-button-label-color, var(--md-sys-color-on-secondary-container));\n --_state-layer-color: var(--md-sys-color-on-secondary-container);\n}\n:host(.md-button--tonal:hover) { --_container-elevation: var(--md-sys-elevation-1); }\n:host(.md-button--tonal:focus-visible) { --_container-elevation: var(--md-sys-elevation-0, none); }\n:host(.md-button--tonal:active) { --_container-elevation: var(--md-sys-elevation-0, none); }\n\n/* ==========================================================\n 4b. TOGGLE SELECTED / UNSELECTED — MD3 spec\n When toggle=true, the unselected state is muted; selected\n shows the full variant color. Mirrors md-icon-button pattern.\n ========================================================== */\n\n/* The toggle-state rules below all carry `:not(.md-button--disabled)` so\n they drop out when the host becomes disabled. Without it, their higher\n specificity (4 classes vs the disabled rules' 2–3) would override the\n muted disabled palette and the button would still look enabled. */\n\n/* ── Filled toggle ── */\n:host(.md-button--filled.md-button--toggle:not(.md-button--selected):not(.md-button--disabled)) {\n --_container-color: var(--md-button-container-color, var(--md-sys-color-surface-container-highest, #E6E0E9));\n --_label-color: var(--md-button-label-color, var(--md-sys-color-primary));\n --_state-layer-color: var(--md-sys-color-primary);\n}\n\n/* ── Tonal toggle ── */\n:host(.md-button--tonal.md-button--toggle:not(.md-button--selected):not(.md-button--disabled)) {\n --_container-color: var(--md-button-container-color, var(--md-sys-color-surface-container-highest, #E6E0E9));\n --_label-color: var(--md-button-label-color, var(--md-sys-color-on-surface-variant, #49454F));\n --_state-layer-color: var(--md-sys-color-on-surface-variant, #49454F);\n}\n\n/* ── Outlined toggle ── */\n:host(.md-button--outlined.md-button--toggle.md-button--selected:not(.md-button--disabled)) {\n --_container-color: var(--md-button-container-color, var(--md-sys-color-secondary-container, #E8DEF8));\n --_label-color: var(--md-button-label-color, var(--md-sys-color-on-secondary-container, #1E192B));\n --_state-layer-color: var(--md-sys-color-on-secondary-container, #1E192B);\n border-color: transparent;\n}\n\n/* ── Elevated toggle ── */\n:host(.md-button--elevated.md-button--toggle:not(.md-button--selected):not(.md-button--disabled)) {\n --_container-color: var(--md-button-container-color, var(--md-sys-color-surface-container-highest, #E6E0E9));\n --_label-color: var(--md-button-label-color, var(--md-sys-color-on-surface-variant, #49454F));\n --_state-layer-color: var(--md-sys-color-on-surface-variant, #49454F);\n --_container-elevation: var(--md-sys-elevation-0, none);\n}\n\n/* ── Text toggle ── */\n:host(.md-button--text.md-button--toggle:not(.md-button--selected):not(.md-button--disabled)) {\n --_label-color: var(--md-button-label-color, var(--md-sys-color-on-surface-variant, #49454F));\n --_state-layer-color: var(--md-sys-color-on-surface-variant, #49454F);\n}\n\n/* ==========================================================\n 5. STATE LAYER\n ========================================================== */\n.md-button__state-layer {\n position: absolute;\n inset: 0;\n border-radius: inherit;\n background-color: var(--_state-layer-color);\n opacity: 0;\n transition: opacity var(--md-sys-motion-duration-short2, 100ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1));\n pointer-events: none;\n}\n:host(:hover) .md-button__state-layer {\n opacity: var(--md-sys-state-hover-state-layer-opacity, 0.08);\n}\n:host(:active:not(.md-button--disabled)) .md-button__state-layer {\n opacity: var(--md-sys-state-pressed-state-layer-opacity, 0.12);\n transition-duration: var(--md-sys-motion-duration-short1, 50ms);\n transition-timing-function: var(--md-sys-motion-easing-emphasized-decelerate, cubic-bezier(0.05, 0.7, 0.1, 1));\n}\n:host(:focus-visible) .md-button__state-layer {\n opacity: var(--md-sys-state-focus-state-layer-opacity, 0.12);\n}\n\n/* ==========================================================\n 6. FOCUS RING\n `z-index: 1` raises the focused button above its siblings so the\n outline is never clipped by a neighbor — important inside\n md-button-group, where connected groups have only 2px between\n buttons and standard groups animate neighbor padding on press.\n ========================================================== */\n/* Connected children inside md-button-group sit only 2px apart, so a\n 3px-outset focus ring naturally extends across the neighbor. The\n `z-index: 1` raise lets it draw *on top* of the neighbor cleanly so\n the ring keeps its full 2px breathing room — same visual treatment\n as a stand-alone button. */\n:host(:focus-visible) {\n outline-color: var(--md-sys-color-secondary);\n z-index: 1;\n}\n\n/* ==========================================================\n 7. DISABLED\n ========================================================== */\n:host(.md-button--disabled) {\n cursor: default;\n pointer-events: none;\n --_container-elevation: var(--md-sys-elevation-0, none) !important;\n transition: none;\n}\n\n:host([soft-disabled]) {\n cursor: default;\n pointer-events: auto;\n}\n:host([soft-disabled]) .md-button__state-layer { display: none; }\n\n:host(.md-button--filled.md-button--disabled),\n:host(.md-button--tonal.md-button--disabled) {\n --_container-color: color-mix(in srgb, var(--md-sys-color-on-surface) calc(var(--md-sys-state-disabled-container-opacity, 0.12) * 100%), transparent);\n}\n:host(.md-button--elevated.md-button--disabled) {\n --_container-color: color-mix(in srgb, var(--md-sys-color-on-surface) calc(var(--md-sys-state-disabled-container-opacity, 0.12) * 100%), transparent);\n --_container-elevation: var(--md-sys-elevation-0, none);\n}\n\n:host(.md-button--disabled) {\n --_label-color: color-mix(in srgb, var(--md-sys-color-on-surface) calc(var(--md-sys-state-disabled-content-opacity, 0.38) * 100%), transparent);\n}\n\n:host(.md-button--outlined.md-button--disabled) {\n --_container-color: transparent;\n border-color: color-mix(in srgb, var(--md-sys-color-on-surface) calc(var(--md-sys-state-disabled-container-opacity, 0.12) * 100%), transparent);\n}\n\n:host(.md-button--text.md-button--disabled) {\n --_container-color: transparent;\n}\n\n:host(.md-button--disabled:hover) .md-button__state-layer,\n:host(.md-button--disabled:active) .md-button__state-layer,\n:host(.md-button--disabled:focus-visible) .md-button__state-layer {\n opacity: 0;\n}\n\n/* ==========================================================\n 8. ICON (prop-based fallback inside slot)\n ========================================================== */\n.md-button__icon,\n.md-button__trailing-icon {\n color: var(--md-button-icon-color, inherit);\n font-size: var(--_icon-size, 18px);\n width: var(--_icon-size, 18px);\n height: var(--_icon-size, 18px);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n/* ==========================================================\n 9. NAMED ICON SLOTS\n Slots use display:contents so they don't create a box;\n slotted content participates directly in flex layout.\n ========================================================== */\nslot[name=\"leading-icon\"],\nslot[name=\"trailing-icon\"] {\n display: contents;\n}\n\n::slotted([slot=\"leading-icon\"]),\n::slotted([slot=\"trailing-icon\"]) {\n color: var(--md-button-icon-color, inherit);\n width: var(--_icon-size, 18px);\n height: var(--_icon-size, 18px);\n flex-shrink: 0;\n}\n\n/* ----------------------------------------------------------\n Trailing-icon rotation when this button is a popover anchor.\n\n md-menu (and any other popup component using the same ARIA\n contract) sets aria-expanded=\"true\" on its anchor element\n while the popup is open. Rotating the trailing dropdown\n indicator 180° on that signal flips arrow_drop_down to\n point up, matching MD3 select-trigger behavior, with no\n wiring needed on the consumer side.\n\n Honors prefers-reduced-motion via short2 motion duration.\n ---------------------------------------------------------- */\n.md-button__trailing-icon,\n::slotted([slot=\"trailing-icon\"]) {\n transition: transform var(--md-sys-motion-duration-short2, 150ms)\n var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1));\n}\n\n:host([aria-expanded=\"true\"]:not([suppress-expand-icon-flip])) .md-button__trailing-icon,\n:host([aria-expanded=\"true\"]:not([suppress-expand-icon-flip])) ::slotted([slot=\"trailing-icon\"]) {\n transform: rotate(180deg);\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host {\n transition: none;\n }\n\n .md-button__state-layer {\n transition: none;\n }\n\n .md-button__trailing-icon,\n ::slotted([slot=\"trailing-icon\"]) {\n transition: none;\n }\n}\n\n/* ==========================================================\n 10. LABEL\n ========================================================== */\n.md-button__label {\n display: flex;\n align-items: center;\n white-space: nowrap;\n}\n\n/* ==========================================================\n 11. LOADING SPINNER (scales with icon size)\n ========================================================== */\n.md-button__loading {\n /* A FRACTION of the icon it stands in for. Two constraints pull against each\n other: at full --_icon-size the ring reads heavier than the glyph (a bare\n stroke has none of the internal padding a Material glyph carries), but at\n 1em it was pinned to the label and stopped scaling per tier -- sm and md\n share a 14px label, so a 40px and a 56px button drew the same 14px ring\n despite 20px vs 24px icons. 0.7 keeps it visibly lighter than a glyph while\n tracking the tier, and inherits the icon's density taper. */\n /* 10px floor: the icon token itself bottoms out at 10px on the small tiers,\n and 0.7 of that is a 7px ring — too small to read as a spinner at all. */\n --_loading-size: var(--md-button-loading-size, max(10px, calc(var(--_icon-size, 18px) * 0.7)));\n\n /* Hand the size straight to md-loading-indicator's PUBLIC hooks. These\n replace the child's whole default expression, so the button's own taper\n (and its 10px floor) survives instead of hitting the child's 32px floor.\n Not --_size / --_shape-size: those are the child's private vars and\n writing them from out here is the handoff trap. currentColor keeps the\n indicator matching each variant's label, which a token would not. */\n --md-loading-indicator-size: var(--_loading-size);\n --md-loading-indicator-shape-size: var(--_loading-size);\n --md-loading-indicator-color: currentColor;\n flex-shrink: 0;\n /* A wrapper now, so the hooks above reach a SLOTTED replacement too. It has\n to lay out like the indicator it replaced — an inline span would add a text\n baseline gap next to the label. */\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n/* Whatever the consumer slots in gets the same box the default occupies. */\n.md-button__loading ::slotted(*) {\n flex-shrink: 0;\n}\n\n/* ==========================================================\n 12. MATERIAL SYMBOLS (default icon font)\n ========================================================== */\n.material-symbols-outlined {\n font-family: var(--md-sys-icon-font-family, 'Material Symbols Outlined', 'Material Icons');\n font-weight: normal;\n font-style: normal;\n font-size: var(--_icon-size, 18px);\n line-height: 1;\n letter-spacing: normal;\n text-transform: none;\n display: inline-block;\n white-space: nowrap;\n overflow-wrap: normal;\n direction: ltr;\n font-feature-settings: 'liga';\n -webkit-font-smoothing: antialiased;\n}\n\n/* ==========================================================\n 13. RTL — opt-in directional-icon mirroring\n\n Buttons that show directional Material Symbols (arrow_forward,\n chevron_right, send, reply…) should set `mirror-icon` so the\n glyph itself flips alongside the leading/trailing slot swap that\n the logical-property layout already performs. Non-directional\n icons (add, search, favorite…) leave `mirror-icon` unset so the\n glyph stays semantically correct.\n\n Two rules cover both placements of `dir=\"rtl\"`:\n (a) on the host itself — `:host([dir=\"rtl\"])`\n (b) on any ancestor element — `:host-context([dir=\"rtl\"])`\n ========================================================== */\n:host([mirror-icon][dir=\"rtl\"]) .md-button__icon,\n:host([mirror-icon][dir=\"rtl\"]) .md-button__trailing-icon,\n:host([mirror-icon][dir=\"rtl\"]) ::slotted([slot=\"leading-icon\"]),\n:host([mirror-icon][dir=\"rtl\"]) ::slotted([slot=\"trailing-icon\"]) {\n transform: scaleX(-1);\n}\n\n:host-context([dir=\"rtl\"]):host([mirror-icon]) .md-button__icon,\n:host-context([dir=\"rtl\"]):host([mirror-icon]) .md-button__trailing-icon,\n:host-context([dir=\"rtl\"]):host([mirror-icon]) ::slotted([slot=\"leading-icon\"]),\n:host-context([dir=\"rtl\"]):host([mirror-icon]) ::slotted([slot=\"trailing-icon\"]) {\n transform: scaleX(-1);\n}\n\n/* ==========================================================\n DENSITY (local override)\n Maps the local `density` prop onto the same --md-sys-density-scale signal a\n global `data-density` ancestor sets. Declared on :host, so a local rung wins\n over the inherited global one. Every density-sensitive value in this file\n derives from that single signal by calc — never add a fixed per-rung ladder.\n ========================================================== */\n:host([density='-1']) { --md-sys-density-scale: -1; }\n:host([density='-2']) { --md-sys-density-scale: -2; }\n:host([density='-3']) { --md-sys-density-scale: -3; }\n:host([density='-4']) { --md-sys-density-scale: -4; }\n","import { Component, Host, h, Prop, State, Event, EventEmitter, Element, AttachInternals } from '@stencil/core';\nimport { LazyLoadingIndicator } from '../../utils/lazy-loading-indicator';\nimport { triggerRipple } from '../../utils/ripple';\nimport { sanitizeHref, SAFE_WINDOW_FEATURES } from '../../utils/url';\n\n/**\n * Detail payload emitted by `md-button`'s `mdClick` event when the user\n * activates the button (mouse, touch, or keyboard).\n *\n * The event is **cancelable** — calling `event.preventDefault()` from a\n * listener stops the button's default side effects (toggle-state flip\n * and `href` navigation) but does NOT stop the underlying DOM click\n * event. This is the recommended hook for SPA routing and \"are you\n * sure?\" confirmation flows.\n */\nexport interface MdButtonClickDetail {\n /** The button's `value` prop (useful when grouped via `md-button-group`). */\n value: string;\n /** Whether toggle mode is enabled. */\n toggle: boolean;\n /**\n * Selected state the button WILL transition to if the click is not\n * cancelled. In non-toggle mode this is identical to `selected`.\n */\n selected: boolean;\n /** Navigation target (empty if the button is not a link). */\n href: string;\n /** Browsing context (`_self`, `_blank`, …). */\n target: string;\n /** The original DOM event that triggered the activation. */\n originalEvent: MouseEvent | KeyboardEvent;\n}\n\n/**\n * Detail payload emitted by `md-button`'s `mdChange` event when toggle\n * mode flips the selected state in response to a user activation.\n */\nexport interface MdButtonChangeDetail {\n /** New selected state. */\n selected: boolean;\n /** The button's `value` prop. */\n value: string;\n}\n\n@Component({\n tag: 'md-button',\n styleUrl: 'md-button.css',\n shadow: true,\n formAssociated: true,\n})\nexport class MdButton {\n @Element() el!: HTMLElement;\n\n /**\n * Form-association handle. Used to submit/reset the associated form when\n * `type` is `submit`/`reset` — works across shadow boundaries, unlike a\n * native `<button>` rendered in the shadow root (which can't see the\n * light-DOM `<form>` it lives in).\n */\n @AttachInternals() internals!: ElementInternals;\n\n /**\n * Activation behavior, mirroring the native `<button type>`:\n * - `button` (default): no implicit form action.\n * - `submit`: submits the associated form (`requestSubmit`, so the form's\n * `submit` event fires and constraint validation runs).\n * - `reset`: resets the associated form.\n */\n @Prop({ reflect: true }) type: 'button' | 'submit' | 'reset' = 'button';\n\n @Prop() variant: 'filled' | 'outlined' | 'text' | 'elevated' | 'tonal' = 'filled';\n @Prop() size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'sm';\n @Prop() shape: 'round' | 'square' = 'round';\n @Prop({ reflect: true }) disabled: boolean = false;\n @Prop({ reflect: true, attribute: 'soft-disabled' }) softDisabled: boolean = false;\n @Prop() ripple: boolean = true;\n @Prop() loading: boolean = false;\n @Prop() icon: string = '';\n @Prop() trailingIcon: string = '';\n @Prop() href: string = '';\n @Prop() target: string = '_self';\n\n /** Enable toggle behavior (selected/unselected) */\n @Prop() toggle: boolean = false;\n\n /** Current selected state (toggle mode) */\n @Prop({ mutable: true }) selected: boolean = false;\n\n /** Enable M3 Expressive shape morphing on press and toggle */\n @Prop() shapeMorph: boolean = true;\n\n /**\n * Mirror leading and trailing icons horizontally when the button is\n * rendered in a right-to-left context. Set this on buttons that use\n * **directional** Material Symbols (arrows, chevrons, send, reply…)\n * — non-directional icons (add, search, favorite…) should leave it\n * `false` so the glyph stays semantically correct.\n */\n @Prop({ reflect: true, attribute: 'mirror-icon' }) mirrorIcon: boolean = false;\n\n /**\n * When true, suppresses the default 180° trailing-icon rotation while\n * `aria-expanded=\"true\"`. Use when the consumer swaps the glyph (e.g.\n * docked `md-date-picker` month/year triggers use `chevron_right`).\n */\n @Prop({ reflect: true, attribute: 'suppress-expand-icon-flip' })\n suppressExpandIconFlip: boolean = false;\n\n /**\n * Stretch the button to fill its inline-axis container.\n *\n * Switches the host from `inline-flex` to `flex` and sets\n * `inline-size: 100%` so the button consumes the full width of its\n * parent — the standard pattern for primary CTAs in forms, modals,\n * and bottom sheets. The size's `min-block-size` (touch target) is\n * preserved.\n *\n * For arbitrary fixed widths or heights, set the\n * `--md-button-width`, `--md-button-height`, `--md-button-min-width`,\n * `--md-button-min-height`, or `--md-button-max-width` CSS custom\n * properties on the host instead.\n */\n @Prop({ reflect: true, attribute: 'full-width' }) fullWidth: boolean = false;\n\n /** @internal Set by md-button-group — left side is connected to a neighbor */\n @Prop({ reflect: true }) connectedLeft: boolean = false;\n\n /** @internal Set by md-button-group — right side is connected to a neighbor */\n @Prop({ reflect: true }) connectedRight: boolean = false;\n\n /** @internal Value for button-group association */\n @Prop() value: string = '';\n\n /**\n * @internal Roving-tabindex override set by `md-button-group`. When the\n * button is a child of a group, the group sets this to `0` on the\n * currently-active button and `-1` on the rest, so Tab enters the group\n * once instead of stepping through every button. Outside a group, this\n * stays `null` and the button uses its normal tabindex behavior.\n */\n @Prop({ mutable: true, reflect: false }) groupTabindex: number | null = null;\n\n /**\n * Override the default `role=\"button\"`. Used by composite widgets such as\n * `md-date-picker` day cells (`role=\"gridcell\"`). Leave empty for `button`.\n */\n @Prop({ attribute: 'role-override' }) roleOverride: string = '';\n\n /**\n * Local density rung. Drives the same `--md-sys-density-scale` signal that a\n * global `data-density` ancestor sets, so a local value simply overrides the\n * inherited one. 0 = default, -4 = ultra-compact.\n */\n @Prop({ reflect: true }) density: 0 | -1 | -2 | -3 | -4 = 0;\n\n /**\n * Fires every time the user activates the button (mouse click, touch,\n * or `Enter`/`Space` while focused). The event is **cancelable** and\n * the detail payload describes what *would* happen: the post-click\n * toggle state, the navigation `href`, and so on.\n *\n * Calling `event.preventDefault()` from a listener suppresses the\n * default side effects (toggle flip + `href` navigation) but lets\n * the underlying DOM click bubble. This is the hook to use for SPA\n * routing, \"are you sure?\" prompts, async confirmation, etc.\n *\n * The event bubbles and is composed, so listeners outside the\n * shadow tree (the typical case) receive it.\n *\n * ```ts\n * document.querySelector('md-button')!.addEventListener('mdClick', (e) => {\n * const { href, selected } = (e as CustomEvent).detail;\n * if (!confirm('Continue?')) e.preventDefault();\n * });\n * ```\n */\n @Event({ cancelable: true, bubbles: true, composed: true })\n mdClick!: EventEmitter<MdButtonClickDetail>;\n\n /**\n * Fires when toggle mode flips the `selected` state in response to a\n * user activation. Not cancelable — the state change has already\n * happened. Pair with `mdClick` (cancelable) when you need a veto.\n *\n * Bubbles and is composed.\n */\n @Event({ bubbles: true, composed: true })\n mdChange!: EventEmitter<MdButtonChangeDetail>;\n\n @State() private hasSlottedLeadingIcon = false;\n @State() private hasSlottedTrailingIcon = false;\n @State() private pressed = false;\n\n private get isDisabled() {\n return this.disabled || this.softDisabled || this.loading;\n }\n\n componentDidLoad() {\n const shadow = this.el.shadowRoot;\n if (!shadow) return;\n\n const leadingSlot = shadow.querySelector('slot[name=\"leading-icon\"]') as HTMLSlotElement | null;\n const trailingSlot = shadow.querySelector('slot[name=\"trailing-icon\"]') as HTMLSlotElement | null;\n\n leadingSlot?.addEventListener('slotchange', () => {\n this.hasSlottedLeadingIcon = leadingSlot.assignedElements().length > 0;\n });\n trailingSlot?.addEventListener('slotchange', () => {\n this.hasSlottedTrailingIcon = trailingSlot.assignedElements().length > 0;\n });\n }\n\n private handleClick = (e: MouseEvent) => {\n if (this.isDisabled) { e.preventDefault(); return; }\n\n // Compute the post-click toggle state up front so the detail\n // payload describes what *would* happen — listeners can then\n // call preventDefault on the CustomEvent to veto the change.\n const nextSelected = this.toggle ? !this.selected : this.selected;\n\n const evt = this.mdClick.emit({\n value: this.value,\n toggle: this.toggle,\n selected: nextSelected,\n href: this.href,\n target: this.target,\n originalEvent: e,\n });\n\n if (evt.defaultPrevented) {\n // Suppress browser's default link navigation as well so the\n // host stays consistent. We don't flip selected and don't\n // open the href.\n e.preventDefault();\n return;\n }\n\n if (this.toggle && nextSelected !== this.selected) {\n this.selected = nextSelected;\n this.mdChange.emit({ selected: nextSelected, value: this.value });\n }\n\n /* Setting `href` makes this a link rather than a form control, so the\n branch is taken on the raw prop — an unsafe URL must not silently fall\n through to submitting the form. Only the navigation itself is refused. */\n if (this.href) {\n const href = sanitizeHref(this.href);\n if (href) window.open(href, this.target, SAFE_WINDOW_FEATURES);\n return;\n }\n\n // Implicit form action, mirroring a native submit/reset button. Uses\n // ElementInternals so the associated <form> is found across the shadow\n // boundary. requestSubmit() (not submit()) so the form's submit event\n // fires and built-in constraint validation runs.\n if (this.type === 'submit') {\n this.internals.form?.requestSubmit();\n } else if (this.type === 'reset') {\n this.internals.form?.reset();\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (!this.isDisabled) {\n this.pressed = true;\n triggerRipple(this.el);\n this.el.click();\n setTimeout(() => { this.pressed = false; }, 150);\n }\n }\n };\n\n private handlePointerDown = () => {\n if (!this.isDisabled) this.pressed = true;\n };\n\n private handlePointerUp = () => {\n this.pressed = false;\n };\n\n render() {\n const isEffectivelyDisabled = this.isDisabled;\n const hasLeadingIcon = !!this.icon;\n const hasTrailingIcon = !!this.trailingIcon;\n\n return (\n <Host\n class={{\n 'md-button': true,\n [`md-button--${this.variant}`]: true,\n [`md-button--${this.size}`]: true,\n [`md-button--${this.shape}`]: true,\n 'md-button--with-leading-icon': hasLeadingIcon || this.hasSlottedLeadingIcon,\n 'md-button--with-trailing-icon': hasTrailingIcon || this.hasSlottedTrailingIcon,\n 'md-button--disabled': this.disabled || this.softDisabled,\n 'md-button--loading': this.loading,\n 'md-button--toggle': this.toggle,\n 'md-button--selected': this.selected,\n 'md-button--shape-morph': this.shapeMorph,\n 'md-button--pressed': this.shapeMorph && this.pressed,\n 'md-button--connected-left': this.connectedLeft,\n 'md-button--connected-right': this.connectedRight,\n 'md-button--full-width': this.fullWidth,\n }}\n role={this.roleOverride || 'button'}\n aria-disabled={isEffectivelyDisabled ? 'true' : 'false'}\n aria-pressed={this.toggle ? String(this.selected) : undefined}\n tabindex={\n this.disabled\n ? '-1'\n : (this.groupTabindex !== null ? String(this.groupTabindex) : '0')\n }\n onClick={this.handleClick}\n onKeyDown={this.handleKeyDown}\n onPointerDown={this.handlePointerDown}\n onPointerUp={this.handlePointerUp}\n onPointerLeave={this.handlePointerUp}\n onPointerCancel={this.handlePointerUp}\n >\n {this.ripple && <md-ripple disabled={isEffectivelyDisabled}></md-ripple>}\n <span class=\"md-button__state-layer\" part=\"state-layer\" aria-hidden=\"true\"></span>\n <slot name=\"leading-icon\">\n {hasLeadingIcon && <span class=\"md-button__icon material-symbols-outlined\" part=\"icon\">{this.icon}</span>}\n </slot>\n <span class=\"md-button__label\" part=\"label\"><slot /></span>\n <slot name=\"trailing-icon\">\n {hasTrailingIcon && <span class=\"md-button__trailing-icon material-symbols-outlined\" part=\"trailing-icon\">{this.trailingIcon}</span>}\n </slot>\n {this.loading && (\n /* md-loading-indicator, not a hand-rolled ring: never ship a custom\n loading affordance where a library component exists. It is\n md-loading-indicator rather than md-progress-indicator because the\n latter clamps its circular variant to a 24dp M3 minimum, while a\n button spinner runs 10-28px -- every tier but xl would clamp up and\n lose the density taper. Same choice md-select made for its trigger.\n\n The `loader` slot lets a consumer swap it (e.g. for a circular\n md-progress-indicator). The size hooks sit on this WRAPPER so they\n cascade to whatever ends up inside it, default or slotted. */\n <span class=\"md-button__loading\" part=\"loading\" aria-hidden=\"true\">\n <slot name=\"loader\">\n <LazyLoadingIndicator class=\"md-button__loading-default\" />\n </slot>\n </span>\n )}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import{p as e,H as t,c as s,h as i,d as n,t as r}from"./p-BR6gfOQH.js";const a=()=>`:host{display:block;position:fixed;z-index:auto;pointer-events:none}:host(.md-menu--open){pointer-events:auto}.md-menu__surface{background-color:var(--md-sys-color-surface-container, #F7F2FA);border-radius:var(--md-sys-shape-corner-small, 8px);box-shadow:0 1px 2px rgba(0, 0, 0, 0.3), 0 2px 6px 2px rgba(0, 0, 0, 0.15);min-width:var(--md-menu-min-width, 112px);max-width:min( var(--md-menu-max-width, 100vw), calc(100vw - 2 * var(--md-menu-viewport-margin, 8px)) );padding:var(--md-sys-spacing-inset-xs, 4px) 0;overflow:visible;opacity:0;transform:scaleY(0.8);transform-origin:top left;transition:opacity var(--md-sys-motion-duration-short3, 150ms) var(--md-sys-motion-easing-emphasized-decelerate, cubic-bezier(0.05, 0.7, 0.1, 1)), transform var(--md-sys-motion-duration-short3, 150ms) var(--md-sys-motion-easing-emphasized-decelerate, cubic-bezier(0.05, 0.7, 0.1, 1))}:host(.md-menu--open) .md-menu__surface{opacity:1;transform:none}:host(.md-menu--closing) .md-menu__surface{opacity:0;transform:scaleY(0.8);transition:opacity var(--md-sys-motion-duration-short3, 150ms) var(--md-sys-motion-easing-emphasized-accelerate, cubic-bezier(0.3, 0, 0.8, 0.15)), transform var(--md-sys-motion-duration-short3, 150ms) var(--md-sys-motion-easing-emphasized-accelerate, cubic-bezier(0.3, 0, 0.8, 0.15))}:host(.md-menu--closing){pointer-events:none}:host(.md-menu--quick) .md-menu__surface{transition:none}:host(.md-menu--inline-fill){position:relative;display:flex;flex-direction:column;flex:1 1 auto;min-block-size:0;block-size:100%;inline-size:100%;pointer-events:auto}:host(.md-menu--inline-fill) .md-menu__surface{flex:1 1 auto;block-size:100%;min-block-size:0;min-inline-size:100%;max-inline-size:none;display:flex;flex-direction:column;overflow:hidden;box-shadow:none;border:none;outline:none;padding:0;border-radius:0;border-end-start-radius:var(--md-menu-inline-fill-radius-end, 0);border-end-end-radius:var(--md-menu-inline-fill-radius-end, 0);background-color:var(--md-menu-inline-surface-color, transparent)}:host(.md-menu--inline-fill) .md-menu__scroll-shadow{flex:1 1 auto;min-block-size:0;block-size:100%}:host(.md-menu--inline-fill) .md-menu__surface ::slotted(md-menu-item:last-child){border-end-start-radius:var(--md-menu-inline-fill-radius-end, 0);border-end-end-radius:var(--md-menu-inline-fill-radius-end, 0)}:host(.md-menu--scroll):not(.md-menu--has-submenu) .md-menu__surface{overflow:hidden}:host(.md-menu--scroll) .md-menu__scroll-shadow{min-block-size:0}.md-menu__scroll-shadow{overflow-y:auto;overflow-anchor:none}:host([match-anchor-width]) .md-menu__surface{max-width:calc(100vw - 2 * var(--md-menu-viewport-margin, 8px));box-sizing:border-box}:host(:not(.md-menu--has-submenu):not(.md-menu--inline-fill):not(.md-menu--scroll)) .md-menu__surface{max-height:calc(100dvh - 2 * var(--md-menu-viewport-margin, 8px));overflow-y:auto;overscroll-behavior:contain}@media (max-width: 600px){:host(.md-menu--responsive) .md-menu__surface{width:calc(100vw - 2 * var(--md-menu-viewport-margin, 8px));min-width:0;max-width:none;box-sizing:border-box}}:host([placement="bottom-start"]) .md-menu__surface{transform-origin:top left}:host([placement="bottom-end"]) .md-menu__surface{transform-origin:top right}:host([placement="top-start"]) .md-menu__surface{transform-origin:bottom left}:host([placement="top-end"]) .md-menu__surface{transform-origin:bottom right}:host(.md-menu--standard) .md-menu__surface{background-color:var(--md-sys-color-surface-container-low, #F7F2FA);border-radius:var(--md-sys-shape-corner-large, 16px);box-shadow:0 1px 3px rgba(0, 0, 0, 0.12), 0 4px 8px 3px rgba(0, 0, 0, 0.08);padding:var(--md-sys-spacing-inset-xs, 4px)}:host(.md-menu--standard) .md-menu__surface ::slotted(md-menu-item),:host(.md-menu--standard) .md-menu__surface ::slotted(md-sub-menu-item){border-radius:var(--md-sys-shape-corner-small, 8px)}:host(.md-menu--standard) .md-menu__surface ::slotted(md-menu-item:first-child),:host(.md-menu--standard) .md-menu__surface ::slotted(md-sub-menu-item:first-child){border-start-start-radius:var(--md-sys-shape-corner-large, 16px);border-start-end-radius:var(--md-sys-shape-corner-large, 16px)}:host(.md-menu--standard) .md-menu__surface ::slotted(md-menu-item:last-child),:host(.md-menu--standard) .md-menu__surface ::slotted(md-sub-menu-item:last-child){border-end-start-radius:var(--md-sys-shape-corner-large, 16px);border-end-end-radius:var(--md-sys-shape-corner-large, 16px)}:host(.md-menu--standard) .md-menu__surface ::slotted(md-menu-item:hover),:host(.md-menu--standard) .md-menu__surface ::slotted(md-sub-menu-item:hover){border-radius:var(--md-sys-shape-corner-extra-small, 4px)}:host(.md-menu--standard) .md-menu__surface ::slotted(md-menu-item:active),:host(.md-menu--standard) .md-menu__surface ::slotted(md-menu-item.md-menu-item--selected),:host(.md-menu--standard) .md-menu__surface ::slotted(md-sub-menu-item:active){border-radius:var(--md-sys-shape-corner-medium, 12px)}:host(.md-menu--standard) .md-menu__surface ::slotted(md-menu-item:first-child:hover),:host(.md-menu--standard) .md-menu__surface ::slotted(md-sub-menu-item:first-child:hover){border-start-start-radius:var(--md-sys-shape-corner-large, 16px);border-start-end-radius:var(--md-sys-shape-corner-large, 16px);border-end-start-radius:var(--md-sys-shape-corner-extra-small, 4px);border-end-end-radius:var(--md-sys-shape-corner-extra-small, 4px)}:host(.md-menu--standard) .md-menu__surface ::slotted(md-menu-item:last-child:hover),:host(.md-menu--standard) .md-menu__surface ::slotted(md-sub-menu-item:last-child:hover){border-start-start-radius:var(--md-sys-shape-corner-extra-small, 4px);border-start-end-radius:var(--md-sys-shape-corner-extra-small, 4px);border-end-start-radius:var(--md-sys-shape-corner-large, 16px);border-end-end-radius:var(--md-sys-shape-corner-large, 16px)}:host(.md-menu--vibrant) .md-menu__surface{background-color:var(--md-sys-color-tertiary-container, #FFD8E4);border-radius:var(--md-sys-shape-corner-large, 16px);box-shadow:0 1px 3px rgba(0, 0, 0, 0.12), 0 4px 8px 3px rgba(0, 0, 0, 0.08);padding:var(--md-sys-spacing-inset-xs, 4px)}:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-menu-item),:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-sub-menu-item){border-radius:var(--md-sys-shape-corner-small, 8px)}:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-menu-item:first-child),:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-sub-menu-item:first-child){border-start-start-radius:var(--md-sys-shape-corner-large, 16px);border-start-end-radius:var(--md-sys-shape-corner-large, 16px)}:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-menu-item:last-child),:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-sub-menu-item:last-child){border-end-start-radius:var(--md-sys-shape-corner-large, 16px);border-end-end-radius:var(--md-sys-shape-corner-large, 16px)}:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-menu-item:hover),:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-sub-menu-item:hover){border-radius:var(--md-sys-shape-corner-extra-small, 4px)}:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-menu-item:active),:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-menu-item.md-menu-item--selected),:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-sub-menu-item:active){border-radius:var(--md-sys-shape-corner-medium, 12px)}:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-menu-item:first-child:hover),:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-sub-menu-item:first-child:hover){border-start-start-radius:var(--md-sys-shape-corner-large, 16px);border-start-end-radius:var(--md-sys-shape-corner-large, 16px);border-end-start-radius:var(--md-sys-shape-corner-extra-small, 4px);border-end-end-radius:var(--md-sys-shape-corner-extra-small, 4px)}:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-menu-item:last-child:hover),:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-sub-menu-item:last-child:hover){border-start-start-radius:var(--md-sys-shape-corner-extra-small, 4px);border-start-end-radius:var(--md-sys-shape-corner-extra-small, 4px);border-end-start-radius:var(--md-sys-shape-corner-large, 16px);border-end-end-radius:var(--md-sys-shape-corner-large, 16px)}:host(.md-menu--gap) .md-menu__surface{gap:var(--md-sys-spacing-gap-xs, 4px);display:flex;flex-direction:column}:host(.md-menu--grouped.md-menu--gap.md-menu--standard) .md-menu__surface,:host(.md-menu--grouped.md-menu--gap.md-menu--vibrant) .md-menu__surface{background-color:transparent;box-shadow:none;overflow:visible;display:flex;flex-direction:column;gap:var(--md-menu-group-gap, 4px);padding:0;filter:drop-shadow(0 1px 2px rgba(0, 0, 0, 0.15)) drop-shadow(0 2px 6px rgba(0, 0, 0, 0.1))}:host(.md-menu--grouped.md-menu--gap) .md-menu__surface ::slotted(md-menu-item-group),:host(.md-menu--grouped.md-menu--gap) .md-menu__scroll-shadow ::slotted(md-menu-item-group){flex-shrink:0}:host(.md-menu--grouped.md-menu--gap) .md-menu__scroll-shadow{display:flex;flex-direction:column;row-gap:var(--md-menu-group-gap, 4px)}:host(.md-menu--sectioned.md-menu--baseline) .md-menu__surface ::slotted([gap]){margin-bottom:var(--md-menu-section-gap, 2px)}.md-menu__empty{display:none;padding:var(--md-sys-spacing-inset-md, 12px) var(--md-sys-spacing-inset-lg, 16px);font-family:var(--md-sys-typescale-body-medium-font-family, Roboto, sans-serif);font-size:var(--md-sys-typescale-body-medium-size, 14px);line-height:var(--md-sys-typescale-body-medium-line-height, 20px);color:var(--md-sys-color-on-surface-variant, #49454F);text-align:center}:host(.md-menu--empty) .md-menu__empty{display:block}:host([density='-1']){--md-sys-density-scale:-1}:host([density='-2']){--md-sys-density-scale:-2}:host([density='-3']){--md-sys-density-scale:-3}:host([density='-4']){--md-sys-density-scale:-4}`;const d=150;const o=500;const m=8;const u=600;const h=new Set(["button","combobox","link","menuitem","tab","treeitem","checkbox","gridcell","row","rowheader","columnheader"]);const c=new Set(["BUTTON","SUMMARY"]);let l=0;const f=e(class e extends t{constructor(e){super();if(e!==false){this.__registerHost()}this.__attachShadow();this.mdOpen=s(this,"mdOpen",1);this.mdClose=s(this,"mdClose",1);this.open=false;this.anchor="";this.placement="bottom-start";this.quick=false;this.variant="baseline";this.layout="standard";this.useGap=false;this.emptyText="";this.matchAnchorWidth=false;this.responsive=false;this.persistent=false;this.autoFocus=true;this.closing=false;this.sectioned=false;this.empty=false;this.hasSubmenu=false;this.focusedIndex=-1;this.navSeq=0;this.ringedIndex=-1;this.skipAutoFocus=false;this.menuId=`md-menu-${++l}`;this.typeaheadBuffer="";this.keyboardModality=false;this.openedViaKeyboard=false;this.listboxMode=false;this.listbox=false;this.density=0;this.trackKeyboardModality=()=>{this.keyboardModality=true};this.trackPointerModality=()=>{this.keyboardModality=false};this.lastSurfaceSize="";this.handleOutsideClick=e=>{if(this.persistent)return;const t=e.composedPath();if(!t.includes(this.el)){this.close()}};this.handleDocumentKeyDown=e=>{if(e.key==="Escape"&&this.open){this.close();this.restoreFocusToAnchor()}};this.handleScroll=()=>{if(this.open&&!this.closing){this.positionMenu()}};this.handleSlotChange=()=>{this.updateSections();this.propagateVariant();this.wireItemObserver();this.updateEmpty();this.hasSubmenu=!!this.el.querySelector("md-sub-menu-item")}}get asListbox(){return this.listbox||this.listboxMode}async setComboboxElement(e){if(this.comboboxEl&&this.comboboxEl!==e){this.comboboxEl.removeAttribute("aria-activedescendant")}this.comboboxEl=e??undefined}connectedCallback(){if(typeof document==="undefined")return;document.addEventListener("keydown",this.trackKeyboardModality,true);document.addEventListener("pointerdown",this.trackPointerModality,true)}componentDidLoad(){if(this.open){this.applyDepthZIndex()}this.wireItemObserver();this.updateEmpty();this.propagateVariant()}onEmptyTextChange(){this.updateEmpty()}onVariantChange(){this.propagateVariant()}async setVirtualProvider(e){this.provider=e??undefined;this.listboxMode=!!this.provider}async getScrollViewport(){return this.el.shadowRoot?.querySelector(".md-menu__scroll-shadow")??null}async show(e){clearTimeout(this.closeTimer);this.closing=false;if(this.anchor)this.collapseSubmenus();this.skipAutoFocus=e?.autoFocus===false;this.open=true;this.applyDepthZIndex()}async reposition(){if(this.open)this.positionMenu()}async close(){if(!this.open||this.closing)return;if(this.quick){this.open=false;return}this.closing=true;this.closeTimer=setTimeout((()=>{this.closing=false;this.open=false}),d)}onOpenChange(e){if(e){this.openedViaKeyboard=this.keyboardModality;this.dismissPeerMenus();this.applyDepthZIndex();requestAnimationFrame((()=>this.positionMenu()));this.mdOpen.emit();this.updateAnchorAria(true);if(this.anchor){requestAnimationFrame((()=>{document.addEventListener("click",this.handleOutsideClick);document.addEventListener("keydown",this.handleDocumentKeyDown)}));window.addEventListener("scroll",this.handleScroll,true);window.addEventListener("resize",this.handleScroll);this.observeSurfaceResize()}if(this.skipAutoFocus||!this.autoFocus){this.scheduleFocus((()=>this.initRovingTabindex()))}else{this.scheduleFocus((()=>this.focusFirstItem()))}this.skipAutoFocus=false}else{this.mdClose.emit();this.focusedIndex=-1;this.updateAnchorAria(false);this.resetRovingTabindex();this.collapseSubmenus();if(this.anchor){document.removeEventListener("click",this.handleOutsideClick);document.removeEventListener("keydown",this.handleDocumentKeyDown);window.removeEventListener("scroll",this.handleScroll,true);window.removeEventListener("resize",this.handleScroll)}this.unobserveSurfaceResize()}}observeSurfaceResize(){if(typeof ResizeObserver==="undefined")return;const e=this.el.shadowRoot?.querySelector(".md-menu__surface");if(!e)return;this.lastSurfaceSize="";this.surfaceRO=new ResizeObserver((e=>{if(!this.open)return;const t=e[e.length-1]?.contentRect;if(!t)return;const s=`${Math.round(t.width)}x${Math.round(t.height)}`;if(s===this.lastSurfaceSize)return;this.lastSurfaceSize=s;this.positionMenu()}));this.surfaceRO.observe(e)}unobserveSurfaceResize(){this.surfaceRO?.disconnect();this.surfaceRO=undefined}handleFocusIn(e){if(!this.open)return;const t=e.target;if(this.provider){const e=t.closest("md-menu-item");const s=e?.getAttribute("data-vindex");if(e&&s!=null){const t=parseInt(s,10);if(!isNaN(t)&&t!==this.focusedIndex){const s=this.focusedIndex>=0?this.provider.domItemForIndex(this.focusedIndex):null;s?.setAttribute("tabindex","-1");this.focusedIndex=t;e.setAttribute("tabindex","0");if(this.ringedIndex>=0&&this.ringedIndex!==t){const e=this.provider.domItemForIndex(this.ringedIndex);e?.removeAttribute("data-md-focused")}this.ringedIndex=-1}}return}const s=this.getMenuItems();const i=s.indexOf(t);if(i>=0&&i!==this.focusedIndex){if(this.focusedIndex>=0&&this.focusedIndex<s.length){s[this.focusedIndex].setAttribute("tabindex","-1")}this.focusedIndex=i;t.setAttribute("tabindex","0")}}handleKeyDown(e){if(!this.open)return;const t=e.target;if(t&&t.closest("md-menu")!==this.el)return;if(this.provider){this.handleKeyDownVirtual(e);return}const s=this.getMenuItems();if(!s.length)return;switch(e.key){case"ArrowDown":e.preventDefault();this.focusItem(s,this.focusedIndex+1);break;case"ArrowUp":e.preventDefault();this.focusItem(s,this.focusedIndex-1);break;case"Home":e.preventDefault();this.focusItem(s,0);break;case"End":e.preventDefault();this.focusItem(s,s.length-1);break;case"Escape":e.preventDefault();this.close();this.restoreFocusToAnchor();break;case"Tab":e.stopPropagation();this.closeEntireMenuTree();this.restoreFocusToAnchor();break;default:if(e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&!e.shiftKey){this.handleTypeahead(e.key,s)}break}}handleKeyDownVirtual(e){const t=this.provider;const s=t.count();const i=e.target?.tagName==="INPUT";switch(e.key){case"ArrowDown":e.preventDefault();this.focusVirtual(this.nextEnabled(this.focusedIndex,1,s));break;case"ArrowUp":e.preventDefault();this.focusVirtual(this.nextEnabled(this.focusedIndex,-1,s));break;case"Home":e.preventDefault();this.focusVirtual(this.nextEnabled(-1,1,s));break;case"End":e.preventDefault();this.focusVirtual(this.nextEnabled(s,-1,s));break;case"Enter":if(this.comboboxEl&&this.focusedIndex>=0){e.preventDefault();this.provider.domItemForIndex(this.focusedIndex)?.click()}break;case"Escape":e.preventDefault();this.close();this.restoreFocusToAnchor();break;case"Tab":e.stopPropagation();this.closeEntireMenuTree();this.restoreFocusToAnchor();break;default:if(!i&&e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&!e.shiftKey){this.handleTypeaheadVirtual(e.key)}break}}nextEnabled(e,t,s){if(s<=0)return-1;let i=e;for(let e=0;e<s;e++){i+=t;if(i<0)i=s-1;else if(i>=s)i=0;if(!this.provider.isDisabledAt(i))return i}return e>=0&&e<s?e:-1}async focusVirtual(e,t=true){if(e<0)return;const s=this.provider;const i=++this.navSeq;this.focusedIndex=e;await s.ensureVisible(e);if(i!==this.navSeq)return;const n=s.domItemForIndex(e);if(!n)return;if(this.ringedIndex>=0&&this.ringedIndex!==e){const e=s.domItemForIndex(this.ringedIndex);e?.setAttribute("tabindex","-1");e?.removeAttribute("data-md-focused")}if(t){n.setAttribute("data-md-focused","");this.ringedIndex=e}else{n.removeAttribute("data-md-focused");this.ringedIndex=-1}if(this.comboboxEl){n.id||(n.id=`${this.menuId}-opt-${e}`);if(n.id)this.comboboxEl.setAttribute("aria-activedescendant",n.id)}else{n.setAttribute("tabindex","0");n.focus({preventScroll:true})}}handleTypeaheadVirtual(e){clearTimeout(this.typeaheadTimer);this.typeaheadBuffer+=e.toLowerCase();this.typeaheadTimer=setTimeout((()=>{this.typeaheadBuffer=""}),o);const t=this.typeaheadBuffer.length===1?this.focusedIndex+1:this.focusedIndex;const s=this.provider.findPrefix(this.typeaheadBuffer,t<0?0:t);if(s>=0)this.focusVirtual(s)}getMenuItems(){const e=Array.from(this.el.querySelectorAll("md-menu-item, md-sub-menu-item"));return e.filter((e=>e.closest("md-menu")===this.el))}getItemLabel(e){return e.headline||e.textContent?.trim()||""}handleTypeahead(e,t){clearTimeout(this.typeaheadTimer);this.typeaheadBuffer+=e.toLowerCase();this.typeaheadTimer=setTimeout((()=>{this.typeaheadBuffer=""}),o);const s=this.typeaheadBuffer.length===1?this.focusedIndex+1:this.focusedIndex;for(let e=0;e<t.length;e++){const i=(s+e)%t.length;const n=this.getItemLabel(t[i]).toLowerCase();if(n.startsWith(this.typeaheadBuffer)){this.focusItem(t,i);return}}}focusItem(e,t,s=true){if(e.length===0)return;if(t<0)t=e.length-1;if(t>=e.length)t=0;if(this.focusedIndex>=0&&this.focusedIndex<e.length){e[this.focusedIndex].setAttribute("tabindex","-1");e[this.focusedIndex].removeAttribute("data-md-focused")}this.focusedIndex=t;e[t].setAttribute("tabindex","0");if(s){e[t].setAttribute("data-md-focused","")}else{e[t].removeAttribute("data-md-focused")}e[t].focus()}initRovingTabindex(){if(this.provider){this.focusedIndex=-1;return}const e=this.getMenuItems();e.forEach(((e,t)=>{e.setAttribute("tabindex",t===0?"0":"-1")}));this.focusedIndex=0}resetRovingTabindex(){if(this.provider){const e=this.focusedIndex>=0?this.provider.domItemForIndex(this.focusedIndex):null;e?.setAttribute("tabindex","-1");e?.removeAttribute("data-md-focused");if(this.ringedIndex>=0&&this.ringedIndex!==this.focusedIndex){const e=this.provider.domItemForIndex(this.ringedIndex);e?.setAttribute("tabindex","-1");e?.removeAttribute("data-md-focused")}this.ringedIndex=-1;this.comboboxEl?.removeAttribute("aria-activedescendant");return}const e=this.getMenuItems();e.forEach((e=>{e.setAttribute("tabindex","-1");e.removeAttribute("data-md-focused")}))}collapseSubmenus(){const e=Array.from(this.el.querySelectorAll("md-sub-menu-item"));e.forEach((e=>e.collapse?.()));const t=Array.from(this.el.querySelectorAll("md-menu-item, md-sub-menu-item"));t.forEach((e=>{e.removeAttribute("data-md-focused");e.setAttribute("tabindex","-1")}))}scheduleFocus(e){setTimeout((()=>requestAnimationFrame((()=>e()))),0)}focusFirstItem(e=3){if(this.provider){const t=this.provider.count();if(t>0){this.focusVirtual(this.nextEnabled(-1,1,t),this.openedViaKeyboard)}else if(e>0){this.scheduleFocus((()=>this.focusFirstItem(e-1)))}return}const t=this.getMenuItems();if(t.length){this.focusItem(t,0,this.openedViaKeyboard)}else if(e>0){this.scheduleFocus((()=>this.focusFirstItem(e-1)))}}getAnchorEl(e=this.anchor){if(!e)return null;const t=this.el.getRootNode();return t.getElementById?.(e)??document.getElementById(e)}updateAnchorAria(e){if(!this.anchor)return;const t=this.getAnchorEl();if(!t)return;const s=t.getAttribute("role");const i=s!==null?h.has(s):c.has(t.tagName)||t.tagName==="A"&&t.hasAttribute("href");if(e){t.setAttribute("aria-haspopup",this.asListbox?"listbox":"menu");if(!this.asListbox)t.setAttribute("aria-controls",this.menuId)}if(i)t.setAttribute("aria-expanded",e?"true":"false");else t.removeAttribute("aria-expanded")}applyDepthZIndex(){if(!this.anchor)return;this.el.style.zIndex="var(--md-sys-z-index-popup, 1000)"}positionMenu(){if(!this.anchor)return;const e=this.getAnchorEl();if(!e)return;const t=e.getBoundingClientRect();const s=this.el.shadowRoot?.querySelector(".md-menu__surface");if(!s)return;const i=4;s.style.minWidth=this.matchAnchorWidth?`${t.width}px`:"";this.el.style.top="0";this.el.style.left="0";this.el.style.right="auto";this.el.style.bottom="auto";const n=s.offsetWidth;let r=s.offsetHeight;if(n===0||r===0){requestAnimationFrame((()=>this.positionMenu()));return}const a=window.innerWidth;const d=window.innerHeight;const o=m;if(this.responsive&&a<=u){const e=s.offsetHeight;let n=t.bottom+i;if(n+e+o>d&&t.top-i-e>=o){n=t.top-i-e;s.style.transformOrigin="bottom left"}else{s.style.transformOrigin="top left"}n=Math.max(o,Math.min(n,d-e-o));this.el.style.top=`${n}px`;this.el.style.left=`${o}px`;return}let h=this.placement.startsWith("bottom")?"bottom":"top";let c=this.placement.endsWith("start")?"start":"end";const l=d-t.bottom-i-o;const f=t.top-i-o;if(h==="bottom"&&r>l){if(r<=f||this.scrollCapped&&f>l)h="top"}else if(h==="top"&&r>f){if(r<=l||this.scrollCapped&&l>f)h="bottom"}if(c==="start"&&t.left+n>a){if(t.right-n>=0)c="end"}else if(c==="end"&&t.right-n<0){if(t.left+n<=a)c="start"}if(this.scrollCapped){const e=h==="bottom"?l:f;const t=s.querySelector(".md-menu__scroll-shadow");const i=s.offsetHeight-(t?.offsetHeight??0);this.el.style.setProperty("--md-menu-avail-block",`${Math.max(48,e-i)}px`);r=s.offsetHeight}else{this.el.style.removeProperty("--md-menu-avail-block")}const p=h==="bottom"?"top":"bottom";const b=c==="start"?"left":"right";s.style.transformOrigin=`${p} ${b}`;const x=h==="bottom"?t.bottom+i:t.top-i-r;const v=c==="start"?t.left:t.right-n;const y=Math.max(o,Math.min(v,a-n-o));const g=Math.max(o,Math.min(x,d-r-o));this.el.style.top=`${g}px`;this.el.style.left=`${y}px`}restoreFocusToAnchor(){if(!this.anchor)return;const e=this.getAnchorEl();e?.focus()}closeEntireMenuTree(){let e=this.el;let t=this.el;while(t){const s=t.parentElement?.closest("md-menu");if(s){e=s;t=s}else{break}}const s=e.querySelectorAll("md-menu-item, md-sub-menu-item");s.forEach((e=>e.setAttribute("tabindex","-1")));if(e.close)e.close();const i=e.anchor;if(i){const t=e.getRootNode();const s=t.getElementById?.(i)??document.getElementById(i);s?.focus()}}dismissPeerMenus(){if(this.persistent)return;if(typeof document==="undefined")return;const e=Array.from(document.querySelectorAll("md-menu"));for(const t of e){if(t===this.el)continue;if(!t.open)continue;if(t.persistent)continue;if(t.contains(this.el))continue;if(this.el.contains(t))continue;t.close()}}isHidden(e){if(e.hasAttribute("hidden"))return true;if(e.style.display==="none")return true;return false}hasVisibleItem(e){if(this.isHidden(e))return false;const t=e.tagName.toLowerCase();if(t==="md-menu-item"||t==="md-sub-menu-item")return true;if(t==="md-menu-item-group"){return Array.from(e.children).some((e=>this.hasVisibleItem(e)))}return false}updateEmpty(){if(!this.emptyText){this.empty=false;return}const e=this.getContentSlot();if(!e)return;const t=e.assignedElements();this.empty=!t.some((e=>this.hasVisibleItem(e)))}wireItemObserver(){this.itemObserver?.disconnect();if(typeof MutationObserver==="undefined")return;const e=this.getContentSlot();if(!e)return;const t=e.assignedElements();if(t.length===0)return;this.itemObserver=new MutationObserver((()=>this.updateEmpty()));for(const e of t){this.itemObserver.observe(e,{attributes:true,attributeFilter:["style","hidden"],subtree:true})}}getContentSlot(){const e=this.el.shadowRoot;if(!e)return null;const t=Array.from(e.querySelectorAll("slot"));return t.find((e=>!e.getAttribute("name")))??null}propagateVariant(){const e=this.getContentSlot();if(!e)return;const t=e.assignedElements();for(const e of t){e.setAttribute("data-variant",this.variant);if(e.tagName.toLowerCase()==="md-menu-item-group"){if(this.useGap){e.setAttribute("data-use-gap","")}else{e.removeAttribute("data-use-gap")}const t=e.querySelectorAll("md-menu-item, md-sub-menu-item");for(const e of Array.from(t)){e.setAttribute("data-variant",this.variant)}}}}updateSections(){const e=this.getContentSlot();if(!e)return;const t=e.assignedElements();let s=false;let i=false;for(const e of t){if(i){e.setAttribute("data-after-gap","");i=false}else{e.removeAttribute("data-after-gap")}if(e.hasAttribute("gap")){s=true;i=true}}this.sectioned=s}disconnectedCallback(){document.removeEventListener("click",this.handleOutsideClick);document.removeEventListener("keydown",this.handleDocumentKeyDown);document.removeEventListener("keydown",this.trackKeyboardModality,true);document.removeEventListener("pointerdown",this.trackPointerModality,true);window.removeEventListener("scroll",this.handleScroll,true);window.removeEventListener("resize",this.handleScroll);clearTimeout(this.closeTimer);clearTimeout(this.typeaheadTimer);this.itemObserver?.disconnect();this.itemObserver=undefined;this.unobserveSurfaceResize();this.updateAnchorAria(false)}get inlineFill(){return this.el.classList.contains("md-menu--inline-fill")}get maxHeightValue(){if(this.maxHeight===undefined||this.maxHeight===null||this.maxHeight===""){return null}const e=String(this.maxHeight);return/^\d+(\.\d+)?$/.test(e)?`${e}px`:e}get scrollCapped(){return!this.hasSubmenu&&!this.inlineFill}get useScrollViewport(){return this.inlineFill||this.scrollCapped}renderMenuBody(){return[i("slot",{onSlotchange:this.handleSlotChange}),this.emptyText?i("span",{class:"md-menu__empty",part:"empty-text",role:"status"},this.emptyText):null]}render(){return i(n,{key:"349ce271693310ea70aa98cb3980029e3afa1594",class:{"md-menu":true,"md-menu--open":this.open,"md-menu--closing":this.closing,"md-menu--quick":this.quick,[`md-menu--${this.variant}`]:true,[`md-menu--${this.layout}`]:this.variant!=="baseline","md-menu--gap":this.useGap,"md-menu--sectioned":this.sectioned,"md-menu--empty":this.empty,"md-menu--responsive":this.responsive,"md-menu--has-submenu":this.hasSubmenu,"md-menu--scroll":this.scrollCapped},"aria-hidden":!this.open||this.closing?"true":"false",inert:!this.open||this.closing},i("div",{key:"9a3e0ab8f4586b4164412fe972acbbf4cbc3000a",class:"md-menu__surface",part:"surface",role:this.asListbox?"presentation":"menu",id:this.menuId,"aria-orientation":this.asListbox?undefined:"vertical","aria-labelledby":this.asListbox?undefined:this.anchor||undefined},i("slot",{key:"abf20ee5e25dfcc174f8aa45814b6603b77e1c65",name:"header"}),this.useScrollViewport?i("div",{class:"md-menu__scroll-shadow",part:"menu-viewport",tabindex:this.asListbox?"0":undefined,style:this.inlineFill?undefined:{maxBlockSize:this.maxHeightValue?`min(${this.maxHeightValue}, var(--md-menu-avail-block, 100dvh), calc(100dvh - 2 * var(--md-menu-viewport-margin, 8px)))`:`min(var(--md-menu-avail-block, 100dvh), calc(100dvh - 2 * var(--md-menu-viewport-margin, 8px)))`}},this.renderMenuBody()):this.renderMenuBody()))}get el(){return this}static get watchers(){return{emptyText:[{onEmptyTextChange:0}],variant:[{onVariantChange:0}],useGap:[{onVariantChange:0}],open:[{onOpenChange:0}]}}static get style(){return a()}},[257,"md-menu",{open:[1540],anchor:[1],placement:[513],quick:[4],variant:[513],layout:[513],useGap:[516,"use-gap"],emptyText:[1,"empty-text"],matchAnchorWidth:[516,"match-anchor-width"],responsive:[516],persistent:[516],autoFocus:[516,"auto-focus"],maxHeight:[8,"max-height"],listLabel:[1,"list-label"],listbox:[516],density:[514],closing:[32],sectioned:[32],empty:[32],hasSubmenu:[32],listboxMode:[32],setComboboxElement:[64],setVirtualProvider:[64],getScrollViewport:[64],show:[64],reposition:[64],close:[64]},[[0,"focusin","handleFocusIn"],[0,"keydown","handleKeyDown"]],{emptyText:[{onEmptyTextChange:0}],variant:[{onVariantChange:0}],useGap:[{onVariantChange:0}],open:[{onOpenChange:0}]}]);function p(){if(typeof customElements==="undefined"){return}const e=["md-menu"];e.forEach((e=>{switch(e){case"md-menu":if(!customElements.get(r(e))){customElements.define(r(e),f)}break}}))}p();export{f as M,p as d};
2
- //# sourceMappingURL=p-CCMritCA.js.map
1
+ import{p as e,H as t,c as s,h as i,d as n,t as r}from"./p-BR6gfOQH.js";const a=()=>`:host{display:block;position:fixed;z-index:auto;pointer-events:none}:host(.md-menu--open){pointer-events:auto}.md-menu__surface{background-color:var(--md-sys-color-surface-container, #F7F2FA);border-radius:var(--md-sys-shape-corner-small, 8px);box-shadow:0 1px 2px rgba(0, 0, 0, 0.3), 0 2px 6px 2px rgba(0, 0, 0, 0.15);min-width:var(--md-menu-min-width, 112px);max-width:min( var(--md-menu-max-width, 100vw), calc(100vw - 2 * var(--md-menu-viewport-margin, 8px)) );padding:var(--md-sys-spacing-inset-xs, 4px) 0;overflow:visible;opacity:0;transform:scaleY(0.8);transform-origin:top left;transition:opacity var(--md-sys-motion-duration-short3, 150ms) var(--md-sys-motion-easing-emphasized-decelerate, cubic-bezier(0.05, 0.7, 0.1, 1)), transform var(--md-sys-motion-duration-short3, 150ms) var(--md-sys-motion-easing-emphasized-decelerate, cubic-bezier(0.05, 0.7, 0.1, 1))}:host(.md-menu--open) .md-menu__surface{opacity:1;transform:none}:host(.md-menu--closing) .md-menu__surface{opacity:0;transform:scaleY(0.8);transition:opacity var(--md-sys-motion-duration-short3, 150ms) var(--md-sys-motion-easing-emphasized-accelerate, cubic-bezier(0.3, 0, 0.8, 0.15)), transform var(--md-sys-motion-duration-short3, 150ms) var(--md-sys-motion-easing-emphasized-accelerate, cubic-bezier(0.3, 0, 0.8, 0.15))}:host(.md-menu--closing){pointer-events:none}:host(.md-menu--quick) .md-menu__surface{transition:none}:host(.md-menu--inline-fill){position:relative;display:flex;flex-direction:column;flex:1 1 auto;min-block-size:0;block-size:100%;inline-size:100%;pointer-events:auto}:host(.md-menu--inline-fill) .md-menu__surface{flex:1 1 auto;block-size:100%;min-block-size:0;min-inline-size:100%;max-inline-size:none;display:flex;flex-direction:column;overflow:hidden;box-shadow:none;border:none;outline:none;padding:0;border-radius:0;border-end-start-radius:var(--md-menu-inline-fill-radius-end, 0);border-end-end-radius:var(--md-menu-inline-fill-radius-end, 0);background-color:var(--md-menu-inline-surface-color, transparent)}:host(.md-menu--inline-fill) .md-menu__scroll-shadow{flex:1 1 auto;min-block-size:0;block-size:100%}:host(.md-menu--inline-fill) .md-menu__surface ::slotted(md-menu-item:last-child){border-end-start-radius:var(--md-menu-inline-fill-radius-end, 0);border-end-end-radius:var(--md-menu-inline-fill-radius-end, 0)}:host(.md-menu--scroll):not(.md-menu--has-submenu) .md-menu__surface{overflow:hidden}:host(.md-menu--scroll) .md-menu__scroll-shadow{min-block-size:0}.md-menu__scroll-shadow{overflow-y:auto;overflow-anchor:none}:host([match-anchor-width]) .md-menu__surface{max-width:calc(100vw - 2 * var(--md-menu-viewport-margin, 8px));box-sizing:border-box}:host(:not(.md-menu--has-submenu):not(.md-menu--inline-fill):not(.md-menu--scroll)) .md-menu__surface{max-height:calc(100dvh - 2 * var(--md-menu-viewport-margin, 8px));overflow-y:auto;overscroll-behavior:contain}@media (max-width: 600px){:host(.md-menu--responsive) .md-menu__surface{width:calc(100vw - 2 * var(--md-menu-viewport-margin, 8px));min-width:0;max-width:none;box-sizing:border-box}}:host([placement="bottom-start"]) .md-menu__surface{transform-origin:top left}:host([placement="bottom-end"]) .md-menu__surface{transform-origin:top right}:host([placement="top-start"]) .md-menu__surface{transform-origin:bottom left}:host([placement="top-end"]) .md-menu__surface{transform-origin:bottom right}:host(.md-menu--standard) .md-menu__surface{background-color:var(--md-sys-color-surface-container-low, #F7F2FA);border-radius:var(--md-sys-shape-corner-large, 16px);box-shadow:0 1px 3px rgba(0, 0, 0, 0.12), 0 4px 8px 3px rgba(0, 0, 0, 0.08);padding:var(--md-sys-spacing-inset-xs, 4px)}:host(.md-menu--standard) .md-menu__surface ::slotted(md-menu-item),:host(.md-menu--standard) .md-menu__surface ::slotted(md-sub-menu-item){border-radius:var(--md-sys-shape-corner-small, 8px)}:host(.md-menu--standard) .md-menu__surface ::slotted(md-menu-item:first-child),:host(.md-menu--standard) .md-menu__surface ::slotted(md-sub-menu-item:first-child){border-start-start-radius:var(--md-sys-shape-corner-large, 16px);border-start-end-radius:var(--md-sys-shape-corner-large, 16px)}:host(.md-menu--standard) .md-menu__surface ::slotted(md-menu-item:last-child),:host(.md-menu--standard) .md-menu__surface ::slotted(md-sub-menu-item:last-child){border-end-start-radius:var(--md-sys-shape-corner-large, 16px);border-end-end-radius:var(--md-sys-shape-corner-large, 16px)}:host(.md-menu--standard) .md-menu__surface ::slotted(md-menu-item:hover),:host(.md-menu--standard) .md-menu__surface ::slotted(md-sub-menu-item:hover){border-radius:var(--md-sys-shape-corner-extra-small, 4px)}:host(.md-menu--standard) .md-menu__surface ::slotted(md-menu-item:active),:host(.md-menu--standard) .md-menu__surface ::slotted(md-menu-item.md-menu-item--selected),:host(.md-menu--standard) .md-menu__surface ::slotted(md-sub-menu-item:active){border-radius:var(--md-sys-shape-corner-medium, 12px)}:host(.md-menu--standard) .md-menu__surface ::slotted(md-menu-item:first-child:hover),:host(.md-menu--standard) .md-menu__surface ::slotted(md-sub-menu-item:first-child:hover){border-start-start-radius:var(--md-sys-shape-corner-large, 16px);border-start-end-radius:var(--md-sys-shape-corner-large, 16px);border-end-start-radius:var(--md-sys-shape-corner-extra-small, 4px);border-end-end-radius:var(--md-sys-shape-corner-extra-small, 4px)}:host(.md-menu--standard) .md-menu__surface ::slotted(md-menu-item:last-child:hover),:host(.md-menu--standard) .md-menu__surface ::slotted(md-sub-menu-item:last-child:hover){border-start-start-radius:var(--md-sys-shape-corner-extra-small, 4px);border-start-end-radius:var(--md-sys-shape-corner-extra-small, 4px);border-end-start-radius:var(--md-sys-shape-corner-large, 16px);border-end-end-radius:var(--md-sys-shape-corner-large, 16px)}:host(.md-menu--vibrant) .md-menu__surface{background-color:var(--md-sys-color-tertiary-container, #FFD8E4);border-radius:var(--md-sys-shape-corner-large, 16px);box-shadow:0 1px 3px rgba(0, 0, 0, 0.12), 0 4px 8px 3px rgba(0, 0, 0, 0.08);padding:var(--md-sys-spacing-inset-xs, 4px)}:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-menu-item),:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-sub-menu-item){border-radius:var(--md-sys-shape-corner-small, 8px)}:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-menu-item:first-child),:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-sub-menu-item:first-child){border-start-start-radius:var(--md-sys-shape-corner-large, 16px);border-start-end-radius:var(--md-sys-shape-corner-large, 16px)}:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-menu-item:last-child),:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-sub-menu-item:last-child){border-end-start-radius:var(--md-sys-shape-corner-large, 16px);border-end-end-radius:var(--md-sys-shape-corner-large, 16px)}:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-menu-item:hover),:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-sub-menu-item:hover){border-radius:var(--md-sys-shape-corner-extra-small, 4px)}:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-menu-item:active),:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-menu-item.md-menu-item--selected),:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-sub-menu-item:active){border-radius:var(--md-sys-shape-corner-medium, 12px)}:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-menu-item:first-child:hover),:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-sub-menu-item:first-child:hover){border-start-start-radius:var(--md-sys-shape-corner-large, 16px);border-start-end-radius:var(--md-sys-shape-corner-large, 16px);border-end-start-radius:var(--md-sys-shape-corner-extra-small, 4px);border-end-end-radius:var(--md-sys-shape-corner-extra-small, 4px)}:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-menu-item:last-child:hover),:host(.md-menu--vibrant) .md-menu__surface ::slotted(md-sub-menu-item:last-child:hover){border-start-start-radius:var(--md-sys-shape-corner-extra-small, 4px);border-start-end-radius:var(--md-sys-shape-corner-extra-small, 4px);border-end-start-radius:var(--md-sys-shape-corner-large, 16px);border-end-end-radius:var(--md-sys-shape-corner-large, 16px)}:host(.md-menu--gap) .md-menu__surface{gap:var(--md-sys-spacing-gap-xs, 4px);display:flex;flex-direction:column}:host(.md-menu--grouped.md-menu--gap.md-menu--standard) .md-menu__surface,:host(.md-menu--grouped.md-menu--gap.md-menu--vibrant) .md-menu__surface{background-color:transparent;box-shadow:none;overflow:visible;display:flex;flex-direction:column;gap:var(--md-menu-group-gap, 4px);padding:0;filter:drop-shadow(0 1px 2px rgba(0, 0, 0, 0.15)) drop-shadow(0 2px 6px rgba(0, 0, 0, 0.1))}:host(.md-menu--grouped.md-menu--gap) .md-menu__surface ::slotted(md-menu-item-group),:host(.md-menu--grouped.md-menu--gap) .md-menu__scroll-shadow ::slotted(md-menu-item-group){flex-shrink:0}:host(.md-menu--grouped.md-menu--gap) .md-menu__scroll-shadow{display:flex;flex-direction:column;row-gap:var(--md-menu-group-gap, 4px)}:host(.md-menu--sectioned.md-menu--baseline) .md-menu__surface ::slotted([gap]){margin-bottom:var(--md-menu-section-gap, 2px)}.md-menu__empty{display:none;padding:var(--md-sys-spacing-inset-md, 12px) var(--md-sys-spacing-inset-lg, 16px);font-family:var(--md-sys-typescale-body-medium-font-family, Roboto, sans-serif);font-size:var(--md-sys-typescale-body-medium-size, 14px);line-height:var(--md-sys-typescale-body-medium-line-height, 20px);color:var(--md-sys-color-on-surface-variant, #49454F);text-align:center}:host(.md-menu--empty) .md-menu__empty{display:block}:host([density='-1']){--md-sys-density-scale:-1}:host([density='-2']){--md-sys-density-scale:-2}:host([density='-3']){--md-sys-density-scale:-3}:host([density='-4']){--md-sys-density-scale:-4}`;const d=150;const o=500;const m=8;const u=600;const h=new Set(["button","combobox","link","menuitem","tab","treeitem","checkbox","gridcell","row","rowheader","columnheader"]);const c=new Set(["BUTTON","SUMMARY"]);let l=0;const f=e(class e extends t{constructor(e){super();if(e!==false){this.__registerHost()}this.__attachShadow();this.mdOpen=s(this,"mdOpen",1);this.mdClose=s(this,"mdClose",1);this.open=false;this.anchor="";this.placement="bottom-start";this.quick=false;this.variant="baseline";this.layout="standard";this.useGap=false;this.emptyText="";this.matchAnchorWidth=false;this.responsive=false;this.persistent=false;this.autoFocus=true;this.closing=false;this.sectioned=false;this.empty=false;this.hasSubmenu=false;this.focusedIndex=-1;this.navSeq=0;this.ringedIndex=-1;this.skipAutoFocus=false;this.menuId=`md-menu-${++l}`;this.typeaheadBuffer="";this.keyboardModality=false;this.openedViaKeyboard=false;this.listboxMode=false;this.listbox=false;this.density=0;this.trackKeyboardModality=()=>{this.keyboardModality=true};this.trackPointerModality=()=>{this.keyboardModality=false};this.lastSurfaceSize="";this.handleOutsideClick=e=>{if(this.persistent)return;const t=e.composedPath();if(!t.includes(this.el)){this.close()}};this.handleDocumentKeyDown=e=>{if(e.key==="Escape"&&this.open){this.close();this.restoreFocusToAnchor()}};this.handleScroll=()=>{if(this.open&&!this.closing){this.positionMenu()}};this.handleSlotChange=()=>{this.updateSections();this.propagateVariant();this.wireItemObserver();this.updateEmpty();this.hasSubmenu=!!this.el.querySelector("md-sub-menu-item")}}get asListbox(){return this.listbox||this.listboxMode}async setComboboxElement(e){if(this.comboboxEl&&this.comboboxEl!==e){this.comboboxEl.removeAttribute("aria-activedescendant")}this.comboboxEl=e??undefined}connectedCallback(){if(typeof document==="undefined")return;document.addEventListener("keydown",this.trackKeyboardModality,true);document.addEventListener("pointerdown",this.trackPointerModality,true)}componentDidLoad(){if(this.open){this.applyDepthZIndex()}this.wireItemObserver();this.updateEmpty();this.propagateVariant()}onEmptyTextChange(){this.updateEmpty()}onVariantChange(){this.propagateVariant()}async setVirtualProvider(e){this.provider=e??undefined;this.listboxMode=!!this.provider}async getScrollViewport(){return this.el.shadowRoot?.querySelector(".md-menu__scroll-shadow")??null}async show(e){clearTimeout(this.closeTimer);this.closing=false;if(this.anchor)this.collapseSubmenus();this.skipAutoFocus=e?.autoFocus===false;this.open=true;this.applyDepthZIndex()}async reposition(){if(this.open)this.positionMenu()}async close(){if(!this.open||this.closing)return;if(this.quick){this.open=false;return}this.closing=true;this.closeTimer=setTimeout((()=>{this.closing=false;this.open=false}),d)}onOpenChange(e){if(e){this.openedViaKeyboard=this.keyboardModality;this.dismissPeerMenus();this.applyDepthZIndex();requestAnimationFrame((()=>this.positionMenu()));this.mdOpen.emit();this.updateAnchorAria(true);if(this.anchor){requestAnimationFrame((()=>{document.addEventListener("click",this.handleOutsideClick);document.addEventListener("keydown",this.handleDocumentKeyDown)}));window.addEventListener("scroll",this.handleScroll,true);window.addEventListener("resize",this.handleScroll);this.observeSurfaceResize()}if(this.skipAutoFocus||!this.autoFocus){this.scheduleFocus((()=>this.initRovingTabindex()))}else{this.scheduleFocus((()=>this.focusFirstItem()))}this.skipAutoFocus=false}else{this.mdClose.emit();this.focusedIndex=-1;this.updateAnchorAria(false);this.resetRovingTabindex();this.collapseSubmenus();if(this.anchor){document.removeEventListener("click",this.handleOutsideClick);document.removeEventListener("keydown",this.handleDocumentKeyDown);window.removeEventListener("scroll",this.handleScroll,true);window.removeEventListener("resize",this.handleScroll)}this.unobserveSurfaceResize()}}observeSurfaceResize(){if(typeof ResizeObserver==="undefined")return;const e=this.el.shadowRoot?.querySelector(".md-menu__surface");if(!e)return;this.lastSurfaceSize="";this.surfaceRO=new ResizeObserver((e=>{if(!this.open)return;const t=e[e.length-1]?.contentRect;if(!t)return;const s=`${Math.round(t.width)}x${Math.round(t.height)}`;if(s===this.lastSurfaceSize)return;this.lastSurfaceSize=s;this.positionMenu()}));this.surfaceRO.observe(e)}unobserveSurfaceResize(){this.surfaceRO?.disconnect();this.surfaceRO=undefined}handleFocusIn(e){if(!this.open)return;const t=e.target;if(this.provider){const e=t.closest("md-menu-item");const s=e?.getAttribute("data-vindex");if(e&&s!=null){const t=parseInt(s,10);if(!isNaN(t)&&t!==this.focusedIndex){const s=this.focusedIndex>=0?this.provider.domItemForIndex(this.focusedIndex):null;s?.setAttribute("tabindex","-1");this.focusedIndex=t;e.setAttribute("tabindex","0");if(this.ringedIndex>=0&&this.ringedIndex!==t){const e=this.provider.domItemForIndex(this.ringedIndex);e?.removeAttribute("data-md-focused")}this.ringedIndex=-1}}return}const s=this.getMenuItems();const i=s.indexOf(t);if(i>=0&&i!==this.focusedIndex){if(this.focusedIndex>=0&&this.focusedIndex<s.length){s[this.focusedIndex].setAttribute("tabindex","-1")}this.focusedIndex=i;t.setAttribute("tabindex","0")}}handleKeyDown(e){if(!this.open)return;const t=e.target;if(t&&t.closest("md-menu")!==this.el)return;if(this.provider){this.handleKeyDownVirtual(e);return}const s=this.getMenuItems();if(!s.length)return;switch(e.key){case"ArrowDown":e.preventDefault();this.focusItem(s,this.focusedIndex+1);break;case"ArrowUp":e.preventDefault();this.focusItem(s,this.focusedIndex-1);break;case"Home":e.preventDefault();this.focusItem(s,0);break;case"End":e.preventDefault();this.focusItem(s,s.length-1);break;case"Escape":e.preventDefault();this.close();this.restoreFocusToAnchor();break;case"Tab":e.stopPropagation();this.closeEntireMenuTree();this.restoreFocusToAnchor();break;default:if(e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&!e.shiftKey){this.handleTypeahead(e.key,s)}break}}handleKeyDownVirtual(e){const t=this.provider;const s=t.count();const i=e.target?.tagName==="INPUT";switch(e.key){case"ArrowDown":e.preventDefault();this.focusVirtual(this.nextEnabled(this.focusedIndex,1,s));break;case"ArrowUp":e.preventDefault();this.focusVirtual(this.nextEnabled(this.focusedIndex,-1,s));break;case"Home":e.preventDefault();this.focusVirtual(this.nextEnabled(-1,1,s));break;case"End":e.preventDefault();this.focusVirtual(this.nextEnabled(s,-1,s));break;case"Enter":if(this.comboboxEl&&this.focusedIndex>=0){e.preventDefault();this.provider.domItemForIndex(this.focusedIndex)?.click()}break;case"Escape":e.preventDefault();this.close();this.restoreFocusToAnchor();break;case"Tab":e.stopPropagation();this.closeEntireMenuTree();this.restoreFocusToAnchor();break;default:if(!i&&e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&!e.shiftKey){this.handleTypeaheadVirtual(e.key)}break}}nextEnabled(e,t,s){if(s<=0)return-1;let i=e;for(let e=0;e<s;e++){i+=t;if(i<0)i=s-1;else if(i>=s)i=0;if(!this.provider.isDisabledAt(i))return i}return e>=0&&e<s?e:-1}async focusVirtual(e,t=true){if(e<0)return;const s=this.provider;const i=++this.navSeq;this.focusedIndex=e;await s.ensureVisible(e);if(i!==this.navSeq)return;const n=s.domItemForIndex(e);if(!n)return;if(this.ringedIndex>=0&&this.ringedIndex!==e){const e=s.domItemForIndex(this.ringedIndex);e?.setAttribute("tabindex","-1");e?.removeAttribute("data-md-focused")}if(t){n.setAttribute("data-md-focused","");this.ringedIndex=e}else{n.removeAttribute("data-md-focused");this.ringedIndex=-1}if(this.comboboxEl){n.id||(n.id=`${this.menuId}-opt-${e}`);if(n.id)this.comboboxEl.setAttribute("aria-activedescendant",n.id)}else{n.setAttribute("tabindex","0");n.focus({preventScroll:true})}}handleTypeaheadVirtual(e){clearTimeout(this.typeaheadTimer);this.typeaheadBuffer+=e.toLowerCase();this.typeaheadTimer=setTimeout((()=>{this.typeaheadBuffer=""}),o);const t=this.typeaheadBuffer.length===1?this.focusedIndex+1:this.focusedIndex;const s=this.provider.findPrefix(this.typeaheadBuffer,t<0?0:t);if(s>=0)this.focusVirtual(s)}getMenuItems(){const e=Array.from(this.el.querySelectorAll("md-menu-item, md-sub-menu-item"));return e.filter((e=>e.closest("md-menu")===this.el))}getItemLabel(e){return e.headline||e.textContent?.trim()||""}handleTypeahead(e,t){clearTimeout(this.typeaheadTimer);this.typeaheadBuffer+=e.toLowerCase();this.typeaheadTimer=setTimeout((()=>{this.typeaheadBuffer=""}),o);const s=this.typeaheadBuffer.length===1?this.focusedIndex+1:this.focusedIndex;for(let e=0;e<t.length;e++){const i=(s+e)%t.length;const n=this.getItemLabel(t[i]).toLowerCase();if(n.startsWith(this.typeaheadBuffer)){this.focusItem(t,i);return}}}focusItem(e,t,s=true){if(e.length===0)return;if(t<0)t=e.length-1;if(t>=e.length)t=0;if(this.focusedIndex>=0&&this.focusedIndex<e.length){e[this.focusedIndex].setAttribute("tabindex","-1");e[this.focusedIndex].removeAttribute("data-md-focused")}this.focusedIndex=t;e[t].setAttribute("tabindex","0");if(s){e[t].setAttribute("data-md-focused","")}else{e[t].removeAttribute("data-md-focused")}e[t].focus()}initRovingTabindex(){if(this.provider){this.focusedIndex=-1;return}const e=this.getMenuItems();e.forEach(((e,t)=>{e.setAttribute("tabindex",t===0?"0":"-1")}));this.focusedIndex=0}resetRovingTabindex(){if(this.provider){const e=this.focusedIndex>=0?this.provider.domItemForIndex(this.focusedIndex):null;e?.setAttribute("tabindex","-1");e?.removeAttribute("data-md-focused");if(this.ringedIndex>=0&&this.ringedIndex!==this.focusedIndex){const e=this.provider.domItemForIndex(this.ringedIndex);e?.setAttribute("tabindex","-1");e?.removeAttribute("data-md-focused")}this.ringedIndex=-1;this.comboboxEl?.removeAttribute("aria-activedescendant");return}const e=this.getMenuItems();e.forEach((e=>{e.setAttribute("tabindex","-1");e.removeAttribute("data-md-focused")}))}collapseSubmenus(){const e=Array.from(this.el.querySelectorAll("md-sub-menu-item"));e.forEach((e=>e.collapse?.()));const t=Array.from(this.el.querySelectorAll("md-menu-item, md-sub-menu-item"));t.forEach((e=>{e.removeAttribute("data-md-focused");e.setAttribute("tabindex","-1")}))}scheduleFocus(e){setTimeout((()=>requestAnimationFrame((()=>e()))),0)}focusFirstItem(e=3){if(this.provider){const t=this.provider.count();if(t>0){this.focusVirtual(this.nextEnabled(-1,1,t),this.openedViaKeyboard)}else if(e>0){this.scheduleFocus((()=>this.focusFirstItem(e-1)))}return}const t=this.getMenuItems();if(t.length){this.focusItem(t,0,this.openedViaKeyboard)}else if(e>0){this.scheduleFocus((()=>this.focusFirstItem(e-1)))}}getAnchorEl(e=this.anchor){if(!e)return null;const t=this.el.getRootNode();return t.getElementById?.(e)??document.getElementById(e)}updateAnchorAria(e){if(!this.anchor)return;const t=this.getAnchorEl();if(!t)return;const s=t.getAttribute("role");const i=s!==null?h.has(s):c.has(t.tagName)||t.tagName==="A"&&t.hasAttribute("href");if(e){t.setAttribute("aria-haspopup",this.asListbox?"listbox":"menu");if(!this.asListbox)t.setAttribute("aria-controls",this.menuId)}if(i)t.setAttribute("aria-expanded",e?"true":"false");else t.removeAttribute("aria-expanded")}applyDepthZIndex(){if(!this.anchor)return;this.el.style.zIndex="var(--md-sys-z-index-popup, 1000)"}positionMenu(){if(!this.anchor)return;const e=this.getAnchorEl();if(!e)return;const t=e.getBoundingClientRect();const s=this.el.shadowRoot?.querySelector(".md-menu__surface");if(!s)return;const i=4;s.style.minWidth=this.matchAnchorWidth?`${t.width}px`:"";this.el.style.top="0";this.el.style.left="0";this.el.style.right="auto";this.el.style.bottom="auto";const n=s.offsetWidth;let r=s.offsetHeight;if(n===0||r===0){requestAnimationFrame((()=>this.positionMenu()));return}const a=window.innerWidth;const d=window.innerHeight;const o=m;if(this.responsive&&a<=u){const e=s.offsetHeight;let n=t.bottom+i;if(n+e+o>d&&t.top-i-e>=o){n=t.top-i-e;s.style.transformOrigin="bottom left"}else{s.style.transformOrigin="top left"}n=Math.max(o,Math.min(n,d-e-o));this.el.style.top=`${n}px`;this.el.style.left=`${o}px`;return}let h=this.placement.startsWith("bottom")?"bottom":"top";let c=this.placement.endsWith("start")?"start":"end";const l=d-t.bottom-i-o;const f=t.top-i-o;if(h==="bottom"&&r>l){if(r<=f||this.scrollCapped&&f>l)h="top"}else if(h==="top"&&r>f){if(r<=l||this.scrollCapped&&l>f)h="bottom"}if(c==="start"&&t.left+n>a){if(t.right-n>=0)c="end"}else if(c==="end"&&t.right-n<0){if(t.left+n<=a)c="start"}if(this.scrollCapped){const e=h==="bottom"?l:f;const t=s.querySelector(".md-menu__scroll-shadow");const i=s.offsetHeight-(t?.offsetHeight??0);this.el.style.setProperty("--md-menu-avail-block",`${Math.max(48,e-i)}px`);r=s.offsetHeight}else{this.el.style.removeProperty("--md-menu-avail-block")}const p=h==="bottom"?"top":"bottom";const b=c==="start"?"left":"right";s.style.transformOrigin=`${p} ${b}`;const x=h==="bottom"?t.bottom+i:t.top-i-r;const v=c==="start"?t.left:t.right-n;const y=Math.max(o,Math.min(v,a-n-o));const g=Math.max(o,Math.min(x,d-r-o));this.el.style.top=`${g}px`;this.el.style.left=`${y}px`}restoreFocusToAnchor(){if(!this.anchor)return;const e=this.getAnchorEl();e?.focus()}closeEntireMenuTree(){let e=this.el;let t=this.el;while(t){const s=t.parentElement?.closest("md-menu");if(s){e=s;t=s}else{break}}const s=e.querySelectorAll("md-menu-item, md-sub-menu-item");s.forEach((e=>e.setAttribute("tabindex","-1")));if(e.close)e.close();const i=e.anchor;if(i){const t=e.getRootNode();const s=t.getElementById?.(i)??document.getElementById(i);s?.focus()}}dismissPeerMenus(){if(this.persistent)return;if(typeof document==="undefined")return;const e=Array.from(document.querySelectorAll("md-menu"));for(const t of e){if(t===this.el)continue;if(!t.open)continue;if(t.persistent)continue;if(t.contains(this.el))continue;if(this.el.contains(t))continue;t.close()}}isHidden(e){if(e.hasAttribute("hidden"))return true;if(e.style.display==="none")return true;return false}hasVisibleItem(e){if(this.isHidden(e))return false;const t=e.tagName.toLowerCase();if(t==="md-menu-item"||t==="md-sub-menu-item")return true;if(t==="md-menu-item-group"){return Array.from(e.children).some((e=>this.hasVisibleItem(e)))}return false}updateEmpty(){if(!this.emptyText){this.empty=false;return}const e=this.getContentSlot();if(!e)return;const t=e.assignedElements();this.empty=!t.some((e=>this.hasVisibleItem(e)))}wireItemObserver(){this.itemObserver?.disconnect();if(typeof MutationObserver==="undefined")return;const e=this.getContentSlot();if(!e)return;const t=e.assignedElements();if(t.length===0)return;this.itemObserver=new MutationObserver((()=>this.updateEmpty()));for(const e of t){this.itemObserver.observe(e,{attributes:true,attributeFilter:["style","hidden"],subtree:true})}}getContentSlot(){const e=this.el.shadowRoot;if(!e)return null;const t=Array.from(e.querySelectorAll("slot"));return t.find((e=>!e.getAttribute("name")))??null}propagateVariant(){const e=this.getContentSlot();if(!e)return;const t=e.assignedElements();for(const e of t){e.setAttribute("data-variant",this.variant);if(e.tagName.toLowerCase()==="md-menu-item-group"){if(this.useGap){e.setAttribute("data-use-gap","")}else{e.removeAttribute("data-use-gap")}const t=e.querySelectorAll("md-menu-item, md-sub-menu-item");for(const e of Array.from(t)){e.setAttribute("data-variant",this.variant)}}}}updateSections(){const e=this.getContentSlot();if(!e)return;const t=e.assignedElements();let s=false;let i=false;for(const e of t){if(i){e.setAttribute("data-after-gap","");i=false}else{e.removeAttribute("data-after-gap")}if(e.hasAttribute("gap")){s=true;i=true}}this.sectioned=s}disconnectedCallback(){document.removeEventListener("click",this.handleOutsideClick);document.removeEventListener("keydown",this.handleDocumentKeyDown);document.removeEventListener("keydown",this.trackKeyboardModality,true);document.removeEventListener("pointerdown",this.trackPointerModality,true);window.removeEventListener("scroll",this.handleScroll,true);window.removeEventListener("resize",this.handleScroll);clearTimeout(this.closeTimer);clearTimeout(this.typeaheadTimer);this.itemObserver?.disconnect();this.itemObserver=undefined;this.unobserveSurfaceResize();this.updateAnchorAria(false)}get inlineFill(){return this.el.classList.contains("md-menu--inline-fill")}get maxHeightValue(){if(this.maxHeight===undefined||this.maxHeight===null||this.maxHeight===""){return null}const e=String(this.maxHeight);return/^\d+(\.\d+)?$/.test(e)?`${e}px`:e}get scrollCapped(){return!this.hasSubmenu&&!this.inlineFill}get useScrollViewport(){return this.inlineFill||this.scrollCapped}renderMenuBody(){return[i("slot",{onSlotchange:this.handleSlotChange}),this.emptyText?i("span",{class:"md-menu__empty",part:"empty-text",role:"status"},this.emptyText):null]}render(){return i(n,{key:"b56dcecef34cbb5f88ec2ca077bb24793416a0e7",class:{"md-menu":true,"md-menu--open":this.open,"md-menu--closing":this.closing,"md-menu--quick":this.quick,[`md-menu--${this.variant}`]:true,[`md-menu--${this.layout}`]:this.variant!=="baseline","md-menu--gap":this.useGap,"md-menu--sectioned":this.sectioned,"md-menu--empty":this.empty,"md-menu--responsive":this.responsive,"md-menu--has-submenu":this.hasSubmenu,"md-menu--scroll":this.scrollCapped},"aria-hidden":!this.open||this.closing?"true":"false",inert:!this.open||this.closing},i("div",{key:"a3e6653976727089bc7f11162c5a363916525a3a",class:"md-menu__surface",part:"surface",role:this.asListbox?"presentation":"menu",id:this.menuId,"aria-orientation":this.asListbox?undefined:"vertical","aria-labelledby":this.asListbox?undefined:this.anchor||undefined},i("slot",{key:"0ca8b628a129b2447b3db6102c4368072faa1d02",name:"header"}),this.useScrollViewport?i("div",{class:"md-menu__scroll-shadow",part:"menu-viewport",tabindex:this.asListbox?"0":undefined,style:this.inlineFill?undefined:{maxBlockSize:this.maxHeightValue?`min(${this.maxHeightValue}, var(--md-menu-avail-block, 100dvh), calc(100dvh - 2 * var(--md-menu-viewport-margin, 8px)))`:`min(var(--md-menu-avail-block, 100dvh), calc(100dvh - 2 * var(--md-menu-viewport-margin, 8px)))`}},this.renderMenuBody()):this.renderMenuBody()))}get el(){return this}static get watchers(){return{emptyText:[{onEmptyTextChange:0}],variant:[{onVariantChange:0}],useGap:[{onVariantChange:0}],open:[{onOpenChange:0}]}}static get style(){return a()}},[257,"md-menu",{open:[1540],anchor:[1],placement:[513],quick:[4],variant:[513],layout:[513],useGap:[516,"use-gap"],emptyText:[1,"empty-text"],matchAnchorWidth:[516,"match-anchor-width"],responsive:[516],persistent:[516],autoFocus:[516,"auto-focus"],maxHeight:[8,"max-height"],listLabel:[1,"list-label"],listbox:[516],density:[514],closing:[32],sectioned:[32],empty:[32],hasSubmenu:[32],listboxMode:[32],setComboboxElement:[64],setVirtualProvider:[64],getScrollViewport:[64],show:[64],reposition:[64],close:[64]},[[0,"focusin","handleFocusIn"],[0,"keydown","handleKeyDown"]],{emptyText:[{onEmptyTextChange:0}],variant:[{onVariantChange:0}],useGap:[{onVariantChange:0}],open:[{onOpenChange:0}]}]);function p(){if(typeof customElements==="undefined"){return}const e=["md-menu"];e.forEach((e=>{switch(e){case"md-menu":if(!customElements.get(r(e))){customElements.define(r(e),f)}break}}))}p();export{f as M,p as d};
2
+ //# sourceMappingURL=p-C77M30dm.js.map
@@ -1,2 +1,2 @@
1
- import{p as t,H as s,c as i,f as e,h as a,d as n,t as r}from"./p-bSpXNc5J.js";import{V as o,i as l,n as h,r as d,c,l as m}from"./p-Bz-JaJcA.js";import{s as p,a as u,g as f,c as g,r as y}from"./p-DWxN44zD.js";import{p as b}from"./p-CxhZdOPw.js";import{d as _}from"./p-IWA0yIjJ.js";import{d as x}from"./p-CG6FaRlt.js";import{d as v}from"./p-CSrxeWwL.js";import{d as w}from"./p-DF19mmLl.js";import{d as k}from"./p-DfcpeJAu.js";import{d as z}from"./p-Hm3X1iai.js";import{d as C}from"./p-CrbzXk64.js";const V=()=>`:host{--md-text-field-padding-inline-end:var(--md-sys-spacing-inset-lg, 16px);display:inline-block;inline-size:var(--md-select-width, 100%);min-inline-size:var(--md-select-min-width, 0);box-sizing:border-box;font-family:var(--md-sys-typescale-body-large-font-family, Roboto, sans-serif)}.md-select__field{inline-size:100%;cursor:pointer;--md-text-field-cursor:pointer}.md-select__field::part(input){cursor:pointer}:host(.md-select--disabled) .md-select__field::part(input){cursor:not-allowed}.md-select__field .md-select__trailing{display:inline-flex;align-items:center;gap:var(--md-select-trailing-gap, 2px);width:auto;height:auto}.md-select__caret{font-size:var(--md-select-caret-size, 24px);line-height:1;color:var(--md-select-caret-color, var(--md-sys-color-on-surface-variant, #49454F));transition:transform var(--md-sys-motion-duration-short4, 200ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1))}:host(.md-select--open) .md-select__caret{transform:rotate(180deg)}@media (prefers-reduced-motion: reduce){.md-select__caret{transition:none}}.md-select__loader{display:inline-flex;align-items:center;justify-content:center;inline-size:24px;block-size:24px;--md-loading-indicator-size:var(--md-select-spinner-size, 22px);--md-loading-indicator-shape-size:var(--md-select-spinner-size, 22px)}:host([full-width]){display:block;inline-size:100%}.md-select__loading{display:flex;align-items:center;padding-block:var(--md-sys-spacing-inset-lg, 16px);padding-inline:var(--md-sys-spacing-inset-lg, 16px)}.md-select__loading md-progress-indicator{inline-size:100%}.md-select__field .md-select__clear{--_clear-color:var(--md-select-clear-color, var(--md-select-caret-color, var(--md-sys-color-on-surface-variant, #49454F)));--md-icon-button-container-width:24px;--md-icon-button-container-height:24px;--md-icon-button-icon-size:18px;--md-icon-button-icon-color:var(--_clear-color);--md-icon-button-state-layer-color:var(--_clear-color)}.md-select__option-icon{font-size:20px;line-height:1;color:var(--md-select-option-icon-color, var(--md-sys-color-on-surface-variant, #49454F))}:host(.md-select--disabled){cursor:default}:host(.md-select--disabled) .md-select__field{--md-text-field-cursor:not-allowed}.material-symbols-outlined{font-family:var(--md-sys-icon-font-family, 'Material Symbols Outlined', 'Material Icons');font-weight:normal;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;overflow-wrap:normal;direction:ltr;font-feature-settings:'liga';-webkit-font-smoothing:antialiased}.md-select__vspacer{display:block;flex:none;pointer-events:none}.md-select__search-wrap{position:relative;display:block}.md-select__search{box-sizing:border-box;width:100%;border:none;outline:none;padding:12px 44px 12px 16px;font:inherit;color:var(--md-sys-color-on-surface, #1d1b20);background:var(--md-sys-color-surface-container, #f3edf7);border-bottom:1px solid var(--md-sys-color-outline-variant, #cac4d0)}.md-select__search::placeholder{color:var(--md-sys-color-on-surface-variant, #49454f)}.md-select__search-spinner{position:absolute;inset-block-start:50%;inset-inline-end:12px;margin-block-start:-12px;--md-loading-indicator-size:24px;--md-loading-indicator-shape-size:18px;pointer-events:none}:host([density='-1']){--md-sys-density-scale:-1}:host([density='-2']){--md-sys-density-scale:-2}:host([density='-3']){--md-sys-density-scale:-3}:host([density='-4']){--md-sys-density-scale:-4}`;let O=0;const M=200;const T=180;const $=t(class t extends s{constructor(t){super();if(t!==false){this.__registerHost()}this.__attachShadow();this.mdChange=i(this,"mdChange",7);this.mdOpen=i(this,"mdOpen",7);this.mdClose=i(this,"mdClose",7);this.mdValidityChange=i(this,"mdValidityChange",5);this.internals=this.attachInternals();this.valueMissingLabel="Please select an item in the list.";this.reserveSupportingSpace=false;this.customValidityMessage="";this.variant="outlined";this.label="";this.placeholder="";this.value="";this.disabled=false;this.required=false;this.error=false;this.errorText="";this.supportingText="";this.density=0;this.clearable=false;this.matchTriggerWidth=true;this.placement="bottom-start";this.options=[];this.virtualize="auto";this.filterable=false;this.filterMode="substring";this.name="";this.searchPlaceholder="Search…";this.filterLabel="";this.noResultsText="No results";this.noOptionsText="No options";this.clearLabel="Clear selection";this.searchingLabel="Searching";this.loadingText="Loading…";this.clearIcon="close";this.dropdownIcon="arrow_drop_down";this.loading=false;this.fullWidth=false;this.open=false;this.optionsData=[];this.triggerId=`md-select-${++O}`;this.vc=new o({queryItem:t=>this.el.shadowRoot?.querySelector(`md-menu-item[data-vindex="${t}"]`)??null,requestRender:()=>e(this)});this.providerSet=false;this.selectedLabel="";this.query="";this.searching=false;this.queryText=null;this.defaultValue="";this.lastValidityKey=null;this._syncGuard=false;this._lastEmit=null;this.toggleOpen=()=>{if(this.disabled)return;this.open=!this.open};this.selectValue=t=>{if(this.value===t){this.open=false;return}this.value=t;this.mdChange.emit(t);this.open=false;this.fieldEl?.focus?.()};this.clearValue=t=>{t.stopPropagation();if(this.disabled||!this.value)return;this.value="";this.mdChange.emit("")};this.vpWired=false;this.handleMenuOpen=()=>{this._syncGuard=true;this.open=true;this._syncGuard=false;if(this._lastEmit!=="open"){this._lastEmit="open";this.mdOpen.emit()}if(this.vc.active){this.wireViewport();if(this.filterable){requestAnimationFrame((()=>{const t=this.el.shadowRoot?.querySelector(".md-select__search");t?.focus();void this.menuEl?.setComboboxElement?.(t)}))}}};this.handleMenuClose=()=>{this._syncGuard=true;this.open=false;this._syncGuard=false;if(this.query)this.query="";if(this._lastEmit!=="close"){this._lastEmit="close";this.mdClose.emit()}void this.menuEl?.setComboboxElement?.(null);this.vc.detachViewport();this.vpWired=false};this.onSearchInput=t=>{const s=t.target.value;this.queryText=null;if(!this.vc.active){this.query=s;return}if(!this.searching){this.searching=true;e(this)}clearTimeout(this.searchDebounce);this.searchDebounce=setTimeout((()=>{this.vc.setQuery(s);this.searching=false;e(this)}),T)}}get optionList(){return b(this.options,"md-select","options")}async show(){if(this.disabled)return;this.open=true}async close(){this.open=false}async focusTrigger(){this.fieldEl?.focus?.()}async reset(){if(!this.value)return;this.value="";this.mdChange.emit("")}async loadOptions(t){if(this.virtualize==="never"||!l()){this.vc.reset();this.optionsData=h(d(t));return}this.optionsData=[];this.vc.setFixedRowHeight(this.rowHeight);this.vc.setFilterMode(this.filterMode);const s=await this.vc.load(t);if(!s){this.vc.reset();this.optionsData=h(d(t))}else{this.updateSelectedLabel()}e(this)}async setQuery(t){this.vc.setQuery(t);if(!this.vc.active)this.query=t;this.queryText=t;this.syncSearchField();e(this)}syncSearchField(){if(this.queryText===null)return;const t=this.el.shadowRoot?.querySelector(".md-select__search");if(!t)return;t.value=this.queryText;this.queryText=null}async getLabels(t){return Object.fromEntries(this.vc.getLabels(t))}componentWillLoad(){this.refreshOptions();if(!this.value){const t=this.optionsData.find((t=>t.selected&&!t.disabled));if(t)this.value=t.value}this.defaultValue=this.value;this.syncFormValue()}syncFormValue(){p(this.internals,this.value||null);this.updateSelectedLabel();this.syncValidity()}syncValidity(){u(this.internals,{missing:this.required&&!this.value,missingMessage:this.valueMissingLabel,customMessage:this.customValidityMessage});this.emitValidityChange()}async getValidity(){return f(this.internals)}emitValidityChange(){const t=f(this.internals);const s=`${t.valid}|${t.validationMessage}`;if(this.lastValidityKey===s)return;const i=this.lastValidityKey!==null;this.lastValidityKey=s;if(i)this.mdValidityChange.emit(t)}async checkValidity(){return g(this.internals)}async reportValidity(){return y(this.internals)}async setCustomValidity(t){this.customValidityMessage=t;this.syncValidity()}formResetCallback(){this.value=this.defaultValue}refreshOptions(){const t=c(this.el,this.optionList);const s=this.virtualize==="always"||this.virtualize==="auto"&&t.length>M;if(s&&l()&&t.length>0){this.optionsData=[];this.vc.setFixedRowHeight(this.rowHeight);this.vc.setFilterMode(this.filterMode);void this.vc.load(t).then((s=>{if(!s){this.optionsData=t;e(this)}else{this.updateSelectedLabel()}}))}else{this.vc.reset();this.optionsData=t}}updateSelectedLabel(){if(!this.value){this.selectedLabel=""}else if(this.vc.active){this.selectedLabel=this.vc.getLabels([this.value]).get(this.value)??this.selectedLabel}e(this)}onOptionChange(t){t.stopPropagation();this.refreshOptions()}syncMenu(t){if(this._syncGuard||!this.menuEl)return;if(t){this.menuEl.show?.({autoFocus:!(this.filterable&&this.vc.active)})}else{this.menuEl.close?.()}}handleKeyDown(t){if(this.disabled)return;if(!this.open&&(t.key==="ArrowDown"||t.key==="Enter"||t.key===" ")){t.preventDefault();this.open=true}else if(this.open&&t.key==="Escape"){t.preventDefault();this.open=false;this.fieldEl?.focus?.()}}wireViewport(){void(async()=>{const t=await(this.menuEl?.getScrollViewport?.())??null;if(!t||this.vpWired)return;this.vpWired=true;await this.vc.attachViewport((async()=>t))})()}componentDidRender(){this.syncSearchField();if(!this.menuEl)return;if(this.vc.active&&!this.providerSet){void this.menuEl.setVirtualProvider?.(this.vc.provider);this.providerSet=true}else if(!this.vc.active&&this.providerSet){void this.menuEl.setVirtualProvider?.(null);this.providerSet=false}if(this.open&&this.vc.active&&!this.vpWired)this.wireViewport()}disconnectedCallback(){clearTimeout(this.searchDebounce);this.vc.detachViewport()}get accessibleName(){if(this.label)return this.label;const t=this.el.getAttribute("aria-label");if(t&&t.trim())return t.trim();const s=this.el.getAttribute("aria-labelledby");if(s){const t=this.el.getRootNode();const i=s.trim().split(/\s+/).map((s=>t.getElementById?.(s)?.textContent?.trim()??"")).filter(Boolean).join(" ");if(i)return i}return""}renderTrigger(){const t=this.vc.active?this.selectedLabel:m(this.optionsData,this.value);const s=!!this.value&&!!t;const i=this.clearable&&s&&!this.disabled;const e=this.label?undefined:this.accessibleName||undefined;return a("md-text-field",{ref:t=>this.fieldEl=t,id:this.triggerId,class:"md-select__field",part:"field",exportparts:"container:field-container",variant:this.variant,label:this.label,"aria-label":e,placeholder:s?"":this.placeholder,value:t,readOnly:true,disabled:this.disabled,required:this.required,error:this.error,errorText:this.errorText,reserveSupportingSpace:this.reserveSupportingSpace,supportingText:this.supportingText,density:this.density,appearFocused:this.open,onClick:this.toggleOpen},a("span",{slot:"trailing-icon",class:"md-select__trailing",part:"trailing","aria-hidden":"true"},this.loading?a("span",{class:"md-select__loader",part:"loading-spinner"},a("slot",{name:"loader"},a("md-loading-indicator",{label:this.loadingText}))):[i&&a("md-icon-button",{class:"md-select__clear",part:"clear",size:"xs",icon:this.clearIcon,"aria-label":this.clearLabel,shapeMorph:false,groupTabindex:-1,onClick:this.clearValue}),a("span",{class:"md-select__caret material-symbols-outlined",part:"caret"},a("slot",{name:"dropdown-icon"},this.dropdownIcon))]))}renderVirtualOptions(){return a("div",{class:"md-select__listbox",role:"listbox",id:`${this.triggerId}-listbox`,"aria-label":this.accessibleName||"Options"},a("div",{class:"md-select__vspacer",style:{height:`${this.vc.topPad}px`},"aria-hidden":"true"}),this.vc.windowRows.map(((t,s)=>{const i=this.vc.windowStart+s;const e=t.value===this.value;return a("md-menu-item",{key:t.index,id:`${this.triggerId}-opt-${i}`,"data-vindex":i,presentation:"option",type:"radio","check-position":"start","keep-open":true,part:e?"option option-selected":"option",disabled:t.disabled,selected:e,headline:t.label,"supporting-text":t.supportingText||"","aria-setsize":this.vc.filteredLength,"aria-posinset":i+1,onMdClick:()=>this.selectValue(t.value)},t.icon?a("span",{slot:"leading-icon",part:"option-icon",class:"material-symbols-outlined md-select__option-icon","aria-hidden":"true"},t.icon):null,t.label)})),a("div",{class:"md-select__vspacer",style:{height:`${this.vc.bottomPad}px`},"aria-hidden":"true"}))}renderMenu(){const t=this.vc.active;const s=this.filterable&&!t?this.query.trim().toLowerCase():"";const i=s?this.optionsData.filter((t=>t.label.toLowerCase().includes(s)||(t.supportingText||"").toLowerCase().includes(s))):this.optionsData;const e=this.loading?"":t?this.vc.filteredLength===0?this.noResultsText:"":this.optionsData.length===0?this.noOptionsText:s&&i.length===0?this.noResultsText:"";const n=t?this.maxHeight??320:this.maxHeight;return a("md-menu",{ref:t=>this.menuEl=t,anchor:this.triggerId,placement:this.placement,"match-anchor-width":this.matchTriggerWidth||this.fullWidth,"max-height":n,"empty-text":e,listbox:true,"list-label":this.accessibleName||"Options",part:"menu",onMdOpen:this.handleMenuOpen,onMdClose:this.handleMenuClose},this.filterable&&!this.loading&&a("div",{slot:"header",class:"md-select__search-wrap",part:"search-wrap"},a("input",{class:"md-select__search",part:"search",type:"text",role:"combobox","aria-haspopup":"listbox","aria-expanded":String(this.open),"aria-controls":`${this.triggerId}-listbox`,"aria-autocomplete":"list",autocomplete:"off",placeholder:this.searchPlaceholder,"aria-label":this.filterLabel||(this.label?`Filter ${this.label}`:"Filter options"),onInput:this.onSearchInput,onClick:t=>t.stopPropagation()}),this.searching&&a("md-loading-indicator",{class:"md-select__search-spinner",part:"search-spinner",label:this.searchingLabel,"aria-hidden":"true"})),this.loading?a("div",{class:"md-select__loading",part:"loading-bar",role:"status","aria-label":this.loadingText},a("md-progress-indicator",{variant:"linear",indeterminate:true,wave:true,part:"loading-progress",label:this.loadingText})):t?this.renderVirtualOptions():a("div",{class:"md-select__listbox",role:"listbox",id:`${this.triggerId}-listbox`,"aria-label":this.accessibleName||"Options"},i.map((t=>a("md-menu-item",{key:t.value,id:`${this.triggerId}-opt-${t.value}`,presentation:"option",type:"radio","check-position":"start","keep-open":true,part:t.value===this.value?"option option-selected":"option",disabled:t.disabled,selected:t.value===this.value,headline:t.label,"supporting-text":t.supportingText||"",onMdClick:()=>this.selectValue(t.value)},t.icon?a("span",{slot:"leading-icon",part:"option-icon",class:"material-symbols-outlined md-select__option-icon",style:t.iconColor?{color:t.iconColor}:undefined,"aria-hidden":"true"},t.icon):null)))))}render(){return a(n,{key:"9673c714adf54a5c44d38754a7539d75a530e750",class:{"md-select":true,[`md-select--${this.variant}`]:true,"md-select--open":this.open,"md-select--disabled":this.disabled,"md-select--loading":this.loading},"aria-haspopup":"listbox","aria-busy":this.loading?"true":undefined},this.renderTrigger(),this.renderMenu(),a("div",{key:"4d83d5a2e165c72dfeddb87ad9679ecaaf964d44",class:"md-select__options",hidden:true},a("slot",{key:"0dbc2ee39737fc9fa38af8c0c2da4ca154807777",onSlotchange:()=>this.refreshOptions()})))}static get formAssociated(){return true}get el(){return this}static get watchers(){return{value:[{syncFormValue:0}],required:[{syncValidity:0}],valueMissingLabel:[{syncValidity:0}],options:[{refreshOptions:0}],open:[{syncMenu:0}]}}static get style(){return V()}},[321,"md-select",{valueMissingLabel:[1,"value-missing-label"],reserveSupportingSpace:[4,"reserve-supporting-space"],variant:[513],label:[1],placeholder:[1],value:[1537],disabled:[516],required:[516],error:[516],errorText:[1,"error-text"],supportingText:[1,"supporting-text"],density:[514],clearable:[516],matchTriggerWidth:[516,"match-trigger-width"],placement:[1],maxHeight:[8,"max-height"],options:[1],virtualize:[1],filterable:[4],filterMode:[1,"filter-mode"],rowHeight:[2,"row-height"],name:[513],searchPlaceholder:[1,"search-placeholder"],filterLabel:[1,"filter-label"],noResultsText:[1,"no-results-text"],noOptionsText:[1,"no-options-text"],clearLabel:[1,"clear-label"],searchingLabel:[1,"searching-label"],loadingText:[1,"loading-text"],clearIcon:[1,"clear-icon"],dropdownIcon:[1,"dropdown-icon"],loading:[516],fullWidth:[516,"full-width"],open:[1540],optionsData:[32],triggerId:[32],query:[32],show:[64],close:[64],focusTrigger:[64],reset:[64],loadOptions:[64],setQuery:[64],getLabels:[64],getValidity:[64],checkValidity:[64],reportValidity:[64],setCustomValidity:[64]},[[0,"mdSelectOptionChange","onOptionChange"],[0,"keydown","handleKeyDown"]],{value:[{syncFormValue:0}],required:[{syncValidity:0}],valueMissingLabel:[{syncValidity:0}],options:[{refreshOptions:0}],open:[{syncMenu:0}]}]);function j(){if(typeof customElements==="undefined"){return}const t=["md-select","md-icon-button","md-loading-indicator","md-menu","md-menu-item","md-progress-indicator","md-ripple","md-text-field"];t.forEach((t=>{switch(t){case"md-select":if(!customElements.get(r(t))){customElements.define(r(t),$)}break;case"md-icon-button":if(!customElements.get(r(t))){_()}break;case"md-loading-indicator":if(!customElements.get(r(t))){x()}break;case"md-menu":if(!customElements.get(r(t))){v()}break;case"md-menu-item":if(!customElements.get(r(t))){w()}break;case"md-progress-indicator":if(!customElements.get(r(t))){k()}break;case"md-ripple":if(!customElements.get(r(t))){z()}break;case"md-text-field":if(!customElements.get(r(t))){C()}break}}))}j();export{$ as M,j as d};
2
- //# sourceMappingURL=p-Bmu7RqHM.js.map
1
+ import{p as t,H as s,c as i,f as e,h as a,d as n,t as r}from"./p-BR6gfOQH.js";import{L as o}from"./p-DPqGg8C1.js";import{V as l,i as h,n as c,r as d,c as m,l as p}from"./p-Bz-JaJcA.js";import{s as u,a as f,g,c as y,r as b}from"./p-DWxN44zD.js";import{p as _}from"./p-CxhZdOPw.js";import{d as x}from"./p-zMR3UIR_.js";import{d as v}from"./p-C77M30dm.js";import{d as w}from"./p-2HV152w7.js";import{d as k}from"./p-tSoecrcz.js";import{d as z}from"./p-De3E5Q8v.js";import{d as V}from"./p-D5Ht729E.js";const C=()=>`:host{--md-text-field-padding-inline-end:var(--md-sys-spacing-inset-lg, 16px);display:inline-block;inline-size:var(--md-select-width, 100%);min-inline-size:var(--md-select-min-width, 0);box-sizing:border-box;font-family:var(--md-sys-typescale-body-large-font-family, Roboto, sans-serif)}.md-select__field{inline-size:100%;cursor:pointer;--md-text-field-cursor:pointer}.md-select__field::part(input){cursor:pointer}:host(.md-select--disabled) .md-select__field::part(input){cursor:not-allowed}.md-select__field .md-select__trailing{display:inline-flex;align-items:center;gap:var(--md-select-trailing-gap, 2px);width:auto;height:auto}.md-select__caret{font-size:var(--md-select-caret-size, 24px);line-height:1;color:var(--md-select-caret-color, var(--md-sys-color-on-surface-variant, #49454F));transition:transform var(--md-sys-motion-duration-short4, 200ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1))}:host(.md-select--open) .md-select__caret{transform:rotate(180deg)}@media (prefers-reduced-motion: reduce){.md-select__caret{transition:none}}.md-select__loader{display:inline-flex;align-items:center;justify-content:center;inline-size:24px;block-size:24px;--md-loading-indicator-size:var(--md-select-spinner-size, 22px);--md-loading-indicator-shape-size:var(--md-select-spinner-size, 22px)}:host([full-width]){display:block;inline-size:100%}.md-select__loading{display:flex;align-items:center;padding-block:var(--md-sys-spacing-inset-lg, 16px);padding-inline:var(--md-sys-spacing-inset-lg, 16px)}.md-select__loading md-progress-indicator{inline-size:100%}.md-select__field .md-select__clear{--_clear-color:var(--md-select-clear-color, var(--md-select-caret-color, var(--md-sys-color-on-surface-variant, #49454F)));--md-icon-button-container-width:24px;--md-icon-button-container-height:24px;--md-icon-button-icon-size:18px;--md-icon-button-icon-color:var(--_clear-color);--md-icon-button-state-layer-color:var(--_clear-color)}.md-select__option-icon{font-size:20px;line-height:1;color:var(--md-select-option-icon-color, var(--md-sys-color-on-surface-variant, #49454F))}:host(.md-select--disabled){cursor:default}:host(.md-select--disabled) .md-select__field{--md-text-field-cursor:not-allowed}.material-symbols-outlined{font-family:var(--md-sys-icon-font-family, 'Material Symbols Outlined', 'Material Icons');font-weight:normal;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;overflow-wrap:normal;direction:ltr;font-feature-settings:'liga';-webkit-font-smoothing:antialiased}.md-select__vspacer{display:block;flex:none;pointer-events:none}.md-select__search-wrap{position:relative;display:block}.md-select__search{box-sizing:border-box;width:100%;border:none;outline:none;padding:12px 44px 12px 16px;font:inherit;color:var(--md-sys-color-on-surface, #1d1b20);background:var(--md-sys-color-surface-container, #f3edf7);border-bottom:1px solid var(--md-sys-color-outline-variant, #cac4d0)}.md-select__search::placeholder{color:var(--md-sys-color-on-surface-variant, #49454f)}.md-select__search-spinner{position:absolute;inset-block-start:50%;inset-inline-end:12px;margin-block-start:-12px;--md-loading-indicator-size:24px;--md-loading-indicator-shape-size:18px;pointer-events:none}:host([density='-1']){--md-sys-density-scale:-1}:host([density='-2']){--md-sys-density-scale:-2}:host([density='-3']){--md-sys-density-scale:-3}:host([density='-4']){--md-sys-density-scale:-4}`;let M=0;const O=200;const T=180;const $=t(class t extends s{constructor(t){super();if(t!==false){this.__registerHost()}this.__attachShadow();this.mdChange=i(this,"mdChange",7);this.mdOpen=i(this,"mdOpen",7);this.mdClose=i(this,"mdClose",7);this.mdValidityChange=i(this,"mdValidityChange",5);this.internals=this.attachInternals();this.valueMissingLabel="Please select an item in the list.";this.reserveSupportingSpace=false;this.customValidityMessage="";this.variant="outlined";this.label="";this.placeholder="";this.value="";this.disabled=false;this.required=false;this.error=false;this.errorText="";this.supportingText="";this.density=0;this.clearable=false;this.matchTriggerWidth=true;this.placement="bottom-start";this.options=[];this.virtualize="auto";this.filterable=false;this.filterMode="substring";this.name="";this.searchPlaceholder="Search…";this.filterLabel="";this.noResultsText="No results";this.noOptionsText="No options";this.clearLabel="Clear selection";this.searchingLabel="Searching";this.loadingText="Loading…";this.clearIcon="close";this.dropdownIcon="arrow_drop_down";this.loading=false;this.fullWidth=false;this.open=false;this.optionsData=[];this.triggerId=`md-select-${++M}`;this.vc=new l({queryItem:t=>this.el.shadowRoot?.querySelector(`md-menu-item[data-vindex="${t}"]`)??null,requestRender:()=>e(this)});this.providerSet=false;this.selectedLabel="";this.query="";this.searching=false;this.queryText=null;this.defaultValue="";this.lastValidityKey=null;this._syncGuard=false;this._lastEmit=null;this.toggleOpen=()=>{if(this.disabled)return;this.open=!this.open};this.selectValue=t=>{if(this.value===t){this.open=false;return}this.value=t;this.mdChange.emit(t);this.open=false;this.fieldEl?.focus?.()};this.clearValue=t=>{t.stopPropagation();if(this.disabled||!this.value)return;this.value="";this.mdChange.emit("")};this.vpWired=false;this.handleMenuOpen=()=>{this._syncGuard=true;this.open=true;this._syncGuard=false;if(this._lastEmit!=="open"){this._lastEmit="open";this.mdOpen.emit()}if(this.vc.active){this.wireViewport();if(this.filterable){requestAnimationFrame((()=>{const t=this.el.shadowRoot?.querySelector(".md-select__search");t?.focus();void this.menuEl?.setComboboxElement?.(t)}))}}};this.handleMenuClose=()=>{this._syncGuard=true;this.open=false;this._syncGuard=false;if(this.query)this.query="";if(this._lastEmit!=="close"){this._lastEmit="close";this.mdClose.emit()}void this.menuEl?.setComboboxElement?.(null);this.vc.detachViewport();this.vpWired=false};this.onSearchInput=t=>{const s=t.target.value;this.queryText=null;if(!this.vc.active){this.query=s;return}if(!this.searching){this.searching=true;e(this)}clearTimeout(this.searchDebounce);this.searchDebounce=setTimeout((()=>{this.vc.setQuery(s);this.searching=false;e(this)}),T)}}get optionList(){return _(this.options,"md-select","options")}async show(){if(this.disabled)return;this.open=true}async close(){this.open=false}async focusTrigger(){this.fieldEl?.focus?.()}async reset(){if(!this.value)return;this.value="";this.mdChange.emit("")}async loadOptions(t){if(this.virtualize==="never"||!h()){this.vc.reset();this.optionsData=c(d(t));return}this.optionsData=[];this.vc.setFixedRowHeight(this.rowHeight);this.vc.setFilterMode(this.filterMode);const s=await this.vc.load(t);if(!s){this.vc.reset();this.optionsData=c(d(t))}else{this.updateSelectedLabel()}e(this)}async setQuery(t){this.vc.setQuery(t);if(!this.vc.active)this.query=t;this.queryText=t;this.syncSearchField();e(this)}syncSearchField(){if(this.queryText===null)return;const t=this.el.shadowRoot?.querySelector(".md-select__search");if(!t)return;t.value=this.queryText;this.queryText=null}async getLabels(t){return Object.fromEntries(this.vc.getLabels(t))}componentWillLoad(){this.refreshOptions();if(!this.value){const t=this.optionsData.find((t=>t.selected&&!t.disabled));if(t)this.value=t.value}this.defaultValue=this.value;this.syncFormValue()}syncFormValue(){u(this.internals,this.value||null);this.updateSelectedLabel();this.syncValidity()}syncValidity(){f(this.internals,{missing:this.required&&!this.value,missingMessage:this.valueMissingLabel,customMessage:this.customValidityMessage});this.emitValidityChange()}async getValidity(){return g(this.internals)}emitValidityChange(){const t=g(this.internals);const s=`${t.valid}|${t.validationMessage}`;if(this.lastValidityKey===s)return;const i=this.lastValidityKey!==null;this.lastValidityKey=s;if(i)this.mdValidityChange.emit(t)}async checkValidity(){return y(this.internals)}async reportValidity(){return b(this.internals)}async setCustomValidity(t){this.customValidityMessage=t;this.syncValidity()}formResetCallback(){this.value=this.defaultValue}refreshOptions(){const t=m(this.el,this.optionList);const s=this.virtualize==="always"||this.virtualize==="auto"&&t.length>O;if(s&&h()&&t.length>0){this.optionsData=[];this.vc.setFixedRowHeight(this.rowHeight);this.vc.setFilterMode(this.filterMode);void this.vc.load(t).then((s=>{if(!s){this.optionsData=t;e(this)}else{this.updateSelectedLabel()}}))}else{this.vc.reset();this.optionsData=t}}updateSelectedLabel(){if(!this.value){this.selectedLabel=""}else if(this.vc.active){this.selectedLabel=this.vc.getLabels([this.value]).get(this.value)??this.selectedLabel}e(this)}onOptionChange(t){t.stopPropagation();this.refreshOptions()}syncMenu(t){if(this._syncGuard||!this.menuEl)return;if(t){this.menuEl.show?.({autoFocus:!(this.filterable&&this.vc.active)})}else{this.menuEl.close?.()}}handleKeyDown(t){if(this.disabled)return;if(!this.open&&(t.key==="ArrowDown"||t.key==="Enter"||t.key===" ")){t.preventDefault();this.open=true}else if(this.open&&t.key==="Escape"){t.preventDefault();this.open=false;this.fieldEl?.focus?.()}}wireViewport(){void(async()=>{const t=await(this.menuEl?.getScrollViewport?.())??null;if(!t||this.vpWired)return;this.vpWired=true;await this.vc.attachViewport((async()=>t))})()}componentDidRender(){this.syncSearchField();if(!this.menuEl)return;if(this.vc.active&&!this.providerSet){void this.menuEl.setVirtualProvider?.(this.vc.provider);this.providerSet=true}else if(!this.vc.active&&this.providerSet){void this.menuEl.setVirtualProvider?.(null);this.providerSet=false}if(this.open&&this.vc.active&&!this.vpWired)this.wireViewport()}disconnectedCallback(){clearTimeout(this.searchDebounce);this.vc.detachViewport()}get accessibleName(){if(this.label)return this.label;const t=this.el.getAttribute("aria-label");if(t&&t.trim())return t.trim();const s=this.el.getAttribute("aria-labelledby");if(s){const t=this.el.getRootNode();const i=s.trim().split(/\s+/).map((s=>t.getElementById?.(s)?.textContent?.trim()??"")).filter(Boolean).join(" ");if(i)return i}return""}renderTrigger(){const t=this.vc.active?this.selectedLabel:p(this.optionsData,this.value);const s=!!this.value&&!!t;const i=this.clearable&&s&&!this.disabled;const e=this.label?undefined:this.accessibleName||undefined;return a("md-text-field",{ref:t=>this.fieldEl=t,id:this.triggerId,class:"md-select__field",part:"field",exportparts:"container:field-container",variant:this.variant,label:this.label,"aria-label":e,placeholder:s?"":this.placeholder,value:t,readOnly:true,disabled:this.disabled,required:this.required,error:this.error,errorText:this.errorText,reserveSupportingSpace:this.reserveSupportingSpace,supportingText:this.supportingText,density:this.density,appearFocused:this.open,onClick:this.toggleOpen},a("span",{slot:"trailing-icon",class:"md-select__trailing",part:"trailing","aria-hidden":"true"},this.loading?a("span",{class:"md-select__loader",part:"loading-spinner"},a("slot",{name:"loader"},a(o,{label:this.loadingText}))):[i&&a("md-icon-button",{class:"md-select__clear",part:"clear",size:"xs",icon:this.clearIcon,"aria-label":this.clearLabel,shapeMorph:false,groupTabindex:-1,onClick:this.clearValue}),a("span",{class:"md-select__caret material-symbols-outlined",part:"caret"},a("slot",{name:"dropdown-icon"},this.dropdownIcon))]))}renderVirtualOptions(){return a("div",{class:"md-select__listbox",role:"listbox",id:`${this.triggerId}-listbox`,"aria-label":this.accessibleName||"Options"},a("div",{class:"md-select__vspacer",style:{height:`${this.vc.topPad}px`},"aria-hidden":"true"}),this.vc.windowRows.map(((t,s)=>{const i=this.vc.windowStart+s;const e=t.value===this.value;return a("md-menu-item",{key:t.index,id:`${this.triggerId}-opt-${i}`,"data-vindex":i,presentation:"option",type:"radio","check-position":"start","keep-open":true,part:e?"option option-selected":"option",disabled:t.disabled,selected:e,headline:t.label,"supporting-text":t.supportingText||"","aria-setsize":this.vc.filteredLength,"aria-posinset":i+1,onMdClick:()=>this.selectValue(t.value)},t.icon?a("span",{slot:"leading-icon",part:"option-icon",class:"material-symbols-outlined md-select__option-icon","aria-hidden":"true"},t.icon):null,t.label)})),a("div",{class:"md-select__vspacer",style:{height:`${this.vc.bottomPad}px`},"aria-hidden":"true"}))}renderMenu(){const t=this.vc.active;const s=this.filterable&&!t?this.query.trim().toLowerCase():"";const i=s?this.optionsData.filter((t=>t.label.toLowerCase().includes(s)||(t.supportingText||"").toLowerCase().includes(s))):this.optionsData;const e=this.loading?"":t?this.vc.filteredLength===0?this.noResultsText:"":this.optionsData.length===0?this.noOptionsText:s&&i.length===0?this.noResultsText:"";const n=t?this.maxHeight??320:this.maxHeight;return a("md-menu",{ref:t=>this.menuEl=t,anchor:this.triggerId,placement:this.placement,"match-anchor-width":this.matchTriggerWidth||this.fullWidth,"max-height":n,"empty-text":e,listbox:true,"list-label":this.accessibleName||"Options",part:"menu",onMdOpen:this.handleMenuOpen,onMdClose:this.handleMenuClose},this.filterable&&!this.loading&&a("div",{slot:"header",class:"md-select__search-wrap",part:"search-wrap"},a("input",{class:"md-select__search",part:"search",type:"text",role:"combobox","aria-haspopup":"listbox","aria-expanded":String(this.open),"aria-controls":`${this.triggerId}-listbox`,"aria-autocomplete":"list",autocomplete:"off",placeholder:this.searchPlaceholder,"aria-label":this.filterLabel||(this.label?`Filter ${this.label}`:"Filter options"),onInput:this.onSearchInput,onClick:t=>t.stopPropagation()}),this.searching&&a(o,{class:"md-select__search-spinner",part:"search-spinner",label:this.searchingLabel,"aria-hidden":"true"})),this.loading?a("div",{class:"md-select__loading",part:"loading-bar",role:"status","aria-label":this.loadingText},a("md-progress-indicator",{variant:"linear",indeterminate:true,wave:true,part:"loading-progress",label:this.loadingText})):t?this.renderVirtualOptions():a("div",{class:"md-select__listbox",role:"listbox",id:`${this.triggerId}-listbox`,"aria-label":this.accessibleName||"Options"},i.map((t=>a("md-menu-item",{key:t.value,id:`${this.triggerId}-opt-${t.value}`,presentation:"option",type:"radio","check-position":"start","keep-open":true,part:t.value===this.value?"option option-selected":"option",disabled:t.disabled,selected:t.value===this.value,headline:t.label,"supporting-text":t.supportingText||"",onMdClick:()=>this.selectValue(t.value)},t.icon?a("span",{slot:"leading-icon",part:"option-icon",class:"material-symbols-outlined md-select__option-icon",style:t.iconColor?{color:t.iconColor}:undefined,"aria-hidden":"true"},t.icon):null)))))}render(){return a(n,{key:"80b4ba73a6076b553c86ecc8e1bfa2a32ca9eb1a",class:{"md-select":true,[`md-select--${this.variant}`]:true,"md-select--open":this.open,"md-select--disabled":this.disabled,"md-select--loading":this.loading},"aria-haspopup":"listbox","aria-busy":this.loading?"true":undefined},this.renderTrigger(),this.renderMenu(),a("div",{key:"3cb7f01eb33bd8025d26c0dffe52748a394d4091",class:"md-select__options",hidden:true},a("slot",{key:"2cc921cc04dc87830ca2ee4456eccd6dee79315a",onSlotchange:()=>this.refreshOptions()})))}static get formAssociated(){return true}get el(){return this}static get watchers(){return{value:[{syncFormValue:0}],required:[{syncValidity:0}],valueMissingLabel:[{syncValidity:0}],options:[{refreshOptions:0}],open:[{syncMenu:0}]}}static get style(){return C()}},[321,"md-select",{valueMissingLabel:[1,"value-missing-label"],reserveSupportingSpace:[4,"reserve-supporting-space"],variant:[513],label:[1],placeholder:[1],value:[1537],disabled:[516],required:[516],error:[516],errorText:[1,"error-text"],supportingText:[1,"supporting-text"],density:[514],clearable:[516],matchTriggerWidth:[516,"match-trigger-width"],placement:[1],maxHeight:[8,"max-height"],options:[1],virtualize:[1],filterable:[4],filterMode:[1,"filter-mode"],rowHeight:[2,"row-height"],name:[513],searchPlaceholder:[1,"search-placeholder"],filterLabel:[1,"filter-label"],noResultsText:[1,"no-results-text"],noOptionsText:[1,"no-options-text"],clearLabel:[1,"clear-label"],searchingLabel:[1,"searching-label"],loadingText:[1,"loading-text"],clearIcon:[1,"clear-icon"],dropdownIcon:[1,"dropdown-icon"],loading:[516],fullWidth:[516,"full-width"],open:[1540],optionsData:[32],triggerId:[32],query:[32],show:[64],close:[64],focusTrigger:[64],reset:[64],loadOptions:[64],setQuery:[64],getLabels:[64],getValidity:[64],checkValidity:[64],reportValidity:[64],setCustomValidity:[64]},[[0,"mdSelectOptionChange","onOptionChange"],[0,"keydown","handleKeyDown"]],{value:[{syncFormValue:0}],required:[{syncValidity:0}],valueMissingLabel:[{syncValidity:0}],options:[{refreshOptions:0}],open:[{syncMenu:0}]}]);function j(){if(typeof customElements==="undefined"){return}const t=["md-select","md-icon-button","md-menu","md-menu-item","md-progress-indicator","md-ripple","md-text-field"];t.forEach((t=>{switch(t){case"md-select":if(!customElements.get(r(t))){customElements.define(r(t),$)}break;case"md-icon-button":if(!customElements.get(r(t))){x()}break;case"md-menu":if(!customElements.get(r(t))){v()}break;case"md-menu-item":if(!customElements.get(r(t))){w()}break;case"md-progress-indicator":if(!customElements.get(r(t))){k()}break;case"md-ripple":if(!customElements.get(r(t))){z()}break;case"md-text-field":if(!customElements.get(r(t))){V()}break}}))}j();export{$ as M,j as d};
2
+ //# sourceMappingURL=p-CNgkGl_1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["mdSelectCss","selectIdCounter","VIRTUALIZE_THRESHOLD","SEARCH_DEBOUNCE_MS","MdSelect","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","valueMissingLabel","reserveSupportingSpace","customValidityMessage","variant","label","placeholder","value","disabled","required","error","errorText","supportingText","density","clearable","matchTriggerWidth","placement","options","virtualize","filterable","filterMode","name","searchPlaceholder","filterLabel","noResultsText","noOptionsText","clearLabel","searchingLabel","loadingText","clearIcon","dropdownIcon","loading","fullWidth","open","optionsData","triggerId","vc","VirtualSelectController","queryItem","i","el","shadowRoot","querySelector","requestRender","forceUpdate","providerSet","selectedLabel","query","searching","queryText","defaultValue","lastValidityKey","_syncGuard","_lastEmit","toggleOpen","selectValue","val","mdChange","emit","fieldEl","focus","clearValue","e","stopPropagation","vpWired","handleMenuOpen","mdOpen","active","wireViewport","requestAnimationFrame","input","menuEl","setComboboxElement","handleMenuClose","mdClose","detachViewport","onSearchInput","q","target","clearTimeout","searchDebounce","setTimeout","setQuery","optionList","parseJsonArrayProp","show","close","focusTrigger","reset","loadOptions","source","isWasmSupported","normalizeInits","rowsToArray","setFixedRowHeight","rowHeight","setFilterMode","ok","load","updateSelectedLabel","syncSearchField","getLabels","values","Object","fromEntries","componentWillLoad","refreshOptions","preselected","find","o","selected","syncFormValue","setFormValue","internals","syncValidity","setValidityState","missing","missingMessage","customMessage","emitValidityChange","getValidity","getValidityOf","v","key","valid","validationMessage","primed","mdValidityChange","checkValidity","checkValidityOf","reportValidity","reportValidityOf","setCustomValidity","message","formResetCallback","data","collectOptions","shouldVirtualize","length","then","get","onOptionChange","syncMenu","autoFocus","handleKeyDown","preventDefault","vp","getScrollViewport","attachViewport","async","componentDidRender","setVirtualProvider","provider","disconnectedCallback","accessibleName","ariaLabel","getAttribute","trim","labelledby","root","getRootNode","text","split","map","id","getElementById","textContent","filter","Boolean","join","renderTrigger","display","labelFor","hasValue","showClear","fieldAriaLabel","undefined","h","ref","class","part","exportparts","readOnly","appearFocused","onClick","slot","LazyLoadingIndicator","size","icon","shapeMorph","groupTabindex","renderVirtualOptions","role","style","height","topPad","windowRows","row","filteredIndex","windowStart","index","presentation","type","headline","filteredLength","onMdClick","bottomPad","renderMenu","virtual","toLowerCase","listOptions","includes","emptyText","menuMaxHeight","maxHeight","anchor","listbox","onMdOpen","onMdClose","String","autocomplete","onInput","indeterminate","wave","opt","iconColor","color","render","Host","hidden","onSlotchange"],"sources":["src/components/md-select/md-select.css?tag=md-select&encapsulation=shadow","src/components/md-select/md-select.tsx"],"sourcesContent":["/* ==========================================================\n md-select — single-select dropdown\n\n The heavy lifting (field surface, label float, error state, menu\n motion + positioning + keyboard) is delegated to md-text-field and\n md-menu. This stylesheet only owns the host layout and the trailing\n caret / clear affordances rendered into the field's trailing slot.\n\n PUBLIC CSS CUSTOM PROPERTIES (select-owned):\n --md-select-width Host inline size (default 100%)\n --md-select-min-width Host minimum inline size (default 0)\n --md-select-caret-color Dropdown caret colour\n --md-select-caret-size Dropdown caret glyph size (default 24px)\n --md-select-clear-color Clear (✕) icon colour (default: caret colour)\n --md-select-trailing-gap Gap between clear + caret (default 2px)\n --md-select-option-icon-color Leading icon colour in option rows\n\n The composed field + menu expose their own --md-text-field-* / --md-menu-*\n / --md-menu-item-* tokens, which flow straight through when set on the host.\n\n PUBLIC PARTS:\n field, field-container, trailing, clear, caret, menu,\n option, option-selected, option-icon\n ========================================================== */\n\n:host {\n /* The text inset already includes the caret's 7px optical bearing (see\n md-text-field --_text-inset). Pull the TRAILING side back to the plain\n box inset so the caret's BOX sits 7px shallower and its INK lands on the\n same column as the text. */\n --md-text-field-padding-inline-end: var(--md-sys-spacing-inset-lg, 16px);\n display: inline-block;\n inline-size: var(--md-select-width, 100%);\n min-inline-size: var(--md-select-min-width, 0);\n box-sizing: border-box;\n font-family: var(--md-sys-typescale-body-large-font-family, Roboto, sans-serif);\n}\n\n.md-select__field {\n inline-size: 100%;\n cursor: pointer;\n --md-text-field-cursor: pointer;\n}\n\n/* Override the browser's default text cursor on the readonly input —\n the whole field behaves as a button, not an editable field. */\n.md-select__field::part(input) {\n cursor: pointer;\n}\n\n:host(.md-select--disabled) .md-select__field::part(input) {\n cursor: not-allowed;\n}\n\n/* ── Trailing cluster (clear + caret) ───────────────────── */\n\n/* The trailing slot holds a *cluster* (clear + caret), but md-text-field\n sizes any single slotted trailing icon to a fixed 24px box via\n `.md-text-field__icon ::slotted(*)` — which would squash the cluster and\n push the caret off the edge. Scoping under `.md-select__field` raises this\n rule's specificity above that ::slotted rule so the cluster sizes to its\n content across the shadow boundary. */\n.md-select__field .md-select__trailing {\n display: inline-flex;\n align-items: center;\n gap: var(--md-select-trailing-gap, 2px);\n width: auto;\n height: auto;\n}\n\n\n.md-select__caret {\n font-size: var(--md-select-caret-size, 24px);\n line-height: 1;\n color: var(--md-select-caret-color, var(--md-sys-color-on-surface-variant, #49454F));\n transition: transform var(--md-sys-motion-duration-short4, 200ms)\n var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1));\n}\n\n/* Flip the caret when open — works for any custom dropdown-icon, not just the\n default arrow (which then reads as \"up\"). */\n:host(.md-select--open) .md-select__caret {\n transform: rotate(180deg);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .md-select__caret {\n transition: none;\n }\n}\n\n/* Busy state: the spinner replaces the caret/clear cluster in the trigger. The\n default md-loading-indicator is 48px — shrink it to the trailing footprint. */\n.md-select__loader {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n inline-size: 24px;\n block-size: 24px;\n --md-loading-indicator-size: var(--md-select-spinner-size, 22px);\n --md-loading-indicator-shape-size: var(--md-select-spinner-size, 22px);\n}\n\n/* Full-width: fill the parent's inline size as a block (overrides the default\n inline-block sizing). The dropdown follows via match-trigger-width. */\n:host([full-width]) {\n display: block;\n inline-size: 100%;\n}\n\n/* Busy state inside the menu: the wavy linear progress bar fills the surface\n width with comfortable padding (replaces the old \"Loading…\" text). */\n.md-select__loading {\n display: flex;\n align-items: center;\n padding-block: var(--md-sys-spacing-inset-lg, 16px);\n padding-inline: var(--md-sys-spacing-inset-lg, 16px);\n}\n\n.md-select__loading md-progress-indicator {\n inline-size: 100%;\n}\n\n/* Clear affordance is an md-icon-button (ripple + state layer for free).\n Compact it to the prior 24px footprint; defaults to the caret colour so it\n sits inline with the caret, but is independently overridable. */\n.md-select__field .md-select__clear {\n --_clear-color: var(--md-select-clear-color,\n var(--md-select-caret-color, var(--md-sys-color-on-surface-variant, #49454F)));\n --md-icon-button-container-width: 24px;\n --md-icon-button-container-height: 24px;\n --md-icon-button-icon-size: 18px;\n --md-icon-button-icon-color: var(--_clear-color);\n --md-icon-button-state-layer-color: var(--_clear-color);\n}\n\n/* ── Option leading icon (in the menu rows) ─────────────── */\n\n.md-select__option-icon {\n font-size: 20px;\n line-height: 1;\n color: var(--md-select-option-icon-color, var(--md-sys-color-on-surface-variant, #49454F));\n}\n\n/* ── Disabled ───────────────────────────────────────────── */\n\n:host(.md-select--disabled) {\n cursor: default;\n}\n\n:host(.md-select--disabled) .md-select__field {\n --md-text-field-cursor: not-allowed;\n}\n\n/* Material Symbols inside the shadow root. */\n.material-symbols-outlined {\n font-family: var(--md-sys-icon-font-family, 'Material Symbols Outlined', 'Material Icons');\n font-weight: normal;\n font-style: normal;\n line-height: 1;\n letter-spacing: normal;\n text-transform: none;\n display: inline-block;\n white-space: nowrap;\n overflow-wrap: normal;\n direction: ltr;\n font-feature-settings: 'liga';\n -webkit-font-smoothing: antialiased;\n}\n\n/* ── Virtualized list ──────────────────────────────────── */\n\n/* Spacers reserve the full scroll height above/below the rendered window so\n the menu scrolls as if every option were present. */\n.md-select__vspacer {\n display: block;\n flex: none;\n pointer-events: none;\n}\n\n/* Search field pinned in the menu header (filterable virtualized lists). */\n.md-select__search-wrap {\n position: relative;\n display: block;\n}\n\n.md-select__search {\n box-sizing: border-box;\n width: 100%;\n border: none;\n outline: none;\n /* Right padding reserves room for the search spinner. */\n padding: 12px 44px 12px 16px;\n font: inherit;\n color: var(--md-sys-color-on-surface, #1d1b20);\n background: var(--md-sys-color-surface-container, #f3edf7);\n border-bottom: 1px solid var(--md-sys-color-outline-variant, #cac4d0);\n}\n\n.md-select__search::placeholder {\n color: var(--md-sys-color-on-surface-variant, #49454f);\n}\n\n/* M3 shape-morph loading indicator shown while a debounced search is in flight.\n Motion + reduced-motion handling live inside md-loading-indicator. */\n.md-select__search-spinner {\n position: absolute;\n inset-block-start: 50%;\n inset-inline-end: 12px;\n margin-block-start: -12px;\n --md-loading-indicator-size: 24px;\n --md-loading-indicator-shape-size: 18px;\n pointer-events: none;\n}\n\n/* ==========================================================\n DENSITY (local override)\n This component FORWARDS `density` to the md-text-field it embeds, which\n handles the field box — but that forward says nothing about this host, so its\n OWN chrome (dropdown surface, chips, frame gaps) stayed at density-0 whenever\n density came from the local prop rather than a global ancestor. Mapping the\n prop onto the shared signal here fixes that asymmetry; the spacing-token half\n of the rung arrives from the [density=\"-N\"] selector in tokens.css.\n ========================================================== */\n:host([density='-1']) { --md-sys-density-scale: -1; }\n:host([density='-2']) { --md-sys-density-scale: -2; }\n:host([density='-3']) { --md-sys-density-scale: -3; }\n:host([density='-4']) { --md-sys-density-scale: -4; }\n","import { AttachInternals, Component, Element, Event, EventEmitter, Host, Listen, Method, Prop, State, Watch, forceUpdate, h } from '@stencil/core';\nimport { LazyLoadingIndicator } from '../../utils/lazy-loading-indicator';\nimport {\n collectOptions,\n labelFor,\n normalizeInits,\n OptionRowSource,\n rowsToArray,\n SelectOptionData,\n SelectOptionInit,\n} from '../../utils/select-options';\nimport {\n setFormValue,\n setValidityState,\n checkValidityOf,\n reportValidityOf,\n getValidityOf,\n} from '../../utils/form';\nimport { VirtualSelectController } from '../../utils/virtual-select-controller';\nimport { isWasmSupported, FilterMode } from '../../utils/wasm-option-store';\nimport { VirtualMenuProvider } from '../../utils/types';\nimport { parseJsonArrayProp } from '../../utils/json-prop';\n\nlet selectIdCounter = 0;\n\n/** Above this many options, `virtualize=\"auto\"` switches to the WASM path. */\nconst VIRTUALIZE_THRESHOLD = 200;\n\n/** Idle time after a keystroke before the search query runs (debounce). */\nconst SEARCH_DEBOUNCE_MS = 180;\n\ntype VirtualMenuEl = HTMLElement & {\n show?: (opts?: { autoFocus?: boolean }) => Promise<void>;\n close?: () => Promise<void>;\n setVirtualProvider?: (p: VirtualMenuProvider | null) => Promise<void>;\n setComboboxElement?: (el: HTMLElement | null) => Promise<void>;\n getScrollViewport?: () => Promise<HTMLElement | null>;\n};\n\n/**\n * `md-select` — Material Design 3 single-select dropdown.\n *\n * Composes the library's own primitives instead of re-implementing them:\n * - `md-text-field` is the trigger surface, so the picker inherits the\n * full filled/outlined visuals, density scale, floating label, error\n * state, supporting text, and focus ring of every other input. It is\n * `readonly` (not editable) and `appear-focused` while the menu is open\n * so the field + menu read as one connected control.\n * - `md-menu` is the option surface, so the picker inherits open/close\n * motion, viewport-aware positioning, single-open coordination, roving\n * tabindex, type-ahead, and Escape/Home/End — for free.\n *\n * Options are authored either declaratively as slotted `<md-select-option>`\n * children (primary API) or via the programmatic `options` array. Each\n * becomes a `type=\"radio\"` `md-menu-item` so only one is ever selected.\n *\n * @slot - `md-select-option` children for the dropdown (primary authoring API).\n * @slot dropdown-icon - Replaces the caret glyph (e.g. a custom SVG). Rotates 180° when open.\n * @slot loader - Replaces the busy-state spinner shown in the trigger while `loading`.\n *\n * @part field - The inner `md-text-field` trigger surface.\n * @part field-container - The text-field's container box (border/fill).\n * @part trailing - The trailing cluster wrapping the clear + caret.\n * @part clear - The clear (✕) `md-icon-button`.\n * @part caret - The dropdown caret glyph.\n * @part loading-spinner - The busy-state spinner in the trigger (`loading`).\n * @part loading-bar - The busy-state container in the menu (`loading`).\n * @part loading-progress - The wavy progress indicator shown in the menu while `loading`.\n * @part menu - The `md-menu` option surface.\n * @part option - Each option row (`md-menu-item`).\n * @part option-selected - The currently selected option row.\n * @part option-icon - An option's leading icon.\n * @part search - The filter input (`filterable`).\n * @part search-spinner - The in-menu spinner shown while filtering.\n */\n@Component({\n tag: 'md-select',\n styleUrl: 'md-select.css',\n shadow: true,\n formAssociated: true,\n})\nexport class MdSelect {\n @Element() el!: HTMLElement;\n\n\n /**\n * Localized constraint-validation message shown when `required` is unmet.\n *\n * A prop rather than a hardcoded string, matching md-time-picker's\n * `value-missing-label`: components stay i18n-engine-agnostic and the\n * consumer localizes through its own dictionary. Native inputs get their\n * message from the browser's locale for free; a form-associated custom\n * element supplies its own, so leaving this hardcoded would ship an\n * English-only form to every locale.\n */\n @Prop({ attribute: 'value-missing-label' }) valueMissingLabel: string =\n 'Please select an item in the list.';\n\n\n /**\n * Always occupy the supporting-text line, even when there is no message, so a\n * validation error does not push the content below it down. Forwarded to the\n * embedded md-text-field. See that component for why it is opt-in.\n */\n @Prop({ attribute: 'reserve-supporting-space' }) reserveSupportingSpace: boolean = false;\n\n /** Message set via setCustomValidity(); non-empty wins over valueMissing. */\n private customValidityMessage = '';\n\n /**\n * Form-association handle. The select submits its `value` under the host's\n * `name` via `setFormValue`, so it participates in `<form>`/`FormData`\n * natively — a hidden `<input>` in the shadow root would be invisible to\n * `FormData`.\n */\n @AttachInternals() internals!: ElementInternals;\n\n /** Visual variant — forwarded to the inner `md-text-field`. */\n @Prop({ reflect: true }) variant: 'filled' | 'outlined' = 'outlined';\n\n /** Floating label / accessible name. */\n @Prop() label: string = '';\n\n /** Placeholder shown when no value is selected. */\n @Prop() placeholder: string = '';\n\n /** Selected option value. Empty string = nothing selected. */\n @Prop({ mutable: true, reflect: true }) value: string = '';\n\n /** Disabled — non-interactive. */\n @Prop({ reflect: true }) disabled: boolean = false;\n\n /** Required (form validation parity). */\n @Prop({ reflect: true }) required: boolean = false;\n\n /** Error state — forwarded to the inner field. */\n @Prop({ reflect: true }) error: boolean = false;\n\n /** Error text rendered in place of supporting text when `error` is set. */\n @Prop({ attribute: 'error-text' }) errorText: string = '';\n\n /** Supporting / helper text rendered below the field. */\n @Prop({ attribute: 'supporting-text' }) supportingText: string = '';\n\n /** Density forwarded to the inner field (0 = comfortable … -3 = compact). */\n @Prop({ reflect: true }) density: 0 | -1 | -2 | -3 | -4 = 0;\n\n /** Show a clear (✕) button in the trigger when a value is selected. */\n @Prop({ reflect: true }) clearable: boolean = false;\n\n /**\n * Match the dropdown width to the trigger width. When `false` the menu\n * sizes to its content (down to its own min-width). Maps to `md-menu`'s\n * `match-anchor-width`. Default `true` — the expected select behaviour.\n */\n @Prop({ attribute: 'match-trigger-width', reflect: true })\n matchTriggerWidth: boolean = true;\n\n /** Menu placement relative to the trigger — forwarded to `md-menu`. */\n @Prop() placement: 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end' =\n 'bottom-start';\n\n /**\n * Cap the dropdown height. When the options exceed it the list scrolls\n * vertically with top/bottom edge shadows. A number is pixels; any CSS\n * length is passed through (e.g. `'50vh'`). Forwarded to `md-menu`'s\n * `max-height`.\n */\n @Prop({ attribute: 'max-height' }) maxHeight?: number | string;\n\n /** Programmatic options. Ignored when `<md-select-option>` children exist. */\n /**\n * Programmatic options. Slotted `md-select-option` children take precedence.\n *\n * Accepts the array (property) or a **JSON string** (attribute), so a\n * plain-HTML page can declare its data inline instead of reaching for a\n * script. Malformed JSON degrades to an empty list with a console warning.\n */\n @Prop() options: SelectOptionInit[] | string = [];\n\n /** `options` as an array, whether it arrived as one or as a JSON attribute. */\n private get optionList(): SelectOptionInit[] {\n return parseJsonArrayProp<SelectOptionInit>(this.options, 'md-select', 'options');\n }\n\n /**\n * Virtualization mode for large option lists (backed by a WASM data engine):\n * - `'auto'` (default): virtualize only above `VIRTUALIZE_THRESHOLD` rows.\n * - `'always'`: always virtualize the `options` / `loadOptions` dataset.\n * - `'never'`: keep the classic DOM rendering regardless of size.\n * Virtualized rows render label + selection only (no per-row icon /\n * supporting text) and assume a uniform row height.\n */\n @Prop() virtualize: 'auto' | 'always' | 'never' = 'auto';\n\n /**\n * Show a search field in the menu header.\n *\n * A plain list filters client-side on label / supporting text; a virtualized\n * one filters inside the WASM engine. Closing the menu clears the query.\n */\n @Prop() filterable: boolean = false;\n\n /** Filter strategy used by `filterable` / `setQuery`. */\n @Prop({ attribute: 'filter-mode' }) filterMode: FilterMode = 'substring';\n\n /** Fixed virtualized row height (px). Auto-measured from the first row if unset. */\n @Prop({ attribute: 'row-height' }) rowHeight?: number;\n\n /** Form field name. The selected value is submitted under this name. */\n @Prop({ reflect: true }) name: string = '';\n\n // ── Localizable UI strings ───────────────────────────────\n // Defaults are English; override per the page locale (see the date picker for\n // the same convention). Option labels themselves come from `options` data.\n\n /** Placeholder for the in-menu filter field (`filterable`). */\n @Prop({ attribute: 'search-placeholder' }) searchPlaceholder: string = 'Search…';\n /** Accessible name for the filter field. Falls back to `Filter <label>`. */\n @Prop({ attribute: 'filter-label' }) filterLabel: string = '';\n /** Empty-state text when a filter matches nothing. */\n @Prop({ attribute: 'no-results-text' }) noResultsText: string = 'No results';\n /** Empty-state text when there are no options at all. */\n @Prop({ attribute: 'no-options-text' }) noOptionsText: string = 'No options';\n /** Accessible label for the clear button (`clearable`). */\n @Prop({ attribute: 'clear-label' }) clearLabel: string = 'Clear selection';\n /** Accessible label for the in-menu loading spinner while filtering. */\n @Prop({ attribute: 'searching-label' }) searchingLabel: string = 'Searching';\n /** Text shown in the trigger / menu while `loading` is true. */\n @Prop({ attribute: 'loading-text' }) loadingText: string = 'Loading…';\n\n // ── Icon customization (Material Symbols names; or use the slots below) ──\n\n /** Icon (Material Symbols name) for the clear button (`clearable`). */\n @Prop({ attribute: 'clear-icon' }) clearIcon: string = 'close';\n /** Caret icon; rotates 180° when open. Slot `dropdown-icon` overrides it. */\n @Prop({ attribute: 'dropdown-icon' }) dropdownIcon: string = 'arrow_drop_down';\n\n /**\n * Show a busy state: the trigger shows a spinner instead of the caret and the\n * host is `aria-busy`. Use while an async dataset loads (e.g. before/around a\n * large `loadOptions`). Replace the spinner with the `loader` slot.\n */\n @Prop({ reflect: true }) loading: boolean = false;\n\n /**\n * Stretch the control to fill its parent's inline width (otherwise it sizes to\n * a sensible default). The dropdown follows when `match-trigger-width` is set.\n */\n @Prop({ attribute: 'full-width', reflect: true }) fullWidth: boolean = false;\n\n /** Open state of the dropdown. Reflected so `:host([open])` rules apply. */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n\n /** Emits the newly selected value whenever the selection changes. */\n @Event() mdChange!: EventEmitter<string>;\n\n /** Emits when the dropdown opens. */\n @Event() mdOpen!: EventEmitter<void>;\n\n /** Emits when the dropdown closes. */\n @Event() mdClose!: EventEmitter<void>;\n\n @State() private optionsData: SelectOptionData[] = [];\n\n @State() private triggerId = `md-select-${++selectIdCounter}`;\n\n private fieldEl?: HTMLElement & { focus?: () => void };\n private menuEl?: VirtualMenuEl;\n\n /** Shared virtualization engine (WASM store + window math + provider glue). */\n private vc = new VirtualSelectController({\n queryItem: (i) =>\n (this.el.shadowRoot?.querySelector(\n `md-menu-item[data-vindex=\"${i}\"]`,\n ) as HTMLElement | null) ?? null,\n requestRender: () => forceUpdate(this),\n });\n private providerSet = false;\n /** Trigger label for the selected value while virtualized (off-window safe). */\n private selectedLabel = '';\n private searchDebounce?: ReturnType<typeof setTimeout>;\n /** Client-side filter query for `filterable` on a NON-virtualized list. The\n * virtualized path filters inside the WASM engine via `vc.setQuery`. */\n @State() private query = '';\n\n /** True between a keystroke and the debounced query resolving (drives the spinner). */\n private searching = false;\n\n // ── Public API ───────────────────────────────────────────\n\n /** Open the dropdown programmatically. */\n @Method()\n async show() {\n if (this.disabled) return;\n this.open = true;\n }\n\n /** Close the dropdown programmatically. */\n @Method()\n async close() {\n this.open = false;\n }\n\n /** Move focus to the trigger field. */\n @Method()\n async focusTrigger() {\n this.fieldEl?.focus?.();\n }\n\n /** Clear the selection. */\n @Method()\n async reset() {\n if (!this.value) return;\n this.value = '';\n this.mdChange.emit('');\n }\n\n /**\n * Load a large dataset into the WASM-backed virtualized list (the high-scale\n * entry point). Accepts a materialised `SelectOptionInit[]` or a row factory\n * (`{ count, getRow }`) — the factory streams rows into WASM one at a time, so\n * tens of millions of options never exist as JS objects at once. Falls back to\n * plain DOM rendering when `virtualize=\"never\"` or WebAssembly is unavailable.\n */\n @Method()\n async loadOptions(source: SelectOptionInit[] | OptionRowSource) {\n if (this.virtualize === 'never' || !isWasmSupported()) {\n this.vc.reset();\n this.optionsData = normalizeInits(rowsToArray(source));\n return;\n }\n this.optionsData = [];\n this.vc.setFixedRowHeight(this.rowHeight);\n this.vc.setFilterMode(this.filterMode);\n const ok = await this.vc.load(source);\n if (!ok) {\n // The store declines an empty set (and a WASM failure). Without dropping\n // whatever it still holds, `loadOptions([])` after a populated load left\n // the PREVIOUS rows active and rendering — so a consumer could not clear\n // the list by handing over an empty one.\n this.vc.reset();\n this.optionsData = normalizeInits(rowsToArray(source));\n } else {\n this.updateSelectedLabel();\n }\n forceUpdate(this);\n }\n\n /**\n * Filter the menu exactly as typing into the in-menu search field would.\n *\n * The field is uncontrolled, so the text is mirrored into it as well —\n * otherwise the list narrows while the box still reads empty, which looks\n * like the call did nothing. The menu may be closed (no field rendered yet),\n * so the text is stashed and applied on the next render.\n */\n @Method()\n async setQuery(query: string) {\n this.vc.setQuery(query);\n if (!this.vc.active) this.query = query;\n this.queryText = query;\n this.syncSearchField();\n forceUpdate(this);\n }\n\n /** Text pushed by `setQuery()`, pending mirroring into the search field. */\n private queryText: string | null = null;\n\n private syncSearchField() {\n if (this.queryText === null) return;\n const input = this.el.shadowRoot?.querySelector(\n '.md-select__search',\n ) as HTMLInputElement | null;\n if (!input) return;\n input.value = this.queryText;\n this.queryText = null;\n }\n\n /** Resolve labels for values that may be outside the current filter/window. */\n @Method()\n async getLabels(values: string[]): Promise<Record<string, string>> {\n return Object.fromEntries(this.vc.getLabels(values));\n }\n\n // ── Lifecycle / reactivity ───────────────────────────────\n\n /** Initial value, restored on form reset. */\n private defaultValue = '';\n\n componentWillLoad() {\n this.refreshOptions();\n // Adopt an option-declared `selected` hint when no value was provided.\n if (!this.value) {\n const preselected = this.optionsData.find((o) => o.selected && !o.disabled);\n if (preselected) this.value = preselected.value;\n }\n this.defaultValue = this.value;\n this.syncFormValue();\n }\n\n /** Keep the submitted form value in sync with the selection. */\n @Watch('value')\n syncFormValue() {\n setFormValue(this.internals, this.value || null);\n this.updateSelectedLabel();\n this.syncValidity();\n }\n\n /**\n * Publish `required` to the owning form. Without this the select is\n * form-associated (its value reaches FormData) yet ALWAYS reports valid, so an\n * empty required control lets the form submit — `required` renders as a visual\n * hint and nothing more. Kept in the same place as the value sync so the two\n * can never drift.\n */\n @Watch('required')\n @Watch('valueMissingLabel')\n private syncValidity() {\n setValidityState(this.internals, {\n missing: this.required && !this.value,\n missingMessage: this.valueMissingLabel,\n customMessage: this.customValidityMessage,\n });\n this.emitValidityChange();\n }\n\n /** Current validity: boolean, message and flags. Mirrors md-text-field. */\n @Method()\n async getValidity(): Promise<{\n valid: boolean;\n validationMessage: string;\n flags: Record<string, boolean>;\n }> {\n return getValidityOf(this.internals);\n }\n\n /**\n * Fires when this control's validity CHANGES — never on every keystroke, and\n * never for a re-publish that lands on the same state.\n *\n * `composed: false` is deliberate. Composites like md-select embed an\n * md-text-field, and a composed event escapes that inner shadow root, so a\n * listener on md-select would receive the inner field's event as well as the\n * host's — two events, different payloads, for one logical control. Keeping\n * it uncomposed means each component reports only for itself, while\n * `bubbles: true` still lets a <form> or app root hear every control.\n */\n @Event({ bubbles: true, composed: false }) mdValidityChange: EventEmitter<{\n valid: boolean;\n validationMessage: string;\n flags: Record<string, boolean>;\n }>;\n\n /** Last emitted validity, so a re-publish that changes nothing stays silent. */\n private lastValidityKey: string | null = null;\n\n /**\n * Emit mdValidityChange if validity actually moved.\n *\n * The FIRST call only primes the baseline. Initial state is not a change, and\n * emitting on mount would fire once per control on every page load — noise a\n * consumer would have to filter out, and misleading for anything logging\n * \"field became invalid\".\n */\n private emitValidityChange() {\n const v = getValidityOf(this.internals);\n const key = `${v.valid}|${v.validationMessage}`;\n if (this.lastValidityKey === key) return;\n const primed = this.lastValidityKey !== null;\n this.lastValidityKey = key;\n if (primed) this.mdValidityChange.emit(v);\n }\n\n /** Constraint-validation API, matching md-text-field and the native contract. */\n @Method()\n async checkValidity(): Promise<boolean> {\n return checkValidityOf(this.internals);\n }\n\n /** Like checkValidity(), but also shows the browser's validation message. */\n @Method()\n async reportValidity(): Promise<boolean> {\n return reportValidityOf(this.internals);\n }\n\n /** App/server-side validation: a non-empty message marks the control invalid\n * for its form until cleared with an empty string. */\n @Method()\n async setCustomValidity(message: string) {\n this.customValidityMessage = message;\n this.syncValidity();\n }\n\n /** Restore the initial selection when the owning form is reset. */\n formResetCallback() {\n this.value = this.defaultValue;\n }\n\n @Watch('options')\n refreshOptions() {\n const data = collectOptions(this.el, this.optionList);\n const shouldVirtualize =\n this.virtualize === 'always' ||\n (this.virtualize === 'auto' && data.length > VIRTUALIZE_THRESHOLD);\n\n if (shouldVirtualize && isWasmSupported() && data.length > 0) {\n this.optionsData = [];\n this.vc.setFixedRowHeight(this.rowHeight);\n this.vc.setFilterMode(this.filterMode);\n void this.vc.load(data).then((ok) => {\n if (!ok) {\n this.optionsData = data;\n forceUpdate(this);\n } else {\n this.updateSelectedLabel();\n }\n });\n } else {\n this.vc.reset();\n this.optionsData = data;\n }\n }\n\n /** Refresh the cached trigger label for the current value (virtual mode). */\n private updateSelectedLabel() {\n if (!this.value) {\n this.selectedLabel = '';\n } else if (this.vc.active) {\n this.selectedLabel = this.vc.getLabels([this.value]).get(this.value) ?? this.selectedLabel;\n }\n forceUpdate(this);\n }\n\n /** Slotted `<md-select-option>` mount/unmount/data change → re-read. */\n @Listen('mdSelectOptionChange')\n onOptionChange(e: Event) {\n e.stopPropagation();\n this.refreshOptions();\n }\n\n // Prevents @Watch re-entrancy when handleMenuClose syncs this.open back.\n private _syncGuard = false;\n // Deduplicates mdOpen/mdClose: only emit when the state actually flips.\n private _lastEmit: 'open' | 'close' | null = null;\n\n @Watch('open')\n syncMenu(open: boolean) {\n if (this._syncGuard || !this.menuEl) return;\n if (open) {\n // A filterable virtual menu focuses its search field, not the first row.\n this.menuEl.show?.({ autoFocus: !(this.filterable && this.vc.active) });\n } else {\n this.menuEl.close?.();\n }\n }\n\n // ── Keyboard (trigger) ───────────────────────────────────\n\n @Listen('keydown')\n handleKeyDown(e: KeyboardEvent) {\n if (this.disabled) return;\n if (!this.open && (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n this.open = true;\n } else if (this.open && e.key === 'Escape') {\n e.preventDefault();\n this.open = false;\n this.fieldEl?.focus?.();\n }\n }\n\n // ── Handlers ─────────────────────────────────────────────\n\n private toggleOpen = () => {\n if (this.disabled) return;\n this.open = !this.open;\n };\n\n private selectValue = (val: string) => {\n if (this.value === val) {\n this.open = false;\n return;\n }\n this.value = val;\n this.mdChange.emit(val);\n this.open = false;\n this.fieldEl?.focus?.();\n };\n\n private clearValue = (e: MouseEvent) => {\n e.stopPropagation();\n if (this.disabled || !this.value) return;\n this.value = '';\n this.mdChange.emit('');\n };\n\n /** True once the vc is wired to the menu's live scroll viewport. */\n private vpWired = false;\n\n /** Wire the vc to the menu scroll viewport; a null resolve (viewport not\n * rendered yet — e.g. the menu opened while the dataset was packing and\n * showed the uncapped busy bar) just returns, and componentDidRender\n * retries until the wiring lands. */\n private wireViewport() {\n void (async () => {\n const vp = (await this.menuEl?.getScrollViewport?.()) ?? null;\n if (!vp || this.vpWired) return;\n this.vpWired = true;\n await this.vc.attachViewport(async () => vp);\n })();\n }\n\n private handleMenuOpen = () => {\n this._syncGuard = true;\n this.open = true;\n this._syncGuard = false;\n if (this._lastEmit !== 'open') {\n this._lastEmit = 'open';\n this.mdOpen.emit();\n }\n if (this.vc.active) {\n this.wireViewport();\n if (this.filterable) {\n requestAnimationFrame(() => {\n const input = this.el.shadowRoot?.querySelector('.md-select__search') as HTMLElement | null;\n input?.focus();\n // Register the search input as the combobox so md-menu drives the\n // listbox via aria-activedescendant on it (focus stays here while the\n // user arrows through / filters the virtualized options).\n void this.menuEl?.setComboboxElement?.(input);\n });\n }\n }\n };\n\n private handleMenuClose = () => {\n this._syncGuard = true;\n this.open = false;\n this._syncGuard = false;\n // Reopening shows the full list: the search field is uncontrolled and\n // unmounts with the menu, so a stale query would filter an empty-looking box.\n if (this.query) this.query = '';\n if (this._lastEmit !== 'close') {\n this._lastEmit = 'close';\n this.mdClose.emit();\n }\n void this.menuEl?.setComboboxElement?.(null);\n this.vc.detachViewport();\n this.vpWired = false;\n };\n\n private onSearchInput = (e: Event) => {\n const q = (e.target as HTMLInputElement).value;\n this.queryText = null; // typing supersedes a pending programmatic query\n if (!this.vc.active) {\n // Plain (non-virtual) list: filter the rendered options client-side. It is\n // cheap, so it runs synchronously per keystroke — no spinner, no debounce.\n this.query = q;\n return;\n }\n // Show the spinner immediately, debounce the actual (expensive) query, then\n // clear the spinner once results are in — a smooth, intentional transition.\n if (!this.searching) {\n this.searching = true;\n forceUpdate(this);\n }\n clearTimeout(this.searchDebounce);\n this.searchDebounce = setTimeout(() => {\n this.vc.setQuery(q);\n this.searching = false;\n forceUpdate(this);\n }, SEARCH_DEBOUNCE_MS);\n };\n\n /** Register/clear the virtual provider on the menu once it's rendered, and\n * (re)try viewport wiring for menus opened mid-pack. */\n componentDidRender() {\n this.syncSearchField();\n if (!this.menuEl) return;\n if (this.vc.active && !this.providerSet) {\n void this.menuEl.setVirtualProvider?.(this.vc.provider);\n this.providerSet = true;\n } else if (!this.vc.active && this.providerSet) {\n void this.menuEl.setVirtualProvider?.(null);\n this.providerSet = false;\n }\n if (this.open && this.vc.active && !this.vpWired) this.wireViewport();\n }\n\n disconnectedCallback() {\n clearTimeout(this.searchDebounce);\n this.vc.detachViewport();\n }\n\n // ── Render ───────────────────────────────────────────────\n\n /**\n * Resolved accessible name for the control.\n *\n * A consumer names the select one of two ways: the visible `label` prop, or\n * `aria-label` / `aria-labelledby` on the host — the latter used when there\n * is no floating label, e.g. `md-table-pagination`'s rows-per-page select,\n * which has a *separate* visible label element next to it. The host is\n * role-less (generic), so a name set there is invisible to assistive tech,\n * and an `aria-labelledby` IDREF can't cross the shadow boundary into the\n * field's inner input. Resolve the name here (visible `label` wins, then\n * `aria-label`, then the flattened text of `aria-labelledby` targets) so it\n * can be forwarded onto the inner input (the real focus/accessible-name\n * target) and used to name the popup listbox — instead of the input having\n * no accessible name at all.\n */\n private get accessibleName(): string {\n if (this.label) return this.label;\n const ariaLabel = this.el.getAttribute('aria-label');\n if (ariaLabel && ariaLabel.trim()) return ariaLabel.trim();\n const labelledby = this.el.getAttribute('aria-labelledby');\n if (labelledby) {\n const root = this.el.getRootNode() as Document | ShadowRoot;\n const text = labelledby\n .trim()\n .split(/\\s+/)\n .map((id) => root.getElementById?.(id)?.textContent?.trim() ?? '')\n .filter(Boolean)\n .join(' ');\n if (text) return text;\n }\n return '';\n }\n\n private renderTrigger() {\n const display = this.vc.active\n ? this.selectedLabel\n : labelFor(this.optionsData, this.value);\n const hasValue = !!this.value && !!display;\n const showClear = this.clearable && hasValue && !this.disabled;\n // When there's no visible `label`, forward the host's accessible name\n // (aria-label / aria-labelledby) onto the field so md-text-field mirrors it\n // as the inner input's accessible name. Skipped when `label` is set: the\n // `label` prop already names the input, and passing aria-label too would\n // both double-name and leave an aria-label on md-text-field's role-less host.\n const fieldAriaLabel = this.label ? undefined : this.accessibleName || undefined;\n\n return (\n <md-text-field\n ref={(el) => (this.fieldEl = el as HTMLElement)}\n id={this.triggerId}\n class=\"md-select__field\"\n part=\"field\"\n exportparts=\"container:field-container\"\n variant={this.variant}\n label={this.label}\n aria-label={fieldAriaLabel}\n placeholder={hasValue ? '' : this.placeholder}\n value={display}\n readOnly={true}\n disabled={this.disabled}\n required={this.required}\n error={this.error}\n errorText={this.errorText}\n reserveSupportingSpace={this.reserveSupportingSpace}\n supportingText={this.supportingText}\n density={this.density}\n appearFocused={this.open}\n onClick={this.toggleOpen}\n >\n <span\n slot=\"trailing-icon\"\n class=\"md-select__trailing\"\n part=\"trailing\"\n aria-hidden=\"true\"\n >\n {this.loading ? (\n // Busy state: a spinner replaces the caret/clear. Consumers can swap\n // the spinner via the `loader` slot; the default is md-loading-indicator.\n <span class=\"md-select__loader\" part=\"loading-spinner\">\n <slot name=\"loader\">\n <LazyLoadingIndicator label={this.loadingText}></LazyLoadingIndicator>\n </slot>\n </span>\n ) : (\n [\n showClear && (\n <md-icon-button\n class=\"md-select__clear\"\n part=\"clear\"\n size=\"xs\"\n icon={this.clearIcon}\n aria-label={this.clearLabel}\n shapeMorph={false}\n // Keep it out of the tab order: the cluster is aria-hidden and\n // the select trigger owns focus, matching the prior <button>.\n groupTabindex={-1}\n // Native click (not mdClick) so stopPropagation prevents the\n // field's toggle from also firing and opening the menu.\n onClick={this.clearValue}\n ></md-icon-button>\n ),\n <span class=\"md-select__caret material-symbols-outlined\" part=\"caret\">\n <slot name=\"dropdown-icon\">{this.dropdownIcon}</slot>\n </span>,\n ]\n )}\n </span>\n </md-text-field>\n );\n }\n\n private renderVirtualOptions() {\n // The listbox wrapper lives in md-select's shadow root (slotted into md-menu),\n // so the combobox input's aria-controls / aria-activedescendant IDREFs\n // resolve, and the listbox directly owns its role=\"option\" children (the\n // spacers are aria-hidden). This is the WAI-ARIA combobox/listbox structure.\n return (\n <div\n class=\"md-select__listbox\"\n role=\"listbox\"\n id={`${this.triggerId}-listbox`}\n aria-label={this.accessibleName || 'Options'}\n >\n <div\n class=\"md-select__vspacer\"\n style={{ height: `${this.vc.topPad}px` }}\n aria-hidden=\"true\"\n ></div>\n {this.vc.windowRows.map((row, i) => {\n const filteredIndex = this.vc.windowStart + i;\n const selected = row.value === this.value;\n return (\n <md-menu-item\n key={row.index}\n // Stable id so md-menu can point aria-activedescendant here. Lives in\n // md-select's shadow root alongside the combobox input, so the IDREF\n // resolves. Keyed on the filtered index (its position in the list).\n id={`${this.triggerId}-opt-${filteredIndex}`}\n data-vindex={filteredIndex}\n // Exposes the row as a listbox option (role=\"option\" + aria-selected)\n // rather than a menuitemradio — the WAI-ARIA select/combobox pattern.\n presentation=\"option\"\n type=\"radio\"\n check-position=\"start\"\n keep-open\n part={selected ? 'option option-selected' : 'option'}\n disabled={row.disabled}\n selected={selected}\n headline={row.label}\n supporting-text={row.supportingText || ''}\n aria-setsize={this.vc.filteredLength}\n aria-posinset={filteredIndex + 1}\n onMdClick={() => this.selectValue(row.value)}\n >\n {row.icon ? (\n <span\n slot=\"leading-icon\"\n part=\"option-icon\"\n // Per-option `iconColor` is not carried on the virtualized (WASM)\n // path — the byte-packed row store has no colour column — so\n // virtual rows fall back to --md-select-option-icon-color.\n class=\"material-symbols-outlined md-select__option-icon\"\n aria-hidden=\"true\"\n >\n {row.icon}\n </span>\n ) : null}\n {row.label}\n </md-menu-item>\n );\n })}\n <div\n class=\"md-select__vspacer\"\n style={{ height: `${this.vc.bottomPad}px` }}\n aria-hidden=\"true\"\n ></div>\n </div>\n );\n }\n\n private renderMenu() {\n const virtual = this.vc.active;\n // Non-virtual `filterable`: narrow the rendered options by label / supporting\n // text (case-insensitive). Virtual filtering runs in the WASM engine instead.\n const q = this.filterable && !virtual ? this.query.trim().toLowerCase() : '';\n const listOptions = q\n ? this.optionsData.filter(\n (o) =>\n o.label.toLowerCase().includes(q) ||\n (o.supportingText || '').toLowerCase().includes(q),\n )\n : this.optionsData;\n // While loading we show a wavy progress bar in the menu (below), not text.\n const emptyText = this.loading\n ? ''\n : virtual\n ? this.vc.filteredLength === 0\n ? this.noResultsText\n : ''\n : this.optionsData.length === 0\n ? this.noOptionsText\n : q && listOptions.length === 0\n ? this.noResultsText\n : '';\n // Virtualization needs a bounded viewport to scroll within.\n const menuMaxHeight = virtual ? (this.maxHeight ?? 320) : this.maxHeight;\n\n return (\n <md-menu\n ref={(el) => (this.menuEl = el as VirtualMenuEl)}\n anchor={this.triggerId}\n placement={this.placement}\n match-anchor-width={this.matchTriggerWidth || this.fullWidth}\n max-height={menuMaxHeight}\n empty-text={emptyText}\n // Present the popup as a WAI-ARIA listbox (not a menu) for every select,\n // virtual or not, and name it.\n listbox\n list-label={this.accessibleName || 'Options'}\n part=\"menu\"\n onMdOpen={this.handleMenuOpen}\n onMdClose={this.handleMenuClose}\n >\n {this.filterable && !this.loading && (\n <div slot=\"header\" class=\"md-select__search-wrap\" part=\"search-wrap\">\n <input\n class=\"md-select__search\"\n part=\"search\"\n type=\"text\"\n // WAI-ARIA combobox: this input owns focus while the listbox is\n // open; the active option is conveyed via aria-activedescendant\n // (set by md-menu). aria-controls points at the listbox wrapper,\n // which md-select renders in this same shadow root so the IDREF\n // resolves (the menu surface is only role=\"presentation\").\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={String(this.open)}\n aria-controls={`${this.triggerId}-listbox`}\n aria-autocomplete=\"list\"\n autocomplete=\"off\"\n placeholder={this.searchPlaceholder}\n aria-label={this.filterLabel || (this.label ? `Filter ${this.label}` : 'Filter options')}\n onInput={this.onSearchInput}\n onClick={(e: MouseEvent) => e.stopPropagation()}\n />\n {this.searching && (\n <LazyLoadingIndicator\n class=\"md-select__search-spinner\"\n part=\"search-spinner\"\n label={this.searchingLabel}\n aria-hidden=\"true\"\n ></LazyLoadingIndicator>\n )}\n </div>\n )}\n {this.loading ? (\n // Busy state inside the menu: a wavy (M3 Expressive) indeterminate\n // linear progress bar instead of \"Loading…\" text.\n <div\n class=\"md-select__loading\"\n part=\"loading-bar\"\n role=\"status\"\n aria-label={this.loadingText}\n >\n <md-progress-indicator\n variant=\"linear\"\n indeterminate\n wave\n part=\"loading-progress\"\n label={this.loadingText}\n ></md-progress-indicator>\n </div>\n ) : virtual ? (\n this.renderVirtualOptions()\n ) : (\n // Listbox wrapper in md-select's shadow root so aria-controls (from a\n // combobox consumer) resolves and the listbox directly owns its\n // role=\"option\" children — the WAI-ARIA select pattern, matching the\n // virtual path. Options carry aria-selected (presentation=\"option\")\n // rather than the menuitemradio/aria-checked of a menu.\n <div\n class=\"md-select__listbox\"\n role=\"listbox\"\n id={`${this.triggerId}-listbox`}\n aria-label={this.accessibleName || 'Options'}\n >\n {listOptions.map((opt) => (\n <md-menu-item\n key={opt.value}\n id={`${this.triggerId}-opt-${opt.value}`}\n presentation=\"option\"\n type=\"radio\"\n check-position=\"start\"\n keep-open\n part={opt.value === this.value ? 'option option-selected' : 'option'}\n disabled={opt.disabled}\n selected={opt.value === this.value}\n headline={opt.label}\n supporting-text={opt.supportingText || ''}\n onMdClick={() => this.selectValue(opt.value)}\n >\n {opt.icon ? (\n <span\n slot=\"leading-icon\"\n part=\"option-icon\"\n class=\"material-symbols-outlined md-select__option-icon\"\n style={opt.iconColor ? { color: opt.iconColor } : undefined}\n aria-hidden=\"true\"\n >\n {opt.icon}\n </span>\n ) : null}\n {/* No light-DOM label copy: md-menu-item renders `headline` in\n its shadow and has no default slot — the unslotted text\n still entered accname computation, doubling the option's\n accessible name (\"10 10\"). */}\n </md-menu-item>\n ))}\n </div>\n )}\n </md-menu>\n );\n }\n\n render() {\n return (\n <Host\n class={{\n 'md-select': true,\n [`md-select--${this.variant}`]: true,\n 'md-select--open': this.open,\n 'md-select--disabled': this.disabled,\n 'md-select--loading': this.loading,\n }}\n aria-haspopup=\"listbox\"\n // No aria-expanded on the host: it has no role, so a screen reader ignores\n // it there (axe flags it \"aria attribute may be ignored\"). The expanded\n // state lives where it works — the filterable search (role=combobox) — and\n // on open, focus moves into the menu (the search, or md-menu's active row).\n aria-busy={this.loading ? 'true' : undefined}\n >\n {this.renderTrigger()}\n {this.renderMenu()}\n {/* Keep the declarative options in the light DOM (hidden) so the\n slotchange/mutation reactivity has something to observe. */}\n <div class=\"md-select__options\" hidden>\n <slot onSlotchange={() => this.refreshOptions()} />\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}