@sparkle-learning/core 0.0.31 → 0.0.34
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/dist/cjs/PrivateRoute-482697a6.js +35 -0
- package/dist/cjs/{PrivateRoute-043bb7d3.js → auth.service-f878f6ab.js} +0 -30
- package/dist/cjs/dom-utils-b8befdd5.js +63 -0
- package/dist/cjs/header-mobile-collapse_2.cjs.entry.js +112 -0
- package/dist/cjs/{icons-b8a2231a.js → icons-80d477f6.js} +0 -0
- package/dist/cjs/index-07e8aa51.js +3071 -0
- package/dist/cjs/index.cjs.js +6 -5
- package/dist/cjs/injectHistory-77d41284.js +9 -0
- package/dist/cjs/ion-avatar.cjs.entry.js +25 -0
- package/dist/cjs/ion-button_3.cjs.entry.js +383 -0
- package/dist/cjs/ion-card_2.cjs.entry.js +93 -0
- package/dist/cjs/ion-checkbox_4.cjs.entry.js +370 -0
- package/dist/cjs/ion-col_3.cjs.entry.js +155 -0
- package/dist/cjs/ion-icon_2.cjs.entry.js +397 -0
- package/dist/cjs/ion-input_2.cjs.entry.js +316 -0
- package/dist/cjs/ion-label_2.cjs.entry.js +126 -0
- package/dist/cjs/ion-range.cjs.entry.js +445 -0
- package/dist/cjs/ion-spinner.cjs.entry.js +64 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/match-path-84c9f7ca.js +511 -0
- package/dist/cjs/sparkle-card_3.cjs.entry.js +91 -0
- package/dist/cjs/sparkle-code.cjs.entry.js +1 -1
- package/dist/cjs/sparkle-core.cjs.js +1 -1
- package/dist/cjs/sparkle-course-root.cjs.entry.js +145 -0
- package/dist/cjs/sparkle-dropdown.cjs.entry.js +61 -0
- package/dist/cjs/{header-mobile-collapse_61.cjs.entry.js → sparkle-export-lessons_6.cjs.entry.js} +8863 -17664
- package/dist/cjs/sparkle-facilitator-header_19.cjs.entry.js +2129 -0
- package/dist/cjs/sparkle-feedback.cjs.entry.js +2 -1
- package/dist/cjs/sparkle-goal-progress.cjs.entry.js +19 -0
- package/dist/cjs/sparkle-gww-item.cjs.entry.js +74 -0
- package/dist/cjs/sparkle-intro.cjs.entry.js +26 -0
- package/dist/cjs/sparkle-menu-collapsible.cjs.entry.js +1 -1
- package/dist/cjs/sparkle-menu-toggle_3.cjs.entry.js +236 -0
- package/dist/cjs/sparkle-validation-error.cjs.entry.js +21 -0
- package/dist/cjs/stencil-route-link.cjs.entry.js +77 -0
- package/dist/cjs/stencil-router-redirect.cjs.entry.js +32 -0
- package/dist/cjs/student.service-7af424fe.js +61 -0
- package/dist/cjs/user.store-3d29139d.js +21 -0
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/layout/page/page.js +0 -2
- package/dist/collection/components/sparkle-intro/sparkle-intro.css +15 -0
- package/dist/collection/components/sparkle-intro/sparkle-intro.js +35 -0
- package/dist/collection/models/course.model.js +6 -0
- package/dist/esm/PrivateRoute-f59ba6b5.js +33 -0
- package/dist/esm/{animation-b306f6c2.js → animation-7b083379.js} +1 -1
- package/dist/esm/{PrivateRoute-b9937c45.js → auth.service-7ab0ac58.js} +3 -32
- package/dist/esm/{auth.store-3ed2389e.js → auth.store-98fad96d.js} +2 -2
- package/dist/esm/dom-utils-8e73e88b.js +55 -0
- package/dist/esm/{facilitator.service-ec0a9739.js → facilitator.service-1524bf89.js} +1 -1
- package/dist/esm/{feed.service-33b83cb7.js → feed.service-4900fc62.js} +2 -2
- package/dist/esm/{framework-delegate-3bc58c27.js → framework-delegate-518bd233.js} +1 -1
- package/dist/esm/header-mobile-collapse_2.entry.js +107 -0
- package/dist/esm/{helpers-39367fe1.js → helpers-9d0930de.js} +1 -1
- package/dist/esm/{icons-5debfbaf.js → icons-05b6ce86.js} +1 -1
- package/dist/esm/{index-c26d8655.js → index-8de9446b.js} +3 -3
- package/dist/esm/index-c92f99d4.js +3067 -0
- package/dist/esm/{index-dc61f152.js → index-ea26196a.js} +1 -1
- package/dist/esm/{index-9594837e.js → index-fa5e93c5.js} +2 -2
- package/dist/esm/{index.es-97dd8174.js → index.es-89cff481.js} +3 -3
- package/dist/esm/index.js +5 -4
- package/dist/esm/injectHistory-52d0c7eb.js +7 -0
- package/dist/esm/{input-shims-cc98ea92.js → input-shims-7f04e044.js} +1 -1
- package/dist/esm/ion-accordion.entry.js +2 -2
- package/dist/esm/ion-action-sheet_4.entry.js +5 -5
- package/dist/esm/ion-app.entry.js +3 -3
- package/dist/esm/ion-avatar.entry.js +21 -0
- package/dist/esm/ion-back-button.entry.js +2 -2
- package/dist/esm/ion-breadcrumb.entry.js +2 -2
- package/dist/esm/ion-button_3.entry.js +377 -0
- package/dist/esm/ion-card_2.entry.js +88 -0
- package/dist/esm/ion-checkbox_4.entry.js +363 -0
- package/dist/esm/ion-col_3.entry.js +149 -0
- package/dist/esm/ion-content_2.entry.js +1 -1
- package/dist/esm/ion-datetime.entry.js +2 -2
- package/dist/esm/ion-fab-button.entry.js +1 -1
- package/dist/esm/ion-footer.entry.js +1 -1
- package/dist/esm/ion-icon_2.entry.js +392 -0
- package/dist/esm/ion-img.entry.js +1 -1
- package/dist/esm/ion-infinite-scroll.entry.js +1 -1
- package/dist/esm/ion-input_2.entry.js +311 -0
- package/dist/esm/ion-item-options.entry.js +1 -1
- package/dist/esm/ion-item-sliding.entry.js +1 -1
- package/dist/esm/ion-label_2.entry.js +121 -0
- package/dist/esm/ion-loading.entry.js +3 -3
- package/dist/esm/ion-menu-button.entry.js +5 -5
- package/dist/esm/ion-menu-toggle.entry.js +4 -4
- package/dist/esm/ion-menu.entry.js +4 -4
- package/dist/esm/ion-modal.entry.js +5 -5
- package/dist/esm/ion-nav.entry.js +4 -4
- package/dist/esm/ion-picker-column-internal_2.entry.js +1 -1
- package/dist/esm/ion-picker-column.entry.js +1 -1
- package/dist/esm/ion-picker.entry.js +3 -3
- package/dist/esm/ion-progress-bar.entry.js +1 -1
- package/dist/esm/ion-range.entry.js +441 -0
- package/dist/esm/ion-refresher-content.entry.js +1 -1
- package/dist/esm/ion-refresher.entry.js +2 -2
- package/dist/esm/ion-reorder-group.entry.js +1 -1
- package/dist/esm/ion-reorder.entry.js +1 -1
- package/dist/esm/ion-router-outlet.entry.js +4 -4
- package/dist/esm/ion-router.entry.js +1 -1
- package/dist/esm/ion-searchbar.entry.js +2 -2
- package/dist/esm/ion-segment-button.entry.js +1 -1
- package/dist/esm/ion-segment.entry.js +1 -1
- package/dist/esm/ion-select_2.entry.js +2 -2
- package/dist/esm/ion-slides.entry.js +1 -1
- package/dist/esm/ion-spinner.entry.js +60 -0
- package/dist/esm/ion-tab.entry.js +2 -2
- package/dist/esm/ion-textarea.entry.js +1 -1
- package/dist/esm/ion-toast.entry.js +3 -3
- package/dist/esm/ion-toggle.entry.js +1 -1
- package/dist/esm/ion-virtual-scroll.entry.js +1 -1
- package/dist/esm/{ios.transition-b4ca8a33.js → ios.transition-db4f4ca6.js} +3 -3
- package/dist/esm/loader.js +1 -1
- package/dist/esm/match-path-36fdf5c7.js +499 -0
- package/dist/esm/{md.transition-ca5e0322.js → md.transition-8294b503.js} +3 -3
- package/dist/esm/{menu-toggle-util-7fa22c2f.js → menu-toggle-util-06adade3.js} +1 -1
- package/dist/esm/{overlays-34cfa9e0.js → overlays-5c777f10.js} +2 -2
- package/dist/esm/{purify-ffce2b4c.js → purify-eb68cf1d.js} +1 -1
- package/dist/esm/sparkle-animation-player.entry.js +1 -1
- package/dist/esm/sparkle-card_3.entry.js +85 -0
- package/dist/esm/sparkle-code.entry.js +1 -1
- package/dist/esm/sparkle-core.js +1 -1
- package/dist/esm/sparkle-course-root.entry.js +141 -0
- package/dist/esm/sparkle-dropdown.entry.js +57 -0
- package/dist/esm/{header-mobile-collapse_61.entry.js → sparkle-export-lessons_6.entry.js} +8858 -17604
- package/dist/esm/sparkle-facilitator-header_19.entry.js +2107 -0
- package/dist/esm/sparkle-facilitator-notes-form.entry.js +4 -4
- package/dist/esm/sparkle-feedback.entry.js +5 -4
- package/dist/esm/sparkle-goal-form.entry.js +5 -5
- package/dist/esm/sparkle-goal-progress.entry.js +15 -0
- package/dist/esm/sparkle-gww-item.entry.js +70 -0
- package/dist/esm/sparkle-intro.entry.js +22 -0
- package/dist/esm/sparkle-menu-collapsible.entry.js +1 -1
- package/dist/esm/sparkle-menu-toggle_3.entry.js +230 -0
- package/dist/esm/sparkle-validation-error.entry.js +17 -0
- package/dist/esm/{status-tap-6351a0cb.js → status-tap-e8c0c752.js} +1 -1
- package/dist/esm/stencil-route-link.entry.js +73 -0
- package/dist/esm/stencil-router-redirect.entry.js +28 -0
- package/dist/esm/{student.service-29b688ba.js → student.service-c2f44f3a.js} +3 -18
- package/dist/esm/{swipe-back-34251834.js → swipe-back-9a3b2cdd.js} +1 -1
- package/dist/esm/{tap-click-13f1fb0d.js → tap-click-cca25060.js} +1 -1
- package/dist/esm/user.store-e6ff7558.js +19 -0
- package/dist/esm/{util-6ef753e9.js → util-a831d09d.js} +1 -1
- package/dist/sparkle-core/index.esm.js +1 -1
- package/dist/sparkle-core/p-021fde3c.entry.js +1 -0
- package/dist/sparkle-core/p-034306e2.js +1 -0
- package/dist/sparkle-core/{p-6c90bde6.entry.js → p-034aa29f.entry.js} +1 -1
- package/dist/sparkle-core/p-06c0cce3.entry.js +1 -0
- package/dist/sparkle-core/{p-9cfdeb18.entry.js → p-08923b40.entry.js} +1 -1
- package/dist/sparkle-core/{p-513794b0.js → p-0ad99881.js} +1 -1
- package/dist/sparkle-core/{p-95004267.entry.js → p-11234d0f.entry.js} +1 -1
- package/dist/sparkle-core/{p-9a17f2ad.js → p-1133fcbd.js} +2 -2
- package/dist/sparkle-core/{p-faa912d7.entry.js → p-1551190a.entry.js} +1 -1
- package/dist/sparkle-core/p-1728ead7.js +1 -0
- package/dist/sparkle-core/{p-ae1f145d.entry.js → p-1e8c22e0.entry.js} +1 -1
- package/dist/sparkle-core/p-232cc3bc.js +1 -0
- package/dist/sparkle-core/{p-289a35ed.entry.js → p-28950db0.entry.js} +1 -1
- package/dist/sparkle-core/p-2af82cc1.entry.js +1 -0
- package/dist/sparkle-core/p-2bd4c60e.js +1 -0
- package/dist/sparkle-core/p-2f437793.entry.js +348 -0
- package/dist/sparkle-core/p-330ccc7c.entry.js +1 -0
- package/dist/sparkle-core/{p-838fa86d.entry.js → p-337f92b0.entry.js} +1 -1
- package/dist/sparkle-core/{p-857f3696.entry.js → p-35c5c110.entry.js} +1 -1
- package/dist/sparkle-core/p-3ff617d5.js +1 -0
- package/dist/sparkle-core/{p-7c38a70b.js → p-401feeb0.js} +1 -1
- package/dist/sparkle-core/{p-5a3d0e6b.js → p-4028676b.js} +1 -1
- package/dist/sparkle-core/{p-1cef8572.js → p-41124baa.js} +1 -1
- package/dist/sparkle-core/{p-0187adef.entry.js → p-41af3793.entry.js} +1 -1
- package/dist/sparkle-core/p-43a7391b.entry.js +1 -0
- package/dist/sparkle-core/{p-855ca600.js → p-44c23f72.js} +1 -1
- package/dist/sparkle-core/{p-c1376096.entry.js → p-4550e10f.entry.js} +1 -1
- package/dist/sparkle-core/{p-660e0742.js → p-4a72626a.js} +1 -1
- package/dist/sparkle-core/{p-e1cba44b.entry.js → p-4ba57978.entry.js} +1 -1
- package/dist/sparkle-core/{p-935e7cfc.js → p-4bd4dab2.js} +1 -1
- package/dist/sparkle-core/{p-d5b05ece.entry.js → p-4ef4b8bd.entry.js} +1 -1
- package/dist/sparkle-core/{p-55ae49e1.js → p-4f144efa.js} +1 -1
- package/dist/sparkle-core/{p-713590fc.js → p-52d4715a.js} +1 -1
- package/dist/sparkle-core/{p-bca0e465.entry.js → p-52f1d1ca.entry.js} +1 -1
- package/dist/sparkle-core/{p-7e61973d.entry.js → p-5a98d42e.entry.js} +1 -1
- package/dist/sparkle-core/{p-82e98d07.entry.js → p-5e4ec238.entry.js} +1 -1
- package/dist/sparkle-core/{p-0146afa0.entry.js → p-5ec7fd67.entry.js} +1 -1
- package/dist/sparkle-core/p-618f6f82.entry.js +1 -0
- package/dist/sparkle-core/p-65ca1fb2.entry.js +1 -0
- package/dist/sparkle-core/{p-a080e768.entry.js → p-663fafa9.entry.js} +1 -1
- package/dist/sparkle-core/p-67f71099.entry.js +4 -0
- package/dist/sparkle-core/{p-6e88764b.entry.js → p-6a16b9ef.entry.js} +2 -2
- package/dist/sparkle-core/p-6b6a8f0a.entry.js +1 -0
- package/dist/sparkle-core/p-6c5b5ea2.entry.js +1 -0
- package/dist/sparkle-core/{p-941eaa3a.entry.js → p-6ebf52fb.entry.js} +1 -1
- package/dist/sparkle-core/p-6f45db93.js +1 -0
- package/dist/sparkle-core/p-74106ca8.entry.js +1 -0
- package/dist/sparkle-core/{p-6fbe3ca3.entry.js → p-7568dcab.entry.js} +1 -1
- package/dist/sparkle-core/p-7703bae9.entry.js +1 -0
- package/dist/sparkle-core/p-77c23496.entry.js +1 -0
- package/dist/sparkle-core/p-79606a41.entry.js +1 -0
- package/dist/sparkle-core/p-7976e88c.entry.js +1 -0
- package/dist/sparkle-core/p-7c1f59ec.js +1 -0
- package/dist/sparkle-core/p-7de0a22b.entry.js +1 -0
- package/dist/sparkle-core/p-848fe770.entry.js +1 -0
- package/dist/sparkle-core/{p-cbbeed67.entry.js → p-85429b12.entry.js} +1 -1
- package/dist/sparkle-core/{p-64e72f8f.js → p-86d099f1.js} +2 -2
- package/dist/sparkle-core/{p-389500fd.js → p-87549bb7.js} +2 -2
- package/dist/sparkle-core/{p-1b78dea1.entry.js → p-8c470e28.entry.js} +1 -1
- package/dist/sparkle-core/{p-50aac721.entry.js → p-90466494.entry.js} +1 -1
- package/dist/sparkle-core/p-954c89c2.entry.js +1 -0
- package/dist/sparkle-core/{p-f4001fdf.js → p-95d01c4c.js} +1 -1
- package/dist/sparkle-core/{p-6ee40949.js → p-987c64eb.js} +1 -1
- package/dist/sparkle-core/{p-1af044f7.js → p-a7832a51.js} +1 -1
- package/dist/sparkle-core/p-a89dea80.entry.js +1 -0
- package/dist/sparkle-core/{p-6c6145cd.js → p-b17dd6df.js} +2 -2
- package/dist/sparkle-core/{p-5ff6416d.entry.js → p-b21d0d9f.entry.js} +1 -1
- package/dist/sparkle-core/p-b7dafaae.entry.js +1 -0
- package/dist/sparkle-core/{p-c3986a52.entry.js → p-bd062288.entry.js} +1 -1
- package/dist/sparkle-core/{p-c1279cc9.entry.js → p-beb401e3.entry.js} +1 -1
- package/dist/sparkle-core/p-bef34cfe.entry.js +1 -0
- package/dist/sparkle-core/{p-6bf07a28.js → p-c1c59771.js} +1 -1
- package/dist/sparkle-core/p-c4104929.entry.js +1 -0
- package/dist/sparkle-core/{p-173d5461.entry.js → p-c748f64e.entry.js} +1 -1
- package/dist/sparkle-core/{p-d4a435f8.entry.js → p-c753207f.entry.js} +1 -1
- package/dist/sparkle-core/{p-18e62133.entry.js → p-c8ae9e47.entry.js} +1 -1
- package/dist/sparkle-core/p-c8ed0575.js +1 -0
- package/dist/sparkle-core/{p-8fe2e51f.entry.js → p-c96b24bd.entry.js} +2 -2
- package/dist/sparkle-core/p-ce13171b.entry.js +1 -0
- package/dist/sparkle-core/{p-5c9aa1f9.entry.js → p-d00f550b.entry.js} +1 -1
- package/dist/sparkle-core/p-d394eed1.entry.js +1 -0
- package/dist/sparkle-core/p-d48e95c1.entry.js +1 -0
- package/dist/sparkle-core/p-d4b1a14a.entry.js +1 -0
- package/dist/sparkle-core/{p-b81e20fe.entry.js → p-d56efeac.entry.js} +1 -1
- package/dist/sparkle-core/{p-932bfb69.entry.js → p-d59a5984.entry.js} +1 -1
- package/dist/sparkle-core/p-d8aff730.entry.js +1 -0
- package/dist/sparkle-core/{p-5d2e54ee.entry.js → p-da8921d0.entry.js} +1 -1
- package/dist/sparkle-core/{p-a1cab0f3.js → p-e08059b6.js} +2 -2
- package/dist/sparkle-core/p-e1aee41e.entry.js +1 -0
- package/dist/sparkle-core/{p-5598650a.entry.js → p-ec4d22e3.entry.js} +1 -1
- package/dist/sparkle-core/{p-eb70a23c.entry.js → p-ed3eed72.entry.js} +1 -1
- package/dist/sparkle-core/{p-a7cc0052.entry.js → p-ee0717e1.entry.js} +1 -1
- package/dist/sparkle-core/p-ef2dace6.js +4 -0
- package/dist/sparkle-core/{p-2ee6a5f9.entry.js → p-f1106984.entry.js} +1 -1
- package/dist/sparkle-core/p-f61ca75c.entry.js +1 -0
- package/dist/sparkle-core/{p-e225581a.js → p-f6bafe1d.js} +1 -1
- package/dist/sparkle-core/{p-1df05176.js → p-ff4d6858.js} +1 -1
- package/dist/sparkle-core/sparkle-core.esm.js +1 -1
- package/dist/types/components/sparkle-intro/sparkle-intro.d.ts +7 -0
- package/dist/types/components.d.ts +13 -0
- package/dist/types/models/course.model.d.ts +1 -8
- package/package.json +2 -2
- package/dist/cjs/student.service-744c3155.js +0 -77
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/button/button.css +0 -49
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/cards/card/card.css +0 -208
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/cards/cards.css +0 -31
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/code/code.css +0 -245
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/dropdown/dropdown.css +0 -115
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/header/header-mobile-collapse/header-mobile-collapse.css +0 -255
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/header/header.css +0 -232
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/menu/collapsible/collapsible.css +0 -3
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/menu/menu-toggle/menu-toggle.css +0 -25
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/menu/menu.css +0 -71
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/nav/nav.css +0 -194
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/notfound-page/notfound-page.css +0 -4
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/overlay/overlay.css +0 -67
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/page-footer/page-footer.css +0 -18
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/pagination/pagination.css +0 -89
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/select/select.css +0 -52
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/sidebar/sidebar.css +0 -98
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/sparkle-lower-content-nav/sparkle-lower-content-nav.css +0 -8
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/table-of-contents/table-of-contents.css +0 -37
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/tabs/tabs.css +0 -64
- package/dist/sparkle-core/p-03189863.js +0 -1
- package/dist/sparkle-core/p-1339830f.entry.js +0 -1
- package/dist/sparkle-core/p-145e40f5.entry.js +0 -1
- package/dist/sparkle-core/p-547b70c6.entry.js +0 -1
- package/dist/sparkle-core/p-6bbabb80.entry.js +0 -1
- package/dist/sparkle-core/p-950effe7.entry.js +0 -1
- package/dist/sparkle-core/p-d8d3524a.js +0 -1
- package/dist/sparkle-core/p-df0070c5.entry.js +0 -352
- package/dist/sparkle-core/p-e0fced48.entry.js +0 -1
- package/dist/sparkle-core/p-e72d4450.js +0 -4
- package/dist/sparkle-core/p-fc933591.entry.js +0 -1
@@ -0,0 +1,397 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
4
|
+
|
5
|
+
const index = require('./index-bae2a754.js');
|
6
|
+
const ionicGlobal = require('./ionic-global-878073d1.js');
|
7
|
+
|
8
|
+
let CACHED_MAP;
|
9
|
+
const getIconMap = () => {
|
10
|
+
if (typeof window === 'undefined') {
|
11
|
+
return new Map();
|
12
|
+
}
|
13
|
+
else {
|
14
|
+
if (!CACHED_MAP) {
|
15
|
+
const win = window;
|
16
|
+
win.Ionicons = win.Ionicons || {};
|
17
|
+
CACHED_MAP = win.Ionicons.map = win.Ionicons.map || new Map();
|
18
|
+
}
|
19
|
+
return CACHED_MAP;
|
20
|
+
}
|
21
|
+
};
|
22
|
+
const getUrl = (i) => {
|
23
|
+
let url = getSrc(i.src);
|
24
|
+
if (url) {
|
25
|
+
return url;
|
26
|
+
}
|
27
|
+
url = getName(i.name, i.icon, i.mode, i.ios, i.md);
|
28
|
+
if (url) {
|
29
|
+
return getNamedUrl(url);
|
30
|
+
}
|
31
|
+
if (i.icon) {
|
32
|
+
url = getSrc(i.icon);
|
33
|
+
if (url) {
|
34
|
+
return url;
|
35
|
+
}
|
36
|
+
url = getSrc(i.icon[i.mode]);
|
37
|
+
if (url) {
|
38
|
+
return url;
|
39
|
+
}
|
40
|
+
}
|
41
|
+
return null;
|
42
|
+
};
|
43
|
+
const getNamedUrl = (iconName) => {
|
44
|
+
const url = getIconMap().get(iconName);
|
45
|
+
if (url) {
|
46
|
+
return url;
|
47
|
+
}
|
48
|
+
return index.getAssetPath(`svg/${iconName}.svg`);
|
49
|
+
};
|
50
|
+
const getName = (iconName, icon, mode, ios, md) => {
|
51
|
+
// default to "md" if somehow the mode wasn't set
|
52
|
+
mode = (mode && toLower(mode)) === 'ios' ? 'ios' : 'md';
|
53
|
+
// if an icon was passed in using the ios or md attributes
|
54
|
+
// set the iconName to whatever was passed in
|
55
|
+
if (ios && mode === 'ios') {
|
56
|
+
iconName = toLower(ios);
|
57
|
+
}
|
58
|
+
else if (md && mode === 'md') {
|
59
|
+
iconName = toLower(md);
|
60
|
+
}
|
61
|
+
else {
|
62
|
+
if (!iconName && icon && !isSrc(icon)) {
|
63
|
+
iconName = icon;
|
64
|
+
}
|
65
|
+
if (isStr(iconName)) {
|
66
|
+
iconName = toLower(iconName);
|
67
|
+
}
|
68
|
+
}
|
69
|
+
if (!isStr(iconName) || iconName.trim() === '') {
|
70
|
+
return null;
|
71
|
+
}
|
72
|
+
// only allow alpha characters and dash
|
73
|
+
const invalidChars = iconName.replace(/[a-z]|-|\d/gi, '');
|
74
|
+
if (invalidChars !== '') {
|
75
|
+
return null;
|
76
|
+
}
|
77
|
+
return iconName;
|
78
|
+
};
|
79
|
+
const getSrc = (src) => {
|
80
|
+
if (isStr(src)) {
|
81
|
+
src = src.trim();
|
82
|
+
if (isSrc(src)) {
|
83
|
+
return src;
|
84
|
+
}
|
85
|
+
}
|
86
|
+
return null;
|
87
|
+
};
|
88
|
+
const isSrc = (str) => str.length > 0 && /(\/|\.)/.test(str);
|
89
|
+
const isStr = (val) => typeof val === 'string';
|
90
|
+
const toLower = (val) => val.toLowerCase();
|
91
|
+
/**
|
92
|
+
* Elements inside of web components sometimes need to inherit global attributes
|
93
|
+
* set on the host. For example, the inner input in `ion-input` should inherit
|
94
|
+
* the `title` attribute that developers set directly on `ion-input`. This
|
95
|
+
* helper function should be called in componentWillLoad and assigned to a variable
|
96
|
+
* that is later used in the render function.
|
97
|
+
*
|
98
|
+
* This does not need to be reactive as changing attributes on the host element
|
99
|
+
* does not trigger a re-render.
|
100
|
+
*/
|
101
|
+
const inheritAttributes = (el, attributes = []) => {
|
102
|
+
const attributeObject = {};
|
103
|
+
attributes.forEach(attr => {
|
104
|
+
if (el.hasAttribute(attr)) {
|
105
|
+
const value = el.getAttribute(attr);
|
106
|
+
if (value !== null) {
|
107
|
+
attributeObject[attr] = el.getAttribute(attr);
|
108
|
+
}
|
109
|
+
el.removeAttribute(attr);
|
110
|
+
}
|
111
|
+
});
|
112
|
+
return attributeObject;
|
113
|
+
};
|
114
|
+
|
115
|
+
const validateContent = (svgContent) => {
|
116
|
+
const div = document.createElement('div');
|
117
|
+
div.innerHTML = svgContent;
|
118
|
+
// setup this way to ensure it works on our buddy IE
|
119
|
+
for (let i = div.childNodes.length - 1; i >= 0; i--) {
|
120
|
+
if (div.childNodes[i].nodeName.toLowerCase() !== 'svg') {
|
121
|
+
div.removeChild(div.childNodes[i]);
|
122
|
+
}
|
123
|
+
}
|
124
|
+
// must only have 1 root element
|
125
|
+
const svgElm = div.firstElementChild;
|
126
|
+
if (svgElm && svgElm.nodeName.toLowerCase() === 'svg') {
|
127
|
+
const svgClass = svgElm.getAttribute('class') || '';
|
128
|
+
svgElm.setAttribute('class', (svgClass + ' s-ion-icon').trim());
|
129
|
+
// root element must be an svg
|
130
|
+
// lets double check we've got valid elements
|
131
|
+
// do not allow scripts
|
132
|
+
if (isValid(svgElm)) {
|
133
|
+
return div.innerHTML;
|
134
|
+
}
|
135
|
+
}
|
136
|
+
return '';
|
137
|
+
};
|
138
|
+
const isValid = (elm) => {
|
139
|
+
if (elm.nodeType === 1) {
|
140
|
+
if (elm.nodeName.toLowerCase() === 'script') {
|
141
|
+
return false;
|
142
|
+
}
|
143
|
+
for (let i = 0; i < elm.attributes.length; i++) {
|
144
|
+
const val = elm.attributes[i].value;
|
145
|
+
if (isStr(val) && val.toLowerCase().indexOf('on') === 0) {
|
146
|
+
return false;
|
147
|
+
}
|
148
|
+
}
|
149
|
+
for (let i = 0; i < elm.childNodes.length; i++) {
|
150
|
+
if (!isValid(elm.childNodes[i])) {
|
151
|
+
return false;
|
152
|
+
}
|
153
|
+
}
|
154
|
+
}
|
155
|
+
return true;
|
156
|
+
};
|
157
|
+
|
158
|
+
const ioniconContent = new Map();
|
159
|
+
const requests = new Map();
|
160
|
+
const getSvgContent = (url, sanitize) => {
|
161
|
+
// see if we already have a request for this url
|
162
|
+
let req = requests.get(url);
|
163
|
+
if (!req) {
|
164
|
+
if (typeof fetch !== 'undefined' && typeof document !== 'undefined') {
|
165
|
+
// we don't already have a request
|
166
|
+
req = fetch(url).then((rsp) => {
|
167
|
+
if (rsp.ok) {
|
168
|
+
return rsp.text().then((svgContent) => {
|
169
|
+
if (svgContent && sanitize !== false) {
|
170
|
+
svgContent = validateContent(svgContent);
|
171
|
+
}
|
172
|
+
ioniconContent.set(url, svgContent || '');
|
173
|
+
});
|
174
|
+
}
|
175
|
+
ioniconContent.set(url, '');
|
176
|
+
});
|
177
|
+
// cache for the same requests
|
178
|
+
requests.set(url, req);
|
179
|
+
}
|
180
|
+
else {
|
181
|
+
// set to empty for ssr scenarios and resolve promise
|
182
|
+
ioniconContent.set(url, '');
|
183
|
+
return Promise.resolve();
|
184
|
+
}
|
185
|
+
}
|
186
|
+
return req;
|
187
|
+
};
|
188
|
+
|
189
|
+
const iconCss = ":host{display:inline-block;width:1em;height:1em;contain:strict;fill:currentColor;box-sizing:content-box !important}:host .ionicon{stroke:currentColor}.ionicon-fill-none{fill:none}.ionicon-stroke-width{stroke-width:32px;stroke-width:var(--ionicon-stroke-width, 32px)}.icon-inner,.ionicon,svg{display:block;height:100%;width:100%}:host(.flip-rtl) .icon-inner{transform:scaleX(-1)}:host(.icon-small){font-size:18px !important}:host(.icon-large){font-size:32px !important}:host(.ion-color){color:var(--ion-color-base) !important}:host(.ion-color-primary){--ion-color-base:var(--ion-color-primary, #3880ff)}:host(.ion-color-secondary){--ion-color-base:var(--ion-color-secondary, #0cd1e8)}:host(.ion-color-tertiary){--ion-color-base:var(--ion-color-tertiary, #f4a942)}:host(.ion-color-success){--ion-color-base:var(--ion-color-success, #10dc60)}:host(.ion-color-warning){--ion-color-base:var(--ion-color-warning, #ffce00)}:host(.ion-color-danger){--ion-color-base:var(--ion-color-danger, #f14141)}:host(.ion-color-light){--ion-color-base:var(--ion-color-light, #f4f5f8)}:host(.ion-color-medium){--ion-color-base:var(--ion-color-medium, #989aa2)}:host(.ion-color-dark){--ion-color-base:var(--ion-color-dark, #222428)}";
|
190
|
+
|
191
|
+
const Icon = class {
|
192
|
+
constructor(hostRef) {
|
193
|
+
index.registerInstance(this, hostRef);
|
194
|
+
this.iconName = null;
|
195
|
+
this.inheritedAttributes = {};
|
196
|
+
this.isVisible = false;
|
197
|
+
/**
|
198
|
+
* The mode determines which platform styles to use.
|
199
|
+
*/
|
200
|
+
this.mode = getIonMode();
|
201
|
+
/**
|
202
|
+
* If enabled, ion-icon will be loaded lazily when it's visible in the viewport.
|
203
|
+
* Default, `false`.
|
204
|
+
*/
|
205
|
+
this.lazy = false;
|
206
|
+
/**
|
207
|
+
* When set to `false`, SVG content that is HTTP fetched will not be checked
|
208
|
+
* if the response SVG content has any `<script>` elements, or any attributes
|
209
|
+
* that start with `on`, such as `onclick`.
|
210
|
+
* @default true
|
211
|
+
*/
|
212
|
+
this.sanitize = true;
|
213
|
+
this.hasAriaHidden = () => {
|
214
|
+
const { el } = this;
|
215
|
+
return el.hasAttribute('aria-hidden') && el.getAttribute('aria-hidden') === 'true';
|
216
|
+
};
|
217
|
+
}
|
218
|
+
componentWillLoad() {
|
219
|
+
this.inheritedAttributes = inheritAttributes(this.el, ['aria-label']);
|
220
|
+
}
|
221
|
+
connectedCallback() {
|
222
|
+
// purposely do not return the promise here because loading
|
223
|
+
// the svg file should not hold up loading the app
|
224
|
+
// only load the svg if it's visible
|
225
|
+
this.waitUntilVisible(this.el, '50px', () => {
|
226
|
+
this.isVisible = true;
|
227
|
+
this.loadIcon();
|
228
|
+
});
|
229
|
+
}
|
230
|
+
disconnectedCallback() {
|
231
|
+
if (this.io) {
|
232
|
+
this.io.disconnect();
|
233
|
+
this.io = undefined;
|
234
|
+
}
|
235
|
+
}
|
236
|
+
waitUntilVisible(el, rootMargin, cb) {
|
237
|
+
if (this.lazy && typeof window !== 'undefined' && window.IntersectionObserver) {
|
238
|
+
const io = (this.io = new window.IntersectionObserver((data) => {
|
239
|
+
if (data[0].isIntersecting) {
|
240
|
+
io.disconnect();
|
241
|
+
this.io = undefined;
|
242
|
+
cb();
|
243
|
+
}
|
244
|
+
}, { rootMargin }));
|
245
|
+
io.observe(el);
|
246
|
+
}
|
247
|
+
else {
|
248
|
+
// browser doesn't support IntersectionObserver
|
249
|
+
// so just fallback to always show it
|
250
|
+
cb();
|
251
|
+
}
|
252
|
+
}
|
253
|
+
loadIcon() {
|
254
|
+
if (this.isVisible) {
|
255
|
+
const url = getUrl(this);
|
256
|
+
if (url) {
|
257
|
+
if (ioniconContent.has(url)) {
|
258
|
+
// sync if it's already loaded
|
259
|
+
this.svgContent = ioniconContent.get(url);
|
260
|
+
}
|
261
|
+
else {
|
262
|
+
// async if it hasn't been loaded
|
263
|
+
getSvgContent(url, this.sanitize).then(() => (this.svgContent = ioniconContent.get(url)));
|
264
|
+
}
|
265
|
+
}
|
266
|
+
}
|
267
|
+
const label = this.iconName = getName(this.name, this.icon, this.mode, this.ios, this.md);
|
268
|
+
/**
|
269
|
+
* Come up with a default label
|
270
|
+
* in case user does not provide their own.
|
271
|
+
*/
|
272
|
+
if (label) {
|
273
|
+
this.ariaLabel = label.replace(/\-/g, ' ');
|
274
|
+
}
|
275
|
+
}
|
276
|
+
render() {
|
277
|
+
const { iconName, ariaLabel, inheritedAttributes } = this;
|
278
|
+
const mode = this.mode || 'md';
|
279
|
+
const flipRtl = this.flipRtl ||
|
280
|
+
(iconName &&
|
281
|
+
(iconName.indexOf('arrow') > -1 || iconName.indexOf('chevron') > -1) &&
|
282
|
+
this.flipRtl !== false);
|
283
|
+
/**
|
284
|
+
* Only set the aria-label if a) we have generated
|
285
|
+
* one for the icon and if aria-hidden is not set to "true".
|
286
|
+
* If developer wants to set their own aria-label, then
|
287
|
+
* inheritedAttributes down below will override whatever
|
288
|
+
* default label we have set.
|
289
|
+
*/
|
290
|
+
return (index.h(index.Host, Object.assign({ "aria-label": ariaLabel !== undefined && !this.hasAriaHidden() ? ariaLabel : null, role: "img", class: Object.assign(Object.assign({ [mode]: true }, createColorClasses(this.color)), { [`icon-${this.size}`]: !!this.size, 'flip-rtl': !!flipRtl && this.el.ownerDocument.dir === 'rtl' }) }, inheritedAttributes), this.svgContent ? (index.h("div", { class: "icon-inner", innerHTML: this.svgContent })) : (index.h("div", { class: "icon-inner" }))));
|
291
|
+
}
|
292
|
+
static get assetsDirs() { return ["svg"]; }
|
293
|
+
get el() { return index.getElement(this); }
|
294
|
+
static get watchers() { return {
|
295
|
+
"name": ["loadIcon"],
|
296
|
+
"src": ["loadIcon"],
|
297
|
+
"icon": ["loadIcon"]
|
298
|
+
}; }
|
299
|
+
};
|
300
|
+
const getIonMode = () => (typeof document !== 'undefined' && document.documentElement.getAttribute('mode')) || 'md';
|
301
|
+
const createColorClasses = (color) => {
|
302
|
+
return color
|
303
|
+
? {
|
304
|
+
'ion-color': true,
|
305
|
+
[`ion-color-${color}`]: true,
|
306
|
+
}
|
307
|
+
: null;
|
308
|
+
};
|
309
|
+
Icon.style = iconCss;
|
310
|
+
|
311
|
+
const rippleEffectCss = ":host{left:0;right:0;top:0;bottom:0;position:absolute;contain:strict;pointer-events:none}:host(.unbounded){contain:layout size style}.ripple-effect{border-radius:50%;position:absolute;background-color:currentColor;color:inherit;contain:strict;opacity:0;animation:225ms rippleAnimation forwards, 75ms fadeInAnimation forwards;will-change:transform, opacity;pointer-events:none}.fade-out{transform:translate(var(--translate-end)) scale(var(--final-scale, 1));animation:150ms fadeOutAnimation forwards}@keyframes rippleAnimation{from{animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transform:scale(1)}to{transform:translate(var(--translate-end)) scale(var(--final-scale, 1))}}@keyframes fadeInAnimation{from{animation-timing-function:linear;opacity:0}to{opacity:0.16}}@keyframes fadeOutAnimation{from{animation-timing-function:linear;opacity:0.16}to{opacity:0}}";
|
312
|
+
|
313
|
+
const RippleEffect = class {
|
314
|
+
constructor(hostRef) {
|
315
|
+
index.registerInstance(this, hostRef);
|
316
|
+
/**
|
317
|
+
* Sets the type of ripple-effect:
|
318
|
+
*
|
319
|
+
* - `bounded`: the ripple effect expands from the user's click position
|
320
|
+
* - `unbounded`: the ripple effect expands from the center of the button and overflows the container.
|
321
|
+
*
|
322
|
+
* NOTE: Surfaces for bounded ripples should have the overflow property set to hidden,
|
323
|
+
* while surfaces for unbounded ripples should have it set to visible.
|
324
|
+
*/
|
325
|
+
this.type = 'bounded';
|
326
|
+
}
|
327
|
+
/**
|
328
|
+
* Adds the ripple effect to the parent element.
|
329
|
+
*
|
330
|
+
* @param x The horizontal coordinate of where the ripple should start.
|
331
|
+
* @param y The vertical coordinate of where the ripple should start.
|
332
|
+
*/
|
333
|
+
async addRipple(x, y) {
|
334
|
+
return new Promise(resolve => {
|
335
|
+
index.readTask(() => {
|
336
|
+
const rect = this.el.getBoundingClientRect();
|
337
|
+
const width = rect.width;
|
338
|
+
const height = rect.height;
|
339
|
+
const hypotenuse = Math.sqrt(width * width + height * height);
|
340
|
+
const maxDim = Math.max(height, width);
|
341
|
+
const maxRadius = this.unbounded ? maxDim : hypotenuse + PADDING;
|
342
|
+
const initialSize = Math.floor(maxDim * INITIAL_ORIGIN_SCALE);
|
343
|
+
const finalScale = maxRadius / initialSize;
|
344
|
+
let posX = x - rect.left;
|
345
|
+
let posY = y - rect.top;
|
346
|
+
if (this.unbounded) {
|
347
|
+
posX = width * 0.5;
|
348
|
+
posY = height * 0.5;
|
349
|
+
}
|
350
|
+
const styleX = posX - initialSize * 0.5;
|
351
|
+
const styleY = posY - initialSize * 0.5;
|
352
|
+
const moveX = width * 0.5 - posX;
|
353
|
+
const moveY = height * 0.5 - posY;
|
354
|
+
index.writeTask(() => {
|
355
|
+
const div = document.createElement('div');
|
356
|
+
div.classList.add('ripple-effect');
|
357
|
+
const style = div.style;
|
358
|
+
style.top = styleY + 'px';
|
359
|
+
style.left = styleX + 'px';
|
360
|
+
style.width = style.height = initialSize + 'px';
|
361
|
+
style.setProperty('--final-scale', `${finalScale}`);
|
362
|
+
style.setProperty('--translate-end', `${moveX}px, ${moveY}px`);
|
363
|
+
const container = this.el.shadowRoot || this.el;
|
364
|
+
container.appendChild(div);
|
365
|
+
setTimeout(() => {
|
366
|
+
resolve(() => {
|
367
|
+
removeRipple(div);
|
368
|
+
});
|
369
|
+
}, 225 + 100);
|
370
|
+
});
|
371
|
+
});
|
372
|
+
});
|
373
|
+
}
|
374
|
+
get unbounded() {
|
375
|
+
return this.type === 'unbounded';
|
376
|
+
}
|
377
|
+
render() {
|
378
|
+
const mode = ionicGlobal.getIonMode(this);
|
379
|
+
return (index.h(index.Host, { role: "presentation", class: {
|
380
|
+
[mode]: true,
|
381
|
+
'unbounded': this.unbounded
|
382
|
+
} }));
|
383
|
+
}
|
384
|
+
get el() { return index.getElement(this); }
|
385
|
+
};
|
386
|
+
const removeRipple = (ripple) => {
|
387
|
+
ripple.classList.add('fade-out');
|
388
|
+
setTimeout(() => {
|
389
|
+
ripple.remove();
|
390
|
+
}, 200);
|
391
|
+
};
|
392
|
+
const PADDING = 10;
|
393
|
+
const INITIAL_ORIGIN_SCALE = 0.5;
|
394
|
+
RippleEffect.style = rippleEffectCss;
|
395
|
+
|
396
|
+
exports.ion_icon = Icon;
|
397
|
+
exports.ion_ripple_effect = RippleEffect;
|