@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
@@ -1,2 +1,2 @@
1
- import{r as e,c as s,h as t,H as o,g as i}from"./p-WmvQpZnM.js";import{t as a}from"./p-DYBUr7K_.js";import{s as c,a as r,g as n,c as d,r as l}from"./p-DWxN44zD.js";const h=()=>`:host{--_container-color:var(--md-checkbox-container-color, transparent);--_selected-container-color:var(--md-checkbox-selected-container-color, var(--md-sys-color-primary));--_outline-color:var(--md-checkbox-outline-color, var(--md-sys-color-on-surface-variant));--_outline-width:var(--md-checkbox-outline-width, 2px);--_icon-color:var(--md-checkbox-icon-color, var(--md-sys-color-on-primary));--_container-shape:var(--md-checkbox-container-shape, 2px);--_container-size:var(--md-checkbox-container-size, max(14px, calc(18px + var(--md-sys-density-scale, 0) * 1px)));--_icon-size:var(--md-checkbox-icon-size, max(14px, calc(18px + var(--md-sys-density-scale, 0) * 1px)));--_touch-size:max(32px, calc(var(--md-checkbox-touch-target-size, 48px) + var(--md-sys-density-scale, 0) * 4px));--_state-layer-size:var(--md-checkbox-state-layer-size, min(40px, var(--_touch-size)));--_state-layer-color:var(--md-checkbox-state-layer-color, var(--md-sys-color-on-surface));--_selected-state-layer-color:var(--md-checkbox-selected-state-layer-color, var(--md-sys-color-primary));display:inline-flex;align-items:center;justify-content:center;position:relative;inline-size:var(--_touch-size);block-size:var(--_touch-size);cursor:pointer;border-radius:var(--md-sys-shape-corner-full, 50%);overflow:hidden;-webkit-tap-highlight-color:transparent;box-sizing:border-box;flex-shrink:0;vertical-align:middle;outline:none;color:var(--_state-layer-color)}:host(.md-checkbox--selected){color:var(--_selected-state-layer-color)}.md-checkbox__native{position:absolute;opacity:0;inline-size:0;block-size:0;pointer-events:none;margin:0}.md-checkbox__ripple-layer{position:absolute;inline-size:var(--_state-layer-size);block-size:var(--_state-layer-size);border-radius:var(--md-sys-shape-corner-full, 50%);overflow:hidden}:host(.md-checkbox--disabled) .md-checkbox__ripple-layer,:host([soft-disabled]) .md-checkbox__ripple-layer{display:none}.md-checkbox__state-layer{position:absolute;inline-size:var(--_state-layer-size);block-size:var(--_state-layer-size);border-radius:var(--md-sys-shape-corner-full, 50%);background-color:var(--_state-layer-color);opacity:0;transition:opacity var(--md-sys-motion-duration-short1, 100ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1));pointer-events:none}:host(.md-checkbox--unselected:hover) .md-checkbox__state-layer{opacity:var(--md-sys-state-hover-state-layer-opacity, 0.08)}:host(.md-checkbox--unselected:focus-visible) .md-checkbox__state-layer{opacity:var(--md-sys-state-focus-state-layer-opacity, 0.12)}:host(.md-checkbox--unselected:active) .md-checkbox__state-layer{opacity:var(--md-sys-state-pressed-state-layer-opacity, 0.12)}:host(.md-checkbox--selected) .md-checkbox__state-layer{background-color:var(--_selected-state-layer-color)}:host(.md-checkbox--selected:hover) .md-checkbox__state-layer{opacity:var(--md-sys-state-hover-state-layer-opacity, 0.08)}:host(.md-checkbox--selected:focus-visible) .md-checkbox__state-layer{opacity:var(--md-sys-state-focus-state-layer-opacity, 0.12)}:host(.md-checkbox--selected:active) .md-checkbox__state-layer{opacity:var(--md-sys-state-pressed-state-layer-opacity, 0.12)}:host(:focus-visible){outline:2px solid var(--md-sys-color-secondary);outline-offset:calc((var(--_state-layer-size) - var(--_touch-size)) / 2)}.md-checkbox__container{position:relative;display:inline-flex;align-items:center;justify-content:center;inline-size:var(--_container-size);block-size:var(--_container-size);border-radius:var(--_container-shape);border:var(--_outline-width) solid var(--_outline-color);background-color:var(--_container-color);box-sizing:border-box;pointer-events:none;transition:background-color var(--md-sys-motion-duration-short2, 200ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)), border-color var(--md-sys-motion-duration-short2, 200ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)), transform var(--md-sys-motion-duration-medium4, 400ms) var(--md-sys-motion-easing-emphasized-decelerate, cubic-bezier(0.05, 0.7, 0.1, 1))}:host(.md-checkbox--selected) .md-checkbox__container{background-color:var(--_selected-container-color);border-color:var(--_selected-container-color)}:host(.md-checkbox--pressed) .md-checkbox__container{transform:scale(0.82);transition:background-color var(--md-sys-motion-duration-short2, 200ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)), border-color var(--md-sys-motion-duration-short2, 200ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)), transform var(--md-sys-motion-duration-short4, 200ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1))}:host([aria-invalid="true"]) .md-checkbox__container{border-color:var(--md-sys-color-error)}:host([aria-invalid="true"].md-checkbox--selected) .md-checkbox__container{background-color:var(--md-sys-color-error);border-color:var(--md-sys-color-error)}.md-checkbox__icon{display:inline-flex;align-items:center;justify-content:center;inline-size:var(--_icon-size);block-size:var(--_icon-size);color:var(--_icon-color);overflow:visible}.md-checkbox__icon .material-symbols-outlined{font-family:var(--md-sys-icon-font-family, 'Material Symbols Outlined', 'Material Icons');font-size:var(--_icon-size);line-height:1;font-weight:normal;font-style:normal;letter-spacing:normal;text-transform:none;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;font-variation-settings:'FILL' 1, 'wght' 600, 'GRAD' 0, 'opsz' 24}@keyframes md-checkbox-glyph-in{0%{transform:scale(0);opacity:0}60%{transform:scale(1.18);opacity:1}100%{transform:scale(1);opacity:1}}:host(.md-checkbox--checked) .md-checkbox__icon .material-symbols-outlined,:host(.md-checkbox--indeterminate) .md-checkbox__icon .material-symbols-outlined{animation:md-checkbox-glyph-in var(--md-sys-motion-duration-short2, 200ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)) both}:host(.md-checkbox--unselected) .md-checkbox__icon{opacity:0}:host(.md-checkbox--selected) .md-checkbox__icon{opacity:1}:host(.md-checkbox--disabled){cursor:default;pointer-events:none}:host(.md-checkbox--disabled.md-checkbox--unselected) .md-checkbox__container{border-color:color-mix(in srgb, var(--md-sys-color-on-surface) calc(var(--md-sys-state-disabled-content-opacity, 0.38) * 100%), transparent);background-color:transparent}:host(.md-checkbox--disabled.md-checkbox--selected) .md-checkbox__container{background-color:color-mix(in srgb, var(--md-sys-color-on-surface) calc(var(--md-sys-state-disabled-content-opacity, 0.38) * 100%), transparent);border-color:transparent}:host(.md-checkbox--disabled.md-checkbox--selected) .md-checkbox__icon{color:var(--md-sys-color-surface)}:host(.md-checkbox--disabled) .md-checkbox__state-layer{display:none}:host([soft-disabled]){cursor:default;pointer-events:auto}:host([soft-disabled].md-checkbox--unselected) .md-checkbox__container{border-color:color-mix(in srgb, var(--md-sys-color-on-surface) calc(var(--md-sys-state-disabled-content-opacity, 0.38) * 100%), transparent);background-color:transparent}:host([soft-disabled].md-checkbox--selected) .md-checkbox__container{background-color:color-mix(in srgb, var(--md-sys-color-on-surface) calc(var(--md-sys-state-disabled-content-opacity, 0.38) * 100%), transparent);border-color:transparent}:host([soft-disabled].md-checkbox--selected) .md-checkbox__icon{color:var(--md-sys-color-surface)}:host([soft-disabled]) .md-checkbox__state-layer{display:none}@media (prefers-reduced-motion: reduce){.md-checkbox__container,.md-checkbox__state-layer{transition:none}.md-checkbox__icon .material-symbols-outlined{animation:none}}@media (forced-colors: active){:host{forced-color-adjust:none}.md-checkbox__container{border-color:ButtonText;background-color:ButtonFace}:host(.md-checkbox--selected) .md-checkbox__container{background-color:Highlight;border-color:Highlight}:host(.md-checkbox--selected) .md-checkbox__icon{color:HighlightText}:host(:focus-visible){outline-color:Highlight}:host(.md-checkbox--disabled) .md-checkbox__container{border-color:GrayText;opacity:1}:host(.md-checkbox--disabled.md-checkbox--selected) .md-checkbox__container{background-color:GrayText;border-color:GrayText}.md-checkbox__state-layer{display: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}.md-checkbox__target{position:relative;display:inline-flex;align-items:center;justify-content:center;inline-size:var(--_touch-size);block-size:var(--_touch-size);border-radius:var(--md-sys-shape-corner-full, 50%);overflow:hidden;flex-shrink:0}:host(.md-checkbox--has-support){display:inline-flex;flex-direction:column;align-items:flex-start;inline-size:var(--_touch-size);block-size:auto;overflow:visible;border-radius:0}.md-checkbox__support{display:block;margin-block-start:2px;margin-inline-start:calc((var(--_touch-size) - var(--_container-size)) / 2);inline-size:max-content;max-inline-size:60ch;font-family:var(--md-sys-typescale-body-small-font-family, Roboto, sans-serif);font-size:max(10px, calc(12px + var(--md-sys-density-scale, 0) * 0.5px));line-height:max(14px, calc(16px + var(--md-sys-density-scale, 0) * 0.5px));color:var(--md-checkbox-supporting-text-color, var(--md-sys-color-on-surface-variant, #49454F))}.md-checkbox__support--error{color:var(--md-checkbox-error-text-color, var(--md-sys-color-error, #B3261E))}`;const m=class{constructor(t){e(this,t);this.mdChange=s(this,"mdChange",7);this.mdValidityChange=s(this,"mdValidityChange",5);if(t.$hostElement$["s-ei"]){this.internals=t.$hostElement$["s-ei"]}else{this.internals=t.$hostElement$.attachInternals();t.$hostElement$["s-ei"]=this.internals}this.valueMissingLabel="Please check this box if you want to proceed.";this.customValidityMessage="";this.uid=`md-checkbox-${Math.random().toString(36).slice(2,7)}`;this.invalid=false;this.error=false;this.errorText="";this.supportingText="";this.checked=false;this.indeterminate=false;this.disabled=false;this.softDisabled=false;this.required=false;this.name="";this.value="on";this.density=0;this.prevChecked=false;this.prevIndeterminate=false;this.pressed=false;this.initialChecked=false;this.initialIndeterminate=false;this.lastValidityKey=null;this.handleClick=()=>{if(this.isDisabled)return;this.prevChecked=this.checked;this.prevIndeterminate=this.indeterminate;if(this.indeterminate){this.indeterminate=false;this.checked=true}else{this.checked=!this.checked}this.mdChange.emit({checked:this.checked,indeterminate:this.indeterminate})};this.handleKeyDown=e=>{if(this.isDisabled)return;if(e.key===" "){e.preventDefault();this.pressed=true;a(this.el);this.handleClick();setTimeout((()=>{this.pressed=false}),150)}};this.handlePointerDown=()=>{if(!this.isDisabled)this.pressed=true};this.handlePointerUp=()=>{this.pressed=false}}get isDisabled(){return this.disabled||this.softDisabled}componentWillLoad(){this.initialChecked=this.checked;this.initialIndeterminate=this.indeterminate;this.syncFormValue()}onStateChange(){this.prevChecked=this.checked;this.prevIndeterminate=this.indeterminate;this.syncFormValue()}onValueChange(){this.syncFormValue()}formResetCallback(){this.checked=this.initialChecked;this.indeterminate=this.initialIndeterminate}syncFormValue(){c(this.internals,this.checked?this.value:null);this.syncValidity()}syncValidity(){this.invalid=this.required&&!this.checked&&!this.customValidityMessage?true:!!this.customValidityMessage;r(this.internals,{missing:this.required&&!this.checked,missingMessage:this.valueMissingLabel,customMessage:this.customValidityMessage});this.emitValidityChange()}async getValidity(){return n(this.internals)}emitValidityChange(){const e=n(this.internals);const s=`${e.valid}|${e.validationMessage}`;if(this.lastValidityKey===s)return;const t=this.lastValidityKey!==null;this.lastValidityKey=s;if(t)this.mdValidityChange.emit(e)}async checkValidity(){return d(this.internals)}async reportValidity(){return l(this.internals)}async setCustomValidity(e){this.customValidityMessage=e;this.syncValidity()}get ariaCheckedValue(){if(this.indeterminate)return"mixed";return String(this.checked)}render(){const e=this.isDisabled;const s=this.checked||this.indeterminate;const i=this.el.getAttribute("aria-hidden")==="true";return t(o,{key:"a0d40b9f78fd0156ee6cdec1366112632f167511",class:{"md-checkbox":true,"md-checkbox--checked":this.checked&&!this.indeterminate,"md-checkbox--indeterminate":this.indeterminate,"md-checkbox--disabled":e,"md-checkbox--selected":s,"md-checkbox--unselected":!s,"md-checkbox--pressed":this.pressed,"md-checkbox--prev-unselected":!this.prevChecked&&!this.prevIndeterminate,"md-checkbox--has-support":!!(this.errorText||this.supportingText)},role:"checkbox","aria-invalid":this.invalid?"true":undefined,"aria-describedby":this.errorText||this.supportingText?`${this.uid}-support`:undefined,"aria-checked":this.ariaCheckedValue,"aria-disabled":e?"true":undefined,"aria-required":this.required?"true":undefined,tabindex:i?null:this.disabled?"-1":"0",onPointerDown:this.handlePointerDown,onPointerUp:this.handlePointerUp,onPointerLeave:this.handlePointerUp,onPointerCancel:this.handlePointerUp,onClick:this.handleClick,onKeyDown:this.handleKeyDown},t("span",{key:"08c18fbbeb24f4b2776e533f9fe5891c7962d68a",class:"md-checkbox__target",part:"target"},t("span",{key:"bd3d4b8aff21d9574ad129ee875d8b673d7365d9",class:"md-checkbox__ripple-layer","aria-hidden":"true"},t("md-ripple",{key:"da2c6869e619d1afa2f209cded502588e5ca2f9a",disabled:e})),t("span",{key:"141b88846ca966456a5d93a71ac8e8c89b638500",class:"md-checkbox__state-layer",part:"state-layer","aria-hidden":"true"}),t("span",{key:"97c914aaa946e06275280a1f6022836c42137911",class:"md-checkbox__container",part:"container"},t("span",{key:"2feb4131baf460aef5e0e13e53a1cddc289eadf6",class:"md-checkbox__icon",part:"icon","aria-hidden":"true"},t("span",{key:"1405ff7289795bf85418a95747e1b2475be9b354",class:"material-symbols-outlined"},this.indeterminate?"remove":"check")))),(this.errorText||this.supportingText)&&t("span",{key:"b5cbb3b42837a18b6135dcd5fc10c363badd4636",id:`${this.uid}-support`,part:"supporting-text",role:this.error?"alert":undefined,class:{"md-checkbox__support":true,"md-checkbox__support--error":this.error}},this.errorText||this.supportingText))}static get formAssociated(){return true}get el(){return i(this)}static get watchers(){return{checked:[{onStateChange:0}],indeterminate:[{onStateChange:0}],value:[{onValueChange:0}],required:[{syncValidity:0}],valueMissingLabel:[{syncValidity:0}]}}};m.style=h();export{m as md_checkbox};
2
- //# sourceMappingURL=p-e3c37222.entry.js.map
1
+ import{r as e,c as s,h as t,H as o,g as i}from"./p-WmvQpZnM.js";import{t as a}from"./p-DYBUr7K_.js";import{s as c,a as r,g as n,c as d,r as l}from"./p-DWxN44zD.js";const h=()=>`:host{--_container-color:var(--md-checkbox-container-color, transparent);--_selected-container-color:var(--md-checkbox-selected-container-color, var(--md-sys-color-primary));--_outline-color:var(--md-checkbox-outline-color, var(--md-sys-color-on-surface-variant));--_outline-width:var(--md-checkbox-outline-width, 2px);--_icon-color:var(--md-checkbox-icon-color, var(--md-sys-color-on-primary));--_container-shape:var(--md-checkbox-container-shape, 2px);--_container-size:var(--md-checkbox-container-size, max(14px, calc(18px + var(--md-sys-density-scale, 0) * 1px)));--_icon-size:var(--md-checkbox-icon-size, max(14px, calc(18px + var(--md-sys-density-scale, 0) * 1px)));--_touch-size:max(32px, calc(var(--md-checkbox-touch-target-size, 48px) + var(--md-sys-density-scale, 0) * 4px));--_state-layer-size:var(--md-checkbox-state-layer-size, min(40px, var(--_touch-size)));--_state-layer-color:var(--md-checkbox-state-layer-color, var(--md-sys-color-on-surface));--_selected-state-layer-color:var(--md-checkbox-selected-state-layer-color, var(--md-sys-color-primary));display:inline-flex;align-items:center;justify-content:center;position:relative;inline-size:var(--_touch-size);block-size:var(--_touch-size);cursor:pointer;border-radius:var(--md-sys-shape-corner-full, 50%);overflow:hidden;-webkit-tap-highlight-color:transparent;box-sizing:border-box;flex-shrink:0;vertical-align:middle;outline:none;color:var(--_state-layer-color)}:host(.md-checkbox--selected){color:var(--_selected-state-layer-color)}.md-checkbox__native{position:absolute;opacity:0;inline-size:0;block-size:0;pointer-events:none;margin:0}.md-checkbox__ripple-layer{position:absolute;inline-size:var(--_state-layer-size);block-size:var(--_state-layer-size);border-radius:var(--md-sys-shape-corner-full, 50%);overflow:hidden}:host(.md-checkbox--disabled) .md-checkbox__ripple-layer,:host([soft-disabled]) .md-checkbox__ripple-layer{display:none}.md-checkbox__state-layer{position:absolute;inline-size:var(--_state-layer-size);block-size:var(--_state-layer-size);border-radius:var(--md-sys-shape-corner-full, 50%);background-color:var(--_state-layer-color);opacity:0;transition:opacity var(--md-sys-motion-duration-short1, 100ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1));pointer-events:none}:host(.md-checkbox--unselected:hover) .md-checkbox__state-layer{opacity:var(--md-sys-state-hover-state-layer-opacity, 0.08)}:host(.md-checkbox--unselected:focus-visible) .md-checkbox__state-layer{opacity:var(--md-sys-state-focus-state-layer-opacity, 0.12)}:host(.md-checkbox--unselected:active) .md-checkbox__state-layer{opacity:var(--md-sys-state-pressed-state-layer-opacity, 0.12)}:host(.md-checkbox--selected) .md-checkbox__state-layer{background-color:var(--_selected-state-layer-color)}:host(.md-checkbox--selected:hover) .md-checkbox__state-layer{opacity:var(--md-sys-state-hover-state-layer-opacity, 0.08)}:host(.md-checkbox--selected:focus-visible) .md-checkbox__state-layer{opacity:var(--md-sys-state-focus-state-layer-opacity, 0.12)}:host(.md-checkbox--selected:active) .md-checkbox__state-layer{opacity:var(--md-sys-state-pressed-state-layer-opacity, 0.12)}:host(:focus-visible){outline:2px solid var(--md-sys-color-secondary);outline-offset:calc((var(--_state-layer-size) - var(--_touch-size)) / 2)}.md-checkbox__container{position:relative;display:inline-flex;align-items:center;justify-content:center;inline-size:var(--_container-size);block-size:var(--_container-size);border-radius:var(--_container-shape);border:var(--_outline-width) solid var(--_outline-color);background-color:var(--_container-color);box-sizing:border-box;pointer-events:none;transition:background-color var(--md-sys-motion-duration-short2, 200ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)), border-color var(--md-sys-motion-duration-short2, 200ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)), transform var(--md-sys-motion-duration-medium4, 400ms) var(--md-sys-motion-easing-emphasized-decelerate, cubic-bezier(0.05, 0.7, 0.1, 1))}:host(.md-checkbox--selected) .md-checkbox__container{background-color:var(--_selected-container-color);border-color:var(--_selected-container-color)}:host(.md-checkbox--pressed) .md-checkbox__container{transform:scale(0.82);transition:background-color var(--md-sys-motion-duration-short2, 200ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)), border-color var(--md-sys-motion-duration-short2, 200ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)), transform var(--md-sys-motion-duration-short4, 200ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1))}:host([aria-invalid="true"]) .md-checkbox__container{border-color:var(--md-sys-color-error)}:host([aria-invalid="true"].md-checkbox--selected) .md-checkbox__container{background-color:var(--md-sys-color-error);border-color:var(--md-sys-color-error)}.md-checkbox__icon{display:inline-flex;align-items:center;justify-content:center;inline-size:var(--_icon-size);block-size:var(--_icon-size);color:var(--_icon-color);overflow:visible}.md-checkbox__icon .material-symbols-outlined{font-family:var(--md-sys-icon-font-family, 'Material Symbols Outlined', 'Material Icons');font-size:var(--_icon-size);line-height:1;font-weight:normal;font-style:normal;letter-spacing:normal;text-transform:none;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;font-variation-settings:'FILL' 1, 'wght' 600, 'GRAD' 0, 'opsz' 24}@keyframes md-checkbox-glyph-in{0%{transform:scale(0);opacity:0}60%{transform:scale(1.18);opacity:1}100%{transform:scale(1);opacity:1}}:host(.md-checkbox--checked) .md-checkbox__icon .material-symbols-outlined,:host(.md-checkbox--indeterminate) .md-checkbox__icon .material-symbols-outlined{animation:md-checkbox-glyph-in var(--md-sys-motion-duration-short2, 200ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1)) both}:host(.md-checkbox--unselected) .md-checkbox__icon{opacity:0}:host(.md-checkbox--selected) .md-checkbox__icon{opacity:1}:host(.md-checkbox--disabled){cursor:default;pointer-events:none}:host(.md-checkbox--disabled.md-checkbox--unselected) .md-checkbox__container{border-color:color-mix(in srgb, var(--md-sys-color-on-surface) calc(var(--md-sys-state-disabled-content-opacity, 0.38) * 100%), transparent);background-color:transparent}:host(.md-checkbox--disabled.md-checkbox--selected) .md-checkbox__container{background-color:color-mix(in srgb, var(--md-sys-color-on-surface) calc(var(--md-sys-state-disabled-content-opacity, 0.38) * 100%), transparent);border-color:transparent}:host(.md-checkbox--disabled.md-checkbox--selected) .md-checkbox__icon{color:var(--md-sys-color-surface)}:host(.md-checkbox--disabled) .md-checkbox__state-layer{display:none}:host([soft-disabled]){cursor:default;pointer-events:auto}:host([soft-disabled].md-checkbox--unselected) .md-checkbox__container{border-color:color-mix(in srgb, var(--md-sys-color-on-surface) calc(var(--md-sys-state-disabled-content-opacity, 0.38) * 100%), transparent);background-color:transparent}:host([soft-disabled].md-checkbox--selected) .md-checkbox__container{background-color:color-mix(in srgb, var(--md-sys-color-on-surface) calc(var(--md-sys-state-disabled-content-opacity, 0.38) * 100%), transparent);border-color:transparent}:host([soft-disabled].md-checkbox--selected) .md-checkbox__icon{color:var(--md-sys-color-surface)}:host([soft-disabled]) .md-checkbox__state-layer{display:none}@media (prefers-reduced-motion: reduce){.md-checkbox__container,.md-checkbox__state-layer{transition:none}.md-checkbox__icon .material-symbols-outlined{animation:none}}@media (forced-colors: active){:host{forced-color-adjust:none}.md-checkbox__container{border-color:ButtonText;background-color:ButtonFace}:host(.md-checkbox--selected) .md-checkbox__container{background-color:Highlight;border-color:Highlight}:host(.md-checkbox--selected) .md-checkbox__icon{color:HighlightText}:host(:focus-visible){outline-color:Highlight}:host(.md-checkbox--disabled) .md-checkbox__container{border-color:GrayText;opacity:1}:host(.md-checkbox--disabled.md-checkbox--selected) .md-checkbox__container{background-color:GrayText;border-color:GrayText}.md-checkbox__state-layer{display: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}.md-checkbox__target{position:relative;display:inline-flex;align-items:center;justify-content:center;inline-size:var(--_touch-size);block-size:var(--_touch-size);border-radius:var(--md-sys-shape-corner-full, 50%);overflow:hidden;flex-shrink:0}:host(.md-checkbox--has-support){display:inline-flex;flex-direction:column;align-items:flex-start;inline-size:var(--_touch-size);block-size:auto;overflow:visible;border-radius:0}.md-checkbox__support{display:block;margin-block-start:2px;margin-inline-start:calc((var(--_touch-size) - var(--_container-size)) / 2);inline-size:max-content;max-inline-size:60ch;font-family:var(--md-sys-typescale-body-small-font-family, Roboto, sans-serif);font-size:max(10px, calc(12px + var(--md-sys-density-scale, 0) * 0.5px));line-height:max(14px, calc(16px + var(--md-sys-density-scale, 0) * 0.5px));color:var(--md-checkbox-supporting-text-color, var(--md-sys-color-on-surface-variant, #49454F))}.md-checkbox__support--error{color:var(--md-checkbox-error-text-color, var(--md-sys-color-error, #B3261E))}`;const m=class{constructor(t){e(this,t);this.mdChange=s(this,"mdChange",7);this.mdValidityChange=s(this,"mdValidityChange",5);if(t.$hostElement$["s-ei"]){this.internals=t.$hostElement$["s-ei"]}else{this.internals=t.$hostElement$.attachInternals();t.$hostElement$["s-ei"]=this.internals}this.valueMissingLabel="Please check this box if you want to proceed.";this.customValidityMessage="";this.uid=`md-checkbox-${Math.random().toString(36).slice(2,7)}`;this.invalid=false;this.error=false;this.errorText="";this.supportingText="";this.checked=false;this.indeterminate=false;this.disabled=false;this.softDisabled=false;this.required=false;this.name="";this.value="on";this.density=0;this.prevChecked=false;this.prevIndeterminate=false;this.pressed=false;this.initialChecked=false;this.initialIndeterminate=false;this.lastValidityKey=null;this.handleClick=()=>{if(this.isDisabled)return;this.prevChecked=this.checked;this.prevIndeterminate=this.indeterminate;if(this.indeterminate){this.indeterminate=false;this.checked=true}else{this.checked=!this.checked}this.mdChange.emit({checked:this.checked,indeterminate:this.indeterminate})};this.handleKeyDown=e=>{if(this.isDisabled)return;if(e.key===" "){e.preventDefault();this.pressed=true;a(this.el);this.handleClick();setTimeout((()=>{this.pressed=false}),150)}};this.handlePointerDown=()=>{if(!this.isDisabled)this.pressed=true};this.handlePointerUp=()=>{this.pressed=false}}get isDisabled(){return this.disabled||this.softDisabled}componentWillLoad(){this.initialChecked=this.checked;this.initialIndeterminate=this.indeterminate;this.syncFormValue()}onStateChange(){this.prevChecked=this.checked;this.prevIndeterminate=this.indeterminate;this.syncFormValue()}onValueChange(){this.syncFormValue()}formResetCallback(){this.checked=this.initialChecked;this.indeterminate=this.initialIndeterminate}syncFormValue(){c(this.internals,this.checked?this.value:null);this.syncValidity()}syncValidity(){this.invalid=this.required&&!this.checked&&!this.customValidityMessage?true:!!this.customValidityMessage;r(this.internals,{missing:this.required&&!this.checked,missingMessage:this.valueMissingLabel,customMessage:this.customValidityMessage});this.emitValidityChange()}async getValidity(){return n(this.internals)}emitValidityChange(){const e=n(this.internals);const s=`${e.valid}|${e.validationMessage}`;if(this.lastValidityKey===s)return;const t=this.lastValidityKey!==null;this.lastValidityKey=s;if(t)this.mdValidityChange.emit(e)}async checkValidity(){return d(this.internals)}async reportValidity(){return l(this.internals)}async setCustomValidity(e){this.customValidityMessage=e;this.syncValidity()}get ariaCheckedValue(){if(this.indeterminate)return"mixed";return String(this.checked)}render(){const e=this.isDisabled;const s=this.checked||this.indeterminate;const i=this.el.getAttribute("aria-hidden")==="true";return t(o,{key:"6151d70a6d2b1c923477873ef91c0e80d1d165e8",class:{"md-checkbox":true,"md-checkbox--checked":this.checked&&!this.indeterminate,"md-checkbox--indeterminate":this.indeterminate,"md-checkbox--disabled":e,"md-checkbox--selected":s,"md-checkbox--unselected":!s,"md-checkbox--pressed":this.pressed,"md-checkbox--prev-unselected":!this.prevChecked&&!this.prevIndeterminate,"md-checkbox--has-support":!!(this.errorText||this.supportingText)},role:"checkbox","aria-invalid":this.invalid?"true":undefined,"aria-describedby":this.errorText||this.supportingText?`${this.uid}-support`:undefined,"aria-checked":this.ariaCheckedValue,"aria-disabled":e?"true":undefined,"aria-required":this.required?"true":undefined,tabindex:i?null:this.disabled?"-1":"0",onPointerDown:this.handlePointerDown,onPointerUp:this.handlePointerUp,onPointerLeave:this.handlePointerUp,onPointerCancel:this.handlePointerUp,onClick:this.handleClick,onKeyDown:this.handleKeyDown},t("span",{key:"e40a207fadba9da13cc242770b5dbf25bd982bf9",class:"md-checkbox__target",part:"target"},t("span",{key:"e9743a49ac5ad9d09341871d94241a73d9a6f6db",class:"md-checkbox__ripple-layer","aria-hidden":"true"},t("md-ripple",{key:"6b2b3f16de880e62bd4c7e535972d72b9b852356",disabled:e})),t("span",{key:"083ac5d32a3b61934bf59992dc94d0aecfa4519b",class:"md-checkbox__state-layer",part:"state-layer","aria-hidden":"true"}),t("span",{key:"15b739357adfe8b42bbd529ae9c73c07c81be941",class:"md-checkbox__container",part:"container"},t("span",{key:"3af9b1d50202b1e8946fb6c4df12e3dcf4b6f721",class:"md-checkbox__icon",part:"icon","aria-hidden":"true"},t("span",{key:"c79042be6891ac7553c93ac2111f52b0ef6a115e",class:"material-symbols-outlined"},this.indeterminate?"remove":"check")))),(this.errorText||this.supportingText)&&t("span",{key:"72f3b6a14ea4d901ac0ed671d0407860d10777bb",id:`${this.uid}-support`,part:"supporting-text",role:this.error?"alert":undefined,class:{"md-checkbox__support":true,"md-checkbox__support--error":this.error}},this.errorText||this.supportingText))}static get formAssociated(){return true}get el(){return i(this)}static get watchers(){return{checked:[{onStateChange:0}],indeterminate:[{onStateChange:0}],value:[{onValueChange:0}],required:[{syncValidity:0}],valueMissingLabel:[{syncValidity:0}]}}};m.style=h();export{m as md_checkbox};
2
+ //# sourceMappingURL=p-87f88d62.entry.js.map
@@ -0,0 +1,2 @@
1
+ import{r as t,c as i,f as s,h as e,H as l,g as r}from"./p-WmvQpZnM.js";import{L as a}from"./p-DnKDoE8K.js";import{V as n,i as o,n as h,r as c,c as d}from"./p-Bz-JaJcA.js";import{s as m,g as u,c as p,r as f}from"./p-DWxN44zD.js";import{p as v}from"./p-CxhZdOPw.js";const _=()=>`:host{--md-text-field-padding-inline-end:var(--md-sys-spacing-inset-lg, 16px);--_min-width:var(--md-multi-select-min-width, 200px);--_chip-gap:var(--md-multi-select-chip-gap, var(--md-sys-spacing-gap-xs, 4px));--_chip-radius:var(--md-multi-select-chip-radius, 8px);--_caret-color:var(--md-multi-select-caret-color, var(--md-sys-color-on-surface-variant));--_clear-color:var(--md-multi-select-clear-color, var(--md-sys-color-on-surface-variant));--_option-icon-size:var(--md-multi-select-option-icon-size, 20px);font-family:var(--md-sys-typescale-body-large-font-family, Roboto, sans-serif);display:inline-block;inline-size:var(--md-multi-select-width, 100%);min-inline-size:var(--_min-width);box-sizing:border-box;vertical-align:bottom;position:relative}.md-multi-select__field{display:block;inline-size:100%;cursor:pointer;--md-text-field-cursor:pointer}.md-multi-select__field::part(input){cursor:pointer}:host(.md-multi-select--display-text) .md-multi-select__field::part(input){text-overflow:ellipsis}:host(.md-multi-select--disabled) .md-multi-select__field,:host(.md-multi-select--soft-disabled) .md-multi-select__field{cursor:not-allowed;--md-text-field-cursor:not-allowed}:host(.md-multi-select--disabled) .md-multi-select__field::part(input),:host(.md-multi-select--soft-disabled) .md-multi-select__field::part(input){cursor:not-allowed}.md-multi-select__frame{display:flex;flex-direction:column;gap:var(--md-multi-select-frame-gap, max(6px, calc(8px + var(--md-sys-density-scale, 0) * 0.5px)))}:host(.md-multi-select--chips-top) .md-multi-select__frame{flex-direction:column-reverse;gap:var(--md-multi-select-frame-gap, max(6px, calc(16px + var(--md-sys-density-scale, 0) * 2.5px)))}:host(.md-multi-select--chips-left) .md-multi-select__frame,:host(.md-multi-select--chips-right) .md-multi-select__frame{flex-flow:row nowrap;align-items:center;justify-content:flex-start}:host(.md-multi-select--chips-left) .md-multi-select__chips{order:-1}:host(.md-multi-select--chips-left) .md-multi-select__field,:host(.md-multi-select--chips-right) .md-multi-select__field{inline-size:var(--md-multi-select-trigger-width, max-content);flex:0 0 auto}:host(.md-multi-select--chips-left) ::slotted([slot='trigger']),:host(.md-multi-select--chips-right) ::slotted([slot='trigger']){inline-size:var(--md-multi-select-trigger-width, max-content);flex:0 0 auto}:host(.md-multi-select--chips-left) .md-multi-select__chips,:host(.md-multi-select--chips-right) .md-multi-select__chips{flex:0 1 auto;min-inline-size:0}.md-multi-select__chips{display:flex;flex-wrap:wrap;align-items:center;gap:var(--_chip-gap);max-inline-size:100%}:host(.md-multi-select--chips-bottom) .md-multi-select__chips,:host(.md-multi-select--chips-top) .md-multi-select__chips{contain:inline-size}.md-multi-select__chips md-chip{--md-chip-container-shape:var(--_chip-radius)}.md-multi-select__button{flex:0 0 auto}.md-multi-select__button-desc{padding-block-start:4px;padding-inline:16px;font:var(--md-sys-typescale-body-small, 400 12px/16px Roboto, sans-serif);color:var(--md-sys-color-on-surface-variant, #49454f)}.md-multi-select__button-desc--error{color:var(--md-sys-color-error, #b3261e)}.md-multi-select__sr-live{position:absolute;inline-size:1px;block-size:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.md-multi-select__inline-chips{display:flex;flex-wrap:nowrap;align-items:center;gap:var(--_chip-gap);min-inline-size:0;max-inline-size:100%;flex:1 1 auto;position:relative;overflow:hidden;}.md-multi-select__inline-chips--wrap{flex-wrap:wrap;overflow:visible;padding-block-start:var(--md-multi-select-inline-chips-block-start, var(--md-sys-spacing-gap-xs, 4px));row-gap:var(--_chip-gap)}.md-multi-select__inline-chips md-chip,.md-multi-select__inline-measure md-chip{--md-chip-container-shape:var(--_chip-radius);flex-shrink:0}.md-multi-select__measure-clip{position:absolute;inline-size:0;block-size:0;overflow:hidden;pointer-events:none}.md-multi-select__inline-measure{position:absolute;inset-block-start:0;inset-inline-start:0;display:flex;flex-wrap:nowrap;align-items:center;gap:var(--_chip-gap);inline-size:max-content;visibility:hidden;pointer-events:none;white-space:nowrap}.md-multi-select__overflow-chip{flex-shrink:0;display:inline-flex;align-items:center;block-size:var(--md-multi-select-chip-height, 32px);padding-inline:12px;border:1px solid var(--md-multi-select-chip-outline, var(--md-sys-color-outline-variant, #CAC4D0));border-radius:var(--_chip-radius);background:transparent;color:var(--md-sys-color-on-surface-variant, #49454F);font:500 var(--md-sys-typescale-label-large-size, 14px) / var(--md-sys-typescale-label-large-line-height, 20px) var(--md-sys-typescale-label-large-font, Roboto, sans-serif);white-space:nowrap;cursor:pointer}.md-multi-select__overflow-chip:hover:not(:disabled){background:color-mix(in srgb, var(--md-sys-color-on-surface, #1C1B1F) 8%, transparent)}.md-multi-select__overflow-chip:focus-visible{outline:2px solid var(--md-sys-color-primary, #6750A4);outline-offset:2px}.md-multi-select__clear{display:inline-flex;align-items:center;justify-content:center;inline-size:var(--md-multi-select-clear-size, 28px);block-size:var(--md-multi-select-clear-size, 28px);padding:0;background:var(--md-multi-select-clear-bg, transparent);border:0;border-radius:var(--md-multi-select-clear-radius, 50%);color:var(--_clear-color);cursor:pointer;font-size:var(--md-multi-select-clear-icon-size, 18px);transition:background var(--md-sys-motion-duration-short2, 100ms) ease}.md-multi-select__clear:hover{background:var(--md-multi-select-clear-hover-bg, color-mix(in srgb, var(--md-sys-color-on-surface) 8%, transparent))}.md-multi-select__clear:focus-visible{outline-width:var(--md-multi-select-clear-focus-ring-width, 2px);outline-style:solid;outline-color:var(--md-multi-select-clear-focus-ring-color, var(--md-sys-color-primary));outline-offset:var(--md-multi-select-clear-focus-ring-offset, 1px)}.md-multi-select__clear .material-symbols-outlined{font-size:var(--md-multi-select-clear-icon-size, 18px)}.md-multi-select__field .md-multi-select__caret-box{display:inline-flex;align-items:center;justify-content:center;width:auto;height:auto}.md-multi-select__caret{color:var(--_caret-color);font-size:var(--md-multi-select-caret-size, 24px);line-height:1;transition:transform var(--md-sys-motion-duration-short4, 200ms) var(--md-sys-motion-easing-standard, cubic-bezier(0.2, 0, 0, 1));display:inline-flex;align-items:center;justify-content:center;inline-size:var(--md-multi-select-caret-box-size, 24px);block-size:var(--md-multi-select-caret-box-size, 24px)}:host(.md-multi-select--open) .md-multi-select__caret{transform:rotate(180deg)}.md-multi-select__loader{display:inline-flex;align-items:center;justify-content:center;inline-size:var(--md-multi-select-loader-size, 24px);block-size:var(--md-multi-select-loader-size, 24px);--md-loading-indicator-size:var(--md-multi-select-spinner-size, 22px);--md-loading-indicator-shape-size:var(--md-multi-select-spinner-size, 22px)}.md-multi-select__loading{display:flex;align-items:center;padding-block:var(--md-multi-select-loading-padding, var(--md-sys-spacing-inset-lg, 16px));padding-inline:var(--md-multi-select-loading-padding, var(--md-sys-spacing-inset-lg, 16px))}.md-multi-select__loading md-progress-indicator{inline-size:100%}.md-multi-select__empty{display:flex;justify-content:center;padding:var(--md-multi-select-empty-padding, var(--md-sys-spacing-inset-md, 12px) var(--md-sys-spacing-inset-lg, 16px));color:var(--md-multi-select-empty-color, var(--md-sys-color-on-surface-variant, #49454f));text-align:center;font:var(--md-multi-select-empty-font, var(--md-sys-typescale-body-medium, 400 14px/20px Roboto, sans-serif))}.md-multi-select__select-all{display:block;border-block-end:var(--md-multi-select-select-all-divider-width, 1px) solid var(--md-multi-select-select-all-divider-color, var(--md-sys-color-outline-variant, #cac4d0))}md-menu::part(empty-text){display:block;padding:var(--md-multi-select-empty-padding, var(--md-sys-spacing-inset-md, 12px) var(--md-sys-spacing-inset-lg, 16px));color:var(--md-multi-select-empty-color, var(--md-sys-color-on-surface-variant));text-align:center}.md-multi-select__option-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--md-multi-select-option-icon-color, var(--md-sys-color-on-surface-variant, #49454f));font-size:var(--_option-icon-size);inline-size:var(--_option-icon-size);block-size:var(--_option-icon-size);line-height:1}@media (prefers-reduced-motion: reduce){.md-multi-select__caret,.md-multi-select__clear{transition:none}}@media (forced-colors: active){.md-multi-select__caret{color:CanvasText}.md-multi-select__clear:focus-visible{outline-color:Highlight}}.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-multi-select__vspacer{display:block;flex:none;pointer-events:none}.md-multi-select__search-wrap{position:relative;display:block}.md-multi-select__search{box-sizing:border-box;width:100%;border:none;outline:none;padding:var(--md-multi-select-search-padding, 12px 44px 12px 16px);font:inherit;color:var(--md-multi-select-search-color, var(--md-sys-color-on-surface, #1d1b20));background:var(--md-multi-select-search-bg, var(--md-sys-color-surface-container, #f3edf7));border-bottom:var(--md-multi-select-search-border-width, 1px) solid var(--md-multi-select-search-border-color, var(--md-sys-color-outline-variant, #cac4d0))}.md-multi-select__search::placeholder{color:var(--md-multi-select-search-placeholder-color, var(--md-sys-color-on-surface-variant, #49454f))}.md-multi-select__search-spinner{position:absolute;inset-block-start:50%;inset-inline-end:12px;margin-block-start:-12px;--md-loading-indicator-size:var(--md-multi-select-search-spinner-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 g=0;const b=200;const y=180;const x=class{constructor(l){t(this,l);this.mdChange=i(this,"mdChange",7);this.mdOpen=i(this,"mdOpen",7);this.mdClose=i(this,"mdClose",7);this.mdRemove=i(this,"mdRemove",7);this.mdClear=i(this,"mdClear",7);this.mdValidityChange=i(this,"mdValidityChange",5);if(l.$hostElement$["s-ei"]){this.internals=l.$hostElement$["s-ei"]}else{this.internals=l.$hostElement$.attachInternals();l.$hostElement$["s-ei"]=this.internals}this.valueMissingLabel="Please select at least one option";this.reserveSupportingSpace=false;this.customValidityMessage="";this.variant="outlined";this.label="";this.placeholder="";this.supportingText="";this.error=false;this.errorText="";this.disabled=false;this.softDisabled=false;this.required=false;this.density=0;this.options=[];this.virtualize="auto";this.filterable=false;this.filterMode="substring";this.value=[];this.maxSelected=0;this.showSelectAll=false;this.selectAllLabel="Select all";this.placement="bottom-start";this.matchTriggerWidth=true;this.displayMode="chips";this.chipOverflow="count";this.chipPosition="bottom";this.trigger="field";this.triggerIcon="add";this.triggerLabel="";this.searchPlaceholder="Search…";this.filterLabel="";this.noResultsText="No results";this.noOptionsText="No options";this.searchingLabel="Searching";this.loadingText="Loading…";this.loading=false;this.clearable=false;this.clearIcon="close";this.clearLabel="Clear selection";this.dropdownIcon="arrow_drop_down";this.name="";this.open=false;this.optionsData=[];this.triggerId=`md-multi-select-${++g}`;this.hasTriggerLeading=false;this.hasTriggerTrailing=false;this.liveMessage="";this.hasSlottedTrigger=false;this.query="";this.inlineVisibleCount=Number.POSITIVE_INFINITY;this.inlineOverflowCount=0;this.wiredTrigger=null;this._needsReposition=false;this._focusChipAfterRender=null;this.vc=new n({queryItem:t=>this.el.shadowRoot?.querySelector(`md-menu-item[data-vindex="${t}"]`)??null,requestRender:()=>s(this)});this.providerSet=false;this.selectedLabelMap=new Map;this.searching=false;this.queryText=null;this.defaultValue=[];this.onTriggerSlotChange=()=>{this.computeSlottedTrigger();this.wireSlottedTrigger()};this.lastValidityKey=null;this.loadSeq=0;this._syncGuard=false;this._lastEmit=null;this.toggleOpen=()=>{if(this.isDisabled)return;this.open=!this.open};this.isSelected=t=>this.value.includes(t);this.toggleValue=(t,i)=>{i?.stopPropagation();if(this.isDisabled)return;const s=this.isSelected(t);const e=!s&&this.maxSelected>0&&this.value.length>=this.maxSelected;if(e){const t=i?.target;if(t)t.selected=false;return}const l=s?this.value.filter((i=>i!==t)):[...this.value,t];this.value=l;this.mdChange.emit([...l])};this.removeValue=t=>i=>{i.stopPropagation();if("preventDefault"in i)i.preventDefault();if(this.isDisabled||!this.isSelected(t))return;const s=this.selectedOptions().findIndex((i=>i.value===t));this.value=this.value.filter((i=>i!==t));this.mdRemove.emit(t);this.mdChange.emit([...this.value]);const e=this.selectedOptions().length;this._focusChipAfterRender=e===0?"trigger":Math.min(s,e-1)};this.clearValue=t=>{t.stopPropagation();if(this.isDisabled||this.value.length===0)return;this.value=[];this.mdChange.emit([]);this.mdClear.emit();this.fieldEl?.focus?.()};this.toggleSelectAll=t=>{t?.stopPropagation();if(this.isDisabled)return;const i=this.optionsData.filter((t=>!t.disabled)).map((t=>t.value));const s=i.length>0&&i.every((t=>this.value.includes(t)));this.value=s?[]:i.slice(0,this.maxSelected>0?this.maxSelected:undefined);this.mdChange.emit([...this.value]);const e=t?.target;if(e){const t=i.length>0&&i.every((t=>this.value.includes(t)));e.selected=t;e.indeterminate=!t&&i.some((t=>this.value.includes(t)))}};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-multi-select__search");t?.focus();void this.menuEl?.setComboboxElement?.(t)}))}};this.handleMenuClose=()=>{this._syncGuard=true;this.open=false;this._syncGuard=false;if(this._lastEmit!=="close"){this._lastEmit="close";this.mdClose.emit()}void this.menuEl?.setComboboxElement?.(null);this.vc.detachViewport();this.vpWired=false;if(this.query){this.query="";const t=this.el.shadowRoot?.querySelector(".md-multi-select__search");if(t)t.value=""}};this.onSearchInput=t=>{const i=t.target.value;this.queryText=null;if(!this.vc.active){this.query=i;return}if(!this.searching){this.searching=true;s(this)}clearTimeout(this.searchDebounce);this.searchDebounce=setTimeout((()=>{this.vc.setQuery(i);this.searching=false;s(this)}),y)};this.renderValueChip=t=>e("md-chip",{key:t.value,part:"chip",exportparts:"remove:chip-remove,label:chip-label",variant:"input",selectable:false,label:t.label,disabled:this.isDisabled,removable:!this.isDisabled,onMdRemove:this.removeValue(t.value),onClick:t=>t.stopPropagation()});this.recomputeInlineOverflow=()=>{if(this.trigger!=="field"||this.displayMode!=="chips-inline"||this.chipOverflow!=="count")return;const t=this.inlineDisplayEl;const i=this.inlineMeasureEl;const s=this.selectedOptions().length;if(!t||!i||s===0)return;const e=t.clientWidth;if(e<=0)return;const l=getComputedStyle(i).columnGap||getComputedStyle(i).gap;const r=parseFloat(l)||4;const a=Array.from(i.querySelectorAll("md-chip"));const n=a.slice(0,s).map((t=>t.getBoundingClientRect().width));if(n.some((t=>t<=0)))return;const o=i.querySelector(".md-multi-select__overflow-chip");const h=o?o.getBoundingClientRect().width:44;let c=0;for(let t=0;t<s;t++)c+=n[t]+(t>0?r:0);let d;if(c<=e+.5){d=s}else{const t=e-h-r;let i=0;d=0;for(let e=0;e<s;e++){const s=n[e]+(e>0?r:0);if(i+s<=t){i+=s;d++}else break}}if(d!==this.inlineVisibleCount||s-d!==this.inlineOverflowCount){this.inlineVisibleCount=d;this.inlineOverflowCount=s-d}}}get optionList(){return v(this.options,"md-multi-select","options")}get isDisabled(){return this.disabled||this.softDisabled}async show(){if(this.isDisabled)return;this.open=true}async close(){this.open=false}async focusTrigger(){this.fieldEl?.focus?.()}async reset(){if(this.value.length===0)return;this.value=[];this.mdChange.emit([])}async loadOptions(t){if(this.virtualize==="never"||!o()){this.loadSeq++;this.vc.reset();this.optionsData=h(c(t));return}const i=++this.loadSeq;this.optionsData=[];this.vc.setFixedRowHeight(this.rowHeight);this.vc.setFilterMode(this.filterMode);const e=await this.vc.load(t);if(i!==this.loadSeq)return;if(!e){this.vc.reset();this.optionsData=h(c(t))}else{this.updateSelectedLabels()}s(this)}async setQuery(t){this.vc.setQuery(t);if(!this.vc.active)this.query=t;this.queryText=t;this.syncSearchField();s(this)}syncSearchField(){if(this.queryText===null)return;const t=this.el.shadowRoot?.querySelector(".md-multi-select__search");if(!t)return;t.value=this.queryText;this.queryText=null}async getLabels(t){return Object.fromEntries(this.vc.getLabels(t))}componentDidLoad(){this.wireSlottedTrigger();if(this.open&&!this.isDisabled){this.menuEl?.show?.({autoFocus:false})}if(typeof ResizeObserver!=="undefined"&&this.frameEl){this._frameRO=new ResizeObserver((()=>{if(this.open)void this.menuEl?.reposition?.()}));this._frameRO.observe(this.frameEl)}}componentWillLoad(){this.refreshOptions();if(this.value.length===0){const t=this.optionsData.filter((t=>t.selected&&!t.disabled)).map((t=>t.value));if(t.length)this.value=t}this.defaultValue=[...this.value];this.syncFormValue();this.hasTriggerLeading=!!this.el.querySelector('[slot="trigger-leading"]');this.hasTriggerTrailing=!!this.el.querySelector('[slot="trigger-trailing"]');this.computeSlottedTrigger()}computeSlottedTrigger(){this.hasSlottedTrigger=this.el.querySelector('[slot="trigger"]')!==null}wireSlottedTrigger(){const t=this.el.querySelector('[slot="trigger"]');if(!t){this.wiredTrigger?.removeEventListener("click",this.toggleOpen);this.wiredTrigger=null;return}if(t!==this.wiredTrigger){this.wiredTrigger?.removeEventListener("click",this.toggleOpen);t.addEventListener("click",this.toggleOpen);this.wiredTrigger=t}if(!t.id)t.id=this.triggerId;else if(t.id!==this.triggerId)this.triggerId=t.id;t.setAttribute("aria-haspopup","listbox");this.fieldEl=t}formResetCallback(){this.value=[...this.defaultValue]}syncFormValue(){this.updateSelectedLabels();this.updateValidity();this.liveMessage=this.value.length?`${this.value.length} selected`:"None selected";this._needsReposition=true;if(!this.value.length){m(this.internals,null);return}const t=new FormData;const i=this.name||"";for(const s of this.value)t.append(i,s);m(this.internals,t)}updateValidity(){if(!this.internals?.setValidity)return;if(this.customValidityMessage){this.internals.setValidity({customError:true},this.customValidityMessage,this.fieldEl??this.el)}else if(this.required&&this.value.length===0){this.internals.setValidity({valueMissing:true},this.errorText||this.valueMissingLabel,this.fieldEl??this.el)}else{this.internals.setValidity({})}this.emitValidityChange()}async getValidity(){return u(this.internals)}emitValidityChange(){const t=u(this.internals);const i=`${t.valid}|${t.validationMessage}`;if(this.lastValidityKey===i)return;const s=this.lastValidityKey!==null;this.lastValidityKey=i;if(s)this.mdValidityChange.emit(t)}async checkValidity(){return p(this.internals)}async reportValidity(){return f(this.internals)}async setCustomValidity(t){this.customValidityMessage=t;this.updateValidity()}refreshOptions(){const t=d(this.el,this.optionList);const i=this.virtualize==="always"||this.virtualize==="auto"&&t.length>b;if(i&&o()&&t.length>0){const i=++this.loadSeq;this.optionsData=[];this.vc.setFixedRowHeight(this.rowHeight);this.vc.setFilterMode(this.filterMode);void this.vc.load(t).then((e=>{if(i!==this.loadSeq)return;if(!e){this.optionsData=t;s(this)}else{this.updateSelectedLabels()}}))}else{this.loadSeq++;this.vc.reset();this.optionsData=t}}updateSelectedLabels(){if(this.vc.active&&this.value.length){this.selectedLabelMap=this.vc.getLabels(this.value)}else{this.selectedLabelMap=new Map}s(this)}onOptionChange(t){t.stopPropagation();this.refreshOptions()}syncMenu(t){if(this._syncGuard||!this.menuEl)return;if(t)this.menuEl.show?.({autoFocus:!this.filterable});else this.menuEl.close?.()}handleKeyDown(t){if(this.isDisabled)return;if(!this.open&&(t.key==="ArrowDown"||t.key==="ArrowUp"||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;if(this.open&&this.filterable){const t=this.el.shadowRoot?.querySelector(".md-multi-select__search");void this.menuEl?.setComboboxElement?.(t)}}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();if(this._needsReposition){this._needsReposition=false;if(this.open)requestAnimationFrame((()=>void this.menuEl?.reposition?.()))}if(this._focusChipAfterRender!==null){const t=this._focusChipAfterRender;this._focusChipAfterRender=null;requestAnimationFrame((()=>{if(t==="trigger"){this.fieldEl?.focus?.();return}const i=this.el.shadowRoot?.querySelectorAll(".md-multi-select__chips md-chip, .md-multi-select__inline-chips > md-chip");const s=i?.[t];const e=s?.shadowRoot?.querySelector('[part="remove"]');(e??s??this.fieldEl)?.focus?.()}))}if(this.trigger==="field"&&this.displayMode==="chips-inline"&&this.chipOverflow==="count"){if(typeof ResizeObserver!=="undefined"){if(!this._inlineRO)this._inlineRO=new ResizeObserver(this.recomputeInlineOverflow);this._inlineRO.disconnect();if(this.inlineDisplayEl)this._inlineRO.observe(this.inlineDisplayEl);if(this.inlineMeasureEl)this._inlineRO.observe(this.inlineMeasureEl)}requestAnimationFrame(this.recomputeInlineOverflow)}else{this._inlineRO?.disconnect()}}disconnectedCallback(){this.wiredTrigger?.removeEventListener("click",this.toggleOpen);this.wiredTrigger=null;clearTimeout(this.searchDebounce);this.vc.detachViewport();this._frameRO?.disconnect();this._frameRO=undefined;this._inlineRO?.disconnect();this._inlineRO=undefined}selectedOptions(){if(this.vc.active){return this.value.map((t=>({value:t,label:this.selectedLabelMap.get(t)??t,disabled:false})))}return this.value.map((t=>this.optionsData.find((i=>i.value===t)))).filter((t=>!!t))}countText(){const t=this.value.length;if(t===0)return"";return this.countFormatter?this.countFormatter(t):`${t} selected`}renderTrigger(){return[e("slot",{name:"trigger",onSlotchange:this.onTriggerSlotChange}),this.hasSlottedTrigger?this.renderTriggerMessage():this.trigger==="button"?this.renderButtonTrigger():this.renderFieldTrigger()]}renderFieldTrigger(){const t=this.selectedOptions();const i=t.length>0;const s=this.displayMode==="chips-inline";const l=s?"":this.displayMode==="text"&&i?t.map((t=>t.label)).join(", "):i?this.countText():"";return e("md-text-field",{ref:t=>this.fieldEl=t,id:this.triggerId,class:"md-multi-select__field",part:"field",exportparts:"container:field-container,input:field-input,label:field-label",variant:this.variant,label:this.label,placeholder:i?"":this.placeholder,value:l,readOnly:true,disabled:this.disabled,error:this.error,errorText:this.errorText,reserveSupportingSpace:this.reserveSupportingSpace,supportingText:this.supportingText,required:this.required,density:this.chipPosition==="left"||this.chipPosition==="right"?-3:this.density,appearFocused:this.open,chipsWrap:s&&this.chipOverflow==="wrap",onClick:this.toggleOpen},this.hasTriggerLeading&&e("slot",{name:"trigger-leading",slot:"leading-icon"}),s&&this.renderInlineChips(),this.hasTriggerTrailing&&e("slot",{name:"trigger-trailing",slot:"trailing-icon"}),this.loading?e("span",{slot:"trailing-icon",class:"md-multi-select__loader",part:"loading-spinner"},e("slot",{name:"loader"},e(a,{label:this.loadingText}))):[this.clearable&&i&&!this.isDisabled&&e("button",{type:"button",slot:"trailing-icon",class:"md-multi-select__clear",part:"clear","aria-label":this.clearLabel,onClick:this.clearValue},e("span",{class:"material-symbols-outlined","aria-hidden":"true"},this.clearIcon)),e("span",{slot:"trailing-icon",class:"md-multi-select__caret-box",part:"caret-box","aria-hidden":"true"},e("span",{class:"md-multi-select__caret material-symbols-outlined",part:"caret"},e("slot",{name:"dropdown-icon"},this.dropdownIcon)))])}renderButtonTrigger(){const t=this.error&&this.errorText?this.errorText:this.supportingText;const i=t?`${this.triggerId}-desc`:undefined;return[e("md-button",{ref:t=>this.fieldEl=t,id:this.triggerId,class:"md-multi-select__button",part:"field button",variant:"outlined",size:"xs",icon:this.triggerIcon,loading:this.loading,disabled:this.isDisabled,"aria-haspopup":"listbox","aria-expanded":String(this.open),"aria-controls":this.listboxRendered?`${this.triggerId}-listbox`:undefined,"aria-invalid":this.error?"true":undefined,"aria-describedby":i,onMdClick:this.toggleOpen},this.triggerLabel||this.label),this.renderTriggerMessage()]}renderTriggerMessage(){const t=this.error&&this.errorText?this.errorText:this.supportingText;if(!t)return null;return e("div",{id:this.hasSlottedTrigger?undefined:`${this.triggerId}-desc`,class:{"md-multi-select__button-desc":true,"md-multi-select__button-desc--error":this.error&&!!this.errorText},part:"button-desc",role:this.error?"alert":undefined},t)}get listboxRendered(){return this.open&&!this.loading&&(this.vc.active||this.optionsData.length>0)}renderInlineChips(){const t=this.selectedOptions();if(t.length===0)return null;const i=this.chipOverflow==="wrap";const s=i?t.length:Math.min(t.length,this.inlineVisibleCount);const l=i?0:t.length-s;return e("div",{slot:"chips",class:{"md-multi-select__inline-chips":true,"md-multi-select__inline-chips--wrap":i},part:"chips",role:"group","aria-label":this.label?`${this.label} — selected`:"Selected",ref:t=>this.inlineDisplayEl=t},t.slice(0,s).map(this.renderValueChip),l>0&&e("button",{type:"button",class:"md-multi-select__overflow-chip",part:"overflow-chip","aria-label":`${l} more selected — open to manage`,onClick:t=>{t.stopPropagation();this.toggleOpen()}},"+",l))}renderInlineMeasure(){if(this.trigger!=="field"||this.displayMode!=="chips-inline"||this.chipOverflow!=="count")return null;const t=this.selectedOptions();if(t.length===0)return null;return e("div",{class:"md-multi-select__measure-clip","aria-hidden":"true"},e("div",{class:"md-multi-select__inline-measure",ref:t=>this.inlineMeasureEl=t},t.map(this.renderValueChip),e("span",{class:"md-multi-select__overflow-chip"},"+",t.length)))}renderChips(){if(this.trigger!=="button"&&!this.hasSlottedTrigger&&this.displayMode!=="chips")return null;const t=this.selectedOptions();if(t.length===0)return null;return e("div",{class:"md-multi-select__chips",part:"chips",role:"group","aria-label":this.label?`${this.label} — selected`:"Selected"},t.map((t=>e("md-chip",{key:t.value,part:"chip",exportparts:"remove:chip-remove,label:chip-label",variant:"input",selectable:false,label:t.label,disabled:this.isDisabled,removable:!this.isDisabled,onMdRemove:this.removeValue(t.value),onClick:t=>t.stopPropagation()}))))}renderVirtualOptions(){return e("div",{class:"md-multi-select__listbox",part:"listbox",role:"listbox",id:`${this.triggerId}-listbox`,"aria-multiselectable":"true","aria-label":this.label||"Options"},e("div",{class:"md-multi-select__vspacer",style:{height:`${this.vc.topPad}px`},"aria-hidden":"true"}),this.vc.windowRows.map(((t,i)=>{const s=this.vc.windowStart+i;const l=this.isSelected(t.value);return e("md-menu-item",{key:t.index,id:`${this.triggerId}-opt-${s}`,"data-vindex":s,presentation:"option",type:"checkbox","check-position":"start","keep-open":true,part:l?"option option-selected":"option",disabled:t.disabled,selected:l,headline:t.label,"supporting-text":t.supportingText||"","aria-setsize":this.vc.filteredLength,"aria-posinset":s+1,onMdClick:i=>this.toggleValue(t.value,i)},t.icon?e("span",{slot:"leading-icon",part:"option-icon",class:"material-symbols-outlined md-multi-select__option-icon","aria-hidden":"true"},t.icon):null)})),e("div",{class:"md-multi-select__vspacer",style:{height:`${this.vc.bottomPad}px`},"aria-hidden":"true"}))}renderEmpty(t,i){return e("div",{class:"md-multi-select__empty",part:"empty",role:"status"},e("slot",{name:t},i))}renderMenu(){const t=this.vc.active;const i=this.optionsData.filter((t=>!t.disabled));const s=i.length>0&&i.every((t=>this.value.includes(t.value)));const l=!s&&i.some((t=>this.value.includes(t.value)));const r=this.filterable&&!t?this.query.trim().toLowerCase():"";const n=r?this.optionsData.filter((t=>t.label.toLowerCase().includes(r)||(t.supportingText||"").toLowerCase().includes(r))):this.optionsData;const o=!this.loading&&(t&&this.vc.filteredLength===0||!t&&!!r&&n.length===0);const h=!this.loading&&!t&&!r&&this.optionsData.length===0;const c=t?this.maxHeight??320:this.maxHeight;return e("md-menu",{ref:t=>this.menuEl=t,anchor:this.triggerId,placement:this.placement,"match-anchor-width":this.matchTriggerWidth,"max-height":c,"auto-focus":!this.filterable,"empty-text":"",listbox:true,"list-label":this.label||"Options",part:"menu",exportparts:"surface:menu-surface,empty-text",onMdOpen:this.handleMenuOpen,onMdClose:this.handleMenuClose},e("div",{slot:"header",part:"menu-header",class:"md-multi-select__menu-header"},e("slot",{name:"menu-header"})),this.filterable&&!this.loading&&e("div",{slot:"header",class:"md-multi-select__search-wrap",part:"search-wrap"},e("input",{class:"md-multi-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&&e(a,{class:"md-multi-select__search-spinner",part:"search-spinner",label:this.searchingLabel,"aria-hidden":"true"})),this.showSelectAll&&!t&&!this.loading&&this.optionsData.length>0&&e("div",{slot:"header",class:"md-multi-select__select-all",part:"select-all"},e("md-menu-item",{type:"checkbox","check-position":"start",part:"select-all-item","role-override":"checkbox","keep-open":true,headline:this.selectAllLabel,selected:s,indeterminate:l,disabled:this.isDisabled,onMdClick:t=>this.toggleSelectAll(t)})),this.loading?e("div",{class:"md-multi-select__loading",part:"loading-bar",role:"status","aria-label":this.loadingText},e("slot",{name:"menu-loader"},e("md-progress-indicator",{variant:"linear",indeterminate:true,wave:true,part:"loading-progress",label:this.loadingText}))):t?[this.renderVirtualOptions(),o?this.renderEmpty("no-results",this.noResultsText):null]:h?this.renderEmpty("no-options",this.noOptionsText):[e("div",{class:"md-multi-select__listbox",part:"listbox",role:"listbox",id:`${this.triggerId}-listbox`,"aria-multiselectable":"true","aria-label":this.label||"Options"},n.map(((t,i)=>{const s=this.isSelected(t.value);return e("md-menu-item",{key:t.value,id:`${this.triggerId}-opt-${i}`,presentation:"option",type:"checkbox","check-position":"start","keep-open":true,part:s?"option option-selected":"option",disabled:t.disabled,selected:s,headline:t.label,"supporting-text":t.supportingText||"",onMdClick:i=>this.toggleValue(t.value,i)},t.icon?e("span",{slot:"leading-icon",part:"option-icon",class:"material-symbols-outlined md-multi-select__option-icon",style:t.iconColor?{color:t.iconColor}:undefined,"aria-hidden":"true"},t.icon):null)}))),o?this.renderEmpty("no-results",this.noResultsText):null])}render(){return e(l,{key:"9fe3cdfe669524760d977efe2714ebcf4f19a59c",class:{"md-multi-select":true,[`md-multi-select--${this.variant}`]:true,"md-multi-select--open":this.open,"md-multi-select--disabled":this.disabled,"md-multi-select--soft-disabled":this.softDisabled,"md-multi-select--loading":this.loading,[`md-multi-select--display-${this.displayMode}`]:true,"md-multi-select--button":this.trigger==="button"&&!this.hasSlottedTrigger,"md-multi-select--slotted-trigger":this.hasSlottedTrigger,[`md-multi-select--chips-${this.chipPosition}`]:this.trigger==="button"||this.hasSlottedTrigger||this.displayMode==="chips"},"aria-haspopup":"listbox","aria-busy":this.loading?"true":undefined},e("div",{key:"7b1b2aecd1ac12d5645e779daa2973d60c00d678",class:"md-multi-select__frame",part:"frame",ref:t=>this.frameEl=t},this.renderTrigger(),this.renderChips()),this.renderInlineMeasure(),this.renderMenu(),e("div",{key:"18d8e66db39168d0f4d336220c09dab3615460aa",class:"md-multi-select__sr-live",part:"live-region",role:"status","aria-live":"polite","aria-atomic":"true"},this.liveMessage),e("div",{key:"0b01ad6bdeb5d95c6d035bc739ac83094f0e6e57",class:"md-multi-select__options",hidden:true},e("slot",{key:"e4bbb120ffdaf6307976dffa41227e97a8b834d0",onSlotchange:()=>this.refreshOptions()})))}static get formAssociated(){return true}get el(){return r(this)}static get watchers(){return{value:[{syncFormValue:0}],required:[{updateValidity:0}],valueMissingLabel:[{updateValidity:0}],options:[{refreshOptions:0}],open:[{syncMenu:0}]}}};x.style=_();export{x as md_multi_select};
2
+ //# sourceMappingURL=p-8a7e0297.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["mdMultiSelectCss","multiSelectIdCounter","VIRTUALIZE_THRESHOLD","SEARCH_DEBOUNCE_MS","MdMultiSelect","constructor","hostRef","this","valueMissingLabel","reserveSupportingSpace","customValidityMessage","variant","label","placeholder","supportingText","error","errorText","disabled","softDisabled","required","density","options","virtualize","filterable","filterMode","value","maxSelected","showSelectAll","selectAllLabel","placement","matchTriggerWidth","displayMode","chipOverflow","chipPosition","trigger","triggerIcon","triggerLabel","searchPlaceholder","filterLabel","noResultsText","noOptionsText","searchingLabel","loadingText","loading","clearable","clearIcon","clearLabel","dropdownIcon","name","open","optionsData","triggerId","hasTriggerLeading","hasTriggerTrailing","liveMessage","hasSlottedTrigger","query","inlineVisibleCount","Number","POSITIVE_INFINITY","inlineOverflowCount","wiredTrigger","_needsReposition","_focusChipAfterRender","vc","VirtualSelectController","queryItem","i","el","shadowRoot","querySelector","requestRender","forceUpdate","providerSet","selectedLabelMap","Map","searching","queryText","defaultValue","onTriggerSlotChange","computeSlottedTrigger","wireSlottedTrigger","lastValidityKey","loadSeq","_syncGuard","_lastEmit","toggleOpen","isDisabled","isSelected","val","includes","toggleValue","e","stopPropagation","has","blocked","length","item","target","selected","next","filter","v","mdChange","emit","removeValue","preventDefault","removedIndex","selectedOptions","findIndex","o","mdRemove","remaining","Math","min","clearValue","mdClear","fieldEl","focus","toggleSelectAll","eligible","map","allSelected","every","slice","undefined","nowAll","indeterminate","some","vpWired","handleMenuOpen","mdOpen","active","wireViewport","requestAnimationFrame","input","menuEl","setComboboxElement","handleMenuClose","mdClose","detachViewport","onSearchInput","q","clearTimeout","searchDebounce","setTimeout","setQuery","renderValueChip","opt","h","key","part","exportparts","selectable","removable","onMdRemove","onClick","recomputeInlineOverflow","display","inlineDisplayEl","measure","inlineMeasureEl","total","avail","clientWidth","gapStr","getComputedStyle","columnGap","gap","parseFloat","chipEls","Array","from","querySelectorAll","widths","c","getBoundingClientRect","width","w","plusEl","plusW","sumAll","visible","budget","used","add","optionList","parseJsonArrayProp","show","close","focusTrigger","reset","loadOptions","source","isWasmSupported","normalizeInits","rowsToArray","seq","setFixedRowHeight","rowHeight","setFilterMode","ok","load","updateSelectedLabels","syncSearchField","getLabels","values","Object","fromEntries","componentDidLoad","autoFocus","ResizeObserver","frameEl","_frameRO","reposition","observe","componentWillLoad","refreshOptions","preselected","syncFormValue","removeEventListener","addEventListener","id","setAttribute","formResetCallback","updateValidity","setFormValue","internals","data","FormData","append","setValidity","customError","valueMissing","emitValidityChange","getValidity","getValidityOf","valid","validationMessage","primed","mdValidityChange","checkValidity","checkValidityOf","reportValidity","reportValidityOf","setCustomValidity","message","collectOptions","shouldVirtualize","then","onOptionChange","syncMenu","handleKeyDown","vp","getScrollViewport","attachViewport","async","componentDidRender","setVirtualProvider","provider","chips","chip","removeBtn","_inlineRO","disconnect","disconnectedCallback","get","find","countText","n","countFormatter","renderTrigger","onSlotchange","renderTriggerMessage","renderButtonTrigger","renderFieldTrigger","hasValue","isInline","displayValue","join","ref","class","readOnly","appearFocused","chipsWrap","slot","renderInlineChips","LazyLoadingIndicator","type","descText","descId","size","icon","String","listboxRendered","onMdClick","role","isWrap","overflow","renderInlineMeasure","renderChips","renderVirtualOptions","style","height","topPad","windowRows","row","filteredIndex","windowStart","index","presentation","headline","filteredLength","bottomPad","renderEmpty","slotName","text","renderMenu","virtual","someSelected","trim","toLowerCase","listOptions","showNoResults","showNoOptions","menuMaxHeight","maxHeight","anchor","listbox","onMdOpen","onMdClose","autocomplete","onInput","wave","iconColor","color","render","Host","hidden"],"sources":["src/components/md-multi-select/md-multi-select.css?tag=md-multi-select&encapsulation=shadow","src/components/md-multi-select/md-multi-select.tsx"],"sourcesContent":["/* ==========================================================\n md-multi-select — Material Design 3 multi-value dropdown\n Composes md-text-field (trigger) + md-menu (option surface)\n so it inherits every layout / focus / state-layer / motion\n rule those primitives already own.\n\n PUBLIC CSS CUSTOM PROPERTIES (override per-instance):\n Trigger: --md-multi-select-width, -min-width, -trigger-width, -frame-gap\n Chips: --md-multi-select-chip-gap, -chip-radius\n Caret: --md-multi-select-caret-color, -caret-size (glyph), -caret-box-size\n Clear: --md-multi-select-clear-color, -clear-bg, -clear-hover-bg,\n -clear-size, -clear-radius, -clear-icon-size,\n -clear-focus-ring-color/-width/-offset\n Options: --md-multi-select-option-icon-size, -option-icon-color\n Search: --md-multi-select-search-bg, -search-color,\n -search-placeholder-color, -search-padding,\n -search-border-color/-width, -search-spinner-size\n Empty: --md-multi-select-empty-color, -empty-padding, -empty-font\n Loading: --md-multi-select-spinner-size (glyph), -loader-size (box),\n -loading-padding\n Select-all:--md-multi-select-select-all-divider-color/-width\n (Menu max-height is the `max-height` PROP, not a custom property.)\n\n CSS PARTS:\n field, field-container/-input/-label, button, button-desc, caret, chips,\n chip, chip-remove/-label, clear, menu, menu-surface, menu-header, listbox,\n option, select-all, select-all-item, search, search-wrap, search-spinner,\n loading-spinner/-bar/-progress, empty, live-region, frame\n\n SLOTS:\n loader, menu-loader, no-options, no-results, dropdown-icon, menu-header,\n trigger-leading, trigger-trailing\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 --_min-width: var(--md-multi-select-min-width, 200px);\n --_chip-gap: var(--md-multi-select-chip-gap, var(--md-sys-spacing-gap-xs, 4px));\n --_chip-radius: var(--md-multi-select-chip-radius, 8px);\n --_caret-color: var(--md-multi-select-caret-color, var(--md-sys-color-on-surface-variant));\n --_clear-color: var(--md-multi-select-clear-color, var(--md-sys-color-on-surface-variant));\n --_option-icon-size: var(--md-multi-select-option-icon-size, 20px);\n\n /* Establish the base font so shadow content that inherits it (the header search\n input uses `font: inherit`) renders in Roboto — not the browser default serif.\n Matches md-select's :host. */\n font-family: var(--md-sys-typescale-body-large-font-family, Roboto, sans-serif);\n\n display: inline-block;\n /* Fill the container width (like md-select) so the trigger is a STABLE size that\n does not track the selected content. Without this, the shrink-to-fit\n inline-block grows with the below-field chips row as items are selected — the\n trigger would balloon from ~234px to the container width. Override with\n --md-multi-select-width (e.g. max-content) for a content-sized field. */\n inline-size: var(--md-multi-select-width, 100%);\n min-inline-size: var(--_min-width);\n box-sizing: border-box;\n vertical-align: bottom;\n position: relative;\n}\n\n.md-multi-select__field {\n display: block;\n inline-size: 100%;\n cursor: pointer;\n --md-text-field-cursor: pointer;\n}\n\n.md-multi-select__field::part(input) {\n cursor: pointer;\n}\n\n/* Text mode: the comma-joined value can overflow the single-line trigger — clip\n it with an ellipsis rather than a hard cut. (text-overflow works on a\n single-line <input> while it is not focused, which is the trigger's usual state.) */\n:host(.md-multi-select--display-text) .md-multi-select__field::part(input) {\n text-overflow: ellipsis;\n}\n\n:host(.md-multi-select--disabled) .md-multi-select__field,\n:host(.md-multi-select--soft-disabled) .md-multi-select__field {\n cursor: not-allowed;\n --md-text-field-cursor: not-allowed;\n}\n\n:host(.md-multi-select--disabled) .md-multi-select__field::part(input),\n:host(.md-multi-select--soft-disabled) .md-multi-select__field::part(input) {\n cursor: not-allowed;\n}\n\n/* ── Selection chips (below the trigger) ──────────────────────\n Rendered in the host shadow, not the field's aria-hidden icon slot, so the\n chips and their remove buttons are exposed to assistive tech. */\n\n/* ── Trigger + chips positioning frame ────────────────────────\n The trigger and its below/around chip row live in this flex frame so\n `chip-position` is a flex-direction choice. `gap` provides the spacing\n between the trigger and the chips in every position. */\n.md-multi-select__frame {\n display: flex;\n flex-direction: column; /* chip-position: bottom (default) */\n /* Tapers with density: gap-sm is NOT one of the tokens the density layer\n steps (only gap-md and gap-lg are), so this gap sat at a flat 8px while\n the trigger and chips around it condensed. 0.5px/rung lands exactly on\n 6px at ultra density (-4) and leaves density 0 unchanged at 8px. */\n gap: var(--md-multi-select-frame-gap, max(6px, calc(8px + var(--md-sys-density-scale, 0) * 0.5px)));\n}\n\n:host(.md-multi-select--chips-top) .md-multi-select__frame {\n flex-direction: column-reverse;\n /* With the chips ABOVE, the field's floated label sits in this gap: an\n outlined label rises a constant 8px above the field's top border (measured\n at every density rung — the notch tracks the border, not the tapering font).\n A plain gap-sm therefore left only a hairline between the chips and the\n label. Clear those 8px first, then apply the normal gap on top. Chips below\n keep the plain gap — there is no label on that edge. */\n /* 16px at default down to 6px at ultra (-4), i.e. 2.5px/rung. Both ends are\n deliberate: at default the field's floated label rises a constant 8px into\n this gap, so 16px is what leaves a visible band between the chips and the\n label; at ultra the gap is asked to close to 6px total. Steeper than the\n chips-below taper (0.5px/rung) precisely because it starts higher and has\n to reach the same floor.\n NOTE: the label's 8px overhang does NOT taper (it tracks the border, not\n the font), so below about -3 the label begins to encroach on the chip row.\n That is the cost of a 6px total at ultra density. */\n gap: var(--md-multi-select-frame-gap, max(6px, calc(16px + var(--md-sys-density-scale, 0) * 2.5px)));\n}\n\n/* Chips beside the trigger: a wrapping row. The trigger sizes to its content so\n the chips sit next to it (rather than below); the chips take the remaining\n inline space and wrap. Natural pairing for trigger=\"button\". */\n:host(.md-multi-select--chips-left) .md-multi-select__frame,\n:host(.md-multi-select--chips-right) .md-multi-select__frame {\n /* nowrap: keep the trigger and the chip cluster on ONE row so the chips sit\n BESIDE the trigger. The cluster shrinks to the remaining space and its chips\n wrap internally (see below) — rather than the whole block dropping under the\n trigger the moment it doesn't fit at full width. */\n flex-flow: row nowrap;\n align-items: center;\n justify-content: flex-start;\n}\n/* Chips render after the trigger in the DOM; `order` (not row-reverse, which\n mis-wraps) puts them BEFORE it for chip-position=\"left\". */\n:host(.md-multi-select--chips-left) .md-multi-select__chips {\n order: -1;\n}\n:host(.md-multi-select--chips-left) .md-multi-select__field,\n:host(.md-multi-select--chips-right) .md-multi-select__field {\n inline-size: var(--md-multi-select-trigger-width, max-content);\n flex: 0 0 auto;\n}\n/* A slotted trigger is a light-DOM element assigned into the frame, so it is a\n flex item of the frame like the built-in one — it just has to be reached\n through ::slotted() to get the same \"size to content, sit beside the chips\"\n treatment. */\n:host(.md-multi-select--chips-left) ::slotted([slot='trigger']),\n:host(.md-multi-select--chips-right) ::slotted([slot='trigger']) {\n inline-size: var(--md-multi-select-trigger-width, max-content);\n flex: 0 0 auto;\n}\n\n:host(.md-multi-select--chips-left) .md-multi-select__chips,\n:host(.md-multi-select--chips-right) .md-multi-select__chips {\n /* Sit directly beside the trigger (don't grow → the trigger stays adjacent to\n the cluster rather than being pushed to the far edge), but shrink and wrap\n internally when the chips exceed the remaining space. min-inline-size:0 lets\n it shrink below its content so it never forces the trigger off the row. */\n flex: 0 1 auto;\n min-inline-size: 0;\n}\n\n.md-multi-select__chips {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--_chip-gap);\n max-inline-size: 100%;\n}\n\n/* Top/bottom only: keep the full-width chip row from driving the trigger's width.\n Contain the inline-size so the row NEVER contributes to the host's intrinsic\n (max-content) width — otherwise, in a shrink-to-fit parent, the host grows with\n each chip and the trigger width tracks the selection. Only inline-size is\n contained, so the row still wraps and grows in height. NOT applied to\n left/right, where the chip cluster must size to its content to sit beside the\n trigger (containing it would collapse the chips). */\n:host(.md-multi-select--chips-bottom) .md-multi-select__chips,\n:host(.md-multi-select--chips-top) .md-multi-select__chips {\n contain: inline-size;\n}\n\n.md-multi-select__chips md-chip {\n --md-chip-container-shape: var(--_chip-radius);\n}\n\n/* ── Button trigger (trigger=\"button\") ────────────────────────\n The compact opener uses the library md-button (variant=\"outlined\"); it brings\n its own MD3 styling. It's content-width so, in a left/right row frame, the\n chips take the remaining space beside it and wrap. */\n.md-multi-select__button {\n flex: 0 0 auto;\n}\n\n/* Error / supporting text for the button trigger (the field trigger delegates\n these to md-text-field). */\n.md-multi-select__button-desc {\n padding-block-start: 4px;\n padding-inline: 16px;\n font: var(--md-sys-typescale-body-small, 400 12px/16px Roboto, sans-serif);\n color: var(--md-sys-color-on-surface-variant, #49454f);\n}\n\n.md-multi-select__button-desc--error {\n color: var(--md-sys-color-error, #b3261e);\n}\n\n/* Visually-hidden polite live region. */\n.md-multi-select__sr-live {\n position: absolute;\n inline-size: 1px;\n block-size: 1px;\n margin: -1px;\n padding: 0;\n border: 0;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n}\n\n/* ── Selection chips (inside the trigger, display-mode=\"chips-inline\") ─────────\n Slotted into md-text-field's `chips` slot. The chips are DIRECT children of\n this wrapper, so the gap must live here (the field's slot span only spaces its\n single assigned element). */\n\n.md-multi-select__inline-chips {\n display: flex;\n /* Chips sit on a SINGLE line so a selection never changes the trigger's height\n (see md-text-field --with-chips). Chips that don't fit collapse into the\n trailing \"+N\" counter (chip-overflow=\"count\", the default). */\n flex-wrap: nowrap;\n align-items: center;\n gap: var(--_chip-gap);\n min-inline-size: 0;\n max-inline-size: 100%;\n flex: 1 1 auto; /* fill the field row so \"+N\" has room + width is measurable */\n position: relative; /* anchor the out-of-flow measurement row */\n overflow: hidden; /* safety clip; the +N math keeps every shown chip whole */\n}\n\n/* chip-overflow=\"wrap\": chips flow onto new rows and the field grows\n (md-text-field[chips-wrap] lets the input row wrap). */\n.md-multi-select__inline-chips--wrap {\n flex-wrap: wrap;\n overflow: visible;\n /* Breathing room at the top of the wrapped stack. On the single-line row the\n field's own block padding centres one chip, but once chips wrap the stack\n starts at the container's content edge and the first row sits hard against\n the top border — right under the notched label. Row gap matches, so the\n wrapped rows stay evenly spaced rather than only the first one moving. */\n padding-block-start: var(--md-multi-select-inline-chips-block-start, var(--md-sys-spacing-gap-xs, 4px));\n row-gap: var(--_chip-gap);\n}\n\n.md-multi-select__inline-chips md-chip,\n.md-multi-select__inline-measure md-chip {\n --md-chip-container-shape: var(--_chip-radius);\n /* Hold natural width on the single-line row: overflowing chips collapse into\n the \"+N\" counter rather than squishing down to just their ✕. */\n flex-shrink: 0;\n}\n\n/* Zero-size, overflow-clipped host for the measurement row so its natural-width\n content can never create a page scrollbar. */\n.md-multi-select__measure-clip {\n position: absolute;\n inline-size: 0;\n block-size: 0;\n overflow: hidden;\n pointer-events: none;\n}\n\n/* Out-of-flow measurement row: ALL chips + a worst-case counter at natural width.\n visibility:hidden keeps its remove buttons out of the tab order while still\n laying out (so recomputeInlineOverflow() can read intrinsic widths). */\n.md-multi-select__inline-measure {\n position: absolute;\n inset-block-start: 0;\n inset-inline-start: 0;\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n gap: var(--_chip-gap);\n inline-size: max-content;\n visibility: hidden;\n pointer-events: none;\n white-space: nowrap;\n}\n\n/* \"+N\" counter — styled like an input chip; opens the menu on click. */\n.md-multi-select__overflow-chip {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n block-size: var(--md-multi-select-chip-height, 32px);\n padding-inline: 12px;\n border: 1px solid var(--md-multi-select-chip-outline, var(--md-sys-color-outline-variant, #CAC4D0));\n border-radius: var(--_chip-radius);\n background: transparent;\n color: var(--md-sys-color-on-surface-variant, #49454F);\n font: 500 var(--md-sys-typescale-label-large-size, 14px) / var(--md-sys-typescale-label-large-line-height, 20px)\n var(--md-sys-typescale-label-large-font, Roboto, sans-serif);\n white-space: nowrap;\n cursor: pointer;\n}\n\n.md-multi-select__overflow-chip:hover:not(:disabled) {\n background: color-mix(in srgb, var(--md-sys-color-on-surface, #1C1B1F) 8%, transparent);\n}\n\n.md-multi-select__overflow-chip:focus-visible {\n outline: 2px solid var(--md-sys-color-primary, #6750A4);\n outline-offset: 2px;\n}\n\n/* ── Clear button ─────────────────────────────────────────── */\n\n.md-multi-select__clear {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n inline-size: var(--md-multi-select-clear-size, 28px);\n block-size: var(--md-multi-select-clear-size, 28px);\n padding: 0;\n background: var(--md-multi-select-clear-bg, transparent);\n border: 0;\n border-radius: var(--md-multi-select-clear-radius, 50%);\n color: var(--_clear-color);\n cursor: pointer;\n font-size: var(--md-multi-select-clear-icon-size, 18px);\n transition: background var(--md-sys-motion-duration-short2, 100ms) ease;\n}\n\n.md-multi-select__clear:hover {\n background: var(--md-multi-select-clear-hover-bg,\n color-mix(in srgb, var(--md-sys-color-on-surface) 8%, transparent));\n}\n\n.md-multi-select__clear:focus-visible {\n outline-width: var(--md-multi-select-clear-focus-ring-width, 2px);\n outline-style: solid;\n outline-color: var(--md-multi-select-clear-focus-ring-color, var(--md-sys-color-primary));\n outline-offset: var(--md-multi-select-clear-focus-ring-offset, 1px);\n}\n\n.md-multi-select__clear .material-symbols-outlined {\n font-size: var(--md-multi-select-clear-icon-size, 18px);\n}\n\n/* ── Trailing caret ───────────────────────────────────────── */\n\n/* The caret's wrapper is what md-text-field actually slots, so it absorbs the\n `width/height: var(--_icon-size)` that would otherwise squash the glyph. The\n `.md-multi-select__field` prefix raises this above md-text-field's\n `::slotted(*)` rule across the shadow boundary (same technique as\n `.md-select__field .md-select__trailing`). */\n.md-multi-select__field .md-multi-select__caret-box {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: auto;\n height: auto;\n}\n\n.md-multi-select__caret {\n color: var(--_caret-color);\n /* Match single-select: 24px glyph, 200ms/standard rotation (see md-select.css). */\n font-size: var(--md-multi-select-caret-size, 24px);\n line-height: 1;\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 display: inline-flex;\n align-items: center;\n justify-content: center;\n inline-size: var(--md-multi-select-caret-box-size, 24px);\n block-size: var(--md-multi-select-caret-box-size, 24px);\n}\n\n:host(.md-multi-select--open) .md-multi-select__caret {\n transform: rotate(180deg);\n}\n\n/* ── Busy state (loading) ─────────────────────────────────────\n Trigger spinner replaces the clear/caret cluster; a wavy linear progress bar\n replaces the option list in the menu. Mirrors md-select. */\n.md-multi-select__loader {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n inline-size: var(--md-multi-select-loader-size, 24px);\n block-size: var(--md-multi-select-loader-size, 24px);\n --md-loading-indicator-size: var(--md-multi-select-spinner-size, 22px);\n --md-loading-indicator-shape-size: var(--md-multi-select-spinner-size, 22px);\n}\n\n.md-multi-select__loading {\n display: flex;\n align-items: center;\n padding-block: var(--md-multi-select-loading-padding, var(--md-sys-spacing-inset-lg, 16px));\n padding-inline: var(--md-multi-select-loading-padding, var(--md-sys-spacing-inset-lg, 16px));\n}\n\n.md-multi-select__loading md-progress-indicator {\n inline-size: 100%;\n}\n\n/* Empty state (no options / no results). Carries the no-options/no-results slot;\n the default is plain text matching md-menu's empty-text. */\n.md-multi-select__empty {\n display: flex;\n justify-content: center; /* centre the message (and any slotted illustration/CTA) */\n padding: var(--md-multi-select-empty-padding, var(--md-sys-spacing-inset-md, 12px) var(--md-sys-spacing-inset-lg, 16px));\n color: var(--md-multi-select-empty-color, var(--md-sys-color-on-surface-variant, #49454f));\n text-align: center;\n font: var(--md-multi-select-empty-font, var(--md-sys-typescale-body-medium, 400 14px/20px Roboto, sans-serif));\n}\n\n/* ── Menu surface tweaks ──────────────────────────────────── */\n\n/* Pinned bulk-action row. The md-menu-item inside supplies its own padding,\n hover/focus state layer and typography — identical to the options — so the\n group only draws a subtle divider that separates the pinned action from the\n scrolling list. */\n.md-multi-select__select-all {\n display: block;\n border-block-end: var(--md-multi-select-select-all-divider-width, 1px) solid\n var(--md-multi-select-select-all-divider-color, var(--md-sys-color-outline-variant, #cac4d0));\n}\n\nmd-menu::part(empty-text) {\n display: block;\n padding: var(--md-multi-select-empty-padding, var(--md-sys-spacing-inset-md, 12px) var(--md-sys-spacing-inset-lg, 16px));\n color: var(--md-multi-select-empty-color, var(--md-sys-color-on-surface-variant));\n text-align: center;\n}\n\n.md-multi-select__option-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--md-multi-select-option-icon-color, var(--md-sys-color-on-surface-variant, #49454f));\n font-size: var(--_option-icon-size);\n inline-size: var(--_option-icon-size);\n block-size: var(--_option-icon-size);\n line-height: 1;\n}\n\n/* ── RTL ──────────────────────────────────────────────────────\n Chips use a plain flex row, so they follow `direction: rtl` on their own —\n the old `flex-direction: row-reverse` override double-reversed them (and\n relied on :host-context, which Firefox does not support). */\n\n/* ── Reduced motion ───────────────────────────────────────── */\n\n@media (prefers-reduced-motion: reduce) {\n .md-multi-select__caret,\n .md-multi-select__clear {\n transition: none;\n }\n}\n\n/* ── Forced colors (Windows High Contrast) ────────────────────\n The caret is a background-colored glyph and the chips region has no border of\n its own; give the caret a system color and keep the chips group perceivable so\n the control's affordances survive when author colors are dropped. */\n\n@media (forced-colors: active) {\n .md-multi-select__caret {\n color: CanvasText;\n }\n /* System colors survive when author colors are dropped, so focus rings stay\n visible in Windows High Contrast. */\n .md-multi-select__clear:focus-visible {\n outline-color: Highlight;\n }\n}\n\n/* ── Material Symbols font (shadow-root scope) ────────────── */\n\n/* The icon spans we render live in this shadow root (even when\n slotted into nested md-text-field / md-menu-item), so we need\n to declare the font-family for `.material-symbols-outlined`\n ourselves — shadow boundaries block page-level rules. */\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.md-multi-select__vspacer {\n display: block;\n flex: none;\n pointer-events: none;\n}\n\n.md-multi-select__search-wrap {\n position: relative;\n display: block;\n}\n\n.md-multi-select__search {\n box-sizing: border-box;\n width: 100%;\n border: none;\n outline: none;\n /* Right padding reserves room for the search loading indicator. */\n padding: var(--md-multi-select-search-padding, 12px 44px 12px 16px);\n font: inherit;\n color: var(--md-multi-select-search-color, var(--md-sys-color-on-surface, #1d1b20));\n background: var(--md-multi-select-search-bg, var(--md-sys-color-surface-container, #f3edf7));\n border-bottom: var(--md-multi-select-search-border-width, 1px) solid\n var(--md-multi-select-search-border-color, var(--md-sys-color-outline-variant, #cac4d0));\n}\n\n.md-multi-select__search::placeholder {\n color: var(--md-multi-select-search-placeholder-color, var(--md-sys-color-on-surface-variant, #49454f));\n}\n\n/* No focus ring on the search — matching md-select 1:1. It auto-focuses when the\n menu opens and the blinking text caret is the focus indicator, so the field\n stays flush inside the drawer (just the resting bottom divider, no outline). */\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-multi-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: var(--md-multi-select-search-spinner-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 normalizeInits,\n OptionRowSource,\n rowsToArray,\n SelectOptionData,\n SelectOptionInit,\n} from '../../utils/select-options';\nimport { setFormValue, checkValidityOf, reportValidityOf, getValidityOf } 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 multiSelectIdCounter = 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 reposition?: () => Promise<void>;\n setVirtualProvider?: (p: VirtualMenuProvider | null) => Promise<void>;\n getScrollViewport?: () => Promise<HTMLElement | null>;\n setComboboxElement?: (el: HTMLElement | null) => Promise<void>;\n};\n\n/** @deprecated Use slotted `<md-select-option>` or the shared option shape. */\nexport interface MdMultiSelectOption {\n value: string;\n label: string;\n description?: string;\n group?: string;\n icon?: string;\n iconHtml?: string;\n disabled?: boolean;\n}\n\n/**\n * `md-multi-select` — Material Design 3 multi-value dropdown.\n *\n * Shares its internals with `md-select`: an `md-text-field` trigger and an\n * `md-menu` option surface. Options come from slotted `<md-select-option>`\n * children (primary API) or the programmatic `options` array. Each becomes a\n * `type=\"checkbox\"` `md-menu-item` so several can be selected at once, and the\n * menu uses `keep-open` so multiple toggles don't dismiss it.\n *\n * Selected values render in the trigger as removable chips (`display-mode=\"chips\"`),\n * a \"{n} selected\" count, or comma-joined text.\n */\n@Component({\n tag: 'md-multi-select',\n styleUrl: 'md-multi-select.css',\n shadow: true,\n formAssociated: true,\n})\nexport class MdMultiSelect {\n @Element() el!: HTMLElement;\n\n\n /**\n * Localized constraint-validation message shown when `required` is unmet.\n * `errorText` still wins when set, so an app-supplied inline message and the\n * native bubble stay in agreement.\n */\n @Prop({ attribute: 'value-missing-label' }) valueMissingLabel: string = 'Please select at least one option';\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. Each selected value is submitted under the\n * host's `name` via a `FormData` payload, so the control participates in\n * `<form>`/`FormData` natively (repeated `name=value` pairs) — hidden\n * `<input>`s in the shadow root would be invisible to `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 nothing is selected. */\n @Prop() placeholder: string = '';\n\n /** Supporting / helper text below the field. */\n @Prop({ attribute: 'supporting-text' }) supportingText: string = '';\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 /** Disabled — non-interactive. */\n @Prop({ reflect: true }) disabled: boolean = false;\n\n /** Soft-disabled — disabled visuals but still focusable. */\n @Prop({ reflect: true, attribute: 'soft-disabled' }) softDisabled: boolean = false;\n\n /** Required (form validation parity). */\n @Prop({ reflect: true }) required: boolean = false;\n\n /** Density forwarded to the inner field. */\n @Prop({ reflect: true }) density: 0 | -1 | -2 | -3 | -4 = 0;\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-multi-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.\n * - `'never'`: keep the classic DOM rendering.\n * Virtualized rows render label + selection only (no per-row icon /\n * supporting text), assume a uniform row height, and disable \"Select all\".\n */\n @Prop() virtualize: 'auto' | 'always' | 'never' = 'auto';\n\n /** Show a search field in the menu header that filters via the WASM engine. */\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 /** Currently selected values. */\n @Prop({ mutable: true }) value: string[] = [];\n\n /** Maximum number of selected items. `0` = unlimited. */\n @Prop({ attribute: 'max-selected' }) maxSelected: number = 0;\n\n /** Render an inline \"Select all\" checkbox at the top of the menu. */\n @Prop({ attribute: 'show-select-all', reflect: true }) showSelectAll: boolean = false;\n\n /** Label for the \"Select all\" item. */\n @Prop({ attribute: 'select-all-label' }) selectAllLabel: string = 'Select all';\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 /** Max height of the dropdown menu (px), forwarded to `md-menu`. Virtualized\n * lists fall back to 320 when unset (they need a bounded scroll viewport). */\n @Prop({ attribute: 'max-height' }) maxHeight?: number;\n\n /**\n * Match the dropdown width to the trigger. When `false` the menu sizes to\n * content. Maps to `md-menu`'s `match-anchor-width`. Default `true`.\n */\n @Prop({ attribute: 'match-trigger-width', reflect: true })\n matchTriggerWidth: boolean = true;\n\n /**\n * How selected values appear in the trigger:\n * - `'chips'` (default): removable chips in a region BELOW the field.\n * - `'chips-inline'`: removable chips INSIDE the trigger input, on a single\n * line — the field keeps its normal height and never grows; chips that\n * overflow are clipped (the open menu is the source of truth).\n * - `'count'`: \"{n} selected\".\n * - `'text'`: comma-joined labels.\n */\n @Prop({ reflect: true, attribute: 'display-mode' })\n displayMode: 'chips' | 'chips-inline' | 'count' | 'text' = 'chips';\n\n /**\n * For `display-mode=\"chips-inline\"`, how the in-field chips handle running out\n * of room:\n * - `'count'` (default): chips stay on ONE line; the field keeps its normal\n * height and the chips that don't fit collapse into a trailing `+N` counter\n * chip (click it — or the field — to open the menu and manage the full set).\n * - `'wrap'`: chips wrap onto new rows and the field grows to fit them.\n */\n @Prop({ reflect: true, attribute: 'chip-overflow' })\n chipOverflow: 'count' | 'wrap' = 'count';\n\n /**\n * Where the removable chips sit relative to the trigger, for `display-mode=\"chips\"`\n * (ignored for `chips-inline`/`count`/`text`): `'bottom'` (default), `'top'`,\n * `'left'`, or `'right'`. `left`/`right` place the chips beside the trigger and are\n * the natural pairing for `trigger=\"button\"`.\n */\n @Prop({ reflect: true, attribute: 'chip-position' })\n chipPosition: 'bottom' | 'top' | 'left' | 'right' = 'bottom';\n\n /**\n * Trigger style: `'field'` (default) is the readonly md-text-field; `'button'` is\n * a compact button (leading icon + label) that only opens the drawer — the\n * selection shows as removable chips beside it (pair with `chip-position`\n * `left`/`right`). The button always shows chips regardless of `display-mode`.\n */\n @Prop({ reflect: true }) trigger: 'field' | 'button' = 'field';\n\n /** Leading icon (Material Symbol name) for `trigger=\"button\"`. */\n @Prop({ attribute: 'trigger-icon' }) triggerIcon: string = 'add';\n\n /** Button text for `trigger=\"button\"`. Falls back to `label`. */\n @Prop({ attribute: 'trigger-label' }) triggerLabel: string = '';\n\n /** Custom formatter for `display-mode=\"count\"`. */\n @Prop() countFormatter?: (count: number) => string;\n\n /** Placeholder for the filter search input (localization). */\n @Prop({ attribute: 'search-placeholder' }) searchPlaceholder: string = 'Search…';\n\n /** Accessible label for the filter search input. Defaults to \"Filter {label}\". */\n @Prop({ attribute: 'filter-label' }) filterLabel: string = '';\n\n /** Text shown when the filter matches no options (localization). */\n @Prop({ attribute: 'no-results-text' }) noResultsText: string = 'No results';\n\n /** Text shown when there are no options at all (localization). */\n @Prop({ attribute: 'no-options-text' }) noOptionsText: string = 'No options';\n\n /** Accessible label for the search spinner (localization). */\n @Prop({ attribute: 'searching-label' }) searchingLabel: string = 'Searching';\n\n /** Text shown in the trigger / menu while `loading` is true. */\n @Prop({ attribute: 'loading-text' }) loadingText: string = 'Loading…';\n\n /**\n * Show a busy state: the trigger shows a spinner instead of the caret and the\n * host is `aria-busy`, and the menu shows a wavy progress bar instead of the\n * option list. Use while an async dataset loads (e.g. before/around a large\n * `loadOptions`). Replace the trigger spinner with the `loader` slot.\n */\n @Prop({ reflect: true }) loading: boolean = false;\n\n /** Show a clear (×) button in the trigger that removes all selections. */\n @Prop({ reflect: true }) clearable: boolean = false;\n\n /** Material Symbols glyph for the clear button. */\n @Prop({ attribute: 'clear-icon' }) clearIcon: string = 'close';\n\n /** Accessible label for the clear button (localization). */\n @Prop({ attribute: 'clear-label' }) clearLabel: string = 'Clear selection';\n\n /** Caret glyph (Material Symbol) for the field trigger; rotates 180° when open.\n * Override the whole glyph with the `dropdown-icon` slot. */\n @Prop({ attribute: 'dropdown-icon' }) dropdownIcon: string = 'arrow_drop_down';\n\n /** Form name. Selected values submit as repeated `name=value` pairs. */\n @Prop({ reflect: true }) name: string = '';\n\n /** Open state of the menu. Reflected so `:host([open])` rules apply. */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n\n /** Emits the full selected-value array whenever the selection changes. */\n @Event() mdChange!: EventEmitter<string[]>;\n\n /** Emits when the menu opens. */\n @Event() mdOpen!: EventEmitter<void>;\n\n /** Emits when the menu closes. */\n @Event() mdClose!: EventEmitter<void>;\n\n /** Emits the removed value when a chip is dismissed. */\n @Event() mdRemove!: EventEmitter<string>;\n\n /** Emits when the clear button empties the selection. */\n @Event() mdClear!: EventEmitter<void>;\n\n @State() private optionsData: SelectOptionData[] = [];\n @State() private triggerId = `md-multi-select-${++multiSelectIdCounter}`;\n // Only forward the trigger-leading/trailing slots into md-text-field when the\n // consumer actually provides content: md-text-field flags a slotted leading icon\n // purely by the PRESENCE of a [slot=\"leading-icon\"] element, so an empty\n // forwarding <slot> would shift the label and steal the trailing cluster.\n @State() private hasTriggerLeading = false;\n @State() private hasTriggerTrailing = false;\n // Visually-hidden polite live region: announces selection-count and filter-result\n // changes that would otherwise be silent (readonly trigger value / windowed list).\n @State() private liveMessage = '';\n /** A consumer element in `slot=\"trigger\"` REPLACES the built-in field / button.\n * State, not a plain field: its arrival has to swap what `renderTrigger` emits. */\n @State() private hasSlottedTrigger = false;\n\n /** Client-side filter query for `filterable` on a NON-virtualized list (the\n * virtualized path filters through the WASM engine via `vc.setQuery`). */\n @State() private query = '';\n\n /** chips-inline + chip-overflow=\"count\": how many leading chips fit on the\n * single line, and how many collapse into the trailing \"+N\" counter. */\n @State() private inlineVisibleCount = Number.POSITIVE_INFINITY;\n @State() private inlineOverflowCount = 0;\n\n private inlineDisplayEl?: HTMLElement;\n private inlineMeasureEl?: HTMLElement;\n private _inlineRO?: ResizeObserver;\n\n private fieldEl?: HTMLElement & { focus?: () => void };\n /** The consumer's trigger element, once wired. Kept so re-wiring can detach\n * the listener from a trigger that was swapped out. */\n private wiredTrigger: HTMLElement | null = null;\n private menuEl?: VirtualMenuEl;\n private frameEl?: HTMLElement;\n private _frameRO?: ResizeObserver;\n private _needsReposition = false;\n // After removing a chip, move focus to the chip that takes its place (or the\n // previous one, or the trigger) instead of dropping focus to <body>.\n private _focusChipAfterRender: number | 'trigger' | null = null;\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 /** Labels for the selected values (off-window safe) while virtualized. */\n private selectedLabelMap = new Map<string, string>();\n private searchDebounce?: ReturnType<typeof setTimeout>;\n /** True between a keystroke and the debounced query resolving (drives the spinner). */\n private searching = false;\n\n private get isDisabled() {\n return this.disabled || this.softDisabled;\n }\n\n // ── Public API ───────────────────────────────────────────\n\n /** Open the dropdown programmatically. */\n @Method()\n async show() {\n if (this.isDisabled) 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 all selections. */\n @Method()\n async reset() {\n if (this.value.length === 0) return;\n this.value = [];\n this.mdChange.emit([]);\n }\n\n /**\n * Load a large dataset into the WASM-backed virtualized list. Accepts a\n * materialised `SelectOptionInit[]` or a row factory (`{ count, getRow }`) —\n * the factory streams rows into WASM one at a time, so tens of millions of\n * options never exist as JS objects at once. Falls back to plain DOM rendering\n * when `virtualize=\"never\"` or WebAssembly is unavailable.\n */\n @Method()\n async loadOptions(source: SelectOptionInit[] | OptionRowSource) {\n if (this.virtualize === 'never' || !isWasmSupported()) {\n this.loadSeq++;\n this.vc.reset();\n this.optionsData = normalizeInits(rowsToArray(source));\n return;\n }\n const seq = ++this.loadSeq;\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 (seq !== this.loadSeq) return; // superseded by a newer load/refresh\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.updateSelectedLabels();\n }\n forceUpdate(this);\n }\n\n /** Programmatically filter the virtualized list (mirrors the search field). */\n @Method()\n async setQuery(query: string) {\n this.vc.setQuery(query);\n // The non-virtual path filters off `query`, and the search field is\n // uncontrolled — so drive both, or the list narrows (or doesn't) while the\n // box still reads empty and the call looks like a no-op.\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-multi-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 selection, restored on form reset. */\n private defaultValue: string[] = [];\n\n componentDidLoad() {\n this.wireSlottedTrigger();\n // @Watch('open') does not fire for the initial value, so a declaratively-open\n // menu (`open` set at load) would render the expanded chrome (caret up,\n // aria-expanded=\"true\") with no actual menu surface. Show it now — without\n // autoFocus, so an initially-open select doesn't steal focus on page load.\n if (this.open && !this.isDisabled) {\n this.menuEl?.show?.({ autoFocus: false });\n }\n\n // The trigger can MOVE while the menu is open without any scroll/resize —\n // e.g. selecting a value adds a chip beside the button trigger, reflowing the\n // frame and shifting the trigger. md-menu only re-anchors on scroll/resize, so\n // watch the frame and nudge the open menu to follow its anchor.\n if (typeof ResizeObserver !== 'undefined' && this.frameEl) {\n this._frameRO = new ResizeObserver(() => {\n if (this.open) void this.menuEl?.reposition?.();\n });\n this._frameRO.observe(this.frameEl);\n }\n }\n\n componentWillLoad() {\n this.refreshOptions();\n if (this.value.length === 0) {\n const preselected = this.optionsData\n .filter((o) => o.selected && !o.disabled)\n .map((o) => o.value);\n if (preselected.length) this.value = preselected;\n }\n this.defaultValue = [...this.value];\n this.syncFormValue();\n this.hasTriggerLeading = !!this.el.querySelector('[slot=\"trigger-leading\"]');\n this.hasTriggerTrailing = !!this.el.querySelector('[slot=\"trigger-trailing\"]');\n this.computeSlottedTrigger();\n }\n\n /** ── Consumer-supplied trigger ─────────────────────────────\n *\n * `slot=\"trigger\"` takes over from the built-in field / button entirely: any\n * element works (md-button, md-icon-button, md-fab, a plain button), and the\n * chips keep their `chip-position` relationship to it, so the opener sits\n * OUTSIDE the component's own chrome without losing the chip layout.\n *\n * The element is the consumer's, so it is never re-rendered here — only wired:\n * a click opens, an id makes it the menu's anchor, and `aria-haspopup`\n * advertises the popup. All of it is idempotent. */\n private computeSlottedTrigger() {\n this.hasSlottedTrigger = this.el.querySelector('[slot=\"trigger\"]') !== null;\n }\n\n private onTriggerSlotChange = () => {\n this.computeSlottedTrigger();\n this.wireSlottedTrigger();\n };\n\n private wireSlottedTrigger() {\n const trigger = this.el.querySelector('[slot=\"trigger\"]') as HTMLElement | null;\n if (!trigger) {\n this.wiredTrigger?.removeEventListener('click', this.toggleOpen);\n this.wiredTrigger = null;\n return;\n }\n if (trigger !== this.wiredTrigger) {\n this.wiredTrigger?.removeEventListener('click', this.toggleOpen);\n trigger.addEventListener('click', this.toggleOpen);\n this.wiredTrigger = trigger;\n }\n // md-menu resolves its anchor by id, falling back to the document — which is\n // exactly where a slotted trigger lives — so stamping our id makes the popup\n // position against the consumer's element. A trigger that already carries an\n // id keeps it, and becomes the anchor under that name instead.\n if (!trigger.id) trigger.id = this.triggerId;\n else if (trigger.id !== this.triggerId) this.triggerId = trigger.id;\n // md-menu sets aria-expanded (and re-asserts haspopup) as it opens; declare\n // the popup up front so the relationship is announced before the first open.\n trigger.setAttribute('aria-haspopup', 'listbox');\n // NB: no aria-controls. The listbox lives in THIS shadow root and the trigger\n // does not — an IDREF cannot cross that boundary, it would simply dangle.\n this.fieldEl = trigger as HTMLElement & { focus?: () => void };\n }\n\n /** Restore the initial selection when the owning form is reset. */\n formResetCallback() {\n this.value = [...this.defaultValue];\n }\n\n /** Submit each selected value under `name` as a repeated form field. */\n @Watch('value')\n syncFormValue() {\n this.updateSelectedLabels();\n this.updateValidity();\n // Announce the new selection count — the readonly trigger value / windowed\n // chips change silently otherwise. (Initial content is not announced by a\n // polite live region, so the load-time call here is harmless.)\n this.liveMessage = this.value.length ? `${this.value.length} selected` : 'None selected';\n // A selection change reflows the chips, which can move the trigger (e.g. the\n // button trigger shifts as chips are added beside it). Re-anchor the open menu\n // after the chips render (componentDidRender) — a frame ResizeObserver only\n // catches size changes, not a same-size horizontal shift.\n this._needsReposition = true;\n if (!this.value.length) {\n setFormValue(this.internals, null);\n return;\n }\n const data = new FormData();\n const name = this.name || '';\n for (const v of this.value) data.append(name, v);\n setFormValue(this.internals, data);\n }\n\n /** Constraint validation: a `required` multi-select is invalid with no selection,\n * so it blocks form submission and reports like a native required control. */\n @Watch('required')\n @Watch('valueMissingLabel')\n updateValidity() {\n if (!this.internals?.setValidity) return;\n // setCustomValidity() takes precedence over valueMissing, matching native.\n if (this.customValidityMessage) {\n this.internals.setValidity(\n { customError: true },\n this.customValidityMessage,\n (this.fieldEl as HTMLElement) ?? this.el,\n );\n } else if (this.required && this.value.length === 0) {\n this.internals.setValidity(\n { valueMissing: true },\n this.errorText || this.valueMissingLabel,\n (this.fieldEl as HTMLElement) ?? this.el,\n );\n } else {\n this.internals.setValidity({});\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 * Validity was already published to the form here, but with no public method\n * a consumer could not ASK this control whether it was valid. */\n @Method()\n async checkValidity(): Promise<boolean> {\n return checkValidityOf(this.internals);\n }\n\n @Method()\n async reportValidity(): Promise<boolean> {\n return reportValidityOf(this.internals);\n }\n\n @Method()\n async setCustomValidity(message: string) {\n this.customValidityMessage = message;\n this.updateValidity();\n }\n\n /** Monotonic token so a slow WASM load can't clobber a newer options set. */\n private loadSeq = 0;\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 const seq = ++this.loadSeq;\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 (seq !== this.loadSeq) return; // a newer refresh superseded this load\n if (!ok) {\n this.optionsData = data;\n forceUpdate(this);\n } else {\n this.updateSelectedLabels();\n }\n });\n } else {\n this.loadSeq++; // invalidate any in-flight virtual load\n this.vc.reset();\n this.optionsData = data;\n }\n }\n\n /** Refresh cached labels for the selected values (virtual mode). */\n private updateSelectedLabels() {\n if (this.vc.active && this.value.length) {\n this.selectedLabelMap = this.vc.getLabels(this.value);\n } else {\n this.selectedLabelMap = new Map();\n }\n forceUpdate(this);\n }\n\n @Listen('mdSelectOptionChange')\n onOptionChange(e: Event) {\n e.stopPropagation();\n this.refreshOptions();\n }\n\n private _syncGuard = false;\n private _lastEmit: 'open' | 'close' | null = null;\n\n @Watch('open')\n syncMenu(open: boolean) {\n if (this._syncGuard || !this.menuEl) return;\n // autoFocus moves real focus into the option list so arrow keys navigate it.\n // Only the filterable+virtual case keeps focus on the search input (which owns\n // the listbox via aria-activedescendant). Previously this was always false, so\n // opening left focus on the readonly trigger and the options were unreachable\n // by keyboard.\n // Filterable = combobox: focus the search, not an option (for the virtual\n // list AND the plain-DOM list). From the search, ArrowDown moves focus into\n // the listbox — the \"focus moves into the popup\" WAI-ARIA combobox variant.\n if (open) this.menuEl.show?.({ autoFocus: !this.filterable });\n else this.menuEl.close?.();\n }\n\n // ── Keyboard (trigger) ───────────────────────────────────\n\n @Listen('keydown')\n handleKeyDown(e: KeyboardEvent) {\n if (this.isDisabled) return;\n // APG select-only listbox/combobox: Down/Up/Enter/Space all open the menu.\n if (!this.open && (e.key === 'ArrowDown' || e.key === 'ArrowUp' || 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.isDisabled) return;\n this.open = !this.open;\n };\n\n private isSelected = (val: string) => this.value.includes(val);\n\n private toggleValue = (val: string, e?: CustomEvent) => {\n // The option is an md-menu-item whose `mdClick` is composed:true, so without\n // this it escapes our shadow root and surfaces on the page ALONGSIDE our own\n // `mdChange` — a duplicate, internal event for consumers. We consume it here;\n // `mdChange` is the single public \"selection changed\" signal.\n e?.stopPropagation();\n if (this.isDisabled) return;\n const has = this.isSelected(val);\n const blocked = !has && this.maxSelected > 0 && this.value.length >= this.maxSelected;\n if (blocked) {\n // md-menu-item self-toggles its own `selected` on click (uncontrolled) BEFORE\n // this handler runs, and since `value` doesn't change there is no re-render to\n // reset it — the option would stay visually + aria-selected checked while\n // excluded from value/FormData. Revert the exact item that fired.\n const item = e?.target as (HTMLElement & { selected?: boolean }) | null;\n if (item) item.selected = false;\n return;\n }\n const next = has ? this.value.filter((v) => v !== val) : [...this.value, val];\n this.value = next;\n this.mdChange.emit([...next]);\n };\n\n private removeValue = (val: string) => (e: CustomEvent | MouseEvent) => {\n e.stopPropagation();\n if ('preventDefault' in e) e.preventDefault();\n if (this.isDisabled || !this.isSelected(val)) return;\n const removedIndex = this.selectedOptions().findIndex((o) => o.value === val);\n this.value = this.value.filter((v) => v !== val);\n this.mdRemove.emit(val);\n this.mdChange.emit([...this.value]);\n // Keyboard/AT focus must not fall to <body> when the focused chip unmounts.\n const remaining = this.selectedOptions().length;\n this._focusChipAfterRender = remaining === 0 ? 'trigger' : Math.min(removedIndex, remaining - 1);\n };\n\n private clearValue = (e: MouseEvent) => {\n e.stopPropagation(); // don't let the click also toggle the menu open\n if (this.isDisabled || this.value.length === 0) return;\n this.value = [];\n this.mdChange.emit([]);\n this.mdClear.emit();\n this.fieldEl?.focus?.();\n };\n\n private toggleSelectAll = (e?: CustomEvent) => {\n e?.stopPropagation(); // don't leak the option's internal mdClick — see toggleValue\n if (this.isDisabled) return;\n const eligible = this.optionsData.filter((o) => !o.disabled).map((o) => o.value);\n const allSelected = eligible.length > 0 && eligible.every((v) => this.value.includes(v));\n this.value = allSelected\n ? []\n : eligible.slice(0, this.maxSelected > 0 ? this.maxSelected : undefined);\n this.mdChange.emit([...this.value]);\n // md-menu-item self-toggles its own `selected` on click (uncontrolled) before\n // this handler runs; reconcile it to the TRUE post-update state (the maxSelected\n // cap can make \"select all\" only partially apply → the row must land on the\n // indeterminate dash, not the tick).\n const item = e?.target as (HTMLElement & { selected?: boolean; indeterminate?: boolean }) | null;\n if (item) {\n const nowAll = eligible.length > 0 && eligible.every((v) => this.value.includes(v));\n item.selected = nowAll;\n item.indeterminate = !nowAll && eligible.some((v) => this.value.includes(v));\n }\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. opened mid-pack showing the uncapped busy bar) just\n * returns, and componentDidRender 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 }\n if (this.filterable) {\n // Same combobox wiring for BOTH the virtual and the plain-DOM list: focus\n // the search and register it so md-menu drives the active option via\n // aria-activedescendant on it (focus stays here while arrowing).\n requestAnimationFrame(() => {\n const input = this.el.shadowRoot?.querySelector('.md-multi-select__search') as HTMLElement | null;\n input?.focus();\n void this.menuEl?.setComboboxElement?.(input);\n });\n }\n };\n\n private handleMenuClose = () => {\n this._syncGuard = true;\n this.open = false;\n this._syncGuard = false;\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 // Clear the non-virtual filter so reopening shows the full list. The search\n // input is uncontrolled, so reset its text too.\n if (this.query) {\n this.query = '';\n const input = this.el.shadowRoot?.querySelector('.md-multi-select__search') as HTMLInputElement | null;\n if (input) input.value = '';\n }\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 // Non-virtual list: filter the DOM options client-side. Cheap, so it runs\n // synchronously on each keystroke (no spinner, no debounce).\n this.query = q;\n return;\n }\n // Virtualized list: show the spinner immediately, debounce the (expensive)\n // WASM query, then clear the spinner once results are in.\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. */\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 // The menu can open BEFORE the data arrives (e.g. `open` while `loading`),\n // when the vc is still inactive — so handleMenuOpen skips the viewport\n // attach and the window never advances past the first page. Wire the\n // combobox now; the viewport wiring is retried below every render until\n // the (capped) scroll viewport actually exists.\n if (this.open && this.filterable) {\n const input = this.el.shadowRoot?.querySelector('.md-multi-select__search') as HTMLElement | null;\n void this.menuEl?.setComboboxElement?.(input);\n }\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 // After a selection-driven re-render, re-anchor the open menu to the (possibly\n // moved) trigger on the next frame, once layout has settled.\n if (this._needsReposition) {\n this._needsReposition = false;\n if (this.open) requestAnimationFrame(() => void this.menuEl?.reposition?.());\n }\n // Restore focus after a chip was removed (its element unmounted).\n if (this._focusChipAfterRender !== null) {\n const target = this._focusChipAfterRender;\n this._focusChipAfterRender = null;\n requestAnimationFrame(() => {\n if (target === 'trigger') {\n this.fieldEl?.focus?.();\n return;\n }\n const chips = this.el.shadowRoot?.querySelectorAll<HTMLElement>(\n // Direct-child `> md-chip` for the inline row so the hidden measurement\n // row's chips (nested in .md-multi-select__inline-measure) don't shift\n // the index.\n '.md-multi-select__chips md-chip, .md-multi-select__inline-chips > md-chip',\n );\n // The chips are non-selectable tokens (role=group); their only focusable\n // element is the remove ✕ button — focus THAT, not the inert host.\n const chip = chips?.[target];\n const removeBtn = chip?.shadowRoot?.querySelector<HTMLElement>('[part=\"remove\"]');\n (removeBtn ?? chip ?? (this.fieldEl as HTMLElement | undefined))?.focus?.();\n });\n }\n\n // chips-inline + chip-overflow=\"count\": (re)measure how many chips fit and\n // observe the field so the \"+N\" counter tracks selection AND width changes.\n if (this.trigger === 'field' && this.displayMode === 'chips-inline' && this.chipOverflow === 'count') {\n if (typeof ResizeObserver !== 'undefined') {\n if (!this._inlineRO) this._inlineRO = new ResizeObserver(this.recomputeInlineOverflow);\n this._inlineRO.disconnect();\n // Observe BOTH: the display row (available width) and the measurement row\n // (its size settles when the md-chips finish hydrating → real widths).\n if (this.inlineDisplayEl) this._inlineRO.observe(this.inlineDisplayEl);\n if (this.inlineMeasureEl) this._inlineRO.observe(this.inlineMeasureEl);\n }\n requestAnimationFrame(this.recomputeInlineOverflow);\n } else {\n this._inlineRO?.disconnect();\n }\n }\n\n disconnectedCallback() {\n this.wiredTrigger?.removeEventListener('click', this.toggleOpen);\n this.wiredTrigger = null;\n clearTimeout(this.searchDebounce);\n this.vc.detachViewport();\n this._frameRO?.disconnect();\n this._frameRO = undefined;\n this._inlineRO?.disconnect();\n this._inlineRO = undefined;\n }\n\n // ── Derived ──────────────────────────────────────────────\n\n private selectedOptions(): SelectOptionData[] {\n if (this.vc.active) {\n // Labels resolved from WASM — selections may be outside the filter/window.\n return this.value.map((v) => ({\n value: v,\n label: this.selectedLabelMap.get(v) ?? v,\n disabled: false,\n }));\n }\n return this.value\n .map((v) => this.optionsData.find((o) => o.value === v))\n .filter((o): o is SelectOptionData => !!o);\n }\n\n private countText(): string {\n const n = this.value.length;\n if (n === 0) return '';\n return this.countFormatter ? this.countFormatter(n) : `${n} selected`;\n }\n\n // ── Render ───────────────────────────────────────────────\n\n /** The slot is rendered UNCONDITIONALLY — it is what tells us a trigger arrived.\n * Rendering it only once `hasSlottedTrigger` is true would mean a trigger added\n * later has nothing to project into, and `slotchange` would never fire. */\n private renderTrigger() {\n return [\n <slot name=\"trigger\" onSlotchange={this.onTriggerSlotChange} />,\n this.hasSlottedTrigger\n ? this.renderTriggerMessage()\n : this.trigger === 'button'\n ? this.renderButtonTrigger()\n : this.renderFieldTrigger(),\n ];\n }\n\n private renderFieldTrigger() {\n const selected = this.selectedOptions();\n const hasValue = selected.length > 0;\n\n const isInline = this.displayMode === 'chips-inline';\n\n // The trigger's accessible VALUE summarises the selection so the field is\n // announced with its content and the floating label floats. 'text' mode uses\n // the joined labels; 'chips'/'count' use the count summary. 'chips-inline'\n // renders the chips INSIDE the field (via md-text-field's non-aria-hidden\n // `chips` slot), so it carries no text value — the slotted chips are the\n // content (and float the label via the field's hasSlottedChips signal).\n const displayValue = isInline\n ? ''\n : this.displayMode === 'text' && hasValue\n ? selected.map((o) => o.label).join(', ')\n : hasValue\n ? this.countText()\n : '';\n\n return (\n <md-text-field\n ref={(el) => (this.fieldEl = el as HTMLElement)}\n id={this.triggerId}\n class=\"md-multi-select__field\"\n part=\"field\"\n exportparts=\"container:field-container,input:field-input,label:field-label\"\n variant={this.variant}\n label={this.label}\n placeholder={hasValue ? '' : this.placeholder}\n value={displayValue}\n readOnly={true}\n disabled={this.disabled}\n error={this.error}\n errorText={this.errorText}\n reserveSupportingSpace={this.reserveSupportingSpace}\n supportingText={this.supportingText}\n required={this.required}\n // Chips beside the field (left/right) read best against a COMPACT trigger\n // so the field height is closer to the 32px chips it sits next to.\n density={this.chipPosition === 'left' || this.chipPosition === 'right' ? -3 : this.density}\n appearFocused={this.open}\n // chips-inline: let the field grow only when overflow=\"wrap\"; the default\n // \"count\" mode keeps a single line and collapses extras into \"+N\".\n chipsWrap={isInline && this.chipOverflow === 'wrap'}\n onClick={this.toggleOpen}\n >\n {/* Custom leading content in the trigger (e.g. an icon or avatar). Only\n forwarded when actually provided — an empty forwarding slot would make\n md-text-field reserve leading-icon space and mis-align the label. */}\n {this.hasTriggerLeading && <slot name=\"trigger-leading\" slot=\"leading-icon\"></slot>}\n {isInline && this.renderInlineChips()}\n {/* Custom trailing content, before the clear/caret cluster. Conditional so\n an empty slot doesn't become the \"first\" trailing-icon and break the\n clear button's interactive-trailing detection. */}\n {this.hasTriggerTrailing && <slot name=\"trigger-trailing\" slot=\"trailing-icon\"></slot>}\n {this.loading ? (\n // Busy state: a spinner replaces the clear/caret cluster. Consumers can\n // swap it via the `loader` slot; the default is md-loading-indicator.\n <span slot=\"trailing-icon\" class=\"md-multi-select__loader\" part=\"loading-spinner\">\n <slot name=\"loader\">\n <LazyLoadingIndicator label={this.loadingText}></LazyLoadingIndicator>\n </slot>\n </span>\n ) : (\n [\n this.clearable && hasValue && !this.isDisabled && (\n // A real <button> in the trailing slot: md-text-field detects it as an\n // interactive trailing control and un-hides the trailing wrapper, so this\n // clear button is keyboard-reachable and announced (unlike a decorative\n // caret). It sits before the caret.\n <button\n type=\"button\"\n slot=\"trailing-icon\"\n class=\"md-multi-select__clear\"\n part=\"clear\"\n aria-label={this.clearLabel}\n onClick={this.clearValue}\n >\n <span class=\"material-symbols-outlined\" aria-hidden=\"true\">{this.clearIcon}</span>\n </button>\n ),\n // The caret is NESTED one level down, not slotted directly. md-text-field\n // sizes the top-level slotted node with `font-size: var(--_icon-size)\n // !important`, which tapers with density — and `::slotted()` matches only\n // that top-level node, so a glyph one level in is out of its reach and\n // keeps its own 24px. This is the same reason md-select's caret sits\n // inside `.md-select__trailing`; without it the two carets drift apart at\n // every density rung below 0.\n <span\n slot=\"trailing-icon\"\n class=\"md-multi-select__caret-box\"\n part=\"caret-box\"\n aria-hidden=\"true\"\n >\n <span class=\"md-multi-select__caret material-symbols-outlined\" part=\"caret\">\n <slot name=\"dropdown-icon\">{this.dropdownIcon}</slot>\n </span>\n </span>,\n ]\n )}\n </md-text-field>\n );\n }\n\n /** Compact button trigger: opens the drawer; the selection shows as chips\n * beside it. Uses the library's md-button (role=\"button\" on its host, which is\n * the focusable element) so aria-haspopup/controls sit on the trigger and\n * resolve to the listbox in this shadow root. */\n private renderButtonTrigger() {\n // The field trigger delegates required/error/supporting to md-text-field; the\n // button path must wire the equivalent ARIA + a visible message itself.\n const descText = this.error && this.errorText ? this.errorText : this.supportingText;\n const descId = descText ? `${this.triggerId}-desc` : undefined;\n return [\n <md-button\n ref={(el) => (this.fieldEl = el as HTMLElement)}\n id={this.triggerId}\n class=\"md-multi-select__button\"\n part=\"field button\"\n variant=\"outlined\"\n size=\"xs\"\n icon={this.triggerIcon}\n loading={this.loading}\n disabled={this.isDisabled}\n aria-haspopup=\"listbox\"\n aria-expanded={String(this.open)}\n aria-controls={this.listboxRendered ? `${this.triggerId}-listbox` : undefined}\n // aria-required is not allowed on role=\"button\"; required is conveyed via\n // the described-by message + form validity (ElementInternals). aria-invalid\n // is a global state and is allowed.\n aria-invalid={this.error ? 'true' : undefined}\n aria-describedby={descId}\n onMdClick={this.toggleOpen}\n >\n {this.triggerLabel || this.label}\n </md-button>,\n this.renderTriggerMessage(),\n ];\n }\n\n /** Supporting / error line for the trigger paths md-text-field does not own —\n * the button trigger and a slotted one. The id is only emitted when something\n * can actually reference it: a slotted trigger lives in the light DOM, where an\n * IDREF into this shadow root would dangle, so an error there is announced by\n * role=\"alert\" instead of aria-describedby. */\n private renderTriggerMessage() {\n const descText = this.error && this.errorText ? this.errorText : this.supportingText;\n if (!descText) return null;\n return (\n <div\n id={this.hasSlottedTrigger ? undefined : `${this.triggerId}-desc`}\n class={{\n 'md-multi-select__button-desc': true,\n 'md-multi-select__button-desc--error': this.error && !!this.errorText,\n }}\n part=\"button-desc\"\n role={this.error ? 'alert' : undefined}\n >\n {descText}\n </div>\n );\n }\n\n /** The role=listbox (id `${triggerId}-listbox`) exists when open and not loading,\n * except the non-virtual empty state which renders the empty message instead —\n * so aria-controls only points at a listbox that is actually in the DOM. */\n private get listboxRendered(): boolean {\n return this.open && !this.loading && (this.vc.active || this.optionsData.length > 0);\n }\n\n /** A single removable value token. Shared by the inline display row and the\n * hidden measurement row. */\n private renderValueChip = (opt: SelectOptionData) => (\n <md-chip\n key={opt.value}\n part=\"chip\"\n exportparts=\"remove:chip-remove,label:chip-label\"\n variant=\"input\"\n // A display token of a selected value — clicking the body must not\n // toggle a misleading \"active\"/selected state; only ✕ removes it.\n selectable={false}\n label={opt.label}\n disabled={this.isDisabled}\n removable={!this.isDisabled}\n onMdRemove={this.removeValue(opt.value)}\n onClick={(e: MouseEvent) => e.stopPropagation()}\n ></md-chip>\n );\n\n /** Chips slotted INSIDE the field (display-mode=\"chips-inline\") via md-text-field's\n * `chips` slot — in the input flow, not the aria-hidden icon slot. In `count`\n * overflow mode the chips that don't fit collapse into a trailing \"+N\" chip\n * (the visible count is computed in {@link recomputeInlineOverflow}); in `wrap`\n * mode all chips render and the field grows. */\n private renderInlineChips() {\n const selected = this.selectedOptions();\n if (selected.length === 0) return null;\n\n const isWrap = this.chipOverflow === 'wrap';\n const visible = isWrap ? selected.length : Math.min(selected.length, this.inlineVisibleCount);\n const overflow = isWrap ? 0 : selected.length - visible;\n\n return (\n <div\n slot=\"chips\"\n class={{\n 'md-multi-select__inline-chips': true,\n 'md-multi-select__inline-chips--wrap': isWrap,\n }}\n part=\"chips\"\n role=\"group\"\n aria-label={this.label ? `${this.label} — selected` : 'Selected'}\n ref={(el) => (this.inlineDisplayEl = el as HTMLElement)}\n >\n {selected.slice(0, visible).map(this.renderValueChip)}\n {overflow > 0 && (\n <button\n type=\"button\"\n class=\"md-multi-select__overflow-chip\"\n part=\"overflow-chip\"\n aria-label={`${overflow} more selected — open to manage`}\n // Stop the bubble to the field's onClick so we toggle exactly once.\n onClick={(e: MouseEvent) => { e.stopPropagation(); this.toggleOpen(); }}\n >\n +{overflow}\n </button>\n )}\n </div>\n );\n }\n\n /** Hidden, out-of-flow measurement row rendered in THIS component's shadow (not\n * slotted into the field, so consumers querying `[slot=\"chips\"] md-chip` never\n * see duplicates). Chip widths are intrinsic (label + padding), so measuring\n * here matches what they'd render at inside the field. Only present for the\n * count-overflow path that needs it. */\n private renderInlineMeasure() {\n if (this.trigger !== 'field' || this.displayMode !== 'chips-inline' || this.chipOverflow !== 'count') return null;\n const selected = this.selectedOptions();\n if (selected.length === 0) return null;\n return (\n // Zero-size, overflow-clipped wrapper: contains the natural-width row so it\n // never creates page scrollbars; the row itself is visibility:hidden so its\n // remove buttons aren't tab stops (still laid out → measurable).\n <div class=\"md-multi-select__measure-clip\" aria-hidden=\"true\">\n <div class=\"md-multi-select__inline-measure\" ref={(el) => (this.inlineMeasureEl = el as HTMLElement)}>\n {selected.map(this.renderValueChip)}\n <span class=\"md-multi-select__overflow-chip\">+{selected.length}</span>\n </div>\n </div>\n );\n }\n\n /** Measure how many leading chips fit on the single line and collapse the rest\n * into the \"+N\" counter. Idempotent: it reads intrinsic chip widths from the\n * hidden measurement row (stable regardless of how many are currently shown)\n * and the available width from the display row (which fills the field), so\n * re-running after its own state change converges without looping. */\n private recomputeInlineOverflow = () => {\n if (this.trigger !== 'field' || this.displayMode !== 'chips-inline' || this.chipOverflow !== 'count') return;\n const display = this.inlineDisplayEl;\n const measure = this.inlineMeasureEl;\n const total = this.selectedOptions().length;\n if (!display || !measure || total === 0) return;\n const avail = display.clientWidth;\n if (avail <= 0) return; // not laid out yet\n\n const gapStr = getComputedStyle(measure).columnGap || getComputedStyle(measure).gap;\n const gap = parseFloat(gapStr) || 4;\n const chipEls = Array.from(measure.querySelectorAll('md-chip')) as HTMLElement[];\n const widths = chipEls.slice(0, total).map((c) => c.getBoundingClientRect().width);\n if (widths.some((w) => w <= 0)) return; // chips not hydrated/measured yet — retry on next RO tick\n const plusEl = measure.querySelector('.md-multi-select__overflow-chip') as HTMLElement | null;\n const plusW = plusEl ? plusEl.getBoundingClientRect().width : 44;\n\n // Does the whole set fit? (no counter needed)\n let sumAll = 0;\n for (let i = 0; i < total; i++) sumAll += widths[i] + (i > 0 ? gap : 0);\n\n let visible: number;\n if (sumAll <= avail + 0.5) {\n visible = total;\n } else {\n const budget = avail - plusW - gap; // reserve the \"+N\" counter\n let used = 0;\n visible = 0;\n for (let i = 0; i < total; i++) {\n const add = widths[i] + (i > 0 ? gap : 0);\n if (used + add <= budget) { used += add; visible++; } else break;\n }\n }\n\n if (visible !== this.inlineVisibleCount || total - visible !== this.inlineOverflowCount) {\n this.inlineVisibleCount = visible;\n this.inlineOverflowCount = total - visible;\n }\n };\n\n /** Removable selection chips, rendered in the host shadow (NOT the field's\n * aria-hidden icon slot) so they are visible to assistive tech and their remove\n * buttons are operable and announced. */\n private renderChips() {\n // The button trigger has no in-field value display, so it always shows chips;\n // the field trigger shows them only in display-mode=\"chips\".\n // A slotted trigger has no in-field value display either, so it behaves like\n // the button trigger: the selection IS the chips beside it.\n if (this.trigger !== 'button' && !this.hasSlottedTrigger && this.displayMode !== 'chips')\n return null;\n const selected = this.selectedOptions();\n if (selected.length === 0) return null;\n return (\n // role=\"group\" (not \"list\"): md-chip forces its own Host role=\"button\", so a\n // role=\"listitem\" on the chip would be clobbered and a role=\"list\" would report\n // as an empty list. A labelled group of buttons is the accurate structure.\n <div\n class=\"md-multi-select__chips\"\n part=\"chips\"\n role=\"group\"\n aria-label={this.label ? `${this.label} — selected` : 'Selected'}\n >\n {selected.map((opt) => (\n <md-chip\n key={opt.value}\n part=\"chip\"\n exportparts=\"remove:chip-remove,label:chip-label\"\n variant=\"input\"\n // A display token of a selected value — clicking the body must not\n // toggle a misleading \"active\"/selected state; only ✕ removes it.\n selectable={false}\n label={opt.label}\n disabled={this.isDisabled}\n removable={!this.isDisabled}\n onMdRemove={this.removeValue(opt.value)}\n onClick={(e: MouseEvent) => e.stopPropagation()}\n ></md-chip>\n ))}\n </div>\n );\n }\n\n private renderVirtualOptions() {\n // A role=\"listbox\" wrapper (in this shadow root, so the combobox input's\n // aria-controls/aria-activedescendant IDREFs resolve) that directly owns its\n // role=\"option\" children — the WAI-ARIA multiselectable listbox structure.\n return (\n <div\n class=\"md-multi-select__listbox\"\n part=\"listbox\"\n role=\"listbox\"\n id={`${this.triggerId}-listbox`}\n aria-multiselectable=\"true\"\n aria-label={this.label || 'Options'}\n >\n <div\n class=\"md-multi-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 = this.isSelected(row.value);\n return (\n <md-menu-item\n key={row.index}\n // Stable id so md-menu can point aria-activedescendant here.\n id={`${this.triggerId}-opt-${filteredIndex}`}\n data-vindex={filteredIndex}\n // presentation=\"option\" → role=\"option\" + aria-selected (the listbox\n // multiselectable pattern), not menuitemcheckbox.\n presentation=\"option\"\n type=\"checkbox\"\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={(e: CustomEvent) => this.toggleValue(row.value, e)}\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-multi-select-option-icon-color.\n class=\"material-symbols-outlined md-multi-select__option-icon\"\n aria-hidden=\"true\"\n >\n {row.icon}\n </span>\n ) : null}\n {/* No light-DOM label copy: md-menu-item renders `headline` in its\n shadow, so an unslotted text child would double the option's\n accessible name (\"Apple Apple\"). */}\n </md-menu-item>\n );\n })}\n <div\n class=\"md-multi-select__vspacer\"\n style={{ height: `${this.vc.bottomPad}px` }}\n aria-hidden=\"true\"\n ></div>\n </div>\n );\n }\n\n /** Empty-state message with a `no-options` / `no-results` slot so a consumer can\n * replace the plain text with custom markup (illustration, CTA, etc.). */\n private renderEmpty(slotName: 'no-options' | 'no-results', text: string) {\n return (\n <div class=\"md-multi-select__empty\" part=\"empty\" role=\"status\">\n <slot name={slotName}>{text}</slot>\n </div>\n );\n }\n\n private renderMenu() {\n const virtual = this.vc.active;\n const eligible = this.optionsData.filter((o) => !o.disabled);\n const allSelected = eligible.length > 0 && eligible.every((o) => this.value.includes(o.value));\n const someSelected = !allSelected && eligible.some((o) => this.value.includes(o.value));\n // Non-virtual `filterable`: filter the DOM options client-side by label /\n // supporting text (case-insensitive). Virtual filtering runs in the WASM engine.\n const q = this.filterable && !virtual ? this.query.trim().toLowerCase() : '';\n const listOptions = q\n ? this.optionsData.filter(\n (o) => o.label.toLowerCase().includes(q) || (o.supportingText || '').toLowerCase().includes(q),\n )\n : this.optionsData;\n // Empty states are rendered HERE (not via md-menu's text-only empty-text) so\n // they carry the `no-options` / `no-results` slots for custom markup.\n const showNoResults =\n !this.loading && ((virtual && this.vc.filteredLength === 0) || (!virtual && !!q && listOptions.length === 0));\n const showNoOptions = !this.loading && !virtual && !q && this.optionsData.length === 0;\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}\n max-height={menuMaxHeight}\n // Filterable = combobox: the search owns focus (md-menu drives the active\n // option via aria-activedescendant), so don't auto-focus the first option.\n auto-focus={!this.filterable}\n empty-text=\"\"\n // Present the popup as a WAI-ARIA listbox (not a menu) and name it, so the\n // trigger advertises a listbox popup consistently and options are `option`s.\n listbox\n list-label={this.label || 'Options'}\n part=\"menu\"\n exportparts=\"surface:menu-surface,empty-text\"\n onMdOpen={this.handleMenuOpen}\n onMdClose={this.handleMenuClose}\n >\n {/* Custom pinned header content above the built-in search / select-all.\n Empty (zero-height) when nothing is slotted. */}\n <div slot=\"header\" part=\"menu-header\" class=\"md-multi-select__menu-header\">\n <slot name=\"menu-header\"></slot>\n </div>\n {this.filterable && !this.loading && (\n <div slot=\"header\" class=\"md-multi-select__search-wrap\" part=\"search-wrap\">\n <input\n class=\"md-multi-select__search\"\n part=\"search\"\n type=\"text\"\n // WAI-ARIA combobox: this input owns focus while the listbox is open;\n // md-menu conveys the active option via aria-activedescendant, and\n // aria-controls points at the listbox wrapper rendered in this shadow root.\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-multi-select__search-spinner\"\n part=\"search-spinner\"\n label={this.searchingLabel}\n aria-hidden=\"true\"\n ></LazyLoadingIndicator>\n )}\n </div>\n )}\n {/* \"Select all\" is a bulk action pinned in the menu header — styled exactly\n like an option (an md-menu-item with a start-check glyph: tick when all\n selected, dash when some, blank when none) rather than a heavy checkbox\n square. It isn't a listbox value, so it lives in its own role=\"group\"\n (a valid parent for the menuitemcheckbox) above the scrolling options,\n and is skipped for virtualized data (would materialise every value). */}\n {this.showSelectAll && !virtual && !this.loading && this.optionsData.length > 0 && (\n <div slot=\"header\" class=\"md-multi-select__select-all\" part=\"select-all\">\n <md-menu-item\n type=\"checkbox\"\n check-position=\"start\"\n part=\"select-all-item\"\n // A bulk \"select all\" toggle is a tri-state CHECKBOX, not a menu item\n // (no menu context in a listbox popup) — role=\"checkbox\" keeps\n // aria-checked without the menuitemcheckbox required-parent violation.\n role-override=\"checkbox\"\n keep-open\n headline={this.selectAllLabel}\n selected={allSelected}\n indeterminate={someSelected}\n disabled={this.isDisabled}\n onMdClick={(e: CustomEvent) => this.toggleSelectAll(e)}\n ></md-menu-item>\n </div>\n )}\n {this.loading ? (\n // Busy state inside the menu: a wavy (M3 Expressive) indeterminate linear\n // progress bar instead of the option list or \"Loading…\" text.\n <div class=\"md-multi-select__loading\" part=\"loading-bar\" role=\"status\" aria-label={this.loadingText}>\n <slot name=\"menu-loader\">\n <md-progress-indicator\n variant=\"linear\"\n indeterminate\n wave\n part=\"loading-progress\"\n label={this.loadingText}\n ></md-progress-indicator>\n </slot>\n </div>\n ) : virtual ? (\n // Keep the (empty) listbox so aria-controls resolves; add the no-results\n // slot beside it when the filter matches nothing.\n [this.renderVirtualOptions(), showNoResults ? this.renderEmpty('no-results', this.noResultsText) : null]\n ) : showNoOptions ? (\n this.renderEmpty('no-options', this.noOptionsText)\n ) : (\n // Plain-DOM list. `listOptions` is the client-side filtered set for\n // `filterable`; the listbox always renders (empty on no match) so the\n // search's aria-controls resolves, with the no-results slot beside it.\n [\n <div\n class=\"md-multi-select__listbox\"\n part=\"listbox\"\n role=\"listbox\"\n id={`${this.triggerId}-listbox`}\n aria-multiselectable=\"true\"\n aria-label={this.label || 'Options'}\n >\n {listOptions.map((opt, i) => {\n const selected = this.isSelected(opt.value);\n return (\n <md-menu-item\n key={opt.value}\n // Index-based id (not value-based) so two options that share a\n // value cannot mint duplicate DOM ids in this shadow root.\n id={`${this.triggerId}-opt-${i}`}\n presentation=\"option\"\n type=\"checkbox\"\n check-position=\"start\"\n keep-open\n part={selected ? 'option option-selected' : 'option'}\n disabled={opt.disabled}\n selected={selected}\n headline={opt.label}\n supporting-text={opt.supportingText || ''}\n onMdClick={(e: CustomEvent) => this.toggleValue(opt.value, e)}\n >\n {opt.icon ? (\n <span\n slot=\"leading-icon\"\n part=\"option-icon\"\n class=\"material-symbols-outlined md-multi-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 child — headline already names the option. */}\n </md-menu-item>\n );\n })}\n </div>,\n showNoResults ? this.renderEmpty('no-results', this.noResultsText) : null,\n ]\n )}\n </md-menu>\n );\n }\n\n render() {\n return (\n <Host\n class={{\n 'md-multi-select': true,\n [`md-multi-select--${this.variant}`]: true,\n 'md-multi-select--open': this.open,\n 'md-multi-select--disabled': this.disabled,\n 'md-multi-select--soft-disabled': this.softDisabled,\n 'md-multi-select--loading': this.loading,\n [`md-multi-select--display-${this.displayMode}`]: true,\n 'md-multi-select--button': this.trigger === 'button' && !this.hasSlottedTrigger,\n 'md-multi-select--slotted-trigger': this.hasSlottedTrigger,\n [`md-multi-select--chips-${this.chipPosition}`]:\n this.trigger === 'button' ||\n this.hasSlottedTrigger ||\n this.displayMode === 'chips',\n }}\n aria-haspopup=\"listbox\"\n // NB: no aria-expanded on the host. The host has no role, so a screen\n // reader IGNORES aria-expanded here (axe flags it \"aria attribute may be\n // ignored\") — it was never announced. The open/closed state is conveyed\n // where it actually works: the button trigger (role=button) and the\n // filterable search (role=combobox) carry their own aria-expanded, and on\n // open focus moves into the menu (the search, or md-menu's first option).\n aria-busy={this.loading ? 'true' : undefined}\n >\n {/* Trigger + its below/around chips share a positioning frame so\n chip-position (top/bottom/left/right) is a flex-direction choice. */}\n <div class=\"md-multi-select__frame\" part=\"frame\" ref={(el) => (this.frameEl = el as HTMLElement)}>\n {this.renderTrigger()}\n {this.renderChips()}\n </div>\n {this.renderInlineMeasure()}\n {this.renderMenu()}\n {/* Polite live region for selection-count / filter-result announcements. */}\n <div class=\"md-multi-select__sr-live\" part=\"live-region\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {this.liveMessage}\n </div>\n <div class=\"md-multi-select__options\" hidden>\n <slot onSlotchange={() => this.refreshOptions()} />\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"wQAAA,MAAMA,EAAmB,IAAM,gmUCgB/B,IAAIC,EAAuB,EAG3B,MAAMC,EAAuB,IAG7B,MAAMC,EAAqB,I,MAwCdC,EAAa,MAN1B,WAAAC,CAAAC,G,oYAe8CC,KAAAC,kBAA4B,oCAQvBD,KAAAE,uBAAkC,MAG3EF,KAAAG,sBAAwB,GAWPH,KAAAI,QAAiC,WAGlDJ,KAAAK,MAAgB,GAGhBL,KAAAM,YAAsB,GAGUN,KAAAO,eAAyB,GAGxCP,KAAAQ,MAAiB,MAGPR,KAAAS,UAAoB,GAG9BT,KAAAU,SAAoB,MAGQV,KAAAW,aAAwB,MAGpDX,KAAAY,SAAoB,MAGpBZ,KAAAa,QAAiC,EAUlDb,KAAAc,QAAuC,GAevCd,KAAAe,WAA0C,OAG1Cf,KAAAgB,WAAsB,MAGMhB,KAAAiB,WAAyB,YAMpCjB,KAAAkB,MAAkB,GAGNlB,KAAAmB,YAAsB,EAGJnB,KAAAoB,cAAyB,MAGvCpB,KAAAqB,eAAyB,aAG1DrB,KAAAsB,UACN,eAWFtB,KAAAuB,kBAA6B,KAY7BvB,KAAAwB,YAA2D,QAW3DxB,KAAAyB,aAAiC,QASjCzB,KAAA0B,aAAoD,SAQ3B1B,KAAA2B,QAA8B,QAGlB3B,KAAA4B,YAAsB,MAGrB5B,KAAA6B,aAAuB,GAMlB7B,KAAA8B,kBAA4B,UAGlC9B,KAAA+B,YAAsB,GAGnB/B,KAAAgC,cAAwB,aAGxBhC,KAAAiC,cAAwB,aAGxBjC,KAAAkC,eAAyB,YAG5BlC,KAAAmC,YAAsB,WAQlCnC,KAAAoC,QAAmB,MAGnBpC,KAAAqC,UAAqB,MAGXrC,KAAAsC,UAAoB,QAGnBtC,KAAAuC,WAAqB,kBAInBvC,KAAAwC,aAAuB,kBAGpCxC,KAAAyC,KAAe,GAGAzC,KAAA0C,KAAgB,MAiBvC1C,KAAA2C,YAAkC,GAClC3C,KAAA4C,UAAY,qBAAqBlD,IAKjCM,KAAA6C,kBAAoB,MACpB7C,KAAA8C,mBAAqB,MAGrB9C,KAAA+C,YAAc,GAGd/C,KAAAgD,kBAAoB,MAIpBhD,KAAAiD,MAAQ,GAIRjD,KAAAkD,mBAAqBC,OAAOC,kBAC5BpD,KAAAqD,oBAAsB,EAS/BrD,KAAAsD,aAAmC,KAInCtD,KAAAuD,iBAAmB,MAGnBvD,KAAAwD,sBAAmD,KAGnDxD,KAAAyD,GAAK,IAAIC,EAAwB,CACvCC,UAAYC,GACT5D,KAAK6D,GAAGC,YAAYC,cACnB,6BAA6BH,QACH,KAC9BI,cAAe,IAAMC,EAAYjE,QAE3BA,KAAAkE,YAAc,MAEdlE,KAAAmE,iBAAmB,IAAIC,IAGvBpE,KAAAqE,UAAY,MAmFZrE,KAAAsE,UAA2B,KAqB3BtE,KAAAuE,aAAyB,GAqDzBvE,KAAAwE,oBAAsB,KAC5BxE,KAAKyE,wBACLzE,KAAK0E,oBAAoB,EA+GnB1E,KAAA2E,gBAAiC,KAuCjC3E,KAAA4E,QAAU,EA8CV5E,KAAA6E,WAAa,MACb7E,KAAA8E,UAAqC,KAmCrC9E,KAAA+E,WAAa,KACnB,GAAI/E,KAAKgF,WAAY,OACrBhF,KAAK0C,MAAQ1C,KAAK0C,IAAI,EAGhB1C,KAAAiF,WAAcC,GAAgBlF,KAAKkB,MAAMiE,SAASD,GAElDlF,KAAAoF,YAAc,CAACF,EAAaG,KAKlCA,GAAGC,kBACH,GAAItF,KAAKgF,WAAY,OACrB,MAAMO,EAAMvF,KAAKiF,WAAWC,GAC5B,MAAMM,GAAWD,GAAOvF,KAAKmB,YAAc,GAAKnB,KAAKkB,MAAMuE,QAAUzF,KAAKmB,YAC1E,GAAIqE,EAAS,CAKX,MAAME,EAAOL,GAAGM,OAChB,GAAID,EAAMA,EAAKE,SAAW,MAC1B,M,CAEF,MAAMC,EAAON,EAAMvF,KAAKkB,MAAM4E,QAAQC,GAAMA,IAAMb,IAAO,IAAIlF,KAAKkB,MAAOgE,GACzElF,KAAKkB,MAAQ2E,EACb7F,KAAKgG,SAASC,KAAK,IAAIJ,GAAM,EAGvB7F,KAAAkG,YAAehB,GAAiBG,IACtCA,EAAEC,kBACF,GAAI,mBAAoBD,EAAGA,EAAEc,iBAC7B,GAAInG,KAAKgF,aAAehF,KAAKiF,WAAWC,GAAM,OAC9C,MAAMkB,EAAepG,KAAKqG,kBAAkBC,WAAWC,GAAMA,EAAErF,QAAUgE,IACzElF,KAAKkB,MAAQlB,KAAKkB,MAAM4E,QAAQC,GAAMA,IAAMb,IAC5ClF,KAAKwG,SAASP,KAAKf,GACnBlF,KAAKgG,SAASC,KAAK,IAAIjG,KAAKkB,QAE5B,MAAMuF,EAAYzG,KAAKqG,kBAAkBZ,OACzCzF,KAAKwD,sBAAwBiD,IAAc,EAAI,UAAYC,KAAKC,IAAIP,EAAcK,EAAY,EAAE,EAG1FzG,KAAA4G,WAAcvB,IACpBA,EAAEC,kBACF,GAAItF,KAAKgF,YAAchF,KAAKkB,MAAMuE,SAAW,EAAG,OAChDzF,KAAKkB,MAAQ,GACblB,KAAKgG,SAASC,KAAK,IACnBjG,KAAK6G,QAAQZ,OACbjG,KAAK8G,SAASC,SAAS,EAGjB/G,KAAAgH,gBAAmB3B,IACzBA,GAAGC,kBACH,GAAItF,KAAKgF,WAAY,OACrB,MAAMiC,EAAWjH,KAAK2C,YAAYmD,QAAQS,IAAOA,EAAE7F,WAAUwG,KAAKX,GAAMA,EAAErF,QAC1E,MAAMiG,EAAcF,EAASxB,OAAS,GAAKwB,EAASG,OAAOrB,GAAM/F,KAAKkB,MAAMiE,SAASY,KACrF/F,KAAKkB,MAAQiG,EACT,GACAF,EAASI,MAAM,EAAGrH,KAAKmB,YAAc,EAAInB,KAAKmB,YAAcmG,WAChEtH,KAAKgG,SAASC,KAAK,IAAIjG,KAAKkB,QAK5B,MAAMwE,EAAOL,GAAGM,OAChB,GAAID,EAAM,CACR,MAAM6B,EAASN,EAASxB,OAAS,GAAKwB,EAASG,OAAOrB,GAAM/F,KAAKkB,MAAMiE,SAASY,KAChFL,EAAKE,SAAW2B,EAChB7B,EAAK8B,eAAiBD,GAAUN,EAASQ,MAAM1B,GAAM/F,KAAKkB,MAAMiE,SAASY,I,GAKrE/F,KAAA0H,QAAU,MAcV1H,KAAA2H,eAAiB,KACvB3H,KAAK6E,WAAa,KAClB7E,KAAK0C,KAAO,KACZ1C,KAAK6E,WAAa,MAClB,GAAI7E,KAAK8E,YAAc,OAAQ,CAC7B9E,KAAK8E,UAAY,OACjB9E,KAAK4H,OAAO3B,M,CAEd,GAAIjG,KAAKyD,GAAGoE,OAAQ,CAClB7H,KAAK8H,c,CAEP,GAAI9H,KAAKgB,WAAY,CAInB+G,uBAAsB,KACpB,MAAMC,EAAQhI,KAAK6D,GAAGC,YAAYC,cAAc,4BAChDiE,GAAOjB,aACF/G,KAAKiI,QAAQC,qBAAqBF,EAAM,G,GAK3ChI,KAAAmI,gBAAkB,KACxBnI,KAAK6E,WAAa,KAClB7E,KAAK0C,KAAO,MACZ1C,KAAK6E,WAAa,MAClB,GAAI7E,KAAK8E,YAAc,QAAS,CAC9B9E,KAAK8E,UAAY,QACjB9E,KAAKoI,QAAQnC,M,MAEVjG,KAAKiI,QAAQC,qBAAqB,MACvClI,KAAKyD,GAAG4E,iBACRrI,KAAK0H,QAAU,MAGf,GAAI1H,KAAKiD,MAAO,CACdjD,KAAKiD,MAAQ,GACb,MAAM+E,EAAQhI,KAAK6D,GAAGC,YAAYC,cAAc,4BAChD,GAAIiE,EAAOA,EAAM9G,MAAQ,E,GAIrBlB,KAAAsI,cAAiBjD,IACvB,MAAMkD,EAAKlD,EAAEM,OAA4BzE,MACzClB,KAAKsE,UAAY,KACjB,IAAKtE,KAAKyD,GAAGoE,OAAQ,CAGnB7H,KAAKiD,MAAQsF,EACb,M,CAIF,IAAKvI,KAAKqE,UAAW,CACnBrE,KAAKqE,UAAY,KACjBJ,EAAYjE,K,CAEdwI,aAAaxI,KAAKyI,gBAClBzI,KAAKyI,eAAiBC,YAAW,KAC/B1I,KAAKyD,GAAGkF,SAASJ,GACjBvI,KAAKqE,UAAY,MACjBJ,EAAYjE,KAAK,GAChBJ,EAAmB,EAoShBI,KAAA4I,gBAAmBC,GACzBC,EAAA,WACEC,IAAKF,EAAI3H,MACT8H,KAAK,OACLC,YAAY,sCACZ7I,QAAQ,QAGR8I,WAAY,MACZ7I,MAAOwI,EAAIxI,MACXK,SAAUV,KAAKgF,WACfmE,WAAYnJ,KAAKgF,WACjBoE,WAAYpJ,KAAKkG,YAAY2C,EAAI3H,OACjCmI,QAAUhE,GAAkBA,EAAEC,oBAyE1BtF,KAAAsJ,wBAA0B,KAChC,GAAItJ,KAAK2B,UAAY,SAAW3B,KAAKwB,cAAgB,gBAAkBxB,KAAKyB,eAAiB,QAAS,OACtG,MAAM8H,EAAUvJ,KAAKwJ,gBACrB,MAAMC,EAAUzJ,KAAK0J,gBACrB,MAAMC,EAAQ3J,KAAKqG,kBAAkBZ,OACrC,IAAK8D,IAAYE,GAAWE,IAAU,EAAG,OACzC,MAAMC,EAAQL,EAAQM,YACtB,GAAID,GAAS,EAAG,OAEhB,MAAME,EAASC,iBAAiBN,GAASO,WAAaD,iBAAiBN,GAASQ,IAChF,MAAMA,EAAMC,WAAWJ,IAAW,EAClC,MAAMK,EAAUC,MAAMC,KAAKZ,EAAQa,iBAAiB,YACpD,MAAMC,EAASJ,EAAQ9C,MAAM,EAAGsC,GAAOzC,KAAKsD,GAAMA,EAAEC,wBAAwBC,QAC5E,GAAIH,EAAO9C,MAAMkD,GAAMA,GAAK,IAAI,OAChC,MAAMC,EAASnB,EAAQ1F,cAAc,mCACrC,MAAM8G,EAAQD,EAASA,EAAOH,wBAAwBC,MAAQ,GAG9D,IAAII,EAAS,EACb,IAAK,IAAIlH,EAAI,EAAGA,EAAI+F,EAAO/F,IAAKkH,GAAUP,EAAO3G,IAAMA,EAAI,EAAIqG,EAAM,GAErE,IAAIc,EACJ,GAAID,GAAUlB,EAAQ,GAAK,CACzBmB,EAAUpB,C,KACL,CACL,MAAMqB,EAASpB,EAAQiB,EAAQZ,EAC/B,IAAIgB,EAAO,EACXF,EAAU,EACV,IAAK,IAAInH,EAAI,EAAGA,EAAI+F,EAAO/F,IAAK,CAC9B,MAAMsH,EAAMX,EAAO3G,IAAMA,EAAI,EAAIqG,EAAM,GACvC,GAAIgB,EAAOC,GAAOF,EAAQ,CAAEC,GAAQC,EAAKH,G,MAAkB,K,EAI/D,GAAIA,IAAY/K,KAAKkD,oBAAsByG,EAAQoB,IAAY/K,KAAKqD,oBAAqB,CACvFrD,KAAKkD,mBAAqB6H,EAC1B/K,KAAKqD,oBAAsBsG,EAAQoB,C,EA2VxC,CA3+CC,cAAYI,GACV,OAAOC,EAAqCpL,KAAKc,QAAS,kBAAmB,U,CAqN/E,cAAYkE,GACV,OAAOhF,KAAKU,UAAYV,KAAKW,Y,CAO/B,UAAM0K,GACJ,GAAIrL,KAAKgF,WAAY,OACrBhF,KAAK0C,KAAO,I,CAKd,WAAM4I,GACJtL,KAAK0C,KAAO,K,CAKd,kBAAM6I,GACJvL,KAAK8G,SAASC,S,CAKhB,WAAMyE,GACJ,GAAIxL,KAAKkB,MAAMuE,SAAW,EAAG,OAC7BzF,KAAKkB,MAAQ,GACblB,KAAKgG,SAASC,KAAK,G,CAWrB,iBAAMwF,CAAYC,GAChB,GAAI1L,KAAKe,aAAe,UAAY4K,IAAmB,CACrD3L,KAAK4E,UACL5E,KAAKyD,GAAG+H,QACRxL,KAAK2C,YAAciJ,EAAeC,EAAYH,IAC9C,M,CAEF,MAAMI,IAAQ9L,KAAK4E,QACnB5E,KAAK2C,YAAc,GACnB3C,KAAKyD,GAAGsI,kBAAkB/L,KAAKgM,WAC/BhM,KAAKyD,GAAGwI,cAAcjM,KAAKiB,YAC3B,MAAMiL,QAAWlM,KAAKyD,GAAG0I,KAAKT,GAC9B,GAAII,IAAQ9L,KAAK4E,QAAS,OAC1B,IAAKsH,EAAI,CAKPlM,KAAKyD,GAAG+H,QACRxL,KAAK2C,YAAciJ,EAAeC,EAAYH,G,KACzC,CACL1L,KAAKoM,sB,CAEPnI,EAAYjE,K,CAKd,cAAM2I,CAAS1F,GACbjD,KAAKyD,GAAGkF,SAAS1F,GAIjB,IAAKjD,KAAKyD,GAAGoE,OAAQ7H,KAAKiD,MAAQA,EAClCjD,KAAKsE,UAAYrB,EACjBjD,KAAKqM,kBACLpI,EAAYjE,K,CAMN,eAAAqM,GACN,GAAIrM,KAAKsE,YAAc,KAAM,OAC7B,MAAM0D,EAAQhI,KAAK6D,GAAGC,YAAYC,cAChC,4BAEF,IAAKiE,EAAO,OACZA,EAAM9G,MAAQlB,KAAKsE,UACnBtE,KAAKsE,UAAY,I,CAKnB,eAAMgI,CAAUC,GACd,OAAOC,OAAOC,YAAYzM,KAAKyD,GAAG6I,UAAUC,G,CAQ9C,gBAAAG,GACE1M,KAAK0E,qBAKL,GAAI1E,KAAK0C,OAAS1C,KAAKgF,WAAY,CACjChF,KAAKiI,QAAQoD,OAAO,CAAEsB,UAAW,O,CAOnC,UAAWC,iBAAmB,aAAe5M,KAAK6M,QAAS,CACzD7M,KAAK8M,SAAW,IAAIF,gBAAe,KACjC,GAAI5M,KAAK0C,UAAW1C,KAAKiI,QAAQ8E,cAAc,IAEjD/M,KAAK8M,SAASE,QAAQhN,KAAK6M,Q,EAI/B,iBAAAI,GACEjN,KAAKkN,iBACL,GAAIlN,KAAKkB,MAAMuE,SAAW,EAAG,CAC3B,MAAM0H,EAAcnN,KAAK2C,YACtBmD,QAAQS,GAAMA,EAAEX,WAAaW,EAAE7F,WAC/BwG,KAAKX,GAAMA,EAAErF,QAChB,GAAIiM,EAAY1H,OAAQzF,KAAKkB,MAAQiM,C,CAEvCnN,KAAKuE,aAAe,IAAIvE,KAAKkB,OAC7BlB,KAAKoN,gBACLpN,KAAK6C,oBAAsB7C,KAAK6D,GAAGE,cAAc,4BACjD/D,KAAK8C,qBAAuB9C,KAAK6D,GAAGE,cAAc,6BAClD/D,KAAKyE,uB,CAaC,qBAAAA,GACNzE,KAAKgD,kBAAoBhD,KAAK6D,GAAGE,cAAc,sBAAwB,I,CAQjE,kBAAAW,GACN,MAAM/C,EAAU3B,KAAK6D,GAAGE,cAAc,oBACtC,IAAKpC,EAAS,CACZ3B,KAAKsD,cAAc+J,oBAAoB,QAASrN,KAAK+E,YACrD/E,KAAKsD,aAAe,KACpB,M,CAEF,GAAI3B,IAAY3B,KAAKsD,aAAc,CACjCtD,KAAKsD,cAAc+J,oBAAoB,QAASrN,KAAK+E,YACrDpD,EAAQ2L,iBAAiB,QAAStN,KAAK+E,YACvC/E,KAAKsD,aAAe3B,C,CAMtB,IAAKA,EAAQ4L,GAAI5L,EAAQ4L,GAAKvN,KAAK4C,eAC9B,GAAIjB,EAAQ4L,KAAOvN,KAAK4C,UAAW5C,KAAK4C,UAAYjB,EAAQ4L,GAGjE5L,EAAQ6L,aAAa,gBAAiB,WAGtCxN,KAAK8G,QAAUnF,C,CAIjB,iBAAA8L,GACEzN,KAAKkB,MAAQ,IAAIlB,KAAKuE,a,CAKxB,aAAA6I,GACEpN,KAAKoM,uBACLpM,KAAK0N,iBAIL1N,KAAK+C,YAAc/C,KAAKkB,MAAMuE,OAAS,GAAGzF,KAAKkB,MAAMuE,kBAAoB,gBAKzEzF,KAAKuD,iBAAmB,KACxB,IAAKvD,KAAKkB,MAAMuE,OAAQ,CACtBkI,EAAa3N,KAAK4N,UAAW,MAC7B,M,CAEF,MAAMC,EAAO,IAAIC,SACjB,MAAMrL,EAAOzC,KAAKyC,MAAQ,GAC1B,IAAK,MAAMsD,KAAK/F,KAAKkB,MAAO2M,EAAKE,OAAOtL,EAAMsD,GAC9C4H,EAAa3N,KAAK4N,UAAWC,E,CAO/B,cAAAH,GACE,IAAK1N,KAAK4N,WAAWI,YAAa,OAElC,GAAIhO,KAAKG,sBAAuB,CAC9BH,KAAK4N,UAAUI,YACb,CAAEC,YAAa,MACfjO,KAAKG,sBACJH,KAAK8G,SAA2B9G,KAAK6D,G,MAEnC,GAAI7D,KAAKY,UAAYZ,KAAKkB,MAAMuE,SAAW,EAAG,CACnDzF,KAAK4N,UAAUI,YACb,CAAEE,aAAc,MAChBlO,KAAKS,WAAaT,KAAKC,kBACtBD,KAAK8G,SAA2B9G,KAAK6D,G,KAEnC,CACL7D,KAAK4N,UAAUI,YAAY,G,CAE3BhO,KAAKmO,oB,CAKT,iBAAMC,GAKJ,OAAOC,EAAcrO,KAAK4N,U,CA+BpB,kBAAAO,GACN,MAAMpI,EAAIsI,EAAcrO,KAAK4N,WAC7B,MAAM7E,EAAM,GAAGhD,EAAEuI,SAASvI,EAAEwI,oBAC5B,GAAIvO,KAAK2E,kBAAoBoE,EAAK,OAClC,MAAMyF,EAASxO,KAAK2E,kBAAoB,KACxC3E,KAAK2E,gBAAkBoE,EACvB,GAAIyF,EAAQxO,KAAKyO,iBAAiBxI,KAAKF,E,CAOzC,mBAAM2I,GACJ,OAAOC,EAAgB3O,KAAK4N,U,CAI9B,oBAAMgB,GACJ,OAAOC,EAAiB7O,KAAK4N,U,CAI/B,uBAAMkB,CAAkBC,GACtB/O,KAAKG,sBAAwB4O,EAC7B/O,KAAK0N,gB,CAOP,cAAAR,GACE,MAAMW,EAAOmB,EAAehP,KAAK6D,GAAI7D,KAAKmL,YAC1C,MAAM8D,EACJjP,KAAKe,aAAe,UACnBf,KAAKe,aAAe,QAAU8M,EAAKpI,OAAS9F,EAE/C,GAAIsP,GAAoBtD,KAAqBkC,EAAKpI,OAAS,EAAG,CAC5D,MAAMqG,IAAQ9L,KAAK4E,QACnB5E,KAAK2C,YAAc,GACnB3C,KAAKyD,GAAGsI,kBAAkB/L,KAAKgM,WAC/BhM,KAAKyD,GAAGwI,cAAcjM,KAAKiB,iBACtBjB,KAAKyD,GAAG0I,KAAK0B,GAAMqB,MAAMhD,IAC5B,GAAIJ,IAAQ9L,KAAK4E,QAAS,OAC1B,IAAKsH,EAAI,CACPlM,KAAK2C,YAAckL,EACnB5J,EAAYjE,K,KACP,CACLA,KAAKoM,sB,SAGJ,CACLpM,KAAK4E,UACL5E,KAAKyD,GAAG+H,QACRxL,KAAK2C,YAAckL,C,EAKf,oBAAAzB,GACN,GAAIpM,KAAKyD,GAAGoE,QAAU7H,KAAKkB,MAAMuE,OAAQ,CACvCzF,KAAKmE,iBAAmBnE,KAAKyD,GAAG6I,UAAUtM,KAAKkB,M,KAC1C,CACLlB,KAAKmE,iBAAmB,IAAIC,G,CAE9BH,EAAYjE,K,CAId,cAAAmP,CAAe9J,GACbA,EAAEC,kBACFtF,KAAKkN,gB,CAOP,QAAAkC,CAAS1M,GACP,GAAI1C,KAAK6E,aAAe7E,KAAKiI,OAAQ,OASrC,GAAIvF,EAAM1C,KAAKiI,OAAOoD,OAAO,CAAEsB,WAAY3M,KAAKgB,kBAC3ChB,KAAKiI,OAAOqD,S,CAMnB,aAAA+D,CAAchK,GACZ,GAAIrF,KAAKgF,WAAY,OAErB,IAAKhF,KAAK0C,OAAS2C,EAAE0D,MAAQ,aAAe1D,EAAE0D,MAAQ,WAAa1D,EAAE0D,MAAQ,SAAW1D,EAAE0D,MAAQ,KAAM,CACtG1D,EAAEc,iBACFnG,KAAK0C,KAAO,I,MACP,GAAI1C,KAAK0C,MAAQ2C,EAAE0D,MAAQ,SAAU,CAC1C1D,EAAEc,iBACFnG,KAAK0C,KAAO,MACZ1C,KAAK8G,SAASC,S,EAqFV,YAAAe,OACD,WACH,MAAMwH,QAAYtP,KAAKiI,QAAQsH,wBAA0B,KACzD,IAAKD,GAAMtP,KAAK0H,QAAS,OACzB1H,KAAK0H,QAAU,WACT1H,KAAKyD,GAAG+L,gBAAeC,SAAYH,GAC1C,EALI,E,CA2EP,kBAAAI,GACE1P,KAAKqM,kBACL,IAAKrM,KAAKiI,OAAQ,OAClB,GAAIjI,KAAKyD,GAAGoE,SAAW7H,KAAKkE,YAAa,MAClClE,KAAKiI,OAAO0H,qBAAqB3P,KAAKyD,GAAGmM,UAC9C5P,KAAKkE,YAAc,KAMnB,GAAIlE,KAAK0C,MAAQ1C,KAAKgB,WAAY,CAChC,MAAMgH,EAAQhI,KAAK6D,GAAGC,YAAYC,cAAc,iCAC3C/D,KAAKiI,QAAQC,qBAAqBF,E,OAEpC,IAAKhI,KAAKyD,GAAGoE,QAAU7H,KAAKkE,YAAa,MACzClE,KAAKiI,OAAO0H,qBAAqB,MACtC3P,KAAKkE,YAAc,K,CAErB,GAAIlE,KAAK0C,MAAQ1C,KAAKyD,GAAGoE,SAAW7H,KAAK0H,QAAS1H,KAAK8H,eAGvD,GAAI9H,KAAKuD,iBAAkB,CACzBvD,KAAKuD,iBAAmB,MACxB,GAAIvD,KAAK0C,KAAMqF,uBAAsB,SAAW/H,KAAKiI,QAAQ8E,gB,CAG/D,GAAI/M,KAAKwD,wBAA0B,KAAM,CACvC,MAAMmC,EAAS3F,KAAKwD,sBACpBxD,KAAKwD,sBAAwB,KAC7BuE,uBAAsB,KACpB,GAAIpC,IAAW,UAAW,CACxB3F,KAAK8G,SAASC,UACd,M,CAEF,MAAM8I,EAAQ7P,KAAK6D,GAAGC,YAAYwG,iBAIhC,6EAIF,MAAMwF,EAAOD,IAAQlK,GACrB,MAAMoK,EAAYD,GAAMhM,YAAYC,cAA2B,oBAC9DgM,GAAaD,GAAS9P,KAAK8G,UAAsCC,SAAS,G,CAM/E,GAAI/G,KAAK2B,UAAY,SAAW3B,KAAKwB,cAAgB,gBAAkBxB,KAAKyB,eAAiB,QAAS,CACpG,UAAWmL,iBAAmB,YAAa,CACzC,IAAK5M,KAAKgQ,UAAWhQ,KAAKgQ,UAAY,IAAIpD,eAAe5M,KAAKsJ,yBAC9DtJ,KAAKgQ,UAAUC,aAGf,GAAIjQ,KAAKwJ,gBAAiBxJ,KAAKgQ,UAAUhD,QAAQhN,KAAKwJ,iBACtD,GAAIxJ,KAAK0J,gBAAiB1J,KAAKgQ,UAAUhD,QAAQhN,KAAK0J,gB,CAExD3B,sBAAsB/H,KAAKsJ,wB,KACtB,CACLtJ,KAAKgQ,WAAWC,Y,EAIpB,oBAAAC,GACElQ,KAAKsD,cAAc+J,oBAAoB,QAASrN,KAAK+E,YACrD/E,KAAKsD,aAAe,KACpBkF,aAAaxI,KAAKyI,gBAClBzI,KAAKyD,GAAG4E,iBACRrI,KAAK8M,UAAUmD,aACfjQ,KAAK8M,SAAWxF,UAChBtH,KAAKgQ,WAAWC,aAChBjQ,KAAKgQ,UAAY1I,S,CAKX,eAAAjB,GACN,GAAIrG,KAAKyD,GAAGoE,OAAQ,CAElB,OAAO7H,KAAKkB,MAAMgG,KAAKnB,IAAC,CACtB7E,MAAO6E,EACP1F,MAAOL,KAAKmE,iBAAiBgM,IAAIpK,IAAMA,EACvCrF,SAAU,S,CAGd,OAAOV,KAAKkB,MACTgG,KAAKnB,GAAM/F,KAAK2C,YAAYyN,MAAM7J,GAAMA,EAAErF,QAAU6E,MACpDD,QAAQS,KAA+BA,G,CAGpC,SAAA8J,GACN,MAAMC,EAAItQ,KAAKkB,MAAMuE,OACrB,GAAI6K,IAAM,EAAG,MAAO,GACpB,OAAOtQ,KAAKuQ,eAAiBvQ,KAAKuQ,eAAeD,GAAK,GAAGA,Y,CAQnD,aAAAE,GACN,MAAO,CACL1H,EAAA,QAAMrG,KAAK,UAAUgO,aAAczQ,KAAKwE,sBACxCxE,KAAKgD,kBACDhD,KAAK0Q,uBACL1Q,KAAK2B,UAAY,SACf3B,KAAK2Q,sBACL3Q,KAAK4Q,qB,CAIP,kBAAAA,GACN,MAAMhL,EAAW5F,KAAKqG,kBACtB,MAAMwK,EAAWjL,EAASH,OAAS,EAEnC,MAAMqL,EAAW9Q,KAAKwB,cAAgB,eAQtC,MAAMuP,EAAeD,EACjB,GACA9Q,KAAKwB,cAAgB,QAAUqP,EAC7BjL,EAASsB,KAAKX,GAAMA,EAAElG,QAAO2Q,KAAK,MAClCH,EACE7Q,KAAKqQ,YACL,GAER,OACEvH,EAAA,iBACEmI,IAAMpN,GAAQ7D,KAAK8G,QAAUjD,EAC7B0J,GAAIvN,KAAK4C,UACTsO,MAAM,yBACNlI,KAAK,QACLC,YAAY,gEACZ7I,QAASJ,KAAKI,QACdC,MAAOL,KAAKK,MACZC,YAAauQ,EAAW,GAAK7Q,KAAKM,YAClCY,MAAO6P,EACPI,SAAU,KACVzQ,SAAUV,KAAKU,SACfF,MAAOR,KAAKQ,MACZC,UAAWT,KAAKS,UAChBP,uBAAwBF,KAAKE,uBAC7BK,eAAgBP,KAAKO,eACrBK,SAAUZ,KAAKY,SAGfC,QAASb,KAAK0B,eAAiB,QAAU1B,KAAK0B,eAAiB,SAAU,EAAK1B,KAAKa,QACnFuQ,cAAepR,KAAK0C,KAGpB2O,UAAWP,GAAY9Q,KAAKyB,eAAiB,OAC7C4H,QAASrJ,KAAK+E,YAKb/E,KAAK6C,mBAAqBiG,EAAA,QAAMrG,KAAK,kBAAkB6O,KAAK,iBAC5DR,GAAY9Q,KAAKuR,oBAIjBvR,KAAK8C,oBAAsBgG,EAAA,QAAMrG,KAAK,mBAAmB6O,KAAK,kBAC9DtR,KAAKoC,QAGJ0G,EAAA,QAAMwI,KAAK,gBAAgBJ,MAAM,0BAA0BlI,KAAK,mBAC9DF,EAAA,QAAMrG,KAAK,UACTqG,EAAC0I,EAAoB,CAACnR,MAAOL,KAAKmC,gBAE/B,CAGLnC,KAAKqC,WAAawO,IAAa7Q,KAAKgF,YAKlC8D,EAAA,UACE2I,KAAK,SACLH,KAAK,gBACLJ,MAAM,yBACNlI,KAAK,QAAO,aACAhJ,KAAKuC,WACjB8G,QAASrJ,KAAK4G,YAEdkC,EAAA,QAAMoI,MAAM,4BAA2B,cAAa,QAAQlR,KAAKsC,YAUrEwG,EAAA,QACEwI,KAAK,gBACLJ,MAAM,6BACNlI,KAAK,YAAW,cACJ,QAEZF,EAAA,QAAMoI,MAAM,mDAAmDlI,KAAK,SAClEF,EAAA,QAAMrG,KAAK,iBAAiBzC,KAAKwC,iB,CAavC,mBAAAmO,GAGN,MAAMe,EAAW1R,KAAKQ,OAASR,KAAKS,UAAYT,KAAKS,UAAYT,KAAKO,eACtE,MAAMoR,EAASD,EAAW,GAAG1R,KAAK4C,iBAAmB0E,UACrD,MAAO,CACLwB,EAAA,aACEmI,IAAMpN,GAAQ7D,KAAK8G,QAAUjD,EAC7B0J,GAAIvN,KAAK4C,UACTsO,MAAM,0BACNlI,KAAK,eACL5I,QAAQ,WACRwR,KAAK,KACLC,KAAM7R,KAAK4B,YACXQ,QAASpC,KAAKoC,QACd1B,SAAUV,KAAKgF,WAAU,gBACX,UAAS,gBACR8M,OAAO9R,KAAK0C,MAAK,gBACjB1C,KAAK+R,gBAAkB,GAAG/R,KAAK4C,oBAAsB0E,UAAS,eAI/DtH,KAAKQ,MAAQ,OAAS8G,UAAS,mBAC3BqK,EAClBK,UAAWhS,KAAK+E,YAEf/E,KAAK6B,cAAgB7B,KAAKK,OAE7BL,KAAK0Q,uB,CASD,oBAAAA,GACN,MAAMgB,EAAW1R,KAAKQ,OAASR,KAAKS,UAAYT,KAAKS,UAAYT,KAAKO,eACtE,IAAKmR,EAAU,OAAO,KACtB,OACE5I,EAAA,OACEyE,GAAIvN,KAAKgD,kBAAoBsE,UAAY,GAAGtH,KAAK4C,iBACjDsO,MAAO,CACL,+BAAgC,KAChC,sCAAuClR,KAAKQ,SAAWR,KAAKS,WAE9DuI,KAAK,cACLiJ,KAAMjS,KAAKQ,MAAQ,QAAU8G,WAE5BoK,E,CAQP,mBAAYK,GACV,OAAO/R,KAAK0C,OAAS1C,KAAKoC,UAAYpC,KAAKyD,GAAGoE,QAAU7H,KAAK2C,YAAY8C,OAAS,E,CA2B5E,iBAAA8L,GACN,MAAM3L,EAAW5F,KAAKqG,kBACtB,GAAIT,EAASH,SAAW,EAAG,OAAO,KAElC,MAAMyM,EAASlS,KAAKyB,eAAiB,OACrC,MAAMsJ,EAAUmH,EAAStM,EAASH,OAASiB,KAAKC,IAAIf,EAASH,OAAQzF,KAAKkD,oBAC1E,MAAMiP,EAAWD,EAAS,EAAItM,EAASH,OAASsF,EAEhD,OACEjC,EAAA,OACEwI,KAAK,QACLJ,MAAO,CACL,gCAAiC,KACjC,sCAAuCgB,GAEzClJ,KAAK,QACLiJ,KAAK,QAAO,aACAjS,KAAKK,MAAQ,GAAGL,KAAKK,mBAAqB,WACtD4Q,IAAMpN,GAAQ7D,KAAKwJ,gBAAkB3F,GAEpC+B,EAASyB,MAAM,EAAG0D,GAAS7D,IAAIlH,KAAK4I,iBACpCuJ,EAAW,GACVrJ,EAAA,UACE2I,KAAK,SACLP,MAAM,iCACNlI,KAAK,gBAAe,aACR,GAAGmJ,mCAEf9I,QAAUhE,IAAoBA,EAAEC,kBAAmBtF,KAAK+E,YAAY,GAAG,IAErEoN,G,CAYJ,mBAAAC,GACN,GAAIpS,KAAK2B,UAAY,SAAW3B,KAAKwB,cAAgB,gBAAkBxB,KAAKyB,eAAiB,QAAS,OAAO,KAC7G,MAAMmE,EAAW5F,KAAKqG,kBACtB,GAAIT,EAASH,SAAW,EAAG,OAAO,KAClC,OAIEqD,EAAA,OAAKoI,MAAM,gCAA+B,cAAa,QACrDpI,EAAA,OAAKoI,MAAM,kCAAkCD,IAAMpN,GAAQ7D,KAAK0J,gBAAkB7F,GAC/E+B,EAASsB,IAAIlH,KAAK4I,iBACnBE,EAAA,QAAMoI,MAAM,kCAAgC,IAAGtL,EAASH,S,CAsDxD,WAAA4M,GAKN,GAAIrS,KAAK2B,UAAY,WAAa3B,KAAKgD,mBAAqBhD,KAAKwB,cAAgB,QAC/E,OAAO,KACT,MAAMoE,EAAW5F,KAAKqG,kBACtB,GAAIT,EAASH,SAAW,EAAG,OAAO,KAClC,OAIEqD,EAAA,OACEoI,MAAM,yBACNlI,KAAK,QACLiJ,KAAK,QAAO,aACAjS,KAAKK,MAAQ,GAAGL,KAAKK,mBAAqB,YAErDuF,EAASsB,KAAK2B,GACbC,EAAA,WACEC,IAAKF,EAAI3H,MACT8H,KAAK,OACLC,YAAY,sCACZ7I,QAAQ,QAGR8I,WAAY,MACZ7I,MAAOwI,EAAIxI,MACXK,SAAUV,KAAKgF,WACfmE,WAAYnJ,KAAKgF,WACjBoE,WAAYpJ,KAAKkG,YAAY2C,EAAI3H,OACjCmI,QAAUhE,GAAkBA,EAAEC,sB,CAOhC,oBAAAgN,GAIN,OACExJ,EAAA,OACEoI,MAAM,2BACNlI,KAAK,UACLiJ,KAAK,UACL1E,GAAI,GAAGvN,KAAK4C,oBAAmB,uBACV,OAAM,aACf5C,KAAKK,OAAS,WAE1ByI,EAAA,OACEoI,MAAM,2BACNqB,MAAO,CAAEC,OAAQ,GAAGxS,KAAKyD,GAAGgP,YAAY,cAC5B,SAEbzS,KAAKyD,GAAGiP,WAAWxL,KAAI,CAACyL,EAAK/O,KAC5B,MAAMgP,EAAgB5S,KAAKyD,GAAGoP,YAAcjP,EAC5C,MAAMgC,EAAW5F,KAAKiF,WAAW0N,EAAIzR,OACrC,OACE4H,EAAA,gBACEC,IAAK4J,EAAIG,MAETvF,GAAI,GAAGvN,KAAK4C,iBAAiBgQ,IAAe,cAC/BA,EAGbG,aAAa,SACbtB,KAAK,WAAU,iBACA,QAAO,iBAEtBzI,KAAMpD,EAAW,yBAA2B,SAC5ClF,SAAUiS,EAAIjS,SACdkF,SAAUA,EACVoN,SAAUL,EAAItS,MAAK,kBACFsS,EAAIpS,gBAAkB,GAAE,eAC3BP,KAAKyD,GAAGwP,eAAc,gBACrBL,EAAgB,EAC/BZ,UAAY3M,GAAmBrF,KAAKoF,YAAYuN,EAAIzR,MAAOmE,IAE1DsN,EAAId,KACH/I,EAAA,QACEwI,KAAK,eACLtI,KAAK,cAILkI,MAAM,yDAAwD,cAClD,QAEXyB,EAAId,MAEL,KAIS,IAGnB/I,EAAA,OACEoI,MAAM,2BACNqB,MAAO,CAAEC,OAAQ,GAAGxS,KAAKyD,GAAGyP,eAAe,cAC/B,S,CAQZ,WAAAC,CAAYC,EAAuCC,GACzD,OACEvK,EAAA,OAAKoI,MAAM,yBAAyBlI,KAAK,QAAQiJ,KAAK,UACpDnJ,EAAA,QAAMrG,KAAM2Q,GAAWC,G,CAKrB,UAAAC,GACN,MAAMC,EAAUvT,KAAKyD,GAAGoE,OACxB,MAAMZ,EAAWjH,KAAK2C,YAAYmD,QAAQS,IAAOA,EAAE7F,WACnD,MAAMyG,EAAcF,EAASxB,OAAS,GAAKwB,EAASG,OAAOb,GAAMvG,KAAKkB,MAAMiE,SAASoB,EAAErF,SACvF,MAAMsS,GAAgBrM,GAAeF,EAASQ,MAAMlB,GAAMvG,KAAKkB,MAAMiE,SAASoB,EAAErF,SAGhF,MAAMqH,EAAIvI,KAAKgB,aAAeuS,EAAUvT,KAAKiD,MAAMwQ,OAAOC,cAAgB,GAC1E,MAAMC,EAAcpL,EAChBvI,KAAK2C,YAAYmD,QACdS,GAAMA,EAAElG,MAAMqT,cAAcvO,SAASoD,KAAOhC,EAAEhG,gBAAkB,IAAImT,cAAcvO,SAASoD,KAE9FvI,KAAK2C,YAGT,MAAMiR,GACH5T,KAAKoC,UAAamR,GAAWvT,KAAKyD,GAAGwP,iBAAmB,IAAQM,KAAahL,GAAKoL,EAAYlO,SAAW,GAC5G,MAAMoO,GAAiB7T,KAAKoC,UAAYmR,IAAYhL,GAAKvI,KAAK2C,YAAY8C,SAAW,EAErF,MAAMqO,EAAgBP,EAAWvT,KAAK+T,WAAa,IAAO/T,KAAK+T,UAE/D,OACEjL,EAAA,WACEmI,IAAMpN,GAAQ7D,KAAKiI,OAASpE,EAC5BmQ,OAAQhU,KAAK4C,UACbtB,UAAWtB,KAAKsB,UAAS,qBACLtB,KAAKuB,kBAAiB,aAC9BuS,EAAa,cAGZ9T,KAAKgB,WAAU,aACjB,GAGXiT,QAAO,kBACKjU,KAAKK,OAAS,UAC1B2I,KAAK,OACLC,YAAY,kCACZiL,SAAUlU,KAAK2H,eACfwM,UAAWnU,KAAKmI,iBAIhBW,EAAA,OAAKwI,KAAK,SAAStI,KAAK,cAAckI,MAAM,gCAC1CpI,EAAA,QAAMrG,KAAK,iBAEZzC,KAAKgB,aAAehB,KAAKoC,SACxB0G,EAAA,OAAKwI,KAAK,SAASJ,MAAM,+BAA+BlI,KAAK,eAC3DF,EAAA,SACEoI,MAAM,0BACNlI,KAAK,SACLyI,KAAK,OAILQ,KAAK,WAAU,gBACD,UAAS,gBACRH,OAAO9R,KAAK0C,MAAK,gBACjB,GAAG1C,KAAK4C,oBAAmB,oBACxB,OAClBwR,aAAa,MACb9T,YAAaN,KAAK8B,kBAAiB,aACvB9B,KAAK+B,cAAgB/B,KAAKK,MAAQ,UAAUL,KAAKK,QAAU,kBACvEgU,QAASrU,KAAKsI,cACde,QAAUhE,GAAkBA,EAAEC,oBAE/BtF,KAAKqE,WACJyE,EAAC0I,EAAoB,CACnBN,MAAM,kCACNlI,KAAK,iBACL3I,MAAOL,KAAKkC,eAAc,cACd,UAWnBlC,KAAKoB,gBAAkBmS,IAAYvT,KAAKoC,SAAWpC,KAAK2C,YAAY8C,OAAS,GAC5EqD,EAAA,OAAKwI,KAAK,SAASJ,MAAM,8BAA8BlI,KAAK,cAC1DF,EAAA,gBACE2I,KAAK,WAAU,iBACA,QACfzI,KAAK,kBAAiB,gBAIR,WAAU,iBAExBgK,SAAUhT,KAAKqB,eACfuE,SAAUuB,EACVK,cAAegM,EACf9S,SAAUV,KAAKgF,WACfgN,UAAY3M,GAAmBrF,KAAKgH,gBAAgB3B,MAIzDrF,KAAKoC,QAGJ0G,EAAA,OAAKoI,MAAM,2BAA2BlI,KAAK,cAAciJ,KAAK,SAAQ,aAAajS,KAAKmC,aACtF2G,EAAA,QAAMrG,KAAK,eACTqG,EAAA,yBACE1I,QAAQ,SACRoH,cAAa,KACb8M,KAAI,KACJtL,KAAK,mBACL3I,MAAOL,KAAKmC,gBAIhBoR,EAAO,CAGRvT,KAAKsS,uBAAwBsB,EAAgB5T,KAAKmT,YAAY,aAAcnT,KAAKgC,eAAiB,MACjG6R,EACF7T,KAAKmT,YAAY,aAAcnT,KAAKiC,eAAc,CAMhD6G,EAAA,OACEoI,MAAM,2BACNlI,KAAK,UACLiJ,KAAK,UACL1E,GAAI,GAAGvN,KAAK4C,oBAAmB,uBACV,OAAM,aACf5C,KAAKK,OAAS,WAEzBsT,EAAYzM,KAAI,CAAC2B,EAAKjF,KACrB,MAAMgC,EAAW5F,KAAKiF,WAAW4D,EAAI3H,OACrC,OACE4H,EAAA,gBACEC,IAAKF,EAAI3H,MAGTqM,GAAI,GAAGvN,KAAK4C,iBAAiBgB,IAC7BmP,aAAa,SACbtB,KAAK,WAAU,iBACA,QAAO,iBAEtBzI,KAAMpD,EAAW,yBAA2B,SAC5ClF,SAAUmI,EAAInI,SACdkF,SAAUA,EACVoN,SAAUnK,EAAIxI,MAAK,kBACFwI,EAAItI,gBAAkB,GACvCyR,UAAY3M,GAAmBrF,KAAKoF,YAAYyD,EAAI3H,MAAOmE,IAE1DwD,EAAIgJ,KACH/I,EAAA,QACEwI,KAAK,eACLtI,KAAK,cACLkI,MAAM,yDACNqB,MAAO1J,EAAI0L,UAAY,CAAEC,MAAO3L,EAAI0L,WAAcjN,UAAS,cAC/C,QAEXuB,EAAIgJ,MAEL,KAES,KAIrB+B,EAAgB5T,KAAKmT,YAAY,aAAcnT,KAAKgC,eAAiB,M,CAO/E,MAAAyS,GACE,OACE3L,EAAC4L,EAAI,CAAA3L,IAAA,2CACHmI,MAAO,CACL,kBAAmB,KACnB,CAAC,oBAAoBlR,KAAKI,WAAY,KACtC,wBAAyBJ,KAAK0C,KAC9B,4BAA6B1C,KAAKU,SAClC,iCAAkCV,KAAKW,aACvC,2BAA4BX,KAAKoC,QACjC,CAAC,4BAA4BpC,KAAKwB,eAAgB,KAClD,0BAA2BxB,KAAK2B,UAAY,WAAa3B,KAAKgD,kBAC9D,mCAAoChD,KAAKgD,kBACzC,CAAC,0BAA0BhD,KAAK0B,gBAC9B1B,KAAK2B,UAAY,UACjB3B,KAAKgD,mBACLhD,KAAKwB,cAAgB,SACxB,gBACa,UAAS,YAOZxB,KAAKoC,QAAU,OAASkF,WAInCwB,EAAA,OAAAC,IAAA,2CAAKmI,MAAM,yBAAyBlI,KAAK,QAAQiI,IAAMpN,GAAQ7D,KAAK6M,QAAUhJ,GAC3E7D,KAAKwQ,gBACLxQ,KAAKqS,eAEPrS,KAAKoS,sBACLpS,KAAKsT,aAENxK,EAAA,OAAAC,IAAA,2CAAKmI,MAAM,2BAA2BlI,KAAK,cAAciJ,KAAK,SAAQ,YAAW,SAAQ,cAAa,QACnGjS,KAAK+C,aAER+F,EAAA,OAAAC,IAAA,2CAAKmI,MAAM,2BAA2ByD,OAAM,MAC1C7L,EAAA,QAAAC,IAAA,2CAAM0H,aAAc,IAAMzQ,KAAKkN,oB","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import{r as e,c as r,h as t,H as a,g as i}from"./p-WmvQpZnM.js";import{a as s,s as o}from"./p-BjYKc1Ge.js";const n=()=>`:host{--_link-color:var(--md-breadcrumb-item-link-color, var(--md-sys-color-on-surface-variant, #49454F));--_current-color:var(--md-breadcrumb-item-current-color, var(--md-sys-color-on-secondary-container, #1D192B));--_current-bg:var(--md-breadcrumb-item-current-bg, var(--md-sys-color-secondary-container, #E8DEF8));--_disabled-color:var(--md-breadcrumb-item-disabled-color, color-mix(in srgb, var(--md-sys-color-on-surface, #1C1B1F) 61%, transparent));--_hover-color:var(--md-breadcrumb-item-hover-color, var(--md-sys-color-primary, #6750A4));--_state-layer-color:var(--md-breadcrumb-item-state-layer-color, var(--md-sys-color-on-surface, #1C1B1F));--_gap:var(--md-breadcrumb-item-gap, calc(6px + var(--md-sys-density-scale, 0) * 1px));--_padding:var(--md-breadcrumb-item-padding, calc(8px + var(--md-sys-density-scale, 0) * 2px) max(4px, calc(12px + var(--md-sys-density-scale, 0) * 2px)));--_motion-duration:var(--md-sys-motion-spring-effects-default-duration, 200ms);--_motion-easing:var(--md-sys-motion-spring-effects-default-easing, cubic-bezier(0.34, 0.80, 0.34, 1.00));--_spring-easing:var(--md-sys-motion-spring-spatial-fast-easing, cubic-bezier(0.42, 1.67, 0.21, 0.90));--_spring-duration:var(--md-sys-motion-spring-spatial-fast-duration, 350ms);display:inline-flex;align-items:center;gap:var(--md-breadcrumbs-gap, var(--md-sys-spacing-gap-sm, 8px));box-sizing:border-box;font-family:var(--md-sys-typescale-label-large-font-family, Roboto, sans-serif);font-size:max(12px, calc(14px + var(--md-sys-density-scale, 0) * 0.5px));font-weight:var(--md-sys-typescale-label-large-font-weight, 500);line-height:max(16px, calc(20px + var(--md-sys-density-scale, 0) * 1px));letter-spacing:var(--md-sys-typescale-label-large-letter-spacing, 0.1px)}:host(.md-breadcrumb-item--collapsed){display:none}.md-breadcrumb-item__separator{color:var(--md-breadcrumbs-separator-color, var(--md-sys-color-on-surface-variant, #49454F));font-size:max(13px, calc(16px + var(--md-sys-density-scale, 0) * 0.5px));user-select:none;pointer-events:none;opacity:0.7;transition:opacity var(--_motion-duration) var(--_motion-easing)}.md-breadcrumb-item__link,.md-breadcrumb-item__static{position:relative;display:inline-flex;align-items:center;gap:var(--_gap);padding:var(--_padding);border-radius:var(--md-sys-shape-corner-full, 9999px);text-decoration:none;color:var(--_link-color);font:inherit;isolation:isolate;overflow:hidden;transition:color var(--_motion-duration) var(--_motion-easing), background-color var(--_motion-duration) var(--_motion-easing), transform var(--_spring-duration) var(--_spring-easing)}.md-breadcrumb-item__state-layer{position:absolute;inset:0;border-radius:inherit;background-color:var(--_state-layer-color);opacity:0;pointer-events:none;transition:opacity var(--_motion-duration) var(--_motion-easing)}.md-breadcrumb-item__link:hover .md-breadcrumb-item__state-layer{opacity:var(--md-sys-state-hover-state-layer-opacity, 0.08)}.md-breadcrumb-item__link:focus-visible .md-breadcrumb-item__state-layer{opacity:var(--md-sys-state-focus-state-layer-opacity, 0.12)}.md-breadcrumb-item__link:active .md-breadcrumb-item__state-layer{opacity:var(--md-sys-state-pressed-state-layer-opacity, 0.12)}.md-breadcrumb-item__link:hover{color:var(--_hover-color);transform:translateX(2px)}:host([dir="rtl"]) .md-breadcrumb-item__link:hover,:host-context([dir="rtl"]) .md-breadcrumb-item__link:hover{transform:translateX(-2px)}.md-breadcrumb-item__link:focus-visible{outline:3px solid var(--md-sys-color-secondary, #625B71);outline-offset:2px}:host(.md-breadcrumb-item--current) .md-breadcrumb-item__static{background-color:var(--_current-bg);color:var(--_current-color);font-weight:600}:host(.md-breadcrumb-item--disabled) .md-breadcrumb-item__static,:host(.md-breadcrumb-item--disabled) .md-breadcrumb-item__link{color:var(--_disabled-color);pointer-events:none;cursor:not-allowed}:host(.md-breadcrumb-item--disabled) md-ripple,:host(.md-breadcrumb-item--disabled) .md-breadcrumb-item__state-layer{display:none}.md-breadcrumb-item__icon{display:inline-flex;align-items:center;justify-content:center;inline-size:18px;block-size:18px;color:currentColor;flex-shrink:0}.md-breadcrumb-item__icon .material-symbols-outlined{font-family:var(--md-sys-icon-font-family, 'Material Symbols Outlined', 'Material Icons');font-size:max(14px, calc(18px + var(--md-sys-density-scale, 0) * 1px));line-height:1;font-variation-settings:'FILL' 0, 'wght' 500, 'GRAD' 0, 'opsz' 24;transition:font-variation-settings var(--_spring-duration) var(--_spring-easing)}:host(.md-breadcrumb-item--current) .md-breadcrumb-item__icon .material-symbols-outlined{font-variation-settings:'FILL' 1, 'wght' 600, 'GRAD' 0, 'opsz' 24}.md-breadcrumb-item__label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-inline-size:32ch;position:relative;z-index:1}.md-breadcrumb-item__icon{position:relative;z-index:1}@media (prefers-reduced-motion: reduce){.md-breadcrumb-item__link,.md-breadcrumb-item__static,.md-breadcrumb-item__icon .material-symbols-outlined,.md-breadcrumb-item__separator,.md-breadcrumb-item__state-layer{transition-duration:0.01ms !important}.md-breadcrumb-item__link:hover{transform:none}}@media (forced-colors: active){.md-breadcrumb-item__link{color:LinkText}:host(.md-breadcrumb-item--current) .md-breadcrumb-item__static{color:CanvasText;background-color:Canvas;outline:1px solid CanvasText}.md-breadcrumb-item__state-layer{display: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}`;const d=class{constructor(t){e(this,t);this.mdSelect=r(this,"mdSelect",7);this.href="";this.target="";this.rel="";this.current=false;this.icon="";this.disabled=false;this.collapsed=false;this.itemIndex=0;this.itemTotal=0;this.density=0;this.hasSlottedIcon=false;this.hasSlottedLabel=false;this.handleAnchorClick=e=>{const r=this.mdSelect.emit(this.buildDetail(e));if(r.defaultPrevented){e.preventDefault()}}}get isCollapsed(){return this.collapsed}get isCurrent(){return this.current}componentWillLoad(){this.hasSlottedIcon=this.hasDirectSlottedChild("icon");this.hasSlottedLabel=this.hasDefaultSlotContent()}componentDidLoad(){const e=this.el.shadowRoot?.querySelector('slot[name="icon"]');e?.addEventListener("slotchange",(()=>{this.hasSlottedIcon=e.assignedElements().length>0}));const r=this.el.shadowRoot?.querySelector("slot:not([name])");r?.addEventListener("slotchange",(()=>{this.hasSlottedLabel=(r?.assignedNodes()??[]).length>0}))}getLabelText(){return(this.el.textContent??"").trim()}buildDetail(e){return{href:this.href,label:this.getLabelText(),current:this.current,itemIndex:this.itemIndex,itemTotal:this.itemTotal,originalEvent:e}}hasDirectSlottedChild(e){const r=this.el.children;for(let t=0;t<r.length;t+=1){if(r[t].getAttribute("slot")===e)return true}return false}hasDefaultSlotContent(){for(let e=0;e<this.el.childNodes.length;e+=1){const r=this.el.childNodes[e];if(r.nodeType===1){if(!r.hasAttribute("slot"))return true}else if(r.nodeType===3&&(r.textContent??"").trim()!==""){return true}}return false}renderLeadingSeparator(){if(this.itemIndex===0)return null;const e=this.el.parentElement;const r=e?.separator??"/";return t("span",{class:"md-breadcrumb-item__separator",part:"separator","aria-hidden":"true"},r)}renderIcon(){if(this.hasSlottedIcon){return t("span",{class:"md-breadcrumb-item__icon",part:"icon","aria-hidden":"true"},t("slot",{name:"icon"}))}if(this.icon){return t("span",{class:"md-breadcrumb-item__icon",part:"icon","aria-hidden":"true"},t("span",{class:"material-symbols-outlined"},this.icon))}return null}renderLabel(){return t("span",{class:"md-breadcrumb-item__label",part:"label"},t("slot",null))}renderInner(){const e=this.renderIcon();const r=this.renderLabel();if(this.isCurrent||!this.href||this.disabled){return t("span",{class:"md-breadcrumb-item__static",part:"static","aria-current":this.isCurrent?"page":undefined},e,r)}return t("a",{class:"md-breadcrumb-item__link",part:"link",href:o(this.href),target:this.target||undefined,rel:this.rel||(this.target?s:undefined),onClick:this.handleAnchorClick},t("md-ripple",{disabled:this.disabled}),t("span",{class:"md-breadcrumb-item__state-layer",part:"state-layer","aria-hidden":"true"}),e,r)}render(){if(this.isCollapsed){return t(a,{class:"md-breadcrumb-item md-breadcrumb-item--collapsed",role:"listitem","aria-hidden":"true"})}return t(a,{class:{"md-breadcrumb-item":true,"md-breadcrumb-item--current":this.isCurrent,"md-breadcrumb-item--disabled":this.disabled},role:"listitem"},this.renderLeadingSeparator(),this.renderInner())}get el(){return i(this)}};d.style=n();export{d as md_breadcrumb_item};
2
- //# sourceMappingURL=p-8135c606.entry.js.map
1
+ import{r as e,c as r,h as t,H as a,g as i}from"./p-WmvQpZnM.js";import{S as s,s as o}from"./p-BdEoSBtL.js";const n=()=>`:host{--_link-color:var(--md-breadcrumb-item-link-color, var(--md-sys-color-on-surface-variant, #49454F));--_current-color:var(--md-breadcrumb-item-current-color, var(--md-sys-color-on-secondary-container, #1D192B));--_current-bg:var(--md-breadcrumb-item-current-bg, var(--md-sys-color-secondary-container, #E8DEF8));--_disabled-color:var(--md-breadcrumb-item-disabled-color, color-mix(in srgb, var(--md-sys-color-on-surface, #1C1B1F) 61%, transparent));--_hover-color:var(--md-breadcrumb-item-hover-color, var(--md-sys-color-primary, #6750A4));--_state-layer-color:var(--md-breadcrumb-item-state-layer-color, var(--md-sys-color-on-surface, #1C1B1F));--_gap:var(--md-breadcrumb-item-gap, calc(6px + var(--md-sys-density-scale, 0) * 1px));--_padding:var(--md-breadcrumb-item-padding, calc(8px + var(--md-sys-density-scale, 0) * 2px) max(4px, calc(12px + var(--md-sys-density-scale, 0) * 2px)));--_motion-duration:var(--md-sys-motion-spring-effects-default-duration, 200ms);--_motion-easing:var(--md-sys-motion-spring-effects-default-easing, cubic-bezier(0.34, 0.80, 0.34, 1.00));--_spring-easing:var(--md-sys-motion-spring-spatial-fast-easing, cubic-bezier(0.42, 1.67, 0.21, 0.90));--_spring-duration:var(--md-sys-motion-spring-spatial-fast-duration, 350ms);display:inline-flex;align-items:center;gap:var(--md-breadcrumbs-gap, var(--md-sys-spacing-gap-sm, 8px));box-sizing:border-box;font-family:var(--md-sys-typescale-label-large-font-family, Roboto, sans-serif);font-size:max(12px, calc(14px + var(--md-sys-density-scale, 0) * 0.5px));font-weight:var(--md-sys-typescale-label-large-font-weight, 500);line-height:max(16px, calc(20px + var(--md-sys-density-scale, 0) * 1px));letter-spacing:var(--md-sys-typescale-label-large-letter-spacing, 0.1px)}:host(.md-breadcrumb-item--collapsed){display:none}.md-breadcrumb-item__separator{color:var(--md-breadcrumbs-separator-color, var(--md-sys-color-on-surface-variant, #49454F));font-size:max(13px, calc(16px + var(--md-sys-density-scale, 0) * 0.5px));user-select:none;pointer-events:none;opacity:0.7;transition:opacity var(--_motion-duration) var(--_motion-easing)}.md-breadcrumb-item__link,.md-breadcrumb-item__static{position:relative;display:inline-flex;align-items:center;gap:var(--_gap);padding:var(--_padding);border-radius:var(--md-sys-shape-corner-full, 9999px);text-decoration:none;color:var(--_link-color);font:inherit;isolation:isolate;overflow:hidden;transition:color var(--_motion-duration) var(--_motion-easing), background-color var(--_motion-duration) var(--_motion-easing), transform var(--_spring-duration) var(--_spring-easing)}.md-breadcrumb-item__state-layer{position:absolute;inset:0;border-radius:inherit;background-color:var(--_state-layer-color);opacity:0;pointer-events:none;transition:opacity var(--_motion-duration) var(--_motion-easing)}.md-breadcrumb-item__link:hover .md-breadcrumb-item__state-layer{opacity:var(--md-sys-state-hover-state-layer-opacity, 0.08)}.md-breadcrumb-item__link:focus-visible .md-breadcrumb-item__state-layer{opacity:var(--md-sys-state-focus-state-layer-opacity, 0.12)}.md-breadcrumb-item__link:active .md-breadcrumb-item__state-layer{opacity:var(--md-sys-state-pressed-state-layer-opacity, 0.12)}.md-breadcrumb-item__link:hover{color:var(--_hover-color);transform:translateX(2px)}:host([dir="rtl"]) .md-breadcrumb-item__link:hover,:host-context([dir="rtl"]) .md-breadcrumb-item__link:hover{transform:translateX(-2px)}.md-breadcrumb-item__link:focus-visible{outline:3px solid var(--md-sys-color-secondary, #625B71);outline-offset:2px}:host(.md-breadcrumb-item--current) .md-breadcrumb-item__static{background-color:var(--_current-bg);color:var(--_current-color);font-weight:600}:host(.md-breadcrumb-item--disabled) .md-breadcrumb-item__static,:host(.md-breadcrumb-item--disabled) .md-breadcrumb-item__link{color:var(--_disabled-color);pointer-events:none;cursor:not-allowed}:host(.md-breadcrumb-item--disabled) md-ripple,:host(.md-breadcrumb-item--disabled) .md-breadcrumb-item__state-layer{display:none}.md-breadcrumb-item__icon{display:inline-flex;align-items:center;justify-content:center;inline-size:18px;block-size:18px;color:currentColor;flex-shrink:0}.md-breadcrumb-item__icon .material-symbols-outlined{font-family:var(--md-sys-icon-font-family, 'Material Symbols Outlined', 'Material Icons');font-size:max(14px, calc(18px + var(--md-sys-density-scale, 0) * 1px));line-height:1;font-variation-settings:'FILL' 0, 'wght' 500, 'GRAD' 0, 'opsz' 24;transition:font-variation-settings var(--_spring-duration) var(--_spring-easing)}:host(.md-breadcrumb-item--current) .md-breadcrumb-item__icon .material-symbols-outlined{font-variation-settings:'FILL' 1, 'wght' 600, 'GRAD' 0, 'opsz' 24}.md-breadcrumb-item__label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-inline-size:32ch;position:relative;z-index:1}.md-breadcrumb-item__icon{position:relative;z-index:1}@media (prefers-reduced-motion: reduce){.md-breadcrumb-item__link,.md-breadcrumb-item__static,.md-breadcrumb-item__icon .material-symbols-outlined,.md-breadcrumb-item__separator,.md-breadcrumb-item__state-layer{transition-duration:0.01ms !important}.md-breadcrumb-item__link:hover{transform:none}}@media (forced-colors: active){.md-breadcrumb-item__link{color:LinkText}:host(.md-breadcrumb-item--current) .md-breadcrumb-item__static{color:CanvasText;background-color:Canvas;outline:1px solid CanvasText}.md-breadcrumb-item__state-layer{display: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}`;const d=class{constructor(t){e(this,t);this.mdSelect=r(this,"mdSelect",7);this.href="";this.target="";this.rel="";this.current=false;this.icon="";this.disabled=false;this.collapsed=false;this.itemIndex=0;this.itemTotal=0;this.density=0;this.hasSlottedIcon=false;this.hasSlottedLabel=false;this.handleAnchorClick=e=>{const r=this.mdSelect.emit(this.buildDetail(e));if(r.defaultPrevented){e.preventDefault()}}}get isCollapsed(){return this.collapsed}get isCurrent(){return this.current}componentWillLoad(){this.hasSlottedIcon=this.hasDirectSlottedChild("icon");this.hasSlottedLabel=this.hasDefaultSlotContent()}componentDidLoad(){const e=this.el.shadowRoot?.querySelector('slot[name="icon"]');e?.addEventListener("slotchange",(()=>{this.hasSlottedIcon=e.assignedElements().length>0}));const r=this.el.shadowRoot?.querySelector("slot:not([name])");r?.addEventListener("slotchange",(()=>{this.hasSlottedLabel=(r?.assignedNodes()??[]).length>0}))}getLabelText(){return(this.el.textContent??"").trim()}buildDetail(e){return{href:this.href,label:this.getLabelText(),current:this.current,itemIndex:this.itemIndex,itemTotal:this.itemTotal,originalEvent:e}}hasDirectSlottedChild(e){const r=this.el.children;for(let t=0;t<r.length;t+=1){if(r[t].getAttribute("slot")===e)return true}return false}hasDefaultSlotContent(){for(let e=0;e<this.el.childNodes.length;e+=1){const r=this.el.childNodes[e];if(r.nodeType===1){if(!r.hasAttribute("slot"))return true}else if(r.nodeType===3&&(r.textContent??"").trim()!==""){return true}}return false}renderLeadingSeparator(){if(this.itemIndex===0)return null;const e=this.el.parentElement;const r=e?.separator??"/";return t("span",{class:"md-breadcrumb-item__separator",part:"separator","aria-hidden":"true"},r)}renderIcon(){if(this.hasSlottedIcon){return t("span",{class:"md-breadcrumb-item__icon",part:"icon","aria-hidden":"true"},t("slot",{name:"icon"}))}if(this.icon){return t("span",{class:"md-breadcrumb-item__icon",part:"icon","aria-hidden":"true"},t("span",{class:"material-symbols-outlined"},this.icon))}return null}renderLabel(){return t("span",{class:"md-breadcrumb-item__label",part:"label"},t("slot",null))}renderInner(){const e=this.renderIcon();const r=this.renderLabel();if(this.isCurrent||!this.href||this.disabled){return t("span",{class:"md-breadcrumb-item__static",part:"static","aria-current":this.isCurrent?"page":undefined},e,r)}return t("a",{class:"md-breadcrumb-item__link",part:"link",href:o(this.href),target:this.target||undefined,rel:this.rel||(this.target?s:undefined),onClick:this.handleAnchorClick},t("md-ripple",{disabled:this.disabled}),t("span",{class:"md-breadcrumb-item__state-layer",part:"state-layer","aria-hidden":"true"}),e,r)}render(){if(this.isCollapsed){return t(a,{class:"md-breadcrumb-item md-breadcrumb-item--collapsed",role:"listitem","aria-hidden":"true"})}return t(a,{class:{"md-breadcrumb-item":true,"md-breadcrumb-item--current":this.isCurrent,"md-breadcrumb-item--disabled":this.disabled},role:"listitem"},this.renderLeadingSeparator(),this.renderInner())}get el(){return i(this)}};d.style=n();export{d as md_breadcrumb_item};
2
+ //# sourceMappingURL=p-8bdcda53.entry.js.map
@@ -0,0 +1,2 @@
1
+ import{r as t,c as s,f as i,h as e,H as a,g as n}from"./p-WmvQpZnM.js";import{L as o}from"./p-DnKDoE8K.js";import{V as r,i as l,n as h,r as c,c as d,l as p}from"./p-Bz-JaJcA.js";import{s as m,a as u,g as f,c as y,r as b}from"./p-DWxN44zD.js";import{p as g}from"./p-CxhZdOPw.js";const _=()=>`: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 x=0;const v=200;const w=180;const k=class{constructor(e){t(this,e);this.mdChange=s(this,"mdChange",7);this.mdOpen=s(this,"mdOpen",7);this.mdClose=s(this,"mdClose",7);this.mdValidityChange=s(this,"mdValidityChange",5);if(e.$hostElement$["s-ei"]){this.internals=e.$hostElement$["s-ei"]}else{this.internals=e.$hostElement$.attachInternals();e.$hostElement$["s-ei"]=this.internals}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-${++x}`;this.vc=new r({queryItem:t=>this.el.shadowRoot?.querySelector(`md-menu-item[data-vindex="${t}"]`)??null,requestRender:()=>i(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;i(this)}clearTimeout(this.searchDebounce);this.searchDebounce=setTimeout((()=>{this.vc.setQuery(s);this.searching=false;i(this)}),w)}}get optionList(){return g(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(c(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(c(t))}else{this.updateSelectedLabel()}i(this)}async setQuery(t){this.vc.setQuery(t);if(!this.vc.active)this.query=t;this.queryText=t;this.syncSearchField();i(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(){m(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 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=d(this.el,this.optionList);const s=this.virtualize==="always"||this.virtualize==="auto"&&t.length>v;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;i(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}i(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 a=this.label?undefined:this.accessibleName||undefined;return e("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":a,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},e("span",{slot:"trailing-icon",class:"md-select__trailing",part:"trailing","aria-hidden":"true"},this.loading?e("span",{class:"md-select__loader",part:"loading-spinner"},e("slot",{name:"loader"},e(o,{label:this.loadingText}))):[i&&e("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}),e("span",{class:"md-select__caret material-symbols-outlined",part:"caret"},e("slot",{name:"dropdown-icon"},this.dropdownIcon))]))}renderVirtualOptions(){return e("div",{class:"md-select__listbox",role:"listbox",id:`${this.triggerId}-listbox`,"aria-label":this.accessibleName||"Options"},e("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 a=t.value===this.value;return e("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:a?"option option-selected":"option",disabled:t.disabled,selected:a,headline:t.label,"supporting-text":t.supportingText||"","aria-setsize":this.vc.filteredLength,"aria-posinset":i+1,onMdClick:()=>this.selectValue(t.value)},t.icon?e("span",{slot:"leading-icon",part:"option-icon",class:"material-symbols-outlined md-select__option-icon","aria-hidden":"true"},t.icon):null,t.label)})),e("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 a=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 e("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":a,listbox:true,"list-label":this.accessibleName||"Options",part:"menu",onMdOpen:this.handleMenuOpen,onMdClose:this.handleMenuClose},this.filterable&&!this.loading&&e("div",{slot:"header",class:"md-select__search-wrap",part:"search-wrap"},e("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&&e(o,{class:"md-select__search-spinner",part:"search-spinner",label:this.searchingLabel,"aria-hidden":"true"})),this.loading?e("div",{class:"md-select__loading",part:"loading-bar",role:"status","aria-label":this.loadingText},e("md-progress-indicator",{variant:"linear",indeterminate:true,wave:true,part:"loading-progress",label:this.loadingText})):t?this.renderVirtualOptions():e("div",{class:"md-select__listbox",role:"listbox",id:`${this.triggerId}-listbox`,"aria-label":this.accessibleName||"Options"},i.map((t=>e("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?e("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 e(a,{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(),e("div",{key:"3cb7f01eb33bd8025d26c0dffe52748a394d4091",class:"md-select__options",hidden:true},e("slot",{key:"2cc921cc04dc87830ca2ee4456eccd6dee79315a",onSlotchange:()=>this.refreshOptions()})))}static get formAssociated(){return true}get el(){return n(this)}static get watchers(){return{value:[{syncFormValue:0}],required:[{syncValidity:0}],valueMissingLabel:[{syncValidity:0}],options:[{refreshOptions:0}],open:[{syncMenu:0}]}}};k.style=_();export{k as md_select};
2
+ //# sourceMappingURL=p-9003a7d4.entry.js.map