@ionic/core 8.8.7-dev.11779467048.1641d05e → 8.8.7-dev.11779921691.1777274a

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 (889) hide show
  1. package/components/index.js +1 -1
  2. package/components/ion-accordion-group.js +1 -1
  3. package/components/ion-accordion.js +1 -1
  4. package/components/ion-action-sheet.js +1 -1
  5. package/components/ion-alert.js +1 -1
  6. package/components/ion-app.js +1 -1
  7. package/components/ion-avatar.js +1 -1
  8. package/components/ion-back-button.js +1 -1
  9. package/components/ion-backdrop.js +1 -1
  10. package/components/ion-badge.js +1 -1
  11. package/components/ion-breadcrumb.js +1 -1
  12. package/components/ion-breadcrumbs.js +1 -1
  13. package/components/ion-button.js +1 -1
  14. package/components/ion-buttons.js +1 -1
  15. package/components/ion-card-content.js +1 -1
  16. package/components/ion-card-header.js +1 -1
  17. package/components/ion-card-subtitle.js +1 -1
  18. package/components/ion-card-title.js +1 -1
  19. package/components/ion-card.js +1 -1
  20. package/components/ion-checkbox.js +1 -1
  21. package/components/ion-chip.js +1 -1
  22. package/components/ion-col.js +1 -1
  23. package/components/ion-content.js +1 -1
  24. package/components/ion-datetime-button.js +1 -1
  25. package/components/ion-datetime.js +1 -1
  26. package/components/ion-divider.js +1 -1
  27. package/components/ion-fab-button.js +1 -1
  28. package/components/ion-fab-list.js +1 -1
  29. package/components/ion-fab.js +1 -1
  30. package/components/ion-footer.js +1 -1
  31. package/components/ion-grid.js +1 -1
  32. package/components/ion-header.js +1 -1
  33. package/components/ion-icon.js +1 -1
  34. package/components/ion-img.js +1 -1
  35. package/components/ion-infinite-scroll-content.js +1 -1
  36. package/components/ion-infinite-scroll.js +1 -1
  37. package/components/ion-input-otp.js +1 -1
  38. package/components/ion-input-password-toggle.js +1 -1
  39. package/components/ion-input.js +1 -1
  40. package/components/ion-item-divider.js +1 -1
  41. package/components/ion-item-group.js +1 -1
  42. package/components/ion-item-option.js +1 -1
  43. package/components/ion-item-options.js +1 -1
  44. package/components/ion-item-sliding.js +1 -1
  45. package/components/ion-item.js +1 -1
  46. package/components/ion-label.js +1 -1
  47. package/components/ion-list-header.js +1 -1
  48. package/components/ion-list.js +1 -1
  49. package/components/ion-loading.js +1 -1
  50. package/components/ion-menu-button.js +1 -1
  51. package/components/ion-menu-toggle.js +1 -1
  52. package/components/ion-menu.js +1 -1
  53. package/components/ion-modal.js +1 -1
  54. package/components/ion-nav-link.js +1 -1
  55. package/components/ion-nav.js +1 -1
  56. package/components/ion-note.js +1 -1
  57. package/components/ion-picker-column-option.js +1 -1
  58. package/components/ion-picker-column.js +1 -1
  59. package/components/ion-picker-legacy-column.js +1 -1
  60. package/components/ion-picker-legacy.js +1 -1
  61. package/components/ion-picker.js +1 -1
  62. package/components/ion-popover.js +1 -1
  63. package/components/ion-progress-bar.js +1 -1
  64. package/components/ion-radio-group.js +1 -1
  65. package/components/ion-radio.js +1 -1
  66. package/components/ion-range.js +1 -1
  67. package/components/ion-refresher-content.js +1 -1
  68. package/components/ion-refresher.js +1 -1
  69. package/components/ion-reorder-group.js +1 -1
  70. package/components/ion-reorder.js +1 -1
  71. package/components/ion-ripple-effect.js +1 -1
  72. package/components/ion-route-redirect.js +1 -1
  73. package/components/ion-route.js +1 -1
  74. package/components/ion-router-link.js +1 -1
  75. package/components/ion-router-outlet.js +1 -1
  76. package/components/ion-router.js +1 -1
  77. package/components/ion-row.js +1 -1
  78. package/components/ion-searchbar.js +1 -1
  79. package/components/ion-segment-button.js +1 -1
  80. package/components/ion-segment-content.js +1 -1
  81. package/components/ion-segment-view.js +1 -1
  82. package/components/ion-segment.js +1 -1
  83. package/components/ion-select-modal.js +1 -1
  84. package/components/ion-select-option.js +1 -1
  85. package/components/ion-select-popover.js +1 -1
  86. package/components/ion-select.js +1 -1
  87. package/components/ion-skeleton-text.js +1 -1
  88. package/components/ion-spinner.js +1 -1
  89. package/components/ion-split-pane.js +1 -1
  90. package/components/ion-tab-bar.js +1 -1
  91. package/components/ion-tab-button.js +1 -1
  92. package/components/ion-tab.js +1 -1
  93. package/components/ion-tabs.js +1 -1
  94. package/components/ion-text.js +1 -1
  95. package/components/ion-textarea.js +1 -1
  96. package/components/ion-thumbnail.js +1 -1
  97. package/components/ion-title.js +1 -1
  98. package/components/ion-toast.js +1 -1
  99. package/components/ion-toggle.js +1 -1
  100. package/components/ion-toolbar.js +1 -1
  101. package/components/p-0sJvNkUu.js +4 -0
  102. package/components/{p-BcbmT6b3.js → p-7nmSk-Eb.js} +1 -1
  103. package/components/p-B1O3xdmF.js +4 -0
  104. package/components/p-BBB8g5Ql.js +4 -0
  105. package/components/p-BF7rwwG7.js +4 -0
  106. package/components/p-BHffbls9.js +4 -0
  107. package/components/p-BKBdJW0R.js +4 -0
  108. package/components/p-BKGLpdvY.js +4 -0
  109. package/components/p-BRrh2GWk.js +4 -0
  110. package/components/{p-BFCM_1oE.js → p-BTWFHAhB.js} +1 -1
  111. package/components/p-BVOTx9Tr.js +4 -0
  112. package/components/p-BVbPiSCE.js +4 -0
  113. package/components/p-BVgmZpV7.js +4 -0
  114. package/components/{p-CIoAIKEr.js → p-B_4LVR66.js} +1 -1
  115. package/components/p-BbwW7nXw.js +4 -0
  116. package/components/p-BePFSJjb.js +4 -0
  117. package/components/{p-zWP0sUV_.js → p-BilWM2xi.js} +1 -1
  118. package/components/p-Bnkcvm0_.js +4 -0
  119. package/components/p-Bp4m7lZT.js +4 -0
  120. package/components/p-BuQDh8MN.js +4 -0
  121. package/components/p-C4Uuc-Js.js +4 -0
  122. package/components/p-CF0UKsA-.js +4 -0
  123. package/components/p-CMETcSJz.js +4 -0
  124. package/components/p-CTDfzuym.js +4 -0
  125. package/components/p-CZwQlWO7.js +4 -0
  126. package/components/p-CkS5LcG3.js +4 -0
  127. package/components/p-CrC3J6IY.js +4 -0
  128. package/components/p-D9SzdDbV.js +4 -0
  129. package/components/p-DCoLfY48.js +4 -0
  130. package/components/p-DGHsHldT.js +4 -0
  131. package/components/p-DK2cppki.js +4 -0
  132. package/components/p-DMwGijtW.js +4 -0
  133. package/components/p-DPLIhs_Y.js +4 -0
  134. package/components/p-DRj_omR8.js +4 -0
  135. package/components/p-DWBdx_rf.js +4 -0
  136. package/{dist/ionic/p-CbkICFBN.js → components/p-DXBx6hf_.js} +1 -1
  137. package/components/p-DZwp0os_.js +4 -0
  138. package/components/{p-BErKjY03.js → p-DbQt4Kex.js} +1 -1
  139. package/components/p-DbrEqORq.js +4 -0
  140. package/{dist/ionic/p-C8IHbcuP.js → components/p-Dh41Mgrr.js} +1 -1
  141. package/components/p-Dh8YROlw.js +4 -0
  142. package/components/{p-lIOqnNXn.js → p-Dmd-3R4x.js} +1 -1
  143. package/components/p-DqL8Jl6C.js +4 -0
  144. package/components/p-DuOk1CH-.js +4 -0
  145. package/components/p-Op_wuLsj.js +4 -0
  146. package/components/p-SikZM1Bp.js +4 -0
  147. package/components/p-f1voQRQ1.js +4 -0
  148. package/components/p-fkeHL2Sd.js +4 -0
  149. package/components/p-gKV0T98m.js +4 -0
  150. package/components/{p-C8ktKu9j.js → p-jgONJj5a.js} +1 -1
  151. package/components/p-k6-su0sW.js +4 -0
  152. package/components/p-l7FroJh2.js +4 -0
  153. package/components/p-nFFDLHOE.js +4 -0
  154. package/components/p-pdE-O9G9.js +4 -0
  155. package/{dist/ionic/p-CWJdc8f_.js → components/p-u-SCu4et.js} +1 -1
  156. package/css/core.css +1 -1
  157. package/css/core.css.map +1 -1
  158. package/css/display.css.map +1 -1
  159. package/css/flex-utils.css.map +1 -1
  160. package/css/float-elements.css.map +1 -1
  161. package/css/global.bundle.css +1 -1
  162. package/css/global.bundle.css.map +1 -1
  163. package/css/ionic/bundle.ionic.css +1 -1
  164. package/css/ionic/bundle.ionic.css.map +1 -1
  165. package/css/ionic/core.ionic.css +1 -1
  166. package/css/ionic/core.ionic.css.map +1 -1
  167. package/css/ionic/global.bundle.ionic.css +1 -1
  168. package/css/ionic/global.bundle.ionic.css.map +1 -1
  169. package/css/ionic/link.ionic.css.map +1 -1
  170. package/css/ionic/structure.ionic.css.map +1 -1
  171. package/css/ionic/typography.ionic.css +1 -1
  172. package/css/ionic/typography.ionic.css.map +1 -1
  173. package/css/ionic/utils.bundle.ionic.css.map +1 -1
  174. package/css/ionic.bundle.css +1 -1
  175. package/css/ionic.bundle.css.map +1 -1
  176. package/css/padding.css.map +1 -1
  177. package/css/palettes/dark.always.css +1 -1
  178. package/css/palettes/dark.always.css.map +1 -1
  179. package/css/palettes/dark.class.css +1 -1
  180. package/css/palettes/dark.class.css.map +1 -1
  181. package/css/palettes/dark.system.css +1 -1
  182. package/css/palettes/dark.system.css.map +1 -1
  183. package/css/palettes/high-contrast-dark.always.css +1 -1
  184. package/css/palettes/high-contrast-dark.always.css.map +1 -1
  185. package/css/palettes/high-contrast-dark.class.css +1 -1
  186. package/css/palettes/high-contrast-dark.class.css.map +1 -1
  187. package/css/palettes/high-contrast-dark.system.css +1 -1
  188. package/css/palettes/high-contrast-dark.system.css.map +1 -1
  189. package/css/palettes/high-contrast.always.css +1 -1
  190. package/css/palettes/high-contrast.always.css.map +1 -1
  191. package/css/palettes/high-contrast.class.css +1 -1
  192. package/css/palettes/high-contrast.class.css.map +1 -1
  193. package/css/palettes/high-contrast.system.css +1 -1
  194. package/css/palettes/high-contrast.system.css.map +1 -1
  195. package/css/structure.css.map +1 -1
  196. package/css/text-alignment.css.map +1 -1
  197. package/css/text-transformation.css.map +1 -1
  198. package/css/typography.css +1 -1
  199. package/css/typography.css.map +1 -1
  200. package/css/utils.bundle.css.map +1 -1
  201. package/dist/cjs/{animation-DknMeJ3x.js → animation-CoqRs93a.js} +3 -3
  202. package/dist/cjs/{app-globals-DtAeky3x.js → app-globals-CzPyigGz.js} +1 -1
  203. package/dist/cjs/badge-position-DFPHXWP9.js +176 -0
  204. package/dist/cjs/{button-active-JoIWyYri.js → button-active-lwEZiey1.js} +4 -4
  205. package/dist/cjs/{capacitor-BnRBm_ys.js → capacitor-F7SUc7Ly.js} +1 -1
  206. package/dist/cjs/{data-DuOuKG7I.js → data-BsQBKyvn.js} +3 -3
  207. package/dist/cjs/{framework-delegate-Dx9FrqAC.js → framework-delegate-C1LqXDzY.js} +4 -5
  208. package/dist/cjs/{haptic-D3Ay9mmg.js → haptic-CBZc4WH_.js} +1 -1
  209. package/dist/cjs/{index-CzcLEdQ5.js → index-BDthk8R7.js} +1885 -0
  210. package/dist/cjs/{index-BJlwOs11.js → index-BbhXd9Zs.js} +2 -2
  211. package/dist/cjs/{index-DMJjUhXH.js → index-Cbme57mm.js} +3 -5
  212. package/dist/cjs/{index-BJrpF9T3.js → index-DhXmkpe3.js} +3 -4
  213. package/dist/cjs/{index-Cer2Qy4I.js → index-HkS255C9.js} +6 -7
  214. package/dist/cjs/{index-D_mPAIqF.js → index-cV9SaEZV.js} +11 -12
  215. package/dist/cjs/index.cjs.js +15 -18
  216. package/dist/cjs/{input-shims-Dn33gFln.js → input-shims-eCRI_jn9.js} +15 -17
  217. package/dist/cjs/{input.utils-DnVnhWEF.js → input.utils-CvLAucXh.js} +4 -5
  218. package/dist/cjs/ion-accordion_2.cjs.entry.js +31 -34
  219. package/dist/cjs/ion-action-sheet.cjs.entry.js +34 -37
  220. package/dist/cjs/ion-alert.cjs.entry.js +44 -47
  221. package/dist/cjs/ion-app_8.cjs.entry.js +115 -116
  222. package/dist/cjs/ion-avatar_3.cjs.entry.js +66 -86
  223. package/dist/cjs/ion-back-button.cjs.entry.js +19 -22
  224. package/dist/cjs/ion-backdrop.cjs.entry.js +5 -5
  225. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +36 -39
  226. package/dist/cjs/ion-button_2.cjs.entry.js +54 -34
  227. package/dist/cjs/ion-card_5.cjs.entry.js +36 -39
  228. package/dist/cjs/ion-checkbox.cjs.entry.js +23 -26
  229. package/dist/cjs/ion-chip.cjs.entry.js +51 -51
  230. package/dist/cjs/ion-col_3.cjs.entry.js +14 -16
  231. package/dist/cjs/ion-datetime-button.cjs.entry.js +19 -22
  232. package/dist/cjs/ion-datetime_3.cjs.entry.js +123 -126
  233. package/dist/cjs/ion-divider.cjs.entry.js +5 -5
  234. package/dist/cjs/ion-fab_3.cjs.entry.js +27 -30
  235. package/dist/cjs/ion-img.cjs.entry.js +10 -12
  236. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +25 -27
  237. package/dist/cjs/ion-input-otp.cjs.entry.js +19 -22
  238. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +16 -17
  239. package/dist/cjs/ion-input.cjs.entry.js +42 -45
  240. package/dist/cjs/ion-item-option_3.cjs.entry.js +66 -319
  241. package/dist/cjs/ion-item_8.cjs.entry.js +71 -83
  242. package/dist/cjs/ion-loading.cjs.entry.js +27 -30
  243. package/dist/cjs/ion-menu_3.cjs.entry.js +55 -58
  244. package/dist/cjs/ion-modal.cjs.entry.js +71 -74
  245. package/dist/cjs/ion-nav_2.cjs.entry.js +41 -43
  246. package/dist/cjs/ion-picker-column-option.cjs.entry.js +9 -12
  247. package/dist/cjs/ion-picker-column.cjs.entry.js +14 -17
  248. package/dist/cjs/ion-picker.cjs.entry.js +9 -11
  249. package/dist/cjs/ion-popover.cjs.entry.js +36 -39
  250. package/dist/cjs/ion-progress-bar.cjs.entry.js +28 -41
  251. package/dist/cjs/ion-radio_2.cjs.entry.js +31 -34
  252. package/dist/cjs/ion-range.cjs.entry.js +50 -53
  253. package/dist/cjs/ion-refresher_2.cjs.entry.js +65 -67
  254. package/dist/cjs/ion-reorder_2.cjs.entry.js +23 -25
  255. package/dist/cjs/ion-ripple-effect.cjs.entry.js +7 -7
  256. package/dist/cjs/ion-route_4.cjs.entry.js +36 -39
  257. package/dist/cjs/ion-searchbar.cjs.entry.js +38 -41
  258. package/dist/cjs/ion-segment-content.cjs.entry.js +3 -3
  259. package/dist/cjs/ion-segment-view.cjs.entry.js +6 -6
  260. package/dist/cjs/ion-segment_2.cjs.entry.js +35 -38
  261. package/dist/cjs/ion-select-modal.cjs.entry.js +26 -29
  262. package/dist/cjs/ion-select_3.cjs.entry.js +74 -77
  263. package/dist/cjs/ion-spinner.cjs.entry.js +26 -41
  264. package/dist/cjs/ion-split-pane.cjs.entry.js +12 -13
  265. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +90 -34
  266. package/dist/cjs/ion-tab_2.cjs.entry.js +27 -27
  267. package/dist/cjs/ion-text.cjs.entry.js +7 -8
  268. package/dist/cjs/ion-textarea.cjs.entry.js +35 -38
  269. package/dist/cjs/ion-toast.cjs.entry.js +41 -44
  270. package/dist/cjs/ion-toggle.cjs.entry.js +33 -36
  271. package/dist/cjs/{ionic-global-CSEbHD_F.js → ionic-global-DMWqcBn0.js} +240 -108
  272. package/dist/cjs/ionic.cjs.js +7 -7
  273. package/dist/cjs/{ios.transition-UCjoxA3D.js → ios.transition-DcJ6Bw2k.js} +4 -6
  274. package/dist/cjs/{keyboard-Bhav6x-R.js → keyboard-BCj7bSvQ.js} +4 -4
  275. package/dist/cjs/{keyboard-Dsczf-iT.js → keyboard-Jy7okGc5.js} +1 -1
  276. package/dist/cjs/{keyboard-controller-tqGDP9SU.js → keyboard-controller-CPJ4vSr0.js} +4 -4
  277. package/dist/cjs/loader.cjs.js +5 -5
  278. package/dist/cjs/{md.transition-CNwlchQn.js → md.transition-DAjf1hlJ.js} +4 -6
  279. package/dist/cjs/{notch-controller-CgtkBzy0.js → notch-controller-gGuWI1C7.js} +3 -3
  280. package/dist/cjs/{overlays-C54DhaTC.js → overlays-H4z8xPi9.js} +28 -206
  281. package/dist/cjs/{select-option-render-C7klBX2H.js → select-option-render-CZtiyFs7.js} +8 -8
  282. package/dist/cjs/{status-tap-CTY2dMsZ.js → status-tap-CPZvSRKr.js} +7 -9
  283. package/dist/cjs/{swipe-back-jJFi5KCB.js → swipe-back-CMubrxt-.js} +2 -4
  284. package/dist/collection/collection-manifest.json +0 -6
  285. package/dist/collection/components/action-sheet/action-sheet.ionic.css +2 -4
  286. package/dist/collection/components/action-sheet/action-sheet.ios.css +9 -10
  287. package/dist/collection/components/action-sheet/action-sheet.md.css +2 -3
  288. package/dist/collection/components/alert/alert.ionic.css +20 -22
  289. package/dist/collection/components/alert/alert.ios.css +13 -15
  290. package/dist/collection/components/alert/alert.md.css +19 -20
  291. package/dist/collection/components/avatar/avatar.ionic.css +0 -94
  292. package/dist/collection/components/avatar/avatar.js +22 -7
  293. package/dist/collection/components/avatar/avatar.md.css +0 -16
  294. package/dist/collection/components/back-button/back-button.ios.css +1 -1
  295. package/dist/collection/components/back-button/back-button.js +2 -2
  296. package/dist/collection/components/badge/badge.css +256 -0
  297. package/dist/collection/components/badge/badge.interfaces.js +7 -0
  298. package/dist/collection/components/badge/badge.js +72 -76
  299. package/dist/collection/components/breadcrumb/breadcrumb.ios.css +9 -9
  300. package/dist/collection/components/breadcrumb/breadcrumb.js +2 -2
  301. package/dist/collection/components/breadcrumb/breadcrumb.md.css +9 -9
  302. package/dist/collection/components/button/button.ionic.css +18 -68
  303. package/dist/collection/components/button/button.ios.css +17 -32
  304. package/dist/collection/components/button/button.js +27 -5
  305. package/dist/collection/components/button/button.md.css +16 -31
  306. package/dist/collection/components/card/card.ios.css +1 -1
  307. package/dist/collection/components/card/card.js +2 -2
  308. package/dist/collection/components/card/card.md.css +1 -1
  309. package/dist/collection/components/card-subtitle/card-subtitle.ios.css +1 -1
  310. package/dist/collection/components/card-subtitle/card-subtitle.md.css +1 -1
  311. package/dist/collection/components/card-title/card-title.md.css +1 -1
  312. package/dist/collection/components/checkbox/checkbox.ios.css +5 -5
  313. package/dist/collection/components/checkbox/checkbox.md.css +5 -5
  314. package/dist/collection/components/chip/chip.css +406 -0
  315. package/dist/collection/components/chip/chip.js +111 -57
  316. package/dist/collection/components/col/col.js +2 -3
  317. package/dist/collection/components/content/content.css +66 -126
  318. package/dist/collection/components/content/content.js +25 -24
  319. package/dist/collection/components/datetime/datetime.ios.css +8 -8
  320. package/dist/collection/components/datetime/datetime.md.css +7 -7
  321. package/dist/collection/components/datetime-button/datetime-button.ios.css +2 -2
  322. package/dist/collection/components/datetime-button/datetime-button.md.css +1 -1
  323. package/dist/collection/components/fab-button/fab-button.ios.css +17 -17
  324. package/dist/collection/components/fab-button/fab-button.js +2 -2
  325. package/dist/collection/components/fab-button/fab-button.md.css +6 -6
  326. package/dist/collection/components/grid/grid.js +2 -2
  327. package/dist/collection/components/header/header.js +2 -2
  328. package/dist/collection/components/img/img.js +2 -2
  329. package/dist/collection/components/infinite-scroll/infinite-scroll.js +1 -1
  330. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.ios.css +3 -3
  331. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +2 -2
  332. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.md.css +3 -3
  333. package/dist/collection/components/input/input.ios.css +7 -7
  334. package/dist/collection/components/input/input.js +6 -6
  335. package/dist/collection/components/input/input.md.css +15 -15
  336. package/dist/collection/components/input-otp/input-otp.ionic.css +2 -2
  337. package/dist/collection/components/input-otp/input-otp.ios.css +16 -16
  338. package/dist/collection/components/input-otp/input-otp.js +3 -3
  339. package/dist/collection/components/input-otp/input-otp.md.css +16 -16
  340. package/dist/collection/components/input-password-toggle/input-password-toggle.js +3 -3
  341. package/dist/collection/components/item/item.ios.css +1 -1
  342. package/dist/collection/components/item/item.js +2 -2
  343. package/dist/collection/components/item/item.md.css +2 -2
  344. package/dist/collection/components/item-divider/item-divider.css +351 -0
  345. package/dist/collection/components/item-divider/item-divider.js +6 -13
  346. package/dist/collection/components/item-group/item-group.js +1 -1
  347. package/dist/collection/components/item-option/item-option.ionic.css +8 -8
  348. package/dist/collection/components/item-option/item-option.ios.css +3 -3
  349. package/dist/collection/components/item-option/item-option.js +2 -2
  350. package/dist/collection/components/item-option/item-option.md.css +2 -2
  351. package/dist/collection/components/item-options/item-options.ios.css +1 -1
  352. package/dist/collection/components/item-options/item-options.js +1 -1
  353. package/dist/collection/components/item-options/item-options.md.css +1 -1
  354. package/dist/collection/components/item-sliding/{item-sliding.native.css → item-sliding.css} +9 -78
  355. package/dist/collection/components/item-sliding/item-sliding.js +38 -284
  356. package/dist/collection/components/label/label.ios.css +1 -1
  357. package/dist/collection/components/label/label.js +2 -2
  358. package/dist/collection/components/label/label.md.css +2 -2
  359. package/dist/collection/components/list/list.js +1 -1
  360. package/dist/collection/components/list-header/list-header.ios.css +2 -2
  361. package/dist/collection/components/list-header/list-header.js +2 -2
  362. package/dist/collection/components/list-header/list-header.md.css +1 -1
  363. package/dist/collection/components/loading/loading.ios.css +2 -2
  364. package/dist/collection/components/loading/loading.js +2 -2
  365. package/dist/collection/components/loading/loading.md.css +3 -3
  366. package/dist/collection/components/menu/menu.js +2 -2
  367. package/dist/collection/components/menu-button/menu-button.ios.css +1 -1
  368. package/dist/collection/components/menu-button/menu-button.js +2 -2
  369. package/dist/collection/components/menu-toggle/menu-toggle.js +2 -2
  370. package/dist/collection/components/modal/modal.ios.css +1 -1
  371. package/dist/collection/components/modal/modal.js +4 -4
  372. package/dist/collection/components/modal/modal.md.css +1 -1
  373. package/dist/collection/components/nav/nav.js +3 -3
  374. package/dist/collection/components/nav-link/nav-link.js +1 -1
  375. package/dist/collection/components/note/note.ios.css +1 -1
  376. package/dist/collection/components/note/note.js +2 -2
  377. package/dist/collection/components/note/note.md.css +1 -1
  378. package/dist/collection/components/picker/picker.ios.css +1 -1
  379. package/dist/collection/components/picker-column-option/picker-column-option.js +2 -2
  380. package/dist/collection/components/picker-legacy/picker.ios.css +2 -2
  381. package/dist/collection/components/picker-legacy/picker.js +2 -2
  382. package/dist/collection/components/picker-legacy/picker.md.css +4 -4
  383. package/dist/collection/components/picker-legacy-column/picker-column.js +2 -2
  384. package/dist/collection/components/picker-legacy-column/picker-column.md.css +1 -1
  385. package/dist/collection/components/popover/popover.ios.css +1 -1
  386. package/dist/collection/components/popover/popover.js +2 -2
  387. package/dist/collection/components/progress-bar/progress-bar.css +281 -0
  388. package/dist/collection/components/progress-bar/progress-bar.interfaces.js +4 -0
  389. package/dist/collection/components/progress-bar/progress-bar.js +30 -30
  390. package/dist/collection/components/radio/radio.ios.css +2 -2
  391. package/dist/collection/components/radio/radio.js +3 -3
  392. package/dist/collection/components/radio/radio.md.css +2 -2
  393. package/dist/collection/components/radio-group/radio-group.ios.css +2 -2
  394. package/dist/collection/components/radio-group/radio-group.js +2 -2
  395. package/dist/collection/components/radio-group/radio-group.md.css +2 -2
  396. package/dist/collection/components/range/range.ionic.css +1 -1
  397. package/dist/collection/components/range/range.ios.css +3 -3
  398. package/dist/collection/components/range/range.js +3 -3
  399. package/dist/collection/components/range/range.md.css +6 -6
  400. package/dist/collection/components/refresher/refresher.ios.css +1 -1
  401. package/dist/collection/components/refresher/refresher.js +3 -3
  402. package/dist/collection/components/refresher/refresher.md.css +4 -4
  403. package/dist/collection/components/refresher/refresher.utils.js +2 -2
  404. package/dist/collection/components/refresher-content/refresher-content.js +2 -2
  405. package/dist/collection/components/reorder/reorder.js +2 -2
  406. package/dist/collection/components/reorder-group/reorder-group.js +1 -1
  407. package/dist/collection/components/ripple-effect/ripple-effect.js +1 -1
  408. package/dist/collection/components/router/router.js +2 -2
  409. package/dist/collection/components/router/utils/dom.js +2 -2
  410. package/dist/collection/components/router-link/router-link.css +1 -1
  411. package/dist/collection/components/router-link/router-link.js +4 -3
  412. package/dist/collection/components/router-outlet/router-outlet.js +2 -2
  413. package/dist/collection/components/row/row.js +2 -2
  414. package/dist/collection/components/searchbar/searchbar.ios.css +3 -3
  415. package/dist/collection/components/searchbar/searchbar.js +6 -6
  416. package/dist/collection/components/searchbar/searchbar.md.css +3 -3
  417. package/dist/collection/components/segment/segment.js +2 -2
  418. package/dist/collection/components/segment-button/segment-button.ios.css +3 -3
  419. package/dist/collection/components/segment-button/segment-button.js +2 -2
  420. package/dist/collection/components/segment-button/segment-button.md.css +2 -2
  421. package/dist/collection/components/segment-content/segment-content.js +1 -1
  422. package/dist/collection/components/segment-view/segment-view.js +2 -2
  423. package/dist/collection/components/select/select.ios.css +6 -6
  424. package/dist/collection/components/select/select.js +3 -3
  425. package/dist/collection/components/select/select.md.css +14 -14
  426. package/dist/collection/components/select-modal/select-modal.ionic.css +3 -3
  427. package/dist/collection/components/select-modal/select-modal.ios.css +2 -2
  428. package/dist/collection/components/select-modal/select-modal.js +1 -1
  429. package/dist/collection/components/select-modal/select-modal.md.css +5 -5
  430. package/dist/collection/components/select-option/select-option.js +1 -1
  431. package/dist/collection/components/select-popover/select-popover.ionic.css +5 -5
  432. package/dist/collection/components/select-popover/select-popover.ios.css +1 -1
  433. package/dist/collection/components/select-popover/select-popover.js +2 -2
  434. package/dist/collection/components/select-popover/select-popover.md.css +5 -5
  435. package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
  436. package/dist/collection/components/spinner/spinner.css +248 -0
  437. package/dist/collection/components/spinner/spinner.js +27 -31
  438. package/dist/collection/components/split-pane/split-pane.ios.css +1 -1
  439. package/dist/collection/components/split-pane/split-pane.js +2 -3
  440. package/dist/collection/components/split-pane/split-pane.md.css +1 -1
  441. package/dist/collection/components/tab/tab.js +3 -3
  442. package/dist/collection/components/tab-bar/tab-bar.ios.css +4 -4
  443. package/dist/collection/components/tab-bar/tab-bar.js +2 -2
  444. package/dist/collection/components/tab-bar/tab-bar.md.css +3 -3
  445. package/dist/collection/components/tab-button/tab-button.ionic.css +0 -61
  446. package/dist/collection/components/tab-button/tab-button.ios.css +0 -105
  447. package/dist/collection/components/tab-button/tab-button.js +62 -3
  448. package/dist/collection/components/tab-button/tab-button.md.css +0 -88
  449. package/dist/collection/components/tabs/tabs.css +0 -39
  450. package/dist/collection/components/tabs/tabs.interfaces.js +1 -0
  451. package/dist/collection/components/tabs/tabs.js +14 -14
  452. package/dist/collection/components/text/text.js +2 -2
  453. package/dist/collection/components/textarea/textarea.ionic.css +1 -1
  454. package/dist/collection/components/textarea/textarea.ios.css +6 -6
  455. package/dist/collection/components/textarea/textarea.js +5 -5
  456. package/dist/collection/components/textarea/textarea.md.css +14 -14
  457. package/dist/collection/components/thumbnail/thumbnail.css +2 -2
  458. package/dist/collection/components/thumbnail/thumbnail.js +2 -2
  459. package/dist/collection/components/title/title.js +2 -2
  460. package/dist/collection/components/toast/toast.ios.css +3 -3
  461. package/dist/collection/components/toast/toast.js +2 -2
  462. package/dist/collection/components/toast/toast.md.css +5 -5
  463. package/dist/collection/components/toggle/toggle.ionic.css +1 -1
  464. package/dist/collection/components/toggle/toggle.ios.css +4 -4
  465. package/dist/collection/components/toggle/toggle.js +3 -3
  466. package/dist/collection/components/toggle/toggle.md.css +4 -4
  467. package/dist/collection/components/toolbar/toolbar.ios.css +2 -2
  468. package/dist/collection/components/toolbar/toolbar.js +2 -2
  469. package/dist/collection/components/toolbar/toolbar.md.css +1 -1
  470. package/dist/collection/global/config.js +27 -0
  471. package/dist/collection/global/ionic-global.js +59 -76
  472. package/dist/collection/index.js +1 -2
  473. package/dist/collection/themes/base/dark.tokens.js +218 -0
  474. package/dist/collection/themes/base/default.tokens.js +157 -0
  475. package/dist/collection/themes/base/high-contrast-dark.tokens.js +210 -0
  476. package/dist/collection/themes/base/high-contrast.tokens.js +169 -0
  477. package/dist/collection/themes/base/light.tokens.js +163 -0
  478. package/dist/collection/themes/base/shared.tokens.js +15 -0
  479. package/dist/collection/themes/ionic/dark.tokens.js +5 -0
  480. package/dist/collection/themes/ionic/default.tokens.js +700 -0
  481. package/dist/collection/themes/ionic/light.tokens.js +25 -0
  482. package/dist/collection/themes/ionic/shared.tokens.js +122 -0
  483. package/dist/collection/themes/ios/dark.tokens.js +18 -0
  484. package/dist/collection/themes/ios/default.tokens.js +711 -0
  485. package/dist/collection/themes/ios/high-contrast-dark.tokens.js +6 -0
  486. package/dist/collection/themes/ios/high-contrast.tokens.js +5 -0
  487. package/dist/collection/themes/ios/light.tokens.js +4 -0
  488. package/dist/collection/themes/ios/shared.tokens.js +63 -0
  489. package/dist/collection/themes/md/dark.tokens.js +23 -0
  490. package/dist/collection/themes/md/default.tokens.js +819 -0
  491. package/dist/collection/themes/md/high-contrast-dark.tokens.js +10 -0
  492. package/dist/collection/themes/md/high-contrast.tokens.js +5 -0
  493. package/dist/collection/themes/md/light.tokens.js +4 -0
  494. package/dist/collection/themes/md/shared.tokens.js +127 -0
  495. package/dist/collection/themes/themes.interfaces.js +1 -0
  496. package/dist/collection/utils/badge-position.js +171 -0
  497. package/dist/collection/utils/content/index.js +2 -2
  498. package/dist/collection/utils/framework-delegate.js +3 -3
  499. package/dist/collection/utils/helpers.js +40 -0
  500. package/dist/collection/utils/input-shims/hacks/scroll-padding.js +2 -2
  501. package/dist/collection/utils/input-shims/input-shims.js +2 -2
  502. package/dist/collection/utils/media.js +0 -1
  503. package/dist/collection/utils/menu-controller/index.js +2 -2
  504. package/dist/collection/utils/overlays.js +12 -189
  505. package/dist/collection/utils/status-tap.js +2 -2
  506. package/dist/collection/utils/test/playwright/page/utils/set-content.js +36 -2
  507. package/dist/collection/utils/theme.js +611 -9
  508. package/dist/docs.json +1501 -858
  509. package/dist/esm/{animation-Cqe2x-Pt.js → animation-pTY9wqHp.js} +2 -2
  510. package/dist/esm/{app-globals-Dk1rB3aE.js → app-globals-BDyWBDAh.js} +1 -1
  511. package/dist/esm/badge-position-C1Q3qPZy.js +174 -0
  512. package/dist/esm/{button-active-g6ZnZzDZ.js → button-active-Ca3reU6j.js} +2 -2
  513. package/dist/esm/{capacitor-C4lYa1nV.js → capacitor-isspMXyk.js} +1 -1
  514. package/dist/esm/{data-BNKYavC3.js → data-CAYLUmgh.js} +1 -1
  515. package/dist/esm/{framework-delegate-CjVwn_KZ.js → framework-delegate-reUSF3oT.js} +3 -4
  516. package/dist/esm/{haptic-_88k1V5U.js → haptic-FwCam9_Q.js} +1 -1
  517. package/dist/esm/{index-BmkLokUL.js → index-6QFmgmEW.js} +2 -3
  518. package/dist/esm/{index-Omi_TcwW.js → index-BrrkdT9L.js} +1851 -1
  519. package/dist/esm/{index-hpH08p5s.js → index-CEhdLZKQ.js} +4 -5
  520. package/dist/esm/{index-C5t9-ciC.js → index-CQnGY3Fp.js} +2 -4
  521. package/dist/esm/{index-CGthURny.js → index-DUAoXzCH.js} +3 -4
  522. package/dist/esm/{index-D4ugF_sT.js → index-V2HKYEdd.js} +1 -1
  523. package/dist/esm/index.js +10 -13
  524. package/dist/esm/{input-shims-vDjCsx95.js → input-shims-Cuw1QMqP.js} +8 -10
  525. package/dist/esm/{input.utils-B9Q5xHp6.js → input.utils-BiYknr4n.js} +2 -3
  526. package/dist/esm/ion-accordion_2.entry.js +2 -5
  527. package/dist/esm/ion-action-sheet.entry.js +13 -16
  528. package/dist/esm/ion-alert.entry.js +13 -16
  529. package/dist/esm/ion-app_8.entry.js +36 -37
  530. package/dist/esm/ion-avatar_3.entry.js +60 -80
  531. package/dist/esm/ion-back-button.entry.js +3 -6
  532. package/dist/esm/ion-backdrop.entry.js +2 -2
  533. package/dist/esm/ion-breadcrumb_2.entry.js +5 -8
  534. package/dist/esm/ion-button_2.entry.js +31 -11
  535. package/dist/esm/ion-card_5.entry.js +8 -11
  536. package/dist/esm/ion-checkbox.entry.js +4 -7
  537. package/dist/esm/ion-chip.entry.js +50 -50
  538. package/dist/esm/ion-col_3.entry.js +8 -10
  539. package/dist/esm/ion-datetime-button.entry.js +6 -9
  540. package/dist/esm/ion-datetime_3.entry.js +17 -20
  541. package/dist/esm/ion-divider.entry.js +2 -2
  542. package/dist/esm/ion-fab_3.entry.js +5 -8
  543. package/dist/esm/ion-img.entry.js +4 -6
  544. package/dist/esm/ion-infinite-scroll_2.entry.js +10 -12
  545. package/dist/esm/ion-input-otp.entry.js +8 -11
  546. package/dist/esm/ion-input-password-toggle.entry.js +5 -6
  547. package/dist/esm/ion-input.entry.js +11 -14
  548. package/dist/esm/ion-item-option_3.entry.js +49 -302
  549. package/dist/esm/ion-item_8.entry.js +28 -40
  550. package/dist/esm/ion-loading.entry.js +11 -14
  551. package/dist/esm/ion-menu_3.entry.js +13 -16
  552. package/dist/esm/ion-modal.entry.js +16 -19
  553. package/dist/esm/ion-nav_2.entry.js +8 -10
  554. package/dist/esm/ion-picker-column-option.entry.js +4 -7
  555. package/dist/esm/ion-picker-column.entry.js +4 -7
  556. package/dist/esm/ion-picker.entry.js +2 -4
  557. package/dist/esm/ion-popover.entry.js +9 -12
  558. package/dist/esm/ion-progress-bar.entry.js +21 -34
  559. package/dist/esm/ion-radio_2.entry.js +11 -14
  560. package/dist/esm/ion-range.entry.js +9 -12
  561. package/dist/esm/ion-refresher_2.entry.js +16 -18
  562. package/dist/esm/ion-reorder_2.entry.js +8 -10
  563. package/dist/esm/ion-ripple-effect.entry.js +3 -3
  564. package/dist/esm/ion-route_4.entry.js +6 -9
  565. package/dist/esm/ion-searchbar.entry.js +9 -12
  566. package/dist/esm/ion-segment-content.entry.js +2 -2
  567. package/dist/esm/ion-segment-view.entry.js +3 -3
  568. package/dist/esm/ion-segment_2.entry.js +8 -11
  569. package/dist/esm/ion-select-modal.entry.js +10 -13
  570. package/dist/esm/ion-select_3.entry.js +18 -21
  571. package/dist/esm/ion-spinner.entry.js +18 -33
  572. package/dist/esm/ion-split-pane.entry.js +7 -8
  573. package/dist/esm/ion-tab-bar_2.entry.js +75 -19
  574. package/dist/esm/ion-tab_2.entry.js +19 -19
  575. package/dist/esm/ion-text.entry.js +4 -5
  576. package/dist/esm/ion-textarea.entry.js +11 -14
  577. package/dist/esm/ion-toast.entry.js +10 -13
  578. package/dist/esm/ion-toggle.entry.js +10 -13
  579. package/dist/esm/{ionic-global-CAZb-5i-.js → ionic-global-CYPOXYV9.js} +214 -82
  580. package/dist/esm/ionic.js +5 -5
  581. package/dist/esm/{ios.transition-CzSncKQg.js → ios.transition-Udz14cFX.js} +4 -6
  582. package/dist/esm/{keyboard-Cpw6xVLJ.js → keyboard-BJeLQuaz.js} +1 -1
  583. package/dist/esm/{keyboard-controller-CAc33ylR.js → keyboard-controller-DtjExoRO.js} +3 -3
  584. package/dist/esm/{keyboard-DJpS2IGK.js → keyboard-uAtaO52Q.js} +4 -4
  585. package/dist/esm/loader.js +5 -5
  586. package/dist/esm/{md.transition-DIsWqYBZ.js → md.transition-BjHXd0f9.js} +4 -6
  587. package/dist/esm/{notch-controller-DiBq57w8.js → notch-controller-oUerJ6nV.js} +2 -2
  588. package/dist/esm/{overlays-ttYCMKRp.js → overlays-CSQv-GZq.js} +14 -192
  589. package/dist/esm/{select-option-render-B2qc5ZP7.js → select-option-render-DmisODWi.js} +2 -2
  590. package/dist/esm/{status-tap-fYFdZg6z.js → status-tap-DRMNWPiL.js} +3 -5
  591. package/dist/esm/{swipe-back-BzGqTrrq.js → swipe-back-D8jSdnGS.js} +1 -3
  592. package/dist/html.html-data.json +29 -202
  593. package/dist/ionic/index.esm.js +1 -1
  594. package/dist/ionic/ionic.esm.js +1 -1
  595. package/dist/ionic/p-01aa6153.entry.js +4 -0
  596. package/dist/ionic/p-07a3d959.entry.js +4 -0
  597. package/dist/ionic/p-0b68c8a9.entry.js +4 -0
  598. package/dist/ionic/p-0d50e1d3.entry.js +4 -0
  599. package/dist/ionic/p-124bb083.entry.js +4 -0
  600. package/dist/ionic/p-1f8298b3.entry.js +4 -0
  601. package/dist/ionic/p-1yGxS_yC.js +4 -0
  602. package/dist/ionic/p-29273c47.entry.js +4 -0
  603. package/dist/ionic/p-340449bb.entry.js +4 -0
  604. package/dist/ionic/p-39a55f1c.entry.js +4 -0
  605. package/dist/ionic/p-3a362e49.entry.js +4 -0
  606. package/dist/ionic/p-3a85e733.entry.js +4 -0
  607. package/dist/ionic/p-3b3dee19.entry.js +4 -0
  608. package/dist/ionic/p-485c13f3.entry.js +4 -0
  609. package/dist/ionic/p-4a63756e.entry.js +4 -0
  610. package/dist/ionic/p-4a6c21f5.entry.js +4 -0
  611. package/dist/ionic/p-4e8b3cd6.entry.js +4 -0
  612. package/dist/ionic/p-4f332976.entry.js +4 -0
  613. package/dist/ionic/{p-9d789053.entry.js → p-576b4ff1.entry.js} +1 -1
  614. package/dist/ionic/p-62a1e227.entry.js +4 -0
  615. package/dist/ionic/p-64877060.entry.js +4 -0
  616. package/dist/ionic/p-678f1511.entry.js +4 -0
  617. package/dist/ionic/p-6a0b6306.entry.js +4 -0
  618. package/dist/ionic/p-6c9228d4.entry.js +4 -0
  619. package/dist/ionic/p-70ab2edf.entry.js +4 -0
  620. package/dist/ionic/p-74d05699.entry.js +4 -0
  621. package/dist/ionic/p-77aa1e90.entry.js +4 -0
  622. package/dist/ionic/p-79be145b.entry.js +4 -0
  623. package/dist/ionic/p-7ba7526a.entry.js +4 -0
  624. package/dist/ionic/p-7cffb312.entry.js +4 -0
  625. package/dist/ionic/p-7e44a4c5.entry.js +4 -0
  626. package/dist/ionic/{p-45825c2c.entry.js → p-88717a4c.entry.js} +1 -1
  627. package/dist/ionic/p-918cf662.entry.js +4 -0
  628. package/dist/ionic/p-9476775d.entry.js +4 -0
  629. package/dist/ionic/p-9b05cd45.entry.js +4 -0
  630. package/dist/ionic/p-9b75925d.entry.js +4 -0
  631. package/dist/ionic/p-9c849562.entry.js +4 -0
  632. package/dist/ionic/p-9e74defe.entry.js +4 -0
  633. package/{components/p-oF-CwZ0b.js → dist/ionic/p-B7D6IyeU.js} +1 -1
  634. package/dist/ionic/p-BQZlX_QW.js +4 -0
  635. package/dist/ionic/p-BiY-3g9k.js +4 -0
  636. package/dist/ionic/p-BrrkdT9L.js +5 -0
  637. package/dist/ionic/p-BzLJp2YK.js +4 -0
  638. package/dist/ionic/{p-ZqkJDyhe.js → p-CAUIo7pE.js} +1 -1
  639. package/dist/ionic/p-CQA3_fVT.js +4 -0
  640. package/dist/ionic/{p-SJmaFQ0H.js → p-CTDx2dNQ.js} +1 -1
  641. package/dist/ionic/p-CWcwW_B7.js +4 -0
  642. package/dist/ionic/p-CYLLjyEJ.js +4 -0
  643. package/dist/ionic/p-Cd5dRcMd.js +4 -0
  644. package/dist/ionic/p-CeizwFUQ.js +4 -0
  645. package/{components/p-Cmql_g3_.js → dist/ionic/p-Chp7Hiov.js} +1 -1
  646. package/{components/p-sK-FK9CT.js → dist/ionic/p-Ckv4csSE.js} +1 -1
  647. package/dist/ionic/p-CnLgxV__.js +4 -0
  648. package/dist/ionic/p-CrC3J6IY.js +4 -0
  649. package/dist/ionic/p-D6sRRFCv.js +4 -0
  650. package/dist/ionic/p-DBv6epu_.js +4 -0
  651. package/dist/ionic/p-Dl7gXMai.js +4 -0
  652. package/dist/ionic/p-Dxq4Ulb1.js +4 -0
  653. package/dist/ionic/p-YuNpC3uG.js +4 -0
  654. package/{components/p-BLysWQA1.js → dist/ionic/p-ZdzrkYIV.js} +1 -1
  655. package/dist/ionic/p-a6c90dec.entry.js +4 -0
  656. package/dist/ionic/{p-8537b2fb.entry.js → p-a71389be.entry.js} +1 -1
  657. package/dist/ionic/p-a714ca93.entry.js +4 -0
  658. package/dist/ionic/p-bcaba3e0.entry.js +4 -0
  659. package/dist/ionic/p-bd44b49f.entry.js +4 -0
  660. package/dist/ionic/{p-7d267dc6.entry.js → p-c636b0d3.entry.js} +1 -1
  661. package/dist/ionic/p-cdc18886.entry.js +4 -0
  662. package/dist/ionic/p-ce6acd14.entry.js +4 -0
  663. package/dist/ionic/p-d7b2d59f.entry.js +4 -0
  664. package/dist/ionic/p-dc2812ee.entry.js +4 -0
  665. package/dist/ionic/p-de74cc27.entry.js +4 -0
  666. package/dist/ionic/p-ef1330ac.entry.js +4 -0
  667. package/dist/ionic/p-f57fea97.entry.js +4 -0
  668. package/dist/ionic/p-f840d58e.entry.js +4 -0
  669. package/dist/ionic/p-fK-AnPaq.js +4 -0
  670. package/dist/ionic/p-fce34e31.entry.js +4 -0
  671. package/dist/ionic/p-fd014d35.entry.js +4 -0
  672. package/dist/ionic/p-gBNkhCZy.js +4 -0
  673. package/dist/ionic/p-gYuHMhs-.js +4 -0
  674. package/dist/ionic/p-nMHpWRBR.js +4 -0
  675. package/dist/types/components/avatar/avatar.d.ts +6 -0
  676. package/dist/types/components/badge/badge.d.ts +30 -17
  677. package/dist/types/components/badge/badge.interfaces.d.ts +73 -0
  678. package/dist/types/components/button/button.d.ts +7 -1
  679. package/dist/types/components/chip/chip.d.ts +45 -14
  680. package/dist/types/components/chip/chip.interfaces.d.ts +97 -0
  681. package/dist/types/components/content/content.d.ts +1 -2
  682. package/dist/types/components/content/{content-interface.d.ts → content.interfaces.d.ts} +18 -0
  683. package/dist/types/components/item-divider/item-divider.d.ts +0 -1
  684. package/dist/types/components/item-divider/item-divider.interfaces.d.ts +132 -0
  685. package/dist/types/components/item-sliding/item-sliding.d.ts +2 -17
  686. package/dist/types/components/progress-bar/progress-bar.d.ts +9 -4
  687. package/dist/types/components/progress-bar/progress-bar.interfaces.d.ts +90 -0
  688. package/dist/types/components/spinner/spinner-configs.d.ts +2 -2
  689. package/dist/types/components/spinner/spinner.d.ts +8 -4
  690. package/dist/types/components/spinner/spinner.interfaces.d.ts +72 -0
  691. package/dist/types/components/tab/tab.d.ts +0 -1
  692. package/dist/types/components/tab-button/tab-button.d.ts +7 -0
  693. package/dist/types/components/tabs/tabs.d.ts +1 -1
  694. package/dist/types/components.d.ts +64 -186
  695. package/dist/types/global/config.d.ts +9 -1
  696. package/dist/types/global/ionic-global.d.ts +3 -10
  697. package/dist/types/index.d.ts +1 -2
  698. package/dist/types/interface.d.ts +2 -2
  699. package/dist/types/themes/base/dark.tokens.d.ts +2 -0
  700. package/dist/types/themes/base/default.tokens.d.ts +2 -0
  701. package/dist/types/themes/base/high-contrast-dark.tokens.d.ts +2 -0
  702. package/dist/types/themes/base/high-contrast.tokens.d.ts +2 -0
  703. package/dist/types/themes/base/light.tokens.d.ts +2 -0
  704. package/dist/types/themes/base/shared.tokens.d.ts +11 -0
  705. package/dist/types/themes/ionic/dark.tokens.d.ts +2 -0
  706. package/dist/types/themes/ionic/default.tokens.d.ts +2 -0
  707. package/dist/types/themes/ionic/light.tokens.d.ts +2 -0
  708. package/dist/types/themes/ionic/shared.tokens.d.ts +112 -0
  709. package/dist/types/themes/ios/dark.tokens.d.ts +2 -0
  710. package/dist/types/themes/ios/default.tokens.d.ts +2 -0
  711. package/dist/types/themes/ios/high-contrast-dark.tokens.d.ts +2 -0
  712. package/dist/types/themes/ios/high-contrast.tokens.d.ts +2 -0
  713. package/dist/types/themes/ios/light.tokens.d.ts +2 -0
  714. package/dist/types/themes/ios/shared.tokens.d.ts +56 -0
  715. package/dist/types/themes/md/dark.tokens.d.ts +2 -0
  716. package/dist/types/themes/md/default.tokens.d.ts +2 -0
  717. package/dist/types/themes/md/high-contrast-dark.tokens.d.ts +2 -0
  718. package/dist/types/themes/md/high-contrast.tokens.d.ts +2 -0
  719. package/dist/types/themes/md/light.tokens.d.ts +2 -0
  720. package/dist/types/themes/md/shared.tokens.d.ts +117 -0
  721. package/dist/types/themes/themes.interfaces.d.ts +278 -0
  722. package/dist/types/utils/badge-position.d.ts +106 -0
  723. package/dist/types/utils/config.d.ts +6 -0
  724. package/dist/types/utils/helpers.d.ts +16 -0
  725. package/dist/types/utils/platform.d.ts +2 -2
  726. package/dist/types/utils/theme.d.ts +198 -3
  727. package/hydrate/index.js +7551 -6874
  728. package/hydrate/index.mjs +7551 -6874
  729. package/package.json +6 -4
  730. package/components/ion-gallery.d.ts +0 -11
  731. package/components/ion-gallery.js +0 -4
  732. package/components/p-0sa2JgYA.js +0 -4
  733. package/components/p-3Ni1Z654.js +0 -4
  734. package/components/p-9gxM3tAr.js +0 -4
  735. package/components/p-B636tzQ7.js +0 -4
  736. package/components/p-B8Oa6a_k.js +0 -4
  737. package/components/p-BCDEEm9n.js +0 -4
  738. package/components/p-BDndEqui.js +0 -4
  739. package/components/p-BFbsici0.js +0 -4
  740. package/components/p-BLCuPAtN.js +0 -4
  741. package/components/p-BO4aickU.js +0 -4
  742. package/components/p-BRWWcnBq.js +0 -4
  743. package/components/p-BXcCGjEc.js +0 -4
  744. package/components/p-BbQGmZyu.js +0 -4
  745. package/components/p-BeVlsaLA.js +0 -4
  746. package/components/p-Bp__mr16.js +0 -4
  747. package/components/p-BqDiJgC_.js +0 -4
  748. package/components/p-BqImG3uk.js +0 -4
  749. package/components/p-C00Y_WJv.js +0 -4
  750. package/components/p-C0U8YqYW.js +0 -4
  751. package/components/p-C38HUpU5.js +0 -4
  752. package/components/p-C4G6C9fP.js +0 -4
  753. package/components/p-CKfNwyAb.js +0 -4
  754. package/components/p-CN-WzkJE.js +0 -4
  755. package/components/p-CVBkx7m1.js +0 -4
  756. package/components/p-CVRxImH6.js +0 -4
  757. package/components/p-Cb9imMZh.js +0 -4
  758. package/components/p-Cf9-xP7P.js +0 -4
  759. package/components/p-CjSx8W-k.js +0 -4
  760. package/components/p-CoFDGTFO.js +0 -4
  761. package/components/p-CoFqDNc5.js +0 -4
  762. package/components/p-CykCvfXQ.js +0 -4
  763. package/components/p-DDw-NYxz.js +0 -4
  764. package/components/p-DHTe6lDL.js +0 -4
  765. package/components/p-DH_9VCbD.js +0 -4
  766. package/components/p-DTtRWhIZ.js +0 -4
  767. package/components/p-DVcs-2q3.js +0 -4
  768. package/components/p-DXUyXgVL.js +0 -4
  769. package/components/p-DaJxRxSQ.js +0 -4
  770. package/components/p-IMXp2Inn.js +0 -4
  771. package/components/p-TR4ubkPu.js +0 -4
  772. package/components/p-XegQjlzJ.js +0 -4
  773. package/components/p-qZr7hBPz.js +0 -4
  774. package/components/p-t98_NeNv.js +0 -4
  775. package/components/p-vCpF32Z7.js +0 -4
  776. package/components/p-vXpMhGrs.js +0 -4
  777. package/components/p-wCDzv5Q8.js +0 -4
  778. package/dist/cjs/focus-visible-BIj-I3-C.js +0 -101
  779. package/dist/cjs/helpers-DJYxKN5U.js +0 -413
  780. package/dist/cjs/ion-gallery.cjs.entry.js +0 -510
  781. package/dist/cjs/theme-IlOsGAz7.js +0 -72
  782. package/dist/collection/components/badge/badge.ionic.css +0 -275
  783. package/dist/collection/components/badge/badge.ios.css +0 -295
  784. package/dist/collection/components/badge/badge.md.css +0 -275
  785. package/dist/collection/components/chip/chip.ionic.css +0 -217
  786. package/dist/collection/components/chip/chip.ios.css +0 -265
  787. package/dist/collection/components/chip/chip.md.css +0 -260
  788. package/dist/collection/components/gallery/gallery-constants.js +0 -12
  789. package/dist/collection/components/gallery/gallery.css +0 -100
  790. package/dist/collection/components/gallery/gallery.js +0 -595
  791. package/dist/collection/components/gallery/test/utils.js +0 -100
  792. package/dist/collection/components/item-divider/item-divider.ios.css +0 -369
  793. package/dist/collection/components/item-divider/item-divider.md.css +0 -425
  794. package/dist/collection/components/item-sliding/item-sliding.ionic.css +0 -211
  795. package/dist/collection/components/progress-bar/progress-bar.ionic.css +0 -287
  796. package/dist/collection/components/progress-bar/progress-bar.ios.css +0 -298
  797. package/dist/collection/components/progress-bar/progress-bar.md.css +0 -290
  798. package/dist/collection/components/spinner/spinner.ionic.css +0 -300
  799. package/dist/collection/components/spinner/spinner.native.css +0 -199
  800. package/dist/collection/utils/css-value-validation.js +0 -25
  801. package/dist/esm/focus-visible-vXpMhGrs.js +0 -97
  802. package/dist/esm/helpers-Do7zwvM1.js +0 -392
  803. package/dist/esm/ion-gallery.entry.js +0 -508
  804. package/dist/esm/theme-DaJxRxSQ.js +0 -67
  805. package/dist/ionic/p-00c0bd38.entry.js +0 -4
  806. package/dist/ionic/p-06bd033b.entry.js +0 -4
  807. package/dist/ionic/p-07d3388f.entry.js +0 -4
  808. package/dist/ionic/p-11nqcMM3.js +0 -4
  809. package/dist/ionic/p-139d02eb.entry.js +0 -4
  810. package/dist/ionic/p-1709b0aa.entry.js +0 -4
  811. package/dist/ionic/p-1c2c1869.entry.js +0 -4
  812. package/dist/ionic/p-1c4de46b.entry.js +0 -4
  813. package/dist/ionic/p-1e1c8d61.entry.js +0 -4
  814. package/dist/ionic/p-1f74b8d4.entry.js +0 -4
  815. package/dist/ionic/p-2311e660.entry.js +0 -4
  816. package/dist/ionic/p-2aa7567e.entry.js +0 -4
  817. package/dist/ionic/p-2ad79c23.entry.js +0 -4
  818. package/dist/ionic/p-2f8aa0ac.entry.js +0 -4
  819. package/dist/ionic/p-3331cfa9.entry.js +0 -4
  820. package/dist/ionic/p-33c34361.entry.js +0 -4
  821. package/dist/ionic/p-37ccbee4.entry.js +0 -4
  822. package/dist/ionic/p-3aba19e2.entry.js +0 -4
  823. package/dist/ionic/p-3f79f594.entry.js +0 -4
  824. package/dist/ionic/p-48026d15.entry.js +0 -4
  825. package/dist/ionic/p-488992b6.entry.js +0 -4
  826. package/dist/ionic/p-5061a8d4.entry.js +0 -4
  827. package/dist/ionic/p-50b61fab.entry.js +0 -4
  828. package/dist/ionic/p-50cd2d57.entry.js +0 -4
  829. package/dist/ionic/p-5274f999.entry.js +0 -4
  830. package/dist/ionic/p-586d4270.entry.js +0 -4
  831. package/dist/ionic/p-68c21b2a.entry.js +0 -4
  832. package/dist/ionic/p-6fbead83.entry.js +0 -4
  833. package/dist/ionic/p-7054a1b9.entry.js +0 -4
  834. package/dist/ionic/p-7194f6fa.entry.js +0 -4
  835. package/dist/ionic/p-72491468.entry.js +0 -4
  836. package/dist/ionic/p-76307d10.entry.js +0 -4
  837. package/dist/ionic/p-7d5057c4.entry.js +0 -4
  838. package/dist/ionic/p-83c693c4.entry.js +0 -4
  839. package/dist/ionic/p-8f04bd89.entry.js +0 -4
  840. package/dist/ionic/p-8uDL7fql.js +0 -4
  841. package/dist/ionic/p-90e653e3.entry.js +0 -4
  842. package/dist/ionic/p-967576f8.entry.js +0 -4
  843. package/dist/ionic/p-BsfuYVMP.js +0 -4
  844. package/dist/ionic/p-Bx0bt2Ar.js +0 -4
  845. package/dist/ionic/p-C2mpVKI1.js +0 -4
  846. package/dist/ionic/p-C5zxLmJ_.js +0 -4
  847. package/dist/ionic/p-CBV-BGvD.js +0 -4
  848. package/dist/ionic/p-CDn0uNJA.js +0 -4
  849. package/dist/ionic/p-CFjI63GE.js +0 -4
  850. package/dist/ionic/p-CHE1xWbg.js +0 -4
  851. package/dist/ionic/p-CIk5QtPm.js +0 -4
  852. package/dist/ionic/p-CQKe4n56.js +0 -4
  853. package/dist/ionic/p-CVp2D--1.js +0 -4
  854. package/dist/ionic/p-CXqdKf1K.js +0 -4
  855. package/dist/ionic/p-Cb-0O4h8.js +0 -4
  856. package/dist/ionic/p-DKWXAwlR.js +0 -4
  857. package/dist/ionic/p-DaJxRxSQ.js +0 -4
  858. package/dist/ionic/p-DdyNaGpi.js +0 -4
  859. package/dist/ionic/p-DoyDJ2X5.js +0 -4
  860. package/dist/ionic/p-FvDKM4Ax.js +0 -4
  861. package/dist/ionic/p-Omi_TcwW.js +0 -5
  862. package/dist/ionic/p-SOASChNu.js +0 -4
  863. package/dist/ionic/p-acdc21a6.entry.js +0 -4
  864. package/dist/ionic/p-ae667493.entry.js +0 -4
  865. package/dist/ionic/p-b2fe6c1c.entry.js +0 -4
  866. package/dist/ionic/p-b3c9f19c.entry.js +0 -4
  867. package/dist/ionic/p-b653f4c2.entry.js +0 -4
  868. package/dist/ionic/p-bb898d47.entry.js +0 -4
  869. package/dist/ionic/p-bd71a4a7.entry.js +0 -4
  870. package/dist/ionic/p-d4ed5710.entry.js +0 -4
  871. package/dist/ionic/p-d6299c37.entry.js +0 -4
  872. package/dist/ionic/p-dea52cb3.entry.js +0 -4
  873. package/dist/ionic/p-e18d3fdb.entry.js +0 -4
  874. package/dist/ionic/p-f02ba305.entry.js +0 -4
  875. package/dist/ionic/p-fad05840.entry.js +0 -4
  876. package/dist/ionic/p-fc796d48.entry.js +0 -4
  877. package/dist/ionic/p-qETiT38a.js +0 -4
  878. package/dist/ionic/p-vXpMhGrs.js +0 -4
  879. package/dist/types/components/gallery/gallery-constants.d.ts +0 -9
  880. package/dist/types/components/gallery/gallery-interface.d.ts +0 -10
  881. package/dist/types/components/gallery/gallery.d.ts +0 -183
  882. package/dist/types/components/gallery/test/utils.d.ts +0 -2
  883. package/dist/types/components/spinner/spinner-interface.d.ts +0 -22
  884. package/dist/types/utils/css-value-validation.d.ts +0 -12
  885. /package/dist/collection/components/{content/content-interface.js → chip/chip.interfaces.js} +0 -0
  886. /package/dist/collection/components/{gallery/gallery-interface.js → content/content.interfaces.js} +0 -0
  887. /package/dist/collection/components/{spinner/spinner-interface.js → item-divider/item-divider.interfaces.js} +0 -0
  888. /package/dist/collection/components/{tabs/tabs-interface.js → spinner/spinner.interfaces.js} +0 -0
  889. /package/dist/types/components/tabs/{tabs-interface.d.ts → tabs.interfaces.d.ts} +0 -0
@@ -16,6 +16,33 @@ class Config {
16
16
  const value = this.m.get(key);
17
17
  return value !== undefined ? value : fallback;
18
18
  }
19
+ /**
20
+ * Get a nested object value from the config
21
+ *
22
+ * @param key Nested key string (e.g., 'IonChip.size')
23
+ * @param fallback Default value if the key is not found
24
+ * @returns The value found at the nested key or the fallback
25
+ */
26
+ getObjectValue(key, fallback) {
27
+ var _a;
28
+ const [firstKey, ...remainingKeys] = key.split('.');
29
+ let root;
30
+ // First key is a component config since it starts with 'Ion',
31
+ // it must be accessed from the 'customTheme' config object
32
+ if (firstKey.startsWith('Ion')) {
33
+ const customTheme = this.m.get('customTheme');
34
+ root = customTheme ? (_a = customTheme.config) === null || _a === void 0 ? void 0 : _a.components[firstKey] : undefined;
35
+ }
36
+ else {
37
+ // Otherwise, get the value directly from the global config
38
+ root = this.m.get(firstKey);
39
+ }
40
+ if (root === undefined) {
41
+ return fallback;
42
+ }
43
+ const result = remainingKeys.reduce((acc, k) => acc === null || acc === void 0 ? void 0 : acc[k], root);
44
+ return result !== null && result !== void 0 ? result : fallback;
45
+ }
19
46
  getBoolean(key, fallback = false) {
20
47
  const val = this.m.get(key);
21
48
  if (val === undefined) {
@@ -121,6 +148,1829 @@ const printRequiredElementError = (el, ...targetSelectors) => {
121
148
  return console.error(`<${el.tagName.toLowerCase()}> must be used inside ${targetSelectors.join(' or ')}.`);
122
149
  };
123
150
 
151
+ const ION_FOCUSED = 'ion-focused';
152
+ const ION_FOCUSABLE = 'ion-focusable';
153
+ const FOCUS_KEYS = [
154
+ 'Tab',
155
+ 'ArrowDown',
156
+ 'Space',
157
+ 'Escape',
158
+ ' ',
159
+ 'Shift',
160
+ 'Enter',
161
+ 'ArrowLeft',
162
+ 'ArrowRight',
163
+ 'ArrowUp',
164
+ 'Home',
165
+ 'End',
166
+ ];
167
+ let focusVisibleUtility = null;
168
+ const getOrInitFocusVisibleUtility = () => {
169
+ if (!focusVisibleUtility) {
170
+ focusVisibleUtility = startFocusVisible();
171
+ }
172
+ return focusVisibleUtility;
173
+ };
174
+ /**
175
+ * Used to set focus on an element that uses `ion-focusable`.
176
+ * Do not use this if focusing the element as a result of a keyboard
177
+ * event as the focus utility should handle this for us. This method
178
+ * should be used when we want to programmatically focus an element as
179
+ * a result of another user action. (Ex: We focus the first element
180
+ * inside of a popover when the user presents it, but the popover is not always
181
+ * presented as a result of keyboard action.)
182
+ *
183
+ * @param elements - The elements to set focus on.
184
+ */
185
+ const focusElements = (elements) => {
186
+ const focusVisible = getOrInitFocusVisibleUtility();
187
+ focusVisible.setFocus(elements);
188
+ };
189
+ const startFocusVisible = (rootEl) => {
190
+ let currentFocus = [];
191
+ let keyboardMode = true;
192
+ const ref = rootEl ? rootEl.shadowRoot : document;
193
+ const root = rootEl ? rootEl : document.body;
194
+ const setFocus = (elements) => {
195
+ currentFocus.forEach((el) => el.classList.remove(ION_FOCUSED));
196
+ elements.forEach((el) => el.classList.add(ION_FOCUSED));
197
+ currentFocus = elements;
198
+ };
199
+ const pointerDown = () => {
200
+ keyboardMode = false;
201
+ setFocus([]);
202
+ };
203
+ const onKeydown = (ev) => {
204
+ keyboardMode = FOCUS_KEYS.includes(ev.key);
205
+ if (!keyboardMode) {
206
+ setFocus([]);
207
+ }
208
+ };
209
+ const onFocusin = (ev) => {
210
+ if (keyboardMode && ev.composedPath !== undefined) {
211
+ const toFocus = ev.composedPath().filter((el) => {
212
+ // TODO(FW-2832): type
213
+ if (el.classList) {
214
+ return el.classList.contains(ION_FOCUSABLE);
215
+ }
216
+ return false;
217
+ });
218
+ setFocus(toFocus);
219
+ }
220
+ };
221
+ const onFocusout = () => {
222
+ if (ref.activeElement === root) {
223
+ setFocus([]);
224
+ }
225
+ };
226
+ ref.addEventListener('keydown', onKeydown);
227
+ ref.addEventListener('focusin', onFocusin);
228
+ ref.addEventListener('focusout', onFocusout);
229
+ ref.addEventListener('touchstart', pointerDown, { passive: true });
230
+ ref.addEventListener('mousedown', pointerDown);
231
+ const destroy = () => {
232
+ ref.removeEventListener('keydown', onKeydown);
233
+ ref.removeEventListener('focusin', onFocusin);
234
+ ref.removeEventListener('focusout', onFocusout);
235
+ ref.removeEventListener('touchstart', pointerDown);
236
+ ref.removeEventListener('mousedown', pointerDown);
237
+ };
238
+ return {
239
+ destroy,
240
+ setFocus,
241
+ };
242
+ };
243
+
244
+ var focusVisible = /*#__PURE__*/Object.freeze({
245
+ __proto__: null,
246
+ focusElements: focusElements,
247
+ getOrInitFocusVisibleUtility: getOrInitFocusVisibleUtility,
248
+ startFocusVisible: startFocusVisible
249
+ });
250
+
251
+ const transitionEndAsync = (el, expectedDuration = 0) => {
252
+ return new Promise((resolve) => {
253
+ transitionEnd(el, expectedDuration, resolve);
254
+ });
255
+ };
256
+ /**
257
+ * Allows developer to wait for a transition
258
+ * to finish and fallback to a timer if the
259
+ * transition is cancelled or otherwise
260
+ * never finishes. Also see transitionEndAsync
261
+ * which is an await-able version of this.
262
+ */
263
+ const transitionEnd = (el, expectedDuration = 0, callback) => {
264
+ let unRegTrans;
265
+ let animationTimeout;
266
+ const opts = { passive: true };
267
+ const ANIMATION_FALLBACK_TIMEOUT = 500;
268
+ const unregister = () => {
269
+ if (unRegTrans) {
270
+ unRegTrans();
271
+ }
272
+ };
273
+ const onTransitionEnd = (ev) => {
274
+ if (ev === undefined || el === ev.target) {
275
+ unregister();
276
+ callback(ev);
277
+ }
278
+ };
279
+ if (el) {
280
+ el.addEventListener('webkitTransitionEnd', onTransitionEnd, opts);
281
+ el.addEventListener('transitionend', onTransitionEnd, opts);
282
+ animationTimeout = setTimeout(onTransitionEnd, expectedDuration + ANIMATION_FALLBACK_TIMEOUT);
283
+ unRegTrans = () => {
284
+ if (animationTimeout !== undefined) {
285
+ clearTimeout(animationTimeout);
286
+ animationTimeout = undefined;
287
+ }
288
+ el.removeEventListener('webkitTransitionEnd', onTransitionEnd, opts);
289
+ el.removeEventListener('transitionend', onTransitionEnd, opts);
290
+ };
291
+ }
292
+ return unregister;
293
+ };
294
+ /**
295
+ * Waits for a component to be ready for
296
+ * both custom element and non-custom element builds.
297
+ * If non-custom element build, el.componentOnReady
298
+ * will be used.
299
+ * For custom element builds, we wait a frame
300
+ * so that the inner contents of the component
301
+ * have a chance to render.
302
+ *
303
+ * Use this utility rather than calling
304
+ * el.componentOnReady yourself.
305
+ */
306
+ const componentOnReady = (el, callback) => {
307
+ if (el.componentOnReady) {
308
+ // eslint-disable-next-line custom-rules/no-component-on-ready-method
309
+ el.componentOnReady().then((resolvedEl) => callback(resolvedEl));
310
+ }
311
+ else {
312
+ raf(() => callback(el));
313
+ }
314
+ };
315
+ /**
316
+ * Promise-based wrapper around componentOnReady. Use when you need to await
317
+ * component readiness before accessing internal refs (e.g. in early lifecycle
318
+ * hooks like Vue onMounted with the custom elements build).
319
+ */
320
+ const waitForComponentReady = (el) => {
321
+ return new Promise((resolve) => componentOnReady(el, () => resolve(el)));
322
+ };
323
+ /**
324
+ * This functions checks if a Stencil component is using
325
+ * the lazy loaded build of Stencil. Returns `true` if
326
+ * the component is lazy loaded. Returns `false` otherwise.
327
+ */
328
+ const hasLazyBuild = (stencilEl) => {
329
+ return stencilEl.componentOnReady !== undefined;
330
+ };
331
+ /**
332
+ * Elements inside of web components sometimes need to inherit global attributes
333
+ * set on the host. For example, the inner input in `ion-input` should inherit
334
+ * the `title` attribute that developers set directly on `ion-input`. This
335
+ * helper function should be called in componentWillLoad and assigned to a variable
336
+ * that is later used in the render function.
337
+ *
338
+ * This does not need to be reactive as changing attributes on the host element
339
+ * does not trigger a re-render.
340
+ */
341
+ const inheritAttributes = (el, attributes = []) => {
342
+ const attributeObject = {};
343
+ attributes.forEach((attr) => {
344
+ if (el.hasAttribute(attr)) {
345
+ const value = el.getAttribute(attr);
346
+ if (value !== null) {
347
+ attributeObject[attr] = el.getAttribute(attr);
348
+ }
349
+ el.removeAttribute(attr);
350
+ }
351
+ });
352
+ return attributeObject;
353
+ };
354
+ /**
355
+ * List of available ARIA attributes + `role`.
356
+ * Removed deprecated attributes.
357
+ * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes
358
+ */
359
+ const ariaAttributes = [
360
+ 'role',
361
+ 'aria-activedescendant',
362
+ 'aria-atomic',
363
+ 'aria-autocomplete',
364
+ 'aria-braillelabel',
365
+ 'aria-brailleroledescription',
366
+ 'aria-busy',
367
+ 'aria-checked',
368
+ 'aria-colcount',
369
+ 'aria-colindex',
370
+ 'aria-colindextext',
371
+ 'aria-colspan',
372
+ 'aria-controls',
373
+ 'aria-current',
374
+ 'aria-describedby',
375
+ 'aria-description',
376
+ 'aria-details',
377
+ 'aria-disabled',
378
+ 'aria-errormessage',
379
+ 'aria-expanded',
380
+ 'aria-flowto',
381
+ 'aria-haspopup',
382
+ 'aria-hidden',
383
+ 'aria-invalid',
384
+ 'aria-keyshortcuts',
385
+ 'aria-label',
386
+ 'aria-labelledby',
387
+ 'aria-level',
388
+ 'aria-live',
389
+ 'aria-multiline',
390
+ 'aria-multiselectable',
391
+ 'aria-orientation',
392
+ 'aria-owns',
393
+ 'aria-placeholder',
394
+ 'aria-posinset',
395
+ 'aria-pressed',
396
+ 'aria-readonly',
397
+ 'aria-relevant',
398
+ 'aria-required',
399
+ 'aria-roledescription',
400
+ 'aria-rowcount',
401
+ 'aria-rowindex',
402
+ 'aria-rowindextext',
403
+ 'aria-rowspan',
404
+ 'aria-selected',
405
+ 'aria-setsize',
406
+ 'aria-sort',
407
+ 'aria-valuemax',
408
+ 'aria-valuemin',
409
+ 'aria-valuenow',
410
+ 'aria-valuetext',
411
+ ];
412
+ /**
413
+ * Returns an array of aria attributes that should be copied from
414
+ * the shadow host element to a target within the light DOM.
415
+ * @param el The element that the attributes should be copied from.
416
+ * @param ignoreList The list of aria-attributes to ignore reflecting and removing from the host.
417
+ * Use this in instances where we manually specify aria attributes on the `<Host>` element.
418
+ */
419
+ const inheritAriaAttributes = (el, ignoreList) => {
420
+ let attributesToInherit = ariaAttributes;
421
+ return inheritAttributes(el, attributesToInherit);
422
+ };
423
+ const addEventListener = (el, eventName, callback, opts) => {
424
+ return el.addEventListener(eventName, callback, opts);
425
+ };
426
+ const removeEventListener = (el, eventName, callback, opts) => {
427
+ return el.removeEventListener(eventName, callback, opts);
428
+ };
429
+ /**
430
+ * Gets the root context of a shadow dom element
431
+ * On newer browsers this will be the shadowRoot,
432
+ * but for older browser this may just be the
433
+ * element itself.
434
+ *
435
+ * Useful for whenever you need to explicitly
436
+ * do "myElement.shadowRoot!.querySelector(...)".
437
+ */
438
+ const getElementRoot = (el, fallback = el) => {
439
+ return el.shadowRoot || fallback;
440
+ };
441
+ /**
442
+ * Patched version of requestAnimationFrame that avoids ngzone
443
+ * Use only when you know ngzone should not run
444
+ */
445
+ const raf = (h) => {
446
+ if (typeof __zone_symbol__requestAnimationFrame === 'function') {
447
+ return __zone_symbol__requestAnimationFrame(h);
448
+ }
449
+ if (typeof requestAnimationFrame === 'function') {
450
+ return requestAnimationFrame(h);
451
+ }
452
+ return setTimeout(h);
453
+ };
454
+ const hasShadowDom = (el) => {
455
+ return !!el.shadowRoot && !!el.attachShadow;
456
+ };
457
+ /**
458
+ * Focuses a given element while ensuring proper focus management
459
+ * within the Ionic framework. If the element is marked as `ion-focusable`,
460
+ * this function will delegate focus handling to `ion-app` or manually
461
+ * apply focus when a custom app root is used.
462
+ *
463
+ * This function helps maintain accessibility and expected focus behavior
464
+ * in both standard and custom root environments.
465
+ *
466
+ * @param el - The element to focus.
467
+ */
468
+ const focusVisibleElement = (el) => {
469
+ el.focus();
470
+ /**
471
+ * When programmatically focusing an element,
472
+ * the focus-visible utility will not run because
473
+ * it is expecting a keyboard event to have triggered this;
474
+ * however, there are times when we need to manually control
475
+ * this behavior so we call the `setFocus` method on ion-app
476
+ * which will let us explicitly set the elements to focus.
477
+ *
478
+ * Note: The element passed to this function might be an inner
479
+ * focusable element (e.g., a native <button> inside ion-button's
480
+ * shadow root). If so, we need to find the host element that has
481
+ * the ion-focusable class to pass to setFocus.
482
+ */
483
+ let elToFocus = el;
484
+ // If the element doesn't have ion-focusable, check if it's inside
485
+ // a shadow root and use the host element instead
486
+ if (!el.classList.contains('ion-focusable')) {
487
+ const rootNode = el.getRootNode();
488
+ if (rootNode instanceof ShadowRoot && rootNode.host instanceof HTMLElement) {
489
+ elToFocus = rootNode.host;
490
+ }
491
+ }
492
+ if (elToFocus.classList.contains('ion-focusable')) {
493
+ const appRootSelector = config.get('appRootSelector', 'ion-app');
494
+ const app = elToFocus.closest(appRootSelector);
495
+ if (app) {
496
+ if (appRootSelector === 'ion-app') {
497
+ /**
498
+ * If the app root is the default, then it will be
499
+ * in charge of setting focus. This is because the
500
+ * focus-visible utility is attached to the app root
501
+ * and will handle setting focus on the correct element.
502
+ */
503
+ app.setFocus([elToFocus]);
504
+ }
505
+ else {
506
+ /**
507
+ * When using a custom app root selector, the focus-visible
508
+ * utility is not available to manage focus automatically.
509
+ * If we set focus immediately, the element may not be fully
510
+ * rendered or interactive, especially if it was just added
511
+ * to the DOM. Using requestAnimationFrame ensures that focus
512
+ * is applied on the next frame, allowing the DOM to settle
513
+ * before changing focus.
514
+ */
515
+ requestAnimationFrame(() => {
516
+ /**
517
+ * The focus-visible utility is used to set focus on an
518
+ * element that uses `ion-focusable`.
519
+ */
520
+ focusElements([elToFocus]);
521
+ });
522
+ }
523
+ }
524
+ }
525
+ };
526
+ /**
527
+ * This method is used to add a hidden input to a host element that contains
528
+ * a Shadow DOM. It does not add the input inside of the Shadow root which
529
+ * allows it to be picked up inside of forms. It should contain the same
530
+ * values as the host element.
531
+ *
532
+ * @param always Add a hidden input even if the container does not use Shadow
533
+ * @param container The element where the input will be added
534
+ * @param name The name of the input
535
+ * @param value The value of the input
536
+ * @param disabled If true, the input is disabled
537
+ */
538
+ const renderHiddenInput = (always, container, name, value, disabled) => {
539
+ {
540
+ let input = container.querySelector('input.aux-input');
541
+ if (!input) {
542
+ input = container.ownerDocument.createElement('input');
543
+ input.type = 'hidden';
544
+ input.classList.add('aux-input');
545
+ container.appendChild(input);
546
+ }
547
+ input.disabled = disabled;
548
+ input.name = name;
549
+ input.value = value || '';
550
+ }
551
+ };
552
+ const clamp = (min, n, max) => {
553
+ return Math.max(min, Math.min(n, max));
554
+ };
555
+ const assert = (actual, reason) => {
556
+ if (!actual) {
557
+ const message = 'ASSERT: ' + reason;
558
+ printIonError(message);
559
+ debugger; // eslint-disable-line
560
+ throw new Error(message);
561
+ }
562
+ };
563
+ const pointerCoord = (ev) => {
564
+ // get X coordinates for either a mouse click
565
+ // or a touch depending on the given event
566
+ if (ev) {
567
+ const changedTouches = ev.changedTouches;
568
+ if (changedTouches && changedTouches.length > 0) {
569
+ const touch = changedTouches[0];
570
+ return { x: touch.clientX, y: touch.clientY };
571
+ }
572
+ if (ev.pageX !== undefined) {
573
+ return { x: ev.pageX, y: ev.pageY };
574
+ }
575
+ }
576
+ return { x: 0, y: 0 };
577
+ };
578
+ /**
579
+ * @hidden
580
+ * Given a side, return if it should be on the end
581
+ * based on the value of dir
582
+ * @param side the side
583
+ * @param isRTL whether the application dir is rtl
584
+ */
585
+ const isEndSide = (side) => {
586
+ const isRTL = document.dir === 'rtl';
587
+ switch (side) {
588
+ case 'start':
589
+ return isRTL;
590
+ case 'end':
591
+ return !isRTL;
592
+ default:
593
+ throw new Error(`"${side}" is not a valid value for [side]. Use "start" or "end" instead.`);
594
+ }
595
+ };
596
+ const debounceEvent = (event, wait) => {
597
+ const original = event._original || event;
598
+ return {
599
+ _original: event,
600
+ emit: debounce(original.emit.bind(original), wait),
601
+ };
602
+ };
603
+ const debounce = (func, wait = 0) => {
604
+ let timer;
605
+ return (...args) => {
606
+ clearTimeout(timer);
607
+ timer = setTimeout(func, wait, ...args);
608
+ };
609
+ };
610
+ /**
611
+ * Check whether the two string maps are shallow equal.
612
+ *
613
+ * undefined is treated as an empty map.
614
+ *
615
+ * @returns whether the keys are the same and the values are shallow equal.
616
+ */
617
+ const shallowEqualStringMap = (map1, map2) => {
618
+ map1 !== null && map1 !== void 0 ? map1 : (map1 = {});
619
+ map2 !== null && map2 !== void 0 ? map2 : (map2 = {});
620
+ if (map1 === map2) {
621
+ return true;
622
+ }
623
+ const keys1 = Object.keys(map1);
624
+ if (keys1.length !== Object.keys(map2).length) {
625
+ return false;
626
+ }
627
+ for (const k1 of keys1) {
628
+ if (!(k1 in map2)) {
629
+ return false;
630
+ }
631
+ if (map1[k1] !== map2[k1]) {
632
+ return false;
633
+ }
634
+ }
635
+ return true;
636
+ };
637
+ /**
638
+ * Checks input for usable number. Not NaN and not Infinite.
639
+ */
640
+ const isSafeNumber = (input) => {
641
+ return typeof input === 'number' && !isNaN(input) && isFinite(input);
642
+ };
643
+ const SCHEME = /^[a-z][a-z0-9+\-.]*:/;
644
+ const openURL = async (url, ev, direction, animation) => {
645
+ if (url != null && url[0] !== '#' && !SCHEME.test(url)) {
646
+ const router = document.querySelector('ion-router');
647
+ if (router) {
648
+ if (ev != null) {
649
+ ev.preventDefault();
650
+ }
651
+ return router.push(url, direction, animation);
652
+ }
653
+ }
654
+ return false;
655
+ };
656
+ /**
657
+ * Deep merges two objects, with source properties overriding target properties
658
+ * @param target The target object to merge into
659
+ * @param source The source object to merge from
660
+ * @returns The merged object
661
+ */
662
+ const deepMerge = (target, source) => {
663
+ var _a;
664
+ const result = Object.assign({}, target);
665
+ for (const key in source) {
666
+ if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {
667
+ result[key] = deepMerge((_a = result[key]) !== null && _a !== void 0 ? _a : {}, source[key]);
668
+ }
669
+ else {
670
+ result[key] = source[key];
671
+ }
672
+ }
673
+ return result;
674
+ };
675
+
676
+ var __rest = (undefined && undefined.__rest) || function (s, e) {
677
+ var t = {};
678
+ for (var p in s)
679
+ if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
680
+ t[p] = s[p];
681
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
682
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
683
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
684
+ t[p[i]] = s[p[i]];
685
+ }
686
+ return t;
687
+ };
688
+ const CSS_PROPS_PREFIX = '--ion-';
689
+ const CSS_ROOT_SELECTOR = ':root';
690
+ /**
691
+ * Checks if an element has a parent matching the specified selector.
692
+ * This handles an element in both light DOM and shadow DOM contexts.
693
+ * @param selector The parent selector to check for (e.g., 'ion-datetime'
694
+ * or 'ion-toolbar[color]').
695
+ * @param el The element to check.
696
+ * @returns `true` if the element has a parent matching the specified selector,
697
+ * `false` otherwise.
698
+ */
699
+ const hostContext = (selector, el) => {
700
+ // Check the light DOM first
701
+ if (el.closest(selector) !== null) {
702
+ return true;
703
+ }
704
+ // For attribute or class selectors (e.g., 'ion-toolbar[color]' or
705
+ // 'ion-toolbar.ion-color') we can only check light DOM since tagName
706
+ // doesn't include attributes or classes.
707
+ if (selector.includes('[') || selector.includes('.')) {
708
+ return false;
709
+ }
710
+ // Check the shadow DOM by looking at the shadow root host and
711
+ // converting the selector to uppercase to compare with tagName
712
+ const upperCaseTagName = selector.toUpperCase();
713
+ const rootNode = el.getRootNode();
714
+ const shadowHost = rootNode instanceof ShadowRoot ? rootNode.host : null;
715
+ return (shadowHost === null || shadowHost === void 0 ? void 0 : shadowHost.tagName) === upperCaseTagName;
716
+ };
717
+ /**
718
+ * Create the mode and color classes for the component based on the classes passed in
719
+ */
720
+ const createColorClasses = (color, cssClassMap) => {
721
+ return typeof color === 'string' && color.length > 0
722
+ ? Object.assign({ 'ion-color': true, [`ion-color-${color}`]: true }, cssClassMap) : cssClassMap;
723
+ };
724
+ const getClassList = (classes) => {
725
+ if (classes !== undefined) {
726
+ const array = Array.isArray(classes) ? classes : classes.split(' ');
727
+ return array
728
+ .filter((c) => c != null)
729
+ .map((c) => c.trim())
730
+ .filter((c) => c !== '');
731
+ }
732
+ return [];
733
+ };
734
+ const getClassMap = (classes) => {
735
+ const map = {};
736
+ getClassList(classes).forEach((c) => (map[c] = true));
737
+ return map;
738
+ };
739
+ /**
740
+ * Gets and merges custom themes based on mode
741
+ * @param customTheme The custom theme
742
+ * @param mode The current mode (ios | md)
743
+ * @returns The merged custom theme
744
+ */
745
+ const getCustomTheme = (customTheme, mode) => {
746
+ if (!customTheme)
747
+ return undefined;
748
+ // Check if the custom theme contains mode overrides (ios | md)
749
+ if (customTheme.ios || customTheme.md) {
750
+ const { ios, md } = customTheme, baseCustomTheme = __rest(customTheme, ["ios", "md"]);
751
+ // Flatten the mode-specific overrides based on current mode
752
+ if (mode === 'ios' && ios) {
753
+ return deepMerge(baseCustomTheme, ios);
754
+ }
755
+ else if (mode === 'md' && md) {
756
+ return deepMerge(baseCustomTheme, md);
757
+ }
758
+ return baseCustomTheme;
759
+ }
760
+ return customTheme;
761
+ };
762
+ /**
763
+ * Flattens the theme object into CSS custom properties
764
+ * @param theme The theme object to flatten
765
+ * @param prefix The CSS prefix to use (e.g., '--ion-')
766
+ * @returns CSS string with custom properties
767
+ */
768
+ const generateCSSVars = (theme, prefix = CSS_PROPS_PREFIX) => {
769
+ // Logs do not need to be printed because palette objects are optional
770
+ const themeValidity = isValidTheme(theme, 'generateCSSVars', false);
771
+ if (!themeValidity) {
772
+ return undefined;
773
+ }
774
+ const cssProps = Object.entries(theme)
775
+ .flatMap(([key, val]) => {
776
+ var _a, _b, _c, _d, _e, _f;
777
+ // Skip invalid keys or values
778
+ if (!key || typeof key !== 'string' || val === null || val === undefined) {
779
+ return [];
780
+ }
781
+ key = convertToKebabCase(key);
782
+ // Do not generate CSS variables for excluded keys
783
+ const excludedKeys = ['name', 'enabled', 'config'];
784
+ if (excludedKeys.includes(key)) {
785
+ return [];
786
+ }
787
+ // Special handling for 'base' property - don't add suffix
788
+ if (key === 'base') {
789
+ return [`${prefix.slice(0, -1)}: ${val};`];
790
+ }
791
+ // Generate rgb variables for base and contrast color variants
792
+ // These are only generated when processing global color objects,
793
+ // not component-level color overrides
794
+ // TODO(): this only works with hex values
795
+ if ((key === 'bold' || key === 'subtle') && prefix.includes('color')) {
796
+ if (typeof val === 'object' && val !== null) {
797
+ return Object.entries(val).flatMap(([property, hexValue]) => {
798
+ if (typeof hexValue === 'string' && hexValue.startsWith('#')) {
799
+ // For 'base' property, don't include the property name in the CSS variable
800
+ const varName = property === 'base' ? `${prefix}${key}` : `${prefix}${key}-${property}`;
801
+ const cssVars = [`${varName}: ${hexValue};`];
802
+ // Only add RGB values for base and contrast
803
+ if (property === 'base' || property === 'contrast') {
804
+ const rgbVarName = property === 'base' ? `${prefix}${key}-rgb` : `${prefix}${key}-${property}-rgb`;
805
+ cssVars.push(`${rgbVarName}: ${hexToRgb(hexValue)};`);
806
+ }
807
+ return cssVars;
808
+ }
809
+ return [];
810
+ });
811
+ }
812
+ }
813
+ // If it's a font-sizes key, create rem version
814
+ // This is necessary to support the dynamic font size feature
815
+ if (key === 'font-sizes' && typeof val === 'object' && val !== null) {
816
+ // Access the root font size from the global theme context
817
+ const fontSizeBase = parseFloat((_f = (_e = (_d = (_c = (_b = (_a = window.Ionic) === null || _a === void 0 ? void 0 : _a.config) === null || _b === void 0 ? void 0 : _b.get) === null || _c === void 0 ? void 0 : _c.call(_b, 'theme')) === null || _d === void 0 ? void 0 : _d.fontSizes) === null || _e === void 0 ? void 0 : _e.root) !== null && _f !== void 0 ? _f : '16');
818
+ return Object.entries(val).flatMap(([sizeKey, sizeValue]) => {
819
+ if (!sizeKey || sizeValue == null)
820
+ return [];
821
+ const remValue = `${parseFloat(sizeValue) / fontSizeBase}rem`;
822
+ // Return both px and rem values as separate array items
823
+ return [
824
+ `${prefix}${key}-${sizeKey}: ${sizeValue};`, // original px value
825
+ `${prefix}${key}-${sizeKey}-rem: ${remValue};`, // rem value
826
+ ];
827
+ });
828
+ }
829
+ return typeof val === 'object' && val !== null
830
+ ? generateCSSVars(val, `${prefix}${key}-`)
831
+ : [`${prefix}${key}: ${val};`];
832
+ })
833
+ .filter(Boolean);
834
+ return cssProps.join('\n');
835
+ };
836
+ /**
837
+ * Generates a CSS class containing the CSS variables for each color
838
+ * in the theme. Each color has generic bold and subtle variables that are mapped
839
+ * to the specific color's bold and subtle variables. The bold colors will temporarily
840
+ * include a fallback to remove the bold prefix. For example, the primary
841
+ * color will return the following CSS class:
842
+ *
843
+ * ```css
844
+ * :root .ion-color-primary {
845
+ * --ion-color-base: var(--ion-color-primary, var(--ion-color-primary-bold));
846
+ * --ion-color-base-rgb: var(--ion-color-primary-rgb, var(--ion-color-primary-bold-rgb));
847
+ * --ion-color-contrast: var(--ion-color-primary-contrast, var(--ion-color-primary-bold-contrast));
848
+ * --ion-color-contrast-rgb: var(--ion-color-primary-contrast-rgb, var(--ion-color-primary-bold-contrast-rgb));
849
+ * --ion-color-shade: var(--ion-color-primary-shade, var(--ion-color-primary-bold-shade));
850
+ * --ion-color-tint: var(--ion-color-primary-tint, var(--ion-color-primary-bold-tint));
851
+ * --ion-color-foreground: var(--ion-color-primary, var(--ion-color-primary-foreground, var(--ion-color-primary-bold-foreground)));
852
+ *
853
+ * --ion-color-subtle-base: var(--ion-color-primary-subtle);
854
+ * --ion-color-subtle-base-rgb: var(--ion-color-primary-subtle-rgb);
855
+ * --ion-color-subtle-contrast: var(--ion-color-primary-subtle-contrast);
856
+ * --ion-color-subtle-contrast-rgb: var(--ion-color-primary-subtle-contrast-rgb);
857
+ * --ion-color-subtle-shade: var(--ion-color-primary-subtle-shade);
858
+ * --ion-color-subtle-tint: var(--ion-color-primary-subtle-tint);
859
+ * --ion-color-subtle-foreground: var(--ion-color-primary-subtle-foreground);
860
+ * }
861
+ * ```
862
+ *
863
+ * @param theme The theme object containing color definitions
864
+ * @returns CSS string with .ion-color-{colorName} utility classes
865
+ */
866
+ const generateColorClasses = (theme) => {
867
+ var _a, _b;
868
+ // Look for colors in the light palette first, then fallback to the
869
+ // direct color property if there is no light palette
870
+ const colors = ((_b = (_a = theme === null || theme === void 0 ? void 0 : theme.palette) === null || _a === void 0 ? void 0 : _a.light) === null || _b === void 0 ? void 0 : _b.color) || (theme === null || theme === void 0 ? void 0 : theme.color);
871
+ if (!colors) {
872
+ return '';
873
+ }
874
+ if (typeof colors !== 'object' || Array.isArray(colors)) {
875
+ const colorsType = Array.isArray(colors) ? 'array' : typeof colors;
876
+ printIonWarning(`Invalid color configuration in theme. Expected color to be an object, but found ${colorsType}.`, theme);
877
+ return '';
878
+ }
879
+ const generatedColorClasses = [];
880
+ Object.keys(colors).forEach((colorName) => {
881
+ const colorVariants = colors[colorName];
882
+ if (!colorVariants || typeof colorVariants !== 'object')
883
+ return;
884
+ const cssVariableRules = [];
885
+ // Generate CSS variables for bold variant
886
+ // Includes base color variables without the bold modifier for
887
+ // backwards compatibility.
888
+ // TODO: Remove the fallbacks once the bold variables are the default
889
+ if (colorVariants.bold) {
890
+ cssVariableRules.push(`--ion-color-base: var(--ion-color-${colorName}, var(--ion-color-${colorName}-bold)) !important;`, `--ion-color-base-rgb: var(--ion-color-${colorName}-rgb, var(--ion-color-${colorName}-bold-rgb)) !important;`, `--ion-color-contrast: var(--ion-color-${colorName}-contrast, var(--ion-color-${colorName}-bold-contrast)) !important;`, `--ion-color-contrast-rgb: var(--ion-color-${colorName}-contrast-rgb, var(--ion-color-${colorName}-bold-contrast-rgb)) !important;`, `--ion-color-shade: var(--ion-color-${colorName}-shade, var(--ion-color-${colorName}-bold-shade)) !important;`, `--ion-color-tint: var(--ion-color-${colorName}-tint, var(--ion-color-${colorName}-bold-tint)) !important;`, `--ion-color-foreground: var(--ion-color-${colorName}-foreground, var(--ion-color-${colorName}-bold-foreground)) !important;`);
891
+ }
892
+ // Generate CSS variables for subtle variant
893
+ if (colorVariants.subtle) {
894
+ cssVariableRules.push(`--ion-color-subtle-base: var(--ion-color-${colorName}-subtle) !important;`, `--ion-color-subtle-base-rgb: var(--ion-color-${colorName}-subtle-rgb) !important;`, `--ion-color-subtle-contrast: var(--ion-color-${colorName}-subtle-contrast) !important;`, `--ion-color-subtle-contrast-rgb: var(--ion-color-${colorName}-subtle-contrast-rgb) !important;`, `--ion-color-subtle-shade: var(--ion-color-${colorName}-subtle-shade) !important;`, `--ion-color-subtle-tint: var(--ion-color-${colorName}-subtle-tint) !important;`, `--ion-color-subtle-foreground: var(--ion-color-${colorName}-subtle-foreground) !important;`);
895
+ }
896
+ if (cssVariableRules.length > 0) {
897
+ const colorUtilityClass = `
898
+ :root .ion-color-${colorName} {
899
+ ${cssVariableRules.join('\n ')}
900
+ }
901
+ `;
902
+ generatedColorClasses.push(colorUtilityClass);
903
+ }
904
+ });
905
+ return generatedColorClasses.join('\n');
906
+ };
907
+ /**
908
+ * Creates a style element and injects its CSS into a target element
909
+ * @param css The CSS string to inject
910
+ * @param target The target element to inject into
911
+ */
912
+ const injectCSS = (css, target = document.head) => {
913
+ const style = document.createElement('style');
914
+ style.innerHTML = css;
915
+ target.appendChild(style);
916
+ };
917
+ /**
918
+ * Generates global CSS variables from a theme object
919
+ * @param theme The theme object to generate CSS for
920
+ * @returns The generated CSS string
921
+ */
922
+ const generateGlobalThemeCSS = (theme) => {
923
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
924
+ const themeValidity = isValidTheme(theme, 'generateGlobalThemeCSS');
925
+ if (!themeValidity) {
926
+ return '';
927
+ }
928
+ // Exclude palette, components, and config from the default tokens
929
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
930
+ const { palette} = theme, defaultTokens = __rest(theme, ["palette", "components", "config"]);
931
+ // Generate CSS variables for the default design tokens
932
+ const defaultTokensCSS = generateCSSVars(defaultTokens);
933
+ // Generate CSS variables for the light color palette
934
+ const lightTokensCSS = generateCSSVars(palette.light);
935
+ // Generate CSS variables for the dark color palette
936
+ const darkTokensCSS = generateCSSVars(palette.dark);
937
+ // Generate CSS variable for the high contrast color palette
938
+ const highContrastTokensCSS = generateCSSVars(palette.highContrast);
939
+ // Generate CSS variable for the high contrast dark color palette
940
+ const highContrastDarkTokensCSS = generateCSSVars(palette.highContrastDark);
941
+ let paletteTokensCSS = lightTokensCSS;
942
+ if (((_a = palette.highContrastDark) === null || _a === void 0 ? void 0 : _a.enabled) === 'always') {
943
+ // Include CSS variables for the high contrast dark color palette instead of
944
+ // the light palette if high contrast dark palette enabled is 'always'
945
+ paletteTokensCSS = highContrastDarkTokensCSS;
946
+ }
947
+ else if (((_b = palette.highContrast) === null || _b === void 0 ? void 0 : _b.enabled) === 'always') {
948
+ // Include CSS variables for the dark color palette instead of
949
+ // the light palette if dark palette enabled is 'always'
950
+ paletteTokensCSS = highContrastTokensCSS;
951
+ }
952
+ else if (((_c = palette.dark) === null || _c === void 0 ? void 0 : _c.enabled) === 'always') {
953
+ // Include CSS variables for the dark color palette instead of
954
+ // the light palette if dark palette enabled is 'always'
955
+ paletteTokensCSS = darkTokensCSS;
956
+ }
957
+ let css = `
958
+ ${CSS_ROOT_SELECTOR} {
959
+ ${defaultTokensCSS}
960
+ ${paletteTokensCSS || ''}
961
+ }
962
+ `;
963
+ if (((_d = palette.highContrastDark) === null || _d === void 0 ? void 0 : _d.enabled) === 'class' && highContrastDarkTokensCSS) {
964
+ // Include CSS variables for the high contrast dark color palette inside of a
965
+ // class if high contrast dark palette enabled is 'class'
966
+ css += `
967
+ .ion-palette-high-contrast.ion-palette-dark {
968
+ ${highContrastDarkTokensCSS}
969
+ }
970
+ `;
971
+ }
972
+ else if (((_e = palette.highContrast) === null || _e === void 0 ? void 0 : _e.enabled) === 'class' && highContrastTokensCSS) {
973
+ // Include CSS variables for the high contrast color palette inside of a
974
+ // class if high contrast palette enabled is 'class'
975
+ css += `
976
+ .ion-palette-high-contrast {
977
+ ${highContrastTokensCSS}
978
+ }
979
+ `;
980
+ }
981
+ else if (((_f = palette.dark) === null || _f === void 0 ? void 0 : _f.enabled) === 'class' && darkTokensCSS) {
982
+ // Include CSS variables for the dark color palette inside of a
983
+ // class if dark palette enabled is 'class'
984
+ css += `
985
+ .ion-palette-dark {
986
+ ${darkTokensCSS}
987
+ }
988
+ `;
989
+ }
990
+ if (((_g = palette.highContrastDark) === null || _g === void 0 ? void 0 : _g.enabled) === 'system' && highContrastDarkTokensCSS) {
991
+ // Include CSS variables for the high contrast dark color palette inside of the
992
+ // high contrast dark media query if high contrast dark palette enabled is 'system'
993
+ css += `
994
+ @media (prefers-contrast: more) and (prefers-color-scheme: dark) {
995
+ ${CSS_ROOT_SELECTOR} {
996
+ ${highContrastDarkTokensCSS}
997
+ }
998
+ }
999
+ `;
1000
+ }
1001
+ else if (((_h = palette.highContrast) === null || _h === void 0 ? void 0 : _h.enabled) === 'system' && highContrastTokensCSS) {
1002
+ // Include CSS variables for the high contrast color palette inside of the
1003
+ // high contrast media query if high contrast palette enabled is 'system'
1004
+ css += `
1005
+ @media (prefers-contrast: more) {
1006
+ ${CSS_ROOT_SELECTOR} {
1007
+ ${highContrastTokensCSS}
1008
+ }
1009
+ }
1010
+ `;
1011
+ }
1012
+ else if (((_j = palette.dark) === null || _j === void 0 ? void 0 : _j.enabled) === 'system' && darkTokensCSS) {
1013
+ // Include CSS variables for the dark color palette inside of the
1014
+ // dark color scheme media query if dark palette enabled is 'system'
1015
+ css += `
1016
+ @media (prefers-color-scheme: dark) {
1017
+ ${CSS_ROOT_SELECTOR} {
1018
+ ${darkTokensCSS}
1019
+ }
1020
+ }
1021
+ `;
1022
+ }
1023
+ // Add color classes
1024
+ const colorClasses = generateColorClasses(theme);
1025
+ return css + '\n' + colorClasses;
1026
+ };
1027
+ /**
1028
+ * Applies the global theme from the provided base theme and user theme
1029
+ * @param baseTheme The default theme
1030
+ * @param userTheme The user's custom theme (optional)
1031
+ * @returns The combined theme object (or base theme if no user theme was provided)
1032
+ */
1033
+ const applyGlobalTheme = (baseTheme, userTheme) => {
1034
+ // If no base theme provided, error
1035
+ if (typeof baseTheme !== 'object' || Array.isArray(baseTheme)) {
1036
+ console.error('applyGlobalTheme: Valid base theme object is required', baseTheme);
1037
+ return {};
1038
+ }
1039
+ // If no user theme provided or it is invalid, apply base theme
1040
+ if (!userTheme || typeof userTheme !== 'object' || Array.isArray(userTheme)) {
1041
+ if (userTheme) {
1042
+ console.error('applyGlobalTheme: Invalid user theme provided', userTheme);
1043
+ }
1044
+ injectCSS(generateGlobalThemeCSS(baseTheme));
1045
+ return baseTheme;
1046
+ }
1047
+ // Merge themes and apply
1048
+ const mergedTheme = deepMerge(baseTheme, userTheme);
1049
+ injectCSS(generateGlobalThemeCSS(mergedTheme));
1050
+ return mergedTheme;
1051
+ };
1052
+ /**
1053
+ * Generates component's themed CSS class with CSS variables
1054
+ * from its theme object
1055
+ * @param componentTheme The component's object to generate CSS for (e.g., IonChip { })
1056
+ * @param components An object mapping component names (e.g. `IonChip`) to a nested
1057
+ * design-token configuration. Each configuration can contain arbitrary levels of
1058
+ * token groups (such as `size`, `state`, `shape`, `variant`, etc.), where leaf values
1059
+ * are CSS-compatible values. The structure is recursively flattened into CSS custom
1060
+ * properties using kebab-case keys and an `--ion-<component>-` prefix.
1061
+ *
1062
+ * Example:
1063
+ * ```json
1064
+ * {
1065
+ * IonChip: {
1066
+ * size: { small: { height: "24px" } },
1067
+ * state: { disabled: { opacity: "0.4" } }
1068
+ * }
1069
+ * }
1070
+ * ```
1071
+ *
1072
+ * Becomes:
1073
+ * ```css
1074
+ * ion-chip {
1075
+ * --ion-chip-size-small-height: 24px;
1076
+ * --ion-chip-state-disabled-opacity: 0.4;
1077
+ * }
1078
+ * ```
1079
+ * @returns string containing the component's themed CSS variables
1080
+ */
1081
+ const generateComponentsThemeCSS = (components) => {
1082
+ let css = '';
1083
+ for (const [component, componentTokens] of Object.entries(components)) {
1084
+ const componentTag = convertToKebabCase(component);
1085
+ const vars = generateCSSVars(componentTokens, `--${componentTag}-`);
1086
+ const componentBlock = `
1087
+ ${componentTag} {
1088
+ ${vars}
1089
+ }
1090
+ `;
1091
+ css += componentBlock;
1092
+ }
1093
+ return css;
1094
+ };
1095
+ /**
1096
+ * Applies a component theme to an element if it exists in the custom theme
1097
+ * @param element The element to apply the theme to
1098
+ * @returns true if theme was applied, false otherwise
1099
+ */
1100
+ const applyComponentsTheme = (theme) => {
1101
+ const themeValidity = isValidTheme(theme, 'applyComponentsTheme');
1102
+ if (!themeValidity) {
1103
+ return '';
1104
+ }
1105
+ const { components } = theme;
1106
+ if (!components) {
1107
+ return '';
1108
+ }
1109
+ injectCSS(generateComponentsThemeCSS(components));
1110
+ return components;
1111
+ };
1112
+ /**
1113
+ * Parses a hex color string and returns RGB values as an array.
1114
+ *
1115
+ * @param hex Hex color (e.g. `'#ffffff'` or `'#fff'`)
1116
+ *
1117
+ * @returns RGB values as `[r, g, b]` array
1118
+ */
1119
+ const parseHex = (hex) => {
1120
+ const cleanHex = hex.replace('#', '');
1121
+ // Short hex format like 'fff' → expand to 'ffffff'
1122
+ if (cleanHex.length === 3) {
1123
+ return [
1124
+ parseInt(cleanHex[0] + cleanHex[0], 16),
1125
+ parseInt(cleanHex[1] + cleanHex[1], 16),
1126
+ parseInt(cleanHex[2] + cleanHex[2], 16),
1127
+ ];
1128
+ // Full hex format like 'ffffff'
1129
+ }
1130
+ else {
1131
+ return [
1132
+ parseInt(cleanHex.substring(0, 2), 16),
1133
+ parseInt(cleanHex.substring(2, 4), 16),
1134
+ parseInt(cleanHex.substring(4, 6), 16),
1135
+ ];
1136
+ }
1137
+ };
1138
+ /**
1139
+ * Converts a hex color to a string of RGB comma-separated values.
1140
+ *
1141
+ * @param hex Hex color (e.g. `'#ffffff'` or `'#fff'`)
1142
+ *
1143
+ * @returns RGB string (e.g. `'255, 255, 255'`)
1144
+ */
1145
+ const hexToRgb = (hex) => {
1146
+ const [r, g, b] = parseHex(hex);
1147
+ return `${r}, ${g}, ${b}`;
1148
+ };
1149
+ /**
1150
+ * Mixes two hex colors by a given weight percentage and returns
1151
+ * it as a hex color.
1152
+ *
1153
+ * @param baseColor Base color (e.g. `'#0054e9'`)
1154
+ * @param mixColor Color to mix in (e.g. `'#000000'` or `'#fff'`)
1155
+ * @param weight Weight percentage as string - how much of mixColor to mix into baseColor (e.g. `'12%'`)
1156
+ *
1157
+ * @returns Mixed hex color (e.g. `'#004acd'`)
1158
+ */
1159
+ const mix = (baseColor, mixColor, weight) => {
1160
+ // Parse weight percentage
1161
+ const w = parseFloat(weight.replace('%', '')) / 100;
1162
+ // Parse both colors
1163
+ const [baseR, baseG, baseB] = parseHex(baseColor);
1164
+ const [mixR, mixG, mixB] = parseHex(mixColor);
1165
+ // Mix mixColor into baseColor by weight
1166
+ const r = Math.round(baseR * (1 - w) + mixR * w);
1167
+ const g = Math.round(baseG * (1 - w) + mixG * w);
1168
+ const b = Math.round(baseB * (1 - w) + mixB * w);
1169
+ const toHex = (n) => n.toString(16).padStart(2, '0');
1170
+ return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
1171
+ };
1172
+ /**
1173
+ * Converts a string to kebab-case
1174
+ *
1175
+ * @internal
1176
+ * @param str The string to convert (e.g., 'IonChip')
1177
+ * @returns The kebab-case string (e.g., 'ion-chip')
1178
+ */
1179
+ const convertToKebabCase = (str) => {
1180
+ return str
1181
+ .replace(/([a-z0-9])([A-Z])/g, '$1-$2')
1182
+ .replace(/[\s_]+/g, '-')
1183
+ .toLowerCase();
1184
+ };
1185
+ /**
1186
+ * Verifies that a theme object is valid
1187
+ *
1188
+ * @internal
1189
+ * @param theme The theme object to validate
1190
+ * @param source The source or context where the theme is being validated
1191
+ * @returns A boolean indicating whether the theme is valid
1192
+ */
1193
+ const isValidTheme = (theme, source, showLog = true) => {
1194
+ if (typeof theme !== 'object' || Array.isArray(theme)) {
1195
+ if (showLog) {
1196
+ printIonWarning(`${source}: Invalid theme object provided`, theme);
1197
+ }
1198
+ return false;
1199
+ }
1200
+ if (Object.keys(theme).length === 0) {
1201
+ if (showLog) {
1202
+ printIonWarning(`${source}: Empty theme object provided`, theme);
1203
+ }
1204
+ return false;
1205
+ }
1206
+ return true;
1207
+ };
1208
+ /**
1209
+ * Generates a series of color steps between a base color and a mix color.
1210
+ *
1211
+ * @param baseColor Base color (e.g. `'#0054e9'`)
1212
+ * @param mixColor Color to mix in (e.g. `'#000000'` or `'#fff'`)
1213
+ *
1214
+ * @internal
1215
+ * @returns An object containing the generated color steps
1216
+ */
1217
+ const generateColorSteps = (baseColor, mixColor) => {
1218
+ const colorSteps = {};
1219
+ for (let step = 50; step <= 950; step += 50) {
1220
+ const weight = `${step / 10}%`;
1221
+ colorSteps[`${step}`] = mix(baseColor, mixColor, weight);
1222
+ }
1223
+ return colorSteps;
1224
+ };
1225
+
1226
+ const colors$3 = {
1227
+ primary: '#4d8dff',
1228
+ secondary: '#46b1ff',
1229
+ tertiary: '#8482fb',
1230
+ success: '#2dd55b',
1231
+ warning: '#ffce31',
1232
+ danger: '#f24c58',
1233
+ light: '#222428',
1234
+ medium: '#989aa2',
1235
+ dark: '#f4f5f8',
1236
+ };
1237
+ const darkTheme = {
1238
+ enabled: 'never',
1239
+ color: {
1240
+ primary: {
1241
+ bold: {
1242
+ base: colors$3.primary,
1243
+ contrast: '#000',
1244
+ foreground: mix(colors$3.primary, '#000', '4%'),
1245
+ shade: mix(colors$3.primary, '#000', '4%'),
1246
+ tint: mix(colors$3.primary, '#fff', '12%'),
1247
+ },
1248
+ subtle: {
1249
+ base: mix('#000', colors$3.primary, '8%'),
1250
+ contrast: colors$3.primary,
1251
+ foreground: mix(colors$3.primary, '#000', '4%'),
1252
+ shade: mix('#000', colors$3.primary, '4%'),
1253
+ tint: mix('#000', colors$3.primary, '12%'),
1254
+ },
1255
+ },
1256
+ secondary: {
1257
+ bold: {
1258
+ base: colors$3.secondary,
1259
+ contrast: '#000',
1260
+ foreground: mix(colors$3.secondary, '#000', '4%'),
1261
+ shade: mix(colors$3.secondary, '#000', '4%'),
1262
+ tint: mix(colors$3.secondary, '#fff', '12%'),
1263
+ },
1264
+ subtle: {
1265
+ base: mix('#000', colors$3.secondary, '8%'),
1266
+ contrast: colors$3.secondary,
1267
+ foreground: mix(colors$3.secondary, '#000', '4%'),
1268
+ shade: mix('#000', colors$3.secondary, '4%'),
1269
+ tint: mix('#000', colors$3.secondary, '12%'),
1270
+ },
1271
+ },
1272
+ tertiary: {
1273
+ bold: {
1274
+ base: colors$3.tertiary,
1275
+ contrast: '#000',
1276
+ foreground: mix(colors$3.tertiary, '#000', '4%'),
1277
+ shade: mix(colors$3.tertiary, '#000', '4%'),
1278
+ tint: mix(colors$3.tertiary, '#fff', '12%'),
1279
+ },
1280
+ subtle: {
1281
+ base: mix('#000', colors$3.tertiary, '8%'),
1282
+ contrast: colors$3.tertiary,
1283
+ foreground: mix(colors$3.tertiary, '#000', '4%'),
1284
+ shade: mix('#000', colors$3.tertiary, '4%'),
1285
+ tint: mix('#000', colors$3.tertiary, '12%'),
1286
+ },
1287
+ },
1288
+ success: {
1289
+ bold: {
1290
+ base: colors$3.success,
1291
+ contrast: '#000',
1292
+ foreground: mix(colors$3.success, '#000', '4%'),
1293
+ shade: mix(colors$3.success, '#000', '4%'),
1294
+ tint: mix(colors$3.success, '#fff', '12%'),
1295
+ },
1296
+ subtle: {
1297
+ base: mix('#000', colors$3.success, '8%'),
1298
+ contrast: colors$3.success,
1299
+ foreground: mix(colors$3.success, '#000', '4%'),
1300
+ shade: mix('#000', colors$3.success, '4%'),
1301
+ tint: mix('#000', colors$3.success, '12%'),
1302
+ },
1303
+ },
1304
+ warning: {
1305
+ bold: {
1306
+ base: colors$3.warning,
1307
+ contrast: '#000',
1308
+ foreground: mix(colors$3.warning, '#000', '4%'),
1309
+ shade: mix(colors$3.warning, '#000', '4%'),
1310
+ tint: mix(colors$3.warning, '#fff', '12%'),
1311
+ },
1312
+ subtle: {
1313
+ base: mix('#000', colors$3.warning, '8%'),
1314
+ contrast: colors$3.warning,
1315
+ foreground: mix(colors$3.warning, '#000', '4%'),
1316
+ shade: mix('#000', colors$3.warning, '4%'),
1317
+ tint: mix('#000', colors$3.warning, '12%'),
1318
+ },
1319
+ },
1320
+ danger: {
1321
+ bold: {
1322
+ base: colors$3.danger,
1323
+ contrast: '#000',
1324
+ foreground: mix(colors$3.danger, '#000', '4%'),
1325
+ shade: mix(colors$3.danger, '#000', '4%'),
1326
+ tint: mix(colors$3.danger, '#fff', '12%'),
1327
+ },
1328
+ subtle: {
1329
+ base: mix('#000', colors$3.danger, '8%'),
1330
+ contrast: colors$3.danger,
1331
+ foreground: mix(colors$3.danger, '#000', '4%'),
1332
+ shade: mix('#000', colors$3.danger, '4%'),
1333
+ tint: mix('#000', colors$3.danger, '12%'),
1334
+ },
1335
+ },
1336
+ light: {
1337
+ bold: {
1338
+ base: colors$3.light,
1339
+ contrast: '#fff',
1340
+ foreground: mix(colors$3.light, '#000', '4%'),
1341
+ shade: mix(colors$3.light, '#000', '4%'),
1342
+ tint: mix(colors$3.light, '#fff', '12%'),
1343
+ },
1344
+ subtle: {
1345
+ base: mix('#000', colors$3.light, '8%'),
1346
+ contrast: colors$3.light,
1347
+ foreground: mix(colors$3.light, '#000', '4%'),
1348
+ shade: mix('#000', colors$3.light, '4%'),
1349
+ tint: mix('#000', colors$3.light, '12%'),
1350
+ },
1351
+ },
1352
+ medium: {
1353
+ bold: {
1354
+ base: colors$3.medium,
1355
+ contrast: '#000',
1356
+ foreground: mix(colors$3.medium, '#000', '4%'),
1357
+ shade: mix(colors$3.medium, '#000', '4%'),
1358
+ tint: mix(colors$3.medium, '#fff', '12%'),
1359
+ },
1360
+ subtle: {
1361
+ base: mix('#000', colors$3.medium, '8%'),
1362
+ contrast: colors$3.medium,
1363
+ foreground: mix(colors$3.medium, '#000', '4%'),
1364
+ shade: mix('#000', colors$3.medium, '4%'),
1365
+ tint: mix('#000', colors$3.medium, '12%'),
1366
+ },
1367
+ },
1368
+ dark: {
1369
+ bold: {
1370
+ base: colors$3.dark,
1371
+ contrast: '#000',
1372
+ foreground: mix(colors$3.dark, '#000', '4%'),
1373
+ shade: mix(colors$3.dark, '#000', '4%'),
1374
+ tint: mix(colors$3.dark, '#fff', '12%'),
1375
+ },
1376
+ subtle: {
1377
+ base: mix('#000', colors$3.dark, '8%'),
1378
+ contrast: colors$3.dark,
1379
+ foreground: mix(colors$3.dark, '#000', '4%'),
1380
+ shade: mix('#000', colors$3.dark, '4%'),
1381
+ tint: mix('#000', colors$3.dark, '12%'),
1382
+ },
1383
+ },
1384
+ },
1385
+ backgroundColor: '#000000',
1386
+ backgroundColorRgb: '0, 0, 0',
1387
+ textColor: '#ffffff',
1388
+ textColorRgb: '255, 255, 255',
1389
+ backgroundColorStep: {
1390
+ 50: '#0d0d0d',
1391
+ 100: '#1a1a1a',
1392
+ 150: '#262626',
1393
+ 200: '#333333',
1394
+ 250: '#404040',
1395
+ 300: '#4d4d4d',
1396
+ 350: '#595959',
1397
+ 400: '#666666',
1398
+ 450: '#737373',
1399
+ 500: '#898989',
1400
+ 550: '#8c8c8c',
1401
+ 600: '#999999',
1402
+ 650: '#a6a6a6',
1403
+ 700: '#b3b3b3',
1404
+ 750: '#bfbfbf',
1405
+ 800: '#cccccc',
1406
+ 850: '#d9d9d9',
1407
+ 900: '#e6e6e6',
1408
+ 950: '#f2f2f2',
1409
+ },
1410
+ textColorStep: {
1411
+ 50: '#f2f2f2',
1412
+ 100: '#e6e6e6',
1413
+ 150: '#d9d9d9',
1414
+ 200: '#cccccc',
1415
+ 250: '#bfbfbf',
1416
+ 300: '#b3b3b3',
1417
+ 350: '#a6a6a6',
1418
+ 400: '#999999',
1419
+ 450: '#8c8c8c',
1420
+ 500: '#808080',
1421
+ 550: '#737373',
1422
+ 600: '#666666',
1423
+ 650: '#595959',
1424
+ 700: '#4d4d4d',
1425
+ 750: '#404040',
1426
+ 800: '#333333',
1427
+ 850: '#262626',
1428
+ 900: '#1a1a1a',
1429
+ 950: '#0d0d0d',
1430
+ },
1431
+ components: {
1432
+ IonCard: {
1433
+ background: '#1c1c1d',
1434
+ },
1435
+ IonItem: {
1436
+ background: '#000000',
1437
+ },
1438
+ },
1439
+ };
1440
+
1441
+ const colors$2 = {
1442
+ primary: '#7cabff',
1443
+ secondary: '#62bdff',
1444
+ tertiary: '#b6b9f9',
1445
+ success: '#4ada71',
1446
+ warning: '#ffce31',
1447
+ danger: '#fc9aa2',
1448
+ light: '#222428',
1449
+ medium: '#a8aab3',
1450
+ dark: '#f4f5f8',
1451
+ };
1452
+ const highContrastDarkTheme = {
1453
+ enabled: 'never',
1454
+ color: {
1455
+ primary: {
1456
+ bold: {
1457
+ base: colors$2.primary,
1458
+ contrast: '#000',
1459
+ foreground: colors$2.primary,
1460
+ shade: mix(colors$2.primary, '#000', '12%'),
1461
+ tint: mix(colors$2.primary, '#fff', '10%'),
1462
+ },
1463
+ subtle: {
1464
+ base: mix('#fff', colors$2.primary, '8%'),
1465
+ contrast: colors$2.primary,
1466
+ foreground: mix(colors$2.primary, '#000', '12%'),
1467
+ shade: mix('#fff', colors$2.primary, '12%'),
1468
+ tint: mix('#fff', colors$2.primary, '4%'),
1469
+ },
1470
+ },
1471
+ secondary: {
1472
+ bold: {
1473
+ base: colors$2.secondary,
1474
+ contrast: '#000',
1475
+ foreground: colors$2.secondary,
1476
+ shade: mix(colors$2.secondary, '#000', '12%'),
1477
+ tint: mix(colors$2.secondary, '#fff', '10%'),
1478
+ },
1479
+ subtle: {
1480
+ base: mix('#fff', colors$2.secondary, '8%'),
1481
+ contrast: colors$2.secondary,
1482
+ foreground: mix(colors$2.secondary, '#000', '12%'),
1483
+ shade: mix('#fff', colors$2.secondary, '12%'),
1484
+ tint: mix('#fff', colors$2.secondary, '4%'),
1485
+ },
1486
+ },
1487
+ tertiary: {
1488
+ bold: {
1489
+ base: colors$2.tertiary,
1490
+ contrast: '#000',
1491
+ foreground: colors$2.tertiary,
1492
+ shade: mix(colors$2.tertiary, '#000', '12%'),
1493
+ tint: mix(colors$2.tertiary, '#fff', '10%'),
1494
+ },
1495
+ subtle: {
1496
+ base: mix('#fff', colors$2.tertiary, '8%'),
1497
+ contrast: colors$2.tertiary,
1498
+ foreground: mix(colors$2.tertiary, '#000', '12%'),
1499
+ shade: mix('#fff', colors$2.tertiary, '12%'),
1500
+ tint: mix('#fff', colors$2.tertiary, '4%'),
1501
+ },
1502
+ },
1503
+ success: {
1504
+ bold: {
1505
+ base: colors$2.success,
1506
+ contrast: '#000',
1507
+ foreground: colors$2.success,
1508
+ shade: mix(colors$2.success, '#000', '12%'),
1509
+ tint: mix(colors$2.success, '#fff', '10%'),
1510
+ },
1511
+ subtle: {
1512
+ base: mix('#fff', colors$2.success, '8%'),
1513
+ contrast: colors$2.success,
1514
+ foreground: mix(colors$2.success, '#000', '12%'),
1515
+ shade: mix('#fff', colors$2.success, '12%'),
1516
+ tint: mix('#fff', colors$2.success, '4%'),
1517
+ },
1518
+ },
1519
+ warning: {
1520
+ bold: {
1521
+ base: colors$2.warning,
1522
+ contrast: '#000',
1523
+ foreground: colors$2.warning,
1524
+ shade: mix(colors$2.warning, '#000', '12%'),
1525
+ tint: mix(colors$2.warning, '#fff', '10%'),
1526
+ },
1527
+ subtle: {
1528
+ base: mix('#fff', colors$2.warning, '8%'),
1529
+ contrast: colors$2.warning,
1530
+ foreground: mix(colors$2.warning, '#000', '12%'),
1531
+ shade: mix('#fff', colors$2.warning, '12%'),
1532
+ tint: mix('#fff', colors$2.warning, '4%'),
1533
+ },
1534
+ },
1535
+ danger: {
1536
+ bold: {
1537
+ base: colors$2.danger,
1538
+ contrast: '#000',
1539
+ foreground: colors$2.danger,
1540
+ shade: mix(colors$2.danger, '#000', '12%'),
1541
+ tint: mix(colors$2.danger, '#fff', '10%'),
1542
+ },
1543
+ subtle: {
1544
+ base: mix('#fff', colors$2.danger, '8%'),
1545
+ contrast: colors$2.danger,
1546
+ foreground: mix(colors$2.danger, '#000', '12%'),
1547
+ shade: mix('#fff', colors$2.danger, '12%'),
1548
+ tint: mix('#fff', colors$2.danger, '4%'),
1549
+ },
1550
+ },
1551
+ light: {
1552
+ bold: {
1553
+ base: colors$2.light,
1554
+ contrast: '#fff',
1555
+ foreground: colors$2.light,
1556
+ shade: mix(colors$2.light, '#000', '12%'),
1557
+ tint: mix(colors$2.light, '#fff', '10%'),
1558
+ },
1559
+ subtle: {
1560
+ base: mix('#fff', colors$2.light, '8%'),
1561
+ contrast: colors$2.light,
1562
+ foreground: mix(colors$2.light, '#000', '12%'),
1563
+ shade: mix('#fff', colors$2.light, '12%'),
1564
+ tint: mix('#fff', colors$2.light, '4%'),
1565
+ },
1566
+ },
1567
+ medium: {
1568
+ bold: {
1569
+ base: colors$2.medium,
1570
+ contrast: '#000',
1571
+ foreground: colors$2.medium,
1572
+ shade: mix(colors$2.medium, '#000', '12%'),
1573
+ tint: mix(colors$2.medium, '#fff', '10%'),
1574
+ },
1575
+ subtle: {
1576
+ base: mix('#fff', colors$2.medium, '8%'),
1577
+ contrast: colors$2.medium,
1578
+ foreground: mix(colors$2.medium, '#000', '12%'),
1579
+ shade: mix('#fff', colors$2.medium, '12%'),
1580
+ tint: mix('#fff', colors$2.medium, '4%'),
1581
+ },
1582
+ },
1583
+ dark: {
1584
+ bold: {
1585
+ base: colors$2.dark,
1586
+ contrast: '#000',
1587
+ foreground: colors$2.dark,
1588
+ shade: mix(colors$2.dark, '#000', '12%'),
1589
+ tint: mix(colors$2.dark, '#fff', '10%'),
1590
+ },
1591
+ subtle: {
1592
+ base: mix('#fff', colors$2.dark, '8%'),
1593
+ contrast: colors$2.dark,
1594
+ foreground: mix(colors$2.dark, '#000', '12%'),
1595
+ shade: mix('#fff', colors$2.dark, '12%'),
1596
+ tint: mix('#fff', colors$2.dark, '4%'),
1597
+ },
1598
+ },
1599
+ },
1600
+ backgroundColor: '#000000',
1601
+ backgroundColorRgb: '0, 0, 0',
1602
+ textColor: '#ffffff',
1603
+ textColorRgb: '255, 255, 255',
1604
+ backgroundColorStep: {
1605
+ 50: '#0d0d0d',
1606
+ 100: '#1a1a1a',
1607
+ 150: '#262626',
1608
+ 200: '#333333',
1609
+ 250: '#404040',
1610
+ 300: '#4d4d4d',
1611
+ 350: '#595959',
1612
+ 400: '#666666',
1613
+ 450: '#737373',
1614
+ 500: '#808080',
1615
+ 550: '#8c8c8c',
1616
+ 600: '#999999',
1617
+ 650: '#a6a6a6',
1618
+ 700: '#b3b3b3',
1619
+ 750: '#bfbfbf',
1620
+ 800: '#cccccc',
1621
+ 850: '#d9d9d9',
1622
+ 900: '#e6e6e6',
1623
+ 950: '#f2f2f2',
1624
+ },
1625
+ textColorStep: {
1626
+ 50: '#f9f9f9',
1627
+ 100: '#f3f3f3',
1628
+ 150: '#ededed',
1629
+ 200: '#e7e7e7',
1630
+ 250: '#e1e1e1',
1631
+ 300: '#dbdbdb',
1632
+ 350: '#d5d5d5',
1633
+ 400: '#cfcfcf',
1634
+ 450: '#c9c9c9',
1635
+ 500: '#c4c4c4',
1636
+ 550: '#bebebe',
1637
+ 600: '#b8b8b8',
1638
+ 650: '#b2b2b2',
1639
+ 700: '#acacac',
1640
+ 750: '#a6a6a6',
1641
+ 800: '#a0a0a0',
1642
+ 850: '#9a9a9a',
1643
+ 900: '#949494',
1644
+ 950: '#8e8e8e',
1645
+ },
1646
+ };
1647
+
1648
+ const colors$1 = {
1649
+ primary: '#003fae',
1650
+ secondary: '#01487b',
1651
+ tertiary: '#3400e6',
1652
+ success: '#004314',
1653
+ warning: '#5f4100',
1654
+ danger: '#9c000c',
1655
+ light: '#f4f5f8',
1656
+ medium: '#444446',
1657
+ dark: '#222428',
1658
+ };
1659
+ const highContrastTheme = {
1660
+ enabled: 'never',
1661
+ color: {
1662
+ primary: {
1663
+ bold: {
1664
+ base: colors$1.primary,
1665
+ contrast: '#fff',
1666
+ foreground: colors$1.primary,
1667
+ shade: mix(colors$1.primary, '#000', '12%'),
1668
+ tint: mix(colors$1.primary, '#fff', '10%'),
1669
+ },
1670
+ subtle: {
1671
+ base: mix('#fff', colors$1.primary, '8%'),
1672
+ contrast: colors$1.primary,
1673
+ foreground: mix(colors$1.primary, '#000', '12%'),
1674
+ shade: mix('#fff', colors$1.primary, '12%'),
1675
+ tint: mix('#fff', colors$1.primary, '4%'),
1676
+ },
1677
+ },
1678
+ secondary: {
1679
+ bold: {
1680
+ base: colors$1.secondary,
1681
+ contrast: '#fff',
1682
+ foreground: colors$1.secondary,
1683
+ shade: mix(colors$1.secondary, '#000', '12%'),
1684
+ tint: mix(colors$1.secondary, '#fff', '10%'),
1685
+ },
1686
+ subtle: {
1687
+ base: mix('#fff', colors$1.secondary, '8%'),
1688
+ contrast: colors$1.secondary,
1689
+ foreground: mix(colors$1.secondary, '#000', '12%'),
1690
+ shade: mix('#fff', colors$1.secondary, '12%'),
1691
+ tint: mix('#fff', colors$1.secondary, '4%'),
1692
+ },
1693
+ },
1694
+ tertiary: {
1695
+ bold: {
1696
+ base: colors$1.tertiary,
1697
+ contrast: '#fff',
1698
+ foreground: colors$1.tertiary,
1699
+ shade: mix(colors$1.tertiary, '#000', '12%'),
1700
+ tint: mix(colors$1.tertiary, '#fff', '10%'),
1701
+ },
1702
+ subtle: {
1703
+ base: mix('#fff', colors$1.tertiary, '8%'),
1704
+ contrast: colors$1.tertiary,
1705
+ foreground: mix(colors$1.tertiary, '#000', '12%'),
1706
+ shade: mix('#fff', colors$1.tertiary, '12%'),
1707
+ tint: mix('#fff', colors$1.tertiary, '4%'),
1708
+ },
1709
+ },
1710
+ success: {
1711
+ bold: {
1712
+ base: colors$1.success,
1713
+ contrast: '#fff',
1714
+ foreground: colors$1.success,
1715
+ shade: mix(colors$1.success, '#000', '12%'),
1716
+ tint: mix(colors$1.success, '#fff', '10%'),
1717
+ },
1718
+ subtle: {
1719
+ base: mix('#fff', colors$1.success, '8%'),
1720
+ contrast: colors$1.success,
1721
+ foreground: mix(colors$1.success, '#000', '12%'),
1722
+ shade: mix('#fff', colors$1.success, '12%'),
1723
+ tint: mix('#fff', colors$1.success, '4%'),
1724
+ },
1725
+ },
1726
+ warning: {
1727
+ bold: {
1728
+ base: colors$1.warning,
1729
+ contrast: '#fff',
1730
+ foreground: colors$1.warning,
1731
+ shade: mix(colors$1.warning, '#000', '12%'),
1732
+ tint: mix(colors$1.warning, '#fff', '10%'),
1733
+ },
1734
+ subtle: {
1735
+ base: mix('#fff', colors$1.warning, '8%'),
1736
+ contrast: colors$1.warning,
1737
+ foreground: mix(colors$1.warning, '#000', '12%'),
1738
+ shade: mix('#fff', colors$1.warning, '12%'),
1739
+ tint: mix('#fff', colors$1.warning, '4%'),
1740
+ },
1741
+ },
1742
+ danger: {
1743
+ bold: {
1744
+ base: colors$1.danger,
1745
+ contrast: '#fff',
1746
+ foreground: colors$1.danger,
1747
+ shade: mix(colors$1.danger, '#000', '12%'),
1748
+ tint: mix(colors$1.danger, '#fff', '10%'),
1749
+ },
1750
+ subtle: {
1751
+ base: mix('#fff', colors$1.danger, '8%'),
1752
+ contrast: colors$1.danger,
1753
+ foreground: mix(colors$1.danger, '#000', '12%'),
1754
+ shade: mix('#fff', colors$1.danger, '12%'),
1755
+ tint: mix('#fff', colors$1.danger, '4%'),
1756
+ },
1757
+ },
1758
+ light: {
1759
+ bold: {
1760
+ base: colors$1.light,
1761
+ contrast: '#000',
1762
+ foreground: colors$1.light,
1763
+ shade: mix(colors$1.light, '#000', '12%'),
1764
+ tint: mix(colors$1.light, '#fff', '10%'),
1765
+ },
1766
+ subtle: {
1767
+ base: mix('#fff', colors$1.light, '8%'),
1768
+ contrast: colors$1.light,
1769
+ foreground: mix(colors$1.light, '#000', '12%'),
1770
+ shade: mix('#fff', colors$1.light, '12%'),
1771
+ tint: mix('#fff', colors$1.light, '4%'),
1772
+ },
1773
+ },
1774
+ medium: {
1775
+ bold: {
1776
+ base: colors$1.medium,
1777
+ contrast: '#fff',
1778
+ foreground: colors$1.medium,
1779
+ shade: mix(colors$1.medium, '#000', '12%'),
1780
+ tint: mix(colors$1.medium, '#fff', '10%'),
1781
+ },
1782
+ subtle: {
1783
+ base: mix('#fff', colors$1.medium, '8%'),
1784
+ contrast: colors$1.medium,
1785
+ foreground: mix(colors$1.medium, '#000', '12%'),
1786
+ shade: mix('#fff', colors$1.medium, '12%'),
1787
+ tint: mix('#fff', colors$1.medium, '4%'),
1788
+ },
1789
+ },
1790
+ dark: {
1791
+ bold: {
1792
+ base: colors$1.dark,
1793
+ contrast: '#fff',
1794
+ foreground: colors$1.dark,
1795
+ shade: mix(colors$1.dark, '#000', '12%'),
1796
+ tint: mix(colors$1.dark, '#fff', '10%'),
1797
+ },
1798
+ subtle: {
1799
+ base: mix('#fff', colors$1.dark, '8%'),
1800
+ contrast: colors$1.dark,
1801
+ foreground: mix(colors$1.dark, '#000', '12%'),
1802
+ shade: mix('#fff', colors$1.dark, '12%'),
1803
+ tint: mix('#fff', colors$1.dark, '4%'),
1804
+ },
1805
+ },
1806
+ },
1807
+ backgroundColor: '#ffffff',
1808
+ backgroundColorRgb: '255, 255, 255',
1809
+ textColor: '#000000',
1810
+ textColorRgb: '0, 0, 0',
1811
+ textColorStep: generateColorSteps('#888888', '#000000'),
1812
+ };
1813
+
1814
+ const colors = {
1815
+ primary: '#0054e9',
1816
+ secondary: '#0163aa',
1817
+ tertiary: '#6030ff',
1818
+ success: '#2dd55b',
1819
+ warning: '#ffc409',
1820
+ danger: '#c5000f',
1821
+ light: '#f4f5f8',
1822
+ medium: '#636469',
1823
+ dark: '#222428',
1824
+ };
1825
+ const lightTheme = {
1826
+ color: {
1827
+ primary: {
1828
+ bold: {
1829
+ base: colors.primary,
1830
+ contrast: '#fff',
1831
+ foreground: mix(colors.primary, '#000', '12%'),
1832
+ shade: mix(colors.primary, '#000', '12%'),
1833
+ tint: mix(colors.primary, '#fff', '10%'),
1834
+ },
1835
+ subtle: {
1836
+ base: mix('#fff', colors.primary, '8%'),
1837
+ contrast: colors.primary,
1838
+ foreground: mix(colors.primary, '#000', '12%'),
1839
+ shade: mix('#fff', colors.primary, '12%'),
1840
+ tint: mix('#fff', colors.primary, '4%'),
1841
+ },
1842
+ },
1843
+ secondary: {
1844
+ bold: {
1845
+ base: colors.secondary,
1846
+ contrast: '#fff',
1847
+ foreground: mix(colors.secondary, '#000', '12%'),
1848
+ shade: mix(colors.secondary, '#000', '12%'),
1849
+ tint: mix(colors.secondary, '#fff', '10%'),
1850
+ },
1851
+ subtle: {
1852
+ base: mix('#fff', colors.secondary, '8%'),
1853
+ contrast: colors.secondary,
1854
+ foreground: mix(colors.secondary, '#000', '12%'),
1855
+ shade: mix('#fff', colors.secondary, '12%'),
1856
+ tint: mix('#fff', colors.secondary, '4%'),
1857
+ },
1858
+ },
1859
+ tertiary: {
1860
+ bold: {
1861
+ base: colors.tertiary,
1862
+ contrast: '#fff',
1863
+ foreground: mix(colors.tertiary, '#000', '12%'),
1864
+ shade: mix(colors.tertiary, '#000', '12%'),
1865
+ tint: mix(colors.tertiary, '#fff', '10%'),
1866
+ },
1867
+ subtle: {
1868
+ base: mix('#fff', colors.tertiary, '8%'),
1869
+ contrast: colors.tertiary,
1870
+ foreground: mix(colors.tertiary, '#000', '12%'),
1871
+ shade: mix('#fff', colors.tertiary, '12%'),
1872
+ tint: mix('#fff', colors.tertiary, '4%'),
1873
+ },
1874
+ },
1875
+ success: {
1876
+ bold: {
1877
+ base: colors.success,
1878
+ contrast: '#000',
1879
+ foreground: mix(colors.success, '#000', '12%'),
1880
+ shade: mix(colors.success, '#000', '12%'),
1881
+ tint: mix(colors.success, '#fff', '10%'),
1882
+ },
1883
+ subtle: {
1884
+ base: mix('#fff', colors.success, '8%'),
1885
+ contrast: colors.success,
1886
+ foreground: mix(colors.success, '#000', '12%'),
1887
+ shade: mix('#fff', colors.success, '12%'),
1888
+ tint: mix('#fff', colors.success, '4%'),
1889
+ },
1890
+ },
1891
+ warning: {
1892
+ bold: {
1893
+ base: colors.warning,
1894
+ contrast: '#000',
1895
+ foreground: mix(colors.warning, '#000', '12%'),
1896
+ shade: mix(colors.warning, '#000', '12%'),
1897
+ tint: mix(colors.warning, '#fff', '10%'),
1898
+ },
1899
+ subtle: {
1900
+ base: mix('#fff', colors.warning, '8%'),
1901
+ contrast: colors.warning,
1902
+ foreground: mix(colors.warning, '#000', '12%'),
1903
+ shade: mix('#fff', colors.warning, '12%'),
1904
+ tint: mix('#fff', colors.warning, '4%'),
1905
+ },
1906
+ },
1907
+ danger: {
1908
+ bold: {
1909
+ base: colors.danger,
1910
+ contrast: '#fff',
1911
+ foreground: mix(colors.danger, '#000', '12%'),
1912
+ shade: mix(colors.danger, '#000', '12%'),
1913
+ tint: mix(colors.danger, '#fff', '10%'),
1914
+ },
1915
+ subtle: {
1916
+ base: mix('#fff', colors.danger, '8%'),
1917
+ contrast: colors.danger,
1918
+ foreground: mix(colors.danger, '#000', '12%'),
1919
+ shade: mix('#fff', colors.danger, '12%'),
1920
+ tint: mix('#fff', colors.danger, '4%'),
1921
+ },
1922
+ },
1923
+ light: {
1924
+ bold: {
1925
+ base: colors.light,
1926
+ contrast: '#000',
1927
+ foreground: mix(colors.light, '#000', '12%'),
1928
+ shade: mix(colors.light, '#000', '12%'),
1929
+ tint: mix(colors.light, '#fff', '10%'),
1930
+ },
1931
+ subtle: {
1932
+ base: mix('#fff', colors.light, '8%'),
1933
+ contrast: colors.light,
1934
+ foreground: mix(colors.light, '#000', '12%'),
1935
+ shade: mix('#fff', colors.light, '12%'),
1936
+ tint: mix('#fff', colors.light, '4%'),
1937
+ },
1938
+ },
1939
+ medium: {
1940
+ bold: {
1941
+ base: colors.medium,
1942
+ contrast: '#fff',
1943
+ foreground: mix(colors.medium, '#000', '12%'),
1944
+ shade: mix(colors.medium, '#000', '12%'),
1945
+ tint: mix(colors.medium, '#fff', '10%'),
1946
+ },
1947
+ subtle: {
1948
+ base: mix('#fff', colors.medium, '8%'),
1949
+ contrast: colors.medium,
1950
+ foreground: mix(colors.medium, '#000', '12%'),
1951
+ shade: mix('#fff', colors.medium, '12%'),
1952
+ tint: mix('#fff', colors.medium, '4%'),
1953
+ },
1954
+ },
1955
+ dark: {
1956
+ bold: {
1957
+ base: colors.dark,
1958
+ contrast: '#fff',
1959
+ foreground: mix(colors.dark, '#000', '12%'),
1960
+ shade: mix(colors.dark, '#000', '12%'),
1961
+ tint: mix(colors.dark, '#fff', '10%'),
1962
+ },
1963
+ subtle: {
1964
+ base: mix('#fff', colors.dark, '8%'),
1965
+ contrast: colors.dark,
1966
+ foreground: mix(colors.dark, '#000', '12%'),
1967
+ shade: mix('#fff', colors.dark, '12%'),
1968
+ tint: mix('#fff', colors.dark, '4%'),
1969
+ },
1970
+ },
1971
+ },
1972
+ };
1973
+
124
1974
  /*
125
1975
  Stencil Client Platform v4.43.0 | MIT Licensed | https://stenciljs.com
126
1976
  */
@@ -3412,4 +5262,4 @@ function transformTag(tag) {
3412
5262
  return tag;
3413
5263
  }
3414
5264
 
3415
- export { Build as B, Fragment as F, H, LogLevel as L, readTask as a, bootstrapLazy as b, createEvent as c, Host as d, config as e, printIonWarning as f, getElement as g, h, forceUpdate as i, printIonError as j, getAssetPath as k, configFromSession as l, configFromURL as m, saveConfig as n, getMode as o, promiseResolve as p, setMode as q, registerInstance as r, setNonce as s, printRequiredElementError as t, writeTask as w };
5265
+ export { printRequiredElementError as $, clamp as A, hasLazyBuild as B, addEventListener as C, isSafeNumber as D, hasShadowDom as E, getAssetPath as F, shallowEqualStringMap as G, H, assert as I, removeEventListener as J, debounce as K, LogLevel as L, transitionEndAsync as M, highContrastDarkTheme as N, highContrastTheme as O, darkTheme as P, lightTheme as Q, configFromSession as R, configFromURL as S, saveConfig as T, getCustomTheme as U, applyGlobalTheme as V, applyComponentsTheme as W, getMode as X, setMode as Y, Build as Z, focusVisibleElement as _, createEvent as a, startFocusVisible as a0, isEndSide as a1, focusElements as a2, Fragment as a3, pointerCoord as a4, focusVisible as a5, bootstrapLazy as b, componentOnReady as c, readTask as d, raf as e, Host as f, getClassMap as g, h, getElement as i, config as j, printIonWarning as k, forceUpdate as l, inheritAriaAttributes as m, createColorClasses as n, openURL as o, promiseResolve as p, hostContext as q, registerInstance as r, setNonce as s, renderHiddenInput as t, debounceEvent as u, inheritAttributes as v, writeTask as w, waitForComponentReady as x, printIonError as y, getElementRoot as z };