@awc-ui/core 1.0.0-beta.2 → 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 (833) hide show
  1. package/README.md +18 -0
  2. package/dist/cjs/app-globals-V2Kpy_OQ.js +8 -0
  3. package/dist/cjs/app-globals-V2Kpy_OQ.js.map +1 -0
  4. package/dist/cjs/engine.wasm-9JtXME10.js +12 -0
  5. package/dist/cjs/engine.wasm-9JtXME10.js.map +1 -0
  6. package/dist/cjs/{index-DlQ_5_Mv.js → index-Bm07YAg9.js} +4 -15
  7. package/dist/cjs/index-Bm07YAg9.js.map +1 -0
  8. package/dist/cjs/lazy-loading-indicator-CoC-_DMs.js +69 -0
  9. package/dist/cjs/lazy-loading-indicator-CoC-_DMs.js.map +1 -0
  10. package/dist/cjs/loader.cjs.js +4 -3
  11. package/dist/cjs/loader.cjs.js.map +1 -1
  12. package/dist/cjs/md-accordion-item.cjs.entry.js +4 -4
  13. package/dist/cjs/md-accordion.cjs.entry.js +1 -1
  14. package/dist/cjs/md-app-bar.cjs.entry.js +2 -2
  15. package/dist/cjs/md-area-chart.cjs.entry.js +3 -3
  16. package/dist/cjs/md-autocomplete.cjs.entry.js +6 -5
  17. package/dist/cjs/md-autocomplete.cjs.entry.js.map +1 -1
  18. package/dist/cjs/md-avatar_2.cjs.entry.js +4 -4
  19. package/dist/cjs/md-badge.cjs.entry.js +3 -3
  20. package/dist/cjs/md-bar-chart.cjs.entry.js +3 -3
  21. package/dist/cjs/md-bottom-sheet.cjs.entry.js +5 -5
  22. package/dist/cjs/md-breadcrumb-item.cjs.entry.js +1 -1
  23. package/dist/cjs/md-breadcrumbs.cjs.entry.js +3 -3
  24. package/dist/cjs/md-button-group.cjs.entry.js +3 -3
  25. package/dist/cjs/{md-button_7.cjs.entry.js → md-button_6.cjs.entry.js} +14 -39
  26. package/dist/cjs/md-button_6.cjs.entry.js.map +1 -0
  27. package/dist/cjs/md-checkbox.cjs.entry.js +3 -3
  28. package/dist/cjs/md-chip.cjs.entry.js +3 -3
  29. package/dist/cjs/md-color-picker.cjs.entry.js +1 -1
  30. package/dist/cjs/md-date-picker.cjs.entry.js +2 -2
  31. package/dist/cjs/md-dialog.cjs.entry.js +3 -3
  32. package/dist/cjs/md-divider.cjs.entry.js +3 -3
  33. package/dist/cjs/md-fab-menu-item.cjs.entry.js +3 -3
  34. package/dist/cjs/md-fab-menu.cjs.entry.js +3 -3
  35. package/dist/cjs/md-fab.cjs.entry.js +3 -3
  36. package/dist/cjs/md-line-chart.cjs.entry.js +3 -3
  37. package/dist/cjs/md-list-item.cjs.entry.js +4 -4
  38. package/dist/cjs/md-list.cjs.entry.js +4 -4
  39. package/dist/cjs/md-loading-indicator-CmzdcYLR.js +33 -0
  40. package/dist/cjs/md-loading-indicator-CmzdcYLR.js.map +1 -0
  41. package/dist/cjs/md-loading-indicator.cjs.entry.js +11 -0
  42. package/dist/cjs/md-loading-indicator.cjs.entry.js.map +1 -0
  43. package/dist/cjs/md-menu-item-group.cjs.entry.js +1 -1
  44. package/dist/cjs/md-menu_2.cjs.entry.js +6 -6
  45. package/dist/cjs/md-meter.cjs.entry.js +1 -1
  46. package/dist/cjs/md-multi-select.cjs.entry.js +7 -6
  47. package/dist/cjs/md-multi-select.cjs.entry.js.map +1 -1
  48. package/dist/cjs/md-navigation-bar.cjs.entry.js +2 -2
  49. package/dist/cjs/md-navigation-rail-tab.cjs.entry.js +1 -1
  50. package/dist/cjs/md-navigation-rail.cjs.entry.js +1 -1
  51. package/dist/cjs/md-navigation-tab.cjs.entry.js +3 -3
  52. package/dist/cjs/md-number-field.cjs.entry.js +3 -3
  53. package/dist/cjs/md-organization-chart.cjs.entry.js +3 -3
  54. package/dist/cjs/md-otp-field.cjs.entry.js +4 -4
  55. package/dist/cjs/md-pie-chart.cjs.entry.js +1 -1
  56. package/dist/cjs/md-progress-indicator.cjs.entry.js +1 -1
  57. package/dist/cjs/md-rating.cjs.entry.js +1 -1
  58. package/dist/cjs/md-search.cjs.entry.js +8 -7
  59. package/dist/cjs/md-search.cjs.entry.js.map +1 -1
  60. package/dist/cjs/md-segmented-button-set.cjs.entry.js +1 -1
  61. package/dist/cjs/md-segmented-button.cjs.entry.js +1 -1
  62. package/dist/cjs/md-select-option.cjs.entry.js +2 -2
  63. package/dist/cjs/md-select.cjs.entry.js +7 -6
  64. package/dist/cjs/md-select.cjs.entry.js.map +1 -1
  65. package/dist/cjs/md-side-sheet.cjs.entry.js +1 -1
  66. package/dist/cjs/md-skeleton.cjs.entry.js +1 -1
  67. package/dist/cjs/md-slider.cjs.entry.js +3 -3
  68. package/dist/cjs/md-sparkline.cjs.entry.js +3 -3
  69. package/dist/cjs/md-split-button.cjs.entry.js +1 -1
  70. package/dist/cjs/md-status-dot.cjs.entry.js +2 -2
  71. package/dist/cjs/md-step.cjs.entry.js +1 -1
  72. package/dist/cjs/md-stepper.cjs.entry.js +1 -1
  73. package/dist/cjs/md-sub-menu-item.cjs.entry.js +1 -1
  74. package/dist/cjs/md-switch.cjs.entry.js +1 -1
  75. package/dist/cjs/md-tab-panel.cjs.entry.js +1 -1
  76. package/dist/cjs/md-tab-panels.cjs.entry.js +1 -1
  77. package/dist/cjs/md-tab.cjs.entry.js +1 -1
  78. package/dist/cjs/md-table-body.cjs.entry.js +1 -1
  79. package/dist/cjs/md-table-cell.cjs.entry.js +1 -1
  80. package/dist/cjs/md-table-container.cjs.entry.js +1 -1
  81. package/dist/cjs/md-table-expand-toggle.cjs.entry.js +1 -1
  82. package/dist/cjs/md-table-foot.cjs.entry.js +1 -1
  83. package/dist/cjs/md-table-head.cjs.entry.js +1 -1
  84. package/dist/cjs/md-table-pagination.cjs.entry.js +1 -1
  85. package/dist/cjs/md-table-row.cjs.entry.js +1 -1
  86. package/dist/cjs/md-table-sort-label.cjs.entry.js +1 -1
  87. package/dist/cjs/md-table-toolbar.cjs.entry.js +1 -1
  88. package/dist/cjs/md-table.cjs.entry.js +4 -4
  89. package/dist/cjs/md-tabs.cjs.entry.js +1 -1
  90. package/dist/cjs/md-text-field.cjs.entry.js +8 -8
  91. package/dist/cjs/md-time-picker.cjs.entry.js +2 -2
  92. package/dist/cjs/md-toolbar.cjs.entry.js +1 -1
  93. package/dist/cjs/md-transfer-list.cjs.entry.js +2 -2
  94. package/dist/cjs/md3.cjs.js +4 -3
  95. package/dist/cjs/md3.cjs.js.map +1 -1
  96. package/dist/cjs/{virtual-select-controller-CqriaZgm.js → virtual-select-controller-C5cSoKfB.js} +10 -9
  97. package/dist/cjs/virtual-select-controller-C5cSoKfB.js.map +1 -0
  98. package/dist/collection/collection-manifest.json +1 -1
  99. package/dist/collection/components/md-accordion-item/md-accordion-item.js +3 -3
  100. package/dist/collection/components/md-app-bar/md-app-bar.js +1 -1
  101. package/dist/collection/components/md-area-chart/md-area-chart.js +2 -2
  102. package/dist/collection/components/md-autocomplete/md-autocomplete.js +4 -3
  103. package/dist/collection/components/md-autocomplete/md-autocomplete.js.map +1 -1
  104. package/dist/collection/components/md-avatar/md-avatar.js +2 -2
  105. package/dist/collection/components/md-badge/md-badge.js +2 -2
  106. package/dist/collection/components/md-bar-chart/md-bar-chart.js +2 -2
  107. package/dist/collection/components/md-bottom-sheet/md-bottom-sheet.js +4 -4
  108. package/dist/collection/components/md-breadcrumbs/md-breadcrumbs.js +2 -2
  109. package/dist/collection/components/md-button/md-button.js +4 -3
  110. package/dist/collection/components/md-button/md-button.js.map +1 -1
  111. package/dist/collection/components/md-button-group/md-button-group.js +2 -2
  112. package/dist/collection/components/md-card/md-card.js +2 -2
  113. package/dist/collection/components/md-checkbox/md-checkbox.js +2 -2
  114. package/dist/collection/components/md-chip/md-chip.js +2 -2
  115. package/dist/collection/components/md-date-picker/md-date-picker.js +1 -1
  116. package/dist/collection/components/md-dialog/md-dialog.js +2 -2
  117. package/dist/collection/components/md-divider/md-divider.js +2 -2
  118. package/dist/collection/components/md-fab/md-fab.js +2 -2
  119. package/dist/collection/components/md-fab-menu/md-fab-menu.js +2 -2
  120. package/dist/collection/components/md-fab-menu-item/md-fab-menu-item.js +2 -2
  121. package/dist/collection/components/md-icon-button/md-icon-button.js +4 -4
  122. package/dist/collection/components/md-line-chart/md-line-chart.js +2 -2
  123. package/dist/collection/components/md-list/md-list.js +3 -3
  124. package/dist/collection/components/md-list-item/md-list-item.js +3 -3
  125. package/dist/collection/components/md-loading-indicator/md-loading-indicator.js +2 -2
  126. package/dist/collection/components/md-menu/md-menu.js +3 -3
  127. package/dist/collection/components/md-menu-item/md-menu-item.js +2 -2
  128. package/dist/collection/components/md-multi-select/md-multi-select.js +5 -4
  129. package/dist/collection/components/md-multi-select/md-multi-select.js.map +1 -1
  130. package/dist/collection/components/md-navigation-bar/md-navigation-bar.js +1 -1
  131. package/dist/collection/components/md-navigation-tab/md-navigation-tab.js +2 -2
  132. package/dist/collection/components/md-number-field/md-number-field.js +2 -2
  133. package/dist/collection/components/md-organization-chart/md-organization-chart.js +2 -2
  134. package/dist/collection/components/md-otp-field/md-otp-field.js +3 -3
  135. package/dist/collection/components/md-ripple/md-ripple.js +1 -1
  136. package/dist/collection/components/md-search/md-search.js +7 -6
  137. package/dist/collection/components/md-search/md-search.js.map +1 -1
  138. package/dist/collection/components/md-select/md-select.js +5 -4
  139. package/dist/collection/components/md-select/md-select.js.map +1 -1
  140. package/dist/collection/components/md-select-option/md-select-option.js +1 -1
  141. package/dist/collection/components/md-slider/md-slider.js +2 -2
  142. package/dist/collection/components/md-sparkline/md-sparkline.js +2 -2
  143. package/dist/collection/components/md-status-dot/md-status-dot.js +1 -1
  144. package/dist/collection/components/md-table/md-table.js +3 -3
  145. package/dist/collection/components/md-text-field/md-text-field.js +7 -7
  146. package/dist/collection/components/md-time-picker/md-time-picker.js +1 -1
  147. package/dist/collection/components/md-tooltip/md-tooltip.js +1 -1
  148. package/dist/collection/components/md-transfer-list/md-transfer-list.js +1 -1
  149. package/dist/collection/utils/lazy-loading-indicator.js +62 -0
  150. package/dist/collection/utils/lazy-loading-indicator.js.map +1 -0
  151. package/dist/collection/wasm/engine-abi.js +8 -2
  152. package/dist/collection/wasm/engine-abi.js.map +1 -1
  153. package/dist/components/index.js +1 -1
  154. package/dist/components/md-accordion-item.js +1 -1
  155. package/dist/components/md-accordion.js +1 -1
  156. package/dist/components/md-app-bar.js +1 -1
  157. package/dist/components/md-area-chart.js +1 -1
  158. package/dist/components/md-autocomplete.js +1 -1
  159. package/dist/components/md-autocomplete.js.map +1 -1
  160. package/dist/components/md-avatar.js +1 -1
  161. package/dist/components/md-badge.js +1 -1
  162. package/dist/components/md-bar-chart.js +1 -1
  163. package/dist/components/md-bottom-sheet.js +1 -1
  164. package/dist/components/md-breadcrumb-item.js +1 -1
  165. package/dist/components/md-breadcrumbs.js +1 -1
  166. package/dist/components/md-button-group.js +1 -1
  167. package/dist/components/md-button.js +1 -1
  168. package/dist/components/md-card.js +1 -1
  169. package/dist/components/md-checkbox.js +1 -1
  170. package/dist/components/md-chip.js +1 -1
  171. package/dist/components/md-color-picker.js +1 -1
  172. package/dist/components/md-date-picker.js +1 -1
  173. package/dist/components/md-date-picker.js.map +1 -1
  174. package/dist/components/md-dialog.js +1 -1
  175. package/dist/components/md-dialog.js.map +1 -1
  176. package/dist/components/md-divider.js +1 -1
  177. package/dist/components/md-divider.js.map +1 -1
  178. package/dist/components/md-fab-menu-item.js +1 -1
  179. package/dist/components/md-fab-menu.js +1 -1
  180. package/dist/components/md-fab.js +1 -1
  181. package/dist/components/md-icon-button.js +1 -1
  182. package/dist/components/md-line-chart.js +1 -1
  183. package/dist/components/md-line-chart.js.map +1 -1
  184. package/dist/components/md-list-item.js +1 -1
  185. package/dist/components/md-list.js +1 -1
  186. package/dist/components/md-loading-indicator.js +1 -1
  187. package/dist/components/md-menu-item-group.js +1 -1
  188. package/dist/components/md-menu-item.js +1 -1
  189. package/dist/components/md-menu.js +1 -1
  190. package/dist/components/md-meter.js +1 -1
  191. package/dist/components/md-multi-select.js +1 -1
  192. package/dist/components/md-multi-select.js.map +1 -1
  193. package/dist/components/md-navigation-bar.js +1 -1
  194. package/dist/components/md-navigation-rail-tab.js +1 -1
  195. package/dist/components/md-navigation-rail.js +1 -1
  196. package/dist/components/md-navigation-tab.js +1 -1
  197. package/dist/components/md-number-field.js +1 -1
  198. package/dist/components/md-organization-chart.js +1 -1
  199. package/dist/components/md-otp-field.js +1 -1
  200. package/dist/components/md-pie-chart.js +1 -1
  201. package/dist/components/md-progress-indicator.js +1 -1
  202. package/dist/components/md-radio.js +1 -1
  203. package/dist/components/md-rating.js +1 -1
  204. package/dist/components/md-ripple.js +1 -1
  205. package/dist/components/md-search.js +1 -1
  206. package/dist/components/md-search.js.map +1 -1
  207. package/dist/components/md-segmented-button-set.js +1 -1
  208. package/dist/components/md-segmented-button.js +1 -1
  209. package/dist/components/md-select-option.js +1 -1
  210. package/dist/components/md-select.js +1 -1
  211. package/dist/components/md-side-sheet.js +1 -1
  212. package/dist/components/md-skeleton.js +1 -1
  213. package/dist/components/md-slider.js +1 -1
  214. package/dist/components/md-snackbar.js +1 -1
  215. package/dist/components/md-snackbar.js.map +1 -1
  216. package/dist/components/md-sparkline.js +1 -1
  217. package/dist/components/md-split-button.js +1 -1
  218. package/dist/components/md-status-dot.js +1 -1
  219. package/dist/components/md-step.js +1 -1
  220. package/dist/components/md-step.js.map +1 -1
  221. package/dist/components/md-stepper.js +1 -1
  222. package/dist/components/md-stepper.js.map +1 -1
  223. package/dist/components/md-sub-menu-item.js +1 -1
  224. package/dist/components/md-switch.js +1 -1
  225. package/dist/components/md-tab-panel.js +1 -1
  226. package/dist/components/md-tab-panels.js +1 -1
  227. package/dist/components/md-tab.js +1 -1
  228. package/dist/components/md-table-body.js +1 -1
  229. package/dist/components/md-table-cell.js +1 -1
  230. package/dist/components/md-table-container.js +1 -1
  231. package/dist/components/md-table-expand-toggle.js +1 -1
  232. package/dist/components/md-table-foot.js +1 -1
  233. package/dist/components/md-table-head.js +1 -1
  234. package/dist/components/md-table-pagination.js +1 -1
  235. package/dist/components/md-table-pagination.js.map +1 -1
  236. package/dist/components/md-table-row.js +1 -1
  237. package/dist/components/md-table-sort-label.js +1 -1
  238. package/dist/components/md-table-toolbar.js +1 -1
  239. package/dist/components/md-table.js +1 -1
  240. package/dist/components/md-tabs.js +1 -1
  241. package/dist/components/md-text-field.js +1 -1
  242. package/dist/components/md-time-picker.js +1 -1
  243. package/dist/components/md-time-picker.js.map +1 -1
  244. package/dist/components/md-toolbar.js +1 -1
  245. package/dist/components/md-tooltip.js +1 -1
  246. package/dist/components/md-transfer-list.js +1 -1
  247. package/dist/components/p-1RSrsLOs.js +2 -0
  248. package/dist/components/p-1RSrsLOs.js.map +1 -0
  249. package/dist/components/p-2HV152w7.js +2 -0
  250. package/dist/components/p-2HV152w7.js.map +1 -0
  251. package/dist/components/p-6ZDAcEKN.js +2 -0
  252. package/dist/components/p-6ZDAcEKN.js.map +1 -0
  253. package/dist/components/p-B2fYoYe9.js +2 -0
  254. package/dist/components/p-B2fYoYe9.js.map +1 -0
  255. package/dist/components/p-BR6gfOQH.js +2 -0
  256. package/dist/components/p-BR6gfOQH.js.map +1 -0
  257. package/dist/components/p-Bz-JaJcA.js +2 -0
  258. package/dist/components/p-Bz-JaJcA.js.map +1 -0
  259. package/dist/components/p-C77M30dm.js +2 -0
  260. package/dist/components/p-C77M30dm.js.map +1 -0
  261. package/dist/components/p-CNgkGl_1.js +2 -0
  262. package/dist/components/p-CNgkGl_1.js.map +1 -0
  263. package/dist/components/p-CfBPnYW7.js +2 -0
  264. package/dist/components/p-CfBPnYW7.js.map +1 -0
  265. package/dist/components/p-D5Ht729E.js +2 -0
  266. package/dist/components/p-D5Ht729E.js.map +1 -0
  267. package/dist/components/p-DPqGg8C1.js +2 -0
  268. package/dist/components/p-DPqGg8C1.js.map +1 -0
  269. package/dist/components/p-De3E5Q8v.js +2 -0
  270. package/dist/components/p-De3E5Q8v.js.map +1 -0
  271. package/dist/components/p-Dm_7DA1f.js +2 -0
  272. package/dist/components/p-Dm_7DA1f.js.map +1 -0
  273. package/dist/components/p-Dz3R-2Wn.js +2 -0
  274. package/dist/components/p-Dz3R-2Wn.js.map +1 -0
  275. package/dist/components/p-Zjf9uhOr.js +2 -0
  276. package/dist/components/p-Zjf9uhOr.js.map +1 -0
  277. package/dist/components/p-ssLobpGS.js +2 -0
  278. package/dist/components/p-ssLobpGS.js.map +1 -0
  279. package/dist/components/p-tSoecrcz.js +2 -0
  280. package/dist/components/p-tSoecrcz.js.map +1 -0
  281. package/dist/components/p-zMR3UIR_.js +2 -0
  282. package/dist/components/p-zMR3UIR_.js.map +1 -0
  283. package/dist/components-csr/index.js +2 -0
  284. package/dist/components-csr/index.js.map +1 -0
  285. package/dist/components-csr/md-accordion-item.js +2 -0
  286. package/dist/components-csr/md-accordion-item.js.map +1 -0
  287. package/dist/components-csr/md-accordion.js +2 -0
  288. package/dist/components-csr/md-accordion.js.map +1 -0
  289. package/dist/components-csr/md-app-bar.js +2 -0
  290. package/dist/components-csr/md-app-bar.js.map +1 -0
  291. package/dist/components-csr/md-area-chart.js +2 -0
  292. package/dist/components-csr/md-area-chart.js.map +1 -0
  293. package/dist/components-csr/md-autocomplete.js +2 -0
  294. package/dist/components-csr/md-autocomplete.js.map +1 -0
  295. package/dist/components-csr/md-avatar.js +2 -0
  296. package/dist/components-csr/md-avatar.js.map +1 -0
  297. package/dist/components-csr/md-badge.js +2 -0
  298. package/dist/components-csr/md-badge.js.map +1 -0
  299. package/dist/components-csr/md-bar-chart.js +2 -0
  300. package/dist/components-csr/md-bar-chart.js.map +1 -0
  301. package/dist/components-csr/md-bottom-sheet.js +2 -0
  302. package/dist/components-csr/md-bottom-sheet.js.map +1 -0
  303. package/dist/components-csr/md-breadcrumb-item.js +2 -0
  304. package/dist/components-csr/md-breadcrumb-item.js.map +1 -0
  305. package/dist/components-csr/md-breadcrumbs.js +2 -0
  306. package/dist/components-csr/md-breadcrumbs.js.map +1 -0
  307. package/dist/components-csr/md-button-group.js +2 -0
  308. package/dist/components-csr/md-button-group.js.map +1 -0
  309. package/dist/components-csr/md-button.js +2 -0
  310. package/dist/components-csr/md-button.js.map +1 -0
  311. package/dist/components-csr/md-card.js +2 -0
  312. package/dist/components-csr/md-card.js.map +1 -0
  313. package/dist/components-csr/md-checkbox.js +2 -0
  314. package/dist/components-csr/md-checkbox.js.map +1 -0
  315. package/dist/components-csr/md-chip.js +2 -0
  316. package/dist/components-csr/md-chip.js.map +1 -0
  317. package/dist/components-csr/md-color-picker.js +2 -0
  318. package/dist/components-csr/md-color-picker.js.map +1 -0
  319. package/dist/components-csr/md-date-picker.js +2 -0
  320. package/dist/components-csr/md-date-picker.js.map +1 -0
  321. package/dist/components-csr/md-dialog.js +2 -0
  322. package/dist/components-csr/md-dialog.js.map +1 -0
  323. package/dist/components-csr/md-divider.js +2 -0
  324. package/dist/components-csr/md-divider.js.map +1 -0
  325. package/dist/components-csr/md-fab-menu-item.js +2 -0
  326. package/dist/components-csr/md-fab-menu-item.js.map +1 -0
  327. package/dist/components-csr/md-fab-menu.js +2 -0
  328. package/dist/components-csr/md-fab-menu.js.map +1 -0
  329. package/dist/components-csr/md-fab.js +2 -0
  330. package/dist/components-csr/md-fab.js.map +1 -0
  331. package/dist/components-csr/md-icon-button.js +2 -0
  332. package/dist/components-csr/md-icon-button.js.map +1 -0
  333. package/dist/components-csr/md-line-chart.js +2 -0
  334. package/dist/components-csr/md-line-chart.js.map +1 -0
  335. package/dist/components-csr/md-list-item.js +2 -0
  336. package/dist/components-csr/md-list-item.js.map +1 -0
  337. package/dist/components-csr/md-list.js +2 -0
  338. package/dist/components-csr/md-list.js.map +1 -0
  339. package/dist/components-csr/md-loading-indicator.js +2 -0
  340. package/dist/components-csr/md-loading-indicator.js.map +1 -0
  341. package/dist/components-csr/md-menu-item-group.js +2 -0
  342. package/dist/components-csr/md-menu-item-group.js.map +1 -0
  343. package/dist/components-csr/md-menu-item.js +2 -0
  344. package/dist/components-csr/md-menu-item.js.map +1 -0
  345. package/dist/components-csr/md-menu.js +2 -0
  346. package/dist/components-csr/md-menu.js.map +1 -0
  347. package/dist/components-csr/md-meter.js +2 -0
  348. package/dist/components-csr/md-meter.js.map +1 -0
  349. package/dist/components-csr/md-multi-select.js +2 -0
  350. package/dist/components-csr/md-multi-select.js.map +1 -0
  351. package/dist/components-csr/md-navigation-bar.js +2 -0
  352. package/dist/components-csr/md-navigation-bar.js.map +1 -0
  353. package/dist/components-csr/md-navigation-rail-tab.js +2 -0
  354. package/dist/components-csr/md-navigation-rail-tab.js.map +1 -0
  355. package/dist/components-csr/md-navigation-rail.js +2 -0
  356. package/dist/components-csr/md-navigation-rail.js.map +1 -0
  357. package/dist/components-csr/md-navigation-tab.js +2 -0
  358. package/dist/components-csr/md-navigation-tab.js.map +1 -0
  359. package/dist/components-csr/md-number-field.js +2 -0
  360. package/dist/components-csr/md-number-field.js.map +1 -0
  361. package/dist/components-csr/md-organization-chart.js +2 -0
  362. package/dist/components-csr/md-organization-chart.js.map +1 -0
  363. package/dist/components-csr/md-otp-field.js +2 -0
  364. package/dist/components-csr/md-otp-field.js.map +1 -0
  365. package/dist/components-csr/md-pie-chart.js +2 -0
  366. package/dist/components-csr/md-pie-chart.js.map +1 -0
  367. package/dist/components-csr/md-progress-indicator.js +2 -0
  368. package/dist/components-csr/md-progress-indicator.js.map +1 -0
  369. package/dist/components-csr/md-radio.js +2 -0
  370. package/dist/components-csr/md-radio.js.map +1 -0
  371. package/dist/components-csr/md-rating.js +2 -0
  372. package/dist/components-csr/md-rating.js.map +1 -0
  373. package/dist/components-csr/md-ripple.js +2 -0
  374. package/dist/components-csr/md-ripple.js.map +1 -0
  375. package/dist/components-csr/md-search.js +2 -0
  376. package/dist/components-csr/md-search.js.map +1 -0
  377. package/dist/components-csr/md-segmented-button-set.js +2 -0
  378. package/dist/components-csr/md-segmented-button-set.js.map +1 -0
  379. package/dist/components-csr/md-segmented-button.js +2 -0
  380. package/dist/components-csr/md-segmented-button.js.map +1 -0
  381. package/dist/components-csr/md-select-option.js +2 -0
  382. package/dist/components-csr/md-select-option.js.map +1 -0
  383. package/dist/components-csr/md-select.js +2 -0
  384. package/dist/components-csr/md-select.js.map +1 -0
  385. package/dist/components-csr/md-side-sheet.js +2 -0
  386. package/dist/components-csr/md-side-sheet.js.map +1 -0
  387. package/dist/components-csr/md-skeleton.js +2 -0
  388. package/dist/components-csr/md-skeleton.js.map +1 -0
  389. package/dist/components-csr/md-slider.js +2 -0
  390. package/dist/components-csr/md-slider.js.map +1 -0
  391. package/dist/components-csr/md-snackbar.js +2 -0
  392. package/dist/components-csr/md-snackbar.js.map +1 -0
  393. package/dist/components-csr/md-sparkline.js +2 -0
  394. package/dist/components-csr/md-sparkline.js.map +1 -0
  395. package/dist/components-csr/md-split-button.js +2 -0
  396. package/dist/components-csr/md-split-button.js.map +1 -0
  397. package/dist/components-csr/md-status-dot.js +2 -0
  398. package/dist/components-csr/md-status-dot.js.map +1 -0
  399. package/dist/components-csr/md-step.js +2 -0
  400. package/dist/components-csr/md-step.js.map +1 -0
  401. package/dist/components-csr/md-stepper.js +2 -0
  402. package/dist/components-csr/md-stepper.js.map +1 -0
  403. package/dist/components-csr/md-sub-menu-item.js +2 -0
  404. package/dist/components-csr/md-sub-menu-item.js.map +1 -0
  405. package/dist/components-csr/md-switch.js +2 -0
  406. package/dist/components-csr/md-switch.js.map +1 -0
  407. package/dist/components-csr/md-tab-panel.js +2 -0
  408. package/dist/components-csr/md-tab-panel.js.map +1 -0
  409. package/dist/components-csr/md-tab-panels.js +2 -0
  410. package/dist/components-csr/md-tab-panels.js.map +1 -0
  411. package/dist/components-csr/md-tab.js +2 -0
  412. package/dist/components-csr/md-tab.js.map +1 -0
  413. package/dist/components-csr/md-table-body.js +2 -0
  414. package/dist/components-csr/md-table-body.js.map +1 -0
  415. package/dist/components-csr/md-table-cell.js +2 -0
  416. package/dist/components-csr/md-table-cell.js.map +1 -0
  417. package/dist/components-csr/md-table-container.js +2 -0
  418. package/dist/components-csr/md-table-container.js.map +1 -0
  419. package/dist/components-csr/md-table-expand-toggle.js +2 -0
  420. package/dist/components-csr/md-table-expand-toggle.js.map +1 -0
  421. package/dist/components-csr/md-table-foot.js +2 -0
  422. package/dist/components-csr/md-table-foot.js.map +1 -0
  423. package/dist/components-csr/md-table-head.js +2 -0
  424. package/dist/components-csr/md-table-head.js.map +1 -0
  425. package/dist/components-csr/md-table-pagination.js +2 -0
  426. package/dist/components-csr/md-table-pagination.js.map +1 -0
  427. package/dist/components-csr/md-table-row.js +2 -0
  428. package/dist/components-csr/md-table-row.js.map +1 -0
  429. package/dist/components-csr/md-table-sort-label.js +2 -0
  430. package/dist/components-csr/md-table-sort-label.js.map +1 -0
  431. package/dist/components-csr/md-table-toolbar.js +2 -0
  432. package/dist/components-csr/md-table-toolbar.js.map +1 -0
  433. package/dist/components-csr/md-table.js +2 -0
  434. package/dist/components-csr/md-table.js.map +1 -0
  435. package/dist/components-csr/md-tabs.js +2 -0
  436. package/dist/components-csr/md-tabs.js.map +1 -0
  437. package/dist/components-csr/md-text-field.js +2 -0
  438. package/dist/components-csr/md-text-field.js.map +1 -0
  439. package/dist/components-csr/md-time-picker.js +2 -0
  440. package/dist/components-csr/md-time-picker.js.map +1 -0
  441. package/dist/components-csr/md-toolbar.js +2 -0
  442. package/dist/components-csr/md-toolbar.js.map +1 -0
  443. package/dist/components-csr/md-tooltip.js +2 -0
  444. package/dist/components-csr/md-tooltip.js.map +1 -0
  445. package/dist/components-csr/md-transfer-list.js +2 -0
  446. package/dist/components-csr/md-transfer-list.js.map +1 -0
  447. package/dist/components-csr/p-6WgHjhDg.js +2 -0
  448. package/dist/components-csr/p-6WgHjhDg.js.map +1 -0
  449. package/dist/{components/p-uTEkf0sE.js → components-csr/p-BEmwDSzw.js} +2 -2
  450. package/dist/{components/p-C8EP4S21.js → components-csr/p-BQKzjYcY.js} +2 -2
  451. package/dist/{components/p-BwXpiUsu.js → components-csr/p-BWMwewtY.js} +2 -2
  452. package/dist/{components/p-DXXUoRSH.js → components-csr/p-BZakoRau.js} +2 -2
  453. package/dist/components-csr/p-BZakoRau.js.map +1 -0
  454. package/dist/{md3/p-BjYKc1Ge.js → components-csr/p-BdEoSBtL.js} +2 -2
  455. package/dist/components-csr/p-BdEoSBtL.js.map +1 -0
  456. package/dist/{components/p-B0Opn6dK.js → components-csr/p-Bkt_X-6v.js} +2 -2
  457. package/dist/components-csr/p-Bx6--dQF.js.map +1 -0
  458. package/dist/components-csr/p-Bz-JaJcA.js +2 -0
  459. package/dist/components-csr/p-Bz-JaJcA.js.map +1 -0
  460. package/dist/{components/p-stybaFzj.js → components-csr/p-C3vB0Hd9.js} +2 -2
  461. package/dist/{components/p-B3MWYEEJ.js → components-csr/p-CF7mq5T7.js} +2 -2
  462. package/dist/{components/p-7fN_yCXW.js → components-csr/p-CVMM-tdC.js} +2 -2
  463. package/dist/components-csr/p-C_ogF68H.js.map +1 -0
  464. package/dist/components-csr/p-Cch_V1vi.js +2 -0
  465. package/dist/components-csr/p-Cch_V1vi.js.map +1 -0
  466. package/dist/components-csr/p-CfBPnYW7.js +2 -0
  467. package/dist/components-csr/p-CfBPnYW7.js.map +1 -0
  468. package/dist/components-csr/p-CxhZdOPw.js +2 -0
  469. package/dist/components-csr/p-CxhZdOPw.js.map +1 -0
  470. package/dist/{components/p-Ch2-tttM.js → components-csr/p-DMQ-6aj8.js} +2 -2
  471. package/dist/components-csr/p-DWxN44zD.js +2 -0
  472. package/dist/components-csr/p-DWxN44zD.js.map +1 -0
  473. package/dist/components-csr/p-DYBUr7K_.js +2 -0
  474. package/dist/components-csr/p-DYBUr7K_.js.map +1 -0
  475. package/dist/{components/p-e2HRV63Y.js → components-csr/p-DfcpeJAu.js} +2 -2
  476. package/dist/{components/p-Dp-w93ot.js → components-csr/p-DjKPc5EU.js} +2 -2
  477. package/dist/components-csr/p-DvOKnoqK.js.map +1 -0
  478. package/dist/components-csr/p-DzPKu-Ma.js.map +1 -0
  479. package/dist/{components/p-UdGDg2oJ.js → components-csr/p-If0JHsYV.js} +2 -2
  480. package/dist/components-csr/p-If0JHsYV.js.map +1 -0
  481. package/dist/components-csr/p-RLxbNqRv.js.map +1 -0
  482. package/dist/{components/p-6wZSqm_2.js → components-csr/p-R_guULjT.js} +2 -2
  483. package/dist/components-csr/p-bSpXNc5J.js +2 -0
  484. package/dist/components-csr/p-bSpXNc5J.js.map +1 -0
  485. package/dist/{components/p-Ddiw2Kjw.js → components-csr/p-uSMrgqAy.js} +2 -2
  486. package/dist/components-csr/package.json +3 -0
  487. package/dist/esm/{a11y-C6CRqodW.js → a11y-BckJ95d7.js} +3 -3
  488. package/dist/esm/{a11y-C6CRqodW.js.map → a11y-BckJ95d7.js.map} +1 -1
  489. package/dist/esm/app-globals-DQuL1Twl.js +6 -0
  490. package/dist/esm/app-globals-DQuL1Twl.js.map +1 -0
  491. package/dist/esm/{bar-chart-ZZrajEkM.js → bar-chart-BuTyuCbt.js} +4 -4
  492. package/dist/esm/{bar-chart-ZZrajEkM.js.map → bar-chart-BuTyuCbt.js.map} +1 -1
  493. package/dist/esm/{chart-32olae06.js → chart-ByIhkqsG.js} +4 -4
  494. package/dist/esm/{chart-32olae06.js.map → chart-ByIhkqsG.js.map} +1 -1
  495. package/dist/esm/engine.wasm-CfBPnYW7.js +10 -0
  496. package/dist/esm/engine.wasm-CfBPnYW7.js.map +1 -0
  497. package/dist/esm/{hit-test-DHldf5Lm.js → hit-test-c_hI-yCX.js} +3 -3
  498. package/dist/esm/{hit-test-DHldf5Lm.js.map → hit-test-c_hI-yCX.js.map} +1 -1
  499. package/dist/esm/{index-DTaX19_O.js → index-WmvQpZnM.js} +5 -15
  500. package/dist/esm/index-WmvQpZnM.js.map +1 -0
  501. package/dist/esm/lazy-loading-indicator-BWFcjJiK.js +67 -0
  502. package/dist/esm/lazy-loading-indicator-BWFcjJiK.js.map +1 -0
  503. package/dist/esm/loader.js +4 -3
  504. package/dist/esm/loader.js.map +1 -1
  505. package/dist/esm/md-accordion-item.entry.js +4 -4
  506. package/dist/esm/md-accordion.entry.js +1 -1
  507. package/dist/esm/md-app-bar.entry.js +2 -2
  508. package/dist/esm/md-area-chart.entry.js +7 -7
  509. package/dist/esm/md-autocomplete.entry.js +6 -5
  510. package/dist/esm/md-autocomplete.entry.js.map +1 -1
  511. package/dist/esm/md-avatar_2.entry.js +4 -4
  512. package/dist/esm/md-badge.entry.js +3 -3
  513. package/dist/esm/md-bar-chart.entry.js +7 -7
  514. package/dist/esm/md-bottom-sheet.entry.js +5 -5
  515. package/dist/esm/md-breadcrumb-item.entry.js +2 -2
  516. package/dist/esm/md-breadcrumbs.entry.js +3 -3
  517. package/dist/esm/md-button-group.entry.js +3 -3
  518. package/dist/esm/{md-button_7.entry.js → md-button_6.entry.js} +16 -40
  519. package/dist/esm/md-button_6.entry.js.map +1 -0
  520. package/dist/esm/md-checkbox.entry.js +3 -3
  521. package/dist/esm/md-chip.entry.js +3 -3
  522. package/dist/esm/md-color-picker.entry.js +1 -1
  523. package/dist/esm/md-date-picker.entry.js +2 -2
  524. package/dist/esm/md-dialog.entry.js +3 -3
  525. package/dist/esm/md-divider.entry.js +3 -3
  526. package/dist/esm/md-fab-menu-item.entry.js +3 -3
  527. package/dist/esm/md-fab-menu.entry.js +3 -3
  528. package/dist/esm/md-fab.entry.js +3 -3
  529. package/dist/esm/md-line-chart.entry.js +7 -7
  530. package/dist/esm/md-list-item.entry.js +5 -5
  531. package/dist/esm/md-list.entry.js +4 -4
  532. package/dist/esm/md-loading-indicator-Bf-Pt29l.js +31 -0
  533. package/dist/esm/md-loading-indicator-Bf-Pt29l.js.map +1 -0
  534. package/dist/esm/md-loading-indicator.entry.js +5 -0
  535. package/dist/esm/md-loading-indicator.entry.js.map +1 -0
  536. package/dist/esm/md-menu-item-group.entry.js +1 -1
  537. package/dist/esm/md-menu_2.entry.js +6 -6
  538. package/dist/esm/md-meter.entry.js +1 -1
  539. package/dist/esm/md-multi-select.entry.js +7 -6
  540. package/dist/esm/md-multi-select.entry.js.map +1 -1
  541. package/dist/esm/md-navigation-bar.entry.js +2 -2
  542. package/dist/esm/md-navigation-rail-tab.entry.js +2 -2
  543. package/dist/esm/md-navigation-rail.entry.js +1 -1
  544. package/dist/esm/md-navigation-tab.entry.js +4 -4
  545. package/dist/esm/md-number-field.entry.js +3 -3
  546. package/dist/esm/md-organization-chart.entry.js +3 -3
  547. package/dist/esm/md-otp-field.entry.js +4 -4
  548. package/dist/esm/md-pie-chart.entry.js +3 -3
  549. package/dist/esm/md-progress-indicator.entry.js +1 -1
  550. package/dist/esm/md-rating.entry.js +1 -1
  551. package/dist/esm/md-search.entry.js +8 -7
  552. package/dist/esm/md-search.entry.js.map +1 -1
  553. package/dist/esm/md-segmented-button-set.entry.js +1 -1
  554. package/dist/esm/md-segmented-button.entry.js +1 -1
  555. package/dist/esm/md-select-option.entry.js +2 -2
  556. package/dist/esm/md-select.entry.js +7 -6
  557. package/dist/esm/md-select.entry.js.map +1 -1
  558. package/dist/esm/md-side-sheet.entry.js +1 -1
  559. package/dist/esm/md-skeleton.entry.js +1 -1
  560. package/dist/esm/md-slider.entry.js +3 -3
  561. package/dist/esm/md-sparkline.entry.js +7 -7
  562. package/dist/esm/md-split-button.entry.js +1 -1
  563. package/dist/esm/md-status-dot.entry.js +2 -2
  564. package/dist/esm/md-step.entry.js +1 -1
  565. package/dist/esm/md-stepper.entry.js +1 -1
  566. package/dist/esm/md-sub-menu-item.entry.js +1 -1
  567. package/dist/esm/md-switch.entry.js +1 -1
  568. package/dist/esm/md-tab-panel.entry.js +1 -1
  569. package/dist/esm/md-tab-panels.entry.js +1 -1
  570. package/dist/esm/md-tab.entry.js +1 -1
  571. package/dist/esm/md-table-body.entry.js +1 -1
  572. package/dist/esm/md-table-cell.entry.js +1 -1
  573. package/dist/esm/md-table-container.entry.js +1 -1
  574. package/dist/esm/md-table-expand-toggle.entry.js +1 -1
  575. package/dist/esm/md-table-foot.entry.js +1 -1
  576. package/dist/esm/md-table-head.entry.js +1 -1
  577. package/dist/esm/md-table-pagination.entry.js +1 -1
  578. package/dist/esm/md-table-row.entry.js +1 -1
  579. package/dist/esm/md-table-sort-label.entry.js +1 -1
  580. package/dist/esm/md-table-toolbar.entry.js +1 -1
  581. package/dist/esm/md-table.entry.js +4 -4
  582. package/dist/esm/md-tabs.entry.js +1 -1
  583. package/dist/esm/md-text-field.entry.js +8 -8
  584. package/dist/esm/md-time-picker.entry.js +2 -2
  585. package/dist/esm/md-toolbar.entry.js +1 -1
  586. package/dist/esm/md-transfer-list.entry.js +2 -2
  587. package/dist/esm/md3.js +4 -3
  588. package/dist/esm/md3.js.map +1 -1
  589. package/dist/esm/{rtl-DvOKnoqK.js → rtl-CVFH1DkU.js} +3 -3
  590. package/dist/esm/{rtl-DvOKnoqK.js.map → rtl-CVFH1DkU.js.map} +1 -1
  591. package/dist/esm/{url-BjYKc1Ge.js → url-BdEoSBtL.js} +3 -3
  592. package/dist/esm/{url-BjYKc1Ge.js.map → url-BdEoSBtL.js.map} +1 -1
  593. package/dist/esm/{virtual-select-controller-BEWIC0pC.js → virtual-select-controller-CR60w6DO.js} +10 -9
  594. package/dist/esm/virtual-select-controller-CR60w6DO.js.map +1 -0
  595. package/dist/md3/md3.css +1 -1
  596. package/dist/md3/md3.esm.js +1 -1
  597. package/dist/md3/md3.esm.js.map +1 -1
  598. package/dist/md3/p-08f1c469.entry.js +2 -0
  599. package/dist/md3/{p-4d82132d.entry.js.map → p-08f1c469.entry.js.map} +1 -1
  600. package/dist/md3/{p-9ddbf247.entry.js → p-108f89d7.entry.js} +2 -2
  601. package/dist/md3/p-1112bffc.entry.js +2 -0
  602. package/dist/md3/{p-cf07e761.entry.js.map → p-1112bffc.entry.js.map} +1 -1
  603. package/dist/md3/{p-c6a12344.entry.js → p-114c270b.entry.js} +2 -2
  604. package/dist/md3/p-1835fe36.entry.js +2 -0
  605. package/dist/md3/{p-a3308c40.entry.js.map → p-1835fe36.entry.js.map} +1 -1
  606. package/dist/md3/{p-396089fd.entry.js → p-1edb5a0d.entry.js} +2 -2
  607. package/dist/md3/p-2ba2db3b.entry.js +2 -0
  608. package/dist/md3/{p-6b2871a0.entry.js.map → p-2ba2db3b.entry.js.map} +1 -1
  609. package/dist/md3/p-3508d0e0.entry.js +2 -0
  610. package/dist/md3/{p-f31ab454.entry.js.map → p-3508d0e0.entry.js.map} +1 -1
  611. package/dist/md3/{p-b34d385b.entry.js → p-35b05b45.entry.js} +2 -2
  612. package/dist/md3/{p-c2dd8c8c.entry.js → p-38e9a583.entry.js} +2 -2
  613. package/dist/md3/{p-be02624e.entry.js → p-3c0469aa.entry.js} +2 -2
  614. package/dist/md3/p-3f64a27d.entry.js +2 -0
  615. package/dist/md3/{p-fb61868c.entry.js.map → p-3f64a27d.entry.js.map} +1 -1
  616. package/dist/md3/{p-63b8c8d1.entry.js → p-408ee4be.entry.js} +2 -2
  617. package/dist/md3/{p-edb34a6d.entry.js → p-43c708ad.entry.js} +2 -2
  618. package/dist/md3/{p-3015c7e3.entry.js → p-4770b534.entry.js} +2 -2
  619. package/dist/md3/{p-c861d774.entry.js → p-4b7cf934.entry.js} +2 -2
  620. package/dist/md3/{p-2e09a7b7.entry.js → p-4f26bd60.entry.js} +2 -2
  621. package/dist/md3/{p-7b463fbe.entry.js → p-4f2e82cb.entry.js} +2 -2
  622. package/dist/md3/{p-be412e3f.entry.js → p-501bf161.entry.js} +2 -2
  623. package/dist/md3/{p-c063c823.entry.js → p-56c7c570.entry.js} +2 -2
  624. package/dist/md3/{p-2e9503d7.entry.js → p-56ca0c3c.entry.js} +2 -2
  625. package/dist/md3/{p-ac8762e5.entry.js → p-5b63149a.entry.js} +2 -2
  626. package/dist/md3/{p-c5af701b.entry.js → p-5f668b0a.entry.js} +2 -2
  627. package/dist/md3/p-6237ddac.entry.js +2 -0
  628. package/dist/md3/{p-e7dc5a32.entry.js.map → p-6237ddac.entry.js.map} +1 -1
  629. package/dist/md3/{p-8eb0b6a4.entry.js → p-6d65fc6a.entry.js} +2 -2
  630. package/dist/md3/{p-e3124e1e.entry.js → p-707b6d7c.entry.js} +2 -2
  631. package/dist/md3/{p-a5fee424.entry.js → p-71f1660b.entry.js} +2 -2
  632. package/dist/md3/{p-1a8ec5bc.entry.js → p-7501170f.entry.js} +2 -2
  633. package/dist/md3/p-7c8842bf.entry.js +2 -0
  634. package/dist/md3/{p-ba2ebde1.entry.js.map → p-7c8842bf.entry.js.map} +1 -1
  635. package/dist/md3/{p-4e3d6e40.entry.js → p-7d1686a7.entry.js} +2 -2
  636. package/dist/md3/p-7e7f0e45.entry.js +2 -0
  637. package/dist/md3/p-7e7f0e45.entry.js.map +1 -0
  638. package/dist/md3/p-80379565.entry.js +2 -0
  639. package/dist/md3/{p-6c44cf13.entry.js.map → p-80379565.entry.js.map} +1 -1
  640. package/dist/md3/p-830724e4.entry.js +2 -0
  641. package/dist/md3/p-830724e4.entry.js.map +1 -0
  642. package/dist/md3/{p-4dda4cb0.entry.js → p-845ca9cc.entry.js} +2 -2
  643. package/dist/md3/{p-77a01bcc.entry.js → p-87f88d62.entry.js} +2 -2
  644. package/dist/md3/{p-5b74694e.entry.js → p-89d47130.entry.js} +2 -2
  645. package/dist/md3/p-8a6fed13.entry.js +2 -0
  646. package/dist/md3/{p-a803da99.entry.js.map → p-8a6fed13.entry.js.map} +1 -1
  647. package/dist/md3/p-8a7e0297.entry.js +2 -0
  648. package/dist/md3/p-8a7e0297.entry.js.map +1 -0
  649. package/dist/md3/{p-b0431a5c.entry.js → p-8bdcda53.entry.js} +2 -2
  650. package/dist/md3/{p-c10a33c2.entry.js → p-8e7df348.entry.js} +2 -2
  651. package/dist/md3/p-9003a7d4.entry.js +2 -0
  652. package/dist/md3/p-9003a7d4.entry.js.map +1 -0
  653. package/dist/md3/{p-05ae91b6.entry.js → p-90ccf4c3.entry.js} +2 -2
  654. package/dist/md3/p-BdEoSBtL.js +2 -0
  655. package/dist/md3/{p-BjYKc1Ge.js.map → p-BdEoSBtL.js.map} +1 -1
  656. package/dist/md3/p-Bz-JaJcA.js +2 -0
  657. package/dist/md3/p-Bz-JaJcA.js.map +1 -0
  658. package/dist/md3/p-CGqeEMjY.js +2 -0
  659. package/dist/md3/{p-DzPKu-Ma.js.map → p-CGqeEMjY.js.map} +1 -1
  660. package/dist/md3/p-CVFH1DkU.js +2 -0
  661. package/dist/md3/{p-DvOKnoqK.js.map → p-CVFH1DkU.js.map} +1 -1
  662. package/dist/md3/p-Cch92tDM.js +2 -0
  663. package/dist/md3/{p-RLxbNqRv.js.map → p-Cch92tDM.js.map} +1 -1
  664. package/dist/md3/p-CfBPnYW7.js +2 -0
  665. package/dist/md3/p-CfBPnYW7.js.map +1 -0
  666. package/dist/md3/p-D17cVKxS.js +2 -0
  667. package/dist/md3/p-D17cVKxS.js.map +1 -0
  668. package/dist/md3/p-DGtztV3K.js +2 -0
  669. package/dist/md3/{p-Bx6--dQF.js.map → p-DGtztV3K.js.map} +1 -1
  670. package/dist/md3/p-DQuL1Twl.js +2 -0
  671. package/dist/md3/p-DQuL1Twl.js.map +1 -0
  672. package/dist/md3/p-DnKDoE8K.js +2 -0
  673. package/dist/md3/p-DnKDoE8K.js.map +1 -0
  674. package/dist/md3/p-WmvQpZnM.js +3 -0
  675. package/dist/md3/p-WmvQpZnM.js.map +1 -0
  676. package/dist/md3/p-a3623653.entry.js +2 -0
  677. package/dist/md3/{p-19ee9c33.entry.js.map → p-a3623653.entry.js.map} +1 -1
  678. package/dist/md3/{p-da4e27d4.entry.js → p-a4d4cfed.entry.js} +2 -2
  679. package/dist/md3/{p-5394254f.entry.js → p-a976498b.entry.js} +2 -2
  680. package/dist/md3/{p-6038b907.entry.js → p-ab568d1c.entry.js} +2 -2
  681. package/dist/md3/{p-bf7842f8.entry.js → p-adf8a415.entry.js} +2 -2
  682. package/dist/md3/p-ae30e899.entry.js +2 -0
  683. package/dist/md3/p-ae30e899.entry.js.map +1 -0
  684. package/dist/md3/{p-45280bf4.entry.js → p-b2d88292.entry.js} +2 -2
  685. package/dist/md3/{p-796f79f8.entry.js → p-b3b5247b.entry.js} +2 -2
  686. package/dist/md3/{p-5b799707.entry.js → p-b4266f6b.entry.js} +2 -2
  687. package/dist/md3/p-b54bbf88.entry.js +2 -0
  688. package/dist/md3/p-b54bbf88.entry.js.map +1 -0
  689. package/dist/md3/{p-c00f7514.entry.js → p-ba011453.entry.js} +2 -2
  690. package/dist/md3/{p-6ba63c73.entry.js → p-bc24f0c9.entry.js} +2 -2
  691. package/dist/md3/{p-0c2e824d.entry.js → p-c20fbb9e.entry.js} +2 -2
  692. package/dist/md3/{p-fc0b325d.entry.js → p-c2944c87.entry.js} +2 -2
  693. package/dist/md3/{p-4e45b2ff.entry.js → p-c58c68d0.entry.js} +2 -2
  694. package/dist/md3/p-cc6e8afd.entry.js +2 -0
  695. package/dist/md3/{p-72457a85.entry.js.map → p-cc6e8afd.entry.js.map} +1 -1
  696. package/dist/md3/{p-0f764a1e.entry.js → p-d2e39c6e.entry.js} +2 -2
  697. package/dist/md3/{p-50555bb7.entry.js → p-d8885f53.entry.js} +2 -2
  698. package/dist/md3/{p-c1ca6f6c.entry.js → p-db6fb4e1.entry.js} +2 -2
  699. package/dist/md3/{p-81843ff7.entry.js → p-dcba2857.entry.js} +2 -2
  700. package/dist/md3/{p-65195996.entry.js → p-e357e8ac.entry.js} +2 -2
  701. package/dist/md3/{p-39cb7c24.entry.js → p-e5c6795e.entry.js} +2 -2
  702. package/dist/md3/p-e871663b.entry.js +2 -0
  703. package/dist/md3/{p-aaec2698.entry.js.map → p-e871663b.entry.js.map} +1 -1
  704. package/dist/md3/p-f1b69181.entry.js +2 -0
  705. package/dist/md3/{p-a986fd24.entry.js.map → p-f1b69181.entry.js.map} +1 -1
  706. package/dist/md3/p-f297d786.entry.js +2 -0
  707. package/dist/md3/{p-3cce1de3.entry.js.map → p-f297d786.entry.js.map} +1 -1
  708. package/dist/md3/{p-e6d7f0ff.entry.js → p-f403ad20.entry.js} +2 -2
  709. package/dist/md3/p-f5399b73.entry.js +2 -0
  710. package/dist/md3/{p-04e97f5d.entry.js.map → p-f5399b73.entry.js.map} +1 -1
  711. package/dist/md3/{p-708a9313.entry.js → p-f5fd9a0b.entry.js} +2 -2
  712. package/dist/md3/{p-aa0e7d4d.entry.js → p-f71af38f.entry.js} +2 -2
  713. package/dist/md3/{p-757e3aaf.entry.js → p-fac6da4c.entry.js} +2 -2
  714. package/dist/md3/{p-134b670a.entry.js → p-fc864f96.entry.js} +2 -2
  715. package/dist/md3/{p-32bdd439.entry.js → p-fd686966.entry.js} +2 -2
  716. package/dist/md3/p-nhfFYWzy.js +2 -0
  717. package/dist/md3/{p-C_ogF68H.js.map → p-nhfFYWzy.js.map} +1 -1
  718. package/dist/types/utils/lazy-loading-indicator.d.ts +7 -0
  719. package/dist/types/wasm/engine-abi.d.ts +14 -0
  720. package/hydrate/index.js +191 -113
  721. package/hydrate/index.mjs +191 -113
  722. package/package.json +30 -5
  723. package/dist/cjs/index-DlQ_5_Mv.js.map +0 -1
  724. package/dist/cjs/md-button_7.cjs.entry.js.map +0 -1
  725. package/dist/cjs/virtual-select-controller-CqriaZgm.js.map +0 -1
  726. package/dist/components/p-BEWIC0pC.js +0 -2
  727. package/dist/components/p-BEWIC0pC.js.map +0 -1
  728. package/dist/components/p-DXXUoRSH.js.map +0 -1
  729. package/dist/components/p-MWBNn6Lj.js +0 -2
  730. package/dist/components/p-MWBNn6Lj.js.map +0 -1
  731. package/dist/components/p-UdGDg2oJ.js.map +0 -1
  732. package/dist/esm/index-DTaX19_O.js.map +0 -1
  733. package/dist/esm/md-button_7.entry.js.map +0 -1
  734. package/dist/esm/virtual-select-controller-BEWIC0pC.js.map +0 -1
  735. package/dist/md3/p-04e97f5d.entry.js +0 -2
  736. package/dist/md3/p-19ee9c33.entry.js +0 -2
  737. package/dist/md3/p-21772851.entry.js +0 -2
  738. package/dist/md3/p-21772851.entry.js.map +0 -1
  739. package/dist/md3/p-3cce1de3.entry.js +0 -2
  740. package/dist/md3/p-47af9819.entry.js +0 -2
  741. package/dist/md3/p-47af9819.entry.js.map +0 -1
  742. package/dist/md3/p-4d82132d.entry.js +0 -2
  743. package/dist/md3/p-6b2871a0.entry.js +0 -2
  744. package/dist/md3/p-6c44cf13.entry.js +0 -2
  745. package/dist/md3/p-72457a85.entry.js +0 -2
  746. package/dist/md3/p-BEWIC0pC.js +0 -2
  747. package/dist/md3/p-BEWIC0pC.js.map +0 -1
  748. package/dist/md3/p-DTaX19_O.js +0 -3
  749. package/dist/md3/p-DTaX19_O.js.map +0 -1
  750. package/dist/md3/p-a3308c40.entry.js +0 -2
  751. package/dist/md3/p-a7ffb779.entry.js +0 -2
  752. package/dist/md3/p-a7ffb779.entry.js.map +0 -1
  753. package/dist/md3/p-a803da99.entry.js +0 -2
  754. package/dist/md3/p-a986fd24.entry.js +0 -2
  755. package/dist/md3/p-aaec2698.entry.js +0 -2
  756. package/dist/md3/p-ac35ac5f.entry.js +0 -2
  757. package/dist/md3/p-ac35ac5f.entry.js.map +0 -1
  758. package/dist/md3/p-b4631a55.entry.js +0 -2
  759. package/dist/md3/p-b4631a55.entry.js.map +0 -1
  760. package/dist/md3/p-ba2ebde1.entry.js +0 -2
  761. package/dist/md3/p-cf07e761.entry.js +0 -2
  762. package/dist/md3/p-e7dc5a32.entry.js +0 -2
  763. package/dist/md3/p-f31ab454.entry.js +0 -2
  764. package/dist/md3/p-fb61868c.entry.js +0 -2
  765. /package/dist/{components/p-uTEkf0sE.js.map → components-csr/p-BEmwDSzw.js.map} +0 -0
  766. /package/dist/{components/p-C8EP4S21.js.map → components-csr/p-BQKzjYcY.js.map} +0 -0
  767. /package/dist/{components/p-BwXpiUsu.js.map → components-csr/p-BWMwewtY.js.map} +0 -0
  768. /package/dist/{components/p-B0Opn6dK.js.map → components-csr/p-Bkt_X-6v.js.map} +0 -0
  769. /package/dist/{md3 → components-csr}/p-Bx6--dQF.js +0 -0
  770. /package/dist/{components/p-stybaFzj.js.map → components-csr/p-C3vB0Hd9.js.map} +0 -0
  771. /package/dist/{components/p-B3MWYEEJ.js.map → components-csr/p-CF7mq5T7.js.map} +0 -0
  772. /package/dist/{components/p-7fN_yCXW.js.map → components-csr/p-CVMM-tdC.js.map} +0 -0
  773. /package/dist/{md3 → components-csr}/p-C_ogF68H.js +0 -0
  774. /package/dist/{components/p-Ch2-tttM.js.map → components-csr/p-DMQ-6aj8.js.map} +0 -0
  775. /package/dist/{components/p-e2HRV63Y.js.map → components-csr/p-DfcpeJAu.js.map} +0 -0
  776. /package/dist/{components/p-Dp-w93ot.js.map → components-csr/p-DjKPc5EU.js.map} +0 -0
  777. /package/dist/{md3 → components-csr}/p-DvOKnoqK.js +0 -0
  778. /package/dist/{md3 → components-csr}/p-DzPKu-Ma.js +0 -0
  779. /package/dist/{md3 → components-csr}/p-RLxbNqRv.js +0 -0
  780. /package/dist/{components/p-6wZSqm_2.js.map → components-csr/p-R_guULjT.js.map} +0 -0
  781. /package/dist/{components/p-Ddiw2Kjw.js.map → components-csr/p-uSMrgqAy.js.map} +0 -0
  782. /package/dist/md3/{p-9ddbf247.entry.js.map → p-108f89d7.entry.js.map} +0 -0
  783. /package/dist/md3/{p-c6a12344.entry.js.map → p-114c270b.entry.js.map} +0 -0
  784. /package/dist/md3/{p-396089fd.entry.js.map → p-1edb5a0d.entry.js.map} +0 -0
  785. /package/dist/md3/{p-b34d385b.entry.js.map → p-35b05b45.entry.js.map} +0 -0
  786. /package/dist/md3/{p-c2dd8c8c.entry.js.map → p-38e9a583.entry.js.map} +0 -0
  787. /package/dist/md3/{p-be02624e.entry.js.map → p-3c0469aa.entry.js.map} +0 -0
  788. /package/dist/md3/{p-63b8c8d1.entry.js.map → p-408ee4be.entry.js.map} +0 -0
  789. /package/dist/md3/{p-edb34a6d.entry.js.map → p-43c708ad.entry.js.map} +0 -0
  790. /package/dist/md3/{p-3015c7e3.entry.js.map → p-4770b534.entry.js.map} +0 -0
  791. /package/dist/md3/{p-c861d774.entry.js.map → p-4b7cf934.entry.js.map} +0 -0
  792. /package/dist/md3/{p-2e09a7b7.entry.js.map → p-4f26bd60.entry.js.map} +0 -0
  793. /package/dist/md3/{p-7b463fbe.entry.js.map → p-4f2e82cb.entry.js.map} +0 -0
  794. /package/dist/md3/{p-be412e3f.entry.js.map → p-501bf161.entry.js.map} +0 -0
  795. /package/dist/md3/{p-c063c823.entry.js.map → p-56c7c570.entry.js.map} +0 -0
  796. /package/dist/md3/{p-2e9503d7.entry.js.map → p-56ca0c3c.entry.js.map} +0 -0
  797. /package/dist/md3/{p-ac8762e5.entry.js.map → p-5b63149a.entry.js.map} +0 -0
  798. /package/dist/md3/{p-c5af701b.entry.js.map → p-5f668b0a.entry.js.map} +0 -0
  799. /package/dist/md3/{p-8eb0b6a4.entry.js.map → p-6d65fc6a.entry.js.map} +0 -0
  800. /package/dist/md3/{p-e3124e1e.entry.js.map → p-707b6d7c.entry.js.map} +0 -0
  801. /package/dist/md3/{p-a5fee424.entry.js.map → p-71f1660b.entry.js.map} +0 -0
  802. /package/dist/md3/{p-1a8ec5bc.entry.js.map → p-7501170f.entry.js.map} +0 -0
  803. /package/dist/md3/{p-4e3d6e40.entry.js.map → p-7d1686a7.entry.js.map} +0 -0
  804. /package/dist/md3/{p-4dda4cb0.entry.js.map → p-845ca9cc.entry.js.map} +0 -0
  805. /package/dist/md3/{p-77a01bcc.entry.js.map → p-87f88d62.entry.js.map} +0 -0
  806. /package/dist/md3/{p-5b74694e.entry.js.map → p-89d47130.entry.js.map} +0 -0
  807. /package/dist/md3/{p-b0431a5c.entry.js.map → p-8bdcda53.entry.js.map} +0 -0
  808. /package/dist/md3/{p-c10a33c2.entry.js.map → p-8e7df348.entry.js.map} +0 -0
  809. /package/dist/md3/{p-05ae91b6.entry.js.map → p-90ccf4c3.entry.js.map} +0 -0
  810. /package/dist/md3/{p-da4e27d4.entry.js.map → p-a4d4cfed.entry.js.map} +0 -0
  811. /package/dist/md3/{p-5394254f.entry.js.map → p-a976498b.entry.js.map} +0 -0
  812. /package/dist/md3/{p-6038b907.entry.js.map → p-ab568d1c.entry.js.map} +0 -0
  813. /package/dist/md3/{p-bf7842f8.entry.js.map → p-adf8a415.entry.js.map} +0 -0
  814. /package/dist/md3/{p-45280bf4.entry.js.map → p-b2d88292.entry.js.map} +0 -0
  815. /package/dist/md3/{p-796f79f8.entry.js.map → p-b3b5247b.entry.js.map} +0 -0
  816. /package/dist/md3/{p-5b799707.entry.js.map → p-b4266f6b.entry.js.map} +0 -0
  817. /package/dist/md3/{p-c00f7514.entry.js.map → p-ba011453.entry.js.map} +0 -0
  818. /package/dist/md3/{p-6ba63c73.entry.js.map → p-bc24f0c9.entry.js.map} +0 -0
  819. /package/dist/md3/{p-0c2e824d.entry.js.map → p-c20fbb9e.entry.js.map} +0 -0
  820. /package/dist/md3/{p-fc0b325d.entry.js.map → p-c2944c87.entry.js.map} +0 -0
  821. /package/dist/md3/{p-4e45b2ff.entry.js.map → p-c58c68d0.entry.js.map} +0 -0
  822. /package/dist/md3/{p-0f764a1e.entry.js.map → p-d2e39c6e.entry.js.map} +0 -0
  823. /package/dist/md3/{p-50555bb7.entry.js.map → p-d8885f53.entry.js.map} +0 -0
  824. /package/dist/md3/{p-c1ca6f6c.entry.js.map → p-db6fb4e1.entry.js.map} +0 -0
  825. /package/dist/md3/{p-81843ff7.entry.js.map → p-dcba2857.entry.js.map} +0 -0
  826. /package/dist/md3/{p-65195996.entry.js.map → p-e357e8ac.entry.js.map} +0 -0
  827. /package/dist/md3/{p-39cb7c24.entry.js.map → p-e5c6795e.entry.js.map} +0 -0
  828. /package/dist/md3/{p-e6d7f0ff.entry.js.map → p-f403ad20.entry.js.map} +0 -0
  829. /package/dist/md3/{p-708a9313.entry.js.map → p-f5fd9a0b.entry.js.map} +0 -0
  830. /package/dist/md3/{p-aa0e7d4d.entry.js.map → p-f71af38f.entry.js.map} +0 -0
  831. /package/dist/md3/{p-757e3aaf.entry.js.map → p-fac6da4c.entry.js.map} +0 -0
  832. /package/dist/md3/{p-134b670a.entry.js.map → p-fc864f96.entry.js.map} +0 -0
  833. /package/dist/md3/{p-32bdd439.entry.js.map → p-fd686966.entry.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"md-search.js","sourceRoot":"","sources":["../../../src/components/md-search/md-search.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Host,\n h,\n Prop,\n State,\n Event,\n EventEmitter,\n Element,\n Method,\n Watch,\n Listen,\n} from '@stencil/core';\n\n/**\n * Minimal structural type for the Web Speech API `SpeechRecognition`\n * instance — the DOM lib doesn't ship these types in every TS target, and we\n * only touch a small surface. Indexing the global ctor avoids a hard\n * dependency on the (prefixed / non-standard) API.\n */\ninterface SpeechRecognitionLike {\n lang: string;\n interimResults: boolean;\n continuous: boolean;\n maxAlternatives: number;\n onresult: ((event: SpeechRecognitionEventLike) => void) | null;\n onerror: (() => void) | null;\n onend: (() => void) | null;\n start(): void;\n stop(): void;\n abort(): void;\n}\n\ninterface SpeechRecognitionEventLike {\n resultIndex: number;\n results: ArrayLike<\n ArrayLike<{ transcript: string }> & { isFinal: boolean }\n >;\n}\n\ntype SpeechRecognitionCtor = new () => SpeechRecognitionLike;\n\n/**\n * Payload for the `mdLeadingIconClick` event. Emitted when the interactive\n * leading affordance (the morphing back/dismiss button, or a custom slotted\n * `leading` icon) is clicked.\n */\nexport interface MdSearchLeadingIconClickDetail {\n /** The bar's current input value at click time. */\n value: string;\n /** Whether the bar / panel is open at click time. */\n open: boolean;\n}\n\n/**\n * Payload for the `mdTrailingIconClick` event. Emitted when a slotted\n * `trailing` affordance is clicked (the built-in clear / voice buttons emit\n * their own `mdClear` / `mdVoice` events instead).\n */\nexport interface MdSearchTrailingIconClickDetail {\n /** The bar's current input value at click time. */\n value: string;\n /** Whether the bar / panel is open at click time. */\n open: boolean;\n}\n\n/**\n * Material Design 3 Search.\n *\n * Implements the M3 Search specification\n * (https://m3.material.io/components/search/specs).\n *\n * Two orthogonal axes describe every spec configuration:\n * - `variant`: `contained` (M3 Expressive default) | `divided` (baseline)\n * - `layout` : `full-screen` (modal overlay) | `docked` (anchored panel)\n *\n * The component renders a single resting bar plus a results panel. When the\n * `full-screen` layout is `open` the bar pins itself to the top of the\n * viewport via `position: fixed` so consumers don't need a portal — CSS does\n * the work, and the input keeps a stable identity throughout the open/close\n * lifecycle.\n */\n@Component({\n tag: 'md-search',\n styleUrl: 'md-search.css',\n shadow: true,\n})\nexport class MdSearch {\n @Element() el!: HTMLElement;\n\n // ────────────────────────────────────────────────────────────────────────\n // Spec axes\n // ────────────────────────────────────────────────────────────────────────\n\n /**\n * Visual style. `contained` is the M3 Expressive default with a filled\n * surface and rounded shape; `divided` is the baseline pre-Expressive look\n * that uses a hairline divider between bar and results.\n */\n @Prop({ reflect: true }) variant: 'contained' | 'divided' = 'contained';\n\n /**\n * How the focused panel appears. `full-screen` fills the viewport\n * edge-to-edge with an opaque results surface and a focus trap (no scrim —\n * open/close uses the same translateY + opacity motion as md-dialog\n * fullscreen); `docked` anchors a popup beneath the bar\n * (min 360dp / max 720dp wide; results drawer shrinks to content up to max ⅔ vh).\n */\n @Prop({ reflect: true }) layout: 'full-screen' | 'docked' = 'full-screen';\n\n /**\n * What the user sees while the search view is closed. `bar` renders the\n * resting search field (docked default). `icon` renders a compact search\n * icon button that opens the view — the default for `full-screen` layout\n * (contained and divided spec sheets). Docked layouts should keep `bar`.\n */\n @Prop({ reflect: true }) trigger?: 'bar' | 'icon';\n\n /**\n * Material Symbols glyph for the built-in icon trigger (`trigger=\"icon\"`).\n * Ignored when a custom element is slotted in `trigger`.\n */\n @Prop({ attribute: 'trigger-icon' }) triggerIcon: string = 'search';\n\n /**\n * Open the search from an element that lives ELSEWHERE on the page — a\n * button in the app bar, a menu item, a keyboard-shortcut hint — rather than\n * from the built-in trigger or the `trigger` slot, both of which have to sit\n * inside this element.\n *\n * Takes a CSS selector resolved against the document\n * (`trigger-for=\"#app-bar-search\"`), or an element assigned to the\n * `triggerElement` property when you already hold a reference. The component\n * wires it rather than rendering it: activating it opens the view,\n * `aria-haspopup=\"dialog\"` and `aria-expanded` are kept in step, and closing\n * returns focus to it.\n *\n * With one set, the built-in trigger is not rendered — otherwise the page\n * would show two ways in.\n */\n @Prop({ attribute: 'trigger-for' }) triggerFor: string = '';\n\n /** The external trigger as an element, for consumers that hold a reference. */\n @Prop() triggerElement?: HTMLElement;\n\n /**\n * Make the docked / inline bar span its container's full inline width with\n * NO side gutters. This zeroes both expand insets for the instance\n * (resting + focused = 0), so there is no 24 → 12dp margin animation and the\n * aligned results drawer fills the same full width. Purely an ergonomic\n * switch over the CSS vars — the identical effect is available by setting\n * `--md-search-expand-inset: 0` and `--md-search-expand-focused-inset: 0`.\n * Has no effect on `full-screen` layout (already edge-to-edge).\n */\n @Prop({ reflect: true, attribute: 'full-width' }) fullWidth: boolean = false;\n\n // ────────────────────────────────────────────────────────────────────────\n // Bar state\n // ────────────────────────────────────────────────────────────────────────\n\n /** Current input text, two-way bindable. */\n @Prop({ mutable: true, reflect: true }) value: string = '';\n\n /**\n * Placeholder text — the spec calls this \"supporting text\" within the bar\n * anatomy.\n */\n @Prop() placeholder: string = 'Search';\n\n /** Whether the focused panel is open. */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n\n /** Whether interaction is blocked. */\n @Prop({ reflect: true }) disabled: boolean = false;\n\n /**\n * Resting bar elevation level, mapped to `--md-sys-elevation-{n}`. `0`\n * (the M3 default) renders no shadow; `1`–`5` apply the matching MD3\n * elevation tier. For a fully custom shadow, set the CSS custom property\n * `--md-search-container-elevation` instead (it overrides this prop).\n */\n @Prop({ reflect: true }) elevation: 0 | 1 | 2 | 3 | 4 | 5 = 0;\n\n // ────────────────────────────────────────────────────────────────────────\n // Icon configuration\n // ────────────────────────────────────────────────────────────────────────\n\n /** Material Symbols glyph for the resting leading icon. */\n @Prop({ attribute: 'leading-icon' }) leadingIcon: string = 'search';\n\n /**\n * Material Symbols glyph used for the leading button when the bar is\n * open. Defaults are variant-aware: the `contained` (Expressive) bar\n * uses `chevron_left` so the caret matches the bar's softer, pill-\n * shaped silhouette, while the `divided` (baseline) bar uses the\n * classic `arrow_back` to match its squared, app-bar-like chrome.\n * Pass an explicit value to override either default.\n */\n @Prop({ attribute: 'open-leading-icon' }) openLeadingIcon?: string;\n\n // ────────────────────────────────────────────────────────────────────────\n // Behaviour\n // ────────────────────────────────────────────────────────────────────────\n\n /** Show the trailing clear (×) button when the input has a value. */\n @Prop({ attribute: 'show-clear-button' }) showClearButton: boolean = true;\n\n /**\n * Opt-in voice search. When `true` AND the browser exposes the Web Speech\n * API (`SpeechRecognition` / `webkitSpeechRecognition`), a microphone\n * icon-button is rendered in the trailing cluster. Clicking it starts\n * recognition and streams the interim + final transcript into the input,\n * firing the normal `mdInput` / `mdSearch` flow as if typed. When the API is\n * unavailable the mic is not rendered (graceful no-op). Default `false`.\n */\n @Prop({ attribute: 'voice-search' }) voiceSearch: boolean = false;\n\n /** Close on Escape key. */\n @Prop({ attribute: 'escape-closes' }) escapeCloses: boolean = true;\n\n /** Close on outside click (docked layout). */\n @Prop({ attribute: 'dismiss-on-outside-click' }) dismissOnOutsideClick: boolean = true;\n\n /**\n * Retained for API compatibility, but now a no-op: when the results list\n * overflows it always plain-scrolls inside the results viewport (no scroll\n * shadow / edge fades). Setting this has no visual effect.\n */\n @Prop({ reflect: true, attribute: 'scroll-shadow' })\n scrollShadow: boolean = true;\n\n /**\n * Maximum block-size of the open search surface (`\"480px\"`, `\"66vh\"`, etc.).\n * Full-screen: caps the fixed overlay height. Docked: caps the results panel\n * (bar height is unchanged). Prefer the CSS custom property\n * `--md-search-max-block-size` for stylesheet-based theming.\n */\n @Prop({ attribute: 'max-block-size' }) maxBlockSize: string = '';\n\n /**\n * Accessible label for the search bar / input. Per the M3 labeling guidance\n * the hinted search text (`placeholder`) describes the bar, so when this is\n * left empty the label falls back to `placeholder`. Set it explicitly only\n * when the visible hint and the accessible name should differ.\n */\n @Prop({ attribute: 'input-aria-label' }) inputAriaLabel: string = '';\n\n /**\n * Where focus lands when the panel opens. `auto` (default) and `input` focus\n * the text field so the user can type immediately. `leading` focuses the\n * leading button instead (falling back to the input if it isn't focusable).\n *\n * Note: the M3 \"initial focus lands on a leading icon, else the text field\"\n * rule applies to the RESTING bar's first tab stop and is handled by DOM\n * order — a slotted interactive leading icon button is the first tabbable\n * element, otherwise the text field. This prop only controls the open view.\n */\n @Prop({ attribute: 'initial-focus' }) initialFocus: 'auto' | 'input' | 'leading' =\n 'auto';\n\n /**\n * Announce the number of available suggestions / results to assistive\n * technology via a polite live region whenever the slotted results change\n * while the panel is open (M3 \"autosuggest\" requirement). Set to `false`\n * if you manage your own live region in the results slot.\n */\n @Prop({ attribute: 'announce-results' }) announceResults: boolean = true;\n\n /**\n * Template for the results announcement. `{count}` is replaced with the\n * number of detected result items (counts `md-list-item`, `[role=\"option\"]`,\n * or `<li>` descendants of the results slot, falling back to the number of\n * slotted elements).\n */\n @Prop({ attribute: 'results-label' }) resultsLabel: string =\n '{count} results available';\n\n /**\n * Message shown when the panel is open, the user has entered a query, and\n * there are no slotted results — both the on-screen empty state and the\n * polite live-region announcement (unless the visible empty state is shown,\n * in which case the live region defers to it to avoid duplicate speech).\n */\n @Prop({ attribute: 'no-results-label' }) noResultsLabel: string =\n 'No results available';\n\n // ────────────────────────────────────────────────────────────────────────\n // Async / loading\n // ────────────────────────────────────────────────────────────────────────\n\n /**\n * Whether an async results fetch is in flight. When `true` the M3 loading\n * indicator (the looping shape-morph) shows in the bar's trailing cluster.\n * Controlled by the consumer: set it `true` before awaiting your fetch and\n * back to `false` once results are slotted in. The component never flips\n * this itself — it only reflects the state visually + to assistive tech.\n */\n @Prop({ mutable: true, reflect: true }) loading: boolean = false;\n\n /**\n * Trailing debounce (ms) applied to the `mdSearch` event so a fetch only\n * fires after the user pauses typing. `0` (default) emits on every change.\n * `mdInput` always fires immediately on every keystroke regardless.\n */\n @Prop() debounce: number = 0;\n\n /**\n * Maximum wait (ms) before `mdSearch` is forced to fire during sustained\n * typing — a throttle/`maxWait` safety net so the user still sees interim\n * results when they never pause long enough for the debounce to settle.\n * `0` (default) disables it. Only meaningful alongside a non-zero\n * `debounce`.\n */\n @Prop() throttle: number = 0;\n\n /** Accessible label for the in-bar loading indicator. */\n @Prop({ attribute: 'loading-label' }) loadingLabel: string = 'Searching';\n\n /**\n * Local density rung. Drives the same `--md-sys-density-scale` signal that a\n * global `data-density` ancestor sets, so a local value simply overrides the\n * inherited one. 0 = default, -4 = ultra-compact.\n */\n @Prop({ reflect: true }) density: 0 | -1 | -2 | -3 | -4 = 0;\n\n // ────────────────────────────────────────────────────────────────────────\n // Events\n // ────────────────────────────────────────────────────────────────────────\n\n /** Fires on every input change (immediate, every keystroke). */\n @Event() mdInput: EventEmitter<{ value: string }>;\n\n /**\n * Debounced, de-duplicated query event — the one to wire an async results\n * fetch to. Honours `debounce` / `throttle` and applies a\n * distinct-until-changed guard on the trimmed query (so re-typing the same\n * term, or only adding surrounding whitespace, won't re-trigger a fetch).\n * Pressing Enter or clearing the field flushes it immediately.\n */\n @Event() mdSearch: EventEmitter<{ value: string }>;\n\n /** Fires when the user presses Enter to submit a query. */\n @Event() mdSubmit: EventEmitter<{ value: string }>;\n\n /** Fires when the input loses focus with a different value than on focus. */\n @Event() mdChange: EventEmitter<{ value: string }>;\n\n /** Fires when the panel opens. */\n @Event() mdOpen: EventEmitter<void>;\n\n /** Fires when the panel closes. */\n @Event() mdClose: EventEmitter<void>;\n\n /** Fires when the user clicks the clear (×) button. */\n @Event() mdClear: EventEmitter<void>;\n\n /**\n * Fires while voice search is active as the transcript streams in. `value`\n * is the current (interim or final) transcript; `final` is `true` on the\n * recognised final result. The component already mirrors the transcript into\n * the input and fires `mdInput` / `mdSearch`, so listen to this only if you\n * need voice-specific UI (e.g. a transcript preview).\n */\n @Event() mdVoice: EventEmitter<{ value: string; final: boolean }>;\n\n /**\n * Fires when the interactive leading affordance is clicked — the morphing\n * back / dismiss button while the bar is open, or a custom slotted `leading`\n * icon. The default back button still dismisses the panel as before; this\n * event is additive. The closed resting search glyph is intentionally NOT a\n * click target (a click there focuses the input), so it does not emit.\n */\n @Event() mdLeadingIconClick: EventEmitter<MdSearchLeadingIconClickDetail>;\n\n /**\n * Fires when a slotted `trailing` affordance is clicked. The built-in clear\n * (×) and voice (mic) buttons own their dedicated `mdClear` / `mdVoice`\n * events and do NOT trigger this. Only emitted when slotted trailing content\n * is actually present and was the click target.\n */\n @Event() mdTrailingIconClick: EventEmitter<MdSearchTrailingIconClickDetail>;\n\n // ────────────────────────────────────────────────────────────────────────\n // Methods\n // ────────────────────────────────────────────────────────────────────────\n\n /** Open the focused panel. */\n @Method() async show(): Promise<void> {\n this.open = true;\n }\n\n /** Close the focused panel. */\n @Method() async close(): Promise<void> {\n this.open = false;\n }\n\n /** Toggle the focused panel. */\n @Method() async toggle(): Promise<void> {\n this.open = !this.open;\n }\n\n /** Programmatically focus the input. */\n @Method() async focusInput(): Promise<void> {\n this.input?.focus();\n }\n\n // ────────────────────────────────────────────────────────────────────────\n // Internals\n // ────────────────────────────────────────────────────────────────────────\n\n @State() private focused = false;\n @State() private hasSlottedLeading = false;\n @State() private hasSlottedTrailing = false;\n @State() private hasSlottedTrigger = false;\n /** Live-region message announcing the count of available results. */\n @State() private resultsStatus = '';\n /** Bar expansion / icon morph — lags `open` on close so the panel can fade first. */\n @State() private barExpanded = false;\n /** Results panel visibility / fade state — tracks `open` immediately on close. */\n @State() private panelVisible = false;\n /**\n * Whether to render the focus ring. Only true when focus arrives via the\n * keyboard — a text input always matches `:focus-visible` (even on click),\n * so we track focus modality ourselves to keep the ring keyboard-only.\n */\n @State() private showFocusRing = false;\n /** Whether voice recognition is currently active (drives the mic pulse). */\n @State() private listening = false;\n /**\n * Trailing loading↔clear morph state. `loadingMorphMounted` keeps the\n * loading indicator in the DOM through its fade-out so the swap cross-fades\n * in BOTH directions; `loadingMorphIn` is the visible (committed) state that\n * the entry/exit transitions animate between.\n */\n @State() private loadingMorphMounted = false;\n @State() private loadingMorphIn = false;\n\n /**\n * Whether the most recent user interaction came from the keyboard. Mirrors\n * the browser's `:focus-visible` heuristic so the bar's focus ring only shows\n * for keyboard focus — never on click — even when focus is moved\n * programmatically (e.g. when a click opens the view and we focus the input\n * in a later frame).\n */\n private keyboardModality = false;\n\n private input?: HTMLInputElement;\n private rippleEl?: HTMLElement;\n private insetProbeEl?: HTMLElement;\n private trailingSlotEl?: HTMLSlotElement;\n private resizeObserver?: ResizeObserver;\n private previousFocus: HTMLElement | null = null;\n private valueOnFocus: string = '';\n private outsideClickHandler?: (e: MouseEvent) => void;\n private closeTimer?: ReturnType<typeof setTimeout>;\n /**\n * Set when a full-screen open is waiting for the `position: fixed` overlay\n * layout to commit before the panel surface reveal. `componentDidRender`\n * picks it up so the fade animates over an already-settled layout\n * (see `onOpenChange`).\n */\n private pendingFullScreenReveal = false;\n private revealRaf?: number;\n /** Debounce / throttle timers + dedupe state for the `mdSearch` event. */\n private searchDebounceTimer?: ReturnType<typeof setTimeout>;\n private searchMaxWaitTimer?: ReturnType<typeof setTimeout>;\n private pendingSearchValue: string | null = null;\n private lastEmittedSearch: string | null = null;\n\n /** Full-screen close duration — keep in sync with `--_fs-collapse-duration` in md-search.css. */\n private static readonly PANEL_CLOSE_MS = 300;\n /** Loading↔clear morph duration — keep in sync with the CSS morph transition. */\n private static readonly MORPH_MS = 300;\n\n /** Active SpeechRecognition instance while listening (Web Speech API). */\n private recognition?: SpeechRecognitionLike;\n private loadingMorphTimer?: ReturnType<typeof setTimeout>;\n private loadingMorphInRaf?: number;\n\n // ────────────────────────────────────────────────────────────────────────\n // Lifecycle\n // ────────────────────────────────────────────────────────────────────────\n\n connectedCallback() {\n if (typeof document !== 'undefined') {\n // Capture phase so we record the modality before the resulting focus\n // event fires (and before any programmatic focus we trigger on open).\n document.addEventListener('keydown', this.trackKeyboardModality, true);\n document.addEventListener('pointerdown', this.trackPointerModality, true);\n }\n }\n\n componentWillLoad() {\n this.barExpanded = this.open;\n this.panelVisible = this.open;\n // Seed the loading morph so an initial `loading` renders without a flash.\n this.loadingMorphMounted = this.loading;\n this.loadingMorphIn = this.loading;\n // Seed the distinct-until-changed baseline with any initial value so the\n // first user-driven change emits correctly (and a programmatic initial\n // value is treated as already-searched, not re-fetched on mount).\n this.lastEmittedSearch = this.value.trim();\n // Compute the initial announcement here (light-DOM result children already\n // exist) so we don't mutate @State inside componentDidLoad.\n this.updateResultsStatus();\n }\n\n componentDidLoad() {\n this.wireExternalTrigger();\n const shadow = this.el.shadowRoot;\n if (!shadow) return;\n\n const leadingSlot = shadow.querySelector('slot[name=\"leading\"]') as HTMLSlotElement | null;\n const trailingSlot = shadow.querySelector('slot[name=\"trailing\"]') as HTMLSlotElement | null;\n // Kept for mdTrailingIconClick hit-testing against assigned (slotted) nodes.\n this.trailingSlotEl = trailingSlot ?? undefined;\n\n leadingSlot?.addEventListener('slotchange', () => {\n this.hasSlottedLeading = leadingSlot.assignedElements().length > 0;\n });\n trailingSlot?.addEventListener('slotchange', () => {\n this.hasSlottedTrailing = trailingSlot.assignedElements().length > 0;\n });\n\n // Recompute the announcement when the slotted results change in a real\n // browser. The count itself is read from the host's light DOM (see\n // countResults) so it also works in environments without slotchange.\n const resultsSlot = shadow.querySelector(\n 'slot[name=\"results\"]',\n ) as HTMLSlotElement | null;\n resultsSlot?.addEventListener('slotchange', () => this.updateResultsStatus());\n\n const triggerSlot = shadow.querySelector(\n 'slot[name=\"trigger\"]',\n ) as HTMLSlotElement | null;\n triggerSlot?.addEventListener('slotchange', () => {\n this.hasSlottedTrigger = triggerSlot.assignedElements().length > 0;\n });\n this.hasSlottedTrigger = (triggerSlot?.assignedElements().length ?? 0) > 0;\n\n this.measureRippleExtend();\n this.observeHostResize();\n\n if (this.open) this.applyOpenSideEffects();\n }\n\n @Watch('triggerFor')\n @Watch('triggerElement')\n onExternalTriggerChange() {\n this.wireExternalTrigger();\n }\n\n disconnectedCallback() {\n this.unwireExternalTrigger();\n this.clearCloseTimer();\n this.cancelReveal();\n this.clearSearchTimers();\n this.stopVoice();\n this.clearLoadingMorphTimers();\n this.removeOutsideClickHandler();\n this.resizeObserver?.disconnect();\n this.resizeObserver = undefined;\n if (typeof document !== 'undefined') {\n document.removeEventListener('keydown', this.trackKeyboardModality, true);\n document.removeEventListener('pointerdown', this.trackPointerModality, true);\n }\n if (this.layout === 'full-screen' && typeof document !== 'undefined') {\n document.body.style.removeProperty('overflow');\n }\n }\n\n /**\n * Resolve the bar's per-side focus travel to a concrete pixel length and\n * forward it to the ripple as `--md-ripple-extend-inline`. The docked/inline\n * bar springs from `100% - 2 * resting` to `100% - 2 * focused` on focus,\n * which moves each edge out by exactly `resting - focused` (24 → 12 = 12dp\n * default) — the probe resolves that delta. md-ripple\n * applies the extend PER SIDE — `left = rect.left - extend`,\n * `right = rect.right + extend` — so the per-side value it needs is one\n * inset, not two. (Forwarding `2 * inset` over-inflated the wave to ~2×\n * the actual growth, reading as an oversized wash near the press point.)\n * The default inset is the responsive `clamp(0px, 8%, 64px)`, so its\n * concrete length must be measured rather than parsed: a percentage would\n * resolve against the bar instead of the host once the token reaches\n * md-ripple's shadow tree, so we resolve it in JS via the host-anchored\n * probe (see md-search.css for the full rationale).\n */\n /**\n * Resolved trigger mode. Explicit `trigger` wins; otherwise full-screen\n * uses the icon button entry point and docked keeps the resting bar.\n */\n private get effectiveTrigger(): 'bar' | 'icon' {\n // An external opener owns the resting affordance, so the component keeps\n // nothing on screen until it opens — the same \"hidden until invoked\"\n // shape as the icon trigger, minus the icon.\n if (this.hasExternalTrigger) return 'icon';\n if (this.trigger != null) return this.trigger;\n return this.layout === 'full-screen' ? 'icon' : 'bar';\n }\n\n /** Whether the consumer has pointed at an opener outside this element. */\n private get hasExternalTrigger(): boolean {\n return Boolean(this.triggerFor || this.triggerElement);\n }\n\n private get usesIconTrigger(): boolean {\n return this.effectiveTrigger === 'icon';\n }\n\n // ── External trigger ──────────────────────────────────────────────────\n\n /** The element currently wired as the external opener, if any. */\n private wiredTrigger: HTMLElement | null = null;\n\n private resolveExternalTrigger(): HTMLElement | null {\n if (this.triggerElement) return this.triggerElement;\n if (!this.triggerFor || typeof document === 'undefined') return null;\n const sel = this.triggerFor.trim();\n if (!sel) return null;\n try {\n return document.querySelector(sel) as HTMLElement | null;\n } catch {\n // A malformed selector is an authoring mistake, not a reason to break the\n // search — warn once and carry on with the built-in trigger.\n if (typeof console !== 'undefined') {\n console.warn('[md-search] `trigger-for` is not a valid selector:', this.triggerFor);\n }\n return null;\n }\n }\n\n private wireExternalTrigger() {\n const next = this.resolveExternalTrigger();\n if (next === this.wiredTrigger) {\n this.syncExternalTriggerAria();\n return;\n }\n this.unwireExternalTrigger();\n if (!next) return;\n next.addEventListener('click', this.handleExternalTriggerClick);\n this.wiredTrigger = next;\n this.syncExternalTriggerAria();\n }\n\n private unwireExternalTrigger() {\n this.wiredTrigger?.removeEventListener('click', this.handleExternalTriggerClick);\n this.wiredTrigger?.removeAttribute('aria-expanded');\n this.wiredTrigger = null;\n }\n\n /** The element is the consumer's, so it is wired rather than re-rendered. */\n private handleExternalTriggerClick = (e: Event) => {\n if (this.disabled) return;\n // The document-level outside-click handler runs in the CAPTURE phase, and\n // the trigger is outside this element — without this the same click would\n // close an open panel and then reopen it, or open and immediately close.\n e.stopPropagation();\n this.open = !this.open;\n };\n\n private syncExternalTriggerAria() {\n const t = this.wiredTrigger;\n if (!t) return;\n t.setAttribute('aria-haspopup', 'dialog');\n t.setAttribute('aria-expanded', String(this.open));\n }\n\n /** Whether the search bar chrome is in the DOM (icon trigger hides it until open). */\n private get showBar(): boolean {\n return !this.usesIconTrigger || this.barExpanded;\n }\n\n private measureRippleExtend() {\n if (!this.showBar) return;\n const ripple = this.rippleEl;\n if (!ripple) return;\n\n // Full-screen: the bar snaps from its resting (inset / max-720dp) width\n // to the full viewport width on open. md-ripple sizes the wave from the\n // bar's rect AT PRESS TIME — the resting width — so without an extend the\n // wave only covers the initial bar and stops half-way across the\n // expanded full-screen bar. Inflate the farthest-corner reach by exactly\n // the growth delta (viewport − resting bar width). That sizes the wave\n // to finish filling right as it reaches the expanded bar's far edge —\n // not so much that it fills instantly (which reads as a flat wash) — and\n // keeps the wave's origin near the press point. When the bar is already\n // open its width ≈ the viewport, so the delta collapses to ~0 and the\n // normal press-sized ripple is used.\n if (this.layout === 'full-screen' && typeof window !== 'undefined') {\n const bar = this.el.shadowRoot?.querySelector('.md-search__bar') as HTMLElement | null;\n const barWidth = bar?.getBoundingClientRect().width ?? 0;\n const delta = window.innerWidth - barWidth;\n if (delta > 1) {\n ripple.style.setProperty('--md-ripple-extend-inline', `${delta}px`);\n return;\n }\n }\n\n const probe = this.insetProbeEl;\n if (!probe) return;\n const inset = probe.getBoundingClientRect().width;\n if (!Number.isFinite(inset) || inset <= 0) {\n ripple.style.removeProperty('--md-ripple-extend-inline');\n return;\n }\n ripple.style.setProperty('--md-ripple-extend-inline', `${inset}px`);\n }\n\n private observeHostResize() {\n if (typeof ResizeObserver === 'undefined') return;\n this.resizeObserver = new ResizeObserver(() => {\n // The ripple extent only matters for the resting → press expansion, which\n // is measured before the view opens. Re-measuring while the bar is\n // expanded (or mid open/close transition) would call getBoundingClientRect\n // — a forced synchronous reflow — on the very frames the full-screen\n // reveal animates, stuttering it. Skip until the bar is back at rest.\n if (this.barExpanded) return;\n this.measureRippleExtend();\n });\n this.resizeObserver.observe(this.el);\n }\n\n // ────────────────────────────────────────────────────────────────────────\n // Open / close side effects\n // ────────────────────────────────────────────────────────────────────────\n\n @Watch('open')\n onOpenChange(newVal: boolean, oldVal: boolean) {\n if (newVal === oldVal) return;\n this.clearCloseTimer();\n this.cancelReveal();\n if (newVal) {\n // Expand the bar first — in full-screen this flips the host to the\n // position:fixed overlay (a one-off layout + paint). The panel surface\n // reveal is deferred to AFTER that layout has committed and painted\n // (see componentDidRender) so the fade is a pure compositor\n // transition over a settled layout. Doing both in the same frame made\n // the reveal compete with the overlay relayout and stuttered it.\n this.barExpanded = true;\n if (this.layout === 'full-screen') {\n this.pendingFullScreenReveal = true;\n } else {\n // Docked keeps the host in-flow, so there's no overlay relayout to\n // wait on — reveal synchronously.\n this.panelVisible = true;\n }\n this.applyOpenSideEffects();\n this.updateResultsStatus();\n this.syncExternalTriggerAria();\n this.mdOpen.emit();\n } else {\n // Panel surface fades out first; bar contraction follows after the fade.\n this.pendingFullScreenReveal = false;\n this.panelVisible = false;\n // Closing the view (Escape, back button, outside/dismiss) ends any\n // active voice session — the input has lost its search context.\n this.stopVoice();\n this.removeOutsideClickHandler();\n this.updateResultsStatus();\n this.mdClose.emit();\n this.syncExternalTriggerAria();\n this.closeTimer = setTimeout(() => {\n this.barExpanded = false;\n this.finishCloseSideEffects();\n // An external opener is the thing the user left to get here, so it is\n // where focus belongs on the way back — the built-in trigger gets this\n // for free by being inside the component.\n if (this.wiredTrigger && typeof document !== 'undefined') {\n const active = document.activeElement;\n const inSearch = active === this.el || this.el.contains(active as Node);\n if (active === document.body || inSearch) this.wiredTrigger.focus?.();\n }\n this.closeTimer = undefined;\n }, MdSearch.PANEL_CLOSE_MS);\n }\n }\n\n @Watch('loading')\n onLoadingChange(newVal: boolean) {\n // Re-announce so screen readers hear \"Searching…\" while the fetch is in\n // flight and the result count once it resolves.\n this.updateResultsStatus();\n this.updateLoadingMorph(newVal);\n }\n\n /**\n * Drive the trailing loading↔clear cross-fade. Mounting the loading\n * indicator immediately (and committing the visible state on the next frame)\n * animates the entry; keeping it mounted for one morph duration after\n * `loading` clears animates the exit before it unmounts.\n */\n private updateLoadingMorph(loading: boolean) {\n this.clearLoadingMorphTimers();\n if (loading) {\n this.loadingMorphMounted = true;\n if (typeof requestAnimationFrame === 'undefined') {\n this.loadingMorphIn = true;\n return;\n }\n this.loadingMorphInRaf = requestAnimationFrame(() => {\n this.loadingMorphInRaf = undefined;\n if (this.loading) this.loadingMorphIn = true;\n });\n } else {\n this.loadingMorphIn = false;\n this.loadingMorphTimer = setTimeout(() => {\n this.loadingMorphTimer = undefined;\n if (!this.loading) this.loadingMorphMounted = false;\n }, MdSearch.MORPH_MS);\n }\n }\n\n private clearLoadingMorphTimers() {\n if (this.loadingMorphTimer) {\n clearTimeout(this.loadingMorphTimer);\n this.loadingMorphTimer = undefined;\n }\n if (this.loadingMorphInRaf !== undefined && typeof cancelAnimationFrame !== 'undefined') {\n cancelAnimationFrame(this.loadingMorphInRaf);\n this.loadingMorphInRaf = undefined;\n }\n }\n\n componentDidRender() {\n if (!this.pendingFullScreenReveal) return;\n // The host's position:fixed overlay layout (floating bar + the\n // full-viewport panel surface) is now committed to the DOM and will\n // paint at the end of this frame while the panel is still transparent.\n // Flip the reveal on the NEXT frame so the opacity fade starts\n // from that painted, settled layout — no relayout on the animating\n // frames, which is what made the open read as stepped / slow.\n this.pendingFullScreenReveal = false;\n if (typeof requestAnimationFrame === 'undefined') {\n this.panelVisible = true;\n return;\n }\n this.revealRaf = requestAnimationFrame(() => {\n this.revealRaf = undefined;\n // Guard against a close that landed between the layout commit and here.\n if (this.open) this.panelVisible = true;\n });\n }\n\n private cancelReveal() {\n if (this.revealRaf !== undefined && typeof cancelAnimationFrame !== 'undefined') {\n cancelAnimationFrame(this.revealRaf);\n }\n this.revealRaf = undefined;\n }\n\n private clearCloseTimer() {\n if (this.closeTimer === undefined) return;\n clearTimeout(this.closeTimer);\n this.closeTimer = undefined;\n }\n\n private applyOpenSideEffects() {\n if (typeof document === 'undefined') return;\n this.previousFocus = (document.activeElement as HTMLElement) ?? null;\n if (this.layout === 'full-screen') {\n // Lock document scroll. Compensate for the removed scrollbar with an\n // equal-width padding so the page (and the fixed overlay) doesn't\n // shift sideways when the scrollbar disappears — that lateral jump\n // was the main source of the open/close jitter.\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n if (scrollbarWidth > 0) {\n document.body.style.paddingInlineEnd = `${scrollbarWidth}px`;\n }\n document.body.style.overflow = 'hidden';\n }\n this.attachOutsideClickHandler();\n if (typeof requestAnimationFrame !== 'undefined') {\n requestAnimationFrame(() => this.focusInitialTarget());\n } else {\n this.focusInitialTarget();\n }\n }\n\n /**\n * Focus the open view's initial target. Defaults to the text field so the\n * user can type immediately; `initialFocus=\"leading\"` focuses the leading\n * button instead. (The resting bar's leading-icon-first tab order is handled\n * by DOM order, not here.)\n */\n private focusInitialTarget() {\n const target = this.resolveInitialFocusTarget();\n // preventScroll: focusing the input must not trigger a scroll-into-view,\n // which forces a synchronous layout on the same frame the open transition\n // starts and stutters the reveal.\n target?.focus?.({ preventScroll: true });\n }\n\n private resolveInitialFocusTarget(): HTMLElement | undefined {\n // Opening the search view is about typing, so by default focus the text\n // field. The M3 \"initial focus lands on a leading icon, else the text\n // field\" rule is satisfied by the RESTING tab order: a slotted interactive\n // leading icon button is the first tabbable element, otherwise the input.\n // `initialFocus=\"leading\"` opts the open view into focusing the leading\n // button instead.\n if (this.initialFocus === 'leading') {\n return this.leadingFocusTarget() ?? this.input;\n }\n return this.input;\n }\n\n /**\n * The focusable element representing the leading action: a focusable slotted\n * leading element (or its first inner focusable), falling back to the\n * built-in leading button when it's interactive (i.e. the bar is open).\n */\n private leadingFocusTarget(): HTMLElement | undefined {\n const focusableSel =\n 'button, a[href], input, select, textarea, md-icon-button, md-button, [tabindex]:not([tabindex=\"-1\"])';\n const slotted = this.el.querySelector('[slot=\"leading\"]') as HTMLElement | null;\n if (slotted) {\n if (typeof slotted.focus === 'function' && slotted.getAttribute('tabindex') !== '-1') {\n if (slotted.matches(focusableSel)) return slotted;\n }\n const inner = slotted.querySelector(focusableSel) as HTMLElement | null;\n if (inner) return inner;\n return slotted;\n }\n const builtin = this.el.shadowRoot?.querySelector(\n '.md-search__leading-button',\n ) as HTMLElement | null;\n if (builtin && builtin.getAttribute('tabindex') !== '-1') return builtin;\n return undefined;\n }\n\n private finishCloseSideEffects() {\n if (typeof document !== 'undefined' && this.layout === 'full-screen') {\n document.body.style.removeProperty('overflow');\n document.body.style.removeProperty('padding-inline-end');\n }\n this.previousFocus?.focus?.();\n this.previousFocus = null;\n }\n\n private attachOutsideClickHandler() {\n if (!this.dismissOnOutsideClick || typeof document === 'undefined') return;\n this.outsideClickHandler = (e: MouseEvent) => {\n const target = e.target as Node | null;\n if (!target) return;\n const path = e.composedPath ? e.composedPath() : [];\n if (path.includes(this.el)) return;\n if (this.el.contains(target)) return;\n // An external trigger is by definition outside this element. Closing on\n // its mousedown would fight its own click handler — the view would shut\n // and reopen in the same gesture — so let the trigger own the toggle.\n const trigger = this.wiredTrigger;\n if (trigger && (path.includes(trigger) || trigger.contains(target))) return;\n this.open = false;\n };\n document.addEventListener('mousedown', this.outsideClickHandler, true);\n }\n\n private removeOutsideClickHandler() {\n if (this.outsideClickHandler && typeof document !== 'undefined') {\n document.removeEventListener('mousedown', this.outsideClickHandler, true);\n }\n this.outsideClickHandler = undefined;\n }\n\n // ────────────────────────────────────────────────────────────────────────\n // Bar handlers\n // ────────────────────────────────────────────────────────────────────────\n\n private handleTriggerActivate = () => {\n if (this.disabled) return;\n if (!this.open) this.open = true;\n };\n\n private handleTriggerClick = (e: MouseEvent) => {\n e.stopPropagation();\n this.handleTriggerActivate();\n };\n\n private handleTriggerKeyDown = (e: KeyboardEvent) => {\n if (e.key !== 'Enter' && e.key !== ' ') return;\n e.preventDefault();\n this.handleTriggerActivate();\n };\n\n private handleBarClick = (e: MouseEvent) => {\n if (this.disabled) return;\n // Ignore clicks that originated inside the trailing cluster (those\n // belong to icon buttons / avatars) so they don't toggle the panel.\n const target = e.target as HTMLElement;\n if (target.closest('[part=\"trailing\"]')) return;\n if (!this.open) this.open = true;\n this.input?.focus();\n };\n\n private handleLeadingClick = (e: MouseEvent) => {\n if (this.disabled) return;\n // The default leading button is interactive only while the bar is open —\n // clicking the morphed back-arrow dismisses the search. When closed, it is\n // non-interactive (pointer-events: none in CSS) so clicks fall through to\n // the bar's own handler which focuses the input. A custom slotted `leading`\n // icon, by contrast, is interactive in any state.\n const slotted = this.hasSlottedLeading;\n const interactiveDefault = !slotted && this.open;\n // Closed resting search glyph (no slot, not open): not a click target —\n // let it bubble to the bar to focus the input. No event.\n if (!slotted && !interactiveDefault) return;\n\n this.mdLeadingIconClick.emit({ value: this.value, open: this.open });\n\n // Preserve the default back-button dismiss behaviour; the slotted variant\n // leaves bar semantics to the consumer.\n if (interactiveDefault) {\n e.stopPropagation();\n this.open = false;\n }\n };\n\n private handleTrailingClick = (e: MouseEvent) => {\n if (this.disabled) return;\n const path = (typeof e.composedPath === 'function'\n ? e.composedPath()\n : []) as Array<EventTarget>;\n const nodes = path.length ? path : [e.target as EventTarget];\n // The clear (×) and voice (mic) affordances emit their own dedicated\n // events (mdClear / mdVoice) — don't double-fire a generic trailing event.\n const isOwnAffordance = nodes.some((n) => {\n const cl = (n as Partial<HTMLElement>)?.classList;\n return (\n !!cl?.contains?.('md-search__clear') ||\n !!cl?.contains?.('md-search__voice')\n );\n });\n if (isOwnAffordance) return;\n // Only emit when a slotted trailing affordance is actually present and was\n // the click target (ignore empty wrapper padding / the morph box). Read the\n // slot's assigned nodes directly rather than the slotchange-driven state,\n // which isn't seeded for content present at first render.\n const assigned = this.trailingSlotEl?.assignedElements?.() ?? [];\n if (assigned.length === 0) return;\n const target = nodes[0] as Node | undefined;\n const hitSlotted = assigned.some(\n (el) => el === target || (target ? el.contains(target) : false),\n );\n if (!hitSlotted) return;\n\n // Treat the slotted affordance like the built-in icon buttons: don't let\n // the click bubble to the bar and toggle the panel.\n e.stopPropagation();\n this.mdTrailingIconClick.emit({ value: this.value, open: this.open });\n };\n\n private handleClearClick = (e: MouseEvent) => {\n e.stopPropagation();\n if (this.disabled) return;\n this.value = '';\n this.input?.focus();\n this.mdInput.emit({ value: '' });\n // Clearing should drop results immediately — flush past any pending\n // debounce so the empty query reaches the consumer without delay.\n this.pendingSearchValue = '';\n this.flushSearch();\n this.mdClear.emit();\n };\n\n // ────────────────────────────────────────────────────────────────────────\n // Voice search (Web Speech API)\n // ────────────────────────────────────────────────────────────────────────\n\n /** Resolve the (possibly prefixed) SpeechRecognition constructor, if any. */\n private getSpeechRecognitionCtor(): SpeechRecognitionCtor | undefined {\n if (typeof window === 'undefined') return undefined;\n const w = window as unknown as {\n SpeechRecognition?: SpeechRecognitionCtor;\n webkitSpeechRecognition?: SpeechRecognitionCtor;\n };\n return w.SpeechRecognition || w.webkitSpeechRecognition;\n }\n\n /** Whether the Web Speech API is available in this environment. */\n private isVoiceSupported(): boolean {\n return !!this.getSpeechRecognitionCtor();\n }\n\n private resolveVoiceLang(): string {\n if (typeof document !== 'undefined') {\n const lang = this.el.getAttribute('lang') || document.documentElement.lang;\n if (lang) return lang;\n }\n return 'en-US';\n }\n\n private handleVoiceClick = (e: MouseEvent) => {\n // Keep the bar's click handler from re-toggling the panel.\n e.stopPropagation();\n if (this.disabled) return;\n if (this.listening) {\n this.stopVoice();\n } else {\n this.startVoice();\n }\n };\n\n /** Start streaming voice transcription into the input. No-op if unsupported. */\n @Method() async startVoice(): Promise<void> {\n this.startVoiceInternal();\n }\n\n /** Stop any active voice transcription. */\n @Method() async stopVoice(): Promise<void> {\n this.listening = false;\n if (this.recognition) {\n try {\n this.recognition.stop();\n } catch {\n /* stop() throws if not started — safe to ignore. */\n }\n }\n }\n\n private startVoiceInternal() {\n const Ctor = this.getSpeechRecognitionCtor();\n if (!Ctor || this.disabled || this.listening) return;\n if (this.recognition) {\n try {\n this.recognition.abort();\n } catch {\n /* no-op */\n }\n this.recognition = undefined;\n }\n const recognition = new Ctor();\n recognition.lang = this.resolveVoiceLang();\n recognition.interimResults = true;\n recognition.continuous = false;\n recognition.maxAlternatives = 1;\n recognition.onresult = this.handleVoiceResult;\n recognition.onerror = this.handleVoiceEnd;\n recognition.onend = this.handleVoiceEnd;\n this.recognition = recognition;\n // Opening the view surfaces streamed results just like typing would.\n if (!this.open) this.open = true;\n this.input?.focus();\n this.listening = true;\n try {\n recognition.start();\n } catch {\n // start() throws if invoked while already running — reset our state.\n this.listening = false;\n this.recognition = undefined;\n }\n }\n\n private handleVoiceResult = (event: SpeechRecognitionEventLike) => {\n let transcript = '';\n let isFinal = false;\n const results = event.results;\n for (let i = 0; i < results.length; i++) {\n transcript += results[i][0].transcript;\n if (results[i].isFinal) isFinal = true;\n }\n transcript = transcript.replace(/^\\s+/, '');\n // Mirror the transcript into the input and drive the normal typed flow.\n this.value = transcript;\n if (!this.open) this.open = true;\n this.mdInput.emit({ value: transcript });\n this.scheduleSearch(transcript);\n this.mdVoice.emit({ value: transcript, final: isFinal });\n if (isFinal) {\n // Flush the final query immediately, then end the session.\n this.pendingSearchValue = transcript;\n this.flushSearch();\n this.stopVoice();\n }\n };\n\n private handleVoiceEnd = () => {\n this.listening = false;\n this.recognition = undefined;\n };\n\n private handleInput = (e: Event) => {\n const next = (e.target as HTMLInputElement).value;\n this.value = next;\n // Typing activates the search view (it isn't opened by focus alone).\n if (!this.open && !this.disabled) this.open = true;\n // mdInput is immediate (every keystroke); mdSearch is debounced/throttled.\n this.mdInput.emit({ value: next });\n this.scheduleSearch(next);\n };\n\n // ────────────────────────────────────────────────────────────────────────\n // Debounced search emission (debounce + throttle + distinctUntilChanged)\n // ────────────────────────────────────────────────────────────────────────\n\n /**\n * Queue an `mdSearch` emission for `value`, honouring `debounce` (trailing\n * wait for a typing pause) and `throttle` (maxWait — guarantees an emit at\n * least every `throttle` ms during sustained typing). With both at `0` the\n * emit is synchronous. Either way the actual emit is de-duplicated in\n * `flushSearch` (distinct-until-changed on the trimmed query).\n */\n private scheduleSearch(value: string) {\n this.pendingSearchValue = value;\n const debounceMs = Math.max(0, Number(this.debounce) || 0);\n const throttleMs = Math.max(0, Number(this.throttle) || 0);\n\n if (debounceMs === 0 && throttleMs === 0) {\n this.flushSearch();\n return;\n }\n\n // (Re)start the trailing debounce timer on every keystroke.\n if (this.searchDebounceTimer) clearTimeout(this.searchDebounceTimer);\n this.searchDebounceTimer = setTimeout(() => this.flushSearch(), debounceMs);\n\n // Throttle / maxWait: if the user keeps typing past `throttle` ms without\n // the debounce ever settling, force an emit so interim results still show.\n if (throttleMs > 0 && this.searchMaxWaitTimer === undefined) {\n this.searchMaxWaitTimer = setTimeout(() => this.flushSearch(), throttleMs);\n }\n }\n\n /** Emit the pending query now (clearing timers), if it differs from the last. */\n private flushSearch() {\n this.clearSearchTimers();\n if (this.pendingSearchValue === null) return;\n const value = this.pendingSearchValue;\n this.pendingSearchValue = null;\n const normalized = value.trim();\n if (normalized === this.lastEmittedSearch) return; // distinctUntilChanged\n this.lastEmittedSearch = normalized;\n this.mdSearch.emit({ value: normalized });\n }\n\n private clearSearchTimers() {\n if (this.searchDebounceTimer) {\n clearTimeout(this.searchDebounceTimer);\n this.searchDebounceTimer = undefined;\n }\n if (this.searchMaxWaitTimer) {\n clearTimeout(this.searchMaxWaitTimer);\n this.searchMaxWaitTimer = undefined;\n }\n }\n\n /** Global modality trackers (capture phase) — see `keyboardModality`. */\n private trackKeyboardModality = () => {\n this.keyboardModality = true;\n };\n private trackPointerModality = () => {\n this.keyboardModality = false;\n };\n\n private handleInputFocus = () => {\n // Focus (e.g. via Tab) must NOT open the search view — it only moves focus.\n // The view opens on explicit activation: typing, Enter / Space, or click\n // (M3 keyboard spec: \"Space or Enter activates the search text field\").\n this.focused = true;\n // The focus ring is keyboard-only: show it only when the latest interaction\n // was via the keyboard (Tab, Enter / Space activation, arrows).\n this.showFocusRing = this.keyboardModality;\n this.valueOnFocus = this.value;\n };\n\n private handleInputBlur = () => {\n this.focused = false;\n this.showFocusRing = false;\n if (this.value !== this.valueOnFocus) {\n this.mdChange.emit({ value: this.value });\n }\n };\n\n private handleInputKeyDown = (e: KeyboardEvent) => {\n if (this.disabled) return;\n // When closed, Enter / Space activate the field for input (open the view)\n // rather than submitting / inserting a space.\n if (!this.open) {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.open = true;\n }\n return;\n }\n if (e.key === 'Enter') {\n // Submitting should fetch the current query at once — flush past any\n // pending debounce before notifying submit listeners.\n this.pendingSearchValue = this.value;\n this.flushSearch();\n this.mdSubmit.emit({ value: this.value });\n }\n };\n\n @Listen('keydown', { target: 'window' })\n handleWindowKeyDown(e: KeyboardEvent) {\n if (!this.open) return;\n if (e.key === 'Escape' && this.escapeCloses) {\n e.preventDefault();\n this.open = false;\n return;\n }\n // Arrow keys move focus between the slotted search result items (M3\n // keyboard spec). Down from the input lands on the first item; Up from the\n // first item returns to the input.\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n if (this.moveResultFocus(e.key === 'ArrowDown' ? 1 : -1)) {\n e.preventDefault();\n }\n return;\n }\n // Focus trap (full-screen only — docked is non-modal so Tab should\n // continue to the document like any other popup).\n if (this.layout !== 'full-screen' || e.key !== 'Tab') return;\n const focusables = this.collectFocusables();\n if (focusables.length === 0) return;\n const first = focusables[0];\n const last = focusables[focusables.length - 1];\n const active = (this.el.shadowRoot?.activeElement ?? document.activeElement) as HTMLElement | null;\n if (e.shiftKey && active === first) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && active === last) {\n e.preventDefault();\n first.focus();\n }\n }\n\n private collectFocusables(): HTMLElement[] {\n const root = this.el.shadowRoot;\n if (!root) return [];\n const sel =\n 'a[href], button, input, select, textarea, [tabindex]:not([tabindex=\"-1\"]), md-icon-button, md-button';\n const inShadow = Array.from(root.querySelectorAll(sel)) as HTMLElement[];\n const inLight = Array.from(this.el.querySelectorAll(sel)) as HTMLElement[];\n return [...inShadow, ...inLight].filter((node) => {\n if (node.hasAttribute('disabled')) return false;\n const tabindex = node.getAttribute('tabindex');\n return tabindex !== '-1';\n });\n }\n\n // ────────────────────────────────────────────────────────────────────────\n // Autosuggest announcements (live region)\n // ────────────────────────────────────────────────────────────────────────\n\n /**\n * Count the result items the consumer placed in `slot=\"results\"`. Reads the\n * host's light DOM (the slotted elements are children of `<md-search>`) so it\n * works regardless of slot/flatten support. Prefers semantic item selectors\n * (`md-list-item`, `[role=\"option\"]`, `<li>`) so a single wrapping list\n * doesn't read as one result; falls back to the number of slotted containers\n * when no items are found.\n */\n private countResults(): number {\n const containers = Array.from(\n this.el.querySelectorAll('[slot=\"results\"]'),\n ) as HTMLElement[];\n const itemSelector =\n 'md-list-item, [role=\"option\"], li, [data-search-result]';\n const items = new Set<Element>();\n for (const el of containers) {\n if (el.matches(itemSelector)) items.add(el);\n el.querySelectorAll(itemSelector).forEach((node) => items.add(node));\n }\n return items.size > 0 ? items.size : containers.length;\n }\n\n /**\n * The slotted result items, in DOM order. Uses the same semantic item\n * selectors as the announcement counter so arrow navigation steps through\n * the real list rows rather than a wrapping container.\n */\n private resultItems(): HTMLElement[] {\n const itemSelector =\n 'md-list-item, [role=\"option\"], [role=\"menuitem\"], [data-search-result], li';\n const containers = Array.from(\n this.el.querySelectorAll('[slot=\"results\"]'),\n ) as HTMLElement[];\n const items = new Set<HTMLElement>();\n for (const el of containers) {\n if (el.matches(itemSelector)) items.add(el);\n el.querySelectorAll(itemSelector).forEach((node) =>\n items.add(node as HTMLElement),\n );\n }\n return Array.from(items);\n }\n\n /**\n * Move focus across result items by `delta` (+1 / -1). Returns `true` if it\n * handled the key (so the caller can `preventDefault`). Stepping up past the\n * first item returns focus to the text field.\n */\n private moveResultFocus(delta: number): boolean {\n const items = this.resultItems();\n if (items.length === 0) return false;\n const active = (this.el.shadowRoot?.activeElement ??\n (typeof document !== 'undefined' ? document.activeElement : null)) as\n | HTMLElement\n | null;\n const current = active\n ? items.findIndex((it) => it === active || it.contains(active))\n : -1;\n\n if (delta > 0) {\n const next = current < 0 ? 0 : Math.min(current + 1, items.length - 1);\n this.focusResultItem(items[next]);\n return true;\n }\n // delta < 0\n if (current <= 0) {\n this.input?.focus();\n return true;\n }\n this.focusResultItem(items[current - 1]);\n return true;\n }\n\n private focusResultItem(item: HTMLElement) {\n // Make the row programmatically focusable if the consumer hasn't (roving\n // tabindex) so .focus() lands and screen readers announce the row.\n if (item.getAttribute('tabindex') === null) {\n item.setAttribute('tabindex', '-1');\n }\n item.focus?.();\n }\n\n /**\n * Recompute the polite live-region message. Only speaks while the panel is\n * open so suggestions are announced as they appear / change; clears when\n * closed so re-opening re-announces.\n */\n private updateResultsStatus() {\n if (!this.announceResults || !this.open) {\n this.resultsStatus = '';\n return;\n }\n // While a fetch is in flight, announce the loading state rather than a\n // (stale) count so screen-reader users know results are on the way.\n if (this.loading) {\n this.resultsStatus = this.loadingLabel;\n return;\n }\n const count = this.countResults();\n if (count > 0) {\n this.resultsStatus = this.resultsLabel.replace('{count}', String(count));\n } else if (this.shouldShowVisibleEmptyState()) {\n // The visible empty state (role=\"status\", aria-live) owns this copy.\n this.resultsStatus = '';\n } else {\n this.resultsStatus = this.value.trim() ? this.noResultsLabel : '';\n }\n }\n\n /**\n * Whether to render the on-screen empty state in the results panel.\n * Requires an open panel, a non-empty query, zero detected result rows,\n * and no in-flight loading fetch.\n */\n private shouldShowVisibleEmptyState(): boolean {\n return (\n this.panelVisible &&\n !this.loading &&\n this.countResults() === 0 &&\n this.value.trim().length > 0\n );\n }\n\n /**\n * Whether the results panel should render visible chrome (divider, drawer,\n * empty state, slotted list). When the bar is open but there is nothing to\n * show yet — no query, no rows, not loading — keep the bar alone so a stray\n * divider or empty panel shell does not appear under it.\n */\n private shouldShowResultsChrome(): boolean {\n if (!this.panelVisible || this.loading) return false;\n if (this.countResults() > 0) return true;\n return this.shouldShowVisibleEmptyState();\n }\n\n /**\n * Whether the results panel surface is visible (opacity / pointer-events).\n * Full-screen open is always an edge-to-edge overlay once the panel commits,\n * even before slotted rows are detected. Docked / inline only open the drawer\n * when there is meaningful content to show.\n */\n private isPanelRevealed(): boolean {\n if (this.layout === 'full-screen') {\n return this.panelVisible && this.barExpanded;\n }\n return this.shouldShowResultsChrome();\n }\n\n /**\n * The accessible name for the bar / input. Falls back to the hinted search\n * text (`placeholder`) per the M3 labeling guidance when `inputAriaLabel`\n * isn't set.\n */\n private effectiveLabel(): string {\n return this.inputAriaLabel || this.placeholder || 'Search';\n }\n\n // ────────────────────────────────────────────────────────────────────────\n // Render helpers\n // ────────────────────────────────────────────────────────────────────────\n\n /**\n * Resolve the open-state glyph. When a consumer hasn't passed\n * `open-leading-icon` we fall back to a variant-aware default —\n * `chevron_left` for the Expressive `contained` bar (whose pill shape\n * pairs better with a caret) and the spec-canonical `arrow_back` for\n * the baseline `divided` bar.\n */\n private resolveOpenLeadingIcon(): string {\n if (this.openLeadingIcon) return this.openLeadingIcon;\n return this.variant === 'contained' ? 'chevron_left' : 'arrow_back';\n }\n\n private renderTrigger() {\n if (!this.usesIconTrigger || this.barExpanded) return null;\n // An external opener replaces the built-in one — two ways in would be a\n // confusing surface, and only one of them can own the focus round trip.\n if (this.hasExternalTrigger) return null;\n\n return (\n <div class=\"md-search__trigger\" part=\"trigger\">\n <slot name=\"trigger\">\n <md-icon-button\n class=\"md-search__trigger-button\"\n part=\"trigger-button\"\n icon={this.triggerIcon}\n variant=\"standard\"\n size=\"md\"\n disabled={this.disabled}\n aria-label={this.effectiveLabel()}\n onClick={this.handleTriggerClick}\n onKeyDown={this.handleTriggerKeyDown}\n ></md-icon-button>\n </slot>\n </div>\n );\n }\n\n private renderLeading() {\n // The leading button is always rendered with BOTH glyphs stacked so the\n // search ↔ back-arrow change reads as a single icon morphing rather than\n // two icons swapping. The `--button` modifier flips on as soon as the\n // bar is open in either layout (M3 docked panels traditionally keep the\n // search glyph, but the morph affordance reads better and ties the\n // dismiss action to a single, predictable spot).\n const showCloseButton = this.barExpanded;\n const ariaLabel = showCloseButton ? 'Close search' : 'Search';\n const openGlyph = this.resolveOpenLeadingIcon();\n\n return (\n <span\n class={{\n 'md-search__leading': true,\n 'md-search__leading--button': showCloseButton,\n }}\n part=\"leading\"\n onClick={this.handleLeadingClick}\n >\n <slot name=\"leading\">\n <button\n type=\"button\"\n class=\"md-search__leading-button\"\n aria-label={ariaLabel}\n tabIndex={showCloseButton ? 0 : -1}\n disabled={this.disabled}\n >\n <span\n class=\"md-search__leading-state-layer\"\n part=\"leading-state-layer\"\n aria-hidden=\"true\"\n ></span>\n <span\n class=\"md-search__icon md-search__icon--resting material-symbols-outlined\"\n aria-hidden=\"true\"\n >\n {this.leadingIcon}\n </span>\n <span\n class=\"md-search__icon md-search__icon--open material-symbols-outlined\"\n aria-hidden=\"true\"\n >\n {openGlyph}\n </span>\n </button>\n </slot>\n </span>\n );\n }\n\n private renderClearButton() {\n if (!this.showClearButton || !this.value) return null;\n return (\n <button\n type=\"button\"\n class=\"md-search__icon-button md-search__clear\"\n part=\"clear-button\"\n aria-label=\"Clear search\"\n onClick={this.handleClearClick}\n >\n <span class=\"md-search__icon material-symbols-outlined\" aria-hidden=\"true\">\n close\n </span>\n </button>\n );\n }\n\n private renderVoiceButton() {\n return (\n <button\n type=\"button\"\n class={{\n 'md-search__icon-button': true,\n 'md-search__voice': true,\n 'md-search__voice--listening': this.listening,\n }}\n part=\"voice-button\"\n aria-label={this.listening ? 'Stop voice search' : 'Search by voice'}\n aria-pressed={this.listening ? 'true' : 'false'}\n disabled={this.disabled}\n onClick={this.handleVoiceClick}\n >\n <span class=\"md-search__icon material-symbols-outlined\" aria-hidden=\"true\">\n mic\n </span>\n </button>\n );\n }\n\n private renderTrailing() {\n const showClear = this.showClearButton && this.value.length > 0;\n // The loading indicator stays mounted through its fade-out (morph), so the\n // box is shown whenever there's a clear button OR the morph is in-flight.\n const showMorph = showClear || this.loadingMorphMounted;\n const showVoice = this.voiceSearch && this.isVoiceSupported();\n\n // Don't render an empty trailing wrapper: only mount it when it has a morph\n // box, a mic, or (potential) slotted content. The named slot itself is the\n // projection point and must stay so slotchange detection keeps working.\n return (\n <span\n class=\"md-search__trailing\"\n part=\"trailing\"\n onClick={this.handleTrailingClick}\n >\n {/* Loading indicator and clear-× share one fixed-size box and cross-fade\n (scale + rotate) in BOTH directions as `loading` toggles, so the\n cluster width never jumps. */}\n {showMorph && (\n <span\n class={{\n 'md-search__trailing-morph': true,\n 'md-search__trailing-morph--loading': this.loadingMorphIn,\n }}\n >\n {this.loadingMorphMounted && (\n // `loader` swaps the spinner (e.g. for a circular\n // md-progress-indicator); the default keeps the morph classes and\n // the exported shape part.\n <slot name=\"loader\">\n <md-loading-indicator\n class=\"md-search__loading\"\n part=\"loading\"\n exportparts=\"shape:loading-shape\"\n label={this.loadingLabel}\n ></md-loading-indicator>\n </slot>\n )}\n {showClear && this.renderClearButton()}\n </span>\n )}\n {showVoice && this.renderVoiceButton()}\n <slot name=\"trailing\"></slot>\n </span>\n );\n }\n\n // ────────────────────────────────────────────────────────────────────────\n // Render\n // ────────────────────────────────────────────────────────────────────────\n\n render() {\n const isFullScreen = this.layout === 'full-screen';\n const hostStyle: Record<string, string> = {};\n if (this.maxBlockSize) {\n hostStyle['--_max-block-size'] = this.maxBlockSize;\n }\n\n return (\n <Host\n class={{\n 'md-search': true,\n [`md-search--${this.variant}`]: true,\n [`md-search--${this.layout}`]: true,\n [`md-search--trigger-${this.effectiveTrigger}`]: true,\n 'md-search--open': this.barExpanded,\n 'md-search--panel-content':\n this.layout === 'full-screen'\n ? this.isPanelRevealed()\n : this.shouldShowResultsChrome(),\n 'md-search--closed': !this.barExpanded,\n 'md-search--has-slotted-trigger': this.hasSlottedTrigger,\n 'md-search--disabled': this.disabled,\n 'md-search--focused': this.focused,\n 'md-search--has-value': this.value.length > 0,\n 'md-search--has-slotted-leading': this.hasSlottedLeading,\n 'md-search--has-slotted-trailing': this.hasSlottedTrailing,\n 'md-search--full-width': this.fullWidth,\n [`md-search--elevation-${this.elevation}`]: true,\n }}\n style={Object.keys(hostStyle).length > 0 ? hostStyle : undefined}\n >\n {/* Hidden probe — resolves the bar's per-side focus travel\n (resting − focused inset) to a pixel length so\n measureRippleExtend() can forward the value to <md-ripple>.\n Lives directly under :host (NOT inside the bar) so its\n absolute-positioning containing block matches the bar's,\n which is what makes any percentage in the insets resolve\n against the same inline-size for both. */}\n <span\n class=\"md-search__inset-probe\"\n ref={(el) => (this.insetProbeEl = el as HTMLElement)}\n aria-hidden=\"true\"\n ></span>\n\n {/* Polite live region — announces suggestion / result availability to\n assistive tech as the slotted results change (M3 autosuggest). */}\n <div\n class=\"md-search__a11y-status\"\n part=\"status\"\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {this.resultsStatus}\n </div>\n\n {this.renderTrigger()}\n\n {/* Search bar — hidden for full-screen icon trigger until open */}\n {this.showBar && (\n <div\n class={{\n 'md-search__bar': true,\n 'md-search__bar--focused': this.focused,\n 'md-search__bar--focus-ring': this.showFocusRing,\n }}\n part=\"bar\"\n onClick={this.handleBarClick}\n >\n {!this.disabled && (\n <md-ripple ref={(el) => (this.rippleEl = el as HTMLElement)}></md-ripple>\n )}\n <span class=\"md-search__state-layer\" part=\"state-layer\" aria-hidden=\"true\"></span>\n\n {this.renderLeading()}\n\n <input\n ref={(el) => (this.input = el)}\n class=\"md-search__input\"\n part=\"input\"\n type=\"search\"\n role=\"combobox\"\n value={this.value}\n placeholder={this.placeholder}\n disabled={this.disabled}\n aria-label={this.effectiveLabel()}\n aria-expanded={this.open ? 'true' : 'false'}\n aria-controls=\"md-search-panel\"\n aria-autocomplete=\"list\"\n autocomplete=\"off\"\n spellcheck={false}\n onInput={this.handleInput}\n onFocus={this.handleInputFocus}\n onBlur={this.handleInputBlur}\n onKeyDown={this.handleInputKeyDown}\n />\n\n {this.renderTrailing()}\n </div>\n )}\n\n {/* Results panel — positioning + dialog chrome. Long lists plain-scroll\n in the results viewport (`.md-search__results-scroll`) with a native\n scrollbar aligned to the slotted surface. */}\n <div\n id=\"md-search-panel\"\n class={{\n 'md-search__panel': true,\n [`md-search__panel--${this.layout}`]: true,\n 'md-search__panel--open': this.isPanelRevealed(),\n }}\n part=\"panel\"\n role=\"dialog\"\n aria-modal={isFullScreen && this.isPanelRevealed() ? 'true' : 'false'}\n aria-hidden={this.isPanelRevealed() ? 'false' : 'true'}\n aria-label={this.effectiveLabel()}\n >\n {/* Hairline divider is a `divided`-variant affordance only — don't\n emit the empty element for the contained variant. */}\n {this.variant === 'divided' && this.isPanelRevealed() && (\n <div class=\"md-search__divider\" part=\"divider\" aria-hidden=\"true\"></div>\n )}\n\n <div\n class={{\n 'md-search__panel-body': true,\n 'md-search__panel-body--empty': this.shouldShowVisibleEmptyState(),\n }}\n part=\"panel-body\"\n >\n {this.shouldShowVisibleEmptyState() && (\n <p\n class=\"md-search__empty\"\n part=\"empty\"\n role=\"status\"\n aria-live=\"polite\"\n >\n {this.noResultsLabel}\n </p>\n )}\n <div\n class=\"md-search__results-host\"\n part=\"results-host\"\n hidden={this.shouldShowVisibleEmptyState() ? true : undefined}\n aria-hidden={this.shouldShowVisibleEmptyState() ? 'true' : undefined}\n >\n <div class=\"md-search__results-scroll\" part=\"results-viewport\">\n <slot name=\"results\"></slot>\n </div>\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"md-search.js","sourceRoot":"","sources":["../../../src/components/md-search/md-search.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Host,\n h,\n Prop,\n State,\n Event,\n EventEmitter,\n Element,\n Method,\n Watch,\n Listen,\n} from '@stencil/core';\nimport { LazyLoadingIndicator } from '../../utils/lazy-loading-indicator';\n\n/**\n * Minimal structural type for the Web Speech API `SpeechRecognition`\n * instance — the DOM lib doesn't ship these types in every TS target, and we\n * only touch a small surface. Indexing the global ctor avoids a hard\n * dependency on the (prefixed / non-standard) API.\n */\ninterface SpeechRecognitionLike {\n lang: string;\n interimResults: boolean;\n continuous: boolean;\n maxAlternatives: number;\n onresult: ((event: SpeechRecognitionEventLike) => void) | null;\n onerror: (() => void) | null;\n onend: (() => void) | null;\n start(): void;\n stop(): void;\n abort(): void;\n}\n\ninterface SpeechRecognitionEventLike {\n resultIndex: number;\n results: ArrayLike<\n ArrayLike<{ transcript: string }> & { isFinal: boolean }\n >;\n}\n\ntype SpeechRecognitionCtor = new () => SpeechRecognitionLike;\n\n/**\n * Payload for the `mdLeadingIconClick` event. Emitted when the interactive\n * leading affordance (the morphing back/dismiss button, or a custom slotted\n * `leading` icon) is clicked.\n */\nexport interface MdSearchLeadingIconClickDetail {\n /** The bar's current input value at click time. */\n value: string;\n /** Whether the bar / panel is open at click time. */\n open: boolean;\n}\n\n/**\n * Payload for the `mdTrailingIconClick` event. Emitted when a slotted\n * `trailing` affordance is clicked (the built-in clear / voice buttons emit\n * their own `mdClear` / `mdVoice` events instead).\n */\nexport interface MdSearchTrailingIconClickDetail {\n /** The bar's current input value at click time. */\n value: string;\n /** Whether the bar / panel is open at click time. */\n open: boolean;\n}\n\n/**\n * Material Design 3 Search.\n *\n * Implements the M3 Search specification\n * (https://m3.material.io/components/search/specs).\n *\n * Two orthogonal axes describe every spec configuration:\n * - `variant`: `contained` (M3 Expressive default) | `divided` (baseline)\n * - `layout` : `full-screen` (modal overlay) | `docked` (anchored panel)\n *\n * The component renders a single resting bar plus a results panel. When the\n * `full-screen` layout is `open` the bar pins itself to the top of the\n * viewport via `position: fixed` so consumers don't need a portal — CSS does\n * the work, and the input keeps a stable identity throughout the open/close\n * lifecycle.\n */\n@Component({\n tag: 'md-search',\n styleUrl: 'md-search.css',\n shadow: true,\n})\nexport class MdSearch {\n @Element() el!: HTMLElement;\n\n // ────────────────────────────────────────────────────────────────────────\n // Spec axes\n // ────────────────────────────────────────────────────────────────────────\n\n /**\n * Visual style. `contained` is the M3 Expressive default with a filled\n * surface and rounded shape; `divided` is the baseline pre-Expressive look\n * that uses a hairline divider between bar and results.\n */\n @Prop({ reflect: true }) variant: 'contained' | 'divided' = 'contained';\n\n /**\n * How the focused panel appears. `full-screen` fills the viewport\n * edge-to-edge with an opaque results surface and a focus trap (no scrim —\n * open/close uses the same translateY + opacity motion as md-dialog\n * fullscreen); `docked` anchors a popup beneath the bar\n * (min 360dp / max 720dp wide; results drawer shrinks to content up to max ⅔ vh).\n */\n @Prop({ reflect: true }) layout: 'full-screen' | 'docked' = 'full-screen';\n\n /**\n * What the user sees while the search view is closed. `bar` renders the\n * resting search field (docked default). `icon` renders a compact search\n * icon button that opens the view — the default for `full-screen` layout\n * (contained and divided spec sheets). Docked layouts should keep `bar`.\n */\n @Prop({ reflect: true }) trigger?: 'bar' | 'icon';\n\n /**\n * Material Symbols glyph for the built-in icon trigger (`trigger=\"icon\"`).\n * Ignored when a custom element is slotted in `trigger`.\n */\n @Prop({ attribute: 'trigger-icon' }) triggerIcon: string = 'search';\n\n /**\n * Open the search from an element that lives ELSEWHERE on the page — a\n * button in the app bar, a menu item, a keyboard-shortcut hint — rather than\n * from the built-in trigger or the `trigger` slot, both of which have to sit\n * inside this element.\n *\n * Takes a CSS selector resolved against the document\n * (`trigger-for=\"#app-bar-search\"`), or an element assigned to the\n * `triggerElement` property when you already hold a reference. The component\n * wires it rather than rendering it: activating it opens the view,\n * `aria-haspopup=\"dialog\"` and `aria-expanded` are kept in step, and closing\n * returns focus to it.\n *\n * With one set, the built-in trigger is not rendered — otherwise the page\n * would show two ways in.\n */\n @Prop({ attribute: 'trigger-for' }) triggerFor: string = '';\n\n /** The external trigger as an element, for consumers that hold a reference. */\n @Prop() triggerElement?: HTMLElement;\n\n /**\n * Make the docked / inline bar span its container's full inline width with\n * NO side gutters. This zeroes both expand insets for the instance\n * (resting + focused = 0), so there is no 24 → 12dp margin animation and the\n * aligned results drawer fills the same full width. Purely an ergonomic\n * switch over the CSS vars — the identical effect is available by setting\n * `--md-search-expand-inset: 0` and `--md-search-expand-focused-inset: 0`.\n * Has no effect on `full-screen` layout (already edge-to-edge).\n */\n @Prop({ reflect: true, attribute: 'full-width' }) fullWidth: boolean = false;\n\n // ────────────────────────────────────────────────────────────────────────\n // Bar state\n // ────────────────────────────────────────────────────────────────────────\n\n /** Current input text, two-way bindable. */\n @Prop({ mutable: true, reflect: true }) value: string = '';\n\n /**\n * Placeholder text — the spec calls this \"supporting text\" within the bar\n * anatomy.\n */\n @Prop() placeholder: string = 'Search';\n\n /** Whether the focused panel is open. */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n\n /** Whether interaction is blocked. */\n @Prop({ reflect: true }) disabled: boolean = false;\n\n /**\n * Resting bar elevation level, mapped to `--md-sys-elevation-{n}`. `0`\n * (the M3 default) renders no shadow; `1`–`5` apply the matching MD3\n * elevation tier. For a fully custom shadow, set the CSS custom property\n * `--md-search-container-elevation` instead (it overrides this prop).\n */\n @Prop({ reflect: true }) elevation: 0 | 1 | 2 | 3 | 4 | 5 = 0;\n\n // ────────────────────────────────────────────────────────────────────────\n // Icon configuration\n // ────────────────────────────────────────────────────────────────────────\n\n /** Material Symbols glyph for the resting leading icon. */\n @Prop({ attribute: 'leading-icon' }) leadingIcon: string = 'search';\n\n /**\n * Material Symbols glyph used for the leading button when the bar is\n * open. Defaults are variant-aware: the `contained` (Expressive) bar\n * uses `chevron_left` so the caret matches the bar's softer, pill-\n * shaped silhouette, while the `divided` (baseline) bar uses the\n * classic `arrow_back` to match its squared, app-bar-like chrome.\n * Pass an explicit value to override either default.\n */\n @Prop({ attribute: 'open-leading-icon' }) openLeadingIcon?: string;\n\n // ────────────────────────────────────────────────────────────────────────\n // Behaviour\n // ────────────────────────────────────────────────────────────────────────\n\n /** Show the trailing clear (×) button when the input has a value. */\n @Prop({ attribute: 'show-clear-button' }) showClearButton: boolean = true;\n\n /**\n * Opt-in voice search. When `true` AND the browser exposes the Web Speech\n * API (`SpeechRecognition` / `webkitSpeechRecognition`), a microphone\n * icon-button is rendered in the trailing cluster. Clicking it starts\n * recognition and streams the interim + final transcript into the input,\n * firing the normal `mdInput` / `mdSearch` flow as if typed. When the API is\n * unavailable the mic is not rendered (graceful no-op). Default `false`.\n */\n @Prop({ attribute: 'voice-search' }) voiceSearch: boolean = false;\n\n /** Close on Escape key. */\n @Prop({ attribute: 'escape-closes' }) escapeCloses: boolean = true;\n\n /** Close on outside click (docked layout). */\n @Prop({ attribute: 'dismiss-on-outside-click' }) dismissOnOutsideClick: boolean = true;\n\n /**\n * Retained for API compatibility, but now a no-op: when the results list\n * overflows it always plain-scrolls inside the results viewport (no scroll\n * shadow / edge fades). Setting this has no visual effect.\n */\n @Prop({ reflect: true, attribute: 'scroll-shadow' })\n scrollShadow: boolean = true;\n\n /**\n * Maximum block-size of the open search surface (`\"480px\"`, `\"66vh\"`, etc.).\n * Full-screen: caps the fixed overlay height. Docked: caps the results panel\n * (bar height is unchanged). Prefer the CSS custom property\n * `--md-search-max-block-size` for stylesheet-based theming.\n */\n @Prop({ attribute: 'max-block-size' }) maxBlockSize: string = '';\n\n /**\n * Accessible label for the search bar / input. Per the M3 labeling guidance\n * the hinted search text (`placeholder`) describes the bar, so when this is\n * left empty the label falls back to `placeholder`. Set it explicitly only\n * when the visible hint and the accessible name should differ.\n */\n @Prop({ attribute: 'input-aria-label' }) inputAriaLabel: string = '';\n\n /**\n * Where focus lands when the panel opens. `auto` (default) and `input` focus\n * the text field so the user can type immediately. `leading` focuses the\n * leading button instead (falling back to the input if it isn't focusable).\n *\n * Note: the M3 \"initial focus lands on a leading icon, else the text field\"\n * rule applies to the RESTING bar's first tab stop and is handled by DOM\n * order — a slotted interactive leading icon button is the first tabbable\n * element, otherwise the text field. This prop only controls the open view.\n */\n @Prop({ attribute: 'initial-focus' }) initialFocus: 'auto' | 'input' | 'leading' =\n 'auto';\n\n /**\n * Announce the number of available suggestions / results to assistive\n * technology via a polite live region whenever the slotted results change\n * while the panel is open (M3 \"autosuggest\" requirement). Set to `false`\n * if you manage your own live region in the results slot.\n */\n @Prop({ attribute: 'announce-results' }) announceResults: boolean = true;\n\n /**\n * Template for the results announcement. `{count}` is replaced with the\n * number of detected result items (counts `md-list-item`, `[role=\"option\"]`,\n * or `<li>` descendants of the results slot, falling back to the number of\n * slotted elements).\n */\n @Prop({ attribute: 'results-label' }) resultsLabel: string =\n '{count} results available';\n\n /**\n * Message shown when the panel is open, the user has entered a query, and\n * there are no slotted results — both the on-screen empty state and the\n * polite live-region announcement (unless the visible empty state is shown,\n * in which case the live region defers to it to avoid duplicate speech).\n */\n @Prop({ attribute: 'no-results-label' }) noResultsLabel: string =\n 'No results available';\n\n // ────────────────────────────────────────────────────────────────────────\n // Async / loading\n // ────────────────────────────────────────────────────────────────────────\n\n /**\n * Whether an async results fetch is in flight. When `true` the M3 loading\n * indicator (the looping shape-morph) shows in the bar's trailing cluster.\n * Controlled by the consumer: set it `true` before awaiting your fetch and\n * back to `false` once results are slotted in. The component never flips\n * this itself — it only reflects the state visually + to assistive tech.\n */\n @Prop({ mutable: true, reflect: true }) loading: boolean = false;\n\n /**\n * Trailing debounce (ms) applied to the `mdSearch` event so a fetch only\n * fires after the user pauses typing. `0` (default) emits on every change.\n * `mdInput` always fires immediately on every keystroke regardless.\n */\n @Prop() debounce: number = 0;\n\n /**\n * Maximum wait (ms) before `mdSearch` is forced to fire during sustained\n * typing — a throttle/`maxWait` safety net so the user still sees interim\n * results when they never pause long enough for the debounce to settle.\n * `0` (default) disables it. Only meaningful alongside a non-zero\n * `debounce`.\n */\n @Prop() throttle: number = 0;\n\n /** Accessible label for the in-bar loading indicator. */\n @Prop({ attribute: 'loading-label' }) loadingLabel: string = 'Searching';\n\n /**\n * Local density rung. Drives the same `--md-sys-density-scale` signal that a\n * global `data-density` ancestor sets, so a local value simply overrides the\n * inherited one. 0 = default, -4 = ultra-compact.\n */\n @Prop({ reflect: true }) density: 0 | -1 | -2 | -3 | -4 = 0;\n\n // ────────────────────────────────────────────────────────────────────────\n // Events\n // ────────────────────────────────────────────────────────────────────────\n\n /** Fires on every input change (immediate, every keystroke). */\n @Event() mdInput: EventEmitter<{ value: string }>;\n\n /**\n * Debounced, de-duplicated query event — the one to wire an async results\n * fetch to. Honours `debounce` / `throttle` and applies a\n * distinct-until-changed guard on the trimmed query (so re-typing the same\n * term, or only adding surrounding whitespace, won't re-trigger a fetch).\n * Pressing Enter or clearing the field flushes it immediately.\n */\n @Event() mdSearch: EventEmitter<{ value: string }>;\n\n /** Fires when the user presses Enter to submit a query. */\n @Event() mdSubmit: EventEmitter<{ value: string }>;\n\n /** Fires when the input loses focus with a different value than on focus. */\n @Event() mdChange: EventEmitter<{ value: string }>;\n\n /** Fires when the panel opens. */\n @Event() mdOpen: EventEmitter<void>;\n\n /** Fires when the panel closes. */\n @Event() mdClose: EventEmitter<void>;\n\n /** Fires when the user clicks the clear (×) button. */\n @Event() mdClear: EventEmitter<void>;\n\n /**\n * Fires while voice search is active as the transcript streams in. `value`\n * is the current (interim or final) transcript; `final` is `true` on the\n * recognised final result. The component already mirrors the transcript into\n * the input and fires `mdInput` / `mdSearch`, so listen to this only if you\n * need voice-specific UI (e.g. a transcript preview).\n */\n @Event() mdVoice: EventEmitter<{ value: string; final: boolean }>;\n\n /**\n * Fires when the interactive leading affordance is clicked — the morphing\n * back / dismiss button while the bar is open, or a custom slotted `leading`\n * icon. The default back button still dismisses the panel as before; this\n * event is additive. The closed resting search glyph is intentionally NOT a\n * click target (a click there focuses the input), so it does not emit.\n */\n @Event() mdLeadingIconClick: EventEmitter<MdSearchLeadingIconClickDetail>;\n\n /**\n * Fires when a slotted `trailing` affordance is clicked. The built-in clear\n * (×) and voice (mic) buttons own their dedicated `mdClear` / `mdVoice`\n * events and do NOT trigger this. Only emitted when slotted trailing content\n * is actually present and was the click target.\n */\n @Event() mdTrailingIconClick: EventEmitter<MdSearchTrailingIconClickDetail>;\n\n // ────────────────────────────────────────────────────────────────────────\n // Methods\n // ────────────────────────────────────────────────────────────────────────\n\n /** Open the focused panel. */\n @Method() async show(): Promise<void> {\n this.open = true;\n }\n\n /** Close the focused panel. */\n @Method() async close(): Promise<void> {\n this.open = false;\n }\n\n /** Toggle the focused panel. */\n @Method() async toggle(): Promise<void> {\n this.open = !this.open;\n }\n\n /** Programmatically focus the input. */\n @Method() async focusInput(): Promise<void> {\n this.input?.focus();\n }\n\n // ────────────────────────────────────────────────────────────────────────\n // Internals\n // ────────────────────────────────────────────────────────────────────────\n\n @State() private focused = false;\n @State() private hasSlottedLeading = false;\n @State() private hasSlottedTrailing = false;\n @State() private hasSlottedTrigger = false;\n /** Live-region message announcing the count of available results. */\n @State() private resultsStatus = '';\n /** Bar expansion / icon morph — lags `open` on close so the panel can fade first. */\n @State() private barExpanded = false;\n /** Results panel visibility / fade state — tracks `open` immediately on close. */\n @State() private panelVisible = false;\n /**\n * Whether to render the focus ring. Only true when focus arrives via the\n * keyboard — a text input always matches `:focus-visible` (even on click),\n * so we track focus modality ourselves to keep the ring keyboard-only.\n */\n @State() private showFocusRing = false;\n /** Whether voice recognition is currently active (drives the mic pulse). */\n @State() private listening = false;\n /**\n * Trailing loading↔clear morph state. `loadingMorphMounted` keeps the\n * loading indicator in the DOM through its fade-out so the swap cross-fades\n * in BOTH directions; `loadingMorphIn` is the visible (committed) state that\n * the entry/exit transitions animate between.\n */\n @State() private loadingMorphMounted = false;\n @State() private loadingMorphIn = false;\n\n /**\n * Whether the most recent user interaction came from the keyboard. Mirrors\n * the browser's `:focus-visible` heuristic so the bar's focus ring only shows\n * for keyboard focus — never on click — even when focus is moved\n * programmatically (e.g. when a click opens the view and we focus the input\n * in a later frame).\n */\n private keyboardModality = false;\n\n private input?: HTMLInputElement;\n private rippleEl?: HTMLElement;\n private insetProbeEl?: HTMLElement;\n private trailingSlotEl?: HTMLSlotElement;\n private resizeObserver?: ResizeObserver;\n private previousFocus: HTMLElement | null = null;\n private valueOnFocus: string = '';\n private outsideClickHandler?: (e: MouseEvent) => void;\n private closeTimer?: ReturnType<typeof setTimeout>;\n /**\n * Set when a full-screen open is waiting for the `position: fixed` overlay\n * layout to commit before the panel surface reveal. `componentDidRender`\n * picks it up so the fade animates over an already-settled layout\n * (see `onOpenChange`).\n */\n private pendingFullScreenReveal = false;\n private revealRaf?: number;\n /** Debounce / throttle timers + dedupe state for the `mdSearch` event. */\n private searchDebounceTimer?: ReturnType<typeof setTimeout>;\n private searchMaxWaitTimer?: ReturnType<typeof setTimeout>;\n private pendingSearchValue: string | null = null;\n private lastEmittedSearch: string | null = null;\n\n /** Full-screen close duration — keep in sync with `--_fs-collapse-duration` in md-search.css. */\n private static readonly PANEL_CLOSE_MS = 300;\n /** Loading↔clear morph duration — keep in sync with the CSS morph transition. */\n private static readonly MORPH_MS = 300;\n\n /** Active SpeechRecognition instance while listening (Web Speech API). */\n private recognition?: SpeechRecognitionLike;\n private loadingMorphTimer?: ReturnType<typeof setTimeout>;\n private loadingMorphInRaf?: number;\n\n // ────────────────────────────────────────────────────────────────────────\n // Lifecycle\n // ────────────────────────────────────────────────────────────────────────\n\n connectedCallback() {\n if (typeof document !== 'undefined') {\n // Capture phase so we record the modality before the resulting focus\n // event fires (and before any programmatic focus we trigger on open).\n document.addEventListener('keydown', this.trackKeyboardModality, true);\n document.addEventListener('pointerdown', this.trackPointerModality, true);\n }\n }\n\n componentWillLoad() {\n this.barExpanded = this.open;\n this.panelVisible = this.open;\n // Seed the loading morph so an initial `loading` renders without a flash.\n this.loadingMorphMounted = this.loading;\n this.loadingMorphIn = this.loading;\n // Seed the distinct-until-changed baseline with any initial value so the\n // first user-driven change emits correctly (and a programmatic initial\n // value is treated as already-searched, not re-fetched on mount).\n this.lastEmittedSearch = this.value.trim();\n // Compute the initial announcement here (light-DOM result children already\n // exist) so we don't mutate @State inside componentDidLoad.\n this.updateResultsStatus();\n }\n\n componentDidLoad() {\n this.wireExternalTrigger();\n const shadow = this.el.shadowRoot;\n if (!shadow) return;\n\n const leadingSlot = shadow.querySelector('slot[name=\"leading\"]') as HTMLSlotElement | null;\n const trailingSlot = shadow.querySelector('slot[name=\"trailing\"]') as HTMLSlotElement | null;\n // Kept for mdTrailingIconClick hit-testing against assigned (slotted) nodes.\n this.trailingSlotEl = trailingSlot ?? undefined;\n\n leadingSlot?.addEventListener('slotchange', () => {\n this.hasSlottedLeading = leadingSlot.assignedElements().length > 0;\n });\n trailingSlot?.addEventListener('slotchange', () => {\n this.hasSlottedTrailing = trailingSlot.assignedElements().length > 0;\n });\n\n // Recompute the announcement when the slotted results change in a real\n // browser. The count itself is read from the host's light DOM (see\n // countResults) so it also works in environments without slotchange.\n const resultsSlot = shadow.querySelector(\n 'slot[name=\"results\"]',\n ) as HTMLSlotElement | null;\n resultsSlot?.addEventListener('slotchange', () => this.updateResultsStatus());\n\n const triggerSlot = shadow.querySelector(\n 'slot[name=\"trigger\"]',\n ) as HTMLSlotElement | null;\n triggerSlot?.addEventListener('slotchange', () => {\n this.hasSlottedTrigger = triggerSlot.assignedElements().length > 0;\n });\n this.hasSlottedTrigger = (triggerSlot?.assignedElements().length ?? 0) > 0;\n\n this.measureRippleExtend();\n this.observeHostResize();\n\n if (this.open) this.applyOpenSideEffects();\n }\n\n @Watch('triggerFor')\n @Watch('triggerElement')\n onExternalTriggerChange() {\n this.wireExternalTrigger();\n }\n\n disconnectedCallback() {\n this.unwireExternalTrigger();\n this.clearCloseTimer();\n this.cancelReveal();\n this.clearSearchTimers();\n this.stopVoice();\n this.clearLoadingMorphTimers();\n this.removeOutsideClickHandler();\n this.resizeObserver?.disconnect();\n this.resizeObserver = undefined;\n if (typeof document !== 'undefined') {\n document.removeEventListener('keydown', this.trackKeyboardModality, true);\n document.removeEventListener('pointerdown', this.trackPointerModality, true);\n }\n if (this.layout === 'full-screen' && typeof document !== 'undefined') {\n document.body.style.removeProperty('overflow');\n }\n }\n\n /**\n * Resolve the bar's per-side focus travel to a concrete pixel length and\n * forward it to the ripple as `--md-ripple-extend-inline`. The docked/inline\n * bar springs from `100% - 2 * resting` to `100% - 2 * focused` on focus,\n * which moves each edge out by exactly `resting - focused` (24 → 12 = 12dp\n * default) — the probe resolves that delta. md-ripple\n * applies the extend PER SIDE — `left = rect.left - extend`,\n * `right = rect.right + extend` — so the per-side value it needs is one\n * inset, not two. (Forwarding `2 * inset` over-inflated the wave to ~2×\n * the actual growth, reading as an oversized wash near the press point.)\n * The default inset is the responsive `clamp(0px, 8%, 64px)`, so its\n * concrete length must be measured rather than parsed: a percentage would\n * resolve against the bar instead of the host once the token reaches\n * md-ripple's shadow tree, so we resolve it in JS via the host-anchored\n * probe (see md-search.css for the full rationale).\n */\n /**\n * Resolved trigger mode. Explicit `trigger` wins; otherwise full-screen\n * uses the icon button entry point and docked keeps the resting bar.\n */\n private get effectiveTrigger(): 'bar' | 'icon' {\n // An external opener owns the resting affordance, so the component keeps\n // nothing on screen until it opens — the same \"hidden until invoked\"\n // shape as the icon trigger, minus the icon.\n if (this.hasExternalTrigger) return 'icon';\n if (this.trigger != null) return this.trigger;\n return this.layout === 'full-screen' ? 'icon' : 'bar';\n }\n\n /** Whether the consumer has pointed at an opener outside this element. */\n private get hasExternalTrigger(): boolean {\n return Boolean(this.triggerFor || this.triggerElement);\n }\n\n private get usesIconTrigger(): boolean {\n return this.effectiveTrigger === 'icon';\n }\n\n // ── External trigger ──────────────────────────────────────────────────\n\n /** The element currently wired as the external opener, if any. */\n private wiredTrigger: HTMLElement | null = null;\n\n private resolveExternalTrigger(): HTMLElement | null {\n if (this.triggerElement) return this.triggerElement;\n if (!this.triggerFor || typeof document === 'undefined') return null;\n const sel = this.triggerFor.trim();\n if (!sel) return null;\n try {\n return document.querySelector(sel) as HTMLElement | null;\n } catch {\n // A malformed selector is an authoring mistake, not a reason to break the\n // search — warn once and carry on with the built-in trigger.\n if (typeof console !== 'undefined') {\n console.warn('[md-search] `trigger-for` is not a valid selector:', this.triggerFor);\n }\n return null;\n }\n }\n\n private wireExternalTrigger() {\n const next = this.resolveExternalTrigger();\n if (next === this.wiredTrigger) {\n this.syncExternalTriggerAria();\n return;\n }\n this.unwireExternalTrigger();\n if (!next) return;\n next.addEventListener('click', this.handleExternalTriggerClick);\n this.wiredTrigger = next;\n this.syncExternalTriggerAria();\n }\n\n private unwireExternalTrigger() {\n this.wiredTrigger?.removeEventListener('click', this.handleExternalTriggerClick);\n this.wiredTrigger?.removeAttribute('aria-expanded');\n this.wiredTrigger = null;\n }\n\n /** The element is the consumer's, so it is wired rather than re-rendered. */\n private handleExternalTriggerClick = (e: Event) => {\n if (this.disabled) return;\n // The document-level outside-click handler runs in the CAPTURE phase, and\n // the trigger is outside this element — without this the same click would\n // close an open panel and then reopen it, or open and immediately close.\n e.stopPropagation();\n this.open = !this.open;\n };\n\n private syncExternalTriggerAria() {\n const t = this.wiredTrigger;\n if (!t) return;\n t.setAttribute('aria-haspopup', 'dialog');\n t.setAttribute('aria-expanded', String(this.open));\n }\n\n /** Whether the search bar chrome is in the DOM (icon trigger hides it until open). */\n private get showBar(): boolean {\n return !this.usesIconTrigger || this.barExpanded;\n }\n\n private measureRippleExtend() {\n if (!this.showBar) return;\n const ripple = this.rippleEl;\n if (!ripple) return;\n\n // Full-screen: the bar snaps from its resting (inset / max-720dp) width\n // to the full viewport width on open. md-ripple sizes the wave from the\n // bar's rect AT PRESS TIME — the resting width — so without an extend the\n // wave only covers the initial bar and stops half-way across the\n // expanded full-screen bar. Inflate the farthest-corner reach by exactly\n // the growth delta (viewport − resting bar width). That sizes the wave\n // to finish filling right as it reaches the expanded bar's far edge —\n // not so much that it fills instantly (which reads as a flat wash) — and\n // keeps the wave's origin near the press point. When the bar is already\n // open its width ≈ the viewport, so the delta collapses to ~0 and the\n // normal press-sized ripple is used.\n if (this.layout === 'full-screen' && typeof window !== 'undefined') {\n const bar = this.el.shadowRoot?.querySelector('.md-search__bar') as HTMLElement | null;\n const barWidth = bar?.getBoundingClientRect().width ?? 0;\n const delta = window.innerWidth - barWidth;\n if (delta > 1) {\n ripple.style.setProperty('--md-ripple-extend-inline', `${delta}px`);\n return;\n }\n }\n\n const probe = this.insetProbeEl;\n if (!probe) return;\n const inset = probe.getBoundingClientRect().width;\n if (!Number.isFinite(inset) || inset <= 0) {\n ripple.style.removeProperty('--md-ripple-extend-inline');\n return;\n }\n ripple.style.setProperty('--md-ripple-extend-inline', `${inset}px`);\n }\n\n private observeHostResize() {\n if (typeof ResizeObserver === 'undefined') return;\n this.resizeObserver = new ResizeObserver(() => {\n // The ripple extent only matters for the resting → press expansion, which\n // is measured before the view opens. Re-measuring while the bar is\n // expanded (or mid open/close transition) would call getBoundingClientRect\n // — a forced synchronous reflow — on the very frames the full-screen\n // reveal animates, stuttering it. Skip until the bar is back at rest.\n if (this.barExpanded) return;\n this.measureRippleExtend();\n });\n this.resizeObserver.observe(this.el);\n }\n\n // ────────────────────────────────────────────────────────────────────────\n // Open / close side effects\n // ────────────────────────────────────────────────────────────────────────\n\n @Watch('open')\n onOpenChange(newVal: boolean, oldVal: boolean) {\n if (newVal === oldVal) return;\n this.clearCloseTimer();\n this.cancelReveal();\n if (newVal) {\n // Expand the bar first — in full-screen this flips the host to the\n // position:fixed overlay (a one-off layout + paint). The panel surface\n // reveal is deferred to AFTER that layout has committed and painted\n // (see componentDidRender) so the fade is a pure compositor\n // transition over a settled layout. Doing both in the same frame made\n // the reveal compete with the overlay relayout and stuttered it.\n this.barExpanded = true;\n if (this.layout === 'full-screen') {\n this.pendingFullScreenReveal = true;\n } else {\n // Docked keeps the host in-flow, so there's no overlay relayout to\n // wait on — reveal synchronously.\n this.panelVisible = true;\n }\n this.applyOpenSideEffects();\n this.updateResultsStatus();\n this.syncExternalTriggerAria();\n this.mdOpen.emit();\n } else {\n // Panel surface fades out first; bar contraction follows after the fade.\n this.pendingFullScreenReveal = false;\n this.panelVisible = false;\n // Closing the view (Escape, back button, outside/dismiss) ends any\n // active voice session — the input has lost its search context.\n this.stopVoice();\n this.removeOutsideClickHandler();\n this.updateResultsStatus();\n this.mdClose.emit();\n this.syncExternalTriggerAria();\n this.closeTimer = setTimeout(() => {\n this.barExpanded = false;\n this.finishCloseSideEffects();\n // An external opener is the thing the user left to get here, so it is\n // where focus belongs on the way back — the built-in trigger gets this\n // for free by being inside the component.\n if (this.wiredTrigger && typeof document !== 'undefined') {\n const active = document.activeElement;\n const inSearch = active === this.el || this.el.contains(active as Node);\n if (active === document.body || inSearch) this.wiredTrigger.focus?.();\n }\n this.closeTimer = undefined;\n }, MdSearch.PANEL_CLOSE_MS);\n }\n }\n\n @Watch('loading')\n onLoadingChange(newVal: boolean) {\n // Re-announce so screen readers hear \"Searching…\" while the fetch is in\n // flight and the result count once it resolves.\n this.updateResultsStatus();\n this.updateLoadingMorph(newVal);\n }\n\n /**\n * Drive the trailing loading↔clear cross-fade. Mounting the loading\n * indicator immediately (and committing the visible state on the next frame)\n * animates the entry; keeping it mounted for one morph duration after\n * `loading` clears animates the exit before it unmounts.\n */\n private updateLoadingMorph(loading: boolean) {\n this.clearLoadingMorphTimers();\n if (loading) {\n this.loadingMorphMounted = true;\n if (typeof requestAnimationFrame === 'undefined') {\n this.loadingMorphIn = true;\n return;\n }\n this.loadingMorphInRaf = requestAnimationFrame(() => {\n this.loadingMorphInRaf = undefined;\n if (this.loading) this.loadingMorphIn = true;\n });\n } else {\n this.loadingMorphIn = false;\n this.loadingMorphTimer = setTimeout(() => {\n this.loadingMorphTimer = undefined;\n if (!this.loading) this.loadingMorphMounted = false;\n }, MdSearch.MORPH_MS);\n }\n }\n\n private clearLoadingMorphTimers() {\n if (this.loadingMorphTimer) {\n clearTimeout(this.loadingMorphTimer);\n this.loadingMorphTimer = undefined;\n }\n if (this.loadingMorphInRaf !== undefined && typeof cancelAnimationFrame !== 'undefined') {\n cancelAnimationFrame(this.loadingMorphInRaf);\n this.loadingMorphInRaf = undefined;\n }\n }\n\n componentDidRender() {\n if (!this.pendingFullScreenReveal) return;\n // The host's position:fixed overlay layout (floating bar + the\n // full-viewport panel surface) is now committed to the DOM and will\n // paint at the end of this frame while the panel is still transparent.\n // Flip the reveal on the NEXT frame so the opacity fade starts\n // from that painted, settled layout — no relayout on the animating\n // frames, which is what made the open read as stepped / slow.\n this.pendingFullScreenReveal = false;\n if (typeof requestAnimationFrame === 'undefined') {\n this.panelVisible = true;\n return;\n }\n this.revealRaf = requestAnimationFrame(() => {\n this.revealRaf = undefined;\n // Guard against a close that landed between the layout commit and here.\n if (this.open) this.panelVisible = true;\n });\n }\n\n private cancelReveal() {\n if (this.revealRaf !== undefined && typeof cancelAnimationFrame !== 'undefined') {\n cancelAnimationFrame(this.revealRaf);\n }\n this.revealRaf = undefined;\n }\n\n private clearCloseTimer() {\n if (this.closeTimer === undefined) return;\n clearTimeout(this.closeTimer);\n this.closeTimer = undefined;\n }\n\n private applyOpenSideEffects() {\n if (typeof document === 'undefined') return;\n this.previousFocus = (document.activeElement as HTMLElement) ?? null;\n if (this.layout === 'full-screen') {\n // Lock document scroll. Compensate for the removed scrollbar with an\n // equal-width padding so the page (and the fixed overlay) doesn't\n // shift sideways when the scrollbar disappears — that lateral jump\n // was the main source of the open/close jitter.\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n if (scrollbarWidth > 0) {\n document.body.style.paddingInlineEnd = `${scrollbarWidth}px`;\n }\n document.body.style.overflow = 'hidden';\n }\n this.attachOutsideClickHandler();\n if (typeof requestAnimationFrame !== 'undefined') {\n requestAnimationFrame(() => this.focusInitialTarget());\n } else {\n this.focusInitialTarget();\n }\n }\n\n /**\n * Focus the open view's initial target. Defaults to the text field so the\n * user can type immediately; `initialFocus=\"leading\"` focuses the leading\n * button instead. (The resting bar's leading-icon-first tab order is handled\n * by DOM order, not here.)\n */\n private focusInitialTarget() {\n const target = this.resolveInitialFocusTarget();\n // preventScroll: focusing the input must not trigger a scroll-into-view,\n // which forces a synchronous layout on the same frame the open transition\n // starts and stutters the reveal.\n target?.focus?.({ preventScroll: true });\n }\n\n private resolveInitialFocusTarget(): HTMLElement | undefined {\n // Opening the search view is about typing, so by default focus the text\n // field. The M3 \"initial focus lands on a leading icon, else the text\n // field\" rule is satisfied by the RESTING tab order: a slotted interactive\n // leading icon button is the first tabbable element, otherwise the input.\n // `initialFocus=\"leading\"` opts the open view into focusing the leading\n // button instead.\n if (this.initialFocus === 'leading') {\n return this.leadingFocusTarget() ?? this.input;\n }\n return this.input;\n }\n\n /**\n * The focusable element representing the leading action: a focusable slotted\n * leading element (or its first inner focusable), falling back to the\n * built-in leading button when it's interactive (i.e. the bar is open).\n */\n private leadingFocusTarget(): HTMLElement | undefined {\n const focusableSel =\n 'button, a[href], input, select, textarea, md-icon-button, md-button, [tabindex]:not([tabindex=\"-1\"])';\n const slotted = this.el.querySelector('[slot=\"leading\"]') as HTMLElement | null;\n if (slotted) {\n if (typeof slotted.focus === 'function' && slotted.getAttribute('tabindex') !== '-1') {\n if (slotted.matches(focusableSel)) return slotted;\n }\n const inner = slotted.querySelector(focusableSel) as HTMLElement | null;\n if (inner) return inner;\n return slotted;\n }\n const builtin = this.el.shadowRoot?.querySelector(\n '.md-search__leading-button',\n ) as HTMLElement | null;\n if (builtin && builtin.getAttribute('tabindex') !== '-1') return builtin;\n return undefined;\n }\n\n private finishCloseSideEffects() {\n if (typeof document !== 'undefined' && this.layout === 'full-screen') {\n document.body.style.removeProperty('overflow');\n document.body.style.removeProperty('padding-inline-end');\n }\n this.previousFocus?.focus?.();\n this.previousFocus = null;\n }\n\n private attachOutsideClickHandler() {\n if (!this.dismissOnOutsideClick || typeof document === 'undefined') return;\n this.outsideClickHandler = (e: MouseEvent) => {\n const target = e.target as Node | null;\n if (!target) return;\n const path = e.composedPath ? e.composedPath() : [];\n if (path.includes(this.el)) return;\n if (this.el.contains(target)) return;\n // An external trigger is by definition outside this element. Closing on\n // its mousedown would fight its own click handler — the view would shut\n // and reopen in the same gesture — so let the trigger own the toggle.\n const trigger = this.wiredTrigger;\n if (trigger && (path.includes(trigger) || trigger.contains(target))) return;\n this.open = false;\n };\n document.addEventListener('mousedown', this.outsideClickHandler, true);\n }\n\n private removeOutsideClickHandler() {\n if (this.outsideClickHandler && typeof document !== 'undefined') {\n document.removeEventListener('mousedown', this.outsideClickHandler, true);\n }\n this.outsideClickHandler = undefined;\n }\n\n // ────────────────────────────────────────────────────────────────────────\n // Bar handlers\n // ────────────────────────────────────────────────────────────────────────\n\n private handleTriggerActivate = () => {\n if (this.disabled) return;\n if (!this.open) this.open = true;\n };\n\n private handleTriggerClick = (e: MouseEvent) => {\n e.stopPropagation();\n this.handleTriggerActivate();\n };\n\n private handleTriggerKeyDown = (e: KeyboardEvent) => {\n if (e.key !== 'Enter' && e.key !== ' ') return;\n e.preventDefault();\n this.handleTriggerActivate();\n };\n\n private handleBarClick = (e: MouseEvent) => {\n if (this.disabled) return;\n // Ignore clicks that originated inside the trailing cluster (those\n // belong to icon buttons / avatars) so they don't toggle the panel.\n const target = e.target as HTMLElement;\n if (target.closest('[part=\"trailing\"]')) return;\n if (!this.open) this.open = true;\n this.input?.focus();\n };\n\n private handleLeadingClick = (e: MouseEvent) => {\n if (this.disabled) return;\n // The default leading button is interactive only while the bar is open —\n // clicking the morphed back-arrow dismisses the search. When closed, it is\n // non-interactive (pointer-events: none in CSS) so clicks fall through to\n // the bar's own handler which focuses the input. A custom slotted `leading`\n // icon, by contrast, is interactive in any state.\n const slotted = this.hasSlottedLeading;\n const interactiveDefault = !slotted && this.open;\n // Closed resting search glyph (no slot, not open): not a click target —\n // let it bubble to the bar to focus the input. No event.\n if (!slotted && !interactiveDefault) return;\n\n this.mdLeadingIconClick.emit({ value: this.value, open: this.open });\n\n // Preserve the default back-button dismiss behaviour; the slotted variant\n // leaves bar semantics to the consumer.\n if (interactiveDefault) {\n e.stopPropagation();\n this.open = false;\n }\n };\n\n private handleTrailingClick = (e: MouseEvent) => {\n if (this.disabled) return;\n const path = (typeof e.composedPath === 'function'\n ? e.composedPath()\n : []) as Array<EventTarget>;\n const nodes = path.length ? path : [e.target as EventTarget];\n // The clear (×) and voice (mic) affordances emit their own dedicated\n // events (mdClear / mdVoice) — don't double-fire a generic trailing event.\n const isOwnAffordance = nodes.some((n) => {\n const cl = (n as Partial<HTMLElement>)?.classList;\n return (\n !!cl?.contains?.('md-search__clear') ||\n !!cl?.contains?.('md-search__voice')\n );\n });\n if (isOwnAffordance) return;\n // Only emit when a slotted trailing affordance is actually present and was\n // the click target (ignore empty wrapper padding / the morph box). Read the\n // slot's assigned nodes directly rather than the slotchange-driven state,\n // which isn't seeded for content present at first render.\n const assigned = this.trailingSlotEl?.assignedElements?.() ?? [];\n if (assigned.length === 0) return;\n const target = nodes[0] as Node | undefined;\n const hitSlotted = assigned.some(\n (el) => el === target || (target ? el.contains(target) : false),\n );\n if (!hitSlotted) return;\n\n // Treat the slotted affordance like the built-in icon buttons: don't let\n // the click bubble to the bar and toggle the panel.\n e.stopPropagation();\n this.mdTrailingIconClick.emit({ value: this.value, open: this.open });\n };\n\n private handleClearClick = (e: MouseEvent) => {\n e.stopPropagation();\n if (this.disabled) return;\n this.value = '';\n this.input?.focus();\n this.mdInput.emit({ value: '' });\n // Clearing should drop results immediately — flush past any pending\n // debounce so the empty query reaches the consumer without delay.\n this.pendingSearchValue = '';\n this.flushSearch();\n this.mdClear.emit();\n };\n\n // ────────────────────────────────────────────────────────────────────────\n // Voice search (Web Speech API)\n // ────────────────────────────────────────────────────────────────────────\n\n /** Resolve the (possibly prefixed) SpeechRecognition constructor, if any. */\n private getSpeechRecognitionCtor(): SpeechRecognitionCtor | undefined {\n if (typeof window === 'undefined') return undefined;\n const w = window as unknown as {\n SpeechRecognition?: SpeechRecognitionCtor;\n webkitSpeechRecognition?: SpeechRecognitionCtor;\n };\n return w.SpeechRecognition || w.webkitSpeechRecognition;\n }\n\n /** Whether the Web Speech API is available in this environment. */\n private isVoiceSupported(): boolean {\n return !!this.getSpeechRecognitionCtor();\n }\n\n private resolveVoiceLang(): string {\n if (typeof document !== 'undefined') {\n const lang = this.el.getAttribute('lang') || document.documentElement.lang;\n if (lang) return lang;\n }\n return 'en-US';\n }\n\n private handleVoiceClick = (e: MouseEvent) => {\n // Keep the bar's click handler from re-toggling the panel.\n e.stopPropagation();\n if (this.disabled) return;\n if (this.listening) {\n this.stopVoice();\n } else {\n this.startVoice();\n }\n };\n\n /** Start streaming voice transcription into the input. No-op if unsupported. */\n @Method() async startVoice(): Promise<void> {\n this.startVoiceInternal();\n }\n\n /** Stop any active voice transcription. */\n @Method() async stopVoice(): Promise<void> {\n this.listening = false;\n if (this.recognition) {\n try {\n this.recognition.stop();\n } catch {\n /* stop() throws if not started — safe to ignore. */\n }\n }\n }\n\n private startVoiceInternal() {\n const Ctor = this.getSpeechRecognitionCtor();\n if (!Ctor || this.disabled || this.listening) return;\n if (this.recognition) {\n try {\n this.recognition.abort();\n } catch {\n /* no-op */\n }\n this.recognition = undefined;\n }\n const recognition = new Ctor();\n recognition.lang = this.resolveVoiceLang();\n recognition.interimResults = true;\n recognition.continuous = false;\n recognition.maxAlternatives = 1;\n recognition.onresult = this.handleVoiceResult;\n recognition.onerror = this.handleVoiceEnd;\n recognition.onend = this.handleVoiceEnd;\n this.recognition = recognition;\n // Opening the view surfaces streamed results just like typing would.\n if (!this.open) this.open = true;\n this.input?.focus();\n this.listening = true;\n try {\n recognition.start();\n } catch {\n // start() throws if invoked while already running — reset our state.\n this.listening = false;\n this.recognition = undefined;\n }\n }\n\n private handleVoiceResult = (event: SpeechRecognitionEventLike) => {\n let transcript = '';\n let isFinal = false;\n const results = event.results;\n for (let i = 0; i < results.length; i++) {\n transcript += results[i][0].transcript;\n if (results[i].isFinal) isFinal = true;\n }\n transcript = transcript.replace(/^\\s+/, '');\n // Mirror the transcript into the input and drive the normal typed flow.\n this.value = transcript;\n if (!this.open) this.open = true;\n this.mdInput.emit({ value: transcript });\n this.scheduleSearch(transcript);\n this.mdVoice.emit({ value: transcript, final: isFinal });\n if (isFinal) {\n // Flush the final query immediately, then end the session.\n this.pendingSearchValue = transcript;\n this.flushSearch();\n this.stopVoice();\n }\n };\n\n private handleVoiceEnd = () => {\n this.listening = false;\n this.recognition = undefined;\n };\n\n private handleInput = (e: Event) => {\n const next = (e.target as HTMLInputElement).value;\n this.value = next;\n // Typing activates the search view (it isn't opened by focus alone).\n if (!this.open && !this.disabled) this.open = true;\n // mdInput is immediate (every keystroke); mdSearch is debounced/throttled.\n this.mdInput.emit({ value: next });\n this.scheduleSearch(next);\n };\n\n // ────────────────────────────────────────────────────────────────────────\n // Debounced search emission (debounce + throttle + distinctUntilChanged)\n // ────────────────────────────────────────────────────────────────────────\n\n /**\n * Queue an `mdSearch` emission for `value`, honouring `debounce` (trailing\n * wait for a typing pause) and `throttle` (maxWait — guarantees an emit at\n * least every `throttle` ms during sustained typing). With both at `0` the\n * emit is synchronous. Either way the actual emit is de-duplicated in\n * `flushSearch` (distinct-until-changed on the trimmed query).\n */\n private scheduleSearch(value: string) {\n this.pendingSearchValue = value;\n const debounceMs = Math.max(0, Number(this.debounce) || 0);\n const throttleMs = Math.max(0, Number(this.throttle) || 0);\n\n if (debounceMs === 0 && throttleMs === 0) {\n this.flushSearch();\n return;\n }\n\n // (Re)start the trailing debounce timer on every keystroke.\n if (this.searchDebounceTimer) clearTimeout(this.searchDebounceTimer);\n this.searchDebounceTimer = setTimeout(() => this.flushSearch(), debounceMs);\n\n // Throttle / maxWait: if the user keeps typing past `throttle` ms without\n // the debounce ever settling, force an emit so interim results still show.\n if (throttleMs > 0 && this.searchMaxWaitTimer === undefined) {\n this.searchMaxWaitTimer = setTimeout(() => this.flushSearch(), throttleMs);\n }\n }\n\n /** Emit the pending query now (clearing timers), if it differs from the last. */\n private flushSearch() {\n this.clearSearchTimers();\n if (this.pendingSearchValue === null) return;\n const value = this.pendingSearchValue;\n this.pendingSearchValue = null;\n const normalized = value.trim();\n if (normalized === this.lastEmittedSearch) return; // distinctUntilChanged\n this.lastEmittedSearch = normalized;\n this.mdSearch.emit({ value: normalized });\n }\n\n private clearSearchTimers() {\n if (this.searchDebounceTimer) {\n clearTimeout(this.searchDebounceTimer);\n this.searchDebounceTimer = undefined;\n }\n if (this.searchMaxWaitTimer) {\n clearTimeout(this.searchMaxWaitTimer);\n this.searchMaxWaitTimer = undefined;\n }\n }\n\n /** Global modality trackers (capture phase) — see `keyboardModality`. */\n private trackKeyboardModality = () => {\n this.keyboardModality = true;\n };\n private trackPointerModality = () => {\n this.keyboardModality = false;\n };\n\n private handleInputFocus = () => {\n // Focus (e.g. via Tab) must NOT open the search view — it only moves focus.\n // The view opens on explicit activation: typing, Enter / Space, or click\n // (M3 keyboard spec: \"Space or Enter activates the search text field\").\n this.focused = true;\n // The focus ring is keyboard-only: show it only when the latest interaction\n // was via the keyboard (Tab, Enter / Space activation, arrows).\n this.showFocusRing = this.keyboardModality;\n this.valueOnFocus = this.value;\n };\n\n private handleInputBlur = () => {\n this.focused = false;\n this.showFocusRing = false;\n if (this.value !== this.valueOnFocus) {\n this.mdChange.emit({ value: this.value });\n }\n };\n\n private handleInputKeyDown = (e: KeyboardEvent) => {\n if (this.disabled) return;\n // When closed, Enter / Space activate the field for input (open the view)\n // rather than submitting / inserting a space.\n if (!this.open) {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.open = true;\n }\n return;\n }\n if (e.key === 'Enter') {\n // Submitting should fetch the current query at once — flush past any\n // pending debounce before notifying submit listeners.\n this.pendingSearchValue = this.value;\n this.flushSearch();\n this.mdSubmit.emit({ value: this.value });\n }\n };\n\n @Listen('keydown', { target: 'window' })\n handleWindowKeyDown(e: KeyboardEvent) {\n if (!this.open) return;\n if (e.key === 'Escape' && this.escapeCloses) {\n e.preventDefault();\n this.open = false;\n return;\n }\n // Arrow keys move focus between the slotted search result items (M3\n // keyboard spec). Down from the input lands on the first item; Up from the\n // first item returns to the input.\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n if (this.moveResultFocus(e.key === 'ArrowDown' ? 1 : -1)) {\n e.preventDefault();\n }\n return;\n }\n // Focus trap (full-screen only — docked is non-modal so Tab should\n // continue to the document like any other popup).\n if (this.layout !== 'full-screen' || e.key !== 'Tab') return;\n const focusables = this.collectFocusables();\n if (focusables.length === 0) return;\n const first = focusables[0];\n const last = focusables[focusables.length - 1];\n const active = (this.el.shadowRoot?.activeElement ?? document.activeElement) as HTMLElement | null;\n if (e.shiftKey && active === first) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && active === last) {\n e.preventDefault();\n first.focus();\n }\n }\n\n private collectFocusables(): HTMLElement[] {\n const root = this.el.shadowRoot;\n if (!root) return [];\n const sel =\n 'a[href], button, input, select, textarea, [tabindex]:not([tabindex=\"-1\"]), md-icon-button, md-button';\n const inShadow = Array.from(root.querySelectorAll(sel)) as HTMLElement[];\n const inLight = Array.from(this.el.querySelectorAll(sel)) as HTMLElement[];\n return [...inShadow, ...inLight].filter((node) => {\n if (node.hasAttribute('disabled')) return false;\n const tabindex = node.getAttribute('tabindex');\n return tabindex !== '-1';\n });\n }\n\n // ────────────────────────────────────────────────────────────────────────\n // Autosuggest announcements (live region)\n // ────────────────────────────────────────────────────────────────────────\n\n /**\n * Count the result items the consumer placed in `slot=\"results\"`. Reads the\n * host's light DOM (the slotted elements are children of `<md-search>`) so it\n * works regardless of slot/flatten support. Prefers semantic item selectors\n * (`md-list-item`, `[role=\"option\"]`, `<li>`) so a single wrapping list\n * doesn't read as one result; falls back to the number of slotted containers\n * when no items are found.\n */\n private countResults(): number {\n const containers = Array.from(\n this.el.querySelectorAll('[slot=\"results\"]'),\n ) as HTMLElement[];\n const itemSelector =\n 'md-list-item, [role=\"option\"], li, [data-search-result]';\n const items = new Set<Element>();\n for (const el of containers) {\n if (el.matches(itemSelector)) items.add(el);\n el.querySelectorAll(itemSelector).forEach((node) => items.add(node));\n }\n return items.size > 0 ? items.size : containers.length;\n }\n\n /**\n * The slotted result items, in DOM order. Uses the same semantic item\n * selectors as the announcement counter so arrow navigation steps through\n * the real list rows rather than a wrapping container.\n */\n private resultItems(): HTMLElement[] {\n const itemSelector =\n 'md-list-item, [role=\"option\"], [role=\"menuitem\"], [data-search-result], li';\n const containers = Array.from(\n this.el.querySelectorAll('[slot=\"results\"]'),\n ) as HTMLElement[];\n const items = new Set<HTMLElement>();\n for (const el of containers) {\n if (el.matches(itemSelector)) items.add(el);\n el.querySelectorAll(itemSelector).forEach((node) =>\n items.add(node as HTMLElement),\n );\n }\n return Array.from(items);\n }\n\n /**\n * Move focus across result items by `delta` (+1 / -1). Returns `true` if it\n * handled the key (so the caller can `preventDefault`). Stepping up past the\n * first item returns focus to the text field.\n */\n private moveResultFocus(delta: number): boolean {\n const items = this.resultItems();\n if (items.length === 0) return false;\n const active = (this.el.shadowRoot?.activeElement ??\n (typeof document !== 'undefined' ? document.activeElement : null)) as\n | HTMLElement\n | null;\n const current = active\n ? items.findIndex((it) => it === active || it.contains(active))\n : -1;\n\n if (delta > 0) {\n const next = current < 0 ? 0 : Math.min(current + 1, items.length - 1);\n this.focusResultItem(items[next]);\n return true;\n }\n // delta < 0\n if (current <= 0) {\n this.input?.focus();\n return true;\n }\n this.focusResultItem(items[current - 1]);\n return true;\n }\n\n private focusResultItem(item: HTMLElement) {\n // Make the row programmatically focusable if the consumer hasn't (roving\n // tabindex) so .focus() lands and screen readers announce the row.\n if (item.getAttribute('tabindex') === null) {\n item.setAttribute('tabindex', '-1');\n }\n item.focus?.();\n }\n\n /**\n * Recompute the polite live-region message. Only speaks while the panel is\n * open so suggestions are announced as they appear / change; clears when\n * closed so re-opening re-announces.\n */\n private updateResultsStatus() {\n if (!this.announceResults || !this.open) {\n this.resultsStatus = '';\n return;\n }\n // While a fetch is in flight, announce the loading state rather than a\n // (stale) count so screen-reader users know results are on the way.\n if (this.loading) {\n this.resultsStatus = this.loadingLabel;\n return;\n }\n const count = this.countResults();\n if (count > 0) {\n this.resultsStatus = this.resultsLabel.replace('{count}', String(count));\n } else if (this.shouldShowVisibleEmptyState()) {\n // The visible empty state (role=\"status\", aria-live) owns this copy.\n this.resultsStatus = '';\n } else {\n this.resultsStatus = this.value.trim() ? this.noResultsLabel : '';\n }\n }\n\n /**\n * Whether to render the on-screen empty state in the results panel.\n * Requires an open panel, a non-empty query, zero detected result rows,\n * and no in-flight loading fetch.\n */\n private shouldShowVisibleEmptyState(): boolean {\n return (\n this.panelVisible &&\n !this.loading &&\n this.countResults() === 0 &&\n this.value.trim().length > 0\n );\n }\n\n /**\n * Whether the results panel should render visible chrome (divider, drawer,\n * empty state, slotted list). When the bar is open but there is nothing to\n * show yet — no query, no rows, not loading — keep the bar alone so a stray\n * divider or empty panel shell does not appear under it.\n */\n private shouldShowResultsChrome(): boolean {\n if (!this.panelVisible || this.loading) return false;\n if (this.countResults() > 0) return true;\n return this.shouldShowVisibleEmptyState();\n }\n\n /**\n * Whether the results panel surface is visible (opacity / pointer-events).\n * Full-screen open is always an edge-to-edge overlay once the panel commits,\n * even before slotted rows are detected. Docked / inline only open the drawer\n * when there is meaningful content to show.\n */\n private isPanelRevealed(): boolean {\n if (this.layout === 'full-screen') {\n return this.panelVisible && this.barExpanded;\n }\n return this.shouldShowResultsChrome();\n }\n\n /**\n * The accessible name for the bar / input. Falls back to the hinted search\n * text (`placeholder`) per the M3 labeling guidance when `inputAriaLabel`\n * isn't set.\n */\n private effectiveLabel(): string {\n return this.inputAriaLabel || this.placeholder || 'Search';\n }\n\n // ────────────────────────────────────────────────────────────────────────\n // Render helpers\n // ────────────────────────────────────────────────────────────────────────\n\n /**\n * Resolve the open-state glyph. When a consumer hasn't passed\n * `open-leading-icon` we fall back to a variant-aware default —\n * `chevron_left` for the Expressive `contained` bar (whose pill shape\n * pairs better with a caret) and the spec-canonical `arrow_back` for\n * the baseline `divided` bar.\n */\n private resolveOpenLeadingIcon(): string {\n if (this.openLeadingIcon) return this.openLeadingIcon;\n return this.variant === 'contained' ? 'chevron_left' : 'arrow_back';\n }\n\n private renderTrigger() {\n if (!this.usesIconTrigger || this.barExpanded) return null;\n // An external opener replaces the built-in one — two ways in would be a\n // confusing surface, and only one of them can own the focus round trip.\n if (this.hasExternalTrigger) return null;\n\n return (\n <div class=\"md-search__trigger\" part=\"trigger\">\n <slot name=\"trigger\">\n <md-icon-button\n class=\"md-search__trigger-button\"\n part=\"trigger-button\"\n icon={this.triggerIcon}\n variant=\"standard\"\n size=\"md\"\n disabled={this.disabled}\n aria-label={this.effectiveLabel()}\n onClick={this.handleTriggerClick}\n onKeyDown={this.handleTriggerKeyDown}\n ></md-icon-button>\n </slot>\n </div>\n );\n }\n\n private renderLeading() {\n // The leading button is always rendered with BOTH glyphs stacked so the\n // search ↔ back-arrow change reads as a single icon morphing rather than\n // two icons swapping. The `--button` modifier flips on as soon as the\n // bar is open in either layout (M3 docked panels traditionally keep the\n // search glyph, but the morph affordance reads better and ties the\n // dismiss action to a single, predictable spot).\n const showCloseButton = this.barExpanded;\n const ariaLabel = showCloseButton ? 'Close search' : 'Search';\n const openGlyph = this.resolveOpenLeadingIcon();\n\n return (\n <span\n class={{\n 'md-search__leading': true,\n 'md-search__leading--button': showCloseButton,\n }}\n part=\"leading\"\n onClick={this.handleLeadingClick}\n >\n <slot name=\"leading\">\n <button\n type=\"button\"\n class=\"md-search__leading-button\"\n aria-label={ariaLabel}\n tabIndex={showCloseButton ? 0 : -1}\n disabled={this.disabled}\n >\n <span\n class=\"md-search__leading-state-layer\"\n part=\"leading-state-layer\"\n aria-hidden=\"true\"\n ></span>\n <span\n class=\"md-search__icon md-search__icon--resting material-symbols-outlined\"\n aria-hidden=\"true\"\n >\n {this.leadingIcon}\n </span>\n <span\n class=\"md-search__icon md-search__icon--open material-symbols-outlined\"\n aria-hidden=\"true\"\n >\n {openGlyph}\n </span>\n </button>\n </slot>\n </span>\n );\n }\n\n private renderClearButton() {\n if (!this.showClearButton || !this.value) return null;\n return (\n <button\n type=\"button\"\n class=\"md-search__icon-button md-search__clear\"\n part=\"clear-button\"\n aria-label=\"Clear search\"\n onClick={this.handleClearClick}\n >\n <span class=\"md-search__icon material-symbols-outlined\" aria-hidden=\"true\">\n close\n </span>\n </button>\n );\n }\n\n private renderVoiceButton() {\n return (\n <button\n type=\"button\"\n class={{\n 'md-search__icon-button': true,\n 'md-search__voice': true,\n 'md-search__voice--listening': this.listening,\n }}\n part=\"voice-button\"\n aria-label={this.listening ? 'Stop voice search' : 'Search by voice'}\n aria-pressed={this.listening ? 'true' : 'false'}\n disabled={this.disabled}\n onClick={this.handleVoiceClick}\n >\n <span class=\"md-search__icon material-symbols-outlined\" aria-hidden=\"true\">\n mic\n </span>\n </button>\n );\n }\n\n private renderTrailing() {\n const showClear = this.showClearButton && this.value.length > 0;\n // The loading indicator stays mounted through its fade-out (morph), so the\n // box is shown whenever there's a clear button OR the morph is in-flight.\n const showMorph = showClear || this.loadingMorphMounted;\n const showVoice = this.voiceSearch && this.isVoiceSupported();\n\n // Don't render an empty trailing wrapper: only mount it when it has a morph\n // box, a mic, or (potential) slotted content. The named slot itself is the\n // projection point and must stay so slotchange detection keeps working.\n return (\n <span\n class=\"md-search__trailing\"\n part=\"trailing\"\n onClick={this.handleTrailingClick}\n >\n {/* Loading indicator and clear-× share one fixed-size box and cross-fade\n (scale + rotate) in BOTH directions as `loading` toggles, so the\n cluster width never jumps. */}\n {showMorph && (\n <span\n class={{\n 'md-search__trailing-morph': true,\n 'md-search__trailing-morph--loading': this.loadingMorphIn,\n }}\n >\n {this.loadingMorphMounted && (\n // `loader` swaps the spinner (e.g. for a circular\n // md-progress-indicator); the default keeps the morph classes and\n // the exported shape part.\n <slot name=\"loader\">\n <LazyLoadingIndicator\n class=\"md-search__loading\"\n part=\"loading\"\n exportparts=\"shape:loading-shape\"\n label={this.loadingLabel}\n ></LazyLoadingIndicator>\n </slot>\n )}\n {showClear && this.renderClearButton()}\n </span>\n )}\n {showVoice && this.renderVoiceButton()}\n <slot name=\"trailing\"></slot>\n </span>\n );\n }\n\n // ────────────────────────────────────────────────────────────────────────\n // Render\n // ────────────────────────────────────────────────────────────────────────\n\n render() {\n const isFullScreen = this.layout === 'full-screen';\n const hostStyle: Record<string, string> = {};\n if (this.maxBlockSize) {\n hostStyle['--_max-block-size'] = this.maxBlockSize;\n }\n\n return (\n <Host\n class={{\n 'md-search': true,\n [`md-search--${this.variant}`]: true,\n [`md-search--${this.layout}`]: true,\n [`md-search--trigger-${this.effectiveTrigger}`]: true,\n 'md-search--open': this.barExpanded,\n 'md-search--panel-content':\n this.layout === 'full-screen'\n ? this.isPanelRevealed()\n : this.shouldShowResultsChrome(),\n 'md-search--closed': !this.barExpanded,\n 'md-search--has-slotted-trigger': this.hasSlottedTrigger,\n 'md-search--disabled': this.disabled,\n 'md-search--focused': this.focused,\n 'md-search--has-value': this.value.length > 0,\n 'md-search--has-slotted-leading': this.hasSlottedLeading,\n 'md-search--has-slotted-trailing': this.hasSlottedTrailing,\n 'md-search--full-width': this.fullWidth,\n [`md-search--elevation-${this.elevation}`]: true,\n }}\n style={Object.keys(hostStyle).length > 0 ? hostStyle : undefined}\n >\n {/* Hidden probe — resolves the bar's per-side focus travel\n (resting − focused inset) to a pixel length so\n measureRippleExtend() can forward the value to <md-ripple>.\n Lives directly under :host (NOT inside the bar) so its\n absolute-positioning containing block matches the bar's,\n which is what makes any percentage in the insets resolve\n against the same inline-size for both. */}\n <span\n class=\"md-search__inset-probe\"\n ref={(el) => (this.insetProbeEl = el as HTMLElement)}\n aria-hidden=\"true\"\n ></span>\n\n {/* Polite live region — announces suggestion / result availability to\n assistive tech as the slotted results change (M3 autosuggest). */}\n <div\n class=\"md-search__a11y-status\"\n part=\"status\"\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {this.resultsStatus}\n </div>\n\n {this.renderTrigger()}\n\n {/* Search bar — hidden for full-screen icon trigger until open */}\n {this.showBar && (\n <div\n class={{\n 'md-search__bar': true,\n 'md-search__bar--focused': this.focused,\n 'md-search__bar--focus-ring': this.showFocusRing,\n }}\n part=\"bar\"\n onClick={this.handleBarClick}\n >\n {!this.disabled && (\n <md-ripple ref={(el) => (this.rippleEl = el as HTMLElement)}></md-ripple>\n )}\n <span class=\"md-search__state-layer\" part=\"state-layer\" aria-hidden=\"true\"></span>\n\n {this.renderLeading()}\n\n <input\n ref={(el) => (this.input = el)}\n class=\"md-search__input\"\n part=\"input\"\n type=\"search\"\n role=\"combobox\"\n value={this.value}\n placeholder={this.placeholder}\n disabled={this.disabled}\n aria-label={this.effectiveLabel()}\n aria-expanded={this.open ? 'true' : 'false'}\n aria-controls=\"md-search-panel\"\n aria-autocomplete=\"list\"\n autocomplete=\"off\"\n spellcheck={false}\n onInput={this.handleInput}\n onFocus={this.handleInputFocus}\n onBlur={this.handleInputBlur}\n onKeyDown={this.handleInputKeyDown}\n />\n\n {this.renderTrailing()}\n </div>\n )}\n\n {/* Results panel — positioning + dialog chrome. Long lists plain-scroll\n in the results viewport (`.md-search__results-scroll`) with a native\n scrollbar aligned to the slotted surface. */}\n <div\n id=\"md-search-panel\"\n class={{\n 'md-search__panel': true,\n [`md-search__panel--${this.layout}`]: true,\n 'md-search__panel--open': this.isPanelRevealed(),\n }}\n part=\"panel\"\n role=\"dialog\"\n aria-modal={isFullScreen && this.isPanelRevealed() ? 'true' : 'false'}\n aria-hidden={this.isPanelRevealed() ? 'false' : 'true'}\n aria-label={this.effectiveLabel()}\n >\n {/* Hairline divider is a `divided`-variant affordance only — don't\n emit the empty element for the contained variant. */}\n {this.variant === 'divided' && this.isPanelRevealed() && (\n <div class=\"md-search__divider\" part=\"divider\" aria-hidden=\"true\"></div>\n )}\n\n <div\n class={{\n 'md-search__panel-body': true,\n 'md-search__panel-body--empty': this.shouldShowVisibleEmptyState(),\n }}\n part=\"panel-body\"\n >\n {this.shouldShowVisibleEmptyState() && (\n <p\n class=\"md-search__empty\"\n part=\"empty\"\n role=\"status\"\n aria-live=\"polite\"\n >\n {this.noResultsLabel}\n </p>\n )}\n <div\n class=\"md-search__results-host\"\n part=\"results-host\"\n hidden={this.shouldShowVisibleEmptyState() ? true : undefined}\n aria-hidden={this.shouldShowVisibleEmptyState() ? 'true' : undefined}\n >\n <div class=\"md-search__results-scroll\" part=\"results-viewport\">\n <slot name=\"results\"></slot>\n </div>\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"]}