@ionic/core 8.8.19-dev.11786610762.137bbb21 → 8.8.19-dev.11786735826.1fad7c0a

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 (1240) hide show
  1. package/components/index.js +1 -1
  2. package/components/ion-accordion-group.js +1 -1
  3. package/components/ion-accordion.js +1 -1
  4. package/components/ion-action-sheet.js +1 -1
  5. package/components/ion-alert.js +1 -1
  6. package/components/ion-app.js +1 -1
  7. package/components/ion-avatar.js +1 -1
  8. package/components/ion-back-button.js +1 -1
  9. package/components/ion-backdrop.js +1 -1
  10. package/components/ion-badge.js +1 -1
  11. package/components/ion-breadcrumb.js +1 -1
  12. package/components/ion-breadcrumbs.js +1 -1
  13. package/components/ion-button.js +1 -1
  14. package/components/ion-buttons.js +1 -1
  15. package/components/ion-card-content.js +1 -1
  16. package/components/ion-card-header.js +1 -1
  17. package/components/ion-card-subtitle.js +1 -1
  18. package/components/ion-card-title.js +1 -1
  19. package/components/ion-card.js +1 -1
  20. package/components/ion-checkbox.js +1 -1
  21. package/components/ion-chip.js +1 -1
  22. package/components/ion-col.js +1 -1
  23. package/components/ion-content.js +1 -1
  24. package/components/ion-datetime-button.js +1 -1
  25. package/components/ion-datetime.js +1 -1
  26. package/components/ion-fab-button.js +1 -1
  27. package/components/ion-fab-list.js +1 -1
  28. package/components/ion-fab.js +1 -1
  29. package/components/ion-footer.js +1 -1
  30. package/components/ion-grid.js +1 -1
  31. package/components/ion-header.js +1 -1
  32. package/components/ion-icon.js +1 -1
  33. package/components/ion-img.js +1 -1
  34. package/components/ion-infinite-scroll-content.js +1 -1
  35. package/components/ion-infinite-scroll.js +1 -1
  36. package/components/ion-input-otp.js +1 -1
  37. package/components/ion-input-password-toggle.js +1 -1
  38. package/components/ion-input.js +1 -1
  39. package/components/ion-item-divider.js +1 -1
  40. package/components/ion-item-group.js +1 -1
  41. package/components/ion-item-option.js +1 -1
  42. package/components/ion-item-options.js +1 -1
  43. package/components/ion-item-sliding.js +1 -1
  44. package/components/ion-item.js +1 -1
  45. package/components/ion-label.js +1 -1
  46. package/components/ion-list-header.js +1 -1
  47. package/components/ion-list.js +1 -1
  48. package/components/ion-loading.js +1 -1
  49. package/components/ion-menu-button.js +1 -1
  50. package/components/ion-menu-toggle.js +1 -1
  51. package/components/ion-menu.js +1 -1
  52. package/components/ion-modal.js +1 -1
  53. package/components/ion-nav-link.js +1 -1
  54. package/components/ion-nav.js +1 -1
  55. package/components/ion-note.js +1 -1
  56. package/components/ion-picker-column-option.js +1 -1
  57. package/components/ion-picker-column.js +1 -1
  58. package/components/ion-picker.js +1 -1
  59. package/components/ion-popover.js +1 -1
  60. package/components/ion-progress-bar.js +1 -1
  61. package/components/ion-radio-group.js +1 -1
  62. package/components/ion-radio.js +1 -1
  63. package/components/ion-range.js +1 -1
  64. package/components/ion-refresher-content.js +1 -1
  65. package/components/ion-refresher.js +1 -1
  66. package/components/ion-reorder-group.js +1 -1
  67. package/components/ion-reorder.js +1 -1
  68. package/components/ion-ripple-effect.js +1 -1
  69. package/components/ion-route-redirect.js +1 -1
  70. package/components/ion-route.js +1 -1
  71. package/components/ion-router-link.js +1 -1
  72. package/components/ion-router-outlet.js +1 -1
  73. package/components/ion-router.js +1 -1
  74. package/components/ion-row.js +1 -1
  75. package/components/ion-searchbar.js +1 -1
  76. package/components/ion-segment-button.js +1 -1
  77. package/components/ion-segment-content.js +1 -1
  78. package/components/ion-segment-view.js +1 -1
  79. package/components/ion-segment.js +1 -1
  80. package/components/ion-select-modal.js +1 -1
  81. package/components/ion-select-option.js +1 -1
  82. package/components/ion-select-popover.js +1 -1
  83. package/components/ion-select.js +1 -1
  84. package/components/ion-skeleton-text.js +1 -1
  85. package/components/ion-spinner.js +1 -1
  86. package/components/ion-split-pane.js +1 -1
  87. package/components/ion-tab-bar.js +1 -1
  88. package/components/ion-tab-button.js +1 -1
  89. package/components/ion-tab.js +1 -1
  90. package/components/ion-tabs.js +1 -1
  91. package/components/ion-text.js +1 -1
  92. package/components/ion-textarea.js +1 -1
  93. package/components/ion-thumbnail.js +1 -1
  94. package/components/ion-title.js +1 -1
  95. package/components/ion-toast.js +1 -1
  96. package/components/ion-toggle.js +1 -1
  97. package/components/ion-toolbar.js +1 -1
  98. package/components/p--m5cCjbK.js +4 -0
  99. package/components/{p-CpHPq11n.js → p-30_sZS2V.js} +1 -1
  100. package/components/p-8FN7p701.js +4 -0
  101. package/components/p-B-FxiyeI.js +4 -0
  102. package/components/p-B4uHHhPK.js +4 -0
  103. package/components/p-BMPN55of.js +4 -0
  104. package/components/p-BMS4t-kJ.js +4 -0
  105. package/components/p-BOvLNVKq.js +4 -0
  106. package/components/p-BSQPZ79H.js +4 -0
  107. package/components/p-BWBigMsI.js +4 -0
  108. package/components/p-BZ4-QTes.js +4 -0
  109. package/components/p-BhamHSw3.js +4 -0
  110. package/components/p-BjluhQMI.js +4 -0
  111. package/components/p-BlsIikdZ.js +4 -0
  112. package/components/p-Blug1Vxu.js +4 -0
  113. package/components/p-BmVRXR1y.js +4 -0
  114. package/components/p-BpG8kBfD.js +4 -0
  115. package/components/p-BqPNzJf6.js +4 -0
  116. package/components/p-C5KYjZWD.js +4 -0
  117. package/components/p-C91npEel.js +4 -0
  118. package/components/p-C9BGR5fy.js +4 -0
  119. package/components/p-CD4fmpem.js +4 -0
  120. package/components/p-CEW4RXZO.js +4 -0
  121. package/components/p-CIGNaXM1.js +4 -0
  122. package/components/p-CKhiNOEg.js +4 -0
  123. package/components/p-CO2zzh3W.js +4 -0
  124. package/components/p-CVb3x_r3.js +4 -0
  125. package/components/p-CWLrHG8Y.js +4 -0
  126. package/components/p-CbhUdtjf.js +4 -0
  127. package/components/p-CejmQs3h.js +4 -0
  128. package/components/p-CfnNZz_d.js +4 -0
  129. package/components/p-CmKf4pgI.js +4 -0
  130. package/components/p-Cs5f-uOS.js +4 -0
  131. package/components/p-D7-vHX0A.js +4 -0
  132. package/components/p-DJztqcrH.js +4 -0
  133. package/components/p-DKrhJJV0.js +4 -0
  134. package/components/p-DRfgH82D.js +4 -0
  135. package/components/p-DSzSbVP2.js +4 -0
  136. package/components/p-DV85C0e0.js +4 -0
  137. package/components/p-DVKS-ovH.js +4 -0
  138. package/components/p-DWCzVL3Y.js +4 -0
  139. package/components/p-Dd8ajo9a.js +4 -0
  140. package/components/p-DdnhY_oj.js +4 -0
  141. package/components/p-DgZOZQjJ.js +4 -0
  142. package/components/p-Dmd2xqCe.js +4 -0
  143. package/components/{p-B2SvA6NE.js → p-DwpKZ6rl.js} +1 -1
  144. package/components/p-G0TxqHfe.js +4 -0
  145. package/components/p-GG5GhznE.js +4 -0
  146. package/components/{p-Ch8jco3x.js → p-J-p0EtHR.js} +1 -1
  147. package/components/p-LXu5-6Ti.js +4 -0
  148. package/components/p-LpMHEu3v.js +4 -0
  149. package/components/p-TXPDHL13.js +4 -0
  150. package/components/p-UQSiXX2Z.js +4 -0
  151. package/components/p-UuPYCOZE.js +4 -0
  152. package/components/p-WeeS7GvC.js +4 -0
  153. package/components/p-ZjP4CjeZ.js +4 -0
  154. package/components/{p-CzlL9T_X.js → p-_0JhwClE.js} +1 -1
  155. package/components/p-_IKFD3ID.js +4 -0
  156. package/components/p-byZM6qHV.js +4 -0
  157. package/components/p-hh7qIC-X.js +4 -0
  158. package/components/p-idq4JFo2.js +4 -0
  159. package/components/p-qT1szVjw.js +4 -0
  160. package/components/{p-BZwQa9ey.js → p-ryyf_ItD.js} +1 -1
  161. package/components/p-wzAhIh03.js +4 -0
  162. package/components/p-ypuYdSDB.js +4 -0
  163. package/components/{p-Dovs7FIs.js → p-yuj4Nkm_.js} +1 -1
  164. package/css/core.css +1 -1
  165. package/css/core.css.map +1 -1
  166. package/css/display.css +1 -1
  167. package/css/display.css.map +1 -1
  168. package/css/flex-utils.css +1 -1
  169. package/css/flex-utils.css.map +1 -1
  170. package/css/float-elements.css.map +1 -1
  171. package/css/global.bundle.css.map +1 -1
  172. package/css/ionic-swiper.css +1 -1
  173. package/css/ionic-swiper.css.map +1 -1
  174. package/css/ionic.bundle.css +1 -1
  175. package/css/ionic.bundle.css.map +1 -1
  176. package/css/normalize.css.map +1 -1
  177. package/css/padding.css.map +1 -1
  178. package/css/palettes/dark.always.css.map +1 -1
  179. package/css/palettes/dark.class.css.map +1 -1
  180. package/css/palettes/dark.system.css.map +1 -1
  181. package/css/palettes/high-contrast-dark.always.css.map +1 -1
  182. package/css/palettes/high-contrast-dark.class.css.map +1 -1
  183. package/css/palettes/high-contrast-dark.system.css.map +1 -1
  184. package/css/palettes/high-contrast.always.css.map +1 -1
  185. package/css/palettes/high-contrast.class.css.map +1 -1
  186. package/css/palettes/high-contrast.system.css.map +1 -1
  187. package/css/structure.css.map +1 -1
  188. package/css/text-alignment.css.map +1 -1
  189. package/css/text-transformation.css.map +1 -1
  190. package/css/typography.css.map +1 -1
  191. package/css/utils.bundle.css +1 -1
  192. package/css/utils.bundle.css.map +1 -1
  193. package/dist/cjs/{animation-qlGmEn5Y.js → animation-C0mOHzej.js} +6 -6
  194. package/dist/cjs/{app-globals-CtK-3pCu.js → app-globals-BREG4twP.js} +1 -1
  195. package/dist/cjs/{button-active-CugpWmFI.js → button-active-BKj1rdFx.js} +3 -3
  196. package/dist/cjs/{capacitor-BixsAzyb.js → capacitor-DmA66EwP.js} +3 -3
  197. package/dist/cjs/{config-DWdFbSNK.js → config-CjUbvdPW.js} +5 -4
  198. package/dist/cjs/{dir-Cn0z1rJH.js → dir-Brx7VkvP.js} +1 -1
  199. package/dist/{esm/focus-visible-vXpMhGrs.js → cjs/focus-visible-CCvKiLh3.js} +3 -23
  200. package/dist/cjs/{format-COAsdjOc.js → format-pp0Du3K-.js} +40 -30
  201. package/dist/cjs/{framework-delegate-CJT_QJQI.js → framework-delegate-NTLQ5YzV.js} +6 -10
  202. package/dist/cjs/{gesture-controller-dtqlP_q4.js → gesture-controller-BDUH7687.js} +15 -8
  203. package/dist/cjs/{haptic-BFgF-QCg.js → haptic-Ch-X4gRx.js} +3 -4
  204. package/dist/cjs/hardware-back-button-fqpYh-kd.js +121 -0
  205. package/dist/cjs/{helpers-Fh1iXsX9.js → helpers-CaLhEmTE.js} +6 -73
  206. package/dist/cjs/{index-YYUVCfP-.js → index-B7zJsYWS.js} +3 -3
  207. package/dist/cjs/{index-CNicxECl.js → index-BlshL9ib.js} +8 -9
  208. package/dist/cjs/{index-D94mERjz.js → index-Ck9advCT.js} +5 -5
  209. package/dist/cjs/{index-CM8iGvyx.js → index-D2X6b92x.js} +15 -16
  210. package/dist/cjs/{index-DRFkZu3V.js → index-D48vawBq.js} +2 -2
  211. package/dist/cjs/index-DkNv4J_i.js +10 -0
  212. package/dist/cjs/{index-CAvQ7Tka.js → index-P1nQxrpZ.js} +10 -4
  213. package/dist/cjs/{index-C1knGA9x.js → index-uvry__L4.js} +33 -65
  214. package/dist/cjs/{index-CxDnX7hd.js → index-wOmugbdg.js} +0 -2
  215. package/dist/cjs/index.cjs.js +17 -17
  216. package/dist/cjs/{input-shims-C8NCYfWv.js → input-shims-DvHAFqiP.js} +19 -22
  217. package/dist/cjs/input.utils-BZdMWVrt.js +35 -0
  218. package/dist/cjs/ion-accordion_2.cjs.entry.js +378 -382
  219. package/dist/cjs/ion-action-sheet.cjs.entry.js +178 -86
  220. package/dist/cjs/ion-alert.cjs.entry.js +250 -125
  221. package/dist/cjs/ion-app_8.cjs.entry.js +461 -608
  222. package/dist/cjs/ion-avatar_3.cjs.entry.js +19 -125
  223. package/dist/cjs/ion-back-button.cjs.entry.js +64 -49
  224. package/dist/cjs/ion-backdrop.cjs.entry.js +23 -22
  225. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +211 -169
  226. package/dist/cjs/ion-button_2.cjs.entry.js +152 -117
  227. package/dist/cjs/ion-card_5.cjs.entry.js +109 -79
  228. package/dist/cjs/ion-checkbox.cjs.entry.js +163 -129
  229. package/dist/cjs/ion-chip.cjs.entry.js +21 -56
  230. package/dist/cjs/ion-col_3.cjs.entry.js +186 -61
  231. package/dist/cjs/ion-datetime-button.cjs.entry.js +255 -247
  232. package/dist/cjs/ion-datetime.cjs.entry.js +2770 -0
  233. package/dist/cjs/ion-fab_3.cjs.entry.js +154 -112
  234. package/dist/cjs/ion-img.cjs.entry.js +34 -16
  235. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +108 -156
  236. package/dist/cjs/ion-input-otp.cjs.entry.js +435 -437
  237. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +40 -64
  238. package/dist/cjs/ion-input.cjs.entry.js +351 -311
  239. package/dist/cjs/ion-item-option_3.cjs.entry.js +136 -511
  240. package/dist/cjs/ion-item_8.cjs.entry.js +217 -189
  241. package/dist/cjs/ion-loading.cjs.entry.js +151 -68
  242. package/dist/cjs/ion-menu_3.cjs.entry.js +181 -137
  243. package/dist/cjs/ion-modal.cjs.entry.js +570 -500
  244. package/dist/cjs/ion-nav_2.cjs.entry.js +103 -163
  245. package/dist/cjs/ion-picker-column-option.cjs.entry.js +39 -39
  246. package/dist/cjs/ion-picker-column.cjs.entry.js +421 -409
  247. package/dist/cjs/ion-picker.cjs.entry.js +405 -400
  248. package/dist/cjs/ion-popover.cjs.entry.js +323 -211
  249. package/dist/cjs/ion-progress-bar.cjs.entry.js +35 -47
  250. package/dist/cjs/ion-radio_2.cjs.entry.js +216 -161
  251. package/dist/cjs/ion-range.cjs.entry.js +307 -249
  252. package/dist/cjs/ion-refresher_2.cjs.entry.js +174 -121
  253. package/dist/cjs/ion-reorder_2.cjs.entry.js +59 -53
  254. package/dist/cjs/ion-ripple-effect.cjs.entry.js +18 -26
  255. package/dist/cjs/ion-route_4.cjs.entry.js +178 -75
  256. package/dist/cjs/ion-searchbar.cjs.entry.js +308 -331
  257. package/dist/cjs/ion-segment-content.cjs.entry.js +2 -2
  258. package/dist/cjs/ion-segment-view.cjs.entry.js +28 -27
  259. package/dist/cjs/ion-segment_2.cjs.entry.js +177 -141
  260. package/dist/cjs/ion-select-modal.cjs.entry.js +49 -69
  261. package/dist/cjs/ion-select_3.cjs.entry.js +507 -429
  262. package/dist/cjs/ion-spinner.cjs.entry.js +28 -36
  263. package/dist/cjs/ion-split-pane.cjs.entry.js +34 -25
  264. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +116 -179
  265. package/dist/cjs/ion-tab_2.cjs.entry.js +54 -29
  266. package/dist/cjs/ion-text.cjs.entry.js +13 -7
  267. package/dist/cjs/ion-textarea.cjs.entry.js +303 -309
  268. package/dist/cjs/ion-toast.cjs.entry.js +264 -169
  269. package/dist/cjs/ion-toggle.cjs.entry.js +184 -187
  270. package/dist/cjs/ionic-global-k6hOWWpn.js +156 -0
  271. package/dist/cjs/ionic.cjs.js +4 -4
  272. package/dist/cjs/{ios.transition-BgDCUY4Y.js → ios.transition-KvuRAe2W.js} +14 -20
  273. package/dist/cjs/{item-multiple-inputs-DKn76MYO.js → item-multiple-inputs-BdYSbfKN.js} +1 -1
  274. package/dist/cjs/{keyboard-nne7rvBK.js → keyboard-Cix5TVkD.js} +4 -5
  275. package/dist/cjs/{keyboard-BbZXOwZg.js → keyboard-cHxZlTyz.js} +3 -3
  276. package/dist/cjs/keyboard-controller-PtZoN2GS.js +167 -0
  277. package/dist/cjs/loader.cjs.js +4 -4
  278. package/dist/cjs/{md.transition-Debf4tYr.js → md.transition-Bjl5Ozph.js} +8 -10
  279. package/dist/cjs/{overlay-control-label-DnRLQR1t.js → overlay-control-label-D2sdL2O8.js} +11 -13
  280. package/dist/cjs/{overlays-DYBUkNQu.js → overlays-IlP4H2Gn.js} +60 -336
  281. package/dist/cjs/{select-option-render-BqJEK1N1.js → select-option-render-pULCGldr.js} +3 -4
  282. package/dist/cjs/slot-mutation-controller-CgTGFqlW.js +397 -0
  283. package/dist/cjs/{status-tap-hwqc0yb_.js → status-tap-BR_ujYHg.js} +3 -4
  284. package/dist/cjs/{swipe-back-DqQx5QCp.js → swipe-back-DzQKEl5g.js} +5 -6
  285. package/dist/cjs/{theme-IlOsGAz7.js → theme-Bw0rpaNN.js} +7 -26
  286. package/dist/cjs/validity-BpS37YFM.js +19 -0
  287. package/dist/collection/collection-manifest.json +1 -13
  288. package/dist/collection/components/accordion/accordion.ios.css +58 -73
  289. package/dist/collection/components/accordion/accordion.js +327 -338
  290. package/dist/collection/components/accordion/accordion.md.css +59 -67
  291. package/dist/collection/components/accordion-group/accordion-group.ios.css +4 -16
  292. package/dist/collection/components/accordion-group/accordion-group.js +56 -69
  293. package/dist/collection/components/accordion-group/accordion-group.md.css +4 -22
  294. package/dist/collection/components/action-sheet/action-sheet.ios.css +54 -184
  295. package/dist/collection/components/action-sheet/action-sheet.js +166 -76
  296. package/dist/collection/components/action-sheet/action-sheet.md.css +55 -179
  297. package/dist/collection/components/action-sheet/test/basic/fixture.js +3 -0
  298. package/dist/collection/components/alert/alert.ios.css +54 -247
  299. package/dist/collection/components/alert/alert.js +236 -113
  300. package/dist/collection/components/alert/alert.md.css +56 -243
  301. package/dist/collection/components/app/app.js +86 -15
  302. package/dist/collection/components/avatar/avatar.ios.css +33 -7
  303. package/dist/collection/components/avatar/avatar.js +4 -120
  304. package/dist/collection/components/avatar/avatar.md.css +0 -51
  305. package/dist/collection/components/back-button/back-button.ios.css +48 -60
  306. package/dist/collection/components/back-button/back-button.js +61 -46
  307. package/dist/collection/components/back-button/back-button.md.css +48 -60
  308. package/dist/collection/components/backdrop/backdrop.ios.css +19 -56
  309. package/dist/collection/components/backdrop/backdrop.js +22 -26
  310. package/dist/collection/components/backdrop/backdrop.md.css +19 -56
  311. package/dist/collection/components/badge/badge.ios.css +12 -137
  312. package/dist/collection/components/badge/badge.js +15 -145
  313. package/dist/collection/components/badge/badge.md.css +12 -122
  314. package/dist/collection/components/breadcrumb/breadcrumb.ios.css +8 -20
  315. package/dist/collection/components/breadcrumb/breadcrumb.js +101 -72
  316. package/dist/collection/components/breadcrumb/breadcrumb.md.css +8 -20
  317. package/dist/collection/components/breadcrumbs/breadcrumbs.ios.css +0 -6
  318. package/dist/collection/components/breadcrumbs/breadcrumbs.js +112 -99
  319. package/dist/collection/components/breadcrumbs/breadcrumbs.md.css +0 -6
  320. package/dist/collection/components/button/button.ios.css +46 -154
  321. package/dist/collection/components/button/button.js +157 -122
  322. package/dist/collection/components/button/button.md.css +50 -150
  323. package/dist/collection/components/buttons/buttons.ios.css +7 -59
  324. package/dist/collection/components/buttons/buttons.js +21 -29
  325. package/dist/collection/components/buttons/buttons.md.css +3 -55
  326. package/dist/collection/components/card/card.ios.css +14 -65
  327. package/dist/collection/components/card/card.js +63 -61
  328. package/dist/collection/components/card/card.md.css +14 -65
  329. package/dist/collection/components/card-content/card-content.ios.css +35 -20
  330. package/dist/collection/components/card-content/card-content.js +10 -12
  331. package/dist/collection/components/card-content/card-content.md.css +35 -20
  332. package/dist/collection/components/card-header/card-header.ios.css +15 -27
  333. package/dist/collection/components/card-header/card-header.js +21 -20
  334. package/dist/collection/components/card-header/card-header.md.css +15 -27
  335. package/dist/collection/components/card-subtitle/card-subtitle.ios.css +0 -12
  336. package/dist/collection/components/card-subtitle/card-subtitle.js +14 -11
  337. package/dist/collection/components/card-subtitle/card-subtitle.md.css +0 -12
  338. package/dist/collection/components/card-title/card-title.ios.css +0 -73
  339. package/dist/collection/components/card-title/card-title.js +14 -11
  340. package/dist/collection/components/card-title/card-title.md.css +0 -73
  341. package/dist/collection/components/checkbox/checkbox.ios.css +117 -242
  342. package/dist/collection/components/checkbox/checkbox.js +160 -165
  343. package/dist/collection/components/checkbox/checkbox.md.css +118 -243
  344. package/dist/collection/components/chip/chip.ios.css +14 -67
  345. package/dist/collection/components/chip/chip.js +20 -116
  346. package/dist/collection/components/chip/chip.md.css +14 -67
  347. package/dist/collection/components/col/col.css +4 -192
  348. package/dist/collection/components/col/col.js +186 -212
  349. package/dist/collection/components/content/content.css +2 -47
  350. package/dist/collection/components/content/content.js +102 -78
  351. package/dist/collection/components/datetime/datetime.ios.css +148 -304
  352. package/dist/collection/components/datetime/datetime.js +1068 -910
  353. package/dist/collection/components/datetime/datetime.md.css +138 -294
  354. package/dist/collection/components/datetime/utils/data.js +18 -19
  355. package/dist/collection/components/datetime/utils/format.js +21 -11
  356. package/dist/collection/components/datetime/utils/manipulation.js +8 -8
  357. package/dist/collection/components/datetime/utils/parse.js +10 -10
  358. package/dist/collection/components/datetime/utils/state.js +8 -2
  359. package/dist/collection/components/datetime/utils/validate.js +4 -5
  360. package/dist/collection/components/datetime-button/datetime-button.ios.css +5 -6
  361. package/dist/collection/components/datetime-button/datetime-button.js +253 -246
  362. package/dist/collection/components/datetime-button/datetime-button.md.css +5 -6
  363. package/dist/collection/components/fab/fab.css +1 -25
  364. package/dist/collection/components/fab/fab.js +25 -22
  365. package/dist/collection/components/fab-button/fab-button.ios.css +6 -18
  366. package/dist/collection/components/fab-button/fab-button.js +117 -83
  367. package/dist/collection/components/fab-button/fab-button.md.css +8 -20
  368. package/dist/collection/components/fab-list/fab-list.css +0 -12
  369. package/dist/collection/components/fab-list/fab-list.js +15 -20
  370. package/dist/collection/components/footer/footer.ios.css +6 -33
  371. package/dist/collection/components/footer/footer.js +65 -151
  372. package/dist/collection/components/footer/footer.md.css +0 -40
  373. package/dist/collection/components/grid/grid.css +0 -12
  374. package/dist/collection/components/grid/grid.js +9 -15
  375. package/dist/collection/components/header/header.ios.css +133 -178
  376. package/dist/collection/components/header/header.js +70 -202
  377. package/dist/collection/components/header/header.md.css +9 -199
  378. package/dist/collection/components/header/header.utils.js +13 -6
  379. package/dist/collection/components/img/img.js +34 -16
  380. package/dist/collection/components/infinite-scroll/infinite-scroll.js +76 -164
  381. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.ios.css +0 -12
  382. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +30 -19
  383. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.md.css +0 -12
  384. package/dist/collection/components/input/input.ios.css +191 -247
  385. package/dist/collection/components/input/input.js +357 -340
  386. package/dist/collection/components/input/input.md.css +285 -234
  387. package/dist/collection/components/input-otp/input-otp.ios.css +60 -105
  388. package/dist/collection/components/input-otp/input-otp.js +432 -437
  389. package/dist/collection/components/input-otp/input-otp.md.css +60 -105
  390. package/dist/collection/components/input-password-toggle/input-password-toggle.js +37 -60
  391. package/dist/collection/components/item/item.ios.css +80 -120
  392. package/dist/collection/components/item/item.js +113 -102
  393. package/dist/collection/components/item/item.md.css +79 -131
  394. package/dist/collection/components/item-divider/item-divider.ios.css +0 -18
  395. package/dist/collection/components/item-divider/item-divider.js +23 -21
  396. package/dist/collection/components/item-divider/item-divider.md.css +0 -18
  397. package/dist/collection/components/item-group/item-group.ios.css +0 -12
  398. package/dist/collection/components/item-group/item-group.js +7 -13
  399. package/dist/collection/components/item-group/item-group.md.css +0 -12
  400. package/dist/collection/components/item-option/item-option.ios.css +29 -136
  401. package/dist/collection/components/item-option/item-option.js +56 -92
  402. package/dist/collection/components/item-option/item-option.md.css +29 -136
  403. package/dist/collection/components/item-options/item-options.ios.css +34 -77
  404. package/dist/collection/components/item-options/item-options.js +17 -20
  405. package/dist/collection/components/item-options/item-options.md.css +34 -77
  406. package/dist/collection/components/item-sliding/{item-sliding.native.css → item-sliding.css} +9 -84
  407. package/dist/collection/components/item-sliding/item-sliding.js +61 -441
  408. package/dist/collection/components/item-sliding/test/test.utils.js +0 -13
  409. package/dist/collection/components/label/label.ios.css +0 -18
  410. package/dist/collection/components/label/label.js +32 -15
  411. package/dist/collection/components/label/label.md.css +0 -18
  412. package/dist/collection/components/list/list.ios.css +14 -54
  413. package/dist/collection/components/list/list.js +19 -55
  414. package/dist/collection/components/list/list.md.css +16 -56
  415. package/dist/collection/components/list-header/list-header.ios.css +38 -82
  416. package/dist/collection/components/list-header/list-header.js +18 -11
  417. package/dist/collection/components/list-header/list-header.md.css +38 -82
  418. package/dist/collection/components/loading/loading.ios.css +1 -13
  419. package/dist/collection/components/loading/loading.js +143 -62
  420. package/dist/collection/components/loading/loading.md.css +1 -13
  421. package/dist/collection/components/menu/menu.ios.css +3 -15
  422. package/dist/collection/components/menu/menu.js +108 -71
  423. package/dist/collection/components/menu/menu.md.css +3 -15
  424. package/dist/collection/components/menu-button/menu-button.ios.css +14 -48
  425. package/dist/collection/components/menu-button/menu-button.js +38 -45
  426. package/dist/collection/components/menu-button/menu-button.md.css +15 -49
  427. package/dist/collection/components/menu-toggle/menu-toggle.js +25 -21
  428. package/dist/collection/components/modal/animations/ios.enter.js +1 -1
  429. package/dist/collection/components/modal/animations/md.enter.js +1 -1
  430. package/dist/collection/components/modal/animations/sheet.js +2 -8
  431. package/dist/collection/components/modal/gestures/sheet.js +32 -86
  432. package/dist/collection/components/modal/gestures/swipe-to-close.js +15 -3
  433. package/dist/collection/components/modal/modal.ios.css +70 -178
  434. package/dist/collection/components/modal/modal.js +404 -272
  435. package/dist/collection/components/modal/modal.md.css +70 -178
  436. package/dist/collection/components/modal/safe-area-utils.js +6 -7
  437. package/dist/collection/components/modal/test/fixtures.js +3 -0
  438. package/dist/collection/components/nav/nav.css +1 -7
  439. package/dist/collection/components/nav/nav.js +72 -256
  440. package/dist/collection/components/nav/view-controller.js +7 -1
  441. package/dist/collection/components/nav-link/nav-link.js +21 -14
  442. package/dist/collection/components/note/note.ios.css +0 -12
  443. package/dist/collection/components/note/note.js +14 -11
  444. package/dist/collection/components/note/note.md.css +0 -12
  445. package/dist/collection/components/picker/picker.ios.css +3 -15
  446. package/dist/collection/components/picker/picker.js +403 -398
  447. package/dist/collection/components/picker/picker.md.css +3 -15
  448. package/dist/collection/components/picker-column/picker-column.css +5 -9
  449. package/dist/collection/components/picker-column/picker-column.js +418 -409
  450. package/dist/collection/components/picker-column-option/picker-column-option.ios.css +0 -6
  451. package/dist/collection/components/picker-column-option/picker-column-option.js +38 -42
  452. package/dist/collection/components/picker-column-option/picker-column-option.md.css +6 -7
  453. package/dist/collection/components/popover/animations/ios.enter.js +1 -2
  454. package/dist/collection/components/popover/animations/md.enter.js +1 -2
  455. package/dist/collection/components/popover/popover.ios.css +2 -15
  456. package/dist/collection/components/popover/popover.js +313 -199
  457. package/dist/collection/components/popover/popover.md.css +2 -15
  458. package/dist/collection/components/popover/test/fixture.js +1 -0
  459. package/dist/collection/components/popover/utils.js +4 -6
  460. package/dist/collection/components/progress-bar/progress-bar.ios.css +17 -48
  461. package/dist/collection/components/progress-bar/progress-bar.js +33 -65
  462. package/dist/collection/components/progress-bar/progress-bar.md.css +17 -48
  463. package/dist/collection/components/radio/radio.ios.css +102 -207
  464. package/dist/collection/components/radio/radio.js +108 -77
  465. package/dist/collection/components/radio/radio.md.css +102 -207
  466. package/dist/collection/components/radio-group/radio-group.ios.css +19 -43
  467. package/dist/collection/components/radio-group/radio-group.js +107 -113
  468. package/dist/collection/components/radio-group/radio-group.md.css +19 -43
  469. package/dist/collection/components/radio-group/test/fixtures.js +2 -0
  470. package/dist/collection/components/range/range.ios.css +85 -128
  471. package/dist/collection/components/range/range.js +303 -245
  472. package/dist/collection/components/range/range.md.css +85 -128
  473. package/dist/collection/components/refresher/refresher.ios.css +1 -14
  474. package/dist/collection/components/refresher/refresher.js +117 -88
  475. package/dist/collection/components/refresher/refresher.md.css +2 -15
  476. package/dist/collection/components/refresher-content/refresher-content.js +47 -31
  477. package/dist/collection/components/reorder/reorder.ios.css +0 -6
  478. package/dist/collection/components/reorder/reorder.js +7 -33
  479. package/dist/collection/components/reorder/reorder.md.css +0 -6
  480. package/dist/collection/components/reorder-group/reorder-group.css +0 -6
  481. package/dist/collection/components/reorder-group/reorder-group.js +47 -22
  482. package/dist/collection/components/ripple-effect/{ripple-effect.common.css → ripple-effect.css} +1 -7
  483. package/dist/collection/components/ripple-effect/ripple-effect.js +17 -26
  484. package/dist/collection/components/route/route.js +39 -14
  485. package/dist/collection/components/route-redirect/route-redirect.js +31 -0
  486. package/dist/collection/components/router/router.js +37 -37
  487. package/dist/collection/components/router/utils/dom.js +25 -7
  488. package/dist/collection/components/router/utils/matching.js +7 -9
  489. package/dist/collection/components/router/utils/parser.js +1 -1
  490. package/dist/collection/components/router/utils/path.js +0 -1
  491. package/dist/collection/components/router-link/router-link.css +2 -8
  492. package/dist/collection/components/router-link/router-link.js +40 -19
  493. package/dist/collection/components/router-outlet/router-outlet.css +1 -7
  494. package/dist/collection/components/router-outlet/router-outlet.js +83 -25
  495. package/dist/collection/components/row/row.css +0 -16
  496. package/dist/collection/components/row/row.js +2 -9
  497. package/dist/collection/components/searchbar/searchbar.ios.css +18 -56
  498. package/dist/collection/components/searchbar/searchbar.js +321 -380
  499. package/dist/collection/components/searchbar/searchbar.md.css +18 -56
  500. package/dist/collection/components/segment/segment.ios.css +2 -45
  501. package/dist/collection/components/segment/segment.js +126 -94
  502. package/dist/collection/components/segment/segment.md.css +2 -45
  503. package/dist/collection/components/segment-button/segment-button.ios.css +105 -146
  504. package/dist/collection/components/segment-button/segment-button.js +49 -46
  505. package/dist/collection/components/segment-button/segment-button.md.css +107 -148
  506. package/dist/collection/components/segment-content/segment-content.js +1 -1
  507. package/dist/collection/components/segment-view/segment-view.ios.css +0 -6
  508. package/dist/collection/components/segment-view/segment-view.js +28 -27
  509. package/dist/collection/components/segment-view/segment-view.md.css +0 -6
  510. package/dist/collection/components/select/select.ios.css +206 -351
  511. package/dist/collection/components/select/select.js +431 -444
  512. package/dist/collection/components/select/select.md.css +230 -383
  513. package/dist/collection/components/select-modal/select-modal.ios.css +45 -293
  514. package/dist/collection/components/select-modal/select-modal.js +37 -79
  515. package/dist/collection/components/select-modal/select-modal.md.css +43 -273
  516. package/dist/collection/components/select-modal/test/fixtures.js +8 -1
  517. package/dist/collection/components/select-option/select-option.js +48 -15
  518. package/dist/collection/components/select-popover/select-popover.ios.css +124 -188
  519. package/dist/collection/components/select-popover/select-popover.js +44 -37
  520. package/dist/collection/components/select-popover/select-popover.md.css +47 -228
  521. package/dist/collection/components/select-popover/test/fixtures.js +8 -1
  522. package/dist/collection/components/skeleton-text/skeleton-text.css +0 -6
  523. package/dist/collection/components/skeleton-text/skeleton-text.js +15 -15
  524. package/dist/collection/components/spinner/{spinner.ionic.css → spinner.css} +10 -78
  525. package/dist/collection/components/spinner/spinner.js +26 -55
  526. package/dist/collection/components/split-pane/split-pane.ios.css +2 -20
  527. package/dist/collection/components/split-pane/split-pane.js +33 -28
  528. package/dist/collection/components/split-pane/split-pane.md.css +2 -20
  529. package/dist/collection/components/tab/tab.js +17 -10
  530. package/dist/collection/components/tab-bar/tab-bar.ios.css +43 -86
  531. package/dist/collection/components/tab-bar/tab-bar.js +44 -190
  532. package/dist/collection/components/tab-bar/tab-bar.md.css +43 -86
  533. package/dist/collection/components/tab-button/tab-button.ios.css +95 -171
  534. package/dist/collection/components/tab-button/tab-button.js +68 -74
  535. package/dist/collection/components/tab-button/tab-button.md.css +93 -137
  536. package/dist/collection/components/tabs/tabs.css +1 -7
  537. package/dist/collection/components/tabs/tabs.js +33 -23
  538. package/dist/collection/components/text/text.css +0 -6
  539. package/dist/collection/components/text/text.js +12 -7
  540. package/dist/collection/components/textarea/textarea.ios.css +221 -329
  541. package/dist/collection/components/textarea/textarea.js +302 -334
  542. package/dist/collection/components/textarea/textarea.md.css +231 -358
  543. package/dist/collection/components/thumbnail/thumbnail.css +0 -6
  544. package/dist/collection/components/thumbnail/thumbnail.js +2 -9
  545. package/dist/collection/components/title/title.ios.css +4 -32
  546. package/dist/collection/components/title/title.js +23 -13
  547. package/dist/collection/components/title/title.md.css +4 -39
  548. package/dist/collection/components/toast/animations/utils.js +1 -1
  549. package/dist/collection/components/toast/toast.ios.css +45 -84
  550. package/dist/collection/components/toast/toast.js +232 -178
  551. package/dist/collection/components/toast/toast.md.css +45 -84
  552. package/dist/collection/components/toggle/toggle.ios.css +127 -247
  553. package/dist/collection/components/toggle/toggle.js +175 -177
  554. package/dist/collection/components/toggle/toggle.md.css +127 -245
  555. package/dist/collection/components/toolbar/toolbar.ios.css +47 -90
  556. package/dist/collection/components/toolbar/toolbar.js +25 -222
  557. package/dist/collection/components/toolbar/toolbar.md.css +47 -90
  558. package/dist/collection/global/config.js +4 -6
  559. package/dist/collection/global/ionic-global.js +20 -242
  560. package/dist/collection/index.js +1 -1
  561. package/dist/collection/utils/animation/animation.js +3 -3
  562. package/dist/collection/utils/config.js +5 -4
  563. package/dist/collection/utils/focus-controller/index.js +1 -1
  564. package/dist/collection/utils/focus-trap.js +5 -16
  565. package/dist/collection/utils/focus-visible.js +0 -22
  566. package/dist/collection/utils/forms/index.js +1 -1
  567. package/dist/collection/utils/forms/start-container-controller.js +132 -0
  568. package/dist/collection/utils/forms/validity.js +0 -31
  569. package/dist/collection/utils/framework-delegate.js +5 -9
  570. package/dist/collection/utils/gesture/gesture-controller.js +15 -8
  571. package/dist/collection/utils/gesture/index.js +10 -2
  572. package/dist/collection/utils/gesture/listener.js +1 -1
  573. package/dist/collection/utils/hardware-back-button.js +3 -18
  574. package/dist/collection/utils/helpers.js +5 -72
  575. package/dist/collection/utils/input-shims/hacks/scroll-assist.js +4 -5
  576. package/dist/collection/utils/input-shims/hacks/scroll-data.js +1 -2
  577. package/dist/collection/utils/keyboard/keyboard-controller.js +6 -8
  578. package/dist/collection/utils/keyboard/keyboard.js +1 -1
  579. package/dist/collection/utils/logging/index.js +23 -4
  580. package/dist/collection/utils/media.js +0 -1
  581. package/dist/collection/utils/menu-controller/animations/overlay.js +3 -3
  582. package/dist/collection/utils/menu-controller/animations/push.js +1 -2
  583. package/dist/collection/utils/menu-controller/animations/reveal.js +1 -2
  584. package/dist/collection/utils/menu-controller/index.js +1 -2
  585. package/dist/collection/utils/native/haptic.js +2 -3
  586. package/dist/collection/utils/native/keyboard.js +2 -2
  587. package/dist/collection/utils/native/status-bar.js +1 -1
  588. package/dist/collection/utils/overlay-control-label.js +11 -13
  589. package/dist/collection/utils/overlays.js +45 -312
  590. package/dist/collection/utils/platform.js +4 -5
  591. package/dist/collection/utils/rtl/dir.js +1 -1
  592. package/dist/collection/utils/sanitization/index.js +2 -2
  593. package/dist/collection/utils/select-option-render.js +1 -2
  594. package/dist/collection/utils/slot-mutation-controller.js +1 -2
  595. package/dist/collection/utils/test/playwright/apply-keyboard-focus.js +1 -1
  596. package/dist/collection/utils/test/playwright/drag-element.js +11 -35
  597. package/dist/collection/utils/test/playwright/generator.js +25 -51
  598. package/dist/collection/utils/test/playwright/page/event-spy.js +11 -12
  599. package/dist/collection/utils/test/playwright/page/utils/goto.js +5 -15
  600. package/dist/collection/utils/test/playwright/page/utils/set-content.js +4 -27
  601. package/dist/collection/utils/test/playwright/page/utils/set-ion-viewport.js +2 -3
  602. package/dist/collection/utils/test/press-keys.js +10 -17
  603. package/dist/collection/utils/theme.js +7 -26
  604. package/dist/collection/utils/transition/ios.transition.js +9 -14
  605. package/dist/collection/utils/transition/md.transition.js +3 -4
  606. package/dist/docs.json +524 -10028
  607. package/dist/esm/{animation-ChfHU0RG.js → animation-CGFdmGk9.js} +5 -5
  608. package/dist/esm/{app-globals-D1OOQlqq.js → app-globals-CYmMeGdU.js} +1 -1
  609. package/dist/esm/{button-active-CPYK0dNo.js → button-active--80YqSHA.js} +3 -3
  610. package/dist/esm/{capacitor-DG_4yVXz.js → capacitor-CFERIeaU.js} +1 -1
  611. package/dist/esm/{config-BwKpO3Is.js → config-DWCzVL3Y.js} +5 -4
  612. package/dist/esm/{dir-C53feagD.js → dir-B-FxiyeI.js} +1 -1
  613. package/dist/{cjs/focus-visible-BIj-I3-C.js → esm/focus-visible-BmVRXR1y.js} +1 -27
  614. package/dist/esm/{format-2WlZcMvG.js → format-Dcwga61t.js} +41 -31
  615. package/dist/esm/{framework-delegate-DO2QXccA.js → framework-delegate--ajhSeKH.js} +6 -10
  616. package/dist/esm/{gesture-controller-BTEOs1at.js → gesture-controller-TXPDHL13.js} +15 -8
  617. package/dist/esm/{haptic-BWlRCqa-.js → haptic-Cq4UAeka.js} +3 -4
  618. package/dist/esm/hardware-back-button-gLJHMX_F.js +115 -0
  619. package/dist/esm/{helpers-DfF5_wJc.js → helpers-DexiPLIC.js} +7 -73
  620. package/dist/esm/{index-BSDDOljg.js → index-8s8kZKJ7.js} +5 -5
  621. package/dist/esm/{index-DNY2GOUg.js → index-BCgUwrV0.js} +3 -4
  622. package/dist/esm/{index-B4Kq2YNk.js → index-BvabGprD.js} +1 -2
  623. package/dist/esm/{index-Mq5pCWmZ.js → index-CKM1DdGm.js} +3 -3
  624. package/dist/esm/{index-C0EQceqV.js → index-ChhhtsGZ.js} +34 -66
  625. package/dist/esm/{index-7eS8XtuU.js → index-CumkqGQF.js} +12 -13
  626. package/dist/esm/{index-CfgBF1SE.js → index-DppOcPFQ.js} +10 -4
  627. package/dist/esm/index-ZjP4CjeZ.js +7 -0
  628. package/dist/esm/{index-taYRjZGp.js → index-_Za5VB9w.js} +2 -2
  629. package/dist/esm/index.js +17 -16
  630. package/dist/esm/{input-shims-tZfqB5a5.js → input-shims-BB0AKb_k.js} +11 -14
  631. package/dist/esm/input.utils-B1ValN_N.js +33 -0
  632. package/dist/esm/ion-accordion_2.entry.js +378 -382
  633. package/dist/esm/ion-action-sheet.entry.js +178 -86
  634. package/dist/esm/ion-alert.entry.js +250 -125
  635. package/dist/esm/ion-app_8.entry.js +460 -607
  636. package/dist/esm/ion-avatar_3.entry.js +19 -125
  637. package/dist/esm/ion-back-button.entry.js +64 -49
  638. package/dist/esm/ion-backdrop.entry.js +23 -22
  639. package/dist/esm/ion-breadcrumb_2.entry.js +211 -169
  640. package/dist/esm/ion-button_2.entry.js +152 -117
  641. package/dist/esm/ion-card_5.entry.js +109 -79
  642. package/dist/esm/ion-checkbox.entry.js +163 -129
  643. package/dist/esm/ion-chip.entry.js +21 -56
  644. package/dist/esm/ion-col_3.entry.js +186 -61
  645. package/dist/esm/ion-datetime-button.entry.js +255 -247
  646. package/dist/esm/ion-datetime.entry.js +2768 -0
  647. package/dist/esm/ion-fab_3.entry.js +154 -112
  648. package/dist/esm/ion-img.entry.js +34 -16
  649. package/dist/esm/ion-infinite-scroll_2.entry.js +108 -156
  650. package/dist/esm/ion-input-otp.entry.js +435 -437
  651. package/dist/esm/ion-input-password-toggle.entry.js +40 -64
  652. package/dist/esm/ion-input.entry.js +349 -309
  653. package/dist/esm/ion-item-option_3.entry.js +136 -511
  654. package/dist/esm/ion-item_8.entry.js +217 -189
  655. package/dist/esm/ion-loading.entry.js +151 -68
  656. package/dist/esm/ion-menu_3.entry.js +181 -137
  657. package/dist/esm/ion-modal.entry.js +528 -458
  658. package/dist/esm/ion-nav_2.entry.js +103 -163
  659. package/dist/esm/ion-picker-column-option.entry.js +39 -39
  660. package/dist/esm/ion-picker-column.entry.js +421 -409
  661. package/dist/esm/ion-picker.entry.js +405 -400
  662. package/dist/esm/ion-popover.entry.js +323 -211
  663. package/dist/esm/ion-progress-bar.entry.js +35 -47
  664. package/dist/esm/ion-radio_2.entry.js +216 -161
  665. package/dist/esm/ion-range.entry.js +307 -249
  666. package/dist/esm/ion-refresher_2.entry.js +174 -121
  667. package/dist/esm/ion-reorder_2.entry.js +59 -53
  668. package/dist/esm/ion-ripple-effect.entry.js +18 -26
  669. package/dist/esm/ion-route_4.entry.js +178 -75
  670. package/dist/esm/ion-searchbar.entry.js +308 -331
  671. package/dist/esm/ion-segment-content.entry.js +2 -2
  672. package/dist/esm/ion-segment-view.entry.js +28 -27
  673. package/dist/esm/ion-segment_2.entry.js +177 -141
  674. package/dist/esm/ion-select-modal.entry.js +49 -69
  675. package/dist/esm/ion-select_3.entry.js +507 -429
  676. package/dist/esm/ion-spinner.entry.js +28 -36
  677. package/dist/esm/ion-split-pane.entry.js +34 -25
  678. package/dist/esm/ion-tab-bar_2.entry.js +115 -178
  679. package/dist/esm/ion-tab_2.entry.js +54 -29
  680. package/dist/esm/ion-text.entry.js +13 -7
  681. package/dist/esm/ion-textarea.entry.js +302 -308
  682. package/dist/esm/ion-toast.entry.js +243 -148
  683. package/dist/esm/ion-toggle.entry.js +184 -187
  684. package/dist/esm/ionic-global-BVB7BrLT.js +151 -0
  685. package/dist/esm/ionic.js +5 -5
  686. package/dist/esm/{ios.transition-C3r-0w96.js → ios.transition-BdhybwLl.js} +14 -20
  687. package/dist/esm/{item-multiple-inputs-C6onMFOo.js → item-multiple-inputs-rU8VaNNg.js} +1 -1
  688. package/dist/esm/{keyboard-BzbtCDwZ.js → keyboard-Cj8mLJeq.js} +4 -5
  689. package/dist/esm/{keyboard-DYGmALa7.js → keyboard-DAF8GNJ9.js} +3 -3
  690. package/dist/esm/keyboard-controller-DEwoa1ev.js +165 -0
  691. package/dist/esm/loader.js +5 -5
  692. package/dist/esm/{md.transition-CPHOF5T9.js → md.transition-B5lqKGCs.js} +8 -10
  693. package/dist/esm/{overlay-control-label-CODBQrPj.js → overlay-control-label-BSQPZ79H.js} +11 -13
  694. package/dist/esm/{overlays-C1NQMs9y.js → overlays-CjWwtvf1.js} +57 -333
  695. package/dist/esm/{select-option-render-BlKZ2H83.js → select-option-render-C4m76VGH.js} +3 -4
  696. package/dist/esm/slot-mutation-controller-u741eD3Z.js +393 -0
  697. package/dist/esm/{status-tap-BueE8Coq.js → status-tap-DpLhkDWs.js} +3 -4
  698. package/dist/esm/{swipe-back-qmvTRnSq.js → swipe-back-cz4-lyG3.js} +5 -6
  699. package/dist/esm/theme-byZM6qHV.js +48 -0
  700. package/dist/esm/validity-DJztqcrH.js +17 -0
  701. package/dist/html.html-data.json +146 -2713
  702. package/dist/ionic/index.esm.js +1 -1
  703. package/dist/ionic/ionic.esm.js +1 -1
  704. package/dist/ionic/p-06533d51.entry.js +4 -0
  705. package/dist/ionic/p-08443c08.entry.js +4 -0
  706. package/dist/ionic/p-0FNc80PN.js +4 -0
  707. package/dist/ionic/p-141f5b47.entry.js +4 -0
  708. package/dist/ionic/p-14a5e8f5.entry.js +4 -0
  709. package/dist/ionic/p-19269e04.entry.js +4 -0
  710. package/dist/ionic/p-19abbc33.entry.js +4 -0
  711. package/dist/ionic/p-1edf0573.entry.js +4 -0
  712. package/dist/ionic/p-40424a88.entry.js +4 -0
  713. package/dist/ionic/p-4204184c.entry.js +4 -0
  714. package/dist/ionic/p-4bc3ecdb.entry.js +4 -0
  715. package/dist/ionic/p-4eOQC00Z.js +4 -0
  716. package/dist/ionic/p-4eed9ca1.entry.js +4 -0
  717. package/dist/ionic/p-53bac1c9.entry.js +4 -0
  718. package/dist/ionic/p-5506caeb.entry.js +4 -0
  719. package/dist/ionic/p-5521dc1f.entry.js +4 -0
  720. package/dist/ionic/p-5993a77f.entry.js +4 -0
  721. package/dist/ionic/p-5c3626de.entry.js +4 -0
  722. package/dist/ionic/p-5d3b411c.entry.js +4 -0
  723. package/dist/ionic/p-60576951.entry.js +4 -0
  724. package/dist/ionic/p-7116e558.entry.js +4 -0
  725. package/dist/ionic/p-711a8319.entry.js +4 -0
  726. package/dist/ionic/p-71419a55.entry.js +4 -0
  727. package/dist/ionic/p-79325ffe.entry.js +4 -0
  728. package/dist/ionic/p-7bb3e957.entry.js +4 -0
  729. package/dist/ionic/p-82525fb0.entry.js +4 -0
  730. package/dist/ionic/p-84a38904.entry.js +4 -0
  731. package/dist/ionic/p-865fa114.entry.js +4 -0
  732. package/dist/ionic/p-8e1d9e3a.entry.js +4 -0
  733. package/dist/ionic/p-8f204f1e.entry.js +4 -0
  734. package/dist/ionic/p-9055e897.entry.js +4 -0
  735. package/dist/ionic/p-9658e083.entry.js +4 -0
  736. package/dist/ionic/p-988baee1.entry.js +4 -0
  737. package/dist/ionic/p-9nmHvEvw.js +4 -0
  738. package/dist/ionic/p-B-FxiyeI.js +4 -0
  739. package/dist/ionic/p-BB0LlG4y.js +4 -0
  740. package/dist/ionic/p-BMPN55of.js +4 -0
  741. package/dist/ionic/p-BQ8oNV0v.js +4 -0
  742. package/dist/ionic/p-BSQPZ79H.js +4 -0
  743. package/dist/ionic/p-BhamHSw3.js +4 -0
  744. package/dist/ionic/p-BjvtSsVI.js +4 -0
  745. package/dist/ionic/p-BkfAWuv6.js +4 -0
  746. package/dist/ionic/p-BmVRXR1y.js +4 -0
  747. package/dist/ionic/p-BvabGprD.js +4 -0
  748. package/{components/p-Va26YR7l.js → dist/ionic/p-BwIp10KV.js} +1 -1
  749. package/dist/ionic/p-C-94tAim.js +4 -0
  750. package/dist/ionic/p-C6eME8Ey.js +4 -0
  751. package/dist/ionic/p-CIGNaXM1.js +4 -0
  752. package/dist/ionic/p-CKUuSnDR.js +4 -0
  753. package/dist/ionic/p-CMRtMbJc.js +4 -0
  754. package/dist/ionic/p-CPcPmkGv.js +4 -0
  755. package/dist/ionic/p-CQ_4TirR.js +4 -0
  756. package/dist/ionic/p-CaRuIadB.js +4 -0
  757. package/dist/ionic/p-Cdjxf_yg.js +4 -0
  758. package/dist/ionic/p-ChhhtsGZ.js +5 -0
  759. package/dist/ionic/p-CmKf4pgI.js +4 -0
  760. package/dist/ionic/p-D5t_-oMk.js +4 -0
  761. package/dist/ionic/p-D94b61er.js +4 -0
  762. package/dist/ionic/p-DAztxQR0.js +4 -0
  763. package/dist/ionic/p-DCI3rXQo.js +4 -0
  764. package/dist/ionic/p-DDhtUaaA.js +4 -0
  765. package/dist/ionic/p-DJztqcrH.js +4 -0
  766. package/dist/ionic/p-DWCzVL3Y.js +4 -0
  767. package/dist/ionic/p-DkUB-ROc.js +4 -0
  768. package/dist/ionic/p-Dn0mqQ_R.js +4 -0
  769. package/dist/ionic/p-I3In7hMC.js +4 -0
  770. package/dist/ionic/p-T71k3C35.js +4 -0
  771. package/dist/ionic/p-TXPDHL13.js +4 -0
  772. package/dist/ionic/p-ZjP4CjeZ.js +4 -0
  773. package/dist/ionic/p-a71232d6.entry.js +4 -0
  774. package/dist/ionic/p-a73d8742.entry.js +4 -0
  775. package/dist/ionic/p-a8421d18.entry.js +4 -0
  776. package/dist/ionic/p-a8c2c343.entry.js +4 -0
  777. package/dist/ionic/p-acf0a6af.entry.js +4 -0
  778. package/dist/ionic/p-ad98e3ff.entry.js +4 -0
  779. package/dist/ionic/p-af5166f5.entry.js +4 -0
  780. package/dist/ionic/p-bc2bad5f.entry.js +4 -0
  781. package/dist/ionic/p-be08d500.entry.js +4 -0
  782. package/dist/ionic/p-be9a4f51.entry.js +4 -0
  783. package/dist/ionic/p-byZM6qHV.js +4 -0
  784. package/dist/ionic/p-ccc5044d.entry.js +4 -0
  785. package/dist/ionic/p-ce32912b.entry.js +4 -0
  786. package/dist/ionic/p-ded69ceb.entry.js +4 -0
  787. package/dist/ionic/p-e0c6e31e.entry.js +4 -0
  788. package/dist/ionic/p-e1e5b507.entry.js +4 -0
  789. package/dist/ionic/p-e8c3e08a.entry.js +4 -0
  790. package/dist/ionic/p-ed5d540d.entry.js +4 -0
  791. package/dist/ionic/p-f046aa37.entry.js +4 -0
  792. package/dist/ionic/p-f2802440.entry.js +4 -0
  793. package/dist/ionic/p-f402f5a4.entry.js +4 -0
  794. package/dist/ionic/p-fe1bfbcf.entry.js +4 -0
  795. package/dist/types/components/accordion/accordion.d.ts +3 -6
  796. package/dist/types/components/accordion-group/accordion-group.d.ts +1 -12
  797. package/dist/types/components/action-sheet/action-sheet-interface.d.ts +7 -3
  798. package/dist/types/components/action-sheet/action-sheet.d.ts +2 -3
  799. package/dist/types/components/alert/alert-interface.d.ts +7 -3
  800. package/dist/types/components/alert/alert.d.ts +2 -3
  801. package/dist/types/components/app/app.d.ts +5 -4
  802. package/dist/types/components/avatar/avatar.d.ts +0 -32
  803. package/dist/types/components/back-button/back-button.d.ts +1 -2
  804. package/dist/types/components/backdrop/backdrop.d.ts +0 -4
  805. package/dist/types/components/badge/badge.d.ts +1 -34
  806. package/dist/types/components/breadcrumb/breadcrumb.d.ts +1 -4
  807. package/dist/types/components/breadcrumbs/breadcrumbs.d.ts +2 -2
  808. package/dist/types/components/button/button.d.ts +8 -23
  809. package/dist/types/components/buttons/buttons.d.ts +1 -5
  810. package/dist/types/components/card/card.d.ts +1 -8
  811. package/dist/types/components/card-content/card-content.d.ts +1 -2
  812. package/dist/types/components/card-header/card-header.d.ts +2 -3
  813. package/dist/types/components/card-subtitle/card-subtitle.d.ts +1 -2
  814. package/dist/types/components/card-title/card-title.d.ts +1 -2
  815. package/dist/types/components/checkbox/checkbox.d.ts +4 -14
  816. package/dist/types/components/chip/chip.d.ts +1 -26
  817. package/dist/types/components/col/col.d.ts +5 -52
  818. package/dist/types/components/content/content.d.ts +0 -3
  819. package/dist/types/components/datetime/datetime.d.ts +1 -26
  820. package/dist/types/components/datetime/utils/data.d.ts +5 -5
  821. package/dist/types/components/datetime-button/datetime-button.d.ts +1 -2
  822. package/dist/types/components/fab/fab.d.ts +0 -4
  823. package/dist/types/components/fab-button/fab-button.d.ts +3 -5
  824. package/dist/types/components/fab-list/fab-list.d.ts +0 -4
  825. package/dist/types/components/footer/footer.d.ts +3 -20
  826. package/dist/types/components/grid/grid.d.ts +0 -4
  827. package/dist/types/components/header/header.d.ts +3 -26
  828. package/dist/types/components/header/header.utils.d.ts +5 -4
  829. package/dist/types/components/img/img.d.ts +1 -2
  830. package/dist/types/components/infinite-scroll/infinite-scroll.d.ts +0 -21
  831. package/dist/types/components/infinite-scroll-content/infinite-scroll-content.d.ts +0 -4
  832. package/dist/types/components/input/input.d.ts +17 -40
  833. package/dist/types/components/input-otp/input-otp.d.ts +0 -37
  834. package/dist/types/components/input-password-toggle/input-password-toggle.d.ts +0 -2
  835. package/dist/types/components/item/item.d.ts +4 -11
  836. package/dist/types/components/item-divider/item-divider.d.ts +1 -2
  837. package/dist/types/components/item-group/item-group.d.ts +0 -4
  838. package/dist/types/components/item-option/item-option.d.ts +1 -18
  839. package/dist/types/components/item-options/item-options.d.ts +0 -4
  840. package/dist/types/components/item-sliding/item-sliding.d.ts +1 -47
  841. package/dist/types/components/item-sliding/test/test.utils.d.ts +0 -13
  842. package/dist/types/components/label/label.d.ts +1 -2
  843. package/dist/types/components/list/list.d.ts +1 -15
  844. package/dist/types/components/list-header/list-header.d.ts +1 -2
  845. package/dist/types/components/loading/loading-interface.d.ts +7 -2
  846. package/dist/types/components/loading/loading.d.ts +2 -3
  847. package/dist/types/components/menu/menu.d.ts +0 -3
  848. package/dist/types/components/menu-button/menu-button.d.ts +1 -3
  849. package/dist/types/components/menu-toggle/menu-toggle.d.ts +0 -3
  850. package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
  851. package/dist/types/components/modal/modal-interface.d.ts +16 -4
  852. package/dist/types/components/modal/modal.d.ts +12 -15
  853. package/dist/types/components/nav/nav-interface.d.ts +1 -10
  854. package/dist/types/components/nav/nav.d.ts +3 -27
  855. package/dist/types/components/nav-link/nav-link.d.ts +0 -4
  856. package/dist/types/components/note/note.d.ts +1 -2
  857. package/dist/types/components/picker/picker.d.ts +1 -2
  858. package/dist/types/components/picker-column/picker-column.d.ts +1 -2
  859. package/dist/types/components/picker-column-option/picker-column-option.d.ts +0 -4
  860. package/dist/types/components/popover/popover-interface.d.ts +6 -3
  861. package/dist/types/components/popover/popover.d.ts +5 -6
  862. package/dist/types/components/progress-bar/progress-bar.d.ts +1 -10
  863. package/dist/types/components/radio/radio.d.ts +1 -2
  864. package/dist/types/components/radio-group/radio-group.d.ts +0 -12
  865. package/dist/types/components/range/range.d.ts +1 -2
  866. package/dist/types/components/refresher/refresher.d.ts +1 -2
  867. package/dist/types/components/refresher-content/refresher-content.d.ts +0 -4
  868. package/dist/types/components/reorder/reorder.d.ts +0 -9
  869. package/dist/types/components/reorder-group/reorder-group.d.ts +0 -4
  870. package/dist/types/components/ripple-effect/ripple-effect.d.ts +0 -4
  871. package/dist/types/components/route/route.d.ts +1 -5
  872. package/dist/types/components/router/router.d.ts +0 -4
  873. package/dist/types/components/router-link/router-link.d.ts +0 -4
  874. package/dist/types/components/router-outlet/router-outlet.d.ts +8 -4
  875. package/dist/types/components/row/row.d.ts +0 -4
  876. package/dist/types/components/searchbar/searchbar.d.ts +11 -57
  877. package/dist/types/components/segment/segment.d.ts +1 -2
  878. package/dist/types/components/segment-button/segment-button.d.ts +1 -2
  879. package/dist/types/components/select/select.d.ts +26 -55
  880. package/dist/types/components/select-modal/select-modal.d.ts +0 -8
  881. package/dist/types/components/select-option/select-option.d.ts +4 -7
  882. package/dist/types/components/select-popover/select-popover.d.ts +0 -3
  883. package/dist/types/components/skeleton-text/skeleton-text.d.ts +0 -4
  884. package/dist/types/components/spinner/spinner.d.ts +0 -15
  885. package/dist/types/components/split-pane/split-pane.d.ts +0 -4
  886. package/dist/types/components/tab/tab.d.ts +0 -4
  887. package/dist/types/components/tab-bar/tab-bar-interface.d.ts +0 -1
  888. package/dist/types/components/tab-bar/tab-bar.d.ts +3 -41
  889. package/dist/types/components/tab-button/tab-button.d.ts +1 -12
  890. package/dist/types/components/tabs/tabs.d.ts +0 -3
  891. package/dist/types/components/text/text.d.ts +1 -2
  892. package/dist/types/components/textarea/textarea.d.ts +16 -58
  893. package/dist/types/components/thumbnail/thumbnail.d.ts +0 -4
  894. package/dist/types/components/title/title.d.ts +0 -4
  895. package/dist/types/components/toast/animations/utils.d.ts +2 -2
  896. package/dist/types/components/toast/toast-interface.d.ts +7 -3
  897. package/dist/types/components/toast/toast.d.ts +2 -19
  898. package/dist/types/components/toggle/toggle.d.ts +1 -15
  899. package/dist/types/components/toolbar/toolbar.d.ts +3 -43
  900. package/dist/types/components.d.ts +263 -2171
  901. package/dist/types/global/ionic-global.d.ts +2 -28
  902. package/dist/types/index.d.ts +1 -1
  903. package/dist/types/interface.d.ts +0 -4
  904. package/dist/types/utils/config.d.ts +3 -114
  905. package/dist/types/utils/focus-trap.d.ts +1 -1
  906. package/dist/types/utils/focus-visible.d.ts +0 -13
  907. package/dist/types/utils/forms/index.d.ts +1 -1
  908. package/dist/types/utils/forms/start-container-controller.d.ts +34 -0
  909. package/dist/types/utils/forms/validity.d.ts +0 -7
  910. package/dist/types/utils/helpers.d.ts +0 -22
  911. package/dist/types/utils/logging/index.d.ts +2 -1
  912. package/dist/types/utils/overlay-control-label.d.ts +9 -11
  913. package/dist/types/utils/overlays-interface.d.ts +1 -31
  914. package/dist/types/utils/overlays.d.ts +12 -10
  915. package/dist/types/utils/test/playwright/drag-element.d.ts +3 -16
  916. package/dist/types/utils/test/playwright/generator.d.ts +2 -31
  917. package/dist/types/utils/test/playwright/playwright-page.d.ts +1 -1
  918. package/dist/types/utils/test/playwright/testExpect.d.ts +1 -1
  919. package/dist/types/utils/theme.d.ts +0 -9
  920. package/hydrate/index.js +10577 -12217
  921. package/hydrate/index.mjs +10577 -12217
  922. package/package.json +56 -17
  923. package/components/ion-divider.d.ts +0 -11
  924. package/components/ion-divider.js +0 -4
  925. package/components/ion-gallery-item.d.ts +0 -11
  926. package/components/ion-gallery-item.js +0 -4
  927. package/components/ion-gallery.d.ts +0 -11
  928. package/components/ion-gallery.js +0 -4
  929. package/components/ion-picker-legacy-column.d.ts +0 -11
  930. package/components/ion-picker-legacy-column.js +0 -4
  931. package/components/ion-picker-legacy.d.ts +0 -11
  932. package/components/ion-picker-legacy.js +0 -4
  933. package/components/p-6hUZIMBp.js +0 -4
  934. package/components/p-9mfpAwJh.js +0 -4
  935. package/components/p-B2aAAEfp.js +0 -4
  936. package/components/p-B2lpqDWK.js +0 -4
  937. package/components/p-BDoEcs72.js +0 -4
  938. package/components/p-BDqjX7Z_.js +0 -4
  939. package/components/p-BE21dB_a.js +0 -4
  940. package/components/p-BFpXpzD-.js +0 -4
  941. package/components/p-BTEOs1at.js +0 -4
  942. package/components/p-BUNIyvqe.js +0 -4
  943. package/components/p-BYSs-jZz.js +0 -4
  944. package/components/p-BYoGvMgh.js +0 -4
  945. package/components/p-BYrCPOBM.js +0 -4
  946. package/components/p-BbVhJs-a.js +0 -4
  947. package/components/p-BhRXIcSN.js +0 -4
  948. package/components/p-BjW8SOqw.js +0 -4
  949. package/components/p-BsiHrVPa.js +0 -4
  950. package/components/p-BwKpO3Is.js +0 -4
  951. package/components/p-Bz8jnuiy.js +0 -4
  952. package/components/p-C-Ea1l5K.js +0 -4
  953. package/components/p-C3X10Pc6.js +0 -4
  954. package/components/p-C53feagD.js +0 -4
  955. package/components/p-CA4M5WkT.js +0 -4
  956. package/components/p-CH6jbAEI.js +0 -4
  957. package/components/p-CJE5t2qs.js +0 -4
  958. package/components/p-CODBQrPj.js +0 -4
  959. package/components/p-CUbb1HkU.js +0 -4
  960. package/components/p-CVYFPBs-.js +0 -4
  961. package/components/p-CVoLDZ7z.js +0 -4
  962. package/components/p-CZrORZXS.js +0 -4
  963. package/components/p-Cc3oC60a.js +0 -4
  964. package/components/p-Cl0B-RWe.js +0 -4
  965. package/components/p-CmoUesXp.js +0 -4
  966. package/components/p-CyNW8ypn.js +0 -4
  967. package/components/p-CzxyxYID.js +0 -4
  968. package/components/p-D0Iqw6OZ.js +0 -4
  969. package/components/p-D0LT3Z3i.js +0 -4
  970. package/components/p-D1t981Ih.js +0 -4
  971. package/components/p-D6tqrIYY.js +0 -4
  972. package/components/p-D9C5yWpF.js +0 -4
  973. package/components/p-DCRXgAoM.js +0 -4
  974. package/components/p-DL5wyRub.js +0 -4
  975. package/components/p-DQlXUUDh.js +0 -4
  976. package/components/p-DRWN7QM2.js +0 -4
  977. package/components/p-DaJxRxSQ.js +0 -4
  978. package/components/p-DbmfFkd1.js +0 -4
  979. package/components/p-Dhi5xtNS.js +0 -4
  980. package/components/p-DnwLgh9U.js +0 -4
  981. package/components/p-DoZB3DcY.js +0 -4
  982. package/components/p-DrrpZB81.js +0 -4
  983. package/components/p-DrzWRqnG.js +0 -4
  984. package/components/p-DylrHLJF.js +0 -4
  985. package/components/p-Dypq4kXE.js +0 -4
  986. package/components/p-DzeMJvWL.js +0 -4
  987. package/components/p-Dzk4Tr0X.js +0 -4
  988. package/components/p-Rkm2AOZ2.js +0 -4
  989. package/components/p-UYngqo1f.js +0 -4
  990. package/components/p-asUhrzOB.js +0 -4
  991. package/components/p-fIOYmaqA.js +0 -4
  992. package/components/p-jlwpz7Ms.js +0 -4
  993. package/components/p-kInyVu79.js +0 -4
  994. package/components/p-miSYSxcc.js +0 -4
  995. package/components/p-paDbTUL9.js +0 -4
  996. package/components/p-vXpMhGrs.js +0 -4
  997. package/components/p-znZTPd7u.js +0 -4
  998. package/css/ionic/bundle.ionic.css +0 -1
  999. package/css/ionic/bundle.ionic.css.map +0 -1
  1000. package/css/ionic/core.ionic.css +0 -1
  1001. package/css/ionic/core.ionic.css.map +0 -1
  1002. package/css/ionic/global.bundle.ionic.css +0 -1
  1003. package/css/ionic/global.bundle.ionic.css.map +0 -1
  1004. package/css/ionic/ionic-swiper.ionic.css +0 -1
  1005. package/css/ionic/ionic-swiper.ionic.css.map +0 -1
  1006. package/css/ionic/link.ionic.css +0 -1
  1007. package/css/ionic/link.ionic.css.map +0 -1
  1008. package/css/ionic/structure.ionic.css +0 -1
  1009. package/css/ionic/structure.ionic.css.map +0 -1
  1010. package/css/ionic/typography.ionic.css +0 -1
  1011. package/css/ionic/typography.ionic.css.map +0 -1
  1012. package/css/ionic/utils.bundle.ionic.css +0 -1
  1013. package/css/ionic/utils.bundle.ionic.css.map +0 -1
  1014. package/dist/cjs/caret-down-vtVgfXIs.js +0 -8
  1015. package/dist/cjs/caret-left-CxZXLRv5.js +0 -8
  1016. package/dist/cjs/caret-right-CRCgv98E.js +0 -8
  1017. package/dist/cjs/clear-button-press-controller-2hAy_qdm.js +0 -45
  1018. package/dist/cjs/input.utils-CYZZsbdf.js +0 -150
  1019. package/dist/cjs/ion-datetime_3.cjs.entry.js +0 -3242
  1020. package/dist/cjs/ion-divider.cjs.entry.js +0 -51
  1021. package/dist/cjs/ion-gallery-item.cjs.entry.js +0 -59
  1022. package/dist/cjs/ion-gallery.cjs.entry.js +0 -607
  1023. package/dist/cjs/ionic-global-DvEcO0tQ.js +0 -519
  1024. package/dist/cjs/list-a-7GSA6K.js +0 -8
  1025. package/dist/cjs/notch-controller-CFlPw7ER.js +0 -155
  1026. package/dist/cjs/scroll-hide-controller-DAf_DwKc.js +0 -345
  1027. package/dist/cjs/validity-QmuwEptc.js +0 -51
  1028. package/dist/cjs/x-BTF99yFH.js +0 -8
  1029. package/dist/collection/components/accordion/accordion.ionic.css +0 -201
  1030. package/dist/collection/components/accordion-group/accordion-group.ionic.css +0 -93
  1031. package/dist/collection/components/action-sheet/action-sheet.ionic.css +0 -494
  1032. package/dist/collection/components/alert/alert.ionic.css +0 -787
  1033. package/dist/collection/components/avatar/avatar.ionic.css +0 -385
  1034. package/dist/collection/components/backdrop/backdrop.ionic.css +0 -109
  1035. package/dist/collection/components/badge/badge.ionic.css +0 -272
  1036. package/dist/collection/components/button/button.ionic.css +0 -644
  1037. package/dist/collection/components/buttons/buttons.ionic.css +0 -97
  1038. package/dist/collection/components/card/card.ionic.css +0 -144
  1039. package/dist/collection/components/card-content/card-content.ionic.css +0 -89
  1040. package/dist/collection/components/card-header/card-header.ionic.css +0 -85
  1041. package/dist/collection/components/card-subtitle/card-subtitle.ionic.css +0 -144
  1042. package/dist/collection/components/checkbox/checkbox.ionic.css +0 -543
  1043. package/dist/collection/components/chip/chip.ionic.css +0 -217
  1044. package/dist/collection/components/datetime/datetime.ionic.css +0 -703
  1045. package/dist/collection/components/divider/divider.ionic.css +0 -148
  1046. package/dist/collection/components/divider/divider.ios.css +0 -87
  1047. package/dist/collection/components/divider/divider.js +0 -94
  1048. package/dist/collection/components/divider/divider.md.css +0 -87
  1049. package/dist/collection/components/footer/footer-interface.js +0 -1
  1050. package/dist/collection/components/gallery/gallery-constants.js +0 -12
  1051. package/dist/collection/components/gallery/gallery-interface.js +0 -1
  1052. package/dist/collection/components/gallery/gallery.css +0 -15
  1053. package/dist/collection/components/gallery/gallery.js +0 -679
  1054. package/dist/collection/components/gallery/test/utils.js +0 -100
  1055. package/dist/collection/components/gallery-item/gallery-item.css +0 -49
  1056. package/dist/collection/components/gallery-item/gallery-item.js +0 -99
  1057. package/dist/collection/components/header/header-interface.js +0 -1
  1058. package/dist/collection/components/header/header.ionic.css +0 -250
  1059. package/dist/collection/components/input/input.ionic.css +0 -891
  1060. package/dist/collection/components/input-otp/input-otp.ionic.css +0 -371
  1061. package/dist/collection/components/input-password-toggle/input-password-toggle.ionic.css +0 -78
  1062. package/dist/collection/components/input-password-toggle/input-password-toggle.native.css +0 -61
  1063. package/dist/collection/components/item/item.ionic.css +0 -496
  1064. package/dist/collection/components/item-option/item-option.ionic.css +0 -277
  1065. package/dist/collection/components/item-options/item-options.ionic.css +0 -221
  1066. package/dist/collection/components/item-sliding/item-sliding.ionic.css +0 -211
  1067. package/dist/collection/components/list/list.ionic.css +0 -212
  1068. package/dist/collection/components/list-header/list-header.ionic.css +0 -190
  1069. package/dist/collection/components/menu-button/menu-button.ionic.css +0 -236
  1070. package/dist/collection/components/modal/animations/ionic.enter.js +0 -40
  1071. package/dist/collection/components/modal/animations/ionic.leave.js +0 -28
  1072. package/dist/collection/components/modal/modal.ionic.css +0 -255
  1073. package/dist/collection/components/picker-legacy/animations/ios.enter.js +0 -27
  1074. package/dist/collection/components/picker-legacy/animations/ios.leave.js +0 -23
  1075. package/dist/collection/components/picker-legacy/picker-interface.js +0 -1
  1076. package/dist/collection/components/picker-legacy/picker.ios.css +0 -312
  1077. package/dist/collection/components/picker-legacy/picker.js +0 -891
  1078. package/dist/collection/components/picker-legacy/picker.md.css +0 -299
  1079. package/dist/collection/components/picker-legacy-column/picker-column.ios.css +0 -243
  1080. package/dist/collection/components/picker-legacy-column/picker-column.js +0 -422
  1081. package/dist/collection/components/picker-legacy-column/picker-column.md.css +0 -234
  1082. package/dist/collection/components/picker-legacy-column/test/test.utils.js +0 -43
  1083. package/dist/collection/components/popover/popover.ionic.css +0 -290
  1084. package/dist/collection/components/progress-bar/progress-bar.ionic.css +0 -287
  1085. package/dist/collection/components/radio/radio.ionic.css +0 -422
  1086. package/dist/collection/components/radio-group/radio-group.ionic.css +0 -119
  1087. package/dist/collection/components/range/range.ionic.css +0 -567
  1088. package/dist/collection/components/ripple-effect/ripple-effect.ionic.css +0 -215
  1089. package/dist/collection/components/searchbar/searchbar.ionic.css +0 -622
  1090. package/dist/collection/components/segment/segment.ionic.css +0 -115
  1091. package/dist/collection/components/segment-button/segment-button.ionic.css +0 -352
  1092. package/dist/collection/components/select/select.ionic.css +0 -809
  1093. package/dist/collection/components/select-modal/select-modal.ionic.css +0 -257
  1094. package/dist/collection/components/select-popover/select-popover.ionic.css +0 -255
  1095. package/dist/collection/components/spinner/spinner.native.css +0 -199
  1096. package/dist/collection/components/tab-bar/tab-bar.ionic.css +0 -249
  1097. package/dist/collection/components/tab-button/tab-button.ionic.css +0 -373
  1098. package/dist/collection/components/textarea/textarea.ionic.css +0 -898
  1099. package/dist/collection/components/title/title.ionic.css +0 -127
  1100. package/dist/collection/components/toast/toast.ionic.css +0 -394
  1101. package/dist/collection/components/toggle/toggle.ionic.css +0 -512
  1102. package/dist/collection/components/toolbar/test/image.svg +0 -1
  1103. package/dist/collection/components/toolbar/toolbar.ionic.css +0 -249
  1104. package/dist/collection/utils/css-value-validation.js +0 -39
  1105. package/dist/collection/utils/forms/clear-button-press-controller.js +0 -40
  1106. package/dist/collection/utils/scroll-hide-controller.js +0 -178
  1107. package/dist/esm/caret-down-D1t981Ih.js +0 -6
  1108. package/dist/esm/caret-left-fIOYmaqA.js +0 -6
  1109. package/dist/esm/caret-right-BYSs-jZz.js +0 -6
  1110. package/dist/esm/clear-button-press-controller-C79TPm5p.js +0 -43
  1111. package/dist/esm/input.utils-fs4B7WL5.js +0 -147
  1112. package/dist/esm/ion-datetime_3.entry.js +0 -3238
  1113. package/dist/esm/ion-divider.entry.js +0 -49
  1114. package/dist/esm/ion-gallery-item.entry.js +0 -57
  1115. package/dist/esm/ion-gallery.entry.js +0 -605
  1116. package/dist/esm/ionic-global-CEwbmRLz.js +0 -508
  1117. package/dist/esm/list-Dhi5xtNS.js +0 -6
  1118. package/dist/esm/notch-controller-CsbpmbOz.js +0 -153
  1119. package/dist/esm/scroll-hide-controller-CfbtPBWv.js +0 -342
  1120. package/dist/esm/theme-DaJxRxSQ.js +0 -67
  1121. package/dist/esm/validity-BjW8SOqw.js +0 -48
  1122. package/dist/esm/x-BDqjX7Z_.js +0 -6
  1123. package/dist/ionic/p--sroV-k-.js +0 -4
  1124. package/dist/ionic/p-00731d20.entry.js +0 -4
  1125. package/dist/ionic/p-03c20a50.entry.js +0 -4
  1126. package/dist/ionic/p-03ec6673.entry.js +0 -4
  1127. package/dist/ionic/p-0405ec57.entry.js +0 -4
  1128. package/dist/ionic/p-04f16322.entry.js +0 -4
  1129. package/dist/ionic/p-09123f89.entry.js +0 -4
  1130. package/dist/ionic/p-15028853.entry.js +0 -4
  1131. package/dist/ionic/p-16c5db90.entry.js +0 -4
  1132. package/dist/ionic/p-1d1dfb68.entry.js +0 -4
  1133. package/dist/ionic/p-231572a0.entry.js +0 -4
  1134. package/dist/ionic/p-2740db6e.entry.js +0 -4
  1135. package/dist/ionic/p-2a6d4601.entry.js +0 -4
  1136. package/dist/ionic/p-2d8fe33c.entry.js +0 -4
  1137. package/dist/ionic/p-2dbc50d9.entry.js +0 -4
  1138. package/dist/ionic/p-32d3095c.entry.js +0 -4
  1139. package/dist/ionic/p-356cd619.entry.js +0 -4
  1140. package/dist/ionic/p-391bdb60.entry.js +0 -4
  1141. package/dist/ionic/p-3b2ab5b4.entry.js +0 -4
  1142. package/dist/ionic/p-4e3e750a.entry.js +0 -4
  1143. package/dist/ionic/p-4fee0df6.entry.js +0 -4
  1144. package/dist/ionic/p-547d010c.entry.js +0 -4
  1145. package/dist/ionic/p-54895118.entry.js +0 -4
  1146. package/dist/ionic/p-6163d04d.entry.js +0 -4
  1147. package/dist/ionic/p-679c1448.entry.js +0 -4
  1148. package/dist/ionic/p-6de524e5.entry.js +0 -4
  1149. package/dist/ionic/p-764d7ea2.entry.js +0 -4
  1150. package/dist/ionic/p-7k7Q1A38.js +0 -4
  1151. package/dist/ionic/p-81BMEE8Q.js +0 -4
  1152. package/dist/ionic/p-8d6d7acb.entry.js +0 -4
  1153. package/dist/ionic/p-96732fe2.entry.js +0 -4
  1154. package/dist/ionic/p-96c4c1b9.entry.js +0 -4
  1155. package/dist/ionic/p-9745f518.entry.js +0 -4
  1156. package/dist/ionic/p-9a40af3c.entry.js +0 -4
  1157. package/dist/ionic/p-9e725104.entry.js +0 -4
  1158. package/dist/ionic/p-B4Kq2YNk.js +0 -4
  1159. package/dist/ionic/p-BDqjX7Z_.js +0 -4
  1160. package/dist/ionic/p-BTEOs1at.js +0 -4
  1161. package/dist/ionic/p-BYSs-jZz.js +0 -4
  1162. package/dist/ionic/p-BbWo-T8F.js +0 -4
  1163. package/dist/ionic/p-BjW8SOqw.js +0 -4
  1164. package/dist/ionic/p-Bvz8PHo5.js +0 -4
  1165. package/dist/ionic/p-BwKpO3Is.js +0 -4
  1166. package/dist/ionic/p-C0EQceqV.js +0 -5
  1167. package/dist/ionic/p-C1_a9uRb.js +0 -4
  1168. package/dist/ionic/p-C53feagD.js +0 -4
  1169. package/dist/ionic/p-C6WD6qSF.js +0 -4
  1170. package/dist/ionic/p-C7urd_wE.js +0 -4
  1171. package/dist/ionic/p-CCgRIJJv.js +0 -4
  1172. package/dist/ionic/p-CEkwLb3L.js +0 -4
  1173. package/dist/ionic/p-CGFf6My7.js +0 -4
  1174. package/dist/ionic/p-CLUwRxij.js +0 -4
  1175. package/dist/ionic/p-CODBQrPj.js +0 -4
  1176. package/dist/ionic/p-CP_sVwEm.js +0 -4
  1177. package/dist/ionic/p-CSMWpRc0.js +0 -4
  1178. package/dist/ionic/p-CYYo93al.js +0 -4
  1179. package/dist/ionic/p-Cipl19Qe.js +0 -4
  1180. package/dist/ionic/p-Cl0B-RWe.js +0 -4
  1181. package/dist/ionic/p-CnIzWLAn.js +0 -4
  1182. package/dist/ionic/p-Cvvva6Z7.js +0 -4
  1183. package/dist/ionic/p-D1t981Ih.js +0 -4
  1184. package/dist/ionic/p-DINFwXlp.js +0 -4
  1185. package/dist/ionic/p-DIvCXVmD.js +0 -4
  1186. package/dist/ionic/p-DTsDGZPd.js +0 -4
  1187. package/dist/ionic/p-DaJxRxSQ.js +0 -4
  1188. package/dist/ionic/p-Dhi5xtNS.js +0 -4
  1189. package/dist/ionic/p-DtQgCTtW.js +0 -4
  1190. package/dist/ionic/p-DuRx6DeQ.js +0 -4
  1191. package/dist/ionic/p-YGLqXqFd.js +0 -4
  1192. package/dist/ionic/p-YIsE5bNG.js +0 -4
  1193. package/dist/ionic/p-a61c2ace.entry.js +0 -4
  1194. package/dist/ionic/p-abb516e3.entry.js +0 -4
  1195. package/dist/ionic/p-b54edee6.entry.js +0 -4
  1196. package/dist/ionic/p-c076ac5c.entry.js +0 -4
  1197. package/dist/ionic/p-c4ff25cb.entry.js +0 -4
  1198. package/dist/ionic/p-c7279756.entry.js +0 -4
  1199. package/dist/ionic/p-c7ebed50.entry.js +0 -4
  1200. package/dist/ionic/p-cd0037e4.entry.js +0 -4
  1201. package/dist/ionic/p-d261938d.entry.js +0 -4
  1202. package/dist/ionic/p-d33dfc12.entry.js +0 -4
  1203. package/dist/ionic/p-d7764330.entry.js +0 -4
  1204. package/dist/ionic/p-defb23a2.entry.js +0 -4
  1205. package/dist/ionic/p-df642ef5.entry.js +0 -4
  1206. package/dist/ionic/p-e2a35249.entry.js +0 -4
  1207. package/dist/ionic/p-e2b952ef.entry.js +0 -4
  1208. package/dist/ionic/p-e77cfd1e.entry.js +0 -4
  1209. package/dist/ionic/p-ecb9d3d3.entry.js +0 -4
  1210. package/dist/ionic/p-efd13adf.entry.js +0 -4
  1211. package/dist/ionic/p-f0904c1d.entry.js +0 -4
  1212. package/dist/ionic/p-f33689f7.entry.js +0 -4
  1213. package/dist/ionic/p-f693efe9.entry.js +0 -4
  1214. package/dist/ionic/p-f788396b.entry.js +0 -4
  1215. package/dist/ionic/p-fIOYmaqA.js +0 -4
  1216. package/dist/ionic/p-fa16fad8.entry.js +0 -4
  1217. package/dist/ionic/p-lMb_45ax.js +0 -4
  1218. package/dist/ionic/p-oadJNPuo.js +0 -4
  1219. package/dist/ionic/p-vXpMhGrs.js +0 -4
  1220. package/dist/ionic/p-wNjWCZVO.js +0 -4
  1221. package/dist/types/components/divider/divider.d.ts +0 -20
  1222. package/dist/types/components/footer/footer-interface.d.ts +0 -1
  1223. package/dist/types/components/gallery/gallery-constants.d.ts +0 -9
  1224. package/dist/types/components/gallery/gallery-interface.d.ts +0 -10
  1225. package/dist/types/components/gallery/gallery.d.ts +0 -218
  1226. package/dist/types/components/gallery/test/utils.d.ts +0 -3
  1227. package/dist/types/components/gallery-item/gallery-item.d.ts +0 -33
  1228. package/dist/types/components/header/header-interface.d.ts +0 -1
  1229. package/dist/types/components/modal/animations/ionic.enter.d.ts +0 -6
  1230. package/dist/types/components/modal/animations/ionic.leave.d.ts +0 -6
  1231. package/dist/types/components/picker-legacy/animations/ios.enter.d.ts +0 -5
  1232. package/dist/types/components/picker-legacy/animations/ios.leave.d.ts +0 -5
  1233. package/dist/types/components/picker-legacy/picker-interface.d.ts +0 -52
  1234. package/dist/types/components/picker-legacy/picker.d.ts +0 -159
  1235. package/dist/types/components/picker-legacy-column/picker-column.d.ts +0 -46
  1236. package/dist/types/components/picker-legacy-column/test/test.utils.d.ts +0 -9
  1237. package/dist/types/utils/css-value-validation.d.ts +0 -21
  1238. package/dist/types/utils/forms/clear-button-press-controller.d.ts +0 -20
  1239. package/dist/types/utils/scroll-hide-controller.d.ts +0 -56
  1240. /package/dist/collection/components/{refresher-content/refresher-content.css → input-password-toggle/input-password-toggle.css} +0 -0
@@ -1,24 +1,23 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import caretDownRegular from "@phosphor-icons/core/assets/regular/caret-down.svg";
5
4
  import { Build, Host, h, forceUpdate } from "@stencil/core";
6
5
  import { ENABLE_HTML_CONTENT_DEFAULT } from "../../utils/config";
7
- import { compareOptions, createNotchController, isOptionSelected, checkInvalidState } from "../../utils/forms/index";
8
- import { suppressFocusVisible, renderHiddenInput, inheritAttributes } from "../../utils/helpers";
6
+ import { compareOptions, createNotchController, createStartContainerController, isOptionSelected, checkInvalidState, } from "../../utils/forms/index";
7
+ import { focusVisibleElement, renderHiddenInput, inheritAttributes } from "../../utils/helpers";
9
8
  import { printIonWarning } from "../../utils/logging/index";
10
9
  import { actionSheetController, alertController, popoverController, modalController } from "../../utils/overlays";
11
10
  import { isRTL } from "../../utils/rtl/index";
12
11
  import { reflectPropertiesToAttributes, sanitizeDOMTree } from "../../utils/sanitization/index";
12
+ import { createSlotMutationController } from "../../utils/slot-mutation-controller";
13
13
  import { createColorClasses, hostContext } from "../../utils/theme";
14
14
  import { watchForOptions } from "../../utils/watch-options";
15
15
  import { caretDownSharp, chevronExpand } from "ionicons/icons";
16
16
  import { config } from "../../global/config";
17
- import { getIonTheme } from "../../global/ionic-global";
17
+ import { getIonMode } from "../../global/ionic-global";
18
18
  // TODO(FW-2832): types
19
19
  /**
20
- * @virtualProp {"ios" | "md"} mode - The mode determines the platform behaviors of the component.
21
- * @virtualProp {"ios" | "md" | "ionic"} theme - The theme determines the visual appearance of the component.
20
+ * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
22
21
  *
23
22
  * @slot label - The label text to associate with the select. Use the `labelPlacement` property to control where the label is placed relative to the select. Use this if you need to render a label with custom HTML.
24
23
  * @slot start - Content to display at the leading edge of the select.
@@ -34,154 +33,244 @@ import { getIonTheme } from "../../global/ionic-global";
34
33
  * @part error-text - Supporting text displayed beneath the select when the select is invalid and touched.
35
34
  * @part bottom - The container element for helper text, error text, and counter.
36
35
  * @part wrapper - The clickable label element that wraps the entire form field (label text, slots, selected values or placeholder, and toggle icons).
37
- * @part inner - The inner element of the wrapper that manages the slots, selected values or placeholder, and toggle icons.
36
+ * @part start - The wrapper element for the content in the start slot.
37
+ * @part control - The wrapper element containing the label and native select control. When the label is not floating or stacked, this part also contains the dropdown icon.
38
+ * @part end - The wrapper element for the content in the end slot. When the label is floating or stacked, this part also contains the dropdown icon.
38
39
  */
39
40
  export class Select {
40
- constructor() {
41
- this.inputId = `ion-sel-${selectIds++}`;
42
- this.helperTextId = `${this.inputId}-helper-text`;
43
- this.errorTextId = `${this.inputId}-error-text`;
44
- this.inheritedAttributes = {};
45
- this.customHTMLEnabled = config.get('innerHTMLTemplatesEnabled', ENABLE_HTML_CONTENT_DEFAULT);
46
- this.isExpanded = false;
47
- /**
48
- * The `hasFocus` state ensures the focus class is
49
- * added regardless of how the element is focused.
50
- * The `ion-focused` class only applies when focused
51
- * via tabbing, not by clicking.
52
- * The `has-focus` logic was added to ensure the class
53
- * is applied in both cases.
54
- */
55
- this.hasFocus = false;
56
- /**
57
- * Track validation state for proper aria-live announcements.
58
- */
59
- this.isInvalid = false;
60
- /**
61
- * The text to display on the cancel button.
62
- */
63
- this.cancelText = 'Cancel';
64
- /**
65
- * If `true`, the cancel button will display an icon instead of the `cancelText`.
66
- * Only applies when `interface` is set to `"modal"`. Has no effect on `"action-sheet"`,
67
- * `"alert"`, or `"popover"` interfaces.
68
- * When `cancelIcon` is `true`, the `cancelText` property is ignored for display
69
- * but is used as the accessible label for the icon button.
70
- */
71
- this.cancelIcon = false;
72
- /**
73
- * If `true`, the user cannot interact with the select.
74
- */
75
- this.disabled = false;
76
- /**
77
- * The interface the select should use: `action-sheet`, `popover`, `alert`, or `modal`.
78
- */
79
- this.interface = 'alert';
80
- /**
81
- * Any additional options that the `alert`, `action-sheet` or `popover` interface
82
- * can take. See the [ion-alert docs](./alert), the
83
- * [ion-action-sheet docs](./action-sheet), the
84
- * [ion-popover docs](./popover), and the [ion-modal docs](./modal) for the
85
- * create options for each interface.
86
- *
87
- * Note: `interfaceOptions` will not override `inputs` or `buttons` with the `alert` interface.
88
- */
89
- this.interfaceOptions = {};
90
- /**
91
- * Where to place the label relative to the select.
92
- * `"start"`: The label will appear to the left of the select in LTR and to the right in RTL.
93
- * `"end"`: The label will appear to the right of the select in LTR and to the left in RTL.
94
- * `"floating"`: The label will appear smaller and above the select when the select is focused or it has a value. Otherwise it will appear on top of the select.
95
- * `"stacked"`: The label will appear smaller and above the select regardless even when the select is blurred or has no value.
96
- * `"fixed"`: The label has the same behavior as `"start"` except it also has a fixed width. Long text will be truncated with ellipses ("...").
97
- * When using `"floating"` or `"stacked"` we recommend initializing the select with either a `value` or a `placeholder`.
98
- */
99
- this.labelPlacement = 'start';
100
- /**
101
- * If `true`, the select can accept multiple values.
102
- */
103
- this.multiple = false;
104
- /**
105
- * The name of the control, which is submitted with the form data.
106
- */
107
- this.name = this.inputId;
108
- /**
109
- * The text to display on the ok button.
110
- */
111
- this.okText = 'OK';
112
- /**
113
- * If true, screen readers will announce it as a required field. This property
114
- * works only for accessibility purposes, it will not prevent the form from
115
- * submitting if the value is invalid.
116
- */
117
- this.required = false;
118
- this.onClick = (ev) => {
119
- const target = ev.target;
120
- const closestSlot = target.closest('[slot="start"], [slot="end"]');
121
- if (target === this.el || closestSlot === null) {
122
- this.setFocus();
123
- this.open(ev);
124
- }
125
- else {
126
- /**
127
- * Prevent clicks to the start/end slots from opening the select.
128
- * We ensure the target isn't this element in case the select is slotted
129
- * in, for example, an item. This would prevent the select from ever
130
- * being opened since the element itself has slot="start"/"end".
131
- *
132
- * Clicking a slotted element also causes a click
133
- * on the <label> element (since it wraps the slots).
134
- * Clicking <label> dispatches another click event on
135
- * the native form control that then bubbles up to this
136
- * listener. This additional event targets the host
137
- * element, so the select overlay is opened.
138
- *
139
- * When the slotted elements are clicked (and therefore
140
- * the ancestor <label> element) we want to prevent the label
141
- * from dispatching another click event.
142
- *
143
- * Do not call stopPropagation() because this will cause
144
- * click handlers on the slotted elements to never fire in React.
145
- * When developers do onClick in React a native "click" listener
146
- * is added on the root element, not the slotted element. When that
147
- * native click listener fires, React then dispatches the synthetic
148
- * click event on the slotted element. However, if stopPropagation
149
- * is called then the native click event will never bubble up
150
- * to the root element.
151
- */
152
- ev.preventDefault();
153
- }
154
- };
155
- this.onFocus = () => {
156
- this.hasFocus = true;
157
- this.ionFocus.emit();
158
- };
159
- this.onBlur = () => {
160
- this.hasFocus = false;
161
- this.ionBlur.emit();
162
- };
163
- /**
164
- * Stops propagation when the label is clicked,
165
- * otherwise, two clicks will be triggered.
166
- */
167
- this.onLabelClick = (ev) => {
168
- // Only stop propagation if the click was directly on the label
169
- // and not on the input or other child elements
170
- if (ev.target === ev.currentTarget) {
171
- ev.stopPropagation();
172
- }
173
- };
174
- }
41
+ inputId = `ion-sel-${selectIds++}`;
42
+ helperTextId = `${this.inputId}-helper-text`;
43
+ errorTextId = `${this.inputId}-error-text`;
44
+ overlay;
45
+ focusEl;
46
+ mutationO;
47
+ inheritedAttributes = {};
48
+ slotMutationController;
49
+ nativeWrapperEl;
50
+ notchSpacerEl;
51
+ validationObserver;
52
+ notchController;
53
+ startContainerController;
54
+ startContainerEl;
55
+ customHTMLEnabled = config.get('innerHTMLTemplatesEnabled', ENABLE_HTML_CONTENT_DEFAULT);
56
+ el;
57
+ isExpanded = false;
58
+ /**
59
+ * The `hasFocus` state ensures the focus class is
60
+ * added regardless of how the element is focused.
61
+ * The `ion-focused` class only applies when focused
62
+ * via tabbing, not by clicking.
63
+ * The `has-focus` logic was added to ensure the class
64
+ * is applied in both cases.
65
+ */
66
+ hasFocus = false;
67
+ /**
68
+ * Track validation state for proper aria-live announcements.
69
+ */
70
+ isInvalid = false;
71
+ hintTextId;
72
+ /**
73
+ * The text to display on the cancel button.
74
+ */
75
+ cancelText = 'Cancel';
76
+ /**
77
+ * The color to use from your application's color palette.
78
+ * Default options are: `"primary"`, `"secondary"`, `"tertiary"`, `"success"`, `"warning"`, `"danger"`, `"light"`, `"medium"`, and `"dark"`.
79
+ * For more information on colors, see [theming](/docs/theming/basics).
80
+ *
81
+ * This property is only available when using the modern select syntax.
82
+ */
83
+ color;
84
+ /**
85
+ * This property allows developers to specify a custom function or property
86
+ * name for comparing objects when determining the selected option in the
87
+ * ion-select. When not specified, the default behavior will use strict
88
+ * equality (===) for comparison.
89
+ */
90
+ compareWith;
91
+ /**
92
+ * If `true`, the user cannot interact with the select.
93
+ */
94
+ disabled = false;
95
+ /**
96
+ * The fill for the item. If `"solid"` the item will have a background. If
97
+ * `"outline"` the item will be transparent with a border. Only available in `md` mode.
98
+ */
99
+ fill;
100
+ /**
101
+ * Text that is placed under the select and displayed when an error is detected.
102
+ */
103
+ errorText;
104
+ /**
105
+ * Text that is placed under the select and displayed when no error is detected.
106
+ */
107
+ helperText;
108
+ /**
109
+ * The interface the select should use: `action-sheet`, `popover`, `alert`, or `modal`.
110
+ */
111
+ interface = 'alert';
112
+ /**
113
+ * Any additional options that the `alert`, `action-sheet` or `popover` interface
114
+ * can take. See the [ion-alert docs](./alert), the
115
+ * [ion-action-sheet docs](./action-sheet), the
116
+ * [ion-popover docs](./popover), and the [ion-modal docs](./modal) for the
117
+ * create options for each interface.
118
+ *
119
+ * Note: `interfaceOptions` will not override `inputs` or `buttons` with the `alert` interface.
120
+ */
121
+ interfaceOptions = {};
122
+ /**
123
+ * How to pack the label and select within a line.
124
+ * `justify` does not apply when the label and select
125
+ * are on different lines when `labelPlacement` is set to
126
+ * `"floating"` or `"stacked"`.
127
+ * `"start"`: The label and select will appear on the left in LTR and
128
+ * on the right in RTL.
129
+ * `"end"`: The label and select will appear on the right in LTR and
130
+ * on the left in RTL.
131
+ * `"space-between"`: The label and select will appear on opposite
132
+ * ends of the line with space between the two elements.
133
+ */
134
+ justify;
135
+ /**
136
+ * The visible label associated with the select.
137
+ *
138
+ * Use this if you need to render a plaintext label.
139
+ *
140
+ * The `label` property will take priority over the `label` slot if both are used.
141
+ */
142
+ label;
143
+ /**
144
+ * Where to place the label relative to the select.
145
+ * `"start"`: The label will appear to the left of the select in LTR and to the right in RTL.
146
+ * `"end"`: The label will appear to the right of the select in LTR and to the left in RTL.
147
+ * `"floating"`: The label will appear smaller and above the select when the select is focused or it has a value. Otherwise it will appear on top of the select.
148
+ * `"stacked"`: The label will appear smaller and above the select regardless even when the select is blurred or has no value.
149
+ * `"fixed"`: The label has the same behavior as `"start"` except it also has a fixed width. Long text will be truncated with ellipses ("...").
150
+ * When using `"floating"` or `"stacked"` we recommend initializing the select with either a `value` or a `placeholder`.
151
+ */
152
+ labelPlacement = 'start';
153
+ /**
154
+ * If `true`, the select can accept multiple values.
155
+ */
156
+ multiple = false;
157
+ /**
158
+ * The name of the control, which is submitted with the form data.
159
+ */
160
+ name = this.inputId;
161
+ /**
162
+ * The text to display on the ok button.
163
+ */
164
+ okText = 'OK';
165
+ /**
166
+ * The text to display when the select is empty.
167
+ */
168
+ placeholder;
169
+ /**
170
+ * The text to display instead of the selected option's value.
171
+ */
172
+ selectedText;
173
+ /**
174
+ * The toggle icon to use. Defaults to `chevronExpand` for `ios` mode,
175
+ * or `caretDownSharp` for `md` mode.
176
+ */
177
+ toggleIcon;
178
+ /**
179
+ * The toggle icon to show when the select is open. If defined, the icon
180
+ * rotation behavior in `md` mode will be disabled. If undefined, `toggleIcon`
181
+ * will be used for when the select is both open and closed.
182
+ */
183
+ expandedIcon;
184
+ /**
185
+ * The shape of the select. If "round" it will have an increased border radius.
186
+ */
187
+ shape;
188
+ /**
189
+ * The value of the select.
190
+ */
191
+ value;
192
+ /**
193
+ * If true, screen readers will announce it as a required field. This property
194
+ * works only for accessibility purposes, it will not prevent the form from
195
+ * submitting if the value is invalid.
196
+ */
197
+ required = false;
198
+ /**
199
+ * Emitted when the value has changed.
200
+ *
201
+ * This event will not emit when programmatically setting the `value` property.
202
+ */
203
+ ionChange;
204
+ /**
205
+ * Emitted when the selection is cancelled.
206
+ */
207
+ ionCancel;
208
+ /**
209
+ * Emitted when the overlay is dismissed.
210
+ */
211
+ ionDismiss;
212
+ /**
213
+ * Emitted when the select has focus.
214
+ */
215
+ ionFocus;
216
+ /**
217
+ * Emitted when the select loses focus.
218
+ */
219
+ ionBlur;
220
+ /**
221
+ * Emitted when the styles change.
222
+ * @internal
223
+ */
224
+ ionStyle;
175
225
  styleChanged() {
176
226
  this.emitStyle();
177
227
  }
178
228
  setValue(value) {
229
+ if (this.isValueEqual(this.value, value)) {
230
+ return;
231
+ }
179
232
  this.value = value;
180
233
  this.ionChange.emit({ value });
181
234
  }
235
+ isValueEqual(currentValue, newValue) {
236
+ if (this.multiple) {
237
+ const currentArr = Array.isArray(currentValue) ? currentValue : [];
238
+ const newArr = Array.isArray(newValue) ? newValue : [];
239
+ if (currentArr.length !== newArr.length) {
240
+ return false;
241
+ }
242
+ // Multiset compare: each new value must match a distinct current value.
243
+ // A plain `every(isOptionSelected)` would accept ['a','a'] as equal to
244
+ // ['a','b'] when both 'a' and 'b' map to options whose values overlap.
245
+ const remaining = currentArr.slice();
246
+ return newArr.every((val) => {
247
+ const idx = remaining.findIndex((c) => compareOptions(c, val, this.compareWith));
248
+ if (idx === -1) {
249
+ return false;
250
+ }
251
+ remaining.splice(idx, 1);
252
+ return true;
253
+ });
254
+ }
255
+ if (currentValue == null && newValue == null) {
256
+ return true;
257
+ }
258
+ if (currentValue == null || newValue == null) {
259
+ return false;
260
+ }
261
+ return compareOptions(currentValue, newValue, this.compareWith);
262
+ }
182
263
  async connectedCallback() {
183
264
  const { el } = this;
265
+ this.slotMutationController = createSlotMutationController(el, ['label', 'start', 'end'], () => {
266
+ this.startContainerController?.calculateStartContainerWidth();
267
+ forceUpdate(this);
268
+ });
184
269
  this.notchController = createNotchController(el, () => this.notchSpacerEl, () => this.labelSlot);
270
+ this.startContainerController = createStartContainerController(el, () => this.startContainerEl, () => {
271
+ return Build.isBrowser && getIonMode(this) === 'md' && this.fill === 'outline';
272
+ });
273
+ this.startContainerController.calculateStartContainerWidth();
185
274
  this.updateOverlayOptions();
186
275
  this.emitStyle();
187
276
  this.mutationO = watchForOptions(this.el, 'ion-select-option', async () => {
@@ -253,10 +342,18 @@ export class Select {
253
342
  this.mutationO.disconnect();
254
343
  this.mutationO = undefined;
255
344
  }
345
+ if (this.slotMutationController) {
346
+ this.slotMutationController.destroy();
347
+ this.slotMutationController = undefined;
348
+ }
256
349
  if (this.notchController) {
257
350
  this.notchController.destroy();
258
351
  this.notchController = undefined;
259
352
  }
353
+ if (this.startContainerController) {
354
+ this.startContainerController.destroy();
355
+ this.startContainerController = undefined;
356
+ }
260
357
  // Clean up validation observer to prevent memory leaks.
261
358
  if (this.validationObserver) {
262
359
  this.validationObserver.disconnect();
@@ -278,65 +375,44 @@ export class Select {
278
375
  // Add logic to scroll selected item into view before presenting
279
376
  const scrollSelectedIntoView = () => {
280
377
  const indexOfSelected = this.childOpts.findIndex((o) => o.value === this.value);
281
- /**
282
- * Determine which option to focus when the overlay opens: the selected
283
- * option if the select has a value, otherwise the first enabled option.
284
- */
285
- let optionToFocus = null;
286
378
  if (indexOfSelected > -1) {
287
379
  const selectedItem = overlay.querySelector(`.select-interface-option:nth-of-type(${indexOfSelected + 1})`);
288
- /**
289
- * If the option contains an `ion-radio` or `ion-checkbox`, focus
290
- * that instead of the option element itself. This ensures that
291
- * screen readers will announce the role and state of the element
292
- * (e.g. "radio button, checked") rather than only the option text.
293
- * Alert and action sheet options are plain buttons, so fall back to
294
- * focusing the option element itself in those cases.
295
- */
296
380
  if (selectedItem) {
381
+ /**
382
+ * Browsers such as Firefox do not
383
+ * correctly delegate focus when manually
384
+ * focusing an element with delegatesFocus.
385
+ * We work around this by manually focusing
386
+ * the interactive element.
387
+ * ion-radio and ion-checkbox are the only
388
+ * elements that ion-select-popover uses, so
389
+ * we only need to worry about those two components
390
+ * when focusing.
391
+ */
297
392
  const interactiveEl = selectedItem.querySelector('ion-radio, ion-checkbox');
298
393
  if (interactiveEl) {
299
394
  selectedItem.scrollIntoView({ block: 'nearest' });
395
+ // Needs to be called before `focusVisibleElement` to prevent issue with focus event bubbling
396
+ // and removing `ion-focused` style
397
+ interactiveEl.setFocus();
300
398
  }
301
- optionToFocus = interactiveEl !== null && interactiveEl !== void 0 ? interactiveEl : selectedItem;
399
+ focusVisibleElement(selectedItem);
302
400
  }
303
401
  }
304
402
  else {
305
403
  /**
306
404
  * If no value is set then focus the first enabled option.
307
405
  */
308
- optionToFocus = overlay.querySelector('ion-radio:not(.radio-disabled), ion-checkbox:not(.checkbox-disabled)');
309
- }
310
- if (optionToFocus) {
311
- /**
312
- * Focus the option directly (`setFocus()`/`focus()`) rather than
313
- * with `focusVisibleElement()`. `focusVisibleElement()` forces the
314
- * `ion-focused` focus ring on regardless of how the overlay was
315
- * opened, whereas a plain focus lets the focus-visible utility
316
- * decide: it shows the ring only when the overlay was opened with
317
- * the keyboard and hides it for pointer opens.
318
- *
319
- * `ion-radio` and `ion-checkbox` expose `setFocus`, which correctly
320
- * delegates focus to their inner focusable element. This is needed
321
- * because browsers such as Firefox do not delegate focus correctly
322
- * when focusing an element with delegatesFocus. When the option is
323
- * a plain button it can be focused directly.
324
- */
325
- if (optionToFocus.matches('ion-radio, ion-checkbox')) {
326
- optionToFocus.setFocus();
327
- }
328
- else {
329
- optionToFocus.focus();
330
- }
331
- /**
332
- * In the alert interface, when tabbing and pressing enter to open
333
- * the select, the value that is currently selected flashes the
334
- * focused state briefly before moving to its wrapper. This suppresses
335
- * the focus visible state, so that the option will only show as
336
- * focused when navigating with the keyboard.
337
- */
338
- if (this.interface === 'alert') {
339
- suppressFocusVisible();
406
+ const firstEnabledOption = overlay.querySelector('ion-radio:not(.radio-disabled), ion-checkbox:not(.checkbox-disabled)');
407
+ if (firstEnabledOption) {
408
+ /**
409
+ * Focus the option for the same reason as we do above.
410
+ *
411
+ * Needs to be called before `focusVisibleElement` to prevent issue with focus event bubbling
412
+ * and removing `ion-focused` style
413
+ */
414
+ firstEnabledOption.setFocus();
415
+ focusVisibleElement(firstEnabledOption.closest('ion-item'));
340
416
  }
341
417
  }
342
418
  };
@@ -436,8 +512,7 @@ export class Select {
436
512
  const isSelected = isOptionSelected(selectValue, value, this.compareWith);
437
513
  const { content, startContent, endContent } = extractOptionContent(option, this.customHTMLEnabled);
438
514
  return {
439
- role: isSelected ? 'selected' : '',
440
- text: content !== null && content !== void 0 ? content : '',
515
+ text: content ?? '',
441
516
  cssClass: optClass,
442
517
  disabled: option.disabled,
443
518
  handler: () => {
@@ -474,7 +549,7 @@ export class Select {
474
549
  return {
475
550
  type: inputType,
476
551
  cssClass: optClass,
477
- label: content !== null && content !== void 0 ? content : '',
552
+ label: content ?? '',
478
553
  value,
479
554
  checked: isOptionSelected(selectValue, value, this.compareWith),
480
555
  disabled: option.disabled,
@@ -497,7 +572,7 @@ export class Select {
497
572
  const optClass = `${OPTION_CLASS} ${copyClasses}`;
498
573
  const { content, startContent, endContent } = extractOptionContent(option, this.customHTMLEnabled);
499
574
  return {
500
- text: content !== null && content !== void 0 ? content : '',
575
+ text: content ?? '',
501
576
  cssClass: optClass,
502
577
  value,
503
578
  checked: isOptionSelected(selectValue, value, this.compareWith),
@@ -520,8 +595,8 @@ export class Select {
520
595
  async openPopover(ev) {
521
596
  const { fill, labelPlacement } = this;
522
597
  const interfaceOptions = this.interfaceOptions;
523
- const theme = getIonTheme(this);
524
- const showBackdrop = theme === 'md' ? false : true;
598
+ const mode = getIonMode(this);
599
+ const showBackdrop = mode === 'md' ? false : true;
525
600
  const multiple = this.multiple;
526
601
  const value = this.value;
527
602
  let event = ev;
@@ -532,7 +607,7 @@ export class Select {
532
607
  * when using a fill in MD mode or if the
533
608
  * label is floating/stacked.
534
609
  */
535
- if (hasFloatingOrStackedLabel || (theme === 'md' && fill !== undefined)) {
610
+ if (hasFloatingOrStackedLabel || (mode === 'md' && fill !== undefined)) {
536
611
  size = 'cover';
537
612
  /**
538
613
  * Otherwise the popover
@@ -541,34 +616,43 @@ export class Select {
541
616
  */
542
617
  }
543
618
  else {
544
- event = Object.assign(Object.assign({}, ev), { detail: {
619
+ event = {
620
+ ...ev,
621
+ detail: {
545
622
  ionShadowTarget: this.nativeWrapperEl,
546
- } });
623
+ },
624
+ };
547
625
  }
548
626
  const options = this.createOverlaySelectOptions(this.childOpts, value);
549
- const hasRichContent = options.some((opt) => opt.startContent || opt.endContent || opt.description);
550
- const popoverOpts = Object.assign(Object.assign({ theme,
551
- event, alignment: 'center', size,
552
- showBackdrop }, interfaceOptions), { component: 'ion-select-popover', cssClass: [
627
+ const hasRichContent = options.some((opt) => Boolean(opt.startContent) || Boolean(opt.endContent) || Boolean(opt.description));
628
+ const popoverOpts = {
629
+ mode,
630
+ event,
631
+ alignment: 'center',
632
+ size,
633
+ showBackdrop,
634
+ ...interfaceOptions,
635
+ component: 'ion-select-popover',
636
+ cssClass: [
553
637
  'select-popover',
554
638
  hasRichContent ? 'select-popover-rich-content' : undefined,
555
639
  interfaceOptions.cssClass,
556
- ], componentProps: {
640
+ ],
641
+ componentProps: {
557
642
  header: interfaceOptions.header,
558
643
  subHeader: interfaceOptions.subHeader,
559
644
  message: interfaceOptions.message,
560
645
  multiple,
561
646
  value,
562
647
  options,
563
- } });
648
+ },
649
+ };
564
650
  /**
565
651
  * Workaround for Stencil to autodefine
566
652
  * ion-select-popover and ion-popover when
567
653
  * using Custom Elements build.
568
654
  */
569
- // eslint-disable-next-line
570
655
  if (false) {
571
- // eslint-disable-next-line
572
656
  // @ts-ignore
573
657
  document.createElement('ion-select-popover');
574
658
  document.createElement('ion-popover');
@@ -576,17 +660,20 @@ export class Select {
576
660
  return popoverController.create(popoverOpts);
577
661
  }
578
662
  async openActionSheet() {
579
- const theme = getIonTheme(this);
663
+ const mode = getIonMode(this);
580
664
  const interfaceOptions = this.interfaceOptions;
581
- const actionSheetOpts = Object.assign(Object.assign({ theme }, interfaceOptions), { buttons: this.createActionSheetButtons(this.childOpts, this.value), cssClass: ['select-action-sheet', interfaceOptions.cssClass] });
665
+ const actionSheetOpts = {
666
+ mode,
667
+ ...interfaceOptions,
668
+ buttons: this.createActionSheetButtons(this.childOpts, this.value),
669
+ cssClass: ['select-action-sheet', interfaceOptions.cssClass],
670
+ };
582
671
  /**
583
672
  * Workaround for Stencil to autodefine
584
673
  * ion-action-sheet when
585
674
  * using Custom Elements build.
586
675
  */
587
- // eslint-disable-next-line
588
676
  if (false) {
589
- // eslint-disable-next-line
590
677
  // @ts-ignore
591
678
  document.createElement('ion-action-sheet');
592
679
  }
@@ -595,8 +682,13 @@ export class Select {
595
682
  async openAlert() {
596
683
  const interfaceOptions = this.interfaceOptions;
597
684
  const inputType = this.multiple ? 'checkbox' : 'radio';
598
- const theme = getIonTheme(this);
599
- const alertOpts = Object.assign(Object.assign({ theme }, interfaceOptions), { header: interfaceOptions.header ? interfaceOptions.header : this.labelText, inputs: this.createAlertInputs(this.childOpts, inputType, this.value), buttons: [
685
+ const mode = getIonMode(this);
686
+ const alertOpts = {
687
+ mode,
688
+ ...interfaceOptions,
689
+ header: interfaceOptions.header ? interfaceOptions.header : this.labelText,
690
+ inputs: this.createAlertInputs(this.childOpts, inputType, this.value),
691
+ buttons: [
600
692
  {
601
693
  text: this.cancelText,
602
694
  role: 'cancel',
@@ -610,19 +702,19 @@ export class Select {
610
702
  this.setValue(selectedValues);
611
703
  },
612
704
  },
613
- ], cssClass: [
705
+ ],
706
+ cssClass: [
614
707
  'select-alert',
615
708
  interfaceOptions.cssClass,
616
709
  this.multiple ? 'multiple-select-alert' : 'single-select-alert',
617
- ] });
710
+ ],
711
+ };
618
712
  /**
619
713
  * Workaround for Stencil to autodefine
620
714
  * ion-alert when
621
715
  * using Custom Elements build.
622
716
  */
623
- // eslint-disable-next-line
624
717
  if (false) {
625
- // eslint-disable-next-line
626
718
  // @ts-ignore
627
719
  document.createElement('ion-alert');
628
720
  }
@@ -630,23 +722,26 @@ export class Select {
630
722
  }
631
723
  openModal() {
632
724
  const { multiple, value, interfaceOptions } = this;
633
- const theme = getIonTheme(this);
634
- const modalOpts = Object.assign(Object.assign({}, interfaceOptions), { mode: theme, cssClass: ['select-modal', interfaceOptions.cssClass], component: 'ion-select-modal', componentProps: {
725
+ const mode = getIonMode(this);
726
+ const modalOpts = {
727
+ ...interfaceOptions,
728
+ mode,
729
+ cssClass: ['select-modal', interfaceOptions.cssClass],
730
+ component: 'ion-select-modal',
731
+ componentProps: {
635
732
  header: interfaceOptions.header,
636
733
  cancelText: this.cancelText,
637
- cancelIcon: this.cancelIcon,
638
734
  multiple,
639
735
  value,
640
736
  options: this.createOverlaySelectOptions(this.childOpts, value),
641
- } });
737
+ },
738
+ };
642
739
  /**
643
740
  * Workaround for Stencil to autodefine
644
741
  * ion-select-modal and ion-modal when
645
742
  * using Custom Elements build.
646
743
  */
647
- // eslint-disable-next-line
648
744
  if (false) {
649
- // eslint-disable-next-line
650
745
  // @ts-ignore
651
746
  document.createElement('ion-select-modal');
652
747
  document.createElement('ion-modal');
@@ -712,18 +807,51 @@ export class Select {
712
807
  };
713
808
  this.ionStyle.emit(style);
714
809
  }
715
- getSize() {
716
- const theme = getIonTheme(this);
717
- const { size } = this;
718
- // TODO(ROU-11370): Remove theme check when sizes are defined for all themes.
719
- if (theme !== 'ionic') {
720
- return undefined;
810
+ onClick = (ev) => {
811
+ const target = ev.target;
812
+ const closestSlot = target.closest('[slot="start"], [slot="end"]');
813
+ if (target === this.el || closestSlot === null) {
814
+ this.setFocus();
815
+ this.open(ev);
721
816
  }
722
- if (size === undefined) {
723
- return 'medium';
817
+ else {
818
+ /**
819
+ * Prevent clicks to the start/end slots from opening the select.
820
+ * We ensure the target isn't this element in case the select is slotted
821
+ * in, for example, an item. This would prevent the select from ever
822
+ * being opened since the element itself has slot="start"/"end".
823
+ *
824
+ * Clicking a slotted element also causes a click
825
+ * on the <label> element (since it wraps the slots).
826
+ * Clicking <label> dispatches another click event on
827
+ * the native form control that then bubbles up to this
828
+ * listener. This additional event targets the host
829
+ * element, so the select overlay is opened.
830
+ *
831
+ * When the slotted elements are clicked (and therefore
832
+ * the ancestor <label> element) we want to prevent the label
833
+ * from dispatching another click event.
834
+ *
835
+ * Do not call stopPropagation() because this will cause
836
+ * click handlers on the slotted elements to never fire in React.
837
+ * When developers do onClick in React a native "click" listener
838
+ * is added on the root element, not the slotted element. When that
839
+ * native click listener fires, React then dispatches the synthetic
840
+ * click event on the slotted element. However, if stopPropagation
841
+ * is called then the native click event will never bubble up
842
+ * to the root element.
843
+ */
844
+ ev.preventDefault();
724
845
  }
725
- return size;
726
- }
846
+ };
847
+ onFocus = () => {
848
+ this.hasFocus = true;
849
+ this.ionFocus.emit();
850
+ };
851
+ onBlur = () => {
852
+ this.hasFocus = false;
853
+ this.ionBlur.emit();
854
+ };
727
855
  renderLabel() {
728
856
  const { label } = this;
729
857
  return (h("div", { class: {
@@ -732,8 +860,8 @@ export class Select {
732
860
  }, part: "label" }, label === undefined ? h("slot", { name: "label" }) : h("div", { class: "label-text" }, label)));
733
861
  }
734
862
  componentDidRender() {
735
- var _a;
736
- (_a = this.notchController) === null || _a === void 0 ? void 0 : _a.calculateNotchWidth();
863
+ this.notchController?.calculateNotchWidth();
864
+ this.startContainerController?.calculateStartContainerWidth();
737
865
  }
738
866
  /**
739
867
  * Gets any content passed into the `label` slot,
@@ -752,33 +880,24 @@ export class Select {
752
880
  return this.label !== undefined || this.labelSlot !== null;
753
881
  }
754
882
  /**
755
- * Renders the border container
756
- * when fill="outline".
883
+ * Stops propagation for re-dispatched clicks (when already expanded) to
884
+ * prevent double-click events. Allows initial button clicks (from keyboard
885
+ * or mouse) and slotted content clicks to propagate so event delegation
886
+ * works for parent handlers.
757
887
  */
758
- renderLabelContainer() {
759
- const theme = getIonTheme(this);
760
- const hasOutlineFill = theme === 'md' && this.fill === 'outline';
761
- if (hasOutlineFill) {
762
- /**
763
- * The outline fill has a special outline
764
- * that appears around the select and the label.
765
- * Certain stacked and floating label placements cause the
766
- * label to translate up and create a "cut out"
767
- * inside of that border by using the notch-spacer element.
768
- */
769
- return [
770
- h("div", { class: "select-outline-container" }, h("div", { class: "select-outline-start" }), h("div", { class: {
771
- 'select-outline-notch': true,
772
- 'select-outline-notch-hidden': !this.hasLabel,
773
- } }, h("div", { class: "notch-spacer", "aria-hidden": "true", ref: (el) => (this.notchSpacerEl = el) }, this.label)), h("div", { class: "select-outline-end" })),
774
- this.renderLabel(),
775
- ];
888
+ onLabelClick = (ev) => {
889
+ if (ev.target === this.focusEl && this.isExpanded) {
890
+ ev.stopPropagation();
776
891
  }
777
- /**
778
- * If not using the outline style,
779
- * we can render just the label.
780
- */
781
- return this.renderLabel();
892
+ };
893
+ /**
894
+ * Renders the outline border with a notch for the label.
895
+ */
896
+ renderOutlineContainer() {
897
+ return (h("div", { class: "select-outline-container" }, h("div", { class: "select-outline-start" }), h("div", { class: {
898
+ 'select-outline-notch': true,
899
+ 'select-outline-notch-hidden': !this.hasLabel,
900
+ } }, h("div", { class: "notch-spacer", "aria-hidden": "true", ref: (el) => (this.notchSpacerEl = el) }, this.label)), h("div", { class: "select-outline-end" })));
782
901
  }
783
902
  /**
784
903
  * Wraps text nodes in the select text with span elements
@@ -798,8 +917,7 @@ export class Select {
798
917
  return html;
799
918
  }
800
919
  Array.from(temp.childNodes).forEach((node) => {
801
- var _a, _b, _c, _d;
802
- if (node.nodeType === Node.TEXT_NODE && ((_a = node.textContent) === null || _a === void 0 ? void 0 : _a.trim())) {
920
+ if (node.nodeType === Node.TEXT_NODE && node.textContent?.trim()) {
803
921
  const text = node.textContent;
804
922
  /**
805
923
  * Split comma separator from the text content
@@ -810,12 +928,12 @@ export class Select {
810
928
  const commaNode = document.createTextNode(commaMatch[1]);
811
929
  const wrapper = document.createElement('span');
812
930
  wrapper.textContent = commaMatch[2];
813
- (_b = node.parentNode) === null || _b === void 0 ? void 0 : _b.replaceChild(wrapper, node);
814
- (_c = wrapper.parentNode) === null || _c === void 0 ? void 0 : _c.insertBefore(commaNode, wrapper);
931
+ node.parentNode?.replaceChild(wrapper, node);
932
+ wrapper.parentNode?.insertBefore(commaNode, wrapper);
815
933
  return;
816
934
  }
817
935
  const wrapper = document.createElement('span');
818
- (_d = node.parentNode) === null || _d === void 0 ? void 0 : _d.replaceChild(wrapper, node);
936
+ node.parentNode?.replaceChild(wrapper, node);
819
937
  wrapper.appendChild(node);
820
938
  }
821
939
  });
@@ -851,20 +969,24 @@ export class Select {
851
969
  * next to the select text.
852
970
  */
853
971
  renderSelectIcon() {
854
- const { isExpanded, selectExpandedIcon, selectCollapsedIcon } = this;
855
- let icon = selectCollapsedIcon;
856
- if (isExpanded) {
857
- icon = selectExpandedIcon;
972
+ const mode = getIonMode(this);
973
+ const { isExpanded, toggleIcon, expandedIcon } = this;
974
+ let icon;
975
+ if (isExpanded && expandedIcon !== undefined) {
976
+ icon = expandedIcon;
977
+ }
978
+ else {
979
+ const defaultIcon = mode === 'ios' ? chevronExpand : caretDownSharp;
980
+ icon = toggleIcon ?? defaultIcon;
858
981
  }
859
982
  return h("ion-icon", { class: "select-icon", part: "icon", "aria-hidden": "true", icon: icon });
860
983
  }
861
984
  get ariaLabel() {
862
- var _a;
863
985
  const { placeholder, inheritedAttributes } = this;
864
986
  // Get the plain text from the selected text
865
987
  const displayValue = this.getText();
866
988
  // The aria label should be preferred over visible text if both are specified
867
- const definedLabel = (_a = inheritedAttributes['aria-label']) !== null && _a !== void 0 ? _a : this.labelText;
989
+ const definedLabel = inheritedAttributes['aria-label'] ?? this.labelText;
868
990
  /**
869
991
  * If developer has specified a placeholder
870
992
  * and there is nothing selected, the selectText
@@ -890,63 +1012,6 @@ export class Select {
890
1012
  const { disabled, inputId, isExpanded, required } = this;
891
1013
  return (h("button", { disabled: disabled, id: inputId, "aria-label": this.ariaLabel, "aria-haspopup": "dialog", "aria-expanded": `${isExpanded}`, "aria-describedby": this.hintTextId, "aria-invalid": this.isInvalid ? 'true' : undefined, "aria-required": `${required}`, onFocus: this.onFocus, onBlur: this.onBlur, ref: (focusEl) => (this.focusEl = focusEl) }));
892
1014
  }
893
- getShape() {
894
- const theme = getIonTheme(this);
895
- const { shape } = this;
896
- // TODO(ROU-11366): Remove theme check when shapes are defined for all themes.
897
- if (theme === 'ionic' && shape === undefined) {
898
- return 'round';
899
- }
900
- return shape;
901
- }
902
- /**
903
- * Get the icon to use for the expand icon.
904
- * If an icon is set on the component, use that.
905
- * Otherwise, use the icon set in the config.
906
- * If no icon is set in the config, use the default icon.
907
- */
908
- get selectExpandedIcon() {
909
- // Return the expandedIcon or toggleIcon if either is explicitly set
910
- if (this.expandedIcon != null) {
911
- return this.expandedIcon;
912
- }
913
- else if (this.toggleIcon != null) {
914
- return this.toggleIcon;
915
- }
916
- // Determine the theme and map to default icons
917
- const theme = getIonTheme(this);
918
- const defaultIcons = {
919
- ios: chevronExpand,
920
- ionic: caretDownRegular,
921
- md: caretDownSharp,
922
- };
923
- // Get the default icon based on the theme, falling back to 'md' icon if necessary
924
- const defaultIcon = defaultIcons[theme] || defaultIcons.md;
925
- // Return the configured select expanded icon or the default icon
926
- return config.get('selectExpandedIcon', defaultIcon);
927
- }
928
- /**
929
- * Get the icon to use for the collapsed icon.
930
- * If an icon is set on the component, use that.
931
- * Otherwise, use the icon set in the config.
932
- * If no icon is set in the config, use the default icon.
933
- */
934
- get selectCollapsedIcon() {
935
- // Return the toggleIcon if it is explicitly set
936
- if (this.toggleIcon) {
937
- return this.toggleIcon;
938
- }
939
- // Determine the theme and map to default icons
940
- const theme = getIonTheme(this);
941
- const defaultIcons = {
942
- ios: chevronExpand,
943
- ionic: caretDownRegular,
944
- md: caretDownSharp,
945
- };
946
- // Get the default icon based on the theme, falling back to 'md' icon if necessary
947
- const defaultIcon = defaultIcons[theme] || defaultIcons.md;
948
- return config.get('selectCollapsedIcon', defaultIcon);
949
- }
950
1015
  getHintTextId() {
951
1016
  const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
952
1017
  if (isInvalid && errorText) {
@@ -984,41 +1049,19 @@ export class Select {
984
1049
  return (h("div", { class: "select-bottom", part: "bottom" }, this.renderHintText()));
985
1050
  }
986
1051
  render() {
987
- const { disabled, el, isExpanded, expandedIcon, labelPlacement, justify, placeholder, fill, name, value, hasFocus, } = this;
988
- const theme = getIonTheme(this);
989
- const shape = this.getShape();
1052
+ const { disabled, el, isExpanded, expandedIcon, labelPlacement, justify, placeholder, fill, shape, name, value, hasFocus, } = this;
1053
+ const mode = getIonMode(this);
990
1054
  const hasFloatingOrStackedLabel = labelPlacement === 'floating' || labelPlacement === 'stacked';
991
- const shouldRenderOuterIcon = theme !== 'ionic' && hasFloatingOrStackedLabel;
992
- const shouldRenderInnerIcon = theme === 'ionic' || !hasFloatingOrStackedLabel;
993
1055
  const justifyEnabled = !hasFloatingOrStackedLabel && justify !== undefined;
994
1056
  const rtl = isRTL(el) ? 'rtl' : 'ltr';
995
1057
  const inItem = hostContext('ion-item', this.el);
996
- const size = this.getSize();
997
- const shouldRenderHighlight = theme === 'md' && fill !== 'outline' && !inItem;
1058
+ const shouldRenderHighlight = mode === 'md' && fill !== 'outline' && !inItem;
998
1059
  const hasValue = this.hasValue();
999
- const hasStartEndSlots = el.querySelector('[slot="start"], [slot="end"]') !== null;
1060
+ const hasOutlineFill = mode === 'md' && fill === 'outline';
1000
1061
  renderHiddenInput(true, el, name, parseValue(value), disabled);
1001
- /**
1002
- * If the label is stacked, it should always sit above the select.
1003
- * For floating labels, the label should move above the select if
1004
- * the select has a value, is open, or has anything in either
1005
- * the start or end slot.
1006
- *
1007
- * If there is content in the start slot, the label would overlap
1008
- * it if not forced to float. This is also applied to the end slot
1009
- * because with the default or solid fills, the select is not
1010
- * vertically centered in the container, but the label is. This
1011
- * causes the slots and label to appear vertically offset from each
1012
- * other when the label isn't floating above the input. This doesn't
1013
- * apply to the outline fill, but this was not accounted for to keep
1014
- * things consistent.
1015
- *
1016
- * TODO(FW-5592): Remove hasStartEndSlots condition
1017
- */
1018
- const labelShouldFloat = labelPlacement === 'stacked' ||
1019
- (labelPlacement === 'floating' && (hasValue || hasFocus || isExpanded || hasStartEndSlots));
1020
- return (h(Host, { key: '9339cb236070c47333154d96c336dc1df9a11e1c', onClick: this.onClick, class: createColorClasses(this.color, {
1021
- [theme]: true,
1062
+ const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || isExpanded));
1063
+ return (h(Host, { key: '5d1e5bf46d0f204efdcb55cc42cfde52e6db304b', onClick: this.onClick, class: createColorClasses(this.color, {
1064
+ [mode]: true,
1022
1065
  'in-item': inItem,
1023
1066
  'in-item-color': hostContext('ion-item.ion-color', el),
1024
1067
  'select-disabled': disabled,
@@ -1035,33 +1078,20 @@ export class Select {
1035
1078
  [`select-justify-${justify}`]: justifyEnabled,
1036
1079
  [`select-shape-${shape}`]: shape !== undefined,
1037
1080
  [`select-label-placement-${labelPlacement}`]: true,
1038
- [`select-size-${size}`]: size !== undefined,
1039
- }) }, h("label", { key: 'db8f0b67592f4b99f5e16d06ee8120852a60f4d1', class: "select-wrapper", id: "select-label", onClick: this.onLabelClick, part: "wrapper" }, this.renderLabelContainer(), h("div", { key: '30313c0f3034be59605b368d15af4ba00202a5f4', class: "select-wrapper-inner", part: "inner" },
1040
- /**
1041
- * For the ionic theme, we render the outline container here
1042
- * instead of higher up, so it can be positioned relative to
1043
- * the native wrapper instead of the <label> element or the
1044
- * entire component. This allows the label text to be positioned
1045
- * above the outline, while staying within the bounds of the
1046
- * <label> element, ensuring that clicking the label text
1047
- * focuses the select.
1048
- */
1049
- theme === 'ionic' && fill === 'outline' && h("div", { key: '78bba2953ba88efd1189afa31e8229a8972175e5', class: "select-outline" }), h("slot", { key: '086505d193a19677d33e26a5a116783d999c6861', name: "start" }), h("div", { key: '5bb7863236596cad5c1118be1ae54898b638b760', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), h("slot", { key: '38744ee0cc6750f84d11470c09a4e950d73f1e44', name: "end" }), shouldRenderInnerIcon && this.renderSelectIcon()), shouldRenderOuterIcon && this.renderSelectIcon(), shouldRenderHighlight && h("div", { key: '4eecb0df50800d16bea58c5649e68e06b122e472', class: "select-highlight" })), this.renderBottomContent()));
1081
+ }) }, h("label", { key: '15fd1f8e06510ae8472c621cf8cf90e51172e0be', class: "select-wrapper", id: "select-label", onClick: this.onLabelClick, part: "wrapper" }, hasOutlineFill && this.renderOutlineContainer(), h("div", { key: '7964e3d9351671899793b117896acdda25ec24c4', class: "select-start", part: "start", ref: (el) => (this.startContainerEl = el) }, h("slot", { key: 'aa309ef155c4025acfd7ed5739b5221c85097b36', name: "start" })), h("div", { key: '23d5a9dfea64a9d81b0b36d9426b15bed98901b9', class: "select-control", part: "control" }, this.renderLabel(), h("div", { key: '810da9fbfa8771e09b5fb768d64e5f04858b5833', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox(), !hasFloatingOrStackedLabel && this.renderSelectIcon())), h("div", { key: 'bf1c04704326ecfa14cf2e49bb76d3fb45beb08d', class: "select-end", part: "end" }, hasFloatingOrStackedLabel && this.renderSelectIcon(), h("slot", { key: '76a8bcaeefdcaa908aebd820d93171b08165cee3', name: "end" })), shouldRenderHighlight && h("div", { key: '55a9c417a82323a44e16328fd62a634d9d7c558b', class: "select-highlight" })), this.renderBottomContent()));
1050
1082
  }
1051
1083
  static get is() { return "ion-select"; }
1052
1084
  static get encapsulation() { return "shadow"; }
1053
1085
  static get originalStyleUrls() {
1054
1086
  return {
1055
1087
  "ios": ["select.ios.scss"],
1056
- "md": ["select.md.scss"],
1057
- "ionic": ["select.ionic.scss"]
1088
+ "md": ["select.md.scss"]
1058
1089
  };
1059
1090
  }
1060
1091
  static get styleUrls() {
1061
1092
  return {
1062
1093
  "ios": ["select.ios.css"],
1063
- "md": ["select.md.css"],
1064
- "ionic": ["select.ionic.css"]
1094
+ "md": ["select.md.css"]
1065
1095
  };
1066
1096
  }
1067
1097
  static get properties() {
@@ -1086,26 +1116,6 @@ export class Select {
1086
1116
  "attribute": "cancel-text",
1087
1117
  "defaultValue": "'Cancel'"
1088
1118
  },
1089
- "cancelIcon": {
1090
- "type": "boolean",
1091
- "mutable": false,
1092
- "complexType": {
1093
- "original": "boolean",
1094
- "resolved": "boolean",
1095
- "references": {}
1096
- },
1097
- "required": false,
1098
- "optional": false,
1099
- "docs": {
1100
- "tags": [],
1101
- "text": "If `true`, the cancel button will display an icon instead of the `cancelText`.\nOnly applies when `interface` is set to `\"modal\"`. Has no effect on `\"action-sheet\"`,\n`\"alert\"`, or `\"popover\"` interfaces.\nWhen `cancelIcon` is `true`, the `cancelText` property is ignored for display\nbut is used as the accessible label for the icon button."
1102
- },
1103
- "getter": false,
1104
- "setter": false,
1105
- "reflect": false,
1106
- "attribute": "cancel-icon",
1107
- "defaultValue": "false"
1108
- },
1109
1119
  "color": {
1110
1120
  "type": "string",
1111
1121
  "mutable": false,
@@ -1190,7 +1200,7 @@ export class Select {
1190
1200
  "optional": true,
1191
1201
  "docs": {
1192
1202
  "tags": [],
1193
- "text": "The fill for the item. If `\"solid\"` the item will have a background. If\n`\"outline\"` the item will be transparent with a border. Only available in the `\"md\"` theme."
1203
+ "text": "The fill for the item. If `\"solid\"` the item will have a background. If\n`\"outline\"` the item will be transparent with a border. Only available in `md` mode."
1194
1204
  },
1195
1205
  "getter": false,
1196
1206
  "setter": false,
@@ -1450,7 +1460,7 @@ export class Select {
1450
1460
  "optional": true,
1451
1461
  "docs": {
1452
1462
  "tags": [],
1453
- "text": "The toggle icon to use. Defaults to `\"chevronExpand\"` for the `\"ios\"` theme,\nor `\"caretDownSharp\"` for the `\"md\"` and `\"ionic\"` themes."
1463
+ "text": "The toggle icon to use. Defaults to `chevronExpand` for `ios` mode,\nor `caretDownSharp` for `md` mode."
1454
1464
  },
1455
1465
  "getter": false,
1456
1466
  "setter": false,
@@ -1469,89 +1479,70 @@ export class Select {
1469
1479
  "optional": true,
1470
1480
  "docs": {
1471
1481
  "tags": [],
1472
- "text": "The toggle icon to show when the select is open. If defined, the icon\nrotation behavior in `\"md\"` theme will be disabled. If undefined, `toggleIcon`\nwill be used for when the select is both open and closed."
1482
+ "text": "The toggle icon to show when the select is open. If defined, the icon\nrotation behavior in `md` mode will be disabled. If undefined, `toggleIcon`\nwill be used for when the select is both open and closed."
1473
1483
  },
1474
1484
  "getter": false,
1475
1485
  "setter": false,
1476
1486
  "reflect": false,
1477
1487
  "attribute": "expanded-icon"
1478
1488
  },
1479
- "required": {
1480
- "type": "boolean",
1481
- "mutable": false,
1482
- "complexType": {
1483
- "original": "boolean",
1484
- "resolved": "boolean",
1485
- "references": {}
1486
- },
1487
- "required": false,
1488
- "optional": false,
1489
- "docs": {
1490
- "tags": [],
1491
- "text": "If true, screen readers will announce it as a required field. This property\nworks only for accessibility purposes, it will not prevent the form from\nsubmitting if the value is invalid."
1492
- },
1493
- "getter": false,
1494
- "setter": false,
1495
- "reflect": false,
1496
- "attribute": "required",
1497
- "defaultValue": "false"
1498
- },
1499
1489
  "shape": {
1500
1490
  "type": "string",
1501
1491
  "mutable": false,
1502
1492
  "complexType": {
1503
- "original": "'soft' | 'round' | 'rectangular'",
1504
- "resolved": "\"rectangular\" | \"round\" | \"soft\" | undefined",
1493
+ "original": "'round'",
1494
+ "resolved": "\"round\" | undefined",
1505
1495
  "references": {}
1506
1496
  },
1507
1497
  "required": false,
1508
1498
  "optional": true,
1509
1499
  "docs": {
1510
1500
  "tags": [],
1511
- "text": "Set to `\"soft\"` for a select with slightly rounded corners,\n`\"round\"` for a select with fully rounded corners,\nor `\"rectangular\"` for a select without rounded corners.\n\nDefaults to `\"round\"` for the `\"ionic\"` theme, undefined for all other themes."
1501
+ "text": "The shape of the select. If \"round\" it will have an increased border radius."
1512
1502
  },
1513
1503
  "getter": false,
1514
1504
  "setter": false,
1515
1505
  "reflect": false,
1516
1506
  "attribute": "shape"
1517
1507
  },
1518
- "size": {
1519
- "type": "string",
1520
- "mutable": false,
1508
+ "value": {
1509
+ "type": "any",
1510
+ "mutable": true,
1521
1511
  "complexType": {
1522
- "original": "'small' | 'medium' | 'large'",
1523
- "resolved": "\"large\" | \"medium\" | \"small\" | undefined",
1512
+ "original": "any | null",
1513
+ "resolved": "any",
1524
1514
  "references": {}
1525
1515
  },
1526
1516
  "required": false,
1527
1517
  "optional": true,
1528
1518
  "docs": {
1529
1519
  "tags": [],
1530
- "text": "The size of the select. If \"large\" it will increase the height of the select, while\n\"small\" and \"medium\" provide progressively smaller heights.\n\nDefaults to `\"medium\"` for the ionic theme, and undefined for all other themes."
1520
+ "text": "The value of the select."
1531
1521
  },
1532
1522
  "getter": false,
1533
1523
  "setter": false,
1534
1524
  "reflect": false,
1535
- "attribute": "size"
1525
+ "attribute": "value"
1536
1526
  },
1537
- "value": {
1538
- "type": "any",
1539
- "mutable": true,
1527
+ "required": {
1528
+ "type": "boolean",
1529
+ "mutable": false,
1540
1530
  "complexType": {
1541
- "original": "any | null",
1542
- "resolved": "any",
1531
+ "original": "boolean",
1532
+ "resolved": "boolean",
1543
1533
  "references": {}
1544
1534
  },
1545
1535
  "required": false,
1546
- "optional": true,
1536
+ "optional": false,
1547
1537
  "docs": {
1548
1538
  "tags": [],
1549
- "text": "The value of the select."
1539
+ "text": "If true, screen readers will announce it as a required field. This property\nworks only for accessibility purposes, it will not prevent the form from\nsubmitting if the value is invalid."
1550
1540
  },
1551
1541
  "getter": false,
1552
1542
  "setter": false,
1553
1543
  "reflect": false,
1554
- "attribute": "value"
1544
+ "attribute": "required",
1545
+ "defaultValue": "false"
1555
1546
  }
1556
1547
  };
1557
1548
  }
@@ -1800,7 +1791,7 @@ const textForValue = (opts, value, compareWith, useHTML = false) => {
1800
1791
  */
1801
1792
  if (content) {
1802
1793
  const texts = Array.from(content.childNodes)
1803
- .map((n) => { var _a; return (_a = n.textContent) === null || _a === void 0 ? void 0 : _a.trim(); })
1794
+ .map((n) => n.textContent?.trim())
1804
1795
  .filter((t) => t);
1805
1796
  return texts.join(' ') || null;
1806
1797
  }
@@ -1820,9 +1811,8 @@ const textForValue = (opts, value, compareWith, useHTML = false) => {
1820
1811
  */
1821
1812
  const trimTextNodes = (node) => {
1822
1813
  node.childNodes.forEach((child) => {
1823
- var _a;
1824
1814
  if (child.nodeType === Node.TEXT_NODE) {
1825
- child.textContent = ((_a = child.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || '';
1815
+ child.textContent = child.textContent?.trim() || '';
1826
1816
  }
1827
1817
  else if (child.nodeType === Node.ELEMENT_NODE) {
1828
1818
  trimTextNodes(child);
@@ -1850,14 +1840,13 @@ const getOptionContent = (option, slotName, useHTML = false) => {
1850
1840
  // Default slot: get nodes without a slot attribute
1851
1841
  const defaultSlot = getOptionDefaultSlot(option) || [];
1852
1842
  nodes = defaultSlot.filter((node) => {
1853
- var _a;
1854
1843
  /**
1855
1844
  * Exclude whitespace-only text nodes (newline noise between
1856
1845
  * markup elements). Element nodes are always kept, even when
1857
1846
  * their textContent is empty (e.g. <svg>, <img>).
1858
1847
  */
1859
1848
  if (node.nodeType === Node.TEXT_NODE) {
1860
- return ((_a = node.textContent) === null || _a === void 0 ? void 0 : _a.trim().length) !== 0;
1849
+ return node.textContent?.trim().length !== 0;
1861
1850
  }
1862
1851
  return true;
1863
1852
  });
@@ -1867,7 +1856,7 @@ const getOptionContent = (option, slotName, useHTML = false) => {
1867
1856
  }
1868
1857
  // Return plain text if no elements are found
1869
1858
  if (!slotName && nodes.every((n) => n.nodeType === Node.TEXT_NODE)) {
1870
- return nodes.map((n) => { var _a; return (_a = n.textContent) === null || _a === void 0 ? void 0 : _a.trim(); }).join(' ') || null;
1859
+ return nodes.map((n) => n.textContent?.trim()).join(' ') || null;
1871
1860
  }
1872
1861
  /**
1873
1862
  * Mirror known custom-element properties (e.g. ion-icon's `icon`)
@@ -1883,10 +1872,9 @@ const getOptionContent = (option, slotName, useHTML = false) => {
1883
1872
  // Clone each node into a temporary container
1884
1873
  const container = document.createElement('div');
1885
1874
  nodes.forEach((n) => {
1886
- var _a;
1887
1875
  const clone = n.cloneNode(true);
1888
1876
  if (clone.nodeType === Node.TEXT_NODE) {
1889
- clone.textContent = ((_a = clone.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || '';
1877
+ clone.textContent = clone.textContent?.trim() || '';
1890
1878
  }
1891
1879
  else {
1892
1880
  trimTextNodes(clone);
@@ -1937,7 +1925,7 @@ const getDefaultSlotPlainText = (option) => {
1937
1925
  return node.nodeType === Node.TEXT_NODE;
1938
1926
  })
1939
1927
  .filter((node) => node.nodeType === Node.TEXT_NODE)
1940
- .map((n) => { var _a; return (_a = n.textContent) === null || _a === void 0 ? void 0 : _a.trim(); })
1928
+ .map((n) => n.textContent?.trim())
1941
1929
  .filter((t) => t);
1942
1930
  return texts.join(' ');
1943
1931
  };
@@ -1951,7 +1939,6 @@ const getDefaultSlotPlainText = (option) => {
1951
1939
  * via the `innerHTMLTemplatesEnabled` config.
1952
1940
  */
1953
1941
  const extractOptionContent = (option, customHTMLEnabled) => {
1954
- var _a, _b;
1955
1942
  if (!customHTMLEnabled) {
1956
1943
  return {
1957
1944
  content: getDefaultSlotPlainText(option),
@@ -1961,8 +1948,8 @@ const extractOptionContent = (option, customHTMLEnabled) => {
1961
1948
  }
1962
1949
  return {
1963
1950
  content: getOptionContent(option),
1964
- startContent: (_a = getOptionContent(option, 'start')) !== null && _a !== void 0 ? _a : undefined,
1965
- endContent: (_b = getOptionContent(option, 'end')) !== null && _b !== void 0 ? _b : undefined,
1951
+ startContent: getOptionContent(option, 'start') ?? undefined,
1952
+ endContent: getOptionContent(option, 'end') ?? undefined,
1966
1953
  };
1967
1954
  };
1968
1955
  let selectIds = 0;