@ionic/core 8.4.4-dev.11741032668.18899f9b → 8.4.4-dev.11741046329.16b83b14

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 (436) hide show
  1. package/components/checkbox.js +40 -6
  2. package/components/helpers.js +1 -11
  3. package/components/index6.js +11 -3
  4. package/components/index9.js +1 -1
  5. package/components/ion-segment-button.js +9 -40
  6. package/components/ion-select.js +6 -4
  7. package/components/ion-toggle.js +6 -4
  8. package/components/ionic-global.js +1 -2
  9. package/components/modal.js +259 -35
  10. package/components/toolbar.js +2 -2
  11. package/css/core.css.map +1 -1
  12. package/css/ionic.bundle.css.map +1 -1
  13. package/dist/cjs/{app-globals-4283fe37.js → app-globals-21afee77.js} +1 -1
  14. package/dist/cjs/{data-21dc0f81.js → data-108e531d.js} +1 -1
  15. package/dist/cjs/{framework-delegate-05579976.js → framework-delegate-55f5683a.js} +1 -1
  16. package/dist/cjs/{hardware-back-button-f2cbbdce.js → hardware-back-button-9e8a2c4f.js} +1 -1
  17. package/dist/cjs/{helpers-4be3f90d.js → helpers-afaa9001.js} +0 -11
  18. package/dist/cjs/{index-c441c903.js → index-0d762bba.js} +2 -2
  19. package/dist/cjs/{index-5915f9b3.js → index-2a46a047.js} +11 -3
  20. package/dist/cjs/{index-9c6c9e9c.js → index-3652c918.js} +4 -4
  21. package/dist/cjs/{index-ad7a712e.js → index-9509ecad.js} +1 -1
  22. package/dist/cjs/{index-90ec3b6c.js → index-e975c92b.js} +5 -5
  23. package/dist/cjs/index.cjs.js +10 -10
  24. package/dist/cjs/{input-shims-e748a364.js → input-shims-cd05268a.js} +5 -3
  25. package/dist/cjs/{input.utils-74e4ec28.js → input.utils-ffb2f81b.js} +2 -2
  26. package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -3
  27. package/dist/cjs/ion-action-sheet.cjs.entry.js +6 -6
  28. package/dist/cjs/ion-alert.cjs.entry.js +6 -6
  29. package/dist/cjs/ion-app_8.cjs.entry.js +14 -14
  30. package/dist/cjs/ion-avatar_3.cjs.entry.js +1 -1
  31. package/dist/cjs/ion-back-button.cjs.entry.js +2 -2
  32. package/dist/cjs/ion-backdrop.cjs.entry.js +1 -1
  33. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +2 -2
  34. package/dist/cjs/ion-button_2.cjs.entry.js +3 -3
  35. package/dist/cjs/ion-card_5.cjs.entry.js +2 -2
  36. package/dist/cjs/ion-checkbox.cjs.entry.js +39 -8
  37. package/dist/cjs/ion-chip.cjs.entry.js +1 -1
  38. package/dist/cjs/ion-col_3.cjs.entry.js +1 -1
  39. package/dist/cjs/ion-datetime-button.cjs.entry.js +4 -4
  40. package/dist/cjs/ion-datetime_3.cjs.entry.js +7 -7
  41. package/dist/cjs/ion-fab_3.cjs.entry.js +2 -2
  42. package/dist/cjs/ion-img.cjs.entry.js +2 -2
  43. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +4 -4
  44. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +2 -2
  45. package/dist/cjs/ion-input.cjs.entry.js +5 -5
  46. package/dist/cjs/ion-item-option_3.cjs.entry.js +4 -4
  47. package/dist/cjs/ion-item_8.cjs.entry.js +2 -2
  48. package/dist/cjs/ion-loading.cjs.entry.js +6 -6
  49. package/dist/cjs/ion-menu_3.cjs.entry.js +7 -7
  50. package/dist/cjs/ion-modal.cjs.entry.js +266 -43
  51. package/dist/cjs/ion-nav_2.cjs.entry.js +6 -6
  52. package/dist/cjs/ion-picker-column-option.cjs.entry.js +2 -2
  53. package/dist/cjs/ion-picker-column.cjs.entry.js +2 -2
  54. package/dist/cjs/ion-picker.cjs.entry.js +1 -1
  55. package/dist/cjs/ion-popover.cjs.entry.js +7 -7
  56. package/dist/cjs/ion-progress-bar.cjs.entry.js +2 -2
  57. package/dist/cjs/ion-radio_2.cjs.entry.js +2 -2
  58. package/dist/cjs/ion-range.cjs.entry.js +4 -4
  59. package/dist/cjs/ion-refresher_2.cjs.entry.js +4 -4
  60. package/dist/cjs/ion-reorder_2.cjs.entry.js +4 -4
  61. package/dist/cjs/ion-ripple-effect.cjs.entry.js +1 -1
  62. package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
  63. package/dist/cjs/ion-searchbar.cjs.entry.js +2 -2
  64. package/dist/cjs/ion-segment_2.cjs.entry.js +10 -41
  65. package/dist/cjs/ion-select-modal.cjs.entry.js +6 -6
  66. package/dist/cjs/ion-select_3.cjs.entry.js +12 -11
  67. package/dist/cjs/ion-spinner.cjs.entry.js +1 -1
  68. package/dist/cjs/ion-split-pane.cjs.entry.js +1 -1
  69. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +2 -2
  70. package/dist/cjs/ion-tab_2.cjs.entry.js +2 -2
  71. package/dist/cjs/ion-text.cjs.entry.js +1 -1
  72. package/dist/cjs/ion-textarea.cjs.entry.js +5 -5
  73. package/dist/cjs/ion-toast.cjs.entry.js +6 -6
  74. package/dist/cjs/ion-toggle.cjs.entry.js +7 -6
  75. package/dist/cjs/{ionic-global-96da1b2e.js → ionic-global-d9a8bb5b.js} +1 -2
  76. package/dist/cjs/ionic.cjs.js +3 -3
  77. package/dist/cjs/{ios.transition-2dae3b92.js → ios.transition-0e664e88.js} +4 -4
  78. package/dist/cjs/loader.cjs.js +3 -3
  79. package/dist/cjs/{md.transition-ea3260a7.js → md.transition-2e8aef2c.js} +4 -4
  80. package/dist/cjs/{notch-controller-a0c464d1.js → notch-controller-d69150f5.js} +1 -1
  81. package/dist/cjs/{overlays-3880b5b5.js → overlays-65fdaff6.js} +5 -5
  82. package/dist/cjs/{status-tap-fb807fad.js → status-tap-d74f1429.js} +4 -3
  83. package/dist/cjs/{swipe-back-47a52b83.js → swipe-back-0303a5e4.js} +1 -1
  84. package/dist/collection/components/checkbox/checkbox.ios.css +52 -15
  85. package/dist/collection/components/checkbox/checkbox.js +90 -4
  86. package/dist/collection/components/checkbox/checkbox.md.css +52 -15
  87. package/dist/collection/components/modal/animations/ios.enter.js +50 -4
  88. package/dist/collection/components/modal/animations/ios.leave.js +24 -2
  89. package/dist/collection/components/modal/animations/md.enter.js +52 -5
  90. package/dist/collection/components/modal/animations/md.leave.js +26 -3
  91. package/dist/collection/components/modal/animations/sheet.js +11 -2
  92. package/dist/collection/components/modal/gestures/sheet.js +79 -10
  93. package/dist/collection/components/modal/modal.ios.css +16 -0
  94. package/dist/collection/components/modal/modal.js +32 -7
  95. package/dist/collection/components/modal/modal.md.css +6 -0
  96. package/dist/collection/components/segment-button/segment-button.js +9 -40
  97. package/dist/collection/components/select/select.js +23 -4
  98. package/dist/collection/components/toggle/toggle.js +23 -4
  99. package/dist/collection/components/toolbar/toolbar.js +6 -2
  100. package/dist/collection/utils/helpers.js +0 -10
  101. package/dist/collection/utils/logging/index.js +10 -3
  102. package/dist/collection/utils/platform.js +1 -2
  103. package/dist/collection/utils/test/platform.utils.js +1 -1
  104. package/dist/docs.json +187 -2
  105. package/dist/esm/{app-globals-c10a1137.js → app-globals-5dbb61a5.js} +1 -1
  106. package/dist/esm/{data-ae11fd43.js → data-b3284b5e.js} +1 -1
  107. package/dist/esm/{framework-delegate-f683816e.js → framework-delegate-63d1a679.js} +1 -1
  108. package/dist/esm/{hardware-back-button-44195e92.js → hardware-back-button-06ef3c3e.js} +1 -1
  109. package/dist/esm/{helpers-9b49d7d2.js → helpers-da915de8.js} +1 -11
  110. package/dist/esm/{index-b019fc18.js → index-2f7fde3d.js} +5 -5
  111. package/dist/esm/{index-9b0d46f4.js → index-6ad967f3.js} +11 -3
  112. package/dist/esm/{index-5a0f5fd0.js → index-79b30591.js} +1 -1
  113. package/dist/esm/{index-e1e9a0d3.js → index-cb21eccb.js} +4 -4
  114. package/dist/esm/{index-33f7e3ff.js → index-efb8ecdf.js} +2 -2
  115. package/dist/esm/index.js +10 -10
  116. package/dist/esm/{input-shims-0e65111b.js → input-shims-2fd7c6ef.js} +5 -3
  117. package/dist/esm/{input.utils-1ad8dafc.js → input.utils-961c9f17.js} +2 -2
  118. package/dist/esm/ion-accordion_2.entry.js +3 -3
  119. package/dist/esm/ion-action-sheet.entry.js +6 -6
  120. package/dist/esm/ion-alert.entry.js +6 -6
  121. package/dist/esm/ion-app_8.entry.js +14 -14
  122. package/dist/esm/ion-avatar_3.entry.js +1 -1
  123. package/dist/esm/ion-back-button.entry.js +2 -2
  124. package/dist/esm/ion-backdrop.entry.js +1 -1
  125. package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
  126. package/dist/esm/ion-button_2.entry.js +3 -3
  127. package/dist/esm/ion-card_5.entry.js +2 -2
  128. package/dist/esm/ion-checkbox.entry.js +39 -8
  129. package/dist/esm/ion-chip.entry.js +1 -1
  130. package/dist/esm/ion-col_3.entry.js +1 -1
  131. package/dist/esm/ion-datetime-button.entry.js +4 -4
  132. package/dist/esm/ion-datetime_3.entry.js +7 -7
  133. package/dist/esm/ion-fab_3.entry.js +2 -2
  134. package/dist/esm/ion-img.entry.js +2 -2
  135. package/dist/esm/ion-infinite-scroll_2.entry.js +4 -4
  136. package/dist/esm/ion-input-password-toggle.entry.js +2 -2
  137. package/dist/esm/ion-input.entry.js +5 -5
  138. package/dist/esm/ion-item-option_3.entry.js +4 -4
  139. package/dist/esm/ion-item_8.entry.js +2 -2
  140. package/dist/esm/ion-loading.entry.js +6 -6
  141. package/dist/esm/ion-menu_3.entry.js +7 -7
  142. package/dist/esm/ion-modal.entry.js +266 -43
  143. package/dist/esm/ion-nav_2.entry.js +6 -6
  144. package/dist/esm/ion-picker-column-option.entry.js +2 -2
  145. package/dist/esm/ion-picker-column.entry.js +2 -2
  146. package/dist/esm/ion-picker.entry.js +1 -1
  147. package/dist/esm/ion-popover.entry.js +7 -7
  148. package/dist/esm/ion-progress-bar.entry.js +2 -2
  149. package/dist/esm/ion-radio_2.entry.js +2 -2
  150. package/dist/esm/ion-range.entry.js +4 -4
  151. package/dist/esm/ion-refresher_2.entry.js +4 -4
  152. package/dist/esm/ion-reorder_2.entry.js +4 -4
  153. package/dist/esm/ion-ripple-effect.entry.js +1 -1
  154. package/dist/esm/ion-route_4.entry.js +2 -2
  155. package/dist/esm/ion-searchbar.entry.js +2 -2
  156. package/dist/esm/ion-segment_2.entry.js +10 -41
  157. package/dist/esm/ion-select-modal.entry.js +6 -6
  158. package/dist/esm/ion-select_3.entry.js +12 -11
  159. package/dist/esm/ion-spinner.entry.js +1 -1
  160. package/dist/esm/ion-split-pane.entry.js +1 -1
  161. package/dist/esm/ion-tab-bar_2.entry.js +2 -2
  162. package/dist/esm/ion-tab_2.entry.js +2 -2
  163. package/dist/esm/ion-text.entry.js +1 -1
  164. package/dist/esm/ion-textarea.entry.js +5 -5
  165. package/dist/esm/ion-toast.entry.js +6 -6
  166. package/dist/esm/ion-toggle.entry.js +7 -6
  167. package/dist/esm/{ionic-global-bf78a847.js → ionic-global-c81d82ab.js} +1 -2
  168. package/dist/esm/ionic.js +3 -3
  169. package/dist/esm/{ios.transition-b7103952.js → ios.transition-b1da3753.js} +4 -4
  170. package/dist/esm/loader.js +3 -3
  171. package/dist/esm/{md.transition-e4034e0a.js → md.transition-571b3859.js} +4 -4
  172. package/dist/esm/{notch-controller-3dc61260.js → notch-controller-55b09e11.js} +1 -1
  173. package/dist/esm/{overlays-aea27b63.js → overlays-5deab4de.js} +5 -5
  174. package/dist/esm/{status-tap-163e8128.js → status-tap-79eac0ac.js} +4 -3
  175. package/dist/esm/{swipe-back-23ee7ab1.js → swipe-back-e5394307.js} +1 -1
  176. package/dist/esm-es5/app-globals-5dbb61a5.js +4 -0
  177. package/dist/esm-es5/{data-ae11fd43.js → data-b3284b5e.js} +1 -1
  178. package/dist/esm-es5/{framework-delegate-f683816e.js → framework-delegate-63d1a679.js} +1 -1
  179. package/dist/esm-es5/{hardware-back-button-44195e92.js → hardware-back-button-06ef3c3e.js} +1 -1
  180. package/dist/esm-es5/{helpers-9b49d7d2.js → helpers-da915de8.js} +1 -1
  181. package/dist/esm-es5/{index-b019fc18.js → index-2f7fde3d.js} +1 -1
  182. package/dist/esm-es5/index-6ad967f3.js +4 -0
  183. package/dist/esm-es5/{index-5a0f5fd0.js → index-79b30591.js} +1 -1
  184. package/dist/esm-es5/{index-e1e9a0d3.js → index-cb21eccb.js} +1 -1
  185. package/dist/esm-es5/{index-33f7e3ff.js → index-efb8ecdf.js} +1 -1
  186. package/dist/esm-es5/index.js +1 -1
  187. package/dist/esm-es5/input-shims-2fd7c6ef.js +4 -0
  188. package/dist/esm-es5/{input.utils-1ad8dafc.js → input.utils-961c9f17.js} +1 -1
  189. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  190. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  191. package/dist/esm-es5/ion-alert.entry.js +1 -1
  192. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  193. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  194. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  195. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  196. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  197. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  198. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  199. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  200. package/dist/esm-es5/ion-chip.entry.js +1 -1
  201. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  202. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  203. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  204. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  205. package/dist/esm-es5/ion-img.entry.js +1 -1
  206. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  207. package/dist/esm-es5/ion-input-password-toggle.entry.js +1 -1
  208. package/dist/esm-es5/ion-input.entry.js +1 -1
  209. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  210. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  211. package/dist/esm-es5/ion-loading.entry.js +1 -1
  212. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  213. package/dist/esm-es5/ion-modal.entry.js +1 -1
  214. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  215. package/dist/esm-es5/ion-picker-column-option.entry.js +1 -1
  216. package/dist/esm-es5/ion-picker-column.entry.js +1 -1
  217. package/dist/esm-es5/ion-picker.entry.js +1 -1
  218. package/dist/esm-es5/ion-popover.entry.js +1 -1
  219. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  220. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  221. package/dist/esm-es5/ion-range.entry.js +1 -1
  222. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  223. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  224. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  225. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  226. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  227. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  228. package/dist/esm-es5/ion-select-modal.entry.js +1 -1
  229. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  230. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  231. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  232. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  233. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  234. package/dist/esm-es5/ion-text.entry.js +1 -1
  235. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  236. package/dist/esm-es5/ion-toast.entry.js +1 -1
  237. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  238. package/dist/esm-es5/{ionic-global-bf78a847.js → ionic-global-c81d82ab.js} +1 -1
  239. package/dist/esm-es5/ionic.js +1 -1
  240. package/dist/esm-es5/{ios.transition-b7103952.js → ios.transition-b1da3753.js} +1 -1
  241. package/dist/esm-es5/loader.js +1 -1
  242. package/dist/esm-es5/md.transition-571b3859.js +4 -0
  243. package/dist/esm-es5/{notch-controller-3dc61260.js → notch-controller-55b09e11.js} +1 -1
  244. package/dist/esm-es5/{overlays-aea27b63.js → overlays-5deab4de.js} +1 -1
  245. package/dist/esm-es5/status-tap-79eac0ac.js +4 -0
  246. package/dist/esm-es5/{swipe-back-23ee7ab1.js → swipe-back-e5394307.js} +1 -1
  247. package/dist/html.html-data.json +24 -0
  248. package/dist/ionic/index.esm.js +1 -1
  249. package/dist/ionic/ionic.esm.js +1 -1
  250. package/dist/ionic/ionic.js +1 -1
  251. package/dist/ionic/{p-3c6d2c1e.system.entry.js → p-01186920.system.entry.js} +1 -1
  252. package/dist/ionic/p-0430c2e0.entry.js +4 -0
  253. package/dist/ionic/p-0574e87e.js +4 -0
  254. package/dist/ionic/{p-77b1bb00.system.entry.js → p-05b74e45.system.entry.js} +1 -1
  255. package/dist/ionic/{p-b7d2ba68.entry.js → p-081a4ce4.entry.js} +1 -1
  256. package/dist/ionic/p-0af823e1.js +4 -0
  257. package/dist/ionic/{p-aa63b365.system.js → p-0eb35a7f.system.js} +1 -1
  258. package/dist/ionic/p-1132ffee.entry.js +4 -0
  259. package/dist/ionic/{p-60f1b2fa.entry.js → p-120fb79a.entry.js} +1 -1
  260. package/dist/ionic/{p-98c08d09.entry.js → p-15d18206.entry.js} +1 -1
  261. package/dist/ionic/{p-035c0885.entry.js → p-15e76dd1.entry.js} +1 -1
  262. package/dist/ionic/{p-6b1f082e.entry.js → p-16188af7.entry.js} +1 -1
  263. package/dist/ionic/p-16bfb979.system.entry.js +4 -0
  264. package/dist/ionic/{p-5126cf1e.system.js → p-19ea7bff.system.js} +1 -1
  265. package/dist/ionic/{p-d60342e3.js → p-1a5bc5f7.js} +1 -1
  266. package/dist/ionic/{p-42808996.js → p-1ab13b2b.js} +1 -1
  267. package/dist/ionic/{p-13892787.system.entry.js → p-1e67b266.system.entry.js} +1 -1
  268. package/dist/ionic/{p-e2e19375.system.entry.js → p-2172893e.system.entry.js} +1 -1
  269. package/dist/ionic/{p-ea7c658c.system.entry.js → p-2346ab53.system.entry.js} +2 -2
  270. package/dist/ionic/{p-944d66b5.system.entry.js → p-248318e0.system.entry.js} +1 -1
  271. package/dist/ionic/{p-a873feda.system.entry.js → p-2507278c.system.entry.js} +1 -1
  272. package/dist/ionic/{p-eb599bcb.js → p-28706c6f.js} +1 -1
  273. package/dist/ionic/{p-4eed0eb2.system.entry.js → p-2abae1cc.system.entry.js} +1 -1
  274. package/dist/ionic/{p-a197ff3b.system.entry.js → p-2b838f86.system.entry.js} +1 -1
  275. package/dist/ionic/{p-a3705e10.entry.js → p-2da9c8a7.entry.js} +1 -1
  276. package/dist/ionic/{p-92e4df0c.system.entry.js → p-2e46590d.system.entry.js} +1 -1
  277. package/dist/ionic/{p-e78bff37.system.entry.js → p-302b50bb.system.entry.js} +1 -1
  278. package/dist/ionic/p-322c5fb4.system.js +4 -0
  279. package/dist/ionic/{p-c66604e4.entry.js → p-33a8a71b.entry.js} +1 -1
  280. package/dist/ionic/{p-f687573e.system.js → p-343b6b1d.system.js} +1 -1
  281. package/dist/ionic/{p-2bc73fb5.js → p-34b11c24.js} +1 -1
  282. package/dist/ionic/{p-b3680e2f.system.js → p-3ad285e3.system.js} +1 -1
  283. package/dist/ionic/{p-8911101b.system.js → p-3c8e5c23.system.js} +1 -1
  284. package/dist/ionic/{p-d4ca0475.js → p-3cc276f4.js} +1 -1
  285. package/dist/ionic/p-49a0e74c.entry.js +4 -0
  286. package/dist/ionic/p-4c2d5b80.system.js +4 -0
  287. package/dist/ionic/p-4c98e2cf.system.js +4 -0
  288. package/dist/ionic/p-4ec778aa.entry.js +4 -0
  289. package/dist/ionic/{p-4ad78edc.entry.js → p-52d7a191.entry.js} +1 -1
  290. package/dist/ionic/{p-1543d6b2.system.entry.js → p-567de071.system.entry.js} +1 -1
  291. package/dist/ionic/p-577bc414.entry.js +4 -0
  292. package/dist/ionic/{p-22e4210e.system.entry.js → p-585b455c.system.entry.js} +1 -1
  293. package/dist/ionic/{p-42585688.system.entry.js → p-58d5df0c.system.entry.js} +1 -1
  294. package/dist/ionic/{p-026517fb.entry.js → p-5b932840.entry.js} +1 -1
  295. package/dist/ionic/{p-97acff20.system.js → p-5c08627a.system.js} +1 -1
  296. package/dist/ionic/{p-eb6f173b.entry.js → p-5c9eb9af.entry.js} +1 -1
  297. package/dist/ionic/{p-9c7efe25.system.entry.js → p-5fce0c0b.system.entry.js} +1 -1
  298. package/dist/ionic/{p-f00ba947.entry.js → p-61db139d.entry.js} +1 -1
  299. package/dist/ionic/{p-85b1ffae.entry.js → p-62af944c.entry.js} +1 -1
  300. package/dist/ionic/{p-4c9ccc7f.system.entry.js → p-63b0abde.system.entry.js} +1 -1
  301. package/dist/ionic/p-67222c16.system.js +4 -0
  302. package/dist/ionic/{p-ca908a50.system.entry.js → p-6933c482.system.entry.js} +1 -1
  303. package/dist/ionic/{p-c2583512.entry.js → p-6d32975a.entry.js} +1 -1
  304. package/dist/ionic/{p-dd0cad9c.entry.js → p-6d6cedc5.entry.js} +1 -1
  305. package/dist/ionic/{p-9c82a07c.system.entry.js → p-6dfb0f39.system.entry.js} +1 -1
  306. package/dist/ionic/{p-7a1766d6.js → p-72812e99.js} +1 -1
  307. package/dist/ionic/p-72bc8a1c.js +4 -0
  308. package/dist/ionic/{p-c3f4ea6c.system.entry.js → p-744c8672.system.entry.js} +1 -1
  309. package/dist/ionic/{p-d4896d36.system.entry.js → p-7458862e.system.entry.js} +1 -1
  310. package/dist/ionic/{p-d0a7f584.system.entry.js → p-74e3f0af.system.entry.js} +2 -2
  311. package/dist/ionic/p-7513b0c4.js +4 -0
  312. package/dist/ionic/{p-5a8efe64.system.entry.js → p-797eeea8.system.entry.js} +1 -1
  313. package/dist/ionic/{p-fd988d29.entry.js → p-7a02f476.entry.js} +1 -1
  314. package/dist/ionic/{p-0dc23518.entry.js → p-7a6eaf9e.entry.js} +1 -1
  315. package/dist/ionic/{p-288a2cff.entry.js → p-7b9a2b23.entry.js} +1 -1
  316. package/dist/ionic/{p-b637aa3f.system.entry.js → p-7ddc46c3.system.entry.js} +1 -1
  317. package/dist/ionic/p-7de1e42c.system.js +4 -0
  318. package/dist/ionic/{p-0eb2553a.system.entry.js → p-7ed1657c.system.entry.js} +1 -1
  319. package/dist/ionic/{p-95da3ae2.system.js → p-8635f5e6.system.js} +1 -1
  320. package/dist/ionic/{p-5bc12439.entry.js → p-8694928f.entry.js} +1 -1
  321. package/dist/ionic/{p-ebd0a280.entry.js → p-89bf08c7.entry.js} +1 -1
  322. package/dist/ionic/{p-830f1a37.system.entry.js → p-8cfba7e9.system.entry.js} +1 -1
  323. package/dist/ionic/{p-4f2f4e3b.entry.js → p-92763d3d.entry.js} +1 -1
  324. package/dist/ionic/{p-0d0a6fb9.system.entry.js → p-933727f9.system.entry.js} +1 -1
  325. package/dist/ionic/p-9343a445.js +4 -0
  326. package/dist/ionic/{p-656516a2.entry.js → p-937a7e21.entry.js} +1 -1
  327. package/dist/ionic/{p-2c9abc61.entry.js → p-948e6c6a.entry.js} +1 -1
  328. package/dist/ionic/{p-56a8aa85.entry.js → p-95775830.entry.js} +1 -1
  329. package/dist/ionic/{p-9065e1ed.system.entry.js → p-98231c01.system.entry.js} +1 -1
  330. package/dist/ionic/{p-808c9efc.system.entry.js → p-985a7e17.system.entry.js} +1 -1
  331. package/dist/ionic/{p-703d60a2.entry.js → p-98ff6b32.entry.js} +1 -1
  332. package/dist/ionic/{p-28cb707b.system.entry.js → p-9b122e3c.system.entry.js} +1 -1
  333. package/dist/ionic/{p-b609d03b.entry.js → p-9b428d25.entry.js} +1 -1
  334. package/dist/ionic/{p-85632b54.entry.js → p-9df2c6fb.entry.js} +1 -1
  335. package/dist/ionic/{p-eb4ac14d.system.js → p-9f3008d4.system.js} +1 -1
  336. package/dist/ionic/{p-d17f0dca.system.entry.js → p-9f364443.system.entry.js} +1 -1
  337. package/dist/ionic/{p-50c24ade.system.entry.js → p-a090bce8.system.entry.js} +1 -1
  338. package/dist/ionic/{p-5b03d498.system.entry.js → p-a0eb506c.system.entry.js} +1 -1
  339. package/dist/ionic/{p-4452a8ac.system.js → p-a15ddedb.system.js} +1 -1
  340. package/dist/ionic/p-a3db8ee3.js +4 -0
  341. package/dist/ionic/{p-9393bfbe.system.entry.js → p-a4a2420e.system.entry.js} +1 -1
  342. package/dist/ionic/{p-d86d7845.system.js → p-a69b9fc5.system.js} +1 -1
  343. package/dist/ionic/{p-1a790eef.system.js → p-a88dec0d.system.js} +2 -2
  344. package/dist/ionic/{p-c15a77e2.entry.js → p-a8f2c254.entry.js} +1 -1
  345. package/dist/ionic/{p-1c2f74e4.system.entry.js → p-ab674093.system.entry.js} +1 -1
  346. package/dist/ionic/{p-647b0625.system.js → p-ada36597.system.js} +1 -1
  347. package/dist/ionic/{p-42a9bb35.entry.js → p-afecb188.entry.js} +1 -1
  348. package/dist/ionic/{p-5b867a40.entry.js → p-b1eb86fd.entry.js} +1 -1
  349. package/dist/ionic/{p-c6ff3239.system.js → p-b3c60433.system.js} +1 -1
  350. package/dist/ionic/{p-bb11d9fb.js → p-b51e4004.js} +1 -1
  351. package/dist/ionic/{p-8db44ad3.js → p-b6efeab8.js} +1 -1
  352. package/dist/ionic/{p-406f9aa1.entry.js → p-b9d7015f.entry.js} +1 -1
  353. package/dist/ionic/{p-200dfb8f.entry.js → p-bb0db172.entry.js} +1 -1
  354. package/dist/ionic/{p-9d4a8059.entry.js → p-bdad26e3.entry.js} +1 -1
  355. package/dist/ionic/{p-842bb3c8.system.entry.js → p-bdf2cb2e.system.entry.js} +1 -1
  356. package/dist/ionic/{p-b5639a4f.entry.js → p-c41ac815.entry.js} +1 -1
  357. package/dist/ionic/{p-f1d1c614.system.js → p-c4238c12.system.js} +1 -1
  358. package/dist/ionic/p-c4b53b16.system.entry.js +4 -0
  359. package/dist/ionic/{p-dcc9aaf1.system.entry.js → p-cac0e0b3.system.entry.js} +1 -1
  360. package/dist/ionic/p-cb13696c.js +4 -0
  361. package/dist/ionic/{p-ef144104.system.entry.js → p-cba1f9bc.system.entry.js} +1 -1
  362. package/dist/ionic/p-cdc83025.entry.js +4 -0
  363. package/dist/ionic/p-d1c5b60e.system.js +4 -0
  364. package/dist/ionic/{p-881d9e52.system.js → p-d22e2a38.system.js} +1 -1
  365. package/dist/ionic/{p-8154947f.system.entry.js → p-d6eaffb1.system.entry.js} +2 -2
  366. package/dist/ionic/{p-e25cd3c7.js → p-d743e981.js} +1 -1
  367. package/dist/ionic/{p-72b65035.entry.js → p-d7aa6b00.entry.js} +1 -1
  368. package/dist/ionic/p-d7dd8fb1.entry.js +4 -0
  369. package/dist/ionic/{p-c3f5dcf9.entry.js → p-de930745.entry.js} +1 -1
  370. package/dist/ionic/{p-9fe2050a.entry.js → p-e06057c9.entry.js} +1 -1
  371. package/dist/ionic/{p-4a465405.system.entry.js → p-e09d6392.system.entry.js} +2 -2
  372. package/dist/ionic/p-e3171ff3.entry.js +4 -0
  373. package/dist/ionic/{p-16f1ba65.system.entry.js → p-e4ee80be.system.entry.js} +1 -1
  374. package/dist/ionic/p-e4fde4fb.system.entry.js +4 -0
  375. package/dist/ionic/p-e6376b93.system.entry.js +4 -0
  376. package/dist/ionic/{p-faa5e2b9.entry.js → p-e76dae93.entry.js} +1 -1
  377. package/dist/ionic/p-e8d56122.js +4 -0
  378. package/dist/ionic/{p-6f3d8334.js → p-ecceeb90.js} +1 -1
  379. package/dist/ionic/{p-d7fef52e.system.entry.js → p-ed75fcfb.system.entry.js} +1 -1
  380. package/dist/ionic/{p-acc78e36.entry.js → p-eef505e8.entry.js} +1 -1
  381. package/dist/ionic/{p-a33837c9.entry.js → p-f1060cd8.entry.js} +1 -1
  382. package/dist/ionic/{p-9ce56f65.system.entry.js → p-f1120724.system.entry.js} +1 -1
  383. package/dist/ionic/{p-0a499487.js → p-f1c4dcd4.js} +1 -1
  384. package/dist/ionic/{p-478dfa8c.system.entry.js → p-f3102647.system.entry.js} +1 -1
  385. package/dist/ionic/{p-13052792.entry.js → p-f63c2d12.entry.js} +1 -1
  386. package/dist/ionic/{p-5976e3b7.system.entry.js → p-fbd41a7e.system.entry.js} +1 -1
  387. package/dist/ionic/{p-712b57f9.system.entry.js → p-fca6ef5f.system.entry.js} +1 -1
  388. package/dist/ionic/{p-bed40aa8.entry.js → p-fceec762.entry.js} +1 -1
  389. package/dist/types/components/checkbox/checkbox.d.ts +25 -0
  390. package/dist/types/components/modal/animations/sheet.d.ts +1 -0
  391. package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
  392. package/dist/types/components/modal/modal-interface.d.ts +1 -0
  393. package/dist/types/components/modal/modal.d.ts +11 -0
  394. package/dist/types/components/segment-button/segment-button.d.ts +1 -2
  395. package/dist/types/components/select/select.d.ts +6 -0
  396. package/dist/types/components/toggle/toggle.d.ts +6 -0
  397. package/dist/types/components/toolbar/toolbar.d.ts +4 -0
  398. package/dist/types/components.d.ts +48 -0
  399. package/dist/types/utils/config.d.ts +9 -0
  400. package/dist/types/utils/helpers.d.ts +0 -1
  401. package/dist/types/utils/logging/index.d.ts +13 -1
  402. package/dist/types/utils/test/platform.utils.d.ts +1 -1
  403. package/hydrate/index.js +338 -105
  404. package/hydrate/index.mjs +338 -105
  405. package/package.json +1 -1
  406. package/dist/esm-es5/app-globals-c10a1137.js +0 -4
  407. package/dist/esm-es5/index-9b0d46f4.js +0 -4
  408. package/dist/esm-es5/input-shims-0e65111b.js +0 -4
  409. package/dist/esm-es5/md.transition-e4034e0a.js +0 -4
  410. package/dist/esm-es5/status-tap-163e8128.js +0 -4
  411. package/dist/ionic/p-0440660b.js +0 -4
  412. package/dist/ionic/p-06fee233.js +0 -4
  413. package/dist/ionic/p-075a94bd.js +0 -4
  414. package/dist/ionic/p-0ee3b5a2.system.js +0 -4
  415. package/dist/ionic/p-135e5731.js +0 -4
  416. package/dist/ionic/p-1f405274.js +0 -4
  417. package/dist/ionic/p-2c9eb774.system.js +0 -4
  418. package/dist/ionic/p-30ec5574.entry.js +0 -4
  419. package/dist/ionic/p-3667bc71.system.js +0 -4
  420. package/dist/ionic/p-3c7371c4.system.entry.js +0 -4
  421. package/dist/ionic/p-47e6c342.js +0 -4
  422. package/dist/ionic/p-4e8946f7.js +0 -4
  423. package/dist/ionic/p-51f13ac7.entry.js +0 -4
  424. package/dist/ionic/p-6167f80e.entry.js +0 -4
  425. package/dist/ionic/p-627c1f42.entry.js +0 -4
  426. package/dist/ionic/p-68dc53a5.js +0 -4
  427. package/dist/ionic/p-699c97a3.entry.js +0 -4
  428. package/dist/ionic/p-6bc9998f.entry.js +0 -4
  429. package/dist/ionic/p-75a0fffe.system.entry.js +0 -4
  430. package/dist/ionic/p-af09741c.entry.js +0 -4
  431. package/dist/ionic/p-c42a4dad.system.entry.js +0 -4
  432. package/dist/ionic/p-cc964e4f.system.js +0 -4
  433. package/dist/ionic/p-ddc058a7.system.entry.js +0 -4
  434. package/dist/ionic/p-e3357909.entry.js +0 -4
  435. package/dist/ionic/p-f4f255cb.system.js +0 -4
  436. package/dist/ionic/p-ff4b7e40.system.js +0 -4
@@ -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,10 +59,13 @@ 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;
60
67
  this.alignment = undefined;
68
+ this.required = false;
61
69
  }
62
70
  componentWillLoad() {
63
71
  this.inheritedAttributes = Object.assign({}, inheritAriaAttributes(this.el));
@@ -68,12 +76,38 @@ export class Checkbox {
68
76
  this.focusEl.focus();
69
77
  }
70
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
+ }
71
105
  render() {
72
- const { color, checked, disabled, el, getSVGPath, indeterminate, inheritedAttributes, inputId, justify, labelPlacement, name, value, alignment, } = this;
106
+ const { color, checked, disabled, el, getSVGPath, indeterminate, inheritedAttributes, inputId, justify, labelPlacement, name, value, alignment, required, } = this;
73
107
  const mode = getIonMode(this);
74
108
  const path = getSVGPath(mode, indeterminate);
75
109
  renderHiddenInput(true, el, name, checked ? value : '', disabled);
76
- return (h(Host, { key: '6dc787e1100521d08c4900104e1a3e2f594e919f', "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, {
77
111
  [mode]: true,
78
112
  'in-item': hostContext('ion-item', el),
79
113
  'checkbox-checked': checked,
@@ -83,10 +117,10 @@ export class Checkbox {
83
117
  [`checkbox-justify-${justify}`]: justify !== undefined,
84
118
  [`checkbox-alignment-${alignment}`]: alignment !== undefined,
85
119
  [`checkbox-label-placement-${labelPlacement}`]: true,
86
- }), onClick: this.onClick }, h("label", { key: '68222fb736a5ec3f2e488649b0e2ce0417dcb224', class: "checkbox-wrapper" }, h("input", Object.assign({ key: 'f12962d7e9b19c744cfdbdeccc67ae7f5d080281', type: "checkbox", checked: checked ? true : undefined, disabled: disabled, id: inputId, onChange: this.toggleChecked, onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), ref: (focusEl) => (this.focusEl = focusEl) }, inheritedAttributes)), h("div", { key: 'c72df2699414b1e5a41a1bc267bc634f0c93dcff', 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: {
87
121
  'label-text-wrapper': true,
88
122
  'label-text-wrapper-hidden': el.textContent === '',
89
- }, part: "label" }, h("slot", { key: 'a2a80285178a7e0e3b536fc9ca26b8b444aa4307' })), h("div", { key: 'c2b05e0d1fe8df5dcd72858220b5ff51ecaee4cc', class: "native-wrapper" }, h("svg", { key: 'ee24913fded72258ebd9713654a6dba92a18fcf7', 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)))));
90
124
  }
91
125
  getSVGPath(mode, indeterminate) {
92
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" }));
@@ -206,6 +240,40 @@ export class Checkbox {
206
240
  "reflect": false,
207
241
  "defaultValue": "false"
208
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
+ },
209
277
  "value": {
210
278
  "type": "any",
211
279
  "mutable": false,
@@ -275,6 +343,24 @@ export class Checkbox {
275
343
  },
276
344
  "attribute": "alignment",
277
345
  "reflect": false
346
+ },
347
+ "required": {
348
+ "type": "boolean",
349
+ "mutable": false,
350
+ "complexType": {
351
+ "original": "boolean",
352
+ "resolved": "boolean",
353
+ "references": {}
354
+ },
355
+ "required": false,
356
+ "optional": false,
357
+ "docs": {
358
+ "tags": [],
359
+ "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."
360
+ },
361
+ "attribute": "required",
362
+ "reflect": false,
363
+ "defaultValue": "false"
278
364
  }
279
365
  };
280
366
  }
@@ -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,22 +13,68 @@ const createEnterAnimation = () => {
13
13
  })
14
14
  .afterClearStyles(['pointer-events']);
15
15
  const wrapperAnimation = createAnimation().fromTo('transform', 'translateY(100vh)', 'translateY(0vh)');
16
- return { backdropAnimation, wrapperAnimation };
16
+ return { backdropAnimation, wrapperAnimation, contentAnimation: undefined };
17
17
  };
18
18
  /**
19
19
  * iOS Modal Enter Animation for the Card presentation style
20
20
  */
21
21
  export const iosEnterAnimation = (baseEl, opts) => {
22
- const { presentingEl, currentBreakpoint } = opts;
22
+ const { presentingEl, currentBreakpoint, expandToScroll } = opts;
23
23
  const root = getElementRoot(baseEl);
24
- const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation();
24
+ const { wrapperAnimation, backdropAnimation, contentAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation();
25
25
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
26
26
  wrapperAnimation.addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow')).beforeStyles({ opacity: 1 });
27
+ // The content animation is only added if scrolling is enabled for
28
+ // all the breakpoints.
29
+ !expandToScroll && (contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.addElement(baseEl.querySelector('.ion-page')));
27
30
  const baseAnimation = createAnimation('entering-base')
28
31
  .addElement(baseEl)
29
32
  .easing('cubic-bezier(0.32,0.72,0,1)')
30
33
  .duration(500)
31
- .addAnimation(wrapperAnimation);
34
+ .addAnimation([wrapperAnimation])
35
+ .beforeAddWrite(() => {
36
+ if (expandToScroll) {
37
+ // Scroll can only be done when the modal is fully expanded.
38
+ return;
39
+ }
40
+ /**
41
+ * There are some browsers that causes flickering when
42
+ * dragging the content when scroll is enabled at every
43
+ * breakpoint. This is due to the wrapper element being
44
+ * transformed off the screen and having a snap animation.
45
+ *
46
+ * A workaround is to clone the footer element and append
47
+ * it outside of the wrapper element. This way, the footer
48
+ * is still visible and the drag can be done without
49
+ * flickering. The original footer is hidden until the modal
50
+ * is dismissed. This maintains the animation of the footer
51
+ * when the modal is dismissed.
52
+ *
53
+ * The workaround needs to be done before the animation starts
54
+ * so there are no flickering issues.
55
+ */
56
+ const ionFooter = baseEl.querySelector('ion-footer');
57
+ /**
58
+ * This check is needed to prevent more than one footer
59
+ * from being appended to the shadow root.
60
+ * Otherwise, iOS and MD enter animations would append
61
+ * the footer twice.
62
+ */
63
+ const ionFooterAlreadyAppended = baseEl.shadowRoot.querySelector('ion-footer');
64
+ if (ionFooter && !ionFooterAlreadyAppended) {
65
+ const footerHeight = ionFooter.clientHeight;
66
+ const clonedFooter = ionFooter.cloneNode(true);
67
+ baseEl.shadowRoot.appendChild(clonedFooter);
68
+ ionFooter.style.setProperty('display', 'none');
69
+ ionFooter.setAttribute('aria-hidden', 'true');
70
+ // Padding is added to prevent some content from being hidden.
71
+ const page = baseEl.querySelector('.ion-page');
72
+ page.style.setProperty('padding-bottom', `${footerHeight}px`);
73
+ }
74
+ });
75
+ if (contentAnimation) {
76
+ baseAnimation.addAnimation(contentAnimation);
77
+ }
32
78
  if (presentingEl) {
33
79
  const isMobile = window.innerWidth < 768;
34
80
  const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
@@ -14,7 +14,7 @@ const createLeaveAnimation = () => {
14
14
  * iOS Modal Leave Animation
15
15
  */
16
16
  export const iosLeaveAnimation = (baseEl, opts, duration = 500) => {
17
- const { presentingEl, currentBreakpoint } = opts;
17
+ const { presentingEl, currentBreakpoint, expandToScroll } = opts;
18
18
  const root = getElementRoot(baseEl);
19
19
  const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetLeaveAnimation(opts) : createLeaveAnimation();
20
20
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
@@ -23,7 +23,29 @@ export const iosLeaveAnimation = (baseEl, opts, duration = 500) => {
23
23
  .addElement(baseEl)
24
24
  .easing('cubic-bezier(0.32,0.72,0,1)')
25
25
  .duration(duration)
26
- .addAnimation(wrapperAnimation);
26
+ .addAnimation(wrapperAnimation)
27
+ .beforeAddWrite(() => {
28
+ if (expandToScroll) {
29
+ // Scroll can only be done when the modal is fully expanded.
30
+ return;
31
+ }
32
+ /**
33
+ * If expandToScroll is disabled, we need to swap
34
+ * the visibility to the original, so the footer
35
+ * dismisses with the modal and doesn't stay
36
+ * until the modal is removed from the DOM.
37
+ */
38
+ const ionFooter = baseEl.querySelector('ion-footer');
39
+ if (ionFooter) {
40
+ const clonedFooter = baseEl.shadowRoot.querySelector('ion-footer');
41
+ ionFooter.style.removeProperty('display');
42
+ ionFooter.removeAttribute('aria-hidden');
43
+ clonedFooter.style.setProperty('display', 'none');
44
+ clonedFooter.setAttribute('aria-hidden', 'true');
45
+ const page = baseEl.querySelector('.ion-page');
46
+ page.style.removeProperty('padding-bottom');
47
+ }
48
+ });
27
49
  if (presentingEl) {
28
50
  const isMobile = window.innerWidth < 768;
29
51
  const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
@@ -15,20 +15,67 @@ const createEnterAnimation = () => {
15
15
  { offset: 0, opacity: 0.01, transform: 'translateY(40px)' },
16
16
  { offset: 1, opacity: 1, transform: `translateY(0px)` },
17
17
  ]);
18
- return { backdropAnimation, wrapperAnimation };
18
+ return { backdropAnimation, wrapperAnimation, contentAnimation: undefined };
19
19
  };
20
20
  /**
21
21
  * Md Modal Enter Animation
22
22
  */
23
23
  export const mdEnterAnimation = (baseEl, opts) => {
24
- const { currentBreakpoint } = opts;
24
+ const { currentBreakpoint, expandToScroll } = opts;
25
25
  const root = getElementRoot(baseEl);
26
- const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation();
26
+ const { wrapperAnimation, backdropAnimation, contentAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation();
27
27
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
28
28
  wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
29
- return createAnimation()
29
+ // The content animation is only added if scrolling is enabled for
30
+ // all the breakpoints.
31
+ expandToScroll && (contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.addElement(baseEl.querySelector('.ion-page')));
32
+ const baseAnimation = createAnimation()
30
33
  .addElement(baseEl)
31
34
  .easing('cubic-bezier(0.36,0.66,0.04,1)')
32
35
  .duration(280)
33
- .addAnimation([backdropAnimation, wrapperAnimation]);
36
+ .addAnimation([backdropAnimation, wrapperAnimation])
37
+ .beforeAddWrite(() => {
38
+ if (expandToScroll) {
39
+ // Scroll can only be done when the modal is fully expanded.
40
+ return;
41
+ }
42
+ /**
43
+ * There are some browsers that causes flickering when
44
+ * dragging the content when scroll is enabled at every
45
+ * breakpoint. This is due to the wrapper element being
46
+ * transformed off the screen and having a snap animation.
47
+ *
48
+ * A workaround is to clone the footer element and append
49
+ * it outside of the wrapper element. This way, the footer
50
+ * is still visible and the drag can be done without
51
+ * flickering. The original footer is hidden until the modal
52
+ * is dismissed. This maintains the animation of the footer
53
+ * when the modal is dismissed.
54
+ *
55
+ * The workaround needs to be done before the animation starts
56
+ * so there are no flickering issues.
57
+ */
58
+ const ionFooter = baseEl.querySelector('ion-footer');
59
+ /**
60
+ * This check is needed to prevent more than one footer
61
+ * from being appended to the shadow root.
62
+ * Otherwise, iOS and MD enter animations would append
63
+ * the footer twice.
64
+ */
65
+ const ionFooterAlreadyAppended = baseEl.shadowRoot.querySelector('ion-footer');
66
+ if (ionFooter && !ionFooterAlreadyAppended) {
67
+ const footerHeight = ionFooter.clientHeight;
68
+ const clonedFooter = ionFooter.cloneNode(true);
69
+ baseEl.shadowRoot.appendChild(clonedFooter);
70
+ ionFooter.style.setProperty('display', 'none');
71
+ ionFooter.setAttribute('aria-hidden', 'true');
72
+ // Padding is added to prevent some content from being hidden.
73
+ const page = baseEl.querySelector('.ion-page');
74
+ page.style.setProperty('padding-bottom', `${footerHeight}px`);
75
+ }
76
+ });
77
+ if (contentAnimation) {
78
+ baseAnimation.addAnimation(contentAnimation);
79
+ }
80
+ return baseAnimation;
34
81
  };
@@ -16,13 +16,36 @@ const createLeaveAnimation = () => {
16
16
  * Md Modal Leave Animation
17
17
  */
18
18
  export const mdLeaveAnimation = (baseEl, opts) => {
19
- const { currentBreakpoint } = opts;
19
+ const { currentBreakpoint, expandToScroll } = opts;
20
20
  const root = getElementRoot(baseEl);
21
21
  const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetLeaveAnimation(opts) : createLeaveAnimation();
22
22
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
23
23
  wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
24
- return createAnimation()
24
+ const baseAnimation = createAnimation()
25
25
  .easing('cubic-bezier(0.47,0,0.745,0.715)')
26
26
  .duration(200)
27
- .addAnimation([backdropAnimation, wrapperAnimation]);
27
+ .addAnimation([backdropAnimation, wrapperAnimation])
28
+ .beforeAddWrite(() => {
29
+ if (expandToScroll) {
30
+ // Scroll can only be done when the modal is fully expanded.
31
+ return;
32
+ }
33
+ /**
34
+ * If expandToScroll is disabled, we need to swap
35
+ * the visibility to the original, so the footer
36
+ * dismisses with the modal and doesn't stay
37
+ * until the modal is removed from the DOM.
38
+ */
39
+ const ionFooter = baseEl.querySelector('ion-footer');
40
+ if (ionFooter) {
41
+ const clonedFooter = baseEl.shadowRoot.querySelector('ion-footer');
42
+ ionFooter.style.removeProperty('display');
43
+ ionFooter.removeAttribute('aria-hidden');
44
+ clonedFooter.style.setProperty('display', 'none');
45
+ clonedFooter.setAttribute('aria-hidden', 'true');
46
+ const page = baseEl.querySelector('.ion-page');
47
+ page.style.removeProperty('padding-bottom');
48
+ }
49
+ });
50
+ return baseAnimation;
28
51
  };
@@ -4,7 +4,7 @@
4
4
  import { createAnimation } from "../../../utils/animation/animation";
5
5
  import { getBackdropValueForSheet } from "../utils";
6
6
  export const createSheetEnterAnimation = (opts) => {
7
- const { currentBreakpoint, backdropBreakpoint } = opts;
7
+ const { currentBreakpoint, backdropBreakpoint, expandToScroll } = opts;
8
8
  /**
9
9
  * If the backdropBreakpoint is undefined, then the backdrop
10
10
  * should always fade in. If the backdropBreakpoint came before the
@@ -24,7 +24,16 @@ export const createSheetEnterAnimation = (opts) => {
24
24
  { offset: 0, opacity: 1, transform: 'translateY(100%)' },
25
25
  { offset: 1, opacity: 1, transform: `translateY(${100 - currentBreakpoint * 100}%)` },
26
26
  ]);
27
- return { wrapperAnimation, backdropAnimation };
27
+ /**
28
+ * This allows the content to be scrollable at any breakpoint.
29
+ */
30
+ const contentAnimation = !expandToScroll
31
+ ? createAnimation('contentAnimation').keyframes([
32
+ { offset: 0, opacity: 1, maxHeight: `${(1 - currentBreakpoint) * 100}%` },
33
+ { offset: 1, opacity: 1, maxHeight: `${currentBreakpoint * 100}%` },
34
+ ])
35
+ : undefined;
36
+ return { wrapperAnimation, backdropAnimation, contentAnimation };
28
37
  };
29
38
  export const createSheetLeaveAnimation = (opts) => {
30
39
  const { currentBreakpoint, backdropBreakpoint } = opts;