voyager-ionic-core 8.7.9 → 8.7.13

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 (1039) hide show
  1. package/components/action-sheet.js +186 -5
  2. package/components/checkbox.js +63 -9
  3. package/components/content.js +13 -3
  4. package/components/ion-accordion.js +1 -1
  5. package/components/ion-datetime.js +35 -2
  6. package/components/ion-fab-button.js +1 -1
  7. package/components/ion-input.js +2 -1
  8. package/components/ion-select.js +15 -9
  9. package/components/ion-textarea.js +2 -1
  10. package/components/ion-toggle.js +62 -12
  11. package/components/item.js +1 -1
  12. package/components/modal.js +97 -5
  13. package/components/notch-controller.js +153 -0
  14. package/components/overlays.js +11 -5
  15. package/components/popover.js +36 -2
  16. package/components/radio-group.js +60 -7
  17. package/components/validity.js +1 -150
  18. package/css/core.css +1 -1
  19. package/css/core.css.map +1 -1
  20. package/css/ionic.bundle.css +1 -1
  21. package/css/ionic.bundle.css.map +1 -1
  22. package/dist/cjs/index.cjs.js +1 -1
  23. package/dist/cjs/ion-action-sheet.cjs.entry.js +184 -5
  24. package/dist/cjs/ion-alert.cjs.entry.js +1 -1
  25. package/dist/cjs/ion-app_8.cjs.entry.js +12 -3
  26. package/dist/cjs/ion-checkbox.cjs.entry.js +60 -8
  27. package/dist/cjs/ion-datetime_3.cjs.entry.js +36 -3
  28. package/dist/cjs/ion-input.cjs.entry.js +3 -2
  29. package/dist/cjs/ion-loading.cjs.entry.js +1 -1
  30. package/dist/cjs/ion-menu_3.cjs.entry.js +1 -1
  31. package/dist/cjs/ion-modal.cjs.entry.js +97 -6
  32. package/dist/cjs/ion-popover.cjs.entry.js +37 -3
  33. package/dist/cjs/ion-radio_2.cjs.entry.js +57 -6
  34. package/dist/cjs/ion-select-modal.cjs.entry.js +1 -1
  35. package/dist/cjs/ion-select_3.cjs.entry.js +16 -10
  36. package/dist/cjs/ion-textarea.cjs.entry.js +3 -2
  37. package/dist/cjs/ion-toast.cjs.entry.js +1 -1
  38. package/dist/cjs/ion-toggle.cjs.entry.js +58 -10
  39. package/dist/cjs/ionic.cjs.js +1 -1
  40. package/dist/cjs/loader.cjs.js +1 -1
  41. package/dist/cjs/{validity-C8QoAYT2.js → notch-controller-Bzqhjm4f.js} +0 -14
  42. package/dist/cjs/{overlays-DxIZwUXI.js → overlays--dagG4QM.js} +11 -5
  43. package/dist/cjs/validity-BpS37YFM.js +19 -0
  44. package/dist/collection/components/accordion/accordion.js +3 -3
  45. package/dist/collection/components/action-sheet/action-sheet.js +199 -4
  46. package/dist/collection/components/checkbox/checkbox.js +67 -9
  47. package/dist/collection/components/content/content.js +32 -3
  48. package/dist/collection/components/datetime/datetime.js +35 -2
  49. package/dist/collection/components/fab-button/fab-button.js +3 -3
  50. package/dist/collection/components/item/item.js +3 -3
  51. package/dist/collection/components/modal/modal.js +97 -5
  52. package/dist/collection/components/popover/popover.js +36 -2
  53. package/dist/collection/components/radio-group/radio-group.js +64 -7
  54. package/dist/collection/components/select/select.js +13 -8
  55. package/dist/collection/components/toggle/toggle.js +62 -12
  56. package/dist/collection/utils/overlays.js +11 -5
  57. package/dist/collection/utils/test/playwright/page/utils/set-content.js +7 -0
  58. package/dist/docs.json +26 -20
  59. package/dist/esm/index.js +1 -1
  60. package/dist/esm/ion-action-sheet.entry.js +184 -5
  61. package/dist/esm/ion-alert.entry.js +1 -1
  62. package/dist/esm/ion-app_8.entry.js +12 -3
  63. package/dist/esm/ion-checkbox.entry.js +60 -8
  64. package/dist/esm/ion-datetime_3.entry.js +36 -3
  65. package/dist/esm/ion-input.entry.js +2 -1
  66. package/dist/esm/ion-loading.entry.js +1 -1
  67. package/dist/esm/ion-menu_3.entry.js +1 -1
  68. package/dist/esm/ion-modal.entry.js +97 -6
  69. package/dist/esm/ion-popover.entry.js +37 -3
  70. package/dist/esm/ion-radio_2.entry.js +57 -6
  71. package/dist/esm/ion-select-modal.entry.js +1 -1
  72. package/dist/esm/ion-select_3.entry.js +15 -9
  73. package/dist/esm/ion-textarea.entry.js +2 -1
  74. package/dist/esm/ion-toast.entry.js +1 -1
  75. package/dist/esm/ion-toggle.entry.js +58 -10
  76. package/dist/esm/ionic.js +1 -1
  77. package/dist/esm/loader.js +1 -1
  78. package/dist/esm/{validity-B8oWougr.js → notch-controller-BwelN_JM.js} +1 -14
  79. package/dist/esm/{overlays-BymNv-BL.js → overlays-DCabi1dI.js} +11 -5
  80. package/dist/esm/validity-DJztqcrH.js +17 -0
  81. package/dist/ionic/index.esm.js +1 -1
  82. package/dist/ionic/ionic.esm.js +1 -1
  83. package/dist/ionic/p-071e8c1b.entry.js +4 -0
  84. package/dist/ionic/{p-7da39a4d.entry.js → p-07753df3.entry.js} +1 -1
  85. package/dist/ionic/{p-0b80d700.entry.js → p-0abeb0fc.entry.js} +1 -1
  86. package/dist/ionic/p-0bf76d0f.entry.js +4 -0
  87. package/dist/ionic/p-40c261a3.entry.js +4 -0
  88. package/dist/ionic/p-4b658a7c.entry.js +4 -0
  89. package/dist/ionic/p-4e41ea20.entry.js +4 -0
  90. package/dist/ionic/{p-98fc09eb.entry.js → p-576e0965.entry.js} +1 -1
  91. package/dist/ionic/p-60e0728c.entry.js +4 -0
  92. package/dist/ionic/p-75ae4733.entry.js +4 -0
  93. package/dist/ionic/p-C6F4hat2.js +4 -0
  94. package/dist/ionic/{p-DieJyvMP.js → p-DCv9sLH2.js} +1 -1
  95. package/dist/ionic/p-DJztqcrH.js +4 -0
  96. package/dist/ionic/{p-83be404e.entry.js → p-a8ed848b.entry.js} +1 -1
  97. package/dist/ionic/p-c19f63d0.entry.js +4 -0
  98. package/dist/ionic/p-c85a2127.entry.js +4 -0
  99. package/dist/ionic/p-d1f54e28.entry.js +4 -0
  100. package/dist/ionic/p-d3014190.entry.js +4 -0
  101. package/dist/ionic/{p-15193d01.entry.js → p-ec654c42.entry.js} +1 -1
  102. package/dist/ionic/svg/document-sharp.svg +1 -0
  103. package/dist/ionic/svg/document-text-outline.svg +1 -0
  104. package/dist/ionic/svg/document-text-sharp.svg +1 -0
  105. package/dist/ionic/svg/document-text.svg +1 -0
  106. package/dist/ionic/svg/document.svg +1 -0
  107. package/dist/ionic/svg/documents-outline.svg +1 -0
  108. package/dist/ionic/svg/documents-sharp.svg +1 -0
  109. package/dist/ionic/svg/documents.svg +1 -0
  110. package/dist/ionic/svg/download-outline.svg +1 -0
  111. package/dist/ionic/svg/download-sharp.svg +1 -0
  112. package/dist/ionic/svg/download.svg +1 -0
  113. package/dist/ionic/svg/duplicate-outline.svg +1 -0
  114. package/dist/ionic/svg/duplicate-sharp.svg +1 -0
  115. package/dist/ionic/svg/duplicate.svg +1 -0
  116. package/dist/ionic/svg/ear-outline.svg +1 -0
  117. package/dist/ionic/svg/ear-sharp.svg +1 -0
  118. package/dist/ionic/svg/ear.svg +1 -0
  119. package/dist/ionic/svg/earth-outline.svg +1 -0
  120. package/dist/ionic/svg/earth-sharp.svg +1 -0
  121. package/dist/ionic/svg/earth.svg +1 -0
  122. package/dist/ionic/svg/easel-outline.svg +1 -0
  123. package/dist/ionic/svg/easel-sharp.svg +1 -0
  124. package/dist/ionic/svg/easel.svg +1 -0
  125. package/dist/ionic/svg/egg-outline.svg +1 -0
  126. package/dist/ionic/svg/egg-sharp.svg +1 -0
  127. package/dist/ionic/svg/egg.svg +1 -0
  128. package/dist/ionic/svg/ellipse-outline.svg +1 -0
  129. package/dist/ionic/svg/ellipse-sharp.svg +1 -0
  130. package/dist/ionic/svg/ellipse.svg +1 -0
  131. package/dist/ionic/svg/ellipsis-horizontal-circle-outline.svg +1 -0
  132. package/dist/ionic/svg/ellipsis-horizontal-circle-sharp.svg +1 -0
  133. package/dist/ionic/svg/ellipsis-horizontal-circle.svg +1 -0
  134. package/dist/ionic/svg/ellipsis-horizontal-outline.svg +1 -0
  135. package/dist/ionic/svg/ellipsis-horizontal-sharp.svg +1 -0
  136. package/dist/ionic/svg/ellipsis-horizontal.svg +1 -0
  137. package/dist/ionic/svg/ellipsis-vertical-circle-outline.svg +1 -0
  138. package/dist/ionic/svg/ellipsis-vertical-circle-sharp.svg +1 -0
  139. package/dist/ionic/svg/ellipsis-vertical-circle.svg +1 -0
  140. package/dist/ionic/svg/ellipsis-vertical-outline.svg +1 -0
  141. package/dist/ionic/svg/ellipsis-vertical-sharp.svg +1 -0
  142. package/dist/ionic/svg/ellipsis-vertical.svg +1 -0
  143. package/dist/ionic/svg/enter-outline.svg +1 -0
  144. package/dist/ionic/svg/enter-sharp.svg +1 -0
  145. package/dist/ionic/svg/enter.svg +1 -0
  146. package/dist/ionic/svg/exit-outline.svg +1 -0
  147. package/dist/ionic/svg/exit-sharp.svg +1 -0
  148. package/dist/ionic/svg/exit.svg +1 -0
  149. package/dist/ionic/svg/expand-outline.svg +1 -0
  150. package/dist/ionic/svg/expand-sharp.svg +1 -0
  151. package/dist/ionic/svg/expand.svg +1 -0
  152. package/dist/ionic/svg/extension-puzzle-outline.svg +1 -0
  153. package/dist/ionic/svg/extension-puzzle-sharp.svg +1 -0
  154. package/dist/ionic/svg/extension-puzzle.svg +1 -0
  155. package/dist/ionic/svg/eye-off-outline.svg +1 -0
  156. package/dist/ionic/svg/eye-off-sharp.svg +1 -0
  157. package/dist/ionic/svg/eye-off.svg +1 -0
  158. package/dist/ionic/svg/eye-outline.svg +1 -0
  159. package/dist/ionic/svg/eye-sharp.svg +1 -0
  160. package/dist/ionic/svg/eye.svg +1 -0
  161. package/dist/ionic/svg/eyedrop-outline.svg +1 -0
  162. package/dist/ionic/svg/eyedrop-sharp.svg +1 -0
  163. package/dist/ionic/svg/eyedrop.svg +1 -0
  164. package/dist/ionic/svg/fast-food-outline.svg +1 -0
  165. package/dist/ionic/svg/fast-food-sharp.svg +1 -0
  166. package/dist/ionic/svg/fast-food.svg +1 -0
  167. package/dist/ionic/svg/female-outline.svg +1 -0
  168. package/dist/ionic/svg/female-sharp.svg +1 -0
  169. package/dist/ionic/svg/female.svg +1 -0
  170. package/dist/ionic/svg/file-tray-full-outline.svg +1 -0
  171. package/dist/ionic/svg/file-tray-full-sharp.svg +1 -0
  172. package/dist/ionic/svg/file-tray-full.svg +1 -0
  173. package/dist/ionic/svg/file-tray-outline.svg +1 -0
  174. package/dist/ionic/svg/file-tray-sharp.svg +1 -0
  175. package/dist/ionic/svg/file-tray-stacked-outline.svg +1 -0
  176. package/dist/ionic/svg/file-tray-stacked-sharp.svg +1 -0
  177. package/dist/ionic/svg/file-tray-stacked.svg +1 -0
  178. package/dist/ionic/svg/file-tray.svg +1 -0
  179. package/dist/ionic/svg/film-outline.svg +1 -0
  180. package/dist/ionic/svg/film-sharp.svg +1 -0
  181. package/dist/ionic/svg/film.svg +1 -0
  182. package/dist/ionic/svg/filter-circle-outline.svg +1 -0
  183. package/dist/ionic/svg/filter-circle-sharp.svg +1 -0
  184. package/dist/ionic/svg/filter-circle.svg +1 -0
  185. package/dist/ionic/svg/filter-outline.svg +1 -0
  186. package/dist/ionic/svg/filter-sharp.svg +1 -0
  187. package/dist/ionic/svg/filter.svg +1 -0
  188. package/dist/ionic/svg/finger-print-outline.svg +1 -0
  189. package/dist/ionic/svg/finger-print-sharp.svg +1 -0
  190. package/dist/ionic/svg/finger-print.svg +1 -0
  191. package/dist/ionic/svg/fish-outline.svg +1 -0
  192. package/dist/ionic/svg/fish-sharp.svg +1 -0
  193. package/dist/ionic/svg/fish.svg +1 -0
  194. package/dist/ionic/svg/fitness-outline.svg +1 -0
  195. package/dist/ionic/svg/fitness-sharp.svg +1 -0
  196. package/dist/ionic/svg/fitness.svg +1 -0
  197. package/dist/ionic/svg/flag-outline.svg +1 -0
  198. package/dist/ionic/svg/flag-sharp.svg +1 -0
  199. package/dist/ionic/svg/flag.svg +1 -0
  200. package/dist/ionic/svg/flame-outline.svg +1 -0
  201. package/dist/ionic/svg/flame-sharp.svg +1 -0
  202. package/dist/ionic/svg/flame.svg +1 -0
  203. package/dist/ionic/svg/flash-off-outline.svg +1 -0
  204. package/dist/ionic/svg/flash-off-sharp.svg +1 -0
  205. package/dist/ionic/svg/flash-off.svg +1 -0
  206. package/dist/ionic/svg/flash-outline.svg +1 -0
  207. package/dist/ionic/svg/flash-sharp.svg +1 -0
  208. package/dist/ionic/svg/flash.svg +1 -0
  209. package/dist/ionic/svg/flashlight-outline.svg +1 -0
  210. package/dist/ionic/svg/flashlight-sharp.svg +1 -0
  211. package/dist/ionic/svg/flashlight.svg +1 -0
  212. package/dist/ionic/svg/flask-outline.svg +1 -0
  213. package/dist/ionic/svg/flask-sharp.svg +1 -0
  214. package/dist/ionic/svg/flask.svg +1 -0
  215. package/dist/ionic/svg/flower-outline.svg +1 -0
  216. package/dist/ionic/svg/flower-sharp.svg +1 -0
  217. package/dist/ionic/svg/flower.svg +1 -0
  218. package/dist/ionic/svg/folder-open-outline.svg +1 -0
  219. package/dist/ionic/svg/folder-open-sharp.svg +1 -0
  220. package/dist/ionic/svg/folder-open.svg +1 -0
  221. package/dist/ionic/svg/folder-outline.svg +1 -0
  222. package/dist/ionic/svg/folder-sharp.svg +1 -0
  223. package/dist/ionic/svg/folder.svg +1 -0
  224. package/dist/ionic/svg/football-outline.svg +1 -0
  225. package/dist/ionic/svg/football-sharp.svg +1 -0
  226. package/dist/ionic/svg/football.svg +1 -0
  227. package/dist/ionic/svg/footsteps-outline.svg +1 -0
  228. package/dist/ionic/svg/footsteps-sharp.svg +1 -0
  229. package/dist/ionic/svg/footsteps.svg +1 -0
  230. package/dist/ionic/svg/funnel-outline.svg +1 -0
  231. package/dist/ionic/svg/funnel-sharp.svg +1 -0
  232. package/dist/ionic/svg/funnel.svg +1 -0
  233. package/dist/ionic/svg/game-controller-outline.svg +1 -0
  234. package/dist/ionic/svg/game-controller-sharp.svg +1 -0
  235. package/dist/ionic/svg/game-controller.svg +1 -0
  236. package/dist/ionic/svg/gift-outline.svg +1 -0
  237. package/dist/ionic/svg/gift-sharp.svg +1 -0
  238. package/dist/ionic/svg/gift.svg +1 -0
  239. package/dist/ionic/svg/git-branch-outline.svg +1 -0
  240. package/dist/ionic/svg/git-branch-sharp.svg +1 -0
  241. package/dist/ionic/svg/git-branch.svg +1 -0
  242. package/dist/ionic/svg/git-commit-outline.svg +1 -0
  243. package/dist/ionic/svg/git-commit-sharp.svg +1 -0
  244. package/dist/ionic/svg/git-commit.svg +1 -0
  245. package/dist/ionic/svg/git-compare-outline.svg +1 -0
  246. package/dist/ionic/svg/git-compare-sharp.svg +1 -0
  247. package/dist/ionic/svg/git-compare.svg +1 -0
  248. package/dist/ionic/svg/git-merge-outline.svg +1 -0
  249. package/dist/ionic/svg/git-merge-sharp.svg +1 -0
  250. package/dist/ionic/svg/git-merge.svg +1 -0
  251. package/dist/ionic/svg/git-network-outline.svg +1 -0
  252. package/dist/ionic/svg/git-network-sharp.svg +1 -0
  253. package/dist/ionic/svg/git-network.svg +1 -0
  254. package/dist/ionic/svg/git-pull-request-outline.svg +1 -0
  255. package/dist/ionic/svg/git-pull-request-sharp.svg +1 -0
  256. package/dist/ionic/svg/git-pull-request.svg +1 -0
  257. package/dist/ionic/svg/glasses-outline.svg +1 -0
  258. package/dist/ionic/svg/glasses-sharp.svg +1 -0
  259. package/dist/ionic/svg/glasses.svg +1 -0
  260. package/dist/ionic/svg/globe-outline.svg +1 -0
  261. package/dist/ionic/svg/globe-sharp.svg +1 -0
  262. package/dist/ionic/svg/globe.svg +1 -0
  263. package/dist/ionic/svg/golf-outline.svg +1 -0
  264. package/dist/ionic/svg/golf-sharp.svg +1 -0
  265. package/dist/ionic/svg/golf.svg +1 -0
  266. package/dist/ionic/svg/grid-outline.svg +1 -0
  267. package/dist/ionic/svg/grid-sharp.svg +1 -0
  268. package/dist/ionic/svg/grid.svg +1 -0
  269. package/dist/ionic/svg/hammer-outline.svg +1 -0
  270. package/dist/ionic/svg/hammer-sharp.svg +1 -0
  271. package/dist/ionic/svg/hammer.svg +1 -0
  272. package/dist/ionic/svg/hand-left-outline.svg +1 -0
  273. package/dist/ionic/svg/hand-left-sharp.svg +1 -0
  274. package/dist/ionic/svg/hand-left.svg +1 -0
  275. package/dist/ionic/svg/hand-right-outline.svg +1 -0
  276. package/dist/ionic/svg/hand-right-sharp.svg +1 -0
  277. package/dist/ionic/svg/hand-right.svg +1 -0
  278. package/dist/ionic/svg/happy-outline.svg +1 -0
  279. package/dist/ionic/svg/happy-sharp.svg +1 -0
  280. package/dist/ionic/svg/happy.svg +1 -0
  281. package/dist/ionic/svg/hardware-chip-outline.svg +1 -0
  282. package/dist/ionic/svg/hardware-chip-sharp.svg +1 -0
  283. package/dist/ionic/svg/hardware-chip.svg +1 -0
  284. package/dist/ionic/svg/headset-outline.svg +1 -0
  285. package/dist/ionic/svg/headset-sharp.svg +1 -0
  286. package/dist/ionic/svg/headset.svg +1 -0
  287. package/dist/ionic/svg/heart-circle-outline.svg +1 -0
  288. package/dist/ionic/svg/heart-circle-sharp.svg +1 -0
  289. package/dist/ionic/svg/heart-circle.svg +1 -0
  290. package/dist/ionic/svg/heart-dislike-circle-outline.svg +1 -0
  291. package/dist/ionic/svg/heart-dislike-circle-sharp.svg +1 -0
  292. package/dist/ionic/svg/heart-dislike-circle.svg +1 -0
  293. package/dist/ionic/svg/heart-dislike-outline.svg +1 -0
  294. package/dist/ionic/svg/heart-dislike-sharp.svg +1 -0
  295. package/dist/ionic/svg/heart-dislike.svg +1 -0
  296. package/dist/ionic/svg/heart-half-outline.svg +1 -0
  297. package/dist/ionic/svg/heart-half-sharp.svg +1 -0
  298. package/dist/ionic/svg/heart-half.svg +1 -0
  299. package/dist/ionic/svg/heart-outline.svg +1 -0
  300. package/dist/ionic/svg/heart-sharp.svg +1 -0
  301. package/dist/ionic/svg/heart.svg +1 -0
  302. package/dist/ionic/svg/help-buoy-outline.svg +1 -0
  303. package/dist/ionic/svg/help-buoy-sharp.svg +1 -0
  304. package/dist/ionic/svg/help-buoy.svg +1 -0
  305. package/dist/ionic/svg/help-circle-outline.svg +1 -0
  306. package/dist/ionic/svg/help-circle-sharp.svg +1 -0
  307. package/dist/ionic/svg/help-circle.svg +1 -0
  308. package/dist/ionic/svg/help-outline.svg +1 -0
  309. package/dist/ionic/svg/help-sharp.svg +1 -0
  310. package/dist/ionic/svg/help.svg +1 -0
  311. package/dist/ionic/svg/home-outline.svg +1 -0
  312. package/dist/ionic/svg/home-sharp.svg +1 -0
  313. package/dist/ionic/svg/home.svg +1 -0
  314. package/dist/ionic/svg/hourglass-outline.svg +1 -0
  315. package/dist/ionic/svg/hourglass-sharp.svg +1 -0
  316. package/dist/ionic/svg/hourglass.svg +1 -0
  317. package/dist/ionic/svg/ice-cream-outline.svg +1 -0
  318. package/dist/ionic/svg/ice-cream-sharp.svg +1 -0
  319. package/dist/ionic/svg/ice-cream.svg +1 -0
  320. package/dist/ionic/svg/id-card-outline.svg +1 -0
  321. package/dist/ionic/svg/id-card-sharp.svg +1 -0
  322. package/dist/ionic/svg/id-card.svg +1 -0
  323. package/dist/ionic/svg/image-outline.svg +1 -0
  324. package/dist/ionic/svg/image-sharp.svg +1 -0
  325. package/dist/ionic/svg/image.svg +1 -0
  326. package/dist/ionic/svg/images-outline.svg +1 -0
  327. package/dist/ionic/svg/images-sharp.svg +1 -0
  328. package/dist/ionic/svg/images.svg +1 -0
  329. package/dist/ionic/svg/infinite-outline.svg +1 -0
  330. package/dist/ionic/svg/infinite-sharp.svg +1 -0
  331. package/dist/ionic/svg/infinite.svg +1 -0
  332. package/dist/ionic/svg/information-circle-outline.svg +1 -0
  333. package/dist/ionic/svg/information-circle-sharp.svg +1 -0
  334. package/dist/ionic/svg/information-circle.svg +1 -0
  335. package/dist/ionic/svg/information-outline.svg +1 -0
  336. package/dist/ionic/svg/information-sharp.svg +1 -0
  337. package/dist/ionic/svg/information.svg +1 -0
  338. package/dist/ionic/svg/invert-mode-outline.svg +1 -0
  339. package/dist/ionic/svg/invert-mode-sharp.svg +1 -0
  340. package/dist/ionic/svg/invert-mode.svg +1 -0
  341. package/dist/ionic/svg/journal-outline.svg +1 -0
  342. package/dist/ionic/svg/journal-sharp.svg +1 -0
  343. package/dist/ionic/svg/journal.svg +1 -0
  344. package/dist/ionic/svg/key-outline.svg +1 -0
  345. package/dist/ionic/svg/key-sharp.svg +1 -0
  346. package/dist/ionic/svg/key.svg +1 -0
  347. package/dist/ionic/svg/keypad-outline.svg +1 -0
  348. package/dist/ionic/svg/keypad-sharp.svg +1 -0
  349. package/dist/ionic/svg/keypad.svg +1 -0
  350. package/dist/ionic/svg/language-outline.svg +1 -0
  351. package/dist/ionic/svg/language-sharp.svg +1 -0
  352. package/dist/ionic/svg/language.svg +1 -0
  353. package/dist/ionic/svg/laptop-outline.svg +1 -0
  354. package/dist/ionic/svg/laptop-sharp.svg +1 -0
  355. package/dist/ionic/svg/laptop.svg +1 -0
  356. package/dist/ionic/svg/layers-outline.svg +1 -0
  357. package/dist/ionic/svg/layers-sharp.svg +1 -0
  358. package/dist/ionic/svg/layers.svg +1 -0
  359. package/dist/ionic/svg/leaf-outline.svg +1 -0
  360. package/dist/ionic/svg/leaf-sharp.svg +1 -0
  361. package/dist/ionic/svg/leaf.svg +1 -0
  362. package/dist/ionic/svg/library-outline.svg +1 -0
  363. package/dist/ionic/svg/library-sharp.svg +1 -0
  364. package/dist/ionic/svg/library.svg +1 -0
  365. package/dist/ionic/svg/link-outline.svg +1 -0
  366. package/dist/ionic/svg/link-sharp.svg +1 -0
  367. package/dist/ionic/svg/link.svg +1 -0
  368. package/dist/ionic/svg/list-circle-outline.svg +1 -0
  369. package/dist/ionic/svg/list-circle-sharp.svg +1 -0
  370. package/dist/ionic/svg/list-circle.svg +1 -0
  371. package/dist/ionic/svg/list-outline.svg +1 -0
  372. package/dist/ionic/svg/list-sharp.svg +1 -0
  373. package/dist/ionic/svg/list.svg +1 -0
  374. package/dist/ionic/svg/locate-outline.svg +1 -0
  375. package/dist/ionic/svg/locate-sharp.svg +1 -0
  376. package/dist/ionic/svg/locate.svg +1 -0
  377. package/dist/ionic/svg/location-outline.svg +1 -0
  378. package/dist/ionic/svg/location-sharp.svg +1 -0
  379. package/dist/ionic/svg/location.svg +1 -0
  380. package/dist/ionic/svg/lock-closed-outline.svg +1 -0
  381. package/dist/ionic/svg/lock-closed-sharp.svg +1 -0
  382. package/dist/ionic/svg/lock-closed.svg +1 -0
  383. package/dist/ionic/svg/lock-open-outline.svg +1 -0
  384. package/dist/ionic/svg/lock-open-sharp.svg +1 -0
  385. package/dist/ionic/svg/lock-open.svg +1 -0
  386. package/dist/ionic/svg/log-in-outline.svg +1 -0
  387. package/dist/ionic/svg/log-in-sharp.svg +1 -0
  388. package/dist/ionic/svg/log-in.svg +1 -0
  389. package/dist/ionic/svg/log-out-outline.svg +1 -0
  390. package/dist/ionic/svg/log-out-sharp.svg +1 -0
  391. package/dist/ionic/svg/log-out.svg +1 -0
  392. package/dist/ionic/svg/logo-alipay.svg +1 -0
  393. package/dist/ionic/svg/logo-amazon.svg +1 -0
  394. package/dist/ionic/svg/logo-amplify.svg +1 -0
  395. package/dist/ionic/svg/logo-android.svg +1 -0
  396. package/dist/ionic/svg/logo-angular.svg +1 -0
  397. package/dist/ionic/svg/logo-appflow.svg +1 -0
  398. package/dist/ionic/svg/logo-apple-appstore.svg +1 -0
  399. package/dist/ionic/svg/logo-apple-ar.svg +1 -0
  400. package/dist/ionic/svg/logo-apple.svg +1 -0
  401. package/dist/ionic/svg/logo-behance.svg +1 -0
  402. package/dist/ionic/svg/logo-bitbucket.svg +1 -0
  403. package/dist/ionic/svg/logo-bitcoin.svg +1 -0
  404. package/dist/ionic/svg/logo-buffer.svg +1 -0
  405. package/dist/ionic/svg/logo-capacitor.svg +1 -0
  406. package/dist/ionic/svg/logo-chrome.svg +1 -0
  407. package/dist/ionic/svg/logo-closed-captioning.svg +1 -0
  408. package/dist/ionic/svg/logo-codepen.svg +1 -0
  409. package/dist/ionic/svg/logo-css3.svg +1 -0
  410. package/dist/ionic/svg/logo-designernews.svg +1 -0
  411. package/dist/ionic/svg/logo-deviantart.svg +1 -0
  412. package/dist/ionic/svg/logo-discord.svg +1 -0
  413. package/dist/ionic/svg/logo-docker.svg +1 -0
  414. package/dist/ionic/svg/logo-dribbble.svg +1 -0
  415. package/dist/ionic/svg/logo-dropbox.svg +1 -0
  416. package/dist/ionic/svg/logo-edge.svg +1 -0
  417. package/dist/ionic/svg/logo-electron.svg +1 -0
  418. package/dist/ionic/svg/logo-euro.svg +1 -0
  419. package/dist/ionic/svg/logo-facebook.svg +1 -0
  420. package/dist/ionic/svg/logo-figma.svg +1 -0
  421. package/dist/ionic/svg/logo-firebase.svg +1 -0
  422. package/dist/ionic/svg/logo-firefox.svg +1 -0
  423. package/dist/ionic/svg/logo-flickr.svg +1 -0
  424. package/dist/ionic/svg/logo-foursquare.svg +1 -0
  425. package/dist/ionic/svg/logo-github.svg +1 -0
  426. package/dist/ionic/svg/logo-gitlab.svg +1 -0
  427. package/dist/ionic/svg/logo-google-playstore.svg +1 -0
  428. package/dist/ionic/svg/logo-google.svg +1 -0
  429. package/dist/ionic/svg/logo-hackernews.svg +1 -0
  430. package/dist/ionic/svg/logo-html5.svg +1 -0
  431. package/dist/ionic/svg/logo-instagram.svg +1 -0
  432. package/dist/ionic/svg/logo-ionic.svg +1 -0
  433. package/dist/ionic/svg/logo-ionitron.svg +1 -0
  434. package/dist/ionic/svg/logo-javascript.svg +1 -0
  435. package/dist/ionic/svg/logo-laravel.svg +1 -0
  436. package/dist/ionic/svg/logo-linkedin.svg +1 -0
  437. package/dist/ionic/svg/logo-markdown.svg +1 -0
  438. package/dist/ionic/svg/logo-mastodon.svg +1 -0
  439. package/dist/ionic/svg/logo-medium.svg +1 -0
  440. package/dist/ionic/svg/logo-microsoft.svg +1 -0
  441. package/dist/ionic/svg/logo-no-smoking.svg +1 -0
  442. package/dist/ionic/svg/logo-nodejs.svg +1 -0
  443. package/dist/ionic/svg/logo-npm.svg +1 -0
  444. package/dist/ionic/svg/logo-octocat.svg +1 -0
  445. package/dist/ionic/svg/logo-paypal.svg +1 -0
  446. package/dist/ionic/svg/logo-pinterest.svg +1 -0
  447. package/dist/ionic/svg/logo-playstation.svg +1 -0
  448. package/dist/ionic/svg/logo-pwa.svg +1 -0
  449. package/dist/ionic/svg/logo-python.svg +1 -0
  450. package/dist/ionic/svg/logo-react.svg +1 -0
  451. package/dist/ionic/svg/logo-reddit.svg +1 -0
  452. package/dist/ionic/svg/logo-rss.svg +1 -0
  453. package/dist/ionic/svg/logo-sass.svg +1 -0
  454. package/dist/ionic/svg/logo-skype.svg +1 -0
  455. package/dist/ionic/svg/logo-slack.svg +1 -0
  456. package/dist/ionic/svg/logo-snapchat.svg +1 -0
  457. package/dist/ionic/svg/logo-soundcloud.svg +1 -0
  458. package/dist/ionic/svg/logo-stackoverflow.svg +1 -0
  459. package/dist/ionic/svg/logo-steam.svg +1 -0
  460. package/dist/ionic/svg/logo-stencil.svg +1 -0
  461. package/dist/ionic/svg/logo-tableau.svg +1 -0
  462. package/dist/ionic/svg/logo-threads.svg +1 -0
  463. package/dist/ionic/svg/logo-tiktok.svg +1 -0
  464. package/dist/ionic/svg/logo-trapeze.svg +1 -0
  465. package/dist/ionic/svg/logo-tumblr.svg +1 -0
  466. package/dist/ionic/svg/logo-tux.svg +1 -0
  467. package/dist/ionic/svg/logo-twitch.svg +1 -0
  468. package/dist/ionic/svg/logo-twitter.svg +1 -0
  469. package/dist/ionic/svg/logo-usd.svg +1 -0
  470. package/dist/ionic/svg/logo-venmo.svg +1 -0
  471. package/dist/ionic/svg/logo-vercel.svg +1 -0
  472. package/dist/ionic/svg/logo-vimeo.svg +1 -0
  473. package/dist/ionic/svg/logo-vk.svg +1 -0
  474. package/dist/ionic/svg/logo-vue.svg +1 -0
  475. package/dist/ionic/svg/logo-web-component.svg +1 -0
  476. package/dist/ionic/svg/logo-wechat.svg +1 -0
  477. package/dist/ionic/svg/logo-whatsapp.svg +1 -0
  478. package/dist/ionic/svg/logo-windows.svg +1 -0
  479. package/dist/ionic/svg/logo-wordpress.svg +1 -0
  480. package/dist/ionic/svg/logo-x.svg +1 -0
  481. package/dist/ionic/svg/logo-xbox.svg +1 -0
  482. package/dist/ionic/svg/logo-xing.svg +1 -0
  483. package/dist/ionic/svg/logo-yahoo.svg +1 -0
  484. package/dist/ionic/svg/logo-yen.svg +1 -0
  485. package/dist/ionic/svg/logo-youtube.svg +1 -0
  486. package/dist/ionic/svg/magnet-outline.svg +1 -0
  487. package/dist/ionic/svg/magnet-sharp.svg +1 -0
  488. package/dist/ionic/svg/magnet.svg +1 -0
  489. package/dist/ionic/svg/mail-open-outline.svg +1 -0
  490. package/dist/ionic/svg/mail-open-sharp.svg +1 -0
  491. package/dist/ionic/svg/mail-open.svg +1 -0
  492. package/dist/ionic/svg/mail-outline.svg +1 -0
  493. package/dist/ionic/svg/mail-sharp.svg +1 -0
  494. package/dist/ionic/svg/mail-unread-outline.svg +1 -0
  495. package/dist/ionic/svg/mail-unread-sharp.svg +1 -0
  496. package/dist/ionic/svg/mail-unread.svg +1 -0
  497. package/dist/ionic/svg/mail.svg +1 -0
  498. package/dist/ionic/svg/male-female-outline.svg +1 -0
  499. package/dist/ionic/svg/male-female-sharp.svg +1 -0
  500. package/dist/ionic/svg/male-female.svg +1 -0
  501. package/dist/ionic/svg/male-outline.svg +1 -0
  502. package/dist/ionic/svg/male-sharp.svg +1 -0
  503. package/dist/ionic/svg/male.svg +1 -0
  504. package/dist/ionic/svg/man-outline.svg +1 -0
  505. package/dist/ionic/svg/man-sharp.svg +1 -0
  506. package/dist/ionic/svg/man.svg +1 -0
  507. package/dist/ionic/svg/map-outline.svg +1 -0
  508. package/dist/ionic/svg/map-sharp.svg +1 -0
  509. package/dist/ionic/svg/map.svg +1 -0
  510. package/dist/ionic/svg/medal-outline.svg +1 -0
  511. package/dist/ionic/svg/medal-sharp.svg +1 -0
  512. package/dist/ionic/svg/medal.svg +1 -0
  513. package/dist/ionic/svg/medical-outline.svg +1 -0
  514. package/dist/ionic/svg/medical-sharp.svg +1 -0
  515. package/dist/ionic/svg/medical.svg +1 -0
  516. package/dist/ionic/svg/medkit-outline.svg +1 -0
  517. package/dist/ionic/svg/medkit-sharp.svg +1 -0
  518. package/dist/ionic/svg/medkit.svg +1 -0
  519. package/dist/ionic/svg/megaphone-outline.svg +1 -0
  520. package/dist/ionic/svg/megaphone-sharp.svg +1 -0
  521. package/dist/ionic/svg/megaphone.svg +1 -0
  522. package/dist/ionic/svg/menu-outline.svg +1 -0
  523. package/dist/ionic/svg/menu-sharp.svg +1 -0
  524. package/dist/ionic/svg/menu.svg +1 -0
  525. package/dist/ionic/svg/mic-circle-outline.svg +1 -0
  526. package/dist/ionic/svg/mic-circle-sharp.svg +1 -0
  527. package/dist/ionic/svg/mic-circle.svg +1 -0
  528. package/dist/ionic/svg/mic-off-circle-outline.svg +1 -0
  529. package/dist/ionic/svg/mic-off-circle-sharp.svg +1 -0
  530. package/dist/ionic/svg/mic-off-circle.svg +1 -0
  531. package/dist/ionic/svg/mic-off-outline.svg +1 -0
  532. package/dist/ionic/svg/mic-off-sharp.svg +1 -0
  533. package/dist/ionic/svg/mic-off.svg +1 -0
  534. package/dist/ionic/svg/mic-outline.svg +1 -0
  535. package/dist/ionic/svg/mic-sharp.svg +1 -0
  536. package/dist/ionic/svg/mic.svg +1 -0
  537. package/dist/ionic/svg/moon-outline.svg +1 -0
  538. package/dist/ionic/svg/moon-sharp.svg +1 -0
  539. package/dist/ionic/svg/moon.svg +1 -0
  540. package/dist/ionic/svg/move-outline.svg +1 -0
  541. package/dist/ionic/svg/move-sharp.svg +1 -0
  542. package/dist/ionic/svg/move.svg +1 -0
  543. package/dist/ionic/svg/musical-note-outline.svg +1 -0
  544. package/dist/ionic/svg/musical-note-sharp.svg +1 -0
  545. package/dist/ionic/svg/musical-note.svg +1 -0
  546. package/dist/ionic/svg/musical-notes-outline.svg +1 -0
  547. package/dist/ionic/svg/musical-notes-sharp.svg +1 -0
  548. package/dist/ionic/svg/musical-notes.svg +1 -0
  549. package/dist/ionic/svg/navigate-circle-outline.svg +1 -0
  550. package/dist/ionic/svg/navigate-circle-sharp.svg +1 -0
  551. package/dist/ionic/svg/navigate-circle.svg +1 -0
  552. package/dist/ionic/svg/navigate-outline.svg +1 -0
  553. package/dist/ionic/svg/navigate-sharp.svg +1 -0
  554. package/dist/ionic/svg/navigate.svg +1 -0
  555. package/dist/ionic/svg/newspaper-outline.svg +1 -0
  556. package/dist/ionic/svg/newspaper-sharp.svg +1 -0
  557. package/dist/ionic/svg/newspaper.svg +1 -0
  558. package/dist/ionic/svg/notifications-circle-outline.svg +1 -0
  559. package/dist/ionic/svg/notifications-circle-sharp.svg +1 -0
  560. package/dist/ionic/svg/notifications-circle.svg +1 -0
  561. package/dist/ionic/svg/notifications-off-circle-outline.svg +1 -0
  562. package/dist/ionic/svg/notifications-off-circle-sharp.svg +1 -0
  563. package/dist/ionic/svg/notifications-off-circle.svg +1 -0
  564. package/dist/ionic/svg/notifications-off-outline.svg +1 -0
  565. package/dist/ionic/svg/notifications-off-sharp.svg +1 -0
  566. package/dist/ionic/svg/notifications-off.svg +1 -0
  567. package/dist/ionic/svg/notifications-outline.svg +1 -0
  568. package/dist/ionic/svg/notifications-sharp.svg +1 -0
  569. package/dist/ionic/svg/notifications.svg +1 -0
  570. package/dist/ionic/svg/nuclear-outline.svg +1 -0
  571. package/dist/ionic/svg/nuclear-sharp.svg +1 -0
  572. package/dist/ionic/svg/nuclear.svg +1 -0
  573. package/dist/ionic/svg/nutrition-outline.svg +1 -0
  574. package/dist/ionic/svg/nutrition-sharp.svg +1 -0
  575. package/dist/ionic/svg/nutrition.svg +1 -0
  576. package/dist/ionic/svg/open-outline.svg +1 -0
  577. package/dist/ionic/svg/open-sharp.svg +1 -0
  578. package/dist/ionic/svg/open.svg +1 -0
  579. package/dist/ionic/svg/options-outline.svg +1 -0
  580. package/dist/ionic/svg/options-sharp.svg +1 -0
  581. package/dist/ionic/svg/options.svg +1 -0
  582. package/dist/ionic/svg/paper-plane-outline.svg +1 -0
  583. package/dist/ionic/svg/paper-plane-sharp.svg +1 -0
  584. package/dist/ionic/svg/paper-plane.svg +1 -0
  585. package/dist/ionic/svg/partly-sunny-outline.svg +1 -0
  586. package/dist/ionic/svg/partly-sunny-sharp.svg +1 -0
  587. package/dist/ionic/svg/partly-sunny.svg +1 -0
  588. package/dist/ionic/svg/pause-circle-outline.svg +1 -0
  589. package/dist/ionic/svg/pause-circle-sharp.svg +1 -0
  590. package/dist/ionic/svg/pause-circle.svg +1 -0
  591. package/dist/ionic/svg/pause-outline.svg +1 -0
  592. package/dist/ionic/svg/pause-sharp.svg +1 -0
  593. package/dist/ionic/svg/pause.svg +1 -0
  594. package/dist/ionic/svg/paw-outline.svg +1 -0
  595. package/dist/ionic/svg/paw-sharp.svg +1 -0
  596. package/dist/ionic/svg/paw.svg +1 -0
  597. package/dist/ionic/svg/pencil-outline.svg +1 -0
  598. package/dist/ionic/svg/pencil-sharp.svg +1 -0
  599. package/dist/ionic/svg/pencil.svg +1 -0
  600. package/dist/ionic/svg/people-circle-outline.svg +1 -0
  601. package/dist/ionic/svg/people-circle-sharp.svg +1 -0
  602. package/dist/ionic/svg/people-circle.svg +1 -0
  603. package/dist/ionic/svg/people-outline.svg +1 -0
  604. package/dist/ionic/svg/people-sharp.svg +1 -0
  605. package/dist/ionic/svg/people.svg +1 -0
  606. package/dist/ionic/svg/person-add-outline.svg +1 -0
  607. package/dist/ionic/svg/person-add-sharp.svg +1 -0
  608. package/dist/ionic/svg/person-add.svg +1 -0
  609. package/dist/ionic/svg/person-circle-outline.svg +1 -0
  610. package/dist/ionic/svg/person-circle-sharp.svg +1 -0
  611. package/dist/ionic/svg/person-circle.svg +1 -0
  612. package/dist/ionic/svg/person-outline.svg +1 -0
  613. package/dist/ionic/svg/person-remove-outline.svg +1 -0
  614. package/dist/ionic/svg/person-remove-sharp.svg +1 -0
  615. package/dist/ionic/svg/person-remove.svg +1 -0
  616. package/dist/ionic/svg/person-sharp.svg +1 -0
  617. package/dist/ionic/svg/person.svg +1 -0
  618. package/dist/ionic/svg/phone-landscape-outline.svg +1 -0
  619. package/dist/ionic/svg/phone-landscape-sharp.svg +1 -0
  620. package/dist/ionic/svg/phone-landscape.svg +1 -0
  621. package/dist/ionic/svg/phone-portrait-outline.svg +1 -0
  622. package/dist/ionic/svg/phone-portrait-sharp.svg +1 -0
  623. package/dist/ionic/svg/phone-portrait.svg +1 -0
  624. package/dist/ionic/svg/pie-chart-outline.svg +1 -0
  625. package/dist/ionic/svg/pie-chart-sharp.svg +1 -0
  626. package/dist/ionic/svg/pie-chart.svg +1 -0
  627. package/dist/ionic/svg/pin-outline.svg +1 -0
  628. package/dist/ionic/svg/pin-sharp.svg +1 -0
  629. package/dist/ionic/svg/pin.svg +1 -0
  630. package/dist/ionic/svg/pint-outline.svg +1 -0
  631. package/dist/ionic/svg/pint-sharp.svg +1 -0
  632. package/dist/ionic/svg/pint.svg +1 -0
  633. package/dist/ionic/svg/pizza-outline.svg +1 -0
  634. package/dist/ionic/svg/pizza-sharp.svg +1 -0
  635. package/dist/ionic/svg/pizza.svg +1 -0
  636. package/dist/ionic/svg/planet-outline.svg +1 -0
  637. package/dist/ionic/svg/planet-sharp.svg +1 -0
  638. package/dist/ionic/svg/planet.svg +1 -0
  639. package/dist/ionic/svg/play-back-circle-outline.svg +1 -0
  640. package/dist/ionic/svg/play-back-circle-sharp.svg +1 -0
  641. package/dist/ionic/svg/play-back-circle.svg +1 -0
  642. package/dist/ionic/svg/play-back-outline.svg +1 -0
  643. package/dist/ionic/svg/play-back-sharp.svg +1 -0
  644. package/dist/ionic/svg/play-back.svg +1 -0
  645. package/dist/ionic/svg/play-circle-outline.svg +1 -0
  646. package/dist/ionic/svg/play-circle-sharp.svg +1 -0
  647. package/dist/ionic/svg/play-circle.svg +1 -0
  648. package/dist/ionic/svg/play-forward-circle-outline.svg +1 -0
  649. package/dist/ionic/svg/play-forward-circle-sharp.svg +1 -0
  650. package/dist/ionic/svg/play-forward-circle.svg +1 -0
  651. package/dist/ionic/svg/play-forward-outline.svg +1 -0
  652. package/dist/ionic/svg/play-forward-sharp.svg +1 -0
  653. package/dist/ionic/svg/play-forward.svg +1 -0
  654. package/dist/ionic/svg/play-outline.svg +1 -0
  655. package/dist/ionic/svg/play-sharp.svg +1 -0
  656. package/dist/ionic/svg/play-skip-back-circle-outline.svg +1 -0
  657. package/dist/ionic/svg/play-skip-back-circle-sharp.svg +1 -0
  658. package/dist/ionic/svg/play-skip-back-circle.svg +1 -0
  659. package/dist/ionic/svg/play-skip-back-outline.svg +1 -0
  660. package/dist/ionic/svg/play-skip-back-sharp.svg +1 -0
  661. package/dist/ionic/svg/play-skip-back.svg +1 -0
  662. package/dist/ionic/svg/play-skip-forward-circle-outline.svg +1 -0
  663. package/dist/ionic/svg/play-skip-forward-circle-sharp.svg +1 -0
  664. package/dist/ionic/svg/play-skip-forward-circle.svg +1 -0
  665. package/dist/ionic/svg/play-skip-forward-outline.svg +1 -0
  666. package/dist/ionic/svg/play-skip-forward-sharp.svg +1 -0
  667. package/dist/ionic/svg/play-skip-forward.svg +1 -0
  668. package/dist/ionic/svg/play.svg +1 -0
  669. package/dist/ionic/svg/podium-outline.svg +1 -0
  670. package/dist/ionic/svg/podium-sharp.svg +1 -0
  671. package/dist/ionic/svg/podium.svg +1 -0
  672. package/dist/ionic/svg/power-outline.svg +1 -0
  673. package/dist/ionic/svg/power-sharp.svg +1 -0
  674. package/dist/ionic/svg/power.svg +1 -0
  675. package/dist/ionic/svg/pricetag-outline.svg +1 -0
  676. package/dist/ionic/svg/pricetag-sharp.svg +1 -0
  677. package/dist/ionic/svg/pricetag.svg +1 -0
  678. package/dist/ionic/svg/pricetags-outline.svg +1 -0
  679. package/dist/ionic/svg/pricetags-sharp.svg +1 -0
  680. package/dist/ionic/svg/pricetags.svg +1 -0
  681. package/dist/ionic/svg/print-outline.svg +1 -0
  682. package/dist/ionic/svg/print-sharp.svg +1 -0
  683. package/dist/ionic/svg/print.svg +1 -0
  684. package/dist/ionic/svg/prism-outline.svg +1 -0
  685. package/dist/ionic/svg/prism-sharp.svg +1 -0
  686. package/dist/ionic/svg/prism.svg +1 -0
  687. package/dist/ionic/svg/pulse-outline.svg +1 -0
  688. package/dist/ionic/svg/pulse-sharp.svg +1 -0
  689. package/dist/ionic/svg/pulse.svg +1 -0
  690. package/dist/ionic/svg/push-outline.svg +1 -0
  691. package/dist/ionic/svg/push-sharp.svg +1 -0
  692. package/dist/ionic/svg/push.svg +1 -0
  693. package/dist/ionic/svg/qr-code-outline.svg +1 -0
  694. package/dist/ionic/svg/qr-code-sharp.svg +1 -0
  695. package/dist/ionic/svg/qr-code.svg +1 -0
  696. package/dist/ionic/svg/radio-button-off-outline.svg +1 -0
  697. package/dist/ionic/svg/radio-button-off-sharp.svg +1 -0
  698. package/dist/ionic/svg/radio-button-off.svg +1 -0
  699. package/dist/ionic/svg/radio-button-on-outline.svg +1 -0
  700. package/dist/ionic/svg/radio-button-on-sharp.svg +1 -0
  701. package/dist/ionic/svg/radio-button-on.svg +1 -0
  702. package/dist/ionic/svg/radio-outline.svg +1 -0
  703. package/dist/ionic/svg/radio-sharp.svg +1 -0
  704. package/dist/ionic/svg/radio.svg +1 -0
  705. package/dist/ionic/svg/rainy-outline.svg +1 -0
  706. package/dist/ionic/svg/rainy-sharp.svg +1 -0
  707. package/dist/ionic/svg/rainy.svg +1 -0
  708. package/dist/ionic/svg/reader-outline.svg +1 -0
  709. package/dist/ionic/svg/reader-sharp.svg +1 -0
  710. package/dist/ionic/svg/reader.svg +1 -0
  711. package/dist/ionic/svg/receipt-outline.svg +1 -0
  712. package/dist/ionic/svg/receipt-sharp.svg +1 -0
  713. package/dist/ionic/svg/receipt.svg +1 -0
  714. package/dist/ionic/svg/recording-outline.svg +1 -0
  715. package/dist/ionic/svg/recording-sharp.svg +1 -0
  716. package/dist/ionic/svg/recording.svg +1 -0
  717. package/dist/ionic/svg/refresh-circle-outline.svg +1 -0
  718. package/dist/ionic/svg/refresh-circle-sharp.svg +1 -0
  719. package/dist/ionic/svg/refresh-circle.svg +1 -0
  720. package/dist/ionic/svg/refresh-outline.svg +1 -0
  721. package/dist/ionic/svg/refresh-sharp.svg +1 -0
  722. package/dist/ionic/svg/refresh.svg +1 -0
  723. package/dist/ionic/svg/reload-circle-outline.svg +1 -0
  724. package/dist/ionic/svg/reload-circle-sharp.svg +1 -0
  725. package/dist/ionic/svg/reload-circle.svg +1 -0
  726. package/dist/ionic/svg/reload-outline.svg +1 -0
  727. package/dist/ionic/svg/reload-sharp.svg +1 -0
  728. package/dist/ionic/svg/reload.svg +1 -0
  729. package/dist/ionic/svg/remove-circle-outline.svg +1 -0
  730. package/dist/ionic/svg/remove-circle-sharp.svg +1 -0
  731. package/dist/ionic/svg/remove-circle.svg +1 -0
  732. package/dist/ionic/svg/remove-outline.svg +1 -0
  733. package/dist/ionic/svg/remove-sharp.svg +1 -0
  734. package/dist/ionic/svg/remove.svg +1 -0
  735. package/dist/ionic/svg/reorder-four-outline.svg +1 -0
  736. package/dist/ionic/svg/reorder-four-sharp.svg +1 -0
  737. package/dist/ionic/svg/reorder-four.svg +1 -0
  738. package/dist/ionic/svg/reorder-three-outline.svg +1 -0
  739. package/dist/ionic/svg/reorder-three-sharp.svg +1 -0
  740. package/dist/ionic/svg/reorder-three.svg +1 -0
  741. package/dist/ionic/svg/reorder-two-outline.svg +1 -0
  742. package/dist/ionic/svg/reorder-two-sharp.svg +1 -0
  743. package/dist/ionic/svg/reorder-two.svg +1 -0
  744. package/dist/ionic/svg/repeat-outline.svg +1 -0
  745. package/dist/ionic/svg/repeat-sharp.svg +1 -0
  746. package/dist/ionic/svg/repeat.svg +1 -0
  747. package/dist/ionic/svg/resize-outline.svg +1 -0
  748. package/dist/ionic/svg/resize-sharp.svg +1 -0
  749. package/dist/ionic/svg/resize.svg +1 -0
  750. package/dist/ionic/svg/restaurant-outline.svg +1 -0
  751. package/dist/ionic/svg/restaurant-sharp.svg +1 -0
  752. package/dist/ionic/svg/restaurant.svg +1 -0
  753. package/dist/ionic/svg/return-down-back-outline.svg +1 -0
  754. package/dist/ionic/svg/return-down-back-sharp.svg +1 -0
  755. package/dist/ionic/svg/return-down-back.svg +1 -0
  756. package/dist/ionic/svg/return-down-forward-outline.svg +1 -0
  757. package/dist/ionic/svg/return-down-forward-sharp.svg +1 -0
  758. package/dist/ionic/svg/return-down-forward.svg +1 -0
  759. package/dist/ionic/svg/return-up-back-outline.svg +1 -0
  760. package/dist/ionic/svg/return-up-back-sharp.svg +1 -0
  761. package/dist/ionic/svg/return-up-back.svg +1 -0
  762. package/dist/ionic/svg/return-up-forward-outline.svg +1 -0
  763. package/dist/ionic/svg/return-up-forward-sharp.svg +1 -0
  764. package/dist/ionic/svg/return-up-forward.svg +1 -0
  765. package/dist/ionic/svg/ribbon-outline.svg +1 -0
  766. package/dist/ionic/svg/ribbon-sharp.svg +1 -0
  767. package/dist/ionic/svg/ribbon.svg +1 -0
  768. package/dist/ionic/svg/rocket-outline.svg +1 -0
  769. package/dist/ionic/svg/rocket-sharp.svg +1 -0
  770. package/dist/ionic/svg/rocket.svg +1 -0
  771. package/dist/ionic/svg/rose-outline.svg +1 -0
  772. package/dist/ionic/svg/rose-sharp.svg +1 -0
  773. package/dist/ionic/svg/rose.svg +1 -0
  774. package/dist/ionic/svg/sad-outline.svg +1 -0
  775. package/dist/ionic/svg/sad-sharp.svg +1 -0
  776. package/dist/ionic/svg/sad.svg +1 -0
  777. package/dist/ionic/svg/save-outline.svg +1 -0
  778. package/dist/ionic/svg/save-sharp.svg +1 -0
  779. package/dist/ionic/svg/save.svg +1 -0
  780. package/dist/ionic/svg/scale-outline.svg +1 -0
  781. package/dist/ionic/svg/scale-sharp.svg +1 -0
  782. package/dist/ionic/svg/scale.svg +1 -0
  783. package/dist/ionic/svg/scan-circle-outline.svg +1 -0
  784. package/dist/ionic/svg/scan-circle-sharp.svg +1 -0
  785. package/dist/ionic/svg/scan-circle.svg +1 -0
  786. package/dist/ionic/svg/scan-outline.svg +1 -0
  787. package/dist/ionic/svg/scan-sharp.svg +1 -0
  788. package/dist/ionic/svg/scan.svg +1 -0
  789. package/dist/ionic/svg/school-outline.svg +1 -0
  790. package/dist/ionic/svg/school-sharp.svg +1 -0
  791. package/dist/ionic/svg/school.svg +1 -0
  792. package/dist/ionic/svg/search-circle-outline.svg +1 -0
  793. package/dist/ionic/svg/search-circle-sharp.svg +1 -0
  794. package/dist/ionic/svg/search-circle.svg +1 -0
  795. package/dist/ionic/svg/search-outline.svg +1 -0
  796. package/dist/ionic/svg/search-sharp.svg +1 -0
  797. package/dist/ionic/svg/search.svg +1 -0
  798. package/dist/ionic/svg/send-outline.svg +1 -0
  799. package/dist/ionic/svg/send-sharp.svg +1 -0
  800. package/dist/ionic/svg/send.svg +1 -0
  801. package/dist/ionic/svg/server-outline.svg +1 -0
  802. package/dist/ionic/svg/server-sharp.svg +1 -0
  803. package/dist/ionic/svg/server.svg +1 -0
  804. package/dist/ionic/svg/settings-outline.svg +1 -0
  805. package/dist/ionic/svg/settings-sharp.svg +1 -0
  806. package/dist/ionic/svg/settings.svg +1 -0
  807. package/dist/ionic/svg/shapes-outline.svg +1 -0
  808. package/dist/ionic/svg/shapes-sharp.svg +1 -0
  809. package/dist/ionic/svg/shapes.svg +1 -0
  810. package/dist/ionic/svg/share-outline.svg +1 -0
  811. package/dist/ionic/svg/share-sharp.svg +1 -0
  812. package/dist/ionic/svg/share-social-outline.svg +1 -0
  813. package/dist/ionic/svg/share-social-sharp.svg +1 -0
  814. package/dist/ionic/svg/share-social.svg +1 -0
  815. package/dist/ionic/svg/share.svg +1 -0
  816. package/dist/ionic/svg/shield-checkmark-outline.svg +1 -0
  817. package/dist/ionic/svg/shield-checkmark-sharp.svg +1 -0
  818. package/dist/ionic/svg/shield-checkmark.svg +1 -0
  819. package/dist/ionic/svg/shield-half-outline.svg +1 -0
  820. package/dist/ionic/svg/shield-half-sharp.svg +1 -0
  821. package/dist/ionic/svg/shield-half.svg +1 -0
  822. package/dist/ionic/svg/shield-outline.svg +1 -0
  823. package/dist/ionic/svg/shield-sharp.svg +1 -0
  824. package/dist/ionic/svg/shield.svg +1 -0
  825. package/dist/ionic/svg/shirt-outline.svg +1 -0
  826. package/dist/ionic/svg/shirt-sharp.svg +1 -0
  827. package/dist/ionic/svg/shirt.svg +1 -0
  828. package/dist/ionic/svg/shuffle-outline.svg +1 -0
  829. package/dist/ionic/svg/shuffle-sharp.svg +1 -0
  830. package/dist/ionic/svg/shuffle.svg +1 -0
  831. package/dist/ionic/svg/skull-outline.svg +1 -0
  832. package/dist/ionic/svg/skull-sharp.svg +1 -0
  833. package/dist/ionic/svg/skull.svg +1 -0
  834. package/dist/ionic/svg/snow-outline.svg +1 -0
  835. package/dist/ionic/svg/snow-sharp.svg +1 -0
  836. package/dist/ionic/svg/snow.svg +1 -0
  837. package/dist/ionic/svg/sparkles-outline.svg +1 -0
  838. package/dist/ionic/svg/sparkles-sharp.svg +1 -0
  839. package/dist/ionic/svg/sparkles.svg +1 -0
  840. package/dist/ionic/svg/speedometer-outline.svg +1 -0
  841. package/dist/ionic/svg/speedometer-sharp.svg +1 -0
  842. package/dist/ionic/svg/speedometer.svg +1 -0
  843. package/dist/ionic/svg/square-outline.svg +1 -0
  844. package/dist/ionic/svg/square-sharp.svg +1 -0
  845. package/dist/ionic/svg/square.svg +1 -0
  846. package/dist/ionic/svg/star-half-outline.svg +1 -0
  847. package/dist/ionic/svg/star-half-sharp.svg +1 -0
  848. package/dist/ionic/svg/star-half.svg +1 -0
  849. package/dist/ionic/svg/star-outline.svg +1 -0
  850. package/dist/ionic/svg/star-sharp.svg +1 -0
  851. package/dist/ionic/svg/star.svg +1 -0
  852. package/dist/ionic/svg/stats-chart-outline.svg +1 -0
  853. package/dist/ionic/svg/stats-chart-sharp.svg +1 -0
  854. package/dist/ionic/svg/stats-chart.svg +1 -0
  855. package/dist/ionic/svg/stop-circle-outline.svg +1 -0
  856. package/dist/ionic/svg/stop-circle-sharp.svg +1 -0
  857. package/dist/ionic/svg/stop-circle.svg +1 -0
  858. package/dist/ionic/svg/stop-outline.svg +1 -0
  859. package/dist/ionic/svg/stop-sharp.svg +1 -0
  860. package/dist/ionic/svg/stop.svg +1 -0
  861. package/dist/ionic/svg/stopwatch-outline.svg +1 -0
  862. package/dist/ionic/svg/stopwatch-sharp.svg +1 -0
  863. package/dist/ionic/svg/stopwatch.svg +1 -0
  864. package/dist/ionic/svg/storefront-outline.svg +1 -0
  865. package/dist/ionic/svg/storefront-sharp.svg +1 -0
  866. package/dist/ionic/svg/storefront.svg +1 -0
  867. package/dist/ionic/svg/subway-outline.svg +1 -0
  868. package/dist/ionic/svg/subway-sharp.svg +1 -0
  869. package/dist/ionic/svg/subway.svg +1 -0
  870. package/dist/ionic/svg/sunny-outline.svg +1 -0
  871. package/dist/ionic/svg/sunny-sharp.svg +1 -0
  872. package/dist/ionic/svg/sunny.svg +1 -0
  873. package/dist/ionic/svg/swap-horizontal-outline.svg +1 -0
  874. package/dist/ionic/svg/swap-horizontal-sharp.svg +1 -0
  875. package/dist/ionic/svg/swap-horizontal.svg +1 -0
  876. package/dist/ionic/svg/swap-vertical-outline.svg +1 -0
  877. package/dist/ionic/svg/swap-vertical-sharp.svg +1 -0
  878. package/dist/ionic/svg/swap-vertical.svg +1 -0
  879. package/dist/ionic/svg/sync-circle-outline.svg +1 -0
  880. package/dist/ionic/svg/sync-circle-sharp.svg +1 -0
  881. package/dist/ionic/svg/sync-circle.svg +1 -0
  882. package/dist/ionic/svg/sync-outline.svg +1 -0
  883. package/dist/ionic/svg/sync-sharp.svg +1 -0
  884. package/dist/ionic/svg/sync.svg +1 -0
  885. package/dist/ionic/svg/tablet-landscape-outline.svg +1 -0
  886. package/dist/ionic/svg/tablet-landscape-sharp.svg +1 -0
  887. package/dist/ionic/svg/tablet-landscape.svg +1 -0
  888. package/dist/ionic/svg/tablet-portrait-outline.svg +1 -0
  889. package/dist/ionic/svg/tablet-portrait-sharp.svg +1 -0
  890. package/dist/ionic/svg/tablet-portrait.svg +1 -0
  891. package/dist/ionic/svg/telescope-outline.svg +1 -0
  892. package/dist/ionic/svg/telescope-sharp.svg +1 -0
  893. package/dist/ionic/svg/telescope.svg +1 -0
  894. package/dist/ionic/svg/tennisball-outline.svg +1 -0
  895. package/dist/ionic/svg/tennisball-sharp.svg +1 -0
  896. package/dist/ionic/svg/tennisball.svg +1 -0
  897. package/dist/ionic/svg/terminal-outline.svg +1 -0
  898. package/dist/ionic/svg/terminal-sharp.svg +1 -0
  899. package/dist/ionic/svg/terminal.svg +1 -0
  900. package/dist/ionic/svg/text-outline.svg +1 -0
  901. package/dist/ionic/svg/text-sharp.svg +1 -0
  902. package/dist/ionic/svg/text.svg +1 -0
  903. package/dist/ionic/svg/thermometer-outline.svg +1 -0
  904. package/dist/ionic/svg/thermometer-sharp.svg +1 -0
  905. package/dist/ionic/svg/thermometer.svg +1 -0
  906. package/dist/ionic/svg/thumbs-down-outline.svg +1 -0
  907. package/dist/ionic/svg/thumbs-down-sharp.svg +1 -0
  908. package/dist/ionic/svg/thumbs-down.svg +1 -0
  909. package/dist/ionic/svg/thumbs-up-outline.svg +1 -0
  910. package/dist/ionic/svg/thumbs-up-sharp.svg +1 -0
  911. package/dist/ionic/svg/thumbs-up.svg +1 -0
  912. package/dist/ionic/svg/thunderstorm-outline.svg +1 -0
  913. package/dist/ionic/svg/thunderstorm-sharp.svg +1 -0
  914. package/dist/ionic/svg/thunderstorm.svg +1 -0
  915. package/dist/ionic/svg/ticket-outline.svg +1 -0
  916. package/dist/ionic/svg/ticket-sharp.svg +1 -0
  917. package/dist/ionic/svg/ticket.svg +1 -0
  918. package/dist/ionic/svg/time-outline.svg +1 -0
  919. package/dist/ionic/svg/time-sharp.svg +1 -0
  920. package/dist/ionic/svg/time.svg +1 -0
  921. package/dist/ionic/svg/timer-outline.svg +1 -0
  922. package/dist/ionic/svg/timer-sharp.svg +1 -0
  923. package/dist/ionic/svg/timer.svg +1 -0
  924. package/dist/ionic/svg/today-outline.svg +1 -0
  925. package/dist/ionic/svg/today-sharp.svg +1 -0
  926. package/dist/ionic/svg/today.svg +1 -0
  927. package/dist/ionic/svg/toggle-outline.svg +1 -0
  928. package/dist/ionic/svg/toggle-sharp.svg +1 -0
  929. package/dist/ionic/svg/toggle.svg +1 -0
  930. package/dist/ionic/svg/trail-sign-outline.svg +1 -0
  931. package/dist/ionic/svg/trail-sign-sharp.svg +1 -0
  932. package/dist/ionic/svg/trail-sign.svg +1 -0
  933. package/dist/ionic/svg/train-outline.svg +1 -0
  934. package/dist/ionic/svg/train-sharp.svg +1 -0
  935. package/dist/ionic/svg/train.svg +1 -0
  936. package/dist/ionic/svg/transgender-outline.svg +1 -0
  937. package/dist/ionic/svg/transgender-sharp.svg +1 -0
  938. package/dist/ionic/svg/transgender.svg +1 -0
  939. package/dist/ionic/svg/trash-bin-outline.svg +1 -0
  940. package/dist/ionic/svg/trash-bin-sharp.svg +1 -0
  941. package/dist/ionic/svg/trash-bin.svg +1 -0
  942. package/dist/ionic/svg/trash-outline.svg +1 -0
  943. package/dist/ionic/svg/trash-sharp.svg +1 -0
  944. package/dist/ionic/svg/trash.svg +1 -0
  945. package/dist/ionic/svg/trending-down-outline.svg +1 -0
  946. package/dist/ionic/svg/trending-down-sharp.svg +1 -0
  947. package/dist/ionic/svg/trending-down.svg +1 -0
  948. package/dist/ionic/svg/trending-up-outline.svg +1 -0
  949. package/dist/ionic/svg/trending-up-sharp.svg +1 -0
  950. package/dist/ionic/svg/trending-up.svg +1 -0
  951. package/dist/ionic/svg/triangle-outline.svg +1 -0
  952. package/dist/ionic/svg/triangle-sharp.svg +1 -0
  953. package/dist/ionic/svg/triangle.svg +1 -0
  954. package/dist/ionic/svg/trophy-outline.svg +1 -0
  955. package/dist/ionic/svg/trophy-sharp.svg +1 -0
  956. package/dist/ionic/svg/trophy.svg +1 -0
  957. package/dist/ionic/svg/tv-outline.svg +1 -0
  958. package/dist/ionic/svg/tv-sharp.svg +1 -0
  959. package/dist/ionic/svg/tv.svg +1 -0
  960. package/dist/ionic/svg/umbrella-outline.svg +1 -0
  961. package/dist/ionic/svg/umbrella-sharp.svg +1 -0
  962. package/dist/ionic/svg/umbrella.svg +1 -0
  963. package/dist/ionic/svg/unlink-outline.svg +1 -0
  964. package/dist/ionic/svg/unlink-sharp.svg +1 -0
  965. package/dist/ionic/svg/unlink.svg +1 -0
  966. package/dist/ionic/svg/videocam-off-outline.svg +1 -0
  967. package/dist/ionic/svg/videocam-off-sharp.svg +1 -0
  968. package/dist/ionic/svg/videocam-off.svg +1 -0
  969. package/dist/ionic/svg/videocam-outline.svg +1 -0
  970. package/dist/ionic/svg/videocam-sharp.svg +1 -0
  971. package/dist/ionic/svg/videocam.svg +1 -0
  972. package/dist/ionic/svg/volume-high-outline.svg +1 -0
  973. package/dist/ionic/svg/volume-high-sharp.svg +1 -0
  974. package/dist/ionic/svg/volume-high.svg +1 -0
  975. package/dist/ionic/svg/volume-low-outline.svg +1 -0
  976. package/dist/ionic/svg/volume-low-sharp.svg +1 -0
  977. package/dist/ionic/svg/volume-low.svg +1 -0
  978. package/dist/ionic/svg/volume-medium-outline.svg +1 -0
  979. package/dist/ionic/svg/volume-medium-sharp.svg +1 -0
  980. package/dist/ionic/svg/volume-medium.svg +1 -0
  981. package/dist/ionic/svg/volume-mute-outline.svg +1 -0
  982. package/dist/ionic/svg/volume-mute-sharp.svg +1 -0
  983. package/dist/ionic/svg/volume-mute.svg +1 -0
  984. package/dist/ionic/svg/volume-off-outline.svg +1 -0
  985. package/dist/ionic/svg/volume-off-sharp.svg +1 -0
  986. package/dist/ionic/svg/volume-off.svg +1 -0
  987. package/dist/ionic/svg/walk-outline.svg +1 -0
  988. package/dist/ionic/svg/walk-sharp.svg +1 -0
  989. package/dist/ionic/svg/walk.svg +1 -0
  990. package/dist/ionic/svg/wallet-outline.svg +1 -0
  991. package/dist/ionic/svg/wallet-sharp.svg +1 -0
  992. package/dist/ionic/svg/wallet.svg +1 -0
  993. package/dist/ionic/svg/warning-outline.svg +1 -0
  994. package/dist/ionic/svg/warning-sharp.svg +1 -0
  995. package/dist/ionic/svg/warning.svg +1 -0
  996. package/dist/ionic/svg/watch-outline.svg +1 -0
  997. package/dist/ionic/svg/watch-sharp.svg +1 -0
  998. package/dist/ionic/svg/watch.svg +1 -0
  999. package/dist/ionic/svg/water-outline.svg +1 -0
  1000. package/dist/ionic/svg/water-sharp.svg +1 -0
  1001. package/dist/ionic/svg/water.svg +1 -0
  1002. package/dist/ionic/svg/wifi-outline.svg +1 -0
  1003. package/dist/ionic/svg/wifi-sharp.svg +1 -0
  1004. package/dist/ionic/svg/wifi.svg +1 -0
  1005. package/dist/ionic/svg/wine-outline.svg +1 -0
  1006. package/dist/ionic/svg/wine-sharp.svg +1 -0
  1007. package/dist/ionic/svg/wine.svg +1 -0
  1008. package/dist/ionic/svg/woman-outline.svg +1 -0
  1009. package/dist/ionic/svg/woman-sharp.svg +1 -0
  1010. package/dist/ionic/svg/woman.svg +1 -0
  1011. package/dist/types/components/accordion/accordion.d.ts +1 -1
  1012. package/dist/types/components/action-sheet/action-sheet.d.ts +37 -0
  1013. package/dist/types/components/checkbox/checkbox.d.ts +9 -1
  1014. package/dist/types/components/content/content.d.ts +7 -0
  1015. package/dist/types/components/datetime/datetime.d.ts +10 -0
  1016. package/dist/types/components/fab-button/fab-button.d.ts +1 -1
  1017. package/dist/types/components/item/item.d.ts +1 -1
  1018. package/dist/types/components/modal/modal.d.ts +14 -0
  1019. package/dist/types/components/popover/popover.d.ts +7 -0
  1020. package/dist/types/components/radio-group/radio-group.d.ts +9 -1
  1021. package/dist/types/components/select/select.d.ts +2 -2
  1022. package/dist/types/components/toggle/toggle.d.ts +7 -1
  1023. package/dist/types/components.d.ts +10 -6
  1024. package/dist/types/utils/forms/validity.d.ts +1 -1
  1025. package/hydrate/index.js +863 -451
  1026. package/hydrate/index.mjs +863 -451
  1027. package/package.json +10 -6
  1028. package/dist/ionic/p-4cc26913.entry.js +0 -4
  1029. package/dist/ionic/p-4efea47a.entry.js +0 -4
  1030. package/dist/ionic/p-510d86e1.entry.js +0 -4
  1031. package/dist/ionic/p-5fb517e4.entry.js +0 -4
  1032. package/dist/ionic/p-7bcfc421.entry.js +0 -4
  1033. package/dist/ionic/p-8bdfc8f6.entry.js +0 -4
  1034. package/dist/ionic/p-95bddd49.entry.js +0 -4
  1035. package/dist/ionic/p-D87hU-Ly.js +0 -4
  1036. package/dist/ionic/p-dc2e126d.entry.js +0 -4
  1037. package/dist/ionic/p-e16b69e1.entry.js +0 -4
  1038. package/dist/ionic/p-f65f9308.entry.js +0 -4
  1039. package/dist/ionic/p-fc278823.entry.js +0 -4
package/hydrate/index.mjs CHANGED
@@ -4449,7 +4449,7 @@ class Accordion {
4449
4449
  "value": [1],
4450
4450
  "disabled": [4],
4451
4451
  "readonly": [4],
4452
- "toggleIcon": [8, "toggle-icon"],
4452
+ "toggleIcon": [1, "toggle-icon"],
4453
4453
  "toggleIconSlot": [1, "toggle-icon-slot"],
4454
4454
  "state": [32],
4455
4455
  "isNext": [32],
@@ -5849,6 +5849,14 @@ const CoreDelegate = () => {
5849
5849
  let lastOverlayIndex = 0;
5850
5850
  let lastId = 0;
5851
5851
  const activeAnimations = new WeakMap();
5852
+ /**
5853
+ * Determines if the overlay's backdrop is always blocking (no background interaction).
5854
+ * Returns false if showBackdrop=false or backdropBreakpoint > 0.
5855
+ */
5856
+ const isBackdropAlwaysBlocking = (el) => {
5857
+ var _a;
5858
+ return el.showBackdrop !== false && !(((_a = el.backdropBreakpoint) !== null && _a !== void 0 ? _a : 0) > 0);
5859
+ };
5852
5860
  const createController = (tagName) => {
5853
5861
  return {
5854
5862
  create(options) {
@@ -6286,9 +6294,7 @@ const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts)
6286
6294
  */
6287
6295
  const overlayEl = overlay.el;
6288
6296
  const shouldTrapFocus = overlayEl.tagName !== 'ION-TOAST' && overlayEl.focusTrap !== false;
6289
- // Only lock out root content when backdrop is active. Developers relying on showBackdrop=false
6290
- // expect background interaction to remain enabled.
6291
- const shouldLockRoot = shouldTrapFocus && overlayEl.showBackdrop !== false;
6297
+ const shouldLockRoot = shouldTrapFocus && isBackdropAlwaysBlocking(overlayEl);
6292
6298
  overlay.presented = true;
6293
6299
  overlay.willPresent.emit();
6294
6300
  if (shouldLockRoot) {
@@ -6404,10 +6410,10 @@ const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLeaveAnim
6404
6410
  */
6405
6411
  const overlaysLockingRoot = presentedOverlays.filter((o) => {
6406
6412
  const el = o;
6407
- return el.tagName !== 'ION-TOAST' && el.focusTrap !== false && el.showBackdrop !== false;
6413
+ return el.tagName !== 'ION-TOAST' && el.focusTrap !== false && isBackdropAlwaysBlocking(el);
6408
6414
  });
6409
6415
  const overlayEl = overlay.el;
6410
- const locksRoot = overlayEl.tagName !== 'ION-TOAST' && overlayEl.focusTrap !== false && overlayEl.showBackdrop !== false;
6416
+ const locksRoot = overlayEl.tagName !== 'ION-TOAST' && overlayEl.focusTrap !== false && isBackdropAlwaysBlocking(overlayEl);
6411
6417
  /**
6412
6418
  * If this is the last visible overlay that is trapping focus
6413
6419
  * then we want to re-add the root to the accessibility tree.
@@ -7611,6 +7617,7 @@ class ActionSheet {
7611
7617
  this.delegateController = createDelegateController(this);
7612
7618
  this.lockController = createLockController();
7613
7619
  this.triggerController = createTriggerController();
7620
+ this.hasRadioButtons = false;
7614
7621
  this.presented = false;
7615
7622
  /** @internal */
7616
7623
  this.hasController = false;
@@ -7655,6 +7662,19 @@ class ActionSheet {
7655
7662
  }
7656
7663
  };
7657
7664
  }
7665
+ buttonsChanged() {
7666
+ const radioButtons = this.getRadioButtons();
7667
+ this.hasRadioButtons = radioButtons.length > 0;
7668
+ // Initialize activeRadioId when buttons change
7669
+ if (this.hasRadioButtons) {
7670
+ const checkedButton = radioButtons.find((b) => { var _a; return ((_a = b.htmlAttributes) === null || _a === void 0 ? void 0 : _a['aria-checked']) === 'true'; });
7671
+ if (checkedButton) {
7672
+ const allButtons = this.getButtons();
7673
+ const checkedIndex = allButtons.indexOf(checkedButton);
7674
+ this.activeRadioId = this.getButtonId(checkedButton, checkedIndex);
7675
+ }
7676
+ }
7677
+ }
7658
7678
  onIsOpenChange(newValue, oldValue) {
7659
7679
  if (newValue === true && oldValue === false) {
7660
7680
  this.present();
@@ -7735,11 +7755,122 @@ class ActionSheet {
7735
7755
  }
7736
7756
  return true;
7737
7757
  }
7758
+ /**
7759
+ * Get all buttons regardless of role.
7760
+ */
7738
7761
  getButtons() {
7739
7762
  return this.buttons.map((b) => {
7740
7763
  return typeof b === 'string' ? { text: b } : b;
7741
7764
  });
7742
7765
  }
7766
+ /**
7767
+ * Get all radio buttons (buttons with role="radio").
7768
+ */
7769
+ getRadioButtons() {
7770
+ return this.getButtons().filter((b) => {
7771
+ var _a;
7772
+ const role = (_a = b.htmlAttributes) === null || _a === void 0 ? void 0 : _a.role;
7773
+ return role === 'radio' && !isCancel(role);
7774
+ });
7775
+ }
7776
+ /**
7777
+ * Handle radio button selection and update aria-checked state.
7778
+ *
7779
+ * @param button The radio button that was selected.
7780
+ */
7781
+ selectRadioButton(button) {
7782
+ const buttonId = this.getButtonId(button);
7783
+ // Set the active radio ID (this will trigger a re-render and update aria-checked)
7784
+ this.activeRadioId = buttonId;
7785
+ }
7786
+ /**
7787
+ * Get or generate an ID for a button.
7788
+ *
7789
+ * @param button The button for which to get the ID.
7790
+ * @param index Optional index of the button in the buttons array.
7791
+ * @returns The ID of the button.
7792
+ */
7793
+ getButtonId(button, index) {
7794
+ if (button.id) {
7795
+ return button.id;
7796
+ }
7797
+ const allButtons = this.getButtons();
7798
+ const buttonIndex = index !== undefined ? index : allButtons.indexOf(button);
7799
+ return `action-sheet-button-${this.overlayIndex}-${buttonIndex}`;
7800
+ }
7801
+ /**
7802
+ * When the action sheet has radio buttons, we want to follow the
7803
+ * keyboard navigation pattern for radio groups:
7804
+ * - Arrow Down/Right: Move to the next radio button (wrap to first if at end)
7805
+ * - Arrow Up/Left: Move to the previous radio button (wrap to last if at start)
7806
+ * - Space/Enter: Select the focused radio button and trigger its handler
7807
+ */
7808
+ onKeydown(ev) {
7809
+ // Only handle keyboard navigation if we have radio buttons
7810
+ if (!this.hasRadioButtons || !this.presented) {
7811
+ return;
7812
+ }
7813
+ const target = ev.target;
7814
+ // Ignore if the target element is not within the action sheet or not a radio button
7815
+ if (!this.el.contains(target) ||
7816
+ !target.classList.contains('action-sheet-button') ||
7817
+ target.getAttribute('role') !== 'radio') {
7818
+ return;
7819
+ }
7820
+ // Get all radio button elements and filter out disabled ones
7821
+ const radios = Array.from(this.el.querySelectorAll('.action-sheet-button[role="radio"]')).filter((el) => !el.disabled);
7822
+ const currentIndex = radios.findIndex((radio) => radio.id === target.id);
7823
+ if (currentIndex === -1) {
7824
+ return;
7825
+ }
7826
+ const allButtons = this.getButtons();
7827
+ const radioButtons = this.getRadioButtons();
7828
+ /**
7829
+ * Build a map of button element IDs to their ActionSheetButton
7830
+ * config objects.
7831
+ * This allows us to quickly look up which button config corresponds
7832
+ * to a DOM element when handling keyboard navigation
7833
+ * (e.g., whenuser presses Space/Enter or arrow keys).
7834
+ * The key is the ID that was set on the DOM element during render,
7835
+ * and the value is the ActionSheetButton config that contains the
7836
+ * handler and other properties.
7837
+ */
7838
+ const buttonIdMap = new Map();
7839
+ radioButtons.forEach((b) => {
7840
+ const allIndex = allButtons.indexOf(b);
7841
+ const buttonId = this.getButtonId(b, allIndex);
7842
+ buttonIdMap.set(buttonId, b);
7843
+ });
7844
+ let nextEl;
7845
+ if (['ArrowDown', 'ArrowRight'].includes(ev.key)) {
7846
+ ev.preventDefault();
7847
+ ev.stopPropagation();
7848
+ nextEl = currentIndex === radios.length - 1 ? radios[0] : radios[currentIndex + 1];
7849
+ }
7850
+ else if (['ArrowUp', 'ArrowLeft'].includes(ev.key)) {
7851
+ ev.preventDefault();
7852
+ ev.stopPropagation();
7853
+ nextEl = currentIndex === 0 ? radios[radios.length - 1] : radios[currentIndex - 1];
7854
+ }
7855
+ else if (ev.key === ' ' || ev.key === 'Enter') {
7856
+ ev.preventDefault();
7857
+ ev.stopPropagation();
7858
+ const button = buttonIdMap.get(target.id);
7859
+ if (button) {
7860
+ this.selectRadioButton(button);
7861
+ this.buttonClick(button);
7862
+ }
7863
+ return;
7864
+ }
7865
+ // Focus the next radio button
7866
+ if (nextEl) {
7867
+ const button = buttonIdMap.get(nextEl.id);
7868
+ if (button) {
7869
+ this.selectRadioButton(button);
7870
+ nextEl.focus();
7871
+ }
7872
+ }
7873
+ }
7743
7874
  connectedCallback() {
7744
7875
  prepareOverlay(this.el);
7745
7876
  this.triggerChanged();
@@ -7756,6 +7887,8 @@ class ActionSheet {
7756
7887
  if (!((_a = this.htmlAttributes) === null || _a === void 0 ? void 0 : _a.id)) {
7757
7888
  setOverlayId(this.el);
7758
7889
  }
7890
+ // Initialize activeRadioId for radio buttons
7891
+ this.buttonsChanged();
7759
7892
  }
7760
7893
  componentDidLoad() {
7761
7894
  /**
@@ -7793,22 +7926,74 @@ class ActionSheet {
7793
7926
  */
7794
7927
  this.triggerChanged();
7795
7928
  }
7929
+ renderActionSheetButtons(filteredButtons) {
7930
+ const mode = getIonMode$1(this);
7931
+ const { activeRadioId } = this;
7932
+ return filteredButtons.map((b, index) => {
7933
+ var _a;
7934
+ const isRadio = ((_a = b.htmlAttributes) === null || _a === void 0 ? void 0 : _a.role) === 'radio';
7935
+ const buttonId = this.getButtonId(b, index);
7936
+ const radioButtons = this.getRadioButtons();
7937
+ const isActiveRadio = isRadio && buttonId === activeRadioId;
7938
+ const isFirstRadio = isRadio && b === radioButtons[0];
7939
+ // For radio buttons, set tabindex: 0 for the active one, -1 for others
7940
+ // For non-radio buttons, use default tabindex (undefined, which means 0)
7941
+ /**
7942
+ * For radio buttons, set tabindex based on activeRadioId
7943
+ * - If the button is the active radio, tabindex is 0
7944
+ * - If no radio is active, the first radio button should have tabindex 0
7945
+ * - All other radio buttons have tabindex -1
7946
+ * For non-radio buttons, use default tabindex (undefined, which means 0)
7947
+ */
7948
+ let tabIndex;
7949
+ if (isRadio) {
7950
+ // Focus on the active radio button
7951
+ if (isActiveRadio) {
7952
+ tabIndex = 0;
7953
+ }
7954
+ else if (!activeRadioId && isFirstRadio) {
7955
+ // No active radio, first radio gets focus
7956
+ tabIndex = 0;
7957
+ }
7958
+ else {
7959
+ // All other radios are not focusable
7960
+ tabIndex = -1;
7961
+ }
7962
+ }
7963
+ else {
7964
+ tabIndex = undefined;
7965
+ }
7966
+ // For radio buttons, set aria-checked based on activeRadioId
7967
+ // Otherwise, use the value from htmlAttributes if provided
7968
+ const htmlAttrs = Object.assign({}, b.htmlAttributes);
7969
+ if (isRadio) {
7970
+ htmlAttrs['aria-checked'] = isActiveRadio ? 'true' : 'false';
7971
+ }
7972
+ return (hAsync("button", Object.assign({}, htmlAttrs, { role: isRadio ? 'radio' : undefined, type: "button", id: buttonId, class: Object.assign(Object.assign({}, buttonClass$3(b)), { 'action-sheet-selected': isActiveRadio }), onClick: () => {
7973
+ if (isRadio) {
7974
+ this.selectRadioButton(b);
7975
+ }
7976
+ this.buttonClick(b);
7977
+ }, disabled: b.disabled, tabIndex: tabIndex }), hAsync("span", { class: "action-sheet-button-inner" }, b.icon && hAsync("ion-icon", { icon: b.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" }), b.text), mode === 'md' && hAsync("ion-ripple-effect", null)));
7978
+ });
7979
+ }
7796
7980
  render() {
7797
- const { header, htmlAttributes, overlayIndex } = this;
7981
+ const { header, htmlAttributes, overlayIndex, hasRadioButtons } = this;
7798
7982
  const mode = getIonMode$1(this);
7799
7983
  const allButtons = this.getButtons();
7800
7984
  const cancelButton = allButtons.find((b) => b.role === 'cancel');
7801
7985
  const buttons = allButtons.filter((b) => b.role !== 'cancel');
7802
7986
  const headerID = `action-sheet-${overlayIndex}-header`;
7803
- return (hAsync(Host, Object.assign({ key: '9fef156b2a1f09ca4a6c1fe1f37c374139bde03c', role: "dialog", "aria-modal": "true", "aria-labelledby": header !== undefined ? headerID : null, tabindex: "-1" }, htmlAttributes, { style: {
7987
+ return (hAsync(Host, Object.assign({ key: '173fcff5b1da7c33c267de4667591c946b8c8d03', role: "dialog", "aria-modal": "true", "aria-labelledby": header !== undefined ? headerID : null, tabindex: "-1" }, htmlAttributes, { style: {
7804
7988
  zIndex: `${20000 + this.overlayIndex}`,
7805
- }, class: Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'action-sheet-translucent': this.translucent }), onIonActionSheetWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }), hAsync("ion-backdrop", { key: '81cf3f7d19864e041813987b46d2d115b8466819', tappable: this.backdropDismiss }), hAsync("div", { key: '791c6a976683646fc306a42c15c5078b6f06a45f', tabindex: "0", "aria-hidden": "true" }), hAsync("div", { key: 'a350b489ef7852eab9dc2227ce6d92da27dd9bf9', class: "action-sheet-wrapper ion-overlay-wrapper", ref: (el) => (this.wrapperEl = el) }, hAsync("div", { key: '69ba51ee13510c1a411d87cb4845b11b7302a36f', class: "action-sheet-container" }, hAsync("div", { key: 'bded15b8306c36591e526f0f99e1eeabcbab3915', class: "action-sheet-group", ref: (el) => (this.groupEl = el) }, header !== undefined && (hAsync("div", { key: '06b5147c0f6d9180fe8f12e75c9b4a0310226adc', id: headerID, class: {
7989
+ }, class: Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'action-sheet-translucent': this.translucent }), onIonActionSheetWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }), hAsync("ion-backdrop", { key: '521ede659f747864f6c974e09016436eceb7158c', tappable: this.backdropDismiss }), hAsync("div", { key: '7a7946fc434bc444f16a70638f5e948c69d33fcd', tabindex: "0", "aria-hidden": "true" }), hAsync("div", { key: 'bcff39a580489dbafa255842e57aa8602c6d0f18', class: "action-sheet-wrapper ion-overlay-wrapper", ref: (el) => (this.wrapperEl = el) }, hAsync("div", { key: '84bba13ce14261f0f0daa3f9c77648c9e7f36e0e', class: "action-sheet-container" }, hAsync("div", { key: 'd9c8ac404fd6719a7adf8cb36549f67616f9a0c4', class: "action-sheet-group", ref: (el) => (this.groupEl = el), role: hasRadioButtons ? 'radiogroup' : undefined }, header !== undefined && (hAsync("div", { key: '180433a8ad03ef5c54728a1a8f34715b6921d658', id: headerID, class: {
7806
7990
  'action-sheet-title': true,
7807
7991
  'action-sheet-has-sub-title': this.subHeader !== undefined,
7808
- } }, header, this.subHeader && hAsync("div", { key: '54874362a75c679aba803bf4f8768f5404d2dd28', class: "action-sheet-sub-title" }, this.subHeader))), buttons.map((b) => (hAsync("button", Object.assign({}, b.htmlAttributes, { type: "button", id: b.id, class: buttonClass$3(b), onClick: () => this.buttonClick(b), disabled: b.disabled }), hAsync("span", { class: "action-sheet-button-inner" }, b.icon && hAsync("ion-icon", { icon: b.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" }), b.text), mode === 'md' && hAsync("ion-ripple-effect", null))))), cancelButton && (hAsync("div", { key: '67b0de298eb424f3dea846a841b7a06d70e3930d', class: "action-sheet-group action-sheet-group-cancel" }, hAsync("button", Object.assign({ key: 'e7e3f9a5495eea9b97dbf885ef36944f2e420eff' }, cancelButton.htmlAttributes, { type: "button", class: buttonClass$3(cancelButton), onClick: () => this.buttonClick(cancelButton) }), hAsync("span", { key: 'f889d29ed6c3d14bbc1d805888351d87f5122377', class: "action-sheet-button-inner" }, cancelButton.icon && (hAsync("ion-icon", { key: '7c05cf424b38c37fd40aaeb42a494387291571fb', icon: cancelButton.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" })), cancelButton.text), mode === 'md' && hAsync("ion-ripple-effect", { key: 'bed927b477dc2708a5123ef560274fca9819b3d6' })))))), hAsync("div", { key: 'c5df1b11dc15a93892d57065d3dd5fbe02e43b39', tabindex: "0", "aria-hidden": "true" })));
7992
+ } }, header, this.subHeader && hAsync("div", { key: '7138e79e61b1a8f42bc5a9175c57fa2f15d7ec5a', class: "action-sheet-sub-title" }, this.subHeader))), this.renderActionSheetButtons(buttons)), cancelButton && (hAsync("div", { key: 'b617c722f5b8028d73ed34b69310f312c65f34a7', class: "action-sheet-group action-sheet-group-cancel" }, hAsync("button", Object.assign({ key: 'd0dd876fc48815df3710413c201c0b445a8e16c0' }, cancelButton.htmlAttributes, { type: "button", class: buttonClass$3(cancelButton), onClick: () => this.buttonClick(cancelButton) }), hAsync("span", { key: 'e7b960157cc6fc5fe92a12090b2be55e8ae072e4', class: "action-sheet-button-inner" }, cancelButton.icon && (hAsync("ion-icon", { key: '05498ffc60cab911dbff0ecbc6168dea59ada9a5', icon: cancelButton.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" })), cancelButton.text), mode === 'md' && hAsync("ion-ripple-effect", { key: '3d401346cea301be4ca03671f7370f6f4b0b6bde' })))))), hAsync("div", { key: '971f3c5fcc07f36c28eb469a47ec0290c692e139', tabindex: "0", "aria-hidden": "true" })));
7809
7993
  }
7810
7994
  get el() { return getElement(this); }
7811
7995
  static get watchers() { return {
7996
+ "buttons": ["buttonsChanged"],
7812
7997
  "isOpen": ["onIsOpenChange"],
7813
7998
  "trigger": ["triggerChanged"]
7814
7999
  }; }
@@ -7836,12 +8021,13 @@ class ActionSheet {
7836
8021
  "htmlAttributes": [16],
7837
8022
  "isOpen": [4, "is-open"],
7838
8023
  "trigger": [1],
8024
+ "activeRadioId": [32],
7839
8025
  "present": [64],
7840
8026
  "dismiss": [64],
7841
8027
  "onDidDismiss": [64],
7842
8028
  "onWillDismiss": [64]
7843
8029
  },
7844
- "$listeners$": undefined,
8030
+ "$listeners$": [[0, "keydown", "onKeydown"]],
7845
8031
  "$lazyBundleId$": "-",
7846
8032
  "$attrsToReflect$": []
7847
8033
  }; }
@@ -9683,105 +9869,305 @@ class CardTitle {
9683
9869
  }; }
9684
9870
  }
9685
9871
 
9686
- 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}";
9687
-
9688
- 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}";
9689
-
9690
9872
  /**
9691
- * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
9692
- *
9693
- * @slot - The label text to associate with the checkbox. Use the "labelPlacement" property to control where the label is placed relative to the checkbox.
9873
+ * A utility to calculate the size of an outline notch
9874
+ * width relative to the content passed. This is used in
9875
+ * components such as `ion-select` with `fill="outline"`
9876
+ * where we need to pass slotted HTML content. This is not
9877
+ * needed when rendering plaintext content because we can
9878
+ * render the plaintext again hidden with `opacity: 0` inside
9879
+ * of the notch. As a result we can rely on the intrinsic size
9880
+ * of the element to correctly compute the notch width. We
9881
+ * cannot do this with slotted content because we cannot project
9882
+ * it into 2 places at once.
9694
9883
  *
9695
- * @part container - The container for the checkbox mark.
9696
- * @part label - The label text describing the checkbox.
9697
- * @part mark - The checkmark used to indicate the checked state.
9698
- * @part supporting-text - Supporting text displayed beneath the checkbox label.
9699
- * @part helper-text - Supporting text displayed beneath the checkbox label when the checkbox is valid.
9700
- * @part error-text - Supporting text displayed beneath the checkbox label when the checkbox is invalid and touched.
9884
+ * @internal
9885
+ * @param el: The host element
9886
+ * @param getNotchSpacerEl: A function that returns a reference to the notch spacer element inside of the component template.
9887
+ * @param getLabelSlot: A function that returns a reference to the slotted content.
9701
9888
  */
9702
- class Checkbox {
9703
- constructor(hostRef) {
9704
- registerInstance(this, hostRef);
9705
- this.ionChange = createEvent(this, "ionChange", 7);
9706
- this.ionFocus = createEvent(this, "ionFocus", 7);
9707
- this.ionBlur = createEvent(this, "ionBlur", 7);
9708
- this.inputId = `ion-cb-${checkboxIds++}`;
9709
- this.inputLabelId = `${this.inputId}-lbl`;
9710
- this.helperTextId = `${this.inputId}-helper-text`;
9711
- this.errorTextId = `${this.inputId}-error-text`;
9712
- this.inheritedAttributes = {};
9713
- /**
9714
- * The name of the control, which is submitted with the form data.
9715
- */
9716
- this.name = this.inputId;
9717
- /**
9718
- * If `true`, the checkbox is selected.
9719
- */
9720
- this.checked = false;
9721
- /**
9722
- * If `true`, the checkbox will visually appear as indeterminate.
9723
- */
9724
- this.indeterminate = false;
9889
+ const createNotchController = (el, getNotchSpacerEl, getLabelSlot) => {
9890
+ let notchVisibilityIO;
9891
+ const needsExplicitNotchWidth = () => {
9892
+ const notchSpacerEl = getNotchSpacerEl();
9893
+ if (
9725
9894
  /**
9726
- * If `true`, the user cannot interact with the checkbox.
9895
+ * If the notch is not being used
9896
+ * then we do not need to set the notch width.
9727
9897
  */
9728
- this.disabled = false;
9898
+ notchSpacerEl === undefined ||
9899
+ /**
9900
+ * If either the label property is being
9901
+ * used or the label slot is not defined,
9902
+ * then we do not need to estimate the notch width.
9903
+ */
9904
+ el.label !== undefined ||
9905
+ getLabelSlot() === null) {
9906
+ return false;
9907
+ }
9908
+ return true;
9909
+ };
9910
+ const calculateNotchWidth = () => {
9911
+ if (needsExplicitNotchWidth()) {
9912
+ /**
9913
+ * Run this the frame after
9914
+ * the browser has re-painted the host element.
9915
+ * Otherwise, the label element may have a width
9916
+ * of 0 and the IntersectionObserver will be used.
9917
+ */
9918
+ raf(() => {
9919
+ setNotchWidth();
9920
+ });
9921
+ }
9922
+ };
9923
+ /**
9924
+ * When using a label prop we can render
9925
+ * the label value inside of the notch and
9926
+ * let the browser calculate the size of the notch.
9927
+ * However, we cannot render the label slot in multiple
9928
+ * places so we need to manually calculate the notch dimension
9929
+ * based on the size of the slotted content.
9930
+ *
9931
+ * This function should only be used to set the notch width
9932
+ * on slotted label content. The notch width for label prop
9933
+ * content is automatically calculated based on the
9934
+ * intrinsic size of the label text.
9935
+ */
9936
+ const setNotchWidth = () => {
9937
+ const notchSpacerEl = getNotchSpacerEl();
9938
+ if (notchSpacerEl === undefined) {
9939
+ return;
9940
+ }
9941
+ if (!needsExplicitNotchWidth()) {
9942
+ notchSpacerEl.style.removeProperty('width');
9943
+ return;
9944
+ }
9945
+ const width = getLabelSlot().scrollWidth;
9946
+ if (
9729
9947
  /**
9730
- * The value of the checkbox does not mean if it's checked or not, use the `checked`
9731
- * property for that.
9948
+ * If the computed width of the label is 0
9949
+ * and notchSpacerEl's offsetParent is null
9950
+ * then that means the element is hidden.
9951
+ * As a result, we need to wait for the element
9952
+ * to become visible before setting the notch width.
9732
9953
  *
9733
- * The value of a checkbox is analogous to the value of an `<input type="checkbox">`,
9734
- * it's only used when the checkbox participates in a native `<form>`.
9735
- */
9736
- this.value = 'on';
9737
- /**
9738
- * Where to place the label relative to the checkbox.
9739
- * `"start"`: The label will appear to the left of the checkbox in LTR and to the right in RTL.
9740
- * `"end"`: The label will appear to the right of the checkbox in LTR and to the left in RTL.
9741
- * `"fixed"`: The label has the same behavior as `"start"` except it also has a fixed width. Long text will be truncated with ellipses ("...").
9742
- * `"stacked"`: The label will appear above the checkbox regardless of the direction. The alignment of the label can be controlled with the `alignment` property.
9743
- */
9744
- this.labelPlacement = 'start';
9745
- /**
9746
- * If true, screen readers will announce it as a required field. This property
9747
- * works only for accessibility purposes, it will not prevent the form from
9748
- * submitting if the value is invalid.
9749
- */
9750
- this.required = false;
9751
- /**
9752
- * Sets the checked property and emits
9753
- * the ionChange event. Use this to update the
9754
- * checked state in response to user-generated
9755
- * actions such as a click.
9954
+ * We do not check el.offsetParent because
9955
+ * that can be null if the host element has
9956
+ * position: fixed applied to it.
9957
+ * notchSpacerEl does not have position: fixed.
9756
9958
  */
9757
- this.setChecked = (state) => {
9758
- const isChecked = (this.checked = state);
9759
- this.ionChange.emit({
9760
- checked: isChecked,
9761
- value: this.value,
9762
- });
9763
- };
9764
- this.toggleChecked = (ev) => {
9765
- ev.preventDefault();
9766
- this.setChecked(!this.checked);
9767
- this.indeterminate = false;
9768
- };
9769
- this.onFocus = () => {
9770
- this.ionFocus.emit();
9771
- };
9772
- this.onBlur = () => {
9773
- this.ionBlur.emit();
9774
- };
9775
- this.onKeyDown = (ev) => {
9776
- if (ev.key === ' ') {
9777
- ev.preventDefault();
9778
- if (!this.disabled) {
9779
- this.toggleChecked(ev);
9780
- }
9781
- }
9782
- };
9783
- this.onClick = (ev) => {
9784
- if (this.disabled) {
9959
+ width === 0 &&
9960
+ notchSpacerEl.offsetParent === null &&
9961
+ win$1 !== undefined &&
9962
+ 'IntersectionObserver' in win$1) {
9963
+ /**
9964
+ * If there is an IO already attached
9965
+ * then that will update the notch
9966
+ * once the element becomes visible.
9967
+ * As a result, there is no need to create
9968
+ * another one.
9969
+ */
9970
+ if (notchVisibilityIO !== undefined) {
9971
+ return;
9972
+ }
9973
+ const io = (notchVisibilityIO = new IntersectionObserver((ev) => {
9974
+ /**
9975
+ * If the element is visible then we
9976
+ * can try setting the notch width again.
9977
+ */
9978
+ if (ev[0].intersectionRatio === 1) {
9979
+ setNotchWidth();
9980
+ io.disconnect();
9981
+ notchVisibilityIO = undefined;
9982
+ }
9983
+ },
9984
+ /**
9985
+ * Set the root to be the host element
9986
+ * This causes the IO callback
9987
+ * to be fired in WebKit as soon as the element
9988
+ * is visible. If we used the default root value
9989
+ * then WebKit would only fire the IO callback
9990
+ * after any animations (such as a modal transition)
9991
+ * finished, and there would potentially be a flicker.
9992
+ */
9993
+ { threshold: 0.01, root: el }));
9994
+ io.observe(notchSpacerEl);
9995
+ return;
9996
+ }
9997
+ /**
9998
+ * If the element is visible then we can set the notch width.
9999
+ * The notch is only visible when the label is scaled,
10000
+ * which is why we multiply the width by 0.75 as this is
10001
+ * the same amount the label element is scaled by in the host CSS.
10002
+ * (See $form-control-label-stacked-scale in ionic.globals.scss).
10003
+ */
10004
+ notchSpacerEl.style.setProperty('width', `${width * 0.75}px`);
10005
+ };
10006
+ const destroy = () => {
10007
+ if (notchVisibilityIO) {
10008
+ notchVisibilityIO.disconnect();
10009
+ notchVisibilityIO = undefined;
10010
+ }
10011
+ };
10012
+ return {
10013
+ calculateNotchWidth,
10014
+ destroy,
10015
+ };
10016
+ };
10017
+
10018
+ /**
10019
+ * Uses the compareWith param to compare two values to determine if they are equal.
10020
+ *
10021
+ * @param currentValue The current value of the control.
10022
+ * @param compareValue The value to compare against.
10023
+ * @param compareWith The function or property name to use to compare values.
10024
+ */
10025
+ const compareOptions = (currentValue, compareValue, compareWith) => {
10026
+ if (typeof compareWith === 'function') {
10027
+ return compareWith(currentValue, compareValue);
10028
+ }
10029
+ else if (typeof compareWith === 'string') {
10030
+ return currentValue[compareWith] === compareValue[compareWith];
10031
+ }
10032
+ else {
10033
+ return Array.isArray(compareValue) ? compareValue.includes(currentValue) : currentValue === compareValue;
10034
+ }
10035
+ };
10036
+ /**
10037
+ * Compares a value against the current value(s) to determine if it is selected.
10038
+ *
10039
+ * @param currentValue The current value of the control.
10040
+ * @param compareValue The value to compare against.
10041
+ * @param compareWith The function or property name to use to compare values.
10042
+ */
10043
+ const isOptionSelected = (currentValue, compareValue, compareWith) => {
10044
+ if (currentValue === undefined) {
10045
+ return false;
10046
+ }
10047
+ if (Array.isArray(currentValue)) {
10048
+ return currentValue.some((val) => compareOptions(val, compareValue, compareWith));
10049
+ }
10050
+ else {
10051
+ return compareOptions(currentValue, compareValue, compareWith);
10052
+ }
10053
+ };
10054
+
10055
+ /**
10056
+ * Checks if the form element is in an invalid state based on
10057
+ * Ionic validation classes.
10058
+ *
10059
+ * @param el The form element to check.
10060
+ * @returns `true` if the element is invalid, `false` otherwise.
10061
+ */
10062
+ const checkInvalidState = (el) => {
10063
+ const hasIonTouched = el.classList.contains('ion-touched');
10064
+ const hasIonInvalid = el.classList.contains('ion-invalid');
10065
+ return hasIonTouched && hasIonInvalid;
10066
+ };
10067
+
10068
+ 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}";
10069
+
10070
+ 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}";
10071
+
10072
+ /**
10073
+ * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
10074
+ *
10075
+ * @slot - The label text to associate with the checkbox. Use the "labelPlacement" property to control where the label is placed relative to the checkbox.
10076
+ *
10077
+ * @part container - The container for the checkbox mark.
10078
+ * @part label - The label text describing the checkbox.
10079
+ * @part mark - The checkmark used to indicate the checked state.
10080
+ * @part supporting-text - Supporting text displayed beneath the checkbox label.
10081
+ * @part helper-text - Supporting text displayed beneath the checkbox label when the checkbox is valid.
10082
+ * @part error-text - Supporting text displayed beneath the checkbox label when the checkbox is invalid and touched.
10083
+ */
10084
+ class Checkbox {
10085
+ constructor(hostRef) {
10086
+ registerInstance(this, hostRef);
10087
+ this.ionChange = createEvent(this, "ionChange", 7);
10088
+ this.ionFocus = createEvent(this, "ionFocus", 7);
10089
+ this.ionBlur = createEvent(this, "ionBlur", 7);
10090
+ this.inputId = `ion-cb-${checkboxIds++}`;
10091
+ this.inputLabelId = `${this.inputId}-lbl`;
10092
+ this.helperTextId = `${this.inputId}-helper-text`;
10093
+ this.errorTextId = `${this.inputId}-error-text`;
10094
+ this.inheritedAttributes = {};
10095
+ /**
10096
+ * The name of the control, which is submitted with the form data.
10097
+ */
10098
+ this.name = this.inputId;
10099
+ /**
10100
+ * If `true`, the checkbox is selected.
10101
+ */
10102
+ this.checked = false;
10103
+ /**
10104
+ * If `true`, the checkbox will visually appear as indeterminate.
10105
+ */
10106
+ this.indeterminate = false;
10107
+ /**
10108
+ * If `true`, the user cannot interact with the checkbox.
10109
+ */
10110
+ this.disabled = false;
10111
+ /**
10112
+ * The value of the checkbox does not mean if it's checked or not, use the `checked`
10113
+ * property for that.
10114
+ *
10115
+ * The value of a checkbox is analogous to the value of an `<input type="checkbox">`,
10116
+ * it's only used when the checkbox participates in a native `<form>`.
10117
+ */
10118
+ this.value = 'on';
10119
+ /**
10120
+ * Where to place the label relative to the checkbox.
10121
+ * `"start"`: The label will appear to the left of the checkbox in LTR and to the right in RTL.
10122
+ * `"end"`: The label will appear to the right of the checkbox in LTR and to the left in RTL.
10123
+ * `"fixed"`: The label has the same behavior as `"start"` except it also has a fixed width. Long text will be truncated with ellipses ("...").
10124
+ * `"stacked"`: The label will appear above the checkbox regardless of the direction. The alignment of the label can be controlled with the `alignment` property.
10125
+ */
10126
+ this.labelPlacement = 'start';
10127
+ /**
10128
+ * If true, screen readers will announce it as a required field. This property
10129
+ * works only for accessibility purposes, it will not prevent the form from
10130
+ * submitting if the value is invalid.
10131
+ */
10132
+ this.required = false;
10133
+ /**
10134
+ * Track validation state for proper aria-live announcements.
10135
+ */
10136
+ this.isInvalid = false;
10137
+ /**
10138
+ * Sets the checked property and emits
10139
+ * the ionChange event. Use this to update the
10140
+ * checked state in response to user-generated
10141
+ * actions such as a click.
10142
+ */
10143
+ this.setChecked = (state) => {
10144
+ const isChecked = (this.checked = state);
10145
+ this.ionChange.emit({
10146
+ checked: isChecked,
10147
+ value: this.value,
10148
+ });
10149
+ };
10150
+ this.toggleChecked = (ev) => {
10151
+ ev.preventDefault();
10152
+ this.setChecked(!this.checked);
10153
+ this.indeterminate = false;
10154
+ };
10155
+ this.onFocus = () => {
10156
+ this.ionFocus.emit();
10157
+ };
10158
+ this.onBlur = () => {
10159
+ this.ionBlur.emit();
10160
+ };
10161
+ this.onKeyDown = (ev) => {
10162
+ if (ev.key === ' ') {
10163
+ ev.preventDefault();
10164
+ if (!this.disabled) {
10165
+ this.toggleChecked(ev);
10166
+ }
10167
+ }
10168
+ };
10169
+ this.onClick = (ev) => {
10170
+ if (this.disabled) {
9785
10171
  return;
9786
10172
  }
9787
10173
  this.toggleChecked(ev);
@@ -9794,16 +10180,29 @@ class Checkbox {
9794
10180
  ev.stopPropagation();
9795
10181
  };
9796
10182
  }
10183
+ connectedCallback() {
10184
+ const { el } = this;
10185
+ // Always set initial state
10186
+ this.isInvalid = checkInvalidState(el);
10187
+ }
9797
10188
  componentWillLoad() {
9798
10189
  this.inheritedAttributes = Object.assign({}, inheritAriaAttributes(this.el));
10190
+ this.hintTextId = this.getHintTextId();
10191
+ }
10192
+ disconnectedCallback() {
10193
+ // Clean up validation observer to prevent memory leaks.
10194
+ if (this.validationObserver) {
10195
+ this.validationObserver.disconnect();
10196
+ this.validationObserver = undefined;
10197
+ }
9799
10198
  }
9800
10199
  /** @internal */
9801
10200
  async setFocus() {
9802
10201
  this.el.focus();
9803
10202
  }
9804
- getHintTextID() {
9805
- const { el, helperText, errorText, helperTextId, errorTextId } = this;
9806
- if (el.classList.contains('ion-touched') && el.classList.contains('ion-invalid') && errorText) {
10203
+ getHintTextId() {
10204
+ const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
10205
+ if (isInvalid && errorText) {
9807
10206
  return errorTextId;
9808
10207
  }
9809
10208
  if (helperText) {
@@ -9816,7 +10215,7 @@ class Checkbox {
9816
10215
  * This element should only be rendered if hint text is set.
9817
10216
  */
9818
10217
  renderHintText() {
9819
- const { helperText, errorText, helperTextId, errorTextId } = this;
10218
+ const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
9820
10219
  /**
9821
10220
  * undefined and empty string values should
9822
10221
  * be treated as not having helper/error text.
@@ -9825,7 +10224,7 @@ class Checkbox {
9825
10224
  if (!hasHintText) {
9826
10225
  return;
9827
10226
  }
9828
- 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)));
10227
+ 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)));
9829
10228
  }
9830
10229
  render() {
9831
10230
  const { color, checked, disabled, el, getSVGPath, indeterminate, inheritedAttributes, inputId, justify, labelPlacement, name, value, alignment, required, } = this;
@@ -9835,7 +10234,7 @@ class Checkbox {
9835
10234
  renderHiddenInput(true, el, name, checked ? value : '', disabled);
9836
10235
  // The host element must have a checkbox role to ensure proper VoiceOver
9837
10236
  // support in Safari for accessibility.
9838
- 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, {
10237
+ 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, {
9839
10238
  [mode]: true,
9840
10239
  'in-item': hostContext('ion-item', el),
9841
10240
  'checkbox-checked': checked,
@@ -9845,10 +10244,10 @@ class Checkbox {
9845
10244
  [`checkbox-justify-${justify}`]: justify !== undefined,
9846
10245
  [`checkbox-alignment-${alignment}`]: alignment !== undefined,
9847
10246
  [`checkbox-label-placement-${labelPlacement}`]: true,
9848
- }) }, 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: {
10247
+ }) }, 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: {
9849
10248
  'label-text-wrapper': true,
9850
10249
  'label-text-wrapper-hidden': !hasLabelContent,
9851
- }, 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)))));
10250
+ }, 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)))));
9852
10251
  }
9853
10252
  getSVGPath(mode, indeterminate) {
9854
10253
  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" }));
@@ -9878,6 +10277,8 @@ class Checkbox {
9878
10277
  "justify": [1],
9879
10278
  "alignment": [1],
9880
10279
  "required": [4],
10280
+ "isInvalid": [32],
10281
+ "hintTextId": [32],
9881
10282
  "setFocus": [64]
9882
10283
  },
9883
10284
  "$listeners$": undefined,
@@ -10266,6 +10667,15 @@ class Content {
10266
10667
  }
10267
10668
  resize() {
10268
10669
  }
10670
+ /**
10671
+ * Recalculate content dimensions. Called by overlays (e.g., popover) when
10672
+ * sibling elements like headers or footers have finished rendering and their
10673
+ * heights are available, ensuring accurate offset-top calculations.
10674
+ * @internal
10675
+ */
10676
+ async recalculateDimensions() {
10677
+ readTask(() => this.readDimensions());
10678
+ }
10269
10679
  readDimensions() {
10270
10680
  const page = getPageElement(this.el);
10271
10681
  const top = Math.max(this.el.offsetTop, 0);
@@ -10434,7 +10844,7 @@ class Content {
10434
10844
  const forceOverscroll = this.shouldForceOverscroll();
10435
10845
  const transitionShadow = mode === 'ios';
10436
10846
  this.resize();
10437
- return (hAsync(Host, Object.assign({ key: 'f2a24aa66dbf5c76f9d4b06f708eb73cadc239df', role: isMainContent ? 'main' : undefined, class: createColorClasses$1(this.color, {
10847
+ return (hAsync(Host, Object.assign({ key: 'cd8781f848d8dc926fe66f43d43c49564425a507', role: isMainContent ? 'main' : undefined, class: createColorClasses$1(this.color, {
10438
10848
  [mode]: true,
10439
10849
  'content-sizing': hostContext('ion-popover', this.el),
10440
10850
  overscroll: forceOverscroll,
@@ -10442,12 +10852,12 @@ class Content {
10442
10852
  }), style: {
10443
10853
  '--offset-top': `${this.cTop}px`,
10444
10854
  '--offset-bottom': `${this.cBottom}px`,
10445
- } }, inheritedAttributes), hAsync("div", { key: '6480ca7648b278abb36477b3838bccbcd4995e2a', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? hAsync("slot", { name: "fixed" }) : null, hAsync("div", { key: '29a23b663f5f0215bb000820c01e1814c0d55985', class: {
10855
+ } }, inheritedAttributes), hAsync("div", { key: '95b112d7cae30f22ef778ceffb88edb4d941c170', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? hAsync("slot", { name: "fixed" }) : null, hAsync("div", { key: '2fdfcbc39fb66f11b6191911f2941c660f4c12e5', class: {
10446
10856
  'inner-scroll': true,
10447
10857
  'scroll-x': scrollX,
10448
10858
  'scroll-y': scrollY,
10449
10859
  overscroll: (scrollX || scrollY) && forceOverscroll,
10450
- }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, hAsync("slot", { key: '0fe1bd05609a4b88ae2ce9addf5d5dc5dc1806f0' })), transitionShadow ? (hAsync("div", { class: "transition-effect" }, hAsync("div", { class: "transition-cover" }), hAsync("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? hAsync("slot", { name: "fixed" }) : null));
10860
+ }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, hAsync("slot", { key: '6bc77e0054ec8e21635a7f2abfe0ca46e0962e03' })), transitionShadow ? (hAsync("div", { class: "transition-effect" }, hAsync("div", { class: "transition-cover" }), hAsync("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? hAsync("slot", { name: "fixed" }) : null));
10451
10861
  }
10452
10862
  get el() { return getElement(this); }
10453
10863
  static get style() { return contentCss; }
@@ -10462,6 +10872,7 @@ class Content {
10462
10872
  "scrollX": [4, "scroll-x"],
10463
10873
  "scrollY": [4, "scroll-y"],
10464
10874
  "scrollEvents": [4, "scroll-events"],
10875
+ "recalculateDimensions": [64],
10465
10876
  "getScrollElement": [64],
10466
10877
  "getBackgroundElement": [64],
10467
10878
  "scrollToTop": [64],
@@ -13022,6 +13433,28 @@ class Datetime {
13022
13433
  destroyKeyboardMO();
13023
13434
  }
13024
13435
  };
13436
+ /**
13437
+ * TODO(FW-6931): Remove this fallback upon solving the root cause
13438
+ * Fallback to ensure the datetime becomes ready even if
13439
+ * IntersectionObserver never reports it as intersecting.
13440
+ *
13441
+ * This is primarily used in environments where the observer
13442
+ * might not fire as expected, such as when running under
13443
+ * synthetic tests that stub IntersectionObserver.
13444
+ */
13445
+ this.ensureReadyIfVisible = () => {
13446
+ if (this.el.classList.contains('datetime-ready')) {
13447
+ return;
13448
+ }
13449
+ const rect = this.el.getBoundingClientRect();
13450
+ if (rect.width === 0 || rect.height === 0) {
13451
+ return;
13452
+ }
13453
+ this.initializeListeners();
13454
+ writeTask(() => {
13455
+ this.el.classList.add('datetime-ready');
13456
+ });
13457
+ };
13025
13458
  this.processValue = (value) => {
13026
13459
  const hasValue = value !== null && value !== undefined && value !== '' && (!Array.isArray(value) || value.length > 0);
13027
13460
  const valueToProcess = hasValue ? parseDate(value) : this.defaultParts;
@@ -13339,6 +13772,17 @@ class Datetime {
13339
13772
  * triggering the `hiddenIO` observer below.
13340
13773
  */
13341
13774
  raf(() => visibleIO === null || visibleIO === void 0 ? void 0 : visibleIO.observe(intersectionTrackerRef));
13775
+ /**
13776
+ * TODO(FW-6931): Remove this fallback upon solving the root cause
13777
+ * Fallback: If IntersectionObserver never reports that the
13778
+ * datetime is visible but the host clearly has layout, ensure
13779
+ * we still initialize listeners and mark the component as ready.
13780
+ *
13781
+ * We schedule this after everything has had a chance to run.
13782
+ */
13783
+ setTimeout(() => {
13784
+ this.ensureReadyIfVisible();
13785
+ }, 100);
13342
13786
  /**
13343
13787
  * We need to clean up listeners when the datetime is hidden
13344
13788
  * in a popover/modal so that we can properly scroll containers
@@ -14094,7 +14538,7 @@ class Datetime {
14094
14538
  const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
14095
14539
  const hasWheelVariant = hasDatePresentation && preferWheel;
14096
14540
  renderHiddenInput(true, el, name, formatValue(value), disabled);
14097
- return (hAsync(Host, { key: '57492534800ea059a7c2bbd9f0059cc0b75ae8d2', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses$1(color, {
14541
+ return (hAsync(Host, { key: 'efdbc0922670a841bc667ceac392cdc1dedffd01', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses$1(color, {
14098
14542
  [mode]: true,
14099
14543
  ['datetime-readonly']: readonly,
14100
14544
  ['datetime-disabled']: disabled,
@@ -14104,7 +14548,7 @@ class Datetime {
14104
14548
  [`datetime-size-${size}`]: true,
14105
14549
  [`datetime-prefer-wheel`]: hasWheelVariant,
14106
14550
  [`datetime-grid`]: isGridStyle,
14107
- })) }, hAsync("div", { key: '97dac5e5195635ac0bc5fb472b9d09e5c3c6bbc3', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
14551
+ })) }, hAsync("div", { key: '3f8bb75fcb0baff55182ef3aa1b535eacc58d81f', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
14108
14552
  }
14109
14553
  get el() { return getElement(this); }
14110
14554
  static get watchers() { return {
@@ -14746,7 +15190,7 @@ class FabButton {
14746
15190
  "translucent": [4],
14747
15191
  "type": [1],
14748
15192
  "size": [1],
14749
- "closeIcon": [8, "close-icon"]
15193
+ "closeIcon": [1, "close-icon"]
14750
15194
  },
14751
15195
  "$listeners$": undefined,
14752
15196
  "$lazyBundleId$": "-",
@@ -16196,317 +16640,121 @@ class InfiniteScroll {
16196
16640
  * Done.
16197
16641
  */
16198
16642
  this.isBusy = true;
16199
- // ******** DOM READ ****************
16200
- // Save the current content dimensions before the UI updates
16201
- const prev = scrollEl.scrollHeight - scrollEl.scrollTop;
16202
- // ******** DOM READ ****************
16203
- requestAnimationFrame(() => {
16204
- readTask(() => {
16205
- // UI has updated, save the new content dimensions
16206
- const scrollHeight = scrollEl.scrollHeight;
16207
- // New content was added on top, so the scroll position should be changed immediately to prevent it from jumping around
16208
- const newScrollTop = scrollHeight - prev;
16209
- // ******** DOM WRITE ****************
16210
- requestAnimationFrame(() => {
16211
- writeTask(() => {
16212
- scrollEl.scrollTop = newScrollTop;
16213
- this.isBusy = false;
16214
- this.didFire = false;
16215
- });
16216
- });
16217
- });
16218
- });
16219
- }
16220
- else {
16221
- this.didFire = false;
16222
- }
16223
- }
16224
- canStart() {
16225
- return !this.disabled && !this.isBusy && !!this.scrollEl && !this.isLoading;
16226
- }
16227
- enableScrollEvents(shouldListen) {
16228
- if (this.scrollEl) {
16229
- if (shouldListen) {
16230
- this.scrollEl.addEventListener('scroll', this.onScroll);
16231
- }
16232
- else {
16233
- this.scrollEl.removeEventListener('scroll', this.onScroll);
16234
- }
16235
- }
16236
- }
16237
- render() {
16238
- const mode = getIonMode$1(this);
16239
- const disabled = this.disabled;
16240
- return (hAsync(Host, { key: 'e844956795f69be33396ce4480aa7a54ad01b28c', class: {
16241
- [mode]: true,
16242
- 'infinite-scroll-loading': this.isLoading,
16243
- 'infinite-scroll-enabled': !disabled,
16244
- } }));
16245
- }
16246
- get el() { return getElement(this); }
16247
- static get watchers() { return {
16248
- "threshold": ["thresholdChanged"],
16249
- "disabled": ["disabledChanged"]
16250
- }; }
16251
- static get style() { return infiniteScrollCss; }
16252
- static get cmpMeta() { return {
16253
- "$flags$": 256,
16254
- "$tagName$": "ion-infinite-scroll",
16255
- "$members$": {
16256
- "threshold": [1],
16257
- "disabled": [4],
16258
- "position": [1],
16259
- "isLoading": [32],
16260
- "complete": [64]
16261
- },
16262
- "$listeners$": undefined,
16263
- "$lazyBundleId$": "-",
16264
- "$attrsToReflect$": []
16265
- }; }
16266
- }
16267
-
16268
- const infiniteScrollContentIosCss = "ion-infinite-scroll-content{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;min-height:84px;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.infinite-loading{margin-left:0;margin-right:0;margin-top:0;margin-bottom:32px;display:none;width:100%}.infinite-loading-text{-webkit-margin-start:32px;margin-inline-start:32px;-webkit-margin-end:32px;margin-inline-end:32px;margin-top:4px;margin-bottom:0}.infinite-scroll-loading ion-infinite-scroll-content>.infinite-loading{display:block}.infinite-scroll-content-ios .infinite-loading-text{color:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}.infinite-scroll-content-ios .infinite-loading-spinner .spinner-lines-ios line,.infinite-scroll-content-ios .infinite-loading-spinner .spinner-lines-small-ios line,.infinite-scroll-content-ios .infinite-loading-spinner .spinner-crescent circle{stroke:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}.infinite-scroll-content-ios .infinite-loading-spinner .spinner-bubbles circle,.infinite-scroll-content-ios .infinite-loading-spinner .spinner-circles circle,.infinite-scroll-content-ios .infinite-loading-spinner .spinner-dots circle{fill:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}";
16269
-
16270
- const infiniteScrollContentMdCss = "ion-infinite-scroll-content{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;min-height:84px;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.infinite-loading{margin-left:0;margin-right:0;margin-top:0;margin-bottom:32px;display:none;width:100%}.infinite-loading-text{-webkit-margin-start:32px;margin-inline-start:32px;-webkit-margin-end:32px;margin-inline-end:32px;margin-top:4px;margin-bottom:0}.infinite-scroll-loading ion-infinite-scroll-content>.infinite-loading{display:block}.infinite-scroll-content-md .infinite-loading-text{color:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}.infinite-scroll-content-md .infinite-loading-spinner .spinner-lines-md line,.infinite-scroll-content-md .infinite-loading-spinner .spinner-lines-small-md line,.infinite-scroll-content-md .infinite-loading-spinner .spinner-crescent circle{stroke:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}.infinite-scroll-content-md .infinite-loading-spinner .spinner-bubbles circle,.infinite-scroll-content-md .infinite-loading-spinner .spinner-circles circle,.infinite-scroll-content-md .infinite-loading-spinner .spinner-dots circle{fill:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}";
16271
-
16272
- class InfiniteScrollContent {
16273
- constructor(hostRef) {
16274
- registerInstance(this, hostRef);
16275
- this.customHTMLEnabled = config.get('innerHTMLTemplatesEnabled', ENABLE_HTML_CONTENT_DEFAULT);
16276
- }
16277
- componentDidLoad() {
16278
- if (this.loadingSpinner === undefined) {
16279
- const mode = getIonMode$1(this);
16280
- this.loadingSpinner = config.get('infiniteLoadingSpinner', config.get('spinner', mode === 'ios' ? 'lines' : 'crescent'));
16281
- }
16282
- }
16283
- renderLoadingText() {
16284
- const { customHTMLEnabled, loadingText } = this;
16285
- if (customHTMLEnabled) {
16286
- return hAsync("div", { class: "infinite-loading-text", innerHTML: sanitizeDOMString(loadingText) });
16287
- }
16288
- return hAsync("div", { class: "infinite-loading-text" }, this.loadingText);
16289
- }
16290
- render() {
16291
- const mode = getIonMode$1(this);
16292
- return (hAsync(Host, { key: '7c16060dcfe2a0b0fb3e2f8f4c449589a76f1baa', class: {
16293
- [mode]: true,
16294
- // Used internally for styling
16295
- [`infinite-scroll-content-${mode}`]: true,
16296
- } }, hAsync("div", { key: 'a94f4d8746e053dc718f97520bd7e48cb316443a', class: "infinite-loading" }, this.loadingSpinner && (hAsync("div", { key: '10143d5d2a50a2a2bc5de1cee8e7ab51263bcf23', class: "infinite-loading-spinner" }, hAsync("ion-spinner", { key: '8846e88191690d9c61a0b462889ed56fbfed8b0d', name: this.loadingSpinner }))), this.loadingText !== undefined && this.renderLoadingText())));
16297
- }
16298
- static get style() { return {
16299
- ios: infiniteScrollContentIosCss,
16300
- md: infiniteScrollContentMdCss
16301
- }; }
16302
- static get cmpMeta() { return {
16303
- "$flags$": 288,
16304
- "$tagName$": "ion-infinite-scroll-content",
16305
- "$members$": {
16306
- "loadingSpinner": [1025, "loading-spinner"],
16307
- "loadingText": [1, "loading-text"]
16308
- },
16309
- "$listeners$": undefined,
16310
- "$lazyBundleId$": "-",
16311
- "$attrsToReflect$": []
16312
- }; }
16313
- }
16314
-
16315
- /**
16316
- * A utility to calculate the size of an outline notch
16317
- * width relative to the content passed. This is used in
16318
- * components such as `ion-select` with `fill="outline"`
16319
- * where we need to pass slotted HTML content. This is not
16320
- * needed when rendering plaintext content because we can
16321
- * render the plaintext again hidden with `opacity: 0` inside
16322
- * of the notch. As a result we can rely on the intrinsic size
16323
- * of the element to correctly compute the notch width. We
16324
- * cannot do this with slotted content because we cannot project
16325
- * it into 2 places at once.
16326
- *
16327
- * @internal
16328
- * @param el: The host element
16329
- * @param getNotchSpacerEl: A function that returns a reference to the notch spacer element inside of the component template.
16330
- * @param getLabelSlot: A function that returns a reference to the slotted content.
16331
- */
16332
- const createNotchController = (el, getNotchSpacerEl, getLabelSlot) => {
16333
- let notchVisibilityIO;
16334
- const needsExplicitNotchWidth = () => {
16335
- const notchSpacerEl = getNotchSpacerEl();
16336
- if (
16337
- /**
16338
- * If the notch is not being used
16339
- * then we do not need to set the notch width.
16340
- */
16341
- notchSpacerEl === undefined ||
16342
- /**
16343
- * If either the label property is being
16344
- * used or the label slot is not defined,
16345
- * then we do not need to estimate the notch width.
16346
- */
16347
- el.label !== undefined ||
16348
- getLabelSlot() === null) {
16349
- return false;
16350
- }
16351
- return true;
16352
- };
16353
- const calculateNotchWidth = () => {
16354
- if (needsExplicitNotchWidth()) {
16355
- /**
16356
- * Run this the frame after
16357
- * the browser has re-painted the host element.
16358
- * Otherwise, the label element may have a width
16359
- * of 0 and the IntersectionObserver will be used.
16360
- */
16361
- raf(() => {
16362
- setNotchWidth();
16363
- });
16364
- }
16365
- };
16366
- /**
16367
- * When using a label prop we can render
16368
- * the label value inside of the notch and
16369
- * let the browser calculate the size of the notch.
16370
- * However, we cannot render the label slot in multiple
16371
- * places so we need to manually calculate the notch dimension
16372
- * based on the size of the slotted content.
16373
- *
16374
- * This function should only be used to set the notch width
16375
- * on slotted label content. The notch width for label prop
16376
- * content is automatically calculated based on the
16377
- * intrinsic size of the label text.
16378
- */
16379
- const setNotchWidth = () => {
16380
- const notchSpacerEl = getNotchSpacerEl();
16381
- if (notchSpacerEl === undefined) {
16382
- return;
16383
- }
16384
- if (!needsExplicitNotchWidth()) {
16385
- notchSpacerEl.style.removeProperty('width');
16386
- return;
16387
- }
16388
- const width = getLabelSlot().scrollWidth;
16389
- if (
16390
- /**
16391
- * If the computed width of the label is 0
16392
- * and notchSpacerEl's offsetParent is null
16393
- * then that means the element is hidden.
16394
- * As a result, we need to wait for the element
16395
- * to become visible before setting the notch width.
16396
- *
16397
- * We do not check el.offsetParent because
16398
- * that can be null if the host element has
16399
- * position: fixed applied to it.
16400
- * notchSpacerEl does not have position: fixed.
16401
- */
16402
- width === 0 &&
16403
- notchSpacerEl.offsetParent === null &&
16404
- win$1 !== undefined &&
16405
- 'IntersectionObserver' in win$1) {
16406
- /**
16407
- * If there is an IO already attached
16408
- * then that will update the notch
16409
- * once the element becomes visible.
16410
- * As a result, there is no need to create
16411
- * another one.
16412
- */
16413
- if (notchVisibilityIO !== undefined) {
16414
- return;
16415
- }
16416
- const io = (notchVisibilityIO = new IntersectionObserver((ev) => {
16417
- /**
16418
- * If the element is visible then we
16419
- * can try setting the notch width again.
16420
- */
16421
- if (ev[0].intersectionRatio === 1) {
16422
- setNotchWidth();
16423
- io.disconnect();
16424
- notchVisibilityIO = undefined;
16425
- }
16426
- },
16427
- /**
16428
- * Set the root to be the host element
16429
- * This causes the IO callback
16430
- * to be fired in WebKit as soon as the element
16431
- * is visible. If we used the default root value
16432
- * then WebKit would only fire the IO callback
16433
- * after any animations (such as a modal transition)
16434
- * finished, and there would potentially be a flicker.
16435
- */
16436
- { threshold: 0.01, root: el }));
16437
- io.observe(notchSpacerEl);
16438
- return;
16643
+ // ******** DOM READ ****************
16644
+ // Save the current content dimensions before the UI updates
16645
+ const prev = scrollEl.scrollHeight - scrollEl.scrollTop;
16646
+ // ******** DOM READ ****************
16647
+ requestAnimationFrame(() => {
16648
+ readTask(() => {
16649
+ // UI has updated, save the new content dimensions
16650
+ const scrollHeight = scrollEl.scrollHeight;
16651
+ // New content was added on top, so the scroll position should be changed immediately to prevent it from jumping around
16652
+ const newScrollTop = scrollHeight - prev;
16653
+ // ******** DOM WRITE ****************
16654
+ requestAnimationFrame(() => {
16655
+ writeTask(() => {
16656
+ scrollEl.scrollTop = newScrollTop;
16657
+ this.isBusy = false;
16658
+ this.didFire = false;
16659
+ });
16660
+ });
16661
+ });
16662
+ });
16439
16663
  }
16440
- /**
16441
- * If the element is visible then we can set the notch width.
16442
- * The notch is only visible when the label is scaled,
16443
- * which is why we multiply the width by 0.75 as this is
16444
- * the same amount the label element is scaled by in the host CSS.
16445
- * (See $form-control-label-stacked-scale in ionic.globals.scss).
16446
- */
16447
- notchSpacerEl.style.setProperty('width', `${width * 0.75}px`);
16448
- };
16449
- const destroy = () => {
16450
- if (notchVisibilityIO) {
16451
- notchVisibilityIO.disconnect();
16452
- notchVisibilityIO = undefined;
16664
+ else {
16665
+ this.didFire = false;
16453
16666
  }
16454
- };
16455
- return {
16456
- calculateNotchWidth,
16457
- destroy,
16458
- };
16459
- };
16460
-
16461
- /**
16462
- * Uses the compareWith param to compare two values to determine if they are equal.
16463
- *
16464
- * @param currentValue The current value of the control.
16465
- * @param compareValue The value to compare against.
16466
- * @param compareWith The function or property name to use to compare values.
16467
- */
16468
- const compareOptions = (currentValue, compareValue, compareWith) => {
16469
- if (typeof compareWith === 'function') {
16470
- return compareWith(currentValue, compareValue);
16471
16667
  }
16472
- else if (typeof compareWith === 'string') {
16473
- return currentValue[compareWith] === compareValue[compareWith];
16668
+ canStart() {
16669
+ return !this.disabled && !this.isBusy && !!this.scrollEl && !this.isLoading;
16474
16670
  }
16475
- else {
16476
- return Array.isArray(compareValue) ? compareValue.includes(currentValue) : currentValue === compareValue;
16671
+ enableScrollEvents(shouldListen) {
16672
+ if (this.scrollEl) {
16673
+ if (shouldListen) {
16674
+ this.scrollEl.addEventListener('scroll', this.onScroll);
16675
+ }
16676
+ else {
16677
+ this.scrollEl.removeEventListener('scroll', this.onScroll);
16678
+ }
16679
+ }
16477
16680
  }
16478
- };
16479
- /**
16480
- * Compares a value against the current value(s) to determine if it is selected.
16481
- *
16482
- * @param currentValue The current value of the control.
16483
- * @param compareValue The value to compare against.
16484
- * @param compareWith The function or property name to use to compare values.
16485
- */
16486
- const isOptionSelected = (currentValue, compareValue, compareWith) => {
16487
- if (currentValue === undefined) {
16488
- return false;
16681
+ render() {
16682
+ const mode = getIonMode$1(this);
16683
+ const disabled = this.disabled;
16684
+ return (hAsync(Host, { key: 'e844956795f69be33396ce4480aa7a54ad01b28c', class: {
16685
+ [mode]: true,
16686
+ 'infinite-scroll-loading': this.isLoading,
16687
+ 'infinite-scroll-enabled': !disabled,
16688
+ } }));
16489
16689
  }
16490
- if (Array.isArray(currentValue)) {
16491
- return currentValue.some((val) => compareOptions(val, compareValue, compareWith));
16690
+ get el() { return getElement(this); }
16691
+ static get watchers() { return {
16692
+ "threshold": ["thresholdChanged"],
16693
+ "disabled": ["disabledChanged"]
16694
+ }; }
16695
+ static get style() { return infiniteScrollCss; }
16696
+ static get cmpMeta() { return {
16697
+ "$flags$": 256,
16698
+ "$tagName$": "ion-infinite-scroll",
16699
+ "$members$": {
16700
+ "threshold": [1],
16701
+ "disabled": [4],
16702
+ "position": [1],
16703
+ "isLoading": [32],
16704
+ "complete": [64]
16705
+ },
16706
+ "$listeners$": undefined,
16707
+ "$lazyBundleId$": "-",
16708
+ "$attrsToReflect$": []
16709
+ }; }
16710
+ }
16711
+
16712
+ const infiniteScrollContentIosCss = "ion-infinite-scroll-content{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;min-height:84px;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.infinite-loading{margin-left:0;margin-right:0;margin-top:0;margin-bottom:32px;display:none;width:100%}.infinite-loading-text{-webkit-margin-start:32px;margin-inline-start:32px;-webkit-margin-end:32px;margin-inline-end:32px;margin-top:4px;margin-bottom:0}.infinite-scroll-loading ion-infinite-scroll-content>.infinite-loading{display:block}.infinite-scroll-content-ios .infinite-loading-text{color:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}.infinite-scroll-content-ios .infinite-loading-spinner .spinner-lines-ios line,.infinite-scroll-content-ios .infinite-loading-spinner .spinner-lines-small-ios line,.infinite-scroll-content-ios .infinite-loading-spinner .spinner-crescent circle{stroke:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}.infinite-scroll-content-ios .infinite-loading-spinner .spinner-bubbles circle,.infinite-scroll-content-ios .infinite-loading-spinner .spinner-circles circle,.infinite-scroll-content-ios .infinite-loading-spinner .spinner-dots circle{fill:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}";
16713
+
16714
+ const infiniteScrollContentMdCss = "ion-infinite-scroll-content{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;min-height:84px;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.infinite-loading{margin-left:0;margin-right:0;margin-top:0;margin-bottom:32px;display:none;width:100%}.infinite-loading-text{-webkit-margin-start:32px;margin-inline-start:32px;-webkit-margin-end:32px;margin-inline-end:32px;margin-top:4px;margin-bottom:0}.infinite-scroll-loading ion-infinite-scroll-content>.infinite-loading{display:block}.infinite-scroll-content-md .infinite-loading-text{color:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}.infinite-scroll-content-md .infinite-loading-spinner .spinner-lines-md line,.infinite-scroll-content-md .infinite-loading-spinner .spinner-lines-small-md line,.infinite-scroll-content-md .infinite-loading-spinner .spinner-crescent circle{stroke:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}.infinite-scroll-content-md .infinite-loading-spinner .spinner-bubbles circle,.infinite-scroll-content-md .infinite-loading-spinner .spinner-circles circle,.infinite-scroll-content-md .infinite-loading-spinner .spinner-dots circle{fill:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}";
16715
+
16716
+ class InfiniteScrollContent {
16717
+ constructor(hostRef) {
16718
+ registerInstance(this, hostRef);
16719
+ this.customHTMLEnabled = config.get('innerHTMLTemplatesEnabled', ENABLE_HTML_CONTENT_DEFAULT);
16492
16720
  }
16493
- else {
16494
- return compareOptions(currentValue, compareValue, compareWith);
16721
+ componentDidLoad() {
16722
+ if (this.loadingSpinner === undefined) {
16723
+ const mode = getIonMode$1(this);
16724
+ this.loadingSpinner = config.get('infiniteLoadingSpinner', config.get('spinner', mode === 'ios' ? 'lines' : 'crescent'));
16725
+ }
16495
16726
  }
16496
- };
16497
-
16498
- /**
16499
- * Checks if the form element is in an invalid state based on
16500
- * Ionic validation classes.
16501
- *
16502
- * @param el The form element to check.
16503
- * @returns `true` if the element is invalid, `false` otherwise.
16504
- */
16505
- const checkInvalidState = (el) => {
16506
- const hasIonTouched = el.classList.contains('ion-touched');
16507
- const hasIonInvalid = el.classList.contains('ion-invalid');
16508
- return hasIonTouched && hasIonInvalid;
16509
- };
16727
+ renderLoadingText() {
16728
+ const { customHTMLEnabled, loadingText } = this;
16729
+ if (customHTMLEnabled) {
16730
+ return hAsync("div", { class: "infinite-loading-text", innerHTML: sanitizeDOMString(loadingText) });
16731
+ }
16732
+ return hAsync("div", { class: "infinite-loading-text" }, this.loadingText);
16733
+ }
16734
+ render() {
16735
+ const mode = getIonMode$1(this);
16736
+ return (hAsync(Host, { key: '7c16060dcfe2a0b0fb3e2f8f4c449589a76f1baa', class: {
16737
+ [mode]: true,
16738
+ // Used internally for styling
16739
+ [`infinite-scroll-content-${mode}`]: true,
16740
+ } }, hAsync("div", { key: 'a94f4d8746e053dc718f97520bd7e48cb316443a', class: "infinite-loading" }, this.loadingSpinner && (hAsync("div", { key: '10143d5d2a50a2a2bc5de1cee8e7ab51263bcf23', class: "infinite-loading-spinner" }, hAsync("ion-spinner", { key: '8846e88191690d9c61a0b462889ed56fbfed8b0d', name: this.loadingSpinner }))), this.loadingText !== undefined && this.renderLoadingText())));
16741
+ }
16742
+ static get style() { return {
16743
+ ios: infiniteScrollContentIosCss,
16744
+ md: infiniteScrollContentMdCss
16745
+ }; }
16746
+ static get cmpMeta() { return {
16747
+ "$flags$": 288,
16748
+ "$tagName$": "ion-infinite-scroll-content",
16749
+ "$members$": {
16750
+ "loadingSpinner": [1025, "loading-spinner"],
16751
+ "loadingText": [1, "loading-text"]
16752
+ },
16753
+ "$listeners$": undefined,
16754
+ "$lazyBundleId$": "-",
16755
+ "$attrsToReflect$": []
16756
+ }; }
16757
+ }
16510
16758
 
16511
16759
  /**
16512
16760
  * Used to update a scoped component that uses emulated slots. This fires when
@@ -18227,7 +18475,7 @@ class Item {
18227
18475
  "color": [513],
18228
18476
  "button": [4],
18229
18477
  "detail": [4],
18230
- "detailIcon": [8, "detail-icon"],
18478
+ "detailIcon": [1, "detail-icon"],
18231
18479
  "disabled": [516],
18232
18480
  "download": [1],
18233
18481
  "href": [1],
@@ -22963,7 +23211,13 @@ class Modal {
22963
23211
  };
22964
23212
  window.addEventListener(KEYBOARD_DID_OPEN, this.keyboardOpenCallback);
22965
23213
  }
22966
- if (this.isSheetModal) {
23214
+ /**
23215
+ * Recalculate isSheetModal because framework bindings (e.g., Angular)
23216
+ * may not have been applied when componentWillLoad ran.
23217
+ */
23218
+ const isSheetModal = this.breakpoints !== undefined && this.initialBreakpoint !== undefined;
23219
+ this.isSheetModal = isSheetModal;
23220
+ if (isSheetModal) {
22967
23221
  this.initSheetGesture();
22968
23222
  }
22969
23223
  else if (hasCardModal) {
@@ -23045,6 +23299,79 @@ class Modal {
23045
23299
  this.gesture = gesture;
23046
23300
  this.moveSheetToBreakpoint = moveSheetToBreakpoint;
23047
23301
  this.gesture.enable(true);
23302
+ /**
23303
+ * When backdrop interaction is allowed, nested router outlets from child routes
23304
+ * may block pointer events to parent content. Apply passthrough styles only when
23305
+ * the modal was the sole content of a child route page.
23306
+ * See https://github.com/ionic-team/ionic-framework/issues/30700
23307
+ */
23308
+ const backdropNotBlocking = this.showBackdrop === false || this.focusTrap === false || backdropBreakpoint > 0;
23309
+ if (backdropNotBlocking) {
23310
+ this.setupChildRoutePassthrough();
23311
+ }
23312
+ }
23313
+ /**
23314
+ * For sheet modals that allow background interaction, sets up pointer-events
23315
+ * passthrough on child route page wrappers and nested router outlets.
23316
+ */
23317
+ setupChildRoutePassthrough() {
23318
+ var _a;
23319
+ // Cache the page parent for cleanup
23320
+ this.cachedPageParent = this.getOriginalPageParent();
23321
+ const pageParent = this.cachedPageParent;
23322
+ // Skip ion-app (controller modals) and pages with visible sibling content next to the modal
23323
+ if (!pageParent || pageParent.tagName === 'ION-APP') {
23324
+ return;
23325
+ }
23326
+ const hasVisibleContent = Array.from(pageParent.children).some((child) => {
23327
+ var _a;
23328
+ return child !== this.el &&
23329
+ !(child instanceof HTMLElement && window.getComputedStyle(child).display === 'none') &&
23330
+ child.tagName !== 'TEMPLATE' &&
23331
+ child.tagName !== 'SLOT' &&
23332
+ !(child.nodeType === Node.TEXT_NODE && !((_a = child.textContent) === null || _a === void 0 ? void 0 : _a.trim()));
23333
+ });
23334
+ if (hasVisibleContent) {
23335
+ return;
23336
+ }
23337
+ // Child route case: page only contained the modal
23338
+ pageParent.classList.add('ion-page-overlay-passthrough');
23339
+ // Also make nested router outlets passthrough
23340
+ const routerOutlet = pageParent.parentElement;
23341
+ if ((routerOutlet === null || routerOutlet === void 0 ? void 0 : routerOutlet.tagName) === 'ION-ROUTER-OUTLET' && ((_a = routerOutlet.parentElement) === null || _a === void 0 ? void 0 : _a.tagName) !== 'ION-APP') {
23342
+ routerOutlet.style.setProperty('pointer-events', 'none');
23343
+ routerOutlet.setAttribute('data-overlay-passthrough', 'true');
23344
+ }
23345
+ }
23346
+ /**
23347
+ * Finds the ion-page ancestor of the modal's original parent location.
23348
+ */
23349
+ getOriginalPageParent() {
23350
+ if (!this.cachedOriginalParent) {
23351
+ return null;
23352
+ }
23353
+ let pageParent = this.cachedOriginalParent;
23354
+ while (pageParent && !pageParent.classList.contains('ion-page')) {
23355
+ pageParent = pageParent.parentElement;
23356
+ }
23357
+ return pageParent;
23358
+ }
23359
+ /**
23360
+ * Removes passthrough styles added by setupChildRoutePassthrough.
23361
+ */
23362
+ cleanupChildRoutePassthrough() {
23363
+ const pageParent = this.cachedPageParent;
23364
+ if (!pageParent) {
23365
+ return;
23366
+ }
23367
+ pageParent.classList.remove('ion-page-overlay-passthrough');
23368
+ const routerOutlet = pageParent.parentElement;
23369
+ if (routerOutlet === null || routerOutlet === void 0 ? void 0 : routerOutlet.hasAttribute('data-overlay-passthrough')) {
23370
+ routerOutlet.style.removeProperty('pointer-events');
23371
+ routerOutlet.removeAttribute('data-overlay-passthrough');
23372
+ }
23373
+ // Clear the cached reference
23374
+ this.cachedPageParent = undefined;
23048
23375
  }
23049
23376
  sheetOnDismiss() {
23050
23377
  /**
@@ -23134,6 +23461,7 @@ class Modal {
23134
23461
  }
23135
23462
  this.cleanupViewTransitionListener();
23136
23463
  this.cleanupParentRemovalObserver();
23464
+ this.cleanupChildRoutePassthrough();
23137
23465
  }
23138
23466
  this.currentBreakpoint = undefined;
23139
23467
  this.animation = undefined;
@@ -23330,6 +23658,17 @@ class Modal {
23330
23658
  this.cachedOriginalParent.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
23331
23659
  return;
23332
23660
  }
23661
+ /**
23662
+ * Don't observe for controller-based modals or when the parent is the
23663
+ * app root (document.body or ion-app). These parents won't be removed,
23664
+ * and observing document.body with subtree: true causes performance
23665
+ * issues with frameworks like Angular during change detection.
23666
+ */
23667
+ if (this.hasController ||
23668
+ this.cachedOriginalParent === document.body ||
23669
+ this.cachedOriginalParent.tagName === 'ION-APP') {
23670
+ return;
23671
+ }
23333
23672
  this.parentRemovalObserver = new MutationObserver((mutations) => {
23334
23673
  mutations.forEach((mutation) => {
23335
23674
  if (mutation.type === 'childList' && mutation.removedNodes.length > 0) {
@@ -23371,20 +23710,20 @@ class Modal {
23371
23710
  const isCardModal = presentingElement !== undefined && mode === 'ios';
23372
23711
  const isHandleCycle = handleBehavior === 'cycle';
23373
23712
  const isSheetModalWithHandle = isSheetModal && showHandle;
23374
- return (hAsync(Host, Object.assign({ key: '9e9a7bd591eb17a225a00b4fa2e379e94601d17f', "no-router": true,
23713
+ return (hAsync(Host, Object.assign({ key: '9a75095a13de0cfc96f1fa69fd92777d25da8daa', "no-router": true,
23375
23714
  // Allow the modal to be navigable when the handle is focusable
23376
23715
  tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1 }, htmlAttributes, { style: {
23377
23716
  zIndex: `${20000 + this.overlayIndex}`,
23378
- }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), hAsync("ion-backdrop", { key: 'e5eae2c14f830f75e308fcd7f4c10c86fac5b962', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && hAsync("div", { key: 'e268f9cd310c3cf4e051b5b92524ce4fb70d005e', class: "modal-shadow" }), hAsync("div", Object.assign({ key: '9c380f36c18144c153077b15744d1c3346bce63e',
23717
+ }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), hAsync("ion-backdrop", { key: 'd02612d8063ef20f59f173ff47795f71cdaaf63e', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && hAsync("div", { key: '708761b70a93e34c08faae079569f444c7416a4c', class: "modal-shadow" }), hAsync("div", Object.assign({ key: 'a72226ff1a98229f9bfd9207b98fc57e02baa430',
23379
23718
  /*
23380
23719
  role and aria-modal must be used on the
23381
23720
  same element. They must also be set inside the
23382
23721
  shadow DOM otherwise ion-button will not be highlighted
23383
23722
  when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
23384
23723
  */
23385
- role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (hAsync("button", { key: '2d5ee6d5959d97309c306e8ce72eb0f2c19be144', class: "modal-handle",
23724
+ role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (hAsync("button", { key: '0547f32323882660221385d84d492929caa77c6b', class: "modal-handle",
23386
23725
  // Prevents the handle from receiving keyboard focus when it does not cycle
23387
- tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), hAsync("slot", { key: '5590434c35ea04c42fc006498bc189038e15a298', onSlotchange: this.onSlotChange }))));
23726
+ tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), hAsync("slot", { key: 'fccbd64518b6fa22f9e874deb6b4ba55d8d89c3b', onSlotchange: this.onSlotChange }))));
23388
23727
  }
23389
23728
  get el() { return getElement(this); }
23390
23729
  static get watchers() { return {
@@ -23424,6 +23763,7 @@ class Modal {
23424
23763
  "keepContentsMounted": [4, "keep-contents-mounted"],
23425
23764
  "focusTrap": [4, "focus-trap"],
23426
23765
  "canDismiss": [4, "can-dismiss"],
23766
+ "isSheetModal": [32],
23427
23767
  "presented": [32],
23428
23768
  "present": [64],
23429
23769
  "dismiss": [64],
@@ -27491,6 +27831,10 @@ class Popover {
27491
27831
  if (destroyTriggerInteraction) {
27492
27832
  destroyTriggerInteraction();
27493
27833
  }
27834
+ if (this.headerResizeObserver) {
27835
+ this.headerResizeObserver.disconnect();
27836
+ this.headerResizeObserver = undefined;
27837
+ }
27494
27838
  }
27495
27839
  componentWillLoad() {
27496
27840
  var _a, _b;
@@ -27593,6 +27937,7 @@ class Popover {
27593
27937
  */
27594
27938
  this.ionMount.emit();
27595
27939
  this.usersElement = await attachComponent(delegate, el, this.component, ['popover-viewport'], this.componentProps, inline);
27940
+ this.recalculateContentOnHeaderReady();
27596
27941
  if (!this.keyboardEvents) {
27597
27942
  this.configureKeyboardInteraction();
27598
27943
  }
@@ -27638,6 +27983,35 @@ class Popover {
27638
27983
  }
27639
27984
  unlock();
27640
27985
  }
27986
+ /**
27987
+ * Watch the header for height changes and trigger content dimension
27988
+ * recalculation when the header has a height > 0. This sets the offset-top
27989
+ * of the content to the height of the header correctly.
27990
+ */
27991
+ recalculateContentOnHeaderReady() {
27992
+ var _a;
27993
+ const popoverContent = (_a = this.el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.popover-content');
27994
+ if (!popoverContent) {
27995
+ return;
27996
+ }
27997
+ const contentContainer = this.usersElement || popoverContent;
27998
+ const header = contentContainer.querySelector('ion-header');
27999
+ const contentElements = contentContainer.querySelectorAll('ion-content');
28000
+ if (!header || contentElements.length === 0) {
28001
+ return;
28002
+ }
28003
+ this.headerResizeObserver = new ResizeObserver(async () => {
28004
+ var _a;
28005
+ if (header.offsetHeight > 0) {
28006
+ (_a = this.headerResizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
28007
+ this.headerResizeObserver = undefined;
28008
+ for (const contentEl of contentElements) {
28009
+ await contentEl.recalculateDimensions();
28010
+ }
28011
+ }
28012
+ });
28013
+ this.headerResizeObserver.observe(header);
28014
+ }
27641
28015
  /**
27642
28016
  * Dismiss the popover overlay after it has been presented.
27643
28017
  * This is a no-op if the overlay has not been presented yet. If you want
@@ -27699,9 +28073,9 @@ class Popover {
27699
28073
  const { onLifecycle, parentPopover, dismissOnSelect, side, arrow, htmlAttributes, focusTrap } = this;
27700
28074
  const desktop = isPlatform('desktop');
27701
28075
  const enableArrow = arrow && !parentPopover;
27702
- return (hAsync(Host, Object.assign({ key: '16866c02534968c982cf4730d2936d03a5107c8b', "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
28076
+ return (hAsync(Host, Object.assign({ key: '42863f748c93f709d433931d969230137b37d42d', "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
27703
28077
  zIndex: `${20000 + this.overlayIndex}`,
27704
- }, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && hAsync("ion-backdrop", { key: '0df258601a4d30df3c27aa8234a7d5e056c3ecbb', tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), hAsync("div", { key: 'f94e80ed996b957b5cd09b826472b4f60e8fcc78', class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && hAsync("div", { key: '185ce22f6386e8444a9cc7b8818dbfc16c463c99', class: "popover-arrow", part: "arrow" }), hAsync("div", { key: '206202b299404e110de5397b229678cca18568d3', class: "popover-content", part: "content" }, hAsync("slot", { key: 'ee543a0b92d6e35a837c0a0e4617c7b0fc4ad0b0' })))));
28078
+ }, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && hAsync("ion-backdrop", { key: '22b6d82178b52158b76ab3fd9a7dd738fd6e4bbf', tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), hAsync("div", { key: 'b76335c64e992a964ed3fb91d17a992c3474b4cd', class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && hAsync("div", { key: '018c846c32e7ff7fa010528e6b37a17e5f03c84c', class: "popover-arrow", part: "arrow" }), hAsync("div", { key: '350c468c80052da3a07768bceab98fe159c35a43', class: "popover-content", part: "content" }, hAsync("slot", { key: '686443c17ac9873d33905c1cdb67e6d6da675282' })))));
27705
28079
  }
27706
28080
  get el() { return getElement(this); }
27707
28081
  static get watchers() { return {
@@ -28051,6 +28425,10 @@ class RadioGroup {
28051
28425
  this.helperTextId = `${this.inputId}-helper-text`;
28052
28426
  this.errorTextId = `${this.inputId}-error-text`;
28053
28427
  this.labelId = `${this.inputId}-lbl`;
28428
+ /**
28429
+ * Track validation state for proper aria-live announcements.
28430
+ */
28431
+ this.isInvalid = false;
28054
28432
  /**
28055
28433
  * If `true`, the radios can be deselected.
28056
28434
  */
@@ -28132,6 +28510,18 @@ class RadioGroup {
28132
28510
  this.labelId = label.id = this.name + '-lbl';
28133
28511
  }
28134
28512
  }
28513
+ // Always set initial state
28514
+ this.isInvalid = checkInvalidState(this.el);
28515
+ }
28516
+ componentWillLoad() {
28517
+ this.hintTextId = this.getHintTextId();
28518
+ }
28519
+ disconnectedCallback() {
28520
+ // Clean up validation observer to prevent memory leaks.
28521
+ if (this.validationObserver) {
28522
+ this.validationObserver.disconnect();
28523
+ this.validationObserver = undefined;
28524
+ }
28135
28525
  }
28136
28526
  getRadios() {
28137
28527
  return Array.from(this.el.querySelectorAll('ion-radio'));
@@ -28207,16 +28597,16 @@ class RadioGroup {
28207
28597
  * Renders the helper text or error text values
28208
28598
  */
28209
28599
  renderHintText() {
28210
- const { helperText, errorText, helperTextId, errorTextId } = this;
28600
+ const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
28211
28601
  const hasHintText = !!helperText || !!errorText;
28212
28602
  if (!hasHintText) {
28213
28603
  return;
28214
28604
  }
28215
- return (hAsync("div", { class: "radio-group-top" }, hAsync("div", { id: helperTextId, class: "helper-text" }, helperText), hAsync("div", { id: errorTextId, class: "error-text" }, errorText)));
28605
+ 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)));
28216
28606
  }
28217
- getHintTextID() {
28218
- const { el, helperText, errorText, helperTextId, errorTextId } = this;
28219
- if (el.classList.contains('ion-touched') && el.classList.contains('ion-invalid') && errorText) {
28607
+ getHintTextId() {
28608
+ const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
28609
+ if (isInvalid && errorText) {
28220
28610
  return errorTextId;
28221
28611
  }
28222
28612
  if (helperText) {
@@ -28228,7 +28618,7 @@ class RadioGroup {
28228
28618
  const { label, labelId, el, name, value } = this;
28229
28619
  const mode = getIonMode$1(this);
28230
28620
  renderHiddenInput(true, el, name, value, false);
28231
- 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' }))));
28621
+ 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' }))));
28232
28622
  }
28233
28623
  get el() { return getElement(this); }
28234
28624
  static get watchers() { return {
@@ -28248,6 +28638,8 @@ class RadioGroup {
28248
28638
  "value": [1032],
28249
28639
  "helperText": [1, "helper-text"],
28250
28640
  "errorText": [1, "error-text"],
28641
+ "isInvalid": [32],
28642
+ "hintTextId": [32],
28251
28643
  "setFocus": [64]
28252
28644
  },
28253
28645
  "$listeners$": [[4, "keydown", "onKeydown"]],
@@ -33376,7 +33768,7 @@ class Select {
33376
33768
  }
33377
33769
  componentWillLoad() {
33378
33770
  this.inheritedAttributes = inheritAttributes$1(this.el, ['aria-label']);
33379
- this.hintTextID = this.getHintTextID();
33771
+ this.hintTextId = this.getHintTextId();
33380
33772
  }
33381
33773
  componentDidLoad() {
33382
33774
  /**
@@ -33555,13 +33947,18 @@ class Select {
33555
33947
  .filter((cls) => cls !== 'hydrated')
33556
33948
  .join(' ');
33557
33949
  const optClass = `${OPTION_CLASS} ${copyClasses}`;
33950
+ const isSelected = isOptionSelected(selectValue, value, this.compareWith);
33558
33951
  return {
33559
- role: isOptionSelected(selectValue, value, this.compareWith) ? 'selected' : '',
33952
+ role: isSelected ? 'selected' : '',
33560
33953
  text: option.textContent,
33561
33954
  cssClass: optClass,
33562
33955
  handler: () => {
33563
33956
  this.setValue(value);
33564
33957
  },
33958
+ htmlAttributes: {
33959
+ 'aria-checked': isSelected ? 'true' : 'false',
33960
+ role: 'radio',
33961
+ },
33565
33962
  };
33566
33963
  });
33567
33964
  // Add "cancel" button
@@ -33875,9 +34272,9 @@ class Select {
33875
34272
  }
33876
34273
  renderListbox() {
33877
34274
  const { disabled, inputId, isExpanded, required } = this;
33878
- 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) }));
34275
+ 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) }));
33879
34276
  }
33880
- getHintTextID() {
34277
+ getHintTextId() {
33881
34278
  const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
33882
34279
  if (isInvalid && errorText) {
33883
34280
  return errorTextId;
@@ -33942,7 +34339,7 @@ class Select {
33942
34339
  * TODO(FW-5592): Remove hasStartEndSlots condition
33943
34340
  */
33944
34341
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || isExpanded || hasStartEndSlots));
33945
- return (hAsync(Host, { key: '35b5e18e6f79a802ff2d46d1242e80ff755cc0b9', onClick: this.onClick, class: createColorClasses$1(this.color, {
34342
+ return (hAsync(Host, { key: 'd8026835993d0e6dce747098f741a06ae4e4f54d', onClick: this.onClick, class: createColorClasses$1(this.color, {
33946
34343
  [mode]: true,
33947
34344
  'in-item': inItem,
33948
34345
  'in-item-color': hostContext('ion-item.ion-color', el),
@@ -33960,7 +34357,7 @@ class Select {
33960
34357
  [`select-justify-${justify}`]: justifyEnabled,
33961
34358
  [`select-shape-${shape}`]: shape !== undefined,
33962
34359
  [`select-label-placement-${labelPlacement}`]: true,
33963
- }) }, hAsync("label", { key: '6005b34a0c50bc4d7653a4276bc232ecd02e083c', class: "select-wrapper", id: "select-label", onClick: this.onLabelClick }, this.renderLabelContainer(), hAsync("div", { key: 'c7e07aa81ae856c057f16275dd058f37c5670a47', class: "select-wrapper-inner" }, hAsync("slot", { key: '7fc2deefe0424404caacdbbd9e08ed43ba55d28a', name: "start" }), hAsync("div", { key: '157d74ee717b1bc30b5f1c233a09b0c8456aa68e', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), hAsync("slot", { key: 'ea66db304528b82bf9317730b6dce3db2612f235', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && hAsync("div", { key: '786eb1530b7476f0615d4e7c0bf4e7e4dc66509c', class: "select-highlight" })), this.renderBottomContent()));
34360
+ }) }, hAsync("label", { key: 'fcfb40209d6d07d49c7fdca4884b31abf6ac2567', class: "select-wrapper", id: "select-label", onClick: this.onLabelClick }, this.renderLabelContainer(), hAsync("div", { key: 'f191664f2290c3890bde1156157c83a6ff17dbe2', class: "select-wrapper-inner" }, hAsync("slot", { key: '317a28d1115b4214f291e228ce0fe6fc782e57d5', name: "start" }), hAsync("div", { key: 'db68e18abd5ca3a1023d7c7b58bf89893ae18073', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), hAsync("slot", { key: '4274e042267c2234a198b0f65c89477898d08130', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && hAsync("div", { key: '2e2eb1ee2b2791e0683d9afb186fde6e938ca59c', class: "select-highlight" })), this.renderBottomContent()));
33964
34361
  }
33965
34362
  get el() { return getElement(this); }
33966
34363
  static get watchers() { return {
@@ -34002,7 +34399,7 @@ class Select {
34002
34399
  "isExpanded": [32],
34003
34400
  "hasFocus": [32],
34004
34401
  "isInvalid": [32],
34005
- "hintTextID": [32],
34402
+ "hintTextId": [32],
34006
34403
  "open": [64]
34007
34404
  },
34008
34405
  "$listeners$": undefined,
@@ -36473,6 +36870,10 @@ class Toggle {
36473
36870
  this.inheritedAttributes = {};
36474
36871
  this.didLoad = false;
36475
36872
  this.activated = false;
36873
+ /**
36874
+ * Track validation state for proper aria-live announcements.
36875
+ */
36876
+ this.isInvalid = false;
36476
36877
  /**
36477
36878
  * The name of the control, which is submitted with the form data.
36478
36879
  */
@@ -36586,15 +36987,18 @@ class Toggle {
36586
36987
  });
36587
36988
  }
36588
36989
  async connectedCallback() {
36990
+ const { didLoad, el } = this;
36589
36991
  /**
36590
36992
  * If we have not yet rendered
36591
36993
  * ion-toggle, then toggleTrack is not defined.
36592
36994
  * But if we are moving ion-toggle via appendChild,
36593
36995
  * then toggleTrack will be defined.
36594
36996
  */
36595
- if (this.didLoad) {
36997
+ if (didLoad) {
36596
36998
  this.setupGesture();
36597
36999
  }
37000
+ // Always set initial state
37001
+ this.isInvalid = checkInvalidState(el);
36598
37002
  }
36599
37003
  componentDidLoad() {
36600
37004
  this.setupGesture();
@@ -36605,9 +37009,15 @@ class Toggle {
36605
37009
  this.gesture.destroy();
36606
37010
  this.gesture = undefined;
36607
37011
  }
37012
+ // Clean up validation observer to prevent memory leaks.
37013
+ if (this.validationObserver) {
37014
+ this.validationObserver.disconnect();
37015
+ this.validationObserver = undefined;
37016
+ }
36608
37017
  }
36609
37018
  componentWillLoad() {
36610
37019
  this.inheritedAttributes = Object.assign({}, inheritAriaAttributes(this.el));
37020
+ this.hintTextId = this.getHintTextId();
36611
37021
  }
36612
37022
  onStart() {
36613
37023
  this.activated = true;
@@ -36648,9 +37058,9 @@ class Toggle {
36648
37058
  get hasLabel() {
36649
37059
  return this.el.textContent !== '';
36650
37060
  }
36651
- getHintTextID() {
36652
- const { el, helperText, errorText, helperTextId, errorTextId } = this;
36653
- if (el.classList.contains('ion-touched') && el.classList.contains('ion-invalid') && errorText) {
37061
+ getHintTextId() {
37062
+ const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
37063
+ if (isInvalid && errorText) {
36654
37064
  return errorTextId;
36655
37065
  }
36656
37066
  if (helperText) {
@@ -36663,7 +37073,7 @@ class Toggle {
36663
37073
  * This element should only be rendered if hint text is set.
36664
37074
  */
36665
37075
  renderHintText() {
36666
- const { helperText, errorText, helperTextId, errorTextId } = this;
37076
+ const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this;
36667
37077
  /**
36668
37078
  * undefined and empty string values should
36669
37079
  * be treated as not having helper/error text.
@@ -36672,15 +37082,15 @@ class Toggle {
36672
37082
  if (!hasHintText) {
36673
37083
  return;
36674
37084
  }
36675
- 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)));
37085
+ 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)));
36676
37086
  }
36677
37087
  render() {
36678
- const { activated, alignment, checked, color, disabled, el, errorTextId, hasLabel, inheritedAttributes, inputId, inputLabelId, justify, labelPlacement, name, required, } = this;
37088
+ const { activated, alignment, checked, color, disabled, el, hasLabel, inheritedAttributes, inputId, inputLabelId, justify, labelPlacement, name, required, } = this;
36679
37089
  const mode = getIonMode$1(this);
36680
37090
  const value = this.getValue();
36681
37091
  const rtl = isRTL$1(el) ? 'rtl' : 'ltr';
36682
37092
  renderHiddenInput(true, el, name, checked ? value : '', disabled);
36683
- 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, {
37093
+ 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, {
36684
37094
  [mode]: true,
36685
37095
  'in-item': hostContext('ion-item', el),
36686
37096
  'toggle-activated': activated,
@@ -36690,10 +37100,10 @@ class Toggle {
36690
37100
  [`toggle-alignment-${alignment}`]: alignment !== undefined,
36691
37101
  [`toggle-label-placement-${labelPlacement}`]: true,
36692
37102
  [`toggle-${rtl}`]: true,
36693
- }) }, 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: {
37103
+ }) }, 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: {
36694
37104
  'label-text-wrapper': true,
36695
37105
  'label-text-wrapper-hidden': !hasLabel,
36696
- }, part: "label", id: inputLabelId, onClick: this.onDivLabelClick }, hAsync("slot", { key: '8322b9d54dc7edeb4e16fefcde9f7ebca8d5c3e1' }), this.renderHintText()), hAsync("div", { key: 'fe6984143db817a7b3020a3f57cf5418fc3dcc0e', class: "native-wrapper" }, this.renderToggleControl()))));
37106
+ }, part: "label", id: inputLabelId, onClick: this.onDivLabelClick }, hAsync("slot", { key: '7b162b7dd27199cca2a4c995276a18b9f8e44aaf' }), this.renderHintText()), hAsync("div", { key: 'd13c34bd42fca01cc73ddb4ea7e471b33a282a3e', class: "native-wrapper" }, this.renderToggleControl()))));
36697
37107
  }
36698
37108
  get el() { return getElement(this); }
36699
37109
  static get watchers() { return {
@@ -36719,7 +37129,9 @@ class Toggle {
36719
37129
  "justify": [1],
36720
37130
  "alignment": [1],
36721
37131
  "required": [4],
36722
- "activated": [32]
37132
+ "activated": [32],
37133
+ "isInvalid": [32],
37134
+ "hintTextId": [32]
36723
37135
  },
36724
37136
  "$listeners$": undefined,
36725
37137
  "$lazyBundleId$": "-",