@ionic/core 9.0.10-dev.11792788258.1f71cfee → 9.0.10-dev.11793383958.19a7d413

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 (376) hide show
  1. package/components/index.js +1 -1
  2. package/components/ion-accordion.js +1 -1
  3. package/components/ion-action-sheet.js +1 -1
  4. package/components/ion-alert.js +1 -1
  5. package/components/ion-app.js +1 -1
  6. package/components/ion-back-button.js +1 -1
  7. package/components/ion-breadcrumb.js +1 -1
  8. package/components/ion-button.js +1 -1
  9. package/components/ion-card.js +1 -1
  10. package/components/ion-checkbox.js +1 -1
  11. package/components/ion-col.js +1 -1
  12. package/components/ion-content.js +1 -1
  13. package/components/ion-datetime-button.js +1 -1
  14. package/components/ion-datetime.js +1 -1
  15. package/components/ion-fab-button.js +1 -1
  16. package/components/ion-footer.js +1 -1
  17. package/components/ion-header.js +1 -1
  18. package/components/ion-img.js +1 -1
  19. package/components/ion-infinite-scroll.js +1 -1
  20. package/components/ion-input-otp.js +1 -1
  21. package/components/ion-input-password-toggle.js +1 -1
  22. package/components/ion-input.js +1 -1
  23. package/components/ion-item-options.js +1 -1
  24. package/components/ion-item-sliding.js +1 -1
  25. package/components/ion-item.js +1 -1
  26. package/components/ion-label.js +1 -1
  27. package/components/ion-loading.js +1 -1
  28. package/components/ion-menu-button.js +1 -1
  29. package/components/ion-menu-toggle.js +1 -1
  30. package/components/ion-menu.js +1 -1
  31. package/components/ion-modal.js +1 -1
  32. package/components/ion-nav.js +1 -1
  33. package/components/ion-picker-column-option.js +1 -1
  34. package/components/ion-picker-column.js +1 -1
  35. package/components/ion-picker.js +1 -1
  36. package/components/ion-popover.js +1 -1
  37. package/components/ion-progress-bar.js +1 -1
  38. package/components/ion-radio-group.js +1 -1
  39. package/components/ion-radio.js +1 -1
  40. package/components/ion-range.js +1 -1
  41. package/components/ion-refresher-content.js +1 -1
  42. package/components/ion-refresher.js +1 -1
  43. package/components/ion-reorder-group.js +1 -1
  44. package/components/ion-router-outlet.js +1 -1
  45. package/components/ion-router.js +1 -1
  46. package/components/ion-searchbar.js +1 -1
  47. package/components/ion-segment-button.js +1 -1
  48. package/components/ion-segment-view.js +1 -1
  49. package/components/ion-segment.js +1 -1
  50. package/components/ion-select-modal.js +1 -1
  51. package/components/ion-select-popover.js +1 -1
  52. package/components/ion-select.js +1 -1
  53. package/components/ion-tab-button.js +1 -1
  54. package/components/ion-tab.js +1 -1
  55. package/components/ion-textarea.js +1 -1
  56. package/components/ion-title.js +1 -1
  57. package/components/ion-toast.js +1 -1
  58. package/components/ion-toggle.js +1 -1
  59. package/components/{p-PkD1iLNN.js → p--cshUOAU.js} +1 -1
  60. package/components/{p-D8FyR2IB.js → p-B02CcbPD.js} +1 -1
  61. package/components/{p-CUQjkOdi.js → p-B4IBdPVJ.js} +1 -1
  62. package/components/p-BODcC-C0.js +4 -0
  63. package/components/p-BVNUhOOf.js +4 -0
  64. package/components/{p-BZ1k9WL7.js → p-Ba9_OzSY.js} +1 -1
  65. package/components/p-Bd8hg9FK.js +4 -0
  66. package/components/{p-3avHDbEF.js → p-BqyLLYLm.js} +1 -1
  67. package/components/p-C1AxSUnp.js +4 -0
  68. package/components/{p-DwTzX8Vi.js → p-CKTjkpAq.js} +1 -1
  69. package/components/{p-Dah8BCNg.js → p-CKiqp4Vl.js} +1 -1
  70. package/components/p-CONpe3oX.js +4 -0
  71. package/components/p-CVrOcN5N.js +4 -0
  72. package/components/p-CYctYy9B.js +4 -0
  73. package/components/{p-C-SO5kIs.js → p-C_gnmBt2.js} +1 -1
  74. package/components/{p-DnBabjgY.js → p-CxEV3Vwy.js} +1 -1
  75. package/components/p-Cyajikho.js +4 -0
  76. package/components/p-D0nwlsl_.js +4 -0
  77. package/components/{p-BT2InaHz.js → p-DBtFJlTi.js} +1 -1
  78. package/components/{p-BBsseItU.js → p-DD92Fw3n.js} +1 -1
  79. package/components/{p-kKGBuIkf.js → p-DDI6VLW9.js} +1 -1
  80. package/components/{p-LkEGRiq0.js → p-DfDIY2oP.js} +1 -1
  81. package/components/{p-Dj4J3LkD.js → p-Dojwmvde.js} +1 -1
  82. package/components/p-Drpw2dyl.js +4 -0
  83. package/components/{p-07wRJfkt.js → p-GpqwNbxf.js} +1 -1
  84. package/components/p-IQN1T5zw.js +4 -0
  85. package/components/{p-DTGCMApY.js → p-ODGeXc3M.js} +1 -1
  86. package/components/p-SHHIB5F0.js +4 -0
  87. package/components/{p-D5_mEbGJ.js → p-V1THdfzs.js} +1 -1
  88. package/components/p-YNnH1_Hs.js +4 -0
  89. package/components/{p-C8BAigo3.js → p-ZrYBjOcc.js} +1 -1
  90. package/components/p-_y7kwBO8.js +4 -0
  91. package/components/{p-BrrMFd9K.js → p-jsVMT15X.js} +1 -1
  92. package/components/{p-7NbIvzb4.js → p-r59A3wQk.js} +1 -1
  93. package/components/{p-Dy7x-KDF.js → p-yGD6MBgf.js} +1 -1
  94. package/dist/cjs/{animation-UiXhXV49.js → animation-DcgLg_PI.js} +1 -1
  95. package/dist/cjs/{attribute-controller-0-lwbVEj.js → attribute-controller-BjTE2TOf.js} +1 -1
  96. package/dist/cjs/{button-active-DzN1aPt-.js → button-active-FdsfRDY_.js} +1 -1
  97. package/dist/cjs/{capacitor-BTjfXFlK.js → capacitor-C6Pp4Z7A.js} +1 -1
  98. package/dist/cjs/{dir-Bma_9Lqh.js → dir-zwDPRE5K.js} +1 -1
  99. package/dist/cjs/{framework-delegate-hNMKEiQC.js → framework-delegate-JbKIVMzR.js} +1 -1
  100. package/dist/cjs/{haptic-BD5qPgy8.js → haptic--4QteuuM.js} +1 -1
  101. package/dist/cjs/{helpers-BrETKUUX.js → helpers-Cqr69qxA.js} +3 -2
  102. package/dist/cjs/{index-bwclzjks.js → index-BQpSekmz.js} +2 -2
  103. package/dist/cjs/{index-BTc0Jnhx.js → index-BhWiDK25.js} +3 -3
  104. package/dist/cjs/{index-DMz2Eyis.js → index-CNaZ6SYM.js} +1 -1
  105. package/dist/cjs/{index-DNBYnlrc.js → index-DCfr5hz-.js} +3 -3
  106. package/dist/cjs/index.cjs.js +9 -9
  107. package/dist/cjs/{input-shims-CRmdShL9.js → input-shims-2AsXPZ5m.js} +9 -8
  108. package/dist/cjs/ion-accordion_2.cjs.entry.js +2 -2
  109. package/dist/cjs/ion-action-sheet.cjs.entry.js +8 -8
  110. package/dist/cjs/ion-alert.cjs.entry.js +19 -19
  111. package/dist/cjs/ion-app_8.cjs.entry.js +18 -18
  112. package/dist/cjs/ion-back-button.cjs.entry.js +2 -2
  113. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +2 -2
  114. package/dist/cjs/ion-button_2.cjs.entry.js +3 -3
  115. package/dist/cjs/ion-card_5.cjs.entry.js +3 -3
  116. package/dist/cjs/ion-checkbox.cjs.entry.js +2 -2
  117. package/dist/cjs/ion-col_3.cjs.entry.js +12 -14
  118. package/dist/cjs/ion-datetime-button.cjs.entry.js +2 -2
  119. package/dist/cjs/ion-datetime.cjs.entry.js +9 -8
  120. package/dist/cjs/ion-fab_3.cjs.entry.js +2 -2
  121. package/dist/cjs/ion-img.cjs.entry.js +2 -2
  122. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +3 -3
  123. package/dist/cjs/ion-input-otp.cjs.entry.js +128 -12
  124. package/dist/cjs/ion-input.cjs.entry.js +3 -3
  125. package/dist/cjs/ion-item-option_3.cjs.entry.js +9 -9
  126. package/dist/cjs/ion-item_8.cjs.entry.js +10 -10
  127. package/dist/cjs/ion-loading.cjs.entry.js +5 -5
  128. package/dist/cjs/ion-menu_3.cjs.entry.js +6 -6
  129. package/dist/cjs/ion-modal.cjs.entry.js +10 -10
  130. package/dist/cjs/ion-nav_2.cjs.entry.js +5 -5
  131. package/dist/cjs/ion-picker-column-option.cjs.entry.js +2 -2
  132. package/dist/cjs/ion-picker-column.cjs.entry.js +4 -4
  133. package/dist/cjs/ion-picker.cjs.entry.js +2 -2
  134. package/dist/cjs/ion-popover.cjs.entry.js +14 -28
  135. package/dist/cjs/ion-progress-bar.cjs.entry.js +5 -6
  136. package/dist/cjs/ion-radio_2.cjs.entry.js +2 -2
  137. package/dist/cjs/ion-range.cjs.entry.js +3 -3
  138. package/dist/cjs/ion-refresher_2.cjs.entry.js +6 -6
  139. package/dist/cjs/ion-reorder_2.cjs.entry.js +5 -5
  140. package/dist/cjs/ion-route_4.cjs.entry.js +124 -19
  141. package/dist/cjs/ion-searchbar.cjs.entry.js +2 -2
  142. package/dist/cjs/ion-segment-view.cjs.entry.js +1 -1
  143. package/dist/cjs/ion-segment_2.cjs.entry.js +2 -2
  144. package/dist/cjs/ion-select-modal.cjs.entry.js +4 -4
  145. package/dist/cjs/ion-select_3.cjs.entry.js +5 -5
  146. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +5 -5
  147. package/dist/cjs/ion-tab_2.cjs.entry.js +3 -3
  148. package/dist/cjs/ion-textarea.cjs.entry.js +3 -3
  149. package/dist/cjs/ion-toast.cjs.entry.js +5 -5
  150. package/dist/cjs/ion-toggle.cjs.entry.js +4 -4
  151. package/dist/cjs/ionic.cjs.js +1 -1
  152. package/dist/cjs/{ios.transition-CN092Fh6.js → ios.transition-Ca6XODo9.js} +15 -15
  153. package/dist/cjs/{keyboard-BMpscicm.js → keyboard-BlHp4a_c.js} +1 -1
  154. package/dist/cjs/{keyboard-4OBzkjOG.js → keyboard-c2_I35b-.js} +4 -4
  155. package/dist/cjs/{keyboard-controller-DZE97OtR.js → keyboard-controller-DHS0BgXp.js} +2 -2
  156. package/dist/cjs/loader.cjs.js +1 -1
  157. package/dist/cjs/{md.transition-B6961Ny9.js → md.transition-D8SfNYEp.js} +4 -4
  158. package/dist/cjs/{overlays-BbVQG3UT.js → overlays-CLld3axA.js} +2 -2
  159. package/dist/cjs/{slot-mutation-controller-CRa_cKOh.js → slot-mutation-controller-B2OfJEBH.js} +2 -2
  160. package/dist/cjs/{status-tap-hRIvObiJ.js → status-tap-CDA0Y3Ad.js} +3 -3
  161. package/dist/cjs/{swipe-back-C-aigThB.js → swipe-back-Idb4gqUk.js} +2 -2
  162. package/dist/collection/components/alert/alert.js +11 -11
  163. package/dist/collection/components/col/col.js +12 -14
  164. package/dist/collection/components/datetime/datetime.js +5 -4
  165. package/dist/collection/components/input-otp/input-otp.ios.css +30 -5
  166. package/dist/collection/components/input-otp/input-otp.js +191 -12
  167. package/dist/collection/components/input-otp/input-otp.md.css +30 -5
  168. package/dist/collection/components/item/item.js +4 -5
  169. package/dist/collection/components/item-options/item-options.js +2 -2
  170. package/dist/collection/components/item-sliding/item-sliding.js +4 -5
  171. package/dist/collection/components/label/label.js +3 -4
  172. package/dist/collection/components/popover/animations/ios.enter.js +3 -4
  173. package/dist/collection/components/popover/animations/md.enter.js +3 -4
  174. package/dist/collection/components/popover/popover.js +2 -17
  175. package/dist/collection/components/progress-bar/progress-bar.js +3 -5
  176. package/dist/collection/components/route/route.js +9 -1
  177. package/dist/collection/components/route-redirect/route-redirect.js +1 -1
  178. package/dist/collection/components/router/utils/constants.js +2 -0
  179. package/dist/collection/components/router/utils/matching.js +97 -14
  180. package/dist/collection/components/router/utils/path.js +17 -3
  181. package/dist/collection/components/title/title.js +3 -4
  182. package/dist/collection/utils/helpers.js +2 -1
  183. package/dist/collection/utils/input-shims/hacks/common.js +4 -4
  184. package/dist/collection/utils/rtl/dir.js +1 -1
  185. package/dist/collection/utils/transition/ios.transition.js +11 -12
  186. package/dist/docs.json +92 -3
  187. package/dist/esm/{animation-C_V9lXzL.js → animation-DmtJpz89.js} +1 -1
  188. package/dist/esm/{attribute-controller-ItNOXNp9.js → attribute-controller-DPMIcbef.js} +1 -1
  189. package/dist/esm/{button-active-rB-Ct9KZ.js → button-active-DVk40Sjl.js} +1 -1
  190. package/dist/esm/{capacitor-BY7l8HgR.js → capacitor-CHJaJ9aX.js} +1 -1
  191. package/dist/esm/{dir-Dj4J3LkD.js → dir-Dojwmvde.js} +1 -1
  192. package/dist/esm/{framework-delegate-CW5_kWfc.js → framework-delegate-CDjM1vRH.js} +1 -1
  193. package/dist/esm/{haptic-ES_sSPLn.js → haptic-WXfMCob9.js} +1 -1
  194. package/dist/esm/{helpers-p94IkmEA.js → helpers-BJqKF1pr.js} +3 -2
  195. package/dist/esm/{index-DLDbwWW7.js → index-Clv8QC5L.js} +2 -2
  196. package/dist/esm/{index-txcXIB3P.js → index-DIouXecD.js} +3 -3
  197. package/dist/esm/{index-CBkVO5D0.js → index-TkLga3ma.js} +1 -1
  198. package/dist/esm/{index-vgPixHgF.js → index-z9vdZN7I.js} +3 -3
  199. package/dist/esm/index.js +9 -9
  200. package/dist/esm/{input-shims-KNXj3DAv.js → input-shims-C1iYF5JK.js} +9 -8
  201. package/dist/esm/ion-accordion_2.entry.js +2 -2
  202. package/dist/esm/ion-action-sheet.entry.js +8 -8
  203. package/dist/esm/ion-alert.entry.js +19 -19
  204. package/dist/esm/ion-app_8.entry.js +18 -18
  205. package/dist/esm/ion-back-button.entry.js +2 -2
  206. package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
  207. package/dist/esm/ion-button_2.entry.js +3 -3
  208. package/dist/esm/ion-card_5.entry.js +3 -3
  209. package/dist/esm/ion-checkbox.entry.js +2 -2
  210. package/dist/esm/ion-col_3.entry.js +13 -15
  211. package/dist/esm/ion-datetime-button.entry.js +2 -2
  212. package/dist/esm/ion-datetime.entry.js +9 -8
  213. package/dist/esm/ion-fab_3.entry.js +2 -2
  214. package/dist/esm/ion-img.entry.js +2 -2
  215. package/dist/esm/ion-infinite-scroll_2.entry.js +3 -3
  216. package/dist/esm/ion-input-otp.entry.js +129 -13
  217. package/dist/esm/ion-input.entry.js +3 -3
  218. package/dist/esm/ion-item-option_3.entry.js +9 -9
  219. package/dist/esm/ion-item_8.entry.js +10 -10
  220. package/dist/esm/ion-loading.entry.js +5 -5
  221. package/dist/esm/ion-menu_3.entry.js +6 -6
  222. package/dist/esm/ion-modal.entry.js +10 -10
  223. package/dist/esm/ion-nav_2.entry.js +5 -5
  224. package/dist/esm/ion-picker-column-option.entry.js +2 -2
  225. package/dist/esm/ion-picker-column.entry.js +4 -4
  226. package/dist/esm/ion-picker.entry.js +2 -2
  227. package/dist/esm/ion-popover.entry.js +14 -28
  228. package/dist/esm/ion-progress-bar.entry.js +6 -7
  229. package/dist/esm/ion-radio_2.entry.js +2 -2
  230. package/dist/esm/ion-range.entry.js +3 -3
  231. package/dist/esm/ion-refresher_2.entry.js +6 -6
  232. package/dist/esm/ion-reorder_2.entry.js +5 -5
  233. package/dist/esm/ion-route_4.entry.js +124 -19
  234. package/dist/esm/ion-searchbar.entry.js +2 -2
  235. package/dist/esm/ion-segment-view.entry.js +1 -1
  236. package/dist/esm/ion-segment_2.entry.js +2 -2
  237. package/dist/esm/ion-select-modal.entry.js +4 -4
  238. package/dist/esm/ion-select_3.entry.js +5 -5
  239. package/dist/esm/ion-tab-bar_2.entry.js +5 -5
  240. package/dist/esm/ion-tab_2.entry.js +3 -3
  241. package/dist/esm/ion-textarea.entry.js +3 -3
  242. package/dist/esm/ion-toast.entry.js +5 -5
  243. package/dist/esm/ion-toggle.entry.js +4 -4
  244. package/dist/esm/ionic.js +1 -1
  245. package/dist/esm/{ios.transition-CW92wRDL.js → ios.transition-BkUGiDUz.js} +15 -15
  246. package/dist/esm/{keyboard-BumguZrM.js → keyboard-B4Y-Gph8.js} +4 -4
  247. package/dist/esm/{keyboard-CutS8BPd.js → keyboard-Cmqp5iZD.js} +1 -1
  248. package/dist/esm/{keyboard-controller-DqohyEsZ.js → keyboard-controller-B2NoF7bV.js} +2 -2
  249. package/dist/esm/loader.js +1 -1
  250. package/dist/esm/{md.transition-yhfkYX1P.js → md.transition-B6hlrWjR.js} +4 -4
  251. package/dist/esm/{overlays-BBgMM61s.js → overlays-DmDY-El7.js} +2 -2
  252. package/dist/esm/{slot-mutation-controller-uKdPbY9K.js → slot-mutation-controller-Btpr9-9O.js} +2 -2
  253. package/dist/esm/{status-tap-BskkGI4e.js → status-tap-VGRBYwiC.js} +3 -3
  254. package/dist/esm/{swipe-back-BZdyM2Q-.js → swipe-back-DV3UpWzz.js} +2 -2
  255. package/dist/html.html-data.json +10 -2
  256. package/dist/ionic/index.esm.js +1 -1
  257. package/dist/ionic/ionic.esm.js +1 -1
  258. package/dist/ionic/{p-013b9aba.entry.js → p-01b7e3f2.entry.js} +1 -1
  259. package/dist/ionic/{p-9515f840.entry.js → p-095da8ec.entry.js} +1 -1
  260. package/dist/ionic/{p-ec08a7e6.entry.js → p-0b09c60e.entry.js} +1 -1
  261. package/dist/ionic/{p-5b47b8d5.entry.js → p-0c32c626.entry.js} +1 -1
  262. package/dist/ionic/p-0f97175e.entry.js +4 -0
  263. package/dist/ionic/{p-b0faaae2.entry.js → p-107a81a6.entry.js} +1 -1
  264. package/dist/ionic/{p-27960f65.entry.js → p-293cb1d5.entry.js} +1 -1
  265. package/dist/ionic/{p-1ffa5577.entry.js → p-362dcd86.entry.js} +1 -1
  266. package/dist/ionic/{p-0562139b.entry.js → p-4bd80334.entry.js} +1 -1
  267. package/dist/ionic/{p-16de8fd9.entry.js → p-4f25b926.entry.js} +1 -1
  268. package/dist/ionic/{p-0f1613f2.entry.js → p-52a16f94.entry.js} +1 -1
  269. package/dist/ionic/{p-436d4ac8.entry.js → p-5bb24bce.entry.js} +1 -1
  270. package/dist/ionic/{p-9d7e5a0b.entry.js → p-60780b88.entry.js} +1 -1
  271. package/dist/ionic/{p-1f342c2d.entry.js → p-62c87f3d.entry.js} +1 -1
  272. package/dist/ionic/{p-7868eb92.entry.js → p-64ac3864.entry.js} +1 -1
  273. package/dist/ionic/{p-f37e6ed2.entry.js → p-67f004eb.entry.js} +1 -1
  274. package/dist/ionic/p-6c7b5930.entry.js +4 -0
  275. package/dist/ionic/p-705759fd.entry.js +4 -0
  276. package/dist/ionic/{p-a45caa30.entry.js → p-7db20410.entry.js} +1 -1
  277. package/dist/ionic/{p-694f3e78.entry.js → p-7e9c2a97.entry.js} +1 -1
  278. package/dist/ionic/p-7l6ENjIV.js +4 -0
  279. package/dist/ionic/{p-77540bcb.entry.js → p-82abf431.entry.js} +1 -1
  280. package/dist/ionic/p-8d2ccf0c.entry.js +4 -0
  281. package/dist/ionic/{p-87fb6d59.entry.js → p-8d651adb.entry.js} +1 -1
  282. package/dist/ionic/{p-51af4728.entry.js → p-8db08782.entry.js} +1 -1
  283. package/dist/ionic/{p-af15fc5d.entry.js → p-91f3cd8b.entry.js} +1 -1
  284. package/dist/ionic/{p-c7ea2647.entry.js → p-930c3538.entry.js} +1 -1
  285. package/dist/ionic/p-94f1f7df.entry.js +4 -0
  286. package/dist/ionic/p-99c518de.entry.js +4 -0
  287. package/dist/ionic/{p-014c3633.entry.js → p-9ffccbf1.entry.js} +1 -1
  288. package/dist/ionic/p-BNXIurCt.js +4 -0
  289. package/dist/ionic/p-BOLqP2-V.js +4 -0
  290. package/dist/ionic/{p-5a3UxQAh.js → p-BY4FwwBp.js} +1 -1
  291. package/dist/ionic/p-BZTgGzGK.js +4 -0
  292. package/dist/ionic/p-BdHBcCZF.js +4 -0
  293. package/dist/ionic/{p-8B39TMv-.js → p-BpED_ep_.js} +1 -1
  294. package/dist/ionic/p-BuLlVedw.js +4 -0
  295. package/dist/ionic/p-Bx5x5GJV.js +4 -0
  296. package/dist/ionic/{p-C4SpVvhx.js → p-C1WYZOZj.js} +1 -1
  297. package/dist/ionic/p-C2LaBx3E.js +4 -0
  298. package/dist/ionic/{p-BWKtcudz.js → p-CXs4J83x.js} +1 -1
  299. package/dist/ionic/p-CgcGX08t.js +4 -0
  300. package/dist/ionic/p-CngfKMRU.js +4 -0
  301. package/dist/ionic/p-Co7eql8D.js +4 -0
  302. package/dist/ionic/{p-DArnNWiu.js → p-D13gXhdC.js} +1 -1
  303. package/dist/ionic/p-D926OmIX.js +4 -0
  304. package/dist/ionic/{p-BBZQUbCq.js → p-DPNVo1nr.js} +1 -1
  305. package/dist/ionic/{p-B0afqOUt.js → p-DXXGkPA8.js} +1 -1
  306. package/dist/ionic/{p-CJmyfI8x.js → p-Dk4Mdaru.js} +1 -1
  307. package/dist/ionic/{p-Dj4J3LkD.js → p-Dojwmvde.js} +1 -1
  308. package/dist/ionic/p-a4389f13.entry.js +4 -0
  309. package/dist/ionic/p-af8fb360.entry.js +4 -0
  310. package/dist/ionic/{p-f6a1ab48.entry.js → p-b9ed3a52.entry.js} +1 -1
  311. package/dist/ionic/p-bfdbe24b.entry.js +4 -0
  312. package/dist/ionic/{p-77e7b612.entry.js → p-c250b6b0.entry.js} +1 -1
  313. package/dist/ionic/p-c83dbc12.entry.js +4 -0
  314. package/dist/ionic/{p-1bb1be7e.entry.js → p-d0e374f8.entry.js} +1 -1
  315. package/dist/ionic/{p-af4b4719.entry.js → p-d2406889.entry.js} +1 -1
  316. package/dist/ionic/{p-cbc73380.entry.js → p-d72accc4.entry.js} +1 -1
  317. package/dist/ionic/{p-1252621e.entry.js → p-e7ab4def.entry.js} +1 -1
  318. package/dist/ionic/{p-5dcddfd5.entry.js → p-e8e69c21.entry.js} +1 -1
  319. package/dist/ionic/{p-96d040b0.entry.js → p-eb989dc9.entry.js} +1 -1
  320. package/dist/ionic/{p-59e4b521.entry.js → p-ec259ac5.entry.js} +1 -1
  321. package/dist/ionic/p-f2116a54.entry.js +4 -0
  322. package/dist/ionic/{p-B2JD8_LP.js → p-nCAPr1Ah.js} +1 -1
  323. package/dist/types/components/alert/alert.d.ts +0 -4
  324. package/dist/types/components/col/col.d.ts +0 -1
  325. package/dist/types/components/input-otp/input-otp-interface.d.ts +1 -0
  326. package/dist/types/components/input-otp/input-otp.d.ts +40 -2
  327. package/dist/types/components/popover/popover.d.ts +0 -1
  328. package/dist/types/components/progress-bar/progress-bar.d.ts +0 -1
  329. package/dist/types/components/route/route.d.ts +8 -0
  330. package/dist/types/components/route-redirect/route-redirect.d.ts +3 -1
  331. package/dist/types/components/router/utils/constants.d.ts +2 -0
  332. package/dist/types/components/router/utils/matching.d.ts +10 -0
  333. package/dist/types/components/router/utils/path.d.ts +5 -1
  334. package/dist/types/components.d.ts +32 -6
  335. package/dist/types/utils/helpers.d.ts +3 -2
  336. package/dist/types/utils/rtl/dir.d.ts +1 -1
  337. package/hydrate/index.js +301 -109
  338. package/hydrate/index.mjs +301 -109
  339. package/package.json +1 -1
  340. package/components/p-B3dSuofL.js +0 -4
  341. package/components/p-BWbz71uB.js +0 -4
  342. package/components/p-C0TdbIVo.js +0 -4
  343. package/components/p-C6Y0cCH_.js +0 -4
  344. package/components/p-CCFj0kgH.js +0 -4
  345. package/components/p-CRb2xRCz.js +0 -4
  346. package/components/p-DLEJ61lJ.js +0 -4
  347. package/components/p-DRm4t-by.js +0 -4
  348. package/components/p-D_U0pDe5.js +0 -4
  349. package/components/p-DaW9OZ6S.js +0 -4
  350. package/components/p-DaojW_d_.js +0 -4
  351. package/components/p-Ds5vN3iu.js +0 -4
  352. package/components/p-RhI78AKb.js +0 -4
  353. package/components/p-z-EWo6r-.js +0 -4
  354. package/dist/ionic/p-129f7b95.entry.js +0 -4
  355. package/dist/ionic/p-210f906e.entry.js +0 -4
  356. package/dist/ionic/p-3c6fc2e8.entry.js +0 -4
  357. package/dist/ionic/p-43729675.entry.js +0 -4
  358. package/dist/ionic/p-4468e439.entry.js +0 -4
  359. package/dist/ionic/p-800ce1e0.entry.js +0 -4
  360. package/dist/ionic/p-84470714.entry.js +0 -4
  361. package/dist/ionic/p-8af85fa8.entry.js +0 -4
  362. package/dist/ionic/p-8dQB1sG_.js +0 -4
  363. package/dist/ionic/p-B2y1T0dN.js +0 -4
  364. package/dist/ionic/p-BHBb21Hp.js +0 -4
  365. package/dist/ionic/p-BgkRGRO3.js +0 -4
  366. package/dist/ionic/p-CNdt1FPc.js +0 -4
  367. package/dist/ionic/p-Cf6KtUnA.js +0 -4
  368. package/dist/ionic/p-CfccUand.js +0 -4
  369. package/dist/ionic/p-DBFcFCH5.js +0 -4
  370. package/dist/ionic/p-DCmOKz8e.js +0 -4
  371. package/dist/ionic/p-DFPZa_No.js +0 -4
  372. package/dist/ionic/p-DYKDWM2f.js +0 -4
  373. package/dist/ionic/p-DzQk7Lu8.js +0 -4
  374. package/dist/ionic/p-c56c23b6.entry.js +0 -4
  375. package/dist/ionic/p-c8c77f7b.entry.js +0 -4
  376. package/dist/ionic/p-d58e9da3.entry.js +0 -4
@@ -3,7 +3,6 @@
3
3
  */
4
4
  import { Host, h } from "@stencil/core";
5
5
  import { clamp } from "../../utils/helpers";
6
- import { isRTL } from "../../utils/rtl/index";
7
6
  import { createColorClasses } from "../../utils/theme";
8
7
  import { config } from "../../global/config";
9
8
  import { getIonMode } from "../../global/ionic-global";
@@ -39,16 +38,16 @@ export class ProgressBar {
39
38
  this.buffer = 1;
40
39
  }
41
40
  render() {
42
- const { color, type, reversed, value, buffer, el } = this;
41
+ const { color, type, reversed, value, buffer } = this;
43
42
  const paused = config.getBoolean('_testing');
44
43
  const mode = getIonMode(this);
45
44
  // If the progress is displayed as a solid bar.
46
45
  const progressSolid = buffer === 1;
47
- return (h(Host, { key: '0a5c76361cf8df0c294e0fb2477892e23ecebe38', role: "progressbar", "aria-valuenow": type === 'determinate' ? value : null, "aria-valuemin": "0", "aria-valuemax": "1", class: createColorClasses(color, {
46
+ return (h(Host, { key: 'd53d39a3e2c0198164a9face62d3775f357b6914', role: "progressbar", "aria-valuenow": type === 'determinate' ? value : null, "aria-valuemin": "0", "aria-valuemax": "1", class: createColorClasses(color, {
48
47
  [mode]: true,
49
48
  [`progress-bar-${type}`]: true,
50
49
  'progress-paused': paused,
51
- 'progress-bar-reversed': isRTL(el) ? !reversed : reversed,
50
+ 'progress-bar-reversed': document.dir === 'rtl' ? !reversed : reversed,
52
51
  'progress-bar-solid': progressSolid,
53
52
  }) }, type === 'indeterminate' ? renderIndeterminate() : renderProgress(value, buffer)));
54
53
  }
@@ -176,7 +175,6 @@ export class ProgressBar {
176
175
  }
177
176
  };
178
177
  }
179
- static get elementRef() { return "el"; }
180
178
  }
181
179
  const renderIndeterminate = () => {
182
180
  return (h("div", { part: "track", class: "progress-buffer-bar" }, h("div", { class: "indeterminate-bar-primary" }, h("span", { part: "progress", class: "progress-indeterminate" })), h("div", { class: "indeterminate-bar-secondary" }, h("span", { part: "progress", class: "progress-indeterminate" }))));
@@ -6,6 +6,14 @@ export class Route {
6
6
  *
7
7
  * Accepts paths similar to expressjs so that you can define parameters
8
8
  * in the url /foo/:bar where bar would be available in incoming props.
9
+ *
10
+ * A url ending in `*`, such as `*` or `/admin/*`, matches any remaining path,
11
+ * including none, so `/admin/*` also matches `/admin`. It only wins over a
12
+ * route that matches the whole path when it has more fixed segments, so
13
+ * `/admin/*` wins over `/:section/:id` but not over `/admin/:id`. It always
14
+ * wins over a route that matches by ignoring trailing segments, such as
15
+ * `/admin` for `/admin/users`. The matched path is passed in the `pathMatch`
16
+ * prop without a leading `/`. A `*` on a route with child routes is ignored.
9
17
  */
10
18
  this.url = '';
11
19
  }
@@ -47,7 +55,7 @@ export class Route {
47
55
  "optional": false,
48
56
  "docs": {
49
57
  "tags": [],
50
- "text": "Relative path that needs to match in order for this route to apply.\n\nAccepts paths similar to expressjs so that you can define parameters\nin the url /foo/:bar where bar would be available in incoming props."
58
+ "text": "Relative path that needs to match in order for this route to apply.\n\nAccepts paths similar to expressjs so that you can define parameters\nin the url /foo/:bar where bar would be available in incoming props.\n\nA url ending in `*`, such as `*` or `/admin/*`, matches any remaining path,\nincluding none, so `/admin/*` also matches `/admin`. It only wins over a\nroute that matches the whole path when it has more fixed segments, so\n`/admin/*` wins over `/:section/:id` but not over `/admin/:id`. It always\nwins over a route that matches by ignoring trailing segments, such as\n`/admin` for `/admin/users`. The matched path is passed in the `pathMatch`\nprop without a leading `/`. A `*` on a route with child routes is ignored."
51
59
  },
52
60
  "getter": false,
53
61
  "setter": false,
@@ -20,7 +20,7 @@ export class RouteRedirect {
20
20
  "optional": false,
21
21
  "docs": {
22
22
  "tags": [],
23
- "text": "A redirect route, redirects \"from\" a URL \"to\" another URL. This property is that \"from\" URL.\nIt needs to be an exact match of the navigated URL in order to apply.\n\nThe path specified in this value is always an absolute path, even if the initial `/` slash\nis not specified."
23
+ "text": "A redirect route, redirects \"from\" a URL \"to\" another URL. This property is that \"from\" URL.\nIt needs to be an exact match of the navigated URL in order to apply, unless it contains a `*`.\nA `*` matches the rest of the path from that segment on, as long as the path has at least as\nmany segments as `from`, so `/admin/*` matches `/admin/posts` but not `/admin`.\n\nThe path specified in this value is always an absolute path, even if the initial `/` slash\nis not specified."
24
24
  },
25
25
  "getter": false,
26
26
  "setter": false,
@@ -4,3 +4,5 @@
4
4
  export const ROUTER_INTENT_NONE = 'root';
5
5
  export const ROUTER_INTENT_FORWARD = 'forward';
6
6
  export const ROUTER_INTENT_BACK = 'back';
7
+ /** Param that holds the path matched by a trailing `*` in an `ion-route` url. */
8
+ export const WILDCARD_PARAM = 'pathMatch';
@@ -1,6 +1,8 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
+ import { WILDCARD_PARAM } from "./constants";
5
+ import { chainToSegments, endsWithWildcard, withoutWildcard } from "./path";
4
6
  /**
5
7
  * Returns whether the given redirect matches the given path segments.
6
8
  *
@@ -41,6 +43,10 @@ export const matchesIDs = (ids, chain) => {
41
43
  if (routeId.id.toLowerCase() !== routeChain.id) {
42
44
  break;
43
45
  }
46
+ // Weight a wildcard route when the outlet reports its `pathMatch`
47
+ if (routeId.params?.[WILDCARD_PARAM] !== undefined && endsWithWildcard(routeChain.segments)) {
48
+ score++;
49
+ }
44
50
  if (routeId.params) {
45
51
  const routeIdParams = Object.keys(routeId.params);
46
52
  // Only compare routes with the chain that have the same number of parameters.
@@ -96,21 +102,28 @@ export const matchesSegments = (segments, chain) => {
96
102
  matchesDefault = true;
97
103
  }
98
104
  else {
99
- for (const segment of chainSegments) {
105
+ const params = {};
106
+ for (const segment of withoutWildcard(chainSegments)) {
100
107
  const data = inputSegments.next();
101
108
  // data param
102
109
  if (segment[0] === ':') {
103
110
  if (data === '') {
104
111
  return null;
105
112
  }
106
- allparams = allparams || [];
107
- const params = allparams[i] || (allparams[i] = {});
108
113
  params[segment.slice(1)] = data;
109
114
  }
110
115
  else if (data !== segment) {
111
116
  return null;
112
117
  }
113
118
  }
119
+ // A trailing `*` on a parent route has no effect. Its children match the rest of the path.
120
+ if (i === chain.length - 1 && endsWithWildcard(chainSegments)) {
121
+ params[WILDCARD_PARAM] = inputSegments.rest().join('/');
122
+ }
123
+ if (Object.keys(params).length > 0) {
124
+ allparams = allparams || [];
125
+ allparams[i] = params;
126
+ }
114
127
  matchesDefault = false;
115
128
  }
116
129
  }
@@ -142,25 +155,38 @@ export const mergeParams = (a, b) => {
142
155
  * Returns the best match or null when no match is found.
143
156
  * When a chain is returned the parameters are updated from the RouteIDs.
144
157
  * That is they contain both the componentProps of the <ion-route> and the parameter segment.
158
+ *
159
+ * When a wildcard route ties with other routes, a route without a wildcard that can build a url wins,
160
+ * then the wildcard route. Otherwise the first route declared wins a tie.
145
161
  */
146
162
  export const findChainForIDs = (ids, chains) => {
147
- let match = null;
148
163
  let maxMatches = 0;
164
+ let tied = [];
149
165
  for (const chain of chains) {
150
166
  const score = matchesIDs(ids, chain);
151
167
  if (score > maxMatches) {
152
- match = chain;
153
168
  maxMatches = score;
169
+ tied = [chain];
170
+ }
171
+ else if (score > 0 && score === maxMatches) {
172
+ tied.push(chain);
154
173
  }
155
174
  }
156
- if (match) {
157
- return match.map((route, i) => ({
158
- id: route.id,
159
- segments: route.segments,
160
- params: mergeParams(route.params, ids[i]?.params),
161
- }));
175
+ const matches = tied.map((chain) => chain.map((route, i) => ({
176
+ id: route.id,
177
+ segments: route.segments,
178
+ params: mergeParams(route.params, ids[i]?.params),
179
+ })));
180
+ if (!matches.some(chainEndsWithWildcard)) {
181
+ return matches.length > 0 ? matches[0] : null;
182
+ }
183
+ return matches.reduce((best, chain) => (tieRank(chain) > tieRank(best) ? chain : best));
184
+ };
185
+ const tieRank = (chain) => {
186
+ if (chainEndsWithWildcard(chain)) {
187
+ return 1;
162
188
  }
163
- return null;
189
+ return chainToSegments(chain) !== null ? 2 : 0;
164
190
  };
165
191
  /**
166
192
  * Finds the best match for the segments in the chains.
@@ -168,10 +194,17 @@ export const findChainForIDs = (ids, chains) => {
168
194
  * Returns the best match or null when no match is found.
169
195
  * When a chain is returned the parameters are updated from the segments.
170
196
  * That is they contain both the componentProps of the <ion-route> and the parameter segments.
197
+ *
198
+ * When wildcard routes match, the one with the most fixed segments wins if it has more fixed segments than every
199
+ * route that matched the whole path. Routes that only matched by ignoring trailing segments don't count.
171
200
  */
172
201
  export const findChainForSegments = (segments, chains) => {
173
202
  let match = null;
174
203
  let bestScore = 0;
204
+ let fullMatch = null;
205
+ let bestFullScore = 0;
206
+ let maxFullFixed = -1;
207
+ let wildcard = null;
175
208
  for (const chain of chains) {
176
209
  const matchedChain = matchesSegments(segments, chain);
177
210
  if (matchedChain !== null) {
@@ -180,9 +213,51 @@ export const findChainForSegments = (segments, chains) => {
180
213
  bestScore = score;
181
214
  match = matchedChain;
182
215
  }
216
+ if (chainEndsWithWildcard(matchedChain)) {
217
+ if (wildcard === null || winsWildcard(matchedChain, wildcard)) {
218
+ wildcard = matchedChain;
219
+ }
220
+ }
221
+ else if (!isPartialMatch(segments, matchedChain)) {
222
+ if (score > bestFullScore) {
223
+ bestFullScore = score;
224
+ fullMatch = matchedChain;
225
+ }
226
+ maxFullFixed = Math.max(maxFullFixed, countFixedSegments(matchedChain));
227
+ }
183
228
  }
184
229
  }
185
- return match;
230
+ // Without a wildcard to match the rest of the path, routes can still ignore trailing segments.
231
+ if (wildcard === null) {
232
+ return match;
233
+ }
234
+ // Compare fixed segments rather than priority, since nesting under default routes raises the priority
235
+ return countFixedSegments(wildcard) > maxFullFixed ? wildcard : fullMatch;
236
+ };
237
+ /** Returns whether the chain matched the path segments only by ignoring some trailing segments. */
238
+ const isPartialMatch = (segments, chain) => {
239
+ const matched = chainToSegments(chain);
240
+ return matched !== null && matched.length < segments.filter((s) => s !== '').length;
241
+ };
242
+ const chainEndsWithWildcard = (chain) => {
243
+ return endsWithWildcard(chain[chain.length - 1].segments);
244
+ };
245
+ /** Returns whether the wildcard chain beats `best` by fixed segments, then by priority. */
246
+ const winsWildcard = (chain, best) => {
247
+ const chainFixed = countFixedSegments(chain);
248
+ const bestFixed = countFixedSegments(best);
249
+ return chainFixed > bestFixed || (chainFixed === bestFixed && computePriority(chain) > computePriority(best));
250
+ };
251
+ const countFixedSegments = (chain) => {
252
+ let count = 0;
253
+ for (const route of chain) {
254
+ for (const segment of withoutWildcard(route.segments)) {
255
+ if (segment !== '' && segment[0] !== ':') {
256
+ count++;
257
+ }
258
+ }
259
+ }
260
+ return count;
186
261
  };
187
262
  /**
188
263
  * Computes the priority of a chain.
@@ -194,12 +269,14 @@ export const findChainForSegments = (segments, chains) => {
194
269
  * - /path/to/page
195
270
  *
196
271
  * The second one will be given a higher priority because "page" is a fixed segment (vs ":where", a parameter segment).
272
+ *
273
+ * A trailing wildcard is not counted.
197
274
  */
198
275
  export const computePriority = (chain) => {
199
276
  let score = 1;
200
277
  let level = 1;
201
278
  for (const route of chain) {
202
- for (const segment of route.segments) {
279
+ for (const segment of withoutWildcard(route.segments)) {
203
280
  if (segment[0] === ':') {
204
281
  score += Math.pow(1, level);
205
282
  }
@@ -221,4 +298,10 @@ export class RouterSegments {
221
298
  }
222
299
  return '';
223
300
  }
301
+ /** Consumes and returns the remaining non empty segments. */
302
+ rest() {
303
+ const rest = this.segments.filter((s) => s !== '');
304
+ this.segments = [];
305
+ return rest;
306
+ }
224
307
  }
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { ROUTER_INTENT_FORWARD } from "./constants";
4
+ import { ROUTER_INTENT_FORWARD, WILDCARD_PARAM } from "./constants";
5
5
  /** Join the non empty segments with "/". */
6
6
  export const generatePath = (segments) => {
7
7
  const path = segments.filter((s) => s.length > 0).join('/');
@@ -34,12 +34,13 @@ export const writeSegments = (history, root, useHash, segments, direction, state
34
34
  *
35
35
  * Notes:
36
36
  * - parameter segments of the form :param are replaced with their value,
37
- * - null is returned when a value is missing for any parameter segment.
37
+ * - null is returned when a value is missing for any parameter segment,
38
+ * - a trailing wildcard is replaced with the path it matched.
38
39
  */
39
40
  export const chainToSegments = (chain) => {
40
41
  const segments = [];
41
42
  for (const route of chain) {
42
- for (const segment of route.segments) {
43
+ for (const segment of withoutWildcard(route.segments)) {
43
44
  if (segment[0] === ':') {
44
45
  const param = route.params && route.params[segment.slice(1)];
45
46
  if (!param) {
@@ -51,9 +52,22 @@ export const chainToSegments = (chain) => {
51
52
  segments.push(segment);
52
53
  }
53
54
  }
55
+ segments.push(...wildcardSegments(route));
54
56
  }
55
57
  return segments;
56
58
  };
59
+ /** Only a `*` in the last segment of a route url is a wildcard. Elsewhere it's matched literally. */
60
+ export const endsWithWildcard = (segments) => {
61
+ return segments[segments.length - 1] === '*';
62
+ };
63
+ /** Returns the path segments matched by the trailing wildcard of the route. */
64
+ const wildcardSegments = (route) => {
65
+ const pathMatch = endsWithWildcard(route.segments) ? route.params?.[WILDCARD_PARAM] : undefined;
66
+ return pathMatch ? pathMatch.split('/').filter((s) => s.length > 0) : [];
67
+ };
68
+ export const withoutWildcard = (segments) => {
69
+ return endsWithWildcard(segments) ? segments.slice(0, -1) : segments;
70
+ };
57
71
  /**
58
72
  * Removes the prefix segments from the path segments.
59
73
  *
@@ -2,7 +2,6 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { Host, h } from "@stencil/core";
5
- import { isRTL } from "../../utils/rtl/index";
6
5
  import { createColorClasses } from "../../utils/theme";
7
6
  import { getIonMode } from "../../global/ionic-global";
8
7
  export class ToolbarTitle {
@@ -24,11 +23,11 @@ export class ToolbarTitle {
24
23
  render() {
25
24
  const mode = getIonMode(this);
26
25
  const size = this.getSize();
27
- return (h(Host, { key: '8d17feb9f9dcb9eb8e3b8ae6e831bdedb890771c', class: createColorClasses(this.color, {
26
+ return (h(Host, { key: 'c5f0b913ff0a22d9bf02da48a313a613c2ac8fe7', class: createColorClasses(this.color, {
28
27
  [mode]: true,
29
28
  [`title-${size}`]: true,
30
- 'title-rtl': isRTL(this.el),
31
- }) }, h("div", { key: '0346aae3fca1e3ae443b1b511c44ab1f803cb103', class: "toolbar-title" }, h("slot", { key: 'e1945845df471d5eb8c3cdeb568c478abf5ad70e' }))));
29
+ 'title-rtl': document.dir === 'rtl',
30
+ }) }, h("div", { key: '5253b9e39fb764bfe1e57370719139f8a83e9904', class: "toolbar-title" }, h("slot", { key: 'e38b1eccb0175c36f8cab211aee7ce4d61fc9035' }))));
32
31
  }
33
32
  static get is() { return "ion-title"; }
34
33
  static get encapsulation() { return "shadow"; }
@@ -324,7 +324,8 @@ export const pointerCoord = (ev) => {
324
324
  *
325
325
  * @param side The current side before being redefined based on the direction.
326
326
  * @param hostEl The component's host element. The direction is resolved from
327
- * it or its nearest ancestor that declares one, falling back to the document.
327
+ * it or its nearest ancestor that declares one. When omitted, the direction
328
+ * is resolved from the document.
328
329
  */
329
330
  export const isEndSide = (side, hostEl) => {
330
331
  const rtl = isRTL(hostEl);
@@ -1,7 +1,6 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { isRTL } from "../../rtl/index";
5
4
  const cloneMap = new WeakMap();
6
5
  export const relocateInput = (componentEl, inputEl, shouldRelocate, inputRelativeY = 0, disabledClonedInput = false) => {
7
6
  if (cloneMap.has(componentEl) === shouldRelocate) {
@@ -60,8 +59,9 @@ const addClone = (componentEl, inputEl, inputRelativeY, disabledClonedInput = fa
60
59
  * Position the clone at the same horizontal offset as the native input
61
60
  * to prevent the placeholder from overlapping start slot content (e.g., icons).
62
61
  */
63
- const rtl = isRTL(componentEl);
64
- if (rtl) {
62
+ const doc = componentEl.ownerDocument;
63
+ const isRTL = doc.dir === 'rtl';
64
+ if (isRTL) {
65
65
  const parentWidth = parentEl.offsetWidth;
66
66
  const startOffset = parentWidth - inputEl.offsetLeft - inputEl.offsetWidth;
67
67
  clonedEl.style.insetInlineStart = `${startOffset}px`;
@@ -71,7 +71,7 @@ const addClone = (componentEl, inputEl, inputRelativeY, disabledClonedInput = fa
71
71
  }
72
72
  parentEl.appendChild(clonedEl);
73
73
  cloneMap.set(componentEl, clonedEl);
74
- const tx = rtl ? 9999 : -9999;
74
+ const tx = isRTL ? 9999 : -9999;
75
75
  componentEl.style.pointerEvents = 'none';
76
76
  inputEl.style.transform = `translate3d(${tx}px,${inputRelativeY}px,0) scale(0)`;
77
77
  };
@@ -22,5 +22,5 @@ export const isRTL = (hostEl) => {
22
22
  return false;
23
23
  }
24
24
  }
25
- return hostEl.ownerDocument?.dir?.toLowerCase() === 'rtl';
25
+ return document?.dir?.toLowerCase() === 'rtl';
26
26
  };
@@ -1,7 +1,6 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { isRTL } from "../rtl/index";
5
4
  import { createAnimation } from "../animation/animation";
6
5
  import { getIonPageElement } from "../transition";
7
6
  const DURATION = 540;
@@ -368,9 +367,9 @@ export const iosTransitionAnimation = (navEl, opts) => {
368
367
  const TRANSFORM = 'transform';
369
368
  const CENTER = '0%';
370
369
  const OFF_OPACITY = 0.8;
371
- const rtl = isRTL(navEl);
372
- const OFF_RIGHT = rtl ? '-99.5%' : '99.5%';
373
- const OFF_LEFT = rtl ? '33%' : '-33%';
370
+ const isRTL = navEl.ownerDocument.dir === 'rtl';
371
+ const OFF_RIGHT = isRTL ? '-99.5%' : '99.5%';
372
+ const OFF_LEFT = isRTL ? '33%' : '-33%';
374
373
  const enteringEl = opts.enteringEl;
375
374
  const leavingEl = opts.leavingEl;
376
375
  const backDirection = opts.direction === 'back';
@@ -435,7 +434,7 @@ export const iosTransitionAnimation = (navEl, opts) => {
435
434
  }
436
435
  }
437
436
  const enteringContentHasLargeTitle = enteringEl.querySelector('ion-header.header-collapse-condense');
438
- const { forward, backward } = createLargeTitleTransition(rootAnimation, rtl, backDirection, enteringEl, leavingEl);
437
+ const { forward, backward } = createLargeTitleTransition(rootAnimation, isRTL, backDirection, enteringEl, leavingEl);
439
438
  enteringToolBarEls.forEach((enteringToolBarEl) => {
440
439
  const enteringToolBar = createAnimation();
441
440
  enteringToolBar.addElement(enteringToolBarEl);
@@ -499,7 +498,7 @@ export const iosTransitionAnimation = (navEl, opts) => {
499
498
  enteringToolBarBg.fromTo(OPACITY, 0.01, 'var(--opacity)');
500
499
  }
501
500
  else {
502
- enteringToolBarBg.fromTo('transform', rtl ? 'translateX(-100%)' : 'translateX(100%)', 'translateX(0px)');
501
+ enteringToolBarBg.fromTo('transform', isRTL ? 'translateX(-100%)' : 'translateX(100%)', 'translateX(0px)');
503
502
  }
504
503
  // forward direction, entering page has a back button
505
504
  if (!forward) {
@@ -509,7 +508,7 @@ export const iosTransitionAnimation = (navEl, opts) => {
509
508
  const enteringBackBtnText = createAnimation();
510
509
  enteringBackBtnText
511
510
  .addElement(shadow(backButtonEl).querySelector('.button-text')) // REVIEW
512
- .fromTo(`transform`, rtl ? 'translateX(-100px)' : 'translateX(100px)', 'translateX(0px)');
511
+ .fromTo(`transform`, isRTL ? 'translateX(-100px)' : 'translateX(100px)', 'translateX(0px)');
513
512
  enteringToolBar.addAnimation(enteringBackBtnText);
514
513
  }
515
514
  }
@@ -532,7 +531,7 @@ export const iosTransitionAnimation = (navEl, opts) => {
532
531
  // leaving content, back direction
533
532
  leavingContent
534
533
  .beforeClearStyles([OPACITY])
535
- .fromTo('transform', `translateX(${CENTER})`, rtl ? 'translateX(-100%)' : 'translateX(100%)');
534
+ .fromTo('transform', `translateX(${CENTER})`, isRTL ? 'translateX(-100%)' : 'translateX(100%)');
536
535
  const leavingPage = getIonPageElement(leavingEl);
537
536
  rootAnimation.afterAddWrite(() => {
538
537
  if (rootAnimation.getDirection() === 'normal') {
@@ -612,10 +611,10 @@ export const iosTransitionAnimation = (navEl, opts) => {
612
611
  if (!inactiveHeader) {
613
612
  // leaving toolbar, back direction
614
613
  leavingTitle
615
- .fromTo('transform', `translateX(${CENTER})`, rtl ? 'translateX(-100%)' : 'translateX(100%)')
614
+ .fromTo('transform', `translateX(${CENTER})`, isRTL ? 'translateX(-100%)' : 'translateX(100%)')
616
615
  .fromTo(OPACITY, 0.99, 0);
617
616
  }
618
- leavingToolBarItems.fromTo('transform', `translateX(${CENTER})`, rtl ? 'translateX(-100%)' : 'translateX(100%)');
617
+ leavingToolBarItems.fromTo('transform', `translateX(${CENTER})`, isRTL ? 'translateX(-100%)' : 'translateX(100%)');
619
618
  leavingToolBarBg.beforeClearStyles([OPACITY, 'transform']);
620
619
  // leaving toolbar, back direction, and there's no entering toolbar
621
620
  // should just slide out, no fading out
@@ -624,13 +623,13 @@ export const iosTransitionAnimation = (navEl, opts) => {
624
623
  leavingToolBarBg.fromTo(OPACITY, 'var(--opacity)', 0);
625
624
  }
626
625
  else {
627
- leavingToolBarBg.fromTo('transform', 'translateX(0px)', rtl ? 'translateX(-100%)' : 'translateX(100%)');
626
+ leavingToolBarBg.fromTo('transform', 'translateX(0px)', isRTL ? 'translateX(-100%)' : 'translateX(100%)');
628
627
  }
629
628
  if (backButtonEl && !backward) {
630
629
  const leavingBackBtnText = createAnimation();
631
630
  leavingBackBtnText
632
631
  .addElement(shadow(backButtonEl).querySelector('.button-text')) // REVIEW
633
- .fromTo('transform', `translateX(${CENTER})`, `translateX(${(rtl ? -124 : 124) + 'px'})`);
632
+ .fromTo('transform', `translateX(${CENTER})`, `translateX(${(isRTL ? -124 : 124) + 'px'})`);
634
633
  leavingToolBar.addAnimation(leavingBackBtnText);
635
634
  }
636
635
  }
package/dist/docs.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2026-10-23T20:45:55",
2
+ "timestamp": "2026-10-30T18:14:29",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "4.45.2",
@@ -14038,6 +14038,32 @@
14038
14038
  "getter": false,
14039
14039
  "setter": false
14040
14040
  },
14041
+ {
14042
+ "name": "errorText",
14043
+ "type": "string | undefined",
14044
+ "complexType": {
14045
+ "original": "string",
14046
+ "resolved": "string | undefined",
14047
+ "references": {}
14048
+ },
14049
+ "mutable": false,
14050
+ "attr": "error-text",
14051
+ "reflectToAttr": false,
14052
+ "docs": "Text that is placed under the input boxes and displayed when an error is detected.",
14053
+ "docsTags": [],
14054
+ "values": [
14055
+ {
14056
+ "type": "string"
14057
+ },
14058
+ {
14059
+ "type": "undefined"
14060
+ }
14061
+ ],
14062
+ "optional": true,
14063
+ "required": false,
14064
+ "getter": false,
14065
+ "setter": false
14066
+ },
14041
14067
  {
14042
14068
  "name": "fill",
14043
14069
  "type": "\"outline\" | \"solid\" | undefined",
@@ -14075,6 +14101,64 @@
14075
14101
  "getter": false,
14076
14102
  "setter": false
14077
14103
  },
14104
+ {
14105
+ "name": "helperText",
14106
+ "type": "string | undefined",
14107
+ "complexType": {
14108
+ "original": "string",
14109
+ "resolved": "string | undefined",
14110
+ "references": {}
14111
+ },
14112
+ "mutable": false,
14113
+ "attr": "helper-text",
14114
+ "reflectToAttr": false,
14115
+ "docs": "Text that is placed under the input boxes and displayed when no error is detected.",
14116
+ "docsTags": [],
14117
+ "values": [
14118
+ {
14119
+ "type": "string"
14120
+ },
14121
+ {
14122
+ "type": "undefined"
14123
+ }
14124
+ ],
14125
+ "optional": true,
14126
+ "required": false,
14127
+ "getter": false,
14128
+ "setter": false
14129
+ },
14130
+ {
14131
+ "name": "inputLabelFormatter",
14132
+ "type": "((index: number, length: number) => string) | undefined",
14133
+ "complexType": {
14134
+ "original": "InputOtpLabelFormatter",
14135
+ "resolved": "((index: number, length: number) => string) | undefined",
14136
+ "references": {
14137
+ "InputOtpLabelFormatter": {
14138
+ "location": "import",
14139
+ "path": "./input-otp-interface",
14140
+ "id": "src/components/input-otp/input-otp-interface.ts::InputOtpLabelFormatter",
14141
+ "referenceLocation": "InputOtpLabelFormatter"
14142
+ }
14143
+ }
14144
+ },
14145
+ "mutable": false,
14146
+ "reflectToAttr": false,
14147
+ "docs": "A callback used to format the accessible name of each input box. It\nreceives the 0-based `index` of the box and the total `length`. By default\nthe name is \"Input 1 of 4\", or \"PIN, 1 of 4\" with an `aria-label` of \"PIN\".\n\nSee https://ionicframework.com/docs/troubleshooting/runtime#accessing-this\nif you need to access `this` from within the callback.",
14148
+ "docsTags": [],
14149
+ "values": [
14150
+ {
14151
+ "type": "((index: number, length: number) => string)"
14152
+ },
14153
+ {
14154
+ "type": "undefined"
14155
+ }
14156
+ ],
14157
+ "optional": true,
14158
+ "required": false,
14159
+ "getter": false,
14160
+ "setter": false
14161
+ },
14078
14162
  {
14079
14163
  "name": "inputmode",
14080
14164
  "type": "\"decimal\" | \"email\" | \"none\" | \"numeric\" | \"search\" | \"tel\" | \"text\" | \"url\" | undefined",
@@ -27325,7 +27409,7 @@
27325
27409
  "mutable": false,
27326
27410
  "attr": "url",
27327
27411
  "reflectToAttr": false,
27328
- "docs": "Relative path that needs to match in order for this route to apply.\n\nAccepts paths similar to expressjs so that you can define parameters\nin the url /foo/:bar where bar would be available in incoming props.",
27412
+ "docs": "Relative path that needs to match in order for this route to apply.\n\nAccepts paths similar to expressjs so that you can define parameters\nin the url /foo/:bar where bar would be available in incoming props.\n\nA url ending in `*`, such as `*` or `/admin/*`, matches any remaining path,\nincluding none, so `/admin/*` also matches `/admin`. It only wins over a\nroute that matches the whole path when it has more fixed segments, so\n`/admin/*` wins over `/:section/:id` but not over `/admin/:id`. It always\nwins over a route that matches by ignoring trailing segments, such as\n`/admin` for `/admin/users`. The matched path is passed in the `pathMatch`\nprop without a leading `/`. A `*` on a route with child routes is ignored.",
27329
27413
  "docsTags": [
27330
27414
  {
27331
27415
  "name": "default",
@@ -27389,7 +27473,7 @@
27389
27473
  "mutable": false,
27390
27474
  "attr": "from",
27391
27475
  "reflectToAttr": false,
27392
- "docs": "A redirect route, redirects \"from\" a URL \"to\" another URL. This property is that \"from\" URL.\nIt needs to be an exact match of the navigated URL in order to apply.\n\nThe path specified in this value is always an absolute path, even if the initial `/` slash\nis not specified.",
27476
+ "docs": "A redirect route, redirects \"from\" a URL \"to\" another URL. This property is that \"from\" URL.\nIt needs to be an exact match of the navigated URL in order to apply, unless it contains a `*`.\nA `*` matches the rest of the path from that segment on, as long as the path has at least as\nmany segments as `from`, so `/admin/*` matches `/admin/posts` but not `/admin`.\n\nThe path specified in this value is always an absolute path, even if the initial `/` slash\nis not specified.",
27393
27477
  "docsTags": [],
27394
27478
  "values": [
27395
27479
  {
@@ -37770,6 +37854,11 @@
37770
37854
  "docstring": "Values are converted to strings when emitted which is\nwhy we do not have a `number` type here even though the\n`value` prop accepts a `number` type.",
37771
37855
  "path": "src/components/input/input-interface.ts"
37772
37856
  },
37857
+ "src/components/input-otp/input-otp-interface.ts::InputOtpLabelFormatter": {
37858
+ "declaration": "(index: number, length: number) => string",
37859
+ "docstring": "",
37860
+ "path": "src/components/input-otp/input-otp-interface.ts"
37861
+ },
37773
37862
  "src/components/input-otp/input-otp-interface.ts::InputOtpInputEventDetail": {
37774
37863
  "declaration": "export interface InputOtpInputEventDetail {\n value?: string | null;\n event?: Event;\n}",
37775
37864
  "docstring": "Values are converted to strings when emitted which is\nwhy we do not have a `number` type here even though the\n`value` prop accepts a `number` type.",
@@ -2,7 +2,7 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { c as printIonError } from './index-BpRUsN_W.js';
5
- import { w as win } from './helpers-p94IkmEA.js';
5
+ import { w as win } from './helpers-BJqKF1pr.js';
6
6
 
7
7
  let animationPrefix;
8
8
  const getAnimationPrefix = (el) => {
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { b as inheritAttributes, w as win, q as ariaAttributes } from './helpers-p94IkmEA.js';
4
+ import { b as inheritAttributes, w as win, q as ariaAttributes } from './helpers-BJqKF1pr.js';
5
5
 
6
6
  /**
7
7
  * Copies a set of attributes off the host element so they can be applied to an element
@@ -2,7 +2,7 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { w as writeTask } from './index-BpRUsN_W.js';
5
- import { h as hapticSelectionEnd, a as hapticSelectionChanged, b as hapticSelectionStart } from './haptic-ES_sSPLn.js';
5
+ import { h as hapticSelectionEnd, a as hapticSelectionChanged, b as hapticSelectionStart } from './haptic-WXfMCob9.js';
6
6
  import { createGesture } from './index-BmLuEdV7.js';
7
7
 
8
8
  const createButtonActiveGesture = (el, isButton) => {