@ionic/core 9.0.0 → 9.0.1-nightly.20260820

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 (594) hide show
  1. package/components/index.js +1 -1
  2. package/components/ion-accordion-group.js +1 -1
  3. package/components/ion-accordion.js +1 -1
  4. package/components/ion-action-sheet.js +1 -1
  5. package/components/ion-alert.js +1 -1
  6. package/components/ion-app.js +1 -1
  7. package/components/ion-avatar.js +1 -1
  8. package/components/ion-back-button.js +1 -1
  9. package/components/ion-backdrop.js +1 -1
  10. package/components/ion-badge.js +1 -1
  11. package/components/ion-breadcrumb.js +1 -1
  12. package/components/ion-breadcrumbs.js +1 -1
  13. package/components/ion-button.js +1 -1
  14. package/components/ion-buttons.js +1 -1
  15. package/components/ion-card-content.js +1 -1
  16. package/components/ion-card-header.js +1 -1
  17. package/components/ion-card-subtitle.js +1 -1
  18. package/components/ion-card-title.js +1 -1
  19. package/components/ion-card.js +1 -1
  20. package/components/ion-checkbox.js +1 -1
  21. package/components/ion-chip.js +1 -1
  22. package/components/ion-col.js +1 -1
  23. package/components/ion-content.js +1 -1
  24. package/components/ion-datetime-button.js +1 -1
  25. package/components/ion-datetime.js +1 -1
  26. package/components/ion-fab-button.js +1 -1
  27. package/components/ion-fab-list.js +1 -1
  28. package/components/ion-fab.js +1 -1
  29. package/components/ion-footer.js +1 -1
  30. package/components/ion-grid.js +1 -1
  31. package/components/ion-header.js +1 -1
  32. package/components/ion-icon.js +1 -1
  33. package/components/ion-img.js +1 -1
  34. package/components/ion-infinite-scroll-content.js +1 -1
  35. package/components/ion-infinite-scroll.js +1 -1
  36. package/components/ion-input-otp.js +1 -1
  37. package/components/ion-input-password-toggle.js +1 -1
  38. package/components/ion-input.js +1 -1
  39. package/components/ion-item-divider.js +1 -1
  40. package/components/ion-item-group.js +1 -1
  41. package/components/ion-item-option.js +1 -1
  42. package/components/ion-item-options.js +1 -1
  43. package/components/ion-item-sliding.js +1 -1
  44. package/components/ion-item.js +1 -1
  45. package/components/ion-label.js +1 -1
  46. package/components/ion-list-header.js +1 -1
  47. package/components/ion-list.js +1 -1
  48. package/components/ion-loading.js +1 -1
  49. package/components/ion-menu-button.js +1 -1
  50. package/components/ion-menu-toggle.js +1 -1
  51. package/components/ion-menu.js +1 -1
  52. package/components/ion-modal.js +1 -1
  53. package/components/ion-nav-link.js +1 -1
  54. package/components/ion-nav.js +1 -1
  55. package/components/ion-note.js +1 -1
  56. package/components/ion-picker-column-option.js +1 -1
  57. package/components/ion-picker-column.js +1 -1
  58. package/components/ion-picker.js +1 -1
  59. package/components/ion-popover.js +1 -1
  60. package/components/ion-progress-bar.js +1 -1
  61. package/components/ion-radio-group.js +1 -1
  62. package/components/ion-radio.js +1 -1
  63. package/components/ion-range.js +1 -1
  64. package/components/ion-refresher-content.js +1 -1
  65. package/components/ion-refresher.js +1 -1
  66. package/components/ion-reorder-group.js +1 -1
  67. package/components/ion-reorder.js +1 -1
  68. package/components/ion-ripple-effect.js +1 -1
  69. package/components/ion-route-redirect.js +1 -1
  70. package/components/ion-route.js +1 -1
  71. package/components/ion-router-link.js +1 -1
  72. package/components/ion-router-outlet.js +1 -1
  73. package/components/ion-router.js +1 -1
  74. package/components/ion-row.js +1 -1
  75. package/components/ion-searchbar.js +1 -1
  76. package/components/ion-segment-button.js +1 -1
  77. package/components/ion-segment-content.js +1 -1
  78. package/components/ion-segment-view.js +1 -1
  79. package/components/ion-segment.js +1 -1
  80. package/components/ion-select-modal.js +1 -1
  81. package/components/ion-select-option.js +1 -1
  82. package/components/ion-select-popover.js +1 -1
  83. package/components/ion-select.js +1 -1
  84. package/components/ion-skeleton-text.js +1 -1
  85. package/components/ion-spinner.js +1 -1
  86. package/components/ion-split-pane.js +1 -1
  87. package/components/ion-tab-bar.js +1 -1
  88. package/components/ion-tab-button.js +1 -1
  89. package/components/ion-tab.js +1 -1
  90. package/components/ion-tabs.js +1 -1
  91. package/components/ion-text.js +1 -1
  92. package/components/ion-textarea.js +1 -1
  93. package/components/ion-thumbnail.js +1 -1
  94. package/components/ion-title.js +1 -1
  95. package/components/ion-toast.js +1 -1
  96. package/components/ion-toggle.js +1 -1
  97. package/components/ion-toolbar.js +1 -1
  98. package/components/{p-63OhffQv.js → p-66ogmUZU.js} +1 -1
  99. package/components/p-6Vp915Y7.js +4 -0
  100. package/components/p-7PNwKFZi.js +4 -0
  101. package/components/{p-G0TxqHfe.js → p-A8MJRBIY.js} +1 -1
  102. package/components/p-AQcCdH2_.js +4 -0
  103. package/{dist/ionic/p-Dn0mqQ_R.js → components/p-B6x5_b9w.js} +1 -1
  104. package/components/p-B8MQjdvk.js +4 -0
  105. package/components/p-BA_4ZIEg.js +4 -0
  106. package/components/p-BFtL8t1r.js +4 -0
  107. package/components/{p-DaA_8eqt.js → p-BMfgF-Tv.js} +1 -1
  108. package/components/p-BPDxVIRr.js +4 -0
  109. package/components/p-BSARlp49.js +4 -0
  110. package/components/p-B_gJaBk0.js +4 -0
  111. package/components/p-BdwCtX8Y.js +4 -0
  112. package/components/p-Bg4OwDwb.js +4 -0
  113. package/components/{p-DV85C0e0.js → p-BgUIV8NQ.js} +1 -1
  114. package/components/p-Bnc0m4SW.js +4 -0
  115. package/components/p-BpLt_Ptn.js +4 -0
  116. package/components/p-BqBDq1Ma.js +4 -0
  117. package/components/{p-C_phlPMC.js → p-BrFaQbGY.js} +1 -1
  118. package/{dist/ionic/p-Cdjxf_yg.js → components/p-BuPAFTWI.js} +1 -1
  119. package/components/p-Bx2saTHs.js +4 -0
  120. package/components/p-BxhE2W85.js +4 -0
  121. package/components/p-CHswSpKy.js +4 -0
  122. package/components/{p-fruGqVHh.js → p-CQAjyETU.js} +1 -1
  123. package/components/{p-1jI5oW-W.js → p-CR9OgE6N.js} +1 -1
  124. package/components/p-CWETxTjE.js +4 -0
  125. package/components/p-CaZeZIL2.js +4 -0
  126. package/components/p-CaiZOhfC.js +4 -0
  127. package/components/p-CgvDC7hC.js +4 -0
  128. package/components/{p-BqPNzJf6.js → p-CqyGR9Aq.js} +1 -1
  129. package/components/{p-UIBJkZf8.js → p-D0YpjgON.js} +1 -1
  130. package/components/p-D7ysFE2B.js +4 -0
  131. package/{dist/ionic/p-4eOQC00Z.js → components/p-DCWfzDM8.js} +1 -1
  132. package/components/{p-DwpKZ6rl.js → p-DDdkefwf.js} +1 -1
  133. package/components/{p-DzRT60Tw.js → p-DEW7CnUc.js} +1 -1
  134. package/components/p-DQ1IPvZO.js +4 -0
  135. package/components/p-DcOH6-o5.js +4 -0
  136. package/components/{p-DD5fQ4EQ.js → p-DfdYCsov.js} +1 -1
  137. package/components/{p-DSzSbVP2.js → p-DhOoEIAs.js} +1 -1
  138. package/components/{p-DM-PrAoh.js → p-Dl_7b_UJ.js} +1 -1
  139. package/components/p-DqAI6tg7.js +4 -0
  140. package/components/p-DrehWDfv.js +4 -0
  141. package/components/{p-ryyf_ItD.js → p-DysqCsJu.js} +1 -1
  142. package/components/p-H1f2qsk4.js +4 -0
  143. package/components/p-HVYBAhFx.js +4 -0
  144. package/components/{p-CbhUdtjf.js → p-Kmrg3Fed.js} +1 -1
  145. package/components/{p-Bjig0DJK.js → p-RFfE9hF6.js} +1 -1
  146. package/{dist/ionic/p-CBWAXjA5.js → components/p-SR-LLqp_.js} +1 -1
  147. package/components/p-eFI3mtEX.js +4 -0
  148. package/components/p-gFwXiYC_.js +4 -0
  149. package/components/p-tX3UxCnU.js +4 -0
  150. package/components/p-v2NpoOHp.js +4 -0
  151. package/dist/cjs/{animation-C0mOHzej.js → animation-D-OqR4a4.js} +1 -1
  152. package/dist/cjs/{app-globals-BREG4twP.js → app-globals-BzgwARwJ.js} +1 -1
  153. package/dist/cjs/{button-active-CVMevT9a.js → button-active-BlWSD7uK.js} +2 -2
  154. package/dist/cjs/{format-pp0Du3K-.js → format-D7ig6Vm0.js} +1 -1
  155. package/dist/cjs/{framework-delegate-Dfo5XsGv.js → framework-delegate-BZUx4TnE.js} +1 -1
  156. package/dist/cjs/{gesture-controller-BDUH7687.js → gesture-controller-CeJslptU.js} +6 -14
  157. package/dist/cjs/{hardware-back-button-fqpYh-kd.js → hardware-back-button-JOAEFSzc.js} +1 -1
  158. package/dist/cjs/{helpers-YPQybDph.js → helpers-Dj5o76mq.js} +1 -1
  159. package/dist/cjs/{index-BLdJCcJY.js → index-2sO-zkZ2.js} +4 -4
  160. package/dist/cjs/{index-uvry__L4.js → index-BrVMoqUk.js} +3 -1
  161. package/dist/cjs/{index-zVCah4Uz.js → index-C8zH6b3d.js} +2 -2
  162. package/dist/cjs/{index-DXsPSne6.js → index-CZ6vzt_q.js} +5 -5
  163. package/dist/cjs/{index-DDg31ZF5.js → index-Csue6G3m.js} +2 -2
  164. package/dist/cjs/{index-DwlRtFZe.js → index-DRPqwSvU.js} +1 -1
  165. package/dist/cjs/{index-B7zJsYWS.js → index-EJLjthTK.js} +1 -2
  166. package/dist/cjs/index.cjs.js +14 -14
  167. package/dist/cjs/{input-shims-Cbu1fcye.js → input-shims-Bh7bnt2v.js} +3 -3
  168. package/dist/cjs/{input.utils-BZdMWVrt.js → input.utils-Cq3g9uHy.js} +1 -1
  169. package/dist/cjs/ion-accordion_2.cjs.entry.js +335 -364
  170. package/dist/cjs/ion-action-sheet.cjs.entry.js +60 -140
  171. package/dist/cjs/ion-alert.cjs.entry.js +67 -159
  172. package/dist/cjs/ion-app_8.cjs.entry.js +163 -258
  173. package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -8
  174. package/dist/cjs/ion-back-button.cjs.entry.js +21 -45
  175. package/dist/cjs/ion-backdrop.cjs.entry.js +14 -18
  176. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +117 -195
  177. package/dist/cjs/ion-button_2.cjs.entry.js +61 -130
  178. package/dist/cjs/ion-card_5.cjs.entry.js +28 -80
  179. package/dist/cjs/ion-checkbox.cjs.entry.js +98 -147
  180. package/dist/cjs/ion-chip.cjs.entry.js +10 -16
  181. package/dist/cjs/ion-col_3.cjs.entry.js +6 -126
  182. package/dist/cjs/ion-datetime-button.cjs.entry.js +232 -248
  183. package/dist/cjs/ion-datetime.cjs.entry.js +775 -953
  184. package/dist/cjs/ion-fab_3.cjs.entry.js +78 -136
  185. package/dist/cjs/ion-img.cjs.entry.js +11 -31
  186. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +71 -98
  187. package/dist/cjs/ion-input-otp.cjs.entry.js +352 -424
  188. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +14 -29
  189. package/dist/cjs/ion-input.cjs.entry.js +158 -302
  190. package/dist/cjs/ion-item-option_3.cjs.entry.js +45 -87
  191. package/dist/cjs/ion-item_8.cjs.entry.js +61 -157
  192. package/dist/cjs/ion-loading.cjs.entry.js +54 -131
  193. package/dist/cjs/ion-menu_3.cjs.entry.js +94 -158
  194. package/dist/cjs/ion-modal.cjs.entry.js +206 -362
  195. package/dist/cjs/ion-nav_2.cjs.entry.js +26 -78
  196. package/dist/cjs/ion-picker-column-option.cjs.entry.js +23 -33
  197. package/dist/cjs/ion-picker-column.cjs.entry.js +389 -410
  198. package/dist/cjs/ion-picker.cjs.entry.js +390 -400
  199. package/dist/cjs/ion-popover.cjs.entry.js +184 -292
  200. package/dist/cjs/ion-progress-bar.cjs.entry.js +23 -29
  201. package/dist/cjs/ion-radio_2.cjs.entry.js +128 -201
  202. package/dist/cjs/ion-range.cjs.entry.js +223 -293
  203. package/dist/cjs/ion-refresher_2.cjs.entry.js +79 -151
  204. package/dist/cjs/ion-reorder_2.cjs.entry.js +19 -49
  205. package/dist/cjs/ion-ripple-effect.cjs.entry.js +13 -13
  206. package/dist/cjs/ion-route_4.cjs.entry.js +45 -144
  207. package/dist/cjs/ion-searchbar.cjs.entry.js +182 -268
  208. package/dist/cjs/ion-segment-content.cjs.entry.js +1 -1
  209. package/dist/cjs/ion-segment-view.cjs.entry.js +12 -24
  210. package/dist/cjs/ion-segment_2.cjs.entry.js +111 -154
  211. package/dist/cjs/ion-select-modal.cjs.entry.js +19 -21
  212. package/dist/cjs/ion-select_3.cjs.entry.js +151 -319
  213. package/dist/cjs/ion-spinner.cjs.entry.js +6 -21
  214. package/dist/cjs/ion-split-pane.cjs.entry.js +14 -27
  215. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +32 -89
  216. package/dist/cjs/ion-tab_2.cjs.entry.js +22 -49
  217. package/dist/cjs/ion-text.cjs.entry.js +2 -8
  218. package/dist/cjs/ion-textarea.cjs.entry.js +139 -256
  219. package/dist/cjs/ion-toast.cjs.entry.js +106 -221
  220. package/dist/cjs/ion-toggle.cjs.entry.js +114 -165
  221. package/dist/cjs/{ionic-global-k6hOWWpn.js → ionic-global-DvgIzM2F.js} +1 -1
  222. package/dist/cjs/ionic.cjs.js +4 -4
  223. package/dist/cjs/{ios.transition-zTmJz8T-.js → ios.transition-zIgdoSYe.js} +4 -4
  224. package/dist/cjs/{item-multiple-inputs-BdYSbfKN.js → item-multiple-inputs-DG-ZGm6j.js} +1 -1
  225. package/dist/cjs/loader.cjs.js +4 -4
  226. package/dist/cjs/{md.transition-nb_4pUXu.js → md.transition-CXeJ9rfh.js} +4 -4
  227. package/dist/cjs/{overlays-KaNVDNqC.js → overlays-Bg0auTQa.js} +6 -6
  228. package/dist/cjs/{select-option-render-pULCGldr.js → select-option-render-7m1WdFzF.js} +2 -2
  229. package/dist/cjs/{slot-mutation-controller-DPHmqXdV.js → slot-mutation-controller-BJEJzx_e.js} +1 -1
  230. package/dist/cjs/{status-tap-o9IIymsP.js → status-tap-DxbUM5XX.js} +3 -3
  231. package/dist/cjs/{swipe-back-B7X9VOlH.js → swipe-back-F_DBt-Aw.js} +4 -4
  232. package/dist/collection/components/accordion/accordion.js +310 -314
  233. package/dist/collection/components/accordion-group/accordion-group.js +23 -46
  234. package/dist/collection/components/action-sheet/action-sheet.js +49 -128
  235. package/dist/collection/components/action-sheet/test/basic/fixture.js +0 -3
  236. package/dist/collection/components/alert/alert.js +56 -147
  237. package/dist/collection/components/app/app.js +0 -3
  238. package/dist/collection/components/back-button/back-button.js +19 -42
  239. package/dist/collection/components/backdrop/backdrop.js +14 -16
  240. package/dist/collection/components/badge/badge.js +0 -6
  241. package/dist/collection/components/breadcrumb/breadcrumb.js +29 -90
  242. package/dist/collection/components/breadcrumbs/breadcrumbs.js +87 -102
  243. package/dist/collection/components/button/button.js +59 -127
  244. package/dist/collection/components/buttons/buttons.js +15 -13
  245. package/dist/collection/components/card/card.js +20 -53
  246. package/dist/collection/components/card-header/card-header.js +8 -12
  247. package/dist/collection/components/card-subtitle/card-subtitle.js +0 -6
  248. package/dist/collection/components/card-title/card-title.js +0 -6
  249. package/dist/collection/components/checkbox/checkbox.js +95 -143
  250. package/dist/collection/components/chip/chip.js +10 -14
  251. package/dist/collection/components/col/col.js +0 -120
  252. package/dist/collection/components/content/content.js +60 -90
  253. package/dist/collection/components/datetime/datetime.js +762 -939
  254. package/dist/collection/components/datetime-button/datetime-button.js +229 -244
  255. package/dist/collection/components/fab/fab.js +13 -20
  256. package/dist/collection/components/fab-button/fab-button.js +54 -103
  257. package/dist/collection/components/fab-list/fab-list.js +11 -10
  258. package/dist/collection/components/footer/footer.js +43 -49
  259. package/dist/collection/components/grid/grid.js +6 -4
  260. package/dist/collection/components/header/header.js +23 -33
  261. package/dist/collection/components/img/img.js +9 -28
  262. package/dist/collection/components/infinite-scroll/infinite-scroll.js +66 -73
  263. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +3 -20
  264. package/dist/collection/components/input/input.js +154 -297
  265. package/dist/collection/components/input-otp/input-otp.js +350 -421
  266. package/dist/collection/components/input-password-toggle/input-password-toggle.js +13 -27
  267. package/dist/collection/components/item/item.js +37 -80
  268. package/dist/collection/components/item-divider/item-divider.js +10 -15
  269. package/dist/collection/components/item-option/item-option.js +20 -48
  270. package/dist/collection/components/item-options/item-options.js +7 -10
  271. package/dist/collection/components/item-sliding/item-sliding.js +16 -24
  272. package/dist/collection/components/label/label.js +4 -24
  273. package/dist/collection/components/list/list.js +6 -9
  274. package/dist/collection/components/list-header/list-header.js +0 -10
  275. package/dist/collection/components/loading/loading.js +46 -122
  276. package/dist/collection/components/menu/menu.js +55 -99
  277. package/dist/collection/components/menu-button/menu-button.js +19 -28
  278. package/dist/collection/components/menu-toggle/menu-toggle.js +13 -20
  279. package/dist/collection/components/modal/modal.js +196 -351
  280. package/dist/collection/components/modal/test/fixtures.js +0 -3
  281. package/dist/collection/components/nav/nav.js +12 -45
  282. package/dist/collection/components/nav/view-controller.js +1 -7
  283. package/dist/collection/components/nav-link/nav-link.js +9 -20
  284. package/dist/collection/components/note/note.js +0 -6
  285. package/dist/collection/components/picker/picker.js +388 -397
  286. package/dist/collection/components/picker-column/picker-column.js +389 -409
  287. package/dist/collection/components/picker-column-option/picker-column-option.js +21 -30
  288. package/dist/collection/components/popover/popover.js +176 -283
  289. package/dist/collection/components/popover/test/fixture.js +0 -1
  290. package/dist/collection/components/progress-bar/progress-bar.js +22 -26
  291. package/dist/collection/components/radio/radio.js +62 -98
  292. package/dist/collection/components/radio-group/radio-group.js +64 -99
  293. package/dist/collection/components/radio-group/test/fixtures.js +0 -2
  294. package/dist/collection/components/range/range.js +220 -289
  295. package/dist/collection/components/refresher/refresher.js +69 -102
  296. package/dist/collection/components/refresher-content/refresher-content.js +3 -40
  297. package/dist/collection/components/reorder/reorder.js +0 -1
  298. package/dist/collection/components/reorder-group/reorder-group.js +14 -43
  299. package/dist/collection/components/ripple-effect/ripple-effect.js +12 -11
  300. package/dist/collection/components/route/route.js +9 -38
  301. package/dist/collection/components/route-redirect/route-redirect.js +0 -31
  302. package/dist/collection/components/router/router.js +27 -35
  303. package/dist/collection/components/router/utils/matching.js +0 -1
  304. package/dist/collection/components/router-link/router-link.js +10 -35
  305. package/dist/collection/components/router-outlet/router-outlet.js +12 -34
  306. package/dist/collection/components/searchbar/searchbar.js +180 -265
  307. package/dist/collection/components/segment/segment.js +76 -113
  308. package/dist/collection/components/segment-button/segment-button.js +33 -37
  309. package/dist/collection/components/segment-view/segment-view.js +12 -23
  310. package/dist/collection/components/select/select.js +127 -240
  311. package/dist/collection/components/select-modal/select-modal.js +11 -12
  312. package/dist/collection/components/select-modal/test/fixtures.js +1 -8
  313. package/dist/collection/components/select-option/select-option.js +7 -44
  314. package/dist/collection/components/select-popover/select-popover.js +10 -25
  315. package/dist/collection/components/select-popover/test/fixtures.js +1 -8
  316. package/dist/collection/components/skeleton-text/skeleton-text.js +6 -10
  317. package/dist/collection/components/spinner/spinner.js +6 -19
  318. package/dist/collection/components/split-pane/split-pane.js +13 -25
  319. package/dist/collection/components/tab/tab.js +4 -15
  320. package/dist/collection/components/tab-bar/tab-bar.js +12 -30
  321. package/dist/collection/components/tab-button/tab-button.js +19 -56
  322. package/dist/collection/components/tabs/tabs.js +17 -31
  323. package/dist/collection/components/text/text.js +0 -6
  324. package/dist/collection/components/textarea/textarea.js +135 -251
  325. package/dist/collection/components/title/title.js +0 -16
  326. package/dist/collection/components/toast/toast.js +97 -211
  327. package/dist/collection/components/toggle/toggle.js +111 -161
  328. package/dist/collection/components/toolbar/toolbar.js +3 -8
  329. package/dist/collection/global/config.js +3 -1
  330. package/dist/collection/utils/gesture/gesture-controller.js +6 -14
  331. package/dist/collection/utils/sanitization/index.js +0 -1
  332. package/dist/collection/utils/test/playwright/page/event-spy.js +8 -9
  333. package/dist/collection/utils/test/press-keys.js +1 -4
  334. package/dist/docs.json +1 -1
  335. package/dist/esm/{animation-CGFdmGk9.js → animation-TxGPYeDn.js} +1 -1
  336. package/dist/esm/{app-globals-CYmMeGdU.js → app-globals-Do8rJest.js} +1 -1
  337. package/dist/esm/{button-active-BDOsVAiZ.js → button-active-ChA4D-ml.js} +2 -2
  338. package/dist/esm/{format-Dcwga61t.js → format-CVk5e_GP.js} +2 -2
  339. package/dist/esm/{framework-delegate-BHTU2Ip9.js → framework-delegate-DaLWnISz.js} +1 -1
  340. package/dist/esm/{gesture-controller-TXPDHL13.js → gesture-controller-B_gJaBk0.js} +6 -14
  341. package/dist/esm/{hardware-back-button-gLJHMX_F.js → hardware-back-button-D8W4L0JP.js} +1 -1
  342. package/dist/esm/{helpers-CAGf8Wgp.js → helpers-BIgoInJU.js} +1 -1
  343. package/dist/esm/{index-DcPaH5uL.js → index-BmLuEdV7.js} +1 -1
  344. package/dist/esm/{index-T0JxBI8V.js → index-BmOR8tCv.js} +2 -2
  345. package/dist/esm/{index-CqneaaGd.js → index-C5ZdL0qp.js} +5 -5
  346. package/dist/esm/{index-WlteAIqz.js → index-C8Dsa6li.js} +4 -4
  347. package/dist/esm/{index-ChhhtsGZ.js → index-CKYcsw8f.js} +3 -1
  348. package/dist/esm/{index-Clc-28O1.js → index-DHw2lZxe.js} +2 -2
  349. package/dist/esm/{index-CKM1DdGm.js → index-elneMH8y.js} +1 -2
  350. package/dist/esm/index.js +14 -14
  351. package/dist/esm/{input-shims-B8sfni1e.js → input-shims-09NN97kF.js} +3 -3
  352. package/dist/esm/{input.utils-B1ValN_N.js → input.utils-BxyH9l1w.js} +1 -1
  353. package/dist/esm/ion-accordion_2.entry.js +335 -364
  354. package/dist/esm/ion-action-sheet.entry.js +60 -140
  355. package/dist/esm/ion-alert.entry.js +67 -159
  356. package/dist/esm/ion-app_8.entry.js +163 -258
  357. package/dist/esm/ion-avatar_3.entry.js +2 -8
  358. package/dist/esm/ion-back-button.entry.js +21 -45
  359. package/dist/esm/ion-backdrop.entry.js +14 -18
  360. package/dist/esm/ion-breadcrumb_2.entry.js +117 -195
  361. package/dist/esm/ion-button_2.entry.js +61 -130
  362. package/dist/esm/ion-card_5.entry.js +28 -80
  363. package/dist/esm/ion-checkbox.entry.js +98 -147
  364. package/dist/esm/ion-chip.entry.js +10 -16
  365. package/dist/esm/ion-col_3.entry.js +6 -126
  366. package/dist/esm/ion-datetime-button.entry.js +232 -248
  367. package/dist/esm/ion-datetime.entry.js +775 -953
  368. package/dist/esm/ion-fab_3.entry.js +78 -136
  369. package/dist/esm/ion-img.entry.js +11 -31
  370. package/dist/esm/ion-infinite-scroll_2.entry.js +71 -98
  371. package/dist/esm/ion-input-otp.entry.js +352 -424
  372. package/dist/esm/ion-input-password-toggle.entry.js +14 -29
  373. package/dist/esm/ion-input.entry.js +158 -302
  374. package/dist/esm/ion-item-option_3.entry.js +45 -87
  375. package/dist/esm/ion-item_8.entry.js +61 -157
  376. package/dist/esm/ion-loading.entry.js +54 -131
  377. package/dist/esm/ion-menu_3.entry.js +94 -158
  378. package/dist/esm/ion-modal.entry.js +206 -362
  379. package/dist/esm/ion-nav_2.entry.js +26 -78
  380. package/dist/esm/ion-picker-column-option.entry.js +23 -33
  381. package/dist/esm/ion-picker-column.entry.js +389 -410
  382. package/dist/esm/ion-picker.entry.js +390 -400
  383. package/dist/esm/ion-popover.entry.js +184 -292
  384. package/dist/esm/ion-progress-bar.entry.js +23 -29
  385. package/dist/esm/ion-radio_2.entry.js +128 -201
  386. package/dist/esm/ion-range.entry.js +223 -293
  387. package/dist/esm/ion-refresher_2.entry.js +79 -151
  388. package/dist/esm/ion-reorder_2.entry.js +19 -49
  389. package/dist/esm/ion-ripple-effect.entry.js +13 -13
  390. package/dist/esm/ion-route_4.entry.js +45 -144
  391. package/dist/esm/ion-searchbar.entry.js +182 -268
  392. package/dist/esm/ion-segment-content.entry.js +1 -1
  393. package/dist/esm/ion-segment-view.entry.js +12 -24
  394. package/dist/esm/ion-segment_2.entry.js +111 -154
  395. package/dist/esm/ion-select-modal.entry.js +19 -21
  396. package/dist/esm/ion-select_3.entry.js +151 -319
  397. package/dist/esm/ion-spinner.entry.js +6 -21
  398. package/dist/esm/ion-split-pane.entry.js +14 -27
  399. package/dist/esm/ion-tab-bar_2.entry.js +32 -89
  400. package/dist/esm/ion-tab_2.entry.js +22 -49
  401. package/dist/esm/ion-text.entry.js +2 -8
  402. package/dist/esm/ion-textarea.entry.js +139 -256
  403. package/dist/esm/ion-toast.entry.js +106 -221
  404. package/dist/esm/ion-toggle.entry.js +114 -165
  405. package/dist/esm/{ionic-global-BVB7BrLT.js → ionic-global-lrowsHfi.js} +1 -1
  406. package/dist/esm/ionic.js +5 -5
  407. package/dist/esm/{ios.transition-DXRCmcbC.js → ios.transition-BQhADrk1.js} +4 -4
  408. package/dist/esm/{item-multiple-inputs-rU8VaNNg.js → item-multiple-inputs-D_N3fDkD.js} +1 -1
  409. package/dist/esm/loader.js +5 -5
  410. package/dist/esm/{md.transition-BMngO4i_.js → md.transition-D58NpmRa.js} +4 -4
  411. package/dist/esm/{overlays-CPmIs9Ls.js → overlays-BpnIFlXI.js} +6 -6
  412. package/dist/esm/{select-option-render-C4m76VGH.js → select-option-render-lIuu64EV.js} +2 -2
  413. package/dist/esm/{slot-mutation-controller-DiE_C9un.js → slot-mutation-controller-rS_T3FDR.js} +1 -1
  414. package/dist/esm/{status-tap-CHB7KwIb.js → status-tap-CpFQMLl6.js} +3 -3
  415. package/dist/esm/{swipe-back-C9HW1bug.js → swipe-back-rmc7zeNW.js} +4 -4
  416. package/dist/ionic/index.esm.js +1 -1
  417. package/dist/ionic/ionic.esm.js +1 -1
  418. package/dist/ionic/p-05800a02.entry.js +4 -0
  419. package/dist/ionic/p-0eb50dca.entry.js +4 -0
  420. package/dist/ionic/p-16e9f542.entry.js +4 -0
  421. package/dist/ionic/p-18d532a3.entry.js +4 -0
  422. package/dist/ionic/p-1d694d39.entry.js +4 -0
  423. package/dist/ionic/p-1db2afb4.entry.js +4 -0
  424. package/dist/ionic/p-1df75f9e.entry.js +4 -0
  425. package/dist/ionic/p-295ff427.entry.js +4 -0
  426. package/dist/ionic/p-34b9379b.entry.js +4 -0
  427. package/dist/ionic/p-39a8d4e0.entry.js +4 -0
  428. package/dist/ionic/p-4437015c.entry.js +4 -0
  429. package/dist/ionic/p-478035a7.entry.js +4 -0
  430. package/dist/ionic/p-485fb218.entry.js +4 -0
  431. package/dist/ionic/p-48c859fe.entry.js +4 -0
  432. package/dist/ionic/p-49b9d405.entry.js +4 -0
  433. package/dist/ionic/p-56307aea.entry.js +4 -0
  434. package/dist/ionic/p-5ee2d7b1.entry.js +4 -0
  435. package/dist/ionic/p-5f216b79.entry.js +4 -0
  436. package/dist/ionic/p-61c799d1.entry.js +4 -0
  437. package/dist/ionic/p-63bbba8d.entry.js +4 -0
  438. package/dist/ionic/p-68507e70.entry.js +4 -0
  439. package/dist/ionic/{p-ded69ceb.entry.js → p-6f048604.entry.js} +1 -1
  440. package/dist/ionic/p-70ee8888.entry.js +4 -0
  441. package/dist/ionic/p-72ad7c64.entry.js +4 -0
  442. package/dist/ionic/p-75887ee0.entry.js +4 -0
  443. package/dist/ionic/p-873a315a.entry.js +4 -0
  444. package/dist/ionic/p-881b6954.entry.js +4 -0
  445. package/dist/ionic/p-886d9e66.entry.js +4 -0
  446. package/dist/ionic/p-8e007f11.entry.js +4 -0
  447. package/dist/ionic/p-8f464a8f.entry.js +4 -0
  448. package/dist/ionic/p-8f51110d.entry.js +4 -0
  449. package/dist/ionic/p-90ba736e.entry.js +4 -0
  450. package/dist/ionic/p-959df5f8.entry.js +4 -0
  451. package/dist/ionic/p-9e455875.entry.js +4 -0
  452. package/dist/ionic/{p-CBR_W98Z.js → p-9wczfs_v.js} +1 -1
  453. package/dist/ionic/p-B1Y7LZhV.js +4 -0
  454. package/dist/ionic/p-B5RyLYvl.js +4 -0
  455. package/dist/ionic/{p-CPcPmkGv.js → p-BQv5i5Kf.js} +1 -1
  456. package/{components/p-8FN7p701.js → dist/ionic/p-BZVE25Gu.js} +1 -1
  457. package/{components/p-DFvZn99E.js → dist/ionic/p-BZxjcGRP.js} +1 -1
  458. package/dist/ionic/p-B_gJaBk0.js +4 -0
  459. package/dist/ionic/p-BnGA34Pd.js +4 -0
  460. package/dist/ionic/p-ByLaqOPm.js +4 -0
  461. package/dist/ionic/p-C06QNN45.js +4 -0
  462. package/dist/ionic/p-C4IBDDj6.js +4 -0
  463. package/dist/ionic/p-CCVlNZ__.js +4 -0
  464. package/dist/ionic/{p-CMRtMbJc.js → p-CDBop-kz.js} +1 -1
  465. package/dist/ionic/p-CKYcsw8f.js +5 -0
  466. package/dist/ionic/p-CazSodad.js +4 -0
  467. package/{components/p-ia3IDdJS.js → dist/ionic/p-ClrlQU2y.js} +1 -1
  468. package/dist/ionic/{p-UIBJkZf8.js → p-D0YpjgON.js} +1 -1
  469. package/dist/ionic/p-D0dfUysx.js +4 -0
  470. package/dist/ionic/{p-BB0LlG4y.js → p-D9yvytgv.js} +1 -1
  471. package/{components/p-C5KYjZWD.js → dist/ionic/p-DF_Uqql8.js} +1 -1
  472. package/dist/ionic/{p-BYEAtHr-.js → p-DXJgZWgi.js} +1 -1
  473. package/dist/ionic/{p-D94_RztK.js → p-DdhHqKj-.js} +1 -1
  474. package/dist/ionic/p-De0eY881.js +4 -0
  475. package/dist/ionic/p-DgUL3JbO.js +4 -0
  476. package/dist/ionic/{p-7CBuOvEo.js → p-RzUn7cKs.js} +1 -1
  477. package/dist/ionic/p-VquyMbjp.js +4 -0
  478. package/dist/ionic/p-a0fee899.entry.js +4 -0
  479. package/dist/ionic/p-a54bcd16.entry.js +4 -0
  480. package/dist/ionic/p-aebc4d69.entry.js +4 -0
  481. package/dist/ionic/p-b5f37106.entry.js +4 -0
  482. package/dist/ionic/{p-40424a88.entry.js → p-b62bfce8.entry.js} +1 -1
  483. package/dist/ionic/p-b7a11b58.entry.js +4 -0
  484. package/dist/ionic/p-bbf6878c.entry.js +4 -0
  485. package/dist/ionic/p-c49165af.entry.js +4 -0
  486. package/dist/ionic/p-cad4eccf.entry.js +4 -0
  487. package/dist/ionic/p-cdc5115e.entry.js +4 -0
  488. package/dist/ionic/p-d3384a40.entry.js +4 -0
  489. package/dist/ionic/p-d8bae128.entry.js +4 -0
  490. package/dist/ionic/p-d8deff43.entry.js +4 -0
  491. package/dist/ionic/p-ddfb7e5f.entry.js +4 -0
  492. package/dist/ionic/p-e538f18d.entry.js +4 -0
  493. package/dist/ionic/p-f376876b.entry.js +4 -0
  494. package/dist/ionic/p-f521b13c.entry.js +4 -0
  495. package/dist/ionic/p-fbd83d4c.entry.js +4 -0
  496. package/hydrate/index.js +5420 -8359
  497. package/hydrate/index.mjs +5420 -8359
  498. package/package.json +1 -1
  499. package/components/p--m5cCjbK.js +0 -4
  500. package/components/p-B4uHHhPK.js +0 -4
  501. package/components/p-BNJOu1Q2.js +0 -4
  502. package/components/p-BOvLNVKq.js +0 -4
  503. package/components/p-BeamQXHF.js +0 -4
  504. package/components/p-BjluhQMI.js +0 -4
  505. package/components/p-BlsIikdZ.js +0 -4
  506. package/components/p-BrD9Xv62.js +0 -4
  507. package/components/p-BvJqoZ5R.js +0 -4
  508. package/components/p-Bz6z3Asd.js +0 -4
  509. package/components/p-C6HnVvHO.js +0 -4
  510. package/components/p-C7jvh5Wy.js +0 -4
  511. package/components/p-C9BGR5fy.js +0 -4
  512. package/components/p-CB-y1CdP.js +0 -4
  513. package/components/p-CHH3loEE.js +0 -4
  514. package/components/p-CJKUWjmg.js +0 -4
  515. package/components/p-CMLAwl_N.js +0 -4
  516. package/components/p-CejmQs3h.js +0 -4
  517. package/components/p-CtZqa4HM.js +0 -4
  518. package/components/p-D9qIVSWm.js +0 -4
  519. package/components/p-DE-3iMNW.js +0 -4
  520. package/components/p-DHFt2rdc.js +0 -4
  521. package/components/p-D_RCyzwu.js +0 -4
  522. package/components/p-D_tD8r3L.js +0 -4
  523. package/components/p-DjCtLZbF.js +0 -4
  524. package/components/p-Dmd2xqCe.js +0 -4
  525. package/components/p-G6JR-cr_.js +0 -4
  526. package/components/p-GG5GhznE.js +0 -4
  527. package/components/p-TXPDHL13.js +0 -4
  528. package/components/p-_IKFD3ID.js +0 -4
  529. package/components/p-dKq2jIum.js +0 -4
  530. package/components/p-iYhH60Tc.js +0 -4
  531. package/dist/ionic/p-06ec7136.entry.js +0 -4
  532. package/dist/ionic/p-09fe4fa3.entry.js +0 -4
  533. package/dist/ionic/p-10d45a07.entry.js +0 -4
  534. package/dist/ionic/p-208c8a07.entry.js +0 -4
  535. package/dist/ionic/p-212474fa.entry.js +0 -4
  536. package/dist/ionic/p-2eef1396.entry.js +0 -4
  537. package/dist/ionic/p-347e005d.entry.js +0 -4
  538. package/dist/ionic/p-3a0b3f1d.entry.js +0 -4
  539. package/dist/ionic/p-3b071259.entry.js +0 -4
  540. package/dist/ionic/p-4204184c.entry.js +0 -4
  541. package/dist/ionic/p-47464391.entry.js +0 -4
  542. package/dist/ionic/p-4f9c9126.entry.js +0 -4
  543. package/dist/ionic/p-5JsKPLJD.js +0 -4
  544. package/dist/ionic/p-5bc485c6.entry.js +0 -4
  545. package/dist/ionic/p-603a61e6.entry.js +0 -4
  546. package/dist/ionic/p-60576951.entry.js +0 -4
  547. package/dist/ionic/p-67a81d33.entry.js +0 -4
  548. package/dist/ionic/p-6affb775.entry.js +0 -4
  549. package/dist/ionic/p-6f120c25.entry.js +0 -4
  550. package/dist/ionic/p-71c82b60.entry.js +0 -4
  551. package/dist/ionic/p-79325ffe.entry.js +0 -4
  552. package/dist/ionic/p-7e4d51fa.entry.js +0 -4
  553. package/dist/ionic/p-7f5d4664.entry.js +0 -4
  554. package/dist/ionic/p-80ee82fc.entry.js +0 -4
  555. package/dist/ionic/p-84af7dbc.entry.js +0 -4
  556. package/dist/ionic/p-89ca830a.entry.js +0 -4
  557. package/dist/ionic/p-93b8ec8f.entry.js +0 -4
  558. package/dist/ionic/p-946f65c2.entry.js +0 -4
  559. package/dist/ionic/p-9c4b39fb.entry.js +0 -4
  560. package/dist/ionic/p-B1NEZUzQ.js +0 -4
  561. package/dist/ionic/p-B1ck5iy-.js +0 -4
  562. package/dist/ionic/p-B4FrqdW0.js +0 -4
  563. package/dist/ionic/p-C-94tAim.js +0 -4
  564. package/dist/ionic/p-C-eHZMYE.js +0 -4
  565. package/dist/ionic/p-CaRuIadB.js +0 -4
  566. package/dist/ionic/p-ChhhtsGZ.js +0 -5
  567. package/dist/ionic/p-CzS1qWve.js +0 -4
  568. package/dist/ionic/p-DjjfauRM.js +0 -4
  569. package/dist/ionic/p-DkUB-ROc.js +0 -4
  570. package/dist/ionic/p-DplOqGUv.js +0 -4
  571. package/dist/ionic/p-Dst_XmZh.js +0 -4
  572. package/dist/ionic/p-TXPDHL13.js +0 -4
  573. package/dist/ionic/p-a438b193.entry.js +0 -4
  574. package/dist/ionic/p-babaaaa7.entry.js +0 -4
  575. package/dist/ionic/p-be08d500.entry.js +0 -4
  576. package/dist/ionic/p-be9a4f51.entry.js +0 -4
  577. package/dist/ionic/p-c00d3092.entry.js +0 -4
  578. package/dist/ionic/p-c36dc8f5.entry.js +0 -4
  579. package/dist/ionic/p-c72a7e17.entry.js +0 -4
  580. package/dist/ionic/p-c8edd88c.entry.js +0 -4
  581. package/dist/ionic/p-ce0e380b.entry.js +0 -4
  582. package/dist/ionic/p-ce32912b.entry.js +0 -4
  583. package/dist/ionic/p-d07cf130.entry.js +0 -4
  584. package/dist/ionic/p-d27edeb3.entry.js +0 -4
  585. package/dist/ionic/p-d5d2c506.entry.js +0 -4
  586. package/dist/ionic/p-d5e31ca9.entry.js +0 -4
  587. package/dist/ionic/p-de91444f.entry.js +0 -4
  588. package/dist/ionic/p-df72866d.entry.js +0 -4
  589. package/dist/ionic/p-e47e3151.entry.js +0 -4
  590. package/dist/ionic/p-e621e5e8.entry.js +0 -4
  591. package/dist/ionic/p-eea9cf93.entry.js +0 -4
  592. package/dist/ionic/p-f402f5a4.entry.js +0 -4
  593. package/dist/ionic/p-fe1bfbcf.entry.js +0 -4
  594. package/dist/ionic/p-ffb90460.entry.js +0 -4
@@ -20,91 +20,327 @@ import { getIonMode } from "../../global/ionic-global";
20
20
  * with the `header` and `content` parts (i.e. `::part(header expanded)`).
21
21
  */
22
22
  export class Accordion {
23
- accordionGroupEl;
24
- accordionGroupUpdateHandler = () => {
23
+ constructor() {
24
+ this.accordionGroupUpdateHandler = () => {
25
+ /**
26
+ * Determine if this update will cause an actual state change.
27
+ * We only want to mark as "interacted" if the state is changing.
28
+ */
29
+ const accordionGroup = this.accordionGroupEl;
30
+ if (accordionGroup) {
31
+ const value = accordionGroup.value;
32
+ const accordionValue = this.value;
33
+ const shouldExpand = Array.isArray(value) ? value.includes(accordionValue) : value === accordionValue;
34
+ const isExpanded = this.state === 4 /* AccordionState.Expanded */ || this.state === 8 /* AccordionState.Expanding */;
35
+ const stateWillChange = shouldExpand !== isExpanded;
36
+ /**
37
+ * Only mark as interacted if:
38
+ * 1. This is not the first update we've received with a defined value
39
+ * 2. The state is actually changing (prevents redundant updates from enabling animations)
40
+ */
41
+ if (this.hasReceivedFirstUpdate && stateWillChange) {
42
+ this.hasInteracted = true;
43
+ }
44
+ /**
45
+ * Only count this as the first update if the group value is defined.
46
+ * This prevents the initial undefined value from the group's componentDidLoad
47
+ * from being treated as the first real update.
48
+ */
49
+ if (value !== undefined) {
50
+ this.hasReceivedFirstUpdate = true;
51
+ }
52
+ }
53
+ this.updateState();
54
+ };
55
+ this.state = 1 /* AccordionState.Collapsed */;
56
+ this.isNext = false;
57
+ this.isPrevious = false;
25
58
  /**
26
- * Determine if this update will cause an actual state change.
27
- * We only want to mark as "interacted" if the state is changing.
59
+ * Tracks whether a user-initiated interaction has occurred.
60
+ * Animations are disabled until the first interaction happens.
61
+ * This prevents the accordion from animating when it's programmatically
62
+ * set to an expanded or collapsed state on initial load.
28
63
  */
29
- const accordionGroup = this.accordionGroupEl;
30
- if (accordionGroup) {
31
- const value = accordionGroup.value;
32
- const accordionValue = this.value;
33
- const shouldExpand = Array.isArray(value) ? value.includes(accordionValue) : value === accordionValue;
34
- const isExpanded = this.state === 4 /* AccordionState.Expanded */ || this.state === 8 /* AccordionState.Expanding */;
35
- const stateWillChange = shouldExpand !== isExpanded;
64
+ this.hasInteracted = false;
65
+ /**
66
+ * Tracks if this accordion has ever been expanded.
67
+ * Used to prevent the first expansion from animating.
68
+ */
69
+ this.hasEverBeenExpanded = false;
70
+ /**
71
+ * Tracks if this accordion has received its first update from the group.
72
+ * Used to distinguish initial programmatic sets from user interactions.
73
+ */
74
+ this.hasReceivedFirstUpdate = false;
75
+ /**
76
+ * The value of the accordion. Defaults to an autogenerated
77
+ * value.
78
+ */
79
+ this.value = `ion-accordion-${accordionIds++}`;
80
+ /**
81
+ * If `true`, the accordion cannot be interacted with.
82
+ */
83
+ this.disabled = false;
84
+ /**
85
+ * If `true`, the accordion cannot be interacted with,
86
+ * but does not alter the opacity.
87
+ */
88
+ this.readonly = false;
89
+ /**
90
+ * The toggle icon to use. This icon will be
91
+ * rotated when the accordion is expanded
92
+ * or collapsed.
93
+ */
94
+ this.toggleIcon = chevronDown;
95
+ /**
96
+ * The slot inside of `ion-item` to
97
+ * place the toggle icon. Defaults to `"end"`.
98
+ */
99
+ this.toggleIconSlot = 'end';
100
+ this.setItemDefaults = () => {
101
+ const ionItem = this.getSlottedHeaderIonItem();
102
+ if (!ionItem) {
103
+ return;
104
+ }
36
105
  /**
37
- * Only mark as interacted if:
38
- * 1. This is not the first update we've received with a defined value
39
- * 2. The state is actually changing (prevents redundant updates from enabling animations)
106
+ * For a11y purposes, we make
107
+ * the ion-item a button so users
108
+ * can tab to it and use keyboard
109
+ * navigation to get around.
40
110
  */
41
- if (this.hasReceivedFirstUpdate && stateWillChange) {
42
- this.hasInteracted = true;
111
+ ionItem.button = true;
112
+ ionItem.detail = false;
113
+ /**
114
+ * By default, the lines in an
115
+ * item should be full here, but
116
+ * only do that if a user has
117
+ * not explicitly overridden them
118
+ */
119
+ if (ionItem.lines === undefined) {
120
+ ionItem.lines = 'full';
121
+ }
122
+ };
123
+ this.getSlottedHeaderIonItem = () => {
124
+ const { headerEl } = this;
125
+ if (!headerEl) {
126
+ return;
43
127
  }
44
128
  /**
45
- * Only count this as the first update if the group value is defined.
46
- * This prevents the initial undefined value from the group's componentDidLoad
47
- * from being treated as the first real update.
129
+ * Get the first ion-item
130
+ * slotted in the header slot
48
131
  */
49
- if (value !== undefined) {
50
- this.hasReceivedFirstUpdate = true;
132
+ const slot = headerEl.querySelector('slot');
133
+ if (!slot) {
134
+ return;
51
135
  }
52
- }
53
- this.updateState();
54
- };
55
- contentEl;
56
- contentElWrapper;
57
- headerEl;
58
- currentRaf;
59
- el;
60
- state = 1 /* AccordionState.Collapsed */;
61
- isNext = false;
62
- isPrevious = false;
63
- /**
64
- * Tracks whether a user-initiated interaction has occurred.
65
- * Animations are disabled until the first interaction happens.
66
- * This prevents the accordion from animating when it's programmatically
67
- * set to an expanded or collapsed state on initial load.
68
- */
69
- hasInteracted = false;
70
- /**
71
- * Tracks if this accordion has ever been expanded.
72
- * Used to prevent the first expansion from animating.
73
- */
74
- hasEverBeenExpanded = false;
75
- /**
76
- * Tracks if this accordion has received its first update from the group.
77
- * Used to distinguish initial programmatic sets from user interactions.
78
- */
79
- hasReceivedFirstUpdate = false;
80
- /**
81
- * The value of the accordion. Defaults to an autogenerated
82
- * value.
83
- */
84
- value = `ion-accordion-${accordionIds++}`;
136
+ // This is not defined in unit tests
137
+ if (slot.assignedElements === undefined)
138
+ return;
139
+ return slot.assignedElements().find((el) => el.tagName === 'ION-ITEM');
140
+ };
141
+ this.setAria = (expanded = false) => {
142
+ const ionItem = this.getSlottedHeaderIonItem();
143
+ if (!ionItem) {
144
+ return;
145
+ }
146
+ /**
147
+ * Get the native <button> element inside of
148
+ * ion-item because that is what will be focused
149
+ */
150
+ const root = getElementRoot(ionItem);
151
+ const button = root.querySelector('button');
152
+ if (!button) {
153
+ return;
154
+ }
155
+ button.setAttribute('aria-expanded', `${expanded}`);
156
+ };
157
+ this.slotToggleIcon = () => {
158
+ const ionItem = this.getSlottedHeaderIonItem();
159
+ if (!ionItem) {
160
+ return;
161
+ }
162
+ const { toggleIconSlot, toggleIcon } = this;
163
+ /**
164
+ * Check if there already is a toggle icon.
165
+ * If so, do not add another one.
166
+ */
167
+ const existingToggleIcon = ionItem.querySelector('.ion-accordion-toggle-icon');
168
+ if (existingToggleIcon) {
169
+ return;
170
+ }
171
+ const iconEl = document.createElement('ion-icon');
172
+ iconEl.slot = toggleIconSlot;
173
+ iconEl.lazy = false;
174
+ iconEl.classList.add('ion-accordion-toggle-icon');
175
+ iconEl.icon = toggleIcon;
176
+ iconEl.setAttribute('aria-hidden', 'true');
177
+ ionItem.appendChild(iconEl);
178
+ };
179
+ this.expandAccordion = () => {
180
+ const { contentEl, contentElWrapper } = this;
181
+ /**
182
+ * If the content elements aren't available yet, just set the state.
183
+ * This happens on initial render before the DOM is ready.
184
+ */
185
+ if (contentEl === undefined || contentElWrapper === undefined) {
186
+ this.state = 4 /* AccordionState.Expanded */;
187
+ this.hasEverBeenExpanded = true;
188
+ return;
189
+ }
190
+ if (this.state === 4 /* AccordionState.Expanded */) {
191
+ return;
192
+ }
193
+ if (this.currentRaf !== undefined) {
194
+ cancelAnimationFrame(this.currentRaf);
195
+ }
196
+ /**
197
+ * Mark that this accordion has been expanded at least once.
198
+ * This allows subsequent expansions to animate.
199
+ */
200
+ this.hasEverBeenExpanded = true;
201
+ if (this.shouldAnimate()) {
202
+ raf(() => {
203
+ this.state = 8 /* AccordionState.Expanding */;
204
+ this.currentRaf = raf(async () => {
205
+ const contentHeight = contentElWrapper.offsetHeight;
206
+ const waitForTransition = transitionEndAsync(contentEl, 2000);
207
+ contentEl.style.setProperty('max-height', `${contentHeight}px`);
208
+ await waitForTransition;
209
+ this.state = 4 /* AccordionState.Expanded */;
210
+ contentEl.style.removeProperty('max-height');
211
+ });
212
+ });
213
+ }
214
+ else {
215
+ this.state = 4 /* AccordionState.Expanded */;
216
+ }
217
+ };
218
+ this.collapseAccordion = () => {
219
+ const { contentEl } = this;
220
+ /**
221
+ * If the content element isn't available yet, just set the state.
222
+ * This happens on initial render before the DOM is ready.
223
+ */
224
+ if (contentEl === undefined) {
225
+ this.state = 1 /* AccordionState.Collapsed */;
226
+ return;
227
+ }
228
+ if (this.state === 1 /* AccordionState.Collapsed */) {
229
+ return;
230
+ }
231
+ if (this.currentRaf !== undefined) {
232
+ cancelAnimationFrame(this.currentRaf);
233
+ }
234
+ if (this.shouldAnimate()) {
235
+ this.currentRaf = raf(async () => {
236
+ const contentHeight = contentEl.offsetHeight;
237
+ contentEl.style.setProperty('max-height', `${contentHeight}px`);
238
+ raf(async () => {
239
+ const waitForTransition = transitionEndAsync(contentEl, 2000);
240
+ this.state = 2 /* AccordionState.Collapsing */;
241
+ await waitForTransition;
242
+ this.state = 1 /* AccordionState.Collapsed */;
243
+ contentEl.style.removeProperty('max-height');
244
+ });
245
+ });
246
+ }
247
+ else {
248
+ this.state = 1 /* AccordionState.Collapsed */;
249
+ }
250
+ };
251
+ /**
252
+ * Helper function to determine if
253
+ * something should animate.
254
+ * If prefers-reduced-motion is set
255
+ * then we should not animate, regardless
256
+ * of what is set in the config.
257
+ */
258
+ this.shouldAnimate = () => {
259
+ /**
260
+ * Don't animate until after the first user interaction.
261
+ * This prevents animations on initial load when accordions
262
+ * start in an expanded or collapsed state programmatically.
263
+ *
264
+ * Additionally, don't animate the very first expansion even if
265
+ * hasInteracted is true. This handles edge cases like React StrictMode
266
+ * where effects run twice and might incorrectly mark as interacted.
267
+ */
268
+ if (!this.hasInteracted || !this.hasEverBeenExpanded) {
269
+ return false;
270
+ }
271
+ if (typeof window === 'undefined') {
272
+ return false;
273
+ }
274
+ const prefersReducedMotion = matchMedia('(prefers-reduced-motion: reduce)').matches;
275
+ if (prefersReducedMotion) {
276
+ return false;
277
+ }
278
+ const animated = config.get('animated', true);
279
+ if (!animated) {
280
+ return false;
281
+ }
282
+ if (this.accordionGroupEl && !this.accordionGroupEl.animated) {
283
+ return false;
284
+ }
285
+ return true;
286
+ };
287
+ this.updateState = async () => {
288
+ const accordionGroup = this.accordionGroupEl;
289
+ const accordionValue = this.value;
290
+ if (!accordionGroup) {
291
+ return;
292
+ }
293
+ const value = accordionGroup.value;
294
+ const shouldExpand = Array.isArray(value) ? value.includes(accordionValue) : value === accordionValue;
295
+ if (shouldExpand) {
296
+ this.expandAccordion();
297
+ this.isNext = this.isPrevious = false;
298
+ }
299
+ else {
300
+ this.collapseAccordion();
301
+ /**
302
+ * When using popout or inset,
303
+ * the collapsed accordion items
304
+ * may need additional border radius
305
+ * applied. Check to see if the
306
+ * next or previous accordion is selected.
307
+ */
308
+ const nextAccordion = this.getNextSibling();
309
+ const nextAccordionValue = nextAccordion?.value;
310
+ if (nextAccordionValue !== undefined) {
311
+ this.isPrevious = Array.isArray(value) ? value.includes(nextAccordionValue) : value === nextAccordionValue;
312
+ }
313
+ const previousAccordion = this.getPreviousSibling();
314
+ const previousAccordionValue = previousAccordion?.value;
315
+ if (previousAccordionValue !== undefined) {
316
+ this.isNext = Array.isArray(value) ? value.includes(previousAccordionValue) : value === previousAccordionValue;
317
+ }
318
+ }
319
+ };
320
+ this.getNextSibling = () => {
321
+ if (!this.el) {
322
+ return;
323
+ }
324
+ const nextSibling = this.el.nextElementSibling;
325
+ if (nextSibling?.tagName !== 'ION-ACCORDION') {
326
+ return;
327
+ }
328
+ return nextSibling;
329
+ };
330
+ this.getPreviousSibling = () => {
331
+ if (!this.el) {
332
+ return;
333
+ }
334
+ const previousSibling = this.el.previousElementSibling;
335
+ if (previousSibling?.tagName !== 'ION-ACCORDION') {
336
+ return;
337
+ }
338
+ return previousSibling;
339
+ };
340
+ }
85
341
  valueChanged() {
86
342
  this.updateState();
87
343
  }
88
- /**
89
- * If `true`, the accordion cannot be interacted with.
90
- */
91
- disabled = false;
92
- /**
93
- * If `true`, the accordion cannot be interacted with,
94
- * but does not alter the opacity.
95
- */
96
- readonly = false;
97
- /**
98
- * The toggle icon to use. This icon will be
99
- * rotated when the accordion is expanded
100
- * or collapsed.
101
- */
102
- toggleIcon = chevronDown;
103
- /**
104
- * The slot inside of `ion-item` to
105
- * place the toggle icon. Defaults to `"end"`.
106
- */
107
- toggleIconSlot = 'end';
108
344
  connectedCallback() {
109
345
  const accordionGroupEl = (this.accordionGroupEl = this.el?.closest('ion-accordion-group'));
110
346
  if (accordionGroupEl) {
@@ -135,246 +371,6 @@ export class Accordion {
135
371
  this.setAria(expanded);
136
372
  });
137
373
  }
138
- setItemDefaults = () => {
139
- const ionItem = this.getSlottedHeaderIonItem();
140
- if (!ionItem) {
141
- return;
142
- }
143
- /**
144
- * For a11y purposes, we make
145
- * the ion-item a button so users
146
- * can tab to it and use keyboard
147
- * navigation to get around.
148
- */
149
- ionItem.button = true;
150
- ionItem.detail = false;
151
- /**
152
- * By default, the lines in an
153
- * item should be full here, but
154
- * only do that if a user has
155
- * not explicitly overridden them
156
- */
157
- if (ionItem.lines === undefined) {
158
- ionItem.lines = 'full';
159
- }
160
- };
161
- getSlottedHeaderIonItem = () => {
162
- const { headerEl } = this;
163
- if (!headerEl) {
164
- return;
165
- }
166
- /**
167
- * Get the first ion-item
168
- * slotted in the header slot
169
- */
170
- const slot = headerEl.querySelector('slot');
171
- if (!slot) {
172
- return;
173
- }
174
- // This is not defined in unit tests
175
- if (slot.assignedElements === undefined)
176
- return;
177
- return slot.assignedElements().find((el) => el.tagName === 'ION-ITEM');
178
- };
179
- setAria = (expanded = false) => {
180
- const ionItem = this.getSlottedHeaderIonItem();
181
- if (!ionItem) {
182
- return;
183
- }
184
- /**
185
- * Get the native <button> element inside of
186
- * ion-item because that is what will be focused
187
- */
188
- const root = getElementRoot(ionItem);
189
- const button = root.querySelector('button');
190
- if (!button) {
191
- return;
192
- }
193
- button.setAttribute('aria-expanded', `${expanded}`);
194
- };
195
- slotToggleIcon = () => {
196
- const ionItem = this.getSlottedHeaderIonItem();
197
- if (!ionItem) {
198
- return;
199
- }
200
- const { toggleIconSlot, toggleIcon } = this;
201
- /**
202
- * Check if there already is a toggle icon.
203
- * If so, do not add another one.
204
- */
205
- const existingToggleIcon = ionItem.querySelector('.ion-accordion-toggle-icon');
206
- if (existingToggleIcon) {
207
- return;
208
- }
209
- const iconEl = document.createElement('ion-icon');
210
- iconEl.slot = toggleIconSlot;
211
- iconEl.lazy = false;
212
- iconEl.classList.add('ion-accordion-toggle-icon');
213
- iconEl.icon = toggleIcon;
214
- iconEl.setAttribute('aria-hidden', 'true');
215
- ionItem.appendChild(iconEl);
216
- };
217
- expandAccordion = () => {
218
- const { contentEl, contentElWrapper } = this;
219
- /**
220
- * If the content elements aren't available yet, just set the state.
221
- * This happens on initial render before the DOM is ready.
222
- */
223
- if (contentEl === undefined || contentElWrapper === undefined) {
224
- this.state = 4 /* AccordionState.Expanded */;
225
- this.hasEverBeenExpanded = true;
226
- return;
227
- }
228
- if (this.state === 4 /* AccordionState.Expanded */) {
229
- return;
230
- }
231
- if (this.currentRaf !== undefined) {
232
- cancelAnimationFrame(this.currentRaf);
233
- }
234
- /**
235
- * Mark that this accordion has been expanded at least once.
236
- * This allows subsequent expansions to animate.
237
- */
238
- this.hasEverBeenExpanded = true;
239
- if (this.shouldAnimate()) {
240
- raf(() => {
241
- this.state = 8 /* AccordionState.Expanding */;
242
- this.currentRaf = raf(async () => {
243
- const contentHeight = contentElWrapper.offsetHeight;
244
- const waitForTransition = transitionEndAsync(contentEl, 2000);
245
- contentEl.style.setProperty('max-height', `${contentHeight}px`);
246
- await waitForTransition;
247
- this.state = 4 /* AccordionState.Expanded */;
248
- contentEl.style.removeProperty('max-height');
249
- });
250
- });
251
- }
252
- else {
253
- this.state = 4 /* AccordionState.Expanded */;
254
- }
255
- };
256
- collapseAccordion = () => {
257
- const { contentEl } = this;
258
- /**
259
- * If the content element isn't available yet, just set the state.
260
- * This happens on initial render before the DOM is ready.
261
- */
262
- if (contentEl === undefined) {
263
- this.state = 1 /* AccordionState.Collapsed */;
264
- return;
265
- }
266
- if (this.state === 1 /* AccordionState.Collapsed */) {
267
- return;
268
- }
269
- if (this.currentRaf !== undefined) {
270
- cancelAnimationFrame(this.currentRaf);
271
- }
272
- if (this.shouldAnimate()) {
273
- this.currentRaf = raf(async () => {
274
- const contentHeight = contentEl.offsetHeight;
275
- contentEl.style.setProperty('max-height', `${contentHeight}px`);
276
- raf(async () => {
277
- const waitForTransition = transitionEndAsync(contentEl, 2000);
278
- this.state = 2 /* AccordionState.Collapsing */;
279
- await waitForTransition;
280
- this.state = 1 /* AccordionState.Collapsed */;
281
- contentEl.style.removeProperty('max-height');
282
- });
283
- });
284
- }
285
- else {
286
- this.state = 1 /* AccordionState.Collapsed */;
287
- }
288
- };
289
- /**
290
- * Helper function to determine if
291
- * something should animate.
292
- * If prefers-reduced-motion is set
293
- * then we should not animate, regardless
294
- * of what is set in the config.
295
- */
296
- shouldAnimate = () => {
297
- /**
298
- * Don't animate until after the first user interaction.
299
- * This prevents animations on initial load when accordions
300
- * start in an expanded or collapsed state programmatically.
301
- *
302
- * Additionally, don't animate the very first expansion even if
303
- * hasInteracted is true. This handles edge cases like React StrictMode
304
- * where effects run twice and might incorrectly mark as interacted.
305
- */
306
- if (!this.hasInteracted || !this.hasEverBeenExpanded) {
307
- return false;
308
- }
309
- if (typeof window === 'undefined') {
310
- return false;
311
- }
312
- const prefersReducedMotion = matchMedia('(prefers-reduced-motion: reduce)').matches;
313
- if (prefersReducedMotion) {
314
- return false;
315
- }
316
- const animated = config.get('animated', true);
317
- if (!animated) {
318
- return false;
319
- }
320
- if (this.accordionGroupEl && !this.accordionGroupEl.animated) {
321
- return false;
322
- }
323
- return true;
324
- };
325
- updateState = async () => {
326
- const accordionGroup = this.accordionGroupEl;
327
- const accordionValue = this.value;
328
- if (!accordionGroup) {
329
- return;
330
- }
331
- const value = accordionGroup.value;
332
- const shouldExpand = Array.isArray(value) ? value.includes(accordionValue) : value === accordionValue;
333
- if (shouldExpand) {
334
- this.expandAccordion();
335
- this.isNext = this.isPrevious = false;
336
- }
337
- else {
338
- this.collapseAccordion();
339
- /**
340
- * When using popout or inset,
341
- * the collapsed accordion items
342
- * may need additional border radius
343
- * applied. Check to see if the
344
- * next or previous accordion is selected.
345
- */
346
- const nextAccordion = this.getNextSibling();
347
- const nextAccordionValue = nextAccordion?.value;
348
- if (nextAccordionValue !== undefined) {
349
- this.isPrevious = Array.isArray(value) ? value.includes(nextAccordionValue) : value === nextAccordionValue;
350
- }
351
- const previousAccordion = this.getPreviousSibling();
352
- const previousAccordionValue = previousAccordion?.value;
353
- if (previousAccordionValue !== undefined) {
354
- this.isNext = Array.isArray(value) ? value.includes(previousAccordionValue) : value === previousAccordionValue;
355
- }
356
- }
357
- };
358
- getNextSibling = () => {
359
- if (!this.el) {
360
- return;
361
- }
362
- const nextSibling = this.el.nextElementSibling;
363
- if (nextSibling?.tagName !== 'ION-ACCORDION') {
364
- return;
365
- }
366
- return nextSibling;
367
- };
368
- getPreviousSibling = () => {
369
- if (!this.el) {
370
- return;
371
- }
372
- const previousSibling = this.el.previousElementSibling;
373
- if (previousSibling?.tagName !== 'ION-ACCORDION') {
374
- return;
375
- }
376
- return previousSibling;
377
- };
378
374
  toggleExpanded() {
379
375
  const { accordionGroupEl, disabled, readonly, value, state } = this;
380
376
  if (disabled || readonly)