@ionic/core 8.7.17-dev.11771959013.18adabe2 → 8.7.17-dev.11772055571.14fddd38

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 (525) hide show
  1. package/components/action-sheet.js +561 -1
  2. package/components/alert.js +610 -1
  3. package/components/animation.js +817 -1
  4. package/components/backdrop.js +72 -1
  5. package/components/button-active.js +64 -1
  6. package/components/button.js +303 -1
  7. package/components/buttons.js +56 -1
  8. package/components/capacitor.js +10 -1
  9. package/components/checkbox.js +261 -1
  10. package/components/config.js +192 -1
  11. package/components/content.js +475 -1
  12. package/components/cubic-bezier.js +87 -1
  13. package/components/data.js +1635 -1
  14. package/components/dir.js +15 -1
  15. package/components/focus-visible.js +72 -1
  16. package/components/framework-delegate.js +137 -1
  17. package/components/gesture-controller.js +192 -1
  18. package/components/haptic.js +155 -1
  19. package/components/hardware-back-button.js +112 -1
  20. package/components/header.js +417 -1
  21. package/components/helpers.js +336 -1
  22. package/components/icon.js +456 -1
  23. package/components/index.d.ts +0 -2
  24. package/components/index.js +115 -1
  25. package/components/index2.js +416 -1
  26. package/components/index3.js +452 -1
  27. package/components/index4.js +118 -1
  28. package/components/index5.js +303 -1
  29. package/components/index6.js +29 -1
  30. package/components/index7.js +164 -1
  31. package/components/index8.js +125 -1
  32. package/components/index9.js +4 -1
  33. package/components/input-shims.js +624 -1
  34. package/components/input.utils.js +144 -1
  35. package/components/ion-accordion-group.js +269 -1
  36. package/components/ion-accordion.js +457 -1
  37. package/components/ion-action-sheet.js +6 -1
  38. package/components/ion-alert.js +6 -1
  39. package/components/ion-app.js +128 -1
  40. package/components/ion-avatar.js +41 -1
  41. package/components/ion-back-button.js +131 -1
  42. package/components/ion-backdrop.js +6 -1
  43. package/components/ion-badge.js +47 -1
  44. package/components/ion-breadcrumb.js +137 -1
  45. package/components/ion-breadcrumbs.js +164 -1
  46. package/components/ion-button.js +6 -1
  47. package/components/ion-buttons.js +6 -1
  48. package/components/ion-card-content.js +45 -1
  49. package/components/ion-card-header.js +56 -1
  50. package/components/ion-card-subtitle.js +48 -1
  51. package/components/ion-card-title.js +48 -1
  52. package/components/ion-card.js +107 -1
  53. package/components/ion-checkbox.js +6 -1
  54. package/components/ion-chip.js +66 -1
  55. package/components/ion-col.js +163 -1
  56. package/components/ion-content.js +6 -1
  57. package/components/ion-datetime-button.js +384 -1
  58. package/components/ion-datetime.js +2046 -1
  59. package/components/ion-fab-button.js +151 -1
  60. package/components/ion-fab-list.js +66 -1
  61. package/components/ion-fab.js +101 -1
  62. package/components/ion-footer.js +159 -1
  63. package/components/ion-grid.js +46 -1
  64. package/components/ion-header.js +6 -1
  65. package/components/ion-icon.js +6 -1
  66. package/components/ion-img.js +124 -1
  67. package/components/ion-infinite-scroll-content.js +70 -1
  68. package/components/ion-infinite-scroll.js +236 -1
  69. package/components/ion-input-otp.js +683 -1
  70. package/components/ion-input-password-toggle.js +129 -1
  71. package/components/ion-input.js +617 -1
  72. package/components/ion-item-divider.js +59 -1
  73. package/components/ion-item-group.js +46 -1
  74. package/components/ion-item-option.js +91 -1
  75. package/components/ion-item-options.js +73 -1
  76. package/components/ion-item-sliding.js +458 -1
  77. package/components/ion-item.js +6 -1
  78. package/components/ion-label.js +6 -1
  79. package/components/ion-list-header.js +6 -1
  80. package/components/ion-list.js +6 -1
  81. package/components/ion-loading.js +344 -1
  82. package/components/ion-menu-button.js +110 -1
  83. package/components/ion-menu-toggle.js +64 -1
  84. package/components/ion-menu.js +745 -1
  85. package/components/ion-modal.js +6 -1
  86. package/components/ion-nav-link.js +64 -1
  87. package/components/ion-nav.js +956 -1
  88. package/components/ion-note.js +47 -1
  89. package/components/ion-picker-column-option.js +6 -1
  90. package/components/ion-picker-column.js +6 -1
  91. package/components/ion-picker-legacy-column.js +6 -1
  92. package/components/ion-picker-legacy.js +343 -1
  93. package/components/ion-picker.js +6 -1
  94. package/components/ion-popover.js +6 -1
  95. package/components/ion-progress-bar.js +101 -1
  96. package/components/ion-radio-group.js +6 -1
  97. package/components/ion-radio.js +6 -1
  98. package/components/ion-range.js +853 -1
  99. package/components/ion-refresher-content.js +89 -1
  100. package/components/ion-refresher.js +751 -1
  101. package/components/ion-reorder-group.js +322 -1
  102. package/components/ion-reorder.js +60 -1
  103. package/components/ion-ripple-effect.js +6 -1
  104. package/components/ion-route-redirect.js +45 -1
  105. package/components/ion-route.js +74 -1
  106. package/components/ion-router-link.js +61 -1
  107. package/components/ion-router-outlet.js +227 -1
  108. package/components/ion-router.js +841 -1
  109. package/components/ion-row.js +36 -1
  110. package/components/ion-searchbar.js +530 -1
  111. package/components/ion-segment-button.js +174 -1
  112. package/components/ion-segment-content.js +35 -1
  113. package/components/ion-segment-view.js +148 -1
  114. package/components/ion-segment.js +602 -1
  115. package/components/ion-select-modal.js +6 -1
  116. package/components/ion-select-option.js +46 -1
  117. package/components/ion-select-popover.js +6 -1
  118. package/components/ion-select.js +1037 -1
  119. package/components/ion-skeleton-text.js +65 -1
  120. package/components/ion-spinner.js +6 -1
  121. package/components/ion-split-pane.js +197 -1
  122. package/components/ion-tab-bar.js +115 -1
  123. package/components/ion-tab-button.js +128 -1
  124. package/components/ion-tab.js +91 -1
  125. package/components/ion-tabs.js +205 -1
  126. package/components/ion-text.js +42 -1
  127. package/components/ion-textarea.js +554 -1
  128. package/components/ion-thumbnail.js +36 -1
  129. package/components/ion-title.js +6 -1
  130. package/components/ion-toast.js +941 -1
  131. package/components/ion-toggle.js +361 -1
  132. package/components/ion-toolbar.js +6 -1
  133. package/components/ionic-global.js +144 -1
  134. package/components/ios.transition.js +672 -1
  135. package/components/item.js +302 -1
  136. package/components/keyboard-controller.js +162 -1
  137. package/components/keyboard.js +141 -1
  138. package/components/keyboard2.js +76 -1
  139. package/components/label.js +100 -1
  140. package/components/list-header.js +47 -1
  141. package/components/list.js +68 -1
  142. package/components/lock-controller.js +35 -1
  143. package/components/md.transition.js +51 -1
  144. package/components/menu-toggle-util.js +9 -1
  145. package/components/modal.js +2674 -1
  146. package/components/notch-controller.js +150 -1
  147. package/components/overlays.js +912 -1
  148. package/components/picker-column-option.js +136 -1
  149. package/components/picker-column.js +595 -1
  150. package/components/picker-column2.js +377 -1
  151. package/components/picker.js +498 -1
  152. package/components/popover.js +1502 -1
  153. package/components/radio-group.js +287 -1
  154. package/components/radio.js +229 -1
  155. package/components/refresher.utils.js +193 -1
  156. package/components/ripple-effect.js +109 -1
  157. package/components/select-modal.js +196 -1
  158. package/components/select-popover.js +189 -1
  159. package/components/spinner.js +224 -1
  160. package/components/status-tap.js +36 -1
  161. package/components/swipe-back.js +75 -1
  162. package/components/theme.js +40 -1
  163. package/components/title.js +70 -1
  164. package/components/toolbar.js +89 -1
  165. package/components/validity.js +14 -1
  166. package/components/watch-options.js +44 -1
  167. package/dist/cjs/{animation-Dg4yiuR2.js → animation-Bt3H9L1C.js} +1 -1
  168. package/dist/cjs/app-globals-Ciccnk9_.js +10 -0
  169. package/dist/cjs/{button-active-FscMI17-.js → button-active-CMc8cD90.js} +1 -1
  170. package/dist/cjs/{config-BukYi_pW.js → config-C5fsO43a.js} +1 -1
  171. package/dist/cjs/{data-BYlBjkMU.js → data-JwZKaIQB.js} +1 -1
  172. package/dist/cjs/{framework-delegate-CRgp8o_p.js → framework-delegate-DMJRBuDi.js} +1 -1
  173. package/dist/cjs/{hardware-back-button-C4rMJ5uI.js → hardware-back-button-VCK4V3mG.js} +1 -1
  174. package/dist/cjs/{helpers-CxTYJdbT.js → helpers-DrTqNghc.js} +1 -1
  175. package/dist/cjs/{index-C845Ti6K.js → index-094mMFB-.js} +4 -4
  176. package/dist/cjs/{index-YcSftOMz.js → index-C534ULug.js} +2 -2
  177. package/dist/cjs/{index-MbaBbWXk.js → index-CO6eryBo.js} +2 -2
  178. package/dist/cjs/{index-CqT-2gKy.js → index-D6Wc6v08.js} +382 -503
  179. package/dist/cjs/{index-CFUwM5x_.js → index-DrMUZJj6.js} +5 -5
  180. package/dist/cjs/index.cjs.js +12 -12
  181. package/dist/cjs/{input-shims-DlFhYYTs.js → input-shims-CW0KUFTQ.js} +3 -3
  182. package/dist/cjs/{input.utils-DmeJ8dmo.js → input.utils-B_QROI2g.js} +2 -2
  183. package/dist/cjs/ion-accordion_2.cjs.entry.js +15 -23
  184. package/dist/cjs/ion-action-sheet.cjs.entry.js +15 -21
  185. package/dist/cjs/ion-alert.cjs.entry.js +17 -25
  186. package/dist/cjs/ion-app_8.cjs.entry.js +40 -44
  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 +14 -20
  191. package/dist/cjs/ion-button_2.cjs.entry.js +18 -36
  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 +39 -67
  198. package/dist/cjs/ion-fab_3.cjs.entry.js +13 -17
  199. package/dist/cjs/ion-img.cjs.entry.js +6 -8
  200. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +13 -17
  201. package/dist/cjs/ion-input-otp.cjs.entry.js +10 -16
  202. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +7 -9
  203. package/dist/cjs/ion-input.cjs.entry.js +13 -21
  204. package/dist/cjs/ion-item-option_3.cjs.entry.js +15 -17
  205. package/dist/cjs/ion-item_8.cjs.entry.js +36 -42
  206. package/dist/cjs/ion-loading.cjs.entry.js +14 -18
  207. package/dist/cjs/ion-menu_3.cjs.entry.js +22 -30
  208. package/dist/cjs/ion-modal.cjs.entry.js +221 -62
  209. package/dist/cjs/ion-nav_2.cjs.entry.js +10 -14
  210. package/dist/cjs/ion-picker-column-option.cjs.entry.js +8 -10
  211. package/dist/cjs/ion-picker-column.cjs.entry.js +7 -11
  212. package/dist/cjs/ion-picker.cjs.entry.js +6 -6
  213. package/dist/cjs/ion-popover.cjs.entry.js +15 -21
  214. package/dist/cjs/ion-progress-bar.cjs.entry.js +7 -7
  215. package/dist/cjs/ion-radio_2.cjs.entry.js +13 -17
  216. package/dist/cjs/ion-range.cjs.entry.js +54 -180
  217. package/dist/cjs/ion-refresher_2.cjs.entry.js +14 -45
  218. package/dist/cjs/ion-reorder_2.cjs.entry.js +11 -13
  219. package/dist/cjs/ion-ripple-effect.cjs.entry.js +4 -4
  220. package/dist/cjs/ion-route_4.cjs.entry.js +10 -20
  221. package/dist/cjs/ion-searchbar.cjs.entry.js +12 -22
  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 +16 -26
  225. package/dist/cjs/ion-select-modal.cjs.entry.js +12 -12
  226. package/dist/cjs/ion-select_3.cjs.entry.js +21 -29
  227. package/dist/cjs/ion-spinner.cjs.entry.js +4 -4
  228. package/dist/cjs/ion-split-pane.cjs.entry.js +9 -15
  229. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +12 -14
  230. package/dist/cjs/ion-tab_2.cjs.entry.js +8 -10
  231. package/dist/cjs/ion-text.cjs.entry.js +4 -4
  232. package/dist/cjs/ion-textarea.cjs.entry.js +12 -18
  233. package/dist/cjs/ion-toast.cjs.entry.js +15 -21
  234. package/dist/cjs/ion-toggle.cjs.entry.js +8 -10
  235. package/dist/cjs/{ionic-global-Bc3kJi1Z.js → ionic-global-HMVqOFGO.js} +1 -1
  236. package/dist/cjs/ionic.cjs.js +5 -5
  237. package/dist/cjs/{ios.transition-trBiC95R.js → ios.transition-BOt_uW73.js} +4 -4
  238. package/dist/cjs/loader.cjs.js +4 -4
  239. package/dist/cjs/{md.transition-CUQECuvD.js → md.transition-Dt968VXB.js} +4 -4
  240. package/dist/cjs/{notch-controller-sD-lTpdc.js → notch-controller-Bzqhjm4f.js} +1 -1
  241. package/dist/cjs/{overlays-C2jiBSNQ.js → overlays-B2b-TTbl.js} +5 -5
  242. package/dist/cjs/{status-tap-CCJk5VgT.js → status-tap-g0sWWkXk.js} +3 -3
  243. package/dist/cjs/{swipe-back-BGhTQ1CU.js → swipe-back-BIayeNOD.js} +2 -2
  244. package/dist/collection/collection-manifest.json +2 -2
  245. package/dist/collection/components/accordion-group/accordion-group.js +2 -4
  246. package/dist/collection/components/action-sheet/action-sheet.js +10 -20
  247. package/dist/collection/components/alert/alert.js +12 -24
  248. package/dist/collection/components/back-button/back-button.js +2 -4
  249. package/dist/collection/components/badge/badge.js +1 -2
  250. package/dist/collection/components/breadcrumb/breadcrumb.js +4 -8
  251. package/dist/collection/components/breadcrumbs/breadcrumbs.js +2 -4
  252. package/dist/collection/components/button/button.js +3 -6
  253. package/dist/collection/components/card/card.js +3 -6
  254. package/dist/collection/components/card-header/card-header.js +1 -2
  255. package/dist/collection/components/card-subtitle/card-subtitle.js +1 -2
  256. package/dist/collection/components/card-title/card-title.js +1 -2
  257. package/dist/collection/components/checkbox/checkbox.js +2 -4
  258. package/dist/collection/components/chip/chip.js +1 -2
  259. package/dist/collection/components/content/content.js +4 -8
  260. package/dist/collection/components/datetime/datetime.js +15 -34
  261. package/dist/collection/components/datetime-button/datetime-button.js +1 -2
  262. package/dist/collection/components/fab-button/fab-button.js +3 -6
  263. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +2 -4
  264. package/dist/collection/components/input/input.js +6 -11
  265. package/dist/collection/components/input-otp/input-otp.js +4 -8
  266. package/dist/collection/components/input-password-toggle/input-password-toggle.js +2 -4
  267. package/dist/collection/components/item/item.js +3 -6
  268. package/dist/collection/components/item-divider/item-divider.js +1 -2
  269. package/dist/collection/components/item-option/item-option.js +1 -2
  270. package/dist/collection/components/item-options/item-options.js +1 -2
  271. package/dist/collection/components/item-sliding/item-sliding.js +1 -2
  272. package/dist/collection/components/label/label.js +3 -6
  273. package/dist/collection/components/list-header/list-header.js +1 -2
  274. package/dist/collection/components/loading/loading.js +11 -22
  275. package/dist/collection/components/menu/menu.js +5 -10
  276. package/dist/collection/components/menu-button/menu-button.js +1 -2
  277. package/dist/collection/components/modal/gestures/sheet.js +108 -11
  278. package/dist/collection/components/modal/gestures/swipe-to-close.js +54 -1
  279. package/dist/collection/components/modal/modal.js +112 -58
  280. package/dist/collection/components/nav/nav.js +45 -89
  281. package/dist/collection/components/nav-link/nav-link.js +5 -9
  282. package/dist/collection/components/note/note.js +1 -2
  283. package/dist/collection/components/picker/picker.js +1 -2
  284. package/dist/collection/components/picker-column/picker-column.js +3 -6
  285. package/dist/collection/components/picker-column-option/picker-column-option.js +1 -2
  286. package/dist/collection/components/picker-legacy/picker.js +12 -24
  287. package/dist/collection/components/picker-legacy-column/picker-column.js +2 -4
  288. package/dist/collection/components/popover/popover.js +17 -33
  289. package/dist/collection/components/progress-bar/progress-bar.js +1 -2
  290. package/dist/collection/components/radio/radio.js +1 -2
  291. package/dist/collection/components/radio-group/radio-group.js +3 -6
  292. package/dist/collection/components/range/range.js +50 -189
  293. package/dist/collection/components/refresher/refresher.js +5 -73
  294. package/dist/collection/components/refresher-content/refresher-content.js +4 -8
  295. package/dist/collection/components/reorder-group/reorder-group.js +3 -6
  296. package/dist/collection/components/route/route.js +2 -4
  297. package/dist/collection/components/router/router.js +5 -10
  298. package/dist/collection/components/router-link/router-link.js +3 -6
  299. package/dist/collection/components/router-outlet/router-outlet.js +9 -18
  300. package/dist/collection/components/searchbar/searchbar.js +6 -11
  301. package/dist/collection/components/segment/segment.js +5 -10
  302. package/dist/collection/components/segment-button/segment-button.js +2 -4
  303. package/dist/collection/components/segment-view/segment-view.js +1 -2
  304. package/dist/collection/components/select/select.js +5 -10
  305. package/dist/collection/components/select-modal/select-modal.js +1 -2
  306. package/dist/collection/components/select-popover/select-popover.js +1 -2
  307. package/dist/collection/components/skeleton-text/skeleton-text.js +1 -2
  308. package/dist/collection/components/spinner/spinner.js +2 -4
  309. package/dist/collection/components/tab/tab.js +2 -4
  310. package/dist/collection/components/tab-bar/tab-bar.js +2 -4
  311. package/dist/collection/components/tab-button/tab-button.js +2 -4
  312. package/dist/collection/components/tabs/tabs.js +2 -4
  313. package/dist/collection/components/text/text.js +1 -2
  314. package/dist/collection/components/textarea/textarea.js +3 -6
  315. package/dist/collection/components/title/title.js +2 -4
  316. package/dist/collection/components/toast/toast.js +17 -34
  317. package/dist/collection/components/toggle/toggle.js +2 -4
  318. package/dist/collection/components/toolbar/toolbar.js +1 -2
  319. package/dist/docs.d.ts +0 -37
  320. package/dist/docs.json +442 -971
  321. package/dist/esm/{animation-CnGMT4ji.js → animation-Dt8bGnA-.js} +1 -1
  322. package/dist/esm/app-globals-BDSf8fOA.js +8 -0
  323. package/dist/esm/{button-active-BBx21brx.js → button-active-L570Swow.js} +1 -1
  324. package/dist/esm/{config-TO1rZH52.js → config-mCdtaoPe.js} +1 -1
  325. package/dist/esm/{data-B9iGR5YO.js → data-DCORV9FH.js} +1 -1
  326. package/dist/esm/{framework-delegate-CyxE1S_P.js → framework-delegate-BYawdMXj.js} +1 -1
  327. package/dist/esm/{hardware-back-button-CTe4XmL7.js → hardware-back-button-CPLxO-Ev.js} +1 -1
  328. package/dist/esm/{helpers-Tl8jw6S2.js → helpers-DEn3pfjm.js} +1 -1
  329. package/dist/esm/{index-hW6eNZ3o.js → index-Bs3kT4bc.js} +2 -2
  330. package/dist/esm/{index-IGIE5vDm.js → index-C8IsBmNU.js} +382 -503
  331. package/dist/esm/{index-B2KwgBLx.js → index-CvDIirVx.js} +5 -5
  332. package/dist/esm/{index-BtUdxPjv.js → index-ceb5RaMT.js} +2 -2
  333. package/dist/esm/{index-B-hkiOUh.js → index-r2D9DEro.js} +4 -4
  334. package/dist/esm/index.js +12 -12
  335. package/dist/esm/{input-shims-C1hAaHcP.js → input-shims-DyOpfTg6.js} +3 -3
  336. package/dist/esm/{input.utils-Bxa_DQ7-.js → input.utils-DrvTa8gz.js} +2 -2
  337. package/dist/esm/ion-accordion_2.entry.js +15 -23
  338. package/dist/esm/ion-action-sheet.entry.js +15 -21
  339. package/dist/esm/ion-alert.entry.js +17 -25
  340. package/dist/esm/ion-app_8.entry.js +40 -44
  341. package/dist/esm/ion-avatar_3.entry.js +12 -12
  342. package/dist/esm/ion-back-button.entry.js +7 -7
  343. package/dist/esm/ion-backdrop.entry.js +6 -6
  344. package/dist/esm/ion-breadcrumb_2.entry.js +14 -20
  345. package/dist/esm/ion-button_2.entry.js +18 -36
  346. package/dist/esm/ion-card_5.entry.js +23 -23
  347. package/dist/esm/ion-checkbox.entry.js +7 -7
  348. package/dist/esm/ion-chip.entry.js +6 -6
  349. package/dist/esm/ion-col_3.entry.js +8 -8
  350. package/dist/esm/ion-datetime-button.entry.js +8 -8
  351. package/dist/esm/ion-datetime_3.entry.js +39 -67
  352. package/dist/esm/ion-fab_3.entry.js +13 -17
  353. package/dist/esm/ion-img.entry.js +6 -8
  354. package/dist/esm/ion-infinite-scroll_2.entry.js +13 -17
  355. package/dist/esm/ion-input-otp.entry.js +10 -16
  356. package/dist/esm/ion-input-password-toggle.entry.js +7 -9
  357. package/dist/esm/ion-input.entry.js +13 -21
  358. package/dist/esm/ion-item-option_3.entry.js +15 -17
  359. package/dist/esm/ion-item_8.entry.js +36 -42
  360. package/dist/esm/ion-loading.entry.js +14 -18
  361. package/dist/esm/ion-menu_3.entry.js +22 -30
  362. package/dist/esm/ion-modal.entry.js +221 -62
  363. package/dist/esm/ion-nav_2.entry.js +10 -14
  364. package/dist/esm/ion-picker-column-option.entry.js +8 -10
  365. package/dist/esm/ion-picker-column.entry.js +7 -11
  366. package/dist/esm/ion-picker.entry.js +6 -6
  367. package/dist/esm/ion-popover.entry.js +15 -21
  368. package/dist/esm/ion-progress-bar.entry.js +7 -7
  369. package/dist/esm/ion-radio_2.entry.js +13 -17
  370. package/dist/esm/ion-range.entry.js +54 -180
  371. package/dist/esm/ion-refresher_2.entry.js +14 -45
  372. package/dist/esm/ion-reorder_2.entry.js +11 -13
  373. package/dist/esm/ion-ripple-effect.entry.js +4 -4
  374. package/dist/esm/ion-route_4.entry.js +10 -20
  375. package/dist/esm/ion-searchbar.entry.js +12 -22
  376. package/dist/esm/ion-segment-content.entry.js +3 -3
  377. package/dist/esm/ion-segment-view.entry.js +5 -5
  378. package/dist/esm/ion-segment_2.entry.js +16 -26
  379. package/dist/esm/ion-select-modal.entry.js +12 -12
  380. package/dist/esm/ion-select_3.entry.js +21 -29
  381. package/dist/esm/ion-spinner.entry.js +4 -4
  382. package/dist/esm/ion-split-pane.entry.js +9 -15
  383. package/dist/esm/ion-tab-bar_2.entry.js +12 -14
  384. package/dist/esm/ion-tab_2.entry.js +8 -10
  385. package/dist/esm/ion-text.entry.js +4 -4
  386. package/dist/esm/ion-textarea.entry.js +12 -18
  387. package/dist/esm/ion-toast.entry.js +15 -21
  388. package/dist/esm/ion-toggle.entry.js +8 -10
  389. package/dist/esm/{ionic-global-DfbeLwcV.js → ionic-global-CDrldh-5.js} +1 -1
  390. package/dist/esm/ionic.js +6 -6
  391. package/dist/esm/{ios.transition--aMF-pDH.js → ios.transition-BDzw0_Hm.js} +4 -4
  392. package/dist/esm/loader.js +5 -5
  393. package/dist/esm/{md.transition-BEVbfm8j.js → md.transition-BzDYi3qq.js} +4 -4
  394. package/dist/esm/{notch-controller-DAcvKU57.js → notch-controller-BwelN_JM.js} +1 -1
  395. package/dist/esm/{overlays-F8GHPo-e.js → overlays-D5YkFThA.js} +5 -5
  396. package/dist/esm/{status-tap-BfJqFSLF.js → status-tap-5DQ7Fc4V.js} +3 -3
  397. package/dist/esm/{swipe-back-BZBFwTQV.js → swipe-back-BKw2CAHc.js} +2 -2
  398. package/dist/html.html-data.json +109 -109
  399. package/dist/ionic/index.esm.js +1 -1
  400. package/dist/ionic/ionic.esm.js +1 -1
  401. package/dist/ionic/p-012212e4.entry.js +4 -0
  402. package/dist/ionic/p-074839fc.entry.js +4 -0
  403. package/dist/ionic/p-0dfa5a37.entry.js +4 -0
  404. package/dist/ionic/p-0f418a37.entry.js +4 -0
  405. package/dist/ionic/p-11518b31.entry.js +4 -0
  406. package/dist/ionic/{p-80cac7a2.entry.js → p-11aa58d6.entry.js} +1 -1
  407. package/dist/ionic/p-1838bed5.entry.js +4 -0
  408. package/dist/ionic/p-29721c43.entry.js +4 -0
  409. package/dist/ionic/{p-b67a2114.entry.js → p-2a939845.entry.js} +1 -1
  410. package/dist/ionic/{p-025d2d32.entry.js → p-316c0420.entry.js} +1 -1
  411. package/dist/ionic/p-31f7095f.entry.js +4 -0
  412. package/dist/ionic/p-34642fa1.entry.js +4 -0
  413. package/dist/ionic/p-35696017.entry.js +4 -0
  414. package/dist/ionic/{p-074344b8.entry.js → p-370e4237.entry.js} +1 -1
  415. package/dist/ionic/{p-964090ef.entry.js → p-3a6caca9.entry.js} +1 -1
  416. package/dist/ionic/p-40c261a3.entry.js +4 -0
  417. package/dist/ionic/{p-1fd588a7.entry.js → p-46d74291.entry.js} +1 -1
  418. package/dist/ionic/{p-301c43f8.entry.js → p-49d06882.entry.js} +1 -1
  419. package/dist/ionic/p-4e41ea20.entry.js +4 -0
  420. package/dist/ionic/{p-7c72d482.entry.js → p-51a60e0f.entry.js} +1 -1
  421. package/dist/ionic/{p-9833cf63.entry.js → p-582824c5.entry.js} +1 -1
  422. package/dist/ionic/p-6241ce47.entry.js +4 -0
  423. package/dist/ionic/p-639dd543.entry.js +4 -0
  424. package/dist/ionic/p-6444c606.entry.js +4 -0
  425. package/dist/ionic/{p-9fae83d8.entry.js → p-675b1a31.entry.js} +1 -1
  426. package/dist/ionic/p-6d070558.entry.js +4 -0
  427. package/dist/ionic/p-7268efa5.entry.js +4 -0
  428. package/dist/ionic/{p-b4d52b58.entry.js → p-72c38b88.entry.js} +1 -1
  429. package/dist/ionic/{p-370a60ee.entry.js → p-79bd78f9.entry.js} +1 -1
  430. package/dist/ionic/p-7babec72.entry.js +4 -0
  431. package/dist/ionic/{p-a287e18e.entry.js → p-86f53961.entry.js} +1 -1
  432. package/dist/ionic/{p-277abec1.entry.js → p-94de5cfa.entry.js} +1 -1
  433. package/dist/ionic/{p-e663bc5a.entry.js → p-9575b654.entry.js} +1 -1
  434. package/dist/ionic/{p-c1c9b2bb.entry.js → p-9a2d390d.entry.js} +1 -1
  435. package/dist/ionic/{p-DB_iPQC-.js → p-B0q1YL7N.js} +1 -1
  436. package/dist/ionic/{p-NFFyoJ4Q.js → p-BFvmZNyx.js} +1 -1
  437. package/dist/ionic/p-BKc55Xev.js +4 -0
  438. package/dist/ionic/{p-CYbRmDdy.js → p-BOVrCkpJ.js} +1 -1
  439. package/dist/ionic/{p-C0JvVFMv.js → p-BYEqWnSg.js} +1 -1
  440. package/dist/ionic/p-Bmgaetn_.js +4 -0
  441. package/dist/ionic/{p-BAt5H1ac.js → p-C7hRNDhM.js} +1 -1
  442. package/dist/ionic/p-C8IsBmNU.js +5 -0
  443. package/dist/ionic/p-CJxh_yLS.js +4 -0
  444. package/dist/ionic/{p-CGmVTdWh.js → p-CTfR9YZG.js} +1 -1
  445. package/dist/ionic/{p-B8xlpH8p.js → p-CwgG81ZD.js} +1 -1
  446. package/dist/ionic/{p-CmFz1Mjc.js → p-D-eFFUkA.js} +1 -1
  447. package/dist/ionic/{p-BvFYtOdE.js → p-D0dMcSkw.js} +1 -1
  448. package/dist/ionic/{p-DjriolRs.js → p-DCv9sLH2.js} +1 -1
  449. package/dist/ionic/{p-Bum7H1fw.js → p-DDb5r57F.js} +1 -1
  450. package/dist/ionic/{p-DLbbmF9h.js → p-DNcfiJwE.js} +1 -1
  451. package/dist/ionic/p-DUt5fQmA.js +4 -0
  452. package/dist/ionic/p-DZRJwG4S.js +4 -0
  453. package/dist/ionic/{p-gbVXD275.js → p-DbQ5QkTP.js} +1 -1
  454. package/dist/ionic/{p-BxIcPWoV.js → p-Dc45iWE4.js} +1 -1
  455. package/dist/ionic/{p-DTPR1Wpn.js → p-DdR6rpbR.js} +1 -1
  456. package/dist/ionic/{p-GWUGgWx6.js → p-QHYY4sjU.js} +1 -1
  457. package/dist/ionic/p-a127bee2.entry.js +4 -0
  458. package/dist/ionic/{p-f5dfb9a3.entry.js → p-ac4eb91d.entry.js} +1 -1
  459. package/dist/ionic/{p-ca31010f.entry.js → p-b0a7585c.entry.js} +1 -1
  460. package/dist/ionic/p-b3d44509.entry.js +4 -0
  461. package/dist/ionic/{p-bced1f3e.entry.js → p-c73627c8.entry.js} +1 -1
  462. package/dist/ionic/p-cc45bcbc.entry.js +4 -0
  463. package/dist/ionic/p-d0a2a1ab.entry.js +4 -0
  464. package/dist/ionic/{p-9745651b.entry.js → p-d126e8d3.entry.js} +1 -1
  465. package/dist/ionic/{p-b440381f.entry.js → p-d1f54e28.entry.js} +1 -1
  466. package/dist/ionic/{p-1fa1406c.entry.js → p-d2489bf2.entry.js} +1 -1
  467. package/dist/ionic/p-d3014190.entry.js +4 -0
  468. package/dist/ionic/{p-a84f2d21.entry.js → p-da7d04cc.entry.js} +1 -1
  469. package/dist/ionic/p-db82892c.entry.js +4 -0
  470. package/dist/ionic/{p-b2d5238b.entry.js → p-dbbe606a.entry.js} +1 -1
  471. package/dist/ionic/{p-28d7852f.entry.js → p-dd1aef77.entry.js} +1 -1
  472. package/dist/ionic/p-e1d1f3cc.entry.js +4 -0
  473. package/dist/ionic/{p-c3e65e45.entry.js → p-f8f22cc0.entry.js} +1 -1
  474. package/dist/ionic/{p-9802c88e.entry.js → p-f9061316.entry.js} +1 -1
  475. package/dist/types/components/datetime/datetime.d.ts +0 -9
  476. package/dist/types/components/header/header.utils.d.ts +1 -2
  477. package/dist/types/components/modal/gestures/sheet.d.ts +2 -2
  478. package/dist/types/components/modal/gestures/swipe-to-close.d.ts +2 -2
  479. package/dist/types/components/modal/modal-interface.d.ts +7 -0
  480. package/dist/types/components/modal/modal.d.ts +17 -1
  481. package/dist/types/components/range/range-interface.d.ts +0 -1
  482. package/dist/types/components/range/range.d.ts +4 -33
  483. package/dist/types/components/refresher/refresher-interface.d.ts +0 -7
  484. package/dist/types/components/refresher/refresher.d.ts +3 -16
  485. package/dist/types/components.d.ts +206 -929
  486. package/dist/types/interface.d.ts +2 -2
  487. package/dist/types/stencil-public-runtime.d.ts +14 -126
  488. package/dist/types/utils/gesture/listener.d.ts +1 -2
  489. package/hydrate/index.d.ts +0 -12
  490. package/hydrate/index.js +1550 -5375
  491. package/hydrate/index.mjs +1551 -5374
  492. package/package.json +2 -2
  493. package/dist/cjs/app-globals-CLI8xCmk.js +0 -11
  494. package/dist/esm/app-globals-DhZjtldk.js +0 -9
  495. package/dist/ionic/p-02acdef4.entry.js +0 -4
  496. package/dist/ionic/p-04e2c388.entry.js +0 -4
  497. package/dist/ionic/p-13ade5c8.entry.js +0 -4
  498. package/dist/ionic/p-1b02923f.entry.js +0 -4
  499. package/dist/ionic/p-1bd477a9.entry.js +0 -4
  500. package/dist/ionic/p-239a27a4.entry.js +0 -4
  501. package/dist/ionic/p-3e143d1d.entry.js +0 -4
  502. package/dist/ionic/p-4431ef7e.entry.js +0 -4
  503. package/dist/ionic/p-463767ce.entry.js +0 -4
  504. package/dist/ionic/p-4f888343.entry.js +0 -4
  505. package/dist/ionic/p-51c11c47.entry.js +0 -4
  506. package/dist/ionic/p-56050077.entry.js +0 -4
  507. package/dist/ionic/p-6a3a5aae.entry.js +0 -4
  508. package/dist/ionic/p-6b97f2a3.entry.js +0 -4
  509. package/dist/ionic/p-77de9c60.entry.js +0 -4
  510. package/dist/ionic/p-7d20f4f8.entry.js +0 -4
  511. package/dist/ionic/p-91fc7352.entry.js +0 -4
  512. package/dist/ionic/p-93845421.entry.js +0 -4
  513. package/dist/ionic/p-96a2e768.entry.js +0 -4
  514. package/dist/ionic/p-9d1676bb.entry.js +0 -4
  515. package/dist/ionic/p-BW_TRJm8.js +0 -4
  516. package/dist/ionic/p-CtA-yJYy.js +0 -4
  517. package/dist/ionic/p-D8HJQ1qq.js +0 -4
  518. package/dist/ionic/p-DtVZDHlS.js +0 -4
  519. package/dist/ionic/p-IGIE5vDm.js +0 -5
  520. package/dist/ionic/p-a805674e.entry.js +0 -4
  521. package/dist/ionic/p-a81ae2cd.entry.js +0 -4
  522. package/dist/ionic/p-cbf245b5.entry.js +0 -4
  523. package/dist/ionic/p-d68b665a.entry.js +0 -4
  524. package/dist/ionic/p-efe86ed9.entry.js +0 -4
  525. package/dist/ionic/p-hNN3VvaC.js +0 -4
@@ -1,4 +1,478 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import{proxyCustomElement as t,HTMLElement as o,createEvent as i,Build as s,readTask as e,forceUpdate as n,h as r,Host as l,transformTag as a}from"@stencil/core/internal/client";import{i as c,k as h,c as d}from"./helpers.js";import{b as f,a as p}from"./ionic-global.js";import{i as m}from"./dir.js";import{c as b,h as v}from"./theme.js";const u=t(class extends o{constructor(t){super(),!1!==t&&this.__registerHost(),this.__attachShadow(),this.ionScrollStart=i(this,"ionScrollStart",7),this.ionScroll=i(this,"ionScroll",7),this.ionScrollEnd=i(this,"ionScrollEnd",7),this.watchDog=null,this.isScrolling=!1,this.lastScroll=0,this.queued=!1,this.cTop=-1,this.cBottom=-1,this.isMainContent=!0,this.resizeTimeout=null,this.inheritedAttributes={},this.tabsElement=null,this.detail={scrollTop:0,scrollLeft:0,type:"scroll",event:void 0,startX:0,startY:0,startTime:0,currentX:0,currentY:0,velocityX:0,velocityY:0,deltaX:0,deltaY:0,currentTime:0,data:void 0,isScrolling:!0},this.fullscreen=!1,this.fixedSlotPlacement="after",this.scrollX=!1,this.scrollY=!0,this.scrollEvents=!1}componentWillLoad(){this.inheritedAttributes=c(this.el)}connectedCallback(){if(this.isMainContent=null===this.el.closest("ion-menu, ion-popover, ion-modal"),h(this.el)){const t=this.tabsElement=this.el.closest("ion-tabs");null!==t&&(this.tabsLoadCallback=()=>this.resize(),t.addEventListener("ionTabBarLoaded",this.tabsLoadCallback))}}disconnectedCallback(){if(this.onScrollEnd(),h(this.el)){const{tabsElement:t,tabsLoadCallback:o}=this;null!==t&&void 0!==o&&t.removeEventListener("ionTabBarLoaded",o),this.tabsElement=null,this.tabsLoadCallback=void 0}}onResize(){this.resizeTimeout&&(clearTimeout(this.resizeTimeout),this.resizeTimeout=null),this.resizeTimeout=setTimeout((()=>{null!==this.el.offsetParent&&this.resize()}),100)}shouldForceOverscroll(){const{forceOverscroll:t}=this,o=f(this);return void 0===t?"ios"===o&&p("ios"):t}resize(){s.isBrowser&&(this.fullscreen?e((()=>this.readDimensions())):0===this.cTop&&0===this.cBottom||(this.cTop=this.cBottom=0,n(this)))}async recalculateDimensions(){e((()=>this.readDimensions()))}readDimensions(){const t=g(this.el),o=Math.max(this.el.offsetTop,0),i=Math.max(t.offsetHeight-o-this.el.offsetHeight,0);(o!==this.cTop||i!==this.cBottom)&&(this.cTop=o,this.cBottom=i,n(this))}onScroll(t){const o=Date.now(),i=!this.isScrolling;this.lastScroll=o,i&&this.onScrollStart(),!this.queued&&this.scrollEvents&&(this.queued=!0,e((o=>{this.queued=!1,this.detail.event=t,x(this.detail,this.scrollEl,o,i),this.ionScroll.emit(this.detail)})))}async getScrollElement(){return this.scrollEl||await new Promise((t=>d(this.el,t))),Promise.resolve(this.scrollEl)}async getBackgroundElement(){return this.backgroundContentEl||await new Promise((t=>d(this.el,t))),Promise.resolve(this.backgroundContentEl)}scrollToTop(t=0){return this.scrollToPoint(void 0,0,t)}async scrollToBottom(t=0){const o=await this.getScrollElement();return this.scrollToPoint(void 0,o.scrollHeight-o.clientHeight,t)}async scrollByPoint(t,o,i){const s=await this.getScrollElement();return this.scrollToPoint(t+s.scrollLeft,o+s.scrollTop,i)}async scrollToPoint(t,o,i=0){const s=await this.getScrollElement();if(i<32)return null!=o&&(s.scrollTop=o),void(null!=t&&(s.scrollLeft=t));let e,n=0;const r=new Promise((t=>e=t)),l=s.scrollTop,a=s.scrollLeft,c=null!=o?o-l:0,h=null!=t?t-a:0,d=t=>{const o=Math.min(1,(t-n)/i)-1,r=Math.pow(o,3)+1;0!==c&&(s.scrollTop=Math.floor(r*c+l)),0!==h&&(s.scrollLeft=Math.floor(r*h+a)),r<1?requestAnimationFrame(d):e()};return requestAnimationFrame((t=>{n=t,d(t)})),r}onScrollStart(){this.isScrolling=!0,this.ionScrollStart.emit({isScrolling:!0}),this.watchDog&&clearInterval(this.watchDog),this.watchDog=setInterval((()=>{this.lastScroll<Date.now()-120&&this.onScrollEnd()}),100)}onScrollEnd(){this.watchDog&&clearInterval(this.watchDog),this.watchDog=null,this.isScrolling&&(this.isScrolling=!1,this.ionScrollEnd.emit({isScrolling:!1}))}render(){const{fixedSlotPlacement:t,inheritedAttributes:o,isMainContent:i,scrollX:s,scrollY:e,el:n}=this,a=m(n)?"rtl":"ltr",c=f(this),h=this.shouldForceOverscroll(),d="ios"===c;return this.resize(),r(l,Object.assign({key:"212b1438f044061887984e02e1c8943ee1d33c20",role:i?"main":void 0,class:b(this.color,{[c]:!0,"content-fullscreen":this.fullscreen,"content-sizing":v("ion-popover",this.el),overscroll:h,[`content-${a}`]:!0}),style:{"--offset-top":`${this.cTop}px`,"--offset-bottom":`${this.cBottom}px`}},o),r("div",{key:"ea46641492eef8cc7b08fc398d0285115b5a7100",ref:t=>this.backgroundContentEl=t,id:"background-content",part:"background"}),"before"===t?r("slot",{name:"fixed"}):null,r("div",{key:"dc9096f0b97ab6145fb46cf065cd244f4af1cab5",class:{"inner-scroll":!0,"scroll-x":s,"scroll-y":e,overscroll:(s||e)&&h},ref:t=>this.scrollEl=t,onScroll:this.scrollEvents?t=>this.onScroll(t):void 0,part:"scroll"},r("slot",{key:"4b13fd5b7e124353d43b47a30e975400ae2a0341"})),d?r("div",{class:"transition-effect"},r("div",{class:"transition-cover"}),r("div",{class:"transition-shadow"})):null,"after"===t?r("slot",{name:"fixed"}):null)}get el(){return this}static get style(){return':host{--background:var(--ion-background-color, #fff);--color:var(--ion-text-color, #000);--padding-top:0px;--padding-bottom:0px;--padding-start:0px;--padding-end:0px;--keyboard-offset:0px;--offset-top:0px;--offset-bottom:0px;--overflow:auto;display:block;position:relative;-ms-flex:1;flex:1;width:100%;height:100%;margin:0 !important;padding:0 !important;font-family:var(--ion-font-family, inherit);contain:size style}:host(.ion-color) .inner-scroll{background:var(--ion-color-base);color:var(--ion-color-contrast)}#background-content{left:0px;right:0px;top:calc(var(--offset-top) * -1);bottom:calc(var(--offset-bottom) * -1);position:absolute;background:var(--background)}.inner-scroll{left:0px;right:0px;top:calc(var(--offset-top) * -1);bottom:calc(var(--offset-bottom) * -1);-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end);padding-top:calc(var(--padding-top) + var(--offset-top));padding-bottom:calc(var(--padding-bottom) + var(--keyboard-offset) + var(--offset-bottom));position:absolute;color:var(--color);-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;-ms-touch-action:pan-x pan-y pinch-zoom;touch-action:pan-x pan-y pinch-zoom}.scroll-y,.scroll-x{-webkit-overflow-scrolling:touch;z-index:0;will-change:scroll-position}.scroll-y{overflow-y:var(--overflow);overscroll-behavior-y:contain}.scroll-x{overflow-x:var(--overflow);overscroll-behavior-x:contain}.overscroll::before,.overscroll::after{position:absolute;width:1px;height:1px;content:""}.overscroll::before{bottom:-1px}.overscroll::after{top:-1px}:host(.content-sizing){display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-height:0;contain:none}:host(.content-sizing) .inner-scroll{position:relative;top:0;bottom:0;margin-top:calc(var(--offset-top) * -1);margin-bottom:calc(var(--offset-bottom) * -1)}.transition-effect{display:none;position:absolute;width:100%;height:100vh;opacity:0;pointer-events:none}:host(.content-ltr) .transition-effect{left:-100%;}:host(.content-rtl) .transition-effect{right:-100%;}.transition-cover{position:absolute;right:0;width:100%;height:100%;background:black;opacity:0.1}.transition-shadow{display:block;position:absolute;width:100%;height:100%;-webkit-box-shadow:inset -9px 0 9px 0 rgba(0, 0, 100, 0.03);box-shadow:inset -9px 0 9px 0 rgba(0, 0, 100, 0.03)}:host(.content-ltr) .transition-shadow{right:0;}:host(.content-rtl) .transition-shadow{left:0;-webkit-transform:scaleX(-1);transform:scaleX(-1)}::slotted([slot=fixed]){position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0)}'}},[257,"ion-content",{color:[513],fullscreen:[4],fixedSlotPlacement:[1,"fixed-slot-placement"],forceOverscroll:[1028,"force-overscroll"],scrollX:[4,"scroll-x"],scrollY:[4,"scroll-y"],scrollEvents:[4,"scroll-events"],recalculateDimensions:[64],getScrollElement:[64],getBackgroundElement:[64],scrollToTop:[64],scrollToBottom:[64],scrollByPoint:[64],scrollToPoint:[64]},[[9,"resize","onResize"]]]),g=t=>{const o=t.closest("ion-tabs");if(o)return o;return t.closest("ion-app, ion-page, .ion-page, page-inner, .popover-content")||(t=>{var o;return t.parentElement?t.parentElement:(null===(o=t.parentNode)||void 0===o?void 0:o.host)?t.parentNode.host:null})(t)},x=(t,o,i,s)=>{const e=t.currentX,n=t.currentY,r=o.scrollLeft,l=o.scrollTop,a=i-t.currentTime;if(s&&(t.startTime=i,t.startX=r,t.startY=l,t.velocityX=t.velocityY=0),t.currentTime=i,t.currentX=t.scrollLeft=r,t.currentY=t.scrollTop=l,t.deltaX=r-t.startX,t.deltaY=l-t.startY,a>0&&a<100){const o=(l-n)/a;t.velocityX=(r-e)/a*.7+.3*t.velocityX,t.velocityY=.7*o+.3*t.velocityY}};function y(){"undefined"!=typeof customElements&&["ion-content"].forEach((t=>{"ion-content"===t&&(customElements.get(a(t))||customElements.define(a(t),u))}))}export{u as C,y as d}
4
+ import { proxyCustomElement, HTMLElement, createEvent, Build, readTask, forceUpdate, h, Host } from '@stencil/core/internal/client';
5
+ import { i as inheritAriaAttributes, k as hasLazyBuild, c as componentOnReady } from './helpers.js';
6
+ import { b as getIonMode, a as isPlatform } from './ionic-global.js';
7
+ import { i as isRTL } from './dir.js';
8
+ import { c as createColorClasses, h as hostContext } from './theme.js';
9
+
10
+ const contentCss = ":host{--background:var(--ion-background-color, #fff);--color:var(--ion-text-color, #000);--padding-top:0px;--padding-bottom:0px;--padding-start:0px;--padding-end:0px;--keyboard-offset:0px;--offset-top:0px;--offset-bottom:0px;--overflow:auto;display:block;position:relative;-ms-flex:1;flex:1;width:100%;height:100%;margin:0 !important;padding:0 !important;font-family:var(--ion-font-family, inherit);contain:size style}:host(.ion-color) .inner-scroll{background:var(--ion-color-base);color:var(--ion-color-contrast)}#background-content{left:0px;right:0px;top:calc(var(--offset-top) * -1);bottom:calc(var(--offset-bottom) * -1);position:absolute;background:var(--background)}.inner-scroll{left:0px;right:0px;top:calc(var(--offset-top) * -1);bottom:calc(var(--offset-bottom) * -1);-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end);padding-top:calc(var(--padding-top) + var(--offset-top));padding-bottom:calc(var(--padding-bottom) + var(--keyboard-offset) + var(--offset-bottom));position:absolute;color:var(--color);-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;-ms-touch-action:pan-x pan-y pinch-zoom;touch-action:pan-x pan-y pinch-zoom}.scroll-y,.scroll-x{-webkit-overflow-scrolling:touch;z-index:0;will-change:scroll-position}.scroll-y{overflow-y:var(--overflow);overscroll-behavior-y:contain}.scroll-x{overflow-x:var(--overflow);overscroll-behavior-x:contain}.overscroll::before,.overscroll::after{position:absolute;width:1px;height:1px;content:\"\"}.overscroll::before{bottom:-1px}.overscroll::after{top:-1px}:host(.content-sizing){display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-height:0;contain:none}:host(.content-sizing) .inner-scroll{position:relative;top:0;bottom:0;margin-top:calc(var(--offset-top) * -1);margin-bottom:calc(var(--offset-bottom) * -1)}.transition-effect{display:none;position:absolute;width:100%;height:100vh;opacity:0;pointer-events:none}:host(.content-ltr) .transition-effect{left:-100%;}:host(.content-rtl) .transition-effect{right:-100%;}.transition-cover{position:absolute;right:0;width:100%;height:100%;background:black;opacity:0.1}.transition-shadow{display:block;position:absolute;width:100%;height:100%;-webkit-box-shadow:inset -9px 0 9px 0 rgba(0, 0, 100, 0.03);box-shadow:inset -9px 0 9px 0 rgba(0, 0, 100, 0.03)}:host(.content-ltr) .transition-shadow{right:0;}:host(.content-rtl) .transition-shadow{left:0;-webkit-transform:scaleX(-1);transform:scaleX(-1)}::slotted([slot=fixed]){position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0)}";
11
+
12
+ const Content = /*@__PURE__*/ proxyCustomElement(class Content extends HTMLElement {
13
+ constructor(registerHost) {
14
+ super();
15
+ if (registerHost !== false) {
16
+ this.__registerHost();
17
+ }
18
+ this.__attachShadow();
19
+ this.ionScrollStart = createEvent(this, "ionScrollStart", 7);
20
+ this.ionScroll = createEvent(this, "ionScroll", 7);
21
+ this.ionScrollEnd = createEvent(this, "ionScrollEnd", 7);
22
+ this.watchDog = null;
23
+ this.isScrolling = false;
24
+ this.lastScroll = 0;
25
+ this.queued = false;
26
+ this.cTop = -1;
27
+ this.cBottom = -1;
28
+ this.isMainContent = true;
29
+ this.resizeTimeout = null;
30
+ this.inheritedAttributes = {};
31
+ this.tabsElement = null;
32
+ // Detail is used in a hot loop in the scroll event, by allocating it here
33
+ // V8 will be able to inline any read/write to it since it's a monomorphic class.
34
+ // https://mrale.ph/blog/2015/01/11/whats-up-with-monomorphism.html
35
+ this.detail = {
36
+ scrollTop: 0,
37
+ scrollLeft: 0,
38
+ type: 'scroll',
39
+ event: undefined,
40
+ startX: 0,
41
+ startY: 0,
42
+ startTime: 0,
43
+ currentX: 0,
44
+ currentY: 0,
45
+ velocityX: 0,
46
+ velocityY: 0,
47
+ deltaX: 0,
48
+ deltaY: 0,
49
+ currentTime: 0,
50
+ data: undefined,
51
+ isScrolling: true,
52
+ };
53
+ /**
54
+ * If `true`, the content will scroll behind the headers
55
+ * and footers. This effect can easily be seen by setting the toolbar
56
+ * to transparent.
57
+ */
58
+ this.fullscreen = false;
59
+ /**
60
+ * Controls where the fixed content is placed relative to the main content
61
+ * in the DOM. This can be used to control the order in which fixed elements
62
+ * receive keyboard focus.
63
+ * For example, if a FAB in the fixed slot should receive keyboard focus before
64
+ * the main page content, set this property to `'before'`.
65
+ */
66
+ this.fixedSlotPlacement = 'after';
67
+ /**
68
+ * If you want to enable the content scrolling in the X axis, set this property to `true`.
69
+ */
70
+ this.scrollX = false;
71
+ /**
72
+ * If you want to disable the content scrolling in the Y axis, set this property to `false`.
73
+ */
74
+ this.scrollY = true;
75
+ /**
76
+ * Because of performance reasons, ionScroll events are disabled by default, in order to enable them
77
+ * and start listening from (ionScroll), set this property to `true`.
78
+ */
79
+ this.scrollEvents = false;
80
+ }
81
+ componentWillLoad() {
82
+ this.inheritedAttributes = inheritAriaAttributes(this.el);
83
+ }
84
+ connectedCallback() {
85
+ this.isMainContent = this.el.closest('ion-menu, ion-popover, ion-modal') === null;
86
+ /**
87
+ * The fullscreen content offsets need to be
88
+ * computed after the tab bar has loaded. Since
89
+ * lazy evaluation means components are not hydrated
90
+ * at the same time, we need to wait for the ionTabBarLoaded
91
+ * event to fire. This does not impact dist-custom-elements
92
+ * because there is no hydration there.
93
+ */
94
+ if (hasLazyBuild(this.el)) {
95
+ /**
96
+ * We need to cache the reference to the tabs.
97
+ * If just the content is unmounted then we won't
98
+ * be able to query for the closest tabs on disconnectedCallback
99
+ * since the content has been removed from the DOM tree.
100
+ */
101
+ const closestTabs = (this.tabsElement = this.el.closest('ion-tabs'));
102
+ if (closestTabs !== null) {
103
+ /**
104
+ * When adding and removing the event listener
105
+ * we need to make sure we pass the same function reference
106
+ * otherwise the event listener will not be removed properly.
107
+ * We can't only pass `this.resize` because "this" in the function
108
+ * context becomes a reference to IonTabs instead of IonContent.
109
+ *
110
+ * Additionally, we listen for ionTabBarLoaded on the IonTabs
111
+ * instance rather than the IonTabBar instance. It's possible for
112
+ * a tab bar to be conditionally rendered/mounted. Since ionTabBarLoaded
113
+ * bubbles, we can catch any instances of child tab bars loading by listening
114
+ * on IonTabs.
115
+ */
116
+ this.tabsLoadCallback = () => this.resize();
117
+ closestTabs.addEventListener('ionTabBarLoaded', this.tabsLoadCallback);
118
+ }
119
+ }
120
+ }
121
+ disconnectedCallback() {
122
+ this.onScrollEnd();
123
+ if (hasLazyBuild(this.el)) {
124
+ /**
125
+ * The event listener and tabs caches need to
126
+ * be cleared otherwise this will create a memory
127
+ * leak where the IonTabs instance can never be
128
+ * garbage collected.
129
+ */
130
+ const { tabsElement, tabsLoadCallback } = this;
131
+ if (tabsElement !== null && tabsLoadCallback !== undefined) {
132
+ tabsElement.removeEventListener('ionTabBarLoaded', tabsLoadCallback);
133
+ }
134
+ this.tabsElement = null;
135
+ this.tabsLoadCallback = undefined;
136
+ }
137
+ }
138
+ /**
139
+ * Rotating certain devices can update
140
+ * the safe area insets. As a result,
141
+ * the fullscreen feature on ion-content
142
+ * needs to be recalculated.
143
+ *
144
+ * We listen for "resize" because we
145
+ * do not care what the orientation of
146
+ * the device is. Other APIs
147
+ * such as ScreenOrientation or
148
+ * the deviceorientation event must have
149
+ * permission from the user first whereas
150
+ * the "resize" event does not.
151
+ *
152
+ * We also throttle the callback to minimize
153
+ * thrashing when quickly resizing a window.
154
+ */
155
+ onResize() {
156
+ if (this.resizeTimeout) {
157
+ clearTimeout(this.resizeTimeout);
158
+ this.resizeTimeout = null;
159
+ }
160
+ this.resizeTimeout = setTimeout(() => {
161
+ /**
162
+ * Resize should only happen
163
+ * if the content is visible.
164
+ * When the content is hidden
165
+ * then offsetParent will be null.
166
+ */
167
+ if (this.el.offsetParent === null) {
168
+ return;
169
+ }
170
+ this.resize();
171
+ }, 100);
172
+ }
173
+ shouldForceOverscroll() {
174
+ const { forceOverscroll } = this;
175
+ const mode = getIonMode(this);
176
+ return forceOverscroll === undefined ? mode === 'ios' && isPlatform('ios') : forceOverscroll;
177
+ }
178
+ resize() {
179
+ /**
180
+ * Only force update if the component is rendered in a browser context.
181
+ * Using `forceUpdate` in a server context with pre-rendering can lead to an infinite loop.
182
+ * The `hydrateDocument` function in `@stencil/core` will render the `ion-content`, but
183
+ * `forceUpdate` will trigger another render, locking up the server.
184
+ *
185
+ * TODO: Remove if STENCIL-834 determines Stencil will account for this.
186
+ */
187
+ if (Build.isBrowser) {
188
+ if (this.fullscreen) {
189
+ readTask(() => this.readDimensions());
190
+ }
191
+ else if (this.cTop !== 0 || this.cBottom !== 0) {
192
+ this.cTop = this.cBottom = 0;
193
+ forceUpdate(this);
194
+ }
195
+ }
196
+ }
197
+ /**
198
+ * Recalculate content dimensions. Called by overlays (e.g., popover) when
199
+ * sibling elements like headers or footers have finished rendering and their
200
+ * heights are available, ensuring accurate offset-top calculations.
201
+ * @internal
202
+ */
203
+ async recalculateDimensions() {
204
+ readTask(() => this.readDimensions());
205
+ }
206
+ readDimensions() {
207
+ const page = getPageElement(this.el);
208
+ const top = Math.max(this.el.offsetTop, 0);
209
+ const bottom = Math.max(page.offsetHeight - top - this.el.offsetHeight, 0);
210
+ const dirty = top !== this.cTop || bottom !== this.cBottom;
211
+ if (dirty) {
212
+ this.cTop = top;
213
+ this.cBottom = bottom;
214
+ forceUpdate(this);
215
+ }
216
+ }
217
+ onScroll(ev) {
218
+ const timeStamp = Date.now();
219
+ const shouldStart = !this.isScrolling;
220
+ this.lastScroll = timeStamp;
221
+ if (shouldStart) {
222
+ this.onScrollStart();
223
+ }
224
+ if (!this.queued && this.scrollEvents) {
225
+ this.queued = true;
226
+ readTask((ts) => {
227
+ this.queued = false;
228
+ this.detail.event = ev;
229
+ updateScrollDetail(this.detail, this.scrollEl, ts, shouldStart);
230
+ this.ionScroll.emit(this.detail);
231
+ });
232
+ }
233
+ }
234
+ /**
235
+ * Get the element where the actual scrolling takes place.
236
+ * This element can be used to subscribe to `scroll` events or manually modify
237
+ * `scrollTop`. However, it's recommended to use the API provided by `ion-content`:
238
+ *
239
+ * i.e. Using `ionScroll`, `ionScrollStart`, `ionScrollEnd` for scrolling events
240
+ * and `scrollToPoint()` to scroll the content into a certain point.
241
+ */
242
+ async getScrollElement() {
243
+ /**
244
+ * If this gets called in certain early lifecycle hooks (ex: Vue onMounted),
245
+ * scrollEl won't be defined yet with the custom elements build, so wait for it to load in.
246
+ */
247
+ if (!this.scrollEl) {
248
+ await new Promise((resolve) => componentOnReady(this.el, resolve));
249
+ }
250
+ return Promise.resolve(this.scrollEl);
251
+ }
252
+ /**
253
+ * Returns the background content element.
254
+ * @internal
255
+ */
256
+ async getBackgroundElement() {
257
+ if (!this.backgroundContentEl) {
258
+ await new Promise((resolve) => componentOnReady(this.el, resolve));
259
+ }
260
+ return Promise.resolve(this.backgroundContentEl);
261
+ }
262
+ /**
263
+ * Scroll to the top of the component.
264
+ *
265
+ * @param duration The amount of time to take scrolling to the top. Defaults to `0`.
266
+ */
267
+ scrollToTop(duration = 0) {
268
+ return this.scrollToPoint(undefined, 0, duration);
269
+ }
270
+ /**
271
+ * Scroll to the bottom of the component.
272
+ *
273
+ * @param duration The amount of time to take scrolling to the bottom. Defaults to `0`.
274
+ */
275
+ async scrollToBottom(duration = 0) {
276
+ const scrollEl = await this.getScrollElement();
277
+ const y = scrollEl.scrollHeight - scrollEl.clientHeight;
278
+ return this.scrollToPoint(undefined, y, duration);
279
+ }
280
+ /**
281
+ * Scroll by a specified X/Y distance in the component.
282
+ *
283
+ * @param x The amount to scroll by on the horizontal axis.
284
+ * @param y The amount to scroll by on the vertical axis.
285
+ * @param duration The amount of time to take scrolling by that amount.
286
+ */
287
+ async scrollByPoint(x, y, duration) {
288
+ const scrollEl = await this.getScrollElement();
289
+ return this.scrollToPoint(x + scrollEl.scrollLeft, y + scrollEl.scrollTop, duration);
290
+ }
291
+ /**
292
+ * Scroll to a specified X/Y location in the component.
293
+ *
294
+ * @param x The point to scroll to on the horizontal axis.
295
+ * @param y The point to scroll to on the vertical axis.
296
+ * @param duration The amount of time to take scrolling to that point. Defaults to `0`.
297
+ */
298
+ async scrollToPoint(x, y, duration = 0) {
299
+ const el = await this.getScrollElement();
300
+ if (duration < 32) {
301
+ if (y != null) {
302
+ el.scrollTop = y;
303
+ }
304
+ if (x != null) {
305
+ el.scrollLeft = x;
306
+ }
307
+ return;
308
+ }
309
+ let resolve;
310
+ let startTime = 0;
311
+ const promise = new Promise((r) => (resolve = r));
312
+ const fromY = el.scrollTop;
313
+ const fromX = el.scrollLeft;
314
+ const deltaY = y != null ? y - fromY : 0;
315
+ const deltaX = x != null ? x - fromX : 0;
316
+ // scroll loop
317
+ const step = (timeStamp) => {
318
+ const linearTime = Math.min(1, (timeStamp - startTime) / duration) - 1;
319
+ const easedT = Math.pow(linearTime, 3) + 1;
320
+ if (deltaY !== 0) {
321
+ el.scrollTop = Math.floor(easedT * deltaY + fromY);
322
+ }
323
+ if (deltaX !== 0) {
324
+ el.scrollLeft = Math.floor(easedT * deltaX + fromX);
325
+ }
326
+ if (easedT < 1) {
327
+ // do not use DomController here
328
+ // must use nativeRaf in order to fire in the next frame
329
+ requestAnimationFrame(step);
330
+ }
331
+ else {
332
+ resolve();
333
+ }
334
+ };
335
+ // chill out for a frame first
336
+ requestAnimationFrame((ts) => {
337
+ startTime = ts;
338
+ step(ts);
339
+ });
340
+ return promise;
341
+ }
342
+ onScrollStart() {
343
+ this.isScrolling = true;
344
+ this.ionScrollStart.emit({
345
+ isScrolling: true,
346
+ });
347
+ if (this.watchDog) {
348
+ clearInterval(this.watchDog);
349
+ }
350
+ // watchdog
351
+ this.watchDog = setInterval(() => {
352
+ if (this.lastScroll < Date.now() - 120) {
353
+ this.onScrollEnd();
354
+ }
355
+ }, 100);
356
+ }
357
+ onScrollEnd() {
358
+ if (this.watchDog)
359
+ clearInterval(this.watchDog);
360
+ this.watchDog = null;
361
+ if (this.isScrolling) {
362
+ this.isScrolling = false;
363
+ this.ionScrollEnd.emit({
364
+ isScrolling: false,
365
+ });
366
+ }
367
+ }
368
+ render() {
369
+ const { fixedSlotPlacement, inheritedAttributes, isMainContent, scrollX, scrollY, el } = this;
370
+ const rtl = isRTL(el) ? 'rtl' : 'ltr';
371
+ const mode = getIonMode(this);
372
+ const forceOverscroll = this.shouldForceOverscroll();
373
+ const transitionShadow = mode === 'ios';
374
+ this.resize();
375
+ return (h(Host, Object.assign({ key: '212b1438f044061887984e02e1c8943ee1d33c20', role: isMainContent ? 'main' : undefined, class: createColorClasses(this.color, {
376
+ [mode]: true,
377
+ 'content-fullscreen': this.fullscreen,
378
+ 'content-sizing': hostContext('ion-popover', this.el),
379
+ overscroll: forceOverscroll,
380
+ [`content-${rtl}`]: true,
381
+ }), style: {
382
+ '--offset-top': `${this.cTop}px`,
383
+ '--offset-bottom': `${this.cBottom}px`,
384
+ } }, inheritedAttributes), h("div", { key: 'ea46641492eef8cc7b08fc398d0285115b5a7100', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? h("slot", { name: "fixed" }) : null, h("div", { key: 'dc9096f0b97ab6145fb46cf065cd244f4af1cab5', class: {
385
+ 'inner-scroll': true,
386
+ 'scroll-x': scrollX,
387
+ 'scroll-y': scrollY,
388
+ overscroll: (scrollX || scrollY) && forceOverscroll,
389
+ }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", { key: '4b13fd5b7e124353d43b47a30e975400ae2a0341' })), transitionShadow ? (h("div", { class: "transition-effect" }, h("div", { class: "transition-cover" }), h("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? h("slot", { name: "fixed" }) : null));
390
+ }
391
+ get el() { return this; }
392
+ static get style() { return contentCss; }
393
+ }, [257, "ion-content", {
394
+ "color": [513],
395
+ "fullscreen": [4],
396
+ "fixedSlotPlacement": [1, "fixed-slot-placement"],
397
+ "forceOverscroll": [1028, "force-overscroll"],
398
+ "scrollX": [4, "scroll-x"],
399
+ "scrollY": [4, "scroll-y"],
400
+ "scrollEvents": [4, "scroll-events"],
401
+ "recalculateDimensions": [64],
402
+ "getScrollElement": [64],
403
+ "getBackgroundElement": [64],
404
+ "scrollToTop": [64],
405
+ "scrollToBottom": [64],
406
+ "scrollByPoint": [64],
407
+ "scrollToPoint": [64]
408
+ }, [[9, "resize", "onResize"]]]);
409
+ const getParentElement = (el) => {
410
+ var _a;
411
+ if (el.parentElement) {
412
+ // normal element with a parent element
413
+ return el.parentElement;
414
+ }
415
+ if ((_a = el.parentNode) === null || _a === void 0 ? void 0 : _a.host) {
416
+ // shadow dom's document fragment
417
+ return el.parentNode.host;
418
+ }
419
+ return null;
420
+ };
421
+ const getPageElement = (el) => {
422
+ const tabs = el.closest('ion-tabs');
423
+ if (tabs) {
424
+ return tabs;
425
+ }
426
+ /**
427
+ * If we're in a popover, we need to use its wrapper so we can account for space
428
+ * between the popover and the edges of the screen. But if the popover contains
429
+ * its own page element, we should use that instead.
430
+ */
431
+ const page = el.closest('ion-app, ion-page, .ion-page, page-inner, .popover-content');
432
+ if (page) {
433
+ return page;
434
+ }
435
+ return getParentElement(el);
436
+ };
437
+ // ******** DOM READ ****************
438
+ const updateScrollDetail = (detail, el, timestamp, shouldStart) => {
439
+ const prevX = detail.currentX;
440
+ const prevY = detail.currentY;
441
+ const prevT = detail.currentTime;
442
+ const currentX = el.scrollLeft;
443
+ const currentY = el.scrollTop;
444
+ const timeDelta = timestamp - prevT;
445
+ if (shouldStart) {
446
+ // remember the start positions
447
+ detail.startTime = timestamp;
448
+ detail.startX = currentX;
449
+ detail.startY = currentY;
450
+ detail.velocityX = detail.velocityY = 0;
451
+ }
452
+ detail.currentTime = timestamp;
453
+ detail.currentX = detail.scrollLeft = currentX;
454
+ detail.currentY = detail.scrollTop = currentY;
455
+ detail.deltaX = currentX - detail.startX;
456
+ detail.deltaY = currentY - detail.startY;
457
+ if (timeDelta > 0 && timeDelta < 100) {
458
+ const velocityX = (currentX - prevX) / timeDelta;
459
+ const velocityY = (currentY - prevY) / timeDelta;
460
+ detail.velocityX = velocityX * 0.7 + detail.velocityX * 0.3;
461
+ detail.velocityY = velocityY * 0.7 + detail.velocityY * 0.3;
462
+ }
463
+ };
464
+ function defineCustomElement() {
465
+ if (typeof customElements === "undefined") {
466
+ return;
467
+ }
468
+ const components = ["ion-content"];
469
+ components.forEach(tagName => { switch (tagName) {
470
+ case "ion-content":
471
+ if (!customElements.get(tagName)) {
472
+ customElements.define(tagName, Content);
473
+ }
474
+ break;
475
+ } });
476
+ }
477
+
478
+ export { Content as C, defineCustomElement as d };
@@ -1,4 +1,90 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- const t=(t,M,r,n,e)=>h(t[1],M[1],r[1],n[1],e).map((h=>a(t[0],M[0],r[0],n[0],h))),a=(t,a,h,M,r)=>r*(3*a*Math.pow(r-1,2)+r*(-3*h*r+3*h+M*r))-t*Math.pow(r-1,3),h=(t,a,h,r,n)=>M((r-=n)-3*(h-=n)+3*(a-=n)-(t-=n),3*h-6*a+3*t,3*a-3*t,t).filter((t=>t>=0&&t<=1)),M=(t,a,h,M)=>{if(0===t)return((t,a,h)=>{const M=a*a-4*t*h;return M<0?[]:[(-a+Math.sqrt(M))/(2*t),(-a-Math.sqrt(M))/(2*t)]})(a,h,M);const r=(3*(h/=t)-(a/=t)*a)/3,n=(2*a*a*a-9*a*h+27*(M/=t))/27;if(0===r)return[Math.pow(-n,1/3)];if(0===n)return[Math.sqrt(-r),-Math.sqrt(-r)];const e=Math.pow(n/2,2)+Math.pow(r/3,3);if(0===e)return[Math.pow(n/2,.5)-a/3];if(e>0)return[Math.pow(-n/2+Math.sqrt(e),1/3)-Math.pow(n/2+Math.sqrt(e),1/3)-a/3];const u=Math.sqrt(Math.pow(-r/3,3)),o=Math.acos(-n/(2*Math.sqrt(Math.pow(-r/3,3)))),s=2*Math.pow(u,1/3);return[s*Math.cos(o/3)-a/3,s*Math.cos((o+2*Math.PI)/3)-a/3,s*Math.cos((o+4*Math.PI)/3)-a/3]};export{t as g}
4
+ /**
5
+ * Based on:
6
+ * https://stackoverflow.com/questions/7348009/y-coordinate-for-a-given-x-cubic-bezier
7
+ * https://math.stackexchange.com/questions/26846/is-there-an-explicit-form-for-cubic-b%C3%A9zier-curves
8
+ */
9
+ /**
10
+ * EXPERIMENTAL
11
+ * Given a cubic-bezier curve, get the x value (time) given
12
+ * the y value (progression).
13
+ * Ex: cubic-bezier(0.32, 0.72, 0, 1);
14
+ * P0: (0, 0)
15
+ * P1: (0.32, 0.72)
16
+ * P2: (0, 1)
17
+ * P3: (1, 1)
18
+ *
19
+ * If you give a cubic bezier curve that never reaches the
20
+ * provided progression, this function will return an empty array.
21
+ */
22
+ const getTimeGivenProgression = (p0, p1, p2, p3, progression) => {
23
+ return solveCubicBezier(p0[1], p1[1], p2[1], p3[1], progression).map((tValue) => {
24
+ return solveCubicParametricEquation(p0[0], p1[0], p2[0], p3[0], tValue);
25
+ });
26
+ };
27
+ /**
28
+ * Solve a cubic equation in one dimension (time)
29
+ */
30
+ const solveCubicParametricEquation = (p0, p1, p2, p3, t) => {
31
+ const partA = 3 * p1 * Math.pow(t - 1, 2);
32
+ const partB = -3 * p2 * t + 3 * p2 + p3 * t;
33
+ const partC = p0 * Math.pow(t - 1, 3);
34
+ return t * (partA + t * partB) - partC;
35
+ };
36
+ /**
37
+ * Find the `t` value for a cubic bezier using Cardano's formula
38
+ */
39
+ const solveCubicBezier = (p0, p1, p2, p3, refPoint) => {
40
+ p0 -= refPoint;
41
+ p1 -= refPoint;
42
+ p2 -= refPoint;
43
+ p3 -= refPoint;
44
+ const roots = solveCubicEquation(p3 - 3 * p2 + 3 * p1 - p0, 3 * p2 - 6 * p1 + 3 * p0, 3 * p1 - 3 * p0, p0);
45
+ return roots.filter((root) => root >= 0 && root <= 1);
46
+ };
47
+ const solveQuadraticEquation = (a, b, c) => {
48
+ const discriminant = b * b - 4 * a * c;
49
+ if (discriminant < 0) {
50
+ return [];
51
+ }
52
+ else {
53
+ return [(-b + Math.sqrt(discriminant)) / (2 * a), (-b - Math.sqrt(discriminant)) / (2 * a)];
54
+ }
55
+ };
56
+ const solveCubicEquation = (a, b, c, d) => {
57
+ if (a === 0) {
58
+ return solveQuadraticEquation(b, c, d);
59
+ }
60
+ b /= a;
61
+ c /= a;
62
+ d /= a;
63
+ const p = (3 * c - b * b) / 3;
64
+ const q = (2 * b * b * b - 9 * b * c + 27 * d) / 27;
65
+ if (p === 0) {
66
+ return [Math.pow(-q, 1 / 3)];
67
+ }
68
+ else if (q === 0) {
69
+ return [Math.sqrt(-p), -Math.sqrt(-p)];
70
+ }
71
+ const discriminant = Math.pow(q / 2, 2) + Math.pow(p / 3, 3);
72
+ if (discriminant === 0) {
73
+ return [Math.pow(q / 2, 1 / 2) - b / 3];
74
+ }
75
+ else if (discriminant > 0) {
76
+ return [
77
+ Math.pow(-(q / 2) + Math.sqrt(discriminant), 1 / 3) - Math.pow(q / 2 + Math.sqrt(discriminant), 1 / 3) - b / 3,
78
+ ];
79
+ }
80
+ const r = Math.sqrt(Math.pow(-(p / 3), 3));
81
+ const phi = Math.acos(-(q / (2 * Math.sqrt(Math.pow(-(p / 3), 3)))));
82
+ const s = 2 * Math.pow(r, 1 / 3);
83
+ return [
84
+ s * Math.cos(phi / 3) - b / 3,
85
+ s * Math.cos((phi + 2 * Math.PI) / 3) - b / 3,
86
+ s * Math.cos((phi + 4 * Math.PI) / 3) - b / 3,
87
+ ];
88
+ };
89
+
90
+ export { getTimeGivenProgression as g };