@ionic/core 8.8.14-dev.11784222473.142aed23 → 8.8.14-dev.11784243422.11f0110c

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 (347) hide show
  1. package/components/index.js +1 -1
  2. package/components/ion-action-sheet.js +1 -1
  3. package/components/ion-alert.js +1 -1
  4. package/components/ion-back-button.js +1 -1
  5. package/components/ion-button.js +1 -1
  6. package/components/ion-card.js +1 -1
  7. package/components/ion-chip.js +1 -1
  8. package/components/ion-datetime-button.js +1 -1
  9. package/components/ion-datetime.js +1 -1
  10. package/components/ion-fab-button.js +1 -1
  11. package/components/ion-img.js +1 -1
  12. package/components/ion-infinite-scroll-content.js +1 -1
  13. package/components/ion-input-password-toggle.js +1 -1
  14. package/components/ion-input.js +1 -1
  15. package/components/ion-item-option.js +1 -1
  16. package/components/ion-item.js +1 -1
  17. package/components/ion-loading.js +1 -1
  18. package/components/ion-menu-button.js +1 -1
  19. package/components/ion-menu.js +1 -1
  20. package/components/ion-modal.js +1 -1
  21. package/components/ion-popover.js +1 -1
  22. package/components/ion-progress-bar.js +1 -1
  23. package/components/ion-radio.js +1 -1
  24. package/components/ion-range.js +1 -1
  25. package/components/ion-refresher-content.js +1 -1
  26. package/components/ion-refresher.js +1 -1
  27. package/components/ion-reorder-group.js +1 -1
  28. package/components/ion-reorder.js +1 -1
  29. package/components/ion-ripple-effect.js +1 -1
  30. package/components/ion-router-link.js +1 -1
  31. package/components/ion-router-outlet.js +1 -1
  32. package/components/ion-row.js +1 -1
  33. package/components/ion-searchbar.js +1 -1
  34. package/components/ion-segment-button.js +1 -1
  35. package/components/ion-segment-content.js +1 -1
  36. package/components/ion-segment-view.js +1 -1
  37. package/components/ion-segment.js +1 -1
  38. package/components/ion-select-modal.js +1 -1
  39. package/components/ion-select-option.js +1 -1
  40. package/components/ion-select-popover.js +1 -1
  41. package/components/ion-select.js +1 -1
  42. package/components/ion-skeleton-text.js +1 -1
  43. package/components/ion-spinner.js +1 -1
  44. package/components/ion-split-pane.js +1 -1
  45. package/components/ion-tab-bar.js +1 -1
  46. package/components/ion-tab-button.js +1 -1
  47. package/components/ion-tab.js +1 -1
  48. package/components/ion-tabs.js +1 -1
  49. package/components/ion-text.js +1 -1
  50. package/components/ion-textarea.js +1 -1
  51. package/components/ion-thumbnail.js +1 -1
  52. package/components/ion-title.js +1 -1
  53. package/components/ion-toast.js +1 -1
  54. package/components/ion-toggle.js +1 -1
  55. package/components/ion-toolbar.js +1 -1
  56. package/components/p-279dFMvg.js +4 -0
  57. package/components/p-BSQPZ79H.js +4 -0
  58. package/components/{p-BHrrc-3d.js → p-Buf_7zcy.js} +1 -1
  59. package/components/p-BwKpO3Is.js +4 -0
  60. package/components/p-C-Rx1zny.js +4 -0
  61. package/components/p-CHzfYZbv.js +4 -0
  62. package/components/p-D4h1H_hh.js +4 -0
  63. package/components/{p-BSEgsdFI.js → p-DhkITZ-y.js} +1 -1
  64. package/components/{p-5bE_Wz4Y.js → p-DpV-p5Xs.js} +1 -1
  65. package/components/{p-Cfx4M1Bn.js → p-Dz74mwlk.js} +1 -1
  66. package/components/p-LMGfIvTf.js +4 -0
  67. package/components/{p-BLmJ0zRm.js → p-XJWMAP8m.js} +1 -1
  68. package/components/p-_lHSumhG.js +4 -0
  69. package/components/p-j9Da6cYO.js +4 -0
  70. package/components/p-jOtMJMv8.js +4 -0
  71. package/components/{p-B60hm8Qv.js → p-r0aq7dpt.js} +1 -1
  72. package/components/p-uTR_dEqg.js +4 -0
  73. package/components/{p-rCa2eL0j.js → p-wk2QqrAo.js} +1 -1
  74. package/dist/cjs/config-DWdFbSNK.js +35 -0
  75. package/dist/cjs/index-Cueg3U4w.js +429 -0
  76. package/dist/cjs/index.cjs.js +6 -6
  77. package/dist/cjs/ion-action-sheet.cjs.entry.js +27 -7
  78. package/dist/cjs/ion-alert.cjs.entry.js +64 -25
  79. package/dist/cjs/ion-app_8.cjs.entry.js +23 -9
  80. package/dist/cjs/ion-avatar_3.cjs.entry.js +1 -1
  81. package/dist/cjs/ion-col_3.cjs.entry.js +1 -1
  82. package/dist/cjs/{ion-datetime_3.cjs.entry.js → ion-datetime.cjs.entry.js} +1 -639
  83. package/dist/cjs/ion-img.cjs.entry.js +3 -1
  84. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +3 -2
  85. package/dist/cjs/ion-input.cjs.entry.js +4 -4
  86. package/dist/cjs/ion-item_8.cjs.entry.js +2 -2
  87. package/dist/cjs/ion-loading.cjs.entry.js +10 -5
  88. package/dist/cjs/ion-menu_3.cjs.entry.js +1 -1
  89. package/dist/cjs/ion-modal.cjs.entry.js +23 -18
  90. package/dist/cjs/ion-popover.cjs.entry.js +9 -5
  91. package/dist/cjs/ion-progress-bar.cjs.entry.js +1 -1
  92. package/dist/cjs/ion-radio_2.cjs.entry.js +3 -3
  93. package/dist/cjs/ion-range.cjs.entry.js +3 -3
  94. package/dist/cjs/ion-refresher_2.cjs.entry.js +6 -5
  95. package/dist/cjs/ion-reorder_2.cjs.entry.js +2 -2
  96. package/dist/cjs/ion-ripple-effect.cjs.entry.js +1 -1
  97. package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
  98. package/dist/cjs/ion-searchbar.cjs.entry.js +5 -5
  99. package/dist/cjs/ion-segment-content.cjs.entry.js +1 -1
  100. package/dist/cjs/ion-segment-view.cjs.entry.js +2 -2
  101. package/dist/cjs/ion-segment_2.cjs.entry.js +4 -4
  102. package/dist/cjs/ion-select-modal.cjs.entry.js +84 -30
  103. package/dist/cjs/ion-select_3.cjs.entry.js +407 -49
  104. package/dist/cjs/ion-spinner.cjs.entry.js +1 -1
  105. package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
  106. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +4 -4
  107. package/dist/cjs/ion-tab_2.cjs.entry.js +3 -3
  108. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  109. package/dist/cjs/ion-textarea.cjs.entry.js +2 -2
  110. package/dist/cjs/ion-toast.cjs.entry.js +6 -5
  111. package/dist/cjs/ion-toggle.cjs.entry.js +3 -3
  112. package/dist/cjs/ionic.cjs.js +1 -1
  113. package/dist/cjs/loader.cjs.js +1 -1
  114. package/dist/cjs/overlay-control-label-D2sdL2O8.js +50 -0
  115. package/dist/cjs/{overlays-DdtIYQUH.js → overlays-DSmSrd_4.js} +27 -31
  116. package/dist/cjs/select-option-render-DTF50t5r.js +124 -0
  117. package/dist/collection/collection-manifest.json +6 -10
  118. package/dist/collection/components/action-sheet/action-sheet.ios.css +229 -2
  119. package/dist/collection/components/action-sheet/action-sheet.js +24 -5
  120. package/dist/collection/components/action-sheet/action-sheet.md.css +175 -2
  121. package/dist/collection/components/alert/alert.ios.css +280 -10
  122. package/dist/collection/components/alert/alert.js +59 -21
  123. package/dist/collection/components/alert/alert.md.css +269 -20
  124. package/dist/collection/components/img/img.js +6 -1
  125. package/dist/collection/components/input/input.js +8 -8
  126. package/dist/collection/components/loading/loading.js +7 -3
  127. package/dist/collection/components/modal/modal.ios.css +0 -8
  128. package/dist/collection/components/modal/modal.js +23 -18
  129. package/dist/collection/components/modal/modal.md.css +0 -8
  130. package/dist/collection/components/popover/popover.ios.css +15 -0
  131. package/dist/collection/components/popover/popover.js +7 -3
  132. package/dist/collection/components/popover/popover.md.css +15 -0
  133. package/dist/collection/components/progress-bar/progress-bar.js +1 -1
  134. package/dist/collection/components/radio/radio.js +4 -4
  135. package/dist/collection/components/range/range.js +3 -3
  136. package/dist/collection/components/refresher/refresher.js +1 -1
  137. package/dist/collection/components/refresher-content/refresher-content.js +1 -1
  138. package/dist/collection/components/reorder/reorder.js +1 -1
  139. package/dist/collection/components/reorder-group/reorder-group.js +1 -1
  140. package/dist/collection/components/ripple-effect/ripple-effect.js +1 -1
  141. package/dist/collection/components/router-link/router-link.js +2 -2
  142. package/dist/collection/components/router-outlet/router-outlet.js +38 -5
  143. package/dist/collection/components/row/row.js +1 -1
  144. package/dist/collection/components/searchbar/searchbar.js +9 -9
  145. package/dist/collection/components/segment/segment.js +2 -2
  146. package/dist/collection/components/segment-button/segment-button.js +2 -2
  147. package/dist/collection/components/segment-content/segment-content.js +1 -1
  148. package/dist/collection/components/segment-view/segment-view.js +2 -2
  149. package/dist/collection/components/select/select.ios.css +33 -0
  150. package/dist/collection/components/select/select.js +323 -16
  151. package/dist/collection/components/select/select.md.css +33 -0
  152. package/dist/collection/components/select-modal/select-modal.ios.css +219 -0
  153. package/dist/collection/components/select-modal/select-modal.js +79 -26
  154. package/dist/collection/components/select-modal/select-modal.md.css +165 -0
  155. package/dist/collection/components/select-option/select-option.js +67 -3
  156. package/dist/collection/components/select-popover/select-popover.ios.css +219 -0
  157. package/dist/collection/components/select-popover/select-popover.js +78 -26
  158. package/dist/collection/components/select-popover/select-popover.md.css +165 -0
  159. package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
  160. package/dist/collection/components/spinner/spinner.js +1 -1
  161. package/dist/collection/components/split-pane/split-pane.js +2 -2
  162. package/dist/collection/components/tab/tab.js +2 -2
  163. package/dist/collection/components/tab-bar/tab-bar.js +2 -2
  164. package/dist/collection/components/tab-button/tab-button.js +2 -2
  165. package/dist/collection/components/tabs/tabs.js +1 -1
  166. package/dist/collection/components/text/text.js +2 -2
  167. package/dist/collection/components/textarea/textarea.js +2 -2
  168. package/dist/collection/components/thumbnail/thumbnail.js +1 -1
  169. package/dist/collection/components/title/title.js +2 -2
  170. package/dist/collection/components/toast/toast.js +2 -2
  171. package/dist/collection/components/toggle/toggle.js +3 -3
  172. package/dist/collection/components/toolbar/toolbar.js +2 -2
  173. package/dist/collection/index.js +1 -1
  174. package/dist/collection/utils/overlay-control-label.js +45 -0
  175. package/dist/collection/utils/overlays.js +26 -30
  176. package/dist/collection/utils/sanitization/index.js +274 -18
  177. package/dist/collection/utils/select-option-render.js +119 -0
  178. package/dist/docs.json +485 -1177
  179. package/dist/esm/config-BwKpO3Is.js +31 -0
  180. package/dist/esm/{index-DV3sJJW8.js → index-AlrZKoWR.js} +1 -1
  181. package/dist/esm/index-DQSkZyOJ.js +424 -0
  182. package/dist/esm/index.js +3 -2
  183. package/dist/esm/ion-accordion_2.entry.js +1 -1
  184. package/dist/esm/ion-action-sheet.entry.js +27 -7
  185. package/dist/esm/ion-alert.entry.js +63 -24
  186. package/dist/esm/ion-app_8.entry.js +23 -9
  187. package/dist/esm/ion-avatar_3.entry.js +1 -1
  188. package/dist/esm/ion-back-button.entry.js +1 -1
  189. package/dist/esm/ion-breadcrumb_2.entry.js +1 -1
  190. package/dist/esm/ion-col_3.entry.js +1 -1
  191. package/dist/esm/{ion-datetime_3.entry.js → ion-datetime.entry.js} +5 -641
  192. package/dist/esm/ion-fab_3.entry.js +1 -1
  193. package/dist/esm/ion-img.entry.js +4 -2
  194. package/dist/esm/ion-infinite-scroll_2.entry.js +2 -1
  195. package/dist/esm/ion-input-password-toggle.entry.js +1 -1
  196. package/dist/esm/ion-input.entry.js +5 -5
  197. package/dist/esm/ion-item_8.entry.js +3 -3
  198. package/dist/esm/ion-loading.entry.js +9 -4
  199. package/dist/esm/ion-menu_3.entry.js +2 -2
  200. package/dist/esm/ion-modal.entry.js +23 -18
  201. package/dist/esm/ion-popover.entry.js +9 -5
  202. package/dist/esm/ion-progress-bar.entry.js +1 -1
  203. package/dist/esm/ion-radio_2.entry.js +3 -3
  204. package/dist/esm/ion-range.entry.js +3 -3
  205. package/dist/esm/ion-refresher_2.entry.js +5 -4
  206. package/dist/esm/ion-reorder_2.entry.js +3 -3
  207. package/dist/esm/ion-ripple-effect.entry.js +1 -1
  208. package/dist/esm/ion-route_4.entry.js +2 -2
  209. package/dist/esm/ion-searchbar.entry.js +6 -6
  210. package/dist/esm/ion-segment-content.entry.js +1 -1
  211. package/dist/esm/ion-segment-view.entry.js +2 -2
  212. package/dist/esm/ion-segment_2.entry.js +4 -4
  213. package/dist/esm/ion-select-modal.entry.js +84 -30
  214. package/dist/esm/ion-select_3.entry.js +410 -52
  215. package/dist/esm/ion-spinner.entry.js +1 -1
  216. package/dist/esm/ion-split-pane.entry.js +2 -2
  217. package/dist/esm/ion-tab-bar_2.entry.js +4 -4
  218. package/dist/esm/ion-tab_2.entry.js +3 -3
  219. package/dist/esm/ion-text.entry.js +2 -2
  220. package/dist/esm/ion-textarea.entry.js +2 -2
  221. package/dist/esm/ion-toast.entry.js +5 -4
  222. package/dist/esm/ion-toggle.entry.js +4 -4
  223. package/dist/esm/ionic.js +1 -1
  224. package/dist/esm/loader.js +1 -1
  225. package/dist/esm/overlay-control-label-BSQPZ79H.js +47 -0
  226. package/dist/esm/{overlays-Dg0q2_tJ.js → overlays-DLNOHWNc.js} +28 -32
  227. package/dist/esm/select-option-render-B8nWZRnd.js +122 -0
  228. package/dist/html.html-data.json +51 -79
  229. package/dist/ionic/index.esm.js +1 -1
  230. package/dist/ionic/ionic.esm.js +1 -1
  231. package/dist/ionic/p-038eb991.entry.js +4 -0
  232. package/dist/ionic/{p-8fce95d5.entry.js → p-14095ba5.entry.js} +1 -1
  233. package/dist/ionic/{p-3a126bca.entry.js → p-259d0d98.entry.js} +1 -1
  234. package/dist/ionic/{p-fabcce6c.entry.js → p-341032b3.entry.js} +1 -1
  235. package/dist/ionic/{p-3a7d1e91.entry.js → p-4502a274.entry.js} +1 -1
  236. package/dist/ionic/p-4621c387.entry.js +4 -0
  237. package/dist/ionic/p-4ace7762.entry.js +4 -0
  238. package/dist/ionic/p-4bb3eb60.entry.js +4 -0
  239. package/dist/ionic/p-4e9ec5c5.entry.js +4 -0
  240. package/dist/ionic/{p-874b4bd8.entry.js → p-51cd1643.entry.js} +1 -1
  241. package/dist/ionic/p-5c3ec490.entry.js +4 -0
  242. package/dist/ionic/p-5d1ac2c7.entry.js +4 -0
  243. package/dist/ionic/{p-3ae5f277.entry.js → p-627fabd9.entry.js} +1 -1
  244. package/dist/ionic/{p-e0be05c5.entry.js → p-629e4703.entry.js} +1 -1
  245. package/dist/ionic/p-700795f6.entry.js +4 -0
  246. package/dist/ionic/{p-5d1da0a2.entry.js → p-76e92a84.entry.js} +1 -1
  247. package/dist/ionic/p-79a36078.entry.js +4 -0
  248. package/dist/ionic/{p-9f1103ce.entry.js → p-7a37b3ce.entry.js} +1 -1
  249. package/dist/ionic/{p-3353c229.entry.js → p-80b44b3c.entry.js} +1 -1
  250. package/dist/ionic/p-913b218a.entry.js +4 -0
  251. package/dist/ionic/{p-390ca786.entry.js → p-9177f4ac.entry.js} +1 -1
  252. package/dist/ionic/{p-DV3sJJW8.js → p-AlrZKoWR.js} +1 -1
  253. package/dist/ionic/p-BDtODLZ4.js +4 -0
  254. package/dist/ionic/p-BSQPZ79H.js +4 -0
  255. package/dist/ionic/p-BwKpO3Is.js +4 -0
  256. package/dist/ionic/p-Cg5-OQYy.js +4 -0
  257. package/dist/ionic/p-DCOvXkOm.js +4 -0
  258. package/dist/ionic/{p-4858af1f.entry.js → p-a5213260.entry.js} +1 -1
  259. package/dist/ionic/{p-37e720da.entry.js → p-a7628bc7.entry.js} +1 -1
  260. package/dist/ionic/p-a9a33367.entry.js +4 -0
  261. package/dist/ionic/p-ad728198.entry.js +4 -0
  262. package/dist/ionic/{p-ef4c3bee.entry.js → p-b1599fca.entry.js} +1 -1
  263. package/dist/ionic/{p-84d5ce05.entry.js → p-b9ac1fe0.entry.js} +1 -1
  264. package/dist/ionic/p-bfc8c629.entry.js +4 -0
  265. package/dist/ionic/p-c08e666a.entry.js +4 -0
  266. package/dist/ionic/{p-34586ead.entry.js → p-c93553d2.entry.js} +1 -1
  267. package/dist/ionic/p-ce7992c4.entry.js +4 -0
  268. package/dist/ionic/{p-75dc25ba.entry.js → p-d2c7f046.entry.js} +1 -1
  269. package/dist/ionic/{p-c4d8641b.entry.js → p-d8387b99.entry.js} +1 -1
  270. package/dist/ionic/{p-9a65ac7f.entry.js → p-db1b6738.entry.js} +1 -1
  271. package/dist/ionic/p-ed797c72.entry.js +4 -0
  272. package/dist/ionic/{p-8eb8ee76.entry.js → p-ef93ca92.entry.js} +1 -1
  273. package/dist/ionic/p-f09f9642.entry.js +4 -0
  274. package/dist/ionic/p-f1c06f82.entry.js +4 -0
  275. package/dist/ionic/p-f718fccb.entry.js +4 -0
  276. package/dist/ionic/{p-0fa9c382.entry.js → p-fe4aa1db.entry.js} +1 -1
  277. package/dist/types/components/img/img.d.ts +2 -0
  278. package/dist/types/components/input/input.d.ts +1 -1
  279. package/dist/types/components/modal/modal.d.ts +11 -4
  280. package/dist/types/components/router-outlet/router-outlet.d.ts +7 -0
  281. package/dist/types/components/searchbar/searchbar.d.ts +1 -1
  282. package/dist/types/components/select/select-interface.d.ts +31 -0
  283. package/dist/types/components/select/select.d.ts +18 -0
  284. package/dist/types/components/select-option/select-option.d.ts +42 -1
  285. package/dist/types/components.d.ts +72 -288
  286. package/dist/types/index.d.ts +1 -1
  287. package/dist/types/interface.d.ts +0 -1
  288. package/dist/types/utils/config.d.ts +0 -8
  289. package/dist/types/utils/overlay-control-label.d.ts +32 -0
  290. package/dist/types/utils/overlays.d.ts +11 -9
  291. package/dist/types/utils/sanitization/index.d.ts +58 -2
  292. package/dist/types/utils/select-option-render.d.ts +53 -0
  293. package/hydrate/index.js +1408 -1175
  294. package/hydrate/index.mjs +1408 -1175
  295. package/package.json +37 -5
  296. package/components/ion-picker-legacy-column.d.ts +0 -11
  297. package/components/ion-picker-legacy-column.js +0 -4
  298. package/components/ion-picker-legacy.d.ts +0 -11
  299. package/components/ion-picker-legacy.js +0 -4
  300. package/components/p-3hGiN2uq.js +0 -4
  301. package/components/p-BIPPbW0M.js +0 -4
  302. package/components/p-BUYFy35a.js +0 -4
  303. package/components/p-BWEZufiK.js +0 -4
  304. package/components/p-BqpciLfi.js +0 -4
  305. package/components/p-BsQPAqo9.js +0 -4
  306. package/components/p-CU5rbWAW.js +0 -4
  307. package/components/p-k_E4tX5Z.js +0 -4
  308. package/components/p-nyXeHk23.js +0 -4
  309. package/dist/cjs/config-xninhj0J.js +0 -201
  310. package/dist/collection/components/picker-legacy/animations/ios.enter.js +0 -27
  311. package/dist/collection/components/picker-legacy/animations/ios.leave.js +0 -23
  312. package/dist/collection/components/picker-legacy/picker-interface.js +0 -1
  313. package/dist/collection/components/picker-legacy/picker.ios.css +0 -300
  314. package/dist/collection/components/picker-legacy/picker.js +0 -890
  315. package/dist/collection/components/picker-legacy/picker.md.css +0 -287
  316. package/dist/collection/components/picker-legacy-column/picker-column.ios.css +0 -231
  317. package/dist/collection/components/picker-legacy-column/picker-column.js +0 -422
  318. package/dist/collection/components/picker-legacy-column/picker-column.md.css +0 -222
  319. package/dist/collection/components/picker-legacy-column/test/test.utils.js +0 -43
  320. package/dist/esm/config-DQCONYYp.js +0 -195
  321. package/dist/ionic/p-01f81ea5.entry.js +0 -4
  322. package/dist/ionic/p-0cc11f99.entry.js +0 -4
  323. package/dist/ionic/p-0dc33652.entry.js +0 -4
  324. package/dist/ionic/p-20b1a044.entry.js +0 -4
  325. package/dist/ionic/p-21eb76d5.entry.js +0 -4
  326. package/dist/ionic/p-27d30585.entry.js +0 -4
  327. package/dist/ionic/p-2a05aa64.entry.js +0 -4
  328. package/dist/ionic/p-2bb2cb18.entry.js +0 -4
  329. package/dist/ionic/p-485fda23.entry.js +0 -4
  330. package/dist/ionic/p-4baa5b82.entry.js +0 -4
  331. package/dist/ionic/p-5018dfc8.entry.js +0 -4
  332. package/dist/ionic/p-50e1194a.entry.js +0 -4
  333. package/dist/ionic/p-5eb8e86d.entry.js +0 -4
  334. package/dist/ionic/p-65ebdf1b.entry.js +0 -4
  335. package/dist/ionic/p-6ebdbebe.entry.js +0 -4
  336. package/dist/ionic/p-9f9db3a2.entry.js +0 -4
  337. package/dist/ionic/p-D-3ycHmd.js +0 -4
  338. package/dist/ionic/p-DzWaWHGc.js +0 -4
  339. package/dist/ionic/p-a21add2f.entry.js +0 -4
  340. package/dist/ionic/p-ca2ab74d.entry.js +0 -4
  341. package/dist/ionic/p-ec090e0a.entry.js +0 -4
  342. package/dist/types/components/picker-legacy/animations/ios.enter.d.ts +0 -5
  343. package/dist/types/components/picker-legacy/animations/ios.leave.d.ts +0 -5
  344. package/dist/types/components/picker-legacy/picker-interface.d.ts +0 -52
  345. package/dist/types/components/picker-legacy/picker.d.ts +0 -158
  346. package/dist/types/components/picker-legacy-column/picker-column.d.ts +0 -46
  347. package/dist/types/components/picker-legacy-column/test/test.utils.d.ts +0 -9
@@ -1,3 +1,168 @@
1
+ /**
2
+ * A heuristic that applies CSS to tablet
3
+ * viewports.
4
+ *
5
+ * Usage:
6
+ * @include tablet-viewport() {
7
+ * :host {
8
+ * background-color: green;
9
+ * }
10
+ * }
11
+ */
12
+ /**
13
+ * A heuristic that applies CSS to mobile
14
+ * viewports (i.e. phones, not tablets).
15
+ *
16
+ * Usage:
17
+ * @include mobile-viewport() {
18
+ * :host {
19
+ * background-color: blue;
20
+ * }
21
+ * }
22
+ */
23
+ /**
24
+ * Convert a font size to a dynamic font size.
25
+ * Fonts that participate in Dynamic Type should use
26
+ * dynamic font sizes.
27
+ * @param size - The initial font size including the unit (i.e. px or pt)
28
+ * @param unit (optional) - The unit to convert to. Use this if you want to
29
+ * convert to a unit other than $baselineUnit.
30
+ */
31
+ /**
32
+ * Convert a font size to a dynamic font size but impose
33
+ * a maximum font size.
34
+ * @param size - The initial font size including the unit (i.e. px or pt)
35
+ * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
36
+ * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
37
+ * convert to a unit other than $baselineUnit.
38
+ */
39
+ /**
40
+ * Convert a font size to a dynamic font size but impose
41
+ * a minimum font size.
42
+ * @param size - The initial font size including the unit (i.e. px or pt)
43
+ * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
44
+ * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
45
+ * convert to a unit other than $baselineUnit.
46
+ */
47
+ /**
48
+ * Convert a font size to a dynamic font size but impose
49
+ * maximum and minimum font sizes.
50
+ * @param size - The initial font size including the unit (i.e. px or pt)
51
+ * @param minScale - The minimum scale of the font (i.e. 0.8 for a minimum 80% scale).
52
+ * @param maxScale - The maximum scale of the font (i.e. 2.5 for a maximum 250% scale).
53
+ * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
54
+ * convert to a unit other than $baselineUnit.
55
+ */
56
+ .action-sheet-button-label-has-rich-content,
57
+ .alert-radio-label-has-rich-content,
58
+ .alert-checkbox-label-has-rich-content,
59
+ .select-option-label-has-rich-content {
60
+ display: flex;
61
+ align-items: center;
62
+ gap: 16px;
63
+ }
64
+
65
+ /**
66
+ * Outer label container has rich content
67
+ * (start, content, description, end) that needs the
68
+ * label to span the available row width.
69
+ */
70
+ .action-sheet-button-label-has-rich-content,
71
+ .alert-radio-label-has-rich-content,
72
+ .alert-checkbox-label-has-rich-content,
73
+ .select-option-content {
74
+ flex: 1;
75
+ }
76
+
77
+ .action-sheet-button-label-text,
78
+ .alert-checkbox-label-text,
79
+ .alert-radio-label-text,
80
+ .select-option-label-text {
81
+ display: flex;
82
+ align-items: center;
83
+ gap: 12px;
84
+ }
85
+
86
+ .select-option-start,
87
+ .select-option-end {
88
+ display: flex;
89
+ align-items: center;
90
+ gap: 8px;
91
+ }
92
+
93
+ .select-option-description {
94
+ padding-left: 0;
95
+ padding-right: 0;
96
+ padding-top: 5px;
97
+ padding-bottom: 0;
98
+ display: block;
99
+ color: var(--ion-color-step-700, var(--ion-text-color-step-300, #4d4d4d));
100
+ font-size: 0.75rem;
101
+ }
102
+
103
+ /**
104
+ * Non-rich labels are plain text and should ellipsize when they
105
+ * overflow the row. Rich-content labels switch to flex so the
106
+ * start / content / end pieces can lay out side-by-side and wrap.
107
+ */
108
+ .select-option-label:not(.select-option-label-has-rich-content) {
109
+ text-overflow: ellipsis;
110
+ white-space: nowrap;
111
+ overflow: hidden;
112
+ }
113
+
114
+ .select-option-label-has-rich-content {
115
+ display: flex;
116
+ align-items: center;
117
+ }
118
+
119
+ ion-radio.select-option-has-rich-content::part(label),
120
+ ion-checkbox.select-option-has-rich-content::part(label),
121
+ .select-option-content {
122
+ flex: 1;
123
+ /**
124
+ * Let rich content wrap instead of inheriting the label part's
125
+ * single-line truncation, so arbitrary slotted elements render
126
+ * without clipping.
127
+ */
128
+ white-space: normal;
129
+ }
130
+
131
+ /**
132
+ * Cap slotted children so they can't stretch the option
133
+ * row out of proportion, keeping rows visually uniform
134
+ * regardless of the content.
135
+ */
136
+ .select-option-start > ion-avatar,
137
+ .select-option-end > ion-avatar {
138
+ width: 40px;
139
+ height: 40px;
140
+ }
141
+
142
+ .select-option-start > ion-icon,
143
+ .select-option-end > ion-icon {
144
+ width: 24px;
145
+ height: 24px;
146
+ }
147
+
148
+ .select-option-start > ion-img,
149
+ .select-option-start > img,
150
+ .select-option-start > svg,
151
+ .select-option-start > ion-thumbnail,
152
+ .select-option-end > ion-img,
153
+ .select-option-end > img,
154
+ .select-option-end > svg,
155
+ .select-option-end > ion-thumbnail {
156
+ width: 56px;
157
+ height: 56px;
158
+ }
159
+
160
+ .select-option-start > video,
161
+ .select-option-end > video {
162
+ width: 114px;
163
+ height: 56px;
164
+ }
165
+
1
166
  /**
2
167
  * Convert a font size to a dynamic font size.
3
168
  * Fonts that participate in Dynamic Type should use
@@ -242,6 +407,39 @@
242
407
  min-height: inherit;
243
408
  }
244
409
 
410
+ /**
411
+ * Label is on the right of the radio in LTR and
412
+ * on the left in RTL.
413
+ */
414
+ .radio-label-placement-start,
415
+ .checkbox-label-placement-start {
416
+ flex-direction: row-reverse;
417
+ }
418
+
419
+ /**
420
+ * Label is on the left of the radio in LTR and
421
+ * on the right in RTL.
422
+ */
423
+ .radio-label-placement-end,
424
+ .checkbox-label-placement-end {
425
+ flex-direction: row;
426
+ }
427
+
428
+ .radio-justify-start,
429
+ .checkbox-justify-start {
430
+ justify-content: start;
431
+ }
432
+
433
+ .radio-justify-end,
434
+ .checkbox-justify-end {
435
+ justify-content: end;
436
+ }
437
+
438
+ .radio-justify-space-between,
439
+ .checkbox-justify-space-between {
440
+ justify-content: space-between;
441
+ }
442
+
245
443
  .alert-input-disabled,
246
444
  .alert-checkbox-button-disabled .alert-button-inner,
247
445
  .alert-radio-button-disabled .alert-button-inner {
@@ -419,10 +617,10 @@ textarea.alert-input {
419
617
  }
420
618
 
421
619
  .alert-head {
422
- -webkit-padding-start: 23px;
423
- padding-inline-start: 23px;
424
- -webkit-padding-end: 23px;
425
- padding-inline-end: 23px;
620
+ -webkit-padding-start: 24px;
621
+ padding-inline-start: 24px;
622
+ -webkit-padding-end: 24px;
623
+ padding-inline-end: 24px;
426
624
  padding-top: 20px;
427
625
  padding-bottom: 15px;
428
626
  text-align: start;
@@ -522,30 +720,56 @@ textarea.alert-input {
522
720
  }
523
721
 
524
722
  .alert-radio-label {
525
- -webkit-padding-start: 52px;
526
- padding-inline-start: 52px;
527
- -webkit-padding-end: 26px;
528
- padding-inline-end: 26px;
529
723
  padding-top: 13px;
530
724
  padding-bottom: 13px;
531
- flex: 1;
725
+ max-width: calc(100% - 20px);
532
726
  color: var(--ion-color-step-850, var(--ion-text-color-step-150, #262626));
533
727
  font-size: 1rem;
534
728
  }
535
729
 
730
+ .radio-label-placement-end .alert-radio-label {
731
+ /**
732
+ * The label's inline padding clears space for the icon on the icon's side.
733
+ * When the label is placed at the end, the icon is at the start, so the
734
+ * larger padding clears it on the start side.
735
+ */
736
+ -webkit-padding-start: 56px;
737
+ padding-inline-start: 56px;
738
+ -webkit-padding-end: 24px;
739
+ padding-inline-end: 24px;
740
+ }
741
+
742
+ .radio-label-placement-start .alert-radio-label {
743
+ /**
744
+ * The label's inline padding clears space for the icon on the icon's side.
745
+ * When the label is placed at the start, the icon is at the end, so the
746
+ * larger padding clears it on the end side.
747
+ */
748
+ -webkit-padding-start: 24px;
749
+ padding-inline-start: 24px;
750
+ -webkit-padding-end: 56px;
751
+ padding-inline-end: 56px;
752
+ }
753
+
536
754
  .alert-radio-icon {
537
755
  top: 0;
538
756
  border-radius: 50%;
539
757
  display: block;
540
758
  position: relative;
759
+ flex-shrink: 0;
541
760
  width: 20px;
542
761
  height: 20px;
543
762
  border-width: 2px;
544
763
  border-style: solid;
545
764
  border-color: var(--ion-color-step-550, var(--ion-background-color-step-550, #737373));
546
765
  }
547
- .alert-radio-icon {
548
- inset-inline-start: 26px;
766
+
767
+ .radio-label-placement-end .alert-radio-icon {
768
+ inset-inline-start: 24px;
769
+ }
770
+
771
+ .radio-label-placement-start .alert-radio-icon {
772
+ inset-inline-end: 24px;
549
773
  }
550
774
 
551
775
  .alert-radio-inner {
@@ -575,22 +799,42 @@ textarea.alert-input {
575
799
  }
576
800
 
577
801
  .alert-checkbox-label {
578
- -webkit-padding-start: 53px;
579
- padding-inline-start: 53px;
580
- -webkit-padding-end: 26px;
581
- padding-inline-end: 26px;
582
802
  padding-top: 13px;
583
803
  padding-bottom: 13px;
584
- flex: 1;
585
- width: calc(100% - 53px);
804
+ max-width: calc(100% - 16px);
586
805
  color: var(--ion-color-step-850, var(--ion-text-color-step-150, #262626));
587
806
  font-size: 1rem;
588
807
  }
589
808
 
809
+ .checkbox-label-placement-end .alert-checkbox-label {
810
+ /**
811
+ * The label's inline padding clears space for the icon on the icon's side.
812
+ * When the label is placed at the end, the icon is at the start, so the
813
+ * larger padding clears it on the start side.
814
+ */
815
+ -webkit-padding-start: 56px;
816
+ padding-inline-start: 56px;
817
+ -webkit-padding-end: 24px;
818
+ padding-inline-end: 24px;
819
+ }
820
+
821
+ .checkbox-label-placement-start .alert-checkbox-label {
822
+ /**
823
+ * The label's inline padding clears space for the icon on the icon's side.
824
+ * When the label is placed at the start, the icon is at the end, so the
825
+ * larger padding clears it on the end side.
826
+ */
827
+ -webkit-padding-start: 24px;
828
+ padding-inline-start: 24px;
829
+ -webkit-padding-end: 56px;
830
+ padding-inline-end: 56px;
831
+ }
832
+
590
833
  .alert-checkbox-icon {
591
834
  top: 0;
592
835
  border-radius: 2px;
593
836
  position: relative;
837
+ flex-shrink: 0;
594
838
  width: 16px;
595
839
  height: 16px;
596
840
  border-width: 2px;
@@ -598,8 +842,13 @@ textarea.alert-input {
598
842
  border-color: var(--ion-color-step-550, var(--ion-background-color-step-550, #737373));
599
843
  contain: strict;
600
844
  }
601
- .alert-checkbox-icon {
602
- inset-inline-start: 26px;
845
+
846
+ .checkbox-label-placement-end .alert-checkbox-icon {
847
+ inset-inline-start: 24px;
848
+ }
849
+
850
+ .checkbox-label-placement-start .alert-checkbox-icon {
851
+ inset-inline-end: 24px;
603
852
  }
604
853
 
605
854
  [aria-checked=true] .alert-checkbox-icon {
@@ -658,7 +907,7 @@ textarea.alert-input {
658
907
  overflow: hidden;
659
908
  }
660
909
 
661
- .alert-button-inner {
910
+ .alert-button-group .alert-button-inner {
662
911
  justify-content: flex-end;
663
912
  }
664
913
 
@@ -3,8 +3,11 @@
3
3
  */
4
4
  import { Host, h } from "@stencil/core";
5
5
  import { inheritAttributes } from "../../utils/helpers";
6
+ import { printIonWarning } from "../../utils/logging/index";
6
7
  import { getIonMode } from "../../global/ionic-global";
7
8
  /**
9
+ * @deprecated
10
+ *
8
11
  * @part image - The inner `img` element.
9
12
  */
10
13
  export class Img {
@@ -24,6 +27,8 @@ export class Img {
24
27
  this.inheritedAttributes = inheritAttributes(this.el, ['draggable']);
25
28
  }
26
29
  componentDidLoad() {
30
+ printIonWarning('[ion-img] - This component is deprecated and will be removed in Ionic v10. ' +
31
+ 'Use a native <img> with the loading="lazy" attribute instead.', this.el);
27
32
  this.addIO();
28
33
  }
29
34
  disconnectedCallback() {
@@ -76,7 +81,7 @@ export class Img {
76
81
  render() {
77
82
  const { loadSrc, alt, onLoad, loadError, inheritedAttributes } = this;
78
83
  const { draggable } = inheritedAttributes;
79
- return (h(Host, { key: '9bfaa659b0680189fd29f3acb2fdce7f70be6060', class: getIonMode(this) }, h("img", { key: 'd484beae0d5cbe0406958bfad40cdd6c05625340', decoding: "async", src: loadSrc, alt: alt, onLoad: onLoad, onError: loadError, part: "image", draggable: isDraggable(draggable) })));
84
+ return (h(Host, { key: '57bfb44d9850381fe7b6fcf0c9019b03f7ef86ec', class: getIonMode(this) }, h("img", { key: '888ec06a266fa2751fc0147ede6a567f4e2b29a6', decoding: "async", src: loadSrc, alt: alt, onLoad: onLoad, onError: loadError, part: "image", draggable: isDraggable(draggable) })));
80
85
  }
81
86
  static get is() { return "ion-img"; }
82
87
  static get encapsulation() { return "shadow"; }
@@ -56,7 +56,7 @@ export class Input {
56
56
  /**
57
57
  * Whether auto correction should be enabled when the user is entering/editing the text value.
58
58
  */
59
- this.autocorrect = 'off';
59
+ this.autocorrect = false;
60
60
  /**
61
61
  * Sets the [`autofocus` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/autofocus) on the native input element.
62
62
  *
@@ -540,7 +540,7 @@ export class Input {
540
540
  * TODO(FW-5592): Remove hasStartEndSlots condition
541
541
  */
542
542
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
543
- return (h(Host, { key: '9ba9cf425b573d2ca9ac34455a0e6b8474c4de6d', class: createColorClasses(this.color, {
543
+ return (h(Host, { key: '6a05f61339d8045285d5820c2508296cc842c210', class: createColorClasses(this.color, {
544
544
  [mode]: true,
545
545
  'has-value': hasValue,
546
546
  'has-focus': hasFocus,
@@ -551,14 +551,14 @@ export class Input {
551
551
  'in-item': inItem,
552
552
  'in-item-color': hostContext('ion-item.ion-color', this.el),
553
553
  'input-disabled': disabled,
554
- }) }, h("label", { key: '74b989d0aa5ab38f29f952519868f05119df6005', class: "input-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, this.renderLabelContainer(), h("div", { key: '47f2b42e2f74ea866b4f871026e08ab375d7a726', class: "native-wrapper", onClick: this.onLabelClick }, h("slot", { key: 'eaabe5a4a329a356cac3294d15c087d0d131fff2', name: "start" }), h("input", Object.assign({ key: 'c821a984a8a9b7f96f30892c06d8deda093ff24b', class: "native-input", ref: (input) => (this.nativeInput = input), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, min: this.min, max: this.max, minLength: this.minlength, maxLength: this.maxlength, multiple: this.multiple, name: this.name, pattern: this.pattern, placeholder: this.placeholder || '', readOnly: readonly, required: this.required, spellcheck: this.spellcheck, step: this.step, type: this.type, value: value, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeydown, onCompositionstart: this.onCompositionStart, onCompositionend: this.onCompositionEnd, "aria-describedby": this.getHintTextID(), "aria-invalid": this.isInvalid ? 'true' : undefined, "aria-labelledby": this.getLabelledById() }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (h("button", { key: '62069c11016ee190dc46ab941372e1c4ad8a36ed', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
554
+ }) }, h("label", { key: 'b546d66f53ea25082494e3a4cb0ce7532ee649d7', class: "input-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, this.renderLabelContainer(), h("div", { key: '6af832f2b25fadee7a49adb999166dbc97565e2d', class: "native-wrapper", onClick: this.onLabelClick }, h("slot", { key: 'e7a8895038a8d2503f646acfda20c6c1a99c2839', name: "start" }), h("input", Object.assign({ key: 'ce85703e0434a6322bb4275a924e3cd91c79fa20', class: "native-input", ref: (input) => (this.nativeInput = input), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect ? 'on' : 'off', autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, min: this.min, max: this.max, minLength: this.minlength, maxLength: this.maxlength, multiple: this.multiple, name: this.name, pattern: this.pattern, placeholder: this.placeholder || '', readOnly: readonly, required: this.required, spellcheck: this.spellcheck, step: this.step, type: this.type, value: value, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeydown, onCompositionstart: this.onCompositionStart, onCompositionend: this.onCompositionEnd, "aria-describedby": this.getHintTextID(), "aria-invalid": this.isInvalid ? 'true' : undefined, "aria-labelledby": this.getLabelledById() }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (h("button", { key: '1e59589fc89a37d7830dc915b4c19d26a8f568c7', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
555
555
  /**
556
556
  * This prevents mobile browsers from
557
557
  * blurring the input when the clear
558
558
  * button is activated.
559
559
  */
560
560
  ev.preventDefault();
561
- }, onClick: this.clearTextInput }, h("ion-icon", { key: 'dd75a516d32110d85382b664c663bd41f177ce12', "aria-hidden": "true", icon: clearIconData }))), h("slot", { key: '330d4b9389f2c62223a5ee24003e96ef3e6b2473', name: "end" })), shouldRenderHighlight && h("div", { key: '8e442bed130ddc84976ab70fd3f8578d6bcc6316', class: "input-highlight" })), this.renderBottomContent()));
561
+ }, onClick: this.clearTextInput }, h("ion-icon", { key: '7d443c5061bf6436d3b77a2444676c679b3e62e4', "aria-hidden": "true", icon: clearIconData }))), h("slot", { key: '5516f88d46886348217570ec1fadda0b79b63c01', name: "end" })), shouldRenderHighlight && h("div", { key: '2a1fdb7e7c974654dfbb3afb4fbfd9204e9d9092', class: "input-highlight" })), this.renderBottomContent()));
562
562
  }
563
563
  static get is() { return "ion-input"; }
564
564
  static get encapsulation() { return "scoped"; }
@@ -650,11 +650,11 @@ export class Input {
650
650
  "defaultValue": "'off'"
651
651
  },
652
652
  "autocorrect": {
653
- "type": "string",
653
+ "type": "boolean",
654
654
  "mutable": false,
655
655
  "complexType": {
656
- "original": "'on' | 'off'",
657
- "resolved": "\"off\" | \"on\"",
656
+ "original": "boolean",
657
+ "resolved": "boolean",
658
658
  "references": {}
659
659
  },
660
660
  "required": false,
@@ -667,7 +667,7 @@ export class Input {
667
667
  "setter": false,
668
668
  "reflect": false,
669
669
  "attribute": "autocorrect",
670
- "defaultValue": "'off'"
670
+ "defaultValue": "false"
671
671
  },
672
672
  "autofocus": {
673
673
  "type": "boolean",
@@ -5,7 +5,7 @@ import { Host, h } from "@stencil/core";
5
5
  import { ENABLE_HTML_CONTENT_DEFAULT } from "../../utils/config";
6
6
  import { raf } from "../../utils/helpers";
7
7
  import { createLockController } from "../../utils/lock-controller";
8
- import { BACKDROP, dismiss, eventMethod, prepareOverlay, present, createDelegateController, createTriggerController, setOverlayId, } from "../../utils/overlays";
8
+ import { BACKDROP, cleanupRootFocusTrapAccessibility, createDelegateController, createTriggerController, dismiss, eventMethod, prepareOverlay, present, setOverlayId, } from "../../utils/overlays";
9
9
  import { sanitizeDOMString } from "../../utils/sanitization/index";
10
10
  import { getClassMap } from "../../utils/theme";
11
11
  import { config } from "../../global/config";
@@ -114,6 +114,10 @@ export class Loading {
114
114
  }
115
115
  disconnectedCallback() {
116
116
  this.triggerController.removeClickListener();
117
+ // Clean up aria-hidden if removed without dismiss() being called
118
+ if (this.presented) {
119
+ cleanupRootFocusTrapAccessibility();
120
+ }
117
121
  }
118
122
  /**
119
123
  * Present the loading overlay after it has been created.
@@ -179,9 +183,9 @@ export class Loading {
179
183
  * Otherwise, don't set aria-labelledby.
180
184
  */
181
185
  const ariaLabelledBy = message !== undefined ? msgId : null;
182
- return (h(Host, Object.assign({ key: 'f86ddbc600cb5c396b7de38fb5f49625388c3c3f', role: "dialog", "aria-modal": "true", "aria-labelledby": ariaLabelledBy, tabindex: "-1" }, htmlAttributes, { style: {
186
+ return (h(Host, Object.assign({ key: 'ab48bfcee8f7e3e33847a2f262fdc08b9ea804ca', role: "dialog", "aria-modal": "true", "aria-labelledby": ariaLabelledBy, tabindex: "-1" }, htmlAttributes, { style: {
183
187
  zIndex: `${40000 + this.overlayIndex}`,
184
- }, onIonBackdropTap: this.onBackdropTap, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'loading-translucent': this.translucent }) }), h("ion-backdrop", { key: 'b53727aaddc37ef3c685fcc150c6d5193290a847', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: '4c61bede8e0a4e47daa6f1f9d0f364ef6aec0bc3', tabindex: "0", "aria-hidden": "true" }), h("div", { key: '84e51ceb07118f1eaeb757df28801c255496931b', class: "loading-wrapper ion-overlay-wrapper" }, spinner && (h("div", { key: 'fc97f1912e0fc558b7c309a5bc084415f5f620b2', class: "loading-spinner" }, h("ion-spinner", { key: '6e186d856cd3f10f22c3e317ef00f31b4216459c', name: spinner, "aria-hidden": "true" }))), message !== undefined && this.renderLoadingMessage(msgId)), h("div", { key: 'dcbe9d9a619daa1c08174e73827bdabeb59dde92', tabindex: "0", "aria-hidden": "true" })));
188
+ }, onIonBackdropTap: this.onBackdropTap, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'loading-translucent': this.translucent }) }), h("ion-backdrop", { key: '41baccc7fb6474389a3a3431c208e829ef738b75', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: '7b7290974abbe8db8739b19835aca9f8b5c271c2', tabindex: "0", "aria-hidden": "true" }), h("div", { key: 'e32466abfcc92aaad47ea03b1dcb49f66abe4b63', class: "loading-wrapper ion-overlay-wrapper" }, spinner && (h("div", { key: 'c5e6e6f9e3f39dba0225d08d7dd2c1b96a1d83c7', class: "loading-spinner" }, h("ion-spinner", { key: 'f428038959d879404ea898011363aac0b807ad11', name: spinner, "aria-hidden": "true" }))), message !== undefined && this.renderLoadingMessage(msgId)), h("div", { key: '490e531367b86c319fa4260722dcff4dd631fa88', tabindex: "0", "aria-hidden": "true" })));
185
189
  }
186
190
  static get is() { return "ion-loading"; }
187
191
  static get encapsulation() { return "scoped"; }
@@ -126,14 +126,6 @@ ion-backdrop {
126
126
  z-index: 10;
127
127
  }
128
128
 
129
- /**
130
- * The wrapper receives programmatic focus for screen readers but should not
131
- * show a visible focus ring, which is meant only for keyboard navigation.
132
- */
133
- .modal-wrapper {
134
- outline: none;
135
- }
136
-
137
129
  .modal-shadow {
138
130
  position: absolute;
139
131
  background: transparent;
@@ -8,7 +8,7 @@ import { raf, inheritAttributes, hasLazyBuild, getElementRoot } from "../../util
8
8
  import { createLockController } from "../../utils/lock-controller";
9
9
  import { printIonWarning } from "../../utils/logging/index";
10
10
  import { Style as StatusBarStyle, StatusBar } from "../../utils/native/status-bar";
11
- import { GESTURE, BACKDROP, dismiss, eventMethod, prepareOverlay, present, createTriggerController, setOverlayId, FOCUS_TRAP_DISABLE_CLASS, } from "../../utils/overlays";
11
+ import { BACKDROP, cleanupRootFocusTrapAccessibility, createTriggerController, dismiss, eventMethod, FOCUS_TRAP_DISABLE_CLASS, GESTURE, prepareOverlay, present, setOverlayId, } from "../../utils/overlays";
12
12
  import { getClassMap } from "../../utils/theme";
13
13
  import { deepReady, waitForMount } from "../../utils/transition/index";
14
14
  import { config } from "../../global/config";
@@ -77,13 +77,20 @@ export class Modal {
77
77
  /**
78
78
  * The interaction behavior for the sheet modal when the handle is pressed.
79
79
  *
80
- * Defaults to `"none"`, which means the modal will not change size or position when the handle is pressed.
81
- * Set to `"cycle"` to let the modal cycle between available breakpoints when pressed.
80
+ * Handle behavior is unavailable when the `handle` property is set to
81
+ * `false` or when the `breakpoints` property is not set (using a
82
+ * fullscreen or card modal).
82
83
  *
83
- * Handle behavior is unavailable when the `handle` property is set to `false` or
84
- * when the `breakpoints` property is not set (using a fullscreen or card modal).
84
+ * Set to `"cycle"` to make the handle focusable and let the sheet modal
85
+ * cycle between available breakpoints when pressed. This keeps the sheet
86
+ * operable with assistive technology.
87
+ *
88
+ * Set to `"none"` to make the handle purely decorative when pressed and
89
+ * removed from the tab order.
90
+ *
91
+ * Defaults to `"cycle"`.
85
92
  */
86
- this.handleBehavior = 'none';
93
+ this.handleBehavior = 'cycle';
87
94
  /**
88
95
  * If `true`, the modal will be dismissed when the backdrop is clicked.
89
96
  */
@@ -275,6 +282,10 @@ export class Modal {
275
282
  // Also called in dismiss() — intentional dual cleanup covers both
276
283
  // dismiss-then-remove and direct DOM removal without dismiss.
277
284
  this.cleanupSafeAreaOverrides();
285
+ // Clean up aria-hidden if removed without dismiss() being called
286
+ if (this.presented) {
287
+ cleanupRootFocusTrapAccessibility();
288
+ }
278
289
  }
279
290
  componentWillLoad() {
280
291
  var _a;
@@ -1162,26 +1173,20 @@ export class Modal {
1162
1173
  const isCardModal = presentingElement !== undefined && mode === 'ios';
1163
1174
  const isHandleCycle = handleBehavior === 'cycle';
1164
1175
  const isSheetModalWithHandle = isSheetModal && showHandle;
1165
- return (h(Host, Object.assign({ key: 'ab93657f4a5b4c97168d292b398d975e4b5b4af4', "no-router": true,
1176
+ return (h(Host, Object.assign({ key: '528f9e354f470e22563938e7531e3f23a97e4200', "no-router": true,
1166
1177
  // Allow the modal to be navigable when the handle is focusable
1167
1178
  tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1 }, htmlAttributes, { style: {
1168
1179
  zIndex: `${20000 + this.overlayIndex}`,
1169
- }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), h("ion-backdrop", { key: '5ba6315c7c8c64fa04c62f85fd493da5275b2cbd', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: 'a76c48d41c67f86c18a7481e980e6925e614f85d', class: "modal-shadow" }), h("div", Object.assign({ key: 'dccf3c774355429bc0ea7461d9b1ef941ea91902',
1180
+ }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), h("ion-backdrop", { key: '53983c96bc6b30df89986c8d9c978a8e6f78fe80', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: '34288a7343b7c47fed00d3abc73957f45f06d2fd', class: "modal-shadow" }), h("div", Object.assign({ key: 'f9b37f547bd5c61037bbad1a71bfed80ba8c630b',
1170
1181
  /*
1171
1182
  role and aria-modal must be used on the
1172
1183
  same element. They must also be set inside the
1173
1184
  shadow DOM otherwise ion-button will not be highlighted
1174
1185
  when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
1175
-
1176
- tabIndex={-1} is required so present() can move focus to this
1177
- element (which carries the dialog role) instead of the role-less
1178
- host. role="dialog" alone does not make an element focusable, so
1179
- without the tabindex focus() would be a no-op and screen readers
1180
- may not properly announce the dialog and its content when it opens.
1181
1186
  */
1182
- role: "dialog" }, inheritedAttributes, { "aria-modal": "true", tabIndex: -1, class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { key: 'ba4ebd6364faba46ac8532d1c83cb655ae873a14', class: "modal-handle",
1187
+ role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { key: 'b8741594108d3ea681ff41ff8f2241a4119578b1', class: "modal-handle",
1183
1188
  // Prevents the handle from receiving keyboard focus when it does not cycle
1184
- tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), h("slot", { key: '11d5921a8ebbcd0017d4f28a33d68049253f63f0', onSlotchange: this.onSlotChange }))));
1189
+ tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), h("slot", { key: 'bcc7960fae3fed09076c704d08c3afc46caa0738', onSlotchange: this.onSlotChange }))));
1185
1190
  }
1186
1191
  static get is() { return "ion-modal"; }
1187
1192
  static get encapsulation() { return "shadow"; }
@@ -1453,13 +1458,13 @@ export class Modal {
1453
1458
  "optional": true,
1454
1459
  "docs": {
1455
1460
  "tags": [],
1456
- "text": "The interaction behavior for the sheet modal when the handle is pressed.\n\nDefaults to `\"none\"`, which means the modal will not change size or position when the handle is pressed.\nSet to `\"cycle\"` to let the modal cycle between available breakpoints when pressed.\n\nHandle behavior is unavailable when the `handle` property is set to `false` or\nwhen the `breakpoints` property is not set (using a fullscreen or card modal)."
1461
+ "text": "The interaction behavior for the sheet modal when the handle is pressed.\n\nHandle behavior is unavailable when the `handle` property is set to\n`false` or when the `breakpoints` property is not set (using a\nfullscreen or card modal).\n\nSet to `\"cycle\"` to make the handle focusable and let the sheet modal\ncycle between available breakpoints when pressed. This keeps the sheet\noperable with assistive technology.\n\nSet to `\"none\"` to make the handle purely decorative when pressed and\nremoved from the tab order.\n\nDefaults to `\"cycle\"`."
1457
1462
  },
1458
1463
  "getter": false,
1459
1464
  "setter": false,
1460
1465
  "reflect": false,
1461
1466
  "attribute": "handle-behavior",
1462
- "defaultValue": "'none'"
1467
+ "defaultValue": "'cycle'"
1463
1468
  },
1464
1469
  "component": {
1465
1470
  "type": "string",
@@ -126,14 +126,6 @@ ion-backdrop {
126
126
  z-index: 10;
127
127
  }
128
128
 
129
- /**
130
- * The wrapper receives programmatic focus for screen readers but should not
131
- * show a visible focus ring, which is meant only for keyboard navigation.
132
- */
133
- .modal-wrapper {
134
- outline: none;
135
- }
136
-
137
129
  .modal-shadow {
138
130
  position: absolute;
139
131
  background: transparent;
@@ -177,6 +177,21 @@
177
177
  }
178
178
  }
179
179
 
180
+ :host(.select-popover-rich-content) {
181
+ /**
182
+ * Rich content options (start/end slots, descriptions) need
183
+ * more horizontal space than the default fixed width provides,
184
+ * otherwise content gets cut off.
185
+ *
186
+ * A viewport-relative value is used instead of `auto` or
187
+ * `max-content` because the enter animation reads `--width`
188
+ * via getBoundingClientRect() before the first layout pass
189
+ * completes. Intrinsic values return 0 at that point and
190
+ * cause the popover to be positioned off-screen on first open.
191
+ */
192
+ --width: clamp(250px, calc(100vw - 40px), 400px);
193
+ }
194
+
180
195
  /**
181
196
  * Convert a font size to a dynamic font size.
182
197
  * Fonts that participate in Dynamic Type should use