@ionic/core 8.4.4-dev.11741294920.1c3e822a → 8.4.4-dev.11741357957.1558bd4c

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 (453) hide show
  1. package/components/alert.js +4 -30
  2. package/components/checkbox.js +6 -4
  3. package/components/helpers.js +1 -7
  4. package/components/index6.js +11 -3
  5. package/components/index9.js +1 -1
  6. package/components/ion-input.js +2 -2
  7. package/components/ion-range.js +1 -5
  8. package/components/ion-router.js +1 -1
  9. package/components/ion-segment-button.js +1 -1
  10. package/components/ion-select.js +6 -4
  11. package/components/ion-textarea.js +2 -2
  12. package/components/ion-toggle.js +6 -4
  13. package/components/ionic-global.js +1 -2
  14. package/components/modal.js +259 -35
  15. package/components/radio.js +37 -5
  16. package/components/toolbar.js +2 -2
  17. package/css/core.css.map +1 -1
  18. package/css/ionic.bundle.css.map +1 -1
  19. package/dist/cjs/{app-globals-4283fe37.js → app-globals-21afee77.js} +1 -1
  20. package/dist/cjs/{data-21dc0f81.js → data-108e531d.js} +1 -1
  21. package/dist/cjs/{framework-delegate-c4f2ba04.js → framework-delegate-05579976.js} +1 -1
  22. package/dist/cjs/{hardware-back-button-f2cbbdce.js → hardware-back-button-9e8a2c4f.js} +1 -1
  23. package/dist/cjs/{helpers-b14a0f09.js → helpers-4be3f90d.js} +0 -7
  24. package/dist/cjs/{index-1248dbd7.js → index-0ff61d0b.js} +4 -4
  25. package/dist/cjs/{index-4e37257d.js → index-26bb7e42.js} +5 -5
  26. package/dist/cjs/{index-5915f9b3.js → index-2a46a047.js} +11 -3
  27. package/dist/cjs/{index-a4a74252.js → index-6770fc00.js} +2 -2
  28. package/dist/cjs/{index-786364c7.js → index-ad7a712e.js} +1 -1
  29. package/dist/cjs/index.cjs.js +10 -10
  30. package/dist/cjs/{input-shims-b4c0eee7.js → input-shims-fd997b01.js} +5 -3
  31. package/dist/cjs/{input.utils-4af208ab.js → input.utils-c15a1814.js} +2 -2
  32. package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -3
  33. package/dist/cjs/ion-action-sheet.cjs.entry.js +6 -6
  34. package/dist/cjs/ion-alert.cjs.entry.js +10 -36
  35. package/dist/cjs/ion-app_8.cjs.entry.js +14 -14
  36. package/dist/cjs/ion-avatar_3.cjs.entry.js +1 -1
  37. package/dist/cjs/ion-back-button.cjs.entry.js +2 -2
  38. package/dist/cjs/ion-backdrop.cjs.entry.js +1 -1
  39. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +2 -2
  40. package/dist/cjs/ion-button_2.cjs.entry.js +3 -3
  41. package/dist/cjs/ion-card_5.cjs.entry.js +2 -2
  42. package/dist/cjs/ion-checkbox.cjs.entry.js +7 -6
  43. package/dist/cjs/ion-chip.cjs.entry.js +1 -1
  44. package/dist/cjs/ion-col_3.cjs.entry.js +1 -1
  45. package/dist/cjs/ion-datetime-button.cjs.entry.js +4 -4
  46. package/dist/cjs/ion-datetime_3.cjs.entry.js +7 -7
  47. package/dist/cjs/ion-fab_3.cjs.entry.js +2 -2
  48. package/dist/cjs/ion-img.cjs.entry.js +2 -2
  49. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +4 -4
  50. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +2 -2
  51. package/dist/cjs/ion-input.cjs.entry.js +7 -7
  52. package/dist/cjs/ion-item-option_3.cjs.entry.js +4 -4
  53. package/dist/cjs/ion-item_8.cjs.entry.js +2 -2
  54. package/dist/cjs/ion-loading.cjs.entry.js +6 -6
  55. package/dist/cjs/ion-menu_3.cjs.entry.js +7 -7
  56. package/dist/cjs/ion-modal.cjs.entry.js +266 -43
  57. package/dist/cjs/ion-nav_2.cjs.entry.js +6 -6
  58. package/dist/cjs/ion-picker-column-option.cjs.entry.js +2 -2
  59. package/dist/cjs/ion-picker-column.cjs.entry.js +2 -2
  60. package/dist/cjs/ion-picker.cjs.entry.js +1 -1
  61. package/dist/cjs/ion-popover.cjs.entry.js +7 -7
  62. package/dist/cjs/ion-progress-bar.cjs.entry.js +2 -2
  63. package/dist/cjs/ion-radio_2.cjs.entry.js +37 -7
  64. package/dist/cjs/ion-range.cjs.entry.js +4 -8
  65. package/dist/cjs/ion-refresher_2.cjs.entry.js +4 -4
  66. package/dist/cjs/ion-reorder_2.cjs.entry.js +4 -4
  67. package/dist/cjs/ion-ripple-effect.cjs.entry.js +1 -1
  68. package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
  69. package/dist/cjs/ion-searchbar.cjs.entry.js +2 -2
  70. package/dist/cjs/ion-segment_2.cjs.entry.js +2 -2
  71. package/dist/cjs/ion-select-modal.cjs.entry.js +6 -6
  72. package/dist/cjs/ion-select_3.cjs.entry.js +12 -11
  73. package/dist/cjs/ion-spinner.cjs.entry.js +1 -1
  74. package/dist/cjs/ion-split-pane.cjs.entry.js +1 -1
  75. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +2 -2
  76. package/dist/cjs/ion-tab_2.cjs.entry.js +2 -2
  77. package/dist/cjs/ion-text.cjs.entry.js +1 -1
  78. package/dist/cjs/ion-textarea.cjs.entry.js +7 -7
  79. package/dist/cjs/ion-toast.cjs.entry.js +6 -6
  80. package/dist/cjs/ion-toggle.cjs.entry.js +7 -6
  81. package/dist/cjs/{ionic-global-96da1b2e.js → ionic-global-d9a8bb5b.js} +1 -2
  82. package/dist/cjs/ionic.cjs.js +3 -3
  83. package/dist/cjs/{ios.transition-8d363d77.js → ios.transition-a4f35c55.js} +4 -4
  84. package/dist/cjs/loader.cjs.js +3 -3
  85. package/dist/cjs/{md.transition-57d695fa.js → md.transition-cdf904e6.js} +4 -4
  86. package/dist/cjs/{notch-controller-bd07748b.js → notch-controller-a0c464d1.js} +1 -1
  87. package/dist/cjs/{overlays-27703a30.js → overlays-86695cf1.js} +5 -5
  88. package/dist/cjs/{status-tap-654077ee.js → status-tap-1a2485c1.js} +4 -3
  89. package/dist/cjs/{swipe-back-b70cd52e.js → swipe-back-47a52b83.js} +1 -1
  90. package/dist/collection/components/alert/alert.js +4 -34
  91. package/dist/collection/components/checkbox/checkbox.js +23 -4
  92. package/dist/collection/components/input/input.ios.css +3 -2
  93. package/dist/collection/components/input/input.md.css +7 -2
  94. package/dist/collection/components/modal/animations/ios.enter.js +50 -4
  95. package/dist/collection/components/modal/animations/ios.leave.js +24 -2
  96. package/dist/collection/components/modal/animations/md.enter.js +52 -5
  97. package/dist/collection/components/modal/animations/md.leave.js +26 -3
  98. package/dist/collection/components/modal/animations/sheet.js +11 -2
  99. package/dist/collection/components/modal/gestures/sheet.js +79 -10
  100. package/dist/collection/components/modal/modal.ios.css +16 -0
  101. package/dist/collection/components/modal/modal.js +32 -7
  102. package/dist/collection/components/modal/modal.md.css +6 -0
  103. package/dist/collection/components/radio/radio.ios.css +52 -15
  104. package/dist/collection/components/radio/radio.js +70 -3
  105. package/dist/collection/components/radio/radio.md.css +52 -15
  106. package/dist/collection/components/select/select.js +23 -4
  107. package/dist/collection/components/textarea/textarea.ios.css +3 -2
  108. package/dist/collection/components/textarea/textarea.md.css +7 -2
  109. package/dist/collection/components/toggle/toggle.js +23 -4
  110. package/dist/collection/components/toolbar/toolbar.js +6 -2
  111. package/dist/collection/utils/floating-point/index.js +0 -5
  112. package/dist/collection/utils/helpers.js +0 -6
  113. package/dist/collection/utils/logging/index.js +10 -3
  114. package/dist/collection/utils/platform.js +1 -2
  115. package/dist/collection/utils/test/platform.utils.js +1 -1
  116. package/dist/docs.json +187 -6
  117. package/dist/esm/{app-globals-c10a1137.js → app-globals-5dbb61a5.js} +1 -1
  118. package/dist/esm/{data-ae11fd43.js → data-b3284b5e.js} +1 -1
  119. package/dist/esm/{framework-delegate-42bc40b1.js → framework-delegate-f683816e.js} +1 -1
  120. package/dist/esm/{hardware-back-button-44195e92.js → hardware-back-button-06ef3c3e.js} +1 -1
  121. package/dist/esm/{helpers-13b816c6.js → helpers-9b49d7d2.js} +1 -7
  122. package/dist/esm/{index-28c8fd64.js → index-5a0f5fd0.js} +1 -1
  123. package/dist/esm/{index-4b39521b.js → index-6a5baab0.js} +5 -5
  124. package/dist/esm/{index-9b0d46f4.js → index-6ad967f3.js} +11 -3
  125. package/dist/esm/{index-6b548278.js → index-7105cd59.js} +4 -4
  126. package/dist/esm/{index-edf58462.js → index-dd0f7395.js} +2 -2
  127. package/dist/esm/index.js +10 -10
  128. package/dist/esm/{input-shims-5e5e47e8.js → input-shims-dff819a9.js} +5 -3
  129. package/dist/esm/{input.utils-d3717b00.js → input.utils-2f1029cf.js} +2 -2
  130. package/dist/esm/ion-accordion_2.entry.js +3 -3
  131. package/dist/esm/ion-action-sheet.entry.js +6 -6
  132. package/dist/esm/ion-alert.entry.js +10 -36
  133. package/dist/esm/ion-app_8.entry.js +14 -14
  134. package/dist/esm/ion-avatar_3.entry.js +1 -1
  135. package/dist/esm/ion-back-button.entry.js +2 -2
  136. package/dist/esm/ion-backdrop.entry.js +1 -1
  137. package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
  138. package/dist/esm/ion-button_2.entry.js +3 -3
  139. package/dist/esm/ion-card_5.entry.js +2 -2
  140. package/dist/esm/ion-checkbox.entry.js +7 -6
  141. package/dist/esm/ion-chip.entry.js +1 -1
  142. package/dist/esm/ion-col_3.entry.js +1 -1
  143. package/dist/esm/ion-datetime-button.entry.js +4 -4
  144. package/dist/esm/ion-datetime_3.entry.js +7 -7
  145. package/dist/esm/ion-fab_3.entry.js +2 -2
  146. package/dist/esm/ion-img.entry.js +2 -2
  147. package/dist/esm/ion-infinite-scroll_2.entry.js +4 -4
  148. package/dist/esm/ion-input-password-toggle.entry.js +2 -2
  149. package/dist/esm/ion-input.entry.js +7 -7
  150. package/dist/esm/ion-item-option_3.entry.js +4 -4
  151. package/dist/esm/ion-item_8.entry.js +2 -2
  152. package/dist/esm/ion-loading.entry.js +6 -6
  153. package/dist/esm/ion-menu_3.entry.js +7 -7
  154. package/dist/esm/ion-modal.entry.js +266 -43
  155. package/dist/esm/ion-nav_2.entry.js +6 -6
  156. package/dist/esm/ion-picker-column-option.entry.js +2 -2
  157. package/dist/esm/ion-picker-column.entry.js +2 -2
  158. package/dist/esm/ion-picker.entry.js +1 -1
  159. package/dist/esm/ion-popover.entry.js +7 -7
  160. package/dist/esm/ion-progress-bar.entry.js +2 -2
  161. package/dist/esm/ion-radio_2.entry.js +37 -7
  162. package/dist/esm/ion-range.entry.js +4 -8
  163. package/dist/esm/ion-refresher_2.entry.js +4 -4
  164. package/dist/esm/ion-reorder_2.entry.js +4 -4
  165. package/dist/esm/ion-ripple-effect.entry.js +1 -1
  166. package/dist/esm/ion-route_4.entry.js +2 -2
  167. package/dist/esm/ion-searchbar.entry.js +2 -2
  168. package/dist/esm/ion-segment_2.entry.js +2 -2
  169. package/dist/esm/ion-select-modal.entry.js +6 -6
  170. package/dist/esm/ion-select_3.entry.js +12 -11
  171. package/dist/esm/ion-spinner.entry.js +1 -1
  172. package/dist/esm/ion-split-pane.entry.js +1 -1
  173. package/dist/esm/ion-tab-bar_2.entry.js +2 -2
  174. package/dist/esm/ion-tab_2.entry.js +2 -2
  175. package/dist/esm/ion-text.entry.js +1 -1
  176. package/dist/esm/ion-textarea.entry.js +7 -7
  177. package/dist/esm/ion-toast.entry.js +6 -6
  178. package/dist/esm/ion-toggle.entry.js +7 -6
  179. package/dist/esm/{ionic-global-bf78a847.js → ionic-global-c81d82ab.js} +1 -2
  180. package/dist/esm/ionic.js +3 -3
  181. package/dist/esm/{ios.transition-e7a4de4f.js → ios.transition-314468a2.js} +4 -4
  182. package/dist/esm/loader.js +3 -3
  183. package/dist/esm/{md.transition-290d8802.js → md.transition-a560e0e2.js} +4 -4
  184. package/dist/esm/{notch-controller-bb8f3a48.js → notch-controller-3dc61260.js} +1 -1
  185. package/dist/esm/{overlays-4ff6e618.js → overlays-9a81f230.js} +5 -5
  186. package/dist/esm/{status-tap-ba401484.js → status-tap-d07dbc82.js} +4 -3
  187. package/dist/esm/{swipe-back-a258b011.js → swipe-back-23ee7ab1.js} +1 -1
  188. package/dist/esm-es5/app-globals-5dbb61a5.js +4 -0
  189. package/dist/esm-es5/{data-ae11fd43.js → data-b3284b5e.js} +1 -1
  190. package/dist/esm-es5/{framework-delegate-42bc40b1.js → framework-delegate-f683816e.js} +1 -1
  191. package/dist/esm-es5/{hardware-back-button-44195e92.js → hardware-back-button-06ef3c3e.js} +1 -1
  192. package/dist/esm-es5/{helpers-13b816c6.js → helpers-9b49d7d2.js} +1 -1
  193. package/dist/esm-es5/{index-28c8fd64.js → index-5a0f5fd0.js} +1 -1
  194. package/dist/esm-es5/{index-4b39521b.js → index-6a5baab0.js} +1 -1
  195. package/dist/esm-es5/index-6ad967f3.js +4 -0
  196. package/dist/esm-es5/{index-6b548278.js → index-7105cd59.js} +1 -1
  197. package/dist/esm-es5/{index-edf58462.js → index-dd0f7395.js} +1 -1
  198. package/dist/esm-es5/index.js +1 -1
  199. package/dist/esm-es5/input-shims-dff819a9.js +4 -0
  200. package/dist/esm-es5/{input.utils-d3717b00.js → input.utils-2f1029cf.js} +1 -1
  201. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  202. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  203. package/dist/esm-es5/ion-alert.entry.js +1 -1
  204. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  205. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  206. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  207. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  208. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  209. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  210. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  211. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  212. package/dist/esm-es5/ion-chip.entry.js +1 -1
  213. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  214. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  215. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  216. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  217. package/dist/esm-es5/ion-img.entry.js +1 -1
  218. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  219. package/dist/esm-es5/ion-input-password-toggle.entry.js +1 -1
  220. package/dist/esm-es5/ion-input.entry.js +1 -1
  221. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  222. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  223. package/dist/esm-es5/ion-loading.entry.js +1 -1
  224. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  225. package/dist/esm-es5/ion-modal.entry.js +1 -1
  226. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  227. package/dist/esm-es5/ion-picker-column-option.entry.js +1 -1
  228. package/dist/esm-es5/ion-picker-column.entry.js +1 -1
  229. package/dist/esm-es5/ion-picker.entry.js +1 -1
  230. package/dist/esm-es5/ion-popover.entry.js +1 -1
  231. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  232. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  233. package/dist/esm-es5/ion-range.entry.js +1 -1
  234. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  235. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  236. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  237. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  238. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  239. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  240. package/dist/esm-es5/ion-select-modal.entry.js +1 -1
  241. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  242. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  243. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  244. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  245. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  246. package/dist/esm-es5/ion-text.entry.js +1 -1
  247. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  248. package/dist/esm-es5/ion-toast.entry.js +1 -1
  249. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  250. package/dist/esm-es5/{ionic-global-bf78a847.js → ionic-global-c81d82ab.js} +1 -1
  251. package/dist/esm-es5/ionic.js +1 -1
  252. package/dist/esm-es5/{ios.transition-e7a4de4f.js → ios.transition-314468a2.js} +1 -1
  253. package/dist/esm-es5/loader.js +1 -1
  254. package/dist/esm-es5/md.transition-a560e0e2.js +4 -0
  255. package/dist/esm-es5/{notch-controller-bb8f3a48.js → notch-controller-3dc61260.js} +1 -1
  256. package/dist/esm-es5/{overlays-4ff6e618.js → overlays-9a81f230.js} +1 -1
  257. package/dist/esm-es5/status-tap-d07dbc82.js +4 -0
  258. package/dist/esm-es5/{swipe-back-a258b011.js → swipe-back-23ee7ab1.js} +1 -1
  259. package/dist/html.html-data.json +24 -0
  260. package/dist/ionic/index.esm.js +1 -1
  261. package/dist/ionic/ionic.esm.js +1 -1
  262. package/dist/ionic/ionic.js +1 -1
  263. package/dist/ionic/{p-37a21d70.entry.js → p-02e23f26.entry.js} +1 -1
  264. package/dist/ionic/{p-cc991f05.entry.js → p-037fc3f3.entry.js} +1 -1
  265. package/dist/ionic/p-04e08129.entry.js +4 -0
  266. package/dist/ionic/p-0574e87e.js +4 -0
  267. package/dist/ionic/{p-64bb1da1.system.js → p-058e61eb.system.js} +1 -1
  268. package/dist/ionic/{p-1b2657c9.system.entry.js → p-0bfffa34.system.entry.js} +1 -1
  269. package/dist/ionic/{p-4a98a017.system.entry.js → p-0eb2553a.system.entry.js} +1 -1
  270. package/dist/ionic/{p-bc148b43.system.entry.js → p-10327ad2.system.entry.js} +1 -1
  271. package/dist/ionic/{p-5e9733d0.entry.js → p-155c2bb0.entry.js} +1 -1
  272. package/dist/ionic/p-155f4d90.entry.js +4 -0
  273. package/dist/ionic/p-16bfb979.system.entry.js +4 -0
  274. package/dist/ionic/{p-7a9407cc.system.entry.js → p-18e101b7.system.entry.js} +2 -2
  275. package/dist/ionic/{p-d60342e3.js → p-1a5bc5f7.js} +1 -1
  276. package/dist/ionic/p-1f405274.js +4 -0
  277. package/dist/ionic/p-21227121.js +4 -0
  278. package/dist/ionic/p-22149a4f.js +4 -0
  279. package/dist/ionic/{p-a873feda.system.entry.js → p-2507278c.system.entry.js} +1 -1
  280. package/dist/ionic/{p-5996d3ad.system.entry.js → p-2515cb4d.system.entry.js} +1 -1
  281. package/dist/ionic/{p-37264dcc.entry.js → p-265939f0.entry.js} +1 -1
  282. package/dist/ionic/{p-4eed0eb2.system.entry.js → p-2abae1cc.system.entry.js} +1 -1
  283. package/dist/ionic/{p-3559bd4f.js → p-2bc73fb5.js} +1 -1
  284. package/dist/ionic/p-2c9eb774.system.js +4 -0
  285. package/dist/ionic/{p-a8d31cd5.entry.js → p-2cbe5399.entry.js} +1 -1
  286. package/dist/ionic/{p-c3a51c19.system.entry.js → p-2ef3c7ee.system.entry.js} +1 -1
  287. package/dist/ionic/{p-d785235b.system.entry.js → p-31a6efce.system.entry.js} +1 -1
  288. package/dist/ionic/p-322c5fb4.system.js +4 -0
  289. package/dist/ionic/{p-c66604e4.entry.js → p-33a8a71b.entry.js} +1 -1
  290. package/dist/ionic/{p-f687573e.system.js → p-343b6b1d.system.js} +1 -1
  291. package/dist/ionic/p-34479cfb.entry.js +4 -0
  292. package/dist/ionic/{p-5ae70860.js → p-346b2baf.js} +1 -1
  293. package/dist/ionic/{p-eab9414f.entry.js → p-36c448fe.entry.js} +1 -1
  294. package/dist/ionic/{p-5d1be985.js → p-39dd4f62.js} +1 -1
  295. package/dist/ionic/{p-8911101b.system.js → p-3c8e5c23.system.js} +1 -1
  296. package/dist/ionic/p-3e99e3e0.entry.js +4 -0
  297. package/dist/ionic/p-4129228f.system.entry.js +4 -0
  298. package/dist/ionic/{p-8c0d81a9.entry.js → p-41780810.entry.js} +1 -1
  299. package/dist/ionic/p-42c9deb1.entry.js +4 -0
  300. package/dist/ionic/{p-f5a536e1.system.js → p-4452a8ac.system.js} +1 -1
  301. package/dist/ionic/{p-e3be9fa8.system.entry.js → p-484d855b.system.entry.js} +2 -2
  302. package/dist/ionic/p-49a0e74c.entry.js +4 -0
  303. package/dist/ionic/{p-1f62c30b.entry.js → p-4ad78edc.entry.js} +1 -1
  304. package/dist/ionic/{p-ffb6d30e.js → p-4d3a5f86.js} +1 -1
  305. package/dist/ionic/{p-ae02a7ea.system.entry.js → p-4d413973.system.entry.js} +1 -1
  306. package/dist/ionic/{p-43df2d06.system.entry.js → p-5010643d.system.entry.js} +1 -1
  307. package/dist/ionic/{p-52b61cba.system.js → p-5126cf1e.system.js} +1 -1
  308. package/dist/ionic/p-52245809.js +4 -0
  309. package/dist/ionic/p-5375091b.system.entry.js +4 -0
  310. package/dist/ionic/{p-e4c1fd74.system.entry.js → p-56da53ad.system.entry.js} +1 -1
  311. package/dist/ionic/{p-6a649fcd.system.js → p-578efda4.system.js} +2 -2
  312. package/dist/ionic/{p-d6b3e734.system.entry.js → p-5882bffa.system.entry.js} +1 -1
  313. package/dist/ionic/{p-026517fb.entry.js → p-5b932840.entry.js} +1 -1
  314. package/dist/ionic/p-5c9324c6.js +4 -0
  315. package/dist/ionic/{p-9c7efe25.system.entry.js → p-5fce0c0b.system.entry.js} +1 -1
  316. package/dist/ionic/{p-85b1ffae.entry.js → p-62af944c.entry.js} +1 -1
  317. package/dist/ionic/{p-feab8373.system.entry.js → p-63c09585.system.entry.js} +1 -1
  318. package/dist/ionic/{p-d854f4bc.system.entry.js → p-65346408.system.entry.js} +1 -1
  319. package/dist/ionic/{p-ac2c154f.system.entry.js → p-655723eb.system.entry.js} +1 -1
  320. package/dist/ionic/p-67222c16.system.js +4 -0
  321. package/dist/ionic/{p-c2583512.entry.js → p-6d32975a.entry.js} +1 -1
  322. package/dist/ionic/{p-13637707.entry.js → p-70af0afb.entry.js} +1 -1
  323. package/dist/ionic/p-712fedc9.entry.js +4 -0
  324. package/dist/ionic/{p-ca5eef42.entry.js → p-72ec9a26.entry.js} +1 -1
  325. package/dist/ionic/{p-0116e7d7.system.js → p-73897169.system.js} +1 -1
  326. package/dist/ionic/{p-d4896d36.system.entry.js → p-7458862e.system.entry.js} +1 -1
  327. package/dist/ionic/{p-166f4ba0.entry.js → p-76446a85.entry.js} +1 -1
  328. package/dist/ionic/{p-3fe95571.system.entry.js → p-77e7b7b6.system.entry.js} +1 -1
  329. package/dist/ionic/{p-89e678fa.js → p-7a1766d6.js} +1 -1
  330. package/dist/ionic/{p-486dc46d.system.entry.js → p-7ae680ba.system.entry.js} +1 -1
  331. package/dist/ionic/{p-fd2c0aa6.entry.js → p-7b98cebe.entry.js} +1 -1
  332. package/dist/ionic/p-80c6d619.entry.js +4 -0
  333. package/dist/ionic/{p-e0a2abde.system.entry.js → p-84d08aae.system.entry.js} +1 -1
  334. package/dist/ionic/{p-c09a2f58.system.js → p-860eb968.system.js} +1 -1
  335. package/dist/ionic/{p-31918ee1.entry.js → p-8818edd8.entry.js} +1 -1
  336. package/dist/ionic/{p-ebd0a280.entry.js → p-89bf08c7.entry.js} +1 -1
  337. package/dist/ionic/{p-830f1a37.system.entry.js → p-8cfba7e9.system.entry.js} +1 -1
  338. package/dist/ionic/{p-bba0bc47.system.js → p-8e407469.system.js} +1 -1
  339. package/dist/ionic/p-8f51281f.entry.js +4 -0
  340. package/dist/ionic/{p-48e13807.system.entry.js → p-92365bc1.system.entry.js} +1 -1
  341. package/dist/ionic/{p-ee41045b.system.entry.js → p-93e3654c.system.entry.js} +1 -1
  342. package/dist/ionic/{p-8f89c8e3.entry.js → p-955c3eb8.entry.js} +1 -1
  343. package/dist/ionic/{p-56a8aa85.entry.js → p-95775830.entry.js} +1 -1
  344. package/dist/ionic/{p-f6e7870b.system.js → p-95da3ae2.system.js} +1 -1
  345. package/dist/ionic/{p-230af7f2.js → p-990630ca.js} +1 -1
  346. package/dist/ionic/{p-4429e8c5.entry.js → p-9962f63f.entry.js} +1 -1
  347. package/dist/ionic/p-9a100adc.entry.js +4 -0
  348. package/dist/ionic/{p-34182275.entry.js → p-9b3bb24e.entry.js} +1 -1
  349. package/dist/ionic/{p-a69cf9ea.entry.js → p-9de5c787.entry.js} +1 -1
  350. package/dist/ionic/{p-eb4ac14d.system.js → p-9f3008d4.system.js} +1 -1
  351. package/dist/ionic/p-a18470c6.entry.js +4 -0
  352. package/dist/ionic/{p-17c772fb.entry.js → p-a5b31c0f.entry.js} +1 -1
  353. package/dist/ionic/{p-d86d7845.system.js → p-a69b9fc5.system.js} +1 -1
  354. package/dist/ionic/{p-c55254f0.system.entry.js → p-a9e24ae2.system.entry.js} +1 -1
  355. package/dist/ionic/{p-d7607262.system.js → p-acb30a5c.system.js} +1 -1
  356. package/dist/ionic/{p-361ab803.system.entry.js → p-acc8399c.system.entry.js} +2 -2
  357. package/dist/ionic/p-af09741c.entry.js +4 -0
  358. package/dist/ionic/{p-953d9cf5.system.js → p-af452fa4.system.js} +1 -1
  359. package/dist/ionic/{p-b533b7ab.system.entry.js → p-af744710.system.entry.js} +1 -1
  360. package/dist/ionic/{p-42a9bb35.entry.js → p-afecb188.entry.js} +1 -1
  361. package/dist/ionic/{p-8aa290af.system.js → p-b3680e2f.system.js} +1 -1
  362. package/dist/ionic/p-b936eb7e.system.entry.js +4 -0
  363. package/dist/ionic/{p-6eb35904.js → p-bb11d9fb.js} +1 -1
  364. package/dist/ionic/{p-00d5ab83.entry.js → p-bb2a6761.entry.js} +1 -1
  365. package/dist/ionic/{p-327b452e.entry.js → p-bc616455.entry.js} +1 -1
  366. package/dist/ionic/{p-9d4a8059.entry.js → p-bdad26e3.entry.js} +1 -1
  367. package/dist/ionic/{p-91b944fa.entry.js → p-c32644d7.entry.js} +1 -1
  368. package/dist/ionic/p-c3802319.system.js +4 -0
  369. package/dist/ionic/{p-a4b108a7.entry.js → p-c8d645b3.entry.js} +1 -1
  370. package/dist/ionic/{p-07d0478c.js → p-c935cfc9.js} +1 -1
  371. package/dist/ionic/{p-45109533.system.entry.js → p-d1172fe3.system.entry.js} +1 -1
  372. package/dist/ionic/{p-b566749e.js → p-d4ca0475.js} +1 -1
  373. package/dist/ionic/{p-e25cd3c7.js → p-d743e981.js} +1 -1
  374. package/dist/ionic/{p-80f2a47b.entry.js → p-d7bb5325.entry.js} +1 -1
  375. package/dist/ionic/{p-364ed29d.system.entry.js → p-d821466d.system.entry.js} +1 -1
  376. package/dist/ionic/{p-733f53f8.system.js → p-d99e8644.system.js} +1 -1
  377. package/dist/ionic/{p-05f90810.system.entry.js → p-da8ef548.system.entry.js} +1 -1
  378. package/dist/ionic/{p-de4fef3c.system.entry.js → p-dc146a2a.system.entry.js} +1 -1
  379. package/dist/ionic/{p-25580c85.system.entry.js → p-dd0c9350.system.entry.js} +1 -1
  380. package/dist/ionic/{p-136ff13e.entry.js → p-df862603.entry.js} +1 -1
  381. package/dist/ionic/{p-e84da6cb.system.entry.js → p-e2e19375.system.entry.js} +1 -1
  382. package/dist/ionic/{p-0793353d.system.entry.js → p-e32557bb.system.entry.js} +1 -1
  383. package/dist/ionic/{p-fced06e0.entry.js → p-e5849f8d.entry.js} +1 -1
  384. package/dist/ionic/p-e8d56122.js +4 -0
  385. package/dist/ionic/{p-441c2c8c.entry.js → p-e8f34871.entry.js} +1 -1
  386. package/dist/ionic/{p-6f3d8334.js → p-ecceeb90.js} +1 -1
  387. package/dist/ionic/{p-d7fef52e.system.entry.js → p-ed75fcfb.system.entry.js} +1 -1
  388. package/dist/ionic/{p-213b12ce.system.entry.js → p-eeb5cb45.system.entry.js} +2 -2
  389. package/dist/ionic/p-efbf5af5.system.entry.js +4 -0
  390. package/dist/ionic/p-f2613334.system.entry.js +4 -0
  391. package/dist/ionic/{p-6347c733.system.entry.js → p-f301a694.system.entry.js} +1 -1
  392. package/dist/ionic/{p-478dfa8c.system.entry.js → p-f3102647.system.entry.js} +1 -1
  393. package/dist/ionic/{p-f8ef15ba.system.entry.js → p-f56752be.system.entry.js} +1 -1
  394. package/dist/ionic/{p-379d9002.entry.js → p-f5d6624d.entry.js} +1 -1
  395. package/dist/ionic/{p-5d3dc32b.system.entry.js → p-f78af648.system.entry.js} +1 -1
  396. package/dist/ionic/{p-c3de6cd1.system.entry.js → p-f89cf011.system.entry.js} +1 -1
  397. package/dist/ionic/p-fbf86e62.system.js +4 -0
  398. package/dist/ionic/{p-16dd9c9b.entry.js → p-fca17935.entry.js} +1 -1
  399. package/dist/ionic/{p-712b57f9.system.entry.js → p-fca6ef5f.system.entry.js} +1 -1
  400. package/dist/ionic/{p-c06312bf.entry.js → p-fec13c57.entry.js} +1 -1
  401. package/dist/types/components/checkbox/checkbox.d.ts +6 -0
  402. package/dist/types/components/modal/animations/sheet.d.ts +1 -0
  403. package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
  404. package/dist/types/components/modal/modal-interface.d.ts +1 -0
  405. package/dist/types/components/modal/modal.d.ts +11 -0
  406. package/dist/types/components/radio/radio.d.ts +19 -0
  407. package/dist/types/components/select/select.d.ts +6 -0
  408. package/dist/types/components/toggle/toggle.d.ts +6 -0
  409. package/dist/types/components/toolbar/toolbar.d.ts +4 -0
  410. package/dist/types/components.d.ts +48 -0
  411. package/dist/types/utils/config.d.ts +9 -0
  412. package/dist/types/utils/helpers.d.ts +0 -4
  413. package/dist/types/utils/logging/index.d.ts +13 -1
  414. package/dist/types/utils/native/capacitor.d.ts +1 -7
  415. package/dist/types/utils/test/platform.utils.d.ts +1 -1
  416. package/hydrate/index.js +341 -103
  417. package/hydrate/index.mjs +341 -103
  418. package/package.json +5 -5
  419. package/dist/esm-es5/app-globals-c10a1137.js +0 -4
  420. package/dist/esm-es5/index-9b0d46f4.js +0 -4
  421. package/dist/esm-es5/input-shims-5e5e47e8.js +0 -4
  422. package/dist/esm-es5/md.transition-290d8802.js +0 -4
  423. package/dist/esm-es5/status-tap-ba401484.js +0 -4
  424. package/dist/ionic/p-06fee233.js +0 -4
  425. package/dist/ionic/p-1c89b09c.system.entry.js +0 -4
  426. package/dist/ionic/p-1f1b8704.entry.js +0 -4
  427. package/dist/ionic/p-30ec5574.entry.js +0 -4
  428. package/dist/ionic/p-4075165f.js +0 -4
  429. package/dist/ionic/p-4133f9ec.entry.js +0 -4
  430. package/dist/ionic/p-47ed8b64.entry.js +0 -4
  431. package/dist/ionic/p-4e8946f7.js +0 -4
  432. package/dist/ionic/p-51d4cdba.system.js +0 -4
  433. package/dist/ionic/p-665f9987.entry.js +0 -4
  434. package/dist/ionic/p-6c85db7e.system.entry.js +0 -4
  435. package/dist/ionic/p-8b367303.entry.js +0 -4
  436. package/dist/ionic/p-8f3d6be8.entry.js +0 -4
  437. package/dist/ionic/p-9e23592d.system.js +0 -4
  438. package/dist/ionic/p-a749d4a9.entry.js +0 -4
  439. package/dist/ionic/p-acb5a6e4.entry.js +0 -4
  440. package/dist/ionic/p-b1c4a9db.js +0 -4
  441. package/dist/ionic/p-b58057d4.js +0 -4
  442. package/dist/ionic/p-b5a10c8b.system.entry.js +0 -4
  443. package/dist/ionic/p-b6ee3fc7.system.entry.js +0 -4
  444. package/dist/ionic/p-c312ea08.entry.js +0 -4
  445. package/dist/ionic/p-c42a4dad.system.entry.js +0 -4
  446. package/dist/ionic/p-e03cd18a.system.entry.js +0 -4
  447. package/dist/ionic/p-e03d645e.entry.js +0 -4
  448. package/dist/ionic/p-ebb85488.entry.js +0 -4
  449. package/dist/ionic/p-efa8edbc.system.js +0 -4
  450. package/dist/ionic/p-f1bbc785.js +0 -4
  451. package/dist/ionic/p-f4f255cb.system.js +0 -4
  452. package/dist/ionic/p-f6fe87c1.js +0 -4
  453. package/dist/ionic/p-ff4b7e40.system.js +0 -4
@@ -14,10 +14,15 @@ import { getIonMode } from "../../global/ionic-global";
14
14
  * @part container - The container for the radio mark.
15
15
  * @part label - The label text describing the radio.
16
16
  * @part mark - The checkmark or dot used to indicate the checked state.
17
+ * @part supporting-text - Supporting text displayed beneath the radio label.
18
+ * @part helper-text - Supporting text displayed beneath the radio label when the radio is valid.
19
+ * @part error-text - Supporting text displayed beneath the radio label when the radio is invalid and touched.
17
20
  */
18
21
  export class Radio {
19
22
  constructor() {
20
23
  this.inputId = `ion-rb-${radioButtonIds++}`;
24
+ this.helperTextId = `${this.inputId}-helper-text`;
25
+ this.errorTextId = `${this.inputId}-error-text`;
21
26
  this.radioGroup = null;
22
27
  this.updateState = () => {
23
28
  if (this.radioGroup) {
@@ -57,6 +62,8 @@ export class Radio {
57
62
  this.color = undefined;
58
63
  this.name = this.inputId;
59
64
  this.disabled = false;
65
+ this.errorText = undefined;
66
+ this.helperText = undefined;
60
67
  this.value = undefined;
61
68
  this.labelPlacement = 'start';
62
69
  this.justify = undefined;
@@ -116,11 +123,37 @@ export class Radio {
116
123
  renderRadioControl() {
117
124
  return (h("div", { class: "radio-icon", part: "container" }, h("div", { class: "radio-inner", part: "mark" }), h("div", { class: "radio-ripple" })));
118
125
  }
126
+ getHintTextID() {
127
+ const { el, helperText, errorText, helperTextId, errorTextId } = this;
128
+ if (el.classList.contains('ion-touched') && el.classList.contains('ion-invalid') && errorText) {
129
+ return errorTextId;
130
+ }
131
+ if (helperText) {
132
+ return helperTextId;
133
+ }
134
+ return undefined;
135
+ }
136
+ /**
137
+ * Responsible for rendering helper text and error text.
138
+ * This element should only be rendered if hint text is set.
139
+ */
140
+ renderHintText() {
141
+ const { helperText, errorText, helperTextId, errorTextId } = this;
142
+ /**
143
+ * undefined and empty string values should
144
+ * be treated as not having helper/error text.
145
+ */
146
+ const hasHintText = !!helperText || !!errorText;
147
+ if (!hasHintText) {
148
+ return;
149
+ }
150
+ return (h("div", { class: "radio-bottom" }, h("div", { id: helperTextId, class: "helper-text", part: "supporting-text helper-text" }, helperText), h("div", { id: errorTextId, class: "error-text", part: "supporting-text error-text" }, errorText)));
151
+ }
119
152
  render() {
120
153
  const { checked, disabled, color, el, justify, labelPlacement, hasLabel, buttonTabindex, alignment } = this;
121
154
  const mode = getIonMode(this);
122
155
  const inItem = hostContext('ion-item', el);
123
- return (h(Host, { key: '5a0adab55ad009305de4856fa1b9f93f2279a734', onFocus: this.onFocus, onBlur: this.onBlur, onClick: this.onClick, class: createColorClasses(color, {
156
+ return (h(Host, { key: '4f01024a74c1846438372c40519df1044f5b12b9', onFocus: this.onFocus, onBlur: this.onBlur, onClick: this.onClick, class: createColorClasses(color, {
124
157
  [mode]: true,
125
158
  'in-item': inItem,
126
159
  'radio-checked': checked,
@@ -131,10 +164,10 @@ export class Radio {
131
164
  // Focus and active styling should not apply when the radio is in an item
132
165
  'ion-activatable': !inItem,
133
166
  'ion-focusable': !inItem,
134
- }), role: "radio", "aria-checked": checked ? 'true' : 'false', "aria-disabled": disabled ? 'true' : null, tabindex: buttonTabindex }, h("label", { key: 'f5673a798e6d87868339f046445f707e1d93b7b6', class: "radio-wrapper" }, h("div", { key: 'e9190c06f75a171cab63e3f74ccf771c3ed87005', class: {
167
+ }), role: "radio", "aria-checked": checked ? 'true' : 'false', "aria-disabled": disabled ? 'true' : null, "aria-describedby": this.getHintTextID(), "aria-invalid": this.getHintTextID() === this.errorTextId, tabindex: buttonTabindex }, h("label", { key: '59dc0343534e626692f3b71b32204c1b2b25d40a', class: "radio-wrapper" }, h("div", { key: '26d7d3faf1b02bb138fb2c46f83e824962b6b92e', class: {
135
168
  'label-text-wrapper': true,
136
169
  'label-text-wrapper-hidden': !hasLabel,
137
- }, part: "label" }, h("slot", { key: '6cedf4e7b3bd03e4a635727dd7b6094bab64af64' })), h("div", { key: '26dd48d9d2848b7f100b732abdc4a3171adde483', class: "native-wrapper" }, this.renderRadioControl()))));
170
+ }, part: "label" }, h("slot", { key: '9c3d8bb0c5cd3ce94d1e661d89587cf67c522bc0' }), this.renderHintText()), h("div", { key: '3183f79e2977ee001e69c23f73073555744281d8', class: "native-wrapper" }, this.renderRadioControl()))));
138
171
  }
139
172
  static get is() { return "ion-radio"; }
140
173
  static get encapsulation() { return "shadow"; }
@@ -211,6 +244,40 @@ export class Radio {
211
244
  "reflect": false,
212
245
  "defaultValue": "false"
213
246
  },
247
+ "errorText": {
248
+ "type": "string",
249
+ "mutable": false,
250
+ "complexType": {
251
+ "original": "string",
252
+ "resolved": "string | undefined",
253
+ "references": {}
254
+ },
255
+ "required": false,
256
+ "optional": true,
257
+ "docs": {
258
+ "tags": [],
259
+ "text": "Text that is placed under the radio label and displayed when an error is detected."
260
+ },
261
+ "attribute": "error-text",
262
+ "reflect": false
263
+ },
264
+ "helperText": {
265
+ "type": "string",
266
+ "mutable": false,
267
+ "complexType": {
268
+ "original": "string",
269
+ "resolved": "string | undefined",
270
+ "references": {}
271
+ },
272
+ "required": false,
273
+ "optional": true,
274
+ "docs": {
275
+ "tags": [],
276
+ "text": "Text that is placed under the radio label and displayed when no error is detected."
277
+ },
278
+ "attribute": "helper-text",
279
+ "reflect": false
280
+ },
214
281
  "value": {
215
282
  "type": "any",
216
283
  "mutable": false,
@@ -175,32 +175,39 @@ input {
175
175
  align-items: center;
176
176
  }
177
177
 
178
- :host(.radio-justify-space-between) .radio-wrapper {
178
+ .radio-bottom {
179
+ padding-top: 4px;
180
+ display: flex;
179
181
  justify-content: space-between;
182
+ font-size: 0.75rem;
183
+ white-space: normal;
180
184
  }
181
185
 
182
- :host(.radio-justify-start) .radio-wrapper {
183
- justify-content: start;
186
+ :host(.radio-label-placement-stacked) .radio-bottom {
187
+ font-size: 1rem;
184
188
  }
185
189
 
186
- :host(.radio-justify-end) .radio-wrapper {
187
- justify-content: end;
190
+ /**
191
+ * Error text should only be shown when .ion-invalid is
192
+ * present on the radio. Otherwise the helper text should
193
+ * be shown.
194
+ */
195
+ .radio-bottom .error-text {
196
+ display: none;
197
+ color: var(--ion-color-danger, #c5000f);
188
198
  }
189
199
 
190
- :host(.radio-alignment-start) .radio-wrapper {
191
- align-items: start;
200
+ .radio-bottom .helper-text {
201
+ display: block;
202
+ color: var(--ion-color-step-700, var(--ion-text-color-step-300, #4d4d4d));
192
203
  }
193
204
 
194
- :host(.radio-alignment-center) .radio-wrapper {
195
- align-items: center;
205
+ :host(.ion-touched.ion-invalid) .radio-bottom .error-text {
206
+ display: block;
196
207
  }
197
208
 
198
- :host(.radio-justify-space-between),
199
- :host(.radio-justify-start),
200
- :host(.radio-justify-end),
201
- :host(.radio-alignment-start),
202
- :host(.radio-alignment-center) {
203
- display: block;
209
+ :host(.ion-touched.ion-invalid) .radio-bottom .helper-text {
210
+ display: none;
204
211
  }
205
212
 
206
213
  /**
@@ -229,6 +236,7 @@ input {
229
236
  */
230
237
  :host(.radio-label-placement-end) .radio-wrapper {
231
238
  flex-direction: row-reverse;
239
+ justify-content: start;
232
240
  }
233
241
 
234
242
  /**
@@ -270,6 +278,7 @@ input {
270
278
  */
271
279
  :host(.radio-label-placement-stacked) .radio-wrapper {
272
280
  flex-direction: column;
281
+ text-align: center;
273
282
  }
274
283
 
275
284
  :host(.radio-label-placement-stacked) .label-text-wrapper {
@@ -315,6 +324,34 @@ input {
315
324
  }
316
325
  }
317
326
 
327
+ :host(.radio-justify-space-between) .radio-wrapper {
328
+ justify-content: space-between;
329
+ }
330
+
331
+ :host(.radio-justify-start) .radio-wrapper {
332
+ justify-content: start;
333
+ }
334
+
335
+ :host(.radio-justify-end) .radio-wrapper {
336
+ justify-content: end;
337
+ }
338
+
339
+ :host(.radio-alignment-start) .radio-wrapper {
340
+ align-items: start;
341
+ }
342
+
343
+ :host(.radio-alignment-center) .radio-wrapper {
344
+ align-items: center;
345
+ }
346
+
347
+ :host(.radio-justify-space-between),
348
+ :host(.radio-justify-start),
349
+ :host(.radio-justify-end),
350
+ :host(.radio-alignment-start),
351
+ :host(.radio-alignment-center) {
352
+ display: block;
353
+ }
354
+
318
355
  /**
319
356
  * Convert a font size to a dynamic font size.
320
357
  * Fonts that participate in Dynamic Type should use
@@ -91,6 +91,7 @@ export class Select {
91
91
  this.expandedIcon = undefined;
92
92
  this.shape = undefined;
93
93
  this.value = undefined;
94
+ this.required = false;
94
95
  }
95
96
  styleChanged() {
96
97
  this.emitStyle();
@@ -655,8 +656,8 @@ export class Select {
655
656
  return renderedLabel;
656
657
  }
657
658
  renderListbox() {
658
- const { disabled, inputId, isExpanded } = this;
659
- 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) }));
659
+ const { disabled, inputId, isExpanded, required } = this;
660
+ return (h("button", { disabled: disabled, id: inputId, "aria-label": this.ariaLabel, "aria-haspopup": "dialog", "aria-expanded": `${isExpanded}`, "aria-required": `${required}`, onFocus: this.onFocus, onBlur: this.onBlur, ref: (focusEl) => (this.focusEl = focusEl) }));
660
661
  }
661
662
  render() {
662
663
  const { disabled, el, isExpanded, expandedIcon, labelPlacement, justify, placeholder, fill, shape, name, value } = this;
@@ -687,7 +688,7 @@ export class Select {
687
688
  * TODO(FW-5592): Remove hasStartEndSlots condition
688
689
  */
689
690
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || isExpanded || hasStartEndSlots));
690
- return (h(Host, { key: 'b2dca9ae25d88e4d9fdb55003041a66be5668fcf', onClick: this.onClick, class: createColorClasses(this.color, {
691
+ return (h(Host, { key: 'f7cf03de773cd85da42978e274d65cc1eb6ed8a3', onClick: this.onClick, class: createColorClasses(this.color, {
691
692
  [mode]: true,
692
693
  'in-item': inItem,
693
694
  'in-item-color': hostContext('ion-item.ion-color', el),
@@ -703,7 +704,7 @@ export class Select {
703
704
  [`select-justify-${justify}`]: justifyEnabled,
704
705
  [`select-shape-${shape}`]: shape !== undefined,
705
706
  [`select-label-placement-${labelPlacement}`]: true,
706
- }) }, h("label", { key: 'c22fe9aee8cd448223497ef143e89529fcef8af6', class: "select-wrapper", id: "select-label" }, this.renderLabelContainer(), h("div", { key: '601972df4579f4fa6a9c2c12865593e807decb72', class: "select-wrapper-inner" }, h("slot", { key: '5f7b1261862f74b978b26f026533e3fd1cc666ba', name: "start" }), h("div", { key: '39616da89f4b4b78432f6da85116a7de2ca589e7', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), h("slot", { key: '1d7b3601b73af7c05b3627cfc8e5147ea379bb03', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && h("div", { key: 'b0344f0ac15003e22fee66d3d7ed03a07da7e8b7', class: "select-highlight" }))));
707
+ }) }, h("label", { key: '91674f8f5cce37c87a7096d09b3f1d351cba1527', class: "select-wrapper", id: "select-label" }, this.renderLabelContainer(), h("div", { key: '2229333833047db13ed2a01cb10bb6e6f774031d', class: "select-wrapper-inner" }, h("slot", { key: 'f2766bdf8bff261efa5711f72d9edef407e45189', name: "start" }), h("div", { key: '84fec020ecaaac41298a01dbffdbb2f3744170b4', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), h("slot", { key: '9b91237d7a1621bce1e15546abcb4f6b74cccc5f', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && h("div", { key: 'e02aea3e8f344376013257f5261a29408e62b359', class: "select-highlight" }))));
707
708
  }
708
709
  static get is() { return "ion-select"; }
709
710
  static get encapsulation() { return "shadow"; }
@@ -1069,6 +1070,24 @@ export class Select {
1069
1070
  },
1070
1071
  "attribute": "value",
1071
1072
  "reflect": false
1073
+ },
1074
+ "required": {
1075
+ "type": "boolean",
1076
+ "mutable": false,
1077
+ "complexType": {
1078
+ "original": "boolean",
1079
+ "resolved": "boolean",
1080
+ "references": {}
1081
+ },
1082
+ "required": false,
1083
+ "optional": false,
1084
+ "docs": {
1085
+ "tags": [],
1086
+ "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."
1087
+ },
1088
+ "attribute": "required",
1089
+ "reflect": false,
1090
+ "defaultValue": "false"
1072
1091
  }
1073
1092
  };
1074
1093
  }
@@ -373,6 +373,7 @@
373
373
  justify-content: space-between;
374
374
  border-top: var(--border-width) var(--border-style) var(--border-color);
375
375
  font-size: 0.75rem;
376
+ white-space: normal;
376
377
  }
377
378
 
378
379
  /**
@@ -396,7 +397,7 @@
396
397
 
397
398
  .textarea-bottom .helper-text {
398
399
  display: block;
399
- color: var(--ion-color-step-550, var(--ion-text-color-step-450, #737373));
400
+ color: var(--ion-color-step-700, var(--ion-text-color-step-300, #4d4d4d));
400
401
  }
401
402
 
402
403
  :host(.ion-touched.ion-invalid) .textarea-bottom .error-text {
@@ -415,7 +416,7 @@
415
416
  */
416
417
  -webkit-margin-start: auto;
417
418
  margin-inline-start: auto;
418
- color: var(--ion-color-step-550, var(--ion-text-color-step-450, #737373));
419
+ color: var(--ion-color-step-700, var(--ion-text-color-step-300, #4d4d4d));
419
420
  white-space: nowrap;
420
421
  padding-inline-start: 16px;
421
422
  }
@@ -373,6 +373,7 @@
373
373
  justify-content: space-between;
374
374
  border-top: var(--border-width) var(--border-style) var(--border-color);
375
375
  font-size: 0.75rem;
376
+ white-space: normal;
376
377
  }
377
378
 
378
379
  /**
@@ -396,7 +397,7 @@
396
397
 
397
398
  .textarea-bottom .helper-text {
398
399
  display: block;
399
- color: var(--ion-color-step-550, var(--ion-text-color-step-450, #737373));
400
+ color: var(--ion-color-step-700, var(--ion-text-color-step-300, #4d4d4d));
400
401
  }
401
402
 
402
403
  :host(.ion-touched.ion-invalid) .textarea-bottom .error-text {
@@ -415,7 +416,7 @@
415
416
  */
416
417
  -webkit-margin-start: auto;
417
418
  margin-inline-start: auto;
418
- color: var(--ion-color-step-550, var(--ion-text-color-step-450, #737373));
419
+ color: var(--ion-color-step-700, var(--ion-text-color-step-300, #4d4d4d));
419
420
  white-space: nowrap;
420
421
  padding-inline-start: 16px;
421
422
  }
@@ -928,6 +929,10 @@
928
929
  --border-color: var(--highlight-color);
929
930
  }
930
931
 
932
+ /**
933
+ * The bottom content should never have
934
+ * a border with the solid style.
935
+ */
931
936
  :host(.textarea-fill-solid) .textarea-bottom {
932
937
  border-top: none;
933
938
  }
@@ -71,6 +71,7 @@ export class Toggle {
71
71
  this.labelPlacement = 'start';
72
72
  this.justify = undefined;
73
73
  this.alignment = undefined;
74
+ this.required = false;
74
75
  }
75
76
  disabledChanged() {
76
77
  if (this.gesture) {
@@ -152,12 +153,12 @@ export class Toggle {
152
153
  return this.el.textContent !== '';
153
154
  }
154
155
  render() {
155
- const { activated, color, checked, disabled, el, justify, labelPlacement, inputId, name, alignment } = this;
156
+ const { activated, color, checked, disabled, el, justify, labelPlacement, inputId, name, alignment, required } = this;
156
157
  const mode = getIonMode(this);
157
158
  const value = this.getValue();
158
159
  const rtl = isRTL(el) ? 'rtl' : 'ltr';
159
160
  renderHiddenInput(true, el, name, checked ? value : '', disabled);
160
- return (h(Host, { key: 'f52195ec3bc14c024647cb41319c32a4cd330e19', onClick: this.onClick, class: createColorClasses(color, {
161
+ return (h(Host, { key: 'ed75573caa6e37011f1453dd7f723fb9bd8a3656', onClick: this.onClick, class: createColorClasses(color, {
161
162
  [mode]: true,
162
163
  'in-item': hostContext('ion-item', el),
163
164
  'toggle-activated': activated,
@@ -167,10 +168,10 @@ export class Toggle {
167
168
  [`toggle-alignment-${alignment}`]: alignment !== undefined,
168
169
  [`toggle-label-placement-${labelPlacement}`]: true,
169
170
  [`toggle-${rtl}`]: true,
170
- }) }, h("label", { key: 'f8b3a215ad85b2cee611ad63449b584e1640f27f', class: "toggle-wrapper" }, h("input", Object.assign({ key: 'f387b1ea840737a9737917e516834c887be99c09', type: "checkbox", role: "switch", "aria-checked": `${checked}`, checked: checked, disabled: disabled, id: inputId, onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), ref: (focusEl) => (this.focusEl = focusEl) }, this.inheritedAttributes)), h("div", { key: '936af880db59fe377cd2de9101eb28a1c4fb8914', class: {
171
+ }) }, h("label", { key: '484860e2a33f4d123904edb96159f0e1972d3add', class: "toggle-wrapper" }, h("input", Object.assign({ key: '360b53080aacfd99a9ff60ffb5219816bd4163ee', type: "checkbox", role: "switch", "aria-checked": `${checked}`, checked: checked, disabled: disabled, id: inputId, onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), ref: (focusEl) => (this.focusEl = focusEl), required: required }, this.inheritedAttributes)), h("div", { key: 'f7239fa668fe11257239ea30cf0198e4f3274f6b', class: {
171
172
  'label-text-wrapper': true,
172
173
  'label-text-wrapper-hidden': !this.hasLabel,
173
- }, part: "label" }, h("slot", { key: '80a6672e2e792c15011a9496dcd75363cdba31c6' })), h("div", { key: '2b2b318b38ab27b194c0dab4cecd77d9d780f2ca', class: "native-wrapper" }, this.renderToggleControl()))));
174
+ }, part: "label" }, h("slot", { key: '9495a4a39889822ee68e0d89dc5a2f863d1feb3c' })), h("div", { key: '55f1eb08c4b705e94fbcf02220bbe1d292f06155', class: "native-wrapper" }, this.renderToggleControl()))));
174
175
  }
175
176
  static get is() { return "ion-toggle"; }
176
177
  static get encapsulation() { return "shadow"; }
@@ -352,6 +353,24 @@ export class Toggle {
352
353
  },
353
354
  "attribute": "alignment",
354
355
  "reflect": false
356
+ },
357
+ "required": {
358
+ "type": "boolean",
359
+ "mutable": false,
360
+ "complexType": {
361
+ "original": "boolean",
362
+ "resolved": "boolean",
363
+ "references": {}
364
+ },
365
+ "required": false,
366
+ "optional": false,
367
+ "docs": {
368
+ "tags": [],
369
+ "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."
370
+ },
371
+ "attribute": "required",
372
+ "reflect": false,
373
+ "defaultValue": "false"
355
374
  }
356
375
  };
357
376
  }
@@ -12,6 +12,10 @@ import { getIonMode } from "../../global/ionic-global";
12
12
  * @slot secondary - Content is placed to the left of the toolbar text in `ios` mode, and directly to the right in `md` mode.
13
13
  * @slot primary - Content is placed to the right of the toolbar text in `ios` mode, and to the far right in `md` mode.
14
14
  * @slot end - Content is placed to the right of the toolbar text in LTR, and to the left in RTL.
15
+ *
16
+ * @part background - The background of the toolbar, covering the entire area behind the toolbar content.
17
+ * @part container - The container that wraps all toolbar content, including the default slot and named slot content.
18
+ * @part content - The container for the default slot, wrapping content provided without a named slot.
15
19
  */
16
20
  export class Toolbar {
17
21
  constructor() {
@@ -62,10 +66,10 @@ export class Toolbar {
62
66
  this.childrenStyles.forEach((value) => {
63
67
  Object.assign(childStyles, value);
64
68
  });
65
- return (h(Host, { key: '462538a5ecd01baf3cde116c9f029aeda26c81be', class: Object.assign(Object.assign({}, childStyles), createColorClasses(this.color, {
69
+ return (h(Host, { key: '4fdc9ae82a93237cc28ceb95b0ebd8069b62839d', class: Object.assign(Object.assign({}, childStyles), createColorClasses(this.color, {
66
70
  [mode]: true,
67
71
  'in-toolbar': hostContext('ion-toolbar', this.el),
68
- })) }, h("div", { key: 'c0b4415d3b2472de643a9be7cb3b13b3b628621b', class: "toolbar-background" }), h("div", { key: '0ccb8a2dbeaa28d8f9bed87629c0c097446690c2', class: "toolbar-container" }, h("slot", { key: '3e726dac359e923df21d80301651f16063a3de20', name: "start" }), h("slot", { key: 'cd799330b56a7f8833bc61bb2807aafb21846f71', name: "secondary" }), h("div", { key: '395282e6ac8c53576922dcdb5f08c25d34638c86', class: "toolbar-content" }, h("slot", { key: 'a437c60e4ba5aae65e55169ae82a6f379868ec1d' })), h("slot", { key: '711af9b9d321a7b31ede924c9bdcad767aa9a1ca', name: "primary" }), h("slot", { key: 'ecc02edeaf80a837890bcb08d5096df1e22a0b9a', name: "end" }))));
72
+ })) }, h("div", { key: '443a216362bbbf1c149ed12140d52b0f0ea2d664', class: "toolbar-background", part: "background" }), h("div", { key: '1df87f4027d605e42757a13d4828df45b90a4fdc', class: "toolbar-container", part: "container" }, h("slot", { key: 'f66f34972be8e3f4915b9c6f5808600dbaedb1ea', name: "start" }), h("slot", { key: '14f38b0975e956f404c4eb3ee56f2055c6615276', name: "secondary" }), h("div", { key: '75ba5953a25c7544793484d2b245792cb0a5af75', class: "toolbar-content", part: "content" }, h("slot", { key: '149dfa58ff7106f318fecb4134e7c69edf8bc231' })), h("slot", { key: '807ab9ad21d7f1d9d427a4086460bcb9e5e8c019', name: "primary" }), h("slot", { key: 'bd2f9da95d2fa8e74dc6e0666587ceecbba99d9f', name: "end" }))));
69
73
  }
70
74
  static get is() { return "ion-toolbar"; }
71
75
  static get encapsulation() { return "shadow"; }
@@ -1,10 +1,7 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { isSafeNumber } from "../helpers";
5
4
  export function getDecimalPlaces(n) {
6
- if (!isSafeNumber(n))
7
- return 0;
8
5
  if (n % 1 === 0)
9
6
  return 0;
10
7
  return n.toString().split('.')[1].length;
@@ -42,8 +39,6 @@ export function getDecimalPlaces(n) {
42
39
  * be used as a reference for the desired specificity.
43
40
  */
44
41
  export function roundToMaxDecimalPlaces(n, ...references) {
45
- if (!isSafeNumber(n))
46
- return 0;
47
42
  const maxPlaces = Math.max(...references.map((r) => getDecimalPlaces(r)));
48
43
  return Number(n.toFixed(maxPlaces));
49
44
  }
@@ -374,9 +374,3 @@ export const getNextSiblingOfType = (element) => {
374
374
  }
375
375
  return null;
376
376
  };
377
- /**
378
- * Checks input for usable number. Not NaN and not Infinite.
379
- */
380
- export const isSafeNumber = (input) => {
381
- return typeof input === 'number' && !isNaN(input) && isFinite(input);
382
- };
@@ -1,6 +1,7 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
+ import { config } from "../../global/config";
4
5
  /**
5
6
  * Logs a warning to the console with an Ionic prefix
6
7
  * to indicate the library that is warning the developer.
@@ -8,9 +9,12 @@
8
9
  * @param message - The string message to be logged to the console.
9
10
  */
10
11
  export const printIonWarning = (message, ...params) => {
11
- return console.warn(`[Ionic Warning]: ${message}`, ...params);
12
+ const logLevel = config.get('logLevel', "WARN" /* LogLevel.WARN */);
13
+ if (["WARN" /* LogLevel.WARN */].includes(logLevel)) {
14
+ return console.warn(`[Ionic Warning]: ${message}`, ...params);
15
+ }
12
16
  };
13
- /*
17
+ /**
14
18
  * Logs an error to the console with an Ionic prefix
15
19
  * to indicate the library that is warning the developer.
16
20
  *
@@ -18,7 +22,10 @@ export const printIonWarning = (message, ...params) => {
18
22
  * @param params - Additional arguments to supply to the console.error.
19
23
  */
20
24
  export const printIonError = (message, ...params) => {
21
- return console.error(`[Ionic Error]: ${message}`, ...params);
25
+ const logLevel = config.get('logLevel', "ERROR" /* LogLevel.ERROR */);
26
+ if (["ERROR" /* LogLevel.ERROR */, "WARN" /* LogLevel.WARN */].includes(logLevel)) {
27
+ return console.error(`[Ionic Error]: ${message}`, ...params);
28
+ }
22
29
  };
23
30
  /**
24
31
  * Prints an error informing developers that an implementation requires an element to be used
@@ -67,8 +67,7 @@ const isHybrid = (win) => isCordova(win) || isCapacitorNative(win);
67
67
  const isCordova = (win) => !!(win['cordova'] || win['phonegap'] || win['PhoneGap']);
68
68
  const isCapacitorNative = (win) => {
69
69
  const capacitor = win['Capacitor'];
70
- // TODO(ROU-11693): Remove when we no longer support Capacitor 2, which does not have isNativePlatform
71
- return !!((capacitor === null || capacitor === void 0 ? void 0 : capacitor.isNative) || ((capacitor === null || capacitor === void 0 ? void 0 : capacitor.isNativePlatform) && !!capacitor.isNativePlatform()));
70
+ return !!(capacitor === null || capacitor === void 0 ? void 0 : capacitor.isNative);
72
71
  };
73
72
  const isElectron = (win) => testUserAgent(win, /electron/i);
74
73
  const isPWA = (win) => { var _a; return !!(((_a = win.matchMedia) === null || _a === void 0 ? void 0 : _a.call(win, '(display-mode: standalone)').matches) || win.navigator.standalone); };
@@ -28,7 +28,7 @@ export const PlatformConfiguration = {
28
28
  },
29
29
  Capacitor: {
30
30
  Capacitor: {
31
- isNativePlatform: () => true,
31
+ isNative: true,
32
32
  },
33
33
  },
34
34
  PWA: {