@sparkle-learning/core 0.0.39 → 0.0.42
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/{auth.service-4b584cd7.js → PrivateRoute-074c584e.js} +30 -0
- package/dist/cjs/{sparkle-export-lessons_6.cjs.entry.js → header-mobile-collapse_61.cjs.entry.js} +11602 -2716
- package/dist/cjs/{icons-c61db785.js → icons-fda820af.js} +0 -0
- package/dist/cjs/index.cjs.js +5 -6
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/sparkle-code.cjs.entry.js +1 -1
- package/dist/cjs/sparkle-core.cjs.js +1 -1
- package/dist/cjs/sparkle-feedback.cjs.entry.js +1 -2
- package/dist/cjs/sparkle-menu-collapsible.cjs.entry.js +1 -1
- package/dist/cjs/sparkle-quiz-feedback_5.cjs.entry.js +117 -0
- package/dist/cjs/sparkle-quiz.cjs.entry.js +120 -0
- package/dist/cjs/student.service-2e58f237.js +78 -0
- package/dist/esm/{auth.service-9fb86455.js → PrivateRoute-c5441f35.js} +33 -4
- package/dist/esm/{animation-e0716b39.js → animation-12377cb3.js} +1 -1
- package/dist/esm/{auth.store-633e8414.js → auth.store-dba2c2da.js} +1 -1
- package/dist/esm/{facilitator.service-8fd435bf.js → facilitator.service-b0292f7f.js} +2 -2
- package/dist/esm/{feed.service-ace049e5.js → feed.service-8fbe4ce3.js} +3 -3
- package/dist/esm/{framework-delegate-e4f8013b.js → framework-delegate-3e634a5c.js} +1 -1
- package/dist/esm/{sparkle-export-lessons_6.entry.js → header-mobile-collapse_61.entry.js} +11501 -2670
- package/dist/esm/{helpers-03073fe4.js → helpers-bf0e23d6.js} +1 -1
- package/dist/esm/{httpService-61864992.js → httpService-7b75b095.js} +2 -2
- package/dist/esm/{icons-90b957ab.js → icons-1c794c74.js} +1 -1
- package/dist/esm/{index-b4b4e503.js → index-2b84cad2.js} +3 -3
- package/dist/esm/{index-a2d2941d.js → index-45fec1e7.js} +1 -1
- package/dist/esm/{index-37004831.js → index-5e8971ae.js} +1 -1
- package/dist/esm/{index-dedabca0.js → index-cded2d87.js} +2 -2
- package/dist/esm/{index.es-283fbd2e.js → index.es-e0c0f891.js} +1 -1
- package/dist/esm/index.js +5 -6
- package/dist/esm/{input-shims-cc3720a0.js → input-shims-671d8d9f.js} +2 -2
- package/dist/esm/ion-accordion.entry.js +1 -1
- package/dist/esm/ion-action-sheet_4.entry.js +5 -5
- package/dist/esm/ion-app.entry.js +3 -3
- package/dist/esm/ion-back-button.entry.js +1 -1
- package/dist/esm/ion-breadcrumb.entry.js +1 -1
- package/dist/esm/ion-content_2.entry.js +2 -2
- package/dist/esm/ion-datetime-button.entry.js +1 -1
- package/dist/esm/ion-datetime.entry.js +1 -1
- package/dist/esm/ion-fab-button.entry.js +1 -1
- package/dist/esm/ion-footer.entry.js +2 -2
- package/dist/esm/ion-img.entry.js +1 -1
- package/dist/esm/ion-infinite-scroll.entry.js +2 -2
- package/dist/esm/ion-item-options.entry.js +1 -1
- package/dist/esm/ion-item-sliding.entry.js +2 -2
- package/dist/esm/ion-loading.entry.js +3 -3
- package/dist/esm/ion-menu-button.entry.js +4 -4
- 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 +6 -6
- 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-refresher.entry.js +3 -3
- package/dist/esm/ion-reorder-group.entry.js +2 -2
- 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 +1 -1
- 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-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-3a6179bb.js → ios.transition-131d64fe.js} +3 -3
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{md.transition-cff16bf3.js → md.transition-f6126011.js} +3 -3
- package/dist/esm/{menu-toggle-util-59241733.js → menu-toggle-util-bace8ae6.js} +1 -1
- package/dist/esm/{overlays-bdd9344a.js → overlays-3b4dca92.js} +2 -2
- package/dist/esm/{purify-7085b248.js → purify-85bfcc69.js} +1 -1
- package/dist/esm/sparkle-animation-player.entry.js +1 -1
- package/dist/esm/sparkle-code.entry.js +1 -1
- package/dist/esm/sparkle-core.js +1 -1
- package/dist/esm/sparkle-facilitator-notes-form.entry.js +5 -5
- package/dist/esm/sparkle-feed-post.entry.js +1 -1
- package/dist/esm/sparkle-feedback.entry.js +5 -6
- package/dist/esm/sparkle-goal-form.entry.js +6 -6
- package/dist/esm/sparkle-menu-collapsible.entry.js +1 -1
- package/dist/esm/sparkle-quiz-feedback_5.entry.js +109 -0
- package/dist/esm/sparkle-quiz.entry.js +116 -0
- package/dist/esm/{status-tap-463d0f87.js → status-tap-dde52787.js} +2 -2
- package/dist/esm/{student.service-e6eb1f99.js → student.service-0746418b.js} +19 -3
- package/dist/esm/{swipe-back-f8765ac9.js → swipe-back-7847a0c1.js} +1 -1
- package/dist/esm/{util-a831d09d.js → util-6ef753e9.js} +1 -1
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/button/button.css +49 -0
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/cards/card/card.css +208 -0
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/cards/cards.css +31 -0
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/code/code.css +245 -0
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/dropdown/dropdown.css +115 -0
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/header/header-mobile-collapse/header-mobile-collapse.css +255 -0
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/header/header.css +232 -0
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/menu/collapsible/collapsible.css +3 -0
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/menu/menu-toggle/menu-toggle.css +25 -0
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/menu/menu.css +71 -0
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/nav/nav.css +194 -0
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/notfound-page/notfound-page.css +4 -0
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/overlay/overlay.css +67 -0
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/page-footer/page-footer.css +18 -0
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/pagination/pagination.css +89 -0
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/select/select.css +52 -0
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/sidebar/sidebar.css +98 -0
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/sparkle-lower-content-nav/sparkle-lower-content-nav.css +8 -0
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/table-of-contents/table-of-contents.css +37 -0
- package/dist/node_modules/@sparkle-learning/components/dist/collection/components/tabs/tabs.css +64 -0
- package/dist/sparkle-core/index.esm.js +1 -1
- package/dist/sparkle-core/{p-539bf742.js → p-00d10dc9.js} +2 -2
- package/dist/sparkle-core/{p-b9933822.js → p-05c032dd.js} +1 -1
- package/dist/sparkle-core/{p-dabc80c4.entry.js → p-0664370b.entry.js} +1 -1
- package/dist/sparkle-core/p-077c732b.js +4 -0
- package/dist/sparkle-core/{p-c278db5f.entry.js → p-0ad5c123.entry.js} +1 -1
- package/dist/sparkle-core/{p-b9b1d4da.entry.js → p-0afa3a4d.entry.js} +1 -1
- package/dist/sparkle-core/{p-285ab4ed.entry.js → p-0c3f3ea6.entry.js} +1 -1
- package/dist/sparkle-core/{p-727e1c28.entry.js → p-0f1c5899.entry.js} +1 -1
- package/dist/sparkle-core/{p-64e814b9.entry.js → p-11356b03.entry.js} +1 -1
- package/dist/sparkle-core/{p-b5ec8fb0.entry.js → p-11a6c175.entry.js} +1 -1
- package/dist/sparkle-core/p-12dd96d7.js +4 -0
- package/dist/sparkle-core/{p-a85598ad.js → p-1d4c7c11.js} +1 -1
- package/dist/sparkle-core/{p-c8fe45df.entry.js → p-1e125ca5.entry.js} +1 -1
- package/dist/sparkle-core/{p-cab3da3c.entry.js → p-1e4f65ee.entry.js} +1 -1
- package/dist/sparkle-core/{p-405f7c58.js → p-2033cd86.js} +2 -2
- package/dist/sparkle-core/p-23aca7ca.js +4 -0
- package/dist/sparkle-core/{p-e65c72cc.entry.js → p-24cb9a33.entry.js} +1 -1
- package/dist/sparkle-core/{p-014b5707.entry.js → p-2c1ca854.entry.js} +1 -1
- package/dist/sparkle-core/{p-340754ed.js → p-2f569553.js} +1 -1
- package/dist/sparkle-core/{p-2e2b813c.js → p-2ff67662.js} +2 -2
- package/dist/sparkle-core/{p-0c0f8acd.entry.js → p-30b810d1.entry.js} +1 -1
- package/dist/sparkle-core/{p-b236d258.entry.js → p-377b04c2.entry.js} +1 -1
- package/dist/sparkle-core/{p-fde382f0.entry.js → p-39712c56.entry.js} +1 -1
- package/dist/sparkle-core/{p-be28346b.js → p-3de0e00c.js} +1 -1
- package/dist/sparkle-core/p-462bffba.js +1 -0
- package/dist/sparkle-core/{p-3f85e1ca.js → p-48f72e63.js} +2 -2
- package/dist/sparkle-core/{p-6f0545b3.entry.js → p-54dd894f.entry.js} +1 -1
- package/dist/sparkle-core/{p-ce94efdb.entry.js → p-564e64fc.entry.js} +1 -1
- package/dist/sparkle-core/{p-db8387eb.entry.js → p-58e4bbe5.entry.js} +1 -1
- package/dist/sparkle-core/{p-ca4c8a10.js → p-5cad23f1.js} +1 -1
- package/dist/sparkle-core/p-5efc6566.js +1 -0
- package/dist/sparkle-core/{p-c9cd4ff1.js → p-600cf6a3.js} +1 -1
- package/dist/sparkle-core/{p-2e035338.entry.js → p-641bfc92.entry.js} +1 -1
- package/dist/sparkle-core/{p-b4bc8b02.entry.js → p-6faa194c.entry.js} +1 -1
- package/dist/sparkle-core/{p-2f10208d.entry.js → p-6ffd2420.entry.js} +1 -1
- package/dist/sparkle-core/p-73721c84.js +4 -0
- package/dist/sparkle-core/{p-ed9f48c4.entry.js → p-74864276.entry.js} +1 -1
- package/dist/sparkle-core/p-80d6b0e6.entry.js +1 -0
- package/dist/sparkle-core/p-8492a765.entry.js +1 -0
- package/dist/sparkle-core/{p-a019ad0c.js → p-86ed13f0.js} +1 -1
- package/dist/sparkle-core/{p-4ae75caa.entry.js → p-894ff7e6.entry.js} +1 -1
- package/dist/sparkle-core/{p-5519d283.entry.js → p-9289cdbc.entry.js} +1 -1
- package/dist/sparkle-core/{p-4bd4dab2.js → p-935e7cfc.js} +1 -1
- package/dist/sparkle-core/{p-25e556cc.entry.js → p-957715c5.entry.js} +1 -1
- package/dist/sparkle-core/{p-b4b01fa2.entry.js → p-9abbd715.entry.js} +1 -1
- package/dist/sparkle-core/{p-e7568d4b.js → p-9d894ed4.js} +1 -1
- package/dist/sparkle-core/{p-4320dac0.entry.js → p-9ebf0537.entry.js} +1 -1
- package/dist/sparkle-core/p-a49ab4e8.entry.js +1 -0
- package/dist/sparkle-core/{p-93e74f1b.entry.js → p-af3cc111.entry.js} +1 -1
- package/dist/sparkle-core/{p-5fc26938.js → p-b0603d19.js} +1 -1
- package/dist/sparkle-core/{p-317037de.entry.js → p-b3f375fb.entry.js} +1 -1
- package/dist/sparkle-core/p-b4408842.entry.js +352 -0
- package/dist/sparkle-core/{p-2fba9a3a.entry.js → p-b5f3e1bf.entry.js} +1 -1
- package/dist/sparkle-core/{p-82ad4e7c.entry.js → p-b96f3c84.entry.js} +2 -2
- package/dist/sparkle-core/{p-ad102371.js → p-bd80ff43.js} +1 -1
- package/dist/sparkle-core/{p-f0cf4a8f.entry.js → p-be64105c.entry.js} +1 -1
- package/dist/sparkle-core/{p-f4b0b6a4.entry.js → p-c0533c23.entry.js} +1 -1
- package/dist/sparkle-core/p-c3cadfc6.entry.js +1 -0
- package/dist/sparkle-core/{p-2d4a5ddf.entry.js → p-c60b29bd.entry.js} +2 -2
- package/dist/sparkle-core/{p-56a2e8a2.js → p-cabe9139.js} +1 -1
- package/dist/sparkle-core/{p-0bb0cf41.entry.js → p-cabfbf22.entry.js} +1 -1
- package/dist/sparkle-core/{p-66a85393.entry.js → p-ce4b22f7.entry.js} +1 -1
- package/dist/sparkle-core/{p-17eb4633.js → p-d68092b7.js} +1 -1
- package/dist/sparkle-core/{p-0ea2518d.entry.js → p-de4deb61.entry.js} +1 -1
- package/dist/sparkle-core/{p-1f0b3ff9.entry.js → p-e686d8b5.entry.js} +1 -1
- package/dist/sparkle-core/{p-08d97c59.entry.js → p-e77d982d.entry.js} +1 -1
- package/dist/sparkle-core/{p-44f813b7.entry.js → p-e863bf1d.entry.js} +1 -1
- package/dist/sparkle-core/{p-63f69cdc.entry.js → p-ebd4354b.entry.js} +1 -1
- package/dist/sparkle-core/{p-fc965b88.entry.js → p-ef4edc48.entry.js} +1 -1
- package/dist/sparkle-core/{p-c2bbaf55.entry.js → p-fb0ca75e.entry.js} +1 -1
- package/dist/sparkle-core/{p-b83444c7.entry.js → p-fb757951.entry.js} +1 -1
- package/dist/sparkle-core/{p-d81a0680.js → p-fbccd30c.js} +1 -1
- package/dist/sparkle-core/sparkle-core.esm.js +1 -1
- package/package.json +2 -2
- package/dist/cjs/PrivateRoute-4abc9d29.js +0 -35
- package/dist/cjs/dom-utils-b8befdd5.js +0 -63
- package/dist/cjs/header-mobile-collapse.cjs.entry.js +0 -90
- package/dist/cjs/index-70e63f5b.js +0 -3071
- package/dist/cjs/injectHistory-7206bbb9.js +0 -9
- package/dist/cjs/ion-avatar.cjs.entry.js +0 -25
- package/dist/cjs/ion-button.cjs.entry.js +0 -129
- package/dist/cjs/ion-card_2.cjs.entry.js +0 -91
- package/dist/cjs/ion-checkbox_4.cjs.entry.js +0 -360
- package/dist/cjs/ion-col_3.cjs.entry.js +0 -159
- package/dist/cjs/ion-icon_13.cjs.entry.js +0 -1505
- package/dist/cjs/ion-input_2.cjs.entry.js +0 -313
- package/dist/cjs/ion-label_2.cjs.entry.js +0 -126
- package/dist/cjs/ion-spinner.cjs.entry.js +0 -64
- package/dist/cjs/match-path-84c9f7ca.js +0 -511
- package/dist/cjs/sparkle-card_3.cjs.entry.js +0 -91
- package/dist/cjs/sparkle-course-root.cjs.entry.js +0 -146
- package/dist/cjs/sparkle-dropdown.cjs.entry.js +0 -61
- package/dist/cjs/sparkle-facilitator-header_19.cjs.entry.js +0 -2130
- package/dist/cjs/sparkle-goal-progress.cjs.entry.js +0 -19
- package/dist/cjs/sparkle-gww-item.cjs.entry.js +0 -74
- package/dist/cjs/sparkle-menu-toggle_3.cjs.entry.js +0 -236
- package/dist/cjs/sparkle-validation-error.cjs.entry.js +0 -21
- package/dist/cjs/stencil-router-redirect.cjs.entry.js +0 -32
- package/dist/cjs/student.service-d48f1c99.js +0 -61
- package/dist/cjs/user.store-8a049c4e.js +0 -21
- package/dist/esm/PrivateRoute-7b526801.js +0 -33
- package/dist/esm/dom-utils-109a7d75.js +0 -55
- package/dist/esm/header-mobile-collapse.entry.js +0 -86
- package/dist/esm/index-f9b9ba5d.js +0 -3067
- package/dist/esm/injectHistory-968f626d.js +0 -7
- package/dist/esm/ion-avatar.entry.js +0 -21
- package/dist/esm/ion-button.entry.js +0 -125
- package/dist/esm/ion-card_2.entry.js +0 -86
- package/dist/esm/ion-checkbox_4.entry.js +0 -353
- package/dist/esm/ion-col_3.entry.js +0 -153
- package/dist/esm/ion-icon_13.entry.js +0 -1489
- package/dist/esm/ion-input_2.entry.js +0 -308
- package/dist/esm/ion-label_2.entry.js +0 -121
- package/dist/esm/ion-spinner.entry.js +0 -60
- package/dist/esm/match-path-36fdf5c7.js +0 -499
- package/dist/esm/sparkle-card_3.entry.js +0 -85
- package/dist/esm/sparkle-course-root.entry.js +0 -142
- package/dist/esm/sparkle-dropdown.entry.js +0 -57
- package/dist/esm/sparkle-facilitator-header_19.entry.js +0 -2108
- package/dist/esm/sparkle-goal-progress.entry.js +0 -15
- package/dist/esm/sparkle-gww-item.entry.js +0 -70
- package/dist/esm/sparkle-menu-toggle_3.entry.js +0 -230
- package/dist/esm/sparkle-validation-error.entry.js +0 -17
- package/dist/esm/stencil-router-redirect.entry.js +0 -28
- package/dist/esm/user.store-b8645067.js +0 -19
- package/dist/sparkle-core/p-03585916.js +0 -1
- package/dist/sparkle-core/p-1019ebc3.js +0 -1
- package/dist/sparkle-core/p-1728ead7.js +0 -1
- package/dist/sparkle-core/p-32762a44.entry.js +0 -1
- package/dist/sparkle-core/p-3bc68dd0.js +0 -1
- package/dist/sparkle-core/p-3c133235.entry.js +0 -1
- package/dist/sparkle-core/p-46869031.entry.js +0 -1
- package/dist/sparkle-core/p-4a5f2b2b.js +0 -1
- package/dist/sparkle-core/p-53bcbd1d.js +0 -1
- package/dist/sparkle-core/p-54ada5e3.entry.js +0 -1
- package/dist/sparkle-core/p-554da5b8.entry.js +0 -1
- package/dist/sparkle-core/p-5da2d95a.entry.js +0 -1
- package/dist/sparkle-core/p-6b05a1d3.entry.js +0 -1
- package/dist/sparkle-core/p-6ea246fe.js +0 -4
- package/dist/sparkle-core/p-6ed0236e.entry.js +0 -1
- package/dist/sparkle-core/p-7f25366a.entry.js +0 -1
- package/dist/sparkle-core/p-91accfc1.js +0 -1
- package/dist/sparkle-core/p-a5c5da9a.entry.js +0 -1
- package/dist/sparkle-core/p-a8a77bec.entry.js +0 -1
- package/dist/sparkle-core/p-c4af184b.entry.js +0 -1
- package/dist/sparkle-core/p-c71cbbf7.entry.js +0 -1
- package/dist/sparkle-core/p-c8c73fa7.js +0 -4
- package/dist/sparkle-core/p-cd832fbf.entry.js +0 -1
- package/dist/sparkle-core/p-d0ac5f17.js +0 -1
- package/dist/sparkle-core/p-d1fcbfc2.js +0 -4
- package/dist/sparkle-core/p-d432d3ac.entry.js +0 -1
- package/dist/sparkle-core/p-d969f7d0.entry.js +0 -348
- package/dist/sparkle-core/p-dca90a55.entry.js +0 -4
- package/dist/sparkle-core/p-dd2e7f84.js +0 -4
- package/dist/sparkle-core/p-e0429a19.entry.js +0 -1
- package/dist/sparkle-core/p-e7066c64.entry.js +0 -1
- package/dist/sparkle-core/p-eb40a191.entry.js +0 -1
- package/dist/sparkle-core/p-ecdea569.entry.js +0 -1
- package/dist/sparkle-core/p-ef6c2352.entry.js +0 -1
|
@@ -1,511 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* TS adaption of https://github.com/pillarjs/path-to-regexp/blob/master/index.js
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* Default configs.
|
|
8
|
-
*/
|
|
9
|
-
const DEFAULT_DELIMITER = '/';
|
|
10
|
-
const DEFAULT_DELIMITERS = './';
|
|
11
|
-
/**
|
|
12
|
-
* The main path matching regexp utility.
|
|
13
|
-
*/
|
|
14
|
-
const PATH_REGEXP = new RegExp([
|
|
15
|
-
// Match escaped characters that would otherwise appear in future matches.
|
|
16
|
-
// This allows the user to escape special characters that won't transform.
|
|
17
|
-
'(\\\\.)',
|
|
18
|
-
// Match Express-style parameters and un-named parameters with a prefix
|
|
19
|
-
// and optional suffixes. Matches appear as:
|
|
20
|
-
//
|
|
21
|
-
// "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?"]
|
|
22
|
-
// "/route(\\d+)" => [undefined, undefined, undefined, "\d+", undefined]
|
|
23
|
-
'(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?'
|
|
24
|
-
].join('|'), 'g');
|
|
25
|
-
/**
|
|
26
|
-
* Parse a string for the raw tokens.
|
|
27
|
-
*/
|
|
28
|
-
const parse = (str, options) => {
|
|
29
|
-
var tokens = [];
|
|
30
|
-
var key = 0;
|
|
31
|
-
var index = 0;
|
|
32
|
-
var path = '';
|
|
33
|
-
var defaultDelimiter = (options && options.delimiter) || DEFAULT_DELIMITER;
|
|
34
|
-
var delimiters = (options && options.delimiters) || DEFAULT_DELIMITERS;
|
|
35
|
-
var pathEscaped = false;
|
|
36
|
-
var res;
|
|
37
|
-
while ((res = PATH_REGEXP.exec(str)) !== null) {
|
|
38
|
-
var m = res[0];
|
|
39
|
-
var escaped = res[1];
|
|
40
|
-
var offset = res.index;
|
|
41
|
-
path += str.slice(index, offset);
|
|
42
|
-
index = offset + m.length;
|
|
43
|
-
// Ignore already escaped sequences.
|
|
44
|
-
if (escaped) {
|
|
45
|
-
path += escaped[1];
|
|
46
|
-
pathEscaped = true;
|
|
47
|
-
continue;
|
|
48
|
-
}
|
|
49
|
-
var prev = '';
|
|
50
|
-
var next = str[index];
|
|
51
|
-
var name = res[2];
|
|
52
|
-
var capture = res[3];
|
|
53
|
-
var group = res[4];
|
|
54
|
-
var modifier = res[5];
|
|
55
|
-
if (!pathEscaped && path.length) {
|
|
56
|
-
var k = path.length - 1;
|
|
57
|
-
if (delimiters.indexOf(path[k]) > -1) {
|
|
58
|
-
prev = path[k];
|
|
59
|
-
path = path.slice(0, k);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
// Push the current path onto the tokens.
|
|
63
|
-
if (path) {
|
|
64
|
-
tokens.push(path);
|
|
65
|
-
path = '';
|
|
66
|
-
pathEscaped = false;
|
|
67
|
-
}
|
|
68
|
-
var partial = prev !== '' && next !== undefined && next !== prev;
|
|
69
|
-
var repeat = modifier === '+' || modifier === '*';
|
|
70
|
-
var optional = modifier === '?' || modifier === '*';
|
|
71
|
-
var delimiter = prev || defaultDelimiter;
|
|
72
|
-
var pattern = capture || group;
|
|
73
|
-
tokens.push({
|
|
74
|
-
name: name || key++,
|
|
75
|
-
prefix: prev,
|
|
76
|
-
delimiter: delimiter,
|
|
77
|
-
optional: optional,
|
|
78
|
-
repeat: repeat,
|
|
79
|
-
partial: partial,
|
|
80
|
-
pattern: pattern ? escapeGroup(pattern) : '[^' + escapeString(delimiter) + ']+?'
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
// Push any remaining characters.
|
|
84
|
-
if (path || index < str.length) {
|
|
85
|
-
tokens.push(path + str.substr(index));
|
|
86
|
-
}
|
|
87
|
-
return tokens;
|
|
88
|
-
};
|
|
89
|
-
/**
|
|
90
|
-
* Escape a regular expression string.
|
|
91
|
-
*/
|
|
92
|
-
const escapeString = (str) => {
|
|
93
|
-
return str.replace(/([.+*?=^!:${}()[\]|/\\])/g, '\\$1');
|
|
94
|
-
};
|
|
95
|
-
/**
|
|
96
|
-
* Escape the capturing group by escaping special characters and meaning.
|
|
97
|
-
*/
|
|
98
|
-
const escapeGroup = (group) => {
|
|
99
|
-
return group.replace(/([=!:$/()])/g, '\\$1');
|
|
100
|
-
};
|
|
101
|
-
/**
|
|
102
|
-
* Get the flags for a regexp from the options.
|
|
103
|
-
*/
|
|
104
|
-
const flags = (options) => {
|
|
105
|
-
return options && options.sensitive ? '' : 'i';
|
|
106
|
-
};
|
|
107
|
-
/**
|
|
108
|
-
* Pull out keys from a regexp.
|
|
109
|
-
*/
|
|
110
|
-
const regexpToRegexp = (path, keys) => {
|
|
111
|
-
if (!keys)
|
|
112
|
-
return path;
|
|
113
|
-
// Use a negative lookahead to match only capturing groups.
|
|
114
|
-
var groups = path.source.match(/\((?!\?)/g);
|
|
115
|
-
if (groups) {
|
|
116
|
-
for (var i = 0; i < groups.length; i++) {
|
|
117
|
-
keys.push({
|
|
118
|
-
name: i,
|
|
119
|
-
prefix: null,
|
|
120
|
-
delimiter: null,
|
|
121
|
-
optional: false,
|
|
122
|
-
repeat: false,
|
|
123
|
-
partial: false,
|
|
124
|
-
pattern: null
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
return path;
|
|
129
|
-
};
|
|
130
|
-
/**
|
|
131
|
-
* Transform an array into a regexp.
|
|
132
|
-
*/
|
|
133
|
-
const arrayToRegexp = (path, keys, options) => {
|
|
134
|
-
var parts = [];
|
|
135
|
-
for (var i = 0; i < path.length; i++) {
|
|
136
|
-
parts.push(pathToRegexp(path[i], keys, options).source);
|
|
137
|
-
}
|
|
138
|
-
return new RegExp('(?:' + parts.join('|') + ')', flags(options));
|
|
139
|
-
};
|
|
140
|
-
/**
|
|
141
|
-
* Create a path regexp from string input.
|
|
142
|
-
*/
|
|
143
|
-
const stringToRegexp = (path, keys, options) => {
|
|
144
|
-
return tokensToRegExp(parse(path, options), keys, options);
|
|
145
|
-
};
|
|
146
|
-
/**
|
|
147
|
-
* Expose a function for taking tokens and returning a RegExp.
|
|
148
|
-
*/
|
|
149
|
-
const tokensToRegExp = (tokens, keys, options) => {
|
|
150
|
-
options = options || {};
|
|
151
|
-
var strict = options.strict;
|
|
152
|
-
var end = options.end !== false;
|
|
153
|
-
var delimiter = escapeString(options.delimiter || DEFAULT_DELIMITER);
|
|
154
|
-
var delimiters = options.delimiters || DEFAULT_DELIMITERS;
|
|
155
|
-
var endsWith = [].concat(options.endsWith || []).map(escapeString).concat('$').join('|');
|
|
156
|
-
var route = '';
|
|
157
|
-
var isEndDelimited = false;
|
|
158
|
-
// Iterate over the tokens and create our regexp string.
|
|
159
|
-
for (var i = 0; i < tokens.length; i++) {
|
|
160
|
-
var token = tokens[i];
|
|
161
|
-
if (typeof token === 'string') {
|
|
162
|
-
route += escapeString(token);
|
|
163
|
-
isEndDelimited = i === tokens.length - 1 && delimiters.indexOf(token[token.length - 1]) > -1;
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
var prefix = escapeString(token.prefix || '');
|
|
167
|
-
var capture = token.repeat
|
|
168
|
-
? '(?:' + token.pattern + ')(?:' + prefix + '(?:' + token.pattern + '))*'
|
|
169
|
-
: token.pattern;
|
|
170
|
-
if (keys)
|
|
171
|
-
keys.push(token);
|
|
172
|
-
if (token.optional) {
|
|
173
|
-
if (token.partial) {
|
|
174
|
-
route += prefix + '(' + capture + ')?';
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
route += '(?:' + prefix + '(' + capture + '))?';
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
else {
|
|
181
|
-
route += prefix + '(' + capture + ')';
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
if (end) {
|
|
186
|
-
if (!strict)
|
|
187
|
-
route += '(?:' + delimiter + ')?';
|
|
188
|
-
route += endsWith === '$' ? '$' : '(?=' + endsWith + ')';
|
|
189
|
-
}
|
|
190
|
-
else {
|
|
191
|
-
if (!strict)
|
|
192
|
-
route += '(?:' + delimiter + '(?=' + endsWith + '))?';
|
|
193
|
-
if (!isEndDelimited)
|
|
194
|
-
route += '(?=' + delimiter + '|' + endsWith + ')';
|
|
195
|
-
}
|
|
196
|
-
return new RegExp('^' + route, flags(options));
|
|
197
|
-
};
|
|
198
|
-
/**
|
|
199
|
-
* Normalize the given path string, returning a regular expression.
|
|
200
|
-
*
|
|
201
|
-
* An empty array can be passed in for the keys, which will hold the
|
|
202
|
-
* placeholder key descriptions. For example, using `/user/:id`, `keys` will
|
|
203
|
-
* contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.
|
|
204
|
-
*/
|
|
205
|
-
const pathToRegexp = (path, keys, options) => {
|
|
206
|
-
if (path instanceof RegExp) {
|
|
207
|
-
return regexpToRegexp(path, keys);
|
|
208
|
-
}
|
|
209
|
-
if (Array.isArray(path)) {
|
|
210
|
-
return arrayToRegexp(path, keys, options);
|
|
211
|
-
}
|
|
212
|
-
return stringToRegexp(path, keys, options);
|
|
213
|
-
};
|
|
214
|
-
|
|
215
|
-
const hasBasename = (path, prefix) => {
|
|
216
|
-
return (new RegExp('^' + prefix + '(\\/|\\?|#|$)', 'i')).test(path);
|
|
217
|
-
};
|
|
218
|
-
const stripBasename = (path, prefix) => {
|
|
219
|
-
return hasBasename(path, prefix) ? path.substr(prefix.length) : path;
|
|
220
|
-
};
|
|
221
|
-
const stripTrailingSlash = (path) => {
|
|
222
|
-
return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;
|
|
223
|
-
};
|
|
224
|
-
const addLeadingSlash = (path) => {
|
|
225
|
-
return path.charAt(0) === '/' ? path : '/' + path;
|
|
226
|
-
};
|
|
227
|
-
const stripLeadingSlash = (path) => {
|
|
228
|
-
return path.charAt(0) === '/' ? path.substr(1) : path;
|
|
229
|
-
};
|
|
230
|
-
const parsePath = (path) => {
|
|
231
|
-
let pathname = path || '/';
|
|
232
|
-
let search = '';
|
|
233
|
-
let hash = '';
|
|
234
|
-
const hashIndex = pathname.indexOf('#');
|
|
235
|
-
if (hashIndex !== -1) {
|
|
236
|
-
hash = pathname.substr(hashIndex);
|
|
237
|
-
pathname = pathname.substr(0, hashIndex);
|
|
238
|
-
}
|
|
239
|
-
const searchIndex = pathname.indexOf('?');
|
|
240
|
-
if (searchIndex !== -1) {
|
|
241
|
-
search = pathname.substr(searchIndex);
|
|
242
|
-
pathname = pathname.substr(0, searchIndex);
|
|
243
|
-
}
|
|
244
|
-
return {
|
|
245
|
-
pathname,
|
|
246
|
-
search: search === '?' ? '' : search,
|
|
247
|
-
hash: hash === '#' ? '' : hash,
|
|
248
|
-
query: {},
|
|
249
|
-
key: ''
|
|
250
|
-
};
|
|
251
|
-
};
|
|
252
|
-
const createPath = (location) => {
|
|
253
|
-
const { pathname, search, hash } = location;
|
|
254
|
-
let path = pathname || '/';
|
|
255
|
-
if (search && search !== '?') {
|
|
256
|
-
path += (search.charAt(0) === '?' ? search : `?${search}`);
|
|
257
|
-
}
|
|
258
|
-
if (hash && hash !== '#') {
|
|
259
|
-
path += (hash.charAt(0) === '#' ? hash : `#${hash}`);
|
|
260
|
-
}
|
|
261
|
-
return path;
|
|
262
|
-
};
|
|
263
|
-
const parseQueryString = (query) => {
|
|
264
|
-
if (!query) {
|
|
265
|
-
return {};
|
|
266
|
-
}
|
|
267
|
-
return (/^[?#]/.test(query) ? query.slice(1) : query)
|
|
268
|
-
.split('&')
|
|
269
|
-
.reduce((params, param) => {
|
|
270
|
-
let [key, value] = param.split('=');
|
|
271
|
-
params[key] = value ? decodeURIComponent(value.replace(/\+/g, ' ')) : '';
|
|
272
|
-
return params;
|
|
273
|
-
}, {});
|
|
274
|
-
};
|
|
275
|
-
|
|
276
|
-
const isAbsolute = (pathname) => {
|
|
277
|
-
return pathname.charAt(0) === '/';
|
|
278
|
-
};
|
|
279
|
-
const createKey = (keyLength) => {
|
|
280
|
-
return Math.random().toString(36).substr(2, keyLength);
|
|
281
|
-
};
|
|
282
|
-
// About 1.5x faster than the two-arg version of Array#splice()
|
|
283
|
-
const spliceOne = (list, index) => {
|
|
284
|
-
for (let i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {
|
|
285
|
-
list[i] = list[k];
|
|
286
|
-
}
|
|
287
|
-
list.pop();
|
|
288
|
-
};
|
|
289
|
-
// This implementation is based heavily on node's url.parse
|
|
290
|
-
const resolvePathname = (to, from = '') => {
|
|
291
|
-
let fromParts = from && from.split('/') || [];
|
|
292
|
-
let hasTrailingSlash;
|
|
293
|
-
let up = 0;
|
|
294
|
-
const toParts = to && to.split('/') || [];
|
|
295
|
-
const isToAbs = to && isAbsolute(to);
|
|
296
|
-
const isFromAbs = from && isAbsolute(from);
|
|
297
|
-
const mustEndAbs = isToAbs || isFromAbs;
|
|
298
|
-
if (to && isAbsolute(to)) {
|
|
299
|
-
// to is absolute
|
|
300
|
-
fromParts = toParts;
|
|
301
|
-
}
|
|
302
|
-
else if (toParts.length) {
|
|
303
|
-
// to is relative, drop the filename
|
|
304
|
-
fromParts.pop();
|
|
305
|
-
fromParts = fromParts.concat(toParts);
|
|
306
|
-
}
|
|
307
|
-
if (!fromParts.length) {
|
|
308
|
-
return '/';
|
|
309
|
-
}
|
|
310
|
-
if (fromParts.length) {
|
|
311
|
-
const last = fromParts[fromParts.length - 1];
|
|
312
|
-
hasTrailingSlash = (last === '.' || last === '..' || last === '');
|
|
313
|
-
}
|
|
314
|
-
else {
|
|
315
|
-
hasTrailingSlash = false;
|
|
316
|
-
}
|
|
317
|
-
for (let i = fromParts.length; i >= 0; i--) {
|
|
318
|
-
const part = fromParts[i];
|
|
319
|
-
if (part === '.') {
|
|
320
|
-
spliceOne(fromParts, i);
|
|
321
|
-
}
|
|
322
|
-
else if (part === '..') {
|
|
323
|
-
spliceOne(fromParts, i);
|
|
324
|
-
up++;
|
|
325
|
-
}
|
|
326
|
-
else if (up) {
|
|
327
|
-
spliceOne(fromParts, i);
|
|
328
|
-
up--;
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
if (!mustEndAbs) {
|
|
332
|
-
for (; up--; up) {
|
|
333
|
-
fromParts.unshift('..');
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
if (mustEndAbs && fromParts[0] !== '' && (!fromParts[0] || !isAbsolute(fromParts[0]))) {
|
|
337
|
-
fromParts.unshift('');
|
|
338
|
-
}
|
|
339
|
-
let result = fromParts.join('/');
|
|
340
|
-
if (hasTrailingSlash && result.substr(-1) !== '/') {
|
|
341
|
-
result += '/';
|
|
342
|
-
}
|
|
343
|
-
return result;
|
|
344
|
-
};
|
|
345
|
-
const valueEqual = (a, b) => {
|
|
346
|
-
if (a === b) {
|
|
347
|
-
return true;
|
|
348
|
-
}
|
|
349
|
-
if (a == null || b == null) {
|
|
350
|
-
return false;
|
|
351
|
-
}
|
|
352
|
-
if (Array.isArray(a)) {
|
|
353
|
-
return Array.isArray(b) && a.length === b.length && a.every((item, index) => {
|
|
354
|
-
return valueEqual(item, b[index]);
|
|
355
|
-
});
|
|
356
|
-
}
|
|
357
|
-
const aType = typeof a;
|
|
358
|
-
const bType = typeof b;
|
|
359
|
-
if (aType !== bType) {
|
|
360
|
-
return false;
|
|
361
|
-
}
|
|
362
|
-
if (aType === 'object') {
|
|
363
|
-
const aValue = a.valueOf();
|
|
364
|
-
const bValue = b.valueOf();
|
|
365
|
-
if (aValue !== a || bValue !== b) {
|
|
366
|
-
return valueEqual(aValue, bValue);
|
|
367
|
-
}
|
|
368
|
-
const aKeys = Object.keys(a);
|
|
369
|
-
const bKeys = Object.keys(b);
|
|
370
|
-
if (aKeys.length !== bKeys.length) {
|
|
371
|
-
return false;
|
|
372
|
-
}
|
|
373
|
-
return aKeys.every((key) => {
|
|
374
|
-
return valueEqual(a[key], b[key]);
|
|
375
|
-
});
|
|
376
|
-
}
|
|
377
|
-
return false;
|
|
378
|
-
};
|
|
379
|
-
const locationsAreEqual = (a, b) => {
|
|
380
|
-
return a.pathname === b.pathname &&
|
|
381
|
-
a.search === b.search &&
|
|
382
|
-
a.hash === b.hash &&
|
|
383
|
-
a.key === b.key &&
|
|
384
|
-
valueEqual(a.state, b.state);
|
|
385
|
-
};
|
|
386
|
-
const createLocation = (path, state, key, currentLocation) => {
|
|
387
|
-
let location;
|
|
388
|
-
if (typeof path === 'string') {
|
|
389
|
-
// Two-arg form: push(path, state)
|
|
390
|
-
location = parsePath(path);
|
|
391
|
-
if (state !== undefined) {
|
|
392
|
-
location.state = state;
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
else {
|
|
396
|
-
// One-arg form: push(location)
|
|
397
|
-
location = Object.assign({ pathname: '' }, path);
|
|
398
|
-
if (location.search && location.search.charAt(0) !== '?') {
|
|
399
|
-
location.search = '?' + location.search;
|
|
400
|
-
}
|
|
401
|
-
if (location.hash && location.hash.charAt(0) !== '#') {
|
|
402
|
-
location.hash = '#' + location.hash;
|
|
403
|
-
}
|
|
404
|
-
if (state !== undefined && location.state === undefined) {
|
|
405
|
-
location.state = state;
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
try {
|
|
409
|
-
location.pathname = decodeURI(location.pathname);
|
|
410
|
-
}
|
|
411
|
-
catch (e) {
|
|
412
|
-
if (e instanceof URIError) {
|
|
413
|
-
throw new URIError('Pathname "' + location.pathname + '" could not be decoded. ' +
|
|
414
|
-
'This is likely caused by an invalid percent-encoding.');
|
|
415
|
-
}
|
|
416
|
-
else {
|
|
417
|
-
throw e;
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
location.key = key;
|
|
421
|
-
if (currentLocation) {
|
|
422
|
-
// Resolve incomplete/relative pathname relative to current location.
|
|
423
|
-
if (!location.pathname) {
|
|
424
|
-
location.pathname = currentLocation.pathname;
|
|
425
|
-
}
|
|
426
|
-
else if (location.pathname.charAt(0) !== '/') {
|
|
427
|
-
location.pathname = resolvePathname(location.pathname, currentLocation.pathname);
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
else {
|
|
431
|
-
// When there is no prior location and pathname is empty, set it to /
|
|
432
|
-
if (!location.pathname) {
|
|
433
|
-
location.pathname = '/';
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
location.query = parseQueryString(location.search || '');
|
|
437
|
-
return location;
|
|
438
|
-
};
|
|
439
|
-
|
|
440
|
-
let cacheCount = 0;
|
|
441
|
-
const patternCache = {};
|
|
442
|
-
const cacheLimit = 10000;
|
|
443
|
-
// Memoized function for creating the path match regex
|
|
444
|
-
const compilePath = (pattern, options) => {
|
|
445
|
-
const cacheKey = `${options.end}${options.strict}`;
|
|
446
|
-
const cache = patternCache[cacheKey] || (patternCache[cacheKey] = {});
|
|
447
|
-
const cachePattern = JSON.stringify(pattern);
|
|
448
|
-
if (cache[cachePattern]) {
|
|
449
|
-
return cache[cachePattern];
|
|
450
|
-
}
|
|
451
|
-
const keys = [];
|
|
452
|
-
const re = pathToRegexp(pattern, keys, options);
|
|
453
|
-
const compiledPattern = { re, keys };
|
|
454
|
-
if (cacheCount < cacheLimit) {
|
|
455
|
-
cache[cachePattern] = compiledPattern;
|
|
456
|
-
cacheCount += 1;
|
|
457
|
-
}
|
|
458
|
-
return compiledPattern;
|
|
459
|
-
};
|
|
460
|
-
/**
|
|
461
|
-
* Public API for matching a URL pathname to a path pattern.
|
|
462
|
-
*/
|
|
463
|
-
const matchPath = (pathname, options = {}) => {
|
|
464
|
-
if (typeof options === 'string') {
|
|
465
|
-
options = { path: options };
|
|
466
|
-
}
|
|
467
|
-
const { path = '/', exact = false, strict = false } = options;
|
|
468
|
-
const { re, keys } = compilePath(path, { end: exact, strict });
|
|
469
|
-
const match = re.exec(pathname);
|
|
470
|
-
if (!match) {
|
|
471
|
-
return null;
|
|
472
|
-
}
|
|
473
|
-
const [url, ...values] = match;
|
|
474
|
-
const isExact = pathname === url;
|
|
475
|
-
if (exact && !isExact) {
|
|
476
|
-
return null;
|
|
477
|
-
}
|
|
478
|
-
return {
|
|
479
|
-
path,
|
|
480
|
-
url: path === '/' && url === '' ? '/' : url,
|
|
481
|
-
isExact,
|
|
482
|
-
params: keys.reduce((memo, key, index) => {
|
|
483
|
-
memo[key.name] = values[index];
|
|
484
|
-
return memo;
|
|
485
|
-
}, {})
|
|
486
|
-
};
|
|
487
|
-
};
|
|
488
|
-
const matchesAreEqual = (a, b) => {
|
|
489
|
-
if (a == null && b == null) {
|
|
490
|
-
return true;
|
|
491
|
-
}
|
|
492
|
-
if (b == null) {
|
|
493
|
-
return false;
|
|
494
|
-
}
|
|
495
|
-
return a && b &&
|
|
496
|
-
a.path === b.path &&
|
|
497
|
-
a.url === b.url &&
|
|
498
|
-
valueEqual(a.params, b.params);
|
|
499
|
-
};
|
|
500
|
-
|
|
501
|
-
exports.addLeadingSlash = addLeadingSlash;
|
|
502
|
-
exports.createKey = createKey;
|
|
503
|
-
exports.createLocation = createLocation;
|
|
504
|
-
exports.createPath = createPath;
|
|
505
|
-
exports.hasBasename = hasBasename;
|
|
506
|
-
exports.locationsAreEqual = locationsAreEqual;
|
|
507
|
-
exports.matchPath = matchPath;
|
|
508
|
-
exports.matchesAreEqual = matchesAreEqual;
|
|
509
|
-
exports.stripBasename = stripBasename;
|
|
510
|
-
exports.stripLeadingSlash = stripLeadingSlash;
|
|
511
|
-
exports.stripTrailingSlash = stripTrailingSlash;
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
const index = require('./index-51e8292e.js');
|
|
6
|
-
const icons = require('./icons-c61db785.js');
|
|
7
|
-
|
|
8
|
-
const cardCss = "sparkle-card{display:block;font-size:12px;max-width:30em}.Card{background-color:var(--background);border-radius:4px;box-shadow:0px 0.175em 0.5em rgba(2, 8, 20, 0.1), 0px 0.085em 0.175em rgba(2, 8, 20, 0.08);color:var(--text-color--light);display:flex;flex-direction:column;font-size:inherit;font-weight:normal;height:100%;justify-content:flex-start;line-height:1.6;transition:box-shadow 150ms ease, transform 150ms ease;width:100%;overflow:hidden}.Card-with-image{grid-row:span 2}.Card-without-image{font-size:12px}.Card-container{padding:1.65em 2em 1.65em}.Card-image{width:100%;height:auto}.Card-icon,.Card-iconset__container{width:48px;height:48px;margin-bottom:1.2em;border-radius:50%;object-fit:cover;background:rgb(246, 248, 251)}.Card-icon-hover{display:none}.Card-iconset__container{position:relative}.Card-iconset__container .Card-icon{position:absolute;opacity:0;transition:0.8s opacity}.Card-iconset__container .Card-icon--active{opacity:1}.Card-ionicon{width:48px;height:48px;float:left;margin-right:1em}@media (hover: hover){.Card[href]:hover{box-shadow:0 0.35em 1.175em rgba(2, 8, 20, 0.1), 0 0.175em 0.5em rgba(2, 8, 20, 0.08);transform:translateY(-1px)}.Card[href]:hover .Card-icon-default{display:none}.Card[href]:hover .Card-icon-hover{display:block}}.Card-content>*:first-child{margin-top:0}.Card-content>*:last-child{margin-bottom:0}.Card-content>*{margin:0 0 0.65em}.Card-header{color:var(--text-color--dark);font-size:1.4em;font-weight:500;line-height:1.4;margin-bottom:0.45em}.Card-without-image .Card-header{margin-bottom:0.3em}.Card-header>svg{fill:currentColor;height:1em;margin-bottom:-0.125em;width:auto}.Card-size-lg{font-size:14px}.Card-size-lg .Card-icon,.Card-size-lg .Card-ionicon,.Card-size-lg .Card-iconset__container{width:80px;height:80px}.Card-size-lg.Card-without-image .Card-header{font-size:20px}sparkle-card.disabled,sparkle-card[disabled]{position:relative}sparkle-card.disabled::after,sparkle-card[disabled]::after{position:absolute;top:0;right:0;left:0;bottom:0;background:rgba(232, 232, 232, 0.5);pointer-events:none;content:''}aside sparkle-card{max-width:240px}aside .Card-container{display:grid;grid-template-columns:minmax(0, max-content) 1fr;grid-template-rows:minmax(0, min-content);grid-template-areas:'icon title'\r\n 'icon body'}aside .Card-icon{width:32px;height:32px;margin-right:16px;margin-bottom:0;grid-area:icon}aside .Card-header{grid-area:title}aside .Card-header::after{background-image:url('/docs/assets/img/new-tab.svg');display:inline-block;height:13px;width:13px;background-size:13px 13px;margin-left:4px;content:''}aside .Card-content{grid-area:body;max-height:42px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}aside .Card-icon+.Card-content{margin-top:-6px}.markdown-content p sparkle-card{margin-top:1em}";
|
|
9
|
-
|
|
10
|
-
const SparkleCard = class {
|
|
11
|
-
constructor(hostRef) {
|
|
12
|
-
index.registerInstance(this, hostRef);
|
|
13
|
-
this.activeIndex = 0;
|
|
14
|
-
this.rotationTime = 6000; // 4 seconds
|
|
15
|
-
}
|
|
16
|
-
hostData() {
|
|
17
|
-
return {
|
|
18
|
-
class: {
|
|
19
|
-
'Card-with-image': typeof this.img !== 'undefined',
|
|
20
|
-
'Card-without-image': typeof this.img === 'undefined',
|
|
21
|
-
'Card-size-lg': this.size === 'lg',
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
componentWillLoad() {
|
|
26
|
-
if (typeof this.iconset !== 'undefined') {
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
this.activeIndex = 0;
|
|
30
|
-
this.rotationTime = 4000 + (Math.random() * 2000); // 4 - 6 seconds - randomize it a bit
|
|
31
|
-
// make the first transiton happen a bit faster
|
|
32
|
-
setInterval(this.tic.bind(this), this.rotationTime);
|
|
33
|
-
setTimeout(this.tic.bind(this), this.rotationTime / 3);
|
|
34
|
-
}
|
|
35
|
-
componentWillUnload() {
|
|
36
|
-
clearInterval(this.interval);
|
|
37
|
-
}
|
|
38
|
-
tic() {
|
|
39
|
-
if (typeof this.iconset !== 'undefined' && this.activeIndex >= this.iconset.split(',').length - 1) {
|
|
40
|
-
return this.activeIndex = 0;
|
|
41
|
-
}
|
|
42
|
-
this.activeIndex++;
|
|
43
|
-
}
|
|
44
|
-
__stencil_render() {
|
|
45
|
-
const isStatic = typeof this.href === 'undefined';
|
|
46
|
-
const isOutbound = typeof this.href !== 'undefined' ? /^http/.test(this.href) : false;
|
|
47
|
-
const header = this.header === 'undefined' ? null : (index.h("header", { class: "Card-header" }, this.header, " ", isOutbound ? index.h(icons.Outbound, null) : null));
|
|
48
|
-
const hoverIcon = this.hoverIcon || this.icon;
|
|
49
|
-
const content = [
|
|
50
|
-
this.img && index.h("img", { src: this.img, class: "Card-image" }),
|
|
51
|
-
index.h("div", { class: "Card-container" }, this.icon && index.h("img", { src: this.icon, class: "Card-icon Card-icon-default" }), hoverIcon && index.h("img", { src: hoverIcon, class: "Card-icon Card-icon-hover" }), this.ionicon && index.h("ion-icon", { name: this.ionicon, class: "Card-ionicon" }), this.iconset && index.h("div", { class: "Card-iconset__container" }, this.iconset.split(',').map((icon, index$1) => index.h("img", { src: icon, class: `Card-icon ${index$1 === this.activeIndex ? 'Card-icon--active' : ''}`, "data-index": index$1 }))), header, index.h("div", { class: "Card-content" }, index.h("slot", null)))
|
|
52
|
-
];
|
|
53
|
-
if (isStatic) {
|
|
54
|
-
return (index.h("div", { class: "Card" }, content));
|
|
55
|
-
}
|
|
56
|
-
if (isOutbound) {
|
|
57
|
-
return (index.h("a", { class: "Card", href: this.href }, content));
|
|
58
|
-
}
|
|
59
|
-
return (index.h("stencil-route-link", { url: this.href, anchorClass: "Card" }, content));
|
|
60
|
-
}
|
|
61
|
-
render() { return index.h(index.Host, this.hostData(), this.__stencil_render()); }
|
|
62
|
-
};
|
|
63
|
-
SparkleCard.style = cardCss;
|
|
64
|
-
|
|
65
|
-
const cardsCss = "sparkle-cards{display:grid;font-size:12px;grid-template-columns:repeat(auto-fit, minmax(240px, 1fr));grid-gap:1.35rem}sparkle-cards>sparkle-card{font-size:inherit;max-width:none}sparkle-cards>sparkle-card.tall{grid-row:span 2}sparkle-cards>sparkle-card.wide{grid-column:span 2}sparkle-cards.prioritized>sparkle-card:nth-child(-n+5){font-size:1.25em}sparkle-cards.prioritized>sparkle-card:first-child{grid-row:span 2}sparkle-cards.max-measure>sparkle-card{max-width:50%}";
|
|
66
|
-
|
|
67
|
-
const SparkleCards = class {
|
|
68
|
-
constructor(hostRef) {
|
|
69
|
-
index.registerInstance(this, hostRef);
|
|
70
|
-
}
|
|
71
|
-
render() {
|
|
72
|
-
return index.h("slot", null);
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
SparkleCards.style = cardsCss;
|
|
76
|
-
|
|
77
|
-
const sparkleGoalItemCss = ":host{display:block}.Card-content{padding-top:8px}.goal-header{display:flex;justify-content:flex-end;margin-top:-40px !important}";
|
|
78
|
-
|
|
79
|
-
const SparkleGoalItem = class {
|
|
80
|
-
constructor(hostRef) {
|
|
81
|
-
index.registerInstance(this, hostRef);
|
|
82
|
-
}
|
|
83
|
-
render() {
|
|
84
|
-
return (index.h(index.Host, null, index.h("sparkle-card", { header: this.goal.Name, icon: this.goal.CategoryIcon }, index.h("div", { class: "goal-header" }, index.h("ion-button", { size: "small", color: "primary", onClick: () => this.onEditGoal() }, "Edit")), index.h("p", null, this.goal.Description), index.h("sparkle-goal-progress", { percentage: this.goal.Percentage.toString() }))));
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
SparkleGoalItem.style = sparkleGoalItemCss;
|
|
88
|
-
|
|
89
|
-
exports.sparkle_card = SparkleCard;
|
|
90
|
-
exports.sparkle_cards = SparkleCards;
|
|
91
|
-
exports.sparkle_goal_item = SparkleGoalItem;
|