@ionic/core 8.8.20-dev.11787158518.168a2fea → 8.8.20-dev.11788449221.155f9f1e

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 (1241) 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-divider.d.ts +11 -0
  27. package/components/ion-divider.js +4 -0
  28. package/components/ion-fab-button.js +1 -1
  29. package/components/ion-fab-list.js +1 -1
  30. package/components/ion-fab.js +1 -1
  31. package/components/ion-footer.js +1 -1
  32. package/components/ion-gallery-item.d.ts +11 -0
  33. package/components/ion-gallery-item.js +4 -0
  34. package/components/ion-gallery.d.ts +11 -0
  35. package/components/ion-gallery.js +4 -0
  36. package/components/ion-grid.js +1 -1
  37. package/components/ion-header.js +1 -1
  38. package/components/ion-icon.js +1 -1
  39. package/components/ion-img.js +1 -1
  40. package/components/ion-infinite-scroll-content.js +1 -1
  41. package/components/ion-infinite-scroll.js +1 -1
  42. package/components/ion-input-otp.js +1 -1
  43. package/components/ion-input-password-toggle.js +1 -1
  44. package/components/ion-input.js +1 -1
  45. package/components/ion-item-divider.js +1 -1
  46. package/components/ion-item-group.js +1 -1
  47. package/components/ion-item-option.js +1 -1
  48. package/components/ion-item-options.js +1 -1
  49. package/components/ion-item-sliding.js +1 -1
  50. package/components/ion-item.js +1 -1
  51. package/components/ion-label.js +1 -1
  52. package/components/ion-list-header.js +1 -1
  53. package/components/ion-list.js +1 -1
  54. package/components/ion-loading.js +1 -1
  55. package/components/ion-menu-button.js +1 -1
  56. package/components/ion-menu-toggle.js +1 -1
  57. package/components/ion-menu.js +1 -1
  58. package/components/ion-modal.js +1 -1
  59. package/components/ion-nav-link.js +1 -1
  60. package/components/ion-nav.js +1 -1
  61. package/components/ion-note.js +1 -1
  62. package/components/ion-picker-column-option.js +1 -1
  63. package/components/ion-picker-column.js +1 -1
  64. package/components/ion-picker-legacy-column.d.ts +11 -0
  65. package/components/ion-picker-legacy-column.js +4 -0
  66. package/components/ion-picker-legacy.d.ts +11 -0
  67. package/components/ion-picker-legacy.js +4 -0
  68. package/components/ion-picker.js +1 -1
  69. package/components/ion-popover.js +1 -1
  70. package/components/ion-progress-bar.js +1 -1
  71. package/components/ion-radio-group.js +1 -1
  72. package/components/ion-radio.js +1 -1
  73. package/components/ion-range.js +1 -1
  74. package/components/ion-refresher-content.js +1 -1
  75. package/components/ion-refresher.js +1 -1
  76. package/components/ion-reorder-group.js +1 -1
  77. package/components/ion-reorder.js +1 -1
  78. package/components/ion-ripple-effect.js +1 -1
  79. package/components/ion-route-redirect.js +1 -1
  80. package/components/ion-route.js +1 -1
  81. package/components/ion-router-link.js +1 -1
  82. package/components/ion-router-outlet.js +1 -1
  83. package/components/ion-router.js +1 -1
  84. package/components/ion-row.js +1 -1
  85. package/components/ion-searchbar.js +1 -1
  86. package/components/ion-segment-button.js +1 -1
  87. package/components/ion-segment-content.js +1 -1
  88. package/components/ion-segment-view.js +1 -1
  89. package/components/ion-segment.js +1 -1
  90. package/components/ion-select-modal.js +1 -1
  91. package/components/ion-select-option.js +1 -1
  92. package/components/ion-select-popover.js +1 -1
  93. package/components/ion-select.js +1 -1
  94. package/components/ion-skeleton-text.js +1 -1
  95. package/components/ion-spinner.js +1 -1
  96. package/components/ion-split-pane.js +1 -1
  97. package/components/ion-tab-bar.js +1 -1
  98. package/components/ion-tab-button.js +1 -1
  99. package/components/ion-tab.js +1 -1
  100. package/components/ion-tabs.js +1 -1
  101. package/components/ion-text.js +1 -1
  102. package/components/ion-textarea.js +1 -1
  103. package/components/ion-thumbnail.js +1 -1
  104. package/components/ion-title.js +1 -1
  105. package/components/ion-toast.js +1 -1
  106. package/components/ion-toggle.js +1 -1
  107. package/components/ion-toolbar.js +1 -1
  108. package/components/{p-DwpKZ6rl.js → p-B2SvA6NE.js} +1 -1
  109. package/components/p-B39i6rpY.js +4 -0
  110. package/components/p-B4GJERAm.js +4 -0
  111. package/components/p-B9_sPaDw.js +4 -0
  112. package/components/p-BDqjX7Z_.js +4 -0
  113. package/components/p-BE21dB_a.js +4 -0
  114. package/components/p-BJyeT56g.js +4 -0
  115. package/components/p-BLP69XoA.js +4 -0
  116. package/components/p-BTBa_wH7.js +4 -0
  117. package/components/p-BTEOs1at.js +4 -0
  118. package/components/p-BU8Blvqg.js +4 -0
  119. package/components/p-BUePQFRZ.js +4 -0
  120. package/components/p-BXjGM4gW.js +4 -0
  121. package/components/p-BXuZo5-p.js +4 -0
  122. package/components/p-BYRVyMu9.js +4 -0
  123. package/components/p-BYSs-jZz.js +4 -0
  124. package/components/{p-ryyf_ItD.js → p-BZwQa9ey.js} +1 -1
  125. package/components/p-B_a4XnF2.js +4 -0
  126. package/components/p-BjW8SOqw.js +4 -0
  127. package/components/p-BnQAsi91.js +4 -0
  128. package/components/p-BrF4HSay.js +4 -0
  129. package/components/p-Bs5kME4N.js +4 -0
  130. package/components/p-BwKpO3Is.js +4 -0
  131. package/components/p-BwzRqsq1.js +4 -0
  132. package/components/p-C0K6CGg9.js +4 -0
  133. package/components/p-C1L59jNd.js +4 -0
  134. package/components/p-C3ydXg9O.js +4 -0
  135. package/components/p-C5F5Zw01.js +4 -0
  136. package/components/p-C784We0w.js +4 -0
  137. package/components/p-CA81qANP.js +4 -0
  138. package/components/p-CEz0vNHD.js +4 -0
  139. package/components/p-CHB9zWT6.js +4 -0
  140. package/components/p-CJNsztW3.js +4 -0
  141. package/components/{p-CMLAwl_N.js → p-CKLXmqy1.js} +1 -1
  142. package/components/p-CODBQrPj.js +4 -0
  143. package/components/p-CVYFPBs-.js +4 -0
  144. package/components/p-CWqLCAML.js +4 -0
  145. package/components/p-CaB0_AG0.js +4 -0
  146. package/components/p-CaXMr1SL.js +4 -0
  147. package/components/p-Cc3oC60a.js +4 -0
  148. package/components/p-CjlmHeGM.js +4 -0
  149. package/components/p-CstXr-x9.js +4 -0
  150. package/components/{p-DzRT60Tw.js → p-Cu8FoYIJ.js} +1 -1
  151. package/components/p-CxhjkdQ_.js +4 -0
  152. package/components/p-CxoHM559.js +4 -0
  153. package/components/p-D0Iqw6OZ.js +4 -0
  154. package/components/p-D12Xsfh7.js +4 -0
  155. package/components/p-D1t981Ih.js +4 -0
  156. package/components/p-D2tZEPGv.js +4 -0
  157. package/components/p-D6zl6ZA8.js +4 -0
  158. package/components/p-DExJ63jR.js +4 -0
  159. package/components/p-DHvfufkW.js +4 -0
  160. package/components/p-DNweMi32.js +4 -0
  161. package/components/p-DRUGmlKi.js +4 -0
  162. package/components/p-DYq-5riI.js +4 -0
  163. package/components/p-DaJxRxSQ.js +4 -0
  164. package/components/p-Db3A3kHi.js +4 -0
  165. package/components/p-Df6AAcu8.js +4 -0
  166. package/components/p-Dhi5xtNS.js +4 -0
  167. package/components/{p-63OhffQv.js → p-Di8NbWfs.js} +1 -1
  168. package/components/p-DkfVuzjA.js +4 -0
  169. package/components/p-DriGEn08.js +4 -0
  170. package/components/p-Ds3yn-R0.js +4 -0
  171. package/components/p-DylrHLJF.js +4 -0
  172. package/components/p-VrmyB-Wu.js +4 -0
  173. package/components/p-Wn4ujuPW.js +4 -0
  174. package/components/p-X6YgGSBf.js +4 -0
  175. package/components/p-dLA3JnNJ.js +4 -0
  176. package/components/p-fIOYmaqA.js +4 -0
  177. package/components/p-o8OKV5aD.js +4 -0
  178. package/components/p-vUGYs065.js +4 -0
  179. package/components/p-vXpMhGrs.js +4 -0
  180. package/css/core.css +1 -1
  181. package/css/core.css.map +1 -1
  182. package/css/display.css +1 -1
  183. package/css/display.css.map +1 -1
  184. package/css/flex-utils.css +1 -1
  185. package/css/flex-utils.css.map +1 -1
  186. package/css/float-elements.css.map +1 -1
  187. package/css/global.bundle.css.map +1 -1
  188. package/css/ionic/bundle.ionic.css +1 -0
  189. package/css/ionic/bundle.ionic.css.map +1 -0
  190. package/css/ionic/core.ionic.css +1 -0
  191. package/css/ionic/core.ionic.css.map +1 -0
  192. package/css/ionic/global.bundle.ionic.css +1 -0
  193. package/css/ionic/global.bundle.ionic.css.map +1 -0
  194. package/css/ionic/ionic-swiper.ionic.css +1 -0
  195. package/css/ionic/ionic-swiper.ionic.css.map +1 -0
  196. package/css/ionic/link.ionic.css +1 -0
  197. package/css/ionic/link.ionic.css.map +1 -0
  198. package/css/ionic/structure.ionic.css +1 -0
  199. package/css/ionic/structure.ionic.css.map +1 -0
  200. package/css/ionic/typography.ionic.css +1 -0
  201. package/css/ionic/typography.ionic.css.map +1 -0
  202. package/css/ionic/utils.bundle.ionic.css +1 -0
  203. package/css/ionic/utils.bundle.ionic.css.map +1 -0
  204. package/css/ionic-swiper.css +1 -1
  205. package/css/ionic-swiper.css.map +1 -1
  206. package/css/ionic.bundle.css +1 -1
  207. package/css/ionic.bundle.css.map +1 -1
  208. package/css/normalize.css.map +1 -1
  209. package/css/padding.css.map +1 -1
  210. package/css/palettes/dark.always.css.map +1 -1
  211. package/css/palettes/dark.class.css.map +1 -1
  212. package/css/palettes/dark.system.css.map +1 -1
  213. package/css/palettes/high-contrast-dark.always.css.map +1 -1
  214. package/css/palettes/high-contrast-dark.class.css.map +1 -1
  215. package/css/palettes/high-contrast-dark.system.css.map +1 -1
  216. package/css/palettes/high-contrast.always.css.map +1 -1
  217. package/css/palettes/high-contrast.class.css.map +1 -1
  218. package/css/palettes/high-contrast.system.css.map +1 -1
  219. package/css/structure.css.map +1 -1
  220. package/css/text-alignment.css.map +1 -1
  221. package/css/text-transformation.css.map +1 -1
  222. package/css/typography.css.map +1 -1
  223. package/css/utils.bundle.css +1 -1
  224. package/css/utils.bundle.css.map +1 -1
  225. package/dist/cjs/{animation-C0mOHzej.js → animation-CxRPIayb.js} +6 -6
  226. package/dist/cjs/{app-globals-BREG4twP.js → app-globals-BwvlV6g7.js} +1 -1
  227. package/dist/cjs/{button-active-CVMevT9a.js → button-active-qCQDwE2m.js} +3 -3
  228. package/dist/cjs/{capacitor-DmA66EwP.js → capacitor-CRl0exFC.js} +3 -3
  229. package/dist/cjs/caret-down-vtVgfXIs.js +8 -0
  230. package/dist/cjs/caret-left-CxZXLRv5.js +8 -0
  231. package/dist/cjs/caret-right-CRCgv98E.js +8 -0
  232. package/dist/cjs/clear-button-press-controller-C7B9kyMa.js +45 -0
  233. package/dist/cjs/{config-CjUbvdPW.js → config-DWdFbSNK.js} +4 -5
  234. package/dist/cjs/{dir-zwDPRE5K.js → dir-DD0jPVH3.js} +3 -2
  235. package/dist/cjs/{focus-visible-CCvKiLh3.js → focus-visible-BIj-I3-C.js} +24 -0
  236. package/dist/cjs/{format-pp0Du3K-.js → format-COAsdjOc.js} +30 -40
  237. package/dist/cjs/{framework-delegate-Dfo5XsGv.js → framework-delegate-IvkF1VuM.js} +10 -6
  238. package/dist/cjs/{gesture-controller-BDUH7687.js → gesture-controller-dtqlP_q4.js} +8 -15
  239. package/dist/cjs/{haptic-Ch-X4gRx.js → haptic-DG25gZzb.js} +4 -3
  240. package/dist/cjs/{helpers-YPQybDph.js → helpers-Dhimwhpn.js} +74 -7
  241. package/dist/cjs/{index-DwlRtFZe.js → index-BJ2-LydH.js} +3 -9
  242. package/dist/cjs/{index-zVCah4Uz.js → index-Bsq0SbXc.js} +2 -2
  243. package/dist/cjs/{index-uvry__L4.js → index-C1knGA9x.js} +65 -33
  244. package/dist/cjs/{index-wOmugbdg.js → index-CxDnX7hd.js} +2 -0
  245. package/dist/cjs/{index-DXsPSne6.js → index-DhDV4RxJ.js} +16 -15
  246. package/dist/cjs/{index-BLdJCcJY.js → index-DuleInoh.js} +5 -5
  247. package/dist/cjs/{index-B7zJsYWS.js → index-YYUVCfP-.js} +3 -3
  248. package/dist/cjs/{index-DDg31ZF5.js → index-yon1HGB7.js} +10 -9
  249. package/dist/cjs/index.cjs.js +18 -18
  250. package/dist/cjs/{input-shims-Cbu1fcye.js → input-shims-BgJcHtqI.js} +23 -20
  251. package/dist/cjs/input.utils--RmR5lVe.js +150 -0
  252. package/dist/cjs/ion-accordion_2.cjs.entry.js +383 -379
  253. package/dist/cjs/ion-action-sheet.cjs.entry.js +87 -179
  254. package/dist/cjs/ion-alert.cjs.entry.js +126 -251
  255. package/dist/cjs/ion-app_8.cjs.entry.js +608 -461
  256. package/dist/cjs/ion-avatar_3.cjs.entry.js +125 -19
  257. package/dist/cjs/ion-back-button.cjs.entry.js +50 -65
  258. package/dist/cjs/ion-backdrop.cjs.entry.js +22 -23
  259. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +170 -212
  260. package/dist/cjs/ion-button_2.cjs.entry.js +118 -153
  261. package/dist/cjs/ion-card_5.cjs.entry.js +80 -110
  262. package/dist/cjs/ion-checkbox.cjs.entry.js +130 -164
  263. package/dist/cjs/ion-chip.cjs.entry.js +56 -21
  264. package/dist/cjs/ion-col_3.cjs.entry.js +61 -186
  265. package/dist/cjs/ion-datetime-button.cjs.entry.js +248 -256
  266. package/dist/cjs/ion-datetime_3.cjs.entry.js +3242 -0
  267. package/dist/cjs/ion-divider.cjs.entry.js +51 -0
  268. package/dist/cjs/ion-fab_3.cjs.entry.js +113 -155
  269. package/dist/cjs/ion-gallery-item.cjs.entry.js +59 -0
  270. package/dist/cjs/ion-gallery.cjs.entry.js +608 -0
  271. package/dist/cjs/ion-img.cjs.entry.js +17 -35
  272. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +157 -109
  273. package/dist/cjs/ion-input-otp.cjs.entry.js +437 -435
  274. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +64 -40
  275. package/dist/cjs/ion-input.cjs.entry.js +312 -351
  276. package/dist/cjs/ion-item-option_3.cjs.entry.js +512 -137
  277. package/dist/cjs/ion-item_8.cjs.entry.js +190 -218
  278. package/dist/cjs/ion-loading.cjs.entry.js +69 -152
  279. package/dist/cjs/ion-menu_3.cjs.entry.js +138 -182
  280. package/dist/cjs/ion-modal.cjs.entry.js +501 -571
  281. package/dist/cjs/ion-nav_2.cjs.entry.js +164 -104
  282. package/dist/cjs/ion-picker-column-option.cjs.entry.js +40 -40
  283. package/dist/cjs/ion-picker-column.cjs.entry.js +410 -422
  284. package/dist/cjs/ion-picker.cjs.entry.js +401 -406
  285. package/dist/cjs/ion-popover.cjs.entry.js +212 -324
  286. package/dist/cjs/ion-progress-bar.cjs.entry.js +48 -36
  287. package/dist/cjs/ion-radio_2.cjs.entry.js +162 -217
  288. package/dist/cjs/ion-range.cjs.entry.js +251 -309
  289. package/dist/cjs/ion-refresher_2.cjs.entry.js +122 -175
  290. package/dist/cjs/ion-reorder_2.cjs.entry.js +54 -60
  291. package/dist/cjs/ion-ripple-effect.cjs.entry.js +26 -18
  292. package/dist/cjs/ion-route_4.cjs.entry.js +76 -179
  293. package/dist/cjs/ion-searchbar.cjs.entry.js +331 -308
  294. package/dist/cjs/ion-segment-content.cjs.entry.js +2 -2
  295. package/dist/cjs/ion-segment-view.cjs.entry.js +27 -28
  296. package/dist/cjs/ion-segment_2.cjs.entry.js +141 -177
  297. package/dist/cjs/ion-select-modal.cjs.entry.js +70 -50
  298. package/dist/cjs/ion-select_3.cjs.entry.js +429 -507
  299. package/dist/cjs/ion-spinner.cjs.entry.js +36 -28
  300. package/dist/cjs/ion-split-pane.cjs.entry.js +25 -34
  301. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +180 -117
  302. package/dist/cjs/ion-tab_2.cjs.entry.js +30 -55
  303. package/dist/cjs/ion-text.cjs.entry.js +7 -13
  304. package/dist/cjs/ion-textarea.cjs.entry.js +310 -303
  305. package/dist/cjs/ion-toast.cjs.entry.js +170 -265
  306. package/dist/cjs/ion-toggle.cjs.entry.js +187 -184
  307. package/dist/cjs/ionic-global-DYLhJaw7.js +519 -0
  308. package/dist/cjs/ionic.cjs.js +4 -4
  309. package/dist/cjs/{ios.transition-zTmJz8T-.js → ios.transition-Blgf-vZU.js} +21 -15
  310. package/dist/cjs/{item-multiple-inputs-BdYSbfKN.js → item-multiple-inputs-DKn76MYO.js} +1 -1
  311. package/dist/cjs/{keyboard-cHxZlTyz.js → keyboard-BgioTbwQ.js} +3 -3
  312. package/dist/cjs/{keyboard-Cix5TVkD.js → keyboard-Otnp8OQI.js} +5 -4
  313. package/dist/cjs/list-a-7GSA6K.js +8 -0
  314. package/dist/cjs/loader.cjs.js +4 -4
  315. package/dist/cjs/{md.transition-nb_4pUXu.js → md.transition-ClgvbGfq.js} +11 -9
  316. package/dist/cjs/notch-controller-0hkmmSGo.js +155 -0
  317. package/dist/cjs/{overlay-control-label-D2sdL2O8.js → overlay-control-label-DnRLQR1t.js} +13 -11
  318. package/dist/cjs/{overlays-KaNVDNqC.js → overlays-Bxjqh2m3.js} +336 -60
  319. package/dist/cjs/scroll-hide-controller-qWMU5yOk.js +345 -0
  320. package/dist/cjs/{select-option-render-pULCGldr.js → select-option-render-BqJEK1N1.js} +4 -3
  321. package/dist/cjs/{status-tap-o9IIymsP.js → status-tap-ClA8u57t.js} +5 -4
  322. package/dist/cjs/{swipe-back-B7X9VOlH.js → swipe-back-4vY7mi8i.js} +6 -5
  323. package/dist/cjs/{theme-Bw0rpaNN.js → theme-IlOsGAz7.js} +26 -7
  324. package/dist/cjs/validity-QmuwEptc.js +51 -0
  325. package/dist/cjs/x-BTF99yFH.js +8 -0
  326. package/dist/collection/collection-manifest.json +13 -1
  327. package/dist/collection/components/accordion/accordion.ionic.css +201 -0
  328. package/dist/collection/components/accordion/accordion.ios.css +73 -58
  329. package/dist/collection/components/accordion/accordion.js +338 -327
  330. package/dist/collection/components/accordion/accordion.md.css +67 -59
  331. package/dist/collection/components/accordion-group/accordion-group.ionic.css +93 -0
  332. package/dist/collection/components/accordion-group/accordion-group.ios.css +16 -4
  333. package/dist/collection/components/accordion-group/accordion-group.js +69 -56
  334. package/dist/collection/components/accordion-group/accordion-group.md.css +22 -4
  335. package/dist/collection/components/action-sheet/action-sheet.ionic.css +494 -0
  336. package/dist/collection/components/action-sheet/action-sheet.ios.css +184 -54
  337. package/dist/collection/components/action-sheet/action-sheet.js +76 -166
  338. package/dist/collection/components/action-sheet/action-sheet.md.css +179 -55
  339. package/dist/collection/components/action-sheet/test/basic/fixture.js +0 -3
  340. package/dist/collection/components/alert/alert.ionic.css +787 -0
  341. package/dist/collection/components/alert/alert.ios.css +247 -54
  342. package/dist/collection/components/alert/alert.js +113 -236
  343. package/dist/collection/components/alert/alert.md.css +243 -56
  344. package/dist/collection/components/app/app.js +15 -86
  345. package/dist/collection/components/avatar/avatar.ionic.css +385 -0
  346. package/dist/collection/components/avatar/avatar.ios.css +7 -33
  347. package/dist/collection/components/avatar/avatar.js +120 -4
  348. package/dist/collection/components/avatar/avatar.md.css +51 -0
  349. package/dist/collection/components/back-button/back-button.ios.css +60 -48
  350. package/dist/collection/components/back-button/back-button.js +46 -61
  351. package/dist/collection/components/back-button/back-button.md.css +60 -48
  352. package/dist/collection/components/backdrop/backdrop.ionic.css +109 -0
  353. package/dist/collection/components/backdrop/backdrop.ios.css +56 -19
  354. package/dist/collection/components/backdrop/backdrop.js +26 -22
  355. package/dist/collection/components/backdrop/backdrop.md.css +56 -19
  356. package/dist/collection/components/badge/badge.ionic.css +272 -0
  357. package/dist/collection/components/badge/badge.ios.css +137 -12
  358. package/dist/collection/components/badge/badge.js +145 -15
  359. package/dist/collection/components/badge/badge.md.css +122 -12
  360. package/dist/collection/components/breadcrumb/breadcrumb.ios.css +20 -8
  361. package/dist/collection/components/breadcrumb/breadcrumb.js +72 -101
  362. package/dist/collection/components/breadcrumb/breadcrumb.md.css +20 -8
  363. package/dist/collection/components/breadcrumbs/breadcrumbs.ios.css +6 -0
  364. package/dist/collection/components/breadcrumbs/breadcrumbs.js +99 -112
  365. package/dist/collection/components/breadcrumbs/breadcrumbs.md.css +6 -0
  366. package/dist/collection/components/button/button.ionic.css +644 -0
  367. package/dist/collection/components/button/button.ios.css +154 -46
  368. package/dist/collection/components/button/button.js +122 -157
  369. package/dist/collection/components/button/button.md.css +150 -50
  370. package/dist/collection/components/buttons/buttons.ionic.css +97 -0
  371. package/dist/collection/components/buttons/buttons.ios.css +59 -7
  372. package/dist/collection/components/buttons/buttons.js +29 -21
  373. package/dist/collection/components/buttons/buttons.md.css +55 -3
  374. package/dist/collection/components/card/card.ionic.css +144 -0
  375. package/dist/collection/components/card/card.ios.css +65 -14
  376. package/dist/collection/components/card/card.js +61 -63
  377. package/dist/collection/components/card/card.md.css +65 -14
  378. package/dist/collection/components/card-content/card-content.ionic.css +89 -0
  379. package/dist/collection/components/card-content/card-content.ios.css +20 -35
  380. package/dist/collection/components/card-content/card-content.js +12 -10
  381. package/dist/collection/components/card-content/card-content.md.css +20 -35
  382. package/dist/collection/components/card-header/card-header.ionic.css +85 -0
  383. package/dist/collection/components/card-header/card-header.ios.css +27 -15
  384. package/dist/collection/components/card-header/card-header.js +20 -21
  385. package/dist/collection/components/card-header/card-header.md.css +27 -15
  386. package/dist/collection/components/card-subtitle/card-subtitle.ionic.css +144 -0
  387. package/dist/collection/components/card-subtitle/card-subtitle.ios.css +12 -0
  388. package/dist/collection/components/card-subtitle/card-subtitle.js +11 -14
  389. package/dist/collection/components/card-subtitle/card-subtitle.md.css +12 -0
  390. package/dist/collection/components/card-title/card-title.ios.css +73 -0
  391. package/dist/collection/components/card-title/card-title.js +11 -14
  392. package/dist/collection/components/card-title/card-title.md.css +73 -0
  393. package/dist/collection/components/checkbox/checkbox.ionic.css +543 -0
  394. package/dist/collection/components/checkbox/checkbox.ios.css +242 -117
  395. package/dist/collection/components/checkbox/checkbox.js +165 -160
  396. package/dist/collection/components/checkbox/checkbox.md.css +243 -118
  397. package/dist/collection/components/chip/chip.ionic.css +217 -0
  398. package/dist/collection/components/chip/chip.ios.css +67 -14
  399. package/dist/collection/components/chip/chip.js +116 -20
  400. package/dist/collection/components/chip/chip.md.css +67 -14
  401. package/dist/collection/components/col/col.css +192 -4
  402. package/dist/collection/components/col/col.js +212 -186
  403. package/dist/collection/components/content/content.css +47 -2
  404. package/dist/collection/components/content/content.js +78 -102
  405. package/dist/collection/components/datetime/datetime.ionic.css +703 -0
  406. package/dist/collection/components/datetime/datetime.ios.css +304 -148
  407. package/dist/collection/components/datetime/datetime.js +928 -1086
  408. package/dist/collection/components/datetime/datetime.md.css +294 -138
  409. package/dist/collection/components/datetime/utils/data.js +19 -18
  410. package/dist/collection/components/datetime/utils/format.js +11 -21
  411. package/dist/collection/components/datetime/utils/manipulation.js +8 -8
  412. package/dist/collection/components/datetime/utils/parse.js +10 -10
  413. package/dist/collection/components/datetime/utils/state.js +2 -8
  414. package/dist/collection/components/datetime/utils/validate.js +5 -4
  415. package/dist/collection/components/datetime-button/datetime-button.ios.css +6 -5
  416. package/dist/collection/components/datetime-button/datetime-button.js +246 -253
  417. package/dist/collection/components/datetime-button/datetime-button.md.css +6 -5
  418. package/dist/collection/components/divider/divider.ionic.css +148 -0
  419. package/dist/collection/components/divider/divider.ios.css +87 -0
  420. package/dist/collection/components/divider/divider.js +94 -0
  421. package/dist/collection/components/divider/divider.md.css +87 -0
  422. package/dist/collection/components/fab/fab.css +25 -1
  423. package/dist/collection/components/fab/fab.js +22 -25
  424. package/dist/collection/components/fab-button/fab-button.ios.css +18 -6
  425. package/dist/collection/components/fab-button/fab-button.js +83 -117
  426. package/dist/collection/components/fab-button/fab-button.md.css +20 -8
  427. package/dist/collection/components/fab-list/fab-list.css +12 -0
  428. package/dist/collection/components/fab-list/fab-list.js +20 -15
  429. package/dist/collection/components/footer/footer-interface.js +1 -0
  430. package/dist/collection/components/footer/footer.ios.css +33 -6
  431. package/dist/collection/components/footer/footer.js +151 -65
  432. package/dist/collection/components/footer/footer.md.css +40 -0
  433. package/dist/collection/components/gallery/gallery-constants.js +12 -0
  434. package/dist/collection/components/gallery/gallery-interface.js +1 -0
  435. package/dist/collection/components/gallery/gallery.css +15 -0
  436. package/dist/collection/components/gallery/gallery.js +679 -0
  437. package/dist/collection/components/gallery/test/utils.js +100 -0
  438. package/dist/collection/components/gallery-item/gallery-item.css +49 -0
  439. package/dist/collection/components/gallery-item/gallery-item.js +99 -0
  440. package/dist/collection/components/grid/grid.css +12 -0
  441. package/dist/collection/components/grid/grid.js +15 -9
  442. package/dist/collection/components/header/header-interface.js +1 -0
  443. package/dist/collection/components/header/header.ionic.css +250 -0
  444. package/dist/collection/components/header/header.ios.css +178 -133
  445. package/dist/collection/components/header/header.js +202 -70
  446. package/dist/collection/components/header/header.md.css +199 -9
  447. package/dist/collection/components/header/header.utils.js +6 -13
  448. package/dist/collection/components/img/img.js +16 -34
  449. package/dist/collection/components/infinite-scroll/infinite-scroll.js +164 -76
  450. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.ios.css +12 -0
  451. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +19 -30
  452. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.md.css +12 -0
  453. package/dist/collection/components/input/input.ionic.css +891 -0
  454. package/dist/collection/components/input/input.ios.css +247 -191
  455. package/dist/collection/components/input/input.js +340 -357
  456. package/dist/collection/components/input/input.md.css +234 -285
  457. package/dist/collection/components/input-otp/input-otp.ionic.css +371 -0
  458. package/dist/collection/components/input-otp/input-otp.ios.css +105 -60
  459. package/dist/collection/components/input-otp/input-otp.js +437 -432
  460. package/dist/collection/components/input-otp/input-otp.md.css +105 -60
  461. package/dist/collection/components/input-password-toggle/input-password-toggle.ionic.css +78 -0
  462. package/dist/collection/components/input-password-toggle/input-password-toggle.js +60 -37
  463. package/dist/collection/components/input-password-toggle/input-password-toggle.native.css +61 -0
  464. package/dist/collection/components/item/item.ionic.css +496 -0
  465. package/dist/collection/components/item/item.ios.css +120 -80
  466. package/dist/collection/components/item/item.js +102 -113
  467. package/dist/collection/components/item/item.md.css +131 -79
  468. package/dist/collection/components/item-divider/item-divider.ios.css +18 -0
  469. package/dist/collection/components/item-divider/item-divider.js +21 -23
  470. package/dist/collection/components/item-divider/item-divider.md.css +18 -0
  471. package/dist/collection/components/item-group/item-group.ios.css +12 -0
  472. package/dist/collection/components/item-group/item-group.js +13 -7
  473. package/dist/collection/components/item-group/item-group.md.css +12 -0
  474. package/dist/collection/components/item-option/item-option.ionic.css +277 -0
  475. package/dist/collection/components/item-option/item-option.ios.css +136 -29
  476. package/dist/collection/components/item-option/item-option.js +92 -56
  477. package/dist/collection/components/item-option/item-option.md.css +136 -29
  478. package/dist/collection/components/item-options/item-options.ionic.css +221 -0
  479. package/dist/collection/components/item-options/item-options.ios.css +77 -34
  480. package/dist/collection/components/item-options/item-options.js +20 -17
  481. package/dist/collection/components/item-options/item-options.md.css +77 -34
  482. package/dist/collection/components/item-sliding/item-sliding.ionic.css +211 -0
  483. package/dist/collection/components/item-sliding/item-sliding.js +441 -61
  484. package/dist/collection/components/item-sliding/{item-sliding.css → item-sliding.native.css} +84 -9
  485. package/dist/collection/components/item-sliding/test/test.utils.js +13 -0
  486. package/dist/collection/components/label/label.ios.css +18 -0
  487. package/dist/collection/components/label/label.js +15 -32
  488. package/dist/collection/components/label/label.md.css +18 -0
  489. package/dist/collection/components/list/list.ionic.css +212 -0
  490. package/dist/collection/components/list/list.ios.css +54 -14
  491. package/dist/collection/components/list/list.js +55 -19
  492. package/dist/collection/components/list/list.md.css +56 -16
  493. package/dist/collection/components/list-header/list-header.ionic.css +190 -0
  494. package/dist/collection/components/list-header/list-header.ios.css +82 -38
  495. package/dist/collection/components/list-header/list-header.js +11 -18
  496. package/dist/collection/components/list-header/list-header.md.css +82 -38
  497. package/dist/collection/components/loading/loading.ios.css +13 -1
  498. package/dist/collection/components/loading/loading.js +62 -143
  499. package/dist/collection/components/loading/loading.md.css +13 -1
  500. package/dist/collection/components/menu/menu.ios.css +15 -3
  501. package/dist/collection/components/menu/menu.js +71 -108
  502. package/dist/collection/components/menu/menu.md.css +15 -3
  503. package/dist/collection/components/menu-button/menu-button.ionic.css +236 -0
  504. package/dist/collection/components/menu-button/menu-button.ios.css +48 -14
  505. package/dist/collection/components/menu-button/menu-button.js +45 -38
  506. package/dist/collection/components/menu-button/menu-button.md.css +49 -15
  507. package/dist/collection/components/menu-toggle/menu-toggle.js +21 -25
  508. package/dist/collection/components/modal/animations/ionic.enter.js +40 -0
  509. package/dist/collection/components/modal/animations/ionic.leave.js +28 -0
  510. package/dist/collection/components/modal/animations/ios.enter.js +1 -1
  511. package/dist/collection/components/modal/animations/md.enter.js +1 -1
  512. package/dist/collection/components/modal/animations/sheet.js +8 -2
  513. package/dist/collection/components/modal/gestures/sheet.js +86 -32
  514. package/dist/collection/components/modal/gestures/swipe-to-close.js +3 -15
  515. package/dist/collection/components/modal/modal.ionic.css +255 -0
  516. package/dist/collection/components/modal/modal.ios.css +178 -70
  517. package/dist/collection/components/modal/modal.js +272 -404
  518. package/dist/collection/components/modal/modal.md.css +178 -70
  519. package/dist/collection/components/modal/safe-area-utils.js +7 -6
  520. package/dist/collection/components/modal/test/fixtures.js +0 -3
  521. package/dist/collection/components/nav/nav.css +7 -1
  522. package/dist/collection/components/nav/nav.js +256 -72
  523. package/dist/collection/components/nav/view-controller.js +1 -7
  524. package/dist/collection/components/nav-link/nav-link.js +14 -21
  525. package/dist/collection/components/note/note.ios.css +12 -0
  526. package/dist/collection/components/note/note.js +11 -14
  527. package/dist/collection/components/note/note.md.css +12 -0
  528. package/dist/collection/components/picker/picker.ios.css +15 -3
  529. package/dist/collection/components/picker/picker.js +398 -403
  530. package/dist/collection/components/picker/picker.md.css +15 -3
  531. package/dist/collection/components/picker-column/picker-column.css +9 -5
  532. package/dist/collection/components/picker-column/picker-column.js +409 -418
  533. package/dist/collection/components/picker-column-option/picker-column-option.ios.css +6 -0
  534. package/dist/collection/components/picker-column-option/picker-column-option.js +42 -38
  535. package/dist/collection/components/picker-column-option/picker-column-option.md.css +7 -6
  536. package/dist/collection/components/picker-legacy/animations/ios.enter.js +27 -0
  537. package/dist/collection/components/picker-legacy/animations/ios.leave.js +23 -0
  538. package/dist/collection/components/picker-legacy/picker-interface.js +1 -0
  539. package/dist/collection/components/picker-legacy/picker.ios.css +312 -0
  540. package/dist/collection/components/picker-legacy/picker.js +891 -0
  541. package/dist/collection/components/picker-legacy/picker.md.css +299 -0
  542. package/dist/collection/components/picker-legacy-column/picker-column.ios.css +243 -0
  543. package/dist/collection/components/picker-legacy-column/picker-column.js +422 -0
  544. package/dist/collection/components/picker-legacy-column/picker-column.md.css +234 -0
  545. package/dist/collection/components/picker-legacy-column/test/test.utils.js +43 -0
  546. package/dist/collection/components/popover/animations/ios.enter.js +2 -1
  547. package/dist/collection/components/popover/animations/md.enter.js +2 -1
  548. package/dist/collection/components/popover/popover.ionic.css +290 -0
  549. package/dist/collection/components/popover/popover.ios.css +15 -2
  550. package/dist/collection/components/popover/popover.js +199 -313
  551. package/dist/collection/components/popover/popover.md.css +15 -2
  552. package/dist/collection/components/popover/test/fixture.js +0 -1
  553. package/dist/collection/components/popover/utils.js +6 -4
  554. package/dist/collection/components/progress-bar/progress-bar.ionic.css +287 -0
  555. package/dist/collection/components/progress-bar/progress-bar.ios.css +48 -17
  556. package/dist/collection/components/progress-bar/progress-bar.js +65 -33
  557. package/dist/collection/components/progress-bar/progress-bar.md.css +48 -17
  558. package/dist/collection/components/radio/radio.ionic.css +422 -0
  559. package/dist/collection/components/radio/radio.ios.css +207 -102
  560. package/dist/collection/components/radio/radio.js +77 -108
  561. package/dist/collection/components/radio/radio.md.css +207 -102
  562. package/dist/collection/components/radio-group/radio-group.ionic.css +119 -0
  563. package/dist/collection/components/radio-group/radio-group.ios.css +43 -19
  564. package/dist/collection/components/radio-group/radio-group.js +113 -107
  565. package/dist/collection/components/radio-group/radio-group.md.css +43 -19
  566. package/dist/collection/components/radio-group/test/fixtures.js +0 -2
  567. package/dist/collection/components/range/range.ionic.css +567 -0
  568. package/dist/collection/components/range/range.ios.css +128 -85
  569. package/dist/collection/components/range/range.js +247 -305
  570. package/dist/collection/components/range/range.md.css +128 -85
  571. package/dist/collection/components/refresher/refresher.ios.css +14 -1
  572. package/dist/collection/components/refresher/refresher.js +88 -117
  573. package/dist/collection/components/refresher/refresher.md.css +15 -2
  574. package/dist/collection/components/refresher-content/refresher-content.js +31 -47
  575. package/dist/collection/components/reorder/reorder.ios.css +6 -0
  576. package/dist/collection/components/reorder/reorder.js +33 -7
  577. package/dist/collection/components/reorder/reorder.md.css +6 -0
  578. package/dist/collection/components/reorder-group/reorder-group.css +6 -0
  579. package/dist/collection/components/reorder-group/reorder-group.js +22 -47
  580. package/dist/collection/components/ripple-effect/{ripple-effect.css → ripple-effect.common.css} +7 -1
  581. package/dist/collection/components/ripple-effect/ripple-effect.ionic.css +215 -0
  582. package/dist/collection/components/ripple-effect/ripple-effect.js +26 -17
  583. package/dist/collection/components/route/route.js +14 -39
  584. package/dist/collection/components/route-redirect/route-redirect.js +0 -31
  585. package/dist/collection/components/router/router.js +37 -37
  586. package/dist/collection/components/router/utils/dom.js +7 -25
  587. package/dist/collection/components/router/utils/matching.js +9 -7
  588. package/dist/collection/components/router/utils/parser.js +1 -1
  589. package/dist/collection/components/router/utils/path.js +1 -0
  590. package/dist/collection/components/router-link/router-link.css +8 -2
  591. package/dist/collection/components/router-link/router-link.js +19 -40
  592. package/dist/collection/components/router-outlet/router-outlet.css +7 -1
  593. package/dist/collection/components/router-outlet/router-outlet.js +25 -83
  594. package/dist/collection/components/row/row.css +16 -0
  595. package/dist/collection/components/row/row.js +9 -2
  596. package/dist/collection/components/searchbar/searchbar.ionic.css +622 -0
  597. package/dist/collection/components/searchbar/searchbar.ios.css +56 -18
  598. package/dist/collection/components/searchbar/searchbar.js +380 -321
  599. package/dist/collection/components/searchbar/searchbar.md.css +56 -18
  600. package/dist/collection/components/segment/segment.ionic.css +115 -0
  601. package/dist/collection/components/segment/segment.ios.css +45 -2
  602. package/dist/collection/components/segment/segment.js +94 -126
  603. package/dist/collection/components/segment/segment.md.css +45 -2
  604. package/dist/collection/components/segment-button/segment-button.ionic.css +352 -0
  605. package/dist/collection/components/segment-button/segment-button.ios.css +146 -105
  606. package/dist/collection/components/segment-button/segment-button.js +46 -49
  607. package/dist/collection/components/segment-button/segment-button.md.css +148 -107
  608. package/dist/collection/components/segment-content/segment-content.js +1 -1
  609. package/dist/collection/components/segment-view/segment-view.ios.css +6 -0
  610. package/dist/collection/components/segment-view/segment-view.js +27 -28
  611. package/dist/collection/components/segment-view/segment-view.md.css +6 -0
  612. package/dist/collection/components/select/select.ionic.css +809 -0
  613. package/dist/collection/components/select/select.ios.css +351 -206
  614. package/dist/collection/components/select/select.js +444 -431
  615. package/dist/collection/components/select/select.md.css +383 -230
  616. package/dist/collection/components/select-modal/select-modal.ionic.css +257 -0
  617. package/dist/collection/components/select-modal/select-modal.ios.css +293 -45
  618. package/dist/collection/components/select-modal/select-modal.js +79 -37
  619. package/dist/collection/components/select-modal/select-modal.md.css +273 -43
  620. package/dist/collection/components/select-modal/test/fixtures.js +1 -8
  621. package/dist/collection/components/select-option/select-option.js +15 -48
  622. package/dist/collection/components/select-popover/select-popover.ionic.css +255 -0
  623. package/dist/collection/components/select-popover/select-popover.ios.css +188 -124
  624. package/dist/collection/components/select-popover/select-popover.js +37 -44
  625. package/dist/collection/components/select-popover/select-popover.md.css +228 -47
  626. package/dist/collection/components/select-popover/test/fixtures.js +1 -8
  627. package/dist/collection/components/skeleton-text/skeleton-text.css +6 -0
  628. package/dist/collection/components/skeleton-text/skeleton-text.js +15 -15
  629. package/dist/collection/components/spinner/{spinner.css → spinner.ionic.css} +78 -10
  630. package/dist/collection/components/spinner/spinner.js +55 -26
  631. package/dist/collection/components/spinner/spinner.native.css +199 -0
  632. package/dist/collection/components/split-pane/split-pane.ios.css +20 -2
  633. package/dist/collection/components/split-pane/split-pane.js +28 -33
  634. package/dist/collection/components/split-pane/split-pane.md.css +20 -2
  635. package/dist/collection/components/tab/tab.js +10 -17
  636. package/dist/collection/components/tab-bar/tab-bar.ionic.css +249 -0
  637. package/dist/collection/components/tab-bar/tab-bar.ios.css +86 -43
  638. package/dist/collection/components/tab-bar/tab-bar.js +190 -44
  639. package/dist/collection/components/tab-bar/tab-bar.md.css +86 -43
  640. package/dist/collection/components/tab-button/tab-button.ionic.css +373 -0
  641. package/dist/collection/components/tab-button/tab-button.ios.css +171 -95
  642. package/dist/collection/components/tab-button/tab-button.js +74 -68
  643. package/dist/collection/components/tab-button/tab-button.md.css +137 -93
  644. package/dist/collection/components/tabs/tabs.css +7 -1
  645. package/dist/collection/components/tabs/tabs.js +23 -33
  646. package/dist/collection/components/text/text.css +6 -0
  647. package/dist/collection/components/text/text.js +7 -12
  648. package/dist/collection/components/textarea/textarea.ionic.css +898 -0
  649. package/dist/collection/components/textarea/textarea.ios.css +329 -221
  650. package/dist/collection/components/textarea/textarea.js +334 -302
  651. package/dist/collection/components/textarea/textarea.md.css +358 -231
  652. package/dist/collection/components/thumbnail/thumbnail.css +6 -0
  653. package/dist/collection/components/thumbnail/thumbnail.js +9 -2
  654. package/dist/collection/components/title/title.ionic.css +127 -0
  655. package/dist/collection/components/title/title.ios.css +32 -4
  656. package/dist/collection/components/title/title.js +13 -23
  657. package/dist/collection/components/title/title.md.css +39 -4
  658. package/dist/collection/components/toast/animations/utils.js +1 -1
  659. package/dist/collection/components/toast/toast.ionic.css +394 -0
  660. package/dist/collection/components/toast/toast.ios.css +84 -45
  661. package/dist/collection/components/toast/toast.js +178 -232
  662. package/dist/collection/components/toast/toast.md.css +84 -45
  663. package/dist/collection/components/toggle/toggle.ionic.css +512 -0
  664. package/dist/collection/components/toggle/toggle.ios.css +247 -127
  665. package/dist/collection/components/toggle/toggle.js +177 -175
  666. package/dist/collection/components/toggle/toggle.md.css +245 -127
  667. package/dist/collection/components/toolbar/test/image.svg +1 -0
  668. package/dist/collection/components/toolbar/toolbar.ionic.css +249 -0
  669. package/dist/collection/components/toolbar/toolbar.ios.css +90 -47
  670. package/dist/collection/components/toolbar/toolbar.js +222 -25
  671. package/dist/collection/components/toolbar/toolbar.md.css +90 -47
  672. package/dist/collection/global/config.js +6 -4
  673. package/dist/collection/global/ionic-global.js +242 -20
  674. package/dist/collection/index.js +1 -1
  675. package/dist/collection/utils/animation/animation.js +3 -3
  676. package/dist/collection/utils/config.js +4 -5
  677. package/dist/collection/utils/css-value-validation.js +39 -0
  678. package/dist/collection/utils/focus-controller/index.js +1 -1
  679. package/dist/collection/utils/focus-trap.js +16 -5
  680. package/dist/collection/utils/focus-visible.js +22 -0
  681. package/dist/collection/utils/forms/clear-button-press-controller.js +40 -0
  682. package/dist/collection/utils/forms/index.js +1 -1
  683. package/dist/collection/utils/forms/validity.js +31 -0
  684. package/dist/collection/utils/framework-delegate.js +9 -5
  685. package/dist/collection/utils/gesture/gesture-controller.js +8 -15
  686. package/dist/collection/utils/gesture/index.js +2 -10
  687. package/dist/collection/utils/hardware-back-button.js +18 -3
  688. package/dist/collection/utils/helpers.js +72 -5
  689. package/dist/collection/utils/input-shims/hacks/scroll-assist.js +5 -4
  690. package/dist/collection/utils/input-shims/hacks/scroll-data.js +2 -1
  691. package/dist/collection/utils/keyboard/keyboard-controller.js +8 -6
  692. package/dist/collection/utils/keyboard/keyboard.js +1 -1
  693. package/dist/collection/utils/logging/index.js +4 -23
  694. package/dist/collection/utils/media.js +1 -0
  695. package/dist/collection/utils/menu-controller/animations/overlay.js +3 -3
  696. package/dist/collection/utils/menu-controller/animations/push.js +2 -1
  697. package/dist/collection/utils/menu-controller/animations/reveal.js +2 -1
  698. package/dist/collection/utils/menu-controller/index.js +2 -1
  699. package/dist/collection/utils/native/haptic.js +3 -2
  700. package/dist/collection/utils/native/keyboard.js +2 -2
  701. package/dist/collection/utils/native/status-bar.js +1 -1
  702. package/dist/collection/utils/overlay-control-label.js +13 -11
  703. package/dist/collection/utils/overlays.js +312 -45
  704. package/dist/collection/utils/platform.js +5 -4
  705. package/dist/collection/utils/rtl/dir.js +3 -2
  706. package/dist/collection/utils/sanitization/index.js +2 -2
  707. package/dist/collection/utils/scroll-hide-controller.js +178 -0
  708. package/dist/collection/utils/select-option-render.js +2 -1
  709. package/dist/collection/utils/slot-mutation-controller.js +2 -1
  710. package/dist/collection/utils/test/playwright/apply-keyboard-focus.js +1 -1
  711. package/dist/collection/utils/test/playwright/drag-element.js +35 -11
  712. package/dist/collection/utils/test/playwright/generator.js +51 -25
  713. package/dist/collection/utils/test/playwright/page/event-spy.js +12 -11
  714. package/dist/collection/utils/test/playwright/page/utils/goto.js +15 -5
  715. package/dist/collection/utils/test/playwright/page/utils/set-content.js +27 -4
  716. package/dist/collection/utils/test/playwright/page/utils/set-ion-viewport.js +3 -2
  717. package/dist/collection/utils/test/press-keys.js +17 -10
  718. package/dist/collection/utils/theme.js +26 -7
  719. package/dist/collection/utils/transition/ios.transition.js +14 -9
  720. package/dist/collection/utils/transition/md.transition.js +4 -3
  721. package/dist/docs.json +10038 -534
  722. package/dist/esm/{animation-CGFdmGk9.js → animation-BsVixxLP.js} +5 -5
  723. package/dist/esm/{app-globals-CYmMeGdU.js → app-globals-rPvWQFXp.js} +1 -1
  724. package/dist/esm/{button-active-BDOsVAiZ.js → button-active-BS8YgJRD.js} +3 -3
  725. package/dist/esm/{capacitor-CFERIeaU.js → capacitor-BnXrCBvt.js} +1 -1
  726. package/dist/esm/caret-down-D1t981Ih.js +6 -0
  727. package/dist/esm/caret-left-fIOYmaqA.js +6 -0
  728. package/dist/esm/caret-right-BYSs-jZz.js +6 -0
  729. package/dist/esm/clear-button-press-controller-Ci6Q_x5-.js +43 -0
  730. package/dist/esm/{config-DWCzVL3Y.js → config-BwKpO3Is.js} +4 -5
  731. package/dist/esm/{dir-Dojwmvde.js → dir-o8OKV5aD.js} +3 -2
  732. package/dist/esm/{focus-visible-BmVRXR1y.js → focus-visible-vXpMhGrs.js} +23 -1
  733. package/dist/esm/{format-Dcwga61t.js → format-2WlZcMvG.js} +31 -41
  734. package/dist/esm/{framework-delegate-BHTU2Ip9.js → framework-delegate-P5K_3uYw.js} +10 -6
  735. package/dist/esm/{gesture-controller-TXPDHL13.js → gesture-controller-BTEOs1at.js} +8 -15
  736. package/dist/esm/{haptic-Cq4UAeka.js → haptic-ByW74Ow9.js} +4 -3
  737. package/dist/esm/{helpers-CAGf8Wgp.js → helpers-ChPZH7zh.js} +74 -8
  738. package/dist/esm/{index-BvabGprD.js → index-B4Kq2YNk.js} +2 -1
  739. package/dist/esm/{index-DcPaH5uL.js → index-Bck1OwMs.js} +3 -9
  740. package/dist/esm/{index-ChhhtsGZ.js → index-C0EQceqV.js} +66 -34
  741. package/dist/esm/{index-Clc-28O1.js → index-C7EAbm0C.js} +5 -4
  742. package/dist/esm/{index-CqneaaGd.js → index-C7F1yJyV.js} +13 -12
  743. package/dist/esm/{index-WlteAIqz.js → index-CXSPjEca.js} +5 -5
  744. package/dist/esm/{index-CKM1DdGm.js → index-Mq5pCWmZ.js} +3 -3
  745. package/dist/esm/{index-T0JxBI8V.js → index-niemeDYi.js} +2 -2
  746. package/dist/esm/index.js +17 -18
  747. package/dist/esm/{input-shims-B8sfni1e.js → input-shims-CM5m0K8T.js} +15 -12
  748. package/dist/esm/input.utils-DhJNJPiU.js +147 -0
  749. package/dist/esm/ion-accordion_2.entry.js +383 -379
  750. package/dist/esm/ion-action-sheet.entry.js +87 -179
  751. package/dist/esm/ion-alert.entry.js +126 -251
  752. package/dist/esm/ion-app_8.entry.js +607 -460
  753. package/dist/esm/ion-avatar_3.entry.js +125 -19
  754. package/dist/esm/ion-back-button.entry.js +50 -65
  755. package/dist/esm/ion-backdrop.entry.js +22 -23
  756. package/dist/esm/ion-breadcrumb_2.entry.js +170 -212
  757. package/dist/esm/ion-button_2.entry.js +118 -153
  758. package/dist/esm/ion-card_5.entry.js +80 -110
  759. package/dist/esm/ion-checkbox.entry.js +130 -164
  760. package/dist/esm/ion-chip.entry.js +56 -21
  761. package/dist/esm/ion-col_3.entry.js +61 -186
  762. package/dist/esm/ion-datetime-button.entry.js +248 -256
  763. package/dist/esm/ion-datetime_3.entry.js +3238 -0
  764. package/dist/esm/ion-divider.entry.js +49 -0
  765. package/dist/esm/ion-fab_3.entry.js +113 -155
  766. package/dist/esm/ion-gallery-item.entry.js +57 -0
  767. package/dist/esm/ion-gallery.entry.js +606 -0
  768. package/dist/esm/ion-img.entry.js +17 -35
  769. package/dist/esm/ion-infinite-scroll_2.entry.js +157 -109
  770. package/dist/esm/ion-input-otp.entry.js +437 -435
  771. package/dist/esm/ion-input-password-toggle.entry.js +64 -40
  772. package/dist/esm/ion-input.entry.js +310 -349
  773. package/dist/esm/ion-item-option_3.entry.js +512 -137
  774. package/dist/esm/ion-item_8.entry.js +190 -218
  775. package/dist/esm/ion-loading.entry.js +69 -152
  776. package/dist/esm/ion-menu_3.entry.js +138 -182
  777. package/dist/esm/ion-modal.entry.js +459 -529
  778. package/dist/esm/ion-nav_2.entry.js +164 -104
  779. package/dist/esm/ion-picker-column-option.entry.js +40 -40
  780. package/dist/esm/ion-picker-column.entry.js +410 -422
  781. package/dist/esm/ion-picker.entry.js +401 -406
  782. package/dist/esm/ion-popover.entry.js +212 -324
  783. package/dist/esm/ion-progress-bar.entry.js +48 -36
  784. package/dist/esm/ion-radio_2.entry.js +162 -217
  785. package/dist/esm/ion-range.entry.js +251 -309
  786. package/dist/esm/ion-refresher_2.entry.js +122 -175
  787. package/dist/esm/ion-reorder_2.entry.js +54 -60
  788. package/dist/esm/ion-ripple-effect.entry.js +26 -18
  789. package/dist/esm/ion-route_4.entry.js +76 -179
  790. package/dist/esm/ion-searchbar.entry.js +331 -308
  791. package/dist/esm/ion-segment-content.entry.js +2 -2
  792. package/dist/esm/ion-segment-view.entry.js +27 -28
  793. package/dist/esm/ion-segment_2.entry.js +141 -177
  794. package/dist/esm/ion-select-modal.entry.js +70 -50
  795. package/dist/esm/ion-select_3.entry.js +429 -507
  796. package/dist/esm/ion-spinner.entry.js +36 -28
  797. package/dist/esm/ion-split-pane.entry.js +25 -34
  798. package/dist/esm/ion-tab-bar_2.entry.js +179 -116
  799. package/dist/esm/ion-tab_2.entry.js +30 -55
  800. package/dist/esm/ion-text.entry.js +7 -13
  801. package/dist/esm/ion-textarea.entry.js +309 -302
  802. package/dist/esm/ion-toast.entry.js +149 -244
  803. package/dist/esm/ion-toggle.entry.js +187 -184
  804. package/dist/esm/ionic-global-BJDU78B6.js +508 -0
  805. package/dist/esm/ionic.js +5 -5
  806. package/dist/esm/{ios.transition-DXRCmcbC.js → ios.transition-6oGu53GR.js} +21 -15
  807. package/dist/esm/{item-multiple-inputs-rU8VaNNg.js → item-multiple-inputs-C6onMFOo.js} +1 -1
  808. package/dist/esm/{keyboard-Cj8mLJeq.js → keyboard-XukEYIFf.js} +5 -4
  809. package/dist/esm/{keyboard-DAF8GNJ9.js → keyboard-x-uHYVoq.js} +3 -3
  810. package/dist/esm/list-Dhi5xtNS.js +6 -0
  811. package/dist/esm/loader.js +5 -5
  812. package/dist/esm/{md.transition-BMngO4i_.js → md.transition-Dy5HxiSE.js} +11 -9
  813. package/dist/esm/notch-controller-BYB7mUMg.js +153 -0
  814. package/dist/esm/{overlay-control-label-BSQPZ79H.js → overlay-control-label-CODBQrPj.js} +13 -11
  815. package/dist/esm/{overlays-CPmIs9Ls.js → overlays-C3YvaMgX.js} +333 -57
  816. package/dist/esm/scroll-hide-controller-B3MRYNXh.js +342 -0
  817. package/dist/esm/{select-option-render-C4m76VGH.js → select-option-render-BlKZ2H83.js} +4 -3
  818. package/dist/esm/{status-tap-CHB7KwIb.js → status-tap-DK-ylvU7.js} +5 -4
  819. package/dist/esm/{swipe-back-C9HW1bug.js → swipe-back-DFICtpMC.js} +6 -5
  820. package/dist/esm/theme-DaJxRxSQ.js +67 -0
  821. package/dist/esm/validity-BjW8SOqw.js +48 -0
  822. package/dist/esm/x-BDqjX7Z_.js +6 -0
  823. package/dist/html.html-data.json +2690 -123
  824. package/dist/ionic/index.esm.js +1 -1
  825. package/dist/ionic/ionic.esm.js +1 -1
  826. package/dist/ionic/p--sroV-k-.js +4 -0
  827. package/dist/ionic/p-0166d6e5.entry.js +4 -0
  828. package/dist/ionic/p-0a0a66e2.entry.js +4 -0
  829. package/dist/ionic/p-0ac15b5f.entry.js +4 -0
  830. package/dist/ionic/p-0c636ad3.entry.js +4 -0
  831. package/dist/ionic/p-126031d2.entry.js +4 -0
  832. package/dist/ionic/p-1a609156.entry.js +4 -0
  833. package/dist/ionic/p-1b473bad.entry.js +4 -0
  834. package/dist/ionic/p-1c1c18da.entry.js +4 -0
  835. package/dist/ionic/p-1ce65194.entry.js +4 -0
  836. package/dist/ionic/p-1febf200.entry.js +4 -0
  837. package/dist/ionic/p-2016c1c0.entry.js +4 -0
  838. package/dist/ionic/p-2365483a.entry.js +4 -0
  839. package/dist/ionic/p-296226f1.entry.js +4 -0
  840. package/dist/ionic/p-2a54aec2.entry.js +4 -0
  841. package/dist/ionic/p-2bf60b77.entry.js +4 -0
  842. package/dist/ionic/p-2e0184c0.entry.js +4 -0
  843. package/dist/ionic/p-2e1d650a.entry.js +4 -0
  844. package/dist/ionic/p-316eed75.entry.js +4 -0
  845. package/dist/ionic/p-31a0c9c2.entry.js +4 -0
  846. package/dist/ionic/p-40a21a22.entry.js +4 -0
  847. package/dist/ionic/p-431bc3ce.entry.js +4 -0
  848. package/dist/ionic/p-51542c69.entry.js +4 -0
  849. package/dist/ionic/p-5dedd699.entry.js +4 -0
  850. package/dist/ionic/p-68e453f7.entry.js +4 -0
  851. package/dist/ionic/p-711ba315.entry.js +4 -0
  852. package/dist/ionic/p-731d11e1.entry.js +4 -0
  853. package/dist/ionic/p-75c7595c.entry.js +4 -0
  854. package/dist/ionic/p-76232f5f.entry.js +4 -0
  855. package/dist/ionic/p-7cbf17f0.entry.js +4 -0
  856. package/dist/ionic/p-7f59020c.entry.js +4 -0
  857. package/dist/ionic/p-7k7Q1A38.js +4 -0
  858. package/dist/ionic/p-8303462c.entry.js +4 -0
  859. package/dist/ionic/p-9db78e5c.entry.js +4 -0
  860. package/dist/ionic/p-B4Kq2YNk.js +4 -0
  861. package/dist/ionic/p-BDqjX7Z_.js +4 -0
  862. package/dist/ionic/p-BFhQ1N-L.js +4 -0
  863. package/dist/ionic/p-BG7tpRhR.js +4 -0
  864. package/dist/ionic/p-BITyMTKr.js +4 -0
  865. package/dist/ionic/p-BRPONI7N.js +4 -0
  866. package/dist/ionic/p-BTEOs1at.js +4 -0
  867. package/dist/ionic/p-BVdSuKmt.js +4 -0
  868. package/dist/ionic/p-BYRVyMu9.js +4 -0
  869. package/dist/ionic/p-BYSs-jZz.js +4 -0
  870. package/dist/ionic/p-BjW8SOqw.js +4 -0
  871. package/dist/ionic/p-Bpx1lBiP.js +4 -0
  872. package/dist/ionic/p-BwKpO3Is.js +4 -0
  873. package/dist/ionic/p-C-BLhfUi.js +4 -0
  874. package/dist/ionic/p-C-aO35cw.js +4 -0
  875. package/dist/ionic/p-C0EQceqV.js +5 -0
  876. package/dist/ionic/p-CDrQfM-I.js +4 -0
  877. package/dist/ionic/p-CODBQrPj.js +4 -0
  878. package/dist/ionic/p-CTSaffvS.js +4 -0
  879. package/dist/ionic/p-CaM5HwzM.js +4 -0
  880. package/dist/ionic/p-CgaW5Zy8.js +4 -0
  881. package/dist/ionic/p-Cipl19Qe.js +4 -0
  882. package/dist/ionic/p-CnBfCmL2.js +4 -0
  883. package/dist/ionic/p-D-Xit5Ye.js +4 -0
  884. package/dist/ionic/p-D1t981Ih.js +4 -0
  885. package/dist/ionic/p-D7LIC84Z.js +4 -0
  886. package/dist/ionic/p-D844sgjq.js +4 -0
  887. package/dist/ionic/p-DWDKFjrH.js +4 -0
  888. package/dist/ionic/p-DaJxRxSQ.js +4 -0
  889. package/dist/ionic/p-Dhi5xtNS.js +4 -0
  890. package/dist/ionic/p-DhyWlGap.js +4 -0
  891. package/dist/ionic/p-DiyY-i-5.js +4 -0
  892. package/dist/ionic/p-DrxPmT9E.js +4 -0
  893. package/dist/ionic/p-YIsE5bNG.js +4 -0
  894. package/dist/ionic/p-a37444b3.entry.js +4 -0
  895. package/dist/ionic/p-a9df0ccf.entry.js +4 -0
  896. package/dist/ionic/p-ac3af8af.entry.js +4 -0
  897. package/dist/ionic/p-b25f3aba.entry.js +4 -0
  898. package/dist/ionic/p-b3da2cc7.entry.js +4 -0
  899. package/dist/ionic/p-b4533070.entry.js +4 -0
  900. package/dist/ionic/p-b4901bce.entry.js +4 -0
  901. package/dist/ionic/p-bb7bb4fd.entry.js +4 -0
  902. package/dist/ionic/p-be06def7.entry.js +4 -0
  903. package/dist/ionic/p-c0983eac.entry.js +4 -0
  904. package/dist/ionic/p-c4ebdfd2.entry.js +4 -0
  905. package/dist/ionic/p-c4ed1e18.entry.js +4 -0
  906. package/dist/ionic/p-d9ac7a0d.entry.js +4 -0
  907. package/dist/ionic/p-dc8a8505.entry.js +4 -0
  908. package/dist/ionic/p-ddc41dbb.entry.js +4 -0
  909. package/dist/ionic/p-de4e8418.entry.js +4 -0
  910. package/dist/ionic/p-df642ef5.entry.js +4 -0
  911. package/dist/ionic/p-e086f8c3.entry.js +4 -0
  912. package/dist/ionic/p-edd8f490.entry.js +4 -0
  913. package/dist/ionic/p-f0968c91.entry.js +4 -0
  914. package/dist/ionic/p-f6768728.entry.js +4 -0
  915. package/dist/ionic/p-fIOYmaqA.js +4 -0
  916. package/dist/ionic/p-fc726f4a.entry.js +4 -0
  917. package/dist/ionic/p-ff74cf5d.entry.js +4 -0
  918. package/dist/ionic/p-i6iV8hMy.js +4 -0
  919. package/dist/ionic/p-nUlpIttM.js +4 -0
  920. package/dist/ionic/p-o8OKV5aD.js +4 -0
  921. package/dist/ionic/p-vXpMhGrs.js +4 -0
  922. package/dist/ionic/p-zRFin7iz.js +4 -0
  923. package/dist/ionic/p-zn4qAQ_d.js +4 -0
  924. package/dist/types/components/accordion/accordion.d.ts +6 -3
  925. package/dist/types/components/accordion-group/accordion-group.d.ts +12 -1
  926. package/dist/types/components/action-sheet/action-sheet-interface.d.ts +3 -7
  927. package/dist/types/components/action-sheet/action-sheet.d.ts +3 -2
  928. package/dist/types/components/alert/alert-interface.d.ts +3 -7
  929. package/dist/types/components/alert/alert.d.ts +3 -2
  930. package/dist/types/components/app/app.d.ts +4 -5
  931. package/dist/types/components/avatar/avatar.d.ts +32 -0
  932. package/dist/types/components/back-button/back-button.d.ts +2 -1
  933. package/dist/types/components/backdrop/backdrop.d.ts +4 -0
  934. package/dist/types/components/badge/badge.d.ts +34 -1
  935. package/dist/types/components/breadcrumb/breadcrumb.d.ts +4 -1
  936. package/dist/types/components/breadcrumbs/breadcrumbs.d.ts +2 -2
  937. package/dist/types/components/button/button.d.ts +23 -8
  938. package/dist/types/components/buttons/buttons.d.ts +5 -1
  939. package/dist/types/components/card/card.d.ts +8 -1
  940. package/dist/types/components/card-content/card-content.d.ts +2 -1
  941. package/dist/types/components/card-header/card-header.d.ts +3 -2
  942. package/dist/types/components/card-subtitle/card-subtitle.d.ts +2 -1
  943. package/dist/types/components/card-title/card-title.d.ts +2 -1
  944. package/dist/types/components/checkbox/checkbox.d.ts +14 -4
  945. package/dist/types/components/chip/chip.d.ts +26 -1
  946. package/dist/types/components/col/col.d.ts +52 -5
  947. package/dist/types/components/content/content.d.ts +3 -0
  948. package/dist/types/components/datetime/datetime.d.ts +26 -1
  949. package/dist/types/components/datetime/utils/data.d.ts +5 -5
  950. package/dist/types/components/datetime-button/datetime-button.d.ts +2 -1
  951. package/dist/types/components/divider/divider.d.ts +20 -0
  952. package/dist/types/components/fab/fab.d.ts +4 -0
  953. package/dist/types/components/fab-button/fab-button.d.ts +5 -3
  954. package/dist/types/components/fab-list/fab-list.d.ts +4 -0
  955. package/dist/types/components/footer/footer-interface.d.ts +1 -0
  956. package/dist/types/components/footer/footer.d.ts +20 -3
  957. package/dist/types/components/gallery/gallery-constants.d.ts +9 -0
  958. package/dist/types/components/gallery/gallery-interface.d.ts +10 -0
  959. package/dist/types/components/gallery/gallery.d.ts +218 -0
  960. package/dist/types/components/gallery/test/utils.d.ts +3 -0
  961. package/dist/types/components/gallery-item/gallery-item.d.ts +33 -0
  962. package/dist/types/components/grid/grid.d.ts +4 -0
  963. package/dist/types/components/header/header-interface.d.ts +1 -0
  964. package/dist/types/components/header/header.d.ts +26 -3
  965. package/dist/types/components/header/header.utils.d.ts +4 -5
  966. package/dist/types/components/img/img.d.ts +2 -1
  967. package/dist/types/components/infinite-scroll/infinite-scroll.d.ts +21 -0
  968. package/dist/types/components/infinite-scroll-content/infinite-scroll-content.d.ts +4 -0
  969. package/dist/types/components/input/input.d.ts +40 -17
  970. package/dist/types/components/input-otp/input-otp.d.ts +37 -0
  971. package/dist/types/components/input-password-toggle/input-password-toggle.d.ts +2 -0
  972. package/dist/types/components/item/item.d.ts +11 -4
  973. package/dist/types/components/item-divider/item-divider.d.ts +2 -1
  974. package/dist/types/components/item-group/item-group.d.ts +4 -0
  975. package/dist/types/components/item-option/item-option.d.ts +18 -1
  976. package/dist/types/components/item-options/item-options.d.ts +4 -0
  977. package/dist/types/components/item-sliding/item-sliding.d.ts +47 -1
  978. package/dist/types/components/item-sliding/test/test.utils.d.ts +13 -0
  979. package/dist/types/components/label/label.d.ts +2 -1
  980. package/dist/types/components/list/list.d.ts +15 -1
  981. package/dist/types/components/list-header/list-header.d.ts +2 -1
  982. package/dist/types/components/loading/loading-interface.d.ts +2 -7
  983. package/dist/types/components/loading/loading.d.ts +3 -2
  984. package/dist/types/components/menu/menu.d.ts +3 -0
  985. package/dist/types/components/menu-button/menu-button.d.ts +3 -1
  986. package/dist/types/components/menu-toggle/menu-toggle.d.ts +3 -0
  987. package/dist/types/components/modal/animations/ionic.enter.d.ts +6 -0
  988. package/dist/types/components/modal/animations/ionic.leave.d.ts +6 -0
  989. package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
  990. package/dist/types/components/modal/modal-interface.d.ts +4 -16
  991. package/dist/types/components/modal/modal.d.ts +15 -12
  992. package/dist/types/components/nav/nav-interface.d.ts +10 -1
  993. package/dist/types/components/nav/nav.d.ts +27 -3
  994. package/dist/types/components/nav-link/nav-link.d.ts +4 -0
  995. package/dist/types/components/note/note.d.ts +2 -1
  996. package/dist/types/components/picker/picker.d.ts +2 -1
  997. package/dist/types/components/picker-column/picker-column.d.ts +2 -1
  998. package/dist/types/components/picker-column-option/picker-column-option.d.ts +4 -0
  999. package/dist/types/components/picker-legacy/animations/ios.enter.d.ts +5 -0
  1000. package/dist/types/components/picker-legacy/animations/ios.leave.d.ts +5 -0
  1001. package/dist/types/components/picker-legacy/picker-interface.d.ts +52 -0
  1002. package/dist/types/components/picker-legacy/picker.d.ts +159 -0
  1003. package/dist/types/components/picker-legacy-column/picker-column.d.ts +46 -0
  1004. package/dist/types/components/picker-legacy-column/test/test.utils.d.ts +9 -0
  1005. package/dist/types/components/popover/popover-interface.d.ts +3 -6
  1006. package/dist/types/components/popover/popover.d.ts +6 -5
  1007. package/dist/types/components/progress-bar/progress-bar.d.ts +10 -1
  1008. package/dist/types/components/radio/radio.d.ts +2 -1
  1009. package/dist/types/components/radio-group/radio-group.d.ts +12 -0
  1010. package/dist/types/components/range/range.d.ts +2 -1
  1011. package/dist/types/components/refresher/refresher.d.ts +2 -1
  1012. package/dist/types/components/refresher-content/refresher-content.d.ts +4 -0
  1013. package/dist/types/components/reorder/reorder.d.ts +9 -0
  1014. package/dist/types/components/reorder-group/reorder-group.d.ts +4 -0
  1015. package/dist/types/components/ripple-effect/ripple-effect.d.ts +4 -0
  1016. package/dist/types/components/route/route.d.ts +5 -1
  1017. package/dist/types/components/router/router.d.ts +4 -0
  1018. package/dist/types/components/router-link/router-link.d.ts +4 -0
  1019. package/dist/types/components/router-outlet/router-outlet.d.ts +4 -8
  1020. package/dist/types/components/row/row.d.ts +4 -0
  1021. package/dist/types/components/searchbar/searchbar.d.ts +57 -11
  1022. package/dist/types/components/segment/segment.d.ts +2 -1
  1023. package/dist/types/components/segment-button/segment-button.d.ts +2 -1
  1024. package/dist/types/components/select/select.d.ts +55 -26
  1025. package/dist/types/components/select-modal/select-modal.d.ts +8 -0
  1026. package/dist/types/components/select-option/select-option.d.ts +7 -4
  1027. package/dist/types/components/select-popover/select-popover.d.ts +3 -0
  1028. package/dist/types/components/skeleton-text/skeleton-text.d.ts +4 -0
  1029. package/dist/types/components/spinner/spinner.d.ts +15 -0
  1030. package/dist/types/components/split-pane/split-pane.d.ts +4 -0
  1031. package/dist/types/components/tab/tab.d.ts +4 -0
  1032. package/dist/types/components/tab-bar/tab-bar-interface.d.ts +1 -0
  1033. package/dist/types/components/tab-bar/tab-bar.d.ts +41 -3
  1034. package/dist/types/components/tab-button/tab-button.d.ts +12 -1
  1035. package/dist/types/components/tabs/tabs.d.ts +3 -0
  1036. package/dist/types/components/text/text.d.ts +2 -1
  1037. package/dist/types/components/textarea/textarea.d.ts +58 -16
  1038. package/dist/types/components/thumbnail/thumbnail.d.ts +4 -0
  1039. package/dist/types/components/title/title.d.ts +4 -0
  1040. package/dist/types/components/toast/animations/utils.d.ts +2 -2
  1041. package/dist/types/components/toast/toast-interface.d.ts +3 -7
  1042. package/dist/types/components/toast/toast.d.ts +19 -2
  1043. package/dist/types/components/toggle/toggle.d.ts +15 -1
  1044. package/dist/types/components/toolbar/toolbar.d.ts +43 -3
  1045. package/dist/types/components.d.ts +2171 -263
  1046. package/dist/types/global/ionic-global.d.ts +28 -2
  1047. package/dist/types/index.d.ts +1 -1
  1048. package/dist/types/interface.d.ts +4 -0
  1049. package/dist/types/utils/config.d.ts +114 -3
  1050. package/dist/types/utils/css-value-validation.d.ts +21 -0
  1051. package/dist/types/utils/focus-trap.d.ts +1 -1
  1052. package/dist/types/utils/focus-visible.d.ts +13 -0
  1053. package/dist/types/utils/forms/clear-button-press-controller.d.ts +20 -0
  1054. package/dist/types/utils/forms/index.d.ts +1 -1
  1055. package/dist/types/utils/forms/validity.d.ts +7 -0
  1056. package/dist/types/utils/helpers.d.ts +22 -0
  1057. package/dist/types/utils/logging/index.d.ts +1 -2
  1058. package/dist/types/utils/overlay-control-label.d.ts +11 -9
  1059. package/dist/types/utils/overlays-interface.d.ts +31 -1
  1060. package/dist/types/utils/overlays.d.ts +10 -12
  1061. package/dist/types/utils/scroll-hide-controller.d.ts +56 -0
  1062. package/dist/types/utils/test/playwright/drag-element.d.ts +16 -3
  1063. package/dist/types/utils/test/playwright/generator.d.ts +31 -2
  1064. package/dist/types/utils/test/playwright/playwright-page.d.ts +1 -1
  1065. package/dist/types/utils/test/playwright/testExpect.d.ts +1 -1
  1066. package/dist/types/utils/theme.d.ts +9 -0
  1067. package/hydrate/index.js +12136 -10495
  1068. package/hydrate/index.mjs +12136 -10495
  1069. package/package.json +17 -56
  1070. package/components/p--m5cCjbK.js +0 -4
  1071. package/components/p-1jI5oW-W.js +0 -4
  1072. package/components/p-8FN7p701.js +0 -4
  1073. package/components/p-B4uHHhPK.js +0 -4
  1074. package/components/p-BMPN55of.js +0 -4
  1075. package/components/p-BNJOu1Q2.js +0 -4
  1076. package/components/p-BOvLNVKq.js +0 -4
  1077. package/components/p-BSQPZ79H.js +0 -4
  1078. package/components/p-BeamQXHF.js +0 -4
  1079. package/components/p-BhamHSw3.js +0 -4
  1080. package/components/p-Bjig0DJK.js +0 -4
  1081. package/components/p-BjluhQMI.js +0 -4
  1082. package/components/p-BlsIikdZ.js +0 -4
  1083. package/components/p-BmVRXR1y.js +0 -4
  1084. package/components/p-BqPNzJf6.js +0 -4
  1085. package/components/p-BrD9Xv62.js +0 -4
  1086. package/components/p-BvJqoZ5R.js +0 -4
  1087. package/components/p-Bz6z3Asd.js +0 -4
  1088. package/components/p-C5KYjZWD.js +0 -4
  1089. package/components/p-C6HnVvHO.js +0 -4
  1090. package/components/p-C7jvh5Wy.js +0 -4
  1091. package/components/p-C9BGR5fy.js +0 -4
  1092. package/components/p-CB-y1CdP.js +0 -4
  1093. package/components/p-CEW4RXZO.js +0 -4
  1094. package/components/p-CHH3loEE.js +0 -4
  1095. package/components/p-CIGNaXM1.js +0 -4
  1096. package/components/p-CJKUWjmg.js +0 -4
  1097. package/components/p-C_phlPMC.js +0 -4
  1098. package/components/p-CbhUdtjf.js +0 -4
  1099. package/components/p-CejmQs3h.js +0 -4
  1100. package/components/p-CtZqa4HM.js +0 -4
  1101. package/components/p-D7-vHX0A.js +0 -4
  1102. package/components/p-D9qIVSWm.js +0 -4
  1103. package/components/p-DD5fQ4EQ.js +0 -4
  1104. package/components/p-DE-3iMNW.js +0 -4
  1105. package/components/p-DFvZn99E.js +0 -4
  1106. package/components/p-DHFt2rdc.js +0 -4
  1107. package/components/p-DJztqcrH.js +0 -4
  1108. package/components/p-DM-PrAoh.js +0 -4
  1109. package/components/p-DSzSbVP2.js +0 -4
  1110. package/components/p-DV85C0e0.js +0 -4
  1111. package/components/p-DWCzVL3Y.js +0 -4
  1112. package/components/p-D_RCyzwu.js +0 -4
  1113. package/components/p-D_tD8r3L.js +0 -4
  1114. package/components/p-DaA_8eqt.js +0 -4
  1115. package/components/p-DjCtLZbF.js +0 -4
  1116. package/components/p-Dmd2xqCe.js +0 -4
  1117. package/components/p-Dojwmvde.js +0 -4
  1118. package/components/p-G0TxqHfe.js +0 -4
  1119. package/components/p-G6JR-cr_.js +0 -4
  1120. package/components/p-GG5GhznE.js +0 -4
  1121. package/components/p-LpMHEu3v.js +0 -4
  1122. package/components/p-TXPDHL13.js +0 -4
  1123. package/components/p-UIBJkZf8.js +0 -4
  1124. package/components/p-ZjP4CjeZ.js +0 -4
  1125. package/components/p-_IKFD3ID.js +0 -4
  1126. package/components/p-byZM6qHV.js +0 -4
  1127. package/components/p-dKq2jIum.js +0 -4
  1128. package/components/p-fruGqVHh.js +0 -4
  1129. package/components/p-iYhH60Tc.js +0 -4
  1130. package/components/p-ia3IDdJS.js +0 -4
  1131. package/dist/cjs/hardware-back-button-fqpYh-kd.js +0 -121
  1132. package/dist/cjs/index-DkNv4J_i.js +0 -10
  1133. package/dist/cjs/input.utils-BZdMWVrt.js +0 -35
  1134. package/dist/cjs/ion-datetime.cjs.entry.js +0 -2770
  1135. package/dist/cjs/ionic-global-k6hOWWpn.js +0 -156
  1136. package/dist/cjs/keyboard-controller-PtZoN2GS.js +0 -167
  1137. package/dist/cjs/slot-mutation-controller-DPHmqXdV.js +0 -397
  1138. package/dist/cjs/validity-BpS37YFM.js +0 -19
  1139. package/dist/collection/utils/forms/start-container-controller.js +0 -132
  1140. package/dist/esm/hardware-back-button-gLJHMX_F.js +0 -115
  1141. package/dist/esm/index-ZjP4CjeZ.js +0 -7
  1142. package/dist/esm/input.utils-B1ValN_N.js +0 -33
  1143. package/dist/esm/ion-datetime.entry.js +0 -2768
  1144. package/dist/esm/ionic-global-BVB7BrLT.js +0 -151
  1145. package/dist/esm/keyboard-controller-DEwoa1ev.js +0 -165
  1146. package/dist/esm/slot-mutation-controller-DiE_C9un.js +0 -393
  1147. package/dist/esm/theme-byZM6qHV.js +0 -48
  1148. package/dist/esm/validity-DJztqcrH.js +0 -17
  1149. package/dist/ionic/p-06ec7136.entry.js +0 -4
  1150. package/dist/ionic/p-09fe4fa3.entry.js +0 -4
  1151. package/dist/ionic/p-10d45a07.entry.js +0 -4
  1152. package/dist/ionic/p-208c8a07.entry.js +0 -4
  1153. package/dist/ionic/p-212474fa.entry.js +0 -4
  1154. package/dist/ionic/p-2eef1396.entry.js +0 -4
  1155. package/dist/ionic/p-347e005d.entry.js +0 -4
  1156. package/dist/ionic/p-3a0b3f1d.entry.js +0 -4
  1157. package/dist/ionic/p-3b071259.entry.js +0 -4
  1158. package/dist/ionic/p-40424a88.entry.js +0 -4
  1159. package/dist/ionic/p-4204184c.entry.js +0 -4
  1160. package/dist/ionic/p-47464391.entry.js +0 -4
  1161. package/dist/ionic/p-4eOQC00Z.js +0 -4
  1162. package/dist/ionic/p-4f9c9126.entry.js +0 -4
  1163. package/dist/ionic/p-5JsKPLJD.js +0 -4
  1164. package/dist/ionic/p-5bc485c6.entry.js +0 -4
  1165. package/dist/ionic/p-603a61e6.entry.js +0 -4
  1166. package/dist/ionic/p-60576951.entry.js +0 -4
  1167. package/dist/ionic/p-67a81d33.entry.js +0 -4
  1168. package/dist/ionic/p-6affb775.entry.js +0 -4
  1169. package/dist/ionic/p-6f120c25.entry.js +0 -4
  1170. package/dist/ionic/p-71c82b60.entry.js +0 -4
  1171. package/dist/ionic/p-79325ffe.entry.js +0 -4
  1172. package/dist/ionic/p-7CBuOvEo.js +0 -4
  1173. package/dist/ionic/p-7e4d51fa.entry.js +0 -4
  1174. package/dist/ionic/p-7f5d4664.entry.js +0 -4
  1175. package/dist/ionic/p-80ee82fc.entry.js +0 -4
  1176. package/dist/ionic/p-84af7dbc.entry.js +0 -4
  1177. package/dist/ionic/p-89ca830a.entry.js +0 -4
  1178. package/dist/ionic/p-93b8ec8f.entry.js +0 -4
  1179. package/dist/ionic/p-946f65c2.entry.js +0 -4
  1180. package/dist/ionic/p-9c4b39fb.entry.js +0 -4
  1181. package/dist/ionic/p-B1NEZUzQ.js +0 -4
  1182. package/dist/ionic/p-B1ck5iy-.js +0 -4
  1183. package/dist/ionic/p-B4FrqdW0.js +0 -4
  1184. package/dist/ionic/p-BB0LlG4y.js +0 -4
  1185. package/dist/ionic/p-BMPN55of.js +0 -4
  1186. package/dist/ionic/p-BSQPZ79H.js +0 -4
  1187. package/dist/ionic/p-BYEAtHr-.js +0 -4
  1188. package/dist/ionic/p-BhamHSw3.js +0 -4
  1189. package/dist/ionic/p-BmVRXR1y.js +0 -4
  1190. package/dist/ionic/p-BvabGprD.js +0 -4
  1191. package/dist/ionic/p-C-94tAim.js +0 -4
  1192. package/dist/ionic/p-C-eHZMYE.js +0 -4
  1193. package/dist/ionic/p-CBR_W98Z.js +0 -4
  1194. package/dist/ionic/p-CBWAXjA5.js +0 -4
  1195. package/dist/ionic/p-CIGNaXM1.js +0 -4
  1196. package/dist/ionic/p-CMRtMbJc.js +0 -4
  1197. package/dist/ionic/p-CPcPmkGv.js +0 -4
  1198. package/dist/ionic/p-CaRuIadB.js +0 -4
  1199. package/dist/ionic/p-Cdjxf_yg.js +0 -4
  1200. package/dist/ionic/p-ChhhtsGZ.js +0 -5
  1201. package/dist/ionic/p-CzS1qWve.js +0 -4
  1202. package/dist/ionic/p-D5t_-oMk.js +0 -4
  1203. package/dist/ionic/p-D94_RztK.js +0 -4
  1204. package/dist/ionic/p-DJztqcrH.js +0 -4
  1205. package/dist/ionic/p-DWCzVL3Y.js +0 -4
  1206. package/dist/ionic/p-DjjfauRM.js +0 -4
  1207. package/dist/ionic/p-DkUB-ROc.js +0 -4
  1208. package/dist/ionic/p-Dn0mqQ_R.js +0 -4
  1209. package/dist/ionic/p-Dojwmvde.js +0 -4
  1210. package/dist/ionic/p-DplOqGUv.js +0 -4
  1211. package/dist/ionic/p-Dst_XmZh.js +0 -4
  1212. package/dist/ionic/p-T71k3C35.js +0 -4
  1213. package/dist/ionic/p-TXPDHL13.js +0 -4
  1214. package/dist/ionic/p-UIBJkZf8.js +0 -4
  1215. package/dist/ionic/p-ZjP4CjeZ.js +0 -4
  1216. package/dist/ionic/p-a438b193.entry.js +0 -4
  1217. package/dist/ionic/p-babaaaa7.entry.js +0 -4
  1218. package/dist/ionic/p-be08d500.entry.js +0 -4
  1219. package/dist/ionic/p-be9a4f51.entry.js +0 -4
  1220. package/dist/ionic/p-byZM6qHV.js +0 -4
  1221. package/dist/ionic/p-c00d3092.entry.js +0 -4
  1222. package/dist/ionic/p-c36dc8f5.entry.js +0 -4
  1223. package/dist/ionic/p-c72a7e17.entry.js +0 -4
  1224. package/dist/ionic/p-c8edd88c.entry.js +0 -4
  1225. package/dist/ionic/p-ce0e380b.entry.js +0 -4
  1226. package/dist/ionic/p-ce32912b.entry.js +0 -4
  1227. package/dist/ionic/p-d07cf130.entry.js +0 -4
  1228. package/dist/ionic/p-d27edeb3.entry.js +0 -4
  1229. package/dist/ionic/p-d5d2c506.entry.js +0 -4
  1230. package/dist/ionic/p-d5e31ca9.entry.js +0 -4
  1231. package/dist/ionic/p-de91444f.entry.js +0 -4
  1232. package/dist/ionic/p-ded69ceb.entry.js +0 -4
  1233. package/dist/ionic/p-df72866d.entry.js +0 -4
  1234. package/dist/ionic/p-e47e3151.entry.js +0 -4
  1235. package/dist/ionic/p-e621e5e8.entry.js +0 -4
  1236. package/dist/ionic/p-eea9cf93.entry.js +0 -4
  1237. package/dist/ionic/p-f402f5a4.entry.js +0 -4
  1238. package/dist/ionic/p-fe1bfbcf.entry.js +0 -4
  1239. package/dist/ionic/p-ffb90460.entry.js +0 -4
  1240. package/dist/types/utils/forms/start-container-controller.d.ts +0 -34
  1241. /package/dist/collection/components/{input-password-toggle/input-password-toggle.css → refresher-content/refresher-content.css} +0 -0
@@ -1,23 +1,24 @@
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";
4
5
  import { Build, Host, h, forceUpdate } from "@stencil/core";
5
6
  import { ENABLE_HTML_CONTENT_DEFAULT } from "../../utils/config";
6
- import { compareOptions, createNotchController, createStartContainerController, isOptionSelected, checkInvalidState, } from "../../utils/forms/index";
7
- import { focusVisibleElement, renderHiddenInput, inheritAttributes } from "../../utils/helpers";
7
+ import { compareOptions, createNotchController, isOptionSelected, checkInvalidState } from "../../utils/forms/index";
8
+ import { suppressFocusVisible, renderHiddenInput, inheritAttributes } from "../../utils/helpers";
8
9
  import { printIonWarning } from "../../utils/logging/index";
9
10
  import { actionSheetController, alertController, popoverController, modalController } from "../../utils/overlays";
10
11
  import { isRTL } from "../../utils/rtl/index";
11
12
  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 { getIonMode } from "../../global/ionic-global";
17
+ import { getIonTheme } from "../../global/ionic-global";
18
18
  // TODO(FW-2832): types
19
19
  /**
20
- * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
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.
21
22
  *
22
23
  * @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.
23
24
  * @slot start - Content to display at the leading edge of the select.
@@ -33,244 +34,154 @@ import { getIonMode } from "../../global/ionic-global";
33
34
  * @part error-text - Supporting text displayed beneath the select when the select is invalid and touched.
34
35
  * @part bottom - The container element for helper text, error text, and counter.
35
36
  * @part wrapper - The clickable label element that wraps the entire form field (label text, 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.
37
+ * @part inner - The inner element of the wrapper that manages the slots, selected values or placeholder, and toggle icons.
39
38
  */
40
39
  export class Select {
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;
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
+ }
225
175
  styleChanged() {
226
176
  this.emitStyle();
227
177
  }
228
178
  setValue(value) {
229
- if (this.isValueEqual(this.value, value)) {
230
- return;
231
- }
232
179
  this.value = value;
233
180
  this.ionChange.emit({ value });
234
181
  }
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
- }
263
182
  async connectedCallback() {
264
183
  const { el } = this;
265
- this.slotMutationController = createSlotMutationController(el, ['label', 'start', 'end'], () => {
266
- this.startContainerController?.calculateStartContainerWidth();
267
- forceUpdate(this);
268
- });
269
184
  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();
274
185
  this.updateOverlayOptions();
275
186
  this.emitStyle();
276
187
  this.mutationO = watchForOptions(this.el, 'ion-select-option', async () => {
@@ -342,18 +253,10 @@ export class Select {
342
253
  this.mutationO.disconnect();
343
254
  this.mutationO = undefined;
344
255
  }
345
- if (this.slotMutationController) {
346
- this.slotMutationController.destroy();
347
- this.slotMutationController = undefined;
348
- }
349
256
  if (this.notchController) {
350
257
  this.notchController.destroy();
351
258
  this.notchController = undefined;
352
259
  }
353
- if (this.startContainerController) {
354
- this.startContainerController.destroy();
355
- this.startContainerController = undefined;
356
- }
357
260
  // Clean up validation observer to prevent memory leaks.
358
261
  if (this.validationObserver) {
359
262
  this.validationObserver.disconnect();
@@ -375,44 +278,65 @@ export class Select {
375
278
  // Add logic to scroll selected item into view before presenting
376
279
  const scrollSelectedIntoView = () => {
377
280
  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;
378
286
  if (indexOfSelected > -1) {
379
287
  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
+ */
380
296
  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
- */
392
297
  const interactiveEl = selectedItem.querySelector('ion-radio, ion-checkbox');
393
298
  if (interactiveEl) {
394
299
  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();
398
300
  }
399
- focusVisibleElement(selectedItem);
301
+ optionToFocus = interactiveEl !== null && interactiveEl !== void 0 ? interactiveEl : selectedItem;
400
302
  }
401
303
  }
402
304
  else {
403
305
  /**
404
306
  * If no value is set then focus the first enabled option.
405
307
  */
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'));
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();
416
340
  }
417
341
  }
418
342
  };
@@ -512,7 +436,8 @@ export class Select {
512
436
  const isSelected = isOptionSelected(selectValue, value, this.compareWith);
513
437
  const { content, startContent, endContent } = extractOptionContent(option, this.customHTMLEnabled);
514
438
  return {
515
- text: content ?? '',
439
+ role: isSelected ? 'selected' : '',
440
+ text: content !== null && content !== void 0 ? content : '',
516
441
  cssClass: optClass,
517
442
  disabled: option.disabled,
518
443
  handler: () => {
@@ -549,7 +474,7 @@ export class Select {
549
474
  return {
550
475
  type: inputType,
551
476
  cssClass: optClass,
552
- label: content ?? '',
477
+ label: content !== null && content !== void 0 ? content : '',
553
478
  value,
554
479
  checked: isOptionSelected(selectValue, value, this.compareWith),
555
480
  disabled: option.disabled,
@@ -572,7 +497,7 @@ export class Select {
572
497
  const optClass = `${OPTION_CLASS} ${copyClasses}`;
573
498
  const { content, startContent, endContent } = extractOptionContent(option, this.customHTMLEnabled);
574
499
  return {
575
- text: content ?? '',
500
+ text: content !== null && content !== void 0 ? content : '',
576
501
  cssClass: optClass,
577
502
  value,
578
503
  checked: isOptionSelected(selectValue, value, this.compareWith),
@@ -595,8 +520,8 @@ export class Select {
595
520
  async openPopover(ev) {
596
521
  const { fill, labelPlacement } = this;
597
522
  const interfaceOptions = this.interfaceOptions;
598
- const mode = getIonMode(this);
599
- const showBackdrop = mode === 'md' ? false : true;
523
+ const theme = getIonTheme(this);
524
+ const showBackdrop = theme === 'md' ? false : true;
600
525
  const multiple = this.multiple;
601
526
  const value = this.value;
602
527
  let event = ev;
@@ -607,7 +532,7 @@ export class Select {
607
532
  * when using a fill in MD mode or if the
608
533
  * label is floating/stacked.
609
534
  */
610
- if (hasFloatingOrStackedLabel || (mode === 'md' && fill !== undefined)) {
535
+ if (hasFloatingOrStackedLabel || (theme === 'md' && fill !== undefined)) {
611
536
  size = 'cover';
612
537
  /**
613
538
  * Otherwise the popover
@@ -616,43 +541,34 @@ export class Select {
616
541
  */
617
542
  }
618
543
  else {
619
- event = {
620
- ...ev,
621
- detail: {
544
+ event = Object.assign(Object.assign({}, ev), { detail: {
622
545
  ionShadowTarget: this.nativeWrapperEl,
623
- },
624
- };
546
+ } });
625
547
  }
626
548
  const options = this.createOverlaySelectOptions(this.childOpts, value);
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: [
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: [
637
553
  'select-popover',
638
554
  hasRichContent ? 'select-popover-rich-content' : undefined,
639
555
  interfaceOptions.cssClass,
640
- ],
641
- componentProps: {
556
+ ], componentProps: {
642
557
  header: interfaceOptions.header,
643
558
  subHeader: interfaceOptions.subHeader,
644
559
  message: interfaceOptions.message,
645
560
  multiple,
646
561
  value,
647
562
  options,
648
- },
649
- };
563
+ } });
650
564
  /**
651
565
  * Workaround for Stencil to autodefine
652
566
  * ion-select-popover and ion-popover when
653
567
  * using Custom Elements build.
654
568
  */
569
+ // eslint-disable-next-line
655
570
  if (false) {
571
+ // eslint-disable-next-line
656
572
  // @ts-ignore
657
573
  document.createElement('ion-select-popover');
658
574
  document.createElement('ion-popover');
@@ -660,20 +576,17 @@ export class Select {
660
576
  return popoverController.create(popoverOpts);
661
577
  }
662
578
  async openActionSheet() {
663
- const mode = getIonMode(this);
579
+ const theme = getIonTheme(this);
664
580
  const interfaceOptions = this.interfaceOptions;
665
- const actionSheetOpts = {
666
- mode,
667
- ...interfaceOptions,
668
- buttons: this.createActionSheetButtons(this.childOpts, this.value),
669
- cssClass: ['select-action-sheet', interfaceOptions.cssClass],
670
- };
581
+ const actionSheetOpts = Object.assign(Object.assign({ theme }, interfaceOptions), { buttons: this.createActionSheetButtons(this.childOpts, this.value), cssClass: ['select-action-sheet', interfaceOptions.cssClass] });
671
582
  /**
672
583
  * Workaround for Stencil to autodefine
673
584
  * ion-action-sheet when
674
585
  * using Custom Elements build.
675
586
  */
587
+ // eslint-disable-next-line
676
588
  if (false) {
589
+ // eslint-disable-next-line
677
590
  // @ts-ignore
678
591
  document.createElement('ion-action-sheet');
679
592
  }
@@ -682,13 +595,8 @@ export class Select {
682
595
  async openAlert() {
683
596
  const interfaceOptions = this.interfaceOptions;
684
597
  const inputType = this.multiple ? 'checkbox' : 'radio';
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: [
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: [
692
600
  {
693
601
  text: this.cancelText,
694
602
  role: 'cancel',
@@ -702,19 +610,19 @@ export class Select {
702
610
  this.setValue(selectedValues);
703
611
  },
704
612
  },
705
- ],
706
- cssClass: [
613
+ ], cssClass: [
707
614
  'select-alert',
708
615
  interfaceOptions.cssClass,
709
616
  this.multiple ? 'multiple-select-alert' : 'single-select-alert',
710
- ],
711
- };
617
+ ] });
712
618
  /**
713
619
  * Workaround for Stencil to autodefine
714
620
  * ion-alert when
715
621
  * using Custom Elements build.
716
622
  */
623
+ // eslint-disable-next-line
717
624
  if (false) {
625
+ // eslint-disable-next-line
718
626
  // @ts-ignore
719
627
  document.createElement('ion-alert');
720
628
  }
@@ -722,26 +630,23 @@ export class Select {
722
630
  }
723
631
  openModal() {
724
632
  const { multiple, value, interfaceOptions } = this;
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: {
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: {
732
635
  header: interfaceOptions.header,
733
636
  cancelText: this.cancelText,
637
+ cancelIcon: this.cancelIcon,
734
638
  multiple,
735
639
  value,
736
640
  options: this.createOverlaySelectOptions(this.childOpts, value),
737
- },
738
- };
641
+ } });
739
642
  /**
740
643
  * Workaround for Stencil to autodefine
741
644
  * ion-select-modal and ion-modal when
742
645
  * using Custom Elements build.
743
646
  */
647
+ // eslint-disable-next-line
744
648
  if (false) {
649
+ // eslint-disable-next-line
745
650
  // @ts-ignore
746
651
  document.createElement('ion-select-modal');
747
652
  document.createElement('ion-modal');
@@ -807,51 +712,18 @@ export class Select {
807
712
  };
808
713
  this.ionStyle.emit(style);
809
714
  }
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);
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;
816
721
  }
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();
722
+ if (size === undefined) {
723
+ return 'medium';
845
724
  }
846
- };
847
- onFocus = () => {
848
- this.hasFocus = true;
849
- this.ionFocus.emit();
850
- };
851
- onBlur = () => {
852
- this.hasFocus = false;
853
- this.ionBlur.emit();
854
- };
725
+ return size;
726
+ }
855
727
  renderLabel() {
856
728
  const { label } = this;
857
729
  return (h("div", { class: {
@@ -860,8 +732,8 @@ export class Select {
860
732
  }, part: "label" }, label === undefined ? h("slot", { name: "label" }) : h("div", { class: "label-text" }, label)));
861
733
  }
862
734
  componentDidRender() {
863
- this.notchController?.calculateNotchWidth();
864
- this.startContainerController?.calculateStartContainerWidth();
735
+ var _a;
736
+ (_a = this.notchController) === null || _a === void 0 ? void 0 : _a.calculateNotchWidth();
865
737
  }
866
738
  /**
867
739
  * Gets any content passed into the `label` slot,
@@ -880,24 +752,33 @@ export class Select {
880
752
  return this.label !== undefined || this.labelSlot !== null;
881
753
  }
882
754
  /**
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.
755
+ * Renders the border container
756
+ * when fill="outline".
887
757
  */
888
- onLabelClick = (ev) => {
889
- if (ev.target === this.focusEl && this.isExpanded) {
890
- ev.stopPropagation();
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
+ ];
891
776
  }
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" })));
777
+ /**
778
+ * If not using the outline style,
779
+ * we can render just the label.
780
+ */
781
+ return this.renderLabel();
901
782
  }
902
783
  /**
903
784
  * Wraps text nodes in the select text with span elements
@@ -917,7 +798,8 @@ export class Select {
917
798
  return html;
918
799
  }
919
800
  Array.from(temp.childNodes).forEach((node) => {
920
- if (node.nodeType === Node.TEXT_NODE && node.textContent?.trim()) {
801
+ var _a, _b, _c, _d;
802
+ if (node.nodeType === Node.TEXT_NODE && ((_a = node.textContent) === null || _a === void 0 ? void 0 : _a.trim())) {
921
803
  const text = node.textContent;
922
804
  /**
923
805
  * Split comma separator from the text content
@@ -928,12 +810,12 @@ export class Select {
928
810
  const commaNode = document.createTextNode(commaMatch[1]);
929
811
  const wrapper = document.createElement('span');
930
812
  wrapper.textContent = commaMatch[2];
931
- node.parentNode?.replaceChild(wrapper, node);
932
- wrapper.parentNode?.insertBefore(commaNode, wrapper);
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);
933
815
  return;
934
816
  }
935
817
  const wrapper = document.createElement('span');
936
- node.parentNode?.replaceChild(wrapper, node);
818
+ (_d = node.parentNode) === null || _d === void 0 ? void 0 : _d.replaceChild(wrapper, node);
937
819
  wrapper.appendChild(node);
938
820
  }
939
821
  });
@@ -969,24 +851,20 @@ export class Select {
969
851
  * next to the select text.
970
852
  */
971
853
  renderSelectIcon() {
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;
854
+ const { isExpanded, selectExpandedIcon, selectCollapsedIcon } = this;
855
+ let icon = selectCollapsedIcon;
856
+ if (isExpanded) {
857
+ icon = selectExpandedIcon;
981
858
  }
982
859
  return h("ion-icon", { class: "select-icon", part: "icon", "aria-hidden": "true", icon: icon });
983
860
  }
984
861
  get ariaLabel() {
862
+ var _a;
985
863
  const { placeholder, inheritedAttributes } = this;
986
864
  // Get the plain text from the selected text
987
865
  const displayValue = this.getText();
988
866
  // The aria label should be preferred over visible text if both are specified
989
- const definedLabel = inheritedAttributes['aria-label'] ?? this.labelText;
867
+ const definedLabel = (_a = inheritedAttributes['aria-label']) !== null && _a !== void 0 ? _a : this.labelText;
990
868
  /**
991
869
  * If developer has specified a placeholder
992
870
  * and there is nothing selected, the selectText
@@ -1012,6 +890,63 @@ export class Select {
1012
890
  const { disabled, inputId, isExpanded, required } = this;
1013
891
  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) }));
1014
892
  }
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
+ }
1015
950
  getHintTextId() {
1016
951
  const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
1017
952
  if (isInvalid && errorText) {
@@ -1049,19 +984,41 @@ export class Select {
1049
984
  return (h("div", { class: "select-bottom", part: "bottom" }, this.renderHintText()));
1050
985
  }
1051
986
  render() {
1052
- const { disabled, el, isExpanded, expandedIcon, labelPlacement, justify, placeholder, fill, shape, name, value, hasFocus, } = this;
1053
- const mode = getIonMode(this);
987
+ const { disabled, el, isExpanded, expandedIcon, labelPlacement, justify, placeholder, fill, name, value, hasFocus, } = this;
988
+ const theme = getIonTheme(this);
989
+ const shape = this.getShape();
1054
990
  const hasFloatingOrStackedLabel = labelPlacement === 'floating' || labelPlacement === 'stacked';
991
+ const shouldRenderOuterIcon = theme !== 'ionic' && hasFloatingOrStackedLabel;
992
+ const shouldRenderInnerIcon = theme === 'ionic' || !hasFloatingOrStackedLabel;
1055
993
  const justifyEnabled = !hasFloatingOrStackedLabel && justify !== undefined;
1056
994
  const rtl = isRTL(el) ? 'rtl' : 'ltr';
1057
995
  const inItem = hostContext('ion-item', this.el);
1058
- const shouldRenderHighlight = mode === 'md' && fill !== 'outline' && !inItem;
996
+ const size = this.getSize();
997
+ const shouldRenderHighlight = theme === 'md' && fill !== 'outline' && !inItem;
1059
998
  const hasValue = this.hasValue();
1060
- const hasOutlineFill = mode === 'md' && fill === 'outline';
999
+ const hasStartEndSlots = el.querySelector('[slot="start"], [slot="end"]') !== null;
1061
1000
  renderHiddenInput(true, el, name, parseValue(value), disabled);
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,
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,
1065
1022
  'in-item': inItem,
1066
1023
  'in-item-color': hostContext('ion-item.ion-color', el),
1067
1024
  'select-disabled': disabled,
@@ -1078,20 +1035,33 @@ export class Select {
1078
1035
  [`select-justify-${justify}`]: justifyEnabled,
1079
1036
  [`select-shape-${shape}`]: shape !== undefined,
1080
1037
  [`select-label-placement-${labelPlacement}`]: true,
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()));
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()));
1082
1050
  }
1083
1051
  static get is() { return "ion-select"; }
1084
1052
  static get encapsulation() { return "shadow"; }
1085
1053
  static get originalStyleUrls() {
1086
1054
  return {
1087
1055
  "ios": ["select.ios.scss"],
1088
- "md": ["select.md.scss"]
1056
+ "md": ["select.md.scss"],
1057
+ "ionic": ["select.ionic.scss"]
1089
1058
  };
1090
1059
  }
1091
1060
  static get styleUrls() {
1092
1061
  return {
1093
1062
  "ios": ["select.ios.css"],
1094
- "md": ["select.md.css"]
1063
+ "md": ["select.md.css"],
1064
+ "ionic": ["select.ionic.css"]
1095
1065
  };
1096
1066
  }
1097
1067
  static get properties() {
@@ -1116,6 +1086,26 @@ export class Select {
1116
1086
  "attribute": "cancel-text",
1117
1087
  "defaultValue": "'Cancel'"
1118
1088
  },
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
+ },
1119
1109
  "color": {
1120
1110
  "type": "string",
1121
1111
  "mutable": false,
@@ -1200,7 +1190,7 @@ export class Select {
1200
1190
  "optional": true,
1201
1191
  "docs": {
1202
1192
  "tags": [],
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."
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."
1204
1194
  },
1205
1195
  "getter": false,
1206
1196
  "setter": false,
@@ -1460,7 +1450,7 @@ export class Select {
1460
1450
  "optional": true,
1461
1451
  "docs": {
1462
1452
  "tags": [],
1463
- "text": "The toggle icon to use. Defaults to `chevronExpand` for `ios` mode,\nor `caretDownSharp` for `md` mode."
1453
+ "text": "The toggle icon to use. Defaults to `\"chevronExpand\"` for the `\"ios\"` theme,\nor `\"caretDownSharp\"` for the `\"md\"` and `\"ionic\"` themes."
1464
1454
  },
1465
1455
  "getter": false,
1466
1456
  "setter": false,
@@ -1479,70 +1469,89 @@ export class Select {
1479
1469
  "optional": true,
1480
1470
  "docs": {
1481
1471
  "tags": [],
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."
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."
1483
1473
  },
1484
1474
  "getter": false,
1485
1475
  "setter": false,
1486
1476
  "reflect": false,
1487
1477
  "attribute": "expanded-icon"
1488
1478
  },
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
+ },
1489
1499
  "shape": {
1490
1500
  "type": "string",
1491
1501
  "mutable": false,
1492
1502
  "complexType": {
1493
- "original": "'round'",
1494
- "resolved": "\"round\" | undefined",
1503
+ "original": "'soft' | 'round' | 'rectangular'",
1504
+ "resolved": "\"rectangular\" | \"round\" | \"soft\" | undefined",
1495
1505
  "references": {}
1496
1506
  },
1497
1507
  "required": false,
1498
1508
  "optional": true,
1499
1509
  "docs": {
1500
1510
  "tags": [],
1501
- "text": "The shape of the select. If \"round\" it will have an increased border radius."
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."
1502
1512
  },
1503
1513
  "getter": false,
1504
1514
  "setter": false,
1505
1515
  "reflect": false,
1506
1516
  "attribute": "shape"
1507
1517
  },
1508
- "value": {
1509
- "type": "any",
1510
- "mutable": true,
1518
+ "size": {
1519
+ "type": "string",
1520
+ "mutable": false,
1511
1521
  "complexType": {
1512
- "original": "any | null",
1513
- "resolved": "any",
1522
+ "original": "'small' | 'medium' | 'large'",
1523
+ "resolved": "\"large\" | \"medium\" | \"small\" | undefined",
1514
1524
  "references": {}
1515
1525
  },
1516
1526
  "required": false,
1517
1527
  "optional": true,
1518
1528
  "docs": {
1519
1529
  "tags": [],
1520
- "text": "The value of the select."
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."
1521
1531
  },
1522
1532
  "getter": false,
1523
1533
  "setter": false,
1524
1534
  "reflect": false,
1525
- "attribute": "value"
1535
+ "attribute": "size"
1526
1536
  },
1527
- "required": {
1528
- "type": "boolean",
1529
- "mutable": false,
1537
+ "value": {
1538
+ "type": "any",
1539
+ "mutable": true,
1530
1540
  "complexType": {
1531
- "original": "boolean",
1532
- "resolved": "boolean",
1541
+ "original": "any | null",
1542
+ "resolved": "any",
1533
1543
  "references": {}
1534
1544
  },
1535
1545
  "required": false,
1536
- "optional": false,
1546
+ "optional": true,
1537
1547
  "docs": {
1538
1548
  "tags": [],
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."
1549
+ "text": "The value of the select."
1540
1550
  },
1541
1551
  "getter": false,
1542
1552
  "setter": false,
1543
1553
  "reflect": false,
1544
- "attribute": "required",
1545
- "defaultValue": "false"
1554
+ "attribute": "value"
1546
1555
  }
1547
1556
  };
1548
1557
  }
@@ -1791,7 +1800,7 @@ const textForValue = (opts, value, compareWith, useHTML = false) => {
1791
1800
  */
1792
1801
  if (content) {
1793
1802
  const texts = Array.from(content.childNodes)
1794
- .map((n) => n.textContent?.trim())
1803
+ .map((n) => { var _a; return (_a = n.textContent) === null || _a === void 0 ? void 0 : _a.trim(); })
1795
1804
  .filter((t) => t);
1796
1805
  return texts.join(' ') || null;
1797
1806
  }
@@ -1811,8 +1820,9 @@ const textForValue = (opts, value, compareWith, useHTML = false) => {
1811
1820
  */
1812
1821
  const trimTextNodes = (node) => {
1813
1822
  node.childNodes.forEach((child) => {
1823
+ var _a;
1814
1824
  if (child.nodeType === Node.TEXT_NODE) {
1815
- child.textContent = child.textContent?.trim() || '';
1825
+ child.textContent = ((_a = child.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || '';
1816
1826
  }
1817
1827
  else if (child.nodeType === Node.ELEMENT_NODE) {
1818
1828
  trimTextNodes(child);
@@ -1840,13 +1850,14 @@ const getOptionContent = (option, slotName, useHTML = false) => {
1840
1850
  // Default slot: get nodes without a slot attribute
1841
1851
  const defaultSlot = getOptionDefaultSlot(option) || [];
1842
1852
  nodes = defaultSlot.filter((node) => {
1853
+ var _a;
1843
1854
  /**
1844
1855
  * Exclude whitespace-only text nodes (newline noise between
1845
1856
  * markup elements). Element nodes are always kept, even when
1846
1857
  * their textContent is empty (e.g. <svg>, <img>).
1847
1858
  */
1848
1859
  if (node.nodeType === Node.TEXT_NODE) {
1849
- return node.textContent?.trim().length !== 0;
1860
+ return ((_a = node.textContent) === null || _a === void 0 ? void 0 : _a.trim().length) !== 0;
1850
1861
  }
1851
1862
  return true;
1852
1863
  });
@@ -1856,7 +1867,7 @@ const getOptionContent = (option, slotName, useHTML = false) => {
1856
1867
  }
1857
1868
  // Return plain text if no elements are found
1858
1869
  if (!slotName && nodes.every((n) => n.nodeType === Node.TEXT_NODE)) {
1859
- return nodes.map((n) => n.textContent?.trim()).join(' ') || null;
1870
+ return nodes.map((n) => { var _a; return (_a = n.textContent) === null || _a === void 0 ? void 0 : _a.trim(); }).join(' ') || null;
1860
1871
  }
1861
1872
  /**
1862
1873
  * Mirror known custom-element properties (e.g. ion-icon's `icon`)
@@ -1872,9 +1883,10 @@ const getOptionContent = (option, slotName, useHTML = false) => {
1872
1883
  // Clone each node into a temporary container
1873
1884
  const container = document.createElement('div');
1874
1885
  nodes.forEach((n) => {
1886
+ var _a;
1875
1887
  const clone = n.cloneNode(true);
1876
1888
  if (clone.nodeType === Node.TEXT_NODE) {
1877
- clone.textContent = clone.textContent?.trim() || '';
1889
+ clone.textContent = ((_a = clone.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || '';
1878
1890
  }
1879
1891
  else {
1880
1892
  trimTextNodes(clone);
@@ -1925,7 +1937,7 @@ const getDefaultSlotPlainText = (option) => {
1925
1937
  return node.nodeType === Node.TEXT_NODE;
1926
1938
  })
1927
1939
  .filter((node) => node.nodeType === Node.TEXT_NODE)
1928
- .map((n) => n.textContent?.trim())
1940
+ .map((n) => { var _a; return (_a = n.textContent) === null || _a === void 0 ? void 0 : _a.trim(); })
1929
1941
  .filter((t) => t);
1930
1942
  return texts.join(' ');
1931
1943
  };
@@ -1939,6 +1951,7 @@ const getDefaultSlotPlainText = (option) => {
1939
1951
  * via the `innerHTMLTemplatesEnabled` config.
1940
1952
  */
1941
1953
  const extractOptionContent = (option, customHTMLEnabled) => {
1954
+ var _a, _b;
1942
1955
  if (!customHTMLEnabled) {
1943
1956
  return {
1944
1957
  content: getDefaultSlotPlainText(option),
@@ -1948,8 +1961,8 @@ const extractOptionContent = (option, customHTMLEnabled) => {
1948
1961
  }
1949
1962
  return {
1950
1963
  content: getOptionContent(option),
1951
- startContent: getOptionContent(option, 'start') ?? undefined,
1952
- endContent: getOptionContent(option, 'end') ?? undefined,
1964
+ startContent: (_a = getOptionContent(option, 'start')) !== null && _a !== void 0 ? _a : undefined,
1965
+ endContent: (_b = getOptionContent(option, 'end')) !== null && _b !== void 0 ? _b : undefined,
1953
1966
  };
1954
1967
  };
1955
1968
  let selectIds = 0;