@ionic/core 8.0.2-nightly.20240429 → 8.0.2-nightly.20240501

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 (347) hide show
  1. package/components/ion-datetime.js +4 -3
  2. package/components/ios.transition.js +94 -67
  3. package/components/select-popover.js +1 -1
  4. package/css/palettes/dark.always.css +1 -1
  5. package/css/palettes/dark.always.css.map +1 -1
  6. package/css/palettes/dark.class.css +1 -1
  7. package/css/palettes/dark.class.css.map +1 -1
  8. package/css/palettes/dark.system.css +1 -1
  9. package/css/palettes/dark.system.css.map +1 -1
  10. package/dist/cjs/{app-globals-542c4d91.js → app-globals-66b7dc06.js} +1 -1
  11. package/dist/cjs/{button-active-47528f4c.js → button-active-9135c809.js} +1 -1
  12. package/dist/cjs/{hardware-back-button-06ae4d9c.js → hardware-back-button-ed931127.js} +2 -2
  13. package/dist/cjs/{index-c76a1d14.js → index-6047957b.js} +3 -3
  14. package/dist/cjs/index-8709af32.js +2234 -0
  15. package/dist/cjs/{index-57b504ac.js → index-c54654c6.js} +2 -2
  16. package/dist/cjs/index.cjs.js +8 -8
  17. package/dist/cjs/ion-accordion_2.cjs.entry.js +2 -2
  18. package/dist/cjs/ion-action-sheet.cjs.entry.js +5 -5
  19. package/dist/cjs/ion-alert.cjs.entry.js +5 -5
  20. package/dist/cjs/ion-app_8.cjs.entry.js +6 -6
  21. package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
  22. package/dist/cjs/ion-back-button.cjs.entry.js +2 -2
  23. package/dist/cjs/ion-backdrop.cjs.entry.js +2 -2
  24. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +2 -2
  25. package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
  26. package/dist/cjs/ion-card_5.cjs.entry.js +2 -2
  27. package/dist/cjs/ion-checkbox.cjs.entry.js +2 -2
  28. package/dist/cjs/ion-chip.cjs.entry.js +2 -2
  29. package/dist/cjs/ion-col_3.cjs.entry.js +2 -2
  30. package/dist/cjs/ion-datetime-button.cjs.entry.js +2 -2
  31. package/dist/cjs/ion-datetime_3.cjs.entry.js +8 -7
  32. package/dist/cjs/ion-fab_3.cjs.entry.js +2 -2
  33. package/dist/cjs/ion-img.cjs.entry.js +2 -2
  34. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +2 -2
  35. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +2 -2
  36. package/dist/cjs/ion-input.cjs.entry.js +2 -2
  37. package/dist/cjs/ion-item-option_3.cjs.entry.js +2 -2
  38. package/dist/cjs/ion-item_8.cjs.entry.js +2 -2
  39. package/dist/cjs/ion-loading.cjs.entry.js +4 -4
  40. package/dist/cjs/ion-menu_3.cjs.entry.js +5 -5
  41. package/dist/cjs/ion-modal.cjs.entry.js +5 -5
  42. package/dist/cjs/ion-nav_2.cjs.entry.js +3 -3
  43. package/dist/cjs/ion-picker-column-option.cjs.entry.js +2 -2
  44. package/dist/cjs/ion-picker-column.cjs.entry.js +2 -2
  45. package/dist/cjs/ion-picker.cjs.entry.js +1 -1
  46. package/dist/cjs/ion-popover.cjs.entry.js +5 -5
  47. package/dist/cjs/ion-progress-bar.cjs.entry.js +2 -2
  48. package/dist/cjs/ion-radio_2.cjs.entry.js +2 -2
  49. package/dist/cjs/ion-range.cjs.entry.js +2 -2
  50. package/dist/cjs/ion-refresher_2.cjs.entry.js +2 -2
  51. package/dist/cjs/ion-reorder_2.cjs.entry.js +2 -2
  52. package/dist/cjs/ion-ripple-effect.cjs.entry.js +2 -2
  53. package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
  54. package/dist/cjs/ion-searchbar.cjs.entry.js +2 -2
  55. package/dist/cjs/ion-segment_2.cjs.entry.js +2 -2
  56. package/dist/cjs/ion-select_3.cjs.entry.js +5 -5
  57. package/dist/cjs/ion-spinner.cjs.entry.js +2 -2
  58. package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
  59. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +2 -2
  60. package/dist/cjs/ion-tab_2.cjs.entry.js +1 -1
  61. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  62. package/dist/cjs/ion-textarea.cjs.entry.js +2 -2
  63. package/dist/cjs/ion-toast.cjs.entry.js +4 -4
  64. package/dist/cjs/ion-toggle.cjs.entry.js +2 -2
  65. package/dist/cjs/{ionic-global-f3622afe.js → ionic-global-35b86a09.js} +1 -1
  66. package/dist/cjs/ionic.cjs.js +4 -4
  67. package/dist/cjs/{ios.transition-288dfa83.js → ios.transition-59b0e1d9.js} +96 -69
  68. package/dist/cjs/loader.cjs.js +3 -3
  69. package/dist/cjs/{md.transition-6e5f6a8d.js → md.transition-0cc7c831.js} +2 -2
  70. package/dist/cjs/{overlays-32cfd236.js → overlays-2feabb85.js} +2 -2
  71. package/dist/cjs/{status-tap-c47ff5f5.js → status-tap-5b2775cd.js} +1 -1
  72. package/dist/collection/collection-manifest.json +1 -1
  73. package/dist/collection/components/datetime/datetime.js +4 -3
  74. package/dist/collection/components/item/test/a11y/item.e2e.js +23 -0
  75. package/dist/collection/components/select/test/fill/select.e2e.js +25 -0
  76. package/dist/collection/components/select-popover/select-popover.md.css +8 -1
  77. package/dist/collection/utils/transition/ios.transition.js +94 -67
  78. package/dist/docs.json +2 -2
  79. package/dist/esm/{app-globals-3cbaf9d9.js → app-globals-b99e6d29.js} +1 -1
  80. package/dist/esm/{button-active-9e3c1f3b.js → button-active-920addb8.js} +1 -1
  81. package/dist/esm/{hardware-back-button-804f43bb.js → hardware-back-button-2d9760b6.js} +2 -2
  82. package/dist/esm/{index-8dbae644.js → index-7ae7186a.js} +2 -2
  83. package/dist/esm/index-9aab3bcf.js +2196 -0
  84. package/dist/esm/{index-f7fbe1fb.js → index-f4460246.js} +3 -3
  85. package/dist/esm/index.js +8 -8
  86. package/dist/esm/ion-accordion_2.entry.js +2 -2
  87. package/dist/esm/ion-action-sheet.entry.js +5 -5
  88. package/dist/esm/ion-alert.entry.js +5 -5
  89. package/dist/esm/ion-app_8.entry.js +6 -6
  90. package/dist/esm/ion-avatar_3.entry.js +2 -2
  91. package/dist/esm/ion-back-button.entry.js +2 -2
  92. package/dist/esm/ion-backdrop.entry.js +2 -2
  93. package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
  94. package/dist/esm/ion-button_2.entry.js +2 -2
  95. package/dist/esm/ion-card_5.entry.js +2 -2
  96. package/dist/esm/ion-checkbox.entry.js +2 -2
  97. package/dist/esm/ion-chip.entry.js +2 -2
  98. package/dist/esm/ion-col_3.entry.js +2 -2
  99. package/dist/esm/ion-datetime-button.entry.js +2 -2
  100. package/dist/esm/ion-datetime_3.entry.js +8 -7
  101. package/dist/esm/ion-fab_3.entry.js +2 -2
  102. package/dist/esm/ion-img.entry.js +2 -2
  103. package/dist/esm/ion-infinite-scroll_2.entry.js +2 -2
  104. package/dist/esm/ion-input-password-toggle.entry.js +2 -2
  105. package/dist/esm/ion-input.entry.js +2 -2
  106. package/dist/esm/ion-item-option_3.entry.js +2 -2
  107. package/dist/esm/ion-item_8.entry.js +2 -2
  108. package/dist/esm/ion-loading.entry.js +4 -4
  109. package/dist/esm/ion-menu_3.entry.js +5 -5
  110. package/dist/esm/ion-modal.entry.js +5 -5
  111. package/dist/esm/ion-nav_2.entry.js +3 -3
  112. package/dist/esm/ion-picker-column-option.entry.js +2 -2
  113. package/dist/esm/ion-picker-column.entry.js +2 -2
  114. package/dist/esm/ion-picker.entry.js +1 -1
  115. package/dist/esm/ion-popover.entry.js +5 -5
  116. package/dist/esm/ion-progress-bar.entry.js +2 -2
  117. package/dist/esm/ion-radio_2.entry.js +2 -2
  118. package/dist/esm/ion-range.entry.js +2 -2
  119. package/dist/esm/ion-refresher_2.entry.js +2 -2
  120. package/dist/esm/ion-reorder_2.entry.js +2 -2
  121. package/dist/esm/ion-ripple-effect.entry.js +2 -2
  122. package/dist/esm/ion-route_4.entry.js +2 -2
  123. package/dist/esm/ion-searchbar.entry.js +2 -2
  124. package/dist/esm/ion-segment_2.entry.js +2 -2
  125. package/dist/esm/ion-select_3.entry.js +5 -5
  126. package/dist/esm/ion-spinner.entry.js +2 -2
  127. package/dist/esm/ion-split-pane.entry.js +2 -2
  128. package/dist/esm/ion-tab-bar_2.entry.js +2 -2
  129. package/dist/esm/ion-tab_2.entry.js +1 -1
  130. package/dist/esm/ion-text.entry.js +2 -2
  131. package/dist/esm/ion-textarea.entry.js +2 -2
  132. package/dist/esm/ion-toast.entry.js +4 -4
  133. package/dist/esm/ion-toggle.entry.js +2 -2
  134. package/dist/esm/{ionic-global-d2d8f882.js → ionic-global-4528d288.js} +1 -1
  135. package/dist/esm/ionic.js +5 -5
  136. package/dist/esm/{ios.transition-a0041e41.js → ios.transition-72f59adb.js} +96 -69
  137. package/dist/esm/loader.js +4 -4
  138. package/dist/esm/{md.transition-0c0602d9.js → md.transition-ef0437fe.js} +2 -2
  139. package/dist/esm/{overlays-696d25f5.js → overlays-56045efc.js} +2 -2
  140. package/dist/esm/{status-tap-37a74d1c.js → status-tap-12c27922.js} +1 -1
  141. package/dist/esm-es5/app-globals-b99e6d29.js +4 -0
  142. package/dist/esm-es5/{button-active-9e3c1f3b.js → button-active-920addb8.js} +1 -1
  143. package/dist/esm-es5/{hardware-back-button-804f43bb.js → hardware-back-button-2d9760b6.js} +1 -1
  144. package/dist/esm-es5/{index-8dbae644.js → index-7ae7186a.js} +1 -1
  145. package/dist/esm-es5/index-9aab3bcf.js +5 -0
  146. package/dist/esm-es5/{index-f7fbe1fb.js → index-f4460246.js} +1 -1
  147. package/dist/esm-es5/index.js +1 -1
  148. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  149. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  150. package/dist/esm-es5/ion-alert.entry.js +1 -1
  151. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  152. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  153. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  154. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  155. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  156. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  157. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  158. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  159. package/dist/esm-es5/ion-chip.entry.js +1 -1
  160. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  161. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  162. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  163. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  164. package/dist/esm-es5/ion-img.entry.js +1 -1
  165. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  166. package/dist/esm-es5/ion-input-password-toggle.entry.js +1 -1
  167. package/dist/esm-es5/ion-input.entry.js +1 -1
  168. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  169. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  170. package/dist/esm-es5/ion-loading.entry.js +1 -1
  171. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  172. package/dist/esm-es5/ion-modal.entry.js +1 -1
  173. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  174. package/dist/esm-es5/ion-picker-column-option.entry.js +1 -1
  175. package/dist/esm-es5/ion-picker-column.entry.js +1 -1
  176. package/dist/esm-es5/ion-picker.entry.js +1 -1
  177. package/dist/esm-es5/ion-popover.entry.js +1 -1
  178. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  179. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  180. package/dist/esm-es5/ion-range.entry.js +1 -1
  181. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  182. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  183. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  184. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  185. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  186. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  187. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  188. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  189. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  190. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  191. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  192. package/dist/esm-es5/ion-text.entry.js +1 -1
  193. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  194. package/dist/esm-es5/ion-toast.entry.js +1 -1
  195. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  196. package/dist/esm-es5/{ionic-global-d2d8f882.js → ionic-global-4528d288.js} +1 -1
  197. package/dist/esm-es5/ionic.js +1 -1
  198. package/dist/esm-es5/ios.transition-72f59adb.js +4 -0
  199. package/dist/esm-es5/loader.js +1 -1
  200. package/dist/esm-es5/{md.transition-0c0602d9.js → md.transition-ef0437fe.js} +1 -1
  201. package/dist/esm-es5/{overlays-696d25f5.js → overlays-56045efc.js} +1 -1
  202. package/dist/esm-es5/{status-tap-37a74d1c.js → status-tap-12c27922.js} +1 -1
  203. package/dist/ionic/index.esm.js +1 -1
  204. package/dist/ionic/ionic.esm.js +1 -1
  205. package/dist/ionic/ionic.js +1 -1
  206. package/dist/ionic/p-00d9d02d.js +4 -0
  207. package/dist/ionic/{p-b4d78e71.entry.js → p-022bc8ff.entry.js} +1 -1
  208. package/dist/ionic/{p-5fbc2eae.system.entry.js → p-0300cf19.system.entry.js} +1 -1
  209. package/dist/ionic/p-03b86a5e.js +4 -0
  210. package/dist/ionic/{p-6e9bd6ba.system.entry.js → p-05a8a97d.system.entry.js} +1 -1
  211. package/dist/ionic/{p-e3005be4.system.entry.js → p-08ea3402.system.entry.js} +1 -1
  212. package/dist/ionic/{p-e9ef13be.system.entry.js → p-091697a4.system.entry.js} +1 -1
  213. package/dist/ionic/p-0ae12601.entry.js +4 -0
  214. package/dist/ionic/{p-4fcef939.entry.js → p-0df52fbc.entry.js} +1 -1
  215. package/dist/ionic/{p-b76bcd9e.system.entry.js → p-100d079f.system.entry.js} +1 -1
  216. package/dist/ionic/{p-2f308f7f.system.entry.js → p-15daa308.system.entry.js} +1 -1
  217. package/dist/ionic/{p-4335f430.system.entry.js → p-16b35bc9.system.entry.js} +1 -1
  218. package/dist/ionic/{p-5d80b741.entry.js → p-18470679.entry.js} +1 -1
  219. package/dist/ionic/{p-d918e7ef.system.entry.js → p-19d50867.system.entry.js} +1 -1
  220. package/dist/ionic/{p-4da143c9.system.entry.js → p-1ae3a136.system.entry.js} +1 -1
  221. package/dist/ionic/{p-c671b28e.js → p-1cc0b31f.js} +1 -1
  222. package/dist/ionic/{p-aa0ed22b.system.entry.js → p-22ef5198.system.entry.js} +1 -1
  223. package/dist/ionic/{p-bdd3053f.entry.js → p-23610251.entry.js} +1 -1
  224. package/dist/ionic/{p-8f48c966.system.entry.js → p-27206537.system.entry.js} +1 -1
  225. package/dist/ionic/{p-ba9ca25a.system.entry.js → p-279f3bac.system.entry.js} +1 -1
  226. package/dist/ionic/{p-fd392e7f.system.entry.js → p-2912d62c.system.entry.js} +1 -1
  227. package/dist/ionic/{p-c3ca0292.system.entry.js → p-2bd9b326.system.entry.js} +1 -1
  228. package/dist/ionic/{p-6730a2f1.entry.js → p-2c588aa2.entry.js} +1 -1
  229. package/dist/ionic/{p-0af79ebd.entry.js → p-2d641da7.entry.js} +1 -1
  230. package/dist/ionic/p-2ff0e0aa.system.js +4 -0
  231. package/dist/ionic/{p-63deb2c3.entry.js → p-307c6b05.entry.js} +1 -1
  232. package/dist/ionic/{p-c07e7a5d.entry.js → p-3098a7cb.entry.js} +1 -1
  233. package/dist/ionic/{p-7536b4b3.system.js → p-30baae57.system.js} +1 -1
  234. package/dist/ionic/{p-806aad8f.system.js → p-31d27232.system.js} +1 -1
  235. package/dist/ionic/{p-6123d531.entry.js → p-32df9442.entry.js} +1 -1
  236. package/dist/ionic/{p-08c4d048.entry.js → p-3a3d5a1a.entry.js} +1 -1
  237. package/dist/ionic/{p-16016625.system.js → p-3b185894.system.js} +1 -1
  238. package/dist/ionic/{p-c7e0b81a.entry.js → p-3b974a28.entry.js} +1 -1
  239. package/dist/ionic/{p-09478200.entry.js → p-3bece4aa.entry.js} +1 -1
  240. package/dist/ionic/{p-8664c316.entry.js → p-3ce83c9b.entry.js} +1 -1
  241. package/dist/ionic/p-3d015cdb.system.js +5 -0
  242. package/dist/ionic/{p-26d33af2.system.entry.js → p-3dd57c9c.system.entry.js} +1 -1
  243. package/dist/ionic/{p-320cfcab.entry.js → p-3fefc7cd.entry.js} +1 -1
  244. package/dist/ionic/{p-e885f3c4.entry.js → p-430a7e95.entry.js} +1 -1
  245. package/dist/ionic/{p-aa8ac217.system.entry.js → p-439b8b3c.system.entry.js} +1 -1
  246. package/dist/ionic/{p-a5721afd.system.entry.js → p-44edbb29.system.entry.js} +1 -1
  247. package/dist/ionic/{p-b17549e8.system.entry.js → p-47212f88.system.entry.js} +1 -1
  248. package/dist/ionic/{p-d77dc6ea.entry.js → p-4824398b.entry.js} +1 -1
  249. package/dist/ionic/{p-2b1e669d.system.entry.js → p-4ba654fa.system.entry.js} +1 -1
  250. package/dist/ionic/{p-2a3e98fb.system.entry.js → p-4c103f8d.system.entry.js} +1 -1
  251. package/dist/ionic/{p-c687e632.entry.js → p-4f17f03d.entry.js} +1 -1
  252. package/dist/ionic/{p-94180ecc.entry.js → p-508d5d0d.entry.js} +1 -1
  253. package/dist/ionic/{p-515a47f5.entry.js → p-5091f63c.entry.js} +1 -1
  254. package/dist/ionic/{p-33d926c3.entry.js → p-52f53904.entry.js} +1 -1
  255. package/dist/ionic/{p-d3ceed28.entry.js → p-53c46dd1.entry.js} +1 -1
  256. package/dist/ionic/{p-4e548bd7.system.entry.js → p-55f99a39.system.entry.js} +1 -1
  257. package/dist/ionic/{p-1e4d7975.system.js → p-5734ac17.system.js} +1 -1
  258. package/dist/ionic/{p-c62571da.entry.js → p-5b183a1c.entry.js} +1 -1
  259. package/dist/ionic/{p-d11c336d.js → p-5cc6dcf5.js} +1 -1
  260. package/dist/ionic/{p-2c3c7cb9.system.entry.js → p-5d26afde.system.entry.js} +1 -1
  261. package/dist/ionic/{p-bd6d9610.entry.js → p-5d723a0a.entry.js} +1 -1
  262. package/dist/ionic/{p-ebe0aa6d.entry.js → p-606f069c.entry.js} +1 -1
  263. package/dist/ionic/{p-1930d8e7.entry.js → p-6143e16a.entry.js} +1 -1
  264. package/dist/ionic/{p-d5460f2d.system.entry.js → p-61d8c43c.system.entry.js} +1 -1
  265. package/dist/ionic/{p-93e43f42.system.entry.js → p-628967e3.system.entry.js} +1 -1
  266. package/dist/ionic/p-637e85a2.entry.js +4 -0
  267. package/dist/ionic/{p-385964e6.entry.js → p-657157d7.entry.js} +1 -1
  268. package/dist/ionic/p-6636ef29.js +4 -0
  269. package/dist/ionic/{p-45aec799.system.entry.js → p-670c9f57.system.entry.js} +1 -1
  270. package/dist/ionic/{p-9b31ebfa.entry.js → p-672b53f3.entry.js} +1 -1
  271. package/dist/ionic/p-6a5fe8b0.js +4 -0
  272. package/dist/ionic/{p-5a3a3373.entry.js → p-6c3666d5.entry.js} +1 -1
  273. package/dist/ionic/{p-5a6d3cd9.entry.js → p-6c64aef2.entry.js} +1 -1
  274. package/dist/ionic/{p-b571cab1.entry.js → p-74806c03.entry.js} +1 -1
  275. package/dist/ionic/{p-b799a007.entry.js → p-762156c0.entry.js} +1 -1
  276. package/dist/ionic/{p-5ff497dc.system.entry.js → p-77731f19.system.entry.js} +1 -1
  277. package/dist/ionic/{p-d1a8f599.entry.js → p-797fc793.entry.js} +1 -1
  278. package/dist/ionic/{p-c4676693.entry.js → p-7cf7ef9f.entry.js} +1 -1
  279. package/dist/ionic/{p-748e6b2b.system.entry.js → p-7d6fd45f.system.entry.js} +1 -1
  280. package/dist/ionic/p-7f189103.system.entry.js +4 -0
  281. package/dist/ionic/{p-ec723b9f.system.entry.js → p-7f512c4d.system.entry.js} +1 -1
  282. package/dist/ionic/{p-c977c5bc.entry.js → p-8162bcf4.entry.js} +1 -1
  283. package/dist/ionic/p-842c9fca.system.js +4 -0
  284. package/dist/ionic/{p-2ab5db0d.system.entry.js → p-86a7576c.system.entry.js} +1 -1
  285. package/dist/ionic/{p-bbbe3138.system.entry.js → p-939dbcc6.system.entry.js} +1 -1
  286. package/dist/ionic/{p-9384565a.entry.js → p-98f6116f.entry.js} +1 -1
  287. package/dist/ionic/{p-fd633973.entry.js → p-99c42ae3.entry.js} +1 -1
  288. package/dist/ionic/{p-470f73c4.entry.js → p-9c5b6727.entry.js} +1 -1
  289. package/dist/ionic/{p-051d2d23.js → p-9da86308.js} +1 -1
  290. package/dist/ionic/{p-34511b1d.js → p-9ec42be0.js} +1 -1
  291. package/dist/ionic/{p-a0fa6344.system.entry.js → p-a23a7b64.system.entry.js} +1 -1
  292. package/dist/ionic/{p-1980c728.system.js → p-a39d3482.system.js} +1 -1
  293. package/dist/ionic/{p-45034312.system.entry.js → p-a51b22fb.system.entry.js} +1 -1
  294. package/dist/ionic/{p-0b12d1ee.system.entry.js → p-a822c02f.system.entry.js} +1 -1
  295. package/dist/ionic/{p-48888af6.system.entry.js → p-a87cdd33.system.entry.js} +1 -1
  296. package/dist/ionic/{p-77ce6034.js → p-a953ef66.js} +1 -1
  297. package/dist/ionic/p-aa71aee7.js +4 -0
  298. package/dist/ionic/{p-7f59064a.entry.js → p-af6c2b39.entry.js} +1 -1
  299. package/dist/ionic/p-b4a034c8.system.js +4 -0
  300. package/dist/ionic/{p-142a778b.system.entry.js → p-b6d4e78d.system.entry.js} +1 -1
  301. package/dist/ionic/{p-4737e73a.entry.js → p-b9c741b6.entry.js} +1 -1
  302. package/dist/ionic/{p-031b070b.system.entry.js → p-bae97f84.system.entry.js} +1 -1
  303. package/dist/ionic/{p-283fd4e1.system.entry.js → p-c41435e6.system.entry.js} +1 -1
  304. package/dist/ionic/{p-45664cb9.system.js → p-cab332d1.system.js} +1 -1
  305. package/dist/ionic/{p-3ef93daf.entry.js → p-cac9bd5d.entry.js} +1 -1
  306. package/dist/ionic/{p-75f262d3.entry.js → p-cc3fc234.entry.js} +1 -1
  307. package/dist/ionic/{p-c23627c3.entry.js → p-cfbf4588.entry.js} +1 -1
  308. package/dist/ionic/p-d0d2827d.system.entry.js +4 -0
  309. package/dist/ionic/{p-34619a37.system.entry.js → p-d78ce4cc.system.entry.js} +1 -1
  310. package/dist/ionic/{p-23e440b6.entry.js → p-d979153a.entry.js} +1 -1
  311. package/dist/ionic/{p-b1f78948.system.entry.js → p-dba28cb1.system.entry.js} +1 -1
  312. package/dist/ionic/p-dba5cb84.js +5 -0
  313. package/dist/ionic/{p-53a3b33c.system.entry.js → p-dc242acb.system.entry.js} +1 -1
  314. package/dist/ionic/{p-c9ba1908.entry.js → p-df517d1f.entry.js} +1 -1
  315. package/dist/ionic/{p-d6229f05.system.entry.js → p-e1f7425b.system.entry.js} +1 -1
  316. package/dist/ionic/{p-fc6301cd.system.entry.js → p-e58a04ae.system.entry.js} +1 -1
  317. package/dist/ionic/{p-4e5288de.system.js → p-e81f22e3.system.js} +1 -1
  318. package/dist/ionic/{p-3f3add1a.entry.js → p-e95ac94c.entry.js} +1 -1
  319. package/dist/ionic/{p-8caca06c.system.entry.js → p-eaac2522.system.entry.js} +1 -1
  320. package/dist/ionic/{p-a592f1b8.system.entry.js → p-eed23392.system.entry.js} +1 -1
  321. package/dist/ionic/{p-aa0f60b2.system.js → p-f14daa66.system.js} +1 -1
  322. package/dist/ionic/{p-cb4f96f3.system.js → p-f2026596.system.js} +1 -1
  323. package/dist/ionic/p-f350f4c2.entry.js +4 -0
  324. package/dist/ionic/{p-8627f783.system.entry.js → p-f8b4ac1f.system.entry.js} +1 -1
  325. package/dist/ionic/{p-63265e00.system.entry.js → p-fb088c7d.system.entry.js} +1 -1
  326. package/hydrate/index.js +43143 -39113
  327. package/package.json +6 -6
  328. package/dist/cjs/index-1437d080.js +0 -11980
  329. package/dist/esm/index-5dc2b88e.js +0 -11942
  330. package/dist/esm-es5/app-globals-3cbaf9d9.js +0 -4
  331. package/dist/esm-es5/index-5dc2b88e.js +0 -18
  332. package/dist/esm-es5/ios.transition-a0041e41.js +0 -4
  333. package/dist/ionic/p-06d5221c.js +0 -4
  334. package/dist/ionic/p-06fad524.system.js +0 -4
  335. package/dist/ionic/p-0b3861eb.entry.js +0 -4
  336. package/dist/ionic/p-20304962.js +0 -4
  337. package/dist/ionic/p-2fa34b5c.entry.js +0 -4
  338. package/dist/ionic/p-32048e4c.system.js +0 -18
  339. package/dist/ionic/p-4ad48ec9.system.entry.js +0 -4
  340. package/dist/ionic/p-4af0b730.js +0 -8
  341. package/dist/ionic/p-58f89707.js +0 -4
  342. package/dist/ionic/p-8c4fc85f.system.js +0 -4
  343. package/dist/ionic/p-b0093947.system.js +0 -4
  344. package/dist/ionic/p-cc856712.entry.js +0 -4
  345. package/dist/ionic/p-cd1b9056.js +0 -4
  346. package/dist/ionic/p-f4bc5429.system.entry.js +0 -4
  347. package/dist/ionic/p-fdf40b09.js +0 -4
@@ -4,9 +4,9 @@
4
4
  'use strict';
5
5
 
6
6
  const animation = require('./animation-b4fdf128.js');
7
- const index = require('./index-c76a1d14.js');
7
+ const index = require('./index-6047957b.js');
8
8
  require('./index-c8d52405.js');
9
- require('./index-1437d080.js');
9
+ require('./index-8709af32.js');
10
10
  require('./helpers-afaa9001.js');
11
11
 
12
12
  const DURATION = 540;
@@ -61,20 +61,22 @@ const createLargeTitleTransition = (rootAnimation, rtl, backDirection, enteringE
61
61
  const leavingLargeTitleBox = leavingLargeTitle.getBoundingClientRect();
62
62
  const enteringBackButtonBox = enteringBackButton.getBoundingClientRect();
63
63
  const enteringBackButtonTextEl = shadow(enteringBackButton).querySelector('.button-text');
64
- const enteringBackButtonTextBox = enteringBackButtonTextEl.getBoundingClientRect();
64
+ // Text element not rendered if developers pass text="" to the back button
65
+ const enteringBackButtonTextBox = enteringBackButtonTextEl === null || enteringBackButtonTextEl === void 0 ? void 0 : enteringBackButtonTextEl.getBoundingClientRect();
65
66
  const leavingLargeTitleTextEl = shadow(leavingLargeTitle).querySelector('.toolbar-title');
66
67
  const leavingLargeTitleTextBox = leavingLargeTitleTextEl.getBoundingClientRect();
67
- animateLargeTitle(rootAnimation, rtl, backDirection, leavingLargeTitle, leavingLargeTitleBox, leavingLargeTitleTextBox, enteringBackButtonTextEl, enteringBackButtonTextBox);
68
+ animateLargeTitle(rootAnimation, rtl, backDirection, leavingLargeTitle, leavingLargeTitleBox, leavingLargeTitleTextBox, enteringBackButtonBox, enteringBackButtonTextEl, enteringBackButtonTextBox);
68
69
  animateBackButton(rootAnimation, rtl, backDirection, enteringBackButton, enteringBackButtonBox, enteringBackButtonTextEl, enteringBackButtonTextBox, leavingLargeTitle, leavingLargeTitleTextBox);
69
70
  }
70
71
  else if (shouldAnimationBackward) {
71
72
  const enteringLargeTitleBox = enteringLargeTitle.getBoundingClientRect();
72
73
  const leavingBackButtonBox = leavingBackButton.getBoundingClientRect();
73
74
  const leavingBackButtonTextEl = shadow(leavingBackButton).querySelector('.button-text');
74
- const leavingBackButtonTextBox = leavingBackButtonTextEl.getBoundingClientRect();
75
+ // Text element not rendered if developers pass text="" to the back button
76
+ const leavingBackButtonTextBox = leavingBackButtonTextEl === null || leavingBackButtonTextEl === void 0 ? void 0 : leavingBackButtonTextEl.getBoundingClientRect();
75
77
  const enteringLargeTitleTextEl = shadow(enteringLargeTitle).querySelector('.toolbar-title');
76
78
  const enteringLargeTitleTextBox = enteringLargeTitleTextEl.getBoundingClientRect();
77
- animateLargeTitle(rootAnimation, rtl, backDirection, enteringLargeTitle, enteringLargeTitleBox, enteringLargeTitleTextBox, leavingBackButtonTextEl, leavingBackButtonTextBox);
79
+ animateLargeTitle(rootAnimation, rtl, backDirection, enteringLargeTitle, enteringLargeTitleBox, enteringLargeTitleTextBox, leavingBackButtonBox, leavingBackButtonTextEl, leavingBackButtonTextBox);
78
80
  animateBackButton(rootAnimation, rtl, backDirection, leavingBackButton, leavingBackButtonBox, leavingBackButtonTextEl, leavingBackButtonTextBox, enteringLargeTitle, enteringLargeTitleTextBox);
79
81
  }
80
82
  return {
@@ -88,26 +90,31 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
88
90
  const TEXT_ORIGIN_X = rtl ? 'right' : 'left';
89
91
  const ICON_ORIGIN_X = rtl ? 'left' : 'right';
90
92
  const CONTAINER_ORIGIN_X = rtl ? 'right' : 'left';
91
- /**
92
- * When the title and back button texts match
93
- * then they should overlap during the page transition.
94
- * If the texts do not match up then the back button text scale adjusts
95
- * to not perfectly match the large title text otherwise the
96
- * proportions will be incorrect.
97
- * When the texts match we scale both the width and height to account for
98
- * font weight differences between the title and back button.
99
- */
100
- const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
101
- const WIDTH_SCALE = largeTitleTextBox.width / backButtonTextBox.width;
102
- /**
103
- * We subtract an offset to account for slight sizing/padding
104
- * differences between the title and the back button.
105
- */
106
- const HEIGHT_SCALE = (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET) / backButtonTextBox.height;
107
- const TEXT_START_SCALE = doTitleAndButtonTextsMatch
108
- ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})`
109
- : `scale(${HEIGHT_SCALE})`;
93
+ let WIDTH_SCALE = 1;
94
+ let HEIGHT_SCALE = 1;
95
+ let TEXT_START_SCALE = `scale(${HEIGHT_SCALE})`;
110
96
  const TEXT_END_SCALE = 'scale(1)';
97
+ if (backButtonTextEl && backButtonTextBox) {
98
+ /**
99
+ * When the title and back button texts match then they should overlap during the
100
+ * page transition. If the texts do not match up then the back button text scale
101
+ * adjusts to not perfectly match the large title text otherwise the proportions
102
+ * will be incorrect. When the texts match we scale both the width and height to
103
+ * account for font weight differences between the title and back button.
104
+ */
105
+ const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
106
+ WIDTH_SCALE = largeTitleTextBox.width / backButtonTextBox.width;
107
+ /**
108
+ * Subtract an offset to account for slight sizing/padding differences between the
109
+ * title and the back button.
110
+ */
111
+ HEIGHT_SCALE = (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET) / backButtonTextBox.height;
112
+ /**
113
+ * Even though we set TEXT_START_SCALE to HEIGHT_SCALE above, we potentially need
114
+ * to re-compute this here since the HEIGHT_SCALE may have changed.
115
+ */
116
+ TEXT_START_SCALE = doTitleAndButtonTextsMatch ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})` : `scale(${HEIGHT_SCALE})`;
117
+ }
111
118
  const backButtonIconEl = shadow(backButtonEl).querySelector('ion-icon');
112
119
  const backButtonIconBox = backButtonIconEl.getBoundingClientRect();
113
120
  /**
@@ -204,11 +211,11 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
204
211
  top: '0px',
205
212
  [CONTAINER_ORIGIN_X]: '0px',
206
213
  })
207
- .keyframes(CONTAINER_KEYFRAMES);
208
- enteringBackButtonTextAnimation
209
- .beforeStyles({
210
- 'transform-origin': `${TEXT_ORIGIN_X} top`,
211
- })
214
+ /**
215
+ * The write hooks must be set on this animation as it is guaranteed to run. Other
216
+ * animations such as the back button text animation will not run if the back button
217
+ * has no visible text.
218
+ */
212
219
  .beforeAddWrite(() => {
213
220
  backButtonEl.style.setProperty('display', 'none');
214
221
  clonedBackButtonEl.style.setProperty(TEXT_ORIGIN_X, BACK_BUTTON_START_OFFSET);
@@ -217,6 +224,11 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
217
224
  backButtonEl.style.setProperty('display', '');
218
225
  clonedBackButtonEl.style.setProperty('display', 'none');
219
226
  clonedBackButtonEl.style.removeProperty(TEXT_ORIGIN_X);
227
+ })
228
+ .keyframes(CONTAINER_KEYFRAMES);
229
+ enteringBackButtonTextAnimation
230
+ .beforeStyles({
231
+ 'transform-origin': `${TEXT_ORIGIN_X} top`,
220
232
  })
221
233
  .keyframes(TEXT_KEYFRAMES);
222
234
  enteringBackButtonIconAnimation
@@ -230,7 +242,7 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
230
242
  enteringBackButtonAnimation,
231
243
  ]);
232
244
  };
233
- const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, largeTitleTextBox, backButtonTextEl, backButtonTextBox) => {
245
+ const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, largeTitleTextBox, backButtonBox, backButtonTextEl, backButtonTextBox) => {
234
246
  var _a, _b;
235
247
  /**
236
248
  * The horizontal transform origin for the large title
@@ -250,52 +262,67 @@ const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, larg
250
262
  * title and the back button due to padding and font weight.
251
263
  */
252
264
  const LARGE_TITLE_TRANSLATION_OFFSET = 8;
265
+ let END_TRANSLATE_X = rtl
266
+ ? `-${window.innerWidth - backButtonBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
267
+ : `${backButtonBox.x + LARGE_TITLE_TRANSLATION_OFFSET}px`;
253
268
  /**
254
- * The scaled title should (roughly) overlap the back button.
255
- * This ensures that the back button and title overlap during
256
- * the animation. Note that since both elements either fade in
257
- * or fade out over the course of the animation, neither element
258
- * will be fully visible on top of the other. As a result, the overlap
259
- * does not need to be perfect, so approximate values are acceptable here.
269
+ * How much to scale the large title up/down by.
260
270
  */
261
- const END_TRANSLATE_X = rtl
262
- ? `-${window.innerWidth - backButtonTextBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
263
- : `${backButtonTextBox.x - LARGE_TITLE_TRANSLATION_OFFSET}px`;
271
+ let HEIGHT_SCALE = 0.5;
264
272
  /**
265
- * The top of the scaled large title
266
- * should match with the top of the
267
- * back button text element.
268
- * We subtract 2px to account for the top padding
269
- * on the large title element.
273
+ * The large title always starts full size.
270
274
  */
271
- const LARGE_TITLE_TOP_PADDING = 2;
272
- const END_TRANSLATE_Y = `${backButtonTextBox.y - LARGE_TITLE_TOP_PADDING}px`;
275
+ const START_SCALE = 'scale(1)';
273
276
  /**
274
- * In the forward direction, the large title should start at its
275
- * normal size and then scale down to be (roughly) the size of the
276
- * back button on the other view. In the backward direction, the
277
- * large title should start at (roughly) the size of the back button
278
- * and then scale up to its original size.
279
- *
280
- * Note that since both elements either fade in
281
- * or fade out over the course of the animation, neither element
282
- * will be fully visible on top of the other. As a result, the overlap
283
- * does not need to be perfect, so approximate values are acceptable here.
277
+ * By default, we don't worry about having the large title scaled to perfectly
278
+ * match the back button because we don't know if the back button's text matches
279
+ * the large title's text.
284
280
  */
281
+ let END_SCALE = `scale(${HEIGHT_SCALE})`;
282
+ // Text element not rendered if developers pass text="" to the back button
283
+ if (backButtonTextEl && backButtonTextBox) {
284
+ /**
285
+ * The scaled title should (roughly) overlap the back button. This ensures that
286
+ * the back button and title overlap during the animation. Note that since both
287
+ * elements either fade in or fade out over the course of the animation, neither
288
+ * element will be fully visible on top of the other. As a result, the overlap
289
+ * does not need to be perfect, so approximate values are acceptable here.
290
+ */
291
+ END_TRANSLATE_X = rtl
292
+ ? `-${window.innerWidth - backButtonTextBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
293
+ : `${backButtonTextBox.x - LARGE_TITLE_TRANSLATION_OFFSET}px`;
294
+ /**
295
+ * In the forward direction, the large title should start at its normal size and
296
+ * then scale down to be (roughly) the size of the back button on the other view.
297
+ * In the backward direction, the large title should start at (roughly) the size
298
+ * of the back button and then scale up to its original size.
299
+ * Note that since both elements either fade in or fade out over the course of the
300
+ * animation, neither element will be fully visible on top of the other. As a result,
301
+ * the overlap does not need to be perfect, so approximate values are acceptable here.
302
+ */
303
+ /**
304
+ * When the title and back button texts match then they should overlap during the
305
+ * page transition. If the texts do not match up then the large title text scale
306
+ * adjusts to not perfectly match the back button text otherwise the proportions
307
+ * will be incorrect. When the texts match we scale both the width and height to
308
+ * account for font weight differences between the title and back button.
309
+ */
310
+ const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
311
+ const WIDTH_SCALE = backButtonTextBox.width / largeTitleTextBox.width;
312
+ HEIGHT_SCALE = backButtonTextBox.height / (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET);
313
+ /**
314
+ * Even though we set TEXT_START_SCALE to HEIGHT_SCALE above, we potentially need
315
+ * to re-compute this here since the HEIGHT_SCALE may have changed.
316
+ */
317
+ END_SCALE = doTitleAndButtonTextsMatch ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})` : `scale(${HEIGHT_SCALE})`;
318
+ }
285
319
  /**
286
- * When the title and back button texts match
287
- * then they should overlap during the page transition.
288
- * If the texts do not match up then the large title text scale adjusts
289
- * to not perfectly match the back button text otherwise the
290
- * proportions will be incorrect.
291
- * When the texts match we scale both the width and height to account for
292
- * font weight differences between the title and back button.
320
+ * The midpoints of the back button and the title should align such that the back
321
+ * button and title appear to be centered with each other.
293
322
  */
294
- const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
295
- const WIDTH_SCALE = backButtonTextBox.width / largeTitleTextBox.width;
296
- const HEIGHT_SCALE = backButtonTextBox.height / (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET);
297
- const START_SCALE = 'scale(1)';
298
- const END_SCALE = doTitleAndButtonTextsMatch ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})` : `scale(${HEIGHT_SCALE})`;
323
+ const backButtonMidPoint = backButtonBox.top + backButtonBox.height / 2;
324
+ const titleMidPoint = (largeTitleBox.height * HEIGHT_SCALE) / 2;
325
+ const END_TRANSLATE_Y = `${backButtonMidPoint - titleMidPoint}px`;
299
326
  const BACKWARDS_KEYFRAMES = [
300
327
  { offset: 0, opacity: 0, transform: `translate3d(${END_TRANSLATE_X}, ${END_TRANSLATE_Y}, 0) ${END_SCALE}` },
301
328
  { offset: 0.1, opacity: 0 },
@@ -5,9 +5,9 @@
5
5
 
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
- const index = require('./index-1437d080.js');
9
- const appGlobals = require('./app-globals-542c4d91.js');
10
- require('./ionic-global-f3622afe.js');
8
+ const index = require('./index-8709af32.js');
9
+ const appGlobals = require('./app-globals-66b7dc06.js');
10
+ require('./ionic-global-35b86a09.js');
11
11
 
12
12
  const defineCustomElements = async (win, options) => {
13
13
  if (typeof window === 'undefined') return undefined;
@@ -4,9 +4,9 @@
4
4
  'use strict';
5
5
 
6
6
  const animation = require('./animation-b4fdf128.js');
7
- const index = require('./index-c76a1d14.js');
7
+ const index = require('./index-6047957b.js');
8
8
  require('./index-c8d52405.js');
9
- require('./index-1437d080.js');
9
+ require('./index-8709af32.js');
10
10
  require('./helpers-afaa9001.js');
11
11
 
12
12
  const mdTransitionAnimation = (_, opts) => {
@@ -5,8 +5,8 @@
5
5
 
6
6
  const index = require('./index-c8d52405.js');
7
7
  const helpers = require('./helpers-afaa9001.js');
8
- const hardwareBackButton = require('./hardware-back-button-06ae4d9c.js');
9
- const ionicGlobal = require('./ionic-global-f3622afe.js');
8
+ const hardwareBackButton = require('./hardware-back-button-ed931127.js');
9
+ const ionicGlobal = require('./ionic-global-35b86a09.js');
10
10
  const frameworkDelegate = require('./framework-delegate-55f5683a.js');
11
11
  const gestureController = require('./gesture-controller-9436f482.js');
12
12
  const index$1 = require('./index-5915f9b3.js');
@@ -3,7 +3,7 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- const index = require('./index-1437d080.js');
6
+ const index = require('./index-8709af32.js');
7
7
  const index$1 = require('./index-5b6a7459.js');
8
8
  const helpers = require('./helpers-afaa9001.js');
9
9
  require('./index-5915f9b3.js');
@@ -96,7 +96,7 @@
96
96
  ],
97
97
  "compiler": {
98
98
  "name": "@stencil/core",
99
- "version": "4.17.1",
99
+ "version": "4.17.2",
100
100
  "typescriptVersion": "5.4.5"
101
101
  },
102
102
  "collections": [
@@ -319,7 +319,8 @@ export class Datetime {
319
319
  * Check below the next line ensures that we did not
320
320
  * swipe and abort (i.e. we swiped but we are still on the current month).
321
321
  */
322
- const month = calendarBodyRef.scrollLeft <= 2 ? startMonth : endMonth;
322
+ const condition = isRTL(this.el) ? calendarBodyRef.scrollLeft >= -2 : calendarBodyRef.scrollLeft <= 2;
323
+ const month = condition ? startMonth : endMonth;
323
324
  /**
324
325
  * The edge of the month must be lined up with
325
326
  * the edge of the calendar body in order for
@@ -1556,7 +1557,7 @@ export class Datetime {
1556
1557
  const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
1557
1558
  const hasWheelVariant = hasDatePresentation && preferWheel;
1558
1559
  renderHiddenInput(true, el, name, formatValue(value), disabled);
1559
- return (h(Host, { key: '0b8c97bfb84dff5f8ef8097bba44f6c4ad119f76', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses(color, {
1560
+ return (h(Host, { key: '11508a20af9da98e21eb92d2b882bb7cf8370da6', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses(color, {
1560
1561
  [mode]: true,
1561
1562
  ['datetime-readonly']: readonly,
1562
1563
  ['datetime-disabled']: disabled,
@@ -1566,7 +1567,7 @@ export class Datetime {
1566
1567
  [`datetime-size-${size}`]: true,
1567
1568
  [`datetime-prefer-wheel`]: hasWheelVariant,
1568
1569
  [`datetime-grid`]: isGridStyle,
1569
- })) }, h("div", { key: '36e389a8c49944b5bbc0429f6b86d9c28a5b860a', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
1570
+ })) }, h("div", { key: 'e35a98de33fa67c8b20c1d40620c1c75dee07512', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
1570
1571
  }
1571
1572
  static get is() { return "ion-datetime"; }
1572
1573
  static get encapsulation() { return "shadow"; }
@@ -4,6 +4,29 @@
4
4
  import AxeBuilder from "@axe-core/playwright";
5
5
  import { expect } from "@playwright/test";
6
6
  import { configs, test } from "../../../../utils/test/playwright/index";
7
+ configs({ directions: ['ltr'], palettes: ['dark'] }).forEach(({ config, screenshot, title }) => {
8
+ test.describe(title('item: dark palette'), () => {
9
+ /**
10
+ * This test was originally created to ensure the item border has sufficient
11
+ * contrast. We don't use an Axe test here because Axe not warn about color
12
+ * contrast on the item borders.
13
+ */
14
+ test('borders should have sufficient contrast', async ({ page }) => {
15
+ test.info().annotations.push({
16
+ type: 'issue',
17
+ description: 'https://github.com/ionic-team/ionic-framework/issues/29386',
18
+ });
19
+ await page.setContent(`
20
+ <ion-list>
21
+ <ion-item>Item</ion-item>
22
+ <ion-item>Item</ion-item>
23
+ </ion-list>
24
+ `, config);
25
+ const list = page.locator('ion-list');
26
+ await expect(list).toHaveScreenshot(screenshot(`item-dark`));
27
+ });
28
+ });
29
+ });
7
30
  configs({ directions: ['ltr'] }).forEach(({ config, screenshot, title }) => {
8
31
  test.describe(title('item: axe'), () => {
9
32
  test('should not have accessibility violations', async ({ page }) => {
@@ -189,4 +189,29 @@ configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, screenshot, co
189
189
  await expect(notchCutout).toBeHidden();
190
190
  });
191
191
  });
192
+ test(title('select: fill outline: fit-content should display select options'), async ({ page }, testInfo) => {
193
+ testInfo.annotations.push({
194
+ type: 'issue',
195
+ description: 'https://github.com/ionic-team/ionic-framework/issues/29321',
196
+ });
197
+ await page.setContent(`
198
+ <ion-select
199
+ fill="outline"
200
+ aria-label="Fruit"
201
+ value="apple"
202
+ interface="popover"
203
+ style="width: fit-content"
204
+ >
205
+ <ion-select-option value="5">5</ion-select-option>
206
+ <ion-select-option value="10">10</ion-select-option>
207
+ <ion-select-option value="15">15</ion-select-option>
208
+ </ion-select>
209
+ `, config);
210
+ const select = page.locator('ion-select');
211
+ const ionPopoverDidPresent = await page.spyOnEvent('ionPopoverDidPresent');
212
+ await select.click();
213
+ await ionPopoverDidPresent.next();
214
+ const selectPopover = page.locator('ion-select-popover');
215
+ await expect(selectPopover).toHaveScreenshot(screenshot(`select-fill-outline-fit-content`));
216
+ });
192
217
  });
@@ -189,7 +189,14 @@ ion-label {
189
189
  * }
190
190
  */
191
191
  ion-list ion-radio::part(container) {
192
- opacity: 0;
192
+ display: none;
193
+ }
194
+
195
+ ion-list ion-radio::part(label) {
196
+ margin-left: 0;
197
+ margin-right: 0;
198
+ margin-top: 0;
199
+ margin-bottom: 0;
193
200
  }
194
201
 
195
202
  ion-item {
@@ -55,20 +55,22 @@ const createLargeTitleTransition = (rootAnimation, rtl, backDirection, enteringE
55
55
  const leavingLargeTitleBox = leavingLargeTitle.getBoundingClientRect();
56
56
  const enteringBackButtonBox = enteringBackButton.getBoundingClientRect();
57
57
  const enteringBackButtonTextEl = shadow(enteringBackButton).querySelector('.button-text');
58
- const enteringBackButtonTextBox = enteringBackButtonTextEl.getBoundingClientRect();
58
+ // Text element not rendered if developers pass text="" to the back button
59
+ const enteringBackButtonTextBox = enteringBackButtonTextEl === null || enteringBackButtonTextEl === void 0 ? void 0 : enteringBackButtonTextEl.getBoundingClientRect();
59
60
  const leavingLargeTitleTextEl = shadow(leavingLargeTitle).querySelector('.toolbar-title');
60
61
  const leavingLargeTitleTextBox = leavingLargeTitleTextEl.getBoundingClientRect();
61
- animateLargeTitle(rootAnimation, rtl, backDirection, leavingLargeTitle, leavingLargeTitleBox, leavingLargeTitleTextBox, enteringBackButtonTextEl, enteringBackButtonTextBox);
62
+ animateLargeTitle(rootAnimation, rtl, backDirection, leavingLargeTitle, leavingLargeTitleBox, leavingLargeTitleTextBox, enteringBackButtonBox, enteringBackButtonTextEl, enteringBackButtonTextBox);
62
63
  animateBackButton(rootAnimation, rtl, backDirection, enteringBackButton, enteringBackButtonBox, enteringBackButtonTextEl, enteringBackButtonTextBox, leavingLargeTitle, leavingLargeTitleTextBox);
63
64
  }
64
65
  else if (shouldAnimationBackward) {
65
66
  const enteringLargeTitleBox = enteringLargeTitle.getBoundingClientRect();
66
67
  const leavingBackButtonBox = leavingBackButton.getBoundingClientRect();
67
68
  const leavingBackButtonTextEl = shadow(leavingBackButton).querySelector('.button-text');
68
- const leavingBackButtonTextBox = leavingBackButtonTextEl.getBoundingClientRect();
69
+ // Text element not rendered if developers pass text="" to the back button
70
+ const leavingBackButtonTextBox = leavingBackButtonTextEl === null || leavingBackButtonTextEl === void 0 ? void 0 : leavingBackButtonTextEl.getBoundingClientRect();
69
71
  const enteringLargeTitleTextEl = shadow(enteringLargeTitle).querySelector('.toolbar-title');
70
72
  const enteringLargeTitleTextBox = enteringLargeTitleTextEl.getBoundingClientRect();
71
- animateLargeTitle(rootAnimation, rtl, backDirection, enteringLargeTitle, enteringLargeTitleBox, enteringLargeTitleTextBox, leavingBackButtonTextEl, leavingBackButtonTextBox);
73
+ animateLargeTitle(rootAnimation, rtl, backDirection, enteringLargeTitle, enteringLargeTitleBox, enteringLargeTitleTextBox, leavingBackButtonBox, leavingBackButtonTextEl, leavingBackButtonTextBox);
72
74
  animateBackButton(rootAnimation, rtl, backDirection, leavingBackButton, leavingBackButtonBox, leavingBackButtonTextEl, leavingBackButtonTextBox, enteringLargeTitle, enteringLargeTitleTextBox);
73
75
  }
74
76
  return {
@@ -82,26 +84,31 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
82
84
  const TEXT_ORIGIN_X = rtl ? 'right' : 'left';
83
85
  const ICON_ORIGIN_X = rtl ? 'left' : 'right';
84
86
  const CONTAINER_ORIGIN_X = rtl ? 'right' : 'left';
85
- /**
86
- * When the title and back button texts match
87
- * then they should overlap during the page transition.
88
- * If the texts do not match up then the back button text scale adjusts
89
- * to not perfectly match the large title text otherwise the
90
- * proportions will be incorrect.
91
- * When the texts match we scale both the width and height to account for
92
- * font weight differences between the title and back button.
93
- */
94
- const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
95
- const WIDTH_SCALE = largeTitleTextBox.width / backButtonTextBox.width;
96
- /**
97
- * We subtract an offset to account for slight sizing/padding
98
- * differences between the title and the back button.
99
- */
100
- const HEIGHT_SCALE = (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET) / backButtonTextBox.height;
101
- const TEXT_START_SCALE = doTitleAndButtonTextsMatch
102
- ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})`
103
- : `scale(${HEIGHT_SCALE})`;
87
+ let WIDTH_SCALE = 1;
88
+ let HEIGHT_SCALE = 1;
89
+ let TEXT_START_SCALE = `scale(${HEIGHT_SCALE})`;
104
90
  const TEXT_END_SCALE = 'scale(1)';
91
+ if (backButtonTextEl && backButtonTextBox) {
92
+ /**
93
+ * When the title and back button texts match then they should overlap during the
94
+ * page transition. If the texts do not match up then the back button text scale
95
+ * adjusts to not perfectly match the large title text otherwise the proportions
96
+ * will be incorrect. When the texts match we scale both the width and height to
97
+ * account for font weight differences between the title and back button.
98
+ */
99
+ const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
100
+ WIDTH_SCALE = largeTitleTextBox.width / backButtonTextBox.width;
101
+ /**
102
+ * Subtract an offset to account for slight sizing/padding differences between the
103
+ * title and the back button.
104
+ */
105
+ HEIGHT_SCALE = (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET) / backButtonTextBox.height;
106
+ /**
107
+ * Even though we set TEXT_START_SCALE to HEIGHT_SCALE above, we potentially need
108
+ * to re-compute this here since the HEIGHT_SCALE may have changed.
109
+ */
110
+ TEXT_START_SCALE = doTitleAndButtonTextsMatch ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})` : `scale(${HEIGHT_SCALE})`;
111
+ }
105
112
  const backButtonIconEl = shadow(backButtonEl).querySelector('ion-icon');
106
113
  const backButtonIconBox = backButtonIconEl.getBoundingClientRect();
107
114
  /**
@@ -198,11 +205,11 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
198
205
  top: '0px',
199
206
  [CONTAINER_ORIGIN_X]: '0px',
200
207
  })
201
- .keyframes(CONTAINER_KEYFRAMES);
202
- enteringBackButtonTextAnimation
203
- .beforeStyles({
204
- 'transform-origin': `${TEXT_ORIGIN_X} top`,
205
- })
208
+ /**
209
+ * The write hooks must be set on this animation as it is guaranteed to run. Other
210
+ * animations such as the back button text animation will not run if the back button
211
+ * has no visible text.
212
+ */
206
213
  .beforeAddWrite(() => {
207
214
  backButtonEl.style.setProperty('display', 'none');
208
215
  clonedBackButtonEl.style.setProperty(TEXT_ORIGIN_X, BACK_BUTTON_START_OFFSET);
@@ -211,6 +218,11 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
211
218
  backButtonEl.style.setProperty('display', '');
212
219
  clonedBackButtonEl.style.setProperty('display', 'none');
213
220
  clonedBackButtonEl.style.removeProperty(TEXT_ORIGIN_X);
221
+ })
222
+ .keyframes(CONTAINER_KEYFRAMES);
223
+ enteringBackButtonTextAnimation
224
+ .beforeStyles({
225
+ 'transform-origin': `${TEXT_ORIGIN_X} top`,
214
226
  })
215
227
  .keyframes(TEXT_KEYFRAMES);
216
228
  enteringBackButtonIconAnimation
@@ -224,7 +236,7 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
224
236
  enteringBackButtonAnimation,
225
237
  ]);
226
238
  };
227
- const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, largeTitleTextBox, backButtonTextEl, backButtonTextBox) => {
239
+ const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, largeTitleTextBox, backButtonBox, backButtonTextEl, backButtonTextBox) => {
228
240
  var _a, _b;
229
241
  /**
230
242
  * The horizontal transform origin for the large title
@@ -244,52 +256,67 @@ const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, larg
244
256
  * title and the back button due to padding and font weight.
245
257
  */
246
258
  const LARGE_TITLE_TRANSLATION_OFFSET = 8;
259
+ let END_TRANSLATE_X = rtl
260
+ ? `-${window.innerWidth - backButtonBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
261
+ : `${backButtonBox.x + LARGE_TITLE_TRANSLATION_OFFSET}px`;
247
262
  /**
248
- * The scaled title should (roughly) overlap the back button.
249
- * This ensures that the back button and title overlap during
250
- * the animation. Note that since both elements either fade in
251
- * or fade out over the course of the animation, neither element
252
- * will be fully visible on top of the other. As a result, the overlap
253
- * does not need to be perfect, so approximate values are acceptable here.
263
+ * How much to scale the large title up/down by.
254
264
  */
255
- const END_TRANSLATE_X = rtl
256
- ? `-${window.innerWidth - backButtonTextBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
257
- : `${backButtonTextBox.x - LARGE_TITLE_TRANSLATION_OFFSET}px`;
265
+ let HEIGHT_SCALE = 0.5;
258
266
  /**
259
- * The top of the scaled large title
260
- * should match with the top of the
261
- * back button text element.
262
- * We subtract 2px to account for the top padding
263
- * on the large title element.
267
+ * The large title always starts full size.
264
268
  */
265
- const LARGE_TITLE_TOP_PADDING = 2;
266
- const END_TRANSLATE_Y = `${backButtonTextBox.y - LARGE_TITLE_TOP_PADDING}px`;
269
+ const START_SCALE = 'scale(1)';
267
270
  /**
268
- * In the forward direction, the large title should start at its
269
- * normal size and then scale down to be (roughly) the size of the
270
- * back button on the other view. In the backward direction, the
271
- * large title should start at (roughly) the size of the back button
272
- * and then scale up to its original size.
273
- *
274
- * Note that since both elements either fade in
275
- * or fade out over the course of the animation, neither element
276
- * will be fully visible on top of the other. As a result, the overlap
277
- * does not need to be perfect, so approximate values are acceptable here.
271
+ * By default, we don't worry about having the large title scaled to perfectly
272
+ * match the back button because we don't know if the back button's text matches
273
+ * the large title's text.
278
274
  */
275
+ let END_SCALE = `scale(${HEIGHT_SCALE})`;
276
+ // Text element not rendered if developers pass text="" to the back button
277
+ if (backButtonTextEl && backButtonTextBox) {
278
+ /**
279
+ * The scaled title should (roughly) overlap the back button. This ensures that
280
+ * the back button and title overlap during the animation. Note that since both
281
+ * elements either fade in or fade out over the course of the animation, neither
282
+ * element will be fully visible on top of the other. As a result, the overlap
283
+ * does not need to be perfect, so approximate values are acceptable here.
284
+ */
285
+ END_TRANSLATE_X = rtl
286
+ ? `-${window.innerWidth - backButtonTextBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
287
+ : `${backButtonTextBox.x - LARGE_TITLE_TRANSLATION_OFFSET}px`;
288
+ /**
289
+ * In the forward direction, the large title should start at its normal size and
290
+ * then scale down to be (roughly) the size of the back button on the other view.
291
+ * In the backward direction, the large title should start at (roughly) the size
292
+ * of the back button and then scale up to its original size.
293
+ * Note that since both elements either fade in or fade out over the course of the
294
+ * animation, neither element will be fully visible on top of the other. As a result,
295
+ * the overlap does not need to be perfect, so approximate values are acceptable here.
296
+ */
297
+ /**
298
+ * When the title and back button texts match then they should overlap during the
299
+ * page transition. If the texts do not match up then the large title text scale
300
+ * adjusts to not perfectly match the back button text otherwise the proportions
301
+ * will be incorrect. When the texts match we scale both the width and height to
302
+ * account for font weight differences between the title and back button.
303
+ */
304
+ const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
305
+ const WIDTH_SCALE = backButtonTextBox.width / largeTitleTextBox.width;
306
+ HEIGHT_SCALE = backButtonTextBox.height / (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET);
307
+ /**
308
+ * Even though we set TEXT_START_SCALE to HEIGHT_SCALE above, we potentially need
309
+ * to re-compute this here since the HEIGHT_SCALE may have changed.
310
+ */
311
+ END_SCALE = doTitleAndButtonTextsMatch ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})` : `scale(${HEIGHT_SCALE})`;
312
+ }
279
313
  /**
280
- * When the title and back button texts match
281
- * then they should overlap during the page transition.
282
- * If the texts do not match up then the large title text scale adjusts
283
- * to not perfectly match the back button text otherwise the
284
- * proportions will be incorrect.
285
- * When the texts match we scale both the width and height to account for
286
- * font weight differences between the title and back button.
314
+ * The midpoints of the back button and the title should align such that the back
315
+ * button and title appear to be centered with each other.
287
316
  */
288
- const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
289
- const WIDTH_SCALE = backButtonTextBox.width / largeTitleTextBox.width;
290
- const HEIGHT_SCALE = backButtonTextBox.height / (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET);
291
- const START_SCALE = 'scale(1)';
292
- const END_SCALE = doTitleAndButtonTextsMatch ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})` : `scale(${HEIGHT_SCALE})`;
317
+ const backButtonMidPoint = backButtonBox.top + backButtonBox.height / 2;
318
+ const titleMidPoint = (largeTitleBox.height * HEIGHT_SCALE) / 2;
319
+ const END_TRANSLATE_Y = `${backButtonMidPoint - titleMidPoint}px`;
293
320
  const BACKWARDS_KEYFRAMES = [
294
321
  { offset: 0, opacity: 0, transform: `translate3d(${END_TRANSLATE_X}, ${END_TRANSLATE_Y}, 0) ${END_SCALE}` },
295
322
  { offset: 0.1, opacity: 0 },
package/dist/docs.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
- "timestamp": "2024-04-29T06:08:00",
2
+ "timestamp": "2024-05-01T06:08:18",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
- "version": "4.17.1",
5
+ "version": "4.17.2",
6
6
  "typescriptVersion": "5.4.5"
7
7
  },
8
8
  "components": [