@ionic/core 8.7.16-dev.11769699401.1dc7caf4 → 8.7.16-dev.11770318223.1177a6ea

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 (481) hide show
  1. package/components/button.js +20 -15
  2. package/components/checkbox.js +3 -3
  3. package/components/content.js +3 -3
  4. package/components/header.js +2 -2
  5. package/components/helpers.js +18 -4
  6. package/components/ion-card-content.js +7 -8
  7. package/components/ion-card-header.js +2 -2
  8. package/components/ion-card-subtitle.js +2 -2
  9. package/components/ion-card-title.js +2 -2
  10. package/components/ion-chip.js +2 -2
  11. package/components/ion-col.js +2 -2
  12. package/components/ion-datetime-button.js +2 -2
  13. package/components/ion-datetime.js +11 -17
  14. package/components/ion-divider.js +2 -2
  15. package/components/ion-fab-button.js +2 -2
  16. package/components/ion-fab-list.js +2 -2
  17. package/components/ion-fab.js +2 -2
  18. package/components/ion-footer.js +2 -2
  19. package/components/ion-grid.js +2 -2
  20. package/components/ion-img.js +2 -2
  21. package/components/ion-infinite-scroll-content.js +2 -2
  22. package/components/ion-infinite-scroll.js +1 -1
  23. package/components/ion-input-otp.js +62 -7
  24. package/components/ion-input-password-toggle.js +3 -3
  25. package/components/ion-input.js +4 -4
  26. package/components/ion-item-divider.js +2 -2
  27. package/components/ion-item-group.js +1 -1
  28. package/components/ion-item-option.js +2 -2
  29. package/components/ion-item-options.js +1 -1
  30. package/components/ion-item-sliding.js +1 -1
  31. package/components/ion-loading.js +2 -2
  32. package/components/ion-menu-button.js +2 -2
  33. package/components/ion-menu-toggle.js +2 -2
  34. package/components/ion-menu.js +2 -2
  35. package/components/ion-nav-link.js +1 -1
  36. package/components/ion-nav.js +1 -1
  37. package/components/ion-note.js +2 -2
  38. package/components/ion-picker-legacy.js +2 -2
  39. package/components/ion-progress-bar.js +1 -1
  40. package/components/ion-range.js +3 -3
  41. package/components/ion-refresher-content.js +2 -2
  42. package/components/ion-refresher.js +1 -1
  43. package/components/ion-reorder-group.js +1 -1
  44. package/components/ion-reorder.js +2 -2
  45. package/components/ion-router-link.js +2 -2
  46. package/components/ion-router-outlet.js +1 -1
  47. package/components/ion-row.js +2 -2
  48. package/components/ion-searchbar.js +4 -4
  49. package/components/ion-segment-button.js +2 -2
  50. package/components/ion-segment-content.js +1 -1
  51. package/components/ion-segment-view.js +2 -2
  52. package/components/ion-segment.js +2 -2
  53. package/components/ion-select-option.js +1 -1
  54. package/components/ion-select.js +3 -3
  55. package/components/ion-skeleton-text.js +2 -2
  56. package/components/ion-split-pane.js +2 -2
  57. package/components/ion-tab-bar.js +2 -2
  58. package/components/ion-tab-button.js +2 -2
  59. package/components/ion-tab.js +2 -2
  60. package/components/ion-tabs.js +1 -1
  61. package/components/ion-text.js +2 -2
  62. package/components/ion-textarea.js +81 -14
  63. package/components/ion-thumbnail.js +2 -2
  64. package/components/ion-toast.js +2 -2
  65. package/components/ion-toggle.js +3 -3
  66. package/components/label.js +2 -2
  67. package/components/list-header.js +2 -2
  68. package/components/list.js +1 -1
  69. package/components/modal.js +4 -4
  70. package/components/overlays.js +93 -2
  71. package/components/picker-column-option.js +2 -2
  72. package/components/picker-column.js +3 -3
  73. package/components/picker-column2.js +2 -2
  74. package/components/picker.js +2 -2
  75. package/components/popover.js +2 -2
  76. package/components/radio-group.js +2 -2
  77. package/components/radio.js +3 -3
  78. package/components/ripple-effect.js +1 -1
  79. package/components/select-modal.js +1 -1
  80. package/components/select-popover.js +2 -2
  81. package/components/spinner.js +1 -1
  82. package/components/theme.js +25 -1
  83. package/components/title.js +2 -2
  84. package/components/toolbar.js +2 -2
  85. package/components/validity.js +32 -1
  86. package/css/core.css +1 -1
  87. package/css/core.css.map +1 -1
  88. package/css/ionic/bundle.ionic.css +1 -1
  89. package/css/ionic/bundle.ionic.css.map +1 -1
  90. package/css/ionic/core.ionic.css +1 -1
  91. package/css/ionic/core.ionic.css.map +1 -1
  92. package/css/ionic.bundle.css +1 -1
  93. package/css/ionic.bundle.css.map +1 -1
  94. package/dist/cjs/{animation-CD5nuON9.js → animation-C04i0Aq2.js} +2 -2
  95. package/dist/cjs/{app-globals-CoW5jvJu.js → app-globals-BP1XPbBb.js} +1 -1
  96. package/dist/cjs/{button-active-Dxyabn6T.js → button-active-B9D1nnqS.js} +2 -2
  97. package/dist/cjs/{capacitor-C8raJ_tU.js → capacitor-CbwHRb4L.js} +1 -1
  98. package/dist/cjs/{config-C5fsO43a.js → config-CPCkFfH2.js} +1 -1
  99. package/dist/cjs/{data-MoL8Ckx5.js → data-BpYscHnl.js} +1 -1
  100. package/dist/cjs/{framework-delegate-Bwdk9vFS.js → framework-delegate-C7fZ8bup.js} +2 -2
  101. package/dist/cjs/{haptic-BU6_qLwg.js → haptic-CYmISoOJ.js} +1 -1
  102. package/dist/cjs/{helpers-DnouLczu.js → helpers-DF1tCuxf.js} +19 -5
  103. package/dist/cjs/{index-C4_FN9N0.js → index-B2l1iL59.js} +4 -4
  104. package/dist/cjs/{index-JtyffOXl.js → index-BVcv37_B.js} +4 -4
  105. package/dist/cjs/{index-CADY2xEW.js → index-BioRZa_4.js} +3 -3
  106. package/dist/cjs/{index-DUoP_H1L.js → index-C2sRwpb7.js} +2 -2
  107. package/dist/cjs/{index-D6Wc6v08.js → index-DjlJwy91.js} +41 -4
  108. package/dist/cjs/index.cjs.js +12 -12
  109. package/dist/cjs/{input-shims-C-YCyXjg.js → input-shims-BYRSBwuG.js} +6 -6
  110. package/dist/cjs/{input.utils-C3-BwdV0.js → input.utils-BBh_FWGy.js} +3 -3
  111. package/dist/cjs/ion-accordion_2.cjs.entry.js +4 -4
  112. package/dist/cjs/ion-action-sheet.cjs.entry.js +10 -10
  113. package/dist/cjs/ion-alert.cjs.entry.js +11 -11
  114. package/dist/cjs/ion-app_8.cjs.entry.js +23 -23
  115. package/dist/cjs/ion-avatar_3.cjs.entry.js +5 -5
  116. package/dist/cjs/ion-back-button.cjs.entry.js +4 -4
  117. package/dist/cjs/ion-backdrop.cjs.entry.js +2 -2
  118. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +4 -4
  119. package/dist/cjs/ion-button_2.cjs.entry.js +23 -18
  120. package/dist/cjs/ion-card_5.cjs.entry.js +15 -17
  121. package/dist/cjs/ion-checkbox.cjs.entry.js +8 -8
  122. package/dist/cjs/ion-chip.cjs.entry.js +5 -5
  123. package/dist/cjs/ion-col_3.cjs.entry.js +8 -8
  124. package/dist/cjs/ion-datetime-button.cjs.entry.js +7 -7
  125. package/dist/cjs/ion-datetime_3.cjs.entry.js +21 -21
  126. package/dist/cjs/ion-divider.cjs.entry.js +4 -4
  127. package/dist/cjs/ion-fab_3.cjs.entry.js +10 -10
  128. package/dist/cjs/ion-img.cjs.entry.js +5 -5
  129. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +8 -8
  130. package/dist/cjs/ion-input-otp.cjs.entry.js +69 -10
  131. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +6 -6
  132. package/dist/cjs/ion-input.cjs.entry.js +11 -11
  133. package/dist/cjs/ion-item-option_3.cjs.entry.js +9 -9
  134. package/dist/cjs/ion-item_8.cjs.entry.js +16 -16
  135. package/dist/cjs/ion-loading.cjs.entry.js +10 -10
  136. package/dist/cjs/ion-menu_3.cjs.entry.js +14 -14
  137. package/dist/cjs/ion-modal.cjs.entry.js +16 -16
  138. package/dist/cjs/ion-nav_2.cjs.entry.js +8 -8
  139. package/dist/cjs/ion-picker-column-option.cjs.entry.js +6 -6
  140. package/dist/cjs/ion-picker-column.cjs.entry.js +9 -9
  141. package/dist/cjs/ion-picker.cjs.entry.js +4 -4
  142. package/dist/cjs/ion-popover.cjs.entry.js +10 -10
  143. package/dist/cjs/ion-progress-bar.cjs.entry.js +5 -5
  144. package/dist/cjs/ion-radio_2.cjs.entry.js +10 -10
  145. package/dist/cjs/ion-range.cjs.entry.js +8 -8
  146. package/dist/cjs/ion-refresher_2.cjs.entry.js +11 -11
  147. package/dist/cjs/ion-reorder_2.cjs.entry.js +9 -9
  148. package/dist/cjs/ion-ripple-effect.cjs.entry.js +3 -3
  149. package/dist/cjs/ion-route_4.cjs.entry.js +6 -6
  150. package/dist/cjs/ion-searchbar.cjs.entry.js +8 -8
  151. package/dist/cjs/ion-segment-content.cjs.entry.js +2 -2
  152. package/dist/cjs/ion-segment-view.cjs.entry.js +3 -3
  153. package/dist/cjs/ion-segment_2.cjs.entry.js +8 -8
  154. package/dist/cjs/ion-select-modal.cjs.entry.js +7 -7
  155. package/dist/cjs/ion-select_3.cjs.entry.js +14 -14
  156. package/dist/cjs/ion-spinner.cjs.entry.js +4 -4
  157. package/dist/cjs/ion-split-pane.cjs.entry.js +4 -4
  158. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +11 -11
  159. package/dist/cjs/ion-tab_2.cjs.entry.js +6 -6
  160. package/dist/cjs/ion-text.cjs.entry.js +5 -5
  161. package/dist/cjs/ion-textarea.cjs.entry.js +88 -18
  162. package/dist/cjs/ion-toast.cjs.entry.js +10 -10
  163. package/dist/cjs/ion-toggle.cjs.entry.js +10 -10
  164. package/dist/cjs/{ionic-global-DpRwOXLK.js → ionic-global-Dq_E1GCa.js} +5 -5
  165. package/dist/cjs/ionic.cjs.js +4 -4
  166. package/dist/cjs/{ios.transition-Dt4GT8w5.js → ios.transition-DRha8gOi.js} +5 -5
  167. package/dist/cjs/{keyboard-B8HJHbg3.js → keyboard-DYFGJjuN.js} +4 -4
  168. package/dist/cjs/{keyboard-controller-O8n0dTQz.js → keyboard-controller-DNlzZiH-.js} +3 -3
  169. package/dist/cjs/{keyboard-BlrG3xPK.js → keyboard-sMvh7TE6.js} +1 -1
  170. package/dist/cjs/loader.cjs.js +4 -4
  171. package/dist/cjs/{md.transition-BolcQzNP.js → md.transition-Dh46qaSH.js} +5 -5
  172. package/dist/cjs/{notch-controller-BE80VRju.js → notch-controller-qvgjFR8h.js} +2 -2
  173. package/dist/cjs/{overlays-CRSQCKrz.js → overlays-CA-nLfRi.js} +97 -6
  174. package/dist/cjs/{status-tap-e-hyosXV.js → status-tap-BLw3gi_z.js} +3 -3
  175. package/dist/cjs/{swipe-back-CR060nOX.js → swipe-back-BD2lWufH.js} +2 -2
  176. package/dist/cjs/{theme-CeDs6Hcv.js → theme-IlOsGAz7.js} +25 -1
  177. package/dist/cjs/validity-QmuwEptc.js +51 -0
  178. package/dist/collection/components/button/button.ionic.css +10 -0
  179. package/dist/collection/components/button/button.ios.css +19 -0
  180. package/dist/collection/components/button/button.js +17 -12
  181. package/dist/collection/components/button/button.md.css +24 -0
  182. package/dist/collection/components/card-content/card-content.ionic.css +4 -7
  183. package/dist/collection/components/card-content/card-content.ios.css +5 -35
  184. package/dist/collection/components/card-content/card-content.js +3 -4
  185. package/dist/collection/components/card-content/card-content.md.css +5 -35
  186. package/dist/collection/components/card-header/card-header.js +2 -2
  187. package/dist/collection/components/card-subtitle/card-subtitle.js +2 -2
  188. package/dist/collection/components/card-title/card-title.js +2 -2
  189. package/dist/collection/components/checkbox/checkbox.js +3 -3
  190. package/dist/collection/components/chip/chip.js +2 -2
  191. package/dist/collection/components/col/col.js +2 -2
  192. package/dist/collection/components/content/content.js +3 -3
  193. package/dist/collection/components/datetime/datetime.ionic.css +5 -13
  194. package/dist/collection/components/datetime/datetime.ios.css +47 -12
  195. package/dist/collection/components/datetime/datetime.js +4 -4
  196. package/dist/collection/components/datetime/datetime.md.css +37 -2
  197. package/dist/collection/components/datetime-button/datetime-button.js +2 -2
  198. package/dist/collection/components/divider/divider.js +2 -2
  199. package/dist/collection/components/fab/fab.js +2 -2
  200. package/dist/collection/components/fab-button/fab-button.js +2 -2
  201. package/dist/collection/components/fab-list/fab-list.js +2 -2
  202. package/dist/collection/components/footer/footer.js +2 -2
  203. package/dist/collection/components/grid/grid.js +2 -2
  204. package/dist/collection/components/header/header.js +2 -2
  205. package/dist/collection/components/img/img.js +2 -2
  206. package/dist/collection/components/infinite-scroll/infinite-scroll.js +1 -1
  207. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +2 -2
  208. package/dist/collection/components/input/input.js +4 -4
  209. package/dist/collection/components/input-otp/input-otp.ionic.css +2 -0
  210. package/dist/collection/components/input-otp/input-otp.ios.css +3 -0
  211. package/dist/collection/components/input-otp/input-otp.js +69 -4
  212. package/dist/collection/components/input-otp/input-otp.md.css +3 -0
  213. package/dist/collection/components/input-password-toggle/input-password-toggle.js +3 -3
  214. package/dist/collection/components/item-divider/item-divider.js +2 -2
  215. package/dist/collection/components/item-group/item-group.js +1 -1
  216. package/dist/collection/components/item-option/item-option.js +2 -2
  217. package/dist/collection/components/item-options/item-options.js +1 -1
  218. package/dist/collection/components/item-sliding/item-sliding.js +1 -1
  219. package/dist/collection/components/label/label.js +2 -2
  220. package/dist/collection/components/list/list.js +1 -1
  221. package/dist/collection/components/list-header/list-header.js +2 -2
  222. package/dist/collection/components/loading/loading.js +2 -2
  223. package/dist/collection/components/menu/menu.js +2 -2
  224. package/dist/collection/components/menu-button/menu-button.js +2 -2
  225. package/dist/collection/components/menu-toggle/menu-toggle.js +2 -2
  226. package/dist/collection/components/modal/modal.js +4 -4
  227. package/dist/collection/components/nav/nav.js +1 -1
  228. package/dist/collection/components/nav-link/nav-link.js +1 -1
  229. package/dist/collection/components/note/note.js +2 -2
  230. package/dist/collection/components/picker/picker.js +2 -2
  231. package/dist/collection/components/picker-column/picker-column.js +3 -3
  232. package/dist/collection/components/picker-column-option/picker-column-option.js +2 -2
  233. package/dist/collection/components/picker-legacy/picker.js +2 -2
  234. package/dist/collection/components/picker-legacy-column/picker-column.js +2 -2
  235. package/dist/collection/components/popover/popover.js +2 -2
  236. package/dist/collection/components/progress-bar/progress-bar.js +1 -1
  237. package/dist/collection/components/radio/radio.js +3 -3
  238. package/dist/collection/components/radio-group/radio-group.js +2 -2
  239. package/dist/collection/components/range/range.js +3 -3
  240. package/dist/collection/components/refresher/refresher.js +1 -1
  241. package/dist/collection/components/refresher-content/refresher-content.js +2 -2
  242. package/dist/collection/components/reorder/reorder.js +2 -2
  243. package/dist/collection/components/reorder-group/reorder-group.js +1 -1
  244. package/dist/collection/components/ripple-effect/ripple-effect.js +1 -1
  245. package/dist/collection/components/router-link/router-link.js +2 -2
  246. package/dist/collection/components/router-outlet/router-outlet.js +1 -1
  247. package/dist/collection/components/row/row.js +2 -2
  248. package/dist/collection/components/searchbar/searchbar.js +4 -4
  249. package/dist/collection/components/segment/segment.js +2 -2
  250. package/dist/collection/components/segment-button/segment-button.js +2 -2
  251. package/dist/collection/components/segment-content/segment-content.js +1 -1
  252. package/dist/collection/components/segment-view/segment-view.js +2 -2
  253. package/dist/collection/components/select/select.js +3 -3
  254. package/dist/collection/components/select-modal/select-modal.js +1 -1
  255. package/dist/collection/components/select-option/select-option.js +1 -1
  256. package/dist/collection/components/select-popover/select-popover.js +2 -2
  257. package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
  258. package/dist/collection/components/spinner/spinner.js +1 -1
  259. package/dist/collection/components/split-pane/split-pane.js +2 -2
  260. package/dist/collection/components/tab/tab.js +2 -2
  261. package/dist/collection/components/tab-bar/tab-bar.js +2 -2
  262. package/dist/collection/components/tab-button/tab-button.js +2 -2
  263. package/dist/collection/components/tabs/tabs.js +1 -1
  264. package/dist/collection/components/text/text.js +2 -2
  265. package/dist/collection/components/textarea/textarea.ionic.css +13 -20
  266. package/dist/collection/components/textarea/textarea.ios.css +8 -14
  267. package/dist/collection/components/textarea/textarea.js +89 -11
  268. package/dist/collection/components/textarea/textarea.md.css +9 -14
  269. package/dist/collection/components/thumbnail/thumbnail.js +2 -2
  270. package/dist/collection/components/title/title.js +2 -2
  271. package/dist/collection/components/toast/toast.js +2 -2
  272. package/dist/collection/components/toggle/toggle.js +3 -3
  273. package/dist/collection/components/toolbar/toolbar.js +2 -2
  274. package/dist/collection/utils/focus-trap.js +13 -2
  275. package/dist/collection/utils/forms/validity.js +31 -0
  276. package/dist/collection/utils/helpers.js +18 -4
  277. package/dist/collection/utils/overlays.js +80 -0
  278. package/dist/collection/utils/theme.js +25 -1
  279. package/dist/docs.json +178 -15
  280. package/dist/esm/{animation-BNuoDl-O.js → animation-C5cgFymd.js} +2 -2
  281. package/dist/esm/{app-globals-tX0s9Zd7.js → app-globals-BQa4bHAm.js} +1 -1
  282. package/dist/esm/{button-active-BF6GZ_yH.js → button-active-DpavRUgB.js} +2 -2
  283. package/dist/esm/{capacitor-pzVAlnC0.js → capacitor-Bc47Xxvc.js} +1 -1
  284. package/dist/esm/{config-mCdtaoPe.js → config-DK9FWNvn.js} +1 -1
  285. package/dist/esm/{data-DFCY8gnk.js → data-B5lRlGxI.js} +1 -1
  286. package/dist/esm/{framework-delegate-D2mUP0WI.js → framework-delegate-Dx6tn-_w.js} +2 -2
  287. package/dist/esm/{haptic-bBvyATla.js → haptic-Dti4RWuD.js} +1 -1
  288. package/dist/esm/{helpers-Bsml3FcE.js → helpers-6l6yFg3S.js} +19 -5
  289. package/dist/esm/{index-Bnw-zNoN.js → index-B6MWWbnL.js} +3 -3
  290. package/dist/esm/{index-BpFi2B8W.js → index-CXCvNx5X.js} +2 -2
  291. package/dist/esm/{index-BQI9hSZP.js → index-DO9elf_6.js} +4 -4
  292. package/dist/esm/{index-C8IsBmNU.js → index-gD7P82jx.js} +41 -4
  293. package/dist/esm/{index-M3l-IyxQ.js → index-urxfV0GK.js} +4 -4
  294. package/dist/esm/index.js +12 -12
  295. package/dist/esm/{input-shims-ACbgRt10.js → input-shims-CK_oprMl.js} +6 -6
  296. package/dist/esm/{input.utils-loPnHH5H.js → input.utils-C3tJs_iL.js} +3 -3
  297. package/dist/esm/ion-accordion_2.entry.js +4 -4
  298. package/dist/esm/ion-action-sheet.entry.js +10 -10
  299. package/dist/esm/ion-alert.entry.js +11 -11
  300. package/dist/esm/ion-app_8.entry.js +23 -23
  301. package/dist/esm/ion-avatar_3.entry.js +5 -5
  302. package/dist/esm/ion-back-button.entry.js +4 -4
  303. package/dist/esm/ion-backdrop.entry.js +2 -2
  304. package/dist/esm/ion-breadcrumb_2.entry.js +4 -4
  305. package/dist/esm/ion-button_2.entry.js +23 -18
  306. package/dist/esm/ion-card_5.entry.js +15 -17
  307. package/dist/esm/ion-checkbox.entry.js +8 -8
  308. package/dist/esm/ion-chip.entry.js +5 -5
  309. package/dist/esm/ion-col_3.entry.js +8 -8
  310. package/dist/esm/ion-datetime-button.entry.js +7 -7
  311. package/dist/esm/ion-datetime_3.entry.js +21 -21
  312. package/dist/esm/ion-divider.entry.js +4 -4
  313. package/dist/esm/ion-fab_3.entry.js +10 -10
  314. package/dist/esm/ion-img.entry.js +5 -5
  315. package/dist/esm/ion-infinite-scroll_2.entry.js +8 -8
  316. package/dist/esm/ion-input-otp.entry.js +69 -10
  317. package/dist/esm/ion-input-password-toggle.entry.js +6 -6
  318. package/dist/esm/ion-input.entry.js +11 -11
  319. package/dist/esm/ion-item-option_3.entry.js +9 -9
  320. package/dist/esm/ion-item_8.entry.js +16 -16
  321. package/dist/esm/ion-loading.entry.js +10 -10
  322. package/dist/esm/ion-menu_3.entry.js +14 -14
  323. package/dist/esm/ion-modal.entry.js +16 -16
  324. package/dist/esm/ion-nav_2.entry.js +8 -8
  325. package/dist/esm/ion-picker-column-option.entry.js +6 -6
  326. package/dist/esm/ion-picker-column.entry.js +9 -9
  327. package/dist/esm/ion-picker.entry.js +4 -4
  328. package/dist/esm/ion-popover.entry.js +10 -10
  329. package/dist/esm/ion-progress-bar.entry.js +5 -5
  330. package/dist/esm/ion-radio_2.entry.js +10 -10
  331. package/dist/esm/ion-range.entry.js +8 -8
  332. package/dist/esm/ion-refresher_2.entry.js +11 -11
  333. package/dist/esm/ion-reorder_2.entry.js +9 -9
  334. package/dist/esm/ion-ripple-effect.entry.js +3 -3
  335. package/dist/esm/ion-route_4.entry.js +6 -6
  336. package/dist/esm/ion-searchbar.entry.js +8 -8
  337. package/dist/esm/ion-segment-content.entry.js +2 -2
  338. package/dist/esm/ion-segment-view.entry.js +3 -3
  339. package/dist/esm/ion-segment_2.entry.js +8 -8
  340. package/dist/esm/ion-select-modal.entry.js +7 -7
  341. package/dist/esm/ion-select_3.entry.js +14 -14
  342. package/dist/esm/ion-spinner.entry.js +4 -4
  343. package/dist/esm/ion-split-pane.entry.js +4 -4
  344. package/dist/esm/ion-tab-bar_2.entry.js +11 -11
  345. package/dist/esm/ion-tab_2.entry.js +6 -6
  346. package/dist/esm/ion-text.entry.js +5 -5
  347. package/dist/esm/ion-textarea.entry.js +88 -18
  348. package/dist/esm/ion-toast.entry.js +10 -10
  349. package/dist/esm/ion-toggle.entry.js +10 -10
  350. package/dist/esm/{ionic-global-2lDD9k7y.js → ionic-global-KnoA5TnE.js} +5 -5
  351. package/dist/esm/ionic.js +5 -5
  352. package/dist/esm/{ios.transition-uJxJFbq8.js → ios.transition-D-ZEPllL.js} +5 -5
  353. package/dist/esm/{keyboard-CU1vRv-b.js → keyboard-C7jpSDLg.js} +1 -1
  354. package/dist/esm/{keyboard-B-HHSSYU.js → keyboard-CrGPuspU.js} +4 -4
  355. package/dist/esm/{keyboard-controller-Dplyc4OV.js → keyboard-controller-CFeM2qrY.js} +3 -3
  356. package/dist/esm/loader.js +5 -5
  357. package/dist/esm/{md.transition-Dp4NTeSh.js → md.transition-DiPaaGY2.js} +5 -5
  358. package/dist/esm/{notch-controller-BvFDmO69.js → notch-controller-CEiB8plC.js} +2 -2
  359. package/dist/esm/{overlays-B037a9Tz.js → overlays-BMHHx7Tm.js} +97 -6
  360. package/dist/esm/{status-tap-DXVlluKS.js → status-tap-BAJGCN-1.js} +3 -3
  361. package/dist/esm/{swipe-back-DNhAt9fY.js → swipe-back-bZ7qcCmT.js} +2 -2
  362. package/dist/esm/{theme-DiVJyqlX.js → theme-DaJxRxSQ.js} +25 -1
  363. package/dist/esm/validity-BjW8SOqw.js +48 -0
  364. package/dist/html.html-data.json +28 -1
  365. package/dist/ionic/index.esm.js +1 -1
  366. package/dist/ionic/ionic.esm.js +1 -1
  367. package/dist/ionic/{p-5daa0980.entry.js → p-01dec443.entry.js} +1 -1
  368. package/dist/ionic/{p-04b1d37a.entry.js → p-01e2ad58.entry.js} +1 -1
  369. package/dist/ionic/{p-112e1ca9.entry.js → p-04c2c873.entry.js} +1 -1
  370. package/dist/ionic/{p-28a9d991.entry.js → p-09aab7d0.entry.js} +1 -1
  371. package/dist/ionic/{p-be82dc77.entry.js → p-0b51f337.entry.js} +1 -1
  372. package/dist/ionic/{p-616dd053.entry.js → p-131e3b2d.entry.js} +1 -1
  373. package/dist/ionic/{p-0f124806.entry.js → p-1454c314.entry.js} +1 -1
  374. package/dist/ionic/p-14c73725.entry.js +4 -0
  375. package/dist/ionic/p-14d44c66.entry.js +4 -0
  376. package/dist/ionic/{p-a35678f4.entry.js → p-1af56d46.entry.js} +1 -1
  377. package/dist/ionic/{p-0744265c.entry.js → p-1c00e5cc.entry.js} +1 -1
  378. package/dist/ionic/{p-0ac7c560.entry.js → p-25db2a16.entry.js} +1 -1
  379. package/dist/ionic/{p-60549f06.entry.js → p-2ef8db38.entry.js} +1 -1
  380. package/dist/ionic/{p-0607ce8e.entry.js → p-31706aa0.entry.js} +1 -1
  381. package/dist/ionic/{p-19b2060d.entry.js → p-39f88b4f.entry.js} +1 -1
  382. package/dist/ionic/p-3b163efb.entry.js +4 -0
  383. package/dist/ionic/{p-ecba552f.entry.js → p-3d69c783.entry.js} +1 -1
  384. package/dist/ionic/{p-e1d84521.entry.js → p-3d7263e2.entry.js} +1 -1
  385. package/dist/ionic/p-3f93e610.entry.js +4 -0
  386. package/dist/ionic/{p-Cq83JWMg.js → p-44OfGWEp.js} +1 -1
  387. package/dist/ionic/{p-5543b7b8.entry.js → p-45ffc1cb.entry.js} +1 -1
  388. package/dist/ionic/{p-a89211bd.entry.js → p-4d7a2141.entry.js} +1 -1
  389. package/dist/ionic/{p-f667945d.entry.js → p-51ddc430.entry.js} +1 -1
  390. package/dist/ionic/{p-d9c9592a.entry.js → p-69bef533.entry.js} +1 -1
  391. package/dist/ionic/{p-dacd8666.entry.js → p-717fa143.entry.js} +1 -1
  392. package/dist/ionic/{p-742fed9f.entry.js → p-7482c8b3.entry.js} +1 -1
  393. package/dist/ionic/{p-bd295ca7.entry.js → p-74cab2da.entry.js} +1 -1
  394. package/dist/ionic/p-788de6f7.entry.js +4 -0
  395. package/dist/ionic/{p-01577340.entry.js → p-7ab2b10c.entry.js} +1 -1
  396. package/dist/ionic/{p-ecf8e713.entry.js → p-7dc9aa9a.entry.js} +1 -1
  397. package/dist/ionic/{p-27dbb44c.entry.js → p-7f6069f4.entry.js} +1 -1
  398. package/dist/ionic/{p-472b2ca3.entry.js → p-8093e290.entry.js} +1 -1
  399. package/dist/ionic/{p-59a79bd9.entry.js → p-82ca1cae.entry.js} +1 -1
  400. package/dist/ionic/{p-5f9d9c14.entry.js → p-83c3c072.entry.js} +1 -1
  401. package/dist/ionic/p-8ddbeb52.entry.js +4 -0
  402. package/dist/ionic/{p-af1f624e.entry.js → p-9e985573.entry.js} +1 -1
  403. package/dist/ionic/p-9f29b55e.entry.js +4 -0
  404. package/dist/ionic/{p-qZR4N8Lu.js → p-B0QqVGqF.js} +1 -1
  405. package/dist/ionic/p-BAmXMA83.js +4 -0
  406. package/dist/ionic/p-BIyO17h7.js +4 -0
  407. package/dist/ionic/p-BjW8SOqw.js +4 -0
  408. package/dist/ionic/{p-UafGZQ8e.js → p-Br3trE7L.js} +1 -1
  409. package/dist/ionic/{p-DeEDqH91.js → p-BunTRNUk.js} +1 -1
  410. package/dist/ionic/p-CCy93Kdo.js +4 -0
  411. package/dist/ionic/{p-HpOiAvpC.js → p-CDRncjej.js} +1 -1
  412. package/dist/ionic/{p-CtUK3cKk.js → p-CH4Ab9QE.js} +1 -1
  413. package/dist/ionic/{p-B3uz75uZ.js → p-CYW7idR0.js} +1 -1
  414. package/dist/ionic/{p-B-D7Cfki.js → p-Ccfet-fb.js} +1 -1
  415. package/dist/ionic/p-CdcKo7Br.js +4 -0
  416. package/dist/ionic/{p-COLHV2ym.js → p-CsyYiC5f.js} +1 -1
  417. package/dist/ionic/{p-DyaKZbAH.js → p-CtS5hTli.js} +1 -1
  418. package/dist/ionic/{p-DbQ5QkTP.js → p-Cv5jk_TK.js} +1 -1
  419. package/dist/ionic/{p-q1ZSn0l7.js → p-CzuA64hv.js} +1 -1
  420. package/dist/ionic/{p-D-BelbiX.js → p-DGDvjMxF.js} +1 -1
  421. package/dist/ionic/p-DKogfaNJ.js +4 -0
  422. package/dist/ionic/p-DOsU-ODO.js +4 -0
  423. package/dist/ionic/p-DPrmF8Ki.js +4 -0
  424. package/dist/ionic/p-DYzvRXm5.js +4 -0
  425. package/dist/ionic/p-DaJxRxSQ.js +4 -0
  426. package/dist/ionic/{p-CvRDI-Iz.js → p-TL0QOgYo.js} +1 -1
  427. package/dist/ionic/p-We-0jbXn.js +4 -0
  428. package/dist/ionic/{p-c082f853.entry.js → p-a0c5e546.entry.js} +1 -1
  429. package/dist/ionic/{p-0eecce18.entry.js → p-a339cde1.entry.js} +1 -1
  430. package/dist/ionic/p-a59f21b3.entry.js +4 -0
  431. package/dist/ionic/{p-d3f64c58.entry.js → p-a5f4fe92.entry.js} +1 -1
  432. package/dist/ionic/{p-826267d6.entry.js → p-aaff29dd.entry.js} +1 -1
  433. package/dist/ionic/{p-0c41c8a8.entry.js → p-b4da10d5.entry.js} +1 -1
  434. package/dist/ionic/{p-8f541b05.entry.js → p-bb04a3d7.entry.js} +1 -1
  435. package/dist/ionic/{p-a6a37a34.entry.js → p-bc19095e.entry.js} +1 -1
  436. package/dist/ionic/{p-8ee09d4e.entry.js → p-bd0057bd.entry.js} +1 -1
  437. package/dist/ionic/{p-da49c0fe.entry.js → p-bf763ab7.entry.js} +1 -1
  438. package/dist/ionic/{p-cdbfbff6.entry.js → p-c66416de.entry.js} +1 -1
  439. package/dist/ionic/{p-b475ec18.entry.js → p-d103fef9.entry.js} +1 -1
  440. package/dist/ionic/{p-68c064ce.entry.js → p-d9c0d206.entry.js} +1 -1
  441. package/dist/ionic/{p-412d5d9e.entry.js → p-e278c474.entry.js} +1 -1
  442. package/dist/ionic/{p-6bb99f41.entry.js → p-e8344f8f.entry.js} +1 -1
  443. package/dist/ionic/{p-04e0ff62.entry.js → p-ec510664.entry.js} +1 -1
  444. package/dist/ionic/p-eyZt9Ndv.js +4 -0
  445. package/dist/ionic/{p-8681a2a7.entry.js → p-f0894af8.entry.js} +1 -1
  446. package/dist/ionic/p-gD7P82jx.js +5 -0
  447. package/dist/ionic/p-hPTD29t1.js +4 -0
  448. package/dist/types/components/button/button.d.ts +4 -2
  449. package/dist/types/components/input-otp/input-otp.d.ts +37 -0
  450. package/dist/types/components/textarea/textarea.d.ts +36 -0
  451. package/dist/types/components.d.ts +18 -2
  452. package/dist/types/utils/focus-trap.d.ts +1 -1
  453. package/dist/types/utils/forms/validity.d.ts +7 -0
  454. package/dist/types/utils/theme.d.ts +9 -0
  455. package/hydrate/index.js +527 -210
  456. package/hydrate/index.mjs +527 -210
  457. package/package.json +1 -1
  458. package/dist/cjs/validity-BpS37YFM.js +0 -19
  459. package/dist/esm/validity-DJztqcrH.js +0 -17
  460. package/dist/ionic/p-2dc676b2.entry.js +0 -4
  461. package/dist/ionic/p-381eb2a4.entry.js +0 -4
  462. package/dist/ionic/p-57a2d30b.entry.js +0 -4
  463. package/dist/ionic/p-63a2b52a.entry.js +0 -4
  464. package/dist/ionic/p-7fe3ea65.entry.js +0 -4
  465. package/dist/ionic/p-83580e97.entry.js +0 -4
  466. package/dist/ionic/p-BiTKUjko.js +0 -4
  467. package/dist/ionic/p-ByhhQryg.js +0 -4
  468. package/dist/ionic/p-C8IsBmNU.js +0 -5
  469. package/dist/ionic/p-C8r4dtYR.js +0 -4
  470. package/dist/ionic/p-CK1xn1Nt.js +0 -4
  471. package/dist/ionic/p-C_97se21.js +0 -4
  472. package/dist/ionic/p-DHeUgOSJ.js +0 -4
  473. package/dist/ionic/p-DJztqcrH.js +0 -4
  474. package/dist/ionic/p-DM-v_NNE.js +0 -4
  475. package/dist/ionic/p-DiVJyqlX.js +0 -4
  476. package/dist/ionic/p-DoGrslUl.js +0 -4
  477. package/dist/ionic/p-Dq8ap6AD.js +0 -4
  478. package/dist/ionic/p-add1a5d8.entry.js +0 -4
  479. package/dist/ionic/p-da0a2ca6.entry.js +0 -4
  480. package/dist/ionic/p-nP9c7bo5.js +0 -4
  481. package/dist/ionic/p-of4jy1ch.js +0 -4
@@ -3,10 +3,10 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- var ionicGlobal = require('./ionic-global-DpRwOXLK.js');
7
- var helpers = require('./helpers-DnouLczu.js');
8
- var index = require('./index-D6Wc6v08.js');
9
- var frameworkDelegate = require('./framework-delegate-Bwdk9vFS.js');
6
+ var ionicGlobal = require('./ionic-global-Dq_E1GCa.js');
7
+ var helpers = require('./helpers-DF1tCuxf.js');
8
+ var index = require('./index-DjlJwy91.js');
9
+ var frameworkDelegate = require('./framework-delegate-C7fZ8bup.js');
10
10
  var gestureController = require('./gesture-controller-dtqlP_q4.js');
11
11
 
12
12
  /**
@@ -21,7 +21,7 @@ var gestureController = require('./gesture-controller-dtqlP_q4.js');
21
21
  * Note: We need this distinction because `disabled="false"` is
22
22
  * valid usage for the disabled property on ion-button.
23
23
  */
24
- const focusableQueryString = '[tabindex]:not([tabindex^="-"]):not([hidden]):not([disabled]), input:not([type=hidden]):not([tabindex^="-"]):not([hidden]):not([disabled]), textarea:not([tabindex^="-"]):not([hidden]):not([disabled]), button:not([tabindex^="-"]):not([hidden]):not([disabled]), select:not([tabindex^="-"]):not([hidden]):not([disabled]), ion-checkbox:not([tabindex^="-"]):not([hidden]):not([disabled]), ion-radio:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable[disabled="false"]:not([tabindex^="-"]):not([hidden])';
24
+ const focusableQueryString = '[tabindex]:not([tabindex^="-"]):not([hidden]):not([disabled]), input:not([type=hidden]):not([tabindex^="-"]):not([hidden]):not([disabled]), textarea:not([tabindex^="-"]):not([hidden]):not([disabled]), button:not([tabindex^="-"]):not([hidden]):not([disabled]), select:not([tabindex^="-"]):not([hidden]):not([disabled]), ion-checkbox:not([tabindex^="-"]):not([hidden]):not([disabled]), ion-radio:not([tabindex^="-"]):not([hidden]):not([disabled]), ion-textarea:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable[disabled="false"]:not([tabindex^="-"]):not([hidden])';
25
25
  /**
26
26
  * Focuses the first descendant in a context
27
27
  * that can receive focus. If none exists,
@@ -73,7 +73,18 @@ const focusElementInContext = (hostToFocus, fallbackElement) => {
73
73
  const shadowRoot = hostToFocus === null || hostToFocus === void 0 ? void 0 : hostToFocus.shadowRoot;
74
74
  if (shadowRoot) {
75
75
  // If there are no inner focusable elements, just focus the host element.
76
- elementToFocus = shadowRoot.querySelector(focusableQueryString) || hostToFocus;
76
+ const innerFocusable = shadowRoot.querySelector(focusableQueryString);
77
+ // If the host has a setFocus() method, use it to delegate focus properly.
78
+ // This is needed for shadow DOM components like ion-textarea that override
79
+ // focus() to delegate to their inner native elements.
80
+ const hasSetFocus = typeof hostToFocus.setFocus === 'function';
81
+ if (innerFocusable && hasSetFocus) {
82
+ // Keep the host element so we can call setFocus() on it
83
+ elementToFocus = hostToFocus;
84
+ }
85
+ else {
86
+ elementToFocus = innerFocusable || hostToFocus;
87
+ }
77
88
  }
78
89
  if (elementToFocus) {
79
90
  const radioGroup = elementToFocus.closest('ion-radio-group');
@@ -398,6 +409,86 @@ const connectListeners = (doc) => {
398
409
  doc.addEventListener('focus', (ev) => {
399
410
  trapKeyboardFocus(ev, doc);
400
411
  }, true);
412
+ // Listen for keydown events to intercept Tab navigation.
413
+ // This is needed for Safari and Firefox which may skip focusable
414
+ // elements or allow focus to escape the overlay.
415
+ // It also ensures proper focus delegation for shadow DOM elements
416
+ // like ion-textarea.
417
+ doc.addEventListener('keydown', (ev) => {
418
+ var _a, _b, _c;
419
+ if (ev.key !== 'Tab' && ev.key !== 'Alt+Tab')
420
+ return;
421
+ const lastOverlay = getPresentedOverlay(doc, 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker-legacy,ion-popover');
422
+ if (!lastOverlay || lastOverlay.classList.contains(FOCUS_TRAP_DISABLE_CLASS))
423
+ return;
424
+ const activeElement = doc.activeElement;
425
+ if (activeElement === lastOverlay) {
426
+ ev.preventDefault();
427
+ focusFirstDescendant(lastOverlay);
428
+ return;
429
+ }
430
+ // Check if activeElement is inside the overlay (including shadow DOM)
431
+ const isInsideOverlay = activeElement
432
+ ? lastOverlay.contains(activeElement) ||
433
+ (activeElement.getRootNode() instanceof ShadowRoot &&
434
+ lastOverlay.contains(activeElement.getRootNode().host)) ||
435
+ ((_b = (_a = lastOverlay.shadowRoot) === null || _a === void 0 ? void 0 : _a.contains(activeElement)) !== null && _b !== void 0 ? _b : false)
436
+ : false;
437
+ if (!isInsideOverlay)
438
+ return;
439
+ // Get all focusable elements from both light and shadow DOM
440
+ const allFocusable = [
441
+ ...lastOverlay.querySelectorAll(focusableQueryString),
442
+ ...(((_c = lastOverlay.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelectorAll(focusableQueryString)) || []),
443
+ ];
444
+ if (allFocusable.length === 0) {
445
+ ev.preventDefault();
446
+ return;
447
+ }
448
+ // Find current element's index (accounting for shadow DOM)
449
+ const currentIndex = activeElement
450
+ ? allFocusable.findIndex((el) => {
451
+ var _a;
452
+ if (el === activeElement)
453
+ return true;
454
+ if ((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.contains(activeElement))
455
+ return true;
456
+ const rootNode = activeElement.getRootNode();
457
+ return rootNode instanceof ShadowRoot && rootNode.host === el;
458
+ })
459
+ : -1;
460
+ ev.preventDefault();
461
+ // Helper to focus an element, handling shadow DOM properly
462
+ const focusElement = (element) => {
463
+ const shadowRoot = element.shadowRoot;
464
+ if (shadowRoot) {
465
+ const innerFocusable = shadowRoot.querySelector(focusableQueryString);
466
+ if (innerFocusable && typeof element.setFocus !== 'function') {
467
+ helpers.focusVisibleElement(innerFocusable);
468
+ return;
469
+ }
470
+ }
471
+ helpers.focusVisibleElement(element);
472
+ };
473
+ if (ev.shiftKey) {
474
+ // Shift+Tab: previous element, wrap to last if at first
475
+ if (currentIndex <= 0) {
476
+ focusLastDescendant(lastOverlay);
477
+ }
478
+ else {
479
+ focusElement(allFocusable[currentIndex - 1]);
480
+ }
481
+ }
482
+ else {
483
+ // Tab: next element, wrap to first if at last
484
+ if (currentIndex < 0 || currentIndex >= allFocusable.length - 1) {
485
+ focusFirstDescendant(lastOverlay);
486
+ }
487
+ else {
488
+ focusElement(allFocusable[currentIndex + 1]);
489
+ }
490
+ }
491
+ }, true);
401
492
  // handle back-button click
402
493
  doc.addEventListener('ionBackButton', (ev) => {
403
494
  const lastOverlay = getPresentedOverlay(doc);
@@ -3,9 +3,9 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- var index = require('./index-D6Wc6v08.js');
7
- var index$1 = require('./index-DUoP_H1L.js');
8
- var helpers = require('./helpers-DnouLczu.js');
6
+ var index = require('./index-DjlJwy91.js');
7
+ var index$1 = require('./index-C2sRwpb7.js');
8
+ var helpers = require('./helpers-DF1tCuxf.js');
9
9
  require('./focus-visible-BIj-I3-C.js');
10
10
 
11
11
  const startStatusTap = () => {
@@ -3,11 +3,11 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- var helpers = require('./helpers-DnouLczu.js');
6
+ var helpers = require('./helpers-DF1tCuxf.js');
7
7
  var dir = require('./dir-Cn0z1rJH.js');
8
8
  var index = require('./index-CAvQ7Tka.js');
9
9
  require('./focus-visible-BIj-I3-C.js');
10
- require('./index-D6Wc6v08.js');
10
+ require('./index-DjlJwy91.js');
11
11
  require('./gesture-controller-dtqlP_q4.js');
12
12
 
13
13
  const createSwipeBackGesture = (el, canStartHandler, onStartHandler, onMoveHandler, onEndHandler) => {
@@ -3,8 +3,32 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
+ /**
7
+ * Checks if an element has a parent matching the specified selector.
8
+ * This handles an element in both light DOM and shadow DOM contexts.
9
+ * @param selector The parent selector to check for (e.g., 'ion-datetime'
10
+ * or 'ion-toolbar[color]').
11
+ * @param el The element to check.
12
+ * @returns `true` if the element has a parent matching the specified selector,
13
+ * `false` otherwise.
14
+ */
6
15
  const hostContext = (selector, el) => {
7
- return el.closest(selector) !== null;
16
+ // Check the light DOM first
17
+ if (el.closest(selector) !== null) {
18
+ return true;
19
+ }
20
+ // For attribute or class selectors (e.g., 'ion-toolbar[color]' or
21
+ // 'ion-toolbar.ion-color') we can only check light DOM since tagName
22
+ // doesn't include attributes or classes.
23
+ if (selector.includes('[') || selector.includes('.')) {
24
+ return false;
25
+ }
26
+ // Check the shadow DOM by looking at the shadow root host and
27
+ // converting the selector to uppercase to compare with tagName
28
+ const upperCaseTagName = selector.toUpperCase();
29
+ const rootNode = el.getRootNode();
30
+ const shadowHost = rootNode instanceof ShadowRoot ? rootNode.host : null;
31
+ return (shadowHost === null || shadowHost === void 0 ? void 0 : shadowHost.tagName) === upperCaseTagName;
8
32
  };
9
33
  /**
10
34
  * Create the mode and color classes for the component based on the classes passed in
@@ -0,0 +1,51 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ 'use strict';
5
+
6
+ /**
7
+ * Checks if the form element is in an invalid state based on
8
+ * Ionic validation classes.
9
+ *
10
+ * @param el The form element to check.
11
+ * @returns `true` if the element is invalid, `false` otherwise.
12
+ */
13
+ const checkInvalidState = (el) => {
14
+ const hasIonTouched = el.classList.contains('ion-touched');
15
+ const hasIonInvalid = el.classList.contains('ion-invalid');
16
+ return hasIonTouched && hasIonInvalid;
17
+ };
18
+ const getValidityFlags = (validity) => {
19
+ return {
20
+ badInput: validity.badInput,
21
+ customError: validity.customError,
22
+ patternMismatch: validity.patternMismatch,
23
+ rangeOverflow: validity.rangeOverflow,
24
+ rangeUnderflow: validity.rangeUnderflow,
25
+ stepMismatch: validity.stepMismatch,
26
+ tooLong: validity.tooLong,
27
+ tooShort: validity.tooShort,
28
+ typeMismatch: validity.typeMismatch,
29
+ valueMissing: validity.valueMissing,
30
+ };
31
+ };
32
+ /**
33
+ * Reports the validity state of a native form element to ElementInternals.
34
+ * This delegates to the native element's built-in validation, which automatically
35
+ * handles required, minlength, maxlength, and other constraints.
36
+ */
37
+ const reportValidityToElementInternals = (nativeElement, internals) => {
38
+ if (!(nativeElement === null || nativeElement === void 0 ? void 0 : nativeElement.validity)) {
39
+ return;
40
+ }
41
+ if (nativeElement.validity.valid) {
42
+ internals.setValidity({});
43
+ }
44
+ else {
45
+ const validityFlags = getValidityFlags(nativeElement.validity);
46
+ internals.setValidity(validityFlags, nativeElement.validationMessage, nativeElement);
47
+ }
48
+ };
49
+
50
+ exports.checkInvalidState = checkInvalidState;
51
+ exports.reportValidityToElementInternals = reportValidityToElementInternals;
@@ -633,4 +633,14 @@ ion-ripple-effect {
633
633
  }
634
634
  :host(.button-large) ::slotted(ion-badge:not(.long-badge).badge-vertical-bottom) {
635
635
  inset-inline-end: var(--token-space-200, var(--token-scale-200, 8px));
636
+ }
637
+
638
+ :host(.in-datetime) {
639
+ font-size: var(--token-font-size-400, 16px);
640
+ font-weight: var(--token-font-weight-medium, 500);
641
+ letter-spacing: var(--token-font-letter-spacing-1, 1%);
642
+ line-height: var(--token-font-line-height-600, var(--token-scale-600, 24px));
643
+ text-decoration: none;
644
+ text-transform: none;
645
+ min-height: var(--token-space-1200, var(--token-scale-1200, 48px));
636
646
  }
@@ -395,6 +395,16 @@ ion-ripple-effect {
395
395
  padding-bottom: 2px;
396
396
  }
397
397
 
398
+ :host(.in-datetime) {
399
+ -webkit-margin-start: 2px;
400
+ margin-inline-start: 2px;
401
+ -webkit-margin-end: 2px;
402
+ margin-inline-end: 2px;
403
+ margin-top: 0px;
404
+ margin-bottom: 0px;
405
+ min-height: 32px;
406
+ }
407
+
398
408
  /**
399
409
  * Convert a pixels given value into rem
400
410
  *
@@ -743,4 +753,13 @@ ion-ripple-effect {
743
753
  :host(.button-outline.ion-activated.in-toolbar:not(.ion-color):not(.in-toolbar-color)) .button-native {
744
754
  background: var(--ion-toolbar-color, var(--color));
745
755
  color: var(--ion-toolbar-background, var(--background), var(--ion-color-primary-contrast, #fff));
756
+ }
757
+
758
+ :host(.in-datetime) {
759
+ --padding-top: 3px;
760
+ --padding-bottom: 3px;
761
+ --padding-start: 5px;
762
+ --padding-end: 5px;
763
+ font-size: clamp(17px, 1.0625rem, 21.08px);
764
+ font-weight: 400;
746
765
  }
@@ -19,9 +19,10 @@ import { getIonTheme, getIonMode } from "../../global/ionic-global";
19
19
  */
20
20
  export class Button {
21
21
  constructor() {
22
+ this.inDatetime = false;
22
23
  this.inItem = false;
23
24
  this.inListHeader = false;
24
- this.inToolbar = false;
25
+ this.inButtons = false;
25
26
  this.formButtonEl = null;
26
27
  this.formEl = null;
27
28
  this.inheritedAttributes = {};
@@ -127,9 +128,10 @@ export class Button {
127
128
  }
128
129
  }
129
130
  componentWillLoad() {
130
- this.inToolbar = !!this.el.closest('ion-buttons');
131
- this.inListHeader = !!this.el.closest('ion-list-header');
132
- this.inItem = !!this.el.closest('ion-item') || !!this.el.closest('ion-item-divider');
131
+ this.inDatetime = hostContext('ion-datetime', this.el);
132
+ this.inButtons = hostContext('ion-buttons', this.el);
133
+ this.inListHeader = hostContext('ion-list-header', this.el);
134
+ this.inItem = hostContext('ion-item', this.el) || hostContext('ion-item-divider', this.el);
133
135
  this.inheritedAttributes = inheritAriaAttributes(this.el);
134
136
  }
135
137
  get hasIconOnly() {
@@ -140,9 +142,11 @@ export class Button {
140
142
  }
141
143
  get rippleType() {
142
144
  const hasClearFill = this.fill === undefined || this.fill === 'clear';
143
- // If the button is in a toolbar, has a clear fill (which is the default)
144
- // and only has an icon we use the unbounded "circular" ripple effect
145
- if (hasClearFill && this.hasIconOnly && this.inToolbar) {
145
+ // Use the unbounded "circular" ripple effect if it:
146
+ // - Has a clear fill (the default)
147
+ // - Only has an icon and
148
+ // - Is inside of buttons (used in a toolbar) or a datetime
149
+ if (hasClearFill && this.hasIconOnly && (this.inButtons || this.inDatetime)) {
146
150
  return 'unbounded';
147
151
  }
148
152
  return 'bounded';
@@ -245,7 +249,7 @@ export class Button {
245
249
  };
246
250
  let fill = this.fill;
247
251
  if (fill === undefined) {
248
- fill = this.inToolbar || this.inListHeader ? 'clear' : 'solid';
252
+ fill = this.inDatetime || this.inButtons || this.inListHeader ? 'clear' : 'solid';
249
253
  }
250
254
  /**
251
255
  * We call renderHiddenButton in the render function to account
@@ -257,7 +261,7 @@ export class Button {
257
261
  {
258
262
  type !== 'button' && this.renderHiddenButton();
259
263
  }
260
- return (h(Host, { key: '346791d13d8866ea7051d9147ab3c6ece0714825', onClick: this.handleClick, "aria-disabled": disabled ? 'true' : null, class: createColorClasses(color, {
264
+ return (h(Host, { key: '9e59432c723f240b0b7b2d5536b175ea13ac9fdd', onClick: this.handleClick, "aria-disabled": disabled ? 'true' : null, class: createColorClasses(color, {
261
265
  [theme]: true,
262
266
  [buttonType]: true,
263
267
  [`${buttonType}-${expand}`]: expand !== undefined,
@@ -265,15 +269,16 @@ export class Button {
265
269
  [`${buttonType}-${shape}`]: true,
266
270
  [`${buttonType}-${fill}`]: true,
267
271
  [`${buttonType}-strong`]: strong,
272
+ 'in-datetime': this.inDatetime,
268
273
  'in-toolbar': hostContext('ion-toolbar', this.el),
269
274
  'in-toolbar-color': hostContext('ion-toolbar[color]', this.el),
270
- 'in-buttons': hostContext('ion-buttons', this.el),
275
+ 'in-buttons': this.inButtons,
271
276
  'button-has-icon-only': hasIconOnly,
272
277
  'button-has-badge': hasBadge,
273
278
  'button-disabled': disabled,
274
279
  'ion-activatable': true,
275
280
  'ion-focusable': true,
276
- }) }, h(TagType, Object.assign({ key: 'e59ca440e1e05dce6df3b2df94547c7ebde4281e' }, attrs, { class: "button-native", part: "native", disabled: disabled, onFocus: this.onFocus, onBlur: this.onBlur }, inheritedAttributes), h("span", { key: '7b5a6c15c8a0aa371a2aa7da0dca5d3b0fe64edd', class: "button-inner" }, h("slot", { key: 'c5432839f3339c9ab6e1846ebd2d5e640a5db416', name: "icon-only", onSlotchange: this.slotChanged }), h("slot", { key: '8a7e2ba259cff5bd35baf977ef6411e23e78bc1f', name: "start" }), h("slot", { key: '77bc39e3f9ce152a8cf7776fdc1a8de7c1797ac3' }), h("slot", { key: '0cb5f3d62580ec980c99986ef50e90cd401800a7', name: "end" })), mode === 'md' && h("ion-ripple-effect", { key: 'd1bb52466e293a768c9949d16d957818ee5573fa', type: this.rippleType }))));
281
+ }) }, h(TagType, Object.assign({ key: '8f003ff3e91da74d83ff20fe14bc16133d20d3fb' }, attrs, { class: "button-native", part: "native", disabled: disabled, onFocus: this.onFocus, onBlur: this.onBlur }, inheritedAttributes), h("span", { key: 'fb0f32c83c884d131a5f62464990434a552c2221', class: "button-inner" }, h("slot", { key: '163f8bd2e1fc0790aed3db9691f564bb2796a4ee', name: "icon-only", onSlotchange: this.slotChanged }), h("slot", { key: 'a858bcdf6040488745720147d9e653746a329623', name: "start" }), h("slot", { key: 'c36663965130158fa0e29cd889dedfec9d4d7a07' }), h("slot", { key: '5f567b14d90ed9a00e2958d4383659a13535c66f', name: "end" })), mode === 'md' && h("ion-ripple-effect", { key: '15d3a9674f73b4757c8c7d5a5df75ac113f10ba5', type: this.rippleType }))));
277
282
  }
278
283
  static get is() { return "ion-button"; }
279
284
  static get encapsulation() { return "shadow"; }
@@ -389,7 +394,7 @@ export class Button {
389
394
  "optional": true,
390
395
  "docs": {
391
396
  "tags": [],
392
- "text": "Set to `\"clear\"` for a transparent button that resembles a flat button, to `\"outline\"`\nfor a transparent button with a border, or to `\"solid\"` for a button with a filled background.\nThe default fill is `\"solid\"` except inside of a toolbar, where the default is `\"clear\"`."
397
+ "text": "Set to `\"clear\"` for a transparent button that resembles a flat button, to `\"outline\"`\nfor a transparent button with a border, or to `\"solid\"` for a button with a filled background.\nThe default fill is `\"solid\"` except when inside of a buttons or datetime component, where\nthe default fill is `\"clear\"`."
393
398
  },
394
399
  "getter": false,
395
400
  "setter": false,
@@ -395,6 +395,16 @@ ion-ripple-effect {
395
395
  padding-bottom: 2px;
396
396
  }
397
397
 
398
+ :host(.in-datetime) {
399
+ -webkit-margin-start: 2px;
400
+ margin-inline-start: 2px;
401
+ -webkit-margin-end: 2px;
402
+ margin-inline-end: 2px;
403
+ margin-top: 0px;
404
+ margin-bottom: 0px;
405
+ min-height: 32px;
406
+ }
407
+
398
408
  /**
399
409
  * Convert a pixels given value into rem
400
410
  *
@@ -647,4 +657,18 @@ ion-ripple-effect {
647
657
  :host(.button-outline.ion-activated.in-toolbar:not(.ion-color):not(.in-toolbar-color)) .button-native {
648
658
  background: var(--ion-toolbar-background, var(--color));
649
659
  color: var(--ion-toolbar-color, var(--background), var(--ion-color-primary-contrast, #fff));
660
+ }
661
+
662
+ :host(.in-datetime) {
663
+ --padding-top: 3px;
664
+ --padding-bottom: 3px;
665
+ --padding-start: 8px;
666
+ --padding-end: 8px;
667
+ --box-shadow: none;
668
+ }
669
+
670
+ :host(.in-datetime.button-clear) {
671
+ --background-activated: transparent;
672
+ --background-focused: currentColor;
673
+ --background-hover: currentColor;
650
674
  }
@@ -1,4 +1,4 @@
1
- ion-card-content {
1
+ :host {
2
2
  position: relative;
3
3
  }
4
4
 
@@ -63,7 +63,7 @@ ion-card-content {
63
63
  * @param unit (optional) - The unit to convert the initial font size to. Use this if you want to
64
64
  * convert to a unit other than $baselineUnit.
65
65
  */
66
- .card-content-ionic {
66
+ :host {
67
67
  -webkit-padding-start: var(--token-space-400, var(--token-scale-400, 16px));
68
68
  padding-inline-start: var(--token-space-400, var(--token-scale-400, 16px));
69
69
  -webkit-padding-end: var(--token-space-400, var(--token-scale-400, 16px));
@@ -80,13 +80,10 @@ ion-card-content {
80
80
  flex-direction: column;
81
81
  gap: var(--token-space-400, var(--token-scale-400, 16px));
82
82
  }
83
- .card-content-ionic img {
83
+
84
+ ::slotted(img) {
84
85
  margin-left: 0;
85
86
  margin-right: 0;
86
87
  margin-top: var(--token-space-200, var(--token-scale-200, 8px));
87
88
  margin-bottom: var(--token-space-200, var(--token-scale-200, 8px));
88
- }
89
-
90
- ion-card-header + .card-content-ionic {
91
- padding-top: 0;
92
89
  }
@@ -1,4 +1,4 @@
1
- ion-card-content {
1
+ :host {
2
2
  position: relative;
3
3
  }
4
4
 
@@ -63,7 +63,7 @@ ion-card-content {
63
63
  * }
64
64
  * }
65
65
  */
66
- ion-card-content {
66
+ :host {
67
67
  display: block;
68
68
  }
69
69
 
@@ -128,7 +128,7 @@ ion-card-content {
128
128
  * }
129
129
  * }
130
130
  */
131
- .card-content-ios {
131
+ :host {
132
132
  -webkit-padding-start: 20px;
133
133
  padding-inline-start: 20px;
134
134
  -webkit-padding-end: 20px;
@@ -138,41 +138,11 @@ ion-card-content {
138
138
  font-size: 1rem;
139
139
  line-height: 1.4;
140
140
  }
141
- .card-content-ios h1 {
142
- margin-left: 0;
143
- margin-right: 0;
144
- margin-top: 0;
145
- margin-bottom: 2px;
146
- font-size: 1.5rem;
147
- font-weight: normal;
148
- }
149
- .card-content-ios h2 {
150
- margin-left: 0;
151
- margin-right: 0;
152
- margin-top: 2px;
153
- margin-bottom: 2px;
154
- font-size: 1rem;
155
- font-weight: normal;
156
- }
157
- .card-content-ios h3,
158
- .card-content-ios h4,
159
- .card-content-ios h5,
160
- .card-content-ios h6 {
161
- margin-left: 0;
162
- margin-right: 0;
163
- margin-top: 2px;
164
- margin-bottom: 2px;
165
- font-size: 0.875rem;
166
- font-weight: normal;
167
- }
168
- .card-content-ios p {
141
+
142
+ ::slotted(p) {
169
143
  margin-left: 0;
170
144
  margin-right: 0;
171
145
  margin-top: 0;
172
146
  margin-bottom: 2px;
173
147
  font-size: 0.875rem;
174
- }
175
-
176
- ion-card-header + .card-content-ios {
177
- padding-top: 0;
178
148
  }
@@ -10,13 +10,12 @@ import { getIonTheme } from "../../global/ionic-global";
10
10
  export class CardContent {
11
11
  render() {
12
12
  const theme = getIonTheme(this);
13
- return (h(Host, { key: '9e0a23306b43bafffd82900a4da7e020fe45c04f', class: {
13
+ return (h(Host, { key: 'c01bc2a0212e1567b9654a4a79670ae636779764', class: {
14
14
  [theme]: true,
15
- // Used internally for styling
16
- [`card-content-${theme}`]: true,
17
- } }));
15
+ } }, h("slot", { key: 'beb72f0ed2c9924eb198a30bf6942a430b22d2a7' })));
18
16
  }
19
17
  static get is() { return "ion-card-content"; }
18
+ static get encapsulation() { return "shadow"; }
20
19
  static get originalStyleUrls() {
21
20
  return {
22
21
  "ios": ["card-content.ios.scss"],
@@ -1,4 +1,4 @@
1
- ion-card-content {
1
+ :host {
2
2
  position: relative;
3
3
  }
4
4
 
@@ -63,7 +63,7 @@ ion-card-content {
63
63
  * }
64
64
  * }
65
65
  */
66
- ion-card-content {
66
+ :host {
67
67
  display: block;
68
68
  }
69
69
 
@@ -128,7 +128,7 @@ ion-card-content {
128
128
  * }
129
129
  * }
130
130
  */
131
- .card-content-md {
131
+ :host {
132
132
  -webkit-padding-start: 16px;
133
133
  padding-inline-start: 16px;
134
134
  -webkit-padding-end: 16px;
@@ -138,34 +138,8 @@ ion-card-content {
138
138
  font-size: 0.875rem;
139
139
  line-height: 1.5;
140
140
  }
141
- .card-content-md h1 {
142
- margin-left: 0;
143
- margin-right: 0;
144
- margin-top: 0;
145
- margin-bottom: 2px;
146
- font-size: 1.5rem;
147
- font-weight: normal;
148
- }
149
- .card-content-md h2 {
150
- margin-left: 0;
151
- margin-right: 0;
152
- margin-top: 2px;
153
- margin-bottom: 2px;
154
- font-size: 1rem;
155
- font-weight: normal;
156
- }
157
- .card-content-md h3,
158
- .card-content-md h4,
159
- .card-content-md h5,
160
- .card-content-md h6 {
161
- margin-left: 0;
162
- margin-right: 0;
163
- margin-top: 2px;
164
- margin-bottom: 2px;
165
- font-size: 0.875rem;
166
- font-weight: normal;
167
- }
168
- .card-content-md p {
141
+
142
+ ::slotted(p) {
169
143
  margin-left: 0;
170
144
  margin-right: 0;
171
145
  margin-top: 0;
@@ -173,8 +147,4 @@ ion-card-content {
173
147
  font-size: 0.875rem;
174
148
  font-weight: normal;
175
149
  line-height: 1.5;
176
- }
177
-
178
- ion-card-header + .card-content-md {
179
- padding-top: 0;
180
150
  }
@@ -19,11 +19,11 @@ export class CardHeader {
19
19
  }
20
20
  render() {
21
21
  const theme = getIonTheme(this);
22
- return (h(Host, { key: '2d5d1399c54960f0ccb114a6aaddd7ff16d3d091', class: createColorClasses(this.color, {
22
+ return (h(Host, { key: '5bc382eaec57b8b5805ebbe6e20975fef774863e', class: createColorClasses(this.color, {
23
23
  'card-header-translucent': this.translucent,
24
24
  'ion-inherit-color': true,
25
25
  [theme]: true,
26
- }) }, h("slot", { key: 'aae02f8bcd357d741990353cc09dafcbce3139c5' })));
26
+ }) }, h("slot", { key: 'ffa37e23c45c9df26198b78c152252afa62c436e' })));
27
27
  }
28
28
  static get is() { return "ion-card-header"; }
29
29
  static get encapsulation() { return "shadow"; }
@@ -11,10 +11,10 @@ import { getIonTheme } from "../../global/ionic-global";
11
11
  export class CardSubtitle {
12
12
  render() {
13
13
  const theme = getIonTheme(this);
14
- return (h(Host, { key: '91e326f598ccf4f2c6b3030cbdb69b065d9a8434', role: "heading", "aria-level": "3", class: createColorClasses(this.color, {
14
+ return (h(Host, { key: '2599d9c0cdbe4dc8d35a0013d9884b88cd96acfc', role: "heading", "aria-level": "3", class: createColorClasses(this.color, {
15
15
  'ion-inherit-color': true,
16
16
  [theme]: true,
17
- }) }, h("slot", { key: 'b23b77de6877e1e1212bc624410ad4d0ce4727a9' })));
17
+ }) }, h("slot", { key: 'e786776c98e3a8b046777f185bb721fe6739c4cf' })));
18
18
  }
19
19
  static get is() { return "ion-card-subtitle"; }
20
20
  static get encapsulation() { return "shadow"; }
@@ -11,10 +11,10 @@ import { getIonTheme } from "../../global/ionic-global";
11
11
  export class CardTitle {
12
12
  render() {
13
13
  const theme = getIonTheme(this);
14
- return (h(Host, { key: 'abcd0c06a8afd4b358442588a0171354c4b24b45', role: "heading", "aria-level": "2", class: createColorClasses(this.color, {
14
+ return (h(Host, { key: 'bf74b6498640e8207d9962453e5b351aad480547', role: "heading", "aria-level": "2", class: createColorClasses(this.color, {
15
15
  'ion-inherit-color': true,
16
16
  [theme]: true,
17
- }) }, h("slot", { key: '8bf45935b7d625d379d7fb6e87fc9db7dddd15f9' })));
17
+ }) }, h("slot", { key: 'ffc0863719f4582028a1249fdcb78aa03b123d3f' })));
18
18
  }
19
19
  static get is() { return "ion-card-title"; }
20
20
  static get encapsulation() { return "shadow"; }