@ionic/core 8.8.20-dev.11787158518.168a2fea → 8.8.20-dev.11789504012.1a675914

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