@ionic/core 8.7.10-dev.11762798751.11b77c85 → 8.7.10-dev.11763413450.1212cecf

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 (287) hide show
  1. package/components/checkbox.js +63 -9
  2. package/components/ion-datetime.js +39 -4
  3. package/components/ion-input.js +7 -6
  4. package/components/ion-searchbar.js +6 -6
  5. package/components/ion-select.js +7 -6
  6. package/components/ion-textarea.js +2 -1
  7. package/components/ion-toggle.js +62 -12
  8. package/components/notch-controller.js +153 -0
  9. package/components/radio-group.js +60 -7
  10. package/components/validity.js +1 -150
  11. package/dist/cjs/{animation-D_c13yq_.js → animation-Bt3H9L1C.js} +1 -1
  12. package/dist/cjs/{app-globals--1qFsqEw.js → app-globals-Ciccnk9_.js} +1 -1
  13. package/dist/cjs/{button-active-CQiBOKCI.js → button-active-CMc8cD90.js} +1 -1
  14. package/dist/cjs/{config-DL8XJF0D.js → config-C5fsO43a.js} +1 -1
  15. package/dist/cjs/{data-DtEHxOpt.js → data-JwZKaIQB.js} +1 -1
  16. package/dist/cjs/{framework-delegate-DmSgIb_h.js → framework-delegate-DMJRBuDi.js} +1 -1
  17. package/dist/cjs/{hardware-back-button-C72O8m7E.js → hardware-back-button-VCK4V3mG.js} +1 -1
  18. package/dist/cjs/{helpers-xCoR213K.js → helpers-DrTqNghc.js} +1 -1
  19. package/dist/cjs/{index-WEBAL2Zz.js → index-094mMFB-.js} +4 -4
  20. package/dist/cjs/{index-DOeyHw27.js → index-C534ULug.js} +2 -2
  21. package/dist/cjs/{index-FugOCm8C.js → index-CO6eryBo.js} +2 -2
  22. package/dist/cjs/{index-qWlbeMTM.js → index-D6Wc6v08.js} +3 -41
  23. package/dist/cjs/{index-FdJ4-6Rg.js → index-DrMUZJj6.js} +5 -5
  24. package/dist/cjs/index.cjs.js +12 -12
  25. package/dist/cjs/{input-shims-CYpwizql.js → input-shims-CW0KUFTQ.js} +3 -3
  26. package/dist/cjs/{input.utils-DhlH-Ng5.js → input.utils-B_QROI2g.js} +2 -2
  27. package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -3
  28. package/dist/cjs/ion-action-sheet.cjs.entry.js +8 -8
  29. package/dist/cjs/ion-alert.cjs.entry.js +9 -9
  30. package/dist/cjs/ion-app_8.cjs.entry.js +12 -12
  31. package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
  32. package/dist/cjs/ion-back-button.cjs.entry.js +3 -3
  33. package/dist/cjs/ion-backdrop.cjs.entry.js +2 -2
  34. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +3 -3
  35. package/dist/cjs/ion-button_2.cjs.entry.js +3 -3
  36. package/dist/cjs/ion-card_5.cjs.entry.js +3 -3
  37. package/dist/cjs/ion-checkbox.cjs.entry.js +63 -11
  38. package/dist/cjs/ion-chip.cjs.entry.js +2 -2
  39. package/dist/cjs/ion-col_3.cjs.entry.js +2 -2
  40. package/dist/cjs/ion-datetime-button.cjs.entry.js +4 -4
  41. package/dist/cjs/ion-datetime_3.cjs.entry.js +47 -12
  42. package/dist/cjs/ion-fab_3.cjs.entry.js +3 -3
  43. package/dist/cjs/ion-img.cjs.entry.js +3 -3
  44. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +5 -5
  45. package/dist/cjs/ion-input-otp.cjs.entry.js +3 -3
  46. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +2 -2
  47. package/dist/cjs/ion-input.cjs.entry.js +11 -10
  48. package/dist/cjs/ion-item-option_3.cjs.entry.js +4 -4
  49. package/dist/cjs/ion-item_8.cjs.entry.js +3 -3
  50. package/dist/cjs/ion-loading.cjs.entry.js +8 -8
  51. package/dist/cjs/ion-menu_3.cjs.entry.js +8 -8
  52. package/dist/cjs/ion-modal.cjs.entry.js +9 -9
  53. package/dist/cjs/ion-nav_2.cjs.entry.js +6 -6
  54. package/dist/cjs/ion-picker-column-option.cjs.entry.js +3 -3
  55. package/dist/cjs/ion-picker-column.cjs.entry.js +3 -3
  56. package/dist/cjs/ion-picker.cjs.entry.js +2 -2
  57. package/dist/cjs/ion-popover.cjs.entry.js +8 -8
  58. package/dist/cjs/ion-progress-bar.cjs.entry.js +3 -3
  59. package/dist/cjs/ion-radio_2.cjs.entry.js +60 -9
  60. package/dist/cjs/ion-range.cjs.entry.js +4 -4
  61. package/dist/cjs/ion-refresher_2.cjs.entry.js +6 -6
  62. package/dist/cjs/ion-reorder_2.cjs.entry.js +4 -4
  63. package/dist/cjs/ion-ripple-effect.cjs.entry.js +2 -2
  64. package/dist/cjs/ion-route_4.cjs.entry.js +3 -3
  65. package/dist/cjs/ion-searchbar.cjs.entry.js +8 -8
  66. package/dist/cjs/ion-segment-content.cjs.entry.js +1 -1
  67. package/dist/cjs/ion-segment-view.cjs.entry.js +1 -1
  68. package/dist/cjs/ion-segment_2.cjs.entry.js +3 -3
  69. package/dist/cjs/ion-select-modal.cjs.entry.js +6 -6
  70. package/dist/cjs/ion-select_3.cjs.entry.js +13 -12
  71. package/dist/cjs/ion-spinner.cjs.entry.js +2 -2
  72. package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
  73. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +3 -3
  74. package/dist/cjs/ion-tab_2.cjs.entry.js +3 -3
  75. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  76. package/dist/cjs/ion-textarea.cjs.entry.js +7 -6
  77. package/dist/cjs/ion-toast.cjs.entry.js +8 -8
  78. package/dist/cjs/ion-toggle.cjs.entry.js +61 -13
  79. package/dist/cjs/{ionic-global-CR8JSFWa.js → ionic-global-HMVqOFGO.js} +1 -1
  80. package/dist/cjs/ionic.cjs.js +5 -5
  81. package/dist/cjs/{ios.transition-MQamiuLS.js → ios.transition-BOt_uW73.js} +4 -4
  82. package/dist/cjs/loader.cjs.js +4 -4
  83. package/dist/cjs/{md.transition-VK5nuqXu.js → md.transition-Dt968VXB.js} +4 -4
  84. package/dist/cjs/{validity-ilhIJL9Q.js → notch-controller-Bzqhjm4f.js} +1 -15
  85. package/dist/cjs/{overlays-DcMnmLe2.js → overlays-DxIZwUXI.js} +5 -5
  86. package/dist/cjs/{status-tap-C0NZlIwJ.js → status-tap-g0sWWkXk.js} +3 -3
  87. package/dist/cjs/{swipe-back-CdOHy9bk.js → swipe-back-BIayeNOD.js} +2 -2
  88. package/dist/cjs/validity-BpS37YFM.js +19 -0
  89. package/dist/collection/collection-manifest.json +2 -2
  90. package/dist/collection/components/checkbox/checkbox.js +67 -9
  91. package/dist/collection/components/datetime/datetime.ios.css +15 -0
  92. package/dist/collection/components/datetime/datetime.js +37 -2
  93. package/dist/collection/components/datetime/datetime.md.css +15 -0
  94. package/dist/collection/components/input/input.js +8 -8
  95. package/dist/collection/components/radio-group/radio-group.js +64 -7
  96. package/dist/collection/components/searchbar/searchbar.js +9 -9
  97. package/dist/collection/components/select/select.js +5 -5
  98. package/dist/collection/components/toggle/toggle.js +62 -12
  99. package/dist/docs.json +25 -15
  100. package/dist/esm/{animation-BMjqGaKJ.js → animation-Dt8bGnA-.js} +1 -1
  101. package/dist/esm/{app-globals-CXKe5CYv.js → app-globals-BDSf8fOA.js} +1 -1
  102. package/dist/esm/{button-active-DsHCf5yJ.js → button-active-L570Swow.js} +1 -1
  103. package/dist/esm/{config-FyGnL1d5.js → config-mCdtaoPe.js} +1 -1
  104. package/dist/esm/{data-VwBJONjN.js → data-DCORV9FH.js} +1 -1
  105. package/dist/esm/{framework-delegate-DA71As64.js → framework-delegate-BYawdMXj.js} +1 -1
  106. package/dist/esm/{hardware-back-button-gEuwgxq4.js → hardware-back-button-CPLxO-Ev.js} +1 -1
  107. package/dist/esm/{helpers-Br4puuoA.js → helpers-DEn3pfjm.js} +1 -1
  108. package/dist/esm/{index-nzxJGPo-.js → index-Bs3kT4bc.js} +2 -2
  109. package/dist/esm/{index-COOKa-0k.js → index-C8IsBmNU.js} +3 -41
  110. package/dist/esm/{index-DNUVD4sY.js → index-CvDIirVx.js} +5 -5
  111. package/dist/esm/{index-CZzUL5H7.js → index-ceb5RaMT.js} +2 -2
  112. package/dist/esm/{index-DKnepNGf.js → index-r2D9DEro.js} +4 -4
  113. package/dist/esm/index.js +12 -12
  114. package/dist/esm/{input-shims-G0QQ_JXi.js → input-shims-DyOpfTg6.js} +3 -3
  115. package/dist/esm/{input.utils-BRuJbV55.js → input.utils-DrvTa8gz.js} +2 -2
  116. package/dist/esm/ion-accordion_2.entry.js +3 -3
  117. package/dist/esm/ion-action-sheet.entry.js +8 -8
  118. package/dist/esm/ion-alert.entry.js +9 -9
  119. package/dist/esm/ion-app_8.entry.js +12 -12
  120. package/dist/esm/ion-avatar_3.entry.js +2 -2
  121. package/dist/esm/ion-back-button.entry.js +3 -3
  122. package/dist/esm/ion-backdrop.entry.js +2 -2
  123. package/dist/esm/ion-breadcrumb_2.entry.js +3 -3
  124. package/dist/esm/ion-button_2.entry.js +3 -3
  125. package/dist/esm/ion-card_5.entry.js +3 -3
  126. package/dist/esm/ion-checkbox.entry.js +63 -11
  127. package/dist/esm/ion-chip.entry.js +2 -2
  128. package/dist/esm/ion-col_3.entry.js +2 -2
  129. package/dist/esm/ion-datetime-button.entry.js +4 -4
  130. package/dist/esm/ion-datetime_3.entry.js +47 -12
  131. package/dist/esm/ion-fab_3.entry.js +3 -3
  132. package/dist/esm/ion-img.entry.js +3 -3
  133. package/dist/esm/ion-infinite-scroll_2.entry.js +5 -5
  134. package/dist/esm/ion-input-otp.entry.js +3 -3
  135. package/dist/esm/ion-input-password-toggle.entry.js +2 -2
  136. package/dist/esm/ion-input.entry.js +10 -9
  137. package/dist/esm/ion-item-option_3.entry.js +4 -4
  138. package/dist/esm/ion-item_8.entry.js +3 -3
  139. package/dist/esm/ion-loading.entry.js +8 -8
  140. package/dist/esm/ion-menu_3.entry.js +8 -8
  141. package/dist/esm/ion-modal.entry.js +9 -9
  142. package/dist/esm/ion-nav_2.entry.js +6 -6
  143. package/dist/esm/ion-picker-column-option.entry.js +3 -3
  144. package/dist/esm/ion-picker-column.entry.js +3 -3
  145. package/dist/esm/ion-picker.entry.js +2 -2
  146. package/dist/esm/ion-popover.entry.js +8 -8
  147. package/dist/esm/ion-progress-bar.entry.js +3 -3
  148. package/dist/esm/ion-radio_2.entry.js +60 -9
  149. package/dist/esm/ion-range.entry.js +4 -4
  150. package/dist/esm/ion-refresher_2.entry.js +6 -6
  151. package/dist/esm/ion-reorder_2.entry.js +4 -4
  152. package/dist/esm/ion-ripple-effect.entry.js +2 -2
  153. package/dist/esm/ion-route_4.entry.js +3 -3
  154. package/dist/esm/ion-searchbar.entry.js +8 -8
  155. package/dist/esm/ion-segment-content.entry.js +1 -1
  156. package/dist/esm/ion-segment-view.entry.js +1 -1
  157. package/dist/esm/ion-segment_2.entry.js +3 -3
  158. package/dist/esm/ion-select-modal.entry.js +6 -6
  159. package/dist/esm/ion-select_3.entry.js +12 -11
  160. package/dist/esm/ion-spinner.entry.js +2 -2
  161. package/dist/esm/ion-split-pane.entry.js +2 -2
  162. package/dist/esm/ion-tab-bar_2.entry.js +3 -3
  163. package/dist/esm/ion-tab_2.entry.js +3 -3
  164. package/dist/esm/ion-text.entry.js +2 -2
  165. package/dist/esm/ion-textarea.entry.js +6 -5
  166. package/dist/esm/ion-toast.entry.js +8 -8
  167. package/dist/esm/ion-toggle.entry.js +61 -13
  168. package/dist/esm/{ionic-global-ssiordoc.js → ionic-global-CDrldh-5.js} +1 -1
  169. package/dist/esm/ionic.js +6 -6
  170. package/dist/esm/{ios.transition-CdWk5te_.js → ios.transition-BDzw0_Hm.js} +4 -4
  171. package/dist/esm/loader.js +5 -5
  172. package/dist/esm/{md.transition-CTwmjwnm.js → md.transition-BzDYi3qq.js} +4 -4
  173. package/dist/esm/{validity-CwxNVaqN.js → notch-controller-BwelN_JM.js} +2 -15
  174. package/dist/esm/{overlays-DNIbGUWk.js → overlays-BymNv-BL.js} +5 -5
  175. package/dist/esm/{status-tap-B6uPB7F5.js → status-tap-5DQ7Fc4V.js} +3 -3
  176. package/dist/esm/{swipe-back-INesdA_O.js → swipe-back-BKw2CAHc.js} +2 -2
  177. package/dist/esm/validity-DJztqcrH.js +17 -0
  178. package/dist/html.html-data.json +18 -2
  179. package/dist/ionic/index.esm.js +1 -1
  180. package/dist/ionic/ionic.esm.js +1 -1
  181. package/dist/ionic/{p-2b9e100d.entry.js → p-020af078.entry.js} +1 -1
  182. package/dist/ionic/p-074839fc.entry.js +4 -0
  183. package/dist/ionic/{p-964e89ac.entry.js → p-0b80d700.entry.js} +1 -1
  184. package/dist/ionic/{p-894e8953.entry.js → p-0dfa5a37.entry.js} +1 -1
  185. package/dist/ionic/{p-3807749f.entry.js → p-11518b31.entry.js} +1 -1
  186. package/dist/ionic/{p-fcd74818.entry.js → p-15193d01.entry.js} +1 -1
  187. package/dist/ionic/{p-c49f0f68.entry.js → p-1647c46c.entry.js} +1 -1
  188. package/dist/ionic/{p-116a97cb.entry.js → p-2a939845.entry.js} +1 -1
  189. package/dist/ionic/{p-3c522786.entry.js → p-316c0420.entry.js} +1 -1
  190. package/dist/ionic/{p-860f309a.entry.js → p-31f7095f.entry.js} +1 -1
  191. package/dist/ionic/{p-adde497f.entry.js → p-370e4237.entry.js} +1 -1
  192. package/dist/ionic/{p-ef8c7682.entry.js → p-3a6caca9.entry.js} +1 -1
  193. package/dist/ionic/p-40c261a3.entry.js +4 -0
  194. package/dist/ionic/{p-06881392.entry.js → p-43ed1ef5.entry.js} +1 -1
  195. package/dist/ionic/{p-a66bbfa0.entry.js → p-46d74291.entry.js} +1 -1
  196. package/dist/ionic/{p-7047a7b7.entry.js → p-49d06882.entry.js} +1 -1
  197. package/dist/ionic/{p-d0f6b9a7.entry.js → p-4c85d268.entry.js} +1 -1
  198. package/dist/ionic/p-4e41ea20.entry.js +4 -0
  199. package/dist/ionic/{p-dfd6acb5.entry.js → p-510d86e1.entry.js} +1 -1
  200. package/dist/ionic/p-51a60e0f.entry.js +4 -0
  201. package/dist/ionic/{p-dfc6f4b1.entry.js → p-582824c5.entry.js} +1 -1
  202. package/dist/ionic/{p-259e4068.entry.js → p-6241ce47.entry.js} +1 -1
  203. package/dist/ionic/{p-4ede0a73.entry.js → p-639dd543.entry.js} +1 -1
  204. package/dist/ionic/{p-7a19f3d1.entry.js → p-6444c606.entry.js} +1 -1
  205. package/dist/ionic/{p-c7f3e813.entry.js → p-675b1a31.entry.js} +1 -1
  206. package/dist/ionic/{p-db44afdd.entry.js → p-6d070558.entry.js} +1 -1
  207. package/dist/ionic/{p-5dcbb52f.entry.js → p-7268efa5.entry.js} +1 -1
  208. package/dist/ionic/{p-c6b68ac0.entry.js → p-72c38b88.entry.js} +1 -1
  209. package/dist/ionic/p-7380261c.entry.js +4 -0
  210. package/dist/ionic/{p-a41048a1.entry.js → p-79bd78f9.entry.js} +1 -1
  211. package/dist/ionic/{p-295a2119.entry.js → p-7da39a4d.entry.js} +1 -1
  212. package/dist/ionic/{p-d24d55cb.entry.js → p-83be404e.entry.js} +1 -1
  213. package/dist/ionic/{p-70c66710.entry.js → p-86f53961.entry.js} +1 -1
  214. package/dist/ionic/{p-db648b6a.entry.js → p-94de5cfa.entry.js} +1 -1
  215. package/dist/ionic/{p-6fe93af5.entry.js → p-9575b654.entry.js} +1 -1
  216. package/dist/ionic/p-9810f7e6.entry.js +4 -0
  217. package/dist/ionic/{p-bef7bd83.entry.js → p-98fc09eb.entry.js} +1 -1
  218. package/dist/ionic/{p-BA44xiai.js → p-B0q1YL7N.js} +1 -1
  219. package/dist/ionic/p-BFvmZNyx.js +4 -0
  220. package/dist/ionic/p-BKc55Xev.js +4 -0
  221. package/dist/ionic/{p-baqdazzM.js → p-BOVrCkpJ.js} +1 -1
  222. package/dist/ionic/{p-CT3hZD31.js → p-BYEqWnSg.js} +1 -1
  223. package/dist/ionic/p-Bmgaetn_.js +4 -0
  224. package/dist/ionic/{p-CUek2VVk.js → p-C7hRNDhM.js} +1 -1
  225. package/dist/ionic/p-C8IsBmNU.js +5 -0
  226. package/dist/ionic/{p-CYTVJxfQ.js → p-CJxh_yLS.js} +1 -1
  227. package/dist/ionic/{p-C8VsQFea.js → p-CTfR9YZG.js} +1 -1
  228. package/dist/ionic/p-CwgG81ZD.js +4 -0
  229. package/dist/ionic/{p-UCpjvnQe.js → p-D-eFFUkA.js} +1 -1
  230. package/dist/ionic/{p-DddcVlzx.js → p-D0dMcSkw.js} +1 -1
  231. package/dist/ionic/{p-ynapDa0U.js → p-D87hU-Ly.js} +1 -1
  232. package/dist/ionic/{p-C9IcKRgw.js → p-DCv9sLH2.js} +1 -1
  233. package/dist/ionic/p-DDb5r57F.js +4 -0
  234. package/dist/ionic/p-DJztqcrH.js +4 -0
  235. package/dist/ionic/{p-yu2f42Nv.js → p-DNcfiJwE.js} +1 -1
  236. package/dist/ionic/{p-CETqdl8n.js → p-DUt5fQmA.js} +1 -1
  237. package/dist/ionic/p-DZRJwG4S.js +4 -0
  238. package/dist/ionic/{p-D8G3beZX.js → p-DbQ5QkTP.js} +1 -1
  239. package/dist/ionic/{p-BUluHF_z.js → p-Dc45iWE4.js} +1 -1
  240. package/dist/ionic/{p-Bzed_Vkc.js → p-QHYY4sjU.js} +1 -1
  241. package/dist/ionic/{p-3ca55cd6.entry.js → p-a127bee2.entry.js} +1 -1
  242. package/dist/ionic/{p-b3da5db0.entry.js → p-a80f1b04.entry.js} +1 -1
  243. package/dist/ionic/{p-948228a2.entry.js → p-ac4eb91d.entry.js} +1 -1
  244. package/dist/ionic/{p-7078b759.entry.js → p-b0a7585c.entry.js} +1 -1
  245. package/dist/ionic/{p-3549e539.entry.js → p-b57c6d3e.entry.js} +1 -1
  246. package/dist/ionic/p-c19f63d0.entry.js +4 -0
  247. package/dist/ionic/{p-e1547a17.entry.js → p-cc45bcbc.entry.js} +1 -1
  248. package/dist/ionic/{p-e1c3b35d.entry.js → p-d0a2a1ab.entry.js} +1 -1
  249. package/dist/ionic/{p-89c2d5ea.entry.js → p-d126e8d3.entry.js} +1 -1
  250. package/dist/ionic/p-d1f54e28.entry.js +4 -0
  251. package/dist/ionic/p-d3014190.entry.js +4 -0
  252. package/dist/ionic/{p-93d7685c.entry.js → p-da7d04cc.entry.js} +1 -1
  253. package/dist/ionic/p-dbbe606a.entry.js +4 -0
  254. package/dist/ionic/{p-0144ab54.entry.js → p-e16b69e1.entry.js} +1 -1
  255. package/dist/ionic/{p-d27a5c0b.entry.js → p-f8f22cc0.entry.js} +1 -1
  256. package/dist/types/components/checkbox/checkbox.d.ts +9 -1
  257. package/dist/types/components/datetime/datetime.d.ts +9 -0
  258. package/dist/types/components/header/header.utils.d.ts +1 -2
  259. package/dist/types/components/input/input.d.ts +1 -1
  260. package/dist/types/components/radio-group/radio-group.d.ts +9 -1
  261. package/dist/types/components/searchbar/searchbar.d.ts +1 -1
  262. package/dist/types/components/select/select.d.ts +2 -2
  263. package/dist/types/components/toggle/toggle.d.ts +7 -1
  264. package/dist/types/components.d.ts +8 -8
  265. package/dist/types/stencil-public-runtime.d.ts +9 -19
  266. package/dist/types/utils/forms/validity.d.ts +1 -1
  267. package/dist/types/utils/gesture/listener.d.ts +1 -2
  268. package/hydrate/index.js +408 -360
  269. package/hydrate/index.mjs +408 -360
  270. package/package.json +3 -3
  271. package/dist/ionic/p-0188f4a6.entry.js +0 -4
  272. package/dist/ionic/p-14e08559.entry.js +0 -4
  273. package/dist/ionic/p-22bcfae9.entry.js +0 -4
  274. package/dist/ionic/p-45c80fd7.entry.js +0 -4
  275. package/dist/ionic/p-49a21ffb.entry.js +0 -4
  276. package/dist/ionic/p-5cf136b5.entry.js +0 -4
  277. package/dist/ionic/p-5d600703.entry.js +0 -4
  278. package/dist/ionic/p-9fc9dfae.entry.js +0 -4
  279. package/dist/ionic/p-BS-HlVX0.js +0 -4
  280. package/dist/ionic/p-BWS2Niqo.js +0 -4
  281. package/dist/ionic/p-CCKqmAua.js +0 -4
  282. package/dist/ionic/p-COOKa-0k.js +0 -5
  283. package/dist/ionic/p-CSQuMCUi.js +0 -4
  284. package/dist/ionic/p-PfJ1h_Zm.js +0 -4
  285. package/dist/ionic/p-edcc6f4f.entry.js +0 -4
  286. package/dist/ionic/p-f53597ee.entry.js +0 -4
  287. package/dist/ionic/p-w2EzNm9e.js +0 -4
package/hydrate/index.js CHANGED
@@ -130,7 +130,7 @@ function hydrateFactory($stencilWindow, $stencilHydrateOpts, $stencilHydrateResu
130
130
 
131
131
 
132
132
  const NAMESPACE = 'ionic';
133
- const BUILD = /* ionic */ { hydratedSelectorName: "hydrated", slotRelocation: true, state: true, updatable: true};
133
+ const BUILD = /* ionic */ { hydratedSelectorName: "hydrated", slotRelocation: true, updatable: true};
134
134
 
135
135
  // TODO(FW-2832): types
136
136
  class Config {
@@ -392,7 +392,7 @@ const initialize = (userConfig = {}) => {
392
392
  const globalScripts = initialize;
393
393
 
394
394
  /*
395
- Stencil Hydrate Platform v4.38.3 | MIT Licensed | https://stenciljs.com
395
+ Stencil Hydrate Platform v4.38.0 | MIT Licensed | https://stenciljs.com
396
396
  */
397
397
  var __defProp = Object.defineProperty;
398
398
  var __export = (target, all) => {
@@ -428,40 +428,6 @@ var TYPE_CONSTANT = "type";
428
428
  var VALUE_CONSTANT = "value";
429
429
  var SERIALIZED_PREFIX = "serialized:";
430
430
 
431
- // src/utils/es2022-rewire-class-members.ts
432
- var reWireGetterSetter = (instance, hostRef) => {
433
- var _a;
434
- const cmpMeta = hostRef.$cmpMeta$;
435
- const members = Object.entries((_a = cmpMeta.$members$) != null ? _a : {});
436
- members.map(([memberName, [memberFlags]]) => {
437
- if ((memberFlags & 31 /* Prop */ || memberFlags & 32 /* State */)) {
438
- const ogValue = instance[memberName];
439
- const ogDescriptor = getPropertyDescriptor(Object.getPrototypeOf(instance), memberName) || Object.getOwnPropertyDescriptor(instance, memberName);
440
- if (ogDescriptor) {
441
- Object.defineProperty(instance, memberName, {
442
- get() {
443
- return ogDescriptor.get.call(this);
444
- },
445
- set(newValue) {
446
- ogDescriptor.set.call(this, newValue);
447
- },
448
- configurable: true,
449
- enumerable: true
450
- });
451
- }
452
- instance[memberName] = hostRef.$instanceValues$.has(memberName) ? hostRef.$instanceValues$.get(memberName) : ogValue;
453
- }
454
- });
455
- };
456
- function getPropertyDescriptor(obj, memberName) {
457
- while (obj) {
458
- const desc = Object.getOwnPropertyDescriptor(obj, memberName);
459
- if (desc == null ? void 0 : desc.get) return desc;
460
- obj = Object.getPrototypeOf(obj);
461
- }
462
- return void 0;
463
- }
464
-
465
431
  // src/utils/helpers.ts
466
432
  var isDef = (v) => v != null && v !== void 0;
467
433
  var isComplexType = (o) => {
@@ -3681,9 +3647,6 @@ var registerInstance = (lazyInstance, hostRef) => {
3681
3647
  if (!hostRef) return void 0;
3682
3648
  lazyInstance.__stencil__getHostRef = () => hostRef;
3683
3649
  hostRef.$lazyInstance$ = lazyInstance;
3684
- if (hostRef.$cmpMeta$.$flags$ & 512 /* hasModernPropertyDecls */ && (BUILD.state)) {
3685
- reWireGetterSetter(lazyInstance, hostRef);
3686
- }
3687
3650
  return hostRef;
3688
3651
  };
3689
3652
  var registerHost = (elm, cmpMeta) => {
@@ -9722,6 +9685,202 @@ class CardTitle {
9722
9685
  }; }
9723
9686
  }
9724
9687
 
9688
+ /**
9689
+ * A utility to calculate the size of an outline notch
9690
+ * width relative to the content passed. This is used in
9691
+ * components such as `ion-select` with `fill="outline"`
9692
+ * where we need to pass slotted HTML content. This is not
9693
+ * needed when rendering plaintext content because we can
9694
+ * render the plaintext again hidden with `opacity: 0` inside
9695
+ * of the notch. As a result we can rely on the intrinsic size
9696
+ * of the element to correctly compute the notch width. We
9697
+ * cannot do this with slotted content because we cannot project
9698
+ * it into 2 places at once.
9699
+ *
9700
+ * @internal
9701
+ * @param el: The host element
9702
+ * @param getNotchSpacerEl: A function that returns a reference to the notch spacer element inside of the component template.
9703
+ * @param getLabelSlot: A function that returns a reference to the slotted content.
9704
+ */
9705
+ const createNotchController = (el, getNotchSpacerEl, getLabelSlot) => {
9706
+ let notchVisibilityIO;
9707
+ const needsExplicitNotchWidth = () => {
9708
+ const notchSpacerEl = getNotchSpacerEl();
9709
+ if (
9710
+ /**
9711
+ * If the notch is not being used
9712
+ * then we do not need to set the notch width.
9713
+ */
9714
+ notchSpacerEl === undefined ||
9715
+ /**
9716
+ * If either the label property is being
9717
+ * used or the label slot is not defined,
9718
+ * then we do not need to estimate the notch width.
9719
+ */
9720
+ el.label !== undefined ||
9721
+ getLabelSlot() === null) {
9722
+ return false;
9723
+ }
9724
+ return true;
9725
+ };
9726
+ const calculateNotchWidth = () => {
9727
+ if (needsExplicitNotchWidth()) {
9728
+ /**
9729
+ * Run this the frame after
9730
+ * the browser has re-painted the host element.
9731
+ * Otherwise, the label element may have a width
9732
+ * of 0 and the IntersectionObserver will be used.
9733
+ */
9734
+ raf(() => {
9735
+ setNotchWidth();
9736
+ });
9737
+ }
9738
+ };
9739
+ /**
9740
+ * When using a label prop we can render
9741
+ * the label value inside of the notch and
9742
+ * let the browser calculate the size of the notch.
9743
+ * However, we cannot render the label slot in multiple
9744
+ * places so we need to manually calculate the notch dimension
9745
+ * based on the size of the slotted content.
9746
+ *
9747
+ * This function should only be used to set the notch width
9748
+ * on slotted label content. The notch width for label prop
9749
+ * content is automatically calculated based on the
9750
+ * intrinsic size of the label text.
9751
+ */
9752
+ const setNotchWidth = () => {
9753
+ const notchSpacerEl = getNotchSpacerEl();
9754
+ if (notchSpacerEl === undefined) {
9755
+ return;
9756
+ }
9757
+ if (!needsExplicitNotchWidth()) {
9758
+ notchSpacerEl.style.removeProperty('width');
9759
+ return;
9760
+ }
9761
+ const width = getLabelSlot().scrollWidth;
9762
+ if (
9763
+ /**
9764
+ * If the computed width of the label is 0
9765
+ * and notchSpacerEl's offsetParent is null
9766
+ * then that means the element is hidden.
9767
+ * As a result, we need to wait for the element
9768
+ * to become visible before setting the notch width.
9769
+ *
9770
+ * We do not check el.offsetParent because
9771
+ * that can be null if the host element has
9772
+ * position: fixed applied to it.
9773
+ * notchSpacerEl does not have position: fixed.
9774
+ */
9775
+ width === 0 &&
9776
+ notchSpacerEl.offsetParent === null &&
9777
+ win$1 !== undefined &&
9778
+ 'IntersectionObserver' in win$1) {
9779
+ /**
9780
+ * If there is an IO already attached
9781
+ * then that will update the notch
9782
+ * once the element becomes visible.
9783
+ * As a result, there is no need to create
9784
+ * another one.
9785
+ */
9786
+ if (notchVisibilityIO !== undefined) {
9787
+ return;
9788
+ }
9789
+ const io = (notchVisibilityIO = new IntersectionObserver((ev) => {
9790
+ /**
9791
+ * If the element is visible then we
9792
+ * can try setting the notch width again.
9793
+ */
9794
+ if (ev[0].intersectionRatio === 1) {
9795
+ setNotchWidth();
9796
+ io.disconnect();
9797
+ notchVisibilityIO = undefined;
9798
+ }
9799
+ },
9800
+ /**
9801
+ * Set the root to be the host element
9802
+ * This causes the IO callback
9803
+ * to be fired in WebKit as soon as the element
9804
+ * is visible. If we used the default root value
9805
+ * then WebKit would only fire the IO callback
9806
+ * after any animations (such as a modal transition)
9807
+ * finished, and there would potentially be a flicker.
9808
+ */
9809
+ { threshold: 0.01, root: el }));
9810
+ io.observe(notchSpacerEl);
9811
+ return;
9812
+ }
9813
+ /**
9814
+ * If the element is visible then we can set the notch width.
9815
+ * The notch is only visible when the label is scaled,
9816
+ * which is why we multiply the width by 0.75 as this is
9817
+ * the same amount the label element is scaled by in the host CSS.
9818
+ * (See $form-control-label-stacked-scale in ionic.globals.scss).
9819
+ */
9820
+ notchSpacerEl.style.setProperty('width', `${width * 0.75}px`);
9821
+ };
9822
+ const destroy = () => {
9823
+ if (notchVisibilityIO) {
9824
+ notchVisibilityIO.disconnect();
9825
+ notchVisibilityIO = undefined;
9826
+ }
9827
+ };
9828
+ return {
9829
+ calculateNotchWidth,
9830
+ destroy,
9831
+ };
9832
+ };
9833
+
9834
+ /**
9835
+ * Uses the compareWith param to compare two values to determine if they are equal.
9836
+ *
9837
+ * @param currentValue The current value of the control.
9838
+ * @param compareValue The value to compare against.
9839
+ * @param compareWith The function or property name to use to compare values.
9840
+ */
9841
+ const compareOptions = (currentValue, compareValue, compareWith) => {
9842
+ if (typeof compareWith === 'function') {
9843
+ return compareWith(currentValue, compareValue);
9844
+ }
9845
+ else if (typeof compareWith === 'string') {
9846
+ return currentValue[compareWith] === compareValue[compareWith];
9847
+ }
9848
+ else {
9849
+ return Array.isArray(compareValue) ? compareValue.includes(currentValue) : currentValue === compareValue;
9850
+ }
9851
+ };
9852
+ /**
9853
+ * Compares a value against the current value(s) to determine if it is selected.
9854
+ *
9855
+ * @param currentValue The current value of the control.
9856
+ * @param compareValue The value to compare against.
9857
+ * @param compareWith The function or property name to use to compare values.
9858
+ */
9859
+ const isOptionSelected = (currentValue, compareValue, compareWith) => {
9860
+ if (currentValue === undefined) {
9861
+ return false;
9862
+ }
9863
+ if (Array.isArray(currentValue)) {
9864
+ return currentValue.some((val) => compareOptions(val, compareValue, compareWith));
9865
+ }
9866
+ else {
9867
+ return compareOptions(currentValue, compareValue, compareWith);
9868
+ }
9869
+ };
9870
+
9871
+ /**
9872
+ * Checks if the form element is in an invalid state based on
9873
+ * Ionic validation classes.
9874
+ *
9875
+ * @param el The form element to check.
9876
+ * @returns `true` if the element is invalid, `false` otherwise.
9877
+ */
9878
+ const checkInvalidState = (el) => {
9879
+ const hasIonTouched = el.classList.contains('ion-touched');
9880
+ const hasIonInvalid = el.classList.contains('ion-invalid');
9881
+ return hasIonTouched && hasIonInvalid;
9882
+ };
9883
+
9725
9884
  const checkboxIosCss = ":host{--checkbox-background-checked:var(--ion-color-primary, #0054e9);--border-color-checked:var(--ion-color-primary, #0054e9);--checkmark-color:var(--ion-color-primary-contrast, #fff);--transition:none;display:inline-block;position:relative;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:2}:host(.in-item){-ms-flex:1 1 0px;flex:1 1 0;width:100%;height:100%}:host([slot=start]),:host([slot=end]){-ms-flex:initial;flex:initial;width:auto}:host(.ion-color){--checkbox-background-checked:var(--ion-color-base);--border-color-checked:var(--ion-color-base);--checkmark-color:var(--ion-color-contrast)}.checkbox-wrapper{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;height:inherit;cursor:inherit}.label-text-wrapper{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host(.in-item) .label-text-wrapper,:host(.in-item:not(.checkbox-label-placement-stacked):not([slot])) .native-wrapper{margin-top:10px;margin-bottom:10px}:host(.in-item.checkbox-label-placement-stacked) .label-text-wrapper{margin-top:10px;margin-bottom:16px}:host(.in-item.checkbox-label-placement-stacked) .native-wrapper{margin-bottom:10px}.label-text-wrapper-hidden{display:none}input{display:none}.native-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.checkbox-icon{border-radius:var(--border-radius);position:relative;width:var(--size);height:var(--size);-webkit-transition:var(--transition);transition:var(--transition);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--checkbox-background);-webkit-box-sizing:border-box;box-sizing:border-box}.checkbox-icon path{fill:none;stroke:var(--checkmark-color);stroke-width:var(--checkmark-width);opacity:0}.checkbox-bottom{padding-top:4px;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;font-size:0.75rem;white-space:normal}:host(.checkbox-label-placement-stacked) .checkbox-bottom{font-size:1rem}.checkbox-bottom .error-text{display:none;color:var(--ion-color-danger, #c5000f)}.checkbox-bottom .helper-text{display:block;color:var(--ion-color-step-700, var(--ion-text-color-step-300, #4d4d4d))}:host(.ion-touched.ion-invalid) .checkbox-bottom .error-text{display:block}:host(.ion-touched.ion-invalid) .checkbox-bottom .helper-text{display:none}:host(.checkbox-label-placement-start) .checkbox-wrapper{-ms-flex-direction:row;flex-direction:row}:host(.checkbox-label-placement-start) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-end) .checkbox-wrapper{-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex-pack:start;justify-content:start}:host(.checkbox-label-placement-end) .label-text-wrapper{-webkit-margin-start:16px;margin-inline-start:16px;-webkit-margin-end:0;margin-inline-end:0}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}:host(.checkbox-label-placement-stacked) .checkbox-wrapper{-ms-flex-direction:column;flex-direction:column;text-align:center}:host(.checkbox-label-placement-stacked) .label-text-wrapper{-webkit-transform:scale(0.75);transform:scale(0.75);margin-left:0;margin-right:0;margin-bottom:16px;max-width:calc(100% / 0.75)}:host(.checkbox-label-placement-stacked.checkbox-alignment-start) .label-text-wrapper{-webkit-transform-origin:left top;transform-origin:left top}:host-context([dir=rtl]):host(.checkbox-label-placement-stacked.checkbox-alignment-start) .label-text-wrapper,:host-context([dir=rtl]).checkbox-label-placement-stacked.checkbox-alignment-start .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}@supports selector(:dir(rtl)){:host(.checkbox-label-placement-stacked.checkbox-alignment-start:dir(rtl)) .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}}:host(.checkbox-label-placement-stacked.checkbox-alignment-center) .label-text-wrapper{-webkit-transform-origin:center top;transform-origin:center top}:host-context([dir=rtl]):host(.checkbox-label-placement-stacked.checkbox-alignment-center) .label-text-wrapper,:host-context([dir=rtl]).checkbox-label-placement-stacked.checkbox-alignment-center .label-text-wrapper{-webkit-transform-origin:calc(100% - center) top;transform-origin:calc(100% - center) top}@supports selector(:dir(rtl)){:host(.checkbox-label-placement-stacked.checkbox-alignment-center:dir(rtl)) .label-text-wrapper{-webkit-transform-origin:calc(100% - center) top;transform-origin:calc(100% - center) top}}:host(.checkbox-justify-space-between) .checkbox-wrapper{-ms-flex-pack:justify;justify-content:space-between}:host(.checkbox-justify-start) .checkbox-wrapper{-ms-flex-pack:start;justify-content:start}:host(.checkbox-justify-end) .checkbox-wrapper{-ms-flex-pack:end;justify-content:end}:host(.checkbox-alignment-start) .checkbox-wrapper{-ms-flex-align:start;align-items:start}:host(.checkbox-alignment-center) .checkbox-wrapper{-ms-flex-align:center;align-items:center}:host(.checkbox-justify-space-between),:host(.checkbox-justify-start),:host(.checkbox-justify-end),:host(.checkbox-alignment-start),:host(.checkbox-alignment-center){display:block}:host(.checkbox-checked) .checkbox-icon,:host(.checkbox-indeterminate) .checkbox-icon{border-color:var(--border-color-checked);background:var(--checkbox-background-checked)}:host(.checkbox-checked) .checkbox-icon path,:host(.checkbox-indeterminate) .checkbox-icon path{opacity:1}:host(.checkbox-disabled){pointer-events:none}:host{--border-radius:50%;--border-width:0.125rem;--border-style:solid;--border-color:rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.23);--checkbox-background:var(--ion-item-background, var(--ion-background-color, #fff));--size:min(1.375rem, 55.836px);--checkmark-width:1.5px}:host(.checkbox-disabled){opacity:0.3}";
9726
9885
 
9727
9886
  const checkboxMdCss = ":host{--checkbox-background-checked:var(--ion-color-primary, #0054e9);--border-color-checked:var(--ion-color-primary, #0054e9);--checkmark-color:var(--ion-color-primary-contrast, #fff);--transition:none;display:inline-block;position:relative;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:2}:host(.in-item){-ms-flex:1 1 0px;flex:1 1 0;width:100%;height:100%}:host([slot=start]),:host([slot=end]){-ms-flex:initial;flex:initial;width:auto}:host(.ion-color){--checkbox-background-checked:var(--ion-color-base);--border-color-checked:var(--ion-color-base);--checkmark-color:var(--ion-color-contrast)}.checkbox-wrapper{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;height:inherit;cursor:inherit}.label-text-wrapper{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host(.in-item) .label-text-wrapper,:host(.in-item:not(.checkbox-label-placement-stacked):not([slot])) .native-wrapper{margin-top:10px;margin-bottom:10px}:host(.in-item.checkbox-label-placement-stacked) .label-text-wrapper{margin-top:10px;margin-bottom:16px}:host(.in-item.checkbox-label-placement-stacked) .native-wrapper{margin-bottom:10px}.label-text-wrapper-hidden{display:none}input{display:none}.native-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.checkbox-icon{border-radius:var(--border-radius);position:relative;width:var(--size);height:var(--size);-webkit-transition:var(--transition);transition:var(--transition);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--checkbox-background);-webkit-box-sizing:border-box;box-sizing:border-box}.checkbox-icon path{fill:none;stroke:var(--checkmark-color);stroke-width:var(--checkmark-width);opacity:0}.checkbox-bottom{padding-top:4px;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;font-size:0.75rem;white-space:normal}:host(.checkbox-label-placement-stacked) .checkbox-bottom{font-size:1rem}.checkbox-bottom .error-text{display:none;color:var(--ion-color-danger, #c5000f)}.checkbox-bottom .helper-text{display:block;color:var(--ion-color-step-700, var(--ion-text-color-step-300, #4d4d4d))}:host(.ion-touched.ion-invalid) .checkbox-bottom .error-text{display:block}:host(.ion-touched.ion-invalid) .checkbox-bottom .helper-text{display:none}:host(.checkbox-label-placement-start) .checkbox-wrapper{-ms-flex-direction:row;flex-direction:row}:host(.checkbox-label-placement-start) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-end) .checkbox-wrapper{-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex-pack:start;justify-content:start}:host(.checkbox-label-placement-end) .label-text-wrapper{-webkit-margin-start:16px;margin-inline-start:16px;-webkit-margin-end:0;margin-inline-end:0}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}:host(.checkbox-label-placement-stacked) .checkbox-wrapper{-ms-flex-direction:column;flex-direction:column;text-align:center}:host(.checkbox-label-placement-stacked) .label-text-wrapper{-webkit-transform:scale(0.75);transform:scale(0.75);margin-left:0;margin-right:0;margin-bottom:16px;max-width:calc(100% / 0.75)}:host(.checkbox-label-placement-stacked.checkbox-alignment-start) .label-text-wrapper{-webkit-transform-origin:left top;transform-origin:left top}:host-context([dir=rtl]):host(.checkbox-label-placement-stacked.checkbox-alignment-start) .label-text-wrapper,:host-context([dir=rtl]).checkbox-label-placement-stacked.checkbox-alignment-start .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}@supports selector(:dir(rtl)){:host(.checkbox-label-placement-stacked.checkbox-alignment-start:dir(rtl)) .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}}:host(.checkbox-label-placement-stacked.checkbox-alignment-center) .label-text-wrapper{-webkit-transform-origin:center top;transform-origin:center top}:host-context([dir=rtl]):host(.checkbox-label-placement-stacked.checkbox-alignment-center) .label-text-wrapper,:host-context([dir=rtl]).checkbox-label-placement-stacked.checkbox-alignment-center .label-text-wrapper{-webkit-transform-origin:calc(100% - center) top;transform-origin:calc(100% - center) top}@supports selector(:dir(rtl)){:host(.checkbox-label-placement-stacked.checkbox-alignment-center:dir(rtl)) .label-text-wrapper{-webkit-transform-origin:calc(100% - center) top;transform-origin:calc(100% - center) top}}:host(.checkbox-justify-space-between) .checkbox-wrapper{-ms-flex-pack:justify;justify-content:space-between}:host(.checkbox-justify-start) .checkbox-wrapper{-ms-flex-pack:start;justify-content:start}:host(.checkbox-justify-end) .checkbox-wrapper{-ms-flex-pack:end;justify-content:end}:host(.checkbox-alignment-start) .checkbox-wrapper{-ms-flex-align:start;align-items:start}:host(.checkbox-alignment-center) .checkbox-wrapper{-ms-flex-align:center;align-items:center}:host(.checkbox-justify-space-between),:host(.checkbox-justify-start),:host(.checkbox-justify-end),:host(.checkbox-alignment-start),:host(.checkbox-alignment-center){display:block}:host(.checkbox-checked) .checkbox-icon,:host(.checkbox-indeterminate) .checkbox-icon{border-color:var(--border-color-checked);background:var(--checkbox-background-checked)}:host(.checkbox-checked) .checkbox-icon path,:host(.checkbox-indeterminate) .checkbox-icon path{opacity:1}:host(.checkbox-disabled){pointer-events:none}:host{--border-radius:calc(var(--size) * .125);--border-width:2px;--border-style:solid;--border-color:rgb(var(--ion-text-color-rgb, 0, 0, 0), 0.6);--checkmark-width:3;--checkbox-background:var(--ion-item-background, var(--ion-background-color, #fff));--transition:background 180ms cubic-bezier(0.4, 0, 0.2, 1);--size:18px}.checkbox-icon path{stroke-dasharray:30;stroke-dashoffset:30}:host(.checkbox-checked) .checkbox-icon path,:host(.checkbox-indeterminate) .checkbox-icon path{stroke-dashoffset:0;-webkit-transition:stroke-dashoffset 90ms linear 90ms;transition:stroke-dashoffset 90ms linear 90ms}:host(.checkbox-disabled) .label-text-wrapper{opacity:0.38}:host(.checkbox-disabled) .native-wrapper{opacity:0.63}";
@@ -9787,6 +9946,10 @@ class Checkbox {
9787
9946
  * submitting if the value is invalid.
9788
9947
  */
9789
9948
  this.required = false;
9949
+ /**
9950
+ * Track validation state for proper aria-live announcements.
9951
+ */
9952
+ this.isInvalid = false;
9790
9953
  /**
9791
9954
  * Sets the checked property and emits
9792
9955
  * the ionChange event. Use this to update the
@@ -9833,16 +9996,29 @@ class Checkbox {
9833
9996
  ev.stopPropagation();
9834
9997
  };
9835
9998
  }
9999
+ connectedCallback() {
10000
+ const { el } = this;
10001
+ // Always set initial state
10002
+ this.isInvalid = checkInvalidState(el);
10003
+ }
9836
10004
  componentWillLoad() {
9837
10005
  this.inheritedAttributes = Object.assign({}, inheritAriaAttributes(this.el));
10006
+ this.hintTextId = this.getHintTextId();
10007
+ }
10008
+ disconnectedCallback() {
10009
+ // Clean up validation observer to prevent memory leaks.
10010
+ if (this.validationObserver) {
10011
+ this.validationObserver.disconnect();
10012
+ this.validationObserver = undefined;
10013
+ }
9838
10014
  }
9839
10015
  /** @internal */
9840
10016
  async setFocus() {
9841
10017
  this.el.focus();
9842
10018
  }
9843
- getHintTextID() {
9844
- const { el, helperText, errorText, helperTextId, errorTextId } = this;
9845
- if (el.classList.contains('ion-touched') && el.classList.contains('ion-invalid') && errorText) {
10019
+ getHintTextId() {
10020
+ const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
10021
+ if (isInvalid && errorText) {
9846
10022
  return errorTextId;
9847
10023
  }
9848
10024
  if (helperText) {
@@ -9855,7 +10031,7 @@ class Checkbox {
9855
10031
  * This element should only be rendered if hint text is set.
9856
10032
  */
9857
10033
  renderHintText() {
9858
- const { helperText, errorText, helperTextId, errorTextId } = this;
10034
+ const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
9859
10035
  /**
9860
10036
  * undefined and empty string values should
9861
10037
  * be treated as not having helper/error text.
@@ -9864,7 +10040,7 @@ class Checkbox {
9864
10040
  if (!hasHintText) {
9865
10041
  return;
9866
10042
  }
9867
- return (hAsync("div", { class: "checkbox-bottom" }, hAsync("div", { id: helperTextId, class: "helper-text", part: "supporting-text helper-text" }, helperText), hAsync("div", { id: errorTextId, class: "error-text", part: "supporting-text error-text" }, errorText)));
10043
+ return (hAsync("div", { class: "checkbox-bottom" }, hAsync("div", { id: helperTextId, class: "helper-text", part: "supporting-text helper-text", "aria-live": "polite" }, !isInvalid ? helperText : null), hAsync("div", { id: errorTextId, class: "error-text", part: "supporting-text error-text", role: "alert" }, isInvalid ? errorText : null)));
9868
10044
  }
9869
10045
  render() {
9870
10046
  const { color, checked, disabled, el, getSVGPath, indeterminate, inheritedAttributes, inputId, justify, labelPlacement, name, value, alignment, required, } = this;
@@ -9874,7 +10050,7 @@ class Checkbox {
9874
10050
  renderHiddenInput(true, el, name, checked ? value : '', disabled);
9875
10051
  // The host element must have a checkbox role to ensure proper VoiceOver
9876
10052
  // support in Safari for accessibility.
9877
- return (hAsync(Host, { key: 'ee2e02d28f9d15a1ec746609f7e9559444f621e5', role: "checkbox", "aria-checked": indeterminate ? 'mixed' : `${checked}`, "aria-describedby": this.getHintTextID(), "aria-invalid": this.getHintTextID() === this.errorTextId, "aria-labelledby": hasLabelContent ? this.inputLabelId : null, "aria-label": inheritedAttributes['aria-label'] || null, "aria-disabled": disabled ? 'true' : null, tabindex: disabled ? undefined : 0, onKeyDown: this.onKeyDown, onFocus: this.onFocus, onBlur: this.onBlur, onClick: this.onClick, class: createColorClasses$1(color, {
10053
+ return (hAsync(Host, { key: 'ae0fbd4b21accbac132e6b85c513512ad9179394', role: "checkbox", "aria-checked": indeterminate ? 'mixed' : `${checked}`, "aria-describedby": this.hintTextId, "aria-invalid": this.isInvalid ? 'true' : undefined, "aria-labelledby": hasLabelContent ? this.inputLabelId : null, "aria-label": inheritedAttributes['aria-label'] || null, "aria-disabled": disabled ? 'true' : null, "aria-required": required ? 'true' : undefined, tabindex: disabled ? undefined : 0, onKeyDown: this.onKeyDown, onFocus: this.onFocus, onBlur: this.onBlur, onClick: this.onClick, class: createColorClasses$1(color, {
9878
10054
  [mode]: true,
9879
10055
  'in-item': hostContext('ion-item', el),
9880
10056
  'checkbox-checked': checked,
@@ -9884,10 +10060,10 @@ class Checkbox {
9884
10060
  [`checkbox-justify-${justify}`]: justify !== undefined,
9885
10061
  [`checkbox-alignment-${alignment}`]: alignment !== undefined,
9886
10062
  [`checkbox-label-placement-${labelPlacement}`]: true,
9887
- }) }, hAsync("label", { key: '84d4c33da0348dc65ad36fb0fafd48be366dcf3b', class: "checkbox-wrapper", htmlFor: inputId }, hAsync("input", Object.assign({ key: '427db69a3ab8a17aa0867519c90f585b8930406b', type: "checkbox", checked: checked ? true : undefined, disabled: disabled, id: inputId, onChange: this.toggleChecked, required: required }, inheritedAttributes)), hAsync("div", { key: '9dda7024b3a4f1ee55351f783f9a10f9b4ad0d12', class: {
10063
+ }) }, hAsync("label", { key: '7a3d7f3c27dde514f2dbf2e34f4629fad33ec3bf', class: "checkbox-wrapper", htmlFor: inputId }, hAsync("input", Object.assign({ key: '4130d77ddf034271fecccda14e101a5a809921b6', type: "checkbox", checked: checked ? true : undefined, disabled: disabled, id: inputId, onChange: this.toggleChecked, required: required }, inheritedAttributes)), hAsync("div", { key: '5daa74f4e62b0947e37764762524001ee42609d9', class: {
9888
10064
  'label-text-wrapper': true,
9889
10065
  'label-text-wrapper-hidden': !hasLabelContent,
9890
- }, part: "label", id: this.inputLabelId, onClick: this.onDivLabelClick }, hAsync("slot", { key: 'f9d1d545ffd4164b650808241b51ea1bedc6a42c' }), this.renderHintText()), hAsync("div", { key: 'a96d61ac324864228f14caa0e9f2c0d15418882e', class: "native-wrapper" }, hAsync("svg", { key: '64ff3e4d87e190601811ef64323edec18d510cd1', class: "checkbox-icon", viewBox: "0 0 24 24", part: "container", "aria-hidden": "true" }, path)))));
10066
+ }, part: "label", id: this.inputLabelId, onClick: this.onDivLabelClick }, hAsync("slot", { key: '23ff66138f8c3a2f56f39113fc842d54b2f7952a' }), this.renderHintText()), hAsync("div", { key: 'ab914d9623c19fc46821d5e62db92f1192ebbe7e', class: "native-wrapper" }, hAsync("svg", { key: '66e3f4f5dcaa9756fb0e9452299954f9ed3dcb7b', class: "checkbox-icon", viewBox: "0 0 24 24", part: "container", "aria-hidden": "true" }, path)))));
9891
10067
  }
9892
10068
  getSVGPath(mode, indeterminate) {
9893
10069
  let path = indeterminate ? (hAsync("path", { d: "M6 12L18 12", part: "mark" })) : (hAsync("path", { d: "M5.9,12.5l3.8,3.8l8.8-8.8", part: "mark" }));
@@ -9917,6 +10093,8 @@ class Checkbox {
9917
10093
  "justify": [1],
9918
10094
  "alignment": [1],
9919
10095
  "required": [4],
10096
+ "isInvalid": [32],
10097
+ "hintTextId": [32],
9920
10098
  "setFocus": [64]
9921
10099
  },
9922
10100
  "$listeners$": undefined,
@@ -12482,9 +12660,9 @@ const checkForPresentationFormatMismatch = (el, presentation, formatOptions) =>
12482
12660
  }
12483
12661
  };
12484
12662
 
12485
- const datetimeIosCss = ":host{display:-ms-flexbox;display:flex;-ms-flex-flow:column;flex-flow:column;background:var(--background);overflow:hidden}:host(.datetime-size-fixed){width:auto;height:auto}:host(.datetime-size-fixed:not(.datetime-prefer-wheel)){max-width:350px}:host(.datetime-size-fixed.datetime-prefer-wheel){min-width:350px;max-width:-webkit-max-content;max-width:-moz-max-content;max-width:max-content}:host(.datetime-size-cover){width:100%}:host .calendar-body,:host .datetime-year{opacity:0}:host(:not(.datetime-ready)) .datetime-year{position:absolute;pointer-events:none}:host(.datetime-ready) .calendar-body{opacity:1}:host(.datetime-ready) .datetime-year{display:none;opacity:1}:host .wheel-order-year-first .day-column{-ms-flex-order:3;order:3;text-align:end}:host .wheel-order-year-first .month-column{-ms-flex-order:2;order:2;text-align:end}:host .wheel-order-year-first .year-column{-ms-flex-order:1;order:1;text-align:start}:host .datetime-calendar,:host .datetime-year{display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;-ms-flex-flow:column;flex-flow:column}:host(.show-month-and-year) .datetime-year{display:-ms-flexbox;display:flex}:host(.show-month-and-year) .calendar-next-prev,:host(.show-month-and-year) .calendar-days-of-week,:host(.show-month-and-year) .calendar-body,:host(.show-month-and-year) .datetime-time{display:none}:host(.month-year-picker-open) .datetime-footer{display:none}:host(.datetime-disabled){pointer-events:none}:host(.datetime-disabled) .calendar-days-of-week,:host(.datetime-disabled) .datetime-time{opacity:0.4}:host(.datetime-readonly){pointer-events:none;}:host(.datetime-readonly) .calendar-action-buttons,:host(.datetime-readonly) .calendar-body,:host(.datetime-readonly) .datetime-year{pointer-events:initial}:host(.datetime-readonly) .calendar-day[disabled]:not(.calendar-day-constrained),:host(.datetime-readonly) .datetime-action-buttons ion-button[disabled]{opacity:1}:host .datetime-header .datetime-title{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host .datetime-action-buttons.has-clear-button{width:100%}:host .datetime-action-buttons ion-buttons{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.datetime-action-buttons .datetime-action-buttons-container{display:-ms-flexbox;display:flex}:host .calendar-action-buttons{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}:host .calendar-action-buttons ion-button{--background:transparent}:host .calendar-days-of-week{display:grid;grid-template-columns:repeat(7, 1fr);text-align:center}.calendar-days-of-week .day-of-week{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:0;margin-bottom:0}:host .calendar-body{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-webkit-scroll-snap-type:x mandatory;-ms-scroll-snap-type:x mandatory;scroll-snap-type:x mandatory;overflow-x:scroll;overflow-y:hidden;scrollbar-width:none;outline:none}:host .calendar-body .calendar-month{display:-ms-flexbox;display:flex;-ms-flex-flow:column;flex-flow:column;scroll-snap-align:start;scroll-snap-stop:always;-ms-flex-negative:0;flex-shrink:0;width:100%}:host .calendar-body .calendar-month-disabled{scroll-snap-align:none}:host .calendar-body::-webkit-scrollbar{display:none}:host .calendar-body .calendar-month-grid{display:grid;grid-template-columns:repeat(7, 1fr)}:host .calendar-day-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;min-width:0;min-height:0;overflow:visible}.calendar-day{border-radius:50%;-webkit-padding-start:0px;padding-inline-start:0px;-webkit-padding-end:0px;padding-inline-end:0px;padding-top:0px;padding-bottom:0px;-webkit-margin-start:0px;margin-inline-start:0px;-webkit-margin-end:0px;margin-inline-end:0px;margin-top:0px;margin-bottom:0px;display:-ms-flexbox;display:flex;position:relative;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;border:none;outline:none;background:none;color:currentColor;font-family:var(--ion-font-family, inherit);cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;z-index:0}:host .calendar-day[disabled]{pointer-events:none;opacity:0.4}.calendar-day:not(.calendar-day-adjacent-day):focus{background:rgba(var(--ion-color-base-rgb), 0.2);-webkit-box-shadow:0px 0px 0px 4px rgba(var(--ion-color-base-rgb), 0.2);box-shadow:0px 0px 0px 4px rgba(var(--ion-color-base-rgb), 0.2)}:host .datetime-time{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}:host(.datetime-presentation-time) .datetime-time{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0}:host ion-popover{--height:200px}:host .time-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}:host .time-body{border-radius:8px;-webkit-padding-start:12px;padding-inline-start:12px;-webkit-padding-end:12px;padding-inline-end:12px;padding-top:6px;padding-bottom:6px;display:-ms-flexbox;display:flex;border:none;background:var(--ion-color-step-300, var(--ion-background-color-step-300, #edeef0));color:var(--ion-text-color, #000);font-family:inherit;font-size:inherit;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none}:host .time-body-active{color:var(--ion-color-base)}:host(.in-item){position:static}:host(.show-month-and-year) .calendar-action-buttons .calendar-month-year-toggle{color:var(--ion-color-base)}.calendar-month-year{min-width:0}.calendar-month-year-toggle{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-indent:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;position:relative;border:0;outline:none;background:transparent;cursor:pointer;z-index:1}.calendar-month-year-toggle::after{left:0;right:0;top:0;bottom:0;position:absolute;content:\"\";opacity:0;-webkit-transition:opacity 15ms linear, background-color 15ms linear;transition:opacity 15ms linear, background-color 15ms linear;z-index:-1}.calendar-month-year-toggle.ion-focused::after{background:currentColor}.calendar-month-year-toggle:disabled{opacity:0.3;pointer-events:none}.calendar-month-year-toggle ion-icon{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:0;padding-inline-end:0;padding-top:0;padding-bottom:0;-ms-flex-negative:0;flex-shrink:0}.calendar-month-year-toggle #toggle-wrapper{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center}ion-picker{--highlight-background:var(--wheel-highlight-background);--highlight-border-radius:var(--wheel-highlight-border-radius);--fade-background-rgb:var(--wheel-fade-background-rgb)}:host{--background:var(--ion-color-light, #f4f5f8);--background-rgb:var(--ion-color-light-rgb, 244, 245, 248);--title-color:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}:host(.datetime-presentation-date-time:not(.datetime-prefer-wheel)),:host(.datetime-presentation-time-date:not(.datetime-prefer-wheel)),:host(.datetime-presentation-date:not(.datetime-prefer-wheel)){min-height:350px}:host .datetime-header{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:16px;padding-bottom:16px;border-bottom:0.55px solid var(--ion-color-step-200, var(--ion-background-color-step-200, #cccccc));font-size:min(0.875rem, 22.4px)}:host .datetime-header .datetime-title{color:var(--title-color)}:host .datetime-header .datetime-selected-date{margin-top:10px}.calendar-month-year-toggle{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0px;padding-bottom:0px;min-height:44px;font-size:min(1rem, 25.6px);font-weight:600}.calendar-month-year-toggle.ion-focused::after{opacity:0.15}.calendar-month-year-toggle #toggle-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:8px;margin-inline-end:8px;margin-top:10px;margin-bottom:10px}:host .calendar-action-buttons .calendar-month-year-toggle ion-icon,:host .calendar-action-buttons ion-buttons ion-button{color:var(--ion-color-base)}:host .calendar-action-buttons ion-buttons{padding-left:0;padding-right:0;padding-top:8px;padding-bottom:0}:host .calendar-action-buttons ion-buttons ion-button{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}:host .calendar-days-of-week{-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:8px;padding-inline-end:8px;padding-top:0;padding-bottom:0;color:var(--ion-color-step-300, var(--ion-text-color-step-700, #b3b3b3));font-size:min(0.75rem, 19.2px);font-weight:600;line-height:24px;text-transform:uppercase}@supports (border-radius: mod(1px, 1px)){.calendar-days-of-week .day-of-week{width:clamp(20px, calc(mod(min(1rem, 24px), 24px) * 10), 100%);height:24px;overflow:hidden}.calendar-day{border-radius:max(8px, mod(min(1rem, 24px), 24px) * 10)}}@supports ((border-radius: mod(1px, 1px)) and (background: -webkit-named-image(apple-pay-logo-black)) and (not (contain-intrinsic-size: none))) or (not (border-radius: mod(1px, 1px))){.calendar-days-of-week .day-of-week{width:auto;height:auto;overflow:initial}.calendar-day{border-radius:32px}}:host .calendar-body .calendar-month .calendar-month-grid{-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:8px;padding-inline-end:8px;padding-top:8px;padding-bottom:8px;-ms-flex-align:center;align-items:center;height:calc(100% - 16px)}:host .calendar-day-wrapper{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:4px;padding-bottom:4px;height:0;min-height:1rem}:host .calendar-day{width:40px;min-width:40px;height:40px;font-size:min(1.25rem, 32px)}.calendar-day.calendar-day-active{background:rgba(var(--ion-color-base-rgb), 0.2);font-size:min(1.375rem, 35.2px)}:host .calendar-day.calendar-day-today{color:var(--ion-color-base)}:host .calendar-day.calendar-day-active,:host .calendar-day.calendar-day-adjacent-day.calendar-day-active{color:var(--ion-color-base);font-weight:600}:host .calendar-day.calendar-day-today.calendar-day-active{background:var(--ion-color-base);color:var(--ion-color-contrast)}:host .calendar-day.calendar-day-adjacent-day{color:var(--ion-color-step-300, var(--ion-text-color-step-700, #b3b3b3))}:host .datetime-time{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:8px;padding-bottom:16px;font-size:min(1rem, 25.6px)}:host .datetime-time .time-header{font-weight:600}:host .datetime-buttons{-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:8px;padding-inline-end:8px;padding-top:8px;padding-bottom:8px;border-top:0.55px solid var(--ion-color-step-200, var(--ion-background-color-step-200, #cccccc))}:host .datetime-buttons ::slotted(ion-buttons),:host .datetime-buttons ion-buttons{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}:host .datetime-action-buttons{width:100%}";
12663
+ const datetimeIosCss = ":host{display:-ms-flexbox;display:flex;-ms-flex-flow:column;flex-flow:column;background:var(--background);overflow:hidden}:host(.datetime-size-fixed){width:auto;height:auto}:host(.datetime-size-fixed:not(.datetime-prefer-wheel)){max-width:350px}:host(.datetime-size-fixed.datetime-prefer-wheel){min-width:350px;max-width:-webkit-max-content;max-width:-moz-max-content;max-width:max-content}:host(.datetime-size-cover){width:100%}:host .intersection-tracker{width:100%;height:1px;margin-bottom:-1px;opacity:0;pointer-events:none}:host .calendar-body,:host .datetime-year{opacity:0}:host(:not(.datetime-ready)) .datetime-year{position:absolute;pointer-events:none}:host(.datetime-ready) .calendar-body{opacity:1}:host(.datetime-ready) .datetime-year{display:none;opacity:1}:host .wheel-order-year-first .day-column{-ms-flex-order:3;order:3;text-align:end}:host .wheel-order-year-first .month-column{-ms-flex-order:2;order:2;text-align:end}:host .wheel-order-year-first .year-column{-ms-flex-order:1;order:1;text-align:start}:host .datetime-calendar,:host .datetime-year{display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;-ms-flex-flow:column;flex-flow:column}:host(.show-month-and-year) .datetime-year{display:-ms-flexbox;display:flex}:host(.show-month-and-year) .calendar-next-prev,:host(.show-month-and-year) .calendar-days-of-week,:host(.show-month-and-year) .calendar-body,:host(.show-month-and-year) .datetime-time{display:none}:host(.month-year-picker-open) .datetime-footer{display:none}:host(.datetime-disabled){pointer-events:none}:host(.datetime-disabled) .calendar-days-of-week,:host(.datetime-disabled) .datetime-time{opacity:0.4}:host(.datetime-readonly){pointer-events:none;}:host(.datetime-readonly) .calendar-action-buttons,:host(.datetime-readonly) .calendar-body,:host(.datetime-readonly) .datetime-year{pointer-events:initial}:host(.datetime-readonly) .calendar-day[disabled]:not(.calendar-day-constrained),:host(.datetime-readonly) .datetime-action-buttons ion-button[disabled]{opacity:1}:host .datetime-header .datetime-title{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host .datetime-action-buttons.has-clear-button{width:100%}:host .datetime-action-buttons ion-buttons{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.datetime-action-buttons .datetime-action-buttons-container{display:-ms-flexbox;display:flex}:host .calendar-action-buttons{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}:host .calendar-action-buttons ion-button{--background:transparent}:host .calendar-days-of-week{display:grid;grid-template-columns:repeat(7, 1fr);text-align:center}.calendar-days-of-week .day-of-week{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:0;margin-bottom:0}:host .calendar-body{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-webkit-scroll-snap-type:x mandatory;-ms-scroll-snap-type:x mandatory;scroll-snap-type:x mandatory;overflow-x:scroll;overflow-y:hidden;scrollbar-width:none;outline:none}:host .calendar-body .calendar-month{display:-ms-flexbox;display:flex;-ms-flex-flow:column;flex-flow:column;scroll-snap-align:start;scroll-snap-stop:always;-ms-flex-negative:0;flex-shrink:0;width:100%}:host .calendar-body .calendar-month-disabled{scroll-snap-align:none}:host .calendar-body::-webkit-scrollbar{display:none}:host .calendar-body .calendar-month-grid{display:grid;grid-template-columns:repeat(7, 1fr)}:host .calendar-day-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;min-width:0;min-height:0;overflow:visible}.calendar-day{border-radius:50%;-webkit-padding-start:0px;padding-inline-start:0px;-webkit-padding-end:0px;padding-inline-end:0px;padding-top:0px;padding-bottom:0px;-webkit-margin-start:0px;margin-inline-start:0px;-webkit-margin-end:0px;margin-inline-end:0px;margin-top:0px;margin-bottom:0px;display:-ms-flexbox;display:flex;position:relative;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;border:none;outline:none;background:none;color:currentColor;font-family:var(--ion-font-family, inherit);cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;z-index:0}:host .calendar-day[disabled]{pointer-events:none;opacity:0.4}.calendar-day:not(.calendar-day-adjacent-day):focus{background:rgba(var(--ion-color-base-rgb), 0.2);-webkit-box-shadow:0px 0px 0px 4px rgba(var(--ion-color-base-rgb), 0.2);box-shadow:0px 0px 0px 4px rgba(var(--ion-color-base-rgb), 0.2)}:host .datetime-time{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}:host(.datetime-presentation-time) .datetime-time{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0}:host ion-popover{--height:200px}:host .time-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}:host .time-body{border-radius:8px;-webkit-padding-start:12px;padding-inline-start:12px;-webkit-padding-end:12px;padding-inline-end:12px;padding-top:6px;padding-bottom:6px;display:-ms-flexbox;display:flex;border:none;background:var(--ion-color-step-300, var(--ion-background-color-step-300, #edeef0));color:var(--ion-text-color, #000);font-family:inherit;font-size:inherit;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none}:host .time-body-active{color:var(--ion-color-base)}:host(.in-item){position:static}:host(.show-month-and-year) .calendar-action-buttons .calendar-month-year-toggle{color:var(--ion-color-base)}.calendar-month-year{min-width:0}.calendar-month-year-toggle{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-indent:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;position:relative;border:0;outline:none;background:transparent;cursor:pointer;z-index:1}.calendar-month-year-toggle::after{left:0;right:0;top:0;bottom:0;position:absolute;content:\"\";opacity:0;-webkit-transition:opacity 15ms linear, background-color 15ms linear;transition:opacity 15ms linear, background-color 15ms linear;z-index:-1}.calendar-month-year-toggle.ion-focused::after{background:currentColor}.calendar-month-year-toggle:disabled{opacity:0.3;pointer-events:none}.calendar-month-year-toggle ion-icon{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:0;padding-inline-end:0;padding-top:0;padding-bottom:0;-ms-flex-negative:0;flex-shrink:0}.calendar-month-year-toggle #toggle-wrapper{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center}ion-picker{--highlight-background:var(--wheel-highlight-background);--highlight-border-radius:var(--wheel-highlight-border-radius);--fade-background-rgb:var(--wheel-fade-background-rgb)}:host{--background:var(--ion-color-light, #f4f5f8);--background-rgb:var(--ion-color-light-rgb, 244, 245, 248);--title-color:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}:host(.datetime-presentation-date-time:not(.datetime-prefer-wheel)),:host(.datetime-presentation-time-date:not(.datetime-prefer-wheel)),:host(.datetime-presentation-date:not(.datetime-prefer-wheel)){min-height:350px}:host .datetime-header{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:16px;padding-bottom:16px;border-bottom:0.55px solid var(--ion-color-step-200, var(--ion-background-color-step-200, #cccccc));font-size:min(0.875rem, 22.4px)}:host .datetime-header .datetime-title{color:var(--title-color)}:host .datetime-header .datetime-selected-date{margin-top:10px}.calendar-month-year-toggle{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0px;padding-bottom:0px;min-height:44px;font-size:min(1rem, 25.6px);font-weight:600}.calendar-month-year-toggle.ion-focused::after{opacity:0.15}.calendar-month-year-toggle #toggle-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:8px;margin-inline-end:8px;margin-top:10px;margin-bottom:10px}:host .calendar-action-buttons .calendar-month-year-toggle ion-icon,:host .calendar-action-buttons ion-buttons ion-button{color:var(--ion-color-base)}:host .calendar-action-buttons ion-buttons{padding-left:0;padding-right:0;padding-top:8px;padding-bottom:0}:host .calendar-action-buttons ion-buttons ion-button{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}:host .calendar-days-of-week{-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:8px;padding-inline-end:8px;padding-top:0;padding-bottom:0;color:var(--ion-color-step-300, var(--ion-text-color-step-700, #b3b3b3));font-size:min(0.75rem, 19.2px);font-weight:600;line-height:24px;text-transform:uppercase}@supports (border-radius: mod(1px, 1px)){.calendar-days-of-week .day-of-week{width:clamp(20px, calc(mod(min(1rem, 24px), 24px) * 10), 100%);height:24px;overflow:hidden}.calendar-day{border-radius:max(8px, mod(min(1rem, 24px), 24px) * 10)}}@supports ((border-radius: mod(1px, 1px)) and (background: -webkit-named-image(apple-pay-logo-black)) and (not (contain-intrinsic-size: none))) or (not (border-radius: mod(1px, 1px))){.calendar-days-of-week .day-of-week{width:auto;height:auto;overflow:initial}.calendar-day{border-radius:32px}}:host .calendar-body .calendar-month .calendar-month-grid{-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:8px;padding-inline-end:8px;padding-top:8px;padding-bottom:8px;-ms-flex-align:center;align-items:center;height:calc(100% - 16px)}:host .calendar-day-wrapper{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:4px;padding-bottom:4px;height:0;min-height:1rem}:host .calendar-day{width:40px;min-width:40px;height:40px;font-size:min(1.25rem, 32px)}.calendar-day.calendar-day-active{background:rgba(var(--ion-color-base-rgb), 0.2);font-size:min(1.375rem, 35.2px)}:host .calendar-day.calendar-day-today{color:var(--ion-color-base)}:host .calendar-day.calendar-day-active,:host .calendar-day.calendar-day-adjacent-day.calendar-day-active{color:var(--ion-color-base);font-weight:600}:host .calendar-day.calendar-day-today.calendar-day-active{background:var(--ion-color-base);color:var(--ion-color-contrast)}:host .calendar-day.calendar-day-adjacent-day{color:var(--ion-color-step-300, var(--ion-text-color-step-700, #b3b3b3))}:host .datetime-time{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:8px;padding-bottom:16px;font-size:min(1rem, 25.6px)}:host .datetime-time .time-header{font-weight:600}:host .datetime-buttons{-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:8px;padding-inline-end:8px;padding-top:8px;padding-bottom:8px;border-top:0.55px solid var(--ion-color-step-200, var(--ion-background-color-step-200, #cccccc))}:host .datetime-buttons ::slotted(ion-buttons),:host .datetime-buttons ion-buttons{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}:host .datetime-action-buttons{width:100%}";
12486
12664
 
12487
- const datetimeMdCss = ":host{display:-ms-flexbox;display:flex;-ms-flex-flow:column;flex-flow:column;background:var(--background);overflow:hidden}:host(.datetime-size-fixed){width:auto;height:auto}:host(.datetime-size-fixed:not(.datetime-prefer-wheel)){max-width:350px}:host(.datetime-size-fixed.datetime-prefer-wheel){min-width:350px;max-width:-webkit-max-content;max-width:-moz-max-content;max-width:max-content}:host(.datetime-size-cover){width:100%}:host .calendar-body,:host .datetime-year{opacity:0}:host(:not(.datetime-ready)) .datetime-year{position:absolute;pointer-events:none}:host(.datetime-ready) .calendar-body{opacity:1}:host(.datetime-ready) .datetime-year{display:none;opacity:1}:host .wheel-order-year-first .day-column{-ms-flex-order:3;order:3;text-align:end}:host .wheel-order-year-first .month-column{-ms-flex-order:2;order:2;text-align:end}:host .wheel-order-year-first .year-column{-ms-flex-order:1;order:1;text-align:start}:host .datetime-calendar,:host .datetime-year{display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;-ms-flex-flow:column;flex-flow:column}:host(.show-month-and-year) .datetime-year{display:-ms-flexbox;display:flex}:host(.show-month-and-year) .calendar-next-prev,:host(.show-month-and-year) .calendar-days-of-week,:host(.show-month-and-year) .calendar-body,:host(.show-month-and-year) .datetime-time{display:none}:host(.month-year-picker-open) .datetime-footer{display:none}:host(.datetime-disabled){pointer-events:none}:host(.datetime-disabled) .calendar-days-of-week,:host(.datetime-disabled) .datetime-time{opacity:0.4}:host(.datetime-readonly){pointer-events:none;}:host(.datetime-readonly) .calendar-action-buttons,:host(.datetime-readonly) .calendar-body,:host(.datetime-readonly) .datetime-year{pointer-events:initial}:host(.datetime-readonly) .calendar-day[disabled]:not(.calendar-day-constrained),:host(.datetime-readonly) .datetime-action-buttons ion-button[disabled]{opacity:1}:host .datetime-header .datetime-title{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host .datetime-action-buttons.has-clear-button{width:100%}:host .datetime-action-buttons ion-buttons{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.datetime-action-buttons .datetime-action-buttons-container{display:-ms-flexbox;display:flex}:host .calendar-action-buttons{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}:host .calendar-action-buttons ion-button{--background:transparent}:host .calendar-days-of-week{display:grid;grid-template-columns:repeat(7, 1fr);text-align:center}.calendar-days-of-week .day-of-week{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:0;margin-bottom:0}:host .calendar-body{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-webkit-scroll-snap-type:x mandatory;-ms-scroll-snap-type:x mandatory;scroll-snap-type:x mandatory;overflow-x:scroll;overflow-y:hidden;scrollbar-width:none;outline:none}:host .calendar-body .calendar-month{display:-ms-flexbox;display:flex;-ms-flex-flow:column;flex-flow:column;scroll-snap-align:start;scroll-snap-stop:always;-ms-flex-negative:0;flex-shrink:0;width:100%}:host .calendar-body .calendar-month-disabled{scroll-snap-align:none}:host .calendar-body::-webkit-scrollbar{display:none}:host .calendar-body .calendar-month-grid{display:grid;grid-template-columns:repeat(7, 1fr)}:host .calendar-day-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;min-width:0;min-height:0;overflow:visible}.calendar-day{border-radius:50%;-webkit-padding-start:0px;padding-inline-start:0px;-webkit-padding-end:0px;padding-inline-end:0px;padding-top:0px;padding-bottom:0px;-webkit-margin-start:0px;margin-inline-start:0px;-webkit-margin-end:0px;margin-inline-end:0px;margin-top:0px;margin-bottom:0px;display:-ms-flexbox;display:flex;position:relative;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;border:none;outline:none;background:none;color:currentColor;font-family:var(--ion-font-family, inherit);cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;z-index:0}:host .calendar-day[disabled]{pointer-events:none;opacity:0.4}.calendar-day:not(.calendar-day-adjacent-day):focus{background:rgba(var(--ion-color-base-rgb), 0.2);-webkit-box-shadow:0px 0px 0px 4px rgba(var(--ion-color-base-rgb), 0.2);box-shadow:0px 0px 0px 4px rgba(var(--ion-color-base-rgb), 0.2)}:host .datetime-time{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}:host(.datetime-presentation-time) .datetime-time{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0}:host ion-popover{--height:200px}:host .time-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}:host .time-body{border-radius:8px;-webkit-padding-start:12px;padding-inline-start:12px;-webkit-padding-end:12px;padding-inline-end:12px;padding-top:6px;padding-bottom:6px;display:-ms-flexbox;display:flex;border:none;background:var(--ion-color-step-300, var(--ion-background-color-step-300, #edeef0));color:var(--ion-text-color, #000);font-family:inherit;font-size:inherit;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none}:host .time-body-active{color:var(--ion-color-base)}:host(.in-item){position:static}:host(.show-month-and-year) .calendar-action-buttons .calendar-month-year-toggle{color:var(--ion-color-base)}.calendar-month-year{min-width:0}.calendar-month-year-toggle{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-indent:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;position:relative;border:0;outline:none;background:transparent;cursor:pointer;z-index:1}.calendar-month-year-toggle::after{left:0;right:0;top:0;bottom:0;position:absolute;content:\"\";opacity:0;-webkit-transition:opacity 15ms linear, background-color 15ms linear;transition:opacity 15ms linear, background-color 15ms linear;z-index:-1}.calendar-month-year-toggle.ion-focused::after{background:currentColor}.calendar-month-year-toggle:disabled{opacity:0.3;pointer-events:none}.calendar-month-year-toggle ion-icon{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:0;padding-inline-end:0;padding-top:0;padding-bottom:0;-ms-flex-negative:0;flex-shrink:0}.calendar-month-year-toggle #toggle-wrapper{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center}ion-picker{--highlight-background:var(--wheel-highlight-background);--highlight-border-radius:var(--wheel-highlight-border-radius);--fade-background-rgb:var(--wheel-fade-background-rgb)}:host{--background:var(--ion-color-step-100, var(--ion-background-color-step-100, #ffffff));--title-color:var(--ion-color-contrast)}:host .datetime-header{-webkit-padding-start:20px;padding-inline-start:20px;-webkit-padding-end:20px;padding-inline-end:20px;padding-top:20px;padding-bottom:20px;background:var(--ion-color-base);color:var(--title-color)}:host .datetime-header .datetime-title{font-size:0.75rem;text-transform:uppercase}:host .datetime-header .datetime-selected-date{margin-top:30px;font-size:2.125rem}:host .calendar-action-buttons ion-button{--color:var(--ion-color-step-650, var(--ion-text-color-step-350, #595959))}.calendar-month-year-toggle{-webkit-padding-start:20px;padding-inline-start:20px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:12px;padding-bottom:12px;min-height:48px;background:transparent;color:var(--ion-color-step-650, var(--ion-text-color-step-350, #595959));z-index:1}.calendar-month-year-toggle.ion-focused::after{opacity:0.04}.calendar-month-year-toggle ion-ripple-effect{color:currentColor}@media (any-hover: hover){.calendar-month-year-toggle.ion-activatable:not(.ion-focused):hover::after{background:currentColor;opacity:0.04}}:host .calendar-days-of-week{-webkit-padding-start:10px;padding-inline-start:10px;-webkit-padding-end:10px;padding-inline-end:10px;padding-top:0px;padding-bottom:0px;color:var(--ion-color-step-500, var(--ion-text-color-step-500, gray));font-size:0.875rem;line-height:36px}:host .calendar-body .calendar-month .calendar-month-grid{-webkit-padding-start:10px;padding-inline-start:10px;-webkit-padding-end:10px;padding-inline-end:10px;padding-top:4px;padding-bottom:4px;grid-template-rows:repeat(6, 1fr)}:host .calendar-day{width:42px;min-width:42px;height:42px;font-size:0.875rem}:host .calendar-day.calendar-day-today{border:1px solid var(--ion-color-base);color:var(--ion-color-base)}:host .calendar-day.calendar-day-active,:host .calendar-day.calendar-day-adjacent-day.calendar-day-active{color:var(--ion-color-contrast)}.calendar-day.calendar-day-active,.calendar-day.calendar-day-active:focus{border:1px solid var(--ion-color-base);background:var(--ion-color-base)}:host .calendar-day.calendar-day-adjacent-day{color:var(--ion-color-step-500, var(--ion-text-color-step-500, gray))}:host .datetime-time{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:8px;padding-bottom:8px}:host .time-header{color:var(--ion-color-step-650, var(--ion-text-color-step-350, #595959))}:host(.datetime-presentation-month) .datetime-year,:host(.datetime-presentation-year) .datetime-year,:host(.datetime-presentation-month-year) .datetime-year{margin-top:20px;margin-bottom:20px}:host .datetime-buttons{-webkit-padding-start:10px;padding-inline-start:10px;-webkit-padding-end:10px;padding-inline-end:10px;padding-top:10px;padding-bottom:10px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end}";
12665
+ const datetimeMdCss = ":host{display:-ms-flexbox;display:flex;-ms-flex-flow:column;flex-flow:column;background:var(--background);overflow:hidden}:host(.datetime-size-fixed){width:auto;height:auto}:host(.datetime-size-fixed:not(.datetime-prefer-wheel)){max-width:350px}:host(.datetime-size-fixed.datetime-prefer-wheel){min-width:350px;max-width:-webkit-max-content;max-width:-moz-max-content;max-width:max-content}:host(.datetime-size-cover){width:100%}:host .intersection-tracker{width:100%;height:1px;margin-bottom:-1px;opacity:0;pointer-events:none}:host .calendar-body,:host .datetime-year{opacity:0}:host(:not(.datetime-ready)) .datetime-year{position:absolute;pointer-events:none}:host(.datetime-ready) .calendar-body{opacity:1}:host(.datetime-ready) .datetime-year{display:none;opacity:1}:host .wheel-order-year-first .day-column{-ms-flex-order:3;order:3;text-align:end}:host .wheel-order-year-first .month-column{-ms-flex-order:2;order:2;text-align:end}:host .wheel-order-year-first .year-column{-ms-flex-order:1;order:1;text-align:start}:host .datetime-calendar,:host .datetime-year{display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;-ms-flex-flow:column;flex-flow:column}:host(.show-month-and-year) .datetime-year{display:-ms-flexbox;display:flex}:host(.show-month-and-year) .calendar-next-prev,:host(.show-month-and-year) .calendar-days-of-week,:host(.show-month-and-year) .calendar-body,:host(.show-month-and-year) .datetime-time{display:none}:host(.month-year-picker-open) .datetime-footer{display:none}:host(.datetime-disabled){pointer-events:none}:host(.datetime-disabled) .calendar-days-of-week,:host(.datetime-disabled) .datetime-time{opacity:0.4}:host(.datetime-readonly){pointer-events:none;}:host(.datetime-readonly) .calendar-action-buttons,:host(.datetime-readonly) .calendar-body,:host(.datetime-readonly) .datetime-year{pointer-events:initial}:host(.datetime-readonly) .calendar-day[disabled]:not(.calendar-day-constrained),:host(.datetime-readonly) .datetime-action-buttons ion-button[disabled]{opacity:1}:host .datetime-header .datetime-title{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host .datetime-action-buttons.has-clear-button{width:100%}:host .datetime-action-buttons ion-buttons{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.datetime-action-buttons .datetime-action-buttons-container{display:-ms-flexbox;display:flex}:host .calendar-action-buttons{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}:host .calendar-action-buttons ion-button{--background:transparent}:host .calendar-days-of-week{display:grid;grid-template-columns:repeat(7, 1fr);text-align:center}.calendar-days-of-week .day-of-week{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:0;margin-bottom:0}:host .calendar-body{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-webkit-scroll-snap-type:x mandatory;-ms-scroll-snap-type:x mandatory;scroll-snap-type:x mandatory;overflow-x:scroll;overflow-y:hidden;scrollbar-width:none;outline:none}:host .calendar-body .calendar-month{display:-ms-flexbox;display:flex;-ms-flex-flow:column;flex-flow:column;scroll-snap-align:start;scroll-snap-stop:always;-ms-flex-negative:0;flex-shrink:0;width:100%}:host .calendar-body .calendar-month-disabled{scroll-snap-align:none}:host .calendar-body::-webkit-scrollbar{display:none}:host .calendar-body .calendar-month-grid{display:grid;grid-template-columns:repeat(7, 1fr)}:host .calendar-day-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;min-width:0;min-height:0;overflow:visible}.calendar-day{border-radius:50%;-webkit-padding-start:0px;padding-inline-start:0px;-webkit-padding-end:0px;padding-inline-end:0px;padding-top:0px;padding-bottom:0px;-webkit-margin-start:0px;margin-inline-start:0px;-webkit-margin-end:0px;margin-inline-end:0px;margin-top:0px;margin-bottom:0px;display:-ms-flexbox;display:flex;position:relative;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;border:none;outline:none;background:none;color:currentColor;font-family:var(--ion-font-family, inherit);cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;z-index:0}:host .calendar-day[disabled]{pointer-events:none;opacity:0.4}.calendar-day:not(.calendar-day-adjacent-day):focus{background:rgba(var(--ion-color-base-rgb), 0.2);-webkit-box-shadow:0px 0px 0px 4px rgba(var(--ion-color-base-rgb), 0.2);box-shadow:0px 0px 0px 4px rgba(var(--ion-color-base-rgb), 0.2)}:host .datetime-time{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}:host(.datetime-presentation-time) .datetime-time{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0}:host ion-popover{--height:200px}:host .time-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}:host .time-body{border-radius:8px;-webkit-padding-start:12px;padding-inline-start:12px;-webkit-padding-end:12px;padding-inline-end:12px;padding-top:6px;padding-bottom:6px;display:-ms-flexbox;display:flex;border:none;background:var(--ion-color-step-300, var(--ion-background-color-step-300, #edeef0));color:var(--ion-text-color, #000);font-family:inherit;font-size:inherit;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none}:host .time-body-active{color:var(--ion-color-base)}:host(.in-item){position:static}:host(.show-month-and-year) .calendar-action-buttons .calendar-month-year-toggle{color:var(--ion-color-base)}.calendar-month-year{min-width:0}.calendar-month-year-toggle{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-indent:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;position:relative;border:0;outline:none;background:transparent;cursor:pointer;z-index:1}.calendar-month-year-toggle::after{left:0;right:0;top:0;bottom:0;position:absolute;content:\"\";opacity:0;-webkit-transition:opacity 15ms linear, background-color 15ms linear;transition:opacity 15ms linear, background-color 15ms linear;z-index:-1}.calendar-month-year-toggle.ion-focused::after{background:currentColor}.calendar-month-year-toggle:disabled{opacity:0.3;pointer-events:none}.calendar-month-year-toggle ion-icon{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:0;padding-inline-end:0;padding-top:0;padding-bottom:0;-ms-flex-negative:0;flex-shrink:0}.calendar-month-year-toggle #toggle-wrapper{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center}ion-picker{--highlight-background:var(--wheel-highlight-background);--highlight-border-radius:var(--wheel-highlight-border-radius);--fade-background-rgb:var(--wheel-fade-background-rgb)}:host{--background:var(--ion-color-step-100, var(--ion-background-color-step-100, #ffffff));--title-color:var(--ion-color-contrast)}:host .datetime-header{-webkit-padding-start:20px;padding-inline-start:20px;-webkit-padding-end:20px;padding-inline-end:20px;padding-top:20px;padding-bottom:20px;background:var(--ion-color-base);color:var(--title-color)}:host .datetime-header .datetime-title{font-size:0.75rem;text-transform:uppercase}:host .datetime-header .datetime-selected-date{margin-top:30px;font-size:2.125rem}:host .calendar-action-buttons ion-button{--color:var(--ion-color-step-650, var(--ion-text-color-step-350, #595959))}.calendar-month-year-toggle{-webkit-padding-start:20px;padding-inline-start:20px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:12px;padding-bottom:12px;min-height:48px;background:transparent;color:var(--ion-color-step-650, var(--ion-text-color-step-350, #595959));z-index:1}.calendar-month-year-toggle.ion-focused::after{opacity:0.04}.calendar-month-year-toggle ion-ripple-effect{color:currentColor}@media (any-hover: hover){.calendar-month-year-toggle.ion-activatable:not(.ion-focused):hover::after{background:currentColor;opacity:0.04}}:host .calendar-days-of-week{-webkit-padding-start:10px;padding-inline-start:10px;-webkit-padding-end:10px;padding-inline-end:10px;padding-top:0px;padding-bottom:0px;color:var(--ion-color-step-500, var(--ion-text-color-step-500, gray));font-size:0.875rem;line-height:36px}:host .calendar-body .calendar-month .calendar-month-grid{-webkit-padding-start:10px;padding-inline-start:10px;-webkit-padding-end:10px;padding-inline-end:10px;padding-top:4px;padding-bottom:4px;grid-template-rows:repeat(6, 1fr)}:host .calendar-day{width:42px;min-width:42px;height:42px;font-size:0.875rem}:host .calendar-day.calendar-day-today{border:1px solid var(--ion-color-base);color:var(--ion-color-base)}:host .calendar-day.calendar-day-active,:host .calendar-day.calendar-day-adjacent-day.calendar-day-active{color:var(--ion-color-contrast)}.calendar-day.calendar-day-active,.calendar-day.calendar-day-active:focus{border:1px solid var(--ion-color-base);background:var(--ion-color-base)}:host .calendar-day.calendar-day-adjacent-day{color:var(--ion-color-step-500, var(--ion-text-color-step-500, gray))}:host .datetime-time{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:8px;padding-bottom:8px}:host .time-header{color:var(--ion-color-step-650, var(--ion-text-color-step-350, #595959))}:host(.datetime-presentation-month) .datetime-year,:host(.datetime-presentation-year) .datetime-year,:host(.datetime-presentation-month-year) .datetime-year{margin-top:20px;margin-bottom:20px}:host .datetime-buttons{-webkit-padding-start:10px;padding-inline-start:10px;-webkit-padding-end:10px;padding-inline-end:10px;padding-top:10px;padding-bottom:10px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end}";
12488
12666
 
12489
12667
  /**
12490
12668
  * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
@@ -13061,6 +13239,27 @@ class Datetime {
13061
13239
  destroyKeyboardMO();
13062
13240
  }
13063
13241
  };
13242
+ /**
13243
+ * Fallback to ensure the datetime becomes ready even if
13244
+ * IntersectionObserver never reports it as intersecting.
13245
+ *
13246
+ * This is primarily used in environments where the observer
13247
+ * might not fire as expected, such as when running under
13248
+ * synthetic tests that stub IntersectionObserver.
13249
+ */
13250
+ this.ensureReadyIfVisible = () => {
13251
+ if (this.el.classList.contains('datetime-ready')) {
13252
+ return;
13253
+ }
13254
+ const rect = this.el.getBoundingClientRect();
13255
+ if (rect.width === 0 || rect.height === 0) {
13256
+ return;
13257
+ }
13258
+ this.initializeListeners();
13259
+ writeTask(() => {
13260
+ this.el.classList.add('datetime-ready');
13261
+ });
13262
+ };
13064
13263
  this.processValue = (value) => {
13065
13264
  const hasValue = value !== null && value !== undefined && value !== '' && (!Array.isArray(value) || value.length > 0);
13066
13265
  const valueToProcess = hasValue ? parseDate(value) : this.defaultParts;
@@ -13378,6 +13577,20 @@ class Datetime {
13378
13577
  * triggering the `hiddenIO` observer below.
13379
13578
  */
13380
13579
  raf(() => visibleIO === null || visibleIO === void 0 ? void 0 : visibleIO.observe(intersectionTrackerRef));
13580
+ /**
13581
+ * Fallback: If IntersectionObserver never reports that the
13582
+ * datetime is visible but the host clearly has layout, ensure
13583
+ * we still initialize listeners and mark the component as ready.
13584
+ *
13585
+ * We schedule this a couple of frames after load so that any
13586
+ * initial layout/animations (such as a parent modal presenting)
13587
+ * have had a chance to run.
13588
+ */
13589
+ raf(() => {
13590
+ raf(() => {
13591
+ this.ensureReadyIfVisible();
13592
+ });
13593
+ });
13381
13594
  /**
13382
13595
  * We need to clean up listeners when the datetime is hidden
13383
13596
  * in a popover/modal so that we can properly scroll containers
@@ -14133,7 +14346,7 @@ class Datetime {
14133
14346
  const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
14134
14347
  const hasWheelVariant = hasDatePresentation && preferWheel;
14135
14348
  renderHiddenInput(true, el, name, formatValue(value), disabled);
14136
- return (hAsync(Host, { key: '57492534800ea059a7c2bbd9f0059cc0b75ae8d2', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses$1(color, {
14349
+ return (hAsync(Host, { key: 'd6631dd1023a06278cab24867a7a4ab1ef066f69', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses$1(color, {
14137
14350
  [mode]: true,
14138
14351
  ['datetime-readonly']: readonly,
14139
14352
  ['datetime-disabled']: disabled,
@@ -14143,7 +14356,7 @@ class Datetime {
14143
14356
  [`datetime-size-${size}`]: true,
14144
14357
  [`datetime-prefer-wheel`]: hasWheelVariant,
14145
14358
  [`datetime-grid`]: isGridStyle,
14146
- })) }, hAsync("div", { key: '97dac5e5195635ac0bc5fb472b9d09e5c3c6bbc3', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
14359
+ })) }, hAsync("div", { key: 'f5886666d38db4c5cfa47759d6fd993d2934ecdd', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
14147
14360
  }
14148
14361
  get el() { return getElement(this); }
14149
14362
  static get watchers() { return {
@@ -16351,202 +16564,6 @@ class InfiniteScrollContent {
16351
16564
  }; }
16352
16565
  }
16353
16566
 
16354
- /**
16355
- * A utility to calculate the size of an outline notch
16356
- * width relative to the content passed. This is used in
16357
- * components such as `ion-select` with `fill="outline"`
16358
- * where we need to pass slotted HTML content. This is not
16359
- * needed when rendering plaintext content because we can
16360
- * render the plaintext again hidden with `opacity: 0` inside
16361
- * of the notch. As a result we can rely on the intrinsic size
16362
- * of the element to correctly compute the notch width. We
16363
- * cannot do this with slotted content because we cannot project
16364
- * it into 2 places at once.
16365
- *
16366
- * @internal
16367
- * @param el: The host element
16368
- * @param getNotchSpacerEl: A function that returns a reference to the notch spacer element inside of the component template.
16369
- * @param getLabelSlot: A function that returns a reference to the slotted content.
16370
- */
16371
- const createNotchController = (el, getNotchSpacerEl, getLabelSlot) => {
16372
- let notchVisibilityIO;
16373
- const needsExplicitNotchWidth = () => {
16374
- const notchSpacerEl = getNotchSpacerEl();
16375
- if (
16376
- /**
16377
- * If the notch is not being used
16378
- * then we do not need to set the notch width.
16379
- */
16380
- notchSpacerEl === undefined ||
16381
- /**
16382
- * If either the label property is being
16383
- * used or the label slot is not defined,
16384
- * then we do not need to estimate the notch width.
16385
- */
16386
- el.label !== undefined ||
16387
- getLabelSlot() === null) {
16388
- return false;
16389
- }
16390
- return true;
16391
- };
16392
- const calculateNotchWidth = () => {
16393
- if (needsExplicitNotchWidth()) {
16394
- /**
16395
- * Run this the frame after
16396
- * the browser has re-painted the host element.
16397
- * Otherwise, the label element may have a width
16398
- * of 0 and the IntersectionObserver will be used.
16399
- */
16400
- raf(() => {
16401
- setNotchWidth();
16402
- });
16403
- }
16404
- };
16405
- /**
16406
- * When using a label prop we can render
16407
- * the label value inside of the notch and
16408
- * let the browser calculate the size of the notch.
16409
- * However, we cannot render the label slot in multiple
16410
- * places so we need to manually calculate the notch dimension
16411
- * based on the size of the slotted content.
16412
- *
16413
- * This function should only be used to set the notch width
16414
- * on slotted label content. The notch width for label prop
16415
- * content is automatically calculated based on the
16416
- * intrinsic size of the label text.
16417
- */
16418
- const setNotchWidth = () => {
16419
- const notchSpacerEl = getNotchSpacerEl();
16420
- if (notchSpacerEl === undefined) {
16421
- return;
16422
- }
16423
- if (!needsExplicitNotchWidth()) {
16424
- notchSpacerEl.style.removeProperty('width');
16425
- return;
16426
- }
16427
- const width = getLabelSlot().scrollWidth;
16428
- if (
16429
- /**
16430
- * If the computed width of the label is 0
16431
- * and notchSpacerEl's offsetParent is null
16432
- * then that means the element is hidden.
16433
- * As a result, we need to wait for the element
16434
- * to become visible before setting the notch width.
16435
- *
16436
- * We do not check el.offsetParent because
16437
- * that can be null if the host element has
16438
- * position: fixed applied to it.
16439
- * notchSpacerEl does not have position: fixed.
16440
- */
16441
- width === 0 &&
16442
- notchSpacerEl.offsetParent === null &&
16443
- win$1 !== undefined &&
16444
- 'IntersectionObserver' in win$1) {
16445
- /**
16446
- * If there is an IO already attached
16447
- * then that will update the notch
16448
- * once the element becomes visible.
16449
- * As a result, there is no need to create
16450
- * another one.
16451
- */
16452
- if (notchVisibilityIO !== undefined) {
16453
- return;
16454
- }
16455
- const io = (notchVisibilityIO = new IntersectionObserver((ev) => {
16456
- /**
16457
- * If the element is visible then we
16458
- * can try setting the notch width again.
16459
- */
16460
- if (ev[0].intersectionRatio === 1) {
16461
- setNotchWidth();
16462
- io.disconnect();
16463
- notchVisibilityIO = undefined;
16464
- }
16465
- },
16466
- /**
16467
- * Set the root to be the host element
16468
- * This causes the IO callback
16469
- * to be fired in WebKit as soon as the element
16470
- * is visible. If we used the default root value
16471
- * then WebKit would only fire the IO callback
16472
- * after any animations (such as a modal transition)
16473
- * finished, and there would potentially be a flicker.
16474
- */
16475
- { threshold: 0.01, root: el }));
16476
- io.observe(notchSpacerEl);
16477
- return;
16478
- }
16479
- /**
16480
- * If the element is visible then we can set the notch width.
16481
- * The notch is only visible when the label is scaled,
16482
- * which is why we multiply the width by 0.75 as this is
16483
- * the same amount the label element is scaled by in the host CSS.
16484
- * (See $form-control-label-stacked-scale in ionic.globals.scss).
16485
- */
16486
- notchSpacerEl.style.setProperty('width', `${width * 0.75}px`);
16487
- };
16488
- const destroy = () => {
16489
- if (notchVisibilityIO) {
16490
- notchVisibilityIO.disconnect();
16491
- notchVisibilityIO = undefined;
16492
- }
16493
- };
16494
- return {
16495
- calculateNotchWidth,
16496
- destroy,
16497
- };
16498
- };
16499
-
16500
- /**
16501
- * Uses the compareWith param to compare two values to determine if they are equal.
16502
- *
16503
- * @param currentValue The current value of the control.
16504
- * @param compareValue The value to compare against.
16505
- * @param compareWith The function or property name to use to compare values.
16506
- */
16507
- const compareOptions = (currentValue, compareValue, compareWith) => {
16508
- if (typeof compareWith === 'function') {
16509
- return compareWith(currentValue, compareValue);
16510
- }
16511
- else if (typeof compareWith === 'string') {
16512
- return currentValue[compareWith] === compareValue[compareWith];
16513
- }
16514
- else {
16515
- return Array.isArray(compareValue) ? compareValue.includes(currentValue) : currentValue === compareValue;
16516
- }
16517
- };
16518
- /**
16519
- * Compares a value against the current value(s) to determine if it is selected.
16520
- *
16521
- * @param currentValue The current value of the control.
16522
- * @param compareValue The value to compare against.
16523
- * @param compareWith The function or property name to use to compare values.
16524
- */
16525
- const isOptionSelected = (currentValue, compareValue, compareWith) => {
16526
- if (currentValue === undefined) {
16527
- return false;
16528
- }
16529
- if (Array.isArray(currentValue)) {
16530
- return currentValue.some((val) => compareOptions(val, compareValue, compareWith));
16531
- }
16532
- else {
16533
- return compareOptions(currentValue, compareValue, compareWith);
16534
- }
16535
- };
16536
-
16537
- /**
16538
- * Checks if the form element is in an invalid state based on
16539
- * Ionic validation classes.
16540
- *
16541
- * @param el The form element to check.
16542
- * @returns `true` if the element is invalid, `false` otherwise.
16543
- */
16544
- const checkInvalidState = (el) => {
16545
- const hasIonTouched = el.classList.contains('ion-touched');
16546
- const hasIonInvalid = el.classList.contains('ion-invalid');
16547
- return hasIonTouched && hasIonInvalid;
16548
- };
16549
-
16550
16567
  /**
16551
16568
  * Used to update a scoped component that uses emulated slots. This fires when
16552
16569
  * content is passed into the slot or when the content inside of a slot changes.
@@ -16741,7 +16758,7 @@ class Input {
16741
16758
  /**
16742
16759
  * Whether auto correction should be enabled when the user is entering/editing the text value.
16743
16760
  */
16744
- this.autocorrect = false;
16761
+ this.autocorrect = 'off';
16745
16762
  /**
16746
16763
  * Sets the [`autofocus` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/autofocus) on the native input element.
16747
16764
  *
@@ -17171,7 +17188,7 @@ class Input {
17171
17188
  * TODO(FW-5592): Remove hasStartEndSlots condition
17172
17189
  */
17173
17190
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
17174
- return (hAsync(Host, { key: '39ddb0c5882d377a96979aa2b78ca6430071b277', class: createColorClasses$1(this.color, {
17191
+ return (hAsync(Host, { key: '97b5308021064d9e7434ef2d3d96f27045c1b0c4', class: createColorClasses$1(this.color, {
17175
17192
  [mode]: true,
17176
17193
  'has-value': hasValue,
17177
17194
  'has-focus': hasFocus,
@@ -17182,14 +17199,14 @@ class Input {
17182
17199
  'in-item': inItem,
17183
17200
  'in-item-color': hostContext('ion-item.ion-color', this.el),
17184
17201
  'input-disabled': disabled,
17185
- }) }, hAsync("label", { key: '624920541bb673225cb3aee82b5ac71f4abaefbd', class: "input-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, this.renderLabelContainer(), hAsync("div", { key: '5d1a22755ae9e14b704da04f763b177983474a97', class: "native-wrapper", onClick: this.onLabelClick }, hAsync("slot", { key: '088e13ac7550537e4e7466d0eda1053d6255f48e', name: "start" }), hAsync("input", Object.assign({ key: 'e851301b91e7e70a794c49260fe1b3e8d1f97999', class: "native-input", ref: (input) => (this.nativeInput = input), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect ? 'on' : 'off', autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, min: this.min, max: this.max, minLength: this.minlength, maxLength: this.maxlength, multiple: this.multiple, name: this.name, pattern: this.pattern, placeholder: this.placeholder || '', readOnly: readonly, required: this.required, spellcheck: this.spellcheck, step: this.step, type: this.type, value: value, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeydown, onCompositionstart: this.onCompositionStart, onCompositionend: this.onCompositionEnd, "aria-describedby": this.getHintTextID(), "aria-invalid": this.isInvalid ? 'true' : undefined }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (hAsync("button", { key: '65541ba96111fc978c428d9950a7e6fe1a589a75', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
17202
+ }) }, hAsync("label", { key: '353f68726ce180299bd9adc81e5ff7d26a48f54f', class: "input-wrapper", htmlFor: inputId, onClick: this.onLabelClick }, this.renderLabelContainer(), hAsync("div", { key: '2034b4bad04fc157f3298a1805819216b6f439d0', class: "native-wrapper", onClick: this.onLabelClick }, hAsync("slot", { key: '96bb5e30176b2bd76dfb75bfbf6c1c3d4403f4bb', name: "start" }), hAsync("input", Object.assign({ key: '1a1d75b0e414a95c89d5a760757c33548d234aca', class: "native-input", ref: (input) => (this.nativeInput = input), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, min: this.min, max: this.max, minLength: this.minlength, maxLength: this.maxlength, multiple: this.multiple, name: this.name, pattern: this.pattern, placeholder: this.placeholder || '', readOnly: readonly, required: this.required, spellcheck: this.spellcheck, step: this.step, type: this.type, value: value, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeydown, onCompositionstart: this.onCompositionStart, onCompositionend: this.onCompositionEnd, "aria-describedby": this.getHintTextID(), "aria-invalid": this.isInvalid ? 'true' : undefined }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (hAsync("button", { key: '95f3df17b7691d9a2e7dcd4a51f16a94aa3ca36f', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
17186
17203
  /**
17187
17204
  * This prevents mobile browsers from
17188
17205
  * blurring the input when the clear
17189
17206
  * button is activated.
17190
17207
  */
17191
17208
  ev.preventDefault();
17192
- }, onClick: this.clearTextInput }, hAsync("ion-icon", { key: '3f4bc559ce36e32c7235bf642547c012805b14ab', "aria-hidden": "true", icon: clearIconData }))), hAsync("slot", { key: '0b4cd18c49350d28b3d31df73304b84748c0ed0b', name: "end" })), shouldRenderHighlight && hAsync("div", { key: '5fcbb19f0ed1f2f7b7105c040256c783132da046', class: "input-highlight" })), this.renderBottomContent()));
17209
+ }, onClick: this.clearTextInput }, hAsync("ion-icon", { key: '16b0af75eed50c8115fb5597f73b5fbf71c2530e', "aria-hidden": "true", icon: clearIconData }))), hAsync("slot", { key: 'c48da0f8ddb3764ac43efa705bb4a6bb2d9cc2fd', name: "end" })), shouldRenderHighlight && hAsync("div", { key: 'f15238481fc20de56ca7ecb6e350b3c024cc755e', class: "input-highlight" })), this.renderBottomContent()));
17193
17210
  }
17194
17211
  get el() { return getElement(this); }
17195
17212
  static get watchers() { return {
@@ -17209,7 +17226,7 @@ class Input {
17209
17226
  "color": [513],
17210
17227
  "autocapitalize": [1],
17211
17228
  "autocomplete": [1],
17212
- "autocorrect": [4],
17229
+ "autocorrect": [1],
17213
17230
  "autofocus": [4],
17214
17231
  "clearInput": [4, "clear-input"],
17215
17232
  "clearInputIcon": [1, "clear-input-icon"],
@@ -28088,6 +28105,10 @@ class RadioGroup {
28088
28105
  this.helperTextId = `${this.inputId}-helper-text`;
28089
28106
  this.errorTextId = `${this.inputId}-error-text`;
28090
28107
  this.labelId = `${this.inputId}-lbl`;
28108
+ /**
28109
+ * Track validation state for proper aria-live announcements.
28110
+ */
28111
+ this.isInvalid = false;
28091
28112
  /**
28092
28113
  * If `true`, the radios can be deselected.
28093
28114
  */
@@ -28169,6 +28190,18 @@ class RadioGroup {
28169
28190
  this.labelId = label.id = this.name + '-lbl';
28170
28191
  }
28171
28192
  }
28193
+ // Always set initial state
28194
+ this.isInvalid = checkInvalidState(this.el);
28195
+ }
28196
+ componentWillLoad() {
28197
+ this.hintTextId = this.getHintTextId();
28198
+ }
28199
+ disconnectedCallback() {
28200
+ // Clean up validation observer to prevent memory leaks.
28201
+ if (this.validationObserver) {
28202
+ this.validationObserver.disconnect();
28203
+ this.validationObserver = undefined;
28204
+ }
28172
28205
  }
28173
28206
  getRadios() {
28174
28207
  return Array.from(this.el.querySelectorAll('ion-radio'));
@@ -28244,16 +28277,16 @@ class RadioGroup {
28244
28277
  * Renders the helper text or error text values
28245
28278
  */
28246
28279
  renderHintText() {
28247
- const { helperText, errorText, helperTextId, errorTextId } = this;
28280
+ const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
28248
28281
  const hasHintText = !!helperText || !!errorText;
28249
28282
  if (!hasHintText) {
28250
28283
  return;
28251
28284
  }
28252
- return (hAsync("div", { class: "radio-group-top" }, hAsync("div", { id: helperTextId, class: "helper-text" }, helperText), hAsync("div", { id: errorTextId, class: "error-text" }, errorText)));
28285
+ return (hAsync("div", { class: "radio-group-top" }, hAsync("div", { id: helperTextId, class: "helper-text", "aria-live": "polite" }, !isInvalid ? helperText : null), hAsync("div", { id: errorTextId, class: "error-text", role: "alert" }, isInvalid ? errorText : null)));
28253
28286
  }
28254
- getHintTextID() {
28255
- const { el, helperText, errorText, helperTextId, errorTextId } = this;
28256
- if (el.classList.contains('ion-touched') && el.classList.contains('ion-invalid') && errorText) {
28287
+ getHintTextId() {
28288
+ const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
28289
+ if (isInvalid && errorText) {
28257
28290
  return errorTextId;
28258
28291
  }
28259
28292
  if (helperText) {
@@ -28265,7 +28298,7 @@ class RadioGroup {
28265
28298
  const { label, labelId, el, name, value } = this;
28266
28299
  const mode = getIonMode$1(this);
28267
28300
  renderHiddenInput(true, el, name, value, false);
28268
- return (hAsync(Host, { key: '81b8ebc96b2f383c36717f290d2959cc921ad6e8', role: "radiogroup", "aria-labelledby": label ? labelId : null, "aria-describedby": this.getHintTextID(), "aria-invalid": this.getHintTextID() === this.errorTextId, onClick: this.onClick, class: mode }, this.renderHintText(), hAsync("div", { key: '45b09efc10776b889a8f372cba80d25a3fc849da', class: "radio-group-wrapper" }, hAsync("slot", { key: '58714934542c2fdd7396de160364f3f06b32e8f8' }))));
28301
+ return (hAsync(Host, { key: 'db593b3ed511e9395e3c7bfd91b787328692cd6d', role: "radiogroup", "aria-labelledby": label ? labelId : null, "aria-describedby": this.hintTextId, "aria-invalid": this.isInvalid ? 'true' : undefined, onClick: this.onClick, class: mode }, this.renderHintText(), hAsync("div", { key: '85045b45a0100a45f3b9a35d1c5a25ec63d525c4', class: "radio-group-wrapper" }, hAsync("slot", { key: '53dacb87ce62398e78771fb2efaf839ab922d946' }))));
28269
28302
  }
28270
28303
  get el() { return getElement(this); }
28271
28304
  static get watchers() { return {
@@ -28285,6 +28318,8 @@ class RadioGroup {
28285
28318
  "value": [1032],
28286
28319
  "helperText": [1, "helper-text"],
28287
28320
  "errorText": [1, "error-text"],
28321
+ "isInvalid": [32],
28322
+ "hintTextId": [32],
28288
28323
  "setFocus": [64]
28289
28324
  },
28290
28325
  "$listeners$": [[4, "keydown", "onKeydown"]],
@@ -31898,7 +31933,7 @@ class Searchbar {
31898
31933
  /**
31899
31934
  * Set the input's autocorrect property.
31900
31935
  */
31901
- this.autocorrect = false;
31936
+ this.autocorrect = 'off';
31902
31937
  /**
31903
31938
  * Set the cancel button icon. Only applies to `md` mode.
31904
31939
  * Defaults to `arrow-back-sharp`.
@@ -32287,8 +32322,8 @@ class Searchbar {
32287
32322
  const clearIcon = this.clearIcon || (mode === 'ios' ? closeCircle : closeSharp);
32288
32323
  const searchIcon = this.searchIcon || (mode === 'ios' ? searchOutline : searchSharp);
32289
32324
  const shouldShowCancelButton = this.shouldShowCancelButton();
32290
- const cancelButton = this.showCancelButton !== 'never' && (hAsync("button", { key: 'c40019b58933a2e6e260de877f5d05419f477aca', "aria-label": cancelButtonText, "aria-hidden": shouldShowCancelButton ? undefined : 'true', type: "button", tabIndex: mode === 'ios' && !shouldShowCancelButton ? -1 : undefined, onMouseDown: this.onCancelSearchbar, onTouchStart: this.onCancelSearchbar, class: "searchbar-cancel-button" }, hAsync("div", { key: '1c6b2caf907b0d457c8da2960068bfa922364996', "aria-hidden": "true" }, mode === 'md' ? (hAsync("ion-icon", { "aria-hidden": "true", mode: mode, icon: this.cancelButtonIcon, lazy: false })) : (cancelButtonText))));
32291
- return (hAsync(Host, { key: '4b5d8f2d7a6a1dc104d85cae6e76105d1e5123c6', role: "search", "aria-disabled": this.disabled ? 'true' : null, class: createColorClasses$1(this.color, {
32325
+ const cancelButton = this.showCancelButton !== 'never' && (hAsync("button", { key: '19e18775856db87daeb4b9e3d7bca0461915a0df', "aria-label": cancelButtonText, "aria-hidden": shouldShowCancelButton ? undefined : 'true', type: "button", tabIndex: mode === 'ios' && !shouldShowCancelButton ? -1 : undefined, onMouseDown: this.onCancelSearchbar, onTouchStart: this.onCancelSearchbar, class: "searchbar-cancel-button" }, hAsync("div", { key: 'b3bbdcc033f3bd3441d619e4a252cef0dad4d07e', "aria-hidden": "true" }, mode === 'md' ? (hAsync("ion-icon", { "aria-hidden": "true", mode: mode, icon: this.cancelButtonIcon, lazy: false })) : (cancelButtonText))));
32326
+ return (hAsync(Host, { key: '074aa60e051bfb3225e87d44bbb6346c59c73574', role: "search", "aria-disabled": this.disabled ? 'true' : null, class: createColorClasses$1(this.color, {
32292
32327
  [mode]: true,
32293
32328
  'searchbar-animated': animated,
32294
32329
  'searchbar-disabled': this.disabled,
@@ -32298,14 +32333,14 @@ class Searchbar {
32298
32333
  'searchbar-has-focus': this.focused,
32299
32334
  'searchbar-should-show-clear': this.shouldShowClearButton(),
32300
32335
  'searchbar-should-show-cancel': this.shouldShowCancelButton(),
32301
- }) }, hAsync("div", { key: '2aa1dd3bbd82b7df543ecb08fc54f106543e6c55', class: "searchbar-input-container" }, hAsync("input", Object.assign({ key: 'e0a7e751e4a84803ad8367ab0cd251e7e2a17ef3', "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 ? 'on' : 'off', spellcheck: this.spellcheck }, this.inheritedAttributes)), mode === 'md' && cancelButton, hAsync("ion-icon", { key: '346f943e83b3236087ca78f56525c56997f60884', "aria-hidden": "true", mode: mode, icon: searchIcon, lazy: false, class: "searchbar-search-icon" }), hAsync("button", { key: '76a685d35e47b13230f449c58946239137510cfc', "aria-label": "reset", type: "button", "no-blur": true, class: "searchbar-clear-button", onPointerDown: (ev) => {
32336
+ }) }, hAsync("div", { key: '54f58a79fe36e85d9295157303f1be89c98bbdaf', class: "searchbar-input-container" }, hAsync("input", Object.assign({ key: 'f991a37fcf54d26b7ad10d89084764e03d97b9de', "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)), mode === 'md' && cancelButton, hAsync("ion-icon", { key: '8b44dd90a3292c5cf872ef16a8520675f5673494', "aria-hidden": "true", mode: mode, icon: searchIcon, lazy: false, class: "searchbar-search-icon" }), hAsync("button", { key: '79d9cfed8f01268044f82811a35d323a12dca749', "aria-label": "reset", type: "button", "no-blur": true, class: "searchbar-clear-button", onPointerDown: (ev) => {
32302
32337
  /**
32303
32338
  * This prevents mobile browsers from
32304
32339
  * blurring the input when the clear
32305
32340
  * button is activated.
32306
32341
  */
32307
32342
  ev.preventDefault();
32308
- }, onClick: () => this.onClearInput(true) }, hAsync("ion-icon", { key: '88d8cff792861f3ae5646252db212e2461445c47', "aria-hidden": "true", mode: mode, icon: clearIcon, lazy: false, class: "searchbar-clear-icon" }))), mode === 'ios' && cancelButton));
32343
+ }, onClick: () => this.onClearInput(true) }, hAsync("ion-icon", { key: 'aa3b9fa8a61f853236783ac7bcd0b113ea65ece2', "aria-hidden": "true", mode: mode, icon: clearIcon, lazy: false, class: "searchbar-clear-icon" }))), mode === 'ios' && cancelButton));
32309
32344
  }
32310
32345
  get el() { return getElement(this); }
32311
32346
  static get watchers() { return {
@@ -32327,7 +32362,7 @@ class Searchbar {
32327
32362
  "animated": [4],
32328
32363
  "autocapitalize": [1],
32329
32364
  "autocomplete": [1],
32330
- "autocorrect": [4],
32365
+ "autocorrect": [1],
32331
32366
  "cancelButtonIcon": [1, "cancel-button-icon"],
32332
32367
  "cancelButtonText": [1, "cancel-button-text"],
32333
32368
  "clearIcon": [1, "clear-icon"],
@@ -33412,7 +33447,7 @@ class Select {
33412
33447
  }
33413
33448
  componentWillLoad() {
33414
33449
  this.inheritedAttributes = inheritAttributes$1(this.el, ['aria-label']);
33415
- this.hintTextID = this.getHintTextID();
33450
+ this.hintTextId = this.getHintTextId();
33416
33451
  }
33417
33452
  componentDidLoad() {
33418
33453
  /**
@@ -33911,9 +33946,9 @@ class Select {
33911
33946
  }
33912
33947
  renderListbox() {
33913
33948
  const { disabled, inputId, isExpanded, required } = this;
33914
- return (hAsync("button", { disabled: disabled, id: inputId, "aria-label": this.ariaLabel, "aria-haspopup": "dialog", "aria-expanded": `${isExpanded}`, "aria-describedby": this.hintTextID, "aria-invalid": this.isInvalid ? 'true' : undefined, "aria-required": `${required}`, onFocus: this.onFocus, onBlur: this.onBlur, ref: (focusEl) => (this.focusEl = focusEl) }));
33949
+ return (hAsync("button", { disabled: disabled, id: inputId, "aria-label": this.ariaLabel, "aria-haspopup": "dialog", "aria-expanded": `${isExpanded}`, "aria-describedby": this.hintTextId, "aria-invalid": this.isInvalid ? 'true' : undefined, "aria-required": `${required}`, onFocus: this.onFocus, onBlur: this.onBlur, ref: (focusEl) => (this.focusEl = focusEl) }));
33915
33950
  }
33916
- getHintTextID() {
33951
+ getHintTextId() {
33917
33952
  const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
33918
33953
  if (isInvalid && errorText) {
33919
33954
  return errorTextId;
@@ -34038,7 +34073,7 @@ class Select {
34038
34073
  "isExpanded": [32],
34039
34074
  "hasFocus": [32],
34040
34075
  "isInvalid": [32],
34041
- "hintTextID": [32],
34076
+ "hintTextId": [32],
34042
34077
  "open": [64]
34043
34078
  },
34044
34079
  "$listeners$": undefined,
@@ -36509,6 +36544,10 @@ class Toggle {
36509
36544
  this.inheritedAttributes = {};
36510
36545
  this.didLoad = false;
36511
36546
  this.activated = false;
36547
+ /**
36548
+ * Track validation state for proper aria-live announcements.
36549
+ */
36550
+ this.isInvalid = false;
36512
36551
  /**
36513
36552
  * The name of the control, which is submitted with the form data.
36514
36553
  */
@@ -36622,15 +36661,18 @@ class Toggle {
36622
36661
  });
36623
36662
  }
36624
36663
  async connectedCallback() {
36664
+ const { didLoad, el } = this;
36625
36665
  /**
36626
36666
  * If we have not yet rendered
36627
36667
  * ion-toggle, then toggleTrack is not defined.
36628
36668
  * But if we are moving ion-toggle via appendChild,
36629
36669
  * then toggleTrack will be defined.
36630
36670
  */
36631
- if (this.didLoad) {
36671
+ if (didLoad) {
36632
36672
  this.setupGesture();
36633
36673
  }
36674
+ // Always set initial state
36675
+ this.isInvalid = checkInvalidState(el);
36634
36676
  }
36635
36677
  componentDidLoad() {
36636
36678
  this.setupGesture();
@@ -36641,9 +36683,15 @@ class Toggle {
36641
36683
  this.gesture.destroy();
36642
36684
  this.gesture = undefined;
36643
36685
  }
36686
+ // Clean up validation observer to prevent memory leaks.
36687
+ if (this.validationObserver) {
36688
+ this.validationObserver.disconnect();
36689
+ this.validationObserver = undefined;
36690
+ }
36644
36691
  }
36645
36692
  componentWillLoad() {
36646
36693
  this.inheritedAttributes = Object.assign({}, inheritAriaAttributes(this.el));
36694
+ this.hintTextId = this.getHintTextId();
36647
36695
  }
36648
36696
  onStart() {
36649
36697
  this.activated = true;
@@ -36684,9 +36732,9 @@ class Toggle {
36684
36732
  get hasLabel() {
36685
36733
  return this.el.textContent !== '';
36686
36734
  }
36687
- getHintTextID() {
36688
- const { el, helperText, errorText, helperTextId, errorTextId } = this;
36689
- if (el.classList.contains('ion-touched') && el.classList.contains('ion-invalid') && errorText) {
36735
+ getHintTextId() {
36736
+ const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
36737
+ if (isInvalid && errorText) {
36690
36738
  return errorTextId;
36691
36739
  }
36692
36740
  if (helperText) {
@@ -36699,7 +36747,7 @@ class Toggle {
36699
36747
  * This element should only be rendered if hint text is set.
36700
36748
  */
36701
36749
  renderHintText() {
36702
- const { helperText, errorText, helperTextId, errorTextId } = this;
36750
+ const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
36703
36751
  /**
36704
36752
  * undefined and empty string values should
36705
36753
  * be treated as not having helper/error text.
@@ -36708,15 +36756,15 @@ class Toggle {
36708
36756
  if (!hasHintText) {
36709
36757
  return;
36710
36758
  }
36711
- return (hAsync("div", { class: "toggle-bottom" }, hAsync("div", { id: helperTextId, class: "helper-text", part: "supporting-text helper-text" }, helperText), hAsync("div", { id: errorTextId, class: "error-text", part: "supporting-text error-text" }, errorText)));
36759
+ return (hAsync("div", { class: "toggle-bottom" }, hAsync("div", { id: helperTextId, class: "helper-text", part: "supporting-text helper-text", "aria-live": "polite" }, !isInvalid ? helperText : null), hAsync("div", { id: errorTextId, class: "error-text", part: "supporting-text error-text", role: "alert" }, isInvalid ? errorText : null)));
36712
36760
  }
36713
36761
  render() {
36714
- const { activated, alignment, checked, color, disabled, el, errorTextId, hasLabel, inheritedAttributes, inputId, inputLabelId, justify, labelPlacement, name, required, } = this;
36762
+ const { activated, alignment, checked, color, disabled, el, hasLabel, inheritedAttributes, inputId, inputLabelId, justify, labelPlacement, name, required, } = this;
36715
36763
  const mode = getIonMode$1(this);
36716
36764
  const value = this.getValue();
36717
36765
  const rtl = isRTL$1(el) ? 'rtl' : 'ltr';
36718
36766
  renderHiddenInput(true, el, name, checked ? value : '', disabled);
36719
- return (hAsync(Host, { key: '17bbbc8d229868e5c872b2bc5a3faf579780c5e0', role: "switch", "aria-checked": `${checked}`, "aria-describedby": this.getHintTextID(), "aria-invalid": this.getHintTextID() === errorTextId, onClick: this.onClick, "aria-labelledby": hasLabel ? inputLabelId : null, "aria-label": inheritedAttributes['aria-label'] || null, "aria-disabled": disabled ? 'true' : null, tabindex: disabled ? undefined : 0, onKeyDown: this.onKeyDown, onFocus: this.onFocus, onBlur: this.onBlur, class: createColorClasses$1(color, {
36767
+ return (hAsync(Host, { key: 'f569148edd89ee041a4719ffc4733c16b05229bd', role: "switch", "aria-checked": `${checked}`, "aria-describedby": this.hintTextId, "aria-invalid": this.isInvalid ? 'true' : undefined, onClick: this.onClick, "aria-labelledby": hasLabel ? inputLabelId : null, "aria-label": inheritedAttributes['aria-label'] || null, "aria-disabled": disabled ? 'true' : null, "aria-required": required ? 'true' : undefined, tabindex: disabled ? undefined : 0, onKeyDown: this.onKeyDown, onFocus: this.onFocus, onBlur: this.onBlur, class: createColorClasses$1(color, {
36720
36768
  [mode]: true,
36721
36769
  'in-item': hostContext('ion-item', el),
36722
36770
  'toggle-activated': activated,
@@ -36726,10 +36774,10 @@ class Toggle {
36726
36774
  [`toggle-alignment-${alignment}`]: alignment !== undefined,
36727
36775
  [`toggle-label-placement-${labelPlacement}`]: true,
36728
36776
  [`toggle-${rtl}`]: true,
36729
- }) }, hAsync("label", { key: '673625b62a2c909e95dccb642c91312967a6cd1c', class: "toggle-wrapper", htmlFor: inputId }, hAsync("input", Object.assign({ key: '7dc3f357b4708116663970047765da9f8f845bf0', type: "checkbox", role: "switch", "aria-checked": `${checked}`, checked: checked, disabled: disabled, id: inputId, required: required }, inheritedAttributes)), hAsync("div", { key: '8f1c6a182031e8cbc6727e5f4ac0e00ad4247447', class: {
36777
+ }) }, hAsync("label", { key: '3027f2ac4be6de422a14486d847fbee77f615db1', class: "toggle-wrapper", htmlFor: inputId }, hAsync("input", Object.assign({ key: '4b0304c9e879e432b80184b4e5de37d55c11b436', type: "checkbox", role: "switch", "aria-checked": `${checked}`, checked: checked, disabled: disabled, id: inputId, required: required }, inheritedAttributes)), hAsync("div", { key: '8ef265ec942e7f01ff31cbb202ed146c6bf94e02', class: {
36730
36778
  'label-text-wrapper': true,
36731
36779
  'label-text-wrapper-hidden': !hasLabel,
36732
- }, part: "label", id: inputLabelId, onClick: this.onDivLabelClick }, hAsync("slot", { key: '8322b9d54dc7edeb4e16fefcde9f7ebca8d5c3e1' }), this.renderHintText()), hAsync("div", { key: 'fe6984143db817a7b3020a3f57cf5418fc3dcc0e', class: "native-wrapper" }, this.renderToggleControl()))));
36780
+ }, part: "label", id: inputLabelId, onClick: this.onDivLabelClick }, hAsync("slot", { key: '7b162b7dd27199cca2a4c995276a18b9f8e44aaf' }), this.renderHintText()), hAsync("div", { key: 'd13c34bd42fca01cc73ddb4ea7e471b33a282a3e', class: "native-wrapper" }, this.renderToggleControl()))));
36733
36781
  }
36734
36782
  get el() { return getElement(this); }
36735
36783
  static get watchers() { return {
@@ -36755,7 +36803,9 @@ class Toggle {
36755
36803
  "justify": [1],
36756
36804
  "alignment": [1],
36757
36805
  "required": [4],
36758
- "activated": [32]
36806
+ "activated": [32],
36807
+ "isInvalid": [32],
36808
+ "hintTextId": [32]
36759
36809
  },
36760
36810
  "$listeners$": undefined,
36761
36811
  "$lazyBundleId$": "-",
@@ -37912,7 +37962,7 @@ var NAMESPACE = (
37912
37962
  );
37913
37963
 
37914
37964
  /*
37915
- Stencil Hydrate Runner v4.38.3 | MIT Licensed | https://stenciljs.com
37965
+ Stencil Hydrate Runner v4.38.0 | MIT Licensed | https://stenciljs.com
37916
37966
  */
37917
37967
  var __defProp = Object.defineProperty;
37918
37968
  var __export = (target, all) => {
@@ -38073,6 +38123,82 @@ var MockAttr = class {
38073
38123
  }
38074
38124
  };
38075
38125
 
38126
+ // src/mock-doc/class-list.ts
38127
+ var MockClassList = class {
38128
+ constructor(elm) {
38129
+ this.elm = elm;
38130
+ }
38131
+ add(...classNames) {
38132
+ const clsNames = getItems(this.elm);
38133
+ let updated = false;
38134
+ classNames.forEach((className) => {
38135
+ className = String(className);
38136
+ validateClass(className);
38137
+ if (clsNames.includes(className) === false) {
38138
+ clsNames.push(className);
38139
+ updated = true;
38140
+ }
38141
+ });
38142
+ if (updated) {
38143
+ this.elm.setAttributeNS(null, "class", clsNames.join(" "));
38144
+ }
38145
+ }
38146
+ remove(...classNames) {
38147
+ const clsNames = getItems(this.elm);
38148
+ let updated = false;
38149
+ classNames.forEach((className) => {
38150
+ className = String(className);
38151
+ validateClass(className);
38152
+ const index = clsNames.indexOf(className);
38153
+ if (index > -1) {
38154
+ clsNames.splice(index, 1);
38155
+ updated = true;
38156
+ }
38157
+ });
38158
+ if (updated) {
38159
+ this.elm.setAttributeNS(null, "class", clsNames.filter((c) => c.length > 0).join(" "));
38160
+ }
38161
+ }
38162
+ contains(className) {
38163
+ className = String(className);
38164
+ return getItems(this.elm).includes(className);
38165
+ }
38166
+ toggle(className) {
38167
+ className = String(className);
38168
+ if (this.contains(className) === true) {
38169
+ this.remove(className);
38170
+ } else {
38171
+ this.add(className);
38172
+ }
38173
+ }
38174
+ get length() {
38175
+ return getItems(this.elm).length;
38176
+ }
38177
+ item(index) {
38178
+ return getItems(this.elm)[index];
38179
+ }
38180
+ toString() {
38181
+ return getItems(this.elm).join(" ");
38182
+ }
38183
+ };
38184
+ function validateClass(className) {
38185
+ if (className === "") {
38186
+ throw new Error("The token provided must not be empty.");
38187
+ }
38188
+ if (/\s/.test(className)) {
38189
+ throw new Error(
38190
+ `The token provided ('${className}') contains HTML space characters, which are not valid in tokens.`
38191
+ );
38192
+ }
38193
+ }
38194
+ function getItems(elm) {
38195
+ const className = elm.getAttribute("class");
38196
+ if (typeof className === "string" && className.length > 0) {
38197
+ return className.trim().split(" ").filter((c) => c.length > 0);
38198
+ }
38199
+ return [];
38200
+ }
38201
+
38076
38202
  // src/mock-doc/css-style-declaration.ts
38077
38203
  var MockCSSStyleDeclaration = class {
38078
38204
  constructor() {
@@ -48588,81 +48714,6 @@ var STRUCTURE_ELEMENTS = /* @__PURE__ */ new Set([
48588
48714
  "style"
48589
48715
  ]);
48590
48716
 
48591
- // src/mock-doc/token-list.ts
48592
- var MockTokenList = class {
48593
- constructor(elm, attr) {
48594
- this.elm = elm;
48595
- this.attr = attr;
48596
- }
48597
- add(...tokens) {
48598
- const items = getItems(this.elm, this.attr);
48599
- let updated = false;
48600
- tokens.forEach((token) => {
48601
- token = String(token);
48602
- validateToken(token);
48603
- if (items.includes(token) === false) {
48604
- items.push(token);
48605
- updated = true;
48606
- }
48607
- });
48608
- if (updated) {
48609
- this.elm.setAttributeNS(null, this.attr, items.join(" "));
48610
- }
48611
- }
48612
- remove(...tokens) {
48613
- const items = getItems(this.elm, this.attr);
48614
- let updated = false;
48615
- tokens.forEach((token) => {
48616
- token = String(token);
48617
- validateToken(token);
48618
- const index = items.indexOf(token);
48619
- if (index > -1) {
48620
- items.splice(index, 1);
48621
- updated = true;
48622
- }
48623
- });
48624
- if (updated) {
48625
- this.elm.setAttributeNS(null, this.attr, items.filter((c) => c.length > 0).join(" "));
48626
- }
48627
- }
48628
- contains(token) {
48629
- token = String(token);
48630
- return getItems(this.elm, this.attr).includes(token);
48631
- }
48632
- toggle(token) {
48633
- token = String(token);
48634
- if (this.contains(token) === true) {
48635
- this.remove(token);
48636
- } else {
48637
- this.add(token);
48638
- }
48639
- }
48640
- get length() {
48641
- return getItems(this.elm, this.attr).length;
48642
- }
48643
- item(index) {
48644
- return getItems(this.elm, this.attr)[index];
48645
- }
48646
- toString() {
48647
- return getItems(this.elm, this.attr).join(" ");
48648
- }
48649
- };
48650
- function validateToken(token) {
48651
- if (token === "") {
48652
- throw new Error("The token provided must not be empty.");
48653
- }
48654
- if (/\s/.test(token)) {
48655
- throw new Error(`The token provided ('${token}') contains HTML space characters, which are not valid in tokens.`);
48656
- }
48657
- }
48658
- function getItems(elm, attr) {
48659
- const value = elm.getAttribute(attr);
48660
- if (typeof value === "string" && value.length > 0) {
48661
- return value.trim().split(" ").filter((c) => c.length > 0);
48662
- }
48663
- return [];
48664
- }
48665
-
48666
48717
  // src/mock-doc/node.ts
48667
48718
  var MockNode2 = class {
48668
48719
  constructor(ownerDocument, nodeType, nodeName, nodeValue) {
@@ -48930,10 +48981,7 @@ var MockElement = class extends MockNode2 {
48930
48981
  this.setAttributeNS(null, "class", value);
48931
48982
  }
48932
48983
  get classList() {
48933
- return new MockTokenList(this, "class");
48934
- }
48935
- get part() {
48936
- return new MockTokenList(this, "part");
48984
+ return new MockClassList(this);
48937
48985
  }
48938
48986
  click() {
48939
48987
  dispatchEvent(this, new MockEvent("click", { bubbles: true, cancelable: true, composed: true }));
@@ -51816,7 +51864,7 @@ var MockDocument = class _MockDocument extends MockHTMLElement {
51816
51864
  }
51817
51865
  set location(val) {
51818
51866
  if (this.defaultView != null) {
51819
- this.defaultView.location.href = val;
51867
+ this.defaultView.location = val;
51820
51868
  }
51821
51869
  }
51822
51870
  get baseURI() {