voyager-ionic-core 7.7.2 → 7.8.6

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 (670) hide show
  1. package/components/action-sheet.js +3 -3
  2. package/components/alert.js +2 -2
  3. package/components/backdrop.js +1 -1
  4. package/components/button.js +4 -4
  5. package/components/buttons.js +1 -1
  6. package/components/checkbox.js +1 -1
  7. package/components/data.js +23 -38
  8. package/components/hardware-back-button.js +3 -3
  9. package/components/helpers.js +2 -2
  10. package/components/input-shims.js +5 -5
  11. package/components/ion-app.js +4 -4
  12. package/components/ion-avatar.js +1 -1
  13. package/components/ion-back-button.js +2 -2
  14. package/components/ion-badge.js +2 -2
  15. package/components/ion-breadcrumb.js +4 -4
  16. package/components/ion-breadcrumbs.js +2 -2
  17. package/components/ion-card-content.js +1 -1
  18. package/components/ion-card-header.js +2 -2
  19. package/components/ion-card-subtitle.js +2 -2
  20. package/components/ion-card-title.js +2 -2
  21. package/components/ion-card.js +1 -1
  22. package/components/ion-chip.js +2 -2
  23. package/components/ion-col.js +2 -2
  24. package/components/ion-content.js +3 -3
  25. package/components/ion-datetime-button.js +12 -11
  26. package/components/ion-datetime.js +75 -12
  27. package/components/ion-fab-button.js +2 -2
  28. package/components/ion-fab-list.js +2 -2
  29. package/components/ion-fab.js +2 -2
  30. package/components/ion-footer.js +2 -2
  31. package/components/ion-grid.js +2 -2
  32. package/components/ion-header.js +3 -3
  33. package/components/ion-img.js +1 -1
  34. package/components/ion-infinite-scroll-content.js +2 -2
  35. package/components/ion-infinite-scroll.js +1 -1
  36. package/components/ion-input.js +8 -0
  37. package/components/ion-item-divider.js +2 -2
  38. package/components/ion-item-group.js +1 -1
  39. package/components/ion-item-option.js +2 -2
  40. package/components/ion-item-options.js +1 -1
  41. package/components/ion-item-sliding.js +1 -1
  42. package/components/ion-loading.js +2 -2
  43. package/components/ion-menu-button.js +2 -2
  44. package/components/ion-menu-toggle.js +2 -2
  45. package/components/ion-menu.js +3 -3
  46. package/components/ion-modal.js +81 -25
  47. package/components/ion-nav-link.js +1 -1
  48. package/components/ion-nav.js +1 -1
  49. package/components/ion-picker.js +2 -2
  50. package/components/ion-progress-bar.js +1 -1
  51. package/components/ion-range.js +126 -21
  52. package/components/ion-refresher-content.js +1 -1
  53. package/components/ion-refresher.js +1 -1
  54. package/components/ion-reorder-group.js +1 -1
  55. package/components/ion-reorder.js +1 -1
  56. package/components/ion-router-link.js +2 -2
  57. package/components/ion-router-outlet.js +1 -1
  58. package/components/ion-row.js +1 -1
  59. package/components/ion-searchbar.js +35 -6
  60. package/components/ion-segment-button.js +3 -3
  61. package/components/ion-segment.js +2 -2
  62. package/components/ion-select-option.js +1 -1
  63. package/components/ion-select.js +3 -3
  64. package/components/ion-skeleton-text.js +2 -2
  65. package/components/ion-split-pane.js +2 -2
  66. package/components/ion-tab-bar.js +2 -2
  67. package/components/ion-tab-button.js +2 -2
  68. package/components/ion-tab.js +2 -2
  69. package/components/ion-tabs.js +1 -1
  70. package/components/ion-text.js +2 -2
  71. package/components/ion-thumbnail.js +1 -1
  72. package/components/ion-title.js +2 -2
  73. package/components/ion-toast.js +2 -2
  74. package/components/ion-toolbar.js +2 -2
  75. package/components/item.js +1 -1
  76. package/components/label.js +3 -3
  77. package/components/list-header.js +2 -2
  78. package/components/list.js +1 -1
  79. package/components/note.js +2 -2
  80. package/components/overlays.js +127 -39
  81. package/components/picker-column-internal.js +8 -4
  82. package/components/picker-column.js +2 -2
  83. package/components/picker-internal.js +2 -2
  84. package/components/popover.js +4 -4
  85. package/components/radio-group.js +1 -1
  86. package/components/ripple-effect.js +1 -1
  87. package/components/select-popover.js +1 -1
  88. package/components/spinner.js +1 -1
  89. package/css/core.css +1 -561
  90. package/css/core.css.map +1 -1
  91. package/css/display.css +1 -131
  92. package/css/display.css.map +1 -1
  93. package/css/flex-utils.css +1 -81
  94. package/css/flex-utils.css.map +1 -1
  95. package/css/float-elements.css +1 -293
  96. package/css/float-elements.css.map +1 -1
  97. package/css/global.bundle.css +1 -457
  98. package/css/global.bundle.css.map +1 -1
  99. package/css/ionic-swiper.css +1 -127
  100. package/css/ionic-swiper.css.map +1 -1
  101. package/css/ionic.bundle.css +1 -1
  102. package/css/ionic.bundle.css.map +1 -1
  103. package/css/normalize.css +1 -150
  104. package/css/normalize.css.map +1 -1
  105. package/css/padding.css +1 -202
  106. package/css/padding.css.map +1 -1
  107. package/css/structure.css +1 -152
  108. package/css/structure.css.map +1 -1
  109. package/css/text-alignment.css +1 -243
  110. package/css/text-alignment.css.map +1 -1
  111. package/css/text-transformation.css +1 -158
  112. package/css/text-transformation.css.map +1 -1
  113. package/css/typography.css +1 -157
  114. package/css/typography.css.map +1 -1
  115. package/css/utils.bundle.css +1 -1100
  116. package/css/utils.bundle.css.map +1 -1
  117. package/dist/cjs/{animation-fdab9de5.js → animation-c2840aea.js} +1 -1
  118. package/dist/cjs/{app-globals-92ad1b3d.js → app-globals-c5eb104c.js} +1 -1
  119. package/dist/cjs/{button-active-2d6520ec.js → button-active-181d142e.js} +1 -1
  120. package/dist/cjs/{data-a5109f09.js → data-4487a815.js} +22 -39
  121. package/dist/cjs/{form-controller-7b90d7b7.js → form-controller-c83330c0.js} +1 -1
  122. package/dist/cjs/{framework-delegate-a3e6d060.js → framework-delegate-e0e13baa.js} +1 -1
  123. package/dist/cjs/{hardware-back-button-2696acaf.js → hardware-back-button-adba3ac7.js} +5 -5
  124. package/dist/cjs/{helpers-2e1028fa.js → helpers-da4c0ed1.js} +2 -2
  125. package/dist/cjs/{index-c3580a90.js → index-1f7c54f8.js} +4 -4
  126. package/dist/cjs/{index-0ffe376d.js → index-22617dd6.js} +51 -7
  127. package/dist/cjs/{index-a43f7a0f.js → index-5c38afe7.js} +4 -4
  128. package/dist/cjs/{index-10da82ce.js → index-62290fec.js} +1 -1
  129. package/dist/cjs/{index-53d162b2.js → index-bef98850.js} +1 -1
  130. package/dist/cjs/index.cjs.js +11 -11
  131. package/dist/cjs/{input-shims-6f804705.js → input-shims-05ac9905.js} +7 -7
  132. package/dist/cjs/{input.utils-d693d18a.js → input.utils-d7dca90f.js} +1 -1
  133. package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -3
  134. package/dist/cjs/ion-action-sheet.cjs.entry.js +11 -11
  135. package/dist/cjs/ion-alert.cjs.entry.js +10 -10
  136. package/dist/cjs/ion-app_8.cjs.entry.js +29 -29
  137. package/dist/cjs/ion-avatar_3.cjs.entry.js +6 -6
  138. package/dist/cjs/ion-back-button.cjs.entry.js +5 -5
  139. package/dist/cjs/ion-backdrop.cjs.entry.js +3 -3
  140. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +9 -9
  141. package/dist/cjs/ion-button_2.cjs.entry.js +7 -7
  142. package/dist/cjs/ion-card_5.cjs.entry.js +11 -11
  143. package/dist/cjs/ion-checkbox.cjs.entry.js +5 -5
  144. package/dist/cjs/ion-chip.cjs.entry.js +4 -4
  145. package/dist/cjs/ion-col_3.cjs.entry.js +7 -7
  146. package/dist/cjs/ion-datetime-button.cjs.entry.js +15 -14
  147. package/dist/cjs/ion-datetime_3.cjs.entry.js +83 -23
  148. package/dist/cjs/ion-fab_3.cjs.entry.js +9 -9
  149. package/dist/cjs/ion-img.cjs.entry.js +4 -4
  150. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +7 -7
  151. package/dist/cjs/ion-input.cjs.entry.js +14 -6
  152. package/dist/cjs/ion-item-option_3.cjs.entry.js +8 -8
  153. package/dist/cjs/ion-item_8.cjs.entry.js +17 -17
  154. package/dist/cjs/ion-loading.cjs.entry.js +9 -9
  155. package/dist/cjs/ion-menu_3.cjs.entry.js +14 -14
  156. package/dist/cjs/ion-modal.cjs.entry.js +90 -34
  157. package/dist/cjs/ion-nav_2.cjs.entry.js +8 -8
  158. package/dist/cjs/ion-picker-column-internal.cjs.entry.js +11 -7
  159. package/dist/cjs/ion-picker-internal.cjs.entry.js +4 -4
  160. package/dist/cjs/ion-popover.cjs.entry.js +12 -12
  161. package/dist/cjs/ion-progress-bar.cjs.entry.js +4 -4
  162. package/dist/cjs/ion-radio_2.cjs.entry.js +5 -5
  163. package/dist/cjs/ion-range.cjs.entry.js +131 -26
  164. package/dist/cjs/ion-refresher_2.cjs.entry.js +7 -7
  165. package/dist/cjs/ion-reorder_2.cjs.entry.js +6 -6
  166. package/dist/cjs/ion-ripple-effect.cjs.entry.js +3 -3
  167. package/dist/cjs/ion-route_4.cjs.entry.js +5 -5
  168. package/dist/cjs/ion-searchbar.cjs.entry.js +32 -8
  169. package/dist/cjs/ion-segment_2.cjs.entry.js +8 -8
  170. package/dist/cjs/ion-select_3.cjs.entry.js +12 -12
  171. package/dist/cjs/ion-spinner.cjs.entry.js +3 -3
  172. package/dist/cjs/ion-split-pane.cjs.entry.js +4 -4
  173. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +7 -7
  174. package/dist/cjs/ion-tab_2.cjs.entry.js +6 -6
  175. package/dist/cjs/ion-text.cjs.entry.js +4 -4
  176. package/dist/cjs/ion-textarea.cjs.entry.js +6 -6
  177. package/dist/cjs/ion-toast.cjs.entry.js +9 -9
  178. package/dist/cjs/ion-toggle.cjs.entry.js +4 -4
  179. package/dist/cjs/{ionic-global-59a10130.js → ionic-global-c5503e93.js} +1 -1
  180. package/dist/cjs/ionic.cjs.js +5 -5
  181. package/dist/cjs/{ios.transition-c3b11cc3.js → ios.transition-30830fc4.js} +4 -4
  182. package/dist/cjs/loader.cjs.js +4 -4
  183. package/dist/cjs/{md.transition-82a8c649.js → md.transition-7f581866.js} +4 -4
  184. package/dist/cjs/{notch-controller-db0127c4.js → notch-controller-bfbcbb7a.js} +1 -1
  185. package/dist/cjs/{overlays-fb7ca451.js → overlays-129dfc13.js} +129 -41
  186. package/dist/cjs/{status-tap-692f6d32.js → status-tap-03d82840.js} +3 -3
  187. package/dist/cjs/{swipe-back-7a848bb8.js → swipe-back-dcd0d4a9.js} +1 -1
  188. package/dist/collection/collection-manifest.json +2 -2
  189. package/dist/collection/components/action-sheet/action-sheet.js +3 -3
  190. package/dist/collection/components/alert/alert.js +2 -2
  191. package/dist/collection/components/alert/test/a11y/alert.e2e.js +4 -0
  192. package/dist/collection/components/app/app.js +4 -4
  193. package/dist/collection/components/avatar/avatar.js +1 -1
  194. package/dist/collection/components/back-button/back-button.js +2 -2
  195. package/dist/collection/components/backdrop/backdrop.js +1 -1
  196. package/dist/collection/components/badge/badge.js +2 -2
  197. package/dist/collection/components/breadcrumb/breadcrumb.js +4 -4
  198. package/dist/collection/components/breadcrumbs/breadcrumbs.js +2 -2
  199. package/dist/collection/components/button/button.ios.css +5 -5
  200. package/dist/collection/components/button/button.js +2 -2
  201. package/dist/collection/components/button/button.md.css +4 -5
  202. package/dist/collection/components/buttons/buttons.js +1 -1
  203. package/dist/collection/components/card/card.js +1 -1
  204. package/dist/collection/components/card-content/card-content.js +1 -1
  205. package/dist/collection/components/card-header/card-header.js +2 -2
  206. package/dist/collection/components/card-subtitle/card-subtitle.js +2 -2
  207. package/dist/collection/components/card-title/card-title.js +2 -2
  208. package/dist/collection/components/checkbox/checkbox.js +1 -1
  209. package/dist/collection/components/checkbox/test/checkbox.spec.js +12 -0
  210. package/dist/collection/components/chip/chip.js +2 -2
  211. package/dist/collection/components/col/col.js +2 -2
  212. package/dist/collection/components/content/content.js +3 -3
  213. package/dist/collection/components/datetime/datetime.js +56 -12
  214. package/dist/collection/components/datetime/test/basic/datetime.e2e.js +80 -1
  215. package/dist/collection/components/datetime/test/format.spec.js +65 -15
  216. package/dist/collection/components/datetime/utils/format.js +24 -37
  217. package/dist/collection/components/datetime/utils/validate.js +45 -0
  218. package/dist/collection/components/datetime-button/datetime-button.js +12 -11
  219. package/dist/collection/components/datetime-button/test/basic/datetime-button.e2e.js +65 -0
  220. package/dist/collection/components/fab/fab.js +2 -2
  221. package/dist/collection/components/fab-button/fab-button.js +2 -2
  222. package/dist/collection/components/fab-list/fab-list.js +2 -2
  223. package/dist/collection/components/footer/footer.js +2 -2
  224. package/dist/collection/components/grid/grid.js +2 -2
  225. package/dist/collection/components/header/header.ios.css +5 -2
  226. package/dist/collection/components/header/header.js +2 -2
  227. package/dist/collection/components/header/test/basic/header.e2e.js +77 -0
  228. package/dist/collection/components/img/img.js +1 -1
  229. package/dist/collection/components/infinite-scroll/infinite-scroll.js +1 -1
  230. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +2 -2
  231. package/dist/collection/components/input/input.js +8 -0
  232. package/dist/collection/components/item/item.js +1 -1
  233. package/dist/collection/components/item/test/buttons/item.e2e.js +20 -4
  234. package/dist/collection/components/item-divider/item-divider.js +2 -2
  235. package/dist/collection/components/item-group/item-group.js +1 -1
  236. package/dist/collection/components/item-option/item-option.js +2 -2
  237. package/dist/collection/components/item-options/item-options.js +1 -1
  238. package/dist/collection/components/item-sliding/item-sliding.js +1 -1
  239. package/dist/collection/components/label/label.ios.css +0 -4
  240. package/dist/collection/components/label/label.js +1 -1
  241. package/dist/collection/components/label/label.md.css +0 -4
  242. package/dist/collection/components/label/test/item/item.e2e.js +24 -0
  243. package/dist/collection/components/list/list.js +1 -1
  244. package/dist/collection/components/list-header/list-header.js +2 -2
  245. package/dist/collection/components/loading/loading.js +2 -2
  246. package/dist/collection/components/menu/menu.js +3 -3
  247. package/dist/collection/components/menu-button/menu-button.js +2 -2
  248. package/dist/collection/components/menu-toggle/menu-toggle.js +2 -2
  249. package/dist/collection/components/modal/gestures/sheet.js +45 -20
  250. package/dist/collection/components/modal/modal.js +38 -6
  251. package/dist/collection/components/modal/test/modal-attributes.spec.js +32 -0
  252. package/dist/collection/components/nav/nav.js +1 -1
  253. package/dist/collection/components/nav-link/nav-link.js +1 -1
  254. package/dist/collection/components/note/note.js +2 -2
  255. package/dist/collection/components/picker/picker.js +2 -2
  256. package/dist/collection/components/picker-column/picker-column.js +2 -2
  257. package/dist/collection/components/picker-column-internal/picker-column-internal.js +8 -4
  258. package/dist/collection/components/picker-internal/picker-internal.js +2 -2
  259. package/dist/collection/components/popover/popover.ios.css +0 -1
  260. package/dist/collection/components/popover/popover.js +2 -2
  261. package/dist/collection/components/popover/popover.md.css +0 -1
  262. package/dist/collection/components/popover/test/basic/popover.e2e.js +76 -0
  263. package/dist/collection/components/progress-bar/progress-bar.js +1 -1
  264. package/dist/collection/components/radio-group/radio-group.js +1 -1
  265. package/dist/collection/components/range/range.js +126 -21
  266. package/dist/collection/components/range/test/range-events.e2e.js +27 -0
  267. package/dist/collection/components/refresher/refresher.js +1 -1
  268. package/dist/collection/components/refresher-content/refresher-content.js +1 -1
  269. package/dist/collection/components/reorder/reorder.js +1 -1
  270. package/dist/collection/components/reorder-group/reorder-group.js +1 -1
  271. package/dist/collection/components/ripple-effect/ripple-effect.js +1 -1
  272. package/dist/collection/components/router-link/router-link.js +2 -2
  273. package/dist/collection/components/router-outlet/router-outlet.js +1 -1
  274. package/dist/collection/components/row/row.js +1 -1
  275. package/dist/collection/components/searchbar/searchbar.js +86 -6
  276. package/dist/collection/components/searchbar/test/searchbar.spec.js +20 -2
  277. package/dist/collection/components/segment/segment.js +2 -2
  278. package/dist/collection/components/segment-button/segment-button.js +3 -3
  279. package/dist/collection/components/select/select.js +3 -3
  280. package/dist/collection/components/select-option/select-option.js +1 -1
  281. package/dist/collection/components/select-popover/select-popover.js +1 -1
  282. package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
  283. package/dist/collection/components/spinner/spinner.js +1 -1
  284. package/dist/collection/components/split-pane/split-pane.js +2 -2
  285. package/dist/collection/components/tab/tab.js +2 -2
  286. package/dist/collection/components/tab-bar/tab-bar.js +2 -2
  287. package/dist/collection/components/tab-button/tab-button.js +2 -2
  288. package/dist/collection/components/tabs/tabs.js +1 -1
  289. package/dist/collection/components/text/text.js +2 -2
  290. package/dist/collection/components/thumbnail/thumbnail.js +1 -1
  291. package/dist/collection/components/title/title.js +2 -2
  292. package/dist/collection/components/toast/toast.js +2 -2
  293. package/dist/collection/components/toggle/toggle.js +1 -1
  294. package/dist/collection/components/toolbar/test/basic/toolbar.e2e.js +133 -5
  295. package/dist/collection/components/toolbar/toolbar.js +2 -2
  296. package/dist/collection/utils/hardware-back-button.js +2 -2
  297. package/dist/collection/utils/helpers.js +1 -1
  298. package/dist/collection/utils/input-shims/hacks/scroll-assist.js +5 -5
  299. package/dist/collection/utils/overlays.js +127 -39
  300. package/dist/collection/utils/test/overlays/overlays.e2e.js +89 -0
  301. package/dist/collection/utils/test/overlays/overlays.spec.js +53 -0
  302. package/dist/docs.json +117 -4
  303. package/dist/esm/{animation-60dbdd13.js → animation-6a0c5338.js} +1 -1
  304. package/dist/esm/{app-globals-5cf6195b.js → app-globals-318eef52.js} +1 -1
  305. package/dist/esm/{button-active-47ac8092.js → button-active-414be235.js} +1 -1
  306. package/dist/esm/{data-0f3ab200.js → data-bb424ba8.js} +23 -38
  307. package/dist/esm/{form-controller-014aa89f.js → form-controller-21dd62b1.js} +1 -1
  308. package/dist/esm/{framework-delegate-fed7fe7c.js → framework-delegate-ed4ba327.js} +1 -1
  309. package/dist/esm/{hardware-back-button-b410a047.js → hardware-back-button-6107a37c.js} +5 -5
  310. package/dist/esm/{helpers-c0b9ca37.js → helpers-be245865.js} +2 -2
  311. package/dist/esm/{index-d64f34ea.js → index-020f5464.js} +1 -1
  312. package/dist/esm/{index-47b2066d.js → index-6e05b96e.js} +4 -4
  313. package/dist/esm/{index-4c30cddd.js → index-a1a47f01.js} +51 -7
  314. package/dist/esm/{index-eb12ef92.js → index-f3946ac1.js} +1 -1
  315. package/dist/esm/{index-0b4beb69.js → index-fae1515c.js} +4 -4
  316. package/dist/esm/index.js +11 -11
  317. package/dist/esm/{input-shims-b90ca55f.js → input-shims-a52daa3a.js} +7 -7
  318. package/dist/esm/{input.utils-6e9b0046.js → input.utils-a445f677.js} +1 -1
  319. package/dist/esm/ion-accordion_2.entry.js +3 -3
  320. package/dist/esm/ion-action-sheet.entry.js +11 -11
  321. package/dist/esm/ion-alert.entry.js +10 -10
  322. package/dist/esm/ion-app_8.entry.js +29 -29
  323. package/dist/esm/ion-avatar_3.entry.js +6 -6
  324. package/dist/esm/ion-back-button.entry.js +5 -5
  325. package/dist/esm/ion-backdrop.entry.js +3 -3
  326. package/dist/esm/ion-breadcrumb_2.entry.js +9 -9
  327. package/dist/esm/ion-button_2.entry.js +7 -7
  328. package/dist/esm/ion-card_5.entry.js +11 -11
  329. package/dist/esm/ion-checkbox.entry.js +5 -5
  330. package/dist/esm/ion-chip.entry.js +4 -4
  331. package/dist/esm/ion-col_3.entry.js +7 -7
  332. package/dist/esm/ion-datetime-button.entry.js +15 -14
  333. package/dist/esm/ion-datetime_3.entry.js +83 -23
  334. package/dist/esm/ion-fab_3.entry.js +9 -9
  335. package/dist/esm/ion-img.entry.js +4 -4
  336. package/dist/esm/ion-infinite-scroll_2.entry.js +7 -7
  337. package/dist/esm/ion-input.entry.js +14 -6
  338. package/dist/esm/ion-item-option_3.entry.js +8 -8
  339. package/dist/esm/ion-item_8.entry.js +17 -17
  340. package/dist/esm/ion-loading.entry.js +9 -9
  341. package/dist/esm/ion-menu_3.entry.js +14 -14
  342. package/dist/esm/ion-modal.entry.js +90 -34
  343. package/dist/esm/ion-nav_2.entry.js +8 -8
  344. package/dist/esm/ion-picker-column-internal.entry.js +11 -7
  345. package/dist/esm/ion-picker-internal.entry.js +4 -4
  346. package/dist/esm/ion-popover.entry.js +12 -12
  347. package/dist/esm/ion-progress-bar.entry.js +4 -4
  348. package/dist/esm/ion-radio_2.entry.js +5 -5
  349. package/dist/esm/ion-range.entry.js +131 -26
  350. package/dist/esm/ion-refresher_2.entry.js +7 -7
  351. package/dist/esm/ion-reorder_2.entry.js +6 -6
  352. package/dist/esm/ion-ripple-effect.entry.js +3 -3
  353. package/dist/esm/ion-route_4.entry.js +5 -5
  354. package/dist/esm/ion-searchbar.entry.js +32 -8
  355. package/dist/esm/ion-segment_2.entry.js +8 -8
  356. package/dist/esm/ion-select_3.entry.js +12 -12
  357. package/dist/esm/ion-spinner.entry.js +3 -3
  358. package/dist/esm/ion-split-pane.entry.js +4 -4
  359. package/dist/esm/ion-tab-bar_2.entry.js +7 -7
  360. package/dist/esm/ion-tab_2.entry.js +6 -6
  361. package/dist/esm/ion-text.entry.js +4 -4
  362. package/dist/esm/ion-textarea.entry.js +6 -6
  363. package/dist/esm/ion-toast.entry.js +9 -9
  364. package/dist/esm/ion-toggle.entry.js +4 -4
  365. package/dist/esm/{ionic-global-ad9a1810.js → ionic-global-94f25d1b.js} +1 -1
  366. package/dist/esm/ionic.js +6 -6
  367. package/dist/esm/{ios.transition-b76c7020.js → ios.transition-a50a9a55.js} +4 -4
  368. package/dist/esm/loader.js +5 -5
  369. package/dist/esm/{md.transition-564937a7.js → md.transition-0da92976.js} +4 -4
  370. package/dist/esm/{notch-controller-15d281a4.js → notch-controller-6bd3e0f9.js} +1 -1
  371. package/dist/esm/{overlays-04a9a43f.js → overlays-b874c3c3.js} +129 -41
  372. package/dist/esm/{status-tap-5a95077d.js → status-tap-dfea3607.js} +3 -3
  373. package/dist/esm/{swipe-back-fa0ec5cd.js → swipe-back-c6d0e5d9.js} +1 -1
  374. package/dist/esm-es5/{animation-60dbdd13.js → animation-6a0c5338.js} +1 -1
  375. package/dist/esm-es5/app-globals-318eef52.js +4 -0
  376. package/dist/esm-es5/{button-active-47ac8092.js → button-active-414be235.js} +1 -1
  377. package/dist/esm-es5/data-bb424ba8.js +4 -0
  378. package/dist/esm-es5/{form-controller-014aa89f.js → form-controller-21dd62b1.js} +1 -1
  379. package/dist/esm-es5/framework-delegate-ed4ba327.js +4 -0
  380. package/dist/esm-es5/hardware-back-button-6107a37c.js +4 -0
  381. package/dist/esm-es5/helpers-be245865.js +4 -0
  382. package/dist/esm-es5/index-020f5464.js +4 -0
  383. package/dist/esm-es5/index-6e05b96e.js +4 -0
  384. package/dist/esm-es5/index-a1a47f01.js +5 -0
  385. package/dist/esm-es5/{index-eb12ef92.js → index-f3946ac1.js} +1 -1
  386. package/dist/esm-es5/{index-0b4beb69.js → index-fae1515c.js} +1 -1
  387. package/dist/esm-es5/index.js +1 -1
  388. package/dist/esm-es5/input-shims-a52daa3a.js +4 -0
  389. package/dist/esm-es5/{input.utils-6e9b0046.js → input.utils-a445f677.js} +1 -1
  390. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  391. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  392. package/dist/esm-es5/ion-alert.entry.js +1 -1
  393. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  394. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  395. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  396. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  397. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  398. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  399. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  400. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  401. package/dist/esm-es5/ion-chip.entry.js +1 -1
  402. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  403. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  404. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  405. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  406. package/dist/esm-es5/ion-img.entry.js +1 -1
  407. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  408. package/dist/esm-es5/ion-input.entry.js +1 -1
  409. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  410. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  411. package/dist/esm-es5/ion-loading.entry.js +1 -1
  412. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  413. package/dist/esm-es5/ion-modal.entry.js +1 -1
  414. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  415. package/dist/esm-es5/ion-picker-column-internal.entry.js +1 -1
  416. package/dist/esm-es5/ion-picker-internal.entry.js +1 -1
  417. package/dist/esm-es5/ion-popover.entry.js +1 -1
  418. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  419. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  420. package/dist/esm-es5/ion-range.entry.js +1 -1
  421. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  422. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  423. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  424. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  425. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  426. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  427. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  428. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  429. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  430. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  431. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  432. package/dist/esm-es5/ion-text.entry.js +1 -1
  433. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  434. package/dist/esm-es5/ion-toast.entry.js +1 -1
  435. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  436. package/dist/esm-es5/{ionic-global-ad9a1810.js → ionic-global-94f25d1b.js} +1 -1
  437. package/dist/esm-es5/ionic.js +1 -1
  438. package/dist/esm-es5/{ios.transition-b76c7020.js → ios.transition-a50a9a55.js} +1 -1
  439. package/dist/esm-es5/loader.js +1 -1
  440. package/dist/esm-es5/md.transition-0da92976.js +4 -0
  441. package/dist/esm-es5/{notch-controller-15d281a4.js → notch-controller-6bd3e0f9.js} +1 -1
  442. package/dist/esm-es5/overlays-b874c3c3.js +4 -0
  443. package/dist/esm-es5/{status-tap-5a95077d.js → status-tap-dfea3607.js} +1 -1
  444. package/dist/esm-es5/{swipe-back-fa0ec5cd.js → swipe-back-c6d0e5d9.js} +1 -1
  445. package/dist/html.html-data.json +13 -1
  446. package/dist/ionic/index.esm.js +1 -1
  447. package/dist/ionic/ionic.esm.js +1 -1
  448. package/dist/ionic/ionic.js +1 -1
  449. package/dist/ionic/{p-30cd5e7b.js → p-0047bd0e.js} +1 -1
  450. package/dist/ionic/{p-70e34286.system.entry.js → p-01a1ff55.system.entry.js} +1 -1
  451. package/dist/ionic/{p-b0ff8075.entry.js → p-01de45e4.entry.js} +1 -1
  452. package/dist/ionic/{p-2e14c533.system.js → p-0609a7d8.system.js} +1 -1
  453. package/dist/ionic/p-08ab4c96.js +4 -0
  454. package/dist/ionic/{p-e04b9647.system.entry.js → p-094cb5ba.system.entry.js} +1 -1
  455. package/dist/ionic/p-0aac3a1c.js +4 -0
  456. package/dist/ionic/{p-de55ec45.js → p-0b743628.js} +1 -1
  457. package/dist/ionic/{p-b253ad7f.js → p-12a8643e.js} +1 -1
  458. package/dist/ionic/p-185d82fc.entry.js +4 -0
  459. package/dist/ionic/p-193921ce.entry.js +4 -0
  460. package/dist/ionic/{p-b8c685a7.system.js → p-1bc9b5f5.system.js} +1 -1
  461. package/dist/ionic/p-1cd372ed.js +4 -0
  462. package/dist/ionic/{p-123b4809.js → p-1e151efb.js} +1 -1
  463. package/dist/ionic/{p-bf05cbc7.entry.js → p-211d8901.entry.js} +1 -1
  464. package/dist/ionic/p-212f2c37.entry.js +4 -0
  465. package/dist/ionic/p-2433bf5e.system.js +4 -0
  466. package/dist/ionic/p-2732a6ce.entry.js +4 -0
  467. package/dist/ionic/{p-89ca4c4b.system.js → p-280f1fe7.system.js} +1 -1
  468. package/dist/ionic/{p-94be3ad7.js → p-2c118b1e.js} +1 -1
  469. package/dist/ionic/p-2c1408df.system.js +5 -0
  470. package/dist/ionic/p-2e2808f3.entry.js +4 -0
  471. package/dist/ionic/{p-0457213c.entry.js → p-32086ea4.entry.js} +1 -1
  472. package/dist/ionic/{p-16a61810.entry.js → p-339dee28.entry.js} +1 -1
  473. package/dist/ionic/{p-88e9052d.entry.js → p-34e2b446.entry.js} +1 -1
  474. package/dist/ionic/{p-eb07b88f.entry.js → p-374838e4.entry.js} +1 -1
  475. package/dist/ionic/p-3789920e.js +4 -0
  476. package/dist/ionic/{p-bdca4784.js → p-37aab7f7.js} +1 -1
  477. package/dist/ionic/p-3b7d328b.system.entry.js +4 -0
  478. package/dist/ionic/{p-f53d074d.system.entry.js → p-3b9edd02.system.entry.js} +1 -1
  479. package/dist/ionic/{p-5e23bea8.system.entry.js → p-3d23a234.system.entry.js} +1 -1
  480. package/dist/ionic/{p-717e2526.system.entry.js → p-3f75319a.system.entry.js} +2 -2
  481. package/dist/ionic/{p-c858f685.js → p-46bcc2f5.js} +1 -1
  482. package/dist/ionic/p-47686f0a.system.entry.js +4 -0
  483. package/dist/ionic/{p-afd6d696.system.entry.js → p-47d7ffb4.system.entry.js} +1 -1
  484. package/dist/ionic/{p-7b1ed642.system.entry.js → p-48331301.system.entry.js} +1 -1
  485. package/dist/ionic/{p-a3df16b9.system.entry.js → p-491ec3d6.system.entry.js} +1 -1
  486. package/dist/ionic/p-495aabd4.system.entry.js +4 -0
  487. package/dist/ionic/{p-cde3ac34.system.entry.js → p-49616da4.system.entry.js} +1 -1
  488. package/dist/ionic/p-4c68b459.system.entry.js +4 -0
  489. package/dist/ionic/{p-5cb5f63d.system.entry.js → p-4cc54847.system.entry.js} +1 -1
  490. package/dist/ionic/p-4da978ac.entry.js +4 -0
  491. package/dist/ionic/{p-a022b684.system.entry.js → p-4f9018d4.system.entry.js} +1 -1
  492. package/dist/ionic/{p-3481d54e.system.entry.js → p-55ae3e14.system.entry.js} +1 -1
  493. package/dist/ionic/{p-aaaa615c.system.entry.js → p-56271222.system.entry.js} +1 -1
  494. package/dist/ionic/{p-42a9f663.system.entry.js → p-565a12d7.system.entry.js} +1 -1
  495. package/dist/ionic/{p-d39ab63d.entry.js → p-56b810d5.entry.js} +1 -1
  496. package/dist/ionic/{p-31c495c2.js → p-56ee6d9a.js} +1 -1
  497. package/dist/ionic/{p-a85d9047.system.entry.js → p-5a0345f7.system.entry.js} +1 -1
  498. package/dist/ionic/{p-ba97a133.system.entry.js → p-5b8d7cdb.system.entry.js} +1 -1
  499. package/dist/ionic/p-5d2011e1.entry.js +4 -0
  500. package/dist/ionic/p-5f3d659f.entry.js +4 -0
  501. package/dist/ionic/p-6236eae6.entry.js +4 -0
  502. package/dist/ionic/{p-8794fa00.system.entry.js → p-625ef2fb.system.entry.js} +1 -1
  503. package/dist/ionic/{p-6871553b.system.js → p-62b7320a.system.js} +1 -1
  504. package/dist/ionic/{p-6525a8cd.system.js → p-638865d1.system.js} +1 -1
  505. package/dist/ionic/p-662cccde.entry.js +4 -0
  506. package/dist/ionic/p-68416ff0.entry.js +4 -0
  507. package/dist/ionic/{p-c747f89b.system.entry.js → p-686ddecb.system.entry.js} +2 -2
  508. package/dist/ionic/p-6a6550fa.js +4 -0
  509. package/dist/ionic/p-6a6c61b1.system.entry.js +4 -0
  510. package/dist/ionic/p-6afef6c1.system.js +4 -0
  511. package/dist/ionic/{p-abcedc15.system.entry.js → p-6b178502.system.entry.js} +1 -1
  512. package/dist/ionic/p-6c45c617.js +4 -0
  513. package/dist/ionic/{p-74deb358.system.js → p-6ecddf53.system.js} +1 -1
  514. package/dist/ionic/{p-5c580e89.entry.js → p-70929384.entry.js} +1 -1
  515. package/dist/ionic/p-73d70509.system.js +4 -0
  516. package/dist/ionic/{p-ae35294f.system.entry.js → p-776f7b9e.system.entry.js} +1 -1
  517. package/dist/ionic/{p-a3f572a7.js → p-779aede8.js} +1 -1
  518. package/dist/ionic/p-7872e970.system.entry.js +4 -0
  519. package/dist/ionic/{p-657ccdd6.entry.js → p-804ffec9.entry.js} +1 -1
  520. package/dist/ionic/{p-a0b28c69.system.entry.js → p-81c8fa81.system.entry.js} +1 -1
  521. package/dist/ionic/{p-8e651c29.entry.js → p-8294b727.entry.js} +1 -1
  522. package/dist/ionic/p-8528c070.entry.js +4 -0
  523. package/dist/ionic/p-87e81684.system.entry.js +4 -0
  524. package/dist/ionic/p-8954015c.entry.js +4 -0
  525. package/dist/ionic/p-8a1b0abb.system.js +4 -0
  526. package/dist/ionic/{p-5928fac9.system.entry.js → p-8a335b91.system.entry.js} +1 -1
  527. package/dist/ionic/{p-cd9a7017.system.entry.js → p-8eba832c.system.entry.js} +1 -1
  528. package/dist/ionic/{p-91cb3f9a.entry.js → p-8ed4de58.entry.js} +1 -1
  529. package/dist/ionic/{p-502780e4.entry.js → p-917bb906.entry.js} +1 -1
  530. package/dist/ionic/{p-b2595011.system.entry.js → p-93f86b06.system.entry.js} +1 -1
  531. package/dist/ionic/{p-9393a49f.js → p-942a9358.js} +1 -1
  532. package/dist/ionic/p-9625a2e6.entry.js +4 -0
  533. package/dist/ionic/{p-f0194418.system.entry.js → p-9bc8bd0c.system.entry.js} +1 -1
  534. package/dist/ionic/{p-18beebdf.system.entry.js → p-9d53b773.system.entry.js} +2 -2
  535. package/dist/ionic/{p-dcb5711d.entry.js → p-9fbfbaef.entry.js} +1 -1
  536. package/dist/ionic/p-a04ecf1a.system.js +4 -0
  537. package/dist/ionic/{p-c2289cd1.js → p-a1036ce7.js} +1 -1
  538. package/dist/ionic/{p-ea25b4c8.system.entry.js → p-a3b2d4a7.system.entry.js} +2 -2
  539. package/dist/ionic/{p-5f169eba.entry.js → p-a5cd2e1f.entry.js} +1 -1
  540. package/dist/ionic/p-a5d9fafe.entry.js +4 -0
  541. package/dist/ionic/{p-49543c9c.system.js → p-a667dd1f.system.js} +1 -1
  542. package/dist/ionic/{p-df504a37.system.js → p-a875459d.system.js} +1 -1
  543. package/dist/ionic/p-ad60590b.entry.js +4 -0
  544. package/dist/ionic/{p-1924f2e0.system.entry.js → p-b1bebf4a.system.entry.js} +2 -2
  545. package/dist/ionic/p-b535c93a.entry.js +4 -0
  546. package/dist/ionic/p-b8735394.entry.js +4 -0
  547. package/dist/ionic/p-bb5bbcdf.js +4 -0
  548. package/dist/ionic/{p-37c33319.system.js → p-bd313b73.system.js} +1 -1
  549. package/dist/ionic/p-c379d010.system.entry.js +4 -0
  550. package/dist/ionic/{p-7173ba59.system.entry.js → p-c5ce0862.system.entry.js} +2 -2
  551. package/dist/ionic/p-c76ef1ea.entry.js +4 -0
  552. package/dist/ionic/p-c8580577.system.js +4 -0
  553. package/dist/ionic/{p-275705e5.entry.js → p-cc0cf2d1.entry.js} +1 -1
  554. package/dist/ionic/{p-c39cc96d.system.entry.js → p-d3a95477.system.entry.js} +1 -1
  555. package/dist/ionic/{p-ceceac26.js → p-d68ecea4.js} +1 -1
  556. package/dist/ionic/p-d873a8c2.system.entry.js +4 -0
  557. package/dist/ionic/{p-64db1331.entry.js → p-dbd77435.entry.js} +1 -1
  558. package/dist/ionic/p-dc2d302c.entry.js +4 -0
  559. package/dist/ionic/{p-601e17b4.entry.js → p-dd2996cf.entry.js} +1 -1
  560. package/dist/ionic/{p-508a4c87.entry.js → p-dec423a3.entry.js} +1 -1
  561. package/dist/ionic/{p-1131946f.system.entry.js → p-deeae694.system.entry.js} +1 -1
  562. package/dist/ionic/p-e06d65b3.system.entry.js +4 -0
  563. package/dist/ionic/{p-d4cadd34.system.js → p-e0948431.system.js} +1 -1
  564. package/dist/ionic/{p-86813176.system.entry.js → p-e15cfec4.system.entry.js} +1 -1
  565. package/dist/ionic/p-e1bd8d9c.system.entry.js +4 -0
  566. package/dist/ionic/{p-1636923f.system.js → p-e34eefb5.system.js} +1 -1
  567. package/dist/ionic/{p-b6279412.entry.js → p-e57a212a.entry.js} +1 -1
  568. package/dist/ionic/{p-3471a7c0.system.entry.js → p-e6ee6ead.system.entry.js} +1 -1
  569. package/dist/ionic/p-e7055fb8.entry.js +4 -0
  570. package/dist/ionic/p-ea723fc4.entry.js +4 -0
  571. package/dist/ionic/p-ead0d463.js +5 -0
  572. package/dist/ionic/{p-30d77a91.system.js → p-ebc1ca90.system.js} +1 -1
  573. package/dist/ionic/p-ed3ad350.entry.js +4 -0
  574. package/dist/ionic/{p-5d7e32ce.js → p-efef9f3a.js} +1 -1
  575. package/dist/ionic/p-f4ccaa64.entry.js +4 -0
  576. package/dist/ionic/p-f4fb429a.system.js +4 -0
  577. package/dist/ionic/{p-a5951821.system.js → p-f549716b.system.js} +1 -1
  578. package/dist/ionic/p-f6a50d5c.entry.js +4 -0
  579. package/dist/ionic/p-fbd01db3.system.js +4 -0
  580. package/dist/ionic/p-fc053a55.entry.js +4 -0
  581. package/dist/ionic/{p-1f19958f.system.entry.js → p-fd059a23.system.entry.js} +1 -1
  582. package/dist/ionic/{p-f8c96502.system.entry.js → p-fdcf1482.system.entry.js} +1 -1
  583. package/dist/ionic/{p-e2bb92ed.system.js → p-fe320051.system.js} +1 -1
  584. package/dist/ionic/{p-3079950e.entry.js → p-fe3ae39d.entry.js} +1 -1
  585. package/dist/types/components/datetime/datetime-interface.d.ts +10 -0
  586. package/dist/types/components/datetime/datetime.d.ts +10 -1
  587. package/dist/types/components/datetime/utils/format.d.ts +7 -13
  588. package/dist/types/components/datetime/utils/manipulation.d.ts +7 -7
  589. package/dist/types/components/datetime/utils/state.d.ts +2 -2
  590. package/dist/types/components/datetime/utils/validate.d.ts +8 -0
  591. package/dist/types/components/input/input.utils.d.ts +1 -1
  592. package/dist/types/components/range/range.d.ts +29 -0
  593. package/dist/types/components/searchbar/searchbar.d.ts +37 -0
  594. package/dist/types/components/toggle/toggle.d.ts +1 -1
  595. package/dist/types/components.d.ts +36 -4
  596. package/dist/types/utils/framework-delegate.d.ts +1 -1
  597. package/dist/types/utils/hardware-back-button.d.ts +1 -1
  598. package/dist/types/utils/helpers.d.ts +1 -1
  599. package/dist/types/utils/keyboard/keyboard-controller.d.ts +1 -1
  600. package/dist/types/utils/overlays.d.ts +7 -2
  601. package/hydrate/index.js +737 -340
  602. package/package.json +9 -5
  603. package/dist/collection/components/modal/test/a11y/modal.spec.js +0 -22
  604. package/dist/esm-es5/app-globals-5cf6195b.js +0 -4
  605. package/dist/esm-es5/data-0f3ab200.js +0 -4
  606. package/dist/esm-es5/framework-delegate-fed7fe7c.js +0 -4
  607. package/dist/esm-es5/hardware-back-button-b410a047.js +0 -4
  608. package/dist/esm-es5/helpers-c0b9ca37.js +0 -4
  609. package/dist/esm-es5/index-47b2066d.js +0 -4
  610. package/dist/esm-es5/index-4c30cddd.js +0 -5
  611. package/dist/esm-es5/index-d64f34ea.js +0 -4
  612. package/dist/esm-es5/input-shims-b90ca55f.js +0 -4
  613. package/dist/esm-es5/md.transition-564937a7.js +0 -4
  614. package/dist/esm-es5/overlays-04a9a43f.js +0 -4
  615. package/dist/ionic/p-027f3674.entry.js +0 -4
  616. package/dist/ionic/p-05d560ec.entry.js +0 -4
  617. package/dist/ionic/p-0b34d3a7.system.js +0 -4
  618. package/dist/ionic/p-0e23c289.system.entry.js +0 -4
  619. package/dist/ionic/p-1f16d040.entry.js +0 -4
  620. package/dist/ionic/p-21ca1f1c.js +0 -4
  621. package/dist/ionic/p-2327064c.entry.js +0 -4
  622. package/dist/ionic/p-23c73017.entry.js +0 -4
  623. package/dist/ionic/p-2e1f014a.system.entry.js +0 -4
  624. package/dist/ionic/p-337ac0f5.entry.js +0 -4
  625. package/dist/ionic/p-396083cc.entry.js +0 -4
  626. package/dist/ionic/p-3a7de59c.entry.js +0 -4
  627. package/dist/ionic/p-3c6f02cf.system.js +0 -4
  628. package/dist/ionic/p-3d961d93.entry.js +0 -4
  629. package/dist/ionic/p-3e9ad72a.system.entry.js +0 -4
  630. package/dist/ionic/p-43a5edee.entry.js +0 -4
  631. package/dist/ionic/p-49aba878.js +0 -4
  632. package/dist/ionic/p-4f777b5e.js +0 -4
  633. package/dist/ionic/p-4fda5c35.entry.js +0 -4
  634. package/dist/ionic/p-5b40d967.entry.js +0 -4
  635. package/dist/ionic/p-5c2ae448.js +0 -4
  636. package/dist/ionic/p-5c6a04bd.entry.js +0 -4
  637. package/dist/ionic/p-61ba2137.system.js +0 -4
  638. package/dist/ionic/p-64761c90.entry.js +0 -4
  639. package/dist/ionic/p-64856c3c.system.entry.js +0 -4
  640. package/dist/ionic/p-6486e393.system.entry.js +0 -4
  641. package/dist/ionic/p-667e3e2d.entry.js +0 -4
  642. package/dist/ionic/p-68ba8e77.system.entry.js +0 -4
  643. package/dist/ionic/p-72fa96bf.system.js +0 -5
  644. package/dist/ionic/p-7330c044.system.js +0 -4
  645. package/dist/ionic/p-7ce40e7b.entry.js +0 -4
  646. package/dist/ionic/p-9056778e.system.entry.js +0 -4
  647. package/dist/ionic/p-95d5a097.entry.js +0 -4
  648. package/dist/ionic/p-9cd7ba27.system.js +0 -4
  649. package/dist/ionic/p-9ec7208d.system.js +0 -4
  650. package/dist/ionic/p-a6e465f5.entry.js +0 -4
  651. package/dist/ionic/p-a8a56449.entry.js +0 -4
  652. package/dist/ionic/p-bd4787eb.entry.js +0 -4
  653. package/dist/ionic/p-c11bab7e.entry.js +0 -4
  654. package/dist/ionic/p-c1797ec5.system.entry.js +0 -4
  655. package/dist/ionic/p-c308f773.entry.js +0 -4
  656. package/dist/ionic/p-c80c7e90.system.js +0 -4
  657. package/dist/ionic/p-cb9e71e0.entry.js +0 -4
  658. package/dist/ionic/p-db30f71b.entry.js +0 -4
  659. package/dist/ionic/p-dbcba5a2.js +0 -4
  660. package/dist/ionic/p-e81bf09e.system.entry.js +0 -4
  661. package/dist/ionic/p-e9f9388e.system.js +0 -4
  662. package/dist/ionic/p-ed7a529f.js +0 -5
  663. package/dist/ionic/p-edcada2b.system.entry.js +0 -4
  664. package/dist/ionic/p-f460c7ae.entry.js +0 -4
  665. package/dist/ionic/p-f7dce541.js +0 -4
  666. package/dist/ionic/p-f840d817.entry.js +0 -4
  667. package/dist/ionic/p-fb9f8495.system.entry.js +0 -4
  668. package/dist/ionic/p-fd2aa50c.js +0 -4
  669. /package/dist/ionic/{p-b5839dc2.js → p-1b3ffb2f.js} +0 -0
  670. /package/dist/ionic/{p-fd8ced99.system.js → p-5fc8d5ef.system.js} +0 -0
@@ -58,8 +58,14 @@ export class Range {
58
58
  el: rangeSlider,
59
59
  gestureName: 'range',
60
60
  gesturePriority: 100,
61
- threshold: 0,
62
- onStart: (ev) => this.onStart(ev),
61
+ /**
62
+ * Provide a threshold since the drag movement
63
+ * might be a user scrolling the view.
64
+ * If this is true, then the range
65
+ * should not move.
66
+ */
67
+ threshold: 10,
68
+ onStart: () => this.onStart(),
63
69
  onMove: (ev) => this.onMove(ev),
64
70
  onEnd: (ev) => this.onEnd(ev),
65
71
  });
@@ -242,33 +248,93 @@ export class Range {
242
248
  this.value = this.ensureValueInBounds(this.value);
243
249
  this.ionChange.emit({ value: this.value });
244
250
  }
245
- onStart(detail) {
246
- const { contentEl } = this;
247
- if (contentEl) {
251
+ /**
252
+ * The value should be updated on touch end or
253
+ * when the component is being dragged.
254
+ * This follows the native behavior of mobile devices.
255
+ *
256
+ * For example: When the user lifts their finger from the
257
+ * screen after tapping the bar or dragging the bar or knob.
258
+ */
259
+ onStart() {
260
+ this.ionKnobMoveStart.emit({ value: this.ensureValueInBounds(this.value) });
261
+ }
262
+ /**
263
+ * The value should be updated while dragging the
264
+ * bar or knob.
265
+ *
266
+ * While the user is dragging, the view
267
+ * should not scroll. This is to prevent the user from
268
+ * feeling disoriented while dragging.
269
+ *
270
+ * The user can scroll on the view if the knob or
271
+ * bar is not being dragged.
272
+ *
273
+ * @param detail The details of the gesture event.
274
+ */
275
+ onMove(detail) {
276
+ const { contentEl, pressedKnob } = this;
277
+ const currentX = detail.currentX;
278
+ /**
279
+ * Since the user is dragging on the bar or knob, the view should not scroll.
280
+ *
281
+ * This only needs to be done once.
282
+ */
283
+ if (contentEl && this.initialContentScrollY === undefined) {
248
284
  this.initialContentScrollY = disableContentScrollY(contentEl);
249
285
  }
250
- const rect = (this.rect = this.rangeSlider.getBoundingClientRect());
251
- const currentX = detail.currentX;
252
- // figure out which knob they started closer to
253
- let ratio = clamp(0, (currentX - rect.left) / rect.width, 1);
254
- if (isRTL(this.el)) {
255
- ratio = 1 - ratio;
286
+ /**
287
+ * The `pressedKnob` can be undefined if the user just
288
+ * started dragging the knob.
289
+ *
290
+ * This is necessary to determine which knob the user is dragging,
291
+ * especially when it's a dual knob.
292
+ * Plus, it determines when to apply certain styles.
293
+ *
294
+ * This only needs to be done once since the knob won't change
295
+ * while the user is dragging.
296
+ */
297
+ if (pressedKnob === undefined) {
298
+ this.setPressedKnob(currentX);
256
299
  }
257
- this.pressedKnob = !this.dualKnobs || Math.abs(this.ratioA - ratio) < Math.abs(this.ratioB - ratio) ? 'A' : 'B';
258
- this.setFocus(this.pressedKnob);
259
- // update the active knob's position
260
300
  this.update(currentX);
261
- this.ionKnobMoveStart.emit({ value: this.ensureValueInBounds(this.value) });
262
- }
263
- onMove(detail) {
264
- this.update(detail.currentX);
265
301
  }
302
+ /**
303
+ * The value should be updated on touch end:
304
+ * - When the user lifts their finger from the screen after
305
+ * tapping the bar.
306
+ *
307
+ * @param detail The details of the gesture or mouse event.
308
+ */
266
309
  onEnd(detail) {
267
310
  const { contentEl, initialContentScrollY } = this;
268
- if (contentEl) {
311
+ const currentX = detail.currentX || detail.clientX;
312
+ /**
313
+ * The `pressedKnob` can be undefined if the user never
314
+ * dragged the knob. They just tapped on the bar.
315
+ *
316
+ * This is necessary to determine which knob the user is changing,
317
+ * especially when it's a dual knob.
318
+ * Plus, it determines when to apply certain styles.
319
+ */
320
+ if (this.pressedKnob === undefined) {
321
+ this.setPressedKnob(currentX);
322
+ }
323
+ /**
324
+ * The user is no longer dragging the bar or
325
+ * knob (if they were dragging it).
326
+ *
327
+ * The user can now scroll on the view in the next gesture event.
328
+ */
329
+ if (contentEl && initialContentScrollY !== undefined) {
269
330
  resetContentScrollY(contentEl, initialContentScrollY);
270
331
  }
271
- this.update(detail.currentX);
332
+ // update the active knob's position
333
+ this.update(currentX);
334
+ /**
335
+ * Reset the pressed knob to undefined since the user
336
+ * may start dragging a different knob in the next gesture event.
337
+ */
272
338
  this.pressedKnob = undefined;
273
339
  this.emitValueChange();
274
340
  this.ionKnobMoveEnd.emit({ value: this.ensureValueInBounds(this.value) });
@@ -295,6 +361,16 @@ export class Range {
295
361
  // Update input value
296
362
  this.updateValue();
297
363
  }
364
+ setPressedKnob(currentX) {
365
+ const rect = (this.rect = this.rangeSlider.getBoundingClientRect());
366
+ // figure out which knob they started closer to
367
+ let ratio = clamp(0, (currentX - rect.left) / rect.width, 1);
368
+ if (isRTL(this.el)) {
369
+ ratio = 1 - ratio;
370
+ }
371
+ this.pressedKnob = !this.dualKnobs || Math.abs(this.ratioA - ratio) < Math.abs(this.ratioB - ratio) ? 'A' : 'B';
372
+ this.setFocus(this.pressedKnob);
373
+ }
298
374
  get valA() {
299
375
  return ratioToValue(this.ratioA, this.min, this.max, this.step);
300
376
  }
@@ -497,7 +573,36 @@ Developers can dismiss this warning by removing their usage of the "legacy" prop
497
573
  if (!this.legacyFormController.hasLegacyControl() && this.hasLabel) {
498
574
  labelledBy = 'range-label';
499
575
  }
500
- return (h("div", { class: "range-slider", ref: (rangeEl) => (this.rangeSlider = rangeEl) }, ticks.map((tick) => (h("div", { style: tickStyle(tick), role: "presentation", class: {
576
+ return (h("div", { class: "range-slider", ref: (rangeEl) => (this.rangeSlider = rangeEl),
577
+ /**
578
+ * Since the gesture has a threshold, the value
579
+ * won't change until the user has dragged past
580
+ * the threshold. This is to prevent the range
581
+ * from moving when the user is scrolling.
582
+ *
583
+ * This results in the value not being updated
584
+ * and the event emitters not being triggered
585
+ * if the user taps on the range. This is why
586
+ * we need to listen for the "pointerUp" event.
587
+ */
588
+ onPointerUp: (ev) => {
589
+ /**
590
+ * If the user drags the knob on the web
591
+ * version (does not occur on mobile),
592
+ * the "pointerUp" event will be triggered
593
+ * along with the gesture's events.
594
+ * This leads to duplicate events.
595
+ *
596
+ * By checking if the pressedKnob is undefined,
597
+ * we can determine if the "pointerUp" event was
598
+ * triggered by a tap or a drag. If it was
599
+ * dragged, the pressedKnob will be defined.
600
+ */
601
+ if (this.pressedKnob === undefined) {
602
+ this.onStart();
603
+ this.onEnd(ev);
604
+ }
605
+ } }, ticks.map((tick) => (h("div", { style: tickStyle(tick), role: "presentation", class: {
501
606
  'range-tick': true,
502
607
  'range-tick-active': tick.active,
503
608
  }, part: tick.active ? 'tick-active' : 'tick' }))), h("div", { class: "range-bar-container" }, h("div", { class: "range-bar", role: "presentation", part: "bar" }), h("div", { class: {
@@ -54,6 +54,33 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) =>
54
54
  expect(rangeStart).toHaveReceivedEventDetail({ value: 20 });
55
55
  expect(rangeEnd).toHaveReceivedEventDetail({ value: 21 });
56
56
  });
57
+ test('should emit end event on tap', async ({ page }, testInfo) => {
58
+ testInfo.annotations.push({
59
+ type: 'issue',
60
+ description: 'https://github.com/ionic-team/ionic-framework/issues/28487',
61
+ });
62
+ await page.setContent(`<ion-range aria-label="Range" value="20"></ion-range>`, config);
63
+ const range = page.locator('ion-range');
64
+ const rangeEndSpy = await page.spyOnEvent('ionKnobMoveEnd');
65
+ const rangeBoundingBox = await range.boundingBox();
66
+ /**
67
+ * Coordinates for the click event.
68
+ * These need to be near the end of the range
69
+ * (or anything that isn't the current value).
70
+ *
71
+ * The number 50 is arbitrary, but it should be
72
+ * less than the width of the range.
73
+ */
74
+ const x = rangeBoundingBox.width - 50;
75
+ // The y coordinate is the middle of the range.
76
+ const y = rangeBoundingBox.height / 2;
77
+ // Click near the end of the range.
78
+ await range.click({
79
+ position: { x, y },
80
+ });
81
+ await rangeEndSpy.next();
82
+ expect(rangeEndSpy.length).toBe(1);
83
+ });
57
84
  // TODO FW-2873
58
85
  test.skip('should not scroll when the knob is swiped', async ({ page, skip }) => {
59
86
  skip.browser('webkit', 'mouse.wheel is not available in WebKit');
@@ -594,7 +594,7 @@ export class Refresher {
594
594
  }
595
595
  render() {
596
596
  const mode = getIonMode(this);
597
- return (h(Host, { key: '9cf8e306e367e0ffd99f8a242dce0c9d78f96317', slot: "fixed", class: {
597
+ return (h(Host, { key: '96f4f595ebdb92a12755b642398691bcaab9f7c1', slot: "fixed", class: {
598
598
  [mode]: true,
599
599
  // Used internally for styling
600
600
  [`refresher-${mode}`]: true,
@@ -52,7 +52,7 @@ export class RefresherContent {
52
52
  const pullingIcon = this.pullingIcon;
53
53
  const hasSpinner = pullingIcon != null && SPINNERS[pullingIcon] !== undefined;
54
54
  const mode = getIonMode(this);
55
- return (h(Host, { key: '537e4d601fd09804d072e9fed9b2c6ba8d890548', class: mode }, h("div", { key: '67f46df746f7da2fc60c47da9216a2920c25166f', class: "refresher-pulling" }, this.pullingIcon && hasSpinner && (h("div", { class: "refresher-pulling-icon" }, h("div", { class: "spinner-arrow-container" }, h("ion-spinner", { name: this.pullingIcon, paused: true }), mode === 'md' && this.pullingIcon === 'circular' && (h("div", { class: "arrow-container" }, h("ion-icon", { icon: caretBackSharp, "aria-hidden": "true" })))))), this.pullingIcon && !hasSpinner && (h("div", { class: "refresher-pulling-icon" }, h("ion-icon", { icon: this.pullingIcon, lazy: false, "aria-hidden": "true" }))), this.pullingText !== undefined && this.renderPullingText()), h("div", { key: '216f96af452e1567df7906c4d9e6fbf8c397ad21', class: "refresher-refreshing" }, this.refreshingSpinner && (h("div", { class: "refresher-refreshing-icon" }, h("ion-spinner", { name: this.refreshingSpinner }))), this.refreshingText !== undefined && this.renderRefreshingText())));
55
+ return (h(Host, { key: 'cf3caa51c4aba8a95622f6d32cafa90b683b9d6e', class: mode }, h("div", { key: '5ad70801104bbea873d3525206660c52e4447903', class: "refresher-pulling" }, this.pullingIcon && hasSpinner && (h("div", { key: '0f95df169fd367528bfaa5d9ccf6690a613609c4', class: "refresher-pulling-icon" }, h("div", { key: '4b8f0465a19f017751b207807c32e1fe00fda433', class: "spinner-arrow-container" }, h("ion-spinner", { key: '77e60179d76f0d17f8f2dc3518f97a2a924418e6', name: this.pullingIcon, paused: true }), mode === 'md' && this.pullingIcon === 'circular' && (h("div", { key: 'f78f63f08f071bead1bfe655bae6394f8a219d91', class: "arrow-container" }, h("ion-icon", { key: '4d833d134d2b221cae2dfb0611d4029f2d664db5', icon: caretBackSharp, "aria-hidden": "true" })))))), this.pullingIcon && !hasSpinner && (h("div", { key: 'e6db19d7fa324363d2a7c3c046510f4c8461f7e6', class: "refresher-pulling-icon" }, h("ion-icon", { key: '66c2ef1a53c5809f49891de515da5f55d9bf8dcc', icon: this.pullingIcon, lazy: false, "aria-hidden": "true" }))), this.pullingText !== undefined && this.renderPullingText()), h("div", { key: '80c413e21d362a5bb0419fcd13092453b3445cee', class: "refresher-refreshing" }, this.refreshingSpinner && (h("div", { key: '0d5511f9644de26332a1a9ed39b160691fab74d9', class: "refresher-refreshing-icon" }, h("ion-spinner", { key: '54e4a96b081c7b453a98e00cceea7c086268a450', name: this.refreshingSpinner }))), this.refreshingText !== undefined && this.renderRefreshingText())));
56
56
  }
57
57
  static get is() { return "ion-refresher-content"; }
58
58
  static get properties() {
@@ -20,7 +20,7 @@ export class Reorder {
20
20
  render() {
21
21
  const mode = getIonMode(this);
22
22
  const reorderIcon = mode === 'ios' ? reorderThreeOutline : reorderTwoSharp;
23
- return (h(Host, { key: 'e625707b1810f93f5c667e38b8e2904988a3cff0', class: mode }, h("slot", { key: 'fd0c3167e8a7955a6f841b338345de0528535ff5' }, h("ion-icon", { key: '3fc7bb1adb0dde839ec4898361e359c640e81067', icon: reorderIcon, lazy: false, class: "reorder-icon", part: "icon", "aria-hidden": "true" }))));
23
+ return (h(Host, { key: '5747b63aa64b05bfed96bbce8087186c7e14c6d5', class: mode }, h("slot", { key: 'a745f29a23c905cd0bff572acb755b597a3fb3c3' }, h("ion-icon", { key: '48f433e85a3a68c16bc426623b2b74957b4b2eb7', icon: reorderIcon, lazy: false, class: "reorder-icon", part: "icon", "aria-hidden": "true" }))));
24
24
  }
25
25
  static get is() { return "ion-reorder"; }
26
26
  static get encapsulation() { return "shadow"; }
@@ -238,7 +238,7 @@ export class ReorderGroup {
238
238
  }
239
239
  render() {
240
240
  const mode = getIonMode(this);
241
- return (h(Host, { key: '067b8ff26887c4e458163f70f7308723c90a53f8', class: {
241
+ return (h(Host, { key: '68b5e5fa00a0531c74597964d84c82da8bc3252f', class: {
242
242
  [mode]: true,
243
243
  'reorder-enabled': !this.disabled,
244
244
  'reorder-list-active': this.state !== 0 /* ReorderGroupState.Idle */,
@@ -59,7 +59,7 @@ export class RippleEffect {
59
59
  }
60
60
  render() {
61
61
  const mode = getIonMode(this);
62
- return (h(Host, { key: 'a9ff1956627908ee4071002ca018eaa80f87cd59', role: "presentation", class: {
62
+ return (h(Host, { key: 'f1129019a6d556b008c754aeb79618c69baea9f8', role: "presentation", class: {
63
63
  [mode]: true,
64
64
  unbounded: this.unbounded,
65
65
  } }));
@@ -23,10 +23,10 @@ export class RouterLink {
23
23
  rel: this.rel,
24
24
  target: this.target,
25
25
  };
26
- return (h(Host, { key: '9944573e56abecc47afd2df03b386e38fc7ed2f3', onClick: this.onClick, class: createColorClasses(this.color, {
26
+ return (h(Host, { key: 'e69892f4c6a6baf040a20c429afdec0e4db2dc0e', onClick: this.onClick, class: createColorClasses(this.color, {
27
27
  [mode]: true,
28
28
  'ion-activatable': true,
29
- }) }, h("a", Object.assign({ key: '383de10c02eb9ab87e27890548ef681dccf2a765' }, attrs), h("slot", { key: '584a5a52e2b116f3827596cc5869a3557d6bcb6b' }))));
29
+ }) }, h("a", Object.assign({ key: '648cb22526f2933abe0865c86da6f30eac3ccb87' }, attrs), h("slot", { key: 'd6bc2e28b7c5cc228caedffebe653bde35934b67' }))));
30
30
  }
31
31
  static get is() { return "ion-router-link"; }
32
32
  static get encapsulation() { return "shadow"; }
@@ -178,7 +178,7 @@ export class RouterOutlet {
178
178
  return true;
179
179
  }
180
180
  render() {
181
- return h("slot", { key: '5e31ebd99536453783f5b6f9119d7fa2bf8a5aad' });
181
+ return h("slot", { key: '3fe520ecae37af68e07a51f3a3223ea454035a59' });
182
182
  }
183
183
  static get is() { return "ion-router-outlet"; }
184
184
  static get encapsulation() { return "shadow"; }
@@ -5,7 +5,7 @@ import { Host, h } from "@stencil/core";
5
5
  import { getIonMode } from "../../global/ionic-global";
6
6
  export class Row {
7
7
  render() {
8
- return (h(Host, { key: 'de94b93c001a93b2a88bcb8e959f421fd5ad4a65', class: getIonMode(this) }, h("slot", { key: '41fa951758d3644bb77d80002caf6e25a79393ce' })));
8
+ return (h(Host, { key: '242c9a45b0bb39af2aebf412fdfa9a176babc834', class: getIonMode(this) }, h("slot", { key: 'd9015d663d631bbf20bd3e0821fed874cd6c5156' })));
9
9
  }
10
10
  static get is() { return "ion-row"; }
11
11
  static get encapsulation() { return "shadow"; }
@@ -2,7 +2,7 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { Host, forceUpdate, h } from "@stencil/core";
5
- import { debounceEvent, raf, componentOnReady } from "../../utils/helpers";
5
+ import { debounceEvent, raf, componentOnReady, inheritAttributes } from "../../utils/helpers";
6
6
  import { isRTL } from "../../utils/rtl/index";
7
7
  import { createColorClasses } from "../../utils/theme";
8
8
  import { arrowBackSharp, closeCircle, closeSharp, searchOutline, searchSharp } from "ionicons/icons";
@@ -16,6 +16,7 @@ export class Searchbar {
16
16
  this.isCancelVisible = false;
17
17
  this.shouldAlignLeft = true;
18
18
  this.inputId = `ion-searchbar-${searchbarIds++}`;
19
+ this.inheritedAttributes = {};
19
20
  /**
20
21
  * Clears the input field and triggers the control change.
21
22
  */
@@ -116,6 +117,7 @@ export class Searchbar {
116
117
  this.noAnimate = true;
117
118
  this.color = undefined;
118
119
  this.animated = false;
120
+ this.autocapitalize = 'default';
119
121
  this.autocomplete = 'off';
120
122
  this.autocorrect = 'off';
121
123
  this.cancelButtonIcon = config.get('backButtonIcon', arrowBackSharp);
@@ -125,6 +127,8 @@ export class Searchbar {
125
127
  this.disabled = false;
126
128
  this.inputmode = undefined;
127
129
  this.enterkeyhint = undefined;
130
+ this.maxlength = undefined;
131
+ this.minlength = undefined;
128
132
  this.name = this.inputId;
129
133
  this.placeholder = 'Search';
130
134
  this.searchIcon = undefined;
@@ -134,6 +138,21 @@ export class Searchbar {
134
138
  this.type = 'search';
135
139
  this.value = '';
136
140
  }
141
+ /**
142
+ * lang and dir are globally enumerated attributes.
143
+ * As a result, creating these as properties
144
+ * can have unintended side effects. Instead, we
145
+ * listen for attribute changes and inherit them
146
+ * to the inner `<input>` element.
147
+ */
148
+ onLangChanged(newValue) {
149
+ this.inheritedAttributes = Object.assign(Object.assign({}, this.inheritedAttributes), { lang: newValue });
150
+ forceUpdate(this);
151
+ }
152
+ onDirChanged(newValue) {
153
+ this.inheritedAttributes = Object.assign(Object.assign({}, this.inheritedAttributes), { dir: newValue });
154
+ forceUpdate(this);
155
+ }
137
156
  debounceChanged() {
138
157
  const { ionInput, debounce, originalIonInput } = this;
139
158
  /**
@@ -158,6 +177,9 @@ export class Searchbar {
158
177
  connectedCallback() {
159
178
  this.emitStyle();
160
179
  }
180
+ componentWillLoad() {
181
+ this.inheritedAttributes = Object.assign({}, inheritAttributes(this.el, ['lang', 'dir']));
182
+ }
161
183
  componentDidLoad() {
162
184
  this.originalIonInput = this.ionInput;
163
185
  this.positionElements();
@@ -350,14 +372,14 @@ export class Searchbar {
350
372
  return true;
351
373
  }
352
374
  render() {
353
- const { cancelButtonText } = this;
375
+ const { cancelButtonText, autocapitalize } = this;
354
376
  const animated = this.animated && config.getBoolean('animated', true);
355
377
  const mode = getIonMode(this);
356
378
  const clearIcon = this.clearIcon || (mode === 'ios' ? closeCircle : closeSharp);
357
379
  const searchIcon = this.searchIcon || (mode === 'ios' ? searchOutline : searchSharp);
358
380
  const shouldShowCancelButton = this.shouldShowCancelButton();
359
- const cancelButton = this.showCancelButton !== 'never' && (h("button", { key: '1de9b9bc6bad708bafcf4d31fa82838355120486', "aria-label": cancelButtonText, "aria-hidden": shouldShowCancelButton ? undefined : 'true', type: "button", tabIndex: mode === 'ios' && !shouldShowCancelButton ? -1 : undefined, onMouseDown: this.onCancelSearchbar, onTouchStart: this.onCancelSearchbar, class: "searchbar-cancel-button" }, h("div", { key: 'e5178016e17104a80732edbae73c0dfc264bfe52', "aria-hidden": "true" }, mode === 'md' ? (h("ion-icon", { "aria-hidden": "true", mode: mode, icon: this.cancelButtonIcon, lazy: false })) : (cancelButtonText))));
360
- return (h(Host, { key: '2c88a7b6ec7f33ada7dae560881210d7a8800f76', role: "search", "aria-disabled": this.disabled ? 'true' : null, class: createColorClasses(this.color, {
381
+ const cancelButton = this.showCancelButton !== 'never' && (h("button", { key: '9c7b4d2e86d9bcd12e57c9a96723d3da598a3773', "aria-label": cancelButtonText, "aria-hidden": shouldShowCancelButton ? undefined : 'true', type: "button", tabIndex: mode === 'ios' && !shouldShowCancelButton ? -1 : undefined, onMouseDown: this.onCancelSearchbar, onTouchStart: this.onCancelSearchbar, class: "searchbar-cancel-button" }, h("div", { key: '1c25268a776134cccd29eb752898cb8ac0eed30f', "aria-hidden": "true" }, mode === 'md' ? (h("ion-icon", { "aria-hidden": "true", mode: mode, icon: this.cancelButtonIcon, lazy: false })) : (cancelButtonText))));
382
+ return (h(Host, { key: 'feef9fc7e405656e134a76dc037aaaa1a4ce36b4', role: "search", "aria-disabled": this.disabled ? 'true' : null, class: createColorClasses(this.color, {
361
383
  [mode]: true,
362
384
  'searchbar-animated': animated,
363
385
  'searchbar-disabled': this.disabled,
@@ -367,14 +389,14 @@ export class Searchbar {
367
389
  'searchbar-has-focus': this.focused,
368
390
  'searchbar-should-show-clear': this.shouldShowClearButton(),
369
391
  'searchbar-should-show-cancel': this.shouldShowCancelButton(),
370
- }) }, h("div", { key: '8e914264a99453748a2bf370943e4047a0a587fb', class: "searchbar-input-container" }, h("input", { key: 'd772f3e8d42301e50fbd6c9deb332fbdf3c435ac', "aria-label": "search text", disabled: this.disabled, ref: (el) => (this.nativeInput = el), class: "searchbar-input", inputMode: this.inputmode, enterKeyHint: this.enterkeyhint, name: this.name, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, placeholder: this.placeholder, type: this.type, value: this.getValue(), autoComplete: this.autocomplete, autoCorrect: this.autocorrect, spellcheck: this.spellcheck }), mode === 'md' && cancelButton, h("ion-icon", { key: '8d9b461c2c34729b1bb562c227868cf817a353bc', "aria-hidden": "true", mode: mode, icon: searchIcon, lazy: false, class: "searchbar-search-icon" }), h("button", { key: 'bcc39be721f4b825af31aae4dfb3058722d889a8', "aria-label": "reset", type: "button", "no-blur": true, class: "searchbar-clear-button", onPointerDown: (ev) => {
392
+ }) }, h("div", { key: '92e3925dc0de468e5665705902153837105dfa57', class: "searchbar-input-container" }, h("input", Object.assign({ key: 'fb74faf81b347a62338ccdac981525df1c52b322', "aria-label": "search text", disabled: this.disabled, ref: (el) => (this.nativeInput = el), class: "searchbar-input", inputMode: this.inputmode, enterKeyHint: this.enterkeyhint, name: this.name, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, minLength: this.minlength, maxLength: this.maxlength, placeholder: this.placeholder, type: this.type, value: this.getValue(), autoCapitalize: autocapitalize === 'default' ? undefined : autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, spellcheck: this.spellcheck }, this.inheritedAttributes)), mode === 'md' && cancelButton, h("ion-icon", { key: 'd58c3636dac1d2e4135989f4c07dc95c51492e60', "aria-hidden": "true", mode: mode, icon: searchIcon, lazy: false, class: "searchbar-search-icon" }), h("button", { key: '1cece7c63ca5ca4b8799e15ee6d2bac100ef0d5e', "aria-label": "reset", type: "button", "no-blur": true, class: "searchbar-clear-button", onPointerDown: (ev) => {
371
393
  /**
372
394
  * This prevents mobile browsers from
373
395
  * blurring the input when the clear
374
396
  * button is activated.
375
397
  */
376
398
  ev.preventDefault();
377
- }, onClick: () => this.onClearInput(true) }, h("ion-icon", { key: '9a6478e1f1482aa6e62c88bd96cd19cacbfb8d60', "aria-hidden": "true", mode: mode, icon: clearIcon, lazy: false, class: "searchbar-clear-icon" }))), mode === 'ios' && cancelButton));
399
+ }, onClick: () => this.onClearInput(true) }, h("ion-icon", { key: 'fe3c2b9cac29002f69e95a89b554c7504e2df050', "aria-hidden": "true", mode: mode, icon: clearIcon, lazy: false, class: "searchbar-clear-icon" }))), mode === 'ios' && cancelButton));
378
400
  }
379
401
  static get is() { return "ion-searchbar"; }
380
402
  static get encapsulation() { return "scoped"; }
@@ -433,6 +455,24 @@ export class Searchbar {
433
455
  "reflect": false,
434
456
  "defaultValue": "false"
435
457
  },
458
+ "autocapitalize": {
459
+ "type": "string",
460
+ "mutable": false,
461
+ "complexType": {
462
+ "original": "string",
463
+ "resolved": "string",
464
+ "references": {}
465
+ },
466
+ "required": false,
467
+ "optional": false,
468
+ "docs": {
469
+ "tags": [],
470
+ "text": "Indicates whether and how the text value should be automatically capitalized as it is entered/edited by the user.\nAvailable options: `\"off\"`, `\"none\"`, `\"on\"`, `\"sentences\"`, `\"words\"`, `\"characters\"`."
471
+ },
472
+ "attribute": "autocapitalize",
473
+ "reflect": false,
474
+ "defaultValue": "'default'"
475
+ },
436
476
  "autocomplete": {
437
477
  "type": "string",
438
478
  "mutable": false,
@@ -597,6 +637,40 @@ export class Searchbar {
597
637
  "attribute": "enterkeyhint",
598
638
  "reflect": false
599
639
  },
640
+ "maxlength": {
641
+ "type": "number",
642
+ "mutable": false,
643
+ "complexType": {
644
+ "original": "number",
645
+ "resolved": "number | undefined",
646
+ "references": {}
647
+ },
648
+ "required": false,
649
+ "optional": true,
650
+ "docs": {
651
+ "tags": [],
652
+ "text": "This attribute specifies the maximum number of characters that the user can enter."
653
+ },
654
+ "attribute": "maxlength",
655
+ "reflect": false
656
+ },
657
+ "minlength": {
658
+ "type": "number",
659
+ "mutable": false,
660
+ "complexType": {
661
+ "original": "number",
662
+ "resolved": "number | undefined",
663
+ "references": {}
664
+ },
665
+ "required": false,
666
+ "optional": true,
667
+ "docs": {
668
+ "tags": [],
669
+ "text": "This attribute specifies the minimum number of characters that the user can enter."
670
+ },
671
+ "attribute": "minlength",
672
+ "reflect": false
673
+ },
600
674
  "name": {
601
675
  "type": "string",
602
676
  "mutable": false,
@@ -922,6 +996,12 @@ export class Searchbar {
922
996
  static get elementRef() { return "el"; }
923
997
  static get watchers() {
924
998
  return [{
999
+ "propName": "lang",
1000
+ "methodName": "onLangChanged"
1001
+ }, {
1002
+ "propName": "dir",
1003
+ "methodName": "onDirChanged"
1004
+ }, {
925
1005
  "propName": "debounce",
926
1006
  "methodName": "debounceChanged"
927
1007
  }, {
@@ -4,12 +4,30 @@
4
4
  import { newSpecPage } from "@stencil/core/testing";
5
5
  import { Searchbar } from "../searchbar";
6
6
  describe('searchbar: rendering', () => {
7
- it('should inherit attributes', async () => {
7
+ it('should inherit properties on load', async () => {
8
8
  const page = await newSpecPage({
9
9
  components: [Searchbar],
10
- html: '<ion-searchbar name="search"></ion-searchbar>',
10
+ html: '<ion-searchbar autocapitalize="off" maxlength="4" minlength="2" name="search"></ion-searchbar>',
11
11
  });
12
12
  const nativeEl = page.body.querySelector('ion-searchbar input');
13
13
  expect(nativeEl.getAttribute('name')).toBe('search');
14
+ expect(nativeEl.getAttribute('maxlength')).toBe('4');
15
+ expect(nativeEl.getAttribute('minlength')).toBe('2');
16
+ expect(nativeEl.getAttribute('autocapitalize')).toBe('off');
17
+ });
18
+ it('should inherit watched attributes', async () => {
19
+ const page = await newSpecPage({
20
+ components: [Searchbar],
21
+ html: '<ion-searchbar dir="ltr" lang="en-US"></ion-searchbar>',
22
+ });
23
+ const searchbarEl = page.body.querySelector('ion-searchbar');
24
+ const nativeEl = searchbarEl.querySelector('input');
25
+ expect(nativeEl.getAttribute('lang')).toBe('en-US');
26
+ expect(nativeEl.getAttribute('dir')).toBe('ltr');
27
+ searchbarEl.setAttribute('lang', 'es-ES');
28
+ searchbarEl.setAttribute('dir', 'rtl');
29
+ await page.waitForChanges();
30
+ expect(nativeEl.getAttribute('lang')).toBe('es-ES');
31
+ expect(nativeEl.getAttribute('dir')).toBe('rtl');
14
32
  });
15
33
  });
@@ -420,14 +420,14 @@ export class Segment {
420
420
  }
421
421
  render() {
422
422
  const mode = getIonMode(this);
423
- return (h(Host, { key: '971e62fdaef3b6380aa1bf214605a5bfde662abf', role: "tablist", onClick: this.onClick, class: createColorClasses(this.color, {
423
+ return (h(Host, { key: '01c94f9fcc51fb5a7612588c87155a130b7c8a9d', role: "tablist", onClick: this.onClick, class: createColorClasses(this.color, {
424
424
  [mode]: true,
425
425
  'in-toolbar': hostContext('ion-toolbar', this.el),
426
426
  'in-toolbar-color': hostContext('ion-toolbar[color]', this.el),
427
427
  'segment-activated': this.activated,
428
428
  'segment-disabled': this.disabled,
429
429
  'segment-scrollable': this.scrollable,
430
- }) }, h("slot", { key: 'eaa7a8a3d5237c8bbc03f57690fd0aa7e4c124e3' })));
430
+ }) }, h("slot", { key: 'b0afdfcb7506a765df42d1d6eb4e1d81bf8fd92a' })));
431
431
  }
432
432
  static get is() { return "ion-segment"; }
433
433
  static get encapsulation() { return "shadow"; }
@@ -78,7 +78,7 @@ export class SegmentButton {
78
78
  const { checked, type, disabled, hasIcon, hasLabel, layout, segmentEl } = this;
79
79
  const mode = getIonMode(this);
80
80
  const hasSegmentColor = () => (segmentEl === null || segmentEl === void 0 ? void 0 : segmentEl.color) !== undefined;
81
- return (h(Host, { key: 'b50b375ed817b47720b743078202f38c737a4034', class: {
81
+ return (h(Host, { key: 'daed55711fdb550747d2ad5fb6e012bff6f6b176', class: {
82
82
  [mode]: true,
83
83
  'in-toolbar': hostContext('ion-toolbar', this.el),
84
84
  'in-toolbar-color': hostContext('ion-toolbar[color]', this.el),
@@ -94,10 +94,10 @@ export class SegmentButton {
94
94
  'ion-activatable': true,
95
95
  'ion-activatable-instant': true,
96
96
  'ion-focusable': true,
97
- } }, h("button", Object.assign({ key: '402f6467ec9ce97aa1df2c72382d07242b51c114', "aria-selected": checked ? 'true' : 'false', role: "tab", ref: (el) => (this.nativeEl = el), type: type, class: "button-native", part: "native", disabled: disabled }, this.inheritedAttributes), h("span", { key: '4f5a1988296c4e59e64255feff264bbbe2ccc312', class: "button-inner" }, h("slot", { key: '35b2a26cca8c76a111e447fa8cae464c504fcb97' })), mode === 'md' && h("ion-ripple-effect", null)), h("div", { key: 'adca0f1e0efcf18b575013d4fb2f22814c81c147', part: "indicator", class: {
97
+ } }, h("button", Object.assign({ key: '851a4b8ff7e45f5fc559c4d8e9c3102441dbd10e', "aria-selected": checked ? 'true' : 'false', role: "tab", ref: (el) => (this.nativeEl = el), type: type, class: "button-native", part: "native", disabled: disabled }, this.inheritedAttributes), h("span", { key: 'b2dc87747e81ce49dfa1269355027d9380226a6a', class: "button-inner" }, h("slot", { key: '00e21fdcafb533605518beebb9557c724fc88e76' })), mode === 'md' && h("ion-ripple-effect", { key: '358c90ab1b43aae3bc6eb1e58fb38d4892894a68' })), h("div", { key: '20fd3f7c43dd117541314e852d894af855050707', part: "indicator", class: {
98
98
  'segment-button-indicator': true,
99
99
  'segment-button-indicator-animated': true,
100
- } }, h("div", { key: '8a23ffe49dc115ee0603e298bb6a39834b910b67', part: "indicator-background", class: "segment-button-indicator-background" }))));
100
+ } }, h("div", { key: 'bebdeb84466c404d52ce48feda1ece5fb1f202b0', part: "indicator-background", class: "segment-button-indicator-background" }))));
101
101
  }
102
102
  static get is() { return "ion-segment-button"; }
103
103
  static get encapsulation() { return "shadow"; }
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { Host, h, forceUpdate } from "@stencil/core";
5
5
  import { compareOptions, createLegacyFormController, createNotchController, isOptionSelected } from "../../utils/forms/index";
6
- import { findItemLabel, focusElement, getAriaLabel, renderHiddenInput, inheritAttributes } from "../../utils/helpers";
6
+ import { findItemLabel, focusVisibleElement, getAriaLabel, renderHiddenInput, inheritAttributes } from "../../utils/helpers";
7
7
  import { printIonWarning } from "../../utils/logging/index";
8
8
  import { actionSheetController, alertController, popoverController } from "../../utils/overlays";
9
9
  import { isRTL } from "../../utils/rtl/index";
@@ -158,7 +158,7 @@ export class Select {
158
158
  if (indexOfSelected > -1) {
159
159
  const selectedItem = overlay.querySelector(`.select-interface-option:nth-child(${indexOfSelected + 1})`);
160
160
  if (selectedItem) {
161
- focusElement(selectedItem);
161
+ focusVisibleElement(selectedItem);
162
162
  /**
163
163
  * Browsers such as Firefox do not
164
164
  * correctly delegate focus when manually
@@ -182,7 +182,7 @@ export class Select {
182
182
  */
183
183
  const firstEnabledOption = overlay.querySelector('ion-radio:not(.radio-disabled), ion-checkbox:not(.checkbox-disabled)');
184
184
  if (firstEnabledOption) {
185
- focusElement(firstEnabledOption.closest('ion-item'));
185
+ focusVisibleElement(firstEnabledOption.closest('ion-item'));
186
186
  /**
187
187
  * Focus the option for the same reason as we do above.
188
188
  */
@@ -10,7 +10,7 @@ export class SelectOption {
10
10
  this.value = undefined;
11
11
  }
12
12
  render() {
13
- return h(Host, { key: 'fe62f2d62ede6866e20969a2e7ae25453648fcef', role: "option", id: this.inputId, class: getIonMode(this) });
13
+ return h(Host, { key: 'abf6e85d60e815f59077910abec922826bf46eb2', role: "option", id: this.inputId, class: getIonMode(this) });
14
14
  }
15
15
  static get is() { return "ion-select-option"; }
16
16
  static get encapsulation() { return "shadow"; }
@@ -102,7 +102,7 @@ export class SelectPopover {
102
102
  render() {
103
103
  const { header, message, options, subHeader } = this;
104
104
  const hasSubHeaderOrMessage = subHeader !== undefined || message !== undefined;
105
- return (h(Host, { key: '9d3995131364d4f1d282e0a1fc34e778e94c9f98', class: getIonMode(this) }, h("ion-list", { key: '14244dcd6375eb61d65f3a9450d42a5d7b2d6541' }, header !== undefined && h("ion-list-header", null, header), hasSubHeaderOrMessage && (h("ion-item", null, h("ion-label", { class: "ion-text-wrap" }, subHeader !== undefined && h("h3", null, subHeader), message !== undefined && h("p", null, message)))), this.renderOptions(options))));
105
+ return (h(Host, { key: 'ddf45e058c75aae175f8589e3539ff152a5b47ad', class: getIonMode(this) }, h("ion-list", { key: '52dbf712bf6cbdcb9d2e6223b99c67ecc90977ff' }, header !== undefined && h("ion-list-header", { key: '692fc85c97591f09a2a9b0bccc8f71e97681cc09' }, header), hasSubHeaderOrMessage && (h("ion-item", { key: 'ecab23444eaadc3ed21e7053d50890db1012475f' }, h("ion-label", { key: '639f08137d7066fd79316f63e850ddcc6a3b54a7', class: "ion-text-wrap" }, subHeader !== undefined && h("h3", { key: 'dc501101ac9d68b1d0ce80679b339a2b132d1ae9' }, subHeader), message !== undefined && h("p", { key: '5ead8c1a2e90d29fe0f05e04a9fa65c7e9e62ca5' }, message)))), this.renderOptions(options))));
106
106
  }
107
107
  static get is() { return "ion-select-popover"; }
108
108
  static get encapsulation() { return "scoped"; }
@@ -25,11 +25,11 @@ export class SkeletonText {
25
25
  const animated = this.animated && config.getBoolean('animated', true);
26
26
  const inMedia = hostContext('ion-avatar', this.el) || hostContext('ion-thumbnail', this.el);
27
27
  const mode = getIonMode(this);
28
- return (h(Host, { key: 'ee3cd9a5448fb69c8ddfc88a993f9968e1a381ff', class: {
28
+ return (h(Host, { key: '4dab0fd2de666de12ad8f6dc6ed1e1de0be67ddd', class: {
29
29
  [mode]: true,
30
30
  'skeleton-text-animated': animated,
31
31
  'in-media': inMedia,
32
- } }, h("span", { key: '8aa792724a3b77877062e9aae838d9e1572b576f' }, "\u00A0")));
32
+ } }, h("span", { key: 'f8f908ec24d65e63b14d9a54640a5f18f0fa8fa5' }, "\u00A0")));
33
33
  }
34
34
  static get is() { return "ion-skeleton-text"; }
35
35
  static get encapsulation() { return "shadow"; }