voyager-ionic-core 8.0.0-beta.1 → 8.0.0-beta.2

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 (635) 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 +2 -2
  5. package/components/buttons.js +3 -3
  6. package/components/checkbox.js +3 -3
  7. package/components/data.js +23 -38
  8. package/components/hardware-back-button.js +3 -3
  9. package/components/helpers.js +1 -8
  10. package/components/input.utils.js +12 -0
  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 +2 -2
  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 +11 -10
  26. package/components/ion-datetime.js +69 -7
  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 +2 -2
  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 +6 -6
  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 +3 -3
  47. package/components/ion-nav-link.js +1 -1
  48. package/components/ion-nav.js +1 -1
  49. package/components/ion-note.js +43 -1
  50. package/components/ion-picker-legacy.js +2 -2
  51. package/components/ion-progress-bar.js +1 -1
  52. package/components/ion-range.js +129 -24
  53. package/components/ion-refresher-content.js +1 -1
  54. package/components/ion-refresher.js +1 -1
  55. package/components/ion-reorder-group.js +1 -1
  56. package/components/ion-reorder.js +1 -1
  57. package/components/ion-router-link.js +2 -2
  58. package/components/ion-router-outlet.js +1 -1
  59. package/components/ion-row.js +1 -1
  60. package/components/ion-searchbar.js +34 -5
  61. package/components/ion-segment-button.js +3 -3
  62. package/components/ion-segment.js +2 -2
  63. package/components/ion-select-option.js +1 -1
  64. package/components/ion-select.js +23 -29
  65. package/components/ion-skeleton-text.js +2 -2
  66. package/components/ion-split-pane.js +2 -2
  67. package/components/ion-tab-bar.js +2 -2
  68. package/components/ion-tab-button.js +2 -2
  69. package/components/ion-tab.js +2 -2
  70. package/components/ion-tabs.js +1 -1
  71. package/components/ion-text.js +2 -2
  72. package/components/ion-textarea.js +5 -5
  73. package/components/ion-thumbnail.js +1 -1
  74. package/components/ion-title.js +2 -2
  75. package/components/ion-toast.js +2 -2
  76. package/components/ion-toggle.js +3 -3
  77. package/components/ion-toolbar.js +2 -2
  78. package/components/item.js +11 -92
  79. package/components/label.js +5 -5
  80. package/components/list-header.js +2 -2
  81. package/components/list.js +1 -1
  82. package/components/overlays.js +61 -19
  83. package/components/picker-column-option.js +2 -2
  84. package/components/picker-column.js +3 -3
  85. package/components/picker-column2.js +2 -2
  86. package/components/picker.js +2 -2
  87. package/components/popover.js +2 -2
  88. package/components/radio-group.js +1 -1
  89. package/components/radio.js +3 -3
  90. package/components/ripple-effect.js +1 -1
  91. package/components/select-popover.js +13 -19
  92. package/components/spinner.js +1 -1
  93. package/dist/cjs/{animation-4ad55058.js → animation-3e7bb91e.js} +1 -1
  94. package/dist/cjs/{app-globals-4d26cb5a.js → app-globals-e132c781.js} +1 -1
  95. package/dist/cjs/{button-active-e447f58b.js → button-active-60ecf64d.js} +1 -1
  96. package/dist/cjs/{data-e2bf21de.js → data-21dc0f81.js} +22 -39
  97. package/dist/cjs/{framework-delegate-53817ef1.js → framework-delegate-0499d444.js} +1 -1
  98. package/dist/cjs/{hardware-back-button-4cb049f1.js → hardware-back-button-1c67a5a2.js} +5 -5
  99. package/dist/cjs/{helpers-b71ca811.js → helpers-668b3d95.js} +1 -8
  100. package/dist/cjs/{index-7574e3d2.js → index-275cc12e.js} +1 -1
  101. package/dist/cjs/{index-ea266398.js → index-2d21d526.js} +441 -12
  102. package/dist/cjs/{index-bbc5b1f7.js → index-ba7ba0af.js} +4 -4
  103. package/dist/cjs/{index-347883f6.js → index-c49cb371.js} +1 -1
  104. package/dist/cjs/{index-92bb95d6.js → index-e4b6c97e.js} +4 -4
  105. package/dist/cjs/index.cjs.js +11 -11
  106. package/dist/cjs/{input-shims-679d87bc.js → input-shims-b419f083.js} +2 -2
  107. package/dist/cjs/{input.utils-5175aea1.js → input.utils-32c0a14a.js} +13 -1
  108. package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -3
  109. package/dist/cjs/ion-action-sheet.cjs.entry.js +11 -11
  110. package/dist/cjs/ion-alert.cjs.entry.js +10 -10
  111. package/dist/cjs/ion-app_8.cjs.entry.js +29 -29
  112. package/dist/cjs/ion-avatar_3.cjs.entry.js +6 -6
  113. package/dist/cjs/ion-back-button.cjs.entry.js +5 -5
  114. package/dist/cjs/ion-backdrop.cjs.entry.js +3 -3
  115. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +7 -7
  116. package/dist/cjs/ion-button_2.cjs.entry.js +5 -5
  117. package/dist/cjs/ion-card_5.cjs.entry.js +11 -11
  118. package/dist/cjs/ion-checkbox.cjs.entry.js +6 -6
  119. package/dist/cjs/ion-chip.cjs.entry.js +4 -4
  120. package/dist/cjs/ion-col_3.cjs.entry.js +7 -7
  121. package/dist/cjs/ion-datetime-button.cjs.entry.js +14 -13
  122. package/dist/cjs/ion-datetime_3.cjs.entry.js +77 -18
  123. package/dist/cjs/ion-fab_3.cjs.entry.js +9 -9
  124. package/dist/cjs/ion-img.cjs.entry.js +4 -4
  125. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +7 -7
  126. package/dist/cjs/ion-input.cjs.entry.js +10 -10
  127. package/dist/cjs/ion-item-option_3.cjs.entry.js +8 -8
  128. package/dist/cjs/ion-item_8.cjs.entry.js +23 -92
  129. package/dist/cjs/ion-loading.cjs.entry.js +9 -9
  130. package/dist/cjs/ion-menu_3.cjs.entry.js +14 -14
  131. package/dist/cjs/ion-modal.cjs.entry.js +12 -12
  132. package/dist/cjs/ion-nav_2.cjs.entry.js +8 -8
  133. package/dist/cjs/ion-picker-column-option.cjs.entry.js +5 -5
  134. package/dist/cjs/ion-picker-column.cjs.entry.js +6 -6
  135. package/dist/cjs/ion-picker.cjs.entry.js +4 -4
  136. package/dist/cjs/ion-popover.cjs.entry.js +10 -10
  137. package/dist/cjs/ion-progress-bar.cjs.entry.js +4 -4
  138. package/dist/cjs/ion-radio_2.cjs.entry.js +7 -7
  139. package/dist/cjs/ion-range.cjs.entry.js +133 -28
  140. package/dist/cjs/ion-refresher_2.cjs.entry.js +7 -7
  141. package/dist/cjs/ion-reorder_2.cjs.entry.js +6 -6
  142. package/dist/cjs/ion-ripple-effect.cjs.entry.js +3 -3
  143. package/dist/cjs/ion-route_4.cjs.entry.js +5 -5
  144. package/dist/cjs/ion-searchbar.cjs.entry.js +31 -7
  145. package/dist/cjs/ion-segment_2.cjs.entry.js +8 -8
  146. package/dist/cjs/ion-select_3.cjs.entry.js +13 -13
  147. package/dist/cjs/ion-spinner.cjs.entry.js +3 -3
  148. package/dist/cjs/ion-split-pane.cjs.entry.js +4 -4
  149. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +7 -7
  150. package/dist/cjs/ion-tab_2.cjs.entry.js +6 -6
  151. package/dist/cjs/ion-text.cjs.entry.js +4 -4
  152. package/dist/cjs/ion-textarea.cjs.entry.js +9 -9
  153. package/dist/cjs/ion-toast.cjs.entry.js +9 -9
  154. package/dist/cjs/ion-toggle.cjs.entry.js +6 -6
  155. package/dist/cjs/{ionic-global-59aa7eb7.js → ionic-global-5762eca9.js} +1 -1
  156. package/dist/cjs/ionic.cjs.js +28 -5
  157. package/dist/cjs/{ios.transition-997fe325.js → ios.transition-3e119901.js} +4 -4
  158. package/dist/cjs/loader.cjs.js +4 -4
  159. package/dist/cjs/{md.transition-2b76c2c6.js → md.transition-c1392f92.js} +4 -4
  160. package/dist/cjs/{notch-controller-8e0ae870.js → notch-controller-08a24f39.js} +1 -1
  161. package/dist/cjs/{overlays-3d02b54f.js → overlays-44b8d0e0.js} +64 -22
  162. package/dist/cjs/{status-tap-3761c2d4.js → status-tap-32430b3e.js} +3 -3
  163. package/dist/cjs/{swipe-back-5b71fc62.js → swipe-back-b8484483.js} +1 -1
  164. package/dist/collection/collection-manifest.json +1 -1
  165. package/dist/collection/components/action-sheet/action-sheet.js +3 -3
  166. package/dist/collection/components/alert/alert.js +2 -2
  167. package/dist/collection/components/app/app.js +4 -4
  168. package/dist/collection/components/avatar/avatar.js +1 -1
  169. package/dist/collection/components/back-button/back-button.js +2 -2
  170. package/dist/collection/components/backdrop/backdrop.js +1 -1
  171. package/dist/collection/components/badge/badge.js +2 -2
  172. package/dist/collection/components/breadcrumb/breadcrumb.js +2 -2
  173. package/dist/collection/components/breadcrumbs/breadcrumbs.js +2 -2
  174. package/dist/collection/components/button/button.js +2 -2
  175. package/dist/collection/components/buttons/buttons.js +2 -2
  176. package/dist/collection/components/card/card.js +1 -1
  177. package/dist/collection/components/card-content/card-content.js +1 -1
  178. package/dist/collection/components/card-header/card-header.js +2 -2
  179. package/dist/collection/components/card-subtitle/card-subtitle.js +2 -2
  180. package/dist/collection/components/card-title/card-title.js +2 -2
  181. package/dist/collection/components/checkbox/checkbox.js +3 -3
  182. package/dist/collection/components/checkbox/test/checkbox.spec.js +12 -0
  183. package/dist/collection/components/chip/chip.js +2 -2
  184. package/dist/collection/components/col/col.js +2 -2
  185. package/dist/collection/components/content/content.js +3 -3
  186. package/dist/collection/components/datetime/datetime.js +50 -7
  187. package/dist/collection/components/datetime/test/basic/datetime.e2e.js +77 -0
  188. package/dist/collection/components/datetime/test/format.spec.js +65 -15
  189. package/dist/collection/components/datetime/utils/format.js +24 -37
  190. package/dist/collection/components/datetime/utils/validate.js +45 -0
  191. package/dist/collection/components/datetime-button/datetime-button.js +11 -10
  192. package/dist/collection/components/datetime-button/test/basic/datetime-button.e2e.js +65 -0
  193. package/dist/collection/components/fab/fab.js +2 -2
  194. package/dist/collection/components/fab-button/fab-button.js +2 -2
  195. package/dist/collection/components/fab-list/fab-list.js +2 -2
  196. package/dist/collection/components/footer/footer.js +2 -2
  197. package/dist/collection/components/grid/grid.js +2 -2
  198. package/dist/collection/components/header/header.js +2 -2
  199. package/dist/collection/components/img/img.js +1 -1
  200. package/dist/collection/components/infinite-scroll/infinite-scroll.js +1 -1
  201. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +2 -2
  202. package/dist/collection/components/input/input.ios.css +2 -0
  203. package/dist/collection/components/input/input.js +3 -3
  204. package/dist/collection/components/input/input.md.css +4 -2
  205. package/dist/collection/components/input/test/highlight/input.e2e.js +144 -0
  206. package/dist/collection/components/item/item.ios.css +5 -197
  207. package/dist/collection/components/item/item.js +4 -166
  208. package/dist/collection/components/item/item.md.css +7 -360
  209. package/dist/collection/components/item/test/basic/item.e2e.js +0 -5
  210. package/dist/collection/components/item/test/item.spec.js +1 -1
  211. package/dist/collection/components/item-divider/item-divider.js +2 -2
  212. package/dist/collection/components/item-group/item-group.js +1 -1
  213. package/dist/collection/components/item-option/item-option.js +2 -2
  214. package/dist/collection/components/item-options/item-options.js +1 -1
  215. package/dist/collection/components/item-sliding/item-sliding.js +1 -1
  216. package/dist/collection/components/label/label.ios.css +0 -5
  217. package/dist/collection/components/label/label.js +2 -2
  218. package/dist/collection/components/label/label.md.css +0 -75
  219. package/dist/collection/components/list/list.js +1 -1
  220. package/dist/collection/components/list-header/list-header.js +2 -2
  221. package/dist/collection/components/loading/loading.js +2 -2
  222. package/dist/collection/components/menu/menu.js +12 -6
  223. package/dist/collection/components/menu-button/menu-button.js +2 -2
  224. package/dist/collection/components/menu-toggle/menu-toggle.js +2 -2
  225. package/dist/collection/components/modal/modal.js +3 -3
  226. package/dist/collection/components/nav/nav.js +1 -1
  227. package/dist/collection/components/nav-link/nav-link.js +1 -1
  228. package/dist/collection/components/note/note.js +2 -2
  229. package/dist/collection/components/picker/picker.js +2 -2
  230. package/dist/collection/components/picker-column/picker-column.js +3 -3
  231. package/dist/collection/components/picker-column-option/picker-column-option.js +2 -2
  232. package/dist/collection/components/picker-legacy/picker.js +2 -2
  233. package/dist/collection/components/picker-legacy-column/picker-column.js +2 -2
  234. package/dist/collection/components/popover/popover.js +2 -2
  235. package/dist/collection/components/progress-bar/progress-bar.js +1 -1
  236. package/dist/collection/components/radio/radio.js +3 -3
  237. package/dist/collection/components/radio-group/radio-group.js +1 -1
  238. package/dist/collection/components/range/range.js +129 -24
  239. package/dist/collection/components/range/test/range-events.e2e.js +27 -0
  240. package/dist/collection/components/refresher/refresher.js +1 -1
  241. package/dist/collection/components/refresher-content/refresher-content.js +1 -1
  242. package/dist/collection/components/reorder/reorder.js +1 -1
  243. package/dist/collection/components/reorder-group/reorder-group.js +1 -1
  244. package/dist/collection/components/ripple-effect/ripple-effect.js +1 -1
  245. package/dist/collection/components/router-link/router-link.js +2 -2
  246. package/dist/collection/components/router-outlet/router-outlet.js +1 -1
  247. package/dist/collection/components/row/row.js +1 -1
  248. package/dist/collection/components/searchbar/searchbar.js +84 -5
  249. package/dist/collection/components/searchbar/test/searchbar.spec.js +20 -2
  250. package/dist/collection/components/segment/segment.js +2 -2
  251. package/dist/collection/components/segment-button/segment-button.js +3 -3
  252. package/dist/collection/components/select/select.ios.css +5 -0
  253. package/dist/collection/components/select/select.js +2 -2
  254. package/dist/collection/components/select/select.md.css +4 -27
  255. package/dist/collection/components/select/test/highlight/select.e2e.js +88 -4
  256. package/dist/collection/components/select-option/select-option.js +1 -1
  257. package/dist/collection/components/select-popover/select-popover.js +1 -1
  258. package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
  259. package/dist/collection/components/spinner/spinner.js +1 -1
  260. package/dist/collection/components/split-pane/split-pane.js +2 -2
  261. package/dist/collection/components/tab/tab.js +2 -2
  262. package/dist/collection/components/tab-bar/tab-bar.js +2 -2
  263. package/dist/collection/components/tab-button/tab-button.js +2 -2
  264. package/dist/collection/components/tabs/tabs.js +1 -1
  265. package/dist/collection/components/text/text.js +2 -2
  266. package/dist/collection/components/textarea/test/highlight/textarea.e2e.js +144 -0
  267. package/dist/collection/components/textarea/textarea.ios.css +2 -20
  268. package/dist/collection/components/textarea/textarea.js +2 -2
  269. package/dist/collection/components/textarea/textarea.md.css +4 -15
  270. package/dist/collection/components/thumbnail/thumbnail.js +1 -1
  271. package/dist/collection/components/title/title.js +2 -2
  272. package/dist/collection/components/toast/toast.js +2 -2
  273. package/dist/collection/components/toggle/toggle.js +3 -3
  274. package/dist/collection/components/toolbar/toolbar.js +2 -2
  275. package/dist/collection/utils/forms/index.js +0 -1
  276. package/dist/collection/utils/hardware-back-button.js +2 -2
  277. package/dist/collection/utils/helpers.js +1 -8
  278. package/dist/collection/utils/overlays.js +61 -19
  279. package/dist/collection/utils/slot-mutation-controller.js +12 -0
  280. package/dist/collection/utils/test/overlays/overlays.spec.js +53 -0
  281. package/dist/docs.json +158 -189
  282. package/dist/esm/{animation-a4acf150.js → animation-9a23ed8d.js} +1 -1
  283. package/dist/esm/{app-globals-cfb6787b.js → app-globals-80842d68.js} +1 -1
  284. package/dist/esm/{button-active-454e5c57.js → button-active-c6e18fac.js} +1 -1
  285. package/dist/esm/{data-691286f1.js → data-ae11fd43.js} +23 -38
  286. package/dist/esm/{framework-delegate-1eb3236c.js → framework-delegate-3fd96df8.js} +1 -1
  287. package/dist/esm/{hardware-back-button-3a14f99e.js → hardware-back-button-fb295e3a.js} +5 -5
  288. package/dist/esm/{helpers-ae74b3c9.js → helpers-f51cf76f.js} +1 -8
  289. package/dist/esm/{index-1f563746.js → index-1262064c.js} +1 -1
  290. package/dist/esm/{index-9b6d6df3.js → index-5d6a0317.js} +441 -13
  291. package/dist/esm/{index-5847f4a9.js → index-6da05eef.js} +4 -4
  292. package/dist/esm/{index-66871a1d.js → index-86688780.js} +1 -1
  293. package/dist/esm/{index-03086279.js → index-9d7e5d3e.js} +4 -4
  294. package/dist/esm/index.js +11 -11
  295. package/dist/esm/{input-shims-56c1f603.js → input-shims-2a4ad5a1.js} +2 -2
  296. package/dist/esm/{input.utils-482fc893.js → input.utils-d2dee48e.js} +13 -1
  297. package/dist/esm/ion-accordion_2.entry.js +3 -3
  298. package/dist/esm/ion-action-sheet.entry.js +11 -11
  299. package/dist/esm/ion-alert.entry.js +10 -10
  300. package/dist/esm/ion-app_8.entry.js +29 -29
  301. package/dist/esm/ion-avatar_3.entry.js +6 -6
  302. package/dist/esm/ion-back-button.entry.js +5 -5
  303. package/dist/esm/ion-backdrop.entry.js +3 -3
  304. package/dist/esm/ion-breadcrumb_2.entry.js +7 -7
  305. package/dist/esm/ion-button_2.entry.js +5 -5
  306. package/dist/esm/ion-card_5.entry.js +11 -11
  307. package/dist/esm/ion-checkbox.entry.js +6 -6
  308. package/dist/esm/ion-chip.entry.js +4 -4
  309. package/dist/esm/ion-col_3.entry.js +7 -7
  310. package/dist/esm/ion-datetime-button.entry.js +14 -13
  311. package/dist/esm/ion-datetime_3.entry.js +77 -18
  312. package/dist/esm/ion-fab_3.entry.js +9 -9
  313. package/dist/esm/ion-img.entry.js +4 -4
  314. package/dist/esm/ion-infinite-scroll_2.entry.js +7 -7
  315. package/dist/esm/ion-input.entry.js +10 -10
  316. package/dist/esm/ion-item-option_3.entry.js +8 -8
  317. package/dist/esm/ion-item_8.entry.js +23 -92
  318. package/dist/esm/ion-loading.entry.js +9 -9
  319. package/dist/esm/ion-menu_3.entry.js +14 -14
  320. package/dist/esm/ion-modal.entry.js +12 -12
  321. package/dist/esm/ion-nav_2.entry.js +8 -8
  322. package/dist/esm/ion-picker-column-option.entry.js +5 -5
  323. package/dist/esm/ion-picker-column.entry.js +6 -6
  324. package/dist/esm/ion-picker.entry.js +4 -4
  325. package/dist/esm/ion-popover.entry.js +10 -10
  326. package/dist/esm/ion-progress-bar.entry.js +4 -4
  327. package/dist/esm/ion-radio_2.entry.js +7 -7
  328. package/dist/esm/ion-range.entry.js +133 -28
  329. package/dist/esm/ion-refresher_2.entry.js +7 -7
  330. package/dist/esm/ion-reorder_2.entry.js +6 -6
  331. package/dist/esm/ion-ripple-effect.entry.js +3 -3
  332. package/dist/esm/ion-route_4.entry.js +5 -5
  333. package/dist/esm/ion-searchbar.entry.js +31 -7
  334. package/dist/esm/ion-segment_2.entry.js +8 -8
  335. package/dist/esm/ion-select_3.entry.js +13 -13
  336. package/dist/esm/ion-spinner.entry.js +3 -3
  337. package/dist/esm/ion-split-pane.entry.js +4 -4
  338. package/dist/esm/ion-tab-bar_2.entry.js +7 -7
  339. package/dist/esm/ion-tab_2.entry.js +6 -6
  340. package/dist/esm/ion-text.entry.js +4 -4
  341. package/dist/esm/ion-textarea.entry.js +9 -9
  342. package/dist/esm/ion-toast.entry.js +9 -9
  343. package/dist/esm/ion-toggle.entry.js +6 -6
  344. package/dist/esm/{ionic-global-c976d684.js → ionic-global-a589c12c.js} +1 -1
  345. package/dist/esm/ionic.js +29 -6
  346. package/dist/esm/{ios.transition-a097dbf5.js → ios.transition-fbde96b0.js} +4 -4
  347. package/dist/esm/loader.js +5 -5
  348. package/dist/esm/{md.transition-b4170ef7.js → md.transition-76e0020b.js} +4 -4
  349. package/dist/esm/{notch-controller-18bf9f76.js → notch-controller-00572cf8.js} +1 -1
  350. package/dist/esm/{overlays-4ba3b255.js → overlays-b1ac1c63.js} +64 -22
  351. package/dist/esm/{status-tap-7a12f017.js → status-tap-84b41f36.js} +3 -3
  352. package/dist/esm/{swipe-back-ae14449a.js → swipe-back-4f2e5d47.js} +1 -1
  353. package/dist/esm-es5/{animation-a4acf150.js → animation-9a23ed8d.js} +1 -1
  354. package/dist/esm-es5/app-globals-80842d68.js +4 -0
  355. package/dist/esm-es5/{button-active-454e5c57.js → button-active-c6e18fac.js} +1 -1
  356. package/dist/esm-es5/data-ae11fd43.js +4 -0
  357. package/dist/esm-es5/{framework-delegate-1eb3236c.js → framework-delegate-3fd96df8.js} +1 -1
  358. package/dist/esm-es5/hardware-back-button-fb295e3a.js +4 -0
  359. package/dist/esm-es5/helpers-f51cf76f.js +4 -0
  360. package/dist/esm-es5/index-1262064c.js +4 -0
  361. package/dist/esm-es5/index-5d6a0317.js +5 -0
  362. package/dist/esm-es5/{index-5847f4a9.js → index-6da05eef.js} +1 -1
  363. package/dist/esm-es5/{index-66871a1d.js → index-86688780.js} +1 -1
  364. package/dist/esm-es5/{index-03086279.js → index-9d7e5d3e.js} +1 -1
  365. package/dist/esm-es5/index.js +1 -1
  366. package/dist/esm-es5/{input-shims-56c1f603.js → input-shims-2a4ad5a1.js} +1 -1
  367. package/dist/esm-es5/input.utils-d2dee48e.js +4 -0
  368. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  369. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  370. package/dist/esm-es5/ion-alert.entry.js +1 -1
  371. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  372. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  373. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  374. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  375. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  376. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  377. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  378. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  379. package/dist/esm-es5/ion-chip.entry.js +1 -1
  380. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  381. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  382. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  383. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  384. package/dist/esm-es5/ion-img.entry.js +1 -1
  385. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  386. package/dist/esm-es5/ion-input.entry.js +1 -1
  387. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  388. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  389. package/dist/esm-es5/ion-loading.entry.js +1 -1
  390. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  391. package/dist/esm-es5/ion-modal.entry.js +1 -1
  392. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  393. package/dist/esm-es5/ion-picker-column-option.entry.js +1 -1
  394. package/dist/esm-es5/ion-picker-column.entry.js +1 -1
  395. package/dist/esm-es5/ion-picker.entry.js +1 -1
  396. package/dist/esm-es5/ion-popover.entry.js +1 -1
  397. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  398. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  399. package/dist/esm-es5/ion-range.entry.js +1 -1
  400. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  401. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  402. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  403. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  404. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  405. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  406. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  407. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  408. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  409. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  410. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  411. package/dist/esm-es5/ion-text.entry.js +1 -1
  412. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  413. package/dist/esm-es5/ion-toast.entry.js +1 -1
  414. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  415. package/dist/esm-es5/{ionic-global-c976d684.js → ionic-global-a589c12c.js} +1 -1
  416. package/dist/esm-es5/ionic.js +1 -1
  417. package/dist/esm-es5/{ios.transition-a097dbf5.js → ios.transition-fbde96b0.js} +1 -1
  418. package/dist/esm-es5/loader.js +1 -1
  419. package/dist/esm-es5/md.transition-76e0020b.js +4 -0
  420. package/dist/esm-es5/{notch-controller-18bf9f76.js → notch-controller-00572cf8.js} +1 -1
  421. package/dist/esm-es5/overlays-b1ac1c63.js +4 -0
  422. package/dist/esm-es5/{status-tap-7a12f017.js → status-tap-84b41f36.js} +1 -1
  423. package/dist/esm-es5/{swipe-back-ae14449a.js → swipe-back-4f2e5d47.js} +1 -1
  424. package/dist/html.html-data.json +24 -26
  425. package/dist/ionic/index.esm.js +1 -1
  426. package/dist/ionic/ionic.esm.js +1 -1
  427. package/dist/ionic/ionic.js +1 -1
  428. package/dist/ionic/{p-a8cc0027.system.js → p-01171ead.system.js} +1 -1
  429. package/dist/ionic/{p-5aa60929.js → p-031c5621.js} +1 -1
  430. package/dist/ionic/{p-d504bc71.entry.js → p-03f3ebd2.entry.js} +1 -1
  431. package/dist/ionic/{p-a06af32c.system.js → p-04f9ce05.system.js} +1 -1
  432. package/dist/ionic/{p-7665bbbc.system.entry.js → p-063c093d.system.entry.js} +1 -1
  433. package/dist/ionic/p-06e951a9.entry.js +4 -0
  434. package/dist/ionic/{p-77982637.entry.js → p-070cf7c3.entry.js} +1 -1
  435. package/dist/ionic/{p-7b795aee.system.entry.js → p-07a0190a.system.entry.js} +1 -1
  436. package/dist/ionic/{p-1bca443b.system.entry.js → p-0afaf65b.system.entry.js} +1 -1
  437. package/dist/ionic/p-0b175848.entry.js +4 -0
  438. package/dist/ionic/p-0da58e53.entry.js +4 -0
  439. package/dist/ionic/p-0eb381c3.system.js +4 -0
  440. package/dist/ionic/p-144ae947.js +4 -0
  441. package/dist/ionic/{p-c5b77291.system.entry.js → p-15e2ff5f.system.entry.js} +1 -1
  442. package/dist/ionic/{p-85cb4733.entry.js → p-19243ae6.entry.js} +1 -1
  443. package/dist/ionic/p-1acaf641.entry.js +4 -0
  444. package/dist/ionic/{p-8e83b7f1.system.entry.js → p-1d1394da.system.entry.js} +1 -1
  445. package/dist/ionic/{p-842777af.js → p-1e5c0c49.js} +1 -1
  446. package/dist/ionic/{p-1ed99eba.system.entry.js → p-2028668d.system.entry.js} +1 -1
  447. package/dist/ionic/{p-1a68de09.entry.js → p-2070f8d8.entry.js} +1 -1
  448. package/dist/ionic/{p-1c436e95.system.entry.js → p-219c17cf.system.entry.js} +1 -1
  449. package/dist/ionic/p-21e88629.entry.js +4 -0
  450. package/dist/ionic/{p-41970e75.entry.js → p-234dc736.entry.js} +1 -1
  451. package/dist/ionic/{p-1600d68c.system.entry.js → p-237b1791.system.entry.js} +1 -1
  452. package/dist/ionic/{p-27594fc2.js → p-239906f1.js} +1 -1
  453. package/dist/ionic/{p-85464e28.system.entry.js → p-25648922.system.entry.js} +2 -2
  454. package/dist/ionic/{p-e38b3c29.entry.js → p-29ecf879.entry.js} +1 -1
  455. package/dist/ionic/{p-454b36f7.system.entry.js → p-2c560619.system.entry.js} +1 -1
  456. package/dist/ionic/{p-62f15daf.system.entry.js → p-2e2635b4.system.entry.js} +2 -2
  457. package/dist/ionic/p-2f53f47a.entry.js +4 -0
  458. package/dist/ionic/{p-6d95943d.system.js → p-30dfa360.system.js} +1 -1
  459. package/dist/ionic/p-314ae72a.js +4 -0
  460. package/dist/ionic/{p-816476b0.system.js → p-33e39575.system.js} +1 -1
  461. package/dist/ionic/p-355736ea.js +4 -0
  462. package/dist/ionic/p-373e757d.entry.js +4 -0
  463. package/dist/ionic/{p-8a50f8d6.system.js → p-3944820a.system.js} +1 -1
  464. package/dist/ionic/p-39483fc9.js +4 -0
  465. package/dist/ionic/{p-5afb6e48.entry.js → p-39860681.entry.js} +1 -1
  466. package/dist/ionic/{p-6fd26009.js → p-3a572692.js} +1 -1
  467. package/dist/ionic/{p-a5b7a286.entry.js → p-42d9f81e.entry.js} +1 -1
  468. package/dist/ionic/{p-b4bb9cd0.system.entry.js → p-45a2b1ee.system.entry.js} +1 -1
  469. package/dist/ionic/{p-15708968.js → p-46a4e4e8.js} +1 -1
  470. package/dist/ionic/{p-f16bfd53.entry.js → p-48fef2f1.entry.js} +1 -1
  471. package/dist/ionic/p-493bce1f.entry.js +4 -0
  472. package/dist/ionic/{p-c38c5dfc.system.js → p-4997d7dc.system.js} +1 -1
  473. package/dist/ionic/{p-cb944b1a.system.js → p-49a205d0.system.js} +1 -1
  474. package/dist/ionic/{p-c880c809.js → p-4ba6d7d1.js} +1 -1
  475. package/dist/ionic/p-4d6ec139.entry.js +4 -0
  476. package/dist/ionic/p-4d7230bd.system.entry.js +4 -0
  477. package/dist/ionic/{p-8d4d902b.js → p-4da2ae44.js} +1 -1
  478. package/dist/ionic/{p-466bdeae.entry.js → p-5054b3db.entry.js} +1 -1
  479. package/dist/ionic/{p-f7ed6a44.system.entry.js → p-50d19fc7.system.entry.js} +1 -1
  480. package/dist/ionic/p-513abaf6.system.entry.js +4 -0
  481. package/dist/ionic/p-517b76cb.entry.js +4 -0
  482. package/dist/ionic/{p-a6cc38d4.js → p-51b1a6be.js} +1 -1
  483. package/dist/ionic/p-53c592ec.system.js +4 -0
  484. package/dist/ionic/{p-ebe0be94.system.entry.js → p-566818dd.system.entry.js} +1 -1
  485. package/dist/ionic/{p-6e1fa025.js → p-59e86adb.js} +1 -1
  486. package/dist/ionic/{p-91a72ad6.system.entry.js → p-5f9abba8.system.entry.js} +2 -2
  487. package/dist/ionic/{p-baa409f1.system.entry.js → p-6042920d.system.entry.js} +2 -2
  488. package/dist/ionic/{p-7b44b443.entry.js → p-65374504.entry.js} +1 -1
  489. package/dist/ionic/{p-f3d6085c.entry.js → p-66596659.entry.js} +1 -1
  490. package/dist/ionic/p-667290b0.system.js +4 -0
  491. package/dist/ionic/{p-c3a2e5cc.entry.js → p-66e50777.entry.js} +1 -1
  492. package/dist/ionic/{p-4a8f173c.system.js → p-67dbcd3b.system.js} +1 -1
  493. package/dist/ionic/{p-95e14c7b.system.js → p-696db6f4.system.js} +1 -1
  494. package/dist/ionic/p-69df28fd.entry.js +4 -0
  495. package/dist/ionic/p-6d0e7669.system.entry.js +4 -0
  496. package/dist/ionic/p-6d1f5de9.system.entry.js +4 -0
  497. package/dist/ionic/{p-dcfc297d.system.entry.js → p-6d75fbe8.system.entry.js} +1 -1
  498. package/dist/ionic/{p-d4d0538c.system.entry.js → p-7162350a.system.entry.js} +1 -1
  499. package/dist/ionic/p-7200f2da.entry.js +4 -0
  500. package/dist/ionic/{p-81869a97.system.entry.js → p-739f8b95.system.entry.js} +1 -1
  501. package/dist/ionic/{p-7a3fa32c.entry.js → p-75addf49.entry.js} +1 -1
  502. package/dist/ionic/{p-1fa738c4.js → p-78b3da77.js} +1 -1
  503. package/dist/ionic/{p-03f63663.system.js → p-7c7e495d.system.js} +1 -1
  504. package/dist/ionic/{p-8ab308e9.js → p-7d4f6f18.js} +1 -1
  505. package/dist/ionic/{p-5c3991e3.system.entry.js → p-824d44c5.system.entry.js} +2 -2
  506. package/dist/ionic/{p-ded27993.entry.js → p-8c0b08db.entry.js} +1 -1
  507. package/dist/ionic/p-8dfe436d.system.js +4 -0
  508. package/dist/ionic/{p-da83d833.system.entry.js → p-91567c90.system.entry.js} +1 -1
  509. package/dist/ionic/{p-5a055df4.entry.js → p-95648db9.entry.js} +1 -1
  510. package/dist/ionic/{p-f71082f7.entry.js → p-9c970454.entry.js} +1 -1
  511. package/dist/ionic/{p-30892e0c.system.js → p-9e3177a5.system.js} +1 -1
  512. package/dist/ionic/p-a03c993e.entry.js +4 -0
  513. package/dist/ionic/{p-8aeed464.system.entry.js → p-a37d4fe9.system.entry.js} +1 -1
  514. package/dist/ionic/{p-3bac30bf.system.entry.js → p-a43fbe0a.system.entry.js} +1 -1
  515. package/dist/ionic/{p-1a5ed3fe.system.entry.js → p-a5c33d6b.system.entry.js} +1 -1
  516. package/dist/ionic/p-a7f788ec.entry.js +4 -0
  517. package/dist/ionic/{p-1e0a18a1.system.entry.js → p-acd64713.system.entry.js} +1 -1
  518. package/dist/ionic/{p-eec92f77.system.js → p-af9256a0.system.js} +1 -1
  519. package/dist/ionic/{p-7541ca9f.system.entry.js → p-b0850af6.system.entry.js} +1 -1
  520. package/dist/ionic/p-b0d35de4.system.js +4 -0
  521. package/dist/ionic/p-b996756b.entry.js +4 -0
  522. package/dist/ionic/p-ba9120fe.system.entry.js +4 -0
  523. package/dist/ionic/p-bb78b64e.entry.js +4 -0
  524. package/dist/ionic/{p-97135baa.entry.js → p-bbc4f653.entry.js} +1 -1
  525. package/dist/ionic/p-c34d1515.js +4 -0
  526. package/dist/ionic/{p-82f5375e.system.entry.js → p-c4390f10.system.entry.js} +1 -1
  527. package/dist/ionic/p-c629d22b.system.js +5 -0
  528. package/dist/ionic/p-c834c535.system.entry.js +4 -0
  529. package/dist/ionic/{p-ad2b216a.system.entry.js → p-c8675b7b.system.entry.js} +1 -1
  530. package/dist/ionic/{p-6ef5f4da.entry.js → p-c8f7f923.entry.js} +1 -1
  531. package/dist/ionic/p-c962e9ea.entry.js +4 -0
  532. package/dist/ionic/{p-e64277c4.entry.js → p-cada6331.entry.js} +1 -1
  533. package/dist/ionic/p-cc19ecba.system.entry.js +4 -0
  534. package/dist/ionic/{p-1ea88de9.system.js → p-ce36d285.system.js} +1 -1
  535. package/dist/ionic/{p-fd94dd20.system.entry.js → p-d09c9468.system.entry.js} +1 -1
  536. package/dist/ionic/{p-4523be60.entry.js → p-d10bbab7.entry.js} +1 -1
  537. package/dist/ionic/p-d268f7e2.system.entry.js +4 -0
  538. package/dist/ionic/{p-4c2cac66.entry.js → p-d3c1c23f.entry.js} +1 -1
  539. package/dist/ionic/{p-780ff3b5.system.entry.js → p-d4be0d81.system.entry.js} +1 -1
  540. package/dist/ionic/p-d5ef3a0a.entry.js +4 -0
  541. package/dist/ionic/p-d60342e3.js +4 -0
  542. package/dist/ionic/{p-1ce172db.entry.js → p-d85eebc3.entry.js} +1 -1
  543. package/dist/ionic/{p-09872ec8.system.entry.js → p-d9dfdbb5.system.entry.js} +1 -1
  544. package/dist/ionic/{p-25850474.entry.js → p-da5bbd4f.entry.js} +1 -1
  545. package/dist/ionic/{p-7cc01684.js → p-dad515dc.js} +1 -1
  546. package/dist/ionic/{p-afcd4f49.entry.js → p-de39f314.entry.js} +1 -1
  547. package/dist/ionic/{p-ddc4e717.entry.js → p-de4c700f.entry.js} +1 -1
  548. package/dist/ionic/{p-19f6ac6c.system.js → p-e01ebeba.system.js} +1 -1
  549. package/dist/ionic/{p-602494c6.entry.js → p-e222fdd1.entry.js} +1 -1
  550. package/dist/ionic/{p-add93c7a.entry.js → p-e5e492d8.entry.js} +1 -1
  551. package/dist/ionic/{p-874510e9.system.entry.js → p-e9412fe7.system.entry.js} +1 -1
  552. package/dist/ionic/{p-3410a9cb.system.js → p-ea5173f9.system.js} +1 -1
  553. package/dist/ionic/{p-4825e380.entry.js → p-eb546888.entry.js} +1 -1
  554. package/dist/ionic/{p-65d3f0e9.js → p-eee87ebb.js} +1 -1
  555. package/dist/ionic/p-f012e8f2.system.entry.js +4 -0
  556. package/dist/ionic/{p-aaca8dd4.system.entry.js → p-f15b0bbc.system.entry.js} +1 -1
  557. package/dist/ionic/{p-2b3e0d99.system.entry.js → p-f15f8140.system.entry.js} +1 -1
  558. package/dist/ionic/{p-a71dc777.system.js → p-f3e8c505.system.js} +1 -1
  559. package/dist/ionic/{p-760dbd5e.js → p-f5cb9689.js} +1 -1
  560. package/dist/ionic/p-f687573e.system.js +4 -0
  561. package/dist/ionic/{p-f6a6b7ef.system.entry.js → p-f6db2e96.system.entry.js} +2 -2
  562. package/dist/ionic/p-f8502e85.js +5 -0
  563. package/dist/ionic/{p-cd366840.system.entry.js → p-f8dfae89.system.entry.js} +1 -1
  564. package/dist/ionic/p-fcec3b7a.system.entry.js +4 -0
  565. package/dist/ionic/{p-cb0e4100.system.entry.js → p-ff740d68.system.entry.js} +1 -1
  566. package/dist/types/components/datetime/datetime-interface.d.ts +10 -0
  567. package/dist/types/components/datetime/datetime.d.ts +9 -1
  568. package/dist/types/components/datetime/utils/format.d.ts +7 -13
  569. package/dist/types/components/datetime/utils/validate.d.ts +8 -0
  570. package/dist/types/components/item/item.d.ts +0 -32
  571. package/dist/types/components/menu/menu-interface.d.ts +1 -0
  572. package/dist/types/components/menu/menu.d.ts +2 -2
  573. package/dist/types/components/range/range.d.ts +29 -0
  574. package/dist/types/components/searchbar/searchbar.d.ts +38 -0
  575. package/dist/types/components.d.ts +38 -46
  576. package/dist/types/utils/forms/index.d.ts +0 -1
  577. package/dist/types/utils/hardware-back-button.d.ts +1 -1
  578. package/dist/types/utils/helpers.d.ts +0 -1
  579. package/hydrate/index.js +499 -349
  580. package/package.json +1 -1
  581. package/components/note.js +0 -48
  582. package/dist/collection/components/item/test/legacy/disabled/item.e2e.js +0 -14
  583. package/dist/collection/utils/forms/form-controller.js +0 -61
  584. package/dist/esm-es5/app-globals-cfb6787b.js +0 -4
  585. package/dist/esm-es5/data-691286f1.js +0 -4
  586. package/dist/esm-es5/hardware-back-button-3a14f99e.js +0 -4
  587. package/dist/esm-es5/helpers-ae74b3c9.js +0 -4
  588. package/dist/esm-es5/index-1f563746.js +0 -4
  589. package/dist/esm-es5/index-9b6d6df3.js +0 -5
  590. package/dist/esm-es5/input.utils-482fc893.js +0 -4
  591. package/dist/esm-es5/md.transition-b4170ef7.js +0 -4
  592. package/dist/esm-es5/overlays-4ba3b255.js +0 -4
  593. package/dist/ionic/p-060fdc03.entry.js +0 -4
  594. package/dist/ionic/p-069388dd.system.js +0 -4
  595. package/dist/ionic/p-06fccad7.entry.js +0 -4
  596. package/dist/ionic/p-0ca35c1d.system.entry.js +0 -4
  597. package/dist/ionic/p-134d4936.system.js +0 -4
  598. package/dist/ionic/p-19e79fe8.entry.js +0 -4
  599. package/dist/ionic/p-22d2a891.js +0 -4
  600. package/dist/ionic/p-239262e4.system.entry.js +0 -4
  601. package/dist/ionic/p-300b2cf1.entry.js +0 -4
  602. package/dist/ionic/p-32bd7ed7.entry.js +0 -4
  603. package/dist/ionic/p-43322b14.js +0 -4
  604. package/dist/ionic/p-4ad02639.entry.js +0 -4
  605. package/dist/ionic/p-5289aade.js +0 -4
  606. package/dist/ionic/p-60efe117.js +0 -5
  607. package/dist/ionic/p-6657681b.system.entry.js +0 -4
  608. package/dist/ionic/p-66e6860f.system.js +0 -4
  609. package/dist/ionic/p-6e5eeb35.entry.js +0 -4
  610. package/dist/ionic/p-6f6d56f1.entry.js +0 -4
  611. package/dist/ionic/p-70218e28.system.entry.js +0 -4
  612. package/dist/ionic/p-72bc2484.system.entry.js +0 -4
  613. package/dist/ionic/p-82d459c1.js +0 -4
  614. package/dist/ionic/p-8ba5912c.entry.js +0 -4
  615. package/dist/ionic/p-8d50220b.system.js +0 -4
  616. package/dist/ionic/p-8d602214.system.js +0 -5
  617. package/dist/ionic/p-8e3ee444.system.entry.js +0 -4
  618. package/dist/ionic/p-9382ebab.entry.js +0 -4
  619. package/dist/ionic/p-942c19cb.entry.js +0 -4
  620. package/dist/ionic/p-96391c0e.entry.js +0 -4
  621. package/dist/ionic/p-9d6f351e.js +0 -4
  622. package/dist/ionic/p-9e3b3f15.system.js +0 -4
  623. package/dist/ionic/p-a375c9f6.system.entry.js +0 -4
  624. package/dist/ionic/p-a58ec401.js +0 -4
  625. package/dist/ionic/p-b1a9e85a.system.entry.js +0 -4
  626. package/dist/ionic/p-bcb58446.entry.js +0 -4
  627. package/dist/ionic/p-c2336a9e.system.entry.js +0 -4
  628. package/dist/ionic/p-cbc3840e.entry.js +0 -4
  629. package/dist/ionic/p-cf852615.system.entry.js +0 -4
  630. package/dist/ionic/p-e15eda82.system.js +0 -4
  631. package/dist/ionic/p-e470466e.entry.js +0 -4
  632. package/dist/ionic/p-ef99a759.entry.js +0 -4
  633. package/dist/ionic/p-fc5ddbf6.entry.js +0 -4
  634. package/dist/ionic/p-feb66f6f.entry.js +0 -4
  635. package/dist/types/utils/forms/form-controller.d.ts +0 -15
@@ -55,8 +55,14 @@ export class Range {
55
55
  el: rangeSlider,
56
56
  gestureName: 'range',
57
57
  gesturePriority: 100,
58
- threshold: 0,
59
- onStart: (ev) => this.onStart(ev),
58
+ /**
59
+ * Provide a threshold since the drag movement
60
+ * might be a user scrolling the view.
61
+ * If this is true, then the range
62
+ * should not move.
63
+ */
64
+ threshold: 10,
65
+ onStart: () => this.onStart(),
60
66
  onMove: (ev) => this.onMove(ev),
61
67
  onEnd: (ev) => this.onEnd(ev),
62
68
  });
@@ -222,33 +228,93 @@ export class Range {
222
228
  this.value = this.ensureValueInBounds(this.value);
223
229
  this.ionChange.emit({ value: this.value });
224
230
  }
225
- onStart(detail) {
226
- const { contentEl } = this;
227
- if (contentEl) {
231
+ /**
232
+ * The value should be updated on touch end or
233
+ * when the component is being dragged.
234
+ * This follows the native behavior of mobile devices.
235
+ *
236
+ * For example: When the user lifts their finger from the
237
+ * screen after tapping the bar or dragging the bar or knob.
238
+ */
239
+ onStart() {
240
+ this.ionKnobMoveStart.emit({ value: this.ensureValueInBounds(this.value) });
241
+ }
242
+ /**
243
+ * The value should be updated while dragging the
244
+ * bar or knob.
245
+ *
246
+ * While the user is dragging, the view
247
+ * should not scroll. This is to prevent the user from
248
+ * feeling disoriented while dragging.
249
+ *
250
+ * The user can scroll on the view if the knob or
251
+ * bar is not being dragged.
252
+ *
253
+ * @param detail The details of the gesture event.
254
+ */
255
+ onMove(detail) {
256
+ const { contentEl, pressedKnob } = this;
257
+ const currentX = detail.currentX;
258
+ /**
259
+ * Since the user is dragging on the bar or knob, the view should not scroll.
260
+ *
261
+ * This only needs to be done once.
262
+ */
263
+ if (contentEl && this.initialContentScrollY === undefined) {
228
264
  this.initialContentScrollY = disableContentScrollY(contentEl);
229
265
  }
230
- const rect = (this.rect = this.rangeSlider.getBoundingClientRect());
231
- const currentX = detail.currentX;
232
- // figure out which knob they started closer to
233
- let ratio = clamp(0, (currentX - rect.left) / rect.width, 1);
234
- if (isRTL(this.el)) {
235
- ratio = 1 - ratio;
266
+ /**
267
+ * The `pressedKnob` can be undefined if the user just
268
+ * started dragging the knob.
269
+ *
270
+ * This is necessary to determine which knob the user is dragging,
271
+ * especially when it's a dual knob.
272
+ * Plus, it determines when to apply certain styles.
273
+ *
274
+ * This only needs to be done once since the knob won't change
275
+ * while the user is dragging.
276
+ */
277
+ if (pressedKnob === undefined) {
278
+ this.setPressedKnob(currentX);
236
279
  }
237
- this.pressedKnob = !this.dualKnobs || Math.abs(this.ratioA - ratio) < Math.abs(this.ratioB - ratio) ? 'A' : 'B';
238
- this.setFocus(this.pressedKnob);
239
- // update the active knob's position
240
280
  this.update(currentX);
241
- this.ionKnobMoveStart.emit({ value: this.ensureValueInBounds(this.value) });
242
- }
243
- onMove(detail) {
244
- this.update(detail.currentX);
245
281
  }
282
+ /**
283
+ * The value should be updated on touch end:
284
+ * - When the user lifts their finger from the screen after
285
+ * tapping the bar.
286
+ *
287
+ * @param detail The details of the gesture or mouse event.
288
+ */
246
289
  onEnd(detail) {
247
290
  const { contentEl, initialContentScrollY } = this;
248
- if (contentEl) {
291
+ const currentX = detail.currentX || detail.clientX;
292
+ /**
293
+ * The `pressedKnob` can be undefined if the user never
294
+ * dragged the knob. They just tapped on the bar.
295
+ *
296
+ * This is necessary to determine which knob the user is changing,
297
+ * especially when it's a dual knob.
298
+ * Plus, it determines when to apply certain styles.
299
+ */
300
+ if (this.pressedKnob === undefined) {
301
+ this.setPressedKnob(currentX);
302
+ }
303
+ /**
304
+ * The user is no longer dragging the bar or
305
+ * knob (if they were dragging it).
306
+ *
307
+ * The user can now scroll on the view in the next gesture event.
308
+ */
309
+ if (contentEl && initialContentScrollY !== undefined) {
249
310
  resetContentScrollY(contentEl, initialContentScrollY);
250
311
  }
251
- this.update(detail.currentX);
312
+ // update the active knob's position
313
+ this.update(currentX);
314
+ /**
315
+ * Reset the pressed knob to undefined since the user
316
+ * may start dragging a different knob in the next gesture event.
317
+ */
252
318
  this.pressedKnob = undefined;
253
319
  this.emitValueChange();
254
320
  this.ionKnobMoveEnd.emit({ value: this.ensureValueInBounds(this.value) });
@@ -275,6 +341,16 @@ export class Range {
275
341
  // Update input value
276
342
  this.updateValue();
277
343
  }
344
+ setPressedKnob(currentX) {
345
+ const rect = (this.rect = this.rangeSlider.getBoundingClientRect());
346
+ // figure out which knob they started closer to
347
+ let ratio = clamp(0, (currentX - rect.left) / rect.width, 1);
348
+ if (isRTL(this.el)) {
349
+ ratio = 1 - ratio;
350
+ }
351
+ this.pressedKnob = !this.dualKnobs || Math.abs(this.ratioA - ratio) < Math.abs(this.ratioB - ratio) ? 'A' : 'B';
352
+ this.setFocus(this.pressedKnob);
353
+ }
278
354
  get valA() {
279
355
  return ratioToValue(this.ratioA, this.min, this.max, this.step);
280
356
  }
@@ -418,7 +494,36 @@ export class Range {
418
494
  if (this.hasLabel) {
419
495
  labelledBy = 'range-label';
420
496
  }
421
- return (h("div", { class: "range-slider", ref: (rangeEl) => (this.rangeSlider = rangeEl) }, ticks.map((tick) => (h("div", { style: tickStyle(tick), role: "presentation", class: {
497
+ return (h("div", { class: "range-slider", ref: (rangeEl) => (this.rangeSlider = rangeEl),
498
+ /**
499
+ * Since the gesture has a threshold, the value
500
+ * won't change until the user has dragged past
501
+ * the threshold. This is to prevent the range
502
+ * from moving when the user is scrolling.
503
+ *
504
+ * This results in the value not being updated
505
+ * and the event emitters not being triggered
506
+ * if the user taps on the range. This is why
507
+ * we need to listen for the "pointerUp" event.
508
+ */
509
+ onPointerUp: (ev) => {
510
+ /**
511
+ * If the user drags the knob on the web
512
+ * version (does not occur on mobile),
513
+ * the "pointerUp" event will be triggered
514
+ * along with the gesture's events.
515
+ * This leads to duplicate events.
516
+ *
517
+ * By checking if the pressedKnob is undefined,
518
+ * we can determine if the "pointerUp" event was
519
+ * triggered by a tap or a drag. If it was
520
+ * dragged, the pressedKnob will be defined.
521
+ */
522
+ if (this.pressedKnob === undefined) {
523
+ this.onStart();
524
+ this.onEnd(ev);
525
+ }
526
+ } }, ticks.map((tick) => (h("div", { style: tickStyle(tick), role: "presentation", class: {
422
527
  'range-tick': true,
423
528
  'range-tick-active': tick.active,
424
529
  }, part: tick.active ? 'tick-active' : 'tick' }))), h("div", { class: "range-bar-container" }, h("div", { class: "range-bar", role: "presentation", part: "bar" }), h("div", { class: {
@@ -471,7 +576,7 @@ export class Range {
471
576
  const needsEndAdjustment = inItem && !hasEndContent;
472
577
  const mode = getIonMode(this);
473
578
  renderHiddenInput(true, el, this.name, JSON.stringify(this.getValue()), disabled);
474
- return (h(Host, { key: 'ff8dbbb4e0c8b9802408a40fa0d93528ec730a9f', onFocusin: this.onFocus, onFocusout: this.onBlur, id: rangeId, class: createColorClasses(this.color, {
579
+ return (h(Host, { key: '576015afd256abb6faa88630dc482b75333c69e0', onFocusin: this.onFocus, onFocusout: this.onBlur, id: rangeId, class: createColorClasses(this.color, {
475
580
  [mode]: true,
476
581
  'in-item': inItem,
477
582
  'range-disabled': disabled,
@@ -480,10 +585,10 @@ export class Range {
480
585
  [`range-label-placement-${labelPlacement}`]: true,
481
586
  'range-item-start-adjustment': needsStartAdjustment,
482
587
  'range-item-end-adjustment': needsEndAdjustment,
483
- }) }, h("label", { key: '2164b0ec67215d7791d795a1f6274b595ad74d80', class: "range-wrapper", id: "range-label" }, h("div", { key: '717346e2bcfb29a3a5ef39b5fec226d484aa1f46', class: {
588
+ }) }, h("label", { key: '45619166eaf5015154ca24aeac8d088fed9606ec', class: "range-wrapper", id: "range-label" }, h("div", { key: 'e5ce095b0b1545dd9d39a04bc0d81fa643ec3739', class: {
484
589
  'label-text-wrapper': true,
485
590
  'label-text-wrapper-hidden': !hasLabel,
486
- }, part: "label" }, label !== undefined ? h("div", { class: "label-text" }, label) : h("slot", { name: "label" })), h("div", { key: 'a6ffff056ab81a45f1a0b38fa42031c51ceabb52', class: "native-wrapper" }, h("slot", { key: 'df3f155a9886cc62d3f0d23467c406c52cd3e082', name: "start" }), this.renderRangeSlider(), h("slot", { key: '3fab316ecdff317c07010a204d89e85af12d347e', name: "end" })))));
591
+ }, part: "label" }, label !== undefined ? h("div", { class: "label-text" }, label) : h("slot", { name: "label" })), h("div", { key: '9bff70bac89c8439b3a8933c2d4dbf0851a49165', class: "native-wrapper" }, h("slot", { key: '5c62813869cad97aa70a1c766c5df7a8fd279258', name: "start" }), this.renderRangeSlider(), h("slot", { key: '888d5665c12debcda85af5024842f5468b086c70', name: "end" })))));
487
592
  }
488
593
  static get is() { return "ion-range"; }
489
594
  static get encapsulation() { return "shadow"; }
@@ -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: '460d903daa65f5549f4f75de63d185d82b9df1bc', slot: "fixed", class: {
597
+ return (h(Host, { key: 'b5f7ccfe964f0f970c46ae813649c36625d82a1d', 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: 'bd4122ec149c1ea6c43d5b6dfd7932569bfd8d7e', class: mode }, h("div", { key: '492113883e1ed465fd6b35a8e700b29a8bbb2baf', 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: '402b0e02cfee42358c4fd690b60c8eb39386569f', 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: '14a4ef75a0f56d499ee0e0bb6ba23565626ad442', class: mode }, h("div", { key: 'b738ea69256548d66512744ecaa5cbf651c1f6dd', 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: '6cbcc1f90df56b53c51a99c5a63e185dba00e9b2', class: "refresher-refreshing" }, this.refreshingSpinner && (h("div", { class: "refresher-refreshing-icon" }, h("ion-spinner", { 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: '268c3575bdc5ca591e11442a744119028f17ae85', class: mode }, h("slot", { key: '4767aef1d57921060541cd38b0a62ef2d8b3267b' }, h("ion-icon", { key: 'ad5f972dc2449cdd7aba92b06e7f0d2539e9a202', icon: reorderIcon, lazy: false, class: "reorder-icon", part: "icon", "aria-hidden": "true" }))));
23
+ return (h(Host, { key: '068457526894b0f557537d5b85f5596781988bbd', class: mode }, h("slot", { key: '006afcb58b0c8c0e4988e58d2c1441a7f4472de1' }, h("ion-icon", { key: '25e63dd8a8eeee62e6c5095bb39f887af2c82124', 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: '3131c13e939242f1a4e10b4fcee028440b1a04c3', class: {
241
+ return (h(Host, { key: '868762829627e101926293f5e7e9f4bcf54490b1', 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: '42d95cc2382286e3bc5d68603f8292eb57ba10f5', role: "presentation", class: {
62
+ return (h(Host, { key: '97bc96ca8dc4bf162302d0cf6980f45534495a3d', 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: '64a8781a0e92ddc14e03a60ac3da7f21dd59a2af', onClick: this.onClick, class: createColorClasses(this.color, {
26
+ return (h(Host, { key: '9dac58d3edaa6b5278c3636e0e245c7ddc2cb888', onClick: this.onClick, class: createColorClasses(this.color, {
27
27
  [mode]: true,
28
28
  'ion-activatable': true,
29
- }) }, h("a", Object.assign({ key: 'e2da87e62410c9ada5810f95ab1b9d6c489703a0' }, attrs), h("slot", { key: '201854747f5c867c8f6fadea20ef29b1d221f9db' }))));
29
+ }) }, h("a", Object.assign({ key: '81d2ffd44f798703da2cd6f926576c6e96a7c41f' }, attrs), h("slot", { key: '26853d510e4cdb93b436cdf70ebb5a7dca288bfb' }))));
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: '94fc9ea2d94548a7b4703498b9d740a0cf9b43a0' });
181
+ return h("slot", { key: '3425cdea6102946b2a7f4dcb3bb0133b2c7c561c' });
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: 'e52c499804f7bebc1c4ab8fb69ef1b452eae58c1', class: getIonMode(this) }, h("slot", { key: '7808e8156601912e0192fe0b74bdedda2c359e1c' })));
8
+ return (h(Host, { key: '8b54835ea837e25c278ffa3e298238e92b095ccc', class: getIonMode(this) }, h("slot", { key: 'cb77d85c8d02fdee29a72b58f3091db8daeaf3b2' })));
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 = undefined;
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();
@@ -356,8 +378,8 @@ export class Searchbar {
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: 'd219b739da043f04358e5646c9d206d5f39d1b86', "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: 'fa93932c72571e76d5845e15a4d96291591cec61', "aria-hidden": "true" }, mode === 'md' ? (h("ion-icon", { "aria-hidden": "true", mode: mode, icon: this.cancelButtonIcon, lazy: false })) : (cancelButtonText))));
360
- return (h(Host, { key: '72fed78006b21e3e4bc3af31a4eb4545fd3b69da', role: "search", "aria-disabled": this.disabled ? 'true' : null, class: createColorClasses(this.color, {
381
+ const cancelButton = this.showCancelButton !== 'never' && (h("button", { key: '66091918b5b97012b4105238b9aa1e0bc2133885', "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: 'bfe5602ce36cd82dae870b632de767bde3de2f8a', "aria-hidden": "true" }, mode === 'md' ? (h("ion-icon", { "aria-hidden": "true", mode: mode, icon: this.cancelButtonIcon, lazy: false })) : (cancelButtonText))));
382
+ return (h(Host, { key: '8604e83a9e11f5c561c470ce4630bdc5a38f1098', 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: 'b392694fa344f9316c5ca15560f49b03d149d9a1', class: "searchbar-input-container" }, h("input", { key: '998a7ab915a20bc952c6b4be645870b6291576b7', "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: 'fa6f3463a1941368e3cf4eaf7059cf5518d1daeb', "aria-hidden": "true", mode: mode, icon: searchIcon, lazy: false, class: "searchbar-search-icon" }), h("button", { key: 'e6200807543cfb4a685a6ad0481eb2dc5cab38df', "aria-label": "reset", type: "button", "no-blur": true, class: "searchbar-clear-button", onPointerDown: (ev) => {
392
+ }) }, h("div", { key: '4d94b664e0bb7c47f094a25f26fc92b210b96ae3', class: "searchbar-input-container" }, h("input", Object.assign({ key: '78a82dcd609fdb0327ff153a49b5904a0290663d', "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: this.autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, spellcheck: this.spellcheck }, this.inheritedAttributes)), mode === 'md' && cancelButton, h("ion-icon", { key: '4da87bc57573758ed758332789bac63f253b1678', "aria-hidden": "true", mode: mode, icon: searchIcon, lazy: false, class: "searchbar-search-icon" }), h("button", { key: '410d65bac177b3534c0ef7a6ecc1fe6381b46efd', "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: '983f4f65730913c5ff93baed855d694983f72e12', "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: 'feb89ebe3b4df01402762b9d65c56d26852ca1a6', "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,23 @@ 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": true,
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
+ },
436
475
  "autocomplete": {
437
476
  "type": "string",
438
477
  "mutable": false,
@@ -597,6 +636,40 @@ export class Searchbar {
597
636
  "attribute": "enterkeyhint",
598
637
  "reflect": false
599
638
  },
639
+ "maxlength": {
640
+ "type": "number",
641
+ "mutable": false,
642
+ "complexType": {
643
+ "original": "number",
644
+ "resolved": "number | undefined",
645
+ "references": {}
646
+ },
647
+ "required": false,
648
+ "optional": true,
649
+ "docs": {
650
+ "tags": [],
651
+ "text": "This attribute specifies the maximum number of characters that the user can enter."
652
+ },
653
+ "attribute": "maxlength",
654
+ "reflect": false
655
+ },
656
+ "minlength": {
657
+ "type": "number",
658
+ "mutable": false,
659
+ "complexType": {
660
+ "original": "number",
661
+ "resolved": "number | undefined",
662
+ "references": {}
663
+ },
664
+ "required": false,
665
+ "optional": true,
666
+ "docs": {
667
+ "tags": [],
668
+ "text": "This attribute specifies the minimum number of characters that the user can enter."
669
+ },
670
+ "attribute": "minlength",
671
+ "reflect": false
672
+ },
600
673
  "name": {
601
674
  "type": "string",
602
675
  "mutable": false,
@@ -922,6 +995,12 @@ export class Searchbar {
922
995
  static get elementRef() { return "el"; }
923
996
  static get watchers() {
924
997
  return [{
998
+ "propName": "lang",
999
+ "methodName": "onLangChanged"
1000
+ }, {
1001
+ "propName": "dir",
1002
+ "methodName": "onDirChanged"
1003
+ }, {
925
1004
  "propName": "debounce",
926
1005
  "methodName": "debounceChanged"
927
1006
  }, {
@@ -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: 'a0b1480e0f95ed9647871c749dbd93ef7ce5b28e', role: "tablist", onClick: this.onClick, class: createColorClasses(this.color, {
423
+ return (h(Host, { key: 'a5268f36524465945e66f838c1fcb7b2ca4980b5', 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: '01b9559e574b1b194e6010295cd9bea4b6aeab1b' })));
430
+ }) }, h("slot", { key: 'b399f99ec57ab319cdb0635d2bb1efcd74b709bc' })));
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: 'fc2262b4b1cb0c3e38b3de672910543211779b98', class: {
81
+ return (h(Host, { key: 'b2c9b735e7c578e50d7a41cb0c47cf661b83aa49', 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: 'd73ffb0e52b86e41fff7aafac8bd77073b494b28', "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: 'a3d76c3191a508f47782f17602d814920dc26694', class: "button-inner" }, h("slot", { key: 'ae6479c5eec1e0f4077066a6b0ca06c13af0847f' })), mode === 'md' && h("ion-ripple-effect", null)), h("div", { key: '593a4ec0d186520485073dc2fcdf23899924399b', part: "indicator", class: {
97
+ } }, h("button", Object.assign({ key: '1b6e56709f281be94c754a52dd80d9968d1e6bb1', "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: '3a0508e0d859dffd78dc54dc574cf3ed5c03f110', class: "button-inner" }, h("slot", { key: '05f0eb4f773d2cbd929035087af4550a0f4ab038' })), mode === 'md' && h("ion-ripple-effect", null)), h("div", { key: '75370e50f989a5db5d6b8ffa80894acba1797d85', part: "indicator", class: {
98
98
  'segment-button-indicator': true,
99
99
  'segment-button-indicator-animated': true,
100
- } }, h("div", { key: 'cfbd0d89a928cce0130da46b2be406c03ab3cddb', part: "indicator-background", class: "segment-button-indicator-background" }))));
100
+ } }, h("div", { key: '8123d414c166d97c5e3dae707b89d4e94f2c6f92', 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"; }
@@ -64,6 +64,7 @@
64
64
  * @prop --placeholder-color: Color of the select placeholder text
65
65
  * @prop --placeholder-opacity: Opacity of the select placeholder text
66
66
  *
67
+ * @prop --highlight-height: The height of the highlight on the select. Only applies to md mode.
67
68
  * @prop --highlight-color-focused: The color of the highlight on the select when focused
68
69
  * @prop --highlight-color-invalid: The color of the highlight on the select when invalid
69
70
  * @prop --highlight-color-valid: The color of the highlight on the select when valid
@@ -682,6 +683,10 @@ button {
682
683
  * }
683
684
  * }
684
685
  */
686
+ :host {
687
+ --highlight-height: 0px;
688
+ }
689
+
685
690
  .select-icon {
686
691
  width: 1.125rem;
687
692
  height: 1.125rem;
@@ -610,7 +610,7 @@ export class Select {
610
610
  * TODO(FW-5592): Remove hasStartEndSlots condition
611
611
  */
612
612
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || isExpanded || hasStartEndSlots));
613
- return (h(Host, { key: '39718ddb0685972f736089a6b4ec681aaa494bf4', onClick: this.onClick, class: createColorClasses(this.color, {
613
+ return (h(Host, { key: '00e3a22ca92044556f50b029d5d52178eedd00ca', onClick: this.onClick, class: createColorClasses(this.color, {
614
614
  [mode]: true,
615
615
  'in-item': inItem,
616
616
  'in-item-color': hostContext('ion-item.ion-color', el),
@@ -626,7 +626,7 @@ export class Select {
626
626
  [`select-justify-${justify}`]: justifyEnabled,
627
627
  [`select-shape-${shape}`]: shape !== undefined,
628
628
  [`select-label-placement-${labelPlacement}`]: true,
629
- }) }, h("label", { key: '6d51bb692bda00bf34251520eba872c408128a59', class: "select-wrapper", id: "select-label" }, this.renderLabelContainer(), h("div", { key: 'd1544ae348f6013940e77b4c2fb5e53b24322414', class: "select-wrapper-inner" }, h("slot", { key: '53f334dbe960619583c1fe196be18584edb196ac', name: "start" }), h("div", { key: '924ae05b68bc9811b80acb4a9973b3ecfde00379', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), h("slot", { key: '916a4d542c8cffdf4be8f62c77eee6acc2e5ac7b', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && h("div", { class: "select-highlight" }))));
629
+ }) }, h("label", { key: 'b286c77110501d17e7defa9b3c4f02a1aba620f8', class: "select-wrapper", id: "select-label" }, this.renderLabelContainer(), h("div", { key: 'e2de491d3cb57678d30c0383a0782cfdd28abba0', class: "select-wrapper-inner" }, h("slot", { key: '7b9054dbcdab00505a9195eb1674d96322741614', name: "start" }), h("div", { key: '874e4da16c1140be0b5043330e0538936d13ac56', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), h("slot", { key: '64256b876c88e02852c8745f14c10636c48a6a72', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && h("div", { class: "select-highlight" }))));
630
630
  }
631
631
  static get is() { return "ion-select"; }
632
632
  static get encapsulation() { return "shadow"; }