voyager-ionic-core 8.4.1 → 8.5.0

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 (608) hide show
  1. package/components/alert.js +30 -4
  2. package/components/checkbox.js +40 -6
  3. package/components/helpers.js +17 -29
  4. package/components/index6.js +11 -3
  5. package/components/index9.js +1 -1
  6. package/components/ion-input.js +22 -9
  7. package/components/ion-item-divider.js +2 -2
  8. package/components/ion-item-group.js +1 -1
  9. package/components/ion-item-option.js +2 -2
  10. package/components/ion-item-options.js +1 -1
  11. package/components/ion-item-sliding.js +1 -1
  12. package/components/ion-loading.js +2 -2
  13. package/components/ion-menu-button.js +2 -2
  14. package/components/ion-menu-toggle.js +2 -2
  15. package/components/ion-menu.js +2 -2
  16. package/components/ion-nav-link.js +1 -1
  17. package/components/ion-nav.js +1 -1
  18. package/components/ion-note.js +2 -2
  19. package/components/ion-picker-legacy.js +2 -2
  20. package/components/ion-progress-bar.js +1 -1
  21. package/components/ion-range.js +28 -6
  22. package/components/ion-refresher-content.js +1 -1
  23. package/components/ion-refresher.js +1 -1
  24. package/components/ion-reorder-group.js +1 -1
  25. package/components/ion-reorder.js +1 -1
  26. package/components/ion-router-link.js +2 -2
  27. package/components/ion-router-outlet.js +1 -1
  28. package/components/ion-router.js +1 -1
  29. package/components/ion-row.js +1 -1
  30. package/components/ion-searchbar.js +4 -4
  31. package/components/ion-segment-button.js +40 -9
  32. package/components/ion-segment-content.js +1 -1
  33. package/components/ion-segment-view.js +2 -2
  34. package/components/ion-segment.js +3 -2
  35. package/components/ion-select-option.js +1 -1
  36. package/components/ion-select.js +87 -16
  37. package/components/ion-skeleton-text.js +2 -2
  38. package/components/ion-split-pane.js +2 -2
  39. package/components/ion-tab-bar.js +2 -2
  40. package/components/ion-tab-button.js +2 -2
  41. package/components/ion-tab.js +2 -2
  42. package/components/ion-tabs.js +1 -1
  43. package/components/ion-text.js +2 -2
  44. package/components/ion-textarea.js +21 -8
  45. package/components/ion-thumbnail.js +1 -1
  46. package/components/ion-toast.js +2 -2
  47. package/components/ion-toggle.js +41 -6
  48. package/components/ionic-global.js +3 -13
  49. package/components/label.js +2 -2
  50. package/components/list-header.js +2 -2
  51. package/components/modal.js +267 -35
  52. package/components/picker-column-option.js +2 -2
  53. package/components/picker-column2.js +2 -2
  54. package/components/popover.js +2 -2
  55. package/components/radio-group.js +39 -2
  56. package/components/radio.js +3 -3
  57. package/components/ripple-effect.js +1 -1
  58. package/components/select-modal.js +3 -3
  59. package/components/select-popover.js +1 -1
  60. package/components/spinner.js +1 -1
  61. package/components/title.js +2 -2
  62. package/components/toolbar.js +2 -2
  63. package/css/core.css.map +1 -1
  64. package/css/ionic.bundle.css.map +1 -1
  65. package/dist/cjs/{app-globals-21afee77.js → app-globals-dd592863.js} +1 -1
  66. package/dist/cjs/{button-active-3f2f60b4.js → button-active-43e2b419.js} +1 -1
  67. package/dist/cjs/{data-21dc0f81.js → data-27cc2c9c.js} +1 -1
  68. package/dist/cjs/{framework-delegate-55f5683a.js → framework-delegate-11b0ba2f.js} +1 -1
  69. package/dist/cjs/{hardware-back-button-9e8a2c4f.js → hardware-back-button-5a99001f.js} +2 -2
  70. package/dist/cjs/{helpers-afaa9001.js → helpers-d0dfbb50.js} +18 -28
  71. package/dist/cjs/{index-73f75efb.js → index-2e236a04.js} +0 -4
  72. package/dist/cjs/{index-9509ecad.js → index-363fe6b2.js} +1 -1
  73. package/dist/cjs/{index-5915f9b3.js → index-48b2a28e.js} +11 -3
  74. package/dist/cjs/{index-5b6a7459.js → index-9b945a2d.js} +2 -2
  75. package/dist/cjs/{index-f05acd21.js → index-f68a486a.js} +6 -6
  76. package/dist/cjs/{index-8e789962.js → index-fd6383b6.js} +4 -4
  77. package/dist/cjs/index.cjs.js +11 -11
  78. package/dist/cjs/{input-shims-9e59ef62.js → input-shims-2d27a5be.js} +5 -3
  79. package/dist/cjs/{input.utils-611cde0b.js → input.utils-2f642324.js} +2 -2
  80. package/dist/cjs/ion-accordion_2.cjs.entry.js +4 -4
  81. package/dist/cjs/ion-action-sheet.cjs.entry.js +8 -8
  82. package/dist/cjs/ion-alert.cjs.entry.js +38 -12
  83. package/dist/cjs/ion-app_8.cjs.entry.js +18 -18
  84. package/dist/cjs/ion-avatar_3.cjs.entry.js +3 -3
  85. package/dist/cjs/ion-back-button.cjs.entry.js +3 -3
  86. package/dist/cjs/ion-backdrop.cjs.entry.js +2 -2
  87. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +3 -3
  88. package/dist/cjs/ion-button_2.cjs.entry.js +4 -4
  89. package/dist/cjs/ion-card_5.cjs.entry.js +3 -3
  90. package/dist/cjs/ion-checkbox.cjs.entry.js +40 -9
  91. package/dist/cjs/ion-chip.cjs.entry.js +2 -2
  92. package/dist/cjs/ion-col_3.cjs.entry.js +3 -3
  93. package/dist/cjs/ion-datetime-button.cjs.entry.js +5 -5
  94. package/dist/cjs/ion-datetime_3.cjs.entry.js +12 -12
  95. package/dist/cjs/ion-fab_3.cjs.entry.js +3 -3
  96. package/dist/cjs/ion-img.cjs.entry.js +3 -3
  97. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +5 -5
  98. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +3 -3
  99. package/dist/cjs/ion-input.cjs.entry.js +25 -13
  100. package/dist/cjs/ion-item-option_3.cjs.entry.js +9 -9
  101. package/dist/cjs/ion-item_8.cjs.entry.js +14 -14
  102. package/dist/cjs/ion-loading.cjs.entry.js +9 -9
  103. package/dist/cjs/ion-menu_3.cjs.entry.js +14 -14
  104. package/dist/cjs/ion-modal.cjs.entry.js +275 -44
  105. package/dist/cjs/ion-nav_2.cjs.entry.js +9 -9
  106. package/dist/cjs/ion-picker-column-option.cjs.entry.js +5 -5
  107. package/dist/cjs/ion-picker-column.cjs.entry.js +3 -3
  108. package/dist/cjs/ion-picker.cjs.entry.js +2 -2
  109. package/dist/cjs/ion-popover.cjs.entry.js +10 -10
  110. package/dist/cjs/ion-progress-bar.cjs.entry.js +4 -4
  111. package/dist/cjs/ion-radio_2.cjs.entry.js +42 -7
  112. package/dist/cjs/ion-range.cjs.entry.js +31 -10
  113. package/dist/cjs/ion-refresher_2.cjs.entry.js +7 -7
  114. package/dist/cjs/ion-reorder_2.cjs.entry.js +7 -7
  115. package/dist/cjs/ion-ripple-effect.cjs.entry.js +3 -3
  116. package/dist/cjs/ion-route_4.cjs.entry.js +5 -5
  117. package/dist/cjs/ion-searchbar.cjs.entry.js +7 -7
  118. package/dist/cjs/ion-segment-content.cjs.entry.js +2 -2
  119. package/dist/cjs/ion-segment-view.cjs.entry.js +3 -3
  120. package/dist/cjs/ion-segment_2.cjs.entry.js +45 -13
  121. package/dist/cjs/ion-select-modal.cjs.entry.js +10 -10
  122. package/dist/cjs/ion-select_3.cjs.entry.js +93 -25
  123. package/dist/cjs/ion-spinner.cjs.entry.js +3 -3
  124. package/dist/cjs/ion-split-pane.cjs.entry.js +4 -4
  125. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +7 -7
  126. package/dist/cjs/ion-tab_2.cjs.entry.js +6 -6
  127. package/dist/cjs/ion-text.cjs.entry.js +4 -4
  128. package/dist/cjs/ion-textarea.cjs.entry.js +24 -12
  129. package/dist/cjs/ion-toast.cjs.entry.js +9 -9
  130. package/dist/cjs/ion-toggle.cjs.entry.js +41 -9
  131. package/dist/cjs/{ionic-global-d9a8bb5b.js → ionic-global-acb665ad.js} +3 -13
  132. package/dist/cjs/ionic.cjs.js +4 -4
  133. package/dist/cjs/{ios.transition-cf40433b.js → ios.transition-f970164c.js} +5 -5
  134. package/dist/cjs/loader.cjs.js +4 -4
  135. package/dist/cjs/{md.transition-ededf99f.js → md.transition-aa8820dd.js} +5 -5
  136. package/dist/cjs/{notch-controller-d69150f5.js → notch-controller-58d2e557.js} +1 -1
  137. package/dist/cjs/{overlays-aa669eb8.js → overlays-737576a2.js} +5 -5
  138. package/dist/cjs/{status-tap-37681226.js → status-tap-08d1ac81.js} +5 -4
  139. package/dist/cjs/{swipe-back-f38a434a.js → swipe-back-5c0003bd.js} +1 -1
  140. package/dist/collection/components/alert/alert.js +34 -4
  141. package/dist/collection/components/checkbox/checkbox.ios.css +52 -15
  142. package/dist/collection/components/checkbox/checkbox.js +90 -4
  143. package/dist/collection/components/checkbox/checkbox.md.css +52 -15
  144. package/dist/collection/components/input/input.ios.css +3 -2
  145. package/dist/collection/components/input/input.js +18 -4
  146. package/dist/collection/components/input/input.md.css +7 -2
  147. package/dist/collection/components/item-divider/item-divider.js +2 -2
  148. package/dist/collection/components/item-group/item-group.js +1 -1
  149. package/dist/collection/components/item-option/item-option.js +2 -2
  150. package/dist/collection/components/item-options/item-options.js +1 -1
  151. package/dist/collection/components/item-sliding/item-sliding.js +1 -1
  152. package/dist/collection/components/label/label.js +2 -2
  153. package/dist/collection/components/list-header/list-header.js +2 -2
  154. package/dist/collection/components/loading/loading.js +2 -2
  155. package/dist/collection/components/menu/menu.js +2 -2
  156. package/dist/collection/components/menu-button/menu-button.js +2 -2
  157. package/dist/collection/components/menu-toggle/menu-toggle.js +2 -2
  158. package/dist/collection/components/modal/animations/ios.enter.js +50 -4
  159. package/dist/collection/components/modal/animations/ios.leave.js +24 -2
  160. package/dist/collection/components/modal/animations/md.enter.js +52 -5
  161. package/dist/collection/components/modal/animations/md.leave.js +26 -3
  162. package/dist/collection/components/modal/animations/sheet.js +11 -2
  163. package/dist/collection/components/modal/gestures/sheet.js +87 -10
  164. package/dist/collection/components/modal/modal.ios.css +16 -0
  165. package/dist/collection/components/modal/modal.js +32 -7
  166. package/dist/collection/components/modal/modal.md.css +6 -0
  167. package/dist/collection/components/nav/nav.js +1 -1
  168. package/dist/collection/components/nav-link/nav-link.js +1 -1
  169. package/dist/collection/components/note/note.js +2 -2
  170. package/dist/collection/components/picker-column-option/picker-column-option.js +2 -2
  171. package/dist/collection/components/picker-legacy/picker.js +2 -2
  172. package/dist/collection/components/picker-legacy-column/picker-column.js +2 -2
  173. package/dist/collection/components/popover/popover.js +2 -2
  174. package/dist/collection/components/progress-bar/progress-bar.js +1 -1
  175. package/dist/collection/components/radio/radio.js +3 -3
  176. package/dist/collection/components/radio-group/radio-group.ios.css +205 -0
  177. package/dist/collection/components/radio-group/radio-group.js +72 -1
  178. package/dist/collection/components/radio-group/radio-group.md.css +205 -0
  179. package/dist/collection/components/range/range.js +25 -6
  180. package/dist/collection/components/refresher/refresher.js +1 -1
  181. package/dist/collection/components/refresher-content/refresher-content.js +1 -1
  182. package/dist/collection/components/reorder/reorder.js +1 -1
  183. package/dist/collection/components/reorder-group/reorder-group.js +1 -1
  184. package/dist/collection/components/ripple-effect/ripple-effect.js +1 -1
  185. package/dist/collection/components/router-link/router-link.js +2 -2
  186. package/dist/collection/components/router-outlet/router-outlet.js +1 -1
  187. package/dist/collection/components/row/row.js +1 -1
  188. package/dist/collection/components/searchbar/searchbar.js +4 -4
  189. package/dist/collection/components/segment/segment.js +3 -2
  190. package/dist/collection/components/segment-button/segment-button.js +40 -9
  191. package/dist/collection/components/segment-content/segment-content.js +1 -1
  192. package/dist/collection/components/segment-view/segment-view.js +2 -2
  193. package/dist/collection/components/select/select.ios.css +59 -0
  194. package/dist/collection/components/select/select.js +136 -13
  195. package/dist/collection/components/select/select.md.css +61 -0
  196. package/dist/collection/components/select-modal/select-modal.ios.css +186 -0
  197. package/dist/collection/components/select-modal/select-modal.js +2 -2
  198. package/dist/collection/components/select-option/select-option.js +1 -1
  199. package/dist/collection/components/select-popover/select-popover.js +1 -1
  200. package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
  201. package/dist/collection/components/spinner/spinner.js +1 -1
  202. package/dist/collection/components/split-pane/split-pane.js +2 -2
  203. package/dist/collection/components/tab/tab.js +2 -2
  204. package/dist/collection/components/tab-bar/tab-bar.js +2 -2
  205. package/dist/collection/components/tab-button/tab-button.js +2 -2
  206. package/dist/collection/components/tabs/tabs.js +1 -1
  207. package/dist/collection/components/text/text.js +2 -2
  208. package/dist/collection/components/textarea/textarea.ios.css +3 -2
  209. package/dist/collection/components/textarea/textarea.js +17 -3
  210. package/dist/collection/components/textarea/textarea.md.css +7 -2
  211. package/dist/collection/components/thumbnail/thumbnail.js +1 -1
  212. package/dist/collection/components/title/title.js +2 -2
  213. package/dist/collection/components/toast/toast.js +2 -2
  214. package/dist/collection/components/toggle/toggle.ios.css +52 -15
  215. package/dist/collection/components/toggle/toggle.js +91 -4
  216. package/dist/collection/components/toggle/toggle.md.css +52 -15
  217. package/dist/collection/components/toolbar/toolbar.js +6 -2
  218. package/dist/collection/global/ionic-global.js +1 -12
  219. package/dist/collection/utils/floating-point/index.js +5 -0
  220. package/dist/collection/utils/helpers.js +16 -28
  221. package/dist/collection/utils/logging/index.js +10 -3
  222. package/dist/collection/utils/platform.js +2 -1
  223. package/dist/collection/utils/test/platform.utils.js +1 -1
  224. package/dist/docs.json +383 -2
  225. package/dist/esm/{app-globals-5dbb61a5.js → app-globals-7b6cbf1a.js} +1 -1
  226. package/dist/esm/{button-active-f6503382.js → button-active-90f1dbc4.js} +1 -1
  227. package/dist/esm/{data-ae11fd43.js → data-174ad5e0.js} +1 -1
  228. package/dist/esm/{framework-delegate-63d1a679.js → framework-delegate-c7d92b77.js} +1 -1
  229. package/dist/esm/{hardware-back-button-06ef3c3e.js → hardware-back-button-864101a3.js} +2 -2
  230. package/dist/esm/{helpers-da915de8.js → helpers-e48b0397.js} +17 -29
  231. package/dist/esm/{index-28849c61.js → index-527b9e34.js} +1 -4
  232. package/dist/esm/{index-9b0d46f4.js → index-738d7504.js} +11 -3
  233. package/dist/esm/{index-79b30591.js → index-8222b29f.js} +1 -1
  234. package/dist/esm/{index-5cc724f3.js → index-933ca126.js} +2 -2
  235. package/dist/esm/{index-3ad7f18b.js → index-a313df53.js} +6 -6
  236. package/dist/esm/{index-24b48b06.js → index-c63afbe6.js} +4 -4
  237. package/dist/esm/index.js +11 -11
  238. package/dist/esm/{input-shims-0314bbe5.js → input-shims-3070628a.js} +5 -3
  239. package/dist/esm/{input.utils-09c71bc7.js → input.utils-926c04a8.js} +2 -2
  240. package/dist/esm/ion-accordion_2.entry.js +4 -4
  241. package/dist/esm/ion-action-sheet.entry.js +8 -8
  242. package/dist/esm/ion-alert.entry.js +38 -12
  243. package/dist/esm/ion-app_8.entry.js +18 -18
  244. package/dist/esm/ion-avatar_3.entry.js +3 -3
  245. package/dist/esm/ion-back-button.entry.js +3 -3
  246. package/dist/esm/ion-backdrop.entry.js +2 -2
  247. package/dist/esm/ion-breadcrumb_2.entry.js +3 -3
  248. package/dist/esm/ion-button_2.entry.js +4 -4
  249. package/dist/esm/ion-card_5.entry.js +3 -3
  250. package/dist/esm/ion-checkbox.entry.js +40 -9
  251. package/dist/esm/ion-chip.entry.js +2 -2
  252. package/dist/esm/ion-col_3.entry.js +3 -3
  253. package/dist/esm/ion-datetime-button.entry.js +5 -5
  254. package/dist/esm/ion-datetime_3.entry.js +12 -12
  255. package/dist/esm/ion-fab_3.entry.js +3 -3
  256. package/dist/esm/ion-img.entry.js +3 -3
  257. package/dist/esm/ion-infinite-scroll_2.entry.js +5 -5
  258. package/dist/esm/ion-input-password-toggle.entry.js +3 -3
  259. package/dist/esm/ion-input.entry.js +25 -13
  260. package/dist/esm/ion-item-option_3.entry.js +9 -9
  261. package/dist/esm/ion-item_8.entry.js +14 -14
  262. package/dist/esm/ion-loading.entry.js +9 -9
  263. package/dist/esm/ion-menu_3.entry.js +14 -14
  264. package/dist/esm/ion-modal.entry.js +275 -44
  265. package/dist/esm/ion-nav_2.entry.js +9 -9
  266. package/dist/esm/ion-picker-column-option.entry.js +5 -5
  267. package/dist/esm/ion-picker-column.entry.js +3 -3
  268. package/dist/esm/ion-picker.entry.js +2 -2
  269. package/dist/esm/ion-popover.entry.js +10 -10
  270. package/dist/esm/ion-progress-bar.entry.js +4 -4
  271. package/dist/esm/ion-radio_2.entry.js +42 -7
  272. package/dist/esm/ion-range.entry.js +31 -10
  273. package/dist/esm/ion-refresher_2.entry.js +7 -7
  274. package/dist/esm/ion-reorder_2.entry.js +7 -7
  275. package/dist/esm/ion-ripple-effect.entry.js +3 -3
  276. package/dist/esm/ion-route_4.entry.js +5 -5
  277. package/dist/esm/ion-searchbar.entry.js +7 -7
  278. package/dist/esm/ion-segment-content.entry.js +2 -2
  279. package/dist/esm/ion-segment-view.entry.js +3 -3
  280. package/dist/esm/ion-segment_2.entry.js +45 -13
  281. package/dist/esm/ion-select-modal.entry.js +10 -10
  282. package/dist/esm/ion-select_3.entry.js +93 -25
  283. package/dist/esm/ion-spinner.entry.js +3 -3
  284. package/dist/esm/ion-split-pane.entry.js +4 -4
  285. package/dist/esm/ion-tab-bar_2.entry.js +7 -7
  286. package/dist/esm/ion-tab_2.entry.js +6 -6
  287. package/dist/esm/ion-text.entry.js +4 -4
  288. package/dist/esm/ion-textarea.entry.js +24 -12
  289. package/dist/esm/ion-toast.entry.js +9 -9
  290. package/dist/esm/ion-toggle.entry.js +41 -9
  291. package/dist/esm/{ionic-global-c81d82ab.js → ionic-global-ca86cf32.js} +3 -13
  292. package/dist/esm/ionic.js +5 -5
  293. package/dist/esm/{ios.transition-4ee1a3af.js → ios.transition-5fe4d6c8.js} +5 -5
  294. package/dist/esm/loader.js +5 -5
  295. package/dist/esm/{md.transition-5106a0d2.js → md.transition-3d0d3730.js} +5 -5
  296. package/dist/esm/{notch-controller-55b09e11.js → notch-controller-381a5334.js} +1 -1
  297. package/dist/esm/{overlays-e7b9d6d9.js → overlays-7579a420.js} +5 -5
  298. package/dist/esm/{status-tap-f472b09f.js → status-tap-6367b913.js} +5 -4
  299. package/dist/esm/{swipe-back-b613d7db.js → swipe-back-326faa1c.js} +1 -1
  300. package/dist/esm-es5/app-globals-7b6cbf1a.js +4 -0
  301. package/dist/esm-es5/{button-active-f6503382.js → button-active-90f1dbc4.js} +1 -1
  302. package/dist/esm-es5/{data-ae11fd43.js → data-174ad5e0.js} +1 -1
  303. package/dist/esm-es5/{framework-delegate-63d1a679.js → framework-delegate-c7d92b77.js} +1 -1
  304. package/dist/esm-es5/{hardware-back-button-06ef3c3e.js → hardware-back-button-864101a3.js} +1 -1
  305. package/dist/esm-es5/helpers-e48b0397.js +4 -0
  306. package/dist/esm-es5/index-527b9e34.js +5 -0
  307. package/dist/esm-es5/index-738d7504.js +4 -0
  308. package/dist/esm-es5/{index-79b30591.js → index-8222b29f.js} +1 -1
  309. package/dist/esm-es5/{index-5cc724f3.js → index-933ca126.js} +1 -1
  310. package/dist/esm-es5/{index-3ad7f18b.js → index-a313df53.js} +1 -1
  311. package/dist/esm-es5/{index-24b48b06.js → index-c63afbe6.js} +1 -1
  312. package/dist/esm-es5/index.js +1 -1
  313. package/dist/esm-es5/input-shims-3070628a.js +4 -0
  314. package/dist/esm-es5/{input.utils-09c71bc7.js → input.utils-926c04a8.js} +1 -1
  315. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  316. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  317. package/dist/esm-es5/ion-alert.entry.js +1 -1
  318. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  319. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  320. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  321. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  322. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  323. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  324. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  325. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  326. package/dist/esm-es5/ion-chip.entry.js +1 -1
  327. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  328. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  329. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  330. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  331. package/dist/esm-es5/ion-img.entry.js +1 -1
  332. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  333. package/dist/esm-es5/ion-input-password-toggle.entry.js +1 -1
  334. package/dist/esm-es5/ion-input.entry.js +1 -1
  335. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  336. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  337. package/dist/esm-es5/ion-loading.entry.js +1 -1
  338. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  339. package/dist/esm-es5/ion-modal.entry.js +1 -1
  340. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  341. package/dist/esm-es5/ion-picker-column-option.entry.js +1 -1
  342. package/dist/esm-es5/ion-picker-column.entry.js +1 -1
  343. package/dist/esm-es5/ion-picker.entry.js +1 -1
  344. package/dist/esm-es5/ion-popover.entry.js +1 -1
  345. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  346. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  347. package/dist/esm-es5/ion-range.entry.js +1 -1
  348. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  349. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  350. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  351. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  352. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  353. package/dist/esm-es5/ion-segment-content.entry.js +1 -1
  354. package/dist/esm-es5/ion-segment-view.entry.js +1 -1
  355. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  356. package/dist/esm-es5/ion-select-modal.entry.js +1 -1
  357. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  358. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  359. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  360. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  361. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  362. package/dist/esm-es5/ion-text.entry.js +1 -1
  363. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  364. package/dist/esm-es5/ion-toast.entry.js +1 -1
  365. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  366. package/dist/esm-es5/ionic-global-ca86cf32.js +4 -0
  367. package/dist/esm-es5/ionic.js +1 -1
  368. package/dist/esm-es5/{ios.transition-4ee1a3af.js → ios.transition-5fe4d6c8.js} +1 -1
  369. package/dist/esm-es5/loader.js +1 -1
  370. package/dist/esm-es5/md.transition-3d0d3730.js +4 -0
  371. package/dist/esm-es5/{notch-controller-55b09e11.js → notch-controller-381a5334.js} +1 -1
  372. package/dist/esm-es5/{overlays-e7b9d6d9.js → overlays-7579a420.js} +1 -1
  373. package/dist/esm-es5/status-tap-6367b913.js +4 -0
  374. package/dist/esm-es5/{swipe-back-b613d7db.js → swipe-back-326faa1c.js} +1 -1
  375. package/dist/html.html-data.json +48 -0
  376. package/dist/ionic/index.esm.js +1 -1
  377. package/dist/ionic/ionic.esm.js +1 -1
  378. package/dist/ionic/ionic.js +1 -1
  379. package/dist/ionic/{p-58d5df0c.system.entry.js → p-023e8017.system.entry.js} +1 -1
  380. package/dist/ionic/{p-f9a53abb.system.js → p-042d5353.system.js} +1 -1
  381. package/dist/ionic/p-060e4551.js +4 -0
  382. package/dist/ionic/p-0749768d.entry.js +4 -0
  383. package/dist/ionic/p-094c82d7.entry.js +4 -0
  384. package/dist/ionic/{p-7458862e.system.entry.js → p-0adb6909.system.entry.js} +1 -1
  385. package/dist/ionic/{p-508d024a.entry.js → p-0be8a0b5.entry.js} +1 -1
  386. package/dist/ionic/{p-2507278c.system.entry.js → p-0bedc891.system.entry.js} +2 -2
  387. package/dist/ionic/{p-63b0abde.system.entry.js → p-0c9b8240.system.entry.js} +1 -1
  388. package/dist/ionic/p-0ec5b7cf.system.js +4 -0
  389. package/dist/ionic/{p-7ed1657c.system.entry.js → p-1164ff6b.system.entry.js} +1 -1
  390. package/dist/ionic/p-13886789.entry.js +4 -0
  391. package/dist/ionic/p-143ff664.system.entry.js +4 -0
  392. package/dist/ionic/p-18f9b6d5.entry.js +4 -0
  393. package/dist/ionic/{p-62af944c.entry.js → p-19c32a76.entry.js} +1 -1
  394. package/dist/ionic/{p-e4f69534.system.entry.js → p-1a9613bf.system.entry.js} +1 -1
  395. package/dist/ionic/{p-f687573e.system.js → p-1bf5ec17.system.js} +1 -1
  396. package/dist/ionic/{p-5fce0c0b.system.entry.js → p-1c1d781d.system.entry.js} +1 -1
  397. package/dist/ionic/p-1d2844a5.system.entry.js +4 -0
  398. package/dist/ionic/p-1d98a7f1.entry.js +4 -0
  399. package/dist/ionic/p-1f837356.entry.js +4 -0
  400. package/dist/ionic/p-2027221d.js +4 -0
  401. package/dist/ionic/{p-69066a53.js → p-21891ead.js} +1 -1
  402. package/dist/ionic/{p-d743e981.js → p-22bc235f.js} +1 -1
  403. package/dist/ionic/{p-a4565eb5.system.js → p-24ae7b33.system.js} +1 -1
  404. package/dist/ionic/{p-184fbc9e.system.js → p-294271c7.system.js} +1 -1
  405. package/dist/ionic/p-297d6806.system.js +4 -0
  406. package/dist/ionic/p-29a5b4e4.entry.js +4 -0
  407. package/dist/ionic/{p-01186920.system.entry.js → p-2ab4a324.system.entry.js} +1 -1
  408. package/dist/ionic/{p-ffd131f9.system.entry.js → p-2b59470f.system.entry.js} +1 -1
  409. package/dist/ionic/{p-9e33104d.entry.js → p-2ee9a2c6.entry.js} +1 -1
  410. package/dist/ionic/p-2fa5a4b1.entry.js +4 -0
  411. package/dist/ionic/{p-e7ed4a7f.system.js → p-3479f51b.system.js} +1 -1
  412. package/dist/ionic/{p-afecb188.entry.js → p-35f14792.entry.js} +1 -1
  413. package/dist/ionic/{p-7ddc46c3.system.entry.js → p-37a438ad.system.entry.js} +2 -2
  414. package/dist/ionic/{p-937a7e21.entry.js → p-3af7b907.entry.js} +1 -1
  415. package/dist/ionic/{p-c449820c.system.js → p-3bd5fedc.system.js} +1 -1
  416. package/dist/ionic/{p-d18ab582.system.entry.js → p-3be7cdeb.system.entry.js} +2 -2
  417. package/dist/ionic/{p-a15ddedb.system.js → p-3e86b4fa.system.js} +1 -1
  418. package/dist/ionic/p-3f4327f7.js +4 -0
  419. package/dist/ionic/{p-982315a6.entry.js → p-42f6e75c.entry.js} +1 -1
  420. package/dist/ionic/{p-5823babc.system.entry.js → p-4470f87b.system.entry.js} +2 -2
  421. package/dist/ionic/p-4493c1ac.entry.js +4 -0
  422. package/dist/ionic/{p-8635f5e6.system.js → p-44e168f3.system.js} +1 -1
  423. package/dist/ionic/{p-c29f8157.system.entry.js → p-4630688e.system.entry.js} +1 -1
  424. package/dist/ionic/{p-98231c01.system.entry.js → p-472c7e08.system.entry.js} +1 -1
  425. package/dist/ionic/{p-2e46590d.system.entry.js → p-491de063.system.entry.js} +1 -1
  426. package/dist/ionic/{p-985a7e17.system.entry.js → p-49cb79a1.system.entry.js} +1 -1
  427. package/dist/ionic/{p-d6841eac.js → p-4c44d04c.js} +1 -1
  428. package/dist/ionic/p-4c94580e.js +4 -0
  429. package/dist/ionic/{p-1e010627.system.entry.js → p-4d0190ad.system.entry.js} +2 -2
  430. package/dist/ionic/{p-bb0db172.entry.js → p-50f38461.entry.js} +1 -1
  431. package/dist/ionic/{p-0c06e09b.system.js → p-51c363e7.system.js} +1 -1
  432. package/dist/ionic/{p-f1acf541.system.entry.js → p-524ad57e.system.entry.js} +1 -1
  433. package/dist/ionic/{p-a61cba41.entry.js → p-54893ae3.entry.js} +1 -1
  434. package/dist/ionic/p-54e9620f.js +4 -0
  435. package/dist/ionic/p-58c482af.entry.js +4 -0
  436. package/dist/ionic/p-597ff9af.js +4 -0
  437. package/dist/ionic/{p-5da94421.system.js → p-5eb6f582.system.js} +1 -1
  438. package/dist/ionic/{p-15e76dd1.entry.js → p-5f4ff20a.entry.js} +1 -1
  439. package/dist/ionic/{p-fbf284c7.entry.js → p-5f8cd560.entry.js} +1 -1
  440. package/dist/ionic/p-606887b7.system.entry.js +4 -0
  441. package/dist/ionic/{p-bdad26e3.entry.js → p-61e794fb.entry.js} +1 -1
  442. package/dist/ionic/p-66a5d6a8.js +5 -0
  443. package/dist/ionic/p-67163d4a.entry.js +4 -0
  444. package/dist/ionic/p-6797c66e.system.js +4 -0
  445. package/dist/ionic/p-6bb846d3.entry.js +4 -0
  446. package/dist/ionic/{p-d7aa6b00.entry.js → p-6e24cf82.entry.js} +1 -1
  447. package/dist/ionic/p-72e6a9c6.entry.js +4 -0
  448. package/dist/ionic/{p-5b932840.entry.js → p-747f9517.entry.js} +1 -1
  449. package/dist/ionic/{p-9ea607bd.system.js → p-77991411.system.js} +2 -2
  450. package/dist/ionic/{p-9f3008d4.system.js → p-7cc33a9a.system.js} +1 -1
  451. package/dist/ionic/{p-f3102647.system.entry.js → p-7e3b5638.system.entry.js} +1 -1
  452. package/dist/ionic/p-7f39653f.entry.js +4 -0
  453. package/dist/ionic/{p-98ff6b32.entry.js → p-7ff4f502.entry.js} +1 -1
  454. package/dist/ionic/p-81474833.system.entry.js +4 -0
  455. package/dist/ionic/{p-4439fc2a.entry.js → p-838cc359.entry.js} +1 -1
  456. package/dist/ionic/{p-52d7a191.entry.js → p-85f6070f.entry.js} +1 -1
  457. package/dist/ionic/{p-e4ee80be.system.entry.js → p-888d383b.system.entry.js} +1 -1
  458. package/dist/ionic/{p-da074ff7.entry.js → p-8b1c1fd7.entry.js} +1 -1
  459. package/dist/ionic/p-8deac7df.system.entry.js +4 -0
  460. package/dist/ionic/p-8fc426e2.entry.js +4 -0
  461. package/dist/ionic/p-959cf042.system.entry.js +4 -0
  462. package/dist/ionic/{p-17a9ca63.system.entry.js → p-96450929.system.entry.js} +2 -2
  463. package/dist/ionic/{p-19ea7bff.system.js → p-9a2ff5ea.system.js} +1 -1
  464. package/dist/ionic/p-9a5420dd.js +4 -0
  465. package/dist/ionic/{p-ecceeb90.js → p-9af7f110.js} +1 -1
  466. package/dist/ionic/{p-6d32975a.entry.js → p-9b069739.entry.js} +1 -1
  467. package/dist/ionic/{p-ca065903.system.entry.js → p-9df36075.system.entry.js} +1 -1
  468. package/dist/ionic/p-9e51f822.js +4 -0
  469. package/dist/ionic/{p-372ae7f4.system.js → p-a4866e3e.system.js} +1 -1
  470. package/dist/ionic/{p-95775830.entry.js → p-a520973b.entry.js} +1 -1
  471. package/dist/ionic/{p-17474161.system.js → p-a587b2ae.system.js} +1 -1
  472. package/dist/ionic/{p-cac0e0b3.system.entry.js → p-a63b345e.system.entry.js} +1 -1
  473. package/dist/ionic/{p-3c8e5c23.system.js → p-a6625de8.system.js} +1 -1
  474. package/dist/ionic/{p-6416c34c.system.entry.js → p-a6df5168.system.entry.js} +1 -1
  475. package/dist/ionic/p-a9f2c0a7.entry.js +4 -0
  476. package/dist/ionic/{p-73dc4950.entry.js → p-ab7337e1.entry.js} +1 -1
  477. package/dist/ionic/{p-ed75fcfb.system.entry.js → p-ac58d726.system.entry.js} +1 -1
  478. package/dist/ionic/p-ace2d2be.entry.js +4 -0
  479. package/dist/ionic/{p-efaffe74.entry.js → p-ada878ce.entry.js} +1 -1
  480. package/dist/ionic/p-b055d618.entry.js +4 -0
  481. package/dist/ionic/{p-2799c6d3.system.entry.js → p-b2296998.system.entry.js} +1 -1
  482. package/dist/ionic/{p-fca6ef5f.system.entry.js → p-b2ee0628.system.entry.js} +1 -1
  483. package/dist/ionic/{p-9fa07aec.entry.js → p-b6174297.entry.js} +1 -1
  484. package/dist/ionic/{p-c41ac815.entry.js → p-b85d199c.entry.js} +1 -1
  485. package/dist/ionic/p-b9ea58ef.js +4 -0
  486. package/dist/ionic/{p-14e159ea.system.entry.js → p-b9eb1465.system.entry.js} +1 -1
  487. package/dist/ionic/p-b9f2e353.entry.js +4 -0
  488. package/dist/ionic/p-bbc6db8c.entry.js +4 -0
  489. package/dist/ionic/p-bdd6102f.system.entry.js +4 -0
  490. package/dist/ionic/p-bf64af90.system.js +4 -0
  491. package/dist/ionic/p-bf77d6fa.entry.js +4 -0
  492. package/dist/ionic/{p-33a8a71b.entry.js → p-c005cc37.entry.js} +1 -1
  493. package/dist/ionic/{p-45693d7e.entry.js → p-c25c0ba4.entry.js} +1 -1
  494. package/dist/ionic/p-c5b5f44a.entry.js +4 -0
  495. package/dist/ionic/{p-2172893e.system.entry.js → p-c6a20407.system.entry.js} +1 -1
  496. package/dist/ionic/{p-1046866e.system.entry.js → p-c8331397.system.entry.js} +1 -1
  497. package/dist/ionic/{p-34b11c24.js → p-c8402249.js} +1 -1
  498. package/dist/ionic/p-c8bf9ba7.entry.js +4 -0
  499. package/dist/ionic/{p-72812e99.js → p-ceaea4ce.js} +1 -1
  500. package/dist/ionic/{p-1e67b266.system.entry.js → p-d37fdc68.system.entry.js} +1 -1
  501. package/dist/ionic/{p-0aa833fb.system.js → p-d7032956.system.js} +1 -1
  502. package/dist/ionic/p-d8c9d5ac.system.entry.js +4 -0
  503. package/dist/ionic/{p-2b838f86.system.entry.js → p-daf1e8ec.system.entry.js} +1 -1
  504. package/dist/ionic/{p-2bd0ae94.system.entry.js → p-def7a8bd.system.entry.js} +1 -1
  505. package/dist/ionic/p-e00b72ce.js +4 -0
  506. package/dist/ionic/{p-96cc4814.js → p-e0a05506.js} +1 -1
  507. package/dist/ionic/p-e0c0218f.system.entry.js +4 -0
  508. package/dist/ionic/{p-6499df44.system.entry.js → p-e0c43e11.system.entry.js} +1 -1
  509. package/dist/ionic/{p-2abae1cc.system.entry.js → p-e4683bfd.system.entry.js} +1 -1
  510. package/dist/ionic/{p-567de071.system.entry.js → p-e5708e5d.system.entry.js} +1 -1
  511. package/dist/ionic/{p-12a722b8.system.entry.js → p-e5c27d9f.system.entry.js} +1 -1
  512. package/dist/ionic/{p-06e58c4e.js → p-e7309bfa.js} +1 -1
  513. package/dist/ionic/p-ed768b77.entry.js +4 -0
  514. package/dist/ionic/p-eec4b772.entry.js +4 -0
  515. package/dist/ionic/p-eeee3990.system.entry.js +4 -0
  516. package/dist/ionic/p-efa0f3f5.entry.js +4 -0
  517. package/dist/ionic/p-f02e9382.system.entry.js +4 -0
  518. package/dist/ionic/p-f11a9436.system.js +5 -0
  519. package/dist/ionic/p-f201b53a.system.js +4 -0
  520. package/dist/ionic/{p-3cc276f4.js → p-f554845e.js} +1 -1
  521. package/dist/ionic/{p-424eb140.system.entry.js → p-f6bb9be7.system.entry.js} +1 -1
  522. package/dist/ionic/{p-d60342e3.js → p-f7ce606e.js} +1 -1
  523. package/dist/ionic/{p-1fe02220.system.entry.js → p-f94b2f2f.system.entry.js} +1 -1
  524. package/dist/ionic/{p-797eeea8.system.entry.js → p-ff4a1ba0.system.entry.js} +1 -1
  525. package/dist/types/components/checkbox/checkbox.d.ts +25 -0
  526. package/dist/types/components/input/input.d.ts +8 -0
  527. package/dist/types/components/modal/animations/sheet.d.ts +1 -0
  528. package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
  529. package/dist/types/components/modal/modal-interface.d.ts +1 -0
  530. package/dist/types/components/modal/modal.d.ts +14 -0
  531. package/dist/types/components/radio-group/radio-group.d.ts +15 -0
  532. package/dist/types/components/range/range.d.ts +3 -2
  533. package/dist/types/components/segment-button/segment-button.d.ts +2 -1
  534. package/dist/types/components/select/select.d.ts +29 -0
  535. package/dist/types/components/textarea/textarea.d.ts +8 -0
  536. package/dist/types/components/toggle/toggle.d.ts +25 -0
  537. package/dist/types/components/toolbar/toolbar.d.ts +4 -0
  538. package/dist/types/components.d.ts +96 -0
  539. package/dist/types/utils/config.d.ts +9 -3
  540. package/dist/types/utils/helpers.d.ts +5 -0
  541. package/dist/types/utils/logging/index.d.ts +13 -1
  542. package/dist/types/utils/native/capacitor.d.ts +7 -1
  543. package/dist/types/utils/test/platform.utils.d.ts +1 -1
  544. package/hydrate/index.js +723 -205
  545. package/hydrate/index.mjs +723 -205
  546. package/package.json +8 -8
  547. package/dist/esm-es5/app-globals-5dbb61a5.js +0 -4
  548. package/dist/esm-es5/helpers-da915de8.js +0 -4
  549. package/dist/esm-es5/index-28849c61.js +0 -5
  550. package/dist/esm-es5/index-9b0d46f4.js +0 -4
  551. package/dist/esm-es5/input-shims-0314bbe5.js +0 -4
  552. package/dist/esm-es5/ionic-global-c81d82ab.js +0 -4
  553. package/dist/esm-es5/md.transition-5106a0d2.js +0 -4
  554. package/dist/esm-es5/status-tap-f472b09f.js +0 -4
  555. package/dist/ionic/p-0303d0f8.js +0 -4
  556. package/dist/ionic/p-04909654.entry.js +0 -4
  557. package/dist/ionic/p-0574e87e.js +0 -4
  558. package/dist/ionic/p-06fee233.js +0 -4
  559. package/dist/ionic/p-081a4ce4.entry.js +0 -4
  560. package/dist/ionic/p-12c45a7c.entry.js +0 -4
  561. package/dist/ionic/p-14be4015.entry.js +0 -4
  562. package/dist/ionic/p-16188af7.entry.js +0 -4
  563. package/dist/ionic/p-16799667.system.entry.js +0 -4
  564. package/dist/ionic/p-16bfb979.system.entry.js +0 -4
  565. package/dist/ionic/p-19ec4f42.entry.js +0 -4
  566. package/dist/ionic/p-21e5e7e4.js +0 -4
  567. package/dist/ionic/p-25180df3.system.js +0 -5
  568. package/dist/ionic/p-2690b1de.js +0 -4
  569. package/dist/ionic/p-2b9b78c7.entry.js +0 -4
  570. package/dist/ionic/p-2fc0dafe.entry.js +0 -4
  571. package/dist/ionic/p-322c5fb4.system.js +0 -4
  572. package/dist/ionic/p-37cb43bd.system.entry.js +0 -4
  573. package/dist/ionic/p-3ad285e3.system.js +0 -4
  574. package/dist/ionic/p-404aede0.system.entry.js +0 -4
  575. package/dist/ionic/p-49a0e74c.entry.js +0 -4
  576. package/dist/ionic/p-4ec778aa.entry.js +0 -4
  577. package/dist/ionic/p-51796b2d.entry.js +0 -4
  578. package/dist/ionic/p-5ab1b709.entry.js +0 -4
  579. package/dist/ionic/p-626fd66d.system.entry.js +0 -4
  580. package/dist/ionic/p-69666e8a.system.entry.js +0 -4
  581. package/dist/ionic/p-6b280620.entry.js +0 -4
  582. package/dist/ionic/p-6d6cedc5.entry.js +0 -4
  583. package/dist/ionic/p-7b9a2b23.entry.js +0 -4
  584. package/dist/ionic/p-88e63c7d.js +0 -4
  585. package/dist/ionic/p-908d6080.entry.js +0 -4
  586. package/dist/ionic/p-942b5e13.entry.js +0 -4
  587. package/dist/ionic/p-9df2c6fb.entry.js +0 -4
  588. package/dist/ionic/p-a43467d8.entry.js +0 -4
  589. package/dist/ionic/p-a69b9fc5.system.js +0 -4
  590. package/dist/ionic/p-adbc4bdf.entry.js +0 -4
  591. package/dist/ionic/p-b2272f51.system.entry.js +0 -4
  592. package/dist/ionic/p-b335ffed.system.entry.js +0 -4
  593. package/dist/ionic/p-b51e4004.js +0 -4
  594. package/dist/ionic/p-b79ba17c.entry.js +0 -4
  595. package/dist/ionic/p-b7af48c0.js +0 -4
  596. package/dist/ionic/p-b82d4cab.js +0 -4
  597. package/dist/ionic/p-b9d7015f.entry.js +0 -4
  598. package/dist/ionic/p-bc36ad98.system.entry.js +0 -4
  599. package/dist/ionic/p-c2b74d92.system.entry.js +0 -4
  600. package/dist/ionic/p-c9f3a539.entry.js +0 -4
  601. package/dist/ionic/p-d836d43e.js +0 -5
  602. package/dist/ionic/p-de930745.entry.js +0 -4
  603. package/dist/ionic/p-dfb78785.system.js +0 -4
  604. package/dist/ionic/p-e563a35c.entry.js +0 -4
  605. package/dist/ionic/p-e6635685.js +0 -4
  606. package/dist/ionic/p-ebf042e0.system.entry.js +0 -4
  607. package/dist/ionic/p-fec61c32.entry.js +0 -4
  608. package/dist/ionic/p-ff4b7e40.system.js +0 -4
@@ -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: 'aea072a5005e3f1f309f0d1ae5be5ee19869b035', class: getIonMode(this) }, h("slot", { key: '2a481c2126ac6ca65f0a1bbd07c2d3365409cb78' })));
8
+ return (h(Host, { key: 'a690022e2abdce6946d24264574e4aa0886a8ea5', class: getIonMode(this) }, h("slot", { key: 'd1a0e831dd1dbfe7877d3ad01d0a3045a5fb29e3' })));
9
9
  }
10
10
  static get is() { return "ion-row"; }
11
11
  static get encapsulation() { return "shadow"; }
@@ -378,8 +378,8 @@ export class Searchbar {
378
378
  const clearIcon = this.clearIcon || (mode === 'ios' ? closeCircle : closeSharp);
379
379
  const searchIcon = this.searchIcon || (mode === 'ios' ? searchOutline : searchSharp);
380
380
  const shouldShowCancelButton = this.shouldShowCancelButton();
381
- const cancelButton = this.showCancelButton !== 'never' && (h("button", { key: '0ef595eb1628928d4c7fdb166b8e41768700fa6e', "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: 'ea2c9b36d991acf5af7662059cb6b045f683ca94', "aria-hidden": "true" }, mode === 'md' ? (h("ion-icon", { "aria-hidden": "true", mode: mode, icon: this.cancelButtonIcon, lazy: false })) : (cancelButtonText))));
382
- return (h(Host, { key: '17d57ece5852d03047e4d53ddad6c9d88a432a00', role: "search", "aria-disabled": this.disabled ? 'true' : null, class: createColorClasses(this.color, {
381
+ const cancelButton = this.showCancelButton !== 'never' && (h("button", { key: '989f3e84c472ada6e66dd9b249d0d268bf17ce26', "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: '7d335d4fde33822dc79d26b748ba2e98db7494bb', "aria-hidden": "true" }, mode === 'md' ? (h("ion-icon", { "aria-hidden": "true", mode: mode, icon: this.cancelButtonIcon, lazy: false })) : (cancelButtonText))));
382
+ return (h(Host, { key: 'd1a1972725e949fb102c91487aaa7b9d10c2d718', role: "search", "aria-disabled": this.disabled ? 'true' : null, class: createColorClasses(this.color, {
383
383
  [mode]: true,
384
384
  'searchbar-animated': animated,
385
385
  'searchbar-disabled': this.disabled,
@@ -389,14 +389,14 @@ export class Searchbar {
389
389
  'searchbar-has-focus': this.focused,
390
390
  'searchbar-should-show-clear': this.shouldShowClearButton(),
391
391
  'searchbar-should-show-cancel': this.shouldShowCancelButton(),
392
- }) }, h("div", { key: 'f67c2124e70c24eef0a271516e9c4bdaf7e98ceb', class: "searchbar-input-container" }, h("input", Object.assign({ key: '8c7f7ccc6809cca30ccc8c4e98e349d3f916321d', "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: 'f06524d3163b3883bbde937862aa1e0e8f49f6e1', "aria-hidden": "true", mode: mode, icon: searchIcon, lazy: false, class: "searchbar-search-icon" }), h("button", { key: '9f7ba2bec93412ecb674b197be13db1de308bb57', "aria-label": "reset", type: "button", "no-blur": true, class: "searchbar-clear-button", onPointerDown: (ev) => {
392
+ }) }, h("div", { key: 'add53640b2994cb6b2bf02792dafe51aba6b1684', class: "searchbar-input-container" }, h("input", Object.assign({ key: '160cc36459a4a652e7f41ccd14dcdc782278779e', "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: '8825fd13af0d2dea451ccc0e00ae7b5021dc01c4', "aria-hidden": "true", mode: mode, icon: searchIcon, lazy: false, class: "searchbar-search-icon" }), h("button", { key: '8a7b56da278b9ca5c4f5a4ee9c01924fd5ae29d8', "aria-label": "reset", type: "button", "no-blur": true, class: "searchbar-clear-button", onPointerDown: (ev) => {
393
393
  /**
394
394
  * This prevents mobile browsers from
395
395
  * blurring the input when the clear
396
396
  * button is activated.
397
397
  */
398
398
  ev.preventDefault();
399
- }, onClick: () => this.onClearInput(true) }, h("ion-icon", { key: '19fc3dbc722acc47ff7eb3c94ad4de8aed38dff4', "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: '24c55274516ab012d8c25f03525c6cdb9409e52f', "aria-hidden": "true", mode: mode, icon: clearIcon, lazy: false, class: "searchbar-clear-icon" }))), mode === 'ios' && cancelButton));
400
400
  }
401
401
  static get is() { return "ion-searchbar"; }
402
402
  static get encapsulation() { return "scoped"; }
@@ -149,6 +149,7 @@ export class Segment {
149
149
  this.emitStyle();
150
150
  }
151
151
  async componentDidLoad() {
152
+ this.segmentViewEl = this.getSegmentView();
152
153
  this.setCheckedClasses();
153
154
  /**
154
155
  * We need to wait for the buttons to all be rendered
@@ -529,14 +530,14 @@ export class Segment {
529
530
  }
530
531
  render() {
531
532
  const mode = getIonMode(this);
532
- return (h(Host, { key: '66bd7a565ba73540b3bbe56dd23b95e59bcef9bc', role: "tablist", onClick: this.onClick, class: createColorClasses(this.color, {
533
+ return (h(Host, { key: 'a64e39352050b516f7dc82ce95a4bcff8431d1d0', role: "tablist", onClick: this.onClick, class: createColorClasses(this.color, {
533
534
  [mode]: true,
534
535
  'in-toolbar': hostContext('ion-toolbar', this.el),
535
536
  'in-toolbar-color': hostContext('ion-toolbar[color]', this.el),
536
537
  'segment-activated': this.activated,
537
538
  'segment-disabled': this.disabled,
538
539
  'segment-scrollable': this.scrollable,
539
- }) }, h("slot", { key: '782c521b1a33729b8eab1c4b879bc3f2ff48ae1b', onSlotchange: this.onSlottedItemsChange })));
540
+ }) }, h("slot", { key: 'bb3f3ec30e59e0461fa620d8961ab730cc802a4e', onSlotchange: this.onSlottedItemsChange })));
540
541
  }
541
542
  static get is() { return "ion-segment"; }
542
543
  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 { addEventListener, removeEventListener, inheritAttributes } from "../../utils/helpers";
5
+ import { addEventListener, removeEventListener, inheritAttributes, getNextSiblingOfType } from "../../utils/helpers";
6
6
  import { hostContext } from "../../utils/theme";
7
7
  import { getIonMode } from "../../global/ionic-global";
8
8
  let ids = 0;
@@ -39,7 +39,35 @@ export class SegmentButton {
39
39
  valueChanged() {
40
40
  this.updateState();
41
41
  }
42
- connectedCallback() {
42
+ waitForSegmentContent(ionSegment, contentId) {
43
+ return new Promise((resolve, reject) => {
44
+ let timeoutId = undefined;
45
+ let animationFrameId;
46
+ const check = () => {
47
+ if (!ionSegment) {
48
+ reject(new Error(`Segment not found when looking for Segment Content`));
49
+ return;
50
+ }
51
+ const segmentView = getNextSiblingOfType(ionSegment); // Skip the text nodes
52
+ const segmentContent = segmentView === null || segmentView === void 0 ? void 0 : segmentView.querySelector(`ion-segment-content[id="${contentId}"]`);
53
+ if (segmentContent && timeoutId) {
54
+ clearTimeout(timeoutId); // Clear the timeout if the segmentContent is found
55
+ cancelAnimationFrame(animationFrameId);
56
+ resolve(segmentContent);
57
+ }
58
+ else {
59
+ animationFrameId = requestAnimationFrame(check); // Keep checking on the next animation frame
60
+ }
61
+ };
62
+ check();
63
+ // Set a timeout to reject the promise
64
+ timeoutId = setTimeout(() => {
65
+ cancelAnimationFrame(animationFrameId);
66
+ reject(new Error(`Unable to find Segment Content with id="${contentId} within 1000 ms`));
67
+ }, 1000);
68
+ });
69
+ }
70
+ async connectedCallback() {
43
71
  const segmentEl = (this.segmentEl = this.el.closest('ion-segment'));
44
72
  if (segmentEl) {
45
73
  this.updateState();
@@ -49,11 +77,14 @@ export class SegmentButton {
49
77
  // Return if there is no contentId defined
50
78
  if (!this.contentId)
51
79
  return;
52
- // Attempt to find the Segment Content by its contentId
53
- const segmentContent = document.getElementById(this.contentId);
54
- // If no associated Segment Content exists, log an error and return
55
- if (!segmentContent) {
56
- console.error(`Segment Button: Unable to find Segment Content with id="${this.contentId}".`);
80
+ let segmentContent;
81
+ try {
82
+ // Attempt to find the Segment Content by its contentId
83
+ segmentContent = await this.waitForSegmentContent(segmentEl, this.contentId);
84
+ }
85
+ catch (error) {
86
+ // If no associated Segment Content exists, log an error and return
87
+ console.error('Segment Button: ', error.message);
57
88
  return;
58
89
  }
59
90
  // Ensure the found element is a valid ION-SEGMENT-CONTENT
@@ -99,7 +130,7 @@ export class SegmentButton {
99
130
  const { checked, type, disabled, hasIcon, hasLabel, layout, segmentEl } = this;
100
131
  const mode = getIonMode(this);
101
132
  const hasSegmentColor = () => (segmentEl === null || segmentEl === void 0 ? void 0 : segmentEl.color) !== undefined;
102
- return (h(Host, { key: 'd50a5d5e2f6206e8523598f258d8217d2903f69b', class: {
133
+ return (h(Host, { key: 'e1e582b9a142cb07043ba08f02ad25f5a1fa5690', class: {
103
134
  [mode]: true,
104
135
  'in-toolbar': hostContext('ion-toolbar', this.el),
105
136
  'in-toolbar-color': hostContext('ion-toolbar[color]', this.el),
@@ -115,7 +146,7 @@ export class SegmentButton {
115
146
  'ion-activatable': true,
116
147
  'ion-activatable-instant': true,
117
148
  'ion-focusable': true,
118
- } }, h("button", Object.assign({ key: 'b4f6f145286ba8ab79669e11035b906daa85ae7e', "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: '67965996c9ffe70553875e00d3da0ae5b2b1d814', class: "button-inner" }, h("slot", { key: '5087988fe45a8fdf388ec44c395d0b745b207806' })), mode === 'md' && h("ion-ripple-effect", { key: 'b24858de0750bbc769b3183fac0077dfe817ba27' })), h("div", { key: '97b4359432acd1c9da0816360cd1df9472e183f7', part: "indicator", class: "segment-button-indicator segment-button-indicator-animated" }, h("div", { key: '0561738ea15b0986f4ed3d8276d5e6f2d13f7e51', part: "indicator-background", class: "segment-button-indicator-background" }))));
149
+ } }, h("button", Object.assign({ key: '8621a028894fb382854ff28779d0cadd3d9035f7', "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: '5c55858dbfb50734fb02d24091ebac3e0d05259f', class: "button-inner" }, h("slot", { key: '1f3bb8d76a1039ad648e202c650db06dfca88f79' })), mode === 'md' && h("ion-ripple-effect", { key: 'bda74b25bfdd431a8a36f0ee727b9184e9074321' })), h("div", { key: 'ff11369e921d6d0a540c75c37f692a3853e903f7', part: "indicator", class: "segment-button-indicator segment-button-indicator-animated" }, h("div", { key: '74ec4ca69331ed3f155fd8a8a356545941887df1', part: "indicator-background", class: "segment-button-indicator-background" }))));
119
150
  }
120
151
  static get is() { return "ion-segment-button"; }
121
152
  static get encapsulation() { return "shadow"; }
@@ -4,7 +4,7 @@
4
4
  import { Host, h } from "@stencil/core";
5
5
  export class SegmentContent {
6
6
  render() {
7
- return (h(Host, { key: '03684b2999ac64fe13e376fd7e7f279976e9d4f2' }, h("slot", { key: '143031075bf33ca19e7cfd76fc8a67b83ccaf11c' })));
7
+ return (h(Host, { key: '64b3965b14c749e77e9ce13b59f349d971e245c8' }, h("slot", { key: '2d0bed34f9bc93f92e713cb51e42220f3cecd8f5' })));
8
8
  }
9
9
  static get is() { return "ion-segment-content"; }
10
10
  static get encapsulation() { return "shadow"; }
@@ -94,10 +94,10 @@ export class SegmentView {
94
94
  }
95
95
  render() {
96
96
  const { disabled, isManualScroll } = this;
97
- return (h(Host, { key: '9f4f11d31c4db776f077e59ae895b35dd4454717', class: {
97
+ return (h(Host, { key: 'fa528d2d9ae0f00fc3067defe2a047dce77c814a', class: {
98
98
  'segment-view-disabled': disabled,
99
99
  'segment-view-scroll-disabled': isManualScroll === false,
100
- } }, h("slot", { key: 'ea58b21f031cee2ab2b70580f336deaefa364538' })));
100
+ } }, h("slot", { key: '74dc8b4d073caeff1bab272d11b9ea3e1a215954' })));
101
101
  }
102
102
  static get is() { return "ion-segment-view"; }
103
103
  static get encapsulation() { return "shadow"; }
@@ -299,6 +299,63 @@ button {
299
299
  --highlight-color: var(--highlight-color-valid);
300
300
  }
301
301
 
302
+ .select-bottom {
303
+ /**
304
+ * The bottom content should take on the start and end
305
+ * padding so it is always aligned with either the label
306
+ * or the start of the text select.
307
+ */
308
+ -webkit-padding-start: var(--padding-start);
309
+ padding-inline-start: var(--padding-start);
310
+ -webkit-padding-end: var(--padding-end);
311
+ padding-inline-end: var(--padding-end);
312
+ padding-top: 5px;
313
+ padding-bottom: 0;
314
+ display: flex;
315
+ justify-content: space-between;
316
+ border-top: var(--border-width) var(--border-style) var(--border-color);
317
+ font-size: 0.75rem;
318
+ white-space: normal;
319
+ }
320
+
321
+ /**
322
+ * If the select has a validity state, the
323
+ * border and label should reflect that as a color.
324
+ * The invalid state should show if the select is
325
+ * invalid and has already been touched.
326
+ * The valid state should show if the select
327
+ * is valid, has already been touched, and
328
+ * is currently focused. Do not show the valid
329
+ * highlight when the select is blurred.
330
+ */
331
+ :host(.has-focus.ion-valid),
332
+ :host(.ion-touched.ion-invalid) {
333
+ --border-color: var(--highlight-color);
334
+ }
335
+
336
+ /**
337
+ * Error text should only be shown when .ion-invalid is
338
+ * present on the select. Otherwise the helper text should
339
+ * be shown.
340
+ */
341
+ .select-bottom .error-text {
342
+ display: none;
343
+ color: var(--highlight-color-invalid);
344
+ }
345
+
346
+ .select-bottom .helper-text {
347
+ display: block;
348
+ color: var(--ion-color-step-700, var(--ion-text-color-step-300, #4d4d4d));
349
+ }
350
+
351
+ :host(.ion-touched.ion-invalid) .select-bottom .error-text {
352
+ display: block;
353
+ }
354
+
355
+ :host(.ion-touched.ion-invalid) .select-bottom .helper-text {
356
+ display: none;
357
+ }
358
+
302
359
  .label-text-wrapper {
303
360
  /**
304
361
  * This causes the label to take up
@@ -686,6 +743,8 @@ button {
686
743
  * }
687
744
  */
688
745
  :host {
746
+ --border-width: 0.55px;
747
+ --border-color: var(--ion-item-border-color, var(--ion-border-color, var(--ion-color-step-250, var(--ion-background-color-step-250, #c8c7cc))));
689
748
  --highlight-height: 0px;
690
749
  }
691
750
 
@@ -23,10 +23,15 @@ import { getIonMode } from "../../global/ionic-global";
23
23
  * @part icon - The select icon container.
24
24
  * @part container - The container for the selected text or placeholder.
25
25
  * @part label - The label text describing the select.
26
+ * @part supporting-text - Supporting text displayed beneath the select.
27
+ * @part helper-text - Supporting text displayed beneath the select when the select is valid.
28
+ * @part error-text - Supporting text displayed beneath the select when the select is invalid and touched.
26
29
  */
27
30
  export class Select {
28
31
  constructor() {
29
32
  this.inputId = `ion-sel-${selectIds++}`;
33
+ this.helperTextId = `${this.inputId}-helper-text`;
34
+ this.errorTextId = `${this.inputId}-error-text`;
30
35
  this.inheritedAttributes = {};
31
36
  this.onClick = (ev) => {
32
37
  const target = ev.target;
@@ -77,6 +82,8 @@ export class Select {
77
82
  this.compareWith = undefined;
78
83
  this.disabled = false;
79
84
  this.fill = undefined;
85
+ this.errorText = undefined;
86
+ this.helperText = undefined;
80
87
  this.interface = 'alert';
81
88
  this.interfaceOptions = {};
82
89
  this.justify = undefined;
@@ -91,6 +98,7 @@ export class Select {
91
98
  this.expandedIcon = undefined;
92
99
  this.shape = undefined;
93
100
  this.value = undefined;
101
+ this.required = false;
94
102
  }
95
103
  styleChanged() {
96
104
  this.emitStyle();
@@ -153,15 +161,8 @@ export class Select {
153
161
  }
154
162
  this.isExpanded = true;
155
163
  const overlay = (this.overlay = await this.createOverlay(event));
156
- overlay.onDidDismiss().then(() => {
157
- this.overlay = undefined;
158
- this.isExpanded = false;
159
- this.ionDismiss.emit();
160
- this.setFocus();
161
- });
162
- await overlay.present();
163
- // focus selected option for popovers and modals
164
- if (this.interface === 'popover' || this.interface === 'modal') {
164
+ // Add logic to scroll selected item into view before presenting
165
+ const scrollSelectedIntoView = () => {
165
166
  const indexOfSelected = this.childOpts.findIndex((o) => o.value === this.value);
166
167
  if (indexOfSelected > -1) {
167
168
  const selectedItem = overlay.querySelector(`.select-interface-option:nth-child(${indexOfSelected + 1})`);
@@ -179,6 +180,7 @@ export class Select {
179
180
  */
180
181
  const interactiveEl = selectedItem.querySelector('ion-radio, ion-checkbox');
181
182
  if (interactiveEl) {
183
+ selectedItem.scrollIntoView({ block: 'nearest' });
182
184
  // Needs to be called before `focusVisibleElement` to prevent issue with focus event bubbling
183
185
  // and removing `ion-focused` style
184
186
  interactiveEl.setFocus();
@@ -202,7 +204,40 @@ export class Select {
202
204
  focusVisibleElement(firstEnabledOption.closest('ion-item'));
203
205
  }
204
206
  }
207
+ };
208
+ // For modals and popovers, we can scroll before they're visible
209
+ if (this.interface === 'modal') {
210
+ overlay.addEventListener('ionModalWillPresent', scrollSelectedIntoView, { once: true });
211
+ }
212
+ else if (this.interface === 'popover') {
213
+ overlay.addEventListener('ionPopoverWillPresent', scrollSelectedIntoView, { once: true });
214
+ }
215
+ else {
216
+ /**
217
+ * For alerts and action sheets, we need to wait a frame after willPresent
218
+ * because these overlays don't have their content in the DOM immediately
219
+ * when willPresent fires. By waiting a frame, we ensure the content is
220
+ * rendered and can be properly scrolled into view.
221
+ */
222
+ const scrollAfterRender = () => {
223
+ requestAnimationFrame(() => {
224
+ scrollSelectedIntoView();
225
+ });
226
+ };
227
+ if (this.interface === 'alert') {
228
+ overlay.addEventListener('ionAlertWillPresent', scrollAfterRender, { once: true });
229
+ }
230
+ else if (this.interface === 'action-sheet') {
231
+ overlay.addEventListener('ionActionSheetWillPresent', scrollAfterRender, { once: true });
232
+ }
205
233
  }
234
+ overlay.onDidDismiss().then(() => {
235
+ this.overlay = undefined;
236
+ this.isExpanded = false;
237
+ this.ionDismiss.emit();
238
+ this.setFocus();
239
+ });
240
+ await overlay.present();
206
241
  return overlay;
207
242
  }
208
243
  createOverlay(ev) {
@@ -628,8 +663,44 @@ export class Select {
628
663
  return renderedLabel;
629
664
  }
630
665
  renderListbox() {
631
- const { disabled, inputId, isExpanded } = this;
632
- return (h("button", { disabled: disabled, id: inputId, "aria-label": this.ariaLabel, "aria-haspopup": "dialog", "aria-expanded": `${isExpanded}`, onFocus: this.onFocus, onBlur: this.onBlur, ref: (focusEl) => (this.focusEl = focusEl) }));
666
+ const { disabled, inputId, isExpanded, required } = this;
667
+ return (h("button", { disabled: disabled, id: inputId, "aria-label": this.ariaLabel, "aria-haspopup": "dialog", "aria-expanded": `${isExpanded}`, "aria-describedby": this.getHintTextID(), "aria-invalid": this.getHintTextID() === this.errorTextId, "aria-required": `${required}`, onFocus: this.onFocus, onBlur: this.onBlur, ref: (focusEl) => (this.focusEl = focusEl) }));
668
+ }
669
+ getHintTextID() {
670
+ const { el, helperText, errorText, helperTextId, errorTextId } = this;
671
+ if (el.classList.contains('ion-touched') && el.classList.contains('ion-invalid') && errorText) {
672
+ return errorTextId;
673
+ }
674
+ if (helperText) {
675
+ return helperTextId;
676
+ }
677
+ return undefined;
678
+ }
679
+ /**
680
+ * Renders the helper text or error text values
681
+ */
682
+ renderHintText() {
683
+ const { helperText, errorText, helperTextId, errorTextId } = this;
684
+ return [
685
+ h("div", { id: helperTextId, class: "helper-text", part: "supporting-text helper-text" }, helperText),
686
+ h("div", { id: errorTextId, class: "error-text", part: "supporting-text error-text" }, errorText),
687
+ ];
688
+ }
689
+ /**
690
+ * Responsible for rendering helper text, and error text. This element
691
+ * should only be rendered if hint text is set.
692
+ */
693
+ renderBottomContent() {
694
+ const { helperText, errorText } = this;
695
+ /**
696
+ * undefined and empty string values should
697
+ * be treated as not having helper/error text.
698
+ */
699
+ const hasHintText = !!helperText || !!errorText;
700
+ if (!hasHintText) {
701
+ return;
702
+ }
703
+ return h("div", { class: "select-bottom" }, this.renderHintText());
633
704
  }
634
705
  render() {
635
706
  const { disabled, el, isExpanded, expandedIcon, labelPlacement, justify, placeholder, fill, shape, name, value } = this;
@@ -660,7 +731,7 @@ export class Select {
660
731
  * TODO(FW-5592): Remove hasStartEndSlots condition
661
732
  */
662
733
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || isExpanded || hasStartEndSlots));
663
- return (h(Host, { key: '144dfa5c49549a74fe516c65b9b8104a477ac789', onClick: this.onClick, class: createColorClasses(this.color, {
734
+ return (h(Host, { key: 'aa7bd7fbb6479c7805486990650a406e5470fd13', onClick: this.onClick, class: createColorClasses(this.color, {
664
735
  [mode]: true,
665
736
  'in-item': inItem,
666
737
  'in-item-color': hostContext('ion-item.ion-color', el),
@@ -676,7 +747,7 @@ export class Select {
676
747
  [`select-justify-${justify}`]: justifyEnabled,
677
748
  [`select-shape-${shape}`]: shape !== undefined,
678
749
  [`select-label-placement-${labelPlacement}`]: true,
679
- }) }, h("label", { key: '0edcfcbac575a9dccc77991531b6980d1caebf42', class: "select-wrapper", id: "select-label" }, this.renderLabelContainer(), h("div", { key: '348151d90cb093f5d21c7d4a834264ac4a312c40', class: "select-wrapper-inner" }, h("slot", { key: '8b7708c7f81217435c58276da0c08bba766d9500', name: "start" }), h("div", { key: '10c520a335da0a0d1cf40f9365597beb244d3b48', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), h("slot", { key: '0f15c40a5495e98e29d2a21ba21e0bc6f1c0125a', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && h("div", { key: 'c87faad2e5ebf7f9453397d7ede43abd64d21294', class: "select-highlight" }))));
750
+ }) }, h("label", { key: 'fde3cdfd0ef7d1a20263e35ff4358ee7f61a789f', class: "select-wrapper", id: "select-label" }, this.renderLabelContainer(), h("div", { key: '6fb8deedc827b6be2f19f9e57a62efefaaba200f', class: "select-wrapper-inner" }, h("slot", { key: 'a57a204ea1cbd9c4bac338f14e196e780dab0a10', name: "start" }), h("div", { key: '78b83e1484a446537e038527d539d997e330cd69', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), h("slot", { key: '9fc660134e5247c4e5243c7d9d71ac6cec08705d', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && h("div", { key: '7f143285efa7fd7756dfdc5517ca33e84c8a027e', class: "select-highlight" })), this.renderBottomContent()));
680
751
  }
681
752
  static get is() { return "ion-select"; }
682
753
  static get encapsulation() { return "shadow"; }
@@ -793,6 +864,40 @@ export class Select {
793
864
  "attribute": "fill",
794
865
  "reflect": false
795
866
  },
867
+ "errorText": {
868
+ "type": "string",
869
+ "mutable": false,
870
+ "complexType": {
871
+ "original": "string",
872
+ "resolved": "string | undefined",
873
+ "references": {}
874
+ },
875
+ "required": false,
876
+ "optional": true,
877
+ "docs": {
878
+ "tags": [],
879
+ "text": "Text that is placed under the select and displayed when an error is detected."
880
+ },
881
+ "attribute": "error-text",
882
+ "reflect": false
883
+ },
884
+ "helperText": {
885
+ "type": "string",
886
+ "mutable": false,
887
+ "complexType": {
888
+ "original": "string",
889
+ "resolved": "string | undefined",
890
+ "references": {}
891
+ },
892
+ "required": false,
893
+ "optional": true,
894
+ "docs": {
895
+ "tags": [],
896
+ "text": "Text that is placed under the select and displayed when no error is detected."
897
+ },
898
+ "attribute": "helper-text",
899
+ "reflect": false
900
+ },
796
901
  "interface": {
797
902
  "type": "string",
798
903
  "mutable": false,
@@ -1042,6 +1147,24 @@ export class Select {
1042
1147
  },
1043
1148
  "attribute": "value",
1044
1149
  "reflect": false
1150
+ },
1151
+ "required": {
1152
+ "type": "boolean",
1153
+ "mutable": false,
1154
+ "complexType": {
1155
+ "original": "boolean",
1156
+ "resolved": "boolean",
1157
+ "references": {}
1158
+ },
1159
+ "required": false,
1160
+ "optional": false,
1161
+ "docs": {
1162
+ "tags": [],
1163
+ "text": "If true, screen readers will announce it as a required field. This property\nworks only for accessibility purposes, it will not prevent the form from\nsubmitting if the value is invalid."
1164
+ },
1165
+ "attribute": "required",
1166
+ "reflect": false,
1167
+ "defaultValue": "false"
1045
1168
  }
1046
1169
  };
1047
1170
  }
@@ -299,6 +299,63 @@ button {
299
299
  --highlight-color: var(--highlight-color-valid);
300
300
  }
301
301
 
302
+ .select-bottom {
303
+ /**
304
+ * The bottom content should take on the start and end
305
+ * padding so it is always aligned with either the label
306
+ * or the start of the text select.
307
+ */
308
+ -webkit-padding-start: var(--padding-start);
309
+ padding-inline-start: var(--padding-start);
310
+ -webkit-padding-end: var(--padding-end);
311
+ padding-inline-end: var(--padding-end);
312
+ padding-top: 5px;
313
+ padding-bottom: 0;
314
+ display: flex;
315
+ justify-content: space-between;
316
+ border-top: var(--border-width) var(--border-style) var(--border-color);
317
+ font-size: 0.75rem;
318
+ white-space: normal;
319
+ }
320
+
321
+ /**
322
+ * If the select has a validity state, the
323
+ * border and label should reflect that as a color.
324
+ * The invalid state should show if the select is
325
+ * invalid and has already been touched.
326
+ * The valid state should show if the select
327
+ * is valid, has already been touched, and
328
+ * is currently focused. Do not show the valid
329
+ * highlight when the select is blurred.
330
+ */
331
+ :host(.has-focus.ion-valid),
332
+ :host(.ion-touched.ion-invalid) {
333
+ --border-color: var(--highlight-color);
334
+ }
335
+
336
+ /**
337
+ * Error text should only be shown when .ion-invalid is
338
+ * present on the select. Otherwise the helper text should
339
+ * be shown.
340
+ */
341
+ .select-bottom .error-text {
342
+ display: none;
343
+ color: var(--highlight-color-invalid);
344
+ }
345
+
346
+ .select-bottom .helper-text {
347
+ display: block;
348
+ color: var(--ion-color-step-700, var(--ion-text-color-step-300, #4d4d4d));
349
+ }
350
+
351
+ :host(.ion-touched.ion-invalid) .select-bottom .error-text {
352
+ display: block;
353
+ }
354
+
355
+ :host(.ion-touched.ion-invalid) .select-bottom .helper-text {
356
+ display: none;
357
+ }
358
+
302
359
  .label-text-wrapper {
303
360
  /**
304
361
  * This causes the label to take up
@@ -768,6 +825,10 @@ button {
768
825
  --border-color: var(--highlight-color);
769
826
  }
770
827
 
828
+ /**
829
+ * The bottom content should never have
830
+ * a border with the solid style.
831
+ */
771
832
  :host(.select-fill-solid) .select-bottom {
772
833
  border-top: none;
773
834
  }