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