@ionic/core 8.7.17-dev.11772118942.181221d4 → 8.7.17-dev.11772568074.1d7a4aea

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 (520) hide show
  1. package/components/action-sheet.js +1 -561
  2. package/components/alert.js +1 -610
  3. package/components/animation.js +1 -817
  4. package/components/backdrop.js +1 -72
  5. package/components/button-active.js +1 -64
  6. package/components/button.js +1 -303
  7. package/components/buttons.js +1 -56
  8. package/components/capacitor.js +1 -10
  9. package/components/checkbox.js +1 -261
  10. package/components/config.js +1 -192
  11. package/components/content.js +1 -475
  12. package/components/cubic-bezier.js +1 -87
  13. package/components/data.js +1 -1635
  14. package/components/dir.js +1 -15
  15. package/components/focus-visible.js +1 -72
  16. package/components/framework-delegate.js +1 -137
  17. package/components/gesture-controller.js +1 -192
  18. package/components/haptic.js +1 -155
  19. package/components/hardware-back-button.js +1 -112
  20. package/components/header.js +1 -417
  21. package/components/helpers.js +1 -336
  22. package/components/icon.js +1 -456
  23. package/components/index.d.ts +2 -0
  24. package/components/index.js +1 -115
  25. package/components/index2.js +1 -416
  26. package/components/index3.js +1 -452
  27. package/components/index4.js +1 -118
  28. package/components/index5.js +1 -303
  29. package/components/index6.js +1 -29
  30. package/components/index7.js +1 -164
  31. package/components/index8.js +1 -125
  32. package/components/index9.js +1 -4
  33. package/components/input-shims.js +1 -624
  34. package/components/input.utils.js +1 -144
  35. package/components/ion-accordion-group.js +1 -269
  36. package/components/ion-accordion.js +1 -457
  37. package/components/ion-action-sheet.js +1 -6
  38. package/components/ion-alert.js +1 -6
  39. package/components/ion-app.js +1 -128
  40. package/components/ion-avatar.js +1 -41
  41. package/components/ion-back-button.js +1 -131
  42. package/components/ion-backdrop.js +1 -6
  43. package/components/ion-badge.js +1 -47
  44. package/components/ion-breadcrumb.js +1 -137
  45. package/components/ion-breadcrumbs.js +1 -164
  46. package/components/ion-button.js +1 -6
  47. package/components/ion-buttons.js +1 -6
  48. package/components/ion-card-content.js +1 -45
  49. package/components/ion-card-header.js +1 -56
  50. package/components/ion-card-subtitle.js +1 -48
  51. package/components/ion-card-title.js +1 -48
  52. package/components/ion-card.js +1 -107
  53. package/components/ion-checkbox.js +1 -6
  54. package/components/ion-chip.js +1 -66
  55. package/components/ion-col.js +1 -163
  56. package/components/ion-content.js +1 -6
  57. package/components/ion-datetime-button.js +1 -384
  58. package/components/ion-datetime.js +1 -2046
  59. package/components/ion-fab-button.js +1 -151
  60. package/components/ion-fab-list.js +1 -66
  61. package/components/ion-fab.js +1 -101
  62. package/components/ion-footer.js +1 -159
  63. package/components/ion-grid.js +1 -46
  64. package/components/ion-header.js +1 -6
  65. package/components/ion-icon.js +1 -6
  66. package/components/ion-img.js +1 -124
  67. package/components/ion-infinite-scroll-content.js +1 -70
  68. package/components/ion-infinite-scroll.js +1 -236
  69. package/components/ion-input-otp.js +1 -683
  70. package/components/ion-input-password-toggle.js +1 -129
  71. package/components/ion-input.js +1 -617
  72. package/components/ion-item-divider.js +1 -59
  73. package/components/ion-item-group.js +1 -46
  74. package/components/ion-item-option.js +1 -91
  75. package/components/ion-item-options.js +1 -73
  76. package/components/ion-item-sliding.js +1 -458
  77. package/components/ion-item.js +1 -6
  78. package/components/ion-label.js +1 -6
  79. package/components/ion-list-header.js +1 -6
  80. package/components/ion-list.js +1 -6
  81. package/components/ion-loading.js +1 -344
  82. package/components/ion-menu-button.js +1 -110
  83. package/components/ion-menu-toggle.js +1 -64
  84. package/components/ion-menu.js +1 -745
  85. package/components/ion-modal.js +1 -6
  86. package/components/ion-nav-link.js +1 -64
  87. package/components/ion-nav.js +1 -956
  88. package/components/ion-note.js +1 -47
  89. package/components/ion-picker-column-option.js +1 -6
  90. package/components/ion-picker-column.js +1 -6
  91. package/components/ion-picker-legacy-column.js +1 -6
  92. package/components/ion-picker-legacy.js +1 -343
  93. package/components/ion-picker.js +1 -6
  94. package/components/ion-popover.js +1 -6
  95. package/components/ion-progress-bar.js +1 -101
  96. package/components/ion-radio-group.js +1 -6
  97. package/components/ion-radio.js +1 -6
  98. package/components/ion-range.js +1 -853
  99. package/components/ion-refresher-content.js +1 -89
  100. package/components/ion-refresher.js +1 -751
  101. package/components/ion-reorder-group.js +1 -322
  102. package/components/ion-reorder.js +1 -60
  103. package/components/ion-ripple-effect.js +1 -6
  104. package/components/ion-route-redirect.js +1 -45
  105. package/components/ion-route.js +1 -74
  106. package/components/ion-router-link.js +1 -61
  107. package/components/ion-router-outlet.js +1 -227
  108. package/components/ion-router.js +1 -841
  109. package/components/ion-row.js +1 -36
  110. package/components/ion-searchbar.js +1 -530
  111. package/components/ion-segment-button.js +1 -174
  112. package/components/ion-segment-content.js +1 -35
  113. package/components/ion-segment-view.js +1 -148
  114. package/components/ion-segment.js +1 -602
  115. package/components/ion-select-modal.js +1 -6
  116. package/components/ion-select-option.js +1 -46
  117. package/components/ion-select-popover.js +1 -6
  118. package/components/ion-select.js +1 -1037
  119. package/components/ion-skeleton-text.js +1 -65
  120. package/components/ion-spinner.js +1 -6
  121. package/components/ion-split-pane.js +1 -197
  122. package/components/ion-tab-bar.js +1 -115
  123. package/components/ion-tab-button.js +1 -128
  124. package/components/ion-tab.js +1 -91
  125. package/components/ion-tabs.js +1 -205
  126. package/components/ion-text.js +1 -42
  127. package/components/ion-textarea.js +1 -554
  128. package/components/ion-thumbnail.js +1 -36
  129. package/components/ion-title.js +1 -6
  130. package/components/ion-toast.js +1 -941
  131. package/components/ion-toggle.js +1 -361
  132. package/components/ion-toolbar.js +1 -6
  133. package/components/ionic-global.js +1 -144
  134. package/components/ios.transition.js +1 -672
  135. package/components/item.js +1 -302
  136. package/components/keyboard-controller.js +1 -162
  137. package/components/keyboard.js +1 -141
  138. package/components/keyboard2.js +1 -76
  139. package/components/label.js +1 -100
  140. package/components/list-header.js +1 -47
  141. package/components/list.js +1 -68
  142. package/components/lock-controller.js +1 -35
  143. package/components/md.transition.js +1 -51
  144. package/components/menu-toggle-util.js +1 -9
  145. package/components/modal.js +1 -2674
  146. package/components/notch-controller.js +1 -150
  147. package/components/overlays.js +1 -912
  148. package/components/picker-column-option.js +1 -136
  149. package/components/picker-column.js +1 -595
  150. package/components/picker-column2.js +1 -377
  151. package/components/picker.js +1 -498
  152. package/components/popover.js +1 -1502
  153. package/components/radio-group.js +1 -287
  154. package/components/radio.js +1 -229
  155. package/components/refresher.utils.js +1 -193
  156. package/components/ripple-effect.js +1 -109
  157. package/components/select-modal.js +1 -196
  158. package/components/select-popover.js +1 -189
  159. package/components/spinner.js +1 -224
  160. package/components/status-tap.js +1 -36
  161. package/components/swipe-back.js +1 -75
  162. package/components/theme.js +1 -40
  163. package/components/title.js +1 -70
  164. package/components/toolbar.js +1 -89
  165. package/components/validity.js +1 -14
  166. package/components/watch-options.js +1 -44
  167. package/dist/cjs/{animation-Bt3H9L1C.js → animation-Dg4yiuR2.js} +1 -1
  168. package/dist/cjs/app-globals-CLI8xCmk.js +11 -0
  169. package/dist/cjs/{button-active-CMc8cD90.js → button-active-FscMI17-.js} +1 -1
  170. package/dist/cjs/{config-C5fsO43a.js → config-BukYi_pW.js} +1 -1
  171. package/dist/cjs/{data-JwZKaIQB.js → data-BYlBjkMU.js} +1 -1
  172. package/dist/cjs/{framework-delegate-DMJRBuDi.js → framework-delegate-CRgp8o_p.js} +1 -1
  173. package/dist/cjs/{hardware-back-button-VCK4V3mG.js → hardware-back-button-C4rMJ5uI.js} +1 -1
  174. package/dist/cjs/{helpers-DrTqNghc.js → helpers-CxTYJdbT.js} +1 -1
  175. package/dist/cjs/{index-094mMFB-.js → index-C845Ti6K.js} +4 -4
  176. package/dist/cjs/{index-DrMUZJj6.js → index-CFUwM5x_.js} +5 -5
  177. package/dist/cjs/{index-D6Wc6v08.js → index-CqT-2gKy.js} +503 -382
  178. package/dist/cjs/{index-CO6eryBo.js → index-MbaBbWXk.js} +2 -2
  179. package/dist/cjs/{index-C534ULug.js → index-YcSftOMz.js} +2 -2
  180. package/dist/cjs/index.cjs.js +12 -12
  181. package/dist/cjs/{input-shims-CW0KUFTQ.js → input-shims-DlFhYYTs.js} +3 -3
  182. package/dist/cjs/{input.utils-B_QROI2g.js → input.utils-DmeJ8dmo.js} +2 -2
  183. package/dist/cjs/ion-accordion_2.cjs.entry.js +23 -15
  184. package/dist/cjs/ion-action-sheet.cjs.entry.js +21 -15
  185. package/dist/cjs/ion-alert.cjs.entry.js +25 -17
  186. package/dist/cjs/ion-app_8.cjs.entry.js +44 -40
  187. package/dist/cjs/ion-avatar_3.cjs.entry.js +12 -12
  188. package/dist/cjs/ion-back-button.cjs.entry.js +7 -7
  189. package/dist/cjs/ion-backdrop.cjs.entry.js +6 -6
  190. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +20 -14
  191. package/dist/cjs/ion-button_2.cjs.entry.js +36 -18
  192. package/dist/cjs/ion-card_5.cjs.entry.js +23 -23
  193. package/dist/cjs/ion-checkbox.cjs.entry.js +7 -7
  194. package/dist/cjs/ion-chip.cjs.entry.js +6 -6
  195. package/dist/cjs/ion-col_3.cjs.entry.js +8 -8
  196. package/dist/cjs/ion-datetime-button.cjs.entry.js +8 -8
  197. package/dist/cjs/ion-datetime_3.cjs.entry.js +67 -39
  198. package/dist/cjs/ion-fab_3.cjs.entry.js +17 -13
  199. package/dist/cjs/ion-img.cjs.entry.js +8 -6
  200. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +17 -13
  201. package/dist/cjs/ion-input-otp.cjs.entry.js +16 -10
  202. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +9 -7
  203. package/dist/cjs/ion-input.cjs.entry.js +21 -13
  204. package/dist/cjs/ion-item-option_3.cjs.entry.js +17 -15
  205. package/dist/cjs/ion-item_8.cjs.entry.js +42 -36
  206. package/dist/cjs/ion-loading.cjs.entry.js +18 -14
  207. package/dist/cjs/ion-menu_3.cjs.entry.js +30 -22
  208. package/dist/cjs/ion-modal.cjs.entry.js +55 -40
  209. package/dist/cjs/ion-nav_2.cjs.entry.js +14 -10
  210. package/dist/cjs/ion-picker-column-option.cjs.entry.js +10 -8
  211. package/dist/cjs/ion-picker-column.cjs.entry.js +11 -7
  212. package/dist/cjs/ion-picker.cjs.entry.js +6 -6
  213. package/dist/cjs/ion-popover.cjs.entry.js +21 -15
  214. package/dist/cjs/ion-progress-bar.cjs.entry.js +7 -7
  215. package/dist/cjs/ion-radio_2.cjs.entry.js +17 -13
  216. package/dist/cjs/ion-range.cjs.entry.js +29 -15
  217. package/dist/cjs/ion-refresher_2.cjs.entry.js +45 -14
  218. package/dist/cjs/ion-reorder_2.cjs.entry.js +13 -11
  219. package/dist/cjs/ion-ripple-effect.cjs.entry.js +4 -4
  220. package/dist/cjs/ion-route_4.cjs.entry.js +20 -10
  221. package/dist/cjs/ion-searchbar.cjs.entry.js +22 -12
  222. package/dist/cjs/ion-segment-content.cjs.entry.js +3 -3
  223. package/dist/cjs/ion-segment-view.cjs.entry.js +5 -5
  224. package/dist/cjs/ion-segment_2.cjs.entry.js +26 -16
  225. package/dist/cjs/ion-select-modal.cjs.entry.js +12 -12
  226. package/dist/cjs/ion-select_3.cjs.entry.js +29 -21
  227. package/dist/cjs/ion-spinner.cjs.entry.js +4 -4
  228. package/dist/cjs/ion-split-pane.cjs.entry.js +15 -9
  229. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +14 -12
  230. package/dist/cjs/ion-tab_2.cjs.entry.js +10 -8
  231. package/dist/cjs/ion-text.cjs.entry.js +4 -4
  232. package/dist/cjs/ion-textarea.cjs.entry.js +18 -12
  233. package/dist/cjs/ion-toast.cjs.entry.js +21 -15
  234. package/dist/cjs/ion-toggle.cjs.entry.js +10 -8
  235. package/dist/cjs/{ionic-global-HMVqOFGO.js → ionic-global-Bc3kJi1Z.js} +1 -1
  236. package/dist/cjs/ionic.cjs.js +5 -5
  237. package/dist/cjs/{ios.transition-BOt_uW73.js → ios.transition-trBiC95R.js} +4 -4
  238. package/dist/cjs/loader.cjs.js +4 -4
  239. package/dist/cjs/{md.transition-Dt968VXB.js → md.transition-CUQECuvD.js} +4 -4
  240. package/dist/cjs/{notch-controller-Bzqhjm4f.js → notch-controller-sD-lTpdc.js} +1 -1
  241. package/dist/cjs/{overlays-B2b-TTbl.js → overlays-C2jiBSNQ.js} +5 -5
  242. package/dist/cjs/{status-tap-g0sWWkXk.js → status-tap-CCJk5VgT.js} +3 -3
  243. package/dist/cjs/{swipe-back-BIayeNOD.js → swipe-back-BGhTQ1CU.js} +2 -2
  244. package/dist/collection/collection-manifest.json +2 -2
  245. package/dist/collection/components/accordion-group/accordion-group.js +4 -2
  246. package/dist/collection/components/action-sheet/action-sheet.js +20 -10
  247. package/dist/collection/components/alert/alert.js +24 -12
  248. package/dist/collection/components/back-button/back-button.js +4 -2
  249. package/dist/collection/components/badge/badge.js +2 -1
  250. package/dist/collection/components/breadcrumb/breadcrumb.js +8 -4
  251. package/dist/collection/components/breadcrumbs/breadcrumbs.js +4 -2
  252. package/dist/collection/components/button/button.js +6 -3
  253. package/dist/collection/components/card/card.js +6 -3
  254. package/dist/collection/components/card-header/card-header.js +2 -1
  255. package/dist/collection/components/card-subtitle/card-subtitle.js +2 -1
  256. package/dist/collection/components/card-title/card-title.js +2 -1
  257. package/dist/collection/components/checkbox/checkbox.js +4 -2
  258. package/dist/collection/components/chip/chip.js +2 -1
  259. package/dist/collection/components/content/content.js +8 -4
  260. package/dist/collection/components/datetime/datetime.js +34 -15
  261. package/dist/collection/components/datetime-button/datetime-button.js +2 -1
  262. package/dist/collection/components/fab-button/fab-button.js +6 -3
  263. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +4 -2
  264. package/dist/collection/components/input/input.js +11 -6
  265. package/dist/collection/components/input-otp/input-otp.js +8 -4
  266. package/dist/collection/components/input-password-toggle/input-password-toggle.js +4 -2
  267. package/dist/collection/components/item/item.js +6 -3
  268. package/dist/collection/components/item-divider/item-divider.js +2 -1
  269. package/dist/collection/components/item-option/item-option.js +2 -1
  270. package/dist/collection/components/item-options/item-options.js +2 -1
  271. package/dist/collection/components/item-sliding/item-sliding.js +2 -1
  272. package/dist/collection/components/label/label.js +6 -3
  273. package/dist/collection/components/list-header/list-header.js +2 -1
  274. package/dist/collection/components/loading/loading.js +22 -11
  275. package/dist/collection/components/menu/menu.js +10 -5
  276. package/dist/collection/components/menu-button/menu-button.js +2 -1
  277. package/dist/collection/components/modal/gestures/sheet.js +32 -21
  278. package/dist/collection/components/modal/modal.js +35 -20
  279. package/dist/collection/components/nav/nav.js +89 -45
  280. package/dist/collection/components/nav-link/nav-link.js +9 -5
  281. package/dist/collection/components/note/note.js +2 -1
  282. package/dist/collection/components/picker/picker.js +2 -1
  283. package/dist/collection/components/picker-column/picker-column.js +6 -3
  284. package/dist/collection/components/picker-column-option/picker-column-option.js +2 -1
  285. package/dist/collection/components/picker-legacy/picker.js +24 -12
  286. package/dist/collection/components/picker-legacy-column/picker-column.js +4 -2
  287. package/dist/collection/components/popover/popover.js +33 -17
  288. package/dist/collection/components/progress-bar/progress-bar.js +2 -1
  289. package/dist/collection/components/radio/radio.js +2 -1
  290. package/dist/collection/components/radio-group/radio-group.js +6 -3
  291. package/dist/collection/components/range/range.js +14 -7
  292. package/dist/collection/components/refresher/refresher.js +73 -5
  293. package/dist/collection/components/refresher-content/refresher-content.js +8 -4
  294. package/dist/collection/components/reorder-group/reorder-group.js +6 -3
  295. package/dist/collection/components/route/route.js +4 -2
  296. package/dist/collection/components/router/router.js +10 -5
  297. package/dist/collection/components/router-link/router-link.js +6 -3
  298. package/dist/collection/components/router-outlet/router-outlet.js +18 -9
  299. package/dist/collection/components/searchbar/searchbar.js +11 -6
  300. package/dist/collection/components/segment/segment.js +10 -5
  301. package/dist/collection/components/segment-button/segment-button.js +4 -2
  302. package/dist/collection/components/segment-view/segment-view.js +2 -1
  303. package/dist/collection/components/select/select.js +10 -5
  304. package/dist/collection/components/select-modal/select-modal.js +2 -1
  305. package/dist/collection/components/select-popover/select-popover.js +2 -1
  306. package/dist/collection/components/skeleton-text/skeleton-text.js +2 -1
  307. package/dist/collection/components/spinner/spinner.js +4 -2
  308. package/dist/collection/components/tab/tab.js +4 -2
  309. package/dist/collection/components/tab-bar/tab-bar.js +4 -2
  310. package/dist/collection/components/tab-button/tab-button.js +4 -2
  311. package/dist/collection/components/tabs/tabs.js +4 -2
  312. package/dist/collection/components/text/text.js +2 -1
  313. package/dist/collection/components/textarea/textarea.js +6 -3
  314. package/dist/collection/components/title/title.js +4 -2
  315. package/dist/collection/components/toast/toast.js +34 -17
  316. package/dist/collection/components/toggle/toggle.js +4 -2
  317. package/dist/collection/components/toolbar/toolbar.js +2 -1
  318. package/dist/docs.d.ts +37 -0
  319. package/dist/docs.json +835 -381
  320. package/dist/esm/{animation-Dt8bGnA-.js → animation-CnGMT4ji.js} +1 -1
  321. package/dist/esm/app-globals-DhZjtldk.js +9 -0
  322. package/dist/esm/{button-active-L570Swow.js → button-active-BBx21brx.js} +1 -1
  323. package/dist/esm/{config-mCdtaoPe.js → config-TO1rZH52.js} +1 -1
  324. package/dist/esm/{data-DCORV9FH.js → data-B9iGR5YO.js} +1 -1
  325. package/dist/esm/{framework-delegate-BYawdMXj.js → framework-delegate-CyxE1S_P.js} +1 -1
  326. package/dist/esm/{hardware-back-button-CPLxO-Ev.js → hardware-back-button-CTe4XmL7.js} +1 -1
  327. package/dist/esm/{helpers-DEn3pfjm.js → helpers-Tl8jw6S2.js} +1 -1
  328. package/dist/esm/{index-r2D9DEro.js → index-B-hkiOUh.js} +4 -4
  329. package/dist/esm/{index-CvDIirVx.js → index-B2KwgBLx.js} +5 -5
  330. package/dist/esm/{index-ceb5RaMT.js → index-BtUdxPjv.js} +2 -2
  331. package/dist/esm/{index-C8IsBmNU.js → index-IGIE5vDm.js} +503 -382
  332. package/dist/esm/{index-Bs3kT4bc.js → index-hW6eNZ3o.js} +2 -2
  333. package/dist/esm/index.js +12 -12
  334. package/dist/esm/{input-shims-DyOpfTg6.js → input-shims-C1hAaHcP.js} +3 -3
  335. package/dist/esm/{input.utils-DrvTa8gz.js → input.utils-Bxa_DQ7-.js} +2 -2
  336. package/dist/esm/ion-accordion_2.entry.js +23 -15
  337. package/dist/esm/ion-action-sheet.entry.js +21 -15
  338. package/dist/esm/ion-alert.entry.js +25 -17
  339. package/dist/esm/ion-app_8.entry.js +44 -40
  340. package/dist/esm/ion-avatar_3.entry.js +12 -12
  341. package/dist/esm/ion-back-button.entry.js +7 -7
  342. package/dist/esm/ion-backdrop.entry.js +6 -6
  343. package/dist/esm/ion-breadcrumb_2.entry.js +20 -14
  344. package/dist/esm/ion-button_2.entry.js +36 -18
  345. package/dist/esm/ion-card_5.entry.js +23 -23
  346. package/dist/esm/ion-checkbox.entry.js +7 -7
  347. package/dist/esm/ion-chip.entry.js +6 -6
  348. package/dist/esm/ion-col_3.entry.js +8 -8
  349. package/dist/esm/ion-datetime-button.entry.js +8 -8
  350. package/dist/esm/ion-datetime_3.entry.js +67 -39
  351. package/dist/esm/ion-fab_3.entry.js +17 -13
  352. package/dist/esm/ion-img.entry.js +8 -6
  353. package/dist/esm/ion-infinite-scroll_2.entry.js +17 -13
  354. package/dist/esm/ion-input-otp.entry.js +16 -10
  355. package/dist/esm/ion-input-password-toggle.entry.js +9 -7
  356. package/dist/esm/ion-input.entry.js +21 -13
  357. package/dist/esm/ion-item-option_3.entry.js +17 -15
  358. package/dist/esm/ion-item_8.entry.js +42 -36
  359. package/dist/esm/ion-loading.entry.js +18 -14
  360. package/dist/esm/ion-menu_3.entry.js +30 -22
  361. package/dist/esm/ion-modal.entry.js +55 -40
  362. package/dist/esm/ion-nav_2.entry.js +14 -10
  363. package/dist/esm/ion-picker-column-option.entry.js +10 -8
  364. package/dist/esm/ion-picker-column.entry.js +11 -7
  365. package/dist/esm/ion-picker.entry.js +6 -6
  366. package/dist/esm/ion-popover.entry.js +21 -15
  367. package/dist/esm/ion-progress-bar.entry.js +7 -7
  368. package/dist/esm/ion-radio_2.entry.js +17 -13
  369. package/dist/esm/ion-range.entry.js +29 -15
  370. package/dist/esm/ion-refresher_2.entry.js +45 -14
  371. package/dist/esm/ion-reorder_2.entry.js +13 -11
  372. package/dist/esm/ion-ripple-effect.entry.js +4 -4
  373. package/dist/esm/ion-route_4.entry.js +20 -10
  374. package/dist/esm/ion-searchbar.entry.js +22 -12
  375. package/dist/esm/ion-segment-content.entry.js +3 -3
  376. package/dist/esm/ion-segment-view.entry.js +5 -5
  377. package/dist/esm/ion-segment_2.entry.js +26 -16
  378. package/dist/esm/ion-select-modal.entry.js +12 -12
  379. package/dist/esm/ion-select_3.entry.js +29 -21
  380. package/dist/esm/ion-spinner.entry.js +4 -4
  381. package/dist/esm/ion-split-pane.entry.js +15 -9
  382. package/dist/esm/ion-tab-bar_2.entry.js +14 -12
  383. package/dist/esm/ion-tab_2.entry.js +10 -8
  384. package/dist/esm/ion-text.entry.js +4 -4
  385. package/dist/esm/ion-textarea.entry.js +18 -12
  386. package/dist/esm/ion-toast.entry.js +21 -15
  387. package/dist/esm/ion-toggle.entry.js +10 -8
  388. package/dist/esm/{ionic-global-CDrldh-5.js → ionic-global-DfbeLwcV.js} +1 -1
  389. package/dist/esm/ionic.js +6 -6
  390. package/dist/esm/{ios.transition-BDzw0_Hm.js → ios.transition--aMF-pDH.js} +4 -4
  391. package/dist/esm/loader.js +5 -5
  392. package/dist/esm/{md.transition-BzDYi3qq.js → md.transition-BEVbfm8j.js} +4 -4
  393. package/dist/esm/{notch-controller-BwelN_JM.js → notch-controller-DAcvKU57.js} +1 -1
  394. package/dist/esm/{overlays-D5YkFThA.js → overlays-F8GHPo-e.js} +5 -5
  395. package/dist/esm/{status-tap-5DQ7Fc4V.js → status-tap-BfJqFSLF.js} +3 -3
  396. package/dist/esm/{swipe-back-BKw2CAHc.js → swipe-back-BZBFwTQV.js} +2 -2
  397. package/dist/html.html-data.json +109 -109
  398. package/dist/ionic/index.esm.js +1 -1
  399. package/dist/ionic/ionic.esm.js +1 -1
  400. package/dist/ionic/{p-316c0420.entry.js → p-025d2d32.entry.js} +1 -1
  401. package/dist/ionic/p-02acdef4.entry.js +4 -0
  402. package/dist/ionic/p-04e2c388.entry.js +4 -0
  403. package/dist/ionic/{p-370e4237.entry.js → p-074344b8.entry.js} +1 -1
  404. package/dist/ionic/p-0761b4d3.entry.js +4 -0
  405. package/dist/ionic/p-13ade5c8.entry.js +4 -0
  406. package/dist/ionic/p-1b02923f.entry.js +4 -0
  407. package/dist/ionic/p-1bd477a9.entry.js +4 -0
  408. package/dist/ionic/{p-d2489bf2.entry.js → p-1fa1406c.entry.js} +1 -1
  409. package/dist/ionic/{p-46d74291.entry.js → p-1fd588a7.entry.js} +1 -1
  410. package/dist/ionic/p-239a27a4.entry.js +4 -0
  411. package/dist/ionic/{p-94de5cfa.entry.js → p-277abec1.entry.js} +1 -1
  412. package/dist/ionic/{p-dd1aef77.entry.js → p-28d7852f.entry.js} +1 -1
  413. package/dist/ionic/{p-49d06882.entry.js → p-301c43f8.entry.js} +1 -1
  414. package/dist/ionic/{p-79bd78f9.entry.js → p-370a60ee.entry.js} +1 -1
  415. package/dist/ionic/p-3e143d1d.entry.js +4 -0
  416. package/dist/ionic/p-4431ef7e.entry.js +4 -0
  417. package/dist/ionic/p-463767ce.entry.js +4 -0
  418. package/dist/ionic/p-4f888343.entry.js +4 -0
  419. package/dist/ionic/p-51c11c47.entry.js +4 -0
  420. package/dist/ionic/p-56050077.entry.js +4 -0
  421. package/dist/ionic/p-6a3a5aae.entry.js +4 -0
  422. package/dist/ionic/p-6b97f2a3.entry.js +4 -0
  423. package/dist/ionic/{p-51a60e0f.entry.js → p-7c72d482.entry.js} +1 -1
  424. package/dist/ionic/p-7d20f4f8.entry.js +4 -0
  425. package/dist/ionic/{p-11aa58d6.entry.js → p-80cac7a2.entry.js} +1 -1
  426. package/dist/ionic/p-91fc7352.entry.js +4 -0
  427. package/dist/ionic/p-93845421.entry.js +4 -0
  428. package/dist/ionic/{p-3a6caca9.entry.js → p-964090ef.entry.js} +1 -1
  429. package/dist/ionic/p-96a2e768.entry.js +4 -0
  430. package/dist/ionic/{p-d126e8d3.entry.js → p-9745651b.entry.js} +1 -1
  431. package/dist/ionic/{p-f9061316.entry.js → p-9802c88e.entry.js} +1 -1
  432. package/dist/ionic/{p-582824c5.entry.js → p-9833cf63.entry.js} +1 -1
  433. package/dist/ionic/{p-675b1a31.entry.js → p-9fae83d8.entry.js} +1 -1
  434. package/dist/ionic/{p-CwgG81ZD.js → p-B8xlpH8p.js} +1 -1
  435. package/dist/ionic/{p-C7hRNDhM.js → p-BAt5H1ac.js} +1 -1
  436. package/dist/ionic/p-BW_TRJm8.js +4 -0
  437. package/dist/ionic/{p-DDb5r57F.js → p-Bum7H1fw.js} +1 -1
  438. package/dist/ionic/{p-D0dMcSkw.js → p-BvFYtOdE.js} +1 -1
  439. package/dist/ionic/{p-Dc45iWE4.js → p-BxIcPWoV.js} +1 -1
  440. package/dist/ionic/{p-BYEqWnSg.js → p-C0JvVFMv.js} +1 -1
  441. package/dist/ionic/{p-CTfR9YZG.js → p-CGmVTdWh.js} +1 -1
  442. package/dist/ionic/{p-BOVrCkpJ.js → p-CYbRmDdy.js} +1 -1
  443. package/dist/ionic/{p-D-eFFUkA.js → p-CmFz1Mjc.js} +1 -1
  444. package/dist/ionic/p-CtA-yJYy.js +4 -0
  445. package/dist/ionic/p-D8HJQ1qq.js +4 -0
  446. package/dist/ionic/{p-B0q1YL7N.js → p-DB_iPQC-.js} +1 -1
  447. package/dist/ionic/{p-DNcfiJwE.js → p-DLbbmF9h.js} +1 -1
  448. package/dist/ionic/{p-DdR6rpbR.js → p-DTPR1Wpn.js} +1 -1
  449. package/dist/ionic/{p-DCv9sLH2.js → p-DjriolRs.js} +1 -1
  450. package/dist/ionic/p-DtVZDHlS.js +4 -0
  451. package/dist/ionic/{p-QHYY4sjU.js → p-GWUGgWx6.js} +1 -1
  452. package/dist/ionic/p-IGIE5vDm.js +5 -0
  453. package/dist/ionic/{p-BFvmZNyx.js → p-NFFyoJ4Q.js} +1 -1
  454. package/dist/ionic/{p-86f53961.entry.js → p-a287e18e.entry.js} +1 -1
  455. package/dist/ionic/p-a805674e.entry.js +4 -0
  456. package/dist/ionic/p-a81ae2cd.entry.js +4 -0
  457. package/dist/ionic/{p-da7d04cc.entry.js → p-a84f2d21.entry.js} +1 -1
  458. package/dist/ionic/{p-dbbe606a.entry.js → p-b2d5238b.entry.js} +1 -1
  459. package/dist/ionic/{p-d1f54e28.entry.js → p-b440381f.entry.js} +1 -1
  460. package/dist/ionic/{p-72c38b88.entry.js → p-b4d52b58.entry.js} +1 -1
  461. package/dist/ionic/{p-2a939845.entry.js → p-b67a2114.entry.js} +1 -1
  462. package/dist/ionic/{p-c73627c8.entry.js → p-bced1f3e.entry.js} +1 -1
  463. package/dist/ionic/{p-9a2d390d.entry.js → p-c1c9b2bb.entry.js} +1 -1
  464. package/dist/ionic/{p-f8f22cc0.entry.js → p-c3e65e45.entry.js} +1 -1
  465. package/dist/ionic/p-c76cc21d.entry.js +4 -0
  466. package/dist/ionic/{p-b0a7585c.entry.js → p-ca31010f.entry.js} +1 -1
  467. package/dist/ionic/p-cbf245b5.entry.js +4 -0
  468. package/dist/ionic/p-d68b665a.entry.js +4 -0
  469. package/dist/ionic/{p-9575b654.entry.js → p-e663bc5a.entry.js} +1 -1
  470. package/dist/ionic/p-efe86ed9.entry.js +4 -0
  471. package/dist/ionic/{p-ac4eb91d.entry.js → p-f5dfb9a3.entry.js} +1 -1
  472. package/dist/ionic/{p-DbQ5QkTP.js → p-gbVXD275.js} +1 -1
  473. package/dist/ionic/p-hNN3VvaC.js +4 -0
  474. package/dist/types/components/datetime/datetime.d.ts +9 -0
  475. package/dist/types/components/header/header.utils.d.ts +2 -1
  476. package/dist/types/components/modal/modal-interface.d.ts +5 -1
  477. package/dist/types/components/modal/modal.d.ts +5 -0
  478. package/dist/types/components/refresher/refresher-interface.d.ts +7 -0
  479. package/dist/types/components/refresher/refresher.d.ts +16 -3
  480. package/dist/types/components.d.ts +927 -189
  481. package/dist/types/interface.d.ts +1 -1
  482. package/dist/types/stencil-public-runtime.d.ts +126 -14
  483. package/dist/types/utils/gesture/listener.d.ts +2 -1
  484. package/hydrate/index.d.ts +12 -0
  485. package/hydrate/index.js +5202 -1327
  486. package/hydrate/index.mjs +5201 -1328
  487. package/package.json +2 -2
  488. package/dist/cjs/app-globals-Ciccnk9_.js +0 -10
  489. package/dist/esm/app-globals-BDSf8fOA.js +0 -8
  490. package/dist/ionic/p-012212e4.entry.js +0 -4
  491. package/dist/ionic/p-074839fc.entry.js +0 -4
  492. package/dist/ionic/p-0dfa5a37.entry.js +0 -4
  493. package/dist/ionic/p-0f418a37.entry.js +0 -4
  494. package/dist/ionic/p-11518b31.entry.js +0 -4
  495. package/dist/ionic/p-1838bed5.entry.js +0 -4
  496. package/dist/ionic/p-29721c43.entry.js +0 -4
  497. package/dist/ionic/p-31f7095f.entry.js +0 -4
  498. package/dist/ionic/p-34642fa1.entry.js +0 -4
  499. package/dist/ionic/p-35696017.entry.js +0 -4
  500. package/dist/ionic/p-40c261a3.entry.js +0 -4
  501. package/dist/ionic/p-4e41ea20.entry.js +0 -4
  502. package/dist/ionic/p-6241ce47.entry.js +0 -4
  503. package/dist/ionic/p-639dd543.entry.js +0 -4
  504. package/dist/ionic/p-6444c606.entry.js +0 -4
  505. package/dist/ionic/p-6d070558.entry.js +0 -4
  506. package/dist/ionic/p-7268efa5.entry.js +0 -4
  507. package/dist/ionic/p-7babec72.entry.js +0 -4
  508. package/dist/ionic/p-BKc55Xev.js +0 -4
  509. package/dist/ionic/p-Bmgaetn_.js +0 -4
  510. package/dist/ionic/p-C8IsBmNU.js +0 -5
  511. package/dist/ionic/p-CJxh_yLS.js +0 -4
  512. package/dist/ionic/p-DUt5fQmA.js +0 -4
  513. package/dist/ionic/p-DZRJwG4S.js +0 -4
  514. package/dist/ionic/p-a127bee2.entry.js +0 -4
  515. package/dist/ionic/p-b3d44509.entry.js +0 -4
  516. package/dist/ionic/p-cc45bcbc.entry.js +0 -4
  517. package/dist/ionic/p-d0a2a1ab.entry.js +0 -4
  518. package/dist/ionic/p-d3014190.entry.js +0 -4
  519. package/dist/ionic/p-db82892c.entry.js +0 -4
  520. package/dist/ionic/p-e1d1f3cc.entry.js +0 -4
@@ -1,748 +1,4 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { proxyCustomElement, HTMLElement, createEvent, Build, h, Host } from '@stencil/core/internal/client';
5
- import { g as getTimeGivenProgression } from './cubic-bezier.js';
6
- import { o as getPresentedOverlay, B as BACKDROP, n as focusFirstDescendant, q as focusLastDescendant, G as GESTURE } from './overlays.js';
7
- import { G as GESTURE_CONTROLLER } from './gesture-controller.js';
8
- import { shouldUseCloseWatcher } from './hardware-back-button.js';
9
- import { m as isEndSide, i as inheritAriaAttributes, n as assert, f as clamp } from './helpers.js';
10
- import { c as config, a as printIonError } from './index4.js';
11
- import { m as menuController } from './index5.js';
12
- import { b as getIonMode, a as isPlatform } from './ionic-global.js';
13
- import { h as hostContext } from './theme.js';
14
- import { d as defineCustomElement$2 } from './backdrop.js';
15
-
16
- const menuIosCss = ":host{--width:304px;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--background:var(--ion-background-color, #fff);left:0;right:0;top:0;bottom:0;display:none;position:absolute;contain:strict}:host(.show-menu){display:block}.menu-inner{-webkit-transform:translateX(-9999px);transform:translateX(-9999px);display:-ms-flexbox;display:flex;position:absolute;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:justify;justify-content:space-between;width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);background:var(--background);contain:strict}:host(.menu-side-start) .menu-inner{--ion-safe-area-right:0px;top:0;bottom:0}:host(.menu-side-start) .menu-inner{inset-inline-start:0;inset-inline-end:auto}:host-context([dir=rtl]):host(.menu-side-start) .menu-inner,:host-context([dir=rtl]).menu-side-start .menu-inner{--ion-safe-area-right:unset;--ion-safe-area-left:0px}@supports selector(:dir(rtl)){:host(.menu-side-start:dir(rtl)) .menu-inner{--ion-safe-area-right:unset;--ion-safe-area-left:0px}}:host(.menu-side-end) .menu-inner{--ion-safe-area-left:0px;top:0;bottom:0}:host(.menu-side-end) .menu-inner{inset-inline-start:auto;inset-inline-end:0}:host-context([dir=rtl]):host(.menu-side-end) .menu-inner,:host-context([dir=rtl]).menu-side-end .menu-inner{--ion-safe-area-left:unset;--ion-safe-area-right:0px}@supports selector(:dir(rtl)){:host(.menu-side-end:dir(rtl)) .menu-inner{--ion-safe-area-left:unset;--ion-safe-area-right:0px}}ion-backdrop{display:none;opacity:0.01;z-index:-1}@media (max-width: 340px){.menu-inner{--width:264px}}:host(.menu-type-reveal){z-index:0}:host(.menu-type-reveal.show-menu) .menu-inner{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}:host(.menu-type-overlay){z-index:1000}:host(.menu-type-overlay) .show-backdrop{display:block;cursor:pointer}:host(.menu-pane-visible){-ms-flex:0 1 auto;flex:0 1 auto;width:var(--side-width, var(--width));min-width:var(--side-min-width, var(--min-width));max-width:var(--side-max-width, var(--max-width))}:host(.menu-pane-visible.split-pane-side){left:0;right:0;top:0;bottom:0;position:relative;-webkit-box-shadow:none;box-shadow:none;z-index:0}:host(.menu-pane-visible.split-pane-side.menu-enabled){display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0}:host(.menu-pane-visible.split-pane-side){-ms-flex-order:-1;order:-1}:host(.menu-pane-visible.split-pane-side[side=end]){-ms-flex-order:1;order:1}:host(.menu-pane-visible) .menu-inner{left:0;right:0;width:auto;-webkit-transform:none;transform:none;-webkit-box-shadow:none;box-shadow:none}:host(.menu-pane-visible) ion-backdrop{display:hidden !important}:host(.menu-pane-visible.split-pane-side){-webkit-border-start:0;border-inline-start:0;-webkit-border-end:var(--border);border-inline-end:var(--border);border-top:0;border-bottom:0;min-width:var(--side-min-width);max-width:var(--side-max-width)}:host(.menu-pane-visible.split-pane-side[side=end]){-webkit-border-start:var(--border);border-inline-start:var(--border);-webkit-border-end:0;border-inline-end:0;border-top:0;border-bottom:0;min-width:var(--side-min-width);max-width:var(--side-max-width)}:host(.menu-type-push){z-index:1000}:host(.menu-type-push) .show-backdrop{display:block}";
17
-
18
- const menuMdCss = ":host{--width:304px;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--background:var(--ion-background-color, #fff);left:0;right:0;top:0;bottom:0;display:none;position:absolute;contain:strict}:host(.show-menu){display:block}.menu-inner{-webkit-transform:translateX(-9999px);transform:translateX(-9999px);display:-ms-flexbox;display:flex;position:absolute;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:justify;justify-content:space-between;width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);background:var(--background);contain:strict}:host(.menu-side-start) .menu-inner{--ion-safe-area-right:0px;top:0;bottom:0}:host(.menu-side-start) .menu-inner{inset-inline-start:0;inset-inline-end:auto}:host-context([dir=rtl]):host(.menu-side-start) .menu-inner,:host-context([dir=rtl]).menu-side-start .menu-inner{--ion-safe-area-right:unset;--ion-safe-area-left:0px}@supports selector(:dir(rtl)){:host(.menu-side-start:dir(rtl)) .menu-inner{--ion-safe-area-right:unset;--ion-safe-area-left:0px}}:host(.menu-side-end) .menu-inner{--ion-safe-area-left:0px;top:0;bottom:0}:host(.menu-side-end) .menu-inner{inset-inline-start:auto;inset-inline-end:0}:host-context([dir=rtl]):host(.menu-side-end) .menu-inner,:host-context([dir=rtl]).menu-side-end .menu-inner{--ion-safe-area-left:unset;--ion-safe-area-right:0px}@supports selector(:dir(rtl)){:host(.menu-side-end:dir(rtl)) .menu-inner{--ion-safe-area-left:unset;--ion-safe-area-right:0px}}ion-backdrop{display:none;opacity:0.01;z-index:-1}@media (max-width: 340px){.menu-inner{--width:264px}}:host(.menu-type-reveal){z-index:0}:host(.menu-type-reveal.show-menu) .menu-inner{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}:host(.menu-type-overlay){z-index:1000}:host(.menu-type-overlay) .show-backdrop{display:block;cursor:pointer}:host(.menu-pane-visible){-ms-flex:0 1 auto;flex:0 1 auto;width:var(--side-width, var(--width));min-width:var(--side-min-width, var(--min-width));max-width:var(--side-max-width, var(--max-width))}:host(.menu-pane-visible.split-pane-side){left:0;right:0;top:0;bottom:0;position:relative;-webkit-box-shadow:none;box-shadow:none;z-index:0}:host(.menu-pane-visible.split-pane-side.menu-enabled){display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0}:host(.menu-pane-visible.split-pane-side){-ms-flex-order:-1;order:-1}:host(.menu-pane-visible.split-pane-side[side=end]){-ms-flex-order:1;order:1}:host(.menu-pane-visible) .menu-inner{left:0;right:0;width:auto;-webkit-transform:none;transform:none;-webkit-box-shadow:none;box-shadow:none}:host(.menu-pane-visible) ion-backdrop{display:hidden !important}:host(.menu-pane-visible.split-pane-side){-webkit-border-start:0;border-inline-start:0;-webkit-border-end:var(--border);border-inline-end:var(--border);border-top:0;border-bottom:0;min-width:var(--side-min-width);max-width:var(--side-max-width)}:host(.menu-pane-visible.split-pane-side[side=end]){-webkit-border-start:var(--border);border-inline-start:var(--border);-webkit-border-end:0;border-inline-end:0;border-top:0;border-bottom:0;min-width:var(--side-min-width);max-width:var(--side-max-width)}:host(.menu-type-overlay) .menu-inner{-webkit-box-shadow:4px 0px 16px rgba(0, 0, 0, 0.18);box-shadow:4px 0px 16px rgba(0, 0, 0, 0.18)}";
19
-
20
- const iosEasing = 'cubic-bezier(0.32,0.72,0,1)';
21
- const mdEasing = 'cubic-bezier(0.0,0.0,0.2,1)';
22
- const iosEasingReverse = 'cubic-bezier(1, 0, 0.68, 0.28)';
23
- const mdEasingReverse = 'cubic-bezier(0.4, 0, 0.6, 1)';
24
- const Menu = /*@__PURE__*/ proxyCustomElement(class Menu extends HTMLElement {
25
- constructor(registerHost) {
26
- super();
27
- if (registerHost !== false) {
28
- this.__registerHost();
29
- }
30
- this.__attachShadow();
31
- this.ionWillOpen = createEvent(this, "ionWillOpen", 7);
32
- this.ionWillClose = createEvent(this, "ionWillClose", 7);
33
- this.ionDidOpen = createEvent(this, "ionDidOpen", 7);
34
- this.ionDidClose = createEvent(this, "ionDidClose", 7);
35
- this.ionMenuChange = createEvent(this, "ionMenuChange", 7);
36
- this.lastOnEnd = 0;
37
- this.blocker = GESTURE_CONTROLLER.createBlocker({ disableScroll: true });
38
- this.didLoad = false;
39
- /**
40
- * Flag used to determine if an open/close
41
- * operation was cancelled. For example, if
42
- * an app calls "menu.open" then disables the menu
43
- * part way through the animation, then this would
44
- * be considered a cancelled operation.
45
- */
46
- this.operationCancelled = false;
47
- this.isAnimating = false;
48
- this._isOpen = false;
49
- this.inheritedAttributes = {};
50
- this.handleFocus = (ev) => {
51
- /**
52
- * Overlays have their own focus trapping listener
53
- * so we do not want the two listeners to conflict
54
- * with each other. If the top-most overlay that is
55
- * open does not contain this ion-menu, then ion-menu's
56
- * focus trapping should not run.
57
- */
58
- const lastOverlay = getPresentedOverlay(document);
59
- if (lastOverlay && !lastOverlay.contains(this.el)) {
60
- return;
61
- }
62
- this.trapKeyboardFocus(ev, document);
63
- };
64
- /**
65
- * If true, then the menu should be
66
- * visible within a split pane.
67
- * If false, then the menu is hidden.
68
- * However, the menu-button/menu-toggle
69
- * components can be used to open the
70
- * menu.
71
- */
72
- this.isPaneVisible = false;
73
- this.isEndSide = false;
74
- /**
75
- * If `true`, the menu is disabled.
76
- */
77
- this.disabled = false;
78
- /**
79
- * Which side of the view the menu should be placed.
80
- */
81
- this.side = 'start';
82
- /**
83
- * If `true`, swiping the menu is enabled.
84
- */
85
- this.swipeGesture = true;
86
- /**
87
- * The edge threshold for dragging the menu open.
88
- * If a drag/swipe happens over this value, the menu is not triggered.
89
- */
90
- this.maxEdgeStart = 50;
91
- }
92
- typeChanged(type, oldType) {
93
- const contentEl = this.contentEl;
94
- if (contentEl) {
95
- if (oldType !== undefined) {
96
- contentEl.classList.remove(`menu-content-${oldType}`);
97
- }
98
- contentEl.classList.add(`menu-content-${type}`);
99
- contentEl.removeAttribute('style');
100
- }
101
- if (this.menuInnerEl) {
102
- // Remove effects of previous animations
103
- this.menuInnerEl.removeAttribute('style');
104
- }
105
- this.animation = undefined;
106
- }
107
- disabledChanged() {
108
- this.updateState();
109
- this.ionMenuChange.emit({
110
- disabled: this.disabled,
111
- open: this._isOpen,
112
- });
113
- }
114
- sideChanged() {
115
- this.isEndSide = isEndSide(this.side);
116
- /**
117
- * Menu direction animation is calculated based on the document direction.
118
- * If the document direction changes, we need to create a new animation.
119
- */
120
- this.animation = undefined;
121
- }
122
- swipeGestureChanged() {
123
- this.updateState();
124
- }
125
- async connectedCallback() {
126
- // TODO: connectedCallback is fired in CE build
127
- // before WC is defined. This needs to be fixed in Stencil.
128
- if (typeof customElements !== 'undefined' && customElements != null) {
129
- await customElements.whenDefined('ion-menu');
130
- }
131
- if (this.type === undefined) {
132
- this.type = config.get('menuType', 'overlay');
133
- }
134
- if (!Build.isBrowser) {
135
- return;
136
- }
137
- const content = this.contentId !== undefined ? document.getElementById(this.contentId) : null;
138
- if (content === null) {
139
- printIonError('[ion-menu] - Must have a "content" element to listen for drag events on.');
140
- return;
141
- }
142
- if (this.el.contains(content)) {
143
- printIonError(`[ion-menu] - The "contentId" should refer to the main view's ion-content, not the ion-content inside of the ion-menu.`);
144
- }
145
- this.contentEl = content;
146
- // add menu's content classes
147
- content.classList.add('menu-content');
148
- this.typeChanged(this.type, undefined);
149
- this.sideChanged();
150
- // register this menu with the app's menu controller
151
- menuController._register(this);
152
- this.menuChanged();
153
- this.gesture = (await import('./index3.js')).createGesture({
154
- el: document,
155
- gestureName: 'menu-swipe',
156
- gesturePriority: 30,
157
- threshold: 10,
158
- blurOnStart: true,
159
- canStart: (ev) => this.canStart(ev),
160
- onWillStart: () => this.onWillStart(),
161
- onStart: () => this.onStart(),
162
- onMove: (ev) => this.onMove(ev),
163
- onEnd: (ev) => this.onEnd(ev),
164
- });
165
- this.updateState();
166
- }
167
- componentWillLoad() {
168
- this.inheritedAttributes = inheritAriaAttributes(this.el);
169
- }
170
- async componentDidLoad() {
171
- this.didLoad = true;
172
- /**
173
- * A menu inside of a split pane is assumed
174
- * to be a side pane.
175
- *
176
- * When the menu is loaded it needs to
177
- * see if it should be considered visible inside
178
- * of the split pane. If the split pane is
179
- * hidden then the menu should be too.
180
- */
181
- const splitPane = this.el.closest('ion-split-pane');
182
- if (splitPane !== null) {
183
- this.isPaneVisible = await splitPane.isVisible();
184
- }
185
- this.menuChanged();
186
- this.updateState();
187
- }
188
- menuChanged() {
189
- /**
190
- * Inform dependent components such as ion-menu-button
191
- * that the menu is ready. Note that we only want to do this
192
- * once the menu has been rendered which is why we check for didLoad.
193
- */
194
- if (this.didLoad) {
195
- this.ionMenuChange.emit({ disabled: this.disabled, open: this._isOpen });
196
- }
197
- }
198
- async disconnectedCallback() {
199
- /**
200
- * The menu should be closed when it is
201
- * unmounted from the DOM.
202
- * This is an async call, so we need to wait for
203
- * this to finish otherwise contentEl
204
- * will not have MENU_CONTENT_OPEN removed.
205
- */
206
- await this.close(false);
207
- this.blocker.destroy();
208
- menuController._unregister(this);
209
- if (this.animation) {
210
- this.animation.destroy();
211
- }
212
- if (this.gesture) {
213
- this.gesture.destroy();
214
- this.gesture = undefined;
215
- }
216
- this.animation = undefined;
217
- this.contentEl = undefined;
218
- }
219
- onSplitPaneChanged(ev) {
220
- const closestSplitPane = this.el.closest('ion-split-pane');
221
- if (closestSplitPane !== null && closestSplitPane === ev.target) {
222
- this.isPaneVisible = ev.detail.visible;
223
- this.updateState();
224
- }
225
- }
226
- onBackdropClick(ev) {
227
- // TODO(FW-2832): type (CustomEvent triggers errors which should be sorted)
228
- if (this._isOpen && this.lastOnEnd < ev.timeStamp - 100) {
229
- const shouldClose = ev.composedPath ? !ev.composedPath().includes(this.menuInnerEl) : false;
230
- if (shouldClose) {
231
- ev.preventDefault();
232
- ev.stopPropagation();
233
- this.close(undefined, BACKDROP);
234
- }
235
- }
236
- }
237
- onKeydown(ev) {
238
- if (ev.key === 'Escape') {
239
- this.close(undefined, BACKDROP);
240
- }
241
- }
242
- /**
243
- * Returns `true` is the menu is open.
244
- */
245
- isOpen() {
246
- return Promise.resolve(this._isOpen);
247
- }
248
- /**
249
- * Returns `true` if the menu is active.
250
- *
251
- * A menu is active when it can be opened or closed, meaning it's enabled
252
- * and it's not part of a `ion-split-pane`.
253
- */
254
- isActive() {
255
- return Promise.resolve(this._isActive());
256
- }
257
- /**
258
- * Opens the menu. If the menu is already open or it can't be opened,
259
- * it returns `false`.
260
- *
261
- * @param animated If `true`, the menu will animate when opening.
262
- * If `false`, the menu will open instantly without animation.
263
- * Defaults to `true`.
264
- */
265
- open(animated = true) {
266
- return this.setOpen(true, animated);
267
- }
268
- /**
269
- * Closes the menu. If the menu is already closed or it can't be closed,
270
- * it returns `false`.
271
- *
272
- * @param animated If `true`, the menu will animate when closing. If `false`,
273
- * the menu will close instantly without animation. Defaults to `true`.
274
- * @param role The role of the element that is closing the menu.
275
- * This can be useful in a button handler for determining which button was
276
- * clicked to close the menu. Some examples include:
277
- * `"cancel"`, `"destructive"`, `"selected"`, and `"backdrop"`.
278
- */
279
- close(animated = true, role) {
280
- return this.setOpen(false, animated, role);
281
- }
282
- /**
283
- * Toggles the menu. If the menu is already open, it will try to close,
284
- * otherwise it will try to open it.
285
- * If the operation can't be completed successfully, it returns `false`.
286
- *
287
- * @param animated If `true`, the menu will animate when opening/closing.
288
- * If `false`, the menu will open/close instantly without animation.
289
- * Defaults to `true`.
290
- */
291
- toggle(animated = true) {
292
- return this.setOpen(!this._isOpen, animated);
293
- }
294
- /**
295
- * Opens or closes the menu.
296
- * If the operation can't be completed successfully, it returns `false`.
297
- *
298
- * @param shouldOpen If `true`, the menu will open. If `false`, the menu
299
- * will close.
300
- * @param animated If `true`, the menu will animate when opening/closing.
301
- * If `false`, the menu will open/close instantly without animation.
302
- * @param role The role of the element that is closing the menu.
303
- */
304
- setOpen(shouldOpen, animated = true, role) {
305
- var _a;
306
- // Blur the active element to prevent it from being kept focused inside an element that will be set with aria-hidden="true"
307
- (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.blur();
308
- return menuController._setOpen(this, shouldOpen, animated, role);
309
- }
310
- trapKeyboardFocus(ev, doc) {
311
- const target = ev.target;
312
- if (!target) {
313
- return;
314
- }
315
- /**
316
- * If the target is inside the menu contents, let the browser
317
- * focus as normal and keep a log of the last focused element.
318
- */
319
- if (this.el.contains(target)) {
320
- this.lastFocus = target;
321
- }
322
- else {
323
- /**
324
- * Otherwise, we are about to have focus go out of the menu.
325
- * Wrap the focus to either the first or last element.
326
- */
327
- const { el } = this;
328
- /**
329
- * Once we call `focusFirstDescendant`, another focus event
330
- * will fire, which will cause `lastFocus` to be updated
331
- * before we can run the code after that. We cache the value
332
- * here to avoid that.
333
- */
334
- focusFirstDescendant(el);
335
- /**
336
- * If the cached last focused element is the same as the now-
337
- * active element, that means the user was on the first element
338
- * already and pressed Shift + Tab, so we need to wrap to the
339
- * last descendant.
340
- */
341
- if (this.lastFocus === doc.activeElement) {
342
- focusLastDescendant(el);
343
- }
344
- }
345
- }
346
- async _setOpen(shouldOpen, animated = true, role) {
347
- // If the menu is disabled or it is currently being animated, let's do nothing
348
- if (!this._isActive() || this.isAnimating || shouldOpen === this._isOpen) {
349
- return false;
350
- }
351
- this.beforeAnimation(shouldOpen, role);
352
- await this.loadAnimation();
353
- await this.startAnimation(shouldOpen, animated);
354
- /**
355
- * If the animation was cancelled then
356
- * return false because the operation
357
- * did not succeed.
358
- */
359
- if (this.operationCancelled) {
360
- this.operationCancelled = false;
361
- return false;
362
- }
363
- this.afterAnimation(shouldOpen, role);
364
- return true;
365
- }
366
- async loadAnimation() {
367
- // Menu swipe animation takes the menu's inner width as parameter,
368
- // If `offsetWidth` changes, we need to create a new animation.
369
- const width = this.menuInnerEl.offsetWidth;
370
- /**
371
- * Menu direction animation is calculated based on the document direction.
372
- * If the document direction changes, we need to create a new animation.
373
- */
374
- const isEndSide$1 = isEndSide(this.side);
375
- if (width === this.width && this.animation !== undefined && isEndSide$1 === this.isEndSide) {
376
- return;
377
- }
378
- this.width = width;
379
- this.isEndSide = isEndSide$1;
380
- // Destroy existing animation
381
- if (this.animation) {
382
- this.animation.destroy();
383
- this.animation = undefined;
384
- }
385
- // Create new animation
386
- const animation = (this.animation = await menuController._createAnimation(this.type, this));
387
- if (!config.getBoolean('animated', true)) {
388
- animation.duration(0);
389
- }
390
- animation.fill('both');
391
- }
392
- async startAnimation(shouldOpen, animated) {
393
- const isReversed = !shouldOpen;
394
- const mode = getIonMode(this);
395
- const easing = mode === 'ios' ? iosEasing : mdEasing;
396
- const easingReverse = mode === 'ios' ? iosEasingReverse : mdEasingReverse;
397
- const ani = this.animation
398
- .direction(isReversed ? 'reverse' : 'normal')
399
- .easing(isReversed ? easingReverse : easing);
400
- if (animated) {
401
- await ani.play();
402
- }
403
- else {
404
- ani.play({ sync: true });
405
- }
406
- /**
407
- * We run this after the play invocation
408
- * instead of using ani.onFinish so that
409
- * multiple onFinish callbacks do not get
410
- * run if an animation is played, stopped,
411
- * and then played again.
412
- */
413
- if (ani.getDirection() === 'reverse') {
414
- ani.direction('normal');
415
- }
416
- }
417
- _isActive() {
418
- return !this.disabled && !this.isPaneVisible;
419
- }
420
- canSwipe() {
421
- return this.swipeGesture && !this.isAnimating && this._isActive();
422
- }
423
- canStart(detail) {
424
- // Do not allow swipe gesture if a modal is open
425
- const isModalPresented = !!document.querySelector('ion-modal.show-modal');
426
- if (isModalPresented || !this.canSwipe()) {
427
- return false;
428
- }
429
- if (this._isOpen) {
430
- return true;
431
- }
432
- else if (menuController._getOpenSync()) {
433
- return false;
434
- }
435
- return checkEdgeSide(window, detail.currentX, this.isEndSide, this.maxEdgeStart);
436
- }
437
- onWillStart() {
438
- this.beforeAnimation(!this._isOpen, GESTURE);
439
- return this.loadAnimation();
440
- }
441
- onStart() {
442
- if (!this.isAnimating || !this.animation) {
443
- assert(false, 'isAnimating has to be true');
444
- return;
445
- }
446
- // the cloned animation should not use an easing curve during seek
447
- this.animation.progressStart(true, this._isOpen ? 1 : 0);
448
- }
449
- onMove(detail) {
450
- if (!this.isAnimating || !this.animation) {
451
- assert(false, 'isAnimating has to be true');
452
- return;
453
- }
454
- const delta = computeDelta(detail.deltaX, this._isOpen, this.isEndSide);
455
- const stepValue = delta / this.width;
456
- this.animation.progressStep(this._isOpen ? 1 - stepValue : stepValue);
457
- }
458
- onEnd(detail) {
459
- if (!this.isAnimating || !this.animation) {
460
- assert(false, 'isAnimating has to be true');
461
- return;
462
- }
463
- const isOpen = this._isOpen;
464
- const isEndSide = this.isEndSide;
465
- const delta = computeDelta(detail.deltaX, isOpen, isEndSide);
466
- const width = this.width;
467
- const stepValue = delta / width;
468
- const velocity = detail.velocityX;
469
- const z = width / 2.0;
470
- const shouldCompleteRight = velocity >= 0 && (velocity > 0.2 || detail.deltaX > z);
471
- const shouldCompleteLeft = velocity <= 0 && (velocity < -0.2 || detail.deltaX < -z);
472
- const shouldComplete = isOpen
473
- ? isEndSide
474
- ? shouldCompleteRight
475
- : shouldCompleteLeft
476
- : isEndSide
477
- ? shouldCompleteLeft
478
- : shouldCompleteRight;
479
- let shouldOpen = !isOpen && shouldComplete;
480
- if (isOpen && !shouldComplete) {
481
- shouldOpen = true;
482
- }
483
- this.lastOnEnd = detail.currentTime;
484
- // Account for rounding errors in JS
485
- let newStepValue = shouldComplete ? 0.001 : -1e-3;
486
- /**
487
- * stepValue can sometimes return a negative
488
- * value, but you can't have a negative time value
489
- * for the cubic bezier curve (at least with web animations)
490
- */
491
- const adjustedStepValue = stepValue < 0 ? 0.01 : stepValue;
492
- /**
493
- * Animation will be reversed here, so need to
494
- * reverse the easing curve as well
495
- *
496
- * Additionally, we need to account for the time relative
497
- * to the new easing curve, as `stepValue` is going to be given
498
- * in terms of a linear curve.
499
- */
500
- newStepValue +=
501
- getTimeGivenProgression([0, 0], [0.4, 0], [0.6, 1], [1, 1], clamp(0, adjustedStepValue, 0.9999))[0] || 0;
502
- const playTo = this._isOpen ? !shouldComplete : shouldComplete;
503
- this.animation
504
- .easing('cubic-bezier(0.4, 0.0, 0.6, 1)')
505
- .onFinish(() => this.afterAnimation(shouldOpen, GESTURE), { oneTimeCallback: true })
506
- .progressEnd(playTo ? 1 : 0, this._isOpen ? 1 - newStepValue : newStepValue, 300);
507
- }
508
- beforeAnimation(shouldOpen, role) {
509
- assert(!this.isAnimating, '_before() should not be called while animating');
510
- /**
511
- * When the menu is presented on an Android device, TalkBack's focus rings
512
- * may appear in the wrong position due to the transition (specifically
513
- * `transform` styles). This occurs because the focus rings are initially
514
- * displayed at the starting position of the elements before the transition
515
- * begins. This workaround ensures the focus rings do not appear in the
516
- * incorrect location.
517
- *
518
- * If this solution is applied to iOS devices, then it leads to a bug where
519
- * the overlays cannot be accessed by screen readers. This is due to
520
- * VoiceOver not being able to update the accessibility tree when the
521
- * `aria-hidden` is removed.
522
- */
523
- if (isPlatform('android')) {
524
- this.el.setAttribute('aria-hidden', 'true');
525
- }
526
- // this places the menu into the correct location before it animates in
527
- // this css class doesn't actually kick off any animations
528
- this.el.classList.add(SHOW_MENU);
529
- /**
530
- * We add a tabindex here so that focus trapping
531
- * still works even if the menu does not have
532
- * any focusable elements slotted inside. The
533
- * focus trapping utility will fallback to focusing
534
- * the menu so focus does not leave when the menu
535
- * is open.
536
- */
537
- this.el.setAttribute('tabindex', '0');
538
- if (this.backdropEl) {
539
- this.backdropEl.classList.add(SHOW_BACKDROP);
540
- }
541
- // add css class and hide content behind menu from screen readers
542
- if (this.contentEl) {
543
- this.contentEl.classList.add(MENU_CONTENT_OPEN);
544
- /**
545
- * When the menu is open and overlaying the main
546
- * content, the main content should not be announced
547
- * by the screenreader as the menu is the main
548
- * focus. This is useful with screenreaders that have
549
- * "read from top" gestures that read the entire
550
- * page from top to bottom when activated.
551
- * This should be done before the animation starts
552
- * so that users cannot accidentally scroll
553
- * the content while dragging a menu open.
554
- */
555
- this.contentEl.setAttribute('aria-hidden', 'true');
556
- }
557
- this.blocker.block();
558
- this.isAnimating = true;
559
- if (shouldOpen) {
560
- this.ionWillOpen.emit();
561
- }
562
- else {
563
- this.ionWillClose.emit({ role });
564
- }
565
- }
566
- afterAnimation(isOpen, role) {
567
- var _a;
568
- // keep opening/closing the menu disabled for a touch more yet
569
- // only add listeners/css if it's enabled and isOpen
570
- // and only remove listeners/css if it's not open
571
- // emit opened/closed events
572
- this._isOpen = isOpen;
573
- this.isAnimating = false;
574
- if (!this._isOpen) {
575
- this.blocker.unblock();
576
- }
577
- if (isOpen) {
578
- /**
579
- * When the menu is presented on an Android device, TalkBack's focus rings
580
- * may appear in the wrong position due to the transition (specifically
581
- * `transform` styles). The menu is hidden from screen readers during the
582
- * transition to prevent this. Once the transition is complete, the menu
583
- * is shown again.
584
- */
585
- if (isPlatform('android')) {
586
- this.el.removeAttribute('aria-hidden');
587
- }
588
- // emit open event
589
- this.ionDidOpen.emit();
590
- /**
591
- * Move focus to the menu to prepare focus trapping, as long as
592
- * it isn't already focused. Use the host element instead of the
593
- * first descendant to avoid the scroll position jumping around.
594
- */
595
- const focusedMenu = (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.closest('ion-menu');
596
- if (focusedMenu !== this.el) {
597
- this.el.focus();
598
- }
599
- // start focus trapping
600
- document.addEventListener('focus', this.handleFocus, true);
601
- }
602
- else {
603
- this.el.removeAttribute('aria-hidden');
604
- // remove css classes and unhide content from screen readers
605
- this.el.classList.remove(SHOW_MENU);
606
- /**
607
- * Remove tabindex from the menu component
608
- * so that is cannot be tabbed to.
609
- */
610
- this.el.removeAttribute('tabindex');
611
- if (this.contentEl) {
612
- this.contentEl.classList.remove(MENU_CONTENT_OPEN);
613
- /**
614
- * Remove aria-hidden so screen readers
615
- * can announce the main content again
616
- * now that the menu is not the main focus.
617
- */
618
- this.contentEl.removeAttribute('aria-hidden');
619
- }
620
- if (this.backdropEl) {
621
- this.backdropEl.classList.remove(SHOW_BACKDROP);
622
- }
623
- if (this.animation) {
624
- this.animation.stop();
625
- }
626
- // emit close event
627
- this.ionDidClose.emit({ role });
628
- // undo focus trapping so multiple menus don't collide
629
- document.removeEventListener('focus', this.handleFocus, true);
630
- }
631
- }
632
- updateState() {
633
- const isActive = this._isActive();
634
- if (this.gesture) {
635
- this.gesture.enable(isActive && this.swipeGesture);
636
- }
637
- /**
638
- * If the menu is disabled but it is still open
639
- * then we should close the menu immediately.
640
- * Additionally, if the menu is in the process
641
- * of animating {open, close} and the menu is disabled
642
- * then it should still be closed immediately.
643
- */
644
- if (!isActive) {
645
- /**
646
- * It is possible to disable the menu while
647
- * it is mid-animation. When this happens, we
648
- * need to set the operationCancelled flag
649
- * so that this._setOpen knows to return false
650
- * and not run the "afterAnimation" callback.
651
- */
652
- if (this.isAnimating) {
653
- this.operationCancelled = true;
654
- }
655
- /**
656
- * If the menu is disabled then we should
657
- * forcibly close the menu even if it is open.
658
- */
659
- this.afterAnimation(false, GESTURE);
660
- }
661
- }
662
- render() {
663
- const { type, disabled, el, isPaneVisible, inheritedAttributes, side } = this;
664
- const mode = getIonMode(this);
665
- /**
666
- * If the Close Watcher is enabled then
667
- * the ionBackButton listener in the menu controller
668
- * will handle closing the menu when Escape is pressed.
669
- */
670
- return (h(Host, { key: '70a427f3414a476414c3386efe6c8723fd37eccf', onKeyDown: shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
671
- [mode]: true,
672
- [`menu-type-${type}`]: true,
673
- 'menu-enabled': !disabled,
674
- [`menu-side-${side}`]: true,
675
- 'menu-pane-visible': isPaneVisible,
676
- 'split-pane-side': hostContext('ion-split-pane', el),
677
- } }, h("div", { key: '83af04e5a47d5a92caafaf06088a7114ae61984b', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, h("slot", { key: '7b35048642864bd0f30de9f6b61c949c1b601692' })), h("ion-backdrop", { key: '347af516c7970d80dd11c6d1ed61e9a040ceb5fb', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
678
- }
679
- get el() { return this; }
680
- static get watchers() { return {
681
- "type": ["typeChanged"],
682
- "disabled": ["disabledChanged"],
683
- "side": ["sideChanged"],
684
- "swipeGesture": ["swipeGestureChanged"]
685
- }; }
686
- static get style() { return {
687
- ios: menuIosCss,
688
- md: menuMdCss
689
- }; }
690
- }, [289, "ion-menu", {
691
- "contentId": [513, "content-id"],
692
- "menuId": [513, "menu-id"],
693
- "type": [1025],
694
- "disabled": [1028],
695
- "side": [513],
696
- "swipeGesture": [4, "swipe-gesture"],
697
- "maxEdgeStart": [2, "max-edge-start"],
698
- "isPaneVisible": [32],
699
- "isEndSide": [32],
700
- "isOpen": [64],
701
- "isActive": [64],
702
- "open": [64],
703
- "close": [64],
704
- "toggle": [64],
705
- "setOpen": [64]
706
- }, [[16, "ionSplitPaneVisible", "onSplitPaneChanged"], [2, "click", "onBackdropClick"]], {
707
- "type": ["typeChanged"],
708
- "disabled": ["disabledChanged"],
709
- "side": ["sideChanged"],
710
- "swipeGesture": ["swipeGestureChanged"]
711
- }]);
712
- const computeDelta = (deltaX, isOpen, isEndSide) => {
713
- return Math.max(0, isOpen !== isEndSide ? -deltaX : deltaX);
714
- };
715
- const checkEdgeSide = (win, posX, isEndSide, maxEdgeStart) => {
716
- if (isEndSide) {
717
- return posX >= win.innerWidth - maxEdgeStart;
718
- }
719
- else {
720
- return posX <= maxEdgeStart;
721
- }
722
- };
723
- const SHOW_MENU = 'show-menu';
724
- const SHOW_BACKDROP = 'show-backdrop';
725
- const MENU_CONTENT_OPEN = 'menu-content-open';
726
- function defineCustomElement$1() {
727
- if (typeof customElements === "undefined") {
728
- return;
729
- }
730
- const components = ["ion-menu", "ion-backdrop"];
731
- components.forEach(tagName => { switch (tagName) {
732
- case "ion-menu":
733
- if (!customElements.get(tagName)) {
734
- customElements.define(tagName, Menu);
735
- }
736
- break;
737
- case "ion-backdrop":
738
- if (!customElements.get(tagName)) {
739
- defineCustomElement$2();
740
- }
741
- break;
742
- } });
743
- }
744
-
745
- const IonMenu = Menu;
746
- const defineCustomElement = defineCustomElement$1;
747
-
748
- export { IonMenu, defineCustomElement };
4
+ import{proxyCustomElement as e,HTMLElement as t,createEvent as i,Build as s,h as n,Host as o,transformTag as a}from"@stencil/core/internal/client";import{g as r}from"./cubic-bezier.js";import{o as h,B as d,n as m,q as l,G as u}from"./overlays.js";import{G as p}from"./gesture-controller.js";import{shouldUseCloseWatcher as b}from"./hardware-back-button.js";import{m as c,i as f,n as w,f as x}from"./helpers.js";import{c as v,a as g}from"./index4.js";import{m as y}from"./index5.js";import{b as k,a as C}from"./ionic-global.js";import{h as j}from"./theme.js";import{d as z}from"./backdrop.js";const S=e(class extends t{constructor(e){super(),!1!==e&&this.__registerHost(),this.__attachShadow(),this.ionWillOpen=i(this,"ionWillOpen",7),this.ionWillClose=i(this,"ionWillClose",7),this.ionDidOpen=i(this,"ionDidOpen",7),this.ionDidClose=i(this,"ionDidClose",7),this.ionMenuChange=i(this,"ionMenuChange",7),this.lastOnEnd=0,this.blocker=p.createBlocker({disableScroll:!0}),this.didLoad=!1,this.operationCancelled=!1,this.isAnimating=!1,this._isOpen=!1,this.inheritedAttributes={},this.handleFocus=e=>{const t=h(document);t&&!t.contains(this.el)||this.trapKeyboardFocus(e,document)},this.isPaneVisible=!1,this.isEndSide=!1,this.disabled=!1,this.side="start",this.swipeGesture=!0,this.maxEdgeStart=50}typeChanged(e,t){const i=this.contentEl;i&&(void 0!==t&&i.classList.remove("menu-content-"+t),i.classList.add("menu-content-"+e),i.removeAttribute("style")),this.menuInnerEl&&this.menuInnerEl.removeAttribute("style"),this.animation=void 0}disabledChanged(){this.updateState(),this.ionMenuChange.emit({disabled:this.disabled,open:this._isOpen})}sideChanged(){this.isEndSide=c(this.side),this.animation=void 0}swipeGestureChanged(){this.updateState()}async connectedCallback(){if("undefined"!=typeof customElements&&null!=customElements&&await customElements.whenDefined("ion-menu"),void 0===this.type&&(this.type=v.get("menuType","overlay")),!s.isBrowser)return;const e=void 0!==this.contentId?document.getElementById(this.contentId):null;null!==e?(this.el.contains(e)&&g('[ion-menu] - The "contentId" should refer to the main view\'s ion-content, not the ion-content inside of the ion-menu.'),this.contentEl=e,e.classList.add("menu-content"),this.typeChanged(this.type,void 0),this.sideChanged(),y._register(this),this.menuChanged(),this.gesture=(await import("./index3.js")).createGesture({el:document,gestureName:"menu-swipe",gesturePriority:30,threshold:10,blurOnStart:!0,canStart:e=>this.canStart(e),onWillStart:()=>this.onWillStart(),onStart:()=>this.onStart(),onMove:e=>this.onMove(e),onEnd:e=>this.onEnd(e)}),this.updateState()):g('[ion-menu] - Must have a "content" element to listen for drag events on.')}componentWillLoad(){this.inheritedAttributes=f(this.el)}async componentDidLoad(){this.didLoad=!0;const e=this.el.closest("ion-split-pane");null!==e&&(this.isPaneVisible=await e.isVisible()),this.menuChanged(),this.updateState()}menuChanged(){this.didLoad&&this.ionMenuChange.emit({disabled:this.disabled,open:this._isOpen})}async disconnectedCallback(){await this.close(!1),this.blocker.destroy(),y._unregister(this),this.animation&&this.animation.destroy(),this.gesture&&(this.gesture.destroy(),this.gesture=void 0),this.animation=void 0,this.contentEl=void 0}onSplitPaneChanged(e){const t=this.el.closest("ion-split-pane");null!==t&&t===e.target&&(this.isPaneVisible=e.detail.visible,this.updateState())}onBackdropClick(e){this._isOpen&&this.lastOnEnd<e.timeStamp-100&&e.composedPath&&!e.composedPath().includes(this.menuInnerEl)&&(e.preventDefault(),e.stopPropagation(),this.close(void 0,d))}onKeydown(e){"Escape"===e.key&&this.close(void 0,d)}isOpen(){return Promise.resolve(this._isOpen)}isActive(){return Promise.resolve(this._isActive())}open(e=!0){return this.setOpen(!0,e)}close(e=!0,t){return this.setOpen(!1,e,t)}toggle(e=!0){return this.setOpen(!this._isOpen,e)}setOpen(e,t=!0,i){var s;return null===(s=document.activeElement)||void 0===s||s.blur(),y._setOpen(this,e,t,i)}trapKeyboardFocus(e,t){const i=e.target;if(i)if(this.el.contains(i))this.lastFocus=i;else{const{el:e}=this;m(e),this.lastFocus===t.activeElement&&l(e)}}async _setOpen(e,t=!0,i){return!(!this._isActive()||this.isAnimating||e===this._isOpen||(this.beforeAnimation(e,i),await this.loadAnimation(),await this.startAnimation(e,t),this.operationCancelled?(this.operationCancelled=!1,1):(this.afterAnimation(e,i),0)))}async loadAnimation(){const e=this.menuInnerEl.offsetWidth,t=c(this.side);if(e===this.width&&void 0!==this.animation&&t===this.isEndSide)return;this.width=e,this.isEndSide=t,this.animation&&(this.animation.destroy(),this.animation=void 0);const i=this.animation=await y._createAnimation(this.type,this);v.getBoolean("animated",!0)||i.duration(0),i.fill("both")}async startAnimation(e,t){const i=!e,s=k(this),n="ios"===s?"cubic-bezier(0.32,0.72,0,1)":"cubic-bezier(0.0,0.0,0.2,1)",o="ios"===s?"cubic-bezier(1, 0, 0.68, 0.28)":"cubic-bezier(0.4, 0, 0.6, 1)",a=this.animation.direction(i?"reverse":"normal").easing(i?o:n);t?await a.play():a.play({sync:!0}),"reverse"===a.getDirection()&&a.direction("normal")}_isActive(){return!this.disabled&&!this.isPaneVisible}canSwipe(){return this.swipeGesture&&!this.isAnimating&&this._isActive()}canStart(e){return!(document.querySelector("ion-modal.show-modal")||!this.canSwipe())&&(!!this._isOpen||!y._getOpenSync()&&A(window,e.currentX,this.isEndSide,this.maxEdgeStart))}onWillStart(){return this.beforeAnimation(!this._isOpen,u),this.loadAnimation()}onStart(){this.isAnimating&&this.animation?this.animation.progressStart(!0,this._isOpen?1:0):w(!1,"isAnimating has to be true")}onMove(e){if(!this.isAnimating||!this.animation)return void w(!1,"isAnimating has to be true");const t=E(e.deltaX,this._isOpen,this.isEndSide)/this.width;this.animation.progressStep(this._isOpen?1-t:t)}onEnd(e){if(!this.isAnimating||!this.animation)return void w(!1,"isAnimating has to be true");const t=this._isOpen,i=this.isEndSide,s=E(e.deltaX,t,i),n=this.width,o=s/n,a=e.velocityX,h=n/2,d=a>=0&&(a>.2||e.deltaX>h),m=a<=0&&(a<-.2||e.deltaX<-h),l=t?i?d:m:i?m:d;let p=!t&&l;t&&!l&&(p=!0),this.lastOnEnd=e.currentTime;let b=l?.001:-.001;b+=r([0,0],[.4,0],[.6,1],[1,1],x(0,o<0?.01:o,.9999))[0]||0;const c=this._isOpen?!l:l;this.animation.easing("cubic-bezier(0.4, 0.0, 0.6, 1)").onFinish((()=>this.afterAnimation(p,u)),{oneTimeCallback:!0}).progressEnd(c?1:0,this._isOpen?1-b:b,300)}beforeAnimation(e,t){w(!this.isAnimating,"_before() should not be called while animating"),C("android")&&this.el.setAttribute("aria-hidden","true"),this.el.classList.add(P),this.el.setAttribute("tabindex","0"),this.backdropEl&&this.backdropEl.classList.add(G),this.contentEl&&(this.contentEl.classList.add(O),this.contentEl.setAttribute("aria-hidden","true")),this.blocker.block(),this.isAnimating=!0,e?this.ionWillOpen.emit():this.ionWillClose.emit({role:t})}afterAnimation(e,t){var i;this._isOpen=e,this.isAnimating=!1,this._isOpen||this.blocker.unblock(),e?(C("android")&&this.el.removeAttribute("aria-hidden"),this.ionDidOpen.emit(),(null===(i=document.activeElement)||void 0===i?void 0:i.closest("ion-menu"))!==this.el&&this.el.focus(),document.addEventListener("focus",this.handleFocus,!0)):(this.el.removeAttribute("aria-hidden"),this.el.classList.remove(P),this.el.removeAttribute("tabindex"),this.contentEl&&(this.contentEl.classList.remove(O),this.contentEl.removeAttribute("aria-hidden")),this.backdropEl&&this.backdropEl.classList.remove(G),this.animation&&this.animation.stop(),this.ionDidClose.emit({role:t}),document.removeEventListener("focus",this.handleFocus,!0))}updateState(){const e=this._isActive();this.gesture&&this.gesture.enable(e&&this.swipeGesture),e||(this.isAnimating&&(this.operationCancelled=!0),this.afterAnimation(!1,u))}render(){const{type:e,disabled:t,el:i,isPaneVisible:s,inheritedAttributes:a,side:r}=this,h=k(this);return n(o,{key:"70a427f3414a476414c3386efe6c8723fd37eccf",onKeyDown:b()?null:this.onKeydown,role:"navigation","aria-label":a["aria-label"]||"menu",class:{[h]:!0,["menu-type-"+e]:!0,"menu-enabled":!t,["menu-side-"+r]:!0,"menu-pane-visible":s,"split-pane-side":j("ion-split-pane",i)}},n("div",{key:"83af04e5a47d5a92caafaf06088a7114ae61984b",class:"menu-inner",part:"container",ref:e=>this.menuInnerEl=e},n("slot",{key:"7b35048642864bd0f30de9f6b61c949c1b601692"})),n("ion-backdrop",{key:"347af516c7970d80dd11c6d1ed61e9a040ceb5fb",ref:e=>this.backdropEl=e,class:"menu-backdrop",tappable:!1,stopPropagation:!1,part:"backdrop"}))}get el(){return this}static get watchers(){return{type:[{typeChanged:0}],disabled:[{disabledChanged:0}],side:[{sideChanged:0}],swipeGesture:[{swipeGestureChanged:0}]}}static get style(){return{ios:":host{--width:304px;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--background:var(--ion-background-color, #fff);left:0;right:0;top:0;bottom:0;display:none;position:absolute;contain:strict}:host(.show-menu){display:block}.menu-inner{-webkit-transform:translateX(-9999px);transform:translateX(-9999px);display:-ms-flexbox;display:flex;position:absolute;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:justify;justify-content:space-between;width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);background:var(--background);contain:strict}:host(.menu-side-start) .menu-inner{--ion-safe-area-right:0px;top:0;bottom:0}:host(.menu-side-start) .menu-inner{inset-inline-start:0;inset-inline-end:auto}:host-context([dir=rtl]):host(.menu-side-start) .menu-inner,:host-context([dir=rtl]).menu-side-start .menu-inner{--ion-safe-area-right:unset;--ion-safe-area-left:0px}@supports selector(:dir(rtl)){:host(.menu-side-start:dir(rtl)) .menu-inner{--ion-safe-area-right:unset;--ion-safe-area-left:0px}}:host(.menu-side-end) .menu-inner{--ion-safe-area-left:0px;top:0;bottom:0}:host(.menu-side-end) .menu-inner{inset-inline-start:auto;inset-inline-end:0}:host-context([dir=rtl]):host(.menu-side-end) .menu-inner,:host-context([dir=rtl]).menu-side-end .menu-inner{--ion-safe-area-left:unset;--ion-safe-area-right:0px}@supports selector(:dir(rtl)){:host(.menu-side-end:dir(rtl)) .menu-inner{--ion-safe-area-left:unset;--ion-safe-area-right:0px}}ion-backdrop{display:none;opacity:0.01;z-index:-1}@media (max-width: 340px){.menu-inner{--width:264px}}:host(.menu-type-reveal){z-index:0}:host(.menu-type-reveal.show-menu) .menu-inner{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}:host(.menu-type-overlay){z-index:1000}:host(.menu-type-overlay) .show-backdrop{display:block;cursor:pointer}:host(.menu-pane-visible){-ms-flex:0 1 auto;flex:0 1 auto;width:var(--side-width, var(--width));min-width:var(--side-min-width, var(--min-width));max-width:var(--side-max-width, var(--max-width))}:host(.menu-pane-visible.split-pane-side){left:0;right:0;top:0;bottom:0;position:relative;-webkit-box-shadow:none;box-shadow:none;z-index:0}:host(.menu-pane-visible.split-pane-side.menu-enabled){display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0}:host(.menu-pane-visible.split-pane-side){-ms-flex-order:-1;order:-1}:host(.menu-pane-visible.split-pane-side[side=end]){-ms-flex-order:1;order:1}:host(.menu-pane-visible) .menu-inner{left:0;right:0;width:auto;-webkit-transform:none;transform:none;-webkit-box-shadow:none;box-shadow:none}:host(.menu-pane-visible) ion-backdrop{display:hidden !important}:host(.menu-pane-visible.split-pane-side){-webkit-border-start:0;border-inline-start:0;-webkit-border-end:var(--border);border-inline-end:var(--border);border-top:0;border-bottom:0;min-width:var(--side-min-width);max-width:var(--side-max-width)}:host(.menu-pane-visible.split-pane-side[side=end]){-webkit-border-start:var(--border);border-inline-start:var(--border);-webkit-border-end:0;border-inline-end:0;border-top:0;border-bottom:0;min-width:var(--side-min-width);max-width:var(--side-max-width)}:host(.menu-type-push){z-index:1000}:host(.menu-type-push) .show-backdrop{display:block}",md:":host{--width:304px;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--background:var(--ion-background-color, #fff);left:0;right:0;top:0;bottom:0;display:none;position:absolute;contain:strict}:host(.show-menu){display:block}.menu-inner{-webkit-transform:translateX(-9999px);transform:translateX(-9999px);display:-ms-flexbox;display:flex;position:absolute;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:justify;justify-content:space-between;width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);background:var(--background);contain:strict}:host(.menu-side-start) .menu-inner{--ion-safe-area-right:0px;top:0;bottom:0}:host(.menu-side-start) .menu-inner{inset-inline-start:0;inset-inline-end:auto}:host-context([dir=rtl]):host(.menu-side-start) .menu-inner,:host-context([dir=rtl]).menu-side-start .menu-inner{--ion-safe-area-right:unset;--ion-safe-area-left:0px}@supports selector(:dir(rtl)){:host(.menu-side-start:dir(rtl)) .menu-inner{--ion-safe-area-right:unset;--ion-safe-area-left:0px}}:host(.menu-side-end) .menu-inner{--ion-safe-area-left:0px;top:0;bottom:0}:host(.menu-side-end) .menu-inner{inset-inline-start:auto;inset-inline-end:0}:host-context([dir=rtl]):host(.menu-side-end) .menu-inner,:host-context([dir=rtl]).menu-side-end .menu-inner{--ion-safe-area-left:unset;--ion-safe-area-right:0px}@supports selector(:dir(rtl)){:host(.menu-side-end:dir(rtl)) .menu-inner{--ion-safe-area-left:unset;--ion-safe-area-right:0px}}ion-backdrop{display:none;opacity:0.01;z-index:-1}@media (max-width: 340px){.menu-inner{--width:264px}}:host(.menu-type-reveal){z-index:0}:host(.menu-type-reveal.show-menu) .menu-inner{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}:host(.menu-type-overlay){z-index:1000}:host(.menu-type-overlay) .show-backdrop{display:block;cursor:pointer}:host(.menu-pane-visible){-ms-flex:0 1 auto;flex:0 1 auto;width:var(--side-width, var(--width));min-width:var(--side-min-width, var(--min-width));max-width:var(--side-max-width, var(--max-width))}:host(.menu-pane-visible.split-pane-side){left:0;right:0;top:0;bottom:0;position:relative;-webkit-box-shadow:none;box-shadow:none;z-index:0}:host(.menu-pane-visible.split-pane-side.menu-enabled){display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0}:host(.menu-pane-visible.split-pane-side){-ms-flex-order:-1;order:-1}:host(.menu-pane-visible.split-pane-side[side=end]){-ms-flex-order:1;order:1}:host(.menu-pane-visible) .menu-inner{left:0;right:0;width:auto;-webkit-transform:none;transform:none;-webkit-box-shadow:none;box-shadow:none}:host(.menu-pane-visible) ion-backdrop{display:hidden !important}:host(.menu-pane-visible.split-pane-side){-webkit-border-start:0;border-inline-start:0;-webkit-border-end:var(--border);border-inline-end:var(--border);border-top:0;border-bottom:0;min-width:var(--side-min-width);max-width:var(--side-max-width)}:host(.menu-pane-visible.split-pane-side[side=end]){-webkit-border-start:var(--border);border-inline-start:var(--border);-webkit-border-end:0;border-inline-end:0;border-top:0;border-bottom:0;min-width:var(--side-min-width);max-width:var(--side-max-width)}:host(.menu-type-overlay) .menu-inner{-webkit-box-shadow:4px 0px 16px rgba(0, 0, 0, 0.18);box-shadow:4px 0px 16px rgba(0, 0, 0, 0.18)}"}}},[289,"ion-menu",{contentId:[513,"content-id"],menuId:[513,"menu-id"],type:[1025],disabled:[1028],side:[513],swipeGesture:[4,"swipe-gesture"],maxEdgeStart:[2,"max-edge-start"],isPaneVisible:[32],isEndSide:[32],isOpen:[64],isActive:[64],open:[64],close:[64],toggle:[64],setOpen:[64]},[[16,"ionSplitPaneVisible","onSplitPaneChanged"],[2,"click","onBackdropClick"]],{type:[{typeChanged:0}],disabled:[{disabledChanged:0}],side:[{sideChanged:0}],swipeGesture:[{swipeGestureChanged:0}]}]),E=(e,t,i)=>Math.max(0,t!==i?-e:e),A=(e,t,i,s)=>i?t>=e.innerWidth-s:t<=s,P="show-menu",G="show-backdrop",O="menu-content-open",M=S,W=function(){"undefined"!=typeof customElements&&["ion-menu","ion-backdrop"].forEach((e=>{switch(e){case"ion-menu":customElements.get(a(e))||customElements.define(a(e),S);break;case"ion-backdrop":customElements.get(a(e))||z()}}))};export{M as IonMenu,W as defineCustomElement}