@ionic/core 8.4.2-dev.11739468652.1ae78967 → 8.4.2-dev.11741080979.1715cc06

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 (540) hide show
  1. package/components/backdrop.js +1 -1
  2. package/components/focus-visible.js +16 -1
  3. package/components/helpers.js +39 -1
  4. package/components/ion-app.js +9 -4
  5. package/components/ion-avatar.js +3 -3
  6. package/components/ion-badge.js +9 -6
  7. package/components/ion-searchbar.js +21 -5
  8. package/components/ion-textarea.js +6 -5
  9. package/css/ionic/bundle.ionic.css +1 -1
  10. package/css/ionic/bundle.ionic.css.map +1 -1
  11. package/css/ionic/core.ionic.css.map +1 -1
  12. package/css/ionic/global.bundle.ionic.css +1 -1
  13. package/css/ionic/global.bundle.ionic.css.map +1 -1
  14. package/css/ionic/link.ionic.css +1 -1
  15. package/css/ionic/link.ionic.css.map +1 -1
  16. package/css/ionic/typography.ionic.css.map +1 -1
  17. package/css/ionic/utils.bundle.ionic.css +1 -1
  18. package/css/ionic/utils.bundle.ionic.css.map +1 -1
  19. package/dist/cjs/{animation-58015a44.js → animation-2a0332b1.js} +1 -1
  20. package/dist/cjs/{app-globals-d64148d3.js → app-globals-4578d70b.js} +1 -1
  21. package/dist/cjs/{button-active-ec1fd1d8.js → button-active-ba88bc3f.js} +1 -1
  22. package/dist/cjs/{capacitor-454dd071.js → capacitor-ca383c28.js} +1 -1
  23. package/dist/cjs/{data-5a4013f1.js → data-03effdb6.js} +1 -1
  24. package/dist/cjs/{focus-visible-9aa87fa3.js → focus-visible-fe3acfb5.js} +16 -0
  25. package/dist/cjs/{framework-delegate-32f1a0e4.js → framework-delegate-709f0e46.js} +1 -1
  26. package/dist/cjs/{haptic-7c25be74.js → haptic-adbf56c4.js} +1 -1
  27. package/dist/cjs/{helpers-4e2936d2.js → helpers-7ae114be.js} +39 -1
  28. package/dist/cjs/{index-03fbee1d.js → index-334da068.js} +3 -3
  29. package/dist/cjs/{index-0e0c6196.js → index-a05f157b.js} +3 -2
  30. package/dist/cjs/{index-604c36ae.js → index-b980fd83.js} +2 -2
  31. package/dist/cjs/{index-8f975cf4.js → index-e28c2cc7.js} +4 -4
  32. package/dist/cjs/index.cjs.js +10 -9
  33. package/dist/cjs/{input-shims-4b4d2251.js → input-shims-41e05551.js} +6 -5
  34. package/dist/cjs/{input.utils-fb1debe4.js → input.utils-01401fa8.js} +2 -2
  35. package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -2
  36. package/dist/cjs/ion-action-sheet.cjs.entry.js +9 -8
  37. package/dist/cjs/ion-alert.cjs.entry.js +9 -8
  38. package/dist/cjs/ion-app_8.cjs.entry.js +18 -13
  39. package/dist/cjs/ion-avatar_3.cjs.entry.js +11 -9
  40. package/dist/cjs/ion-back-button.cjs.entry.js +3 -2
  41. package/dist/cjs/ion-backdrop.cjs.entry.js +2 -2
  42. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +3 -2
  43. package/dist/cjs/ion-button_2.cjs.entry.js +3 -2
  44. package/dist/cjs/ion-card_5.cjs.entry.js +3 -2
  45. package/dist/cjs/ion-checkbox.cjs.entry.js +3 -2
  46. package/dist/cjs/ion-chip.cjs.entry.js +1 -1
  47. package/dist/cjs/ion-col_3.cjs.entry.js +1 -1
  48. package/dist/cjs/ion-datetime-button.cjs.entry.js +4 -3
  49. package/dist/cjs/ion-datetime_3.cjs.entry.js +9 -9
  50. package/dist/cjs/ion-fab_3.cjs.entry.js +3 -2
  51. package/dist/cjs/ion-img.cjs.entry.js +3 -2
  52. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +4 -3
  53. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +1 -1
  54. package/dist/cjs/ion-input.cjs.entry.js +5 -4
  55. package/dist/cjs/ion-item-option_3.cjs.entry.js +4 -3
  56. package/dist/cjs/ion-item_8.cjs.entry.js +3 -2
  57. package/dist/cjs/ion-loading.cjs.entry.js +6 -5
  58. package/dist/cjs/ion-menu_3.cjs.entry.js +7 -6
  59. package/dist/cjs/ion-modal.cjs.entry.js +11 -10
  60. package/dist/cjs/ion-nav_2.cjs.entry.js +6 -5
  61. package/dist/cjs/ion-picker-column-option.cjs.entry.js +3 -2
  62. package/dist/cjs/ion-picker-column.cjs.entry.js +5 -4
  63. package/dist/cjs/ion-picker.cjs.entry.js +2 -1
  64. package/dist/cjs/ion-popover.cjs.entry.js +7 -6
  65. package/dist/cjs/ion-progress-bar.cjs.entry.js +3 -2
  66. package/dist/cjs/ion-radio_2.cjs.entry.js +3 -2
  67. package/dist/cjs/ion-range.cjs.entry.js +4 -3
  68. package/dist/cjs/ion-refresher_2.cjs.entry.js +7 -6
  69. package/dist/cjs/ion-reorder_2.cjs.entry.js +6 -5
  70. package/dist/cjs/ion-ripple-effect.cjs.entry.js +1 -1
  71. package/dist/cjs/ion-route_4.cjs.entry.js +3 -2
  72. package/dist/cjs/ion-searchbar.cjs.entry.js +23 -7
  73. package/dist/cjs/ion-segment_2.cjs.entry.js +3 -2
  74. package/dist/cjs/ion-select-modal.cjs.entry.js +5 -4
  75. package/dist/cjs/ion-select_3.cjs.entry.js +6 -5
  76. package/dist/cjs/ion-spinner.cjs.entry.js +1 -1
  77. package/dist/cjs/ion-split-pane.cjs.entry.js +1 -1
  78. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +6 -5
  79. package/dist/cjs/ion-tab_2.cjs.entry.js +3 -2
  80. package/dist/cjs/ion-text.cjs.entry.js +1 -1
  81. package/dist/cjs/ion-textarea.cjs.entry.js +11 -9
  82. package/dist/cjs/ion-toast.cjs.entry.js +6 -5
  83. package/dist/cjs/ion-toggle.cjs.entry.js +5 -4
  84. package/dist/cjs/{ionic-global-14af9c21.js → ionic-global-309eea24.js} +5 -5
  85. package/dist/cjs/ionic.cjs.js +3 -3
  86. package/dist/cjs/{ios.transition-2bb0f7d5.js → ios.transition-433559be.js} +5 -4
  87. package/dist/cjs/{keyboard-0a5d46dd.js → keyboard-2465fd71.js} +3 -3
  88. package/dist/cjs/{keyboard-53c12a15.js → keyboard-b0d97d7f.js} +1 -1
  89. package/dist/cjs/{keyboard-controller-102bad3e.js → keyboard-controller-97c0f679.js} +2 -2
  90. package/dist/cjs/loader.cjs.js +3 -3
  91. package/dist/cjs/{md.transition-cf600117.js → md.transition-cb55340c.js} +5 -4
  92. package/dist/cjs/{notch-controller-ea70e230.js → notch-controller-fa2844a9.js} +2 -2
  93. package/dist/cjs/{overlays-542a90b3.js → overlays-2f1007d0.js} +3 -3
  94. package/dist/cjs/{status-tap-aa97d209.js → status-tap-fce5d44e.js} +4 -3
  95. package/dist/cjs/{swipe-back-27975274.js → swipe-back-8b3f8972.js} +2 -1
  96. package/dist/collection/components/app/app.js +14 -6
  97. package/dist/collection/components/avatar/avatar.ionic.css +17 -0
  98. package/dist/collection/components/avatar/avatar.ios.css +1 -0
  99. package/dist/collection/components/avatar/avatar.md.css +9 -0
  100. package/dist/collection/components/backdrop/backdrop.ionic.css +0 -1
  101. package/dist/collection/components/badge/badge.ionic.css +66 -2
  102. package/dist/collection/components/badge/badge.ios.css +23 -2
  103. package/dist/collection/components/badge/badge.js +21 -2
  104. package/dist/collection/components/badge/badge.md.css +23 -2
  105. package/dist/collection/components/searchbar/searchbar.ionic.css +12 -0
  106. package/dist/collection/components/searchbar/searchbar.js +36 -4
  107. package/dist/collection/components/textarea/textarea.ionic.css +25 -2
  108. package/dist/collection/components/textarea/textarea.js +5 -4
  109. package/dist/collection/utils/focus-visible.js +15 -0
  110. package/dist/collection/utils/helpers.js +39 -1
  111. package/dist/docs.json +71 -4
  112. package/dist/esm/{animation-f1a88600.js → animation-9425a7de.js} +1 -1
  113. package/dist/esm/{app-globals-eceadabb.js → app-globals-e7b9ec58.js} +1 -1
  114. package/dist/esm/{button-active-321f0dba.js → button-active-3461e57c.js} +1 -1
  115. package/dist/esm/{capacitor-6b0341c8.js → capacitor-74587d3c.js} +1 -1
  116. package/dist/esm/{data-98c06dea.js → data-69fcc43c.js} +1 -1
  117. package/dist/esm/{focus-visible-501aff19.js → focus-visible-6827442c.js} +16 -1
  118. package/dist/esm/{framework-delegate-3e4a8c9f.js → framework-delegate-89969cd9.js} +1 -1
  119. package/dist/esm/{haptic-dd6c0ea9.js → haptic-1f990858.js} +1 -1
  120. package/dist/esm/{helpers-f08d15bd.js → helpers-2891ef8a.js} +39 -1
  121. package/dist/esm/{index-59f81cb8.js → index-01a5c404.js} +4 -4
  122. package/dist/esm/{index-31109e63.js → index-3e251942.js} +3 -3
  123. package/dist/esm/{index-7bd160c2.js → index-784203dc.js} +2 -2
  124. package/dist/esm/{index-62b4a18b.js → index-7d582503.js} +3 -2
  125. package/dist/esm/index.js +10 -9
  126. package/dist/esm/{input-shims-6be83e59.js → input-shims-eb19958d.js} +6 -5
  127. package/dist/esm/{input.utils-67459bae.js → input.utils-021846b8.js} +2 -2
  128. package/dist/esm/ion-accordion_2.entry.js +3 -2
  129. package/dist/esm/ion-action-sheet.entry.js +9 -8
  130. package/dist/esm/ion-alert.entry.js +9 -8
  131. package/dist/esm/ion-app_8.entry.js +18 -13
  132. package/dist/esm/ion-avatar_3.entry.js +11 -9
  133. package/dist/esm/ion-back-button.entry.js +3 -2
  134. package/dist/esm/ion-backdrop.entry.js +2 -2
  135. package/dist/esm/ion-breadcrumb_2.entry.js +3 -2
  136. package/dist/esm/ion-button_2.entry.js +3 -2
  137. package/dist/esm/ion-card_5.entry.js +3 -2
  138. package/dist/esm/ion-checkbox.entry.js +3 -2
  139. package/dist/esm/ion-chip.entry.js +1 -1
  140. package/dist/esm/ion-col_3.entry.js +1 -1
  141. package/dist/esm/ion-datetime-button.entry.js +4 -3
  142. package/dist/esm/ion-datetime_3.entry.js +9 -9
  143. package/dist/esm/ion-fab_3.entry.js +3 -2
  144. package/dist/esm/ion-img.entry.js +3 -2
  145. package/dist/esm/ion-infinite-scroll_2.entry.js +4 -3
  146. package/dist/esm/ion-input-password-toggle.entry.js +1 -1
  147. package/dist/esm/ion-input.entry.js +5 -4
  148. package/dist/esm/ion-item-option_3.entry.js +4 -3
  149. package/dist/esm/ion-item_8.entry.js +3 -2
  150. package/dist/esm/ion-loading.entry.js +6 -5
  151. package/dist/esm/ion-menu_3.entry.js +7 -6
  152. package/dist/esm/ion-modal.entry.js +11 -10
  153. package/dist/esm/ion-nav_2.entry.js +6 -5
  154. package/dist/esm/ion-picker-column-option.entry.js +3 -2
  155. package/dist/esm/ion-picker-column.entry.js +5 -4
  156. package/dist/esm/ion-picker.entry.js +2 -1
  157. package/dist/esm/ion-popover.entry.js +7 -6
  158. package/dist/esm/ion-progress-bar.entry.js +3 -2
  159. package/dist/esm/ion-radio_2.entry.js +3 -2
  160. package/dist/esm/ion-range.entry.js +4 -3
  161. package/dist/esm/ion-refresher_2.entry.js +7 -6
  162. package/dist/esm/ion-reorder_2.entry.js +6 -5
  163. package/dist/esm/ion-ripple-effect.entry.js +1 -1
  164. package/dist/esm/ion-route_4.entry.js +3 -2
  165. package/dist/esm/ion-searchbar.entry.js +23 -7
  166. package/dist/esm/ion-segment_2.entry.js +3 -2
  167. package/dist/esm/ion-select-modal.entry.js +5 -4
  168. package/dist/esm/ion-select_3.entry.js +6 -5
  169. package/dist/esm/ion-spinner.entry.js +1 -1
  170. package/dist/esm/ion-split-pane.entry.js +1 -1
  171. package/dist/esm/ion-tab-bar_2.entry.js +6 -5
  172. package/dist/esm/ion-tab_2.entry.js +3 -2
  173. package/dist/esm/ion-text.entry.js +1 -1
  174. package/dist/esm/ion-textarea.entry.js +11 -9
  175. package/dist/esm/ion-toast.entry.js +6 -5
  176. package/dist/esm/ion-toggle.entry.js +5 -4
  177. package/dist/esm/{ionic-global-3c97a4aa.js → ionic-global-483790dd.js} +5 -5
  178. package/dist/esm/ionic.js +3 -3
  179. package/dist/esm/{ios.transition-06b78ea0.js → ios.transition-9da97621.js} +5 -4
  180. package/dist/esm/{keyboard-9bbd546a.js → keyboard-16dbc7a0.js} +1 -1
  181. package/dist/esm/{keyboard-5b1b354d.js → keyboard-a762a3d6.js} +3 -3
  182. package/dist/esm/{keyboard-controller-aff395fd.js → keyboard-controller-ebc0c1a6.js} +2 -2
  183. package/dist/esm/loader.js +3 -3
  184. package/dist/esm/{md.transition-e5712bda.js → md.transition-9d6d778a.js} +5 -4
  185. package/dist/esm/{notch-controller-c0bd22ff.js → notch-controller-ab0c0e81.js} +2 -2
  186. package/dist/esm/{overlays-66cb5522.js → overlays-e1400470.js} +3 -3
  187. package/dist/esm/{status-tap-edf9f395.js → status-tap-e7f5aa77.js} +4 -3
  188. package/dist/esm/{swipe-back-17c42610.js → swipe-back-e12c482f.js} +2 -1
  189. package/dist/esm-es5/{animation-f1a88600.js → animation-9425a7de.js} +1 -1
  190. package/dist/esm-es5/app-globals-e7b9ec58.js +4 -0
  191. package/dist/esm-es5/{button-active-321f0dba.js → button-active-3461e57c.js} +1 -1
  192. package/dist/esm-es5/{capacitor-6b0341c8.js → capacitor-74587d3c.js} +1 -1
  193. package/dist/esm-es5/{data-98c06dea.js → data-69fcc43c.js} +1 -1
  194. package/dist/esm-es5/focus-visible-6827442c.js +4 -0
  195. package/dist/esm-es5/{framework-delegate-3e4a8c9f.js → framework-delegate-89969cd9.js} +1 -1
  196. package/dist/esm-es5/{haptic-dd6c0ea9.js → haptic-1f990858.js} +1 -1
  197. package/dist/esm-es5/helpers-2891ef8a.js +4 -0
  198. package/dist/esm-es5/{index-59f81cb8.js → index-01a5c404.js} +1 -1
  199. package/dist/esm-es5/{index-31109e63.js → index-3e251942.js} +1 -1
  200. package/dist/esm-es5/{index-7bd160c2.js → index-784203dc.js} +1 -1
  201. package/dist/esm-es5/index-7d582503.js +4 -0
  202. package/dist/esm-es5/index.js +1 -1
  203. package/dist/esm-es5/input-shims-eb19958d.js +4 -0
  204. package/dist/esm-es5/{input.utils-67459bae.js → input.utils-021846b8.js} +1 -1
  205. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  206. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  207. package/dist/esm-es5/ion-alert.entry.js +1 -1
  208. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  209. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  210. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  211. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  212. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  213. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  214. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  215. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  216. package/dist/esm-es5/ion-chip.entry.js +1 -1
  217. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  218. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  219. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  220. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  221. package/dist/esm-es5/ion-img.entry.js +1 -1
  222. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  223. package/dist/esm-es5/ion-input-password-toggle.entry.js +1 -1
  224. package/dist/esm-es5/ion-input.entry.js +1 -1
  225. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  226. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  227. package/dist/esm-es5/ion-loading.entry.js +1 -1
  228. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  229. package/dist/esm-es5/ion-modal.entry.js +1 -1
  230. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  231. package/dist/esm-es5/ion-picker-column-option.entry.js +1 -1
  232. package/dist/esm-es5/ion-picker-column.entry.js +1 -1
  233. package/dist/esm-es5/ion-picker.entry.js +1 -1
  234. package/dist/esm-es5/ion-popover.entry.js +1 -1
  235. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  236. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  237. package/dist/esm-es5/ion-range.entry.js +1 -1
  238. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  239. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  240. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  241. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  242. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  243. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  244. package/dist/esm-es5/ion-select-modal.entry.js +1 -1
  245. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  246. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  247. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  248. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  249. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  250. package/dist/esm-es5/ion-text.entry.js +1 -1
  251. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  252. package/dist/esm-es5/ion-toast.entry.js +1 -1
  253. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  254. package/dist/esm-es5/{ionic-global-3c97a4aa.js → ionic-global-483790dd.js} +1 -1
  255. package/dist/esm-es5/ionic.js +1 -1
  256. package/dist/esm-es5/ios.transition-9da97621.js +4 -0
  257. package/dist/esm-es5/{keyboard-9bbd546a.js → keyboard-16dbc7a0.js} +1 -1
  258. package/dist/esm-es5/{keyboard-5b1b354d.js → keyboard-a762a3d6.js} +1 -1
  259. package/dist/esm-es5/{keyboard-controller-aff395fd.js → keyboard-controller-ebc0c1a6.js} +1 -1
  260. package/dist/esm-es5/loader.js +1 -1
  261. package/dist/esm-es5/md.transition-9d6d778a.js +4 -0
  262. package/dist/esm-es5/{notch-controller-c0bd22ff.js → notch-controller-ab0c0e81.js} +1 -1
  263. package/dist/esm-es5/{overlays-66cb5522.js → overlays-e1400470.js} +1 -1
  264. package/dist/esm-es5/status-tap-e7f5aa77.js +4 -0
  265. package/dist/esm-es5/swipe-back-e12c482f.js +4 -0
  266. package/dist/html.html-data.json +27 -0
  267. package/dist/ionic/index.esm.js +1 -1
  268. package/dist/ionic/ionic.esm.js +1 -1
  269. package/dist/ionic/ionic.js +1 -1
  270. package/dist/ionic/p-01b359c9.entry.js +4 -0
  271. package/dist/ionic/{p-11266916.js → p-035fb5a0.js} +1 -1
  272. package/dist/ionic/{p-815f649a.system.entry.js → p-0390f622.system.entry.js} +1 -1
  273. package/dist/ionic/p-03df1462.entry.js +4 -0
  274. package/dist/ionic/p-05b69c23.system.entry.js +4 -0
  275. package/dist/ionic/p-063fb017.system.entry.js +4 -0
  276. package/dist/ionic/p-08174a05.system.entry.js +4 -0
  277. package/dist/ionic/p-086cdee7.entry.js +4 -0
  278. package/dist/ionic/p-0986712d.system.entry.js +4 -0
  279. package/dist/ionic/p-0c579259.system.entry.js +4 -0
  280. package/dist/ionic/{p-94816e7a.system.js → p-10c4f43c.system.js} +1 -1
  281. package/dist/ionic/p-128c9da8.entry.js +4 -0
  282. package/dist/ionic/p-1581ba44.js +4 -0
  283. package/dist/ionic/{p-3ce95a91.entry.js → p-1d15aa94.entry.js} +1 -1
  284. package/dist/ionic/{p-46787abb.system.js → p-1fd5c378.system.js} +1 -1
  285. package/dist/ionic/p-200b21b9.system.entry.js +4 -0
  286. package/dist/ionic/{p-72cbf799.system.entry.js → p-215c5ddb.system.entry.js} +1 -1
  287. package/dist/ionic/p-2364fade.entry.js +4 -0
  288. package/dist/ionic/{p-18f86177.system.js → p-268b6353.system.js} +1 -1
  289. package/dist/ionic/{p-be87ec25.entry.js → p-2779ce56.entry.js} +1 -1
  290. package/dist/ionic/p-284a0c63.entry.js +4 -0
  291. package/dist/ionic/p-297fcc18.system.entry.js +4 -0
  292. package/dist/ionic/p-29bc5069.entry.js +4 -0
  293. package/dist/ionic/{p-09c6b5e4.js → p-2ca20c1c.js} +1 -1
  294. package/dist/ionic/p-2ce11d2f.entry.js +4 -0
  295. package/dist/ionic/{p-12d6df53.js → p-2d9e2af4.js} +1 -1
  296. package/dist/ionic/p-309ddef5.system.js +4 -0
  297. package/dist/ionic/p-3198161b.entry.js +4 -0
  298. package/dist/ionic/p-31e267ab.entry.js +4 -0
  299. package/dist/ionic/p-343906be.entry.js +4 -0
  300. package/dist/ionic/p-38700ea8.entry.js +4 -0
  301. package/dist/ionic/p-3ca5d573.system.entry.js +4 -0
  302. package/dist/ionic/{p-29ca4da2.entry.js → p-402ffd31.entry.js} +1 -1
  303. package/dist/ionic/p-42f8e688.entry.js +4 -0
  304. package/dist/ionic/p-43902855.entry.js +4 -0
  305. package/dist/ionic/{p-b9d2d554.entry.js → p-453bd903.entry.js} +1 -1
  306. package/dist/ionic/p-45d8fe77.system.js +4 -0
  307. package/dist/ionic/p-478723ce.entry.js +4 -0
  308. package/dist/ionic/p-47acf6b1.system.entry.js +4 -0
  309. package/dist/ionic/p-49f0023f.entry.js +4 -0
  310. package/dist/ionic/p-4bccba08.js +4 -0
  311. package/dist/ionic/p-4c0b6220.system.entry.js +4 -0
  312. package/dist/ionic/p-4cbe0257.js +4 -0
  313. package/dist/ionic/p-5345fc46.entry.js +4 -0
  314. package/dist/ionic/p-537407c2.system.js +4 -0
  315. package/dist/ionic/{p-728f5b22.system.js → p-54030163.system.js} +1 -1
  316. package/dist/ionic/p-583f0c5f.js +4 -0
  317. package/dist/ionic/p-59f088ef.js +4 -0
  318. package/dist/ionic/p-5b4aaa87.js +4 -0
  319. package/dist/ionic/p-5dd7815f.system.entry.js +4 -0
  320. package/dist/ionic/{p-f8c63ac0.system.js → p-5f413457.system.js} +2 -2
  321. package/dist/ionic/p-5fead11d.system.entry.js +4 -0
  322. package/dist/ionic/p-60f547a8.entry.js +4 -0
  323. package/dist/ionic/p-6453d7e2.js +4 -0
  324. package/dist/ionic/p-648eac1a.system.entry.js +4 -0
  325. package/dist/ionic/p-695c2cbd.entry.js +4 -0
  326. package/dist/ionic/p-6b5c8c61.system.js +4 -0
  327. package/dist/ionic/{p-74d76684.js → p-6d80bd6d.js} +1 -1
  328. package/dist/ionic/{p-3e91ea3a.system.js → p-6e26cf64.system.js} +2 -2
  329. package/dist/ionic/p-71523065.entry.js +4 -0
  330. package/dist/ionic/p-75d056d0.system.entry.js +4 -0
  331. package/dist/ionic/p-77d57dc2.system.entry.js +4 -0
  332. package/dist/ionic/p-7917710f.system.entry.js +4 -0
  333. package/dist/ionic/p-795787f2.entry.js +4 -0
  334. package/dist/ionic/p-7a81f98e.entry.js +4 -0
  335. package/dist/ionic/p-7bc994fd.js +4 -0
  336. package/dist/ionic/p-7cfe6f4a.entry.js +4 -0
  337. package/dist/ionic/{p-cea92c46.system.js → p-7f143abf.system.js} +1 -1
  338. package/dist/ionic/{p-dbd39afd.system.js → p-7fd5a3d3.system.js} +1 -1
  339. package/dist/ionic/p-836fb660.entry.js +4 -0
  340. package/dist/ionic/p-83cb6a20.system.entry.js +4 -0
  341. package/dist/ionic/p-86521979.system.entry.js +4 -0
  342. package/dist/ionic/p-87281fc9.system.js +4 -0
  343. package/dist/ionic/{p-4c275462.js → p-872be13b.js} +1 -1
  344. package/dist/ionic/p-886ff0f8.system.entry.js +4 -0
  345. package/dist/ionic/p-89ad4473.js +4 -0
  346. package/dist/ionic/{p-697eee8c.system.entry.js → p-8a8e843c.system.entry.js} +1 -1
  347. package/dist/ionic/p-910e6371.entry.js +4 -0
  348. package/dist/ionic/p-9355dcb4.system.entry.js +4 -0
  349. package/dist/ionic/{p-3d61263b.system.entry.js → p-9685fe95.system.entry.js} +1 -1
  350. package/dist/ionic/{p-58aa8a36.system.js → p-97c801b9.system.js} +1 -1
  351. package/dist/ionic/{p-f25ad420.system.entry.js → p-97cc477f.system.entry.js} +1 -1
  352. package/dist/ionic/p-986dd0b7.entry.js +4 -0
  353. package/dist/ionic/p-99227d83.system.entry.js +4 -0
  354. package/dist/ionic/{p-86d98446.system.entry.js → p-99d106bd.system.entry.js} +1 -1
  355. package/dist/ionic/p-9a7c6bf9.system.js +4 -0
  356. package/dist/ionic/p-9cd19610.system.entry.js +4 -0
  357. package/dist/ionic/p-9f9a666d.system.js +4 -0
  358. package/dist/ionic/p-a0879901.system.js +4 -0
  359. package/dist/ionic/p-a09bf565.entry.js +4 -0
  360. package/dist/ionic/{p-a1cdc742.js → p-a5a91cba.js} +1 -1
  361. package/dist/ionic/p-a66016cd.system.entry.js +4 -0
  362. package/dist/ionic/p-a6ad7cc9.entry.js +4 -0
  363. package/dist/ionic/{p-93e47936.js → p-a6e62d2b.js} +1 -1
  364. package/dist/ionic/p-a78181cc.system.entry.js +4 -0
  365. package/dist/ionic/p-a7e1bd93.entry.js +4 -0
  366. package/dist/ionic/p-aaacc929.system.entry.js +4 -0
  367. package/dist/ionic/p-ac558084.entry.js +4 -0
  368. package/dist/ionic/{p-47fd935c.system.js → p-ae21baa6.system.js} +2 -2
  369. package/dist/ionic/p-af321c18.entry.js +4 -0
  370. package/dist/ionic/p-af69da90.entry.js +4 -0
  371. package/dist/ionic/p-b13db3c9.system.entry.js +4 -0
  372. package/dist/ionic/p-b1914bba.system.entry.js +4 -0
  373. package/dist/ionic/{p-a510e9c0.js → p-b1a9e1ce.js} +1 -1
  374. package/dist/ionic/{p-f116fb3f.system.js → p-b30830bd.system.js} +1 -1
  375. package/dist/ionic/{p-1efa63f2.js → p-b447afc8.js} +1 -1
  376. package/dist/ionic/{p-ac1c2b6a.js → p-b45244a2.js} +1 -1
  377. package/dist/ionic/{p-63fde7fe.entry.js → p-b4b60b97.entry.js} +1 -1
  378. package/dist/ionic/p-b5348f8f.system.js +4 -0
  379. package/dist/ionic/p-b6f00169.system.entry.js +4 -0
  380. package/dist/ionic/p-b6f44863.system.js +4 -0
  381. package/dist/ionic/p-b812ce8d.entry.js +4 -0
  382. package/dist/ionic/{p-62887754.system.js → p-b892d7e3.system.js} +1 -1
  383. package/dist/ionic/{p-a2814291.system.js → p-bbc9d5aa.system.js} +1 -1
  384. package/dist/ionic/p-bcb255e3.system.entry.js +4 -0
  385. package/dist/ionic/p-bea37cc1.system.entry.js +4 -0
  386. package/dist/ionic/p-c0a8a8b6.system.entry.js +4 -0
  387. package/dist/ionic/{p-9ed87d1b.js → p-c1c637d2.js} +1 -1
  388. package/dist/ionic/p-c48a6425.system.entry.js +4 -0
  389. package/dist/ionic/{p-8463212e.js → p-c4cf7721.js} +1 -1
  390. package/dist/ionic/p-c7aa652c.entry.js +4 -0
  391. package/dist/ionic/{p-f193945e.system.js → p-cdbb6875.system.js} +1 -1
  392. package/dist/ionic/p-d49da56a.system.entry.js +4 -0
  393. package/dist/ionic/{p-a538ab98.js → p-d61bbbec.js} +1 -1
  394. package/dist/ionic/p-d683e61f.system.entry.js +4 -0
  395. package/dist/ionic/p-d7e43c62.system.entry.js +4 -0
  396. package/dist/ionic/{p-84667060.entry.js → p-d8005cef.entry.js} +1 -1
  397. package/dist/ionic/{p-18892506.entry.js → p-d854fb32.entry.js} +1 -1
  398. package/dist/ionic/{p-986855d6.js → p-d91c085a.js} +1 -1
  399. package/dist/ionic/{p-5684893b.system.entry.js → p-da89b9bd.system.entry.js} +2 -2
  400. package/dist/ionic/p-dbb23cfa.entry.js +4 -0
  401. package/dist/ionic/p-dcbbd7bb.entry.js +4 -0
  402. package/dist/ionic/p-e5bffd6f.system.entry.js +4 -0
  403. package/dist/ionic/p-e6430e45.entry.js +4 -0
  404. package/dist/ionic/{p-556778bd.system.js → p-e832ef1e.system.js} +1 -1
  405. package/dist/ionic/{p-4626fb32.system.js → p-e97ceed8.system.js} +1 -1
  406. package/dist/ionic/p-e9c36e22.system.entry.js +4 -0
  407. package/dist/ionic/p-ece9123f.entry.js +4 -0
  408. package/dist/ionic/{p-822e47a9.system.js → p-efa05ed2.system.js} +1 -1
  409. package/dist/ionic/{p-5a6d245d.system.entry.js → p-f2b7dad7.system.entry.js} +1 -1
  410. package/dist/ionic/p-f2f33ab4.system.entry.js +4 -0
  411. package/dist/ionic/p-f3508be6.js +4 -0
  412. package/dist/ionic/{p-fad81132.system.entry.js → p-f3d7cf9a.system.entry.js} +1 -1
  413. package/dist/ionic/p-f52959de.js +4 -0
  414. package/dist/ionic/p-fa34bf0c.system.entry.js +4 -0
  415. package/dist/ionic/p-fa5a0d2e.system.entry.js +4 -0
  416. package/dist/ionic/p-fa5dc348.entry.js +4 -0
  417. package/dist/ionic/p-fac055ef.entry.js +4 -0
  418. package/dist/ionic/p-fb559858.entry.js +4 -0
  419. package/dist/ionic/p-fe76a062.entry.js +4 -0
  420. package/dist/types/components/app/app.d.ts +2 -0
  421. package/dist/types/components/badge/badge.d.ts +5 -0
  422. package/dist/types/components/searchbar/searchbar.d.ts +8 -0
  423. package/dist/types/components.d.ts +17 -0
  424. package/dist/types/utils/focus-visible.d.ts +12 -0
  425. package/dist/types/utils/helpers.d.ts +11 -0
  426. package/hydrate/index.js +179 -102
  427. package/hydrate/index.mjs +179 -102
  428. package/package.json +2 -2
  429. package/dist/esm-es5/app-globals-eceadabb.js +0 -4
  430. package/dist/esm-es5/focus-visible-501aff19.js +0 -4
  431. package/dist/esm-es5/helpers-f08d15bd.js +0 -4
  432. package/dist/esm-es5/index-62b4a18b.js +0 -4
  433. package/dist/esm-es5/input-shims-6be83e59.js +0 -4
  434. package/dist/esm-es5/ios.transition-06b78ea0.js +0 -4
  435. package/dist/esm-es5/md.transition-e5712bda.js +0 -4
  436. package/dist/esm-es5/status-tap-edf9f395.js +0 -4
  437. package/dist/esm-es5/swipe-back-17c42610.js +0 -4
  438. package/dist/ionic/p-01451762.entry.js +0 -4
  439. package/dist/ionic/p-038a6294.js +0 -4
  440. package/dist/ionic/p-06f2f110.system.entry.js +0 -4
  441. package/dist/ionic/p-09125f4f.entry.js +0 -4
  442. package/dist/ionic/p-096e5f6d.system.entry.js +0 -4
  443. package/dist/ionic/p-0a0ce78f.system.entry.js +0 -4
  444. package/dist/ionic/p-0db90e9b.entry.js +0 -4
  445. package/dist/ionic/p-101ccd60.system.entry.js +0 -4
  446. package/dist/ionic/p-112120d7.system.js +0 -4
  447. package/dist/ionic/p-12337305.system.entry.js +0 -4
  448. package/dist/ionic/p-156d17cd.js +0 -4
  449. package/dist/ionic/p-18bbe9a5.entry.js +0 -4
  450. package/dist/ionic/p-18c930a5.system.entry.js +0 -4
  451. package/dist/ionic/p-1abd1c99.entry.js +0 -4
  452. package/dist/ionic/p-1cf1141c.system.entry.js +0 -4
  453. package/dist/ionic/p-1dd2b0af.entry.js +0 -4
  454. package/dist/ionic/p-1eeb9796.entry.js +0 -4
  455. package/dist/ionic/p-23b31425.entry.js +0 -4
  456. package/dist/ionic/p-24f15ce4.system.entry.js +0 -4
  457. package/dist/ionic/p-25cc2477.entry.js +0 -4
  458. package/dist/ionic/p-2e35a770.system.js +0 -4
  459. package/dist/ionic/p-2ef115ec.system.entry.js +0 -4
  460. package/dist/ionic/p-330e703e.entry.js +0 -4
  461. package/dist/ionic/p-33dc4514.js +0 -4
  462. package/dist/ionic/p-346c67b0.js +0 -4
  463. package/dist/ionic/p-3583dd40.system.entry.js +0 -4
  464. package/dist/ionic/p-398b00a5.system.entry.js +0 -4
  465. package/dist/ionic/p-3b7adbc3.system.entry.js +0 -4
  466. package/dist/ionic/p-41c19986.system.js +0 -4
  467. package/dist/ionic/p-41f06734.entry.js +0 -4
  468. package/dist/ionic/p-4219582c.system.js +0 -4
  469. package/dist/ionic/p-4385e3fb.system.entry.js +0 -4
  470. package/dist/ionic/p-4a39ba11.entry.js +0 -4
  471. package/dist/ionic/p-4a6d4288.entry.js +0 -4
  472. package/dist/ionic/p-4a869870.entry.js +0 -4
  473. package/dist/ionic/p-4ac4f52a.system.entry.js +0 -4
  474. package/dist/ionic/p-4c9e1b2c.js +0 -4
  475. package/dist/ionic/p-51371e21.system.js +0 -4
  476. package/dist/ionic/p-530c591a.entry.js +0 -4
  477. package/dist/ionic/p-5377db51.system.entry.js +0 -4
  478. package/dist/ionic/p-55546d77.system.entry.js +0 -4
  479. package/dist/ionic/p-57de8d54.system.entry.js +0 -4
  480. package/dist/ionic/p-58c64779.system.entry.js +0 -4
  481. package/dist/ionic/p-5a6b3c0d.entry.js +0 -4
  482. package/dist/ionic/p-5ce35a03.js +0 -4
  483. package/dist/ionic/p-5eb8561f.system.entry.js +0 -4
  484. package/dist/ionic/p-5ff5d2bb.entry.js +0 -4
  485. package/dist/ionic/p-60c310ae.system.entry.js +0 -4
  486. package/dist/ionic/p-60d21ee9.system.entry.js +0 -4
  487. package/dist/ionic/p-61f85a49.system.entry.js +0 -4
  488. package/dist/ionic/p-623fcccc.entry.js +0 -4
  489. package/dist/ionic/p-6433742e.system.entry.js +0 -4
  490. package/dist/ionic/p-67b6e18d.entry.js +0 -4
  491. package/dist/ionic/p-6bc2795b.entry.js +0 -4
  492. package/dist/ionic/p-6caa76ec.js +0 -4
  493. package/dist/ionic/p-6cbca6c5.system.entry.js +0 -4
  494. package/dist/ionic/p-6dc32e8b.entry.js +0 -4
  495. package/dist/ionic/p-6e53290f.system.entry.js +0 -4
  496. package/dist/ionic/p-7607d8ba.system.entry.js +0 -4
  497. package/dist/ionic/p-78ed8923.js +0 -4
  498. package/dist/ionic/p-7a858bae.system.js +0 -4
  499. package/dist/ionic/p-7d36cf9f.system.entry.js +0 -4
  500. package/dist/ionic/p-81b72701.entry.js +0 -4
  501. package/dist/ionic/p-82cb4235.js +0 -4
  502. package/dist/ionic/p-857ba8d4.entry.js +0 -4
  503. package/dist/ionic/p-86e9a917.system.entry.js +0 -4
  504. package/dist/ionic/p-871f4046.entry.js +0 -4
  505. package/dist/ionic/p-8956f9a8.system.entry.js +0 -4
  506. package/dist/ionic/p-8a5c53fa.entry.js +0 -4
  507. package/dist/ionic/p-8b0f0a87.entry.js +0 -4
  508. package/dist/ionic/p-8dbfae64.entry.js +0 -4
  509. package/dist/ionic/p-903c544a.js +0 -4
  510. package/dist/ionic/p-916bc9ed.system.entry.js +0 -4
  511. package/dist/ionic/p-92646426.js +0 -4
  512. package/dist/ionic/p-94fc2104.system.entry.js +0 -4
  513. package/dist/ionic/p-9abb7d9b.entry.js +0 -4
  514. package/dist/ionic/p-9ac1a506.system.js +0 -4
  515. package/dist/ionic/p-a5a9206f.entry.js +0 -4
  516. package/dist/ionic/p-a98061d0.entry.js +0 -4
  517. package/dist/ionic/p-b18c52cd.entry.js +0 -4
  518. package/dist/ionic/p-b517144d.system.entry.js +0 -4
  519. package/dist/ionic/p-b5dc9a32.system.entry.js +0 -4
  520. package/dist/ionic/p-b80582fe.system.entry.js +0 -4
  521. package/dist/ionic/p-bbcec459.system.js +0 -4
  522. package/dist/ionic/p-bcdd3eaf.entry.js +0 -4
  523. package/dist/ionic/p-c373eebd.system.js +0 -4
  524. package/dist/ionic/p-cdff6a80.system.entry.js +0 -4
  525. package/dist/ionic/p-d4862803.entry.js +0 -4
  526. package/dist/ionic/p-d6ed3be1.entry.js +0 -4
  527. package/dist/ionic/p-dc286a59.entry.js +0 -4
  528. package/dist/ionic/p-df09db21.entry.js +0 -4
  529. package/dist/ionic/p-df4b88fc.system.entry.js +0 -4
  530. package/dist/ionic/p-ea3ca474.system.js +0 -4
  531. package/dist/ionic/p-eb4ba253.entry.js +0 -4
  532. package/dist/ionic/p-ebd641e4.system.entry.js +0 -4
  533. package/dist/ionic/p-ebe94d15.entry.js +0 -4
  534. package/dist/ionic/p-eda736d7.entry.js +0 -4
  535. package/dist/ionic/p-ee17be82.entry.js +0 -4
  536. package/dist/ionic/p-eee899d5.system.entry.js +0 -4
  537. package/dist/ionic/p-f44c9c6e.system.entry.js +0 -4
  538. package/dist/ionic/p-f5be97b8.entry.js +0 -4
  539. package/dist/ionic/p-f8123284.entry.js +0 -4
  540. package/dist/ionic/p-fff78cd2.system.entry.js +0 -4
@@ -2,7 +2,7 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { Host, h } from "@stencil/core";
5
- import { getOrInitFocusVisibleUtility } from "../../utils/focus-visible";
5
+ import { focusElements } from "../../utils/focus-visible";
6
6
  import { config } from "../../global/config";
7
7
  import { getIonTheme } from "../../global/ionic-global";
8
8
  /**
@@ -18,14 +18,19 @@ export class App {
18
18
  * a result of another user action. (Ex: We focus the first element
19
19
  * inside of a popover when the user presents it, but the popover is not always
20
20
  * presented as a result of keyboard action.)
21
+ *
22
+ * @param elements - The elements to set focus on.
21
23
  */
22
24
  async setFocus(elements) {
23
- const focusVisible = getOrInitFocusVisibleUtility();
24
- focusVisible.setFocus(elements);
25
+ /**
26
+ * The focus-visible utility is used to set focus on an
27
+ * element that uses `ion-focusable`.
28
+ */
29
+ focusElements(elements);
25
30
  }
26
31
  render() {
27
32
  const theme = getIonTheme(this);
28
- return (h(Host, { key: '109f9e80230b5f7dfab0714ed18be1162c589c04', class: {
33
+ return (h(Host, { key: '25667e21b2fffa03ccf013044c340e96bd7faad9', class: {
29
34
  [theme]: true,
30
35
  'ion-page': true,
31
36
  'force-statusbar-padding': config.getBoolean('_forceStatusbarPadding'),
@@ -50,7 +55,7 @@ export class App {
50
55
  "parameters": [{
51
56
  "name": "elements",
52
57
  "type": "HTMLElement[]",
53
- "docs": ""
58
+ "docs": "- The elements to set focus on."
54
59
  }],
55
60
  "references": {
56
61
  "Promise": {
@@ -66,7 +71,10 @@ export class App {
66
71
  },
67
72
  "docs": {
68
73
  "text": "Used to set focus on an element that uses `ion-focusable`.\nDo not use this if focusing the element as a result of a keyboard\nevent as the focus utility should handle this for us. This method\nshould be used when we want to programmatically focus an element as\na result of another user action. (Ex: We focus the first element\ninside of a popover when the user presents it, but the popover is not always\npresented as a result of keyboard action.)",
69
- "tags": []
74
+ "tags": [{
75
+ "name": "param",
76
+ "text": "elements - The elements to set focus on."
77
+ }]
70
78
  }
71
79
  }
72
80
  };
@@ -128,6 +128,7 @@ Do not edit directly, this file was auto-generated.
128
128
  */
129
129
  border-radius: var(--border-radius);
130
130
  display: block;
131
+ position: relative;
131
132
  }
132
133
 
133
134
  ::slotted(ion-img),
@@ -265,4 +266,20 @@ Do not edit directly, this file was auto-generated.
265
266
  :host(.avatar-xlarge) ::slotted(ion-icon) {
266
267
  width: var(--ion-scale-1000, 40px);
267
268
  height: var(--ion-scale-1000, 40px);
269
+ }
270
+
271
+ :host ::slotted(ion-badge.badge-vertical-top:empty) {
272
+ transform: translate(var(--ion-scale-050, 2px), calc(var(--ion-scale-050, 2px) * -1));
273
+ }
274
+
275
+ :host(.avatar-xxsmall) ::slotted(ion-badge.badge-vertical-top:empty) {
276
+ transform: translate(var(--ion-scale-100, 4px), calc(var(--ion-scale-100, 4px) * -1));
277
+ }
278
+
279
+ :host ::slotted(ion-badge.badge-vertical-bottom:empty) {
280
+ transform: translate(0, var(--ion-scale-100, 4px));
281
+ }
282
+
283
+ :host(.avatar-xxsmall) ::slotted(ion-badge.badge-vertical-bottom:empty) {
284
+ transform: translate(var(--ion-scale-100, 4px), calc(var(--ion-scale-100, 4px)));
268
285
  }
@@ -65,6 +65,7 @@
65
65
  */
66
66
  border-radius: var(--border-radius);
67
67
  display: block;
68
+ position: relative;
68
69
  }
69
70
 
70
71
  ::slotted(ion-img),
@@ -65,6 +65,7 @@
65
65
  */
66
66
  border-radius: var(--border-radius);
67
67
  display: block;
68
+ position: relative;
68
69
  }
69
70
 
70
71
  ::slotted(ion-img),
@@ -141,4 +142,12 @@
141
142
  --border-radius: 50%;
142
143
  width: 64px;
143
144
  height: 64px;
145
+ }
146
+
147
+ ::slotted(ion-badge.badge-vertical-top:empty) {
148
+ transform: translate(-50%, 50%);
149
+ }
150
+
151
+ ::slotted(ion-badge.badge-vertical-bottom:empty) {
152
+ transform: translateX(-100%);
144
153
  }
@@ -147,5 +147,4 @@ Do not edit directly, this file was auto-generated.
147
147
 
148
148
  :host {
149
149
  background-color: rgba(var(--ion-primitives-base-black-rgb, 17, 17, 17), 0.7);
150
- backdrop-filter: blur(2px);
151
150
  }
@@ -156,8 +156,19 @@ Do not edit directly, this file was auto-generated.
156
156
  color: var(--ion-color-contrast);
157
157
  }
158
158
 
159
- :host(:empty) {
160
- display: none;
159
+ :host([vertical]) {
160
+ position: absolute;
161
+ }
162
+ :host([vertical]) {
163
+ inset-inline-end: 0;
164
+ }
165
+
166
+ :host(:empty.badge-vertical-top) {
167
+ top: 0;
168
+ }
169
+
170
+ :host(:empty.badge-vertical-bottom) {
171
+ bottom: 0;
161
172
  }
162
173
 
163
174
  :host {
@@ -204,6 +215,11 @@ Do not edit directly, this file was auto-generated.
204
215
  line-height: var(--ion-font-line-height-400, 16px);
205
216
  }
206
217
 
218
+ :host(.badge-xxsmall) ::slotted(ion-icon) {
219
+ width: var(--ion-scale-300, 12px);
220
+ height: var(--ion-scale-300, 12px);
221
+ }
222
+
207
223
  /* Extra Small Badge */
208
224
  :host(.badge-xsmall) {
209
225
  --padding-start: var(--ion-space-100, 4px);
@@ -214,6 +230,11 @@ Do not edit directly, this file was auto-generated.
214
230
  line-height: var(--ion-font-line-height-600, 24px);
215
231
  }
216
232
 
233
+ :host(.badge-xsmall) ::slotted(ion-icon) {
234
+ width: var(--ion-scale-400, 16px);
235
+ height: var(--ion-scale-400, 16px);
236
+ }
237
+
217
238
  /* Small Badge */
218
239
  :host(.badge-small) {
219
240
  --padding-start: var(--ion-space-100, 4px);
@@ -224,6 +245,11 @@ Do not edit directly, this file was auto-generated.
224
245
  line-height: var(--ion-font-line-height-600, 24px);
225
246
  }
226
247
 
248
+ :host(.badge-small) ::slotted(ion-icon) {
249
+ width: var(--ion-scale-500, 20px);
250
+ height: var(--ion-scale-500, 20px);
251
+ }
252
+
227
253
  /* Medium Badge */
228
254
  :host(.badge-medium) {
229
255
  min-width: var(--ion-scale-1000, 40px);
@@ -232,6 +258,11 @@ Do not edit directly, this file was auto-generated.
232
258
  line-height: var(--ion-font-line-height-700, 28px);
233
259
  }
234
260
 
261
+ :host(.badge-medium) ::slotted(ion-icon) {
262
+ width: var(--ion-scale-600, 24px);
263
+ height: var(--ion-scale-600, 24px);
264
+ }
265
+
235
266
  /* Large Badge */
236
267
  :host(.badge-large) {
237
268
  min-width: var(--ion-scale-1200, 48px);
@@ -240,10 +271,43 @@ Do not edit directly, this file was auto-generated.
240
271
  line-height: var(--ion-font-line-height-700, 28px);
241
272
  }
242
273
 
274
+ :host(.badge-large) ::slotted(ion-icon) {
275
+ width: var(--ion-scale-800, 32px);
276
+ height: var(--ion-scale-800, 32px);
277
+ }
278
+
243
279
  /* Extra Large Badge */
244
280
  :host(.badge-xlarge) {
245
281
  min-width: var(--ion-scale-1400, 56px);
246
282
  height: var(--ion-scale-1400, 56px);
247
283
  font-size: var(--ion-font-size-550, 1.375rem);
248
284
  line-height: var(--ion-font-line-height-700, 28px);
285
+ }
286
+
287
+ :host(.badge-xlarge) ::slotted(ion-icon) {
288
+ width: var(--ion-scale-1000, 40px);
289
+ height: var(--ion-scale-1000, 40px);
290
+ }
291
+
292
+ :host(:empty) {
293
+ --padding-start: 0;
294
+ --padding-end: 0;
295
+ }
296
+
297
+ /* sm */
298
+ :host(.badge-small:empty) {
299
+ min-width: var(--ion-scale-200, 8px);
300
+ height: var(--ion-scale-200, 8px);
301
+ }
302
+
303
+ /* md */
304
+ :host(.badge-medium:empty) {
305
+ min-width: var(--ion-scale-300, 12px);
306
+ height: var(--ion-scale-300, 12px);
307
+ }
308
+
309
+ /* lg */
310
+ :host(.badge-large:empty) {
311
+ min-width: var(--ion-scale-400, 16px);
312
+ height: var(--ion-scale-400, 16px);
249
313
  }
@@ -154,8 +154,19 @@
154
154
  color: var(--ion-color-contrast);
155
155
  }
156
156
 
157
- :host(:empty) {
158
- display: none;
157
+ :host([vertical]) {
158
+ position: absolute;
159
+ }
160
+ :host([vertical]) {
161
+ inset-inline-end: 0;
162
+ }
163
+
164
+ :host(:empty.badge-vertical-top) {
165
+ top: 0;
166
+ }
167
+
168
+ :host(:empty.badge-vertical-bottom) {
169
+ bottom: 0;
159
170
  }
160
171
 
161
172
  /**
@@ -197,6 +208,16 @@
197
208
  font-family: var(--ion-font-family, inherit);
198
209
  }
199
210
 
211
+ :host(:empty) {
212
+ --padding-start: 0;
213
+ --padding-end: 0;
214
+ --padding-bottom: 0;
215
+ --padding-top: 0;
216
+ border-radius: 999px;
217
+ width: 10px;
218
+ height: 10px;
219
+ }
220
+
200
221
  /**
201
222
  * Convert a pixels given value into rem
202
223
  *
@@ -13,6 +13,7 @@ export class Badge {
13
13
  this.color = undefined;
14
14
  this.shape = undefined;
15
15
  this.size = undefined;
16
+ this.vertical = undefined;
16
17
  }
17
18
  getShape() {
18
19
  const theme = getIonTheme(this);
@@ -42,11 +43,12 @@ export class Badge {
42
43
  const shape = this.getShape();
43
44
  const size = this.getSize();
44
45
  const theme = getIonTheme(this);
45
- return (h(Host, { key: '81deb3e063e9a3af5059ddbdfdc0a24fce4031c6', class: createColorClasses(this.color, {
46
+ return (h(Host, { key: 'aebcad9a9d4e650344cc855085ab30c376f9b367', class: createColorClasses(this.color, {
46
47
  [theme]: true,
47
48
  [`badge-${shape}`]: shape !== undefined,
48
49
  [`badge-${size}`]: size !== undefined,
49
- }) }, h("slot", { key: 'e398740a75207679e3eff7bf7510cc0409aaf351' })));
50
+ [`badge-vertical-${this.vertical}`]: this.vertical !== undefined,
51
+ }) }, h("slot", { key: 'b62bca8ec3666dce3283573497b7c4306ecc7fc4' })));
50
52
  }
51
53
  static get is() { return "ion-badge"; }
52
54
  static get encapsulation() { return "shadow"; }
@@ -122,6 +124,23 @@ export class Badge {
122
124
  },
123
125
  "attribute": "size",
124
126
  "reflect": false
127
+ },
128
+ "vertical": {
129
+ "type": "string",
130
+ "mutable": false,
131
+ "complexType": {
132
+ "original": "'top' | 'bottom'",
133
+ "resolved": "\"bottom\" | \"top\" | undefined",
134
+ "references": {}
135
+ },
136
+ "required": false,
137
+ "optional": true,
138
+ "docs": {
139
+ "tags": [],
140
+ "text": "Set to `\"top\"` to position the badge on top right absolute position of the parent element.\nSet to `\"bottom\"` to position the badge on bottom right absolute position of the parent element."
141
+ },
142
+ "attribute": "vertical",
143
+ "reflect": false
125
144
  }
126
145
  };
127
146
  }
@@ -154,8 +154,19 @@
154
154
  color: var(--ion-color-contrast);
155
155
  }
156
156
 
157
- :host(:empty) {
158
- display: none;
157
+ :host([vertical]) {
158
+ position: absolute;
159
+ }
160
+ :host([vertical]) {
161
+ inset-inline-end: 0;
162
+ }
163
+
164
+ :host(:empty.badge-vertical-top) {
165
+ top: 0;
166
+ }
167
+
168
+ :host(:empty.badge-vertical-bottom) {
169
+ bottom: 0;
159
170
  }
160
171
 
161
172
  /**
@@ -197,6 +208,16 @@
197
208
  font-family: var(--ion-font-family, inherit);
198
209
  }
199
210
 
211
+ :host(:empty) {
212
+ --padding-start: 0;
213
+ --padding-end: 0;
214
+ --padding-bottom: 0;
215
+ --padding-top: 0;
216
+ border-radius: 999px;
217
+ width: 10px;
218
+ height: 10px;
219
+ }
220
+
200
221
  /**
201
222
  * Convert a pixels given value into rem
202
223
  *
@@ -342,4 +342,16 @@ Do not edit directly, this file was auto-generated.
342
342
  --placeholder-color: var(--ion-primitives-neutral-500, #a2a2a2);
343
343
  cursor: default;
344
344
  pointer-events: none;
345
+ }
346
+
347
+ :host(.searchbar-shape-soft) {
348
+ --border-radius: var(--ion-border-radius-200, 8px);
349
+ }
350
+
351
+ :host(.searchbar-shape-round) {
352
+ --border-radius: var(--ion-border-radius-400, 16px);
353
+ }
354
+
355
+ :host(.searchbar-shape-rectangular) {
356
+ --border-radius: var(--ion-border-radius-0, 0px);
345
357
  }
@@ -141,6 +141,7 @@ export class Searchbar {
141
141
  this.spellcheck = false;
142
142
  this.type = 'search';
143
143
  this.value = '';
144
+ this.shape = undefined;
144
145
  }
145
146
  /**
146
147
  * lang and dir are globally enumerated attributes.
@@ -375,6 +376,18 @@ export class Searchbar {
375
376
  }
376
377
  return true;
377
378
  }
379
+ getShape() {
380
+ const theme = getIonTheme(this);
381
+ const { shape } = this;
382
+ // TODO(ROU-11677): Remove theme check when shapes are defined for all themes.
383
+ if (theme !== 'ionic') {
384
+ return undefined;
385
+ }
386
+ if (shape === undefined) {
387
+ return 'round';
388
+ }
389
+ return shape;
390
+ }
378
391
  /**
379
392
  * Get the icon to use for the clear icon.
380
393
  * If an icon is set on the component, use that.
@@ -449,8 +462,9 @@ export class Searchbar {
449
462
  const animated = this.animated && config.getBoolean('animated', true);
450
463
  const theme = getIonTheme(this);
451
464
  const shouldShowCancelButton = this.shouldShowCancelButton();
452
- const cancelButton = this.showCancelButton !== 'never' && (h("button", { key: '3301b510959fa5a426230175f5b61b4ead9bcfbb', "aria-label": cancelButtonText, "aria-hidden": shouldShowCancelButton ? undefined : 'true', type: "button", tabIndex: theme === 'ios' && !shouldShowCancelButton ? -1 : undefined, onMouseDown: this.onCancelSearchbar, onTouchStart: this.onCancelSearchbar, class: "searchbar-cancel-button" }, h("div", { key: 'cb3a77783c75bbc78acdc7df9c75abcc415188d9', "aria-hidden": "true" }, theme === 'md' || theme === 'ionic' ? (h("ion-icon", { "aria-hidden": "true", icon: searchbarCancelIcon, lazy: false })) : (cancelButtonText))));
453
- return (h(Host, { key: '33fdf75d5f7ce578cfbb7c4befa816c2b30469ac', role: "search", "aria-disabled": this.disabled ? 'true' : null, class: createColorClasses(this.color, {
465
+ const shape = this.getShape();
466
+ const cancelButton = this.showCancelButton !== 'never' && (h("button", { key: 'd7382dd39f5699330fa1c981cd252a903029d1b5', "aria-label": cancelButtonText, "aria-hidden": shouldShowCancelButton ? undefined : 'true', type: "button", tabIndex: theme === 'ios' && !shouldShowCancelButton ? -1 : undefined, onMouseDown: this.onCancelSearchbar, onTouchStart: this.onCancelSearchbar, class: "searchbar-cancel-button" }, h("div", { key: '3b3c4a16c23d7406be4eda6076deca41e79e196d', "aria-hidden": "true" }, theme === 'md' || theme === 'ionic' ? (h("ion-icon", { "aria-hidden": "true", icon: searchbarCancelIcon, lazy: false })) : (cancelButtonText))));
467
+ return (h(Host, { key: '4890a1478e7e1ff0a85d5e6ca2214c50aee96777', role: "search", "aria-disabled": this.disabled ? 'true' : null, class: createColorClasses(this.color, {
454
468
  [theme]: true,
455
469
  'searchbar-animated': animated,
456
470
  'searchbar-disabled': this.disabled,
@@ -460,14 +474,15 @@ export class Searchbar {
460
474
  'searchbar-has-focus': this.focused,
461
475
  'searchbar-should-show-clear': this.shouldShowClearButton(),
462
476
  'searchbar-should-show-cancel': this.shouldShowCancelButton(),
463
- }) }, h("div", { key: '8a5accb217a1efccc1cd417cef8b95996e277c07', class: "searchbar-input-container" }, h("input", Object.assign({ key: 'dccb39de2157490b1e937c9a2737edb55b7001e6', "aria-label": "search text", disabled: this.disabled, ref: (el) => (this.nativeInput = el), class: "searchbar-input", inputMode: this.inputmode, enterKeyHint: this.enterkeyhint, name: this.name, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, minLength: this.minlength, maxLength: this.maxlength, placeholder: this.placeholder, type: this.type, value: this.getValue(), autoCapitalize: autocapitalize === 'default' ? undefined : autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, spellcheck: this.spellcheck }, this.inheritedAttributes)), (theme === 'md' || theme === 'ionic') && cancelButton, h("ion-icon", { key: 'e85d30887e0b8eb264f86f682362882f4d14bf61', "aria-hidden": "true", icon: searchbarSearchIcon, lazy: false, class: "searchbar-search-icon" }), h("button", { key: '73aeda33d35e499a7f9edbb550707f2d5a234110', "aria-label": "reset", type: "button", "no-blur": true, class: "searchbar-clear-button", onPointerDown: (ev) => {
477
+ [`searchbar-shape-${shape}`]: shape !== undefined,
478
+ }) }, h("div", { key: 'e2b95c0f77605f8d1e9b3f8b971d07fba72cb794', class: "searchbar-input-container" }, h("input", Object.assign({ key: '6dd8ff97d0ef85190addbd20a1093d22fecf9a80', "aria-label": "search text", disabled: this.disabled, ref: (el) => (this.nativeInput = el), class: "searchbar-input", inputMode: this.inputmode, enterKeyHint: this.enterkeyhint, name: this.name, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, minLength: this.minlength, maxLength: this.maxlength, placeholder: this.placeholder, type: this.type, value: this.getValue(), autoCapitalize: autocapitalize === 'default' ? undefined : autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, spellcheck: this.spellcheck }, this.inheritedAttributes)), (theme === 'md' || theme === 'ionic') && cancelButton, h("ion-icon", { key: '626aefedcd35c36bd9a697b5f5bdbaec4f0142eb', "aria-hidden": "true", icon: searchbarSearchIcon, lazy: false, class: "searchbar-search-icon" }), h("button", { key: '9996031c9eeba745d37b6600b6594f69c4808842', "aria-label": "reset", type: "button", "no-blur": true, class: "searchbar-clear-button", onPointerDown: (ev) => {
464
479
  /**
465
480
  * This prevents mobile browsers from
466
481
  * blurring the input when the clear
467
482
  * button is activated.
468
483
  */
469
484
  ev.preventDefault();
470
- }, onClick: () => this.onClearInput(true) }, h("ion-icon", { key: '9c9c376352470fc45877f1b89dfecf2c5ca2cc71', "aria-hidden": "true", icon: searchbarClearIcon, lazy: false, class: "searchbar-clear-icon" }))), theme === 'ios' && cancelButton));
485
+ }, onClick: () => this.onClearInput(true) }, h("ion-icon", { key: '403a5866e82ca6be91101a1719c3ad2f273a652f', "aria-hidden": "true", icon: searchbarClearIcon, lazy: false, class: "searchbar-clear-icon" }))), theme === 'ios' && cancelButton));
471
486
  }
472
487
  static get is() { return "ion-searchbar"; }
473
488
  static get encapsulation() { return "scoped"; }
@@ -885,6 +900,23 @@ export class Searchbar {
885
900
  "attribute": "value",
886
901
  "reflect": false,
887
902
  "defaultValue": "''"
903
+ },
904
+ "shape": {
905
+ "type": "string",
906
+ "mutable": false,
907
+ "complexType": {
908
+ "original": "'soft' | 'round' | 'rectangular'",
909
+ "resolved": "\"rectangular\" | \"round\" | \"soft\" | undefined",
910
+ "references": {}
911
+ },
912
+ "required": false,
913
+ "optional": true,
914
+ "docs": {
915
+ "tags": [],
916
+ "text": "Set to `\"soft\"` for a searchbar with slightly rounded corners,\n`\"round\"` for a searchbar with fully rounded corners,\nor `\"rectangular\"` for a searchbar without rounded corners.\nDefaults to `\"round\"` for the ionic theme, and `undefined` for all other themes."
917
+ },
918
+ "attribute": "shape",
919
+ "reflect": false
888
920
  }
889
921
  };
890
922
  }
@@ -688,9 +688,10 @@ Do not edit directly, this file was auto-generated.
688
688
  }
689
689
 
690
690
  :host {
691
+ --border-color: var(--ion-primitives-neutral-500, #a2a2a2);
691
692
  --color: var(--ion-primitives-neutral-1200, #242424);
692
- --highlight-color-valid: var(--ion-semantics-success-base, #1ba433);
693
- --highlight-color-invalid: var(--ion-semantics-danger-base, #e52929);
693
+ --highlight-color-valid: var(--ion-semantics-success-900, #126f23);
694
+ --highlight-color-invalid: var(--ion-semantics-danger-800, #bf2222);
694
695
  --placeholder-color: var(--ion-primitives-neutral-800, #626262);
695
696
  --placeholder-opacity: 1;
696
697
  --background: var(--ion-primitives-base-white, #ffffff);
@@ -831,4 +832,26 @@ ion-icon {
831
832
 
832
833
  :host(.has-focus) .textarea-highlight {
833
834
  transform: scale(1);
835
+ }
836
+
837
+ @media (any-hover: hover) {
838
+ :host(:hover) {
839
+ --border-color: var(--ion-primitives-neutral-600, #8c8c8c);
840
+ }
841
+ }
842
+ :host(.textarea-disabled) {
843
+ --color: var(--ion-primitives-neutral-500, #a2a2a2);
844
+ --background: var(--ion-primitives-neutral-100, #f5f5f5);
845
+ --border-color: var(--ion-primitives-neutral-300, #cfcfcf);
846
+ --placeholder-color: var(--ion-primitives-neutral-500, #a2a2a2);
847
+ }
848
+
849
+ :host(.textarea-disabled:not(.ion-valid)) .textarea-bottom .helper-text,
850
+ :host(.textarea-disabled) .textarea-bottom .counter,
851
+ :host(.textarea-disabled) .label-text-wrapper {
852
+ color: var(--ion-primitives-neutral-500, #a2a2a2);
853
+ }
854
+
855
+ :host(.textarea-readonly) {
856
+ --background: var(--ion-primitives-neutral-100, #f5f5f5);
834
857
  }
@@ -368,7 +368,7 @@ export class Textarea {
368
368
  return (h("div", { class: "textarea-bottom" }, this.renderHintText(), this.renderCounter()));
369
369
  }
370
370
  render() {
371
- const { inputId, disabled, size, labelPlacement, el, hasFocus } = this;
371
+ const { inputId, disabled, readonly, size, labelPlacement, el, hasFocus } = this;
372
372
  const fill = this.getFill();
373
373
  const theme = getIonTheme(this);
374
374
  const shape = this.getShape();
@@ -395,7 +395,7 @@ export class Textarea {
395
395
  * TODO(FW-5592): Remove hasStartEndSlots condition
396
396
  */
397
397
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
398
- return (h(Host, { key: '0c64093fe8b1124af96330e35c735d36103f6133', class: createColorClasses(this.color, {
398
+ return (h(Host, { key: 'bc1de868d3b58707859e453186cc9312dab38405', class: createColorClasses(this.color, {
399
399
  [theme]: true,
400
400
  'has-value': hasValue,
401
401
  'has-focus': hasFocus,
@@ -405,7 +405,8 @@ export class Textarea {
405
405
  [`textarea-size-${size}`]: true,
406
406
  [`textarea-label-placement-${labelPlacement}`]: true,
407
407
  'textarea-disabled': disabled,
408
- }) }, h("label", { key: '7ca96cdc0b58932272d208ea1b9d554d9db0151c', class: "textarea-wrapper", htmlFor: inputId }, this.renderLabelContainer(), h("div", { key: 'e472effc5b40c04d37c97421337086c6ddae16c1', class: "textarea-wrapper-inner" },
408
+ 'textarea-readonly': readonly,
409
+ }) }, h("label", { key: '4d82bc767dff5bd28efd2bb13dd5e65cc50ab410', class: "textarea-wrapper", htmlFor: inputId }, this.renderLabelContainer(), h("div", { key: 'ebc6391ad58294b01fb5e6fd6d21496250bed484', class: "textarea-wrapper-inner" },
409
410
  /**
410
411
  * For the ionic theme, we render the outline container here
411
412
  * instead of higher up, so it can be positioned relative to
@@ -415,7 +416,7 @@ export class Textarea {
415
416
  * <label> element, ensuring that clicking the label text
416
417
  * focuses the textarea.
417
418
  */
418
- theme === 'ionic' && fill === 'outline' && h("div", { key: '2a172754f2568a2001702e524592449cce0e1fbd', class: "textarea-outline" }), h("div", { key: '4ad0f5714813ccb56b2efd583ee32ad434086e2b', class: "start-slot-wrapper" }, h("slot", { key: '266638dfbd113c3f3fe22dbe824071c1fc68d835', name: "start" })), h("div", { key: '11de61ccac26e403ee69bab51c32d0097333099a', class: "native-wrapper", ref: (el) => (this.textareaWrapper = el) }, h("textarea", Object.assign({ key: 'f4844e3b4134f354d3c5a5689aa47bc1cf9dc155', class: "native-textarea", ref: (el) => (this.nativeInput = el), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, minLength: this.minlength, maxLength: this.maxlength, name: this.name, placeholder: this.placeholder || '', readOnly: this.readonly, required: this.required, spellcheck: this.spellcheck, cols: this.cols, rows: this.rows, wrap: this.wrap, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeyDown, "aria-describedby": this.getHintTextID(), "aria-invalid": this.getHintTextID() === this.errorTextId }, this.inheritedAttributes), value)), h("div", { key: 'a874e2c52de68ebfe6d47d0e624a206d103fb87c', class: "end-slot-wrapper" }, h("slot", { key: '3ce4674e89a63f1c58cabb3822f2fc3d90408ba9', name: "end" }))), shouldRenderHighlight && h("div", { key: '9f64eeb8afbdd151f7302d701da5725b5f897b40', class: "textarea-highlight" })), this.renderBottomContent()));
419
+ theme === 'ionic' && fill === 'outline' && h("div", { key: 'cfab00504ef4b268a8e3c446d00c8c06ddbc3699', class: "textarea-outline" }), h("div", { key: '7387ddde6cb4316c4f34c642f0ddb6e8ad27c9ce', class: "start-slot-wrapper" }, h("slot", { key: '0d4e4ff1f4957677538e0f5230146f5605592d4e', name: "start" })), h("div", { key: '09e1ae9084976374347adddf7197f256b02ccd41', class: "native-wrapper", ref: (el) => (this.textareaWrapper = el) }, h("textarea", Object.assign({ key: 'cd4afa93446db0761ee10acdc356c06c24f5699f', class: "native-textarea", ref: (el) => (this.nativeInput = el), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, minLength: this.minlength, maxLength: this.maxlength, name: this.name, placeholder: this.placeholder || '', readOnly: this.readonly, required: this.required, spellcheck: this.spellcheck, cols: this.cols, rows: this.rows, wrap: this.wrap, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeyDown, "aria-describedby": this.getHintTextID(), "aria-invalid": this.getHintTextID() === this.errorTextId }, this.inheritedAttributes), value)), h("div", { key: '4eccbe7ee70c1ec967e3e64c19ffe796415f65a5', class: "end-slot-wrapper" }, h("slot", { key: '4d6c3da0b28183d6398fab4afd29fff7ae7083b3', name: "end" }))), shouldRenderHighlight && h("div", { key: '33267aa7e8388de28a33317ba1ac98929f32b48e', class: "textarea-highlight" })), this.renderBottomContent()));
419
420
  }
420
421
  static get is() { return "ion-textarea"; }
421
422
  static get encapsulation() { return "scoped"; }
@@ -24,6 +24,21 @@ export const getOrInitFocusVisibleUtility = () => {
24
24
  }
25
25
  return focusVisibleUtility;
26
26
  };
27
+ /**
28
+ * Used to set focus on an element that uses `ion-focusable`.
29
+ * Do not use this if focusing the element as a result of a keyboard
30
+ * event as the focus utility should handle this for us. This method
31
+ * should be used when we want to programmatically focus an element as
32
+ * a result of another user action. (Ex: We focus the first element
33
+ * inside of a popover when the user presents it, but the popover is not always
34
+ * presented as a result of keyboard action.)
35
+ *
36
+ * @param elements - The elements to set focus on.
37
+ */
38
+ export const focusElements = (elements) => {
39
+ const focusVisible = getOrInitFocusVisibleUtility();
40
+ focusVisible.setFocus(elements);
41
+ };
27
42
  export const startFocusVisible = (rootEl) => {
28
43
  let currentFocus = [];
29
44
  let keyboardMode = true;
@@ -1,6 +1,7 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
+ import { focusElements } from "./focus-visible";
4
5
  import { config } from "../global/config";
5
6
  export const transitionEndAsync = (el, expectedDuration = 0) => {
6
7
  return new Promise((resolve) => {
@@ -231,6 +232,17 @@ export const raf = (h) => {
231
232
  export const hasShadowDom = (el) => {
232
233
  return !!el.shadowRoot && !!el.attachShadow;
233
234
  };
235
+ /**
236
+ * Focuses a given element while ensuring proper focus management
237
+ * within the Ionic framework. If the element is marked as `ion-focusable`,
238
+ * this function will delegate focus handling to `ion-app` or manually
239
+ * apply focus when a custom app root is used.
240
+ *
241
+ * This function helps maintain accessibility and expected focus behavior
242
+ * in both standard and custom root environments.
243
+ *
244
+ * @param el - The element to focus.
245
+ */
234
246
  export const focusVisibleElement = (el) => {
235
247
  el.focus();
236
248
  /**
@@ -245,7 +257,33 @@ export const focusVisibleElement = (el) => {
245
257
  const appRootSelector = config.get('appRootSelector', 'ion-app');
246
258
  const app = el.closest(appRootSelector);
247
259
  if (app) {
248
- app.setFocus([el]);
260
+ if (appRootSelector === 'ion-app') {
261
+ /**
262
+ * If the app root is the default, then it will be
263
+ * in charge of setting focus. This is because the
264
+ * focus-visible utility is attached to the app root
265
+ * and will handle setting focus on the correct element.
266
+ */
267
+ app.setFocus([el]);
268
+ }
269
+ else {
270
+ /**
271
+ * When using a custom app root selector, the focus-visible
272
+ * utility is not available to manage focus automatically.
273
+ * If we set focus immediately, the element may not be fully
274
+ * rendered or interactive, especially if it was just added
275
+ * to the DOM. Using requestAnimationFrame ensures that focus
276
+ * is applied on the next frame, allowing the DOM to settle
277
+ * before changing focus.
278
+ */
279
+ requestAnimationFrame(() => {
280
+ /**
281
+ * The focus-visible utility is used to set focus on an
282
+ * element that uses `ion-focusable`.
283
+ */
284
+ focusElements([el]);
285
+ });
286
+ }
249
287
  }
250
288
  }
251
289
  };