@ionic/core 8.8.18-dev.11786108988.1fd94742 → 8.8.18-dev.11786109471.1285bcfb

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 (788) hide show
  1. package/components/index.js +1 -1
  2. package/components/ion-accordion-group.js +1 -1
  3. package/components/ion-accordion.js +1 -1
  4. package/components/ion-action-sheet.js +1 -1
  5. package/components/ion-alert.js +1 -1
  6. package/components/ion-app.js +1 -1
  7. package/components/ion-avatar.js +1 -1
  8. package/components/ion-back-button.js +1 -1
  9. package/components/ion-backdrop.js +1 -1
  10. package/components/ion-badge.js +1 -1
  11. package/components/ion-breadcrumb.js +1 -1
  12. package/components/ion-breadcrumbs.js +1 -1
  13. package/components/ion-button.js +1 -1
  14. package/components/ion-buttons.js +1 -1
  15. package/components/ion-card-content.js +1 -1
  16. package/components/ion-card-header.js +1 -1
  17. package/components/ion-card-subtitle.js +1 -1
  18. package/components/ion-card-title.js +1 -1
  19. package/components/ion-card.js +1 -1
  20. package/components/ion-checkbox.js +1 -1
  21. package/components/ion-chip.js +1 -1
  22. package/components/ion-col.js +1 -1
  23. package/components/ion-content.js +1 -1
  24. package/components/ion-datetime-button.js +1 -1
  25. package/components/ion-datetime.js +1 -1
  26. package/components/ion-fab-button.js +1 -1
  27. package/components/ion-fab-list.js +1 -1
  28. package/components/ion-fab.js +1 -1
  29. package/components/ion-footer.js +1 -1
  30. package/components/ion-grid.js +1 -1
  31. package/components/ion-header.js +1 -1
  32. package/components/ion-icon.js +1 -1
  33. package/components/ion-img.js +1 -1
  34. package/components/ion-infinite-scroll-content.js +1 -1
  35. package/components/ion-infinite-scroll.js +1 -1
  36. package/components/ion-input-otp.js +1 -1
  37. package/components/ion-input-password-toggle.js +1 -1
  38. package/components/ion-input.js +1 -1
  39. package/components/ion-item-divider.js +1 -1
  40. package/components/ion-item-group.js +1 -1
  41. package/components/ion-item-option.js +1 -1
  42. package/components/ion-item-options.js +1 -1
  43. package/components/ion-item-sliding.js +1 -1
  44. package/components/ion-item.js +1 -1
  45. package/components/ion-label.js +1 -1
  46. package/components/ion-list-header.js +1 -1
  47. package/components/ion-list.js +1 -1
  48. package/components/ion-loading.js +1 -1
  49. package/components/ion-menu-button.js +1 -1
  50. package/components/ion-menu-toggle.js +1 -1
  51. package/components/ion-menu.js +1 -1
  52. package/components/ion-modal.js +1 -1
  53. package/components/ion-nav-link.js +1 -1
  54. package/components/ion-nav.js +1 -1
  55. package/components/ion-note.js +1 -1
  56. package/components/ion-picker-column-option.js +1 -1
  57. package/components/ion-picker-column.js +1 -1
  58. package/components/ion-picker-legacy-column.d.ts +11 -0
  59. package/components/ion-picker-legacy-column.js +4 -0
  60. package/components/ion-picker-legacy.d.ts +11 -0
  61. package/components/ion-picker-legacy.js +4 -0
  62. package/components/ion-picker.js +1 -1
  63. package/components/ion-popover.js +1 -1
  64. package/components/ion-progress-bar.js +1 -1
  65. package/components/ion-radio-group.js +1 -1
  66. package/components/ion-radio.js +1 -1
  67. package/components/ion-range.js +1 -1
  68. package/components/ion-refresher-content.js +1 -1
  69. package/components/ion-refresher.js +1 -1
  70. package/components/ion-reorder-group.js +1 -1
  71. package/components/ion-reorder.js +1 -1
  72. package/components/ion-ripple-effect.js +1 -1
  73. package/components/ion-route-redirect.js +1 -1
  74. package/components/ion-route.js +1 -1
  75. package/components/ion-router-link.js +1 -1
  76. package/components/ion-router-outlet.js +1 -1
  77. package/components/ion-router.js +1 -1
  78. package/components/ion-row.js +1 -1
  79. package/components/ion-searchbar.js +1 -1
  80. package/components/ion-segment-button.js +1 -1
  81. package/components/ion-segment-content.js +1 -1
  82. package/components/ion-segment-view.js +1 -1
  83. package/components/ion-segment.js +1 -1
  84. package/components/ion-select-modal.js +1 -1
  85. package/components/ion-select-option.js +1 -1
  86. package/components/ion-select-popover.js +1 -1
  87. package/components/ion-select.js +1 -1
  88. package/components/ion-skeleton-text.js +1 -1
  89. package/components/ion-spinner.js +1 -1
  90. package/components/ion-split-pane.js +1 -1
  91. package/components/ion-tab-bar.js +1 -1
  92. package/components/ion-tab-button.js +1 -1
  93. package/components/ion-tab.js +1 -1
  94. package/components/ion-tabs.js +1 -1
  95. package/components/ion-text.js +1 -1
  96. package/components/ion-textarea.js +1 -1
  97. package/components/ion-thumbnail.js +1 -1
  98. package/components/ion-title.js +1 -1
  99. package/components/ion-toast.js +1 -1
  100. package/components/ion-toggle.js +1 -1
  101. package/components/ion-toolbar.js +1 -1
  102. package/components/{p-AqD_wmvU.js → p--JUspHvy.js} +1 -1
  103. package/components/p-A3O24YmY.js +4 -0
  104. package/components/p-ABkNVeU9.js +4 -0
  105. package/{dist/ionic/p-CHpEzg-o.js → components/p-B-JJgYSG.js} +1 -1
  106. package/components/p-B9jFTlwE.js +4 -0
  107. package/components/p-BLmJ0zRm.js +4 -0
  108. package/components/p-BMI53wYL.js +4 -0
  109. package/components/p-BMaKgJFV.js +4 -0
  110. package/components/p-BSEgsdFI.js +4 -0
  111. package/components/p-BTEOs1at.js +4 -0
  112. package/{dist/ionic/p-aL0G45tD.js → components/p-BkKAANMJ.js} +1 -1
  113. package/components/p-BlIAuGv2.js +4 -0
  114. package/components/p-Bnsn6KaP.js +4 -0
  115. package/components/p-BsBCoGa-.js +4 -0
  116. package/components/p-Bz0dSlXZ.js +4 -0
  117. package/components/p-C53feagD.js +4 -0
  118. package/components/p-CHqRYvYm.js +4 -0
  119. package/components/p-CQGnMY3n.js +4 -0
  120. package/components/p-CSZf8_j0.js +4 -0
  121. package/components/{p-ltNYIRmI.js → p-C_hpsif8.js} +1 -1
  122. package/components/p-C_xFdyXe.js +4 -0
  123. package/components/p-Cf2jSDS8.js +4 -0
  124. package/components/p-Cfx4M1Bn.js +4 -0
  125. package/components/{p-C6JOi8wS.js → p-ChIZKXUu.js} +1 -1
  126. package/components/p-CkMSOsFF.js +4 -0
  127. package/components/p-Cl0B-RWe.js +4 -0
  128. package/components/p-CmR5uXej.js +4 -0
  129. package/components/p-Cp4GRDqq.js +4 -0
  130. package/components/p-CsNJ1ULL.js +4 -0
  131. package/components/p-CtWGkNnJ.js +4 -0
  132. package/components/p-CzCbeKys.js +4 -0
  133. package/components/p-D-aHdMxW.js +4 -0
  134. package/components/p-D0d8qTwj.js +4 -0
  135. package/components/p-D13Eaw-8.js +4 -0
  136. package/components/{p-D0pL_HuH.js → p-D3xo7hqU.js} +1 -1
  137. package/components/p-D6Ynv7Xh.js +4 -0
  138. package/components/p-D7uN07a3.js +4 -0
  139. package/components/p-DCnGU1fF.js +4 -0
  140. package/components/p-DGvrK8dD.js +4 -0
  141. package/components/p-DOFCbuQR.js +4 -0
  142. package/components/p-DV5mPYQS.js +4 -0
  143. package/components/p-DWkAgceV.js +4 -0
  144. package/components/p-DiVJyqlX.js +4 -0
  145. package/components/{p-Dcu-SAJG.js → p-DqLB8yFQ.js} +1 -1
  146. package/components/p-DqZAXv2t.js +4 -0
  147. package/components/p-Osve4qkc.js +4 -0
  148. package/components/p-R8zmRi4c.js +4 -0
  149. package/components/p-SLS1rDZM.js +4 -0
  150. package/components/p-aJ6PBUvj.js +4 -0
  151. package/components/p-cyNmxje6.js +4 -0
  152. package/components/p-gAg0kXZp.js +4 -0
  153. package/components/p-j5IxBIan.js +4 -0
  154. package/components/p-k_E4tX5Z.js +4 -0
  155. package/components/p-oD4kcBRX.js +4 -0
  156. package/components/p-rCa2eL0j.js +4 -0
  157. package/components/p-scxfI1Dd.js +4 -0
  158. package/components/p-tr4_8ZS8.js +4 -0
  159. package/components/p-vRBNsYbs.js +4 -0
  160. package/components/p-yzCsOZE2.js +4 -0
  161. package/dist/cjs/{animation-D5WDBRvT.js → animation-BJq0kcy2.js} +4 -4
  162. package/dist/cjs/{app-globals-C2s3Cbal.js → app-globals-BlqrqKTN.js} +1 -1
  163. package/dist/cjs/{button-active-CXI2TseG.js → button-active-0mPOKmV2.js} +3 -3
  164. package/dist/cjs/config-xninhj0J.js +201 -0
  165. package/dist/cjs/{dir-Brx7VkvP.js → dir-Cn0z1rJH.js} +1 -1
  166. package/dist/cjs/{format-ZfKtcdit.js → format-PxvGiOik.js} +30 -40
  167. package/dist/cjs/{framework-delegate-Bdvk3JQO.js → framework-delegate-BtICZDHr.js} +7 -5
  168. package/dist/cjs/{gesture-controller-BDUH7687.js → gesture-controller-dtqlP_q4.js} +8 -15
  169. package/dist/cjs/{haptic-Ch-X4gRx.js → haptic-ClPPQ_PS.js} +3 -2
  170. package/dist/cjs/{hardware-back-button-zr8zeYaH.js → hardware-back-button-iUuF_76h.js} +4 -4
  171. package/dist/cjs/{helpers-DURh1XdY.js → helpers-Cv23MFHM.js} +3 -3
  172. package/dist/cjs/{index-DsoHs7Ly.js → index-BERfRao3.js} +5 -5
  173. package/dist/cjs/{index-P1nQxrpZ.js → index-CAvQ7Tka.js} +4 -10
  174. package/dist/cjs/{index-CAThePqm.js → index-Ct7gcRif.js} +6 -4
  175. package/dist/cjs/{index-Btdix80K.js → index-D81eLYUM.js} +2 -2
  176. package/dist/cjs/{index-wOmugbdg.js → index-DqmRDbxg.js} +1 -1
  177. package/dist/cjs/{index-BnhnwL1o.js → index-Dqpns5vP.js} +34 -2
  178. package/dist/cjs/{index-B7sCu6vN.js → index-aC4x3Fk3.js} +7 -6
  179. package/dist/cjs/index.cjs.js +18 -18
  180. package/dist/cjs/{input-shims-CPbWb84M.js → input-shims-DpA1zUN9.js} +11 -9
  181. package/dist/cjs/{input.utils-CkASW3mE.js → input.utils-DetjmtH2.js} +4 -3
  182. package/dist/cjs/ion-accordion_2.cjs.entry.js +340 -368
  183. package/dist/cjs/ion-action-sheet.cjs.entry.js +76 -187
  184. package/dist/cjs/ion-alert.cjs.entry.js +111 -273
  185. package/dist/cjs/ion-app_8.cjs.entry.js +190 -306
  186. package/dist/cjs/ion-avatar_3.cjs.entry.js +4 -10
  187. package/dist/cjs/ion-back-button.cjs.entry.js +23 -47
  188. package/dist/cjs/ion-backdrop.cjs.entry.js +14 -18
  189. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +121 -199
  190. package/dist/cjs/ion-button_2.cjs.entry.js +66 -138
  191. package/dist/cjs/ion-card_5.cjs.entry.js +30 -82
  192. package/dist/cjs/ion-checkbox.cjs.entry.js +101 -152
  193. package/dist/cjs/ion-chip.cjs.entry.js +11 -17
  194. package/dist/cjs/ion-col_3.cjs.entry.js +10 -134
  195. package/dist/cjs/ion-datetime-button.cjs.entry.js +241 -253
  196. package/dist/cjs/ion-datetime_3.cjs.entry.js +3164 -0
  197. package/dist/cjs/ion-fab_3.cjs.entry.js +81 -139
  198. package/dist/cjs/ion-img.cjs.entry.js +12 -34
  199. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +72 -100
  200. package/dist/cjs/ion-input-otp.cjs.entry.js +370 -433
  201. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +19 -33
  202. package/dist/cjs/ion-input.cjs.entry.js +168 -314
  203. package/dist/cjs/ion-item-option_3.cjs.entry.js +51 -91
  204. package/dist/cjs/ion-item_8.cjs.entry.js +82 -181
  205. package/dist/cjs/ion-loading.cjs.entry.js +60 -146
  206. package/dist/cjs/ion-menu_3.cjs.entry.js +101 -163
  207. package/dist/cjs/ion-modal.cjs.entry.js +283 -482
  208. package/dist/cjs/ion-nav_2.cjs.entry.js +157 -100
  209. package/dist/cjs/ion-picker-column-option.cjs.entry.js +33 -37
  210. package/dist/cjs/ion-picker-column.cjs.entry.js +405 -417
  211. package/dist/cjs/ion-picker.cjs.entry.js +392 -401
  212. package/dist/cjs/ion-popover.cjs.entry.js +205 -319
  213. package/dist/cjs/ion-progress-bar.cjs.entry.js +25 -31
  214. package/dist/cjs/ion-radio_2.cjs.entry.js +133 -206
  215. package/dist/cjs/ion-range.cjs.entry.js +237 -302
  216. package/dist/cjs/ion-refresher_2.cjs.entry.js +94 -166
  217. package/dist/cjs/ion-reorder_2.cjs.entry.js +23 -53
  218. package/dist/cjs/ion-ripple-effect.cjs.entry.js +14 -14
  219. package/dist/cjs/ion-route_4.cjs.entry.js +71 -175
  220. package/dist/cjs/ion-searchbar.cjs.entry.js +200 -291
  221. package/dist/cjs/ion-segment-content.cjs.entry.js +2 -2
  222. package/dist/cjs/ion-segment-view.cjs.entry.js +17 -28
  223. package/dist/cjs/ion-segment_2.cjs.entry.js +126 -169
  224. package/dist/cjs/ion-select-modal.cjs.entry.js +48 -104
  225. package/dist/cjs/ion-select_3.cjs.entry.js +214 -759
  226. package/dist/cjs/ion-spinner.cjs.entry.js +10 -24
  227. package/dist/cjs/ion-split-pane.cjs.entry.js +16 -29
  228. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +41 -100
  229. package/dist/cjs/ion-tab_2.cjs.entry.js +27 -53
  230. package/dist/cjs/ion-text.cjs.entry.js +5 -11
  231. package/dist/cjs/ion-textarea.cjs.entry.js +144 -263
  232. package/dist/cjs/ion-toast.cjs.entry.js +117 -236
  233. package/dist/cjs/ion-toggle.cjs.entry.js +122 -175
  234. package/dist/cjs/{ionic-global-dMut1Czp.js → ionic-global-B-cA6LkY.js} +8 -13
  235. package/dist/cjs/ionic.cjs.js +4 -4
  236. package/dist/cjs/{ios.transition-CeaFa0y2.js → ios.transition-BOSWOaiK.js} +17 -13
  237. package/dist/cjs/{item-multiple-inputs-HQO5Iy9I.js → item-multiple-inputs-D-gyg57c.js} +1 -1
  238. package/dist/cjs/{keyboard-cHxZlTyz.js → keyboard-UuAS4D_9.js} +2 -2
  239. package/dist/cjs/{keyboard-controller-PtZoN2GS.js → keyboard-controller-GXBiBRKS.js} +6 -6
  240. package/dist/cjs/{keyboard-Cix5TVkD.js → keyboard-hHzlEQpk.js} +2 -2
  241. package/dist/cjs/loader.cjs.js +4 -4
  242. package/dist/cjs/{md.transition-D4Q5jny7.js → md.transition-B8-wBZqt.js} +8 -7
  243. package/dist/cjs/{notch-controller-fMfidI-7.js → notch-controller-18PzRGXd.js} +1 -1
  244. package/dist/cjs/{overlays-C2qrqpHm.js → overlays-DdtIYQUH.js} +33 -48
  245. package/dist/cjs/{status-tap-CgjQ-6jq.js → status-tap-N1kaBbuk.js} +3 -3
  246. package/dist/cjs/{swipe-back-CmfRYdWQ.js → swipe-back-C0GCB18x.js} +5 -5
  247. package/dist/cjs/{theme-Bw0rpaNN.js → theme-CeDs6Hcv.js} +1 -6
  248. package/dist/collection/collection-manifest.json +10 -6
  249. package/dist/collection/components/accordion/accordion.js +312 -315
  250. package/dist/collection/components/accordion-group/accordion-group.js +25 -48
  251. package/dist/collection/components/action-sheet/action-sheet.ios.css +2 -228
  252. package/dist/collection/components/action-sheet/action-sheet.js +64 -173
  253. package/dist/collection/components/action-sheet/action-sheet.md.css +2 -174
  254. package/dist/collection/components/action-sheet/test/basic/fixture.js +0 -3
  255. package/dist/collection/components/alert/alert.ios.css +10 -279
  256. package/dist/collection/components/alert/alert.js +97 -257
  257. package/dist/collection/components/alert/alert.md.css +20 -268
  258. package/dist/collection/components/app/app.js +0 -3
  259. package/dist/collection/components/back-button/back-button.js +19 -42
  260. package/dist/collection/components/backdrop/backdrop.js +14 -16
  261. package/dist/collection/components/badge/badge.js +0 -6
  262. package/dist/collection/components/breadcrumb/breadcrumb.js +30 -91
  263. package/dist/collection/components/breadcrumbs/breadcrumbs.js +88 -103
  264. package/dist/collection/components/button/button.js +61 -132
  265. package/dist/collection/components/buttons/buttons.js +15 -13
  266. package/dist/collection/components/card/card.js +21 -54
  267. package/dist/collection/components/card-header/card-header.js +8 -12
  268. package/dist/collection/components/card-subtitle/card-subtitle.js +0 -6
  269. package/dist/collection/components/card-title/card-title.js +0 -6
  270. package/dist/collection/components/checkbox/checkbox.js +97 -147
  271. package/dist/collection/components/chip/chip.js +10 -14
  272. package/dist/collection/components/col/col.js +3 -127
  273. package/dist/collection/components/content/content.js +64 -92
  274. package/dist/collection/components/datetime/datetime.ios.css +2 -42
  275. package/dist/collection/components/datetime/datetime.js +812 -1047
  276. package/dist/collection/components/datetime/datetime.md.css +1 -42
  277. package/dist/collection/components/datetime/utils/data.js +14 -13
  278. package/dist/collection/components/datetime/utils/format.js +11 -21
  279. package/dist/collection/components/datetime/utils/manipulation.js +8 -8
  280. package/dist/collection/components/datetime/utils/parse.js +10 -10
  281. package/dist/collection/components/datetime/utils/state.js +2 -8
  282. package/dist/collection/components/datetime/utils/validate.js +5 -4
  283. package/dist/collection/components/datetime-button/datetime-button.ios.css +0 -5
  284. package/dist/collection/components/datetime-button/datetime-button.js +237 -247
  285. package/dist/collection/components/datetime-button/datetime-button.md.css +0 -5
  286. package/dist/collection/components/fab/fab.js +13 -20
  287. package/dist/collection/components/fab-button/fab-button.js +55 -104
  288. package/dist/collection/components/fab-list/fab-list.js +11 -10
  289. package/dist/collection/components/footer/footer.js +44 -50
  290. package/dist/collection/components/grid/grid.js +6 -4
  291. package/dist/collection/components/header/header.js +25 -35
  292. package/dist/collection/components/img/img.js +10 -34
  293. package/dist/collection/components/infinite-scroll/infinite-scroll.js +66 -73
  294. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +3 -20
  295. package/dist/collection/components/input/input.ios.css +2 -1
  296. package/dist/collection/components/input/input.js +164 -309
  297. package/dist/collection/components/input/input.md.css +2 -1
  298. package/dist/collection/components/input-otp/input-otp.js +366 -428
  299. package/dist/collection/components/input-password-toggle/input-password-toggle.js +16 -29
  300. package/dist/collection/components/item/item.js +53 -99
  301. package/dist/collection/components/item-divider/item-divider.js +10 -15
  302. package/dist/collection/components/item-option/item-option.js +21 -49
  303. package/dist/collection/components/item-options/item-options.js +7 -10
  304. package/dist/collection/components/item-sliding/item-sliding.js +20 -26
  305. package/dist/collection/components/label/label.js +4 -24
  306. package/dist/collection/components/list/list.js +7 -10
  307. package/dist/collection/components/list-header/list-header.js +0 -10
  308. package/dist/collection/components/loading/loading.js +51 -135
  309. package/dist/collection/components/menu/menu.js +59 -101
  310. package/dist/collection/components/menu-button/menu-button.js +20 -29
  311. package/dist/collection/components/menu-toggle/menu-toggle.js +13 -20
  312. package/dist/collection/components/modal/animations/ios.enter.js +1 -1
  313. package/dist/collection/components/modal/animations/md.enter.js +1 -1
  314. package/dist/collection/components/modal/gestures/sheet.js +12 -29
  315. package/dist/collection/components/modal/gestures/swipe-to-close.js +5 -33
  316. package/dist/collection/components/modal/gestures/utils.js +17 -0
  317. package/dist/collection/components/modal/modal.js +224 -393
  318. package/dist/collection/components/modal/safe-area-utils.js +5 -4
  319. package/dist/collection/components/modal/test/fixtures.js +0 -3
  320. package/dist/collection/components/nav/nav.js +247 -69
  321. package/dist/collection/components/nav/view-controller.js +1 -7
  322. package/dist/collection/components/nav-link/nav-link.js +9 -20
  323. package/dist/collection/components/note/note.js +0 -6
  324. package/dist/collection/components/picker/picker.js +390 -398
  325. package/dist/collection/components/picker-column/picker-column.css +0 -3
  326. package/dist/collection/components/picker-column/picker-column.js +404 -414
  327. package/dist/collection/components/picker-column-option/picker-column-option.js +31 -33
  328. package/dist/collection/components/picker-column-option/picker-column-option.md.css +1 -6
  329. package/dist/collection/components/picker-legacy/animations/ios.enter.js +27 -0
  330. package/dist/collection/components/picker-legacy/animations/ios.leave.js +23 -0
  331. package/dist/collection/components/picker-legacy/picker-interface.js +1 -0
  332. package/dist/collection/components/picker-legacy/picker.ios.css +300 -0
  333. package/dist/collection/components/picker-legacy/picker.js +890 -0
  334. package/dist/collection/components/picker-legacy/picker.md.css +287 -0
  335. package/dist/collection/components/picker-legacy-column/picker-column.ios.css +231 -0
  336. package/dist/collection/components/picker-legacy-column/picker-column.js +422 -0
  337. package/dist/collection/components/picker-legacy-column/picker-column.md.css +222 -0
  338. package/dist/collection/components/picker-legacy-column/test/test.utils.js +43 -0
  339. package/dist/collection/components/popover/animations/ios.enter.js +2 -1
  340. package/dist/collection/components/popover/animations/md.enter.js +2 -1
  341. package/dist/collection/components/popover/popover.ios.css +0 -15
  342. package/dist/collection/components/popover/popover.js +185 -302
  343. package/dist/collection/components/popover/popover.md.css +0 -15
  344. package/dist/collection/components/popover/test/fixture.js +0 -1
  345. package/dist/collection/components/popover/utils.js +6 -4
  346. package/dist/collection/components/progress-bar/progress-bar.js +23 -27
  347. package/dist/collection/components/radio/radio.js +66 -102
  348. package/dist/collection/components/radio-group/radio-group.js +65 -100
  349. package/dist/collection/components/radio-group/test/fixtures.js +0 -2
  350. package/dist/collection/components/range/range.js +232 -296
  351. package/dist/collection/components/refresher/refresher.js +80 -112
  352. package/dist/collection/components/refresher-content/refresher-content.js +4 -41
  353. package/dist/collection/components/reorder/reorder.js +1 -2
  354. package/dist/collection/components/reorder-group/reorder-group.js +15 -44
  355. package/dist/collection/components/ripple-effect/ripple-effect.js +13 -12
  356. package/dist/collection/components/route/route.js +10 -39
  357. package/dist/collection/components/route-redirect/route-redirect.js +0 -31
  358. package/dist/collection/components/router/router.js +33 -37
  359. package/dist/collection/components/router/utils/dom.js +7 -25
  360. package/dist/collection/components/router/utils/matching.js +9 -7
  361. package/dist/collection/components/router/utils/parser.js +1 -1
  362. package/dist/collection/components/router/utils/path.js +1 -0
  363. package/dist/collection/components/router-link/router-link.js +12 -37
  364. package/dist/collection/components/router-outlet/router-outlet.js +21 -82
  365. package/dist/collection/components/row/row.js +1 -1
  366. package/dist/collection/components/searchbar/searchbar.js +199 -289
  367. package/dist/collection/components/segment/segment.js +85 -120
  368. package/dist/collection/components/segment-button/segment-button.js +37 -43
  369. package/dist/collection/components/segment-content/segment-content.js +1 -1
  370. package/dist/collection/components/segment-view/segment-view.js +16 -26
  371. package/dist/collection/components/select/select.ios.css +0 -33
  372. package/dist/collection/components/select/select.js +166 -597
  373. package/dist/collection/components/select/select.md.css +0 -33
  374. package/dist/collection/components/select-modal/select-modal.ios.css +0 -218
  375. package/dist/collection/components/select-modal/select-modal.js +38 -92
  376. package/dist/collection/components/select-modal/select-modal.md.css +0 -164
  377. package/dist/collection/components/select-modal/test/fixtures.js +1 -8
  378. package/dist/collection/components/select-option/select-option.js +9 -110
  379. package/dist/collection/components/select-popover/select-popover.ios.css +0 -218
  380. package/dist/collection/components/select-popover/select-popover.js +36 -103
  381. package/dist/collection/components/select-popover/select-popover.md.css +0 -164
  382. package/dist/collection/components/select-popover/test/fixtures.js +1 -8
  383. package/dist/collection/components/skeleton-text/skeleton-text.js +8 -12
  384. package/dist/collection/components/spinner/spinner.js +9 -21
  385. package/dist/collection/components/split-pane/split-pane.js +15 -27
  386. package/dist/collection/components/tab/tab.js +6 -17
  387. package/dist/collection/components/tab-bar/tab-bar.js +14 -32
  388. package/dist/collection/components/tab-button/tab-button.js +23 -62
  389. package/dist/collection/components/tabs/tabs.js +20 -33
  390. package/dist/collection/components/text/text.js +2 -8
  391. package/dist/collection/components/textarea/textarea.js +139 -257
  392. package/dist/collection/components/thumbnail/thumbnail.js +1 -1
  393. package/dist/collection/components/title/title.js +2 -18
  394. package/dist/collection/components/toast/toast.js +106 -223
  395. package/dist/collection/components/toggle/toggle.js +115 -167
  396. package/dist/collection/components/toolbar/toolbar.js +7 -15
  397. package/dist/collection/global/config.js +6 -4
  398. package/dist/collection/global/ionic-global.js +2 -8
  399. package/dist/collection/index.js +1 -1
  400. package/dist/collection/utils/animation/animation.js +3 -3
  401. package/dist/collection/utils/config.js +4 -5
  402. package/dist/collection/utils/content/index.js +30 -0
  403. package/dist/collection/utils/focus-controller/index.js +1 -1
  404. package/dist/collection/utils/focus-trap.js +3 -3
  405. package/dist/collection/utils/framework-delegate.js +6 -4
  406. package/dist/collection/utils/gesture/gesture-controller.js +8 -15
  407. package/dist/collection/utils/gesture/index.js +2 -10
  408. package/dist/collection/utils/gesture/listener.js +1 -1
  409. package/dist/collection/utils/hardware-back-button.js +3 -3
  410. package/dist/collection/utils/helpers.js +2 -2
  411. package/dist/collection/utils/input-shims/hacks/scroll-assist.js +5 -4
  412. package/dist/collection/utils/input-shims/hacks/scroll-data.js +2 -1
  413. package/dist/collection/utils/keyboard/keyboard-controller.js +5 -5
  414. package/dist/collection/utils/keyboard/keyboard.js +1 -1
  415. package/dist/collection/utils/menu-controller/index.js +2 -1
  416. package/dist/collection/utils/native/haptic.js +3 -2
  417. package/dist/collection/utils/native/keyboard.js +2 -2
  418. package/dist/collection/utils/native/status-bar.js +1 -1
  419. package/dist/collection/utils/overlays.js +23 -38
  420. package/dist/collection/utils/platform.js +5 -4
  421. package/dist/collection/utils/rtl/dir.js +1 -1
  422. package/dist/collection/utils/sanitization/index.js +20 -276
  423. package/dist/collection/utils/slot-mutation-controller.js +2 -1
  424. package/dist/collection/utils/test/playwright/apply-keyboard-focus.js +1 -1
  425. package/dist/collection/utils/test/playwright/drag-element.js +3 -2
  426. package/dist/collection/utils/test/playwright/generator.js +4 -3
  427. package/dist/collection/utils/test/playwright/page/event-spy.js +12 -11
  428. package/dist/collection/utils/test/playwright/page/utils/goto.js +5 -4
  429. package/dist/collection/utils/test/playwright/page/utils/set-content.js +1 -1
  430. package/dist/collection/utils/test/playwright/page/utils/set-ion-viewport.js +3 -2
  431. package/dist/collection/utils/test/press-keys.js +17 -10
  432. package/dist/collection/utils/theme.js +1 -6
  433. package/dist/collection/utils/transition/ios.transition.js +13 -9
  434. package/dist/collection/utils/transition/md.transition.js +4 -3
  435. package/dist/docs.json +1267 -551
  436. package/dist/esm/{animation-CVK55yMY.js → animation-DLJpuoEz.js} +4 -4
  437. package/dist/esm/{app-globals-Bk1_t4sH.js → app-globals-D0C5S4hU.js} +1 -1
  438. package/dist/esm/{button-active-CdCqmeT0.js → button-active-BSpTQmS9.js} +3 -3
  439. package/dist/esm/config-DQCONYYp.js +195 -0
  440. package/dist/esm/{dir-B-FxiyeI.js → dir-C53feagD.js} +1 -1
  441. package/dist/esm/{format-sMi4BZ_l.js → format-CAmvpAez.js} +31 -41
  442. package/dist/esm/{framework-delegate-BfAlKlW5.js → framework-delegate-FnPGymXL.js} +7 -5
  443. package/dist/esm/{gesture-controller-TXPDHL13.js → gesture-controller-BTEOs1at.js} +8 -15
  444. package/dist/esm/{haptic-Cq4UAeka.js → haptic-DzAMWJuk.js} +3 -2
  445. package/dist/esm/{hardware-back-button-DcHMMB9j.js → hardware-back-button-B93Gru0Y.js} +4 -4
  446. package/dist/esm/{helpers-BPcITY5s.js → helpers-HEqiOzXb.js} +3 -3
  447. package/dist/esm/{index-B9GsUd2c.js → index-BRHzoo00.js} +2 -2
  448. package/dist/esm/{index-DqVqy_Cy.js → index-B_dQk_WE.js} +5 -5
  449. package/dist/esm/{index-DppOcPFQ.js → index-CfgBF1SE.js} +4 -10
  450. package/dist/esm/{index-BvabGprD.js → index-DV3sJJW8.js} +2 -2
  451. package/dist/esm/{index-DcUt1pPn.js → index-Dw-wN0Ja.js} +33 -3
  452. package/dist/esm/{index-ks-BjikL.js → index-Q6UPU0Ay.js} +7 -6
  453. package/dist/esm/{index-D1CQtpUN.js → index-tcQvqkiX.js} +7 -5
  454. package/dist/esm/index.js +15 -16
  455. package/dist/esm/{input-shims-C1dCKVMO.js → input-shims-LXhI7LEx.js} +11 -9
  456. package/dist/esm/{input.utils-Dd5xwlP6.js → input.utils-Y6NgW8bw.js} +4 -3
  457. package/dist/esm/ion-accordion_2.entry.js +340 -368
  458. package/dist/esm/ion-action-sheet.entry.js +76 -187
  459. package/dist/esm/ion-alert.entry.js +110 -272
  460. package/dist/esm/ion-app_8.entry.js +190 -306
  461. package/dist/esm/ion-avatar_3.entry.js +4 -10
  462. package/dist/esm/ion-back-button.entry.js +23 -47
  463. package/dist/esm/ion-backdrop.entry.js +14 -18
  464. package/dist/esm/ion-breadcrumb_2.entry.js +121 -199
  465. package/dist/esm/ion-button_2.entry.js +66 -138
  466. package/dist/esm/ion-card_5.entry.js +30 -82
  467. package/dist/esm/ion-checkbox.entry.js +101 -152
  468. package/dist/esm/ion-chip.entry.js +11 -17
  469. package/dist/esm/ion-col_3.entry.js +10 -134
  470. package/dist/esm/ion-datetime-button.entry.js +241 -253
  471. package/dist/esm/ion-datetime_3.entry.js +3160 -0
  472. package/dist/esm/ion-fab_3.entry.js +81 -139
  473. package/dist/esm/ion-img.entry.js +12 -34
  474. package/dist/esm/ion-infinite-scroll_2.entry.js +71 -99
  475. package/dist/esm/ion-input-otp.entry.js +370 -433
  476. package/dist/esm/ion-input-password-toggle.entry.js +19 -33
  477. package/dist/esm/ion-input.entry.js +168 -314
  478. package/dist/esm/ion-item-option_3.entry.js +51 -91
  479. package/dist/esm/ion-item_8.entry.js +82 -181
  480. package/dist/esm/ion-loading.entry.js +59 -145
  481. package/dist/esm/ion-menu_3.entry.js +101 -163
  482. package/dist/esm/ion-modal.entry.js +271 -470
  483. package/dist/esm/ion-nav_2.entry.js +157 -100
  484. package/dist/esm/ion-picker-column-option.entry.js +33 -37
  485. package/dist/esm/ion-picker-column.entry.js +405 -417
  486. package/dist/esm/ion-picker.entry.js +392 -401
  487. package/dist/esm/ion-popover.entry.js +205 -319
  488. package/dist/esm/ion-progress-bar.entry.js +25 -31
  489. package/dist/esm/ion-radio_2.entry.js +133 -206
  490. package/dist/esm/ion-range.entry.js +237 -302
  491. package/dist/esm/ion-refresher_2.entry.js +92 -164
  492. package/dist/esm/ion-reorder_2.entry.js +23 -53
  493. package/dist/esm/ion-ripple-effect.entry.js +14 -14
  494. package/dist/esm/ion-route_4.entry.js +71 -175
  495. package/dist/esm/ion-searchbar.entry.js +200 -291
  496. package/dist/esm/ion-segment-content.entry.js +2 -2
  497. package/dist/esm/ion-segment-view.entry.js +17 -28
  498. package/dist/esm/ion-segment_2.entry.js +126 -169
  499. package/dist/esm/ion-select-modal.entry.js +48 -104
  500. package/dist/esm/ion-select_3.entry.js +215 -760
  501. package/dist/esm/ion-spinner.entry.js +10 -24
  502. package/dist/esm/ion-split-pane.entry.js +16 -29
  503. package/dist/esm/ion-tab-bar_2.entry.js +41 -100
  504. package/dist/esm/ion-tab_2.entry.js +27 -53
  505. package/dist/esm/ion-text.entry.js +5 -11
  506. package/dist/esm/ion-textarea.entry.js +144 -263
  507. package/dist/esm/ion-toast.entry.js +116 -235
  508. package/dist/esm/ion-toggle.entry.js +122 -175
  509. package/dist/esm/{ionic-global-5bZ91kOL.js → ionic-global-Cp_eT4sZ.js} +8 -13
  510. package/dist/esm/ionic.js +5 -5
  511. package/dist/esm/{ios.transition-OcwIGkv9.js → ios.transition-ClFrsIrS.js} +17 -13
  512. package/dist/esm/{item-multiple-inputs-ifd3ZrqY.js → item-multiple-inputs-DlNuqNJm.js} +1 -1
  513. package/dist/esm/{keyboard-DAF8GNJ9.js → keyboard-CUw4ekVy.js} +2 -2
  514. package/dist/esm/{keyboard-controller-DEwoa1ev.js → keyboard-controller-BaaVITYt.js} +6 -6
  515. package/dist/esm/{keyboard-Cj8mLJeq.js → keyboard-ywgs5efA.js} +2 -2
  516. package/dist/esm/loader.js +5 -5
  517. package/dist/esm/{md.transition-BetdF0bc.js → md.transition-D0msQmzI.js} +8 -7
  518. package/dist/esm/{notch-controller-DBSn-Uat.js → notch-controller-DKDjU_O7.js} +1 -1
  519. package/dist/esm/{overlays-DUzb9CQf.js → overlays-Dg0q2_tJ.js} +33 -48
  520. package/dist/esm/{status-tap-C-wNhea0.js → status-tap-vO-6s4Yp.js} +3 -3
  521. package/dist/esm/{swipe-back-D6YSgAn7.js → swipe-back-DQ1q5MgD.js} +5 -5
  522. package/dist/esm/{theme-byZM6qHV.js → theme-DiVJyqlX.js} +1 -6
  523. package/dist/html.html-data.json +80 -52
  524. package/dist/ionic/index.esm.js +1 -1
  525. package/dist/ionic/ionic.esm.js +1 -1
  526. package/dist/ionic/p-01f81ea5.entry.js +4 -0
  527. package/dist/ionic/p-06c232a4.entry.js +4 -0
  528. package/dist/ionic/p-0caa922c.entry.js +4 -0
  529. package/dist/ionic/p-0dc33652.entry.js +4 -0
  530. package/dist/ionic/p-0fa9c382.entry.js +4 -0
  531. package/dist/ionic/p-10e833ef.entry.js +4 -0
  532. package/dist/ionic/p-21eb76d5.entry.js +4 -0
  533. package/dist/ionic/p-27d30585.entry.js +4 -0
  534. package/dist/ionic/p-2a05aa64.entry.js +4 -0
  535. package/dist/ionic/p-2b204c59.entry.js +4 -0
  536. package/dist/ionic/p-2bb2cb18.entry.js +4 -0
  537. package/dist/ionic/p-2fa58e80.entry.js +4 -0
  538. package/dist/ionic/p-3353c229.entry.js +4 -0
  539. package/dist/ionic/p-34586ead.entry.js +4 -0
  540. package/dist/ionic/p-37e720da.entry.js +4 -0
  541. package/dist/ionic/p-390ca786.entry.js +4 -0
  542. package/dist/ionic/p-3ae5f277.entry.js +4 -0
  543. package/dist/ionic/p-4654ae1c.entry.js +4 -0
  544. package/dist/ionic/p-4745f534.entry.js +4 -0
  545. package/dist/ionic/p-4858af1f.entry.js +4 -0
  546. package/dist/ionic/p-4baa5b82.entry.js +4 -0
  547. package/dist/ionic/p-4e92a11f.entry.js +4 -0
  548. package/dist/ionic/p-5018dfc8.entry.js +4 -0
  549. package/dist/ionic/p-50e1194a.entry.js +4 -0
  550. package/dist/ionic/p-5334df12.entry.js +4 -0
  551. package/dist/ionic/p-5d1da0a2.entry.js +4 -0
  552. package/dist/ionic/p-5eb8e86d.entry.js +4 -0
  553. package/dist/ionic/p-65ebdf1b.entry.js +4 -0
  554. package/dist/ionic/p-746fa988.entry.js +4 -0
  555. package/dist/ionic/p-75dc25ba.entry.js +4 -0
  556. package/dist/ionic/p-7c319341.entry.js +4 -0
  557. package/dist/ionic/p-8158d422.entry.js +4 -0
  558. package/dist/ionic/p-829367ed.entry.js +4 -0
  559. package/dist/ionic/p-84d5ce05.entry.js +4 -0
  560. package/dist/ionic/p-874b4bd8.entry.js +4 -0
  561. package/dist/ionic/p-8eb8ee76.entry.js +4 -0
  562. package/dist/ionic/p-9eeaBrnk.js +4 -0
  563. package/dist/ionic/p-9f9db3a2.entry.js +4 -0
  564. package/dist/ionic/p-BGqMS-oh.js +4 -0
  565. package/dist/ionic/p-BTEOs1at.js +4 -0
  566. package/dist/ionic/p-BUFIpxKM.js +4 -0
  567. package/dist/ionic/p-C0eMdTCW.js +4 -0
  568. package/dist/ionic/p-C53feagD.js +4 -0
  569. package/dist/ionic/p-CFlfIb2g.js +4 -0
  570. package/dist/ionic/p-CKvCXMs9.js +4 -0
  571. package/dist/ionic/p-Cl0B-RWe.js +4 -0
  572. package/dist/ionic/p-CmcFnK-B.js +4 -0
  573. package/dist/ionic/p-CtWGkNnJ.js +4 -0
  574. package/dist/ionic/p-Cx3IXROA.js +4 -0
  575. package/dist/ionic/p-D-3ycHmd.js +4 -0
  576. package/dist/ionic/p-D13Eaw-8.js +4 -0
  577. package/dist/ionic/p-D4uTWt4-.js +4 -0
  578. package/{components/p-Cwsd9bue.js → dist/ionic/p-DC3RagnA.js} +1 -1
  579. package/dist/ionic/{p-BNKr91bi.js → p-DIuEbVLu.js} +1 -1
  580. package/dist/ionic/{p-BvabGprD.js → p-DV3sJJW8.js} +1 -1
  581. package/dist/ionic/p-DiVJyqlX.js +4 -0
  582. package/dist/ionic/{p-I9ETXg5W.js → p-DoJvtrbw.js} +1 -1
  583. package/dist/ionic/p-DqN5EA2O.js +4 -0
  584. package/dist/ionic/p-DzWaWHGc.js +4 -0
  585. package/{components/p-BXQ7upSC.js → dist/ionic/p-KjNvRoEp.js} +1 -1
  586. package/dist/ionic/p-Nqf6uvGh.js +4 -0
  587. package/dist/ionic/p-SNAkTDfm.js +4 -0
  588. package/dist/ionic/p-VAemlbDS.js +4 -0
  589. package/dist/ionic/p-a3bdcae6.entry.js +4 -0
  590. package/dist/ionic/{p-460da491.entry.js → p-aaeedb6b.entry.js} +1 -1
  591. package/dist/ionic/p-af55a72f.entry.js +4 -0
  592. package/dist/ionic/p-b2020591.entry.js +4 -0
  593. package/dist/ionic/p-b9fadbfe.entry.js +4 -0
  594. package/dist/ionic/p-biz8zWmJ.js +4 -0
  595. package/dist/ionic/p-c0fb8edd.entry.js +4 -0
  596. package/dist/ionic/p-c38b648e.entry.js +4 -0
  597. package/dist/ionic/p-c4d8641b.entry.js +4 -0
  598. package/dist/ionic/{p-b40c9715.entry.js → p-c6e49f3f.entry.js} +1 -1
  599. package/dist/ionic/p-ca2ab74d.entry.js +4 -0
  600. package/dist/ionic/p-d1aac015.entry.js +4 -0
  601. package/dist/ionic/p-d889ff6d.entry.js +4 -0
  602. package/dist/ionic/p-dfa8d673.entry.js +4 -0
  603. package/dist/ionic/p-ef4c3bee.entry.js +4 -0
  604. package/dist/ionic/p-f386f6ae.entry.js +4 -0
  605. package/dist/ionic/p-mjKAFv89.js +4 -0
  606. package/dist/ionic/p-tcQvqkiX.js +5 -0
  607. package/dist/ionic/p-uWtqTrG8.js +4 -0
  608. package/dist/ionic/p-viFHDgRs.js +4 -0
  609. package/dist/ionic/p-xWb6fgfq.js +4 -0
  610. package/dist/types/components/img/img.d.ts +0 -2
  611. package/dist/types/components/input/input.d.ts +1 -1
  612. package/dist/types/components/modal/gestures/utils.d.ts +11 -0
  613. package/dist/types/components/modal/modal.d.ts +4 -11
  614. package/dist/types/components/nav/nav-interface.d.ts +1 -0
  615. package/dist/types/components/nav/nav.d.ts +22 -2
  616. package/dist/types/components/picker-legacy/animations/ios.enter.d.ts +5 -0
  617. package/dist/types/components/picker-legacy/animations/ios.leave.d.ts +5 -0
  618. package/dist/types/components/picker-legacy/picker-interface.d.ts +52 -0
  619. package/dist/types/components/picker-legacy/picker.d.ts +158 -0
  620. package/dist/types/components/picker-legacy-column/picker-column.d.ts +46 -0
  621. package/dist/types/components/picker-legacy-column/test/test.utils.d.ts +9 -0
  622. package/dist/types/components/route/route.d.ts +1 -1
  623. package/dist/types/components/router-outlet/router-outlet.d.ts +0 -7
  624. package/dist/types/components/searchbar/searchbar.d.ts +1 -1
  625. package/dist/types/components/select/select-interface.d.ts +0 -31
  626. package/dist/types/components/select/select.d.ts +0 -18
  627. package/dist/types/components/select-option/select-option.d.ts +1 -42
  628. package/dist/types/components.d.ts +311 -74
  629. package/dist/types/index.d.ts +1 -1
  630. package/dist/types/interface.d.ts +1 -0
  631. package/dist/types/utils/config.d.ts +8 -0
  632. package/dist/types/utils/content/index.d.ts +12 -0
  633. package/dist/types/utils/overlays.d.ts +9 -11
  634. package/dist/types/utils/sanitization/index.d.ts +2 -58
  635. package/dist/types/utils/test/playwright/playwright-page.d.ts +1 -1
  636. package/dist/types/utils/test/playwright/testExpect.d.ts +1 -1
  637. package/hydrate/index.js +7103 -10331
  638. package/hydrate/index.mjs +7103 -10331
  639. package/package.json +11 -54
  640. package/components/p-0tt0PTAe.js +0 -4
  641. package/components/p-3dKnMgX5.js +0 -4
  642. package/components/p-6e_5igwn.js +0 -4
  643. package/components/p-B-FxiyeI.js +0 -4
  644. package/components/p-B4COLbAV.js +0 -4
  645. package/components/p-B9zzUBwR.js +0 -4
  646. package/components/p-BFU7kgcj.js +0 -4
  647. package/components/p-BMPN55of.js +0 -4
  648. package/components/p-BPbRjpb2.js +0 -4
  649. package/components/p-BSQPZ79H.js +0 -4
  650. package/components/p-BhamHSw3.js +0 -4
  651. package/components/p-BrXE0XUu.js +0 -4
  652. package/components/p-Bv7Rqz3Z.js +0 -4
  653. package/components/p-Bw7MMRH7.js +0 -4
  654. package/components/p-C-X5vb8f.js +0 -4
  655. package/components/p-C117Majq.js +0 -4
  656. package/components/p-CCVPk59A.js +0 -4
  657. package/components/p-CEW4RXZO.js +0 -4
  658. package/components/p-CKMc290p.js +0 -4
  659. package/components/p-CO5nI-BZ.js +0 -4
  660. package/components/p-COQ_7Wwc.js +0 -4
  661. package/components/p-CQbh6Be_.js +0 -4
  662. package/components/p-CQtcj8t7.js +0 -4
  663. package/components/p-Cap9bvqr.js +0 -4
  664. package/components/p-CdP7ze2J.js +0 -4
  665. package/components/p-CfyJ_Ogc.js +0 -4
  666. package/components/p-ChWC4-vA.js +0 -4
  667. package/components/p-CmKf4pgI.js +0 -4
  668. package/components/p-CqYSqB9_.js +0 -4
  669. package/components/p-D0xd6h3Q.js +0 -4
  670. package/components/p-D28LaDuR.js +0 -4
  671. package/components/p-D7-vHX0A.js +0 -4
  672. package/components/p-D9KqizZs.js +0 -4
  673. package/components/p-DIZE3CVV.js +0 -4
  674. package/components/p-DL8rd5jo.js +0 -4
  675. package/components/p-DRcApg6F.js +0 -4
  676. package/components/p-DTTnwMiS.js +0 -4
  677. package/components/p-DWCzVL3Y.js +0 -4
  678. package/components/p-DYmrV1HT.js +0 -4
  679. package/components/p-DnINLmwC.js +0 -4
  680. package/components/p-DsNz6_gM.js +0 -4
  681. package/components/p-DtiuiOTk.js +0 -4
  682. package/components/p-DunYzubP.js +0 -4
  683. package/components/p-DwcSJ9u1.js +0 -4
  684. package/components/p-QCPSB1bo.js +0 -4
  685. package/components/p-RvtofbHn.js +0 -4
  686. package/components/p-TXPDHL13.js +0 -4
  687. package/components/p-WOFp6fXj.js +0 -4
  688. package/components/p-byZM6qHV.js +0 -4
  689. package/components/p-miSGCTAU.js +0 -4
  690. package/components/p-mpdX3emm.js +0 -4
  691. package/components/p-nvqVLrWC.js +0 -4
  692. package/components/p-qiWM96Sz.js +0 -4
  693. package/components/p-vlF0Bcfd.js +0 -4
  694. package/dist/cjs/config-CjUbvdPW.js +0 -36
  695. package/dist/cjs/index-DhSx3VvD.js +0 -429
  696. package/dist/cjs/ion-datetime.cjs.entry.js +0 -2767
  697. package/dist/cjs/overlay-control-label-D2sdL2O8.js +0 -50
  698. package/dist/cjs/select-option-render-Dh16lTnA.js +0 -123
  699. package/dist/collection/utils/overlay-control-label.js +0 -45
  700. package/dist/collection/utils/select-option-render.js +0 -118
  701. package/dist/esm/config-DWCzVL3Y.js +0 -32
  702. package/dist/esm/index-DDa8edAS.js +0 -424
  703. package/dist/esm/ion-datetime.entry.js +0 -2765
  704. package/dist/esm/overlay-control-label-BSQPZ79H.js +0 -47
  705. package/dist/esm/select-option-render-DsW8svRr.js +0 -121
  706. package/dist/ionic/p-01eaee58.entry.js +0 -4
  707. package/dist/ionic/p-0c567140.entry.js +0 -4
  708. package/dist/ionic/p-105bb794.entry.js +0 -4
  709. package/dist/ionic/p-10d55bb6.entry.js +0 -4
  710. package/dist/ionic/p-173a87d8.entry.js +0 -4
  711. package/dist/ionic/p-178da672.entry.js +0 -4
  712. package/dist/ionic/p-1ead2857.entry.js +0 -4
  713. package/dist/ionic/p-224e2464.entry.js +0 -4
  714. package/dist/ionic/p-2268e718.entry.js +0 -4
  715. package/dist/ionic/p-2b5283f3.entry.js +0 -4
  716. package/dist/ionic/p-2b6decac.entry.js +0 -4
  717. package/dist/ionic/p-2da5d9c6.entry.js +0 -4
  718. package/dist/ionic/p-31890acd.entry.js +0 -4
  719. package/dist/ionic/p-34ef7425.entry.js +0 -4
  720. package/dist/ionic/p-34f7c1d8.entry.js +0 -4
  721. package/dist/ionic/p-3b1e6fa4.entry.js +0 -4
  722. package/dist/ionic/p-42fefd2c.entry.js +0 -4
  723. package/dist/ionic/p-440cd489.entry.js +0 -4
  724. package/dist/ionic/p-53f680e8.entry.js +0 -4
  725. package/dist/ionic/p-57ba508f.entry.js +0 -4
  726. package/dist/ionic/p-599e5a75.entry.js +0 -4
  727. package/dist/ionic/p-5f670a9e.entry.js +0 -4
  728. package/dist/ionic/p-63502088.entry.js +0 -4
  729. package/dist/ionic/p-6e6bf45d.entry.js +0 -4
  730. package/dist/ionic/p-6f0b6a48.entry.js +0 -4
  731. package/dist/ionic/p-7438c462.entry.js +0 -4
  732. package/dist/ionic/p-747716e7.entry.js +0 -4
  733. package/dist/ionic/p-7759fcaf.entry.js +0 -4
  734. package/dist/ionic/p-7a8338e2.entry.js +0 -4
  735. package/dist/ionic/p-80f9f1dc.entry.js +0 -4
  736. package/dist/ionic/p-83ff4dcb.entry.js +0 -4
  737. package/dist/ionic/p-86f03895.entry.js +0 -4
  738. package/dist/ionic/p-87b8d70e.entry.js +0 -4
  739. package/dist/ionic/p-888236bf.entry.js +0 -4
  740. package/dist/ionic/p-8a92ca23.entry.js +0 -4
  741. package/dist/ionic/p-8c9af4ad.entry.js +0 -4
  742. package/dist/ionic/p-9669f546.entry.js +0 -4
  743. package/dist/ionic/p-9bcd8b74.entry.js +0 -4
  744. package/dist/ionic/p-B-FxiyeI.js +0 -4
  745. package/dist/ionic/p-B2trYd8K.js +0 -4
  746. package/dist/ionic/p-BMPN55of.js +0 -4
  747. package/dist/ionic/p-BSQPZ79H.js +0 -4
  748. package/dist/ionic/p-BSzG1VcX.js +0 -4
  749. package/dist/ionic/p-BVgBHS96.js +0 -4
  750. package/dist/ionic/p-BX2IOAqC.js +0 -4
  751. package/dist/ionic/p-BhamHSw3.js +0 -4
  752. package/dist/ionic/p-BufXJ_A8.js +0 -4
  753. package/dist/ionic/p-C73UOs4m.js +0 -4
  754. package/dist/ionic/p-CUSwMljM.js +0 -4
  755. package/dist/ionic/p-CeOSrSdu.js +0 -4
  756. package/dist/ionic/p-CfkB7_FV.js +0 -4
  757. package/dist/ionic/p-CmKf4pgI.js +0 -4
  758. package/dist/ionic/p-CnM-CMw7.js +0 -4
  759. package/dist/ionic/p-D1CQtpUN.js +0 -5
  760. package/dist/ionic/p-D5t_-oMk.js +0 -4
  761. package/dist/ionic/p-DVYb1IVZ.js +0 -4
  762. package/dist/ionic/p-DWCzVL3Y.js +0 -4
  763. package/dist/ionic/p-DfJ-SVJf.js +0 -4
  764. package/dist/ionic/p-DmXrLsoD.js +0 -4
  765. package/dist/ionic/p-DtLHAMFW.js +0 -4
  766. package/dist/ionic/p-Dtlob2JL.js +0 -4
  767. package/dist/ionic/p-F7ipfyOA.js +0 -4
  768. package/dist/ionic/p-IaXd5VMv.js +0 -4
  769. package/dist/ionic/p-T71k3C35.js +0 -4
  770. package/dist/ionic/p-TXPDHL13.js +0 -4
  771. package/dist/ionic/p-acbb97c3.entry.js +0 -4
  772. package/dist/ionic/p-aeb85531.entry.js +0 -4
  773. package/dist/ionic/p-b157f80d.entry.js +0 -4
  774. package/dist/ionic/p-b158de5d.entry.js +0 -4
  775. package/dist/ionic/p-b852101e.entry.js +0 -4
  776. package/dist/ionic/p-byZM6qHV.js +0 -4
  777. package/dist/ionic/p-c0d81bee.entry.js +0 -4
  778. package/dist/ionic/p-c8a327fb.entry.js +0 -4
  779. package/dist/ionic/p-d42ae99f.entry.js +0 -4
  780. package/dist/ionic/p-d47ff529.entry.js +0 -4
  781. package/dist/ionic/p-eHi73fGE.js +0 -4
  782. package/dist/ionic/p-eeabce92.entry.js +0 -4
  783. package/dist/ionic/p-efc66d77.entry.js +0 -4
  784. package/dist/ionic/p-f6d203dc.entry.js +0 -4
  785. package/dist/ionic/p-u2a770LZ.js +0 -4
  786. package/dist/types/utils/overlay-control-label.d.ts +0 -32
  787. package/dist/types/utils/select-option-render.d.ts +0 -53
  788. /package/components/{p-LpMHEu3v.js → p-CO7fmmxt.js} +0 -0
@@ -2,17 +2,14 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { Build, Host, h, forceUpdate } from "@stencil/core";
5
- import { ENABLE_HTML_CONTENT_DEFAULT } from "../../utils/config";
6
5
  import { compareOptions, createNotchController, isOptionSelected, checkInvalidState } from "../../utils/forms/index";
7
6
  import { focusVisibleElement, renderHiddenInput, inheritAttributes } from "../../utils/helpers";
8
7
  import { printIonWarning } from "../../utils/logging/index";
9
8
  import { actionSheetController, alertController, popoverController, modalController } from "../../utils/overlays";
10
9
  import { isRTL } from "../../utils/rtl/index";
11
- import { reflectPropertiesToAttributes, sanitizeDOMTree } from "../../utils/sanitization/index";
12
10
  import { createColorClasses, hostContext } from "../../utils/theme";
13
11
  import { watchForOptions } from "../../utils/watch-options";
14
12
  import { caretDownSharp, chevronExpand } from "ionicons/icons";
15
- import { config } from "../../global/config";
16
13
  import { getIonMode } from "../../global/ionic-global";
17
14
  // TODO(FW-2832): types
18
15
  /**
@@ -35,225 +32,139 @@ import { getIonMode } from "../../global/ionic-global";
35
32
  * @part inner - The inner element of the wrapper that manages the slots, selected values or placeholder, and toggle icons.
36
33
  */
37
34
  export class Select {
38
- inputId = `ion-sel-${selectIds++}`;
39
- helperTextId = `${this.inputId}-helper-text`;
40
- errorTextId = `${this.inputId}-error-text`;
41
- overlay;
42
- focusEl;
43
- mutationO;
44
- inheritedAttributes = {};
45
- nativeWrapperEl;
46
- notchSpacerEl;
47
- validationObserver;
48
- notchController;
49
- customHTMLEnabled = config.get('innerHTMLTemplatesEnabled', ENABLE_HTML_CONTENT_DEFAULT);
50
- el;
51
- isExpanded = false;
52
- /**
53
- * The `hasFocus` state ensures the focus class is
54
- * added regardless of how the element is focused.
55
- * The `ion-focused` class only applies when focused
56
- * via tabbing, not by clicking.
57
- * The `has-focus` logic was added to ensure the class
58
- * is applied in both cases.
59
- */
60
- hasFocus = false;
61
- /**
62
- * Track validation state for proper aria-live announcements.
63
- */
64
- isInvalid = false;
65
- hintTextId;
66
- /**
67
- * The text to display on the cancel button.
68
- */
69
- cancelText = 'Cancel';
70
- /**
71
- * The color to use from your application's color palette.
72
- * Default options are: `"primary"`, `"secondary"`, `"tertiary"`, `"success"`, `"warning"`, `"danger"`, `"light"`, `"medium"`, and `"dark"`.
73
- * For more information on colors, see [theming](/docs/theming/basics).
74
- *
75
- * This property is only available when using the modern select syntax.
76
- */
77
- color;
78
- /**
79
- * This property allows developers to specify a custom function or property
80
- * name for comparing objects when determining the selected option in the
81
- * ion-select. When not specified, the default behavior will use strict
82
- * equality (===) for comparison.
83
- */
84
- compareWith;
85
- /**
86
- * If `true`, the user cannot interact with the select.
87
- */
88
- disabled = false;
89
- /**
90
- * The fill for the item. If `"solid"` the item will have a background. If
91
- * `"outline"` the item will be transparent with a border. Only available in `md` mode.
92
- */
93
- fill;
94
- /**
95
- * Text that is placed under the select and displayed when an error is detected.
96
- */
97
- errorText;
98
- /**
99
- * Text that is placed under the select and displayed when no error is detected.
100
- */
101
- helperText;
102
- /**
103
- * The interface the select should use: `action-sheet`, `popover`, `alert`, or `modal`.
104
- */
105
- interface = 'alert';
106
- /**
107
- * Any additional options that the `alert`, `action-sheet` or `popover` interface
108
- * can take. See the [ion-alert docs](./alert), the
109
- * [ion-action-sheet docs](./action-sheet), the
110
- * [ion-popover docs](./popover), and the [ion-modal docs](./modal) for the
111
- * create options for each interface.
112
- *
113
- * Note: `interfaceOptions` will not override `inputs` or `buttons` with the `alert` interface.
114
- */
115
- interfaceOptions = {};
116
- /**
117
- * How to pack the label and select within a line.
118
- * `justify` does not apply when the label and select
119
- * are on different lines when `labelPlacement` is set to
120
- * `"floating"` or `"stacked"`.
121
- * `"start"`: The label and select will appear on the left in LTR and
122
- * on the right in RTL.
123
- * `"end"`: The label and select will appear on the right in LTR and
124
- * on the left in RTL.
125
- * `"space-between"`: The label and select will appear on opposite
126
- * ends of the line with space between the two elements.
127
- */
128
- justify;
129
- /**
130
- * The visible label associated with the select.
131
- *
132
- * Use this if you need to render a plaintext label.
133
- *
134
- * The `label` property will take priority over the `label` slot if both are used.
135
- */
136
- label;
137
- /**
138
- * Where to place the label relative to the select.
139
- * `"start"`: The label will appear to the left of the select in LTR and to the right in RTL.
140
- * `"end"`: The label will appear to the right of the select in LTR and to the left in RTL.
141
- * `"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.
142
- * `"stacked"`: The label will appear smaller and above the select regardless even when the select is blurred or has no value.
143
- * `"fixed"`: The label has the same behavior as `"start"` except it also has a fixed width. Long text will be truncated with ellipses ("...").
144
- * When using `"floating"` or `"stacked"` we recommend initializing the select with either a `value` or a `placeholder`.
145
- */
146
- labelPlacement = 'start';
147
- /**
148
- * If `true`, the select can accept multiple values.
149
- */
150
- multiple = false;
151
- /**
152
- * The name of the control, which is submitted with the form data.
153
- */
154
- name = this.inputId;
155
- /**
156
- * The text to display on the ok button.
157
- */
158
- okText = 'OK';
159
- /**
160
- * The text to display when the select is empty.
161
- */
162
- placeholder;
163
- /**
164
- * The text to display instead of the selected option's value.
165
- */
166
- selectedText;
167
- /**
168
- * The toggle icon to use. Defaults to `chevronExpand` for `ios` mode,
169
- * or `caretDownSharp` for `md` mode.
170
- */
171
- toggleIcon;
172
- /**
173
- * The toggle icon to show when the select is open. If defined, the icon
174
- * rotation behavior in `md` mode will be disabled. If undefined, `toggleIcon`
175
- * will be used for when the select is both open and closed.
176
- */
177
- expandedIcon;
178
- /**
179
- * The shape of the select. If "round" it will have an increased border radius.
180
- */
181
- shape;
182
- /**
183
- * The value of the select.
184
- */
185
- value;
186
- /**
187
- * If true, screen readers will announce it as a required field. This property
188
- * works only for accessibility purposes, it will not prevent the form from
189
- * submitting if the value is invalid.
190
- */
191
- required = false;
192
- /**
193
- * Emitted when the value has changed.
194
- *
195
- * This event will not emit when programmatically setting the `value` property.
196
- */
197
- ionChange;
198
- /**
199
- * Emitted when the selection is cancelled.
200
- */
201
- ionCancel;
202
- /**
203
- * Emitted when the overlay is dismissed.
204
- */
205
- ionDismiss;
206
- /**
207
- * Emitted when the select has focus.
208
- */
209
- ionFocus;
210
- /**
211
- * Emitted when the select loses focus.
212
- */
213
- ionBlur;
214
- /**
215
- * Emitted when the styles change.
216
- * @internal
217
- */
218
- ionStyle;
35
+ constructor() {
36
+ this.inputId = `ion-sel-${selectIds++}`;
37
+ this.helperTextId = `${this.inputId}-helper-text`;
38
+ this.errorTextId = `${this.inputId}-error-text`;
39
+ this.inheritedAttributes = {};
40
+ this.isExpanded = false;
41
+ /**
42
+ * The `hasFocus` state ensures the focus class is
43
+ * added regardless of how the element is focused.
44
+ * The `ion-focused` class only applies when focused
45
+ * via tabbing, not by clicking.
46
+ * The `has-focus` logic was added to ensure the class
47
+ * is applied in both cases.
48
+ */
49
+ this.hasFocus = false;
50
+ /**
51
+ * Track validation state for proper aria-live announcements.
52
+ */
53
+ this.isInvalid = false;
54
+ /**
55
+ * The text to display on the cancel button.
56
+ */
57
+ this.cancelText = 'Cancel';
58
+ /**
59
+ * If `true`, the user cannot interact with the select.
60
+ */
61
+ this.disabled = false;
62
+ /**
63
+ * The interface the select should use: `action-sheet`, `popover`, `alert`, or `modal`.
64
+ */
65
+ this.interface = 'alert';
66
+ /**
67
+ * Any additional options that the `alert`, `action-sheet` or `popover` interface
68
+ * can take. See the [ion-alert docs](./alert), the
69
+ * [ion-action-sheet docs](./action-sheet), the
70
+ * [ion-popover docs](./popover), and the [ion-modal docs](./modal) for the
71
+ * create options for each interface.
72
+ *
73
+ * Note: `interfaceOptions` will not override `inputs` or `buttons` with the `alert` interface.
74
+ */
75
+ this.interfaceOptions = {};
76
+ /**
77
+ * Where to place the label relative to the select.
78
+ * `"start"`: The label will appear to the left of the select in LTR and to the right in RTL.
79
+ * `"end"`: The label will appear to the right of the select in LTR and to the left in RTL.
80
+ * `"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.
81
+ * `"stacked"`: The label will appear smaller and above the select regardless even when the select is blurred or has no value.
82
+ * `"fixed"`: The label has the same behavior as `"start"` except it also has a fixed width. Long text will be truncated with ellipses ("...").
83
+ * When using `"floating"` or `"stacked"` we recommend initializing the select with either a `value` or a `placeholder`.
84
+ */
85
+ this.labelPlacement = 'start';
86
+ /**
87
+ * If `true`, the select can accept multiple values.
88
+ */
89
+ this.multiple = false;
90
+ /**
91
+ * The name of the control, which is submitted with the form data.
92
+ */
93
+ this.name = this.inputId;
94
+ /**
95
+ * The text to display on the ok button.
96
+ */
97
+ this.okText = 'OK';
98
+ /**
99
+ * If true, screen readers will announce it as a required field. This property
100
+ * works only for accessibility purposes, it will not prevent the form from
101
+ * submitting if the value is invalid.
102
+ */
103
+ this.required = false;
104
+ this.onClick = (ev) => {
105
+ const target = ev.target;
106
+ const closestSlot = target.closest('[slot="start"], [slot="end"]');
107
+ if (target === this.el || closestSlot === null) {
108
+ this.setFocus();
109
+ this.open(ev);
110
+ }
111
+ else {
112
+ /**
113
+ * Prevent clicks to the start/end slots from opening the select.
114
+ * We ensure the target isn't this element in case the select is slotted
115
+ * in, for example, an item. This would prevent the select from ever
116
+ * being opened since the element itself has slot="start"/"end".
117
+ *
118
+ * Clicking a slotted element also causes a click
119
+ * on the <label> element (since it wraps the slots).
120
+ * Clicking <label> dispatches another click event on
121
+ * the native form control that then bubbles up to this
122
+ * listener. This additional event targets the host
123
+ * element, so the select overlay is opened.
124
+ *
125
+ * When the slotted elements are clicked (and therefore
126
+ * the ancestor <label> element) we want to prevent the label
127
+ * from dispatching another click event.
128
+ *
129
+ * Do not call stopPropagation() because this will cause
130
+ * click handlers on the slotted elements to never fire in React.
131
+ * When developers do onClick in React a native "click" listener
132
+ * is added on the root element, not the slotted element. When that
133
+ * native click listener fires, React then dispatches the synthetic
134
+ * click event on the slotted element. However, if stopPropagation
135
+ * is called then the native click event will never bubble up
136
+ * to the root element.
137
+ */
138
+ ev.preventDefault();
139
+ }
140
+ };
141
+ this.onFocus = () => {
142
+ this.hasFocus = true;
143
+ this.ionFocus.emit();
144
+ };
145
+ this.onBlur = () => {
146
+ this.hasFocus = false;
147
+ this.ionBlur.emit();
148
+ };
149
+ /**
150
+ * Stops propagation when the label is clicked,
151
+ * otherwise, two clicks will be triggered.
152
+ */
153
+ this.onLabelClick = (ev) => {
154
+ // Only stop propagation if the click was directly on the label
155
+ // and not on the input or other child elements
156
+ if (ev.target === ev.currentTarget) {
157
+ ev.stopPropagation();
158
+ }
159
+ };
160
+ }
219
161
  styleChanged() {
220
162
  this.emitStyle();
221
163
  }
222
164
  setValue(value) {
223
- if (this.isValueEqual(this.value, value)) {
224
- return;
225
- }
226
165
  this.value = value;
227
166
  this.ionChange.emit({ value });
228
167
  }
229
- isValueEqual(currentValue, newValue) {
230
- if (this.multiple) {
231
- const currentArr = Array.isArray(currentValue) ? currentValue : [];
232
- const newArr = Array.isArray(newValue) ? newValue : [];
233
- if (currentArr.length !== newArr.length) {
234
- return false;
235
- }
236
- // Multiset compare: each new value must match a distinct current value.
237
- // A plain `every(isOptionSelected)` would accept ['a','a'] as equal to
238
- // ['a','b'] when both 'a' and 'b' map to options whose values overlap.
239
- const remaining = currentArr.slice();
240
- return newArr.every((val) => {
241
- const idx = remaining.findIndex((c) => compareOptions(c, val, this.compareWith));
242
- if (idx === -1) {
243
- return false;
244
- }
245
- remaining.splice(idx, 1);
246
- return true;
247
- });
248
- }
249
- if (currentValue == null && newValue == null) {
250
- return true;
251
- }
252
- if (currentValue == null || newValue == null) {
253
- return false;
254
- }
255
- return compareOptions(currentValue, newValue, this.compareWith);
256
- }
257
168
  async connectedCallback() {
258
169
  const { el } = this;
259
170
  this.notchController = createNotchController(el, () => this.notchSpacerEl, () => this.labelSlot);
@@ -488,11 +399,10 @@ export class Select {
488
399
  .join(' ');
489
400
  const optClass = `${OPTION_CLASS} ${copyClasses}`;
490
401
  const isSelected = isOptionSelected(selectValue, value, this.compareWith);
491
- const { content, startContent, endContent } = extractOptionContent(option, this.customHTMLEnabled);
492
402
  return {
493
- text: content ?? '',
403
+ role: isSelected ? 'selected' : '',
404
+ text: option.textContent,
494
405
  cssClass: optClass,
495
- disabled: option.disabled,
496
406
  handler: () => {
497
407
  this.setValue(value);
498
408
  },
@@ -500,9 +410,6 @@ export class Select {
500
410
  'aria-checked': isSelected ? 'true' : 'false',
501
411
  role: 'radio',
502
412
  },
503
- startContent,
504
- endContent,
505
- description: option.description,
506
413
  };
507
414
  });
508
415
  // Add "cancel" button
@@ -523,19 +430,13 @@ export class Select {
523
430
  .filter((cls) => cls !== 'hydrated')
524
431
  .join(' ');
525
432
  const optClass = `${OPTION_CLASS} ${copyClasses}`;
526
- const { content, startContent, endContent } = extractOptionContent(option, this.customHTMLEnabled);
527
433
  return {
528
434
  type: inputType,
529
435
  cssClass: optClass,
530
- label: content ?? '',
436
+ label: option.textContent || '',
531
437
  value,
532
438
  checked: isOptionSelected(selectValue, value, this.compareWith),
533
439
  disabled: option.disabled,
534
- startContent,
535
- endContent,
536
- description: option.description,
537
- labelPlacement: option.labelPlacement,
538
- justify: option.justify,
539
440
  };
540
441
  });
541
442
  return alertInputs;
@@ -548,9 +449,8 @@ export class Select {
548
449
  .filter((cls) => cls !== 'hydrated')
549
450
  .join(' ');
550
451
  const optClass = `${OPTION_CLASS} ${copyClasses}`;
551
- const { content, startContent, endContent } = extractOptionContent(option, this.customHTMLEnabled);
552
452
  return {
553
- text: content ?? '',
453
+ text: option.textContent || '',
554
454
  cssClass: optClass,
555
455
  value,
556
456
  checked: isOptionSelected(selectValue, value, this.compareWith),
@@ -561,11 +461,6 @@ export class Select {
561
461
  this.close();
562
462
  }
563
463
  },
564
- startContent,
565
- endContent,
566
- description: option.description,
567
- labelPlacement: option.labelPlacement,
568
- justify: option.justify,
569
464
  };
570
465
  });
571
466
  return popoverOptions;
@@ -594,43 +489,28 @@ export class Select {
594
489
  */
595
490
  }
596
491
  else {
597
- event = {
598
- ...ev,
599
- detail: {
492
+ event = Object.assign(Object.assign({}, ev), { detail: {
600
493
  ionShadowTarget: this.nativeWrapperEl,
601
- },
602
- };
494
+ } });
603
495
  }
604
- const options = this.createOverlaySelectOptions(this.childOpts, value);
605
- const hasRichContent = options.some((opt) => Boolean(opt.startContent) || Boolean(opt.endContent) || Boolean(opt.description));
606
- const popoverOpts = {
607
- mode,
608
- event,
609
- alignment: 'center',
610
- size,
611
- showBackdrop,
612
- ...interfaceOptions,
613
- component: 'ion-select-popover',
614
- cssClass: [
615
- 'select-popover',
616
- hasRichContent ? 'select-popover-rich-content' : undefined,
617
- interfaceOptions.cssClass,
618
- ],
619
- componentProps: {
496
+ const popoverOpts = Object.assign(Object.assign({ mode,
497
+ event, alignment: 'center', size,
498
+ showBackdrop }, interfaceOptions), { component: 'ion-select-popover', cssClass: ['select-popover', interfaceOptions.cssClass], componentProps: {
620
499
  header: interfaceOptions.header,
621
500
  subHeader: interfaceOptions.subHeader,
622
501
  message: interfaceOptions.message,
623
502
  multiple,
624
503
  value,
625
- options,
626
- },
627
- };
504
+ options: this.createOverlaySelectOptions(this.childOpts, value),
505
+ } });
628
506
  /**
629
507
  * Workaround for Stencil to autodefine
630
508
  * ion-select-popover and ion-popover when
631
509
  * using Custom Elements build.
632
510
  */
511
+ // eslint-disable-next-line
633
512
  if (false) {
513
+ // eslint-disable-next-line
634
514
  // @ts-ignore
635
515
  document.createElement('ion-select-popover');
636
516
  document.createElement('ion-popover');
@@ -640,18 +520,15 @@ export class Select {
640
520
  async openActionSheet() {
641
521
  const mode = getIonMode(this);
642
522
  const interfaceOptions = this.interfaceOptions;
643
- const actionSheetOpts = {
644
- mode,
645
- ...interfaceOptions,
646
- buttons: this.createActionSheetButtons(this.childOpts, this.value),
647
- cssClass: ['select-action-sheet', interfaceOptions.cssClass],
648
- };
523
+ const actionSheetOpts = Object.assign(Object.assign({ mode }, interfaceOptions), { buttons: this.createActionSheetButtons(this.childOpts, this.value), cssClass: ['select-action-sheet', interfaceOptions.cssClass] });
649
524
  /**
650
525
  * Workaround for Stencil to autodefine
651
526
  * ion-action-sheet when
652
527
  * using Custom Elements build.
653
528
  */
529
+ // eslint-disable-next-line
654
530
  if (false) {
531
+ // eslint-disable-next-line
655
532
  // @ts-ignore
656
533
  document.createElement('ion-action-sheet');
657
534
  }
@@ -661,12 +538,7 @@ export class Select {
661
538
  const interfaceOptions = this.interfaceOptions;
662
539
  const inputType = this.multiple ? 'checkbox' : 'radio';
663
540
  const mode = getIonMode(this);
664
- const alertOpts = {
665
- mode,
666
- ...interfaceOptions,
667
- header: interfaceOptions.header ? interfaceOptions.header : this.labelText,
668
- inputs: this.createAlertInputs(this.childOpts, inputType, this.value),
669
- buttons: [
541
+ const alertOpts = Object.assign(Object.assign({ mode }, interfaceOptions), { header: interfaceOptions.header ? interfaceOptions.header : this.labelText, inputs: this.createAlertInputs(this.childOpts, inputType, this.value), buttons: [
670
542
  {
671
543
  text: this.cancelText,
672
544
  role: 'cancel',
@@ -680,19 +552,19 @@ export class Select {
680
552
  this.setValue(selectedValues);
681
553
  },
682
554
  },
683
- ],
684
- cssClass: [
555
+ ], cssClass: [
685
556
  'select-alert',
686
557
  interfaceOptions.cssClass,
687
558
  this.multiple ? 'multiple-select-alert' : 'single-select-alert',
688
- ],
689
- };
559
+ ] });
690
560
  /**
691
561
  * Workaround for Stencil to autodefine
692
562
  * ion-alert when
693
563
  * using Custom Elements build.
694
564
  */
565
+ // eslint-disable-next-line
695
566
  if (false) {
567
+ // eslint-disable-next-line
696
568
  // @ts-ignore
697
569
  document.createElement('ion-alert');
698
570
  }
@@ -701,25 +573,21 @@ export class Select {
701
573
  openModal() {
702
574
  const { multiple, value, interfaceOptions } = this;
703
575
  const mode = getIonMode(this);
704
- const modalOpts = {
705
- ...interfaceOptions,
706
- mode,
707
- cssClass: ['select-modal', interfaceOptions.cssClass],
708
- component: 'ion-select-modal',
709
- componentProps: {
576
+ const modalOpts = Object.assign(Object.assign({}, interfaceOptions), { mode, cssClass: ['select-modal', interfaceOptions.cssClass], component: 'ion-select-modal', componentProps: {
710
577
  header: interfaceOptions.header,
711
578
  cancelText: this.cancelText,
712
579
  multiple,
713
580
  value,
714
581
  options: this.createOverlaySelectOptions(this.childOpts, value),
715
- },
716
- };
582
+ } });
717
583
  /**
718
584
  * Workaround for Stencil to autodefine
719
585
  * ion-select-modal and ion-modal when
720
586
  * using Custom Elements build.
721
587
  */
588
+ // eslint-disable-next-line
722
589
  if (false) {
590
+ // eslint-disable-next-line
723
591
  // @ts-ignore
724
592
  document.createElement('ion-select-modal');
725
593
  document.createElement('ion-modal');
@@ -760,18 +628,12 @@ export class Select {
760
628
  }
761
629
  return;
762
630
  }
763
- /**
764
- * Returns the text to display in the select based on the selected value.
765
- *
766
- * @param useHTML If `true`, the returned text will include any custom HTML content from the selected option. If `false`, the returned text will be plain text without any HTML. Defaults to `false`.
767
- * @returns The text to display in the select, either with or without HTML based on the `useHTML` parameter.
768
- */
769
- getText(useHTML = false) {
631
+ getText() {
770
632
  const selectedText = this.selectedText;
771
633
  if (selectedText != null && selectedText !== '') {
772
634
  return selectedText;
773
635
  }
774
- return generateText(this.childOpts, this.value, this.compareWith, useHTML);
636
+ return generateText(this.childOpts, this.value, this.compareWith);
775
637
  }
776
638
  setFocus() {
777
639
  if (this.focusEl) {
@@ -785,51 +647,6 @@ export class Select {
785
647
  };
786
648
  this.ionStyle.emit(style);
787
649
  }
788
- onClick = (ev) => {
789
- const target = ev.target;
790
- const closestSlot = target.closest('[slot="start"], [slot="end"]');
791
- if (target === this.el || closestSlot === null) {
792
- this.setFocus();
793
- this.open(ev);
794
- }
795
- else {
796
- /**
797
- * Prevent clicks to the start/end slots from opening the select.
798
- * We ensure the target isn't this element in case the select is slotted
799
- * in, for example, an item. This would prevent the select from ever
800
- * being opened since the element itself has slot="start"/"end".
801
- *
802
- * Clicking a slotted element also causes a click
803
- * on the <label> element (since it wraps the slots).
804
- * Clicking <label> dispatches another click event on
805
- * the native form control that then bubbles up to this
806
- * listener. This additional event targets the host
807
- * element, so the select overlay is opened.
808
- *
809
- * When the slotted elements are clicked (and therefore
810
- * the ancestor <label> element) we want to prevent the label
811
- * from dispatching another click event.
812
- *
813
- * Do not call stopPropagation() because this will cause
814
- * click handlers on the slotted elements to never fire in React.
815
- * When developers do onClick in React a native "click" listener
816
- * is added on the root element, not the slotted element. When that
817
- * native click listener fires, React then dispatches the synthetic
818
- * click event on the slotted element. However, if stopPropagation
819
- * is called then the native click event will never bubble up
820
- * to the root element.
821
- */
822
- ev.preventDefault();
823
- }
824
- };
825
- onFocus = () => {
826
- this.hasFocus = true;
827
- this.ionFocus.emit();
828
- };
829
- onBlur = () => {
830
- this.hasFocus = false;
831
- this.ionBlur.emit();
832
- };
833
650
  renderLabel() {
834
651
  const { label } = this;
835
652
  return (h("div", { class: {
@@ -838,7 +655,8 @@ export class Select {
838
655
  }, part: "label" }, label === undefined ? h("slot", { name: "label" }) : h("div", { class: "label-text" }, label)));
839
656
  }
840
657
  componentDidRender() {
841
- this.notchController?.calculateNotchWidth();
658
+ var _a;
659
+ (_a = this.notchController) === null || _a === void 0 ? void 0 : _a.calculateNotchWidth();
842
660
  }
843
661
  /**
844
662
  * Gets any content passed into the `label` slot,
@@ -856,17 +674,6 @@ export class Select {
856
674
  get hasLabel() {
857
675
  return this.label !== undefined || this.labelSlot !== null;
858
676
  }
859
- /**
860
- * Stops propagation when the label is clicked,
861
- * otherwise, two clicks will be triggered.
862
- */
863
- onLabelClick = (ev) => {
864
- // Only stop propagation if the click was directly on the label
865
- // and not on the input or other child elements
866
- if (ev.target === ev.currentTarget) {
867
- ev.stopPropagation();
868
- }
869
- };
870
677
  /**
871
678
  * Renders the border container
872
679
  * when fill="outline".
@@ -896,46 +703,6 @@ export class Select {
896
703
  */
897
704
  return this.renderLabel();
898
705
  }
899
- /**
900
- * Wraps text nodes in the select text with span elements
901
- * so spacing can be added between elements without
902
- * changing the display to prevent losing the ellipses
903
- * behavior.
904
- *
905
- * Only wraps when the string contains HTML elements
906
- * alongside text.
907
- */
908
- wrapSelectTextNodes(html) {
909
- const temp = document.createElement('div');
910
- temp.innerHTML = html;
911
- const hasElements = Array.from(temp.childNodes).some((n) => n.nodeType === Node.ELEMENT_NODE);
912
- // Return the plain text
913
- if (!hasElements) {
914
- return html;
915
- }
916
- Array.from(temp.childNodes).forEach((node) => {
917
- if (node.nodeType === Node.TEXT_NODE && node.textContent?.trim()) {
918
- const text = node.textContent;
919
- /**
920
- * Split comma separator from the text content
921
- * e.g., ", Bacon" becomes ", " text node + <span>Bacon</span>.
922
- */
923
- const commaMatch = text.match(/^(,\s*)(.*)/);
924
- if (commaMatch) {
925
- const commaNode = document.createTextNode(commaMatch[1]);
926
- const wrapper = document.createElement('span');
927
- wrapper.textContent = commaMatch[2];
928
- node.parentNode?.replaceChild(wrapper, node);
929
- wrapper.parentNode?.insertBefore(commaNode, wrapper);
930
- return;
931
- }
932
- const wrapper = document.createElement('span');
933
- node.parentNode?.replaceChild(wrapper, node);
934
- wrapper.appendChild(node);
935
- }
936
- });
937
- return temp.innerHTML;
938
- }
939
706
  /**
940
707
  * Renders either the placeholder
941
708
  * or the selected values based on
@@ -943,7 +710,7 @@ export class Select {
943
710
  */
944
711
  renderSelectText() {
945
712
  const { placeholder } = this;
946
- const displayValue = this.getText(true);
713
+ const displayValue = this.getText();
947
714
  let addPlaceholderClass = false;
948
715
  let selectText = displayValue;
949
716
  if (selectText === '' && placeholder !== undefined) {
@@ -955,10 +722,6 @@ export class Select {
955
722
  'select-placeholder': addPlaceholderClass,
956
723
  };
957
724
  const textPart = addPlaceholderClass ? 'placeholder' : 'text';
958
- if (this.customHTMLEnabled) {
959
- const wrapped = this.wrapSelectTextNodes(selectText);
960
- return h("div", { "aria-hidden": "true", class: selectTextClasses, part: textPart, innerHTML: wrapped });
961
- }
962
725
  return (h("div", { "aria-hidden": "true", class: selectTextClasses, part: textPart }, selectText));
963
726
  }
964
727
  /**
@@ -974,16 +737,16 @@ export class Select {
974
737
  }
975
738
  else {
976
739
  const defaultIcon = mode === 'ios' ? chevronExpand : caretDownSharp;
977
- icon = toggleIcon ?? defaultIcon;
740
+ icon = toggleIcon !== null && toggleIcon !== void 0 ? toggleIcon : defaultIcon;
978
741
  }
979
742
  return h("ion-icon", { class: "select-icon", part: "icon", "aria-hidden": "true", icon: icon });
980
743
  }
981
744
  get ariaLabel() {
745
+ var _a;
982
746
  const { placeholder, inheritedAttributes } = this;
983
- // Get the plain text from the selected text
984
747
  const displayValue = this.getText();
985
748
  // The aria label should be preferred over visible text if both are specified
986
- const definedLabel = inheritedAttributes['aria-label'] ?? this.labelText;
749
+ const definedLabel = (_a = inheritedAttributes['aria-label']) !== null && _a !== void 0 ? _a : this.labelText;
987
750
  /**
988
751
  * If developer has specified a placeholder
989
752
  * and there is nothing selected, the selectText
@@ -1075,7 +838,7 @@ export class Select {
1075
838
  */
1076
839
  const labelShouldFloat = labelPlacement === 'stacked' ||
1077
840
  (labelPlacement === 'floating' && (hasValue || hasFocus || isExpanded || hasStartEndSlots));
1078
- return (h(Host, { key: 'e693afee7852c89be122b785230ed8fc9be5ba61', onClick: this.onClick, class: createColorClasses(this.color, {
841
+ return (h(Host, { key: 'f16327d6866ffee76e1618fcd3281590ca0fd56d', onClick: this.onClick, class: createColorClasses(this.color, {
1079
842
  [mode]: true,
1080
843
  'in-item': inItem,
1081
844
  'in-item-color': hostContext('ion-item.ion-color', el),
@@ -1093,7 +856,7 @@ export class Select {
1093
856
  [`select-justify-${justify}`]: justifyEnabled,
1094
857
  [`select-shape-${shape}`]: shape !== undefined,
1095
858
  [`select-label-placement-${labelPlacement}`]: true,
1096
- }) }, h("label", { key: 'd79647bd83cab506f01a4588f631b3982fa1c011', class: "select-wrapper", id: "select-label", onClick: this.onLabelClick, part: "wrapper" }, this.renderLabelContainer(), h("div", { key: 'fa8d78b9ea041dc9e897643f22f33f38e645ce69', class: "select-wrapper-inner", part: "inner" }, h("slot", { key: '45666226a6898a538849bd3d3b89510bf689656f', name: "start" }), h("div", { key: '59f1f08109c4cda699cb2a9f2a6bce00a7fc4301', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), h("slot", { key: '79b18fd4ca2af9528ff89c609ea20b3e727701e1', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && h("div", { key: '0149f4ddb4ca1d1d2e2ca91b6cbec721d5c8aa9b', class: "select-highlight" })), this.renderBottomContent()));
859
+ }) }, h("label", { key: 'db13f76b384a7a7461c1ad752108eadf9c0213be', class: "select-wrapper", id: "select-label", onClick: this.onLabelClick, part: "wrapper" }, this.renderLabelContainer(), h("div", { key: '2fb0e57bd596c0f525be79293b7da4aca55a9385', class: "select-wrapper-inner", part: "inner" }, h("slot", { key: 'cd694c36242789a89461ed3412af9891ad68411b', name: "start" }), h("div", { key: 'fdf62911be54f4ab29eb3c2eb153f082e76a8f49', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), h("slot", { key: 'a32f5c4b101d4d6ad45870f4c4446960009377f5', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && h("div", { key: '61f792024a5f221ef4f28a3c249bd3a0de5edeab', class: "select-highlight" })), this.renderBottomContent()));
1097
860
  }
1098
861
  static get is() { return "ion-select"; }
1099
862
  static get encapsulation() { return "shadow"; }
@@ -1753,219 +1516,25 @@ const parseValue = (value) => {
1753
1516
  }
1754
1517
  return value.toString();
1755
1518
  };
1756
- const generateText = (opts, value, compareWith, useHTML = false) => {
1519
+ const generateText = (opts, value, compareWith) => {
1757
1520
  if (value === undefined) {
1758
1521
  return '';
1759
1522
  }
1760
1523
  if (Array.isArray(value)) {
1761
1524
  return value
1762
- .map((v) => textForValue(opts, v, compareWith, useHTML))
1525
+ .map((v) => textForValue(opts, v, compareWith))
1763
1526
  .filter((opt) => opt !== null)
1764
1527
  .join(', ');
1765
1528
  }
1766
1529
  else {
1767
- return textForValue(opts, value, compareWith, useHTML) || '';
1530
+ return textForValue(opts, value, compareWith) || '';
1768
1531
  }
1769
1532
  };
1770
- /**
1771
- * Returns the display text for a given value from the list of options.
1772
- * When `useHTML` is true, returns sanitized HTML for the select text.
1773
- * When `useHTML` is false, returns plain text for aria-label and other
1774
- * text-only contexts.
1775
- *
1776
- * @param opts - The list of ion-select-option elements.
1777
- * @param value - The value to find the matching option for.
1778
- * @param compareWith - Custom comparison function or property name.
1779
- * @param useHTML - If true, returns HTML string. If false, returns plain text.
1780
- */
1781
- const textForValue = (opts, value, compareWith, useHTML = false) => {
1533
+ const textForValue = (opts, value, compareWith) => {
1782
1534
  const selectOpt = opts.find((opt) => {
1783
1535
  return compareOptions(value, getOptionValue(opt), compareWith);
1784
1536
  });
1785
- const customHTMLEnabled = config.get('innerHTMLTemplatesEnabled', ENABLE_HTML_CONTENT_DEFAULT);
1786
- if (!selectOpt) {
1787
- return null;
1788
- }
1789
- // Return sanitized HTML for the select text
1790
- if (customHTMLEnabled && useHTML) {
1791
- return getOptionContent(selectOpt, undefined, true);
1792
- }
1793
- /**
1794
- * When custom HTML is enabled, extract only the default slot content.
1795
- * This ensures aria-label and other text-only contexts read only
1796
- * the relevant option text.
1797
- */
1798
- if (customHTMLEnabled) {
1799
- const content = getOptionContent(selectOpt);
1800
- if (typeof content === 'string') {
1801
- return content;
1802
- }
1803
- /**
1804
- * Elements were found in the default slot, extract and concatenate
1805
- * their text content while trimming whitespace.
1806
- */
1807
- if (content) {
1808
- const texts = Array.from(content.childNodes)
1809
- .map((n) => n.textContent?.trim())
1810
- .filter((t) => t);
1811
- return texts.join(' ') || null;
1812
- }
1813
- // Empty option
1814
- return null;
1815
- }
1816
- return getDefaultSlotPlainText(selectOpt);
1817
- };
1818
- /**
1819
- * Trims whitespace from all text nodes within a DOM tree.
1820
- * This prevents invisible layout shifts and unwanted gaps between
1821
- * elements when HTML content is injected via innerHTML or cloneNode,
1822
- * as browsers preserve whitespace (tabs, newlines, spaces) from
1823
- * the original source markup.
1824
- *
1825
- * @param node The root node to start trimming text nodes from.
1826
- */
1827
- const trimTextNodes = (node) => {
1828
- node.childNodes.forEach((child) => {
1829
- if (child.nodeType === Node.TEXT_NODE) {
1830
- child.textContent = child.textContent?.trim() || '';
1831
- }
1832
- else if (child.nodeType === Node.ELEMENT_NODE) {
1833
- trimTextNodes(child);
1834
- }
1835
- });
1836
- };
1837
- /**
1838
- * Extracts and clones content from an `ion-select-option` element
1839
- * for rendering within overlay interfaces or the select text when `customHTMLEnabled` is `true`.
1840
- *
1841
- * @param option - The `ion-select-option` element to extract content from.
1842
- * @param slotName - Optional slot name to extract. If omitted, extracts the default slot content.
1843
- * @param useHTML - If `true`, the returned string will include any custom HTML content. If `false`, the returned string will be plain text without any HTML.
1844
- * @returns When `useHTML` is `true`, a sanitized HTML string. When `false`, a
1845
- * div element containing cloned child nodes. Returns `null` if no matching
1846
- * content is found.
1847
- */
1848
- const getOptionContent = (option, slotName, useHTML = false) => {
1849
- let nodes;
1850
- if (slotName) {
1851
- // Named slot: get elements with matching slot attribute
1852
- nodes = Array.from(option.children).filter((el) => el.getAttribute('slot') === slotName);
1853
- }
1854
- else {
1855
- // Default slot: get nodes without a slot attribute
1856
- const defaultSlot = getOptionDefaultSlot(option) || [];
1857
- nodes = defaultSlot.filter((node) => {
1858
- /**
1859
- * Exclude whitespace-only text nodes (newline noise between
1860
- * markup elements). Element nodes are always kept, even when
1861
- * their textContent is empty (e.g. <svg>, <img>).
1862
- */
1863
- if (node.nodeType === Node.TEXT_NODE) {
1864
- return node.textContent?.trim().length !== 0;
1865
- }
1866
- return true;
1867
- });
1868
- }
1869
- if (nodes.length === 0) {
1870
- return null;
1871
- }
1872
- // Return plain text if no elements are found
1873
- if (!slotName && nodes.every((n) => n.nodeType === Node.TEXT_NODE)) {
1874
- return nodes.map((n) => n.textContent?.trim()).join(' ') || null;
1875
- }
1876
- /**
1877
- * Mirror known custom-element properties (e.g. ion-icon's `icon`)
1878
- * onto attributes before cloning. Frameworks like Vue set these as
1879
- * DOM properties, which `cloneNode` doesn't copy, so without this
1880
- * step the cloned overlay copy renders without the prop's value.
1881
- */
1882
- nodes.forEach((n) => {
1883
- if (n.nodeType === Node.ELEMENT_NODE) {
1884
- reflectPropertiesToAttributes(n);
1885
- }
1886
- });
1887
- // Clone each node into a temporary container
1888
- const container = document.createElement('div');
1889
- nodes.forEach((n) => {
1890
- const clone = n.cloneNode(true);
1891
- if (clone.nodeType === Node.TEXT_NODE) {
1892
- clone.textContent = clone.textContent?.trim() || '';
1893
- }
1894
- else {
1895
- trimTextNodes(clone);
1896
- }
1897
- container.appendChild(clone);
1898
- });
1899
- /**
1900
- * Sanitize the cloned DOM in place. Trusted attributes (size, color,
1901
- * shape, etc.) are preserved; event handlers, javascript: URLs, and
1902
- * blocked tags are stripped.
1903
- */
1904
- sanitizeDOMTree(container);
1905
- if (useHTML) {
1906
- return container.innerHTML.trim() || null;
1907
- }
1908
- return container;
1909
- };
1910
- /**
1911
- * Returns the child nodes that belong to the default slot of an
1912
- * option element, excluding any nodes that are assigned to named
1913
- * slots.
1914
- *
1915
- * @param option - The `ion-select-option` element to extract default-slot nodes from.
1916
- * @returns An array of default slot nodes, or `null` if none are found.
1917
- */
1918
- const getOptionDefaultSlot = (option) => {
1919
- const defaultSlotNodes = Array.from(option.childNodes).filter((node) => {
1920
- if (node.nodeType === Node.ELEMENT_NODE) {
1921
- return !node.hasAttribute('slot');
1922
- }
1923
- return node.nodeType === Node.TEXT_NODE;
1924
- });
1925
- if (defaultSlotNodes.length === 0) {
1926
- return null;
1927
- }
1928
- return defaultSlotNodes;
1929
- };
1930
- /**
1931
- * Extracts plain text from only the default slot of an option,
1932
- * excluding content assigned to named slots (start/end).
1933
- */
1934
- const getDefaultSlotPlainText = (option) => {
1935
- const texts = Array.from(option.childNodes)
1936
- .filter((node) => {
1937
- if (node.nodeType === Node.ELEMENT_NODE) {
1938
- return !node.hasAttribute('slot');
1939
- }
1940
- return node.nodeType === Node.TEXT_NODE;
1941
- })
1942
- .filter((node) => node.nodeType === Node.TEXT_NODE)
1943
- .map((n) => n.textContent?.trim())
1944
- .filter((t) => t);
1945
- return texts.join(' ');
1946
- };
1947
- /**
1948
- * Extracts the rich content from an `ion-select-option`.
1949
- * When `customHTMLEnabled` is `false`, only the plain text from the
1950
- * default slot is read and the start and end slots are skipped.
1951
- *
1952
- * @param option - The `ion-select-option` element to extract content from.
1953
- * @param customHTMLEnabled - Whether custom HTML rendering is enabled
1954
- * via the `innerHTMLTemplatesEnabled` config.
1955
- */
1956
- const extractOptionContent = (option, customHTMLEnabled) => {
1957
- if (!customHTMLEnabled) {
1958
- return {
1959
- content: getDefaultSlotPlainText(option),
1960
- startContent: undefined,
1961
- endContent: undefined,
1962
- };
1963
- }
1964
- return {
1965
- content: getOptionContent(option),
1966
- startContent: getOptionContent(option, 'start') ?? undefined,
1967
- endContent: getOptionContent(option, 'end') ?? undefined,
1968
- };
1537
+ return selectOpt ? selectOpt.textContent : null;
1969
1538
  };
1970
1539
  let selectIds = 0;
1971
1540
  const OPTION_CLASS = 'select-interface-option';