@ionic/core 8.4.4-dev.11741632207.1cb10db6 → 8.4.4-dev.11741648084.118e26ac

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 (419) hide show
  1. package/components/alert.js +30 -4
  2. package/components/checkbox.js +37 -5
  3. package/components/helpers.js +7 -1
  4. package/components/index9.js +1 -1
  5. package/components/ion-range.js +28 -6
  6. package/components/ion-router.js +1 -1
  7. package/components/ion-segment-button.js +1 -1
  8. package/components/ion-select.js +47 -5
  9. package/components/ion-toggle.js +38 -5
  10. package/components/ionic-global.js +2 -1
  11. package/components/modal.js +15 -7
  12. package/dist/cjs/{app-globals-21afee77.js → app-globals-4283fe37.js} +1 -1
  13. package/dist/cjs/{data-108e531d.js → data-26456291.js} +1 -1
  14. package/dist/cjs/{framework-delegate-05579976.js → framework-delegate-c4f2ba04.js} +1 -1
  15. package/dist/cjs/{hardware-back-button-9e8a2c4f.js → hardware-back-button-f2cbbdce.js} +1 -1
  16. package/dist/cjs/{helpers-4be3f90d.js → helpers-b14a0f09.js} +7 -0
  17. package/dist/cjs/{index-0ff61d0b.js → index-0d2610b6.js} +4 -4
  18. package/dist/cjs/{index-2a46a047.js → index-275c982e.js} +1 -1
  19. package/dist/cjs/{index-6770fc00.js → index-608fc5fd.js} +2 -2
  20. package/dist/cjs/{index-26bb7e42.js → index-6ad4725f.js} +5 -5
  21. package/dist/cjs/{index-ad7a712e.js → index-786364c7.js} +1 -1
  22. package/dist/cjs/index.cjs.js +10 -10
  23. package/dist/cjs/{input-shims-fd997b01.js → input-shims-a2cf9d15.js} +4 -4
  24. package/dist/cjs/{input.utils-c15a1814.js → input.utils-18725f61.js} +2 -2
  25. package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -3
  26. package/dist/cjs/ion-action-sheet.cjs.entry.js +6 -6
  27. package/dist/cjs/ion-alert.cjs.entry.js +36 -10
  28. package/dist/cjs/ion-app_8.cjs.entry.js +12 -12
  29. package/dist/cjs/ion-avatar_3.cjs.entry.js +1 -1
  30. package/dist/cjs/ion-back-button.cjs.entry.js +2 -2
  31. package/dist/cjs/ion-backdrop.cjs.entry.js +1 -1
  32. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +2 -2
  33. package/dist/cjs/ion-button_2.cjs.entry.js +3 -3
  34. package/dist/cjs/ion-card_5.cjs.entry.js +2 -2
  35. package/dist/cjs/ion-checkbox.cjs.entry.js +37 -7
  36. package/dist/cjs/ion-chip.cjs.entry.js +1 -1
  37. package/dist/cjs/ion-col_3.cjs.entry.js +1 -1
  38. package/dist/cjs/ion-datetime-button.cjs.entry.js +4 -4
  39. package/dist/cjs/ion-datetime_3.cjs.entry.js +7 -7
  40. package/dist/cjs/ion-fab_3.cjs.entry.js +2 -2
  41. package/dist/cjs/ion-img.cjs.entry.js +2 -2
  42. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +4 -4
  43. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +2 -2
  44. package/dist/cjs/ion-input.cjs.entry.js +5 -5
  45. package/dist/cjs/ion-item-option_3.cjs.entry.js +4 -4
  46. package/dist/cjs/ion-item_8.cjs.entry.js +2 -2
  47. package/dist/cjs/ion-loading.cjs.entry.js +6 -6
  48. package/dist/cjs/ion-menu_3.cjs.entry.js +7 -7
  49. package/dist/cjs/ion-modal.cjs.entry.js +23 -15
  50. package/dist/cjs/ion-nav_2.cjs.entry.js +6 -6
  51. package/dist/cjs/ion-picker-column-option.cjs.entry.js +2 -2
  52. package/dist/cjs/ion-picker-column.cjs.entry.js +2 -2
  53. package/dist/cjs/ion-picker.cjs.entry.js +1 -1
  54. package/dist/cjs/ion-popover.cjs.entry.js +7 -7
  55. package/dist/cjs/ion-progress-bar.cjs.entry.js +2 -2
  56. package/dist/cjs/ion-radio_2.cjs.entry.js +2 -2
  57. package/dist/cjs/ion-range.cjs.entry.js +30 -9
  58. package/dist/cjs/ion-refresher_2.cjs.entry.js +4 -4
  59. package/dist/cjs/ion-reorder_2.cjs.entry.js +4 -4
  60. package/dist/cjs/ion-ripple-effect.cjs.entry.js +1 -1
  61. package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
  62. package/dist/cjs/ion-searchbar.cjs.entry.js +2 -2
  63. package/dist/cjs/ion-segment_2.cjs.entry.js +2 -2
  64. package/dist/cjs/ion-select-modal.cjs.entry.js +6 -6
  65. package/dist/cjs/ion-select_3.cjs.entry.js +52 -12
  66. package/dist/cjs/ion-spinner.cjs.entry.js +1 -1
  67. package/dist/cjs/ion-split-pane.cjs.entry.js +1 -1
  68. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +2 -2
  69. package/dist/cjs/ion-tab_2.cjs.entry.js +2 -2
  70. package/dist/cjs/ion-text.cjs.entry.js +1 -1
  71. package/dist/cjs/ion-textarea.cjs.entry.js +5 -5
  72. package/dist/cjs/ion-toast.cjs.entry.js +6 -6
  73. package/dist/cjs/ion-toggle.cjs.entry.js +38 -7
  74. package/dist/cjs/{ionic-global-d9a8bb5b.js → ionic-global-96da1b2e.js} +2 -1
  75. package/dist/cjs/ionic.cjs.js +3 -3
  76. package/dist/cjs/{ios.transition-a4f35c55.js → ios.transition-e188169d.js} +4 -4
  77. package/dist/cjs/loader.cjs.js +3 -3
  78. package/dist/cjs/{md.transition-cdf904e6.js → md.transition-b66da2a1.js} +4 -4
  79. package/dist/cjs/{notch-controller-a0c464d1.js → notch-controller-bd07748b.js} +1 -1
  80. package/dist/cjs/{overlays-86695cf1.js → overlays-b0b07774.js} +5 -5
  81. package/dist/cjs/{status-tap-1a2485c1.js → status-tap-3b633cba.js} +4 -4
  82. package/dist/cjs/{swipe-back-47a52b83.js → swipe-back-b70cd52e.js} +1 -1
  83. package/dist/collection/components/alert/alert.js +34 -4
  84. package/dist/collection/components/checkbox/checkbox.ios.css +52 -15
  85. package/dist/collection/components/checkbox/checkbox.js +70 -3
  86. package/dist/collection/components/checkbox/checkbox.md.css +52 -15
  87. package/dist/collection/components/modal/gestures/sheet.js +11 -3
  88. package/dist/collection/components/modal/modal.js +5 -5
  89. package/dist/collection/components/range/range.js +25 -6
  90. package/dist/collection/components/select/select.ios.css +59 -0
  91. package/dist/collection/components/select/select.js +80 -3
  92. package/dist/collection/components/select/select.md.css +61 -0
  93. package/dist/collection/components/toggle/toggle.ios.css +52 -15
  94. package/dist/collection/components/toggle/toggle.js +71 -3
  95. package/dist/collection/components/toggle/toggle.md.css +52 -15
  96. package/dist/collection/utils/floating-point/index.js +5 -0
  97. package/dist/collection/utils/helpers.js +6 -0
  98. package/dist/collection/utils/platform.js +2 -1
  99. package/dist/collection/utils/test/platform.utils.js +1 -1
  100. package/dist/docs.json +222 -2
  101. package/dist/esm/{app-globals-5dbb61a5.js → app-globals-c10a1137.js} +1 -1
  102. package/dist/esm/{data-b3284b5e.js → data-bf516e75.js} +1 -1
  103. package/dist/esm/{framework-delegate-f683816e.js → framework-delegate-42bc40b1.js} +1 -1
  104. package/dist/esm/{hardware-back-button-06ef3c3e.js → hardware-back-button-44195e92.js} +1 -1
  105. package/dist/esm/{helpers-9b49d7d2.js → helpers-13b816c6.js} +7 -1
  106. package/dist/esm/{index-5a0f5fd0.js → index-28c8fd64.js} +1 -1
  107. package/dist/esm/{index-6a5baab0.js → index-879a2080.js} +5 -5
  108. package/dist/esm/{index-7105cd59.js → index-b4ac4019.js} +4 -4
  109. package/dist/esm/{index-6ad967f3.js → index-ce8d38d0.js} +1 -1
  110. package/dist/esm/{index-dd0f7395.js → index-ec2140bf.js} +2 -2
  111. package/dist/esm/index.js +10 -10
  112. package/dist/esm/{input-shims-dff819a9.js → input-shims-4c3d7279.js} +4 -4
  113. package/dist/esm/{input.utils-2f1029cf.js → input.utils-b4805900.js} +2 -2
  114. package/dist/esm/ion-accordion_2.entry.js +3 -3
  115. package/dist/esm/ion-action-sheet.entry.js +6 -6
  116. package/dist/esm/ion-alert.entry.js +36 -10
  117. package/dist/esm/ion-app_8.entry.js +12 -12
  118. package/dist/esm/ion-avatar_3.entry.js +1 -1
  119. package/dist/esm/ion-back-button.entry.js +2 -2
  120. package/dist/esm/ion-backdrop.entry.js +1 -1
  121. package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
  122. package/dist/esm/ion-button_2.entry.js +3 -3
  123. package/dist/esm/ion-card_5.entry.js +2 -2
  124. package/dist/esm/ion-checkbox.entry.js +37 -7
  125. package/dist/esm/ion-chip.entry.js +1 -1
  126. package/dist/esm/ion-col_3.entry.js +1 -1
  127. package/dist/esm/ion-datetime-button.entry.js +4 -4
  128. package/dist/esm/ion-datetime_3.entry.js +7 -7
  129. package/dist/esm/ion-fab_3.entry.js +2 -2
  130. package/dist/esm/ion-img.entry.js +2 -2
  131. package/dist/esm/ion-infinite-scroll_2.entry.js +4 -4
  132. package/dist/esm/ion-input-password-toggle.entry.js +2 -2
  133. package/dist/esm/ion-input.entry.js +5 -5
  134. package/dist/esm/ion-item-option_3.entry.js +4 -4
  135. package/dist/esm/ion-item_8.entry.js +2 -2
  136. package/dist/esm/ion-loading.entry.js +6 -6
  137. package/dist/esm/ion-menu_3.entry.js +7 -7
  138. package/dist/esm/ion-modal.entry.js +23 -15
  139. package/dist/esm/ion-nav_2.entry.js +6 -6
  140. package/dist/esm/ion-picker-column-option.entry.js +2 -2
  141. package/dist/esm/ion-picker-column.entry.js +2 -2
  142. package/dist/esm/ion-picker.entry.js +1 -1
  143. package/dist/esm/ion-popover.entry.js +7 -7
  144. package/dist/esm/ion-progress-bar.entry.js +2 -2
  145. package/dist/esm/ion-radio_2.entry.js +2 -2
  146. package/dist/esm/ion-range.entry.js +30 -9
  147. package/dist/esm/ion-refresher_2.entry.js +4 -4
  148. package/dist/esm/ion-reorder_2.entry.js +4 -4
  149. package/dist/esm/ion-ripple-effect.entry.js +1 -1
  150. package/dist/esm/ion-route_4.entry.js +2 -2
  151. package/dist/esm/ion-searchbar.entry.js +2 -2
  152. package/dist/esm/ion-segment_2.entry.js +2 -2
  153. package/dist/esm/ion-select-modal.entry.js +6 -6
  154. package/dist/esm/ion-select_3.entry.js +52 -12
  155. package/dist/esm/ion-spinner.entry.js +1 -1
  156. package/dist/esm/ion-split-pane.entry.js +1 -1
  157. package/dist/esm/ion-tab-bar_2.entry.js +2 -2
  158. package/dist/esm/ion-tab_2.entry.js +2 -2
  159. package/dist/esm/ion-text.entry.js +1 -1
  160. package/dist/esm/ion-textarea.entry.js +5 -5
  161. package/dist/esm/ion-toast.entry.js +6 -6
  162. package/dist/esm/ion-toggle.entry.js +38 -7
  163. package/dist/esm/{ionic-global-c81d82ab.js → ionic-global-bf78a847.js} +2 -1
  164. package/dist/esm/ionic.js +3 -3
  165. package/dist/esm/{ios.transition-314468a2.js → ios.transition-ffee637f.js} +4 -4
  166. package/dist/esm/loader.js +3 -3
  167. package/dist/esm/{md.transition-a560e0e2.js → md.transition-3a4f9709.js} +4 -4
  168. package/dist/esm/{notch-controller-3dc61260.js → notch-controller-bb8f3a48.js} +1 -1
  169. package/dist/esm/{overlays-9a81f230.js → overlays-36f5880e.js} +5 -5
  170. package/dist/esm/{status-tap-d07dbc82.js → status-tap-2ce7841e.js} +4 -4
  171. package/dist/esm/{swipe-back-23ee7ab1.js → swipe-back-a258b011.js} +1 -1
  172. package/dist/esm-es5/app-globals-c10a1137.js +4 -0
  173. package/dist/esm-es5/{data-b3284b5e.js → data-bf516e75.js} +1 -1
  174. package/dist/esm-es5/{framework-delegate-f683816e.js → framework-delegate-42bc40b1.js} +1 -1
  175. package/dist/esm-es5/{hardware-back-button-06ef3c3e.js → hardware-back-button-44195e92.js} +1 -1
  176. package/dist/esm-es5/{helpers-9b49d7d2.js → helpers-13b816c6.js} +1 -1
  177. package/dist/esm-es5/{index-5a0f5fd0.js → index-28c8fd64.js} +1 -1
  178. package/dist/esm-es5/{index-6a5baab0.js → index-879a2080.js} +1 -1
  179. package/dist/esm-es5/{index-7105cd59.js → index-b4ac4019.js} +1 -1
  180. package/dist/esm-es5/{index-6ad967f3.js → index-ce8d38d0.js} +1 -1
  181. package/dist/esm-es5/{index-dd0f7395.js → index-ec2140bf.js} +1 -1
  182. package/dist/esm-es5/index.js +1 -1
  183. package/dist/esm-es5/{input-shims-dff819a9.js → input-shims-4c3d7279.js} +1 -1
  184. package/dist/esm-es5/{input.utils-2f1029cf.js → input.utils-b4805900.js} +1 -1
  185. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  186. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  187. package/dist/esm-es5/ion-alert.entry.js +1 -1
  188. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  189. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  190. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  191. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  192. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  193. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  194. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  195. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  196. package/dist/esm-es5/ion-chip.entry.js +1 -1
  197. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  198. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  199. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  200. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  201. package/dist/esm-es5/ion-img.entry.js +1 -1
  202. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  203. package/dist/esm-es5/ion-input-password-toggle.entry.js +1 -1
  204. package/dist/esm-es5/ion-input.entry.js +1 -1
  205. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  206. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  207. package/dist/esm-es5/ion-loading.entry.js +1 -1
  208. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  209. package/dist/esm-es5/ion-modal.entry.js +1 -1
  210. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  211. package/dist/esm-es5/ion-picker-column-option.entry.js +1 -1
  212. package/dist/esm-es5/ion-picker-column.entry.js +1 -1
  213. package/dist/esm-es5/ion-picker.entry.js +1 -1
  214. package/dist/esm-es5/ion-popover.entry.js +1 -1
  215. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  216. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  217. package/dist/esm-es5/ion-range.entry.js +1 -1
  218. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  219. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  220. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  221. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  222. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  223. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  224. package/dist/esm-es5/ion-select-modal.entry.js +1 -1
  225. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  226. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  227. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  228. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  229. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  230. package/dist/esm-es5/ion-text.entry.js +1 -1
  231. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  232. package/dist/esm-es5/ion-toast.entry.js +1 -1
  233. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  234. package/dist/esm-es5/{ionic-global-c81d82ab.js → ionic-global-bf78a847.js} +1 -1
  235. package/dist/esm-es5/ionic.js +1 -1
  236. package/dist/esm-es5/{ios.transition-314468a2.js → ios.transition-ffee637f.js} +1 -1
  237. package/dist/esm-es5/loader.js +1 -1
  238. package/dist/esm-es5/md.transition-3a4f9709.js +4 -0
  239. package/dist/esm-es5/{notch-controller-3dc61260.js → notch-controller-bb8f3a48.js} +1 -1
  240. package/dist/esm-es5/{overlays-9a81f230.js → overlays-36f5880e.js} +1 -1
  241. package/dist/esm-es5/{status-tap-d07dbc82.js → status-tap-2ce7841e.js} +1 -1
  242. package/dist/esm-es5/{swipe-back-23ee7ab1.js → swipe-back-a258b011.js} +1 -1
  243. package/dist/html.html-data.json +25 -1
  244. package/dist/ionic/index.esm.js +1 -1
  245. package/dist/ionic/ionic.esm.js +1 -1
  246. package/dist/ionic/ionic.js +1 -1
  247. package/dist/ionic/{p-bb2a6761.entry.js → p-00d5ab83.entry.js} +1 -1
  248. package/dist/ionic/{p-b1f885df.entry.js → p-020df11a.entry.js} +1 -1
  249. package/dist/ionic/{p-1a5bc5f7.js → p-03940ae5.js} +1 -1
  250. package/dist/ionic/p-0412232d.js +4 -0
  251. package/dist/ionic/{p-a309ca1c.entry.js → p-0434c94c.entry.js} +1 -1
  252. package/dist/ionic/{p-da8ef548.system.entry.js → p-05f90810.system.entry.js} +1 -1
  253. package/dist/ionic/{p-89bf08c7.entry.js → p-09e4bf0d.entry.js} +1 -1
  254. package/dist/ionic/p-0ab8caf8.system.entry.js +4 -0
  255. package/dist/ionic/{p-6ca64f4e.entry.js → p-0eab6979.entry.js} +1 -1
  256. package/dist/ionic/p-0f138cf3.entry.js +4 -0
  257. package/dist/ionic/{p-78c884a1.system.entry.js → p-166a794f.system.entry.js} +1 -1
  258. package/dist/ionic/{p-fca17935.entry.js → p-16dd9c9b.entry.js} +1 -1
  259. package/dist/ionic/{p-acb30a5c.system.js → p-187396b1.system.js} +1 -1
  260. package/dist/ionic/{p-fa210a45.system.entry.js → p-1cf593cf.system.entry.js} +1 -1
  261. package/dist/ionic/{p-4ad78edc.entry.js → p-1f62c30b.entry.js} +1 -1
  262. package/dist/ionic/p-21780245.entry.js +4 -0
  263. package/dist/ionic/{p-b936eb7e.system.entry.js → p-21ee4f71.system.entry.js} +1 -1
  264. package/dist/ionic/{p-04b4ee62.entry.js → p-221fbdf5.entry.js} +1 -1
  265. package/dist/ionic/{p-dd0c9350.system.entry.js → p-25580c85.system.entry.js} +1 -1
  266. package/dist/ionic/{p-dde1e5b8.entry.js → p-2840743b.entry.js} +1 -1
  267. package/dist/ionic/{p-3624eb4f.entry.js → p-29cccf08.entry.js} +1 -1
  268. package/dist/ionic/{p-343b6b1d.system.js → p-2c1d4963.system.js} +1 -1
  269. package/dist/ionic/{p-b93144e1.entry.js → p-2f429536.entry.js} +1 -1
  270. package/dist/ionic/{p-9b3bb24e.entry.js → p-34182275.entry.js} +1 -1
  271. package/dist/ionic/{p-2bc73fb5.js → p-3559bd4f.js} +1 -1
  272. package/dist/ionic/p-38df41a6.system.js +4 -0
  273. package/dist/ionic/{p-8e407469.system.js → p-3a4d77b9.system.js} +1 -1
  274. package/dist/ionic/{p-3731296e.entry.js → p-3b872754.entry.js} +1 -1
  275. package/dist/ionic/{p-16960598.entry.js → p-41d7ca3c.entry.js} +1 -1
  276. package/dist/ionic/{p-f2fb9a7b.system.entry.js → p-4200e056.system.entry.js} +1 -1
  277. package/dist/ionic/{p-bf63d4b2.entry.js → p-43bfbfd7.entry.js} +1 -1
  278. package/dist/ionic/{p-e8f34871.entry.js → p-441c2c8c.entry.js} +1 -1
  279. package/dist/ionic/{p-1f9fa897.system.entry.js → p-47026941.system.entry.js} +1 -1
  280. package/dist/ionic/{p-f3102647.system.entry.js → p-478dfa8c.system.entry.js} +1 -1
  281. package/dist/ionic/{p-ba3f918e.entry.js → p-48e9eedb.entry.js} +1 -1
  282. package/dist/ionic/{p-0eb2553a.system.entry.js → p-4a98a017.system.entry.js} +1 -1
  283. package/dist/ionic/{p-990630ca.js → p-4e0643a3.js} +1 -1
  284. package/dist/ionic/p-4e8946f7.js +4 -0
  285. package/dist/ionic/{p-c59abcb6.system.entry.js → p-506f2664.system.entry.js} +1 -1
  286. package/dist/ionic/p-51d4cdba.system.js +4 -0
  287. package/dist/ionic/{p-5126cf1e.system.js → p-52b61cba.system.js} +1 -1
  288. package/dist/ionic/p-541b5191.entry.js +4 -0
  289. package/dist/ionic/{p-f5d6624d.entry.js → p-5a1017f3.entry.js} +1 -1
  290. package/dist/ionic/{p-36c448fe.entry.js → p-5bc47f96.entry.js} +1 -1
  291. package/dist/ionic/p-5c364a5b.entry.js +4 -0
  292. package/dist/ionic/{p-ca7b5bec.system.entry.js → p-5f10138c.system.entry.js} +1 -1
  293. package/dist/ionic/{p-ad10b555.system.entry.js → p-5f7a9125.system.entry.js} +2 -2
  294. package/dist/ionic/p-60f7c85d.entry.js +4 -0
  295. package/dist/ionic/p-62151078.system.entry.js +4 -0
  296. package/dist/ionic/p-623b4fa6.system.entry.js +4 -0
  297. package/dist/ionic/{p-78604c34.entry.js → p-62d2e17d.entry.js} +1 -1
  298. package/dist/ionic/{p-4f8e2c0a.system.entry.js → p-6321783a.system.entry.js} +1 -1
  299. package/dist/ionic/{p-d99e8644.system.js → p-6579f457.system.js} +1 -1
  300. package/dist/ionic/{p-73262d9e.system.entry.js → p-66425a02.system.entry.js} +1 -1
  301. package/dist/ionic/{p-8f2fe279.system.entry.js → p-6703c724.system.entry.js} +1 -1
  302. package/dist/ionic/{p-bb11d9fb.js → p-6eb35904.js} +1 -1
  303. package/dist/ionic/{p-ecceeb90.js → p-6f3d8334.js} +1 -1
  304. package/dist/ionic/{p-462ddb40.entry.js → p-6f6dd24f.entry.js} +1 -1
  305. package/dist/ionic/p-717520d6.system.entry.js +4 -0
  306. package/dist/ionic/{p-655723eb.system.entry.js → p-72210f2a.system.entry.js} +1 -1
  307. package/dist/ionic/{p-73897169.system.js → p-74e328cf.system.js} +1 -1
  308. package/dist/ionic/{p-39dd4f62.js → p-761c42da.js} +1 -1
  309. package/dist/ionic/{p-484d855b.system.entry.js → p-7d1cbf97.system.entry.js} +2 -2
  310. package/dist/ionic/{p-5c9324c6.js → p-7e70835f.js} +1 -1
  311. package/dist/ionic/{p-c1dbc8b6.system.entry.js → p-7ef62ef9.system.entry.js} +1 -1
  312. package/dist/ionic/{p-af452fa4.system.js → p-80d837dd.system.js} +1 -1
  313. package/dist/ionic/{p-744b2484.system.entry.js → p-826c4d67.system.entry.js} +1 -1
  314. package/dist/ionic/{p-4a1d747d.entry.js → p-82afe775.entry.js} +1 -1
  315. package/dist/ionic/{p-4d3a5f86.js → p-845f8d16.js} +1 -1
  316. package/dist/ionic/{p-af744710.system.entry.js → p-84fb742d.system.entry.js} +1 -1
  317. package/dist/ionic/{p-29c6c783.entry.js → p-85d6d07c.entry.js} +1 -1
  318. package/dist/ionic/{p-860eb968.system.js → p-86a9a4ca.system.js} +1 -1
  319. package/dist/ionic/{p-3c8e5c23.system.js → p-8911101b.system.js} +1 -1
  320. package/dist/ionic/{p-c3802319.system.js → p-8973b827.system.js} +1 -1
  321. package/dist/ionic/{p-7a1766d6.js → p-89e678fa.js} +1 -1
  322. package/dist/ionic/p-8a3509b8.js +4 -0
  323. package/dist/ionic/{p-b3680e2f.system.js → p-8aa290af.system.js} +1 -1
  324. package/dist/ionic/{p-fd6cff12.entry.js → p-8eee812a.entry.js} +1 -1
  325. package/dist/ionic/{p-955c3eb8.entry.js → p-8f89c8e3.entry.js} +1 -1
  326. package/dist/ionic/{p-21c7f006.entry.js → p-8fa80de0.entry.js} +1 -1
  327. package/dist/ionic/{p-18e101b7.system.entry.js → p-9104d662.system.entry.js} +1 -1
  328. package/dist/ionic/{p-2cd35dd9.entry.js → p-95a11fc4.entry.js} +1 -1
  329. package/dist/ionic/{p-e32557bb.system.entry.js → p-97542341.system.entry.js} +1 -1
  330. package/dist/ionic/{p-60e2b91f.system.entry.js → p-986a98d9.system.entry.js} +2 -2
  331. package/dist/ionic/{p-88d323cd.system.entry.js → p-98aefaa1.system.entry.js} +1 -1
  332. package/dist/ionic/{p-d821466d.system.entry.js → p-9994c82e.system.entry.js} +1 -1
  333. package/dist/ionic/{p-e06861a9.system.entry.js → p-99b4160f.system.entry.js} +1 -1
  334. package/dist/ionic/p-9a950d3c.entry.js +4 -0
  335. package/dist/ionic/{p-75cc5913.system.entry.js → p-9aaaff17.system.entry.js} +1 -1
  336. package/dist/ionic/{p-5fce0c0b.system.entry.js → p-9c7efe25.system.entry.js} +1 -1
  337. package/dist/ionic/{p-bdad26e3.entry.js → p-9d4a8059.entry.js} +1 -1
  338. package/dist/ionic/{p-70af0afb.entry.js → p-a17a1fb9.entry.js} +1 -1
  339. package/dist/ionic/{p-e8d56122.js → p-a3e60403.js} +1 -1
  340. package/dist/ionic/{p-c8d645b3.entry.js → p-a4b108a7.entry.js} +1 -1
  341. package/dist/ionic/{p-fd4e25b5.system.entry.js → p-a4e7eaf6.system.entry.js} +1 -1
  342. package/dist/ionic/{p-b3c4ddc2.system.entry.js → p-aae5907a.system.entry.js} +1 -1
  343. package/dist/ionic/p-afba4c00.system.entry.js +4 -0
  344. package/dist/ionic/p-b1c4a9db.js +4 -0
  345. package/dist/ionic/{p-826a2aaf.entry.js → p-b1dbfc12.entry.js} +1 -1
  346. package/dist/ionic/{p-d4ca0475.js → p-b566749e.js} +1 -1
  347. package/dist/ionic/{p-bc616455.entry.js → p-bbfa740f.entry.js} +1 -1
  348. package/dist/ionic/{p-0609cf64.entry.js → p-bd1c99cb.entry.js} +1 -1
  349. package/dist/ionic/p-be8ecfc1.js +4 -0
  350. package/dist/ionic/p-c1ad8eb0.system.js +4 -0
  351. package/dist/ionic/{p-c935cfc9.js → p-c30c10af.js} +1 -1
  352. package/dist/ionic/{p-f89cf011.system.entry.js → p-c3de6cd1.system.entry.js} +1 -1
  353. package/dist/ionic/{p-6e077659.entry.js → p-c43872df.entry.js} +1 -1
  354. package/dist/ionic/{p-e75b0c87.entry.js → p-c4f9367a.entry.js} +1 -1
  355. package/dist/ionic/{p-648f5e38.system.entry.js → p-c52ca485.system.entry.js} +1 -1
  356. package/dist/ionic/{p-a9e24ae2.system.entry.js → p-c55254f0.system.entry.js} +1 -1
  357. package/dist/ionic/{p-33a8a71b.entry.js → p-c66604e4.entry.js} +1 -1
  358. package/dist/ionic/{p-f8e37d24.system.entry.js → p-cad0b874.system.entry.js} +1 -1
  359. package/dist/ionic/{p-a69b9fc5.system.js → p-d86d7845.system.js} +1 -1
  360. package/dist/ionic/{p-058e61eb.system.js → p-d8c1ac0d.system.js} +1 -1
  361. package/dist/ionic/{p-75544514.system.entry.js → p-d9162cf7.system.entry.js} +1 -1
  362. package/dist/ionic/{p-e5ed3da9.entry.js → p-dbe534f5.entry.js} +1 -1
  363. package/dist/ionic/{p-2d1d8a25.entry.js → p-dde5afee.entry.js} +1 -1
  364. package/dist/ionic/{p-2abc5389.entry.js → p-de0b8503.entry.js} +1 -1
  365. package/dist/ionic/{p-dc146a2a.system.entry.js → p-de4fef3c.system.entry.js} +1 -1
  366. package/dist/ionic/{p-84d08aae.system.entry.js → p-e0a2abde.system.entry.js} +1 -1
  367. package/dist/ionic/{p-d743e981.js → p-e25cd3c7.js} +1 -1
  368. package/dist/ionic/{p-665c22ee.entry.js → p-e3bd1070.entry.js} +1 -1
  369. package/dist/ionic/{p-8cfba7e9.system.entry.js → p-e56b4e0f.system.entry.js} +1 -1
  370. package/dist/ionic/{p-9a100adc.entry.js → p-e824ffe7.entry.js} +1 -1
  371. package/dist/ionic/{p-9f3008d4.system.js → p-eb4ac14d.system.js} +1 -1
  372. package/dist/ionic/{p-1c934892.entry.js → p-ebceb0ac.entry.js} +1 -1
  373. package/dist/ionic/{p-e0a6dc45.system.entry.js → p-ec92cc52.system.entry.js} +1 -1
  374. package/dist/ionic/{p-1283c4fa.system.entry.js → p-ee70a913.system.entry.js} +1 -1
  375. package/dist/ionic/{p-d7bb5325.entry.js → p-f4cddcd0.entry.js} +1 -1
  376. package/dist/ionic/p-f4f255cb.system.js +4 -0
  377. package/dist/ionic/{p-4452a8ac.system.js → p-f5a536e1.system.js} +1 -1
  378. package/dist/ionic/{p-a6cf686b.system.entry.js → p-f5f52b6d.system.entry.js} +1 -1
  379. package/dist/ionic/{p-578efda4.system.js → p-f6d066b4.system.js} +1 -1
  380. package/dist/ionic/{p-95da3ae2.system.js → p-f6e7870b.system.js} +1 -1
  381. package/dist/ionic/{p-e9ddf8fe.system.entry.js → p-fa5a45cd.system.entry.js} +1 -1
  382. package/dist/ionic/{p-a9eda6d0.system.entry.js → p-fb048d4d.system.entry.js} +1 -1
  383. package/dist/ionic/p-fe00ac05.system.entry.js +4 -0
  384. package/dist/ionic/{p-346b2baf.js → p-fe7be7b4.js} +1 -1
  385. package/dist/types/components/checkbox/checkbox.d.ts +19 -0
  386. package/dist/types/components/modal/modal.d.ts +6 -3
  387. package/dist/types/components/range/range.d.ts +3 -2
  388. package/dist/types/components/select/select.d.ts +23 -0
  389. package/dist/types/components/toggle/toggle.d.ts +19 -0
  390. package/dist/types/components.d.ts +50 -2
  391. package/dist/types/utils/helpers.d.ts +4 -0
  392. package/dist/types/utils/native/capacitor.d.ts +7 -1
  393. package/dist/types/utils/test/platform.utils.d.ts +1 -1
  394. package/hydrate/index.js +210 -32
  395. package/hydrate/index.mjs +210 -32
  396. package/package.json +5 -5
  397. package/dist/esm-es5/app-globals-5dbb61a5.js +0 -4
  398. package/dist/esm-es5/md.transition-a560e0e2.js +0 -4
  399. package/dist/ionic/p-0574e87e.js +0 -4
  400. package/dist/ionic/p-155f4d90.entry.js +0 -4
  401. package/dist/ionic/p-1f405274.js +0 -4
  402. package/dist/ionic/p-21227121.js +0 -4
  403. package/dist/ionic/p-22149a4f.js +0 -4
  404. package/dist/ionic/p-2c9eb774.system.js +0 -4
  405. package/dist/ionic/p-322c5fb4.system.js +0 -4
  406. package/dist/ionic/p-4a25618e.system.entry.js +0 -4
  407. package/dist/ionic/p-52245809.js +0 -4
  408. package/dist/ionic/p-5733b3de.system.entry.js +0 -4
  409. package/dist/ionic/p-67222c16.system.js +0 -4
  410. package/dist/ionic/p-68c5fcd6.system.entry.js +0 -4
  411. package/dist/ionic/p-712fedc9.entry.js +0 -4
  412. package/dist/ionic/p-7b02a0e4.entry.js +0 -4
  413. package/dist/ionic/p-7c3b0a9b.system.entry.js +0 -4
  414. package/dist/ionic/p-8f4361a8.system.entry.js +0 -4
  415. package/dist/ionic/p-9f763f14.entry.js +0 -4
  416. package/dist/ionic/p-a43ad5b5.entry.js +0 -4
  417. package/dist/ionic/p-acc8399c.system.entry.js +0 -4
  418. package/dist/ionic/p-c67ded77.entry.js +0 -4
  419. package/dist/ionic/p-fbf86e62.system.js +0 -4
@@ -189,32 +189,39 @@ input {
189
189
  opacity: 0;
190
190
  }
191
191
 
192
- :host(.checkbox-justify-space-between) .checkbox-wrapper {
192
+ .checkbox-bottom {
193
+ padding-top: 4px;
194
+ display: flex;
193
195
  justify-content: space-between;
196
+ font-size: 0.75rem;
197
+ white-space: normal;
194
198
  }
195
199
 
196
- :host(.checkbox-justify-start) .checkbox-wrapper {
197
- justify-content: start;
200
+ :host(.checkbox-label-placement-stacked) .checkbox-bottom {
201
+ font-size: 1rem;
198
202
  }
199
203
 
200
- :host(.checkbox-justify-end) .checkbox-wrapper {
201
- justify-content: end;
204
+ /**
205
+ * Error text should only be shown when .ion-invalid is
206
+ * present on the checkbox. Otherwise the helper text should
207
+ * be shown.
208
+ */
209
+ .checkbox-bottom .error-text {
210
+ display: none;
211
+ color: var(--ion-color-danger, #c5000f);
202
212
  }
203
213
 
204
- :host(.checkbox-alignment-start) .checkbox-wrapper {
205
- align-items: start;
214
+ .checkbox-bottom .helper-text {
215
+ display: block;
216
+ color: var(--ion-color-step-700, var(--ion-text-color-step-300, #4d4d4d));
206
217
  }
207
218
 
208
- :host(.checkbox-alignment-center) .checkbox-wrapper {
209
- align-items: center;
219
+ :host(.ion-touched.ion-invalid) .checkbox-bottom .error-text {
220
+ display: block;
210
221
  }
211
222
 
212
- :host(.checkbox-justify-space-between),
213
- :host(.checkbox-justify-start),
214
- :host(.checkbox-justify-end),
215
- :host(.checkbox-alignment-start),
216
- :host(.checkbox-alignment-center) {
217
- display: block;
223
+ :host(.ion-touched.ion-invalid) .checkbox-bottom .helper-text {
224
+ display: none;
218
225
  }
219
226
 
220
227
  /**
@@ -243,6 +250,7 @@ input {
243
250
  */
244
251
  :host(.checkbox-label-placement-end) .checkbox-wrapper {
245
252
  flex-direction: row-reverse;
253
+ justify-content: start;
246
254
  }
247
255
 
248
256
  /**
@@ -285,6 +293,7 @@ input {
285
293
  */
286
294
  :host(.checkbox-label-placement-stacked) .checkbox-wrapper {
287
295
  flex-direction: column;
296
+ text-align: center;
288
297
  }
289
298
 
290
299
  :host(.checkbox-label-placement-stacked) .label-text-wrapper {
@@ -330,6 +339,34 @@ input {
330
339
  }
331
340
  }
332
341
 
342
+ :host(.checkbox-justify-space-between) .checkbox-wrapper {
343
+ justify-content: space-between;
344
+ }
345
+
346
+ :host(.checkbox-justify-start) .checkbox-wrapper {
347
+ justify-content: start;
348
+ }
349
+
350
+ :host(.checkbox-justify-end) .checkbox-wrapper {
351
+ justify-content: end;
352
+ }
353
+
354
+ :host(.checkbox-alignment-start) .checkbox-wrapper {
355
+ align-items: start;
356
+ }
357
+
358
+ :host(.checkbox-alignment-center) .checkbox-wrapper {
359
+ align-items: center;
360
+ }
361
+
362
+ :host(.checkbox-justify-space-between),
363
+ :host(.checkbox-justify-start),
364
+ :host(.checkbox-justify-end),
365
+ :host(.checkbox-alignment-start),
366
+ :host(.checkbox-alignment-center) {
367
+ display: block;
368
+ }
369
+
333
370
  :host(.checkbox-checked) .checkbox-icon,
334
371
  :host(.checkbox-indeterminate) .checkbox-icon {
335
372
  border-color: var(--border-color-checked);
@@ -13,10 +13,15 @@ import { getIonMode } from "../../global/ionic-global";
13
13
  * @part container - The container for the checkbox mark.
14
14
  * @part label - The label text describing the checkbox.
15
15
  * @part mark - The checkmark used to indicate the checked state.
16
+ * @part supporting-text - Supporting text displayed beneath the checkbox label.
17
+ * @part helper-text - Supporting text displayed beneath the checkbox label when the checkbox is valid.
18
+ * @part error-text - Supporting text displayed beneath the checkbox label when the checkbox is invalid and touched.
16
19
  */
17
20
  export class Checkbox {
18
21
  constructor() {
19
22
  this.inputId = `ion-cb-${checkboxIds++}`;
23
+ this.helperTextId = `${this.inputId}-helper-text`;
24
+ this.errorTextId = `${this.inputId}-error-text`;
20
25
  this.inheritedAttributes = {};
21
26
  /**
22
27
  * Sets the checked property and emits
@@ -54,6 +59,8 @@ export class Checkbox {
54
59
  this.checked = false;
55
60
  this.indeterminate = false;
56
61
  this.disabled = false;
62
+ this.errorText = undefined;
63
+ this.helperText = undefined;
57
64
  this.value = 'on';
58
65
  this.labelPlacement = 'start';
59
66
  this.justify = undefined;
@@ -69,12 +76,38 @@ export class Checkbox {
69
76
  this.focusEl.focus();
70
77
  }
71
78
  }
79
+ getHintTextID() {
80
+ const { el, helperText, errorText, helperTextId, errorTextId } = this;
81
+ if (el.classList.contains('ion-touched') && el.classList.contains('ion-invalid') && errorText) {
82
+ return errorTextId;
83
+ }
84
+ if (helperText) {
85
+ return helperTextId;
86
+ }
87
+ return undefined;
88
+ }
89
+ /**
90
+ * Responsible for rendering helper text and error text.
91
+ * This element should only be rendered if hint text is set.
92
+ */
93
+ renderHintText() {
94
+ const { helperText, errorText, helperTextId, errorTextId } = this;
95
+ /**
96
+ * undefined and empty string values should
97
+ * be treated as not having helper/error text.
98
+ */
99
+ const hasHintText = !!helperText || !!errorText;
100
+ if (!hasHintText) {
101
+ return;
102
+ }
103
+ return (h("div", { class: "checkbox-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)));
104
+ }
72
105
  render() {
73
106
  const { color, checked, disabled, el, getSVGPath, indeterminate, inheritedAttributes, inputId, justify, labelPlacement, name, value, alignment, required, } = this;
74
107
  const mode = getIonMode(this);
75
108
  const path = getSVGPath(mode, indeterminate);
76
109
  renderHiddenInput(true, el, name, checked ? value : '', disabled);
77
- return (h(Host, { key: '07a5884062dd256b570e856270c74a5a09d2f2a5', "aria-checked": indeterminate ? 'mixed' : `${checked}`, class: createColorClasses(color, {
110
+ return (h(Host, { key: '7ac31df89b07c781ddcd30a6a8c109494d0c500a', "aria-checked": indeterminate ? 'mixed' : `${checked}`, "aria-describedby": this.getHintTextID(), "aria-invalid": this.getHintTextID() === this.errorTextId, class: createColorClasses(color, {
78
111
  [mode]: true,
79
112
  'in-item': hostContext('ion-item', el),
80
113
  'checkbox-checked': checked,
@@ -84,10 +117,10 @@ export class Checkbox {
84
117
  [`checkbox-justify-${justify}`]: justify !== undefined,
85
118
  [`checkbox-alignment-${alignment}`]: alignment !== undefined,
86
119
  [`checkbox-label-placement-${labelPlacement}`]: true,
87
- }), onClick: this.onClick }, h("label", { key: '3439d546e8b60187421db698eab63a0bdd31c973', class: "checkbox-wrapper" }, h("input", Object.assign({ key: '9f45cf7dbdedcf01ec132c11e16979adb1aa102f', type: "checkbox", checked: checked ? true : undefined, disabled: disabled, id: inputId, onChange: this.toggleChecked, onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), ref: (focusEl) => (this.focusEl = focusEl), required: required }, inheritedAttributes)), h("div", { key: '4e882f98939cc4b7c7ab7459c751d3f4bb2023fe', class: {
120
+ }), onClick: this.onClick }, h("label", { key: '674e923fe1ec83a33c31d67b0d414d61ba8f9e4b', class: "checkbox-wrapper" }, h("input", Object.assign({ key: 'c4866e392fbdf3b76edcd1507cb67f40a213a4e7', type: "checkbox", checked: checked ? true : undefined, disabled: disabled, id: inputId, onChange: this.toggleChecked, onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), ref: (focusEl) => (this.focusEl = focusEl), required: required }, inheritedAttributes)), h("div", { key: '79cb96e5963b9331a760438ec8cc9e456215de91', class: {
88
121
  'label-text-wrapper': true,
89
122
  'label-text-wrapper-hidden': el.textContent === '',
90
- }, part: "label" }, h("slot", { key: '0abda81297a086d02c4a56af75005547971dfcfe' })), h("div", { key: '36489ea3f48a7d0ec46b77c243f9f253ef5c2b3b', class: "native-wrapper" }, h("svg", { key: '4c53b52f5e93752672a34eb6f180b75fa9af9046', class: "checkbox-icon", viewBox: "0 0 24 24", part: "container" }, path)))));
123
+ }, part: "label" }, h("slot", { key: '896cb26292c9a4a6c105afb39611472b93bf5e90' }), this.renderHintText()), h("div", { key: '52cd22e79fd5db30b45d7b092aa5af3944392336', class: "native-wrapper" }, h("svg", { key: '18d862ab7cc32055eaf200eea560ff1b2b6cbde0', class: "checkbox-icon", viewBox: "0 0 24 24", part: "container" }, path)))));
91
124
  }
92
125
  getSVGPath(mode, indeterminate) {
93
126
  let path = indeterminate ? (h("path", { d: "M6 12L18 12", part: "mark" })) : (h("path", { d: "M5.9,12.5l3.8,3.8l8.8-8.8", part: "mark" }));
@@ -207,6 +240,40 @@ export class Checkbox {
207
240
  "reflect": false,
208
241
  "defaultValue": "false"
209
242
  },
243
+ "errorText": {
244
+ "type": "string",
245
+ "mutable": false,
246
+ "complexType": {
247
+ "original": "string",
248
+ "resolved": "string | undefined",
249
+ "references": {}
250
+ },
251
+ "required": false,
252
+ "optional": true,
253
+ "docs": {
254
+ "tags": [],
255
+ "text": "Text that is placed under the checkbox label and displayed when an error is detected."
256
+ },
257
+ "attribute": "error-text",
258
+ "reflect": false
259
+ },
260
+ "helperText": {
261
+ "type": "string",
262
+ "mutable": false,
263
+ "complexType": {
264
+ "original": "string",
265
+ "resolved": "string | undefined",
266
+ "references": {}
267
+ },
268
+ "required": false,
269
+ "optional": true,
270
+ "docs": {
271
+ "tags": [],
272
+ "text": "Text that is placed under the checkbox label and displayed when no error is detected."
273
+ },
274
+ "attribute": "helper-text",
275
+ "reflect": false
276
+ },
210
277
  "value": {
211
278
  "type": "any",
212
279
  "mutable": false,
@@ -189,32 +189,39 @@ input {
189
189
  opacity: 0;
190
190
  }
191
191
 
192
- :host(.checkbox-justify-space-between) .checkbox-wrapper {
192
+ .checkbox-bottom {
193
+ padding-top: 4px;
194
+ display: flex;
193
195
  justify-content: space-between;
196
+ font-size: 0.75rem;
197
+ white-space: normal;
194
198
  }
195
199
 
196
- :host(.checkbox-justify-start) .checkbox-wrapper {
197
- justify-content: start;
200
+ :host(.checkbox-label-placement-stacked) .checkbox-bottom {
201
+ font-size: 1rem;
198
202
  }
199
203
 
200
- :host(.checkbox-justify-end) .checkbox-wrapper {
201
- justify-content: end;
204
+ /**
205
+ * Error text should only be shown when .ion-invalid is
206
+ * present on the checkbox. Otherwise the helper text should
207
+ * be shown.
208
+ */
209
+ .checkbox-bottom .error-text {
210
+ display: none;
211
+ color: var(--ion-color-danger, #c5000f);
202
212
  }
203
213
 
204
- :host(.checkbox-alignment-start) .checkbox-wrapper {
205
- align-items: start;
214
+ .checkbox-bottom .helper-text {
215
+ display: block;
216
+ color: var(--ion-color-step-700, var(--ion-text-color-step-300, #4d4d4d));
206
217
  }
207
218
 
208
- :host(.checkbox-alignment-center) .checkbox-wrapper {
209
- align-items: center;
219
+ :host(.ion-touched.ion-invalid) .checkbox-bottom .error-text {
220
+ display: block;
210
221
  }
211
222
 
212
- :host(.checkbox-justify-space-between),
213
- :host(.checkbox-justify-start),
214
- :host(.checkbox-justify-end),
215
- :host(.checkbox-alignment-start),
216
- :host(.checkbox-alignment-center) {
217
- display: block;
223
+ :host(.ion-touched.ion-invalid) .checkbox-bottom .helper-text {
224
+ display: none;
218
225
  }
219
226
 
220
227
  /**
@@ -243,6 +250,7 @@ input {
243
250
  */
244
251
  :host(.checkbox-label-placement-end) .checkbox-wrapper {
245
252
  flex-direction: row-reverse;
253
+ justify-content: start;
246
254
  }
247
255
 
248
256
  /**
@@ -285,6 +293,7 @@ input {
285
293
  */
286
294
  :host(.checkbox-label-placement-stacked) .checkbox-wrapper {
287
295
  flex-direction: column;
296
+ text-align: center;
288
297
  }
289
298
 
290
299
  :host(.checkbox-label-placement-stacked) .label-text-wrapper {
@@ -330,6 +339,34 @@ input {
330
339
  }
331
340
  }
332
341
 
342
+ :host(.checkbox-justify-space-between) .checkbox-wrapper {
343
+ justify-content: space-between;
344
+ }
345
+
346
+ :host(.checkbox-justify-start) .checkbox-wrapper {
347
+ justify-content: start;
348
+ }
349
+
350
+ :host(.checkbox-justify-end) .checkbox-wrapper {
351
+ justify-content: end;
352
+ }
353
+
354
+ :host(.checkbox-alignment-start) .checkbox-wrapper {
355
+ align-items: start;
356
+ }
357
+
358
+ :host(.checkbox-alignment-center) .checkbox-wrapper {
359
+ align-items: center;
360
+ }
361
+
362
+ :host(.checkbox-justify-space-between),
363
+ :host(.checkbox-justify-start),
364
+ :host(.checkbox-justify-end),
365
+ :host(.checkbox-alignment-start),
366
+ :host(.checkbox-alignment-center) {
367
+ display: block;
368
+ }
369
+
333
370
  :host(.checkbox-checked) .checkbox-icon,
334
371
  :host(.checkbox-indeterminate) .checkbox-icon {
335
372
  border-color: var(--border-color-checked);
@@ -130,11 +130,12 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
130
130
  const contentEl = findClosestIonContent(detail.event.target);
131
131
  currentBreakpoint = getCurrentBreakpoint();
132
132
  /**
133
- * If we have expandToScroll disabled, we should not allow the swipe gesture to start
134
- * if the content is being swiped.
133
+ * If `expandToScroll` is disabled, we should not allow the swipe gesture
134
+ * to start if the content is not scrolled to the top.
135
135
  */
136
136
  if (!expandToScroll && contentEl) {
137
- return false;
137
+ const scrollEl = isIonContent(contentEl) ? getElementRoot(contentEl).querySelector('.inner-scroll') : contentEl;
138
+ return scrollEl.scrollTop === 0;
138
139
  }
139
140
  if (currentBreakpoint === 1 && contentEl) {
140
141
  /**
@@ -192,6 +193,13 @@ export const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpo
192
193
  animation.progressStart(true, 1 - currentBreakpoint);
193
194
  };
194
195
  const onMove = (detail) => {
196
+ /**
197
+ * If `expandToScroll` is disabled, we should not allow the swipe gesture
198
+ * to continue if the gesture is not pulling down.
199
+ */
200
+ if (!expandToScroll && detail.deltaY <= 0) {
201
+ return;
202
+ }
195
203
  /**
196
204
  * If we are pulling down, then it is possible we are pulling on the content.
197
205
  * We do not want scrolling to happen at the same time as the gesture.
@@ -573,18 +573,18 @@ export class Modal {
573
573
  const mode = getIonMode(this);
574
574
  const isCardModal = presentingElement !== undefined && mode === 'ios';
575
575
  const isHandleCycle = handleBehavior === 'cycle';
576
- return (h(Host, Object.assign({ key: '8b74b6fa151995ab86cdeb989e338ee45c687f6d', "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
576
+ return (h(Host, Object.assign({ key: 'e661562f9e4126136cee337e4ab8ca69ac80faae', "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
577
577
  zIndex: `${20000 + this.overlayIndex}`,
578
- }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle }), h("ion-backdrop", { key: '1b264a356f792492fe5ece24928b701152be3d7f', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: '14590998fd2e87ebfb08c06bec795d122165ae09', class: "modal-shadow" }), h("div", Object.assign({ key: '73e4d6c4eb342d48dfcb7bfbfae7c020931aa36f',
578
+ }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle }), h("ion-backdrop", { key: '9221692e0e111f99e80239ca44faaaed9b288425', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: '20def7088d31e5eb13c3f2404c514cd8b74cd966', class: "modal-shadow" }), h("div", Object.assign({ key: 'b11229330571d4ff7b9136dfdddcd7d759ada876',
579
579
  /*
580
580
  role and aria-modal must be used on the
581
581
  same element. They must also be set inside the
582
582
  shadow DOM otherwise ion-button will not be highlighted
583
583
  when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
584
584
  */
585
- role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { key: '52c4949baf5b7c0639a9a58f06cd4e0cad662b23', class: "modal-handle",
585
+ role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { key: '95b2a62477dfbc063a91910f0d37357388cfd914', class: "modal-handle",
586
586
  // Prevents the handle from receiving keyboard focus when it does not cycle
587
- tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle" })), h("slot", { key: '0620b3f2e7cfef42f6c602211c4cdcaf4e646546' }))));
587
+ tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle" })), h("slot", { key: 'fba17dfdbdffbfd8992f473f633d172c5124dc19' }))));
588
588
  }
589
589
  static get is() { return "ion-modal"; }
590
590
  static get encapsulation() { return "shadow"; }
@@ -754,7 +754,7 @@ export class Modal {
754
754
  "optional": false,
755
755
  "docs": {
756
756
  "tags": [],
757
- "text": "Controls whether scrolling or dragging within the sheet modal expands\nit to a larger breakpoint. This only takes effect when `breakpoints`\nand `initialBreakpoint` are set.\n\nIf `true`, scrolling or dragging anywhere in the modal will first expand\nit to the next breakpoint. Once fully expanded, scrolling will affect the content.\nIf `false`, scrolling will always affect the content, and the modal will only expand\nwhen dragging the header or handle."
757
+ "text": "Controls whether scrolling or dragging within the sheet modal expands\nit to a larger breakpoint. This only takes effect when `breakpoints`\nand `initialBreakpoint` are set.\n\nIf `true`, scrolling or dragging anywhere in the modal will first expand\nit to the next breakpoint. Once fully expanded, scrolling will affect the\ncontent.\nIf `false`, scrolling will always affect the content. The modal will\nonly expand when dragging the header or handle. The modal will close when\ndragging the header or handle. It can also be closed when dragging the\ncontent, but only if the content is scrolled to the top."
758
758
  },
759
759
  "attribute": "expand-to-scroll",
760
760
  "reflect": false,
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { Host, h } from "@stencil/core";
5
5
  import { findClosestIonContent, disableContentScrollY, resetContentScrollY } from "../../utils/content/index";
6
- import { inheritAriaAttributes, clamp, debounceEvent, renderHiddenInput } from "../../utils/helpers";
6
+ import { inheritAriaAttributes, clamp, debounceEvent, renderHiddenInput, isSafeNumber } from "../../utils/helpers";
7
7
  import { printIonWarning } from "../../utils/logging/index";
8
8
  import { isRTL } from "../../utils/rtl/index";
9
9
  import { createColorClasses, hostContext } from "../../utils/theme";
@@ -128,16 +128,27 @@ export class Range {
128
128
  */
129
129
  this.ionInput = debounce === undefined ? originalIonInput !== null && originalIonInput !== void 0 ? originalIonInput : ionInput : debounceEvent(ionInput, debounce);
130
130
  }
131
- minChanged() {
131
+ minChanged(newValue) {
132
+ if (!isSafeNumber(newValue)) {
133
+ this.min = 0;
134
+ }
132
135
  if (!this.noUpdate) {
133
136
  this.updateRatio();
134
137
  }
135
138
  }
136
- maxChanged() {
139
+ maxChanged(newValue) {
140
+ if (!isSafeNumber(newValue)) {
141
+ this.max = 100;
142
+ }
137
143
  if (!this.noUpdate) {
138
144
  this.updateRatio();
139
145
  }
140
146
  }
147
+ stepChanged(newValue) {
148
+ if (!isSafeNumber(newValue)) {
149
+ this.step = 1;
150
+ }
151
+ }
141
152
  activeBarStartChanged() {
142
153
  const { activeBarStart } = this;
143
154
  if (activeBarStart !== undefined) {
@@ -170,6 +181,11 @@ export class Range {
170
181
  this.rangeId = this.el.getAttribute('id');
171
182
  }
172
183
  this.inheritedAttributes = inheritAriaAttributes(this.el);
184
+ // If min, max, or step are not safe, set them to 0, 100, and 1, respectively.
185
+ // Each watch does this, but not before the initial load.
186
+ this.min = isSafeNumber(this.min) ? this.min : 0;
187
+ this.max = isSafeNumber(this.max) ? this.max : 100;
188
+ this.step = isSafeNumber(this.step) ? this.step : 1;
173
189
  }
174
190
  componentDidLoad() {
175
191
  this.originalIonInput = this.ionInput;
@@ -564,7 +580,7 @@ export class Range {
564
580
  const needsEndAdjustment = inItem && !hasEndContent;
565
581
  const mode = getIonMode(this);
566
582
  renderHiddenInput(true, el, this.name, JSON.stringify(this.getValue()), disabled);
567
- return (h(Host, { key: 'efb8663a61f36a9db4ef69ece3a22e1424acbc28', onFocusin: this.onFocus, onFocusout: this.onBlur, id: rangeId, class: createColorClasses(this.color, {
583
+ return (h(Host, { key: 'ddecc98800b9137294c8cadfbde7d07d5b3825d7', onFocusin: this.onFocus, onFocusout: this.onBlur, id: rangeId, class: createColorClasses(this.color, {
568
584
  [mode]: true,
569
585
  'in-item': inItem,
570
586
  'range-disabled': disabled,
@@ -573,10 +589,10 @@ export class Range {
573
589
  [`range-label-placement-${labelPlacement}`]: true,
574
590
  'range-item-start-adjustment': needsStartAdjustment,
575
591
  'range-item-end-adjustment': needsEndAdjustment,
576
- }) }, h("label", { key: '040be16d5a2b4c1dded852d45a82e7505dc8fb30', class: "range-wrapper", id: "range-label" }, h("div", { key: 'd2ba909a1177dd27c1789f0d3f8f012a39f216c6', class: {
592
+ }) }, h("label", { key: '5afdbea21b1b82efde1126ceb0a263f85731aecf', class: "range-wrapper", id: "range-label" }, h("div", { key: 'e47e0bbefcb931dff5b846f47b4458153b73df94', class: {
577
593
  'label-text-wrapper': true,
578
594
  'label-text-wrapper-hidden': !hasLabel,
579
- }, part: "label" }, label !== undefined ? h("div", { class: "label-text" }, label) : h("slot", { name: "label" })), h("div", { key: 'eeaa70230c5adfac60468a8ff52a54eaf804c030', class: "native-wrapper" }, h("slot", { key: '1d78f55bb32bb05950dff7dfcc6bfdbef1cddb81', name: "start" }), this.renderRangeSlider(), h("slot", { key: '2dab4e2894ed7c036871a209419a92f1b6cf6059', name: "end" })))));
595
+ }, part: "label" }, label !== undefined ? h("div", { class: "label-text" }, label) : h("slot", { name: "label" })), h("div", { key: '842f35cd03bb6108d1ecf0c0a07adfbdc900401c', class: "native-wrapper" }, h("slot", { key: '4a5141daaf5de5b3251bef4232ce5a27fc0395df', name: "start" }), this.renderRangeSlider(), h("slot", { key: '53ffe0a40b093c5fbcbc50d47eea6bb3f39dfdbb', name: "end" })))));
580
596
  }
581
597
  static get is() { return "ion-range"; }
582
598
  static get encapsulation() { return "shadow"; }
@@ -1031,6 +1047,9 @@ export class Range {
1031
1047
  }, {
1032
1048
  "propName": "max",
1033
1049
  "methodName": "maxChanged"
1050
+ }, {
1051
+ "propName": "step",
1052
+ "methodName": "stepChanged"
1034
1053
  }, {
1035
1054
  "propName": "activeBarStart",
1036
1055
  "methodName": "activeBarStartChanged"
@@ -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