@biggive/components 202501170933.0.0 → 202501311659.0.0
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/biggive/assets/images/triangles-combined-small-charity-week-white.svg +4 -0
- package/dist/biggive/assets/images/triangles-combined-small-charity-week.svg +5 -0
- package/dist/biggive/biggive.esm.js +1 -1
- package/dist/biggive/biggive.esm.js.map +1 -1
- package/dist/biggive/p-00e10f28.entry.js +2 -0
- package/dist/biggive/{p-e2d84fe2.entry.js.map → p-00e10f28.entry.js.map} +1 -1
- package/dist/biggive/p-22982c55.js +3 -0
- package/dist/biggive/p-22982c55.js.map +1 -0
- package/dist/biggive/p-3ebd7e1a.entry.js +2 -0
- package/dist/biggive/{p-f0b40214.entry.js.map → p-3ebd7e1a.entry.js.map} +1 -1
- package/dist/biggive/p-43eb6031.entry.js +2 -0
- package/dist/biggive/p-43eb6031.entry.js.map +1 -0
- package/dist/biggive/p-5e11248f.entry.js +2 -0
- package/dist/biggive/{p-f7a53e18.entry.js.map → p-5e11248f.entry.js.map} +1 -1
- package/dist/biggive/p-73547dd5.entry.js +2 -0
- package/dist/biggive/p-790bb750.entry.js +2 -0
- package/dist/biggive/{p-c964fd9f.entry.js.map → p-790bb750.entry.js.map} +1 -1
- package/dist/biggive/p-84503f9e.entry.js +2 -0
- package/dist/biggive/{p-257dc505.entry.js.map → p-84503f9e.entry.js.map} +1 -1
- package/dist/biggive/p-98b6c187.entry.js +2 -0
- package/dist/biggive/{p-9f09fec7.entry.js.map → p-98b6c187.entry.js.map} +1 -1
- package/dist/biggive/{p-7459c28f.entry.js → p-abebbe13.entry.js} +2 -2
- package/dist/biggive/p-aefad0be.entry.js +2 -0
- package/dist/biggive/p-b81cd5c7.entry.js +2 -0
- package/dist/biggive/{p-62791aae.entry.js.map → p-b81cd5c7.entry.js.map} +1 -1
- package/dist/biggive/p-cd72ee46.entry.js +2 -0
- package/dist/biggive/{p-4d544ada.entry.js.map → p-cd72ee46.entry.js.map} +1 -1
- package/dist/biggive/p-d3f4fd20.entry.js +2 -0
- package/dist/biggive/p-dffdc840.entry.js +2 -0
- package/dist/biggive/{p-6684c3f7.entry.js.map → p-dffdc840.entry.js.map} +1 -1
- package/dist/biggive/p-e105d02b.entry.js +2 -0
- package/dist/biggive/{p-f3843702.entry.js.map → p-e105d02b.entry.js.map} +1 -1
- package/dist/biggive/{p-6eb68ed6.entry.js → p-f6ee342f.entry.js} +2 -2
- package/dist/cjs/biggive-accordion_38.cjs.entry.js +45 -44
- package/dist/cjs/biggive-accordion_38.cjs.entry.js.map +1 -1
- package/dist/cjs/biggive-article-card.cjs.entry.js +2 -2
- package/dist/cjs/biggive-article-card.cjs.entry.js.map +1 -1
- package/dist/cjs/biggive-basic-card.cjs.entry.js +2 -2
- package/dist/cjs/biggive-basic-card.cjs.entry.js.map +1 -1
- package/dist/cjs/biggive-beneficiary-icon.cjs.entry.js +2 -2
- package/dist/cjs/biggive-beneficiary-icon.cjs.entry.js.map +1 -1
- package/dist/cjs/biggive-biography-card.cjs.entry.js +2 -2
- package/dist/cjs/biggive-biography-card.cjs.entry.js.map +1 -1
- package/dist/cjs/biggive-boxed-content.cjs.entry.js +2 -2
- package/dist/cjs/biggive-boxed-content.cjs.entry.js.map +1 -1
- package/dist/cjs/biggive-category-icon.cjs.entry.js +2 -2
- package/dist/cjs/biggive-category-icon.cjs.entry.js.map +1 -1
- package/dist/cjs/biggive-container-card.cjs.entry.js +2 -2
- package/dist/cjs/biggive-container-card.cjs.entry.js.map +1 -1
- package/dist/cjs/biggive-cookie-banner.cjs.entry.js +2 -2
- package/dist/cjs/biggive-cookie-banner.cjs.entry.js.map +1 -1
- package/dist/cjs/biggive-form.cjs.entry.js +1 -1
- package/dist/cjs/biggive-icon-group.cjs.entry.js +1 -1
- package/dist/cjs/biggive-image-card.cjs.entry.js +2 -2
- package/dist/cjs/biggive-image-card.cjs.entry.js.map +1 -1
- package/dist/cjs/biggive-nav-group.cjs.entry.js +2 -2
- package/dist/cjs/biggive-nav-item.cjs.entry.js +2 -2
- package/dist/cjs/biggive-table.cjs.entry.js +4 -4
- package/dist/cjs/biggive-table.cjs.entry.js.map +1 -1
- package/dist/cjs/biggive-video.cjs.entry.js +2 -2
- package/dist/cjs/biggive.cjs.js +3 -3
- package/dist/cjs/biggive.cjs.js.map +1 -1
- package/dist/cjs/{index-e6b3a940.js → index-c57c3e85.js} +1152 -1111
- package/dist/cjs/index-c57c3e85.js.map +1 -0
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/collection/assets/images/triangles-combined-small-charity-week-white.svg +4 -0
- package/dist/collection/assets/images/triangles-combined-small-charity-week.svg +5 -0
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/biggive-accordion/biggive-accordion.css +14 -0
- package/dist/collection/components/biggive-accordion/biggive-accordion.js +2 -2
- package/dist/collection/components/biggive-article-card/biggive-article-card.css +22 -0
- package/dist/collection/components/biggive-article-card/biggive-article-card.js +6 -6
- package/dist/collection/components/biggive-basic-card/biggive-basic-card.css +14 -0
- package/dist/collection/components/biggive-basic-card/biggive-basic-card.js +4 -4
- package/dist/collection/components/biggive-beneficiary-icon/biggive-beneficiary-icon.css +9 -0
- package/dist/collection/components/biggive-biography-card/biggive-biography-card.css +31 -0
- package/dist/collection/components/biggive-biography-card/biggive-biography-card.js +2 -2
- package/dist/collection/components/biggive-boxed-content/biggive-boxed-content.css +5 -0
- package/dist/collection/components/biggive-button/biggive-button.css +24 -0
- package/dist/collection/components/biggive-call-to-action/biggive-call-to-action.css +5 -0
- package/dist/collection/components/biggive-category-icon/biggive-category-icon.css +9 -0
- package/dist/collection/components/biggive-container-card/biggive-container-card.css +14 -0
- package/dist/collection/components/biggive-container-card/biggive-container-card.js +3 -3
- package/dist/collection/components/biggive-cookie-banner/biggive-cookie-banner.css +14 -0
- package/dist/collection/components/biggive-footer/biggive-footer.css +3 -0
- package/dist/collection/components/biggive-footer/biggive-footer.js +22 -1
- package/dist/collection/components/biggive-footer/biggive-footer.js.map +1 -1
- package/dist/collection/components/biggive-formatted-text/biggive-formatted-text.css +5 -0
- package/dist/collection/components/biggive-generic-icon/biggive-generic-icon.css +9 -0
- package/dist/collection/components/biggive-generic-icon/biggive-generic-icon.js +2 -2
- package/dist/collection/components/biggive-heading/biggive-heading.css +6 -0
- package/dist/collection/components/biggive-heading/biggive-heading.js +2 -2
- package/dist/collection/components/biggive-hero-image/biggive-hero-image.css +8 -0
- package/dist/collection/components/biggive-hero-image/biggive-hero-image.js +5 -5
- package/dist/collection/components/biggive-icon-button/biggive-icon-button.css +16 -0
- package/dist/collection/components/biggive-icon-button/biggive-icon-button.js +3 -3
- package/dist/collection/components/biggive-image-button/biggive-image-button.css +13 -0
- package/dist/collection/components/biggive-image-button/biggive-image-button.js +3 -3
- package/dist/collection/components/biggive-image-card/biggive-image-card.css +14 -0
- package/dist/collection/components/biggive-image-card/biggive-image-card.js +2 -2
- package/dist/collection/components/biggive-image-feature/biggive-image-feature.css +5 -0
- package/dist/collection/components/biggive-main-menu/biggive-main-menu.css +3 -0
- package/dist/collection/components/biggive-main-menu/biggive-main-menu.js +5 -5
- package/dist/collection/components/biggive-main-menu/biggive-main-menu.js.map +1 -1
- package/dist/collection/components/biggive-misc-icon/biggive-misc-icon.css +9 -0
- package/dist/collection/components/biggive-misc-icon/biggive-misc-icon.js +1 -1
- package/dist/collection/components/biggive-nav-group/biggive-nav-group.js +1 -1
- package/dist/collection/components/biggive-nav-item/biggive-nav-item.js +1 -1
- package/dist/collection/components/biggive-page-column/biggive-page-column.js +1 -1
- package/dist/collection/components/biggive-page-columns/biggive-page-columns.js +1 -1
- package/dist/collection/components/biggive-page-section/biggive-page-section.css +8 -0
- package/dist/collection/components/biggive-page-section/biggive-page-section.js +2 -2
- package/dist/collection/components/biggive-popup/biggive-popup.js +1 -1
- package/dist/collection/components/biggive-quote/biggive-quote.css +8 -0
- package/dist/collection/components/biggive-quote/biggive-quote.js +3 -3
- package/dist/collection/components/biggive-sheet/biggive-sheet.css +17 -0
- package/dist/collection/components/biggive-sheet/biggive-sheet.js +3 -3
- package/dist/collection/components/biggive-social-icon/biggive-social-icon.css +9 -0
- package/dist/collection/components/biggive-social-icon/biggive-social-icon.js +1 -1
- package/dist/collection/components/biggive-tab/biggive-tab.js +1 -1
- package/dist/collection/components/biggive-tabbed-content/biggive-tabbed-content.css +24 -0
- package/dist/collection/components/biggive-tabbed-content/biggive-tabbed-content.js +8 -8
- package/dist/collection/components/biggive-table/biggive-table.css +21 -0
- package/dist/collection/components/biggive-table/biggive-table.js +6 -6
- package/dist/collection/components/biggive-text-input/biggive-text-input.js +1 -1
- package/dist/collection/components/biggive-timeline/biggive-timeline.css +38 -0
- package/dist/collection/components/biggive-timeline/biggive-timeline.js +13 -13
- package/dist/collection/components/biggive-totalizer/biggive-totalizer.css +10 -0
- package/dist/collection/components/biggive-totalizer/biggive-totalizer.js +1 -1
- package/dist/collection/components/biggive-totalizer-ticker-item/biggive-totalizer-ticker-item.js +1 -1
- package/dist/collection/components/biggive-video/biggive-video.js +1 -1
- package/dist/collection/components/biggive-video-feature/biggive-video-feature.css +5 -0
- package/dist/collection/components/biggive-video-feature/biggive-video-feature.js +1 -1
- package/dist/collection/globals/brand-colour.js.map +1 -1
- package/dist/components/biggive-accordion.js +1 -1
- package/dist/components/biggive-accordion.js.map +1 -1
- package/dist/components/biggive-article-card.js +1 -1
- package/dist/components/biggive-article-card.js.map +1 -1
- package/dist/components/biggive-basic-card.js +1 -1
- package/dist/components/biggive-basic-card.js.map +1 -1
- package/dist/components/biggive-beneficiary-icon.js +1 -1
- package/dist/components/biggive-beneficiary-icon.js.map +1 -1
- package/dist/components/biggive-biography-card.js +1 -1
- package/dist/components/biggive-biography-card.js.map +1 -1
- package/dist/components/biggive-boxed-content.js +1 -1
- package/dist/components/biggive-boxed-content.js.map +1 -1
- package/dist/components/biggive-button2.js +1 -1
- package/dist/components/biggive-button2.js.map +1 -1
- package/dist/components/biggive-call-to-action.js +1 -1
- package/dist/components/biggive-call-to-action.js.map +1 -1
- package/dist/components/biggive-category-icon.js +1 -1
- package/dist/components/biggive-category-icon.js.map +1 -1
- package/dist/components/biggive-container-card.js +1 -1
- package/dist/components/biggive-container-card.js.map +1 -1
- package/dist/components/biggive-cookie-banner.js +1 -1
- package/dist/components/biggive-cookie-banner.js.map +1 -1
- package/dist/components/biggive-footer.js +4 -2
- package/dist/components/biggive-footer.js.map +1 -1
- package/dist/components/biggive-formatted-text.js +1 -1
- package/dist/components/biggive-formatted-text.js.map +1 -1
- package/dist/components/biggive-generic-icon2.js +1 -1
- package/dist/components/biggive-generic-icon2.js.map +1 -1
- package/dist/components/biggive-heading.js +1 -1
- package/dist/components/biggive-heading.js.map +1 -1
- package/dist/components/biggive-hero-image.js +1 -1
- package/dist/components/biggive-hero-image.js.map +1 -1
- package/dist/components/biggive-icon-button.js +1 -1
- package/dist/components/biggive-icon-button.js.map +1 -1
- package/dist/components/biggive-image-button.js +1 -1
- package/dist/components/biggive-image-button.js.map +1 -1
- package/dist/components/biggive-image-card.js +1 -1
- package/dist/components/biggive-image-card.js.map +1 -1
- package/dist/components/biggive-image-feature.js +1 -1
- package/dist/components/biggive-image-feature.js.map +1 -1
- package/dist/components/biggive-main-menu.js +5 -5
- package/dist/components/biggive-main-menu.js.map +1 -1
- package/dist/components/biggive-misc-icon2.js +2 -2
- package/dist/components/biggive-misc-icon2.js.map +1 -1
- package/dist/components/biggive-nav-group.js +1 -1
- package/dist/components/biggive-nav-item.js +1 -1
- package/dist/components/biggive-page-column.js +1 -1
- package/dist/components/biggive-page-columns.js +1 -1
- package/dist/components/biggive-page-section.js +3 -3
- package/dist/components/biggive-page-section.js.map +1 -1
- package/dist/components/biggive-popup2.js +1 -1
- package/dist/components/biggive-quote.js +2 -2
- package/dist/components/biggive-quote.js.map +1 -1
- package/dist/components/biggive-sheet.js +2 -2
- package/dist/components/biggive-sheet.js.map +1 -1
- package/dist/components/biggive-social-icon2.js +2 -2
- package/dist/components/biggive-social-icon2.js.map +1 -1
- package/dist/components/biggive-tab.js +1 -1
- package/dist/components/biggive-tabbed-content.js +3 -3
- package/dist/components/biggive-tabbed-content.js.map +1 -1
- package/dist/components/biggive-table.js +3 -3
- package/dist/components/biggive-table.js.map +1 -1
- package/dist/components/biggive-text-input.js +1 -1
- package/dist/components/biggive-timeline.js +3 -3
- package/dist/components/biggive-timeline.js.map +1 -1
- package/dist/components/biggive-totalizer-ticker-item.js +1 -1
- package/dist/components/biggive-totalizer.js +2 -2
- package/dist/components/biggive-totalizer.js.map +1 -1
- package/dist/components/biggive-video-feature.js +2 -2
- package/dist/components/biggive-video-feature.js.map +1 -1
- package/dist/components/biggive-video.js +1 -1
- package/dist/esm/biggive-accordion_38.entry.js +45 -44
- package/dist/esm/biggive-accordion_38.entry.js.map +1 -1
- package/dist/esm/biggive-article-card.entry.js +2 -2
- package/dist/esm/biggive-article-card.entry.js.map +1 -1
- package/dist/esm/biggive-basic-card.entry.js +2 -2
- package/dist/esm/biggive-basic-card.entry.js.map +1 -1
- package/dist/esm/biggive-beneficiary-icon.entry.js +2 -2
- package/dist/esm/biggive-beneficiary-icon.entry.js.map +1 -1
- package/dist/esm/biggive-biography-card.entry.js +2 -2
- package/dist/esm/biggive-biography-card.entry.js.map +1 -1
- package/dist/esm/biggive-boxed-content.entry.js +2 -2
- package/dist/esm/biggive-boxed-content.entry.js.map +1 -1
- package/dist/esm/biggive-category-icon.entry.js +2 -2
- package/dist/esm/biggive-category-icon.entry.js.map +1 -1
- package/dist/esm/biggive-container-card.entry.js +2 -2
- package/dist/esm/biggive-container-card.entry.js.map +1 -1
- package/dist/esm/biggive-cookie-banner.entry.js +2 -2
- package/dist/esm/biggive-cookie-banner.entry.js.map +1 -1
- package/dist/esm/biggive-form.entry.js +1 -1
- package/dist/esm/biggive-icon-group.entry.js +1 -1
- package/dist/esm/biggive-image-card.entry.js +2 -2
- package/dist/esm/biggive-image-card.entry.js.map +1 -1
- package/dist/esm/biggive-nav-group.entry.js +2 -2
- package/dist/esm/biggive-nav-item.entry.js +2 -2
- package/dist/esm/biggive-table.entry.js +4 -4
- package/dist/esm/biggive-table.entry.js.map +1 -1
- package/dist/esm/biggive-video.entry.js +2 -2
- package/dist/esm/biggive.js +4 -4
- package/dist/esm/biggive.js.map +1 -1
- package/dist/esm/{index-501730c4.js → index-a7be7e08.js} +1152 -1111
- package/dist/esm/index-a7be7e08.js.map +1 -0
- package/dist/esm/loader.js +3 -3
- package/dist/types/components/biggive-footer/biggive-footer.d.ts +1 -0
- package/dist/types/components/biggive-main-menu/biggive-main-menu.d.ts +1 -1
- package/dist/types/components.d.ts +4 -2
- package/dist/types/globals/brand-colour.d.ts +1 -1
- package/hydrate/index.js +1077 -1043
- package/hydrate/index.mjs +1077 -1043
- package/package.json +2 -2
- package/dist/biggive/p-05d6cfa4.entry.js +0 -2
- package/dist/biggive/p-14df7401.entry.js +0 -2
- package/dist/biggive/p-257dc505.entry.js +0 -2
- package/dist/biggive/p-4d544ada.entry.js +0 -2
- package/dist/biggive/p-62791aae.entry.js +0 -2
- package/dist/biggive/p-6684c3f7.entry.js +0 -2
- package/dist/biggive/p-8c6c1385.entry.js +0 -2
- package/dist/biggive/p-8c6c1385.entry.js.map +0 -1
- package/dist/biggive/p-972e8b70.entry.js +0 -2
- package/dist/biggive/p-9f09fec7.entry.js +0 -2
- package/dist/biggive/p-c964fd9f.entry.js +0 -2
- package/dist/biggive/p-e2d84fe2.entry.js +0 -2
- package/dist/biggive/p-e5a29e75.js +0 -3
- package/dist/biggive/p-e5a29e75.js.map +0 -1
- package/dist/biggive/p-f0b40214.entry.js +0 -2
- package/dist/biggive/p-f3843702.entry.js +0 -2
- package/dist/biggive/p-f7a53e18.entry.js +0 -2
- package/dist/cjs/index-e6b3a940.js.map +0 -1
- package/dist/esm/index-501730c4.js.map +0 -1
- /package/dist/biggive/{p-972e8b70.entry.js.map → p-73547dd5.entry.js.map} +0 -0
- /package/dist/biggive/{p-7459c28f.entry.js.map → p-abebbe13.entry.js.map} +0 -0
- /package/dist/biggive/{p-14df7401.entry.js.map → p-aefad0be.entry.js.map} +0 -0
- /package/dist/biggive/{p-05d6cfa4.entry.js.map → p-d3f4fd20.entry.js.map} +0 -0
- /package/dist/biggive/{p-6eb68ed6.entry.js.map → p-f6ee342f.entry.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["biggiveAccordionCss","BiggiveAccordionStyle0","BiggiveAccordion","constructor","hostRef","this","spaceBelow","textColour","headingColour","componentWillLoad","children","Array","from","host","toggleSection","e","target","entry","closest","arrow","querySelector","classList","contains","remove","setAttribute","add","render","h","key","class","undefined","map","onClick","title","heading","width","height","viewBox","fill","xmlns","d","stroke","innerHTML","biggiveAccordionEntryCss","BiggiveAccordionEntryStyle0","BiggiveAccordionEntry","biggiveBackToTopCss","BiggiveBackToTopStyle0","BiggiveBackToTop","href","src","getAssetPath","biggiveBrandedImageCss","BiggiveBrandedImageStyle0","BiggiveBrandedImage","imageUrl","logoUrl","slug","style","charityName","charityLocation","biggiveButtonCss","BiggiveButtonStyle0","BiggiveButton","colourScheme","label","openInNewTab","fullWidth","size","rounded","centered","buttonId","handleButtonClick","event","doButtonClick","emit","url","parentElement","role","id","toString","biggiveCallToActionCss","BiggiveCallToActionStyle0","BiggiveCallToAction","spaceAbove","defaultTextColour","slugSize","slugColour","mainTitleColour","mainTitleSize","subtitleSize","subtitleColour","teaserColour","primaryButtonColourScheme","secondaryButtonColourScheme","mainTitle","subtitle","teaser","primaryButtonLabel","primaryButtonUrl","secondaryButtonLabel","secondaryButtonUrl","biggiveCampaignCardCss","BiggiveCampaignCardStyle0","BiggiveCampaignCard","donateButtonLabel","donateButtonColourScheme","moreInfoButtonLabel","moreInfoButtonColourScheme","isFutureCampaign","isPastCampaign","handleCardGeneralClick","doCardGeneralClick","moreInfoButtonUrl","isEmpty","value","campaignType","banner","campaignTitle","organisationName","primaryFigureAmount","secondaryFigureAmount","primaryFigureLabel","secondaryFigureLabel","progressBarCounter","counter","icon","datetime","donateButtonUrl","biggiveCampaignCardFilterGridCss","BiggiveCampaignCardFilterGridStyle0","sortOptionLabels","relevance","amountRaised","leastRaised","closeToTarget","matchFundsRemaining","BiggiveCampaignCardFilterGrid","sortByPlaceholderText","beneficiariesPlaceHolderText","categoriesPlaceHolderText","locationsPlaceHolderText","newSelectedFilterCategory","newSelectedFilterBeneficiary","newSelectedFilterLocation","intro","searchText","placeholderText","buttonText","selectedFilterCategory","selectedFilterBeneficiary","selectedFilterLocation","categoryFilterSelectionChanged","beneficiarySelectionChanged","locationSelectionChanged","sortBySelectionChanged","selectedSortByOption","doSearchAndFilterUpdate","getSearchAndFilterObject","handleApplyFilterButtonClick","_a","_b","_c","searchAndFilterObj","filterPopup","_d","el","shadowRoot","getElementById","closeFromOutside","filtersApplied","filterBeneficiary","filterCategory","filterLocation","handleSearchButtonPressed","unfocusTextInput","hasSearchTerm","handleSearchTextChanged","handleEnterPressed","ev","handleFilterButtonClick","openFromOutside","handleClearAll","initialSortByOption","forEach","theEl","selectedValue","selectedLabel","selectedFilters","querySelectorAll","button","sortBy","unfocusInputs","removeFilter","filterKey","exhaustiveSwitch","console","error","selectEl","input","blur","componentWillRender","sortOptions","getSortOptions","faMagnifyingGlass","type","placeholder","onInput","onKeyDown","backgroundColour","prompt","options","optionsToArray","categoryOptions","selectionChanged","beneficiaryOptions","locationOptions","getSelectedValue","length","name","sortByOption","selected","filter","option","toLowerCase","sortOptionKeys","Object","getOwnPropertyNames","relevantOptionKeys","JSON","parse","isArray","entries","biggiveCampaignHighlightsCss","BiggiveCampaignHighlightsStyle0","BiggiveCampaignHighlights","primaryStatIcon","primaryStatText","secondaryStatIcon","secondaryStatText","championName","championUrl","makeURL","urlType","urlPrefix","relativeUrl","startsWith","prefixType","Error","biggiveFooterCss","BiggiveFooterStyle0","BiggiveFooter","headingLevel","smallCharityWeekEnabled","year","Date","getFullYear","usePresetFooter","appendMenu","menuName","node","appendChild","componentDidRender","HeadingTag","slotBasedFooter","alt","presetFooter","slot","blogUrlPrefix","donateUrlPrefix","service","wide","biggiveFormFieldSelectCss","BiggiveFormFieldSelectStyle0","BiggiveFormFieldSelect","selectStyle","selectedOptionColour","doOptionSelectCompletedHandler","greyIfRequired","formatOptions","onChange","biggiveFormattedTextCss","BiggiveFormattedTextStyle0","BiggiveFormattedText","maxWidth","biggiveGenericIconCss","BiggiveGenericIconStyle0","BiggiveGenericIcon","iconColour","getIconDefinition","iconDefinition","iconGroup","FontAwesomeIconsService","getBeneficiaryIcon","getMiscIcon","getSocialIcon","getCategoryIcon","biggiveGridCss","BiggiveGridStyle0","BiggiveGrid","columnCount","spaceBetween","columnGap","biggiveHeadingCss","BiggiveHeadingStyle0","BiggiveHeading","colour","htmlElement","align","text","Tag","biggiveHeroImageCss","BiggiveHeroImageStyle0","BiggiveHeroImage","logo","logoHeight","logoAltText","mainImage","mainImageShape","mainImageAlignHorizontal","mainImageAlignVertical","buttonColourScheme","mainTitleClasses","teaserClasses","buttonLabel","teaserLines","lineBreakToBr","buttonUrl","string","split","line","flat","slice","biggiveIconButtonCss","BiggiveIconButtonStyle0","BiggiveIconButton","backgroundPadding","arrowColour","circle","shadow","biggiveImageCss","BiggiveImageStyle0","BiggiveImage","imageAltText","sizeUnit","getWidth","getHeight","biggiveImageButtonCss","BiggiveImageButtonStyle0","BiggiveImageButton","imageStyle","backgroundImage","biggiveImageFeatureCss","BiggiveImageFeatureStyle0","BiggiveImageFeature","biggiveMainMenuCss","BiggiveMainMenuStyle0","BiggiveMainMenu","lastScrollHeight","experienceUrlPrefix","someCampaignHasHomePageRedirect","isLoggedIn","openMobileMenu","mobileMenu","left","logOut","logoutClicked","closeMobileMenu","closeMobileMenuFromOutside","noNav","preventDefault","setHeaderSize","scrollHeight","isNaN","Math","max","document","body","paddingTop","min","componentDidLoad","window","addEventListener","subMenuElements","closeAllSubMenus","except","subMenuElement","link","subMenuLink","onclick","subMenuArrow","toggle","subSubMenuElements","subSubMenuElement","subSubMenuLink","getSecondaryNavLinks","layout","chevronIconColour","chevronBackgroundColour","homePageLink","secondaryNavLinksForDesktop","secondaryNavLinksForMobile","Host","version","x","y","biggiveMiscIconCss","BiggiveMiscIconStyle0","BiggiveMiscIcon","biggivePageColumnCss","BiggivePageColumnStyle0","BiggivePageColumn","biggivePageColumnsCss","BiggivePageColumnsStyle0","BiggivePageColumns","biggivePageSectionCss","BiggivePageSectionStyle0","BiggivePageSection","sectionStyleTop","sectionStyleBottom","primaryFullBleed","biggivePopupCss","BiggivePopupStyle0","BiggivePopup","modalClosedCallback","closeFromWithin","popup","focus","ref","tabindex","biggiveProgressBarCss","BiggiveProgressBarStyle0","BiggiveProgressBar","biggiveQuoteCss","BiggiveQuoteStyle0","BiggiveQuote","quote","attribution","quoteIconColour","biggiveSheetCss","BiggiveSheetStyle0","BiggiveSheet","sheetId","closeSheet","history","pushState","location","pathname","openSheet","hash","biggiveSocialIconCss","BiggiveSocialIconStyle0","BiggiveSocialIcon","labelPrefix","rel","biggiveTabCss","BiggiveTabStyle0","BiggiveTab","tabTitle","biggiveTabbedContentCss","BiggiveTabbedContentStyle0","BiggiveTabbedContent","selectedTextColour","navigationHighlightColour","selectedNavigationHighlightColour","buttonBackgroundColour","buttonIconColour","scrollOffset","clickTabHandler","i","parent","showTab","clickPrevHandler","scrollTab","clickNextHandler","scrollContextTab","sleeveElement","scrollWidth","offsetWidth","display","tabs","j","tab","direction","sleeve","previousElementSibling","nextElementSibling","li","transitionDuration","transitionTimingFunction","transform","child","biggiveTextInputCss","BiggiveTextInputStyle0","BiggiveTextInput","currencySymbol","currency","clear","nativeInput","sleave","biggiveTimelineCss","BiggiveTimelineStyle0","BiggiveTimeline","entryBackgroundColour","entryHighlightColour","entryDateColour","entryTitleColour","entryTextColour","tabHeadings","date","substring","includes","push","currentTabTitle","getAttribute","biggiveTimelineEntryCss","BiggiveTimelineEntryStyle0","BiggiveTimelineEntry","biggiveTotalizerCss","BiggiveTotalizerStyle0","BiggiveTotalizer","lastWrapperWidth","primaryColour","primaryTextColour","secondaryColour","secondaryTextColour","setSpeed","itemsWidth","containerWidth","sleeves","ii","animationName","log","sleeveCount","setProperty","duration","round","animationDuration","animationDelay","wrapper","tickerItemsInternalWrapper","sleeve1","sleeve2","sleeve3","sleeve4","_e","setTimeout","cloneNode","clientWidth","mainMessage","biggiveTotalizerTickerItemCss","BiggiveTotalizerTickerItemStyle0","BiggiveTotalizerTickerItem","figure","biggiveVideoFeatureCss","BiggiveVideoFeatureStyle0","BiggiveVideoFeature","videoUrl","youtubeClass","VideoService","getEmbedHtml"],"sources":["src/components/biggive-accordion/biggive-accordion.scss?tag=biggive-accordion&encapsulation=shadow","src/components/biggive-accordion/biggive-accordion.tsx","src/components/biggive-accordion-entry/biggive-accordion-entry.scss?tag=biggive-accordion-entry&encapsulation=shadow","src/components/biggive-accordion-entry/biggive-accordion-entry.tsx","src/components/biggive-back-to-top/biggive-back-to-top.scss?tag=biggive-back-to-top&encapsulation=shadow","src/components/biggive-back-to-top/biggive-back-to-top.tsx","src/components/biggive-branded-image/biggive-branded-image.scss?tag=biggive-branded-image&encapsulation=shadow","src/components/biggive-branded-image/biggive-branded-image.tsx","src/components/biggive-button/biggive-button.scss?tag=biggive-button&encapsulation=shadow","src/components/biggive-button/biggive-button.tsx","src/components/biggive-call-to-action/biggive-call-to-action.scss?tag=biggive-call-to-action&encapsulation=shadow","src/components/biggive-call-to-action/biggive-call-to-action.tsx","src/components/biggive-campaign-card/biggive-campaign-card.scss?tag=biggive-campaign-card&encapsulation=shadow","src/components/biggive-campaign-card/biggive-campaign-card.tsx","src/components/biggive-campaign-card-filter-grid/biggive-campaign-card-filter-grid.scss?tag=biggive-campaign-card-filter-grid&encapsulation=shadow","src/components/biggive-campaign-card-filter-grid/biggive-campaign-card-filter-grid.tsx","src/components/biggive-campaign-highlights/biggive-campaign-highlights.scss?tag=biggive-campaign-highlights&encapsulation=shadow","src/components/biggive-campaign-highlights/biggive-campaign-highlights.tsx","src/util/helper-methods.ts","src/components/biggive-footer/biggive-footer.scss?tag=biggive-footer&encapsulation=shadow","src/components/biggive-footer/biggive-footer.tsx","src/components/biggive-form-field-select/biggive-form-field-select.scss?tag=biggive-form-field-select&encapsulation=shadow","src/components/biggive-form-field-select/biggive-form-field-select.tsx","src/components/biggive-formatted-text/biggive-formatted-text.scss?tag=biggive-formatted-text&encapsulation=shadow","src/components/biggive-formatted-text/biggive-formatted-text.tsx","src/components/biggive-generic-icon/biggive-generic-icon.scss?tag=biggive-generic-icon","src/components/biggive-generic-icon/biggive-generic-icon.tsx","src/components/biggive-grid/biggive-grid.scss?tag=biggive-grid&encapsulation=shadow","src/components/biggive-grid/biggive-grid.tsx","src/components/biggive-heading/biggive-heading.scss?tag=biggive-heading&encapsulation=shadow","src/components/biggive-heading/biggive-heading.tsx","src/components/biggive-hero-image/biggive-hero-image.scss?tag=biggive-hero-image&encapsulation=shadow","src/components/biggive-hero-image/biggive-hero-image.tsx","src/components/biggive-icon-button/biggive-icon-button.scss?tag=biggive-icon-button&encapsulation=shadow","src/components/biggive-icon-button/biggive-icon-button.tsx","src/components/biggive-image/biggive-image.scss?tag=biggive-image&encapsulation=shadow","src/components/biggive-image/biggive-image.tsx","src/components/biggive-image-button/biggive-image-button.scss?tag=biggive-image-button&encapsulation=shadow","src/components/biggive-image-button/biggive-image-button.tsx","src/components/biggive-image-feature/biggive-image-feature.scss?tag=biggive-image-feature&encapsulation=shadow","src/components/biggive-image-feature/biggive-image-feature.tsx","src/components/biggive-main-menu/biggive-main-menu.scss?tag=biggive-main-menu&encapsulation=shadow","src/components/biggive-main-menu/biggive-main-menu.tsx","src/components/biggive-misc-icon/biggive-misc-icon.scss?tag=biggive-misc-icon","src/components/biggive-misc-icon/biggive-misc-icon.tsx","src/components/biggive-page-column/biggive-page-column.scss?tag=biggive-page-column&encapsulation=shadow","src/components/biggive-page-column/biggive-page-column.tsx","src/components/biggive-page-columns/biggive-page-columns.scss?tag=biggive-page-columns&encapsulation=shadow","src/components/biggive-page-columns/biggive-page-columns.tsx","src/components/biggive-page-section/biggive-page-section.scss?tag=biggive-page-section&encapsulation=shadow","src/components/biggive-page-section/biggive-page-section.tsx","src/components/biggive-popup/biggive-popup.scss?tag=biggive-popup&encapsulation=shadow","src/components/biggive-popup/biggive-popup.tsx","src/components/biggive-progress-bar/biggive-progress-bar.scss?tag=biggive-progress-bar&encapsulation=shadow","src/components/biggive-progress-bar/biggive-progress-bar.tsx","src/components/biggive-quote/biggive-quote.scss?tag=biggive-quote&encapsulation=shadow","src/components/biggive-quote/biggive-quote.tsx","src/components/biggive-sheet/biggive-sheet.scss?tag=biggive-sheet&encapsulation=shadow","src/components/biggive-sheet/biggive-sheet.tsx","src/components/biggive-social-icon/biggive-social-icon.scss?tag=biggive-social-icon","src/components/biggive-social-icon/biggive-social-icon.tsx","src/components/biggive-tab/biggive-tab.scss?tag=biggive-tab&encapsulation=shadow","src/components/biggive-tab/biggive-tab.tsx","src/components/biggive-tabbed-content/biggive-tabbed-content.scss?tag=biggive-tabbed-content&encapsulation=shadow","src/components/biggive-tabbed-content/biggive-tabbed-content.tsx","src/components/biggive-text-input/biggive-text-input.scss?tag=biggive-text-input&encapsulation=shadow","src/components/biggive-text-input/biggive-text-input.tsx","src/components/biggive-timeline/biggive-timeline.scss?tag=biggive-timeline&encapsulation=shadow","src/components/biggive-timeline/biggive-timeline.tsx","src/components/biggive-timeline-entry/biggive-timeline-entry.scss?tag=biggive-timeline-entry&encapsulation=shadow","src/components/biggive-timeline-entry/biggive-timeline-entry.tsx","src/components/biggive-totalizer/biggive-totalizer.scss?tag=biggive-totalizer&encapsulation=shadow","src/components/biggive-totalizer/biggive-totalizer.tsx","src/components/biggive-totalizer-ticker-item/biggive-totalizer-ticker-item.scss?tag=biggive-totalizer-ticker-item&encapsulation=shadow","src/components/biggive-totalizer-ticker-item/biggive-totalizer-ticker-item.tsx","src/components/biggive-video-feature/biggive-video-feature.scss?tag=biggive-video-feature&encapsulation=shadow","src/components/biggive-video-feature/biggive-video-feature.tsx"],"sourcesContent":["@include spacers();\n@include text-colours();\n\n:host {\n display: contents;\n}\n\n.container {\n @include standard-font();\n position: relative;\n\n\n .entry {\n h3.heading {\n position: relative;\n margin: 25px 0 0 0;\n padding: 15px 60px 10px 20px;\n border-bottom: 1px solid $colour-black;\n cursor: pointer;\n span.arrow {\n display: block;\n position: absolute;\n right: 20px;\n top: 10px;\n width: 40px;\n height: 20px;\n text-align: center;\n }\n }\n .content {\n overflow: hidden;\n max-height: 0;\n padding: 0 20px;\n }\n &.expanded {\n .content {\n max-height: 100%;\n }\n span.arrow {\n transform: rotate(-180deg);\n }\n }\n }\n\n @each $key, $colour in $brandColoursIncBrand6Turquoise {\n &.heading-colour-#{$key} .entry h3.heading svg path { stroke: $colour; }\n &.heading-colour-#{$key} h3.heading { color: $colour; }\n &.text-colour-#{$key} .content { color: $colour; }\n }\n\n\n}\n\n\n","import { Component, Element, h, Prop, State } from '@stencil/core';\nimport { brandColour } from '../../globals/brand-colour';\nimport { spacingOption } from '../../globals/spacing-option';\n\n@Component({\n tag: 'biggive-accordion',\n styleUrl: 'biggive-accordion.scss',\n shadow: true,\n})\nexport class BiggiveAccordion {\n @Element() host: HTMLBiggiveAccordionElement;\n\n @Prop() spaceBelow: spacingOption = 0;\n\n @Prop() textColour: brandColour = 'black';\n\n @Prop() headingColour: brandColour = 'primary';\n\n @State() children: Array<HTMLBiggiveAccordionEntryElement>;\n\n componentWillLoad() {\n this.children = Array.from(this.host.children) as Array<HTMLBiggiveAccordionEntryElement>;\n }\n\n private toggleSection(e: MouseEvent) {\n const target = (e.target as Element)!;\n const entry = target.closest('.entry')!;\n const arrow = entry.querySelector('.arrow')!;\n\n if (entry.classList.contains('expanded')) {\n entry.classList.remove('expanded');\n arrow.setAttribute('title', 'Expand section');\n } else {\n entry.classList.add('expanded');\n arrow.setAttribute('title', 'Collapse section');\n }\n }\n\n render() {\n return (\n <div class={'container' + ' space-below-' + this.spaceBelow + ' text-colour-' + this.textColour + ' heading-colour-' + this.headingColour}>\n <div class=\"sleeve\">\n {this.children === undefined\n ? []\n : this.children.map(entry => (\n <div class=\"entry\">\n <h3 class=\"heading\" onClick={this.toggleSection} title=\"Expand section\">\n {entry.heading}\n <span class=\"arrow\">\n <svg width=\"15\" height=\"9\" viewBox=\"0 0 15 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14.1074 0.999859L7.55357 7.55371L0.999718 0.99986\" stroke=\"black\" stroke-width=\"2\" />\n </svg>\n </span>\n </h3>\n <div class=\"content\" innerHTML={entry.innerHTML}></div>\n </div>\n ))}\n </div>\n </div>\n );\n }\n}\n",":host {\n display: block;\n}\n","import { Component, Prop, Element } from '@stencil/core';\n\n@Component({\n tag: 'biggive-accordion-entry',\n styleUrl: 'biggive-accordion-entry.scss',\n shadow: true,\n})\nexport class BiggiveAccordionEntry {\n @Element() host: HTMLBiggiveAccordionEntryElement;\n\n @Prop() heading: string = '';\n\n render() {\n return null;\n }\n}\n",":host {\n display: contents;\n}\n\n\n.container {\n @include standard-font();\n margin: $spacer-4 0;\n text-align: center;\n a {\n display: inline-block;\n .text {\n display: block;\n }\n }\n}","import { Component, getAssetPath, h } from '@stencil/core';\n\n@Component({\n tag: 'biggive-back-to-top',\n styleUrl: 'biggive-back-to-top.scss',\n shadow: true,\n})\nexport class BiggiveBackToTop {\n render() {\n return (\n <div class=\"container\">\n <a href=\"#\">\n <img src={getAssetPath('/assets/images/triangles-combined.svg')} />\n <span class=\"text\">Back to top</span>\n </a>\n </div>\n );\n }\n}\n","@include image-alignment();\n@include spacers();\n\n:host {\n display: contents;\n}\n\n.container {\n @include standard-font();\n position: relative;\n .slug {\n text-align: center;\n font-weight: bold;\n background-color: $colour-secondary-green;\n color: $colour-black;\n padding: $spacer-1 $spacer-3;\n width: 100%;\n margin: -17px auto 17px auto;\n transform: translateY(50%);\n box-sizing: border-box;\n }\n\n img {\n width: 100%;\n }\n\n .logo-wrap {\n border-radius: 50%;\n width: 120px;\n height: 120px;\n transform: translateY(-50%);\n margin-top: 30px;\n margin-bottom: -30px; // Breathing space before charity name etc.\n background-size: contain;\n background-position: center center;\n background-repeat: no-repeat;\n background-color: #FFFFFF;\n\n @media screen and (max-width: $screen-tablet-max) {\n width: 100px;\n height: 100px;\n }\n\n @media screen and (max-width: $screen-mobile-max) {\n width: 70px;\n height: 70px;\n margin-top: 20px;\n }\n }\n\n #charityName {\n color: $colour-primary-blue;\n display: block;\n margin-bottom: 5px;\n width: fit-content; // so link doesn't go full width\n }\n\n #charityName, .charity-info {\n font-size: 17px;\n\n @media screen and (max-width: $screen-tablet-max) {\n font-size: 16px;\n }\n\n @media screen and (max-width: $screen-mobile-max) {\n font-size: 15px;\n }\n\n @media screen and (max-width: $screen-mobile-small) {\n font-size: 14px;\n }\n }\n}\n","import { Component, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'biggive-branded-image',\n styleUrl: 'biggive-branded-image.scss',\n shadow: true,\n})\nexport class BiggiveBrandedImage {\n /**\n * Space below component\n */\n @Prop() spaceBelow: number = 0;\n /**\n * Full URL of a image.\n */\n @Prop() imageUrl: string = '';\n\n /**\n * Full URL of the logo.\n */\n @Prop() logoUrl: string = '';\n\n /**\n * Slug\n */\n @Prop() slug: string;\n\n /**\n * Charity name\n */\n @Prop() charityName: string;\n\n /**\n * Charity location\n */\n @Prop() charityLocation: string;\n\n /**\n * Link to the charity's website\n * @deprecated We should stop passing this soon, and will link to charity URLs alongside socials.\n */\n @Prop() charityUrl: string;\n\n render() {\n return (\n <div class={'container space-below-' + this.spaceBelow}>\n {<div class=\"slug\">{this.slug}</div>}\n {this.imageUrl !== undefined && this.imageUrl !== null ? (\n <div class=\"image-wrap\">\n <img src={this.imageUrl} />\n </div>\n ) : null}\n {this.logoUrl !== undefined && this.logoUrl !== null ? <div class=\"logo-wrap\" style={{ 'background-image': \"url('\" + this.logoUrl + \"')\" }}></div> : null}\n\n {this.charityName !== undefined && this.charityName !== null ? <h3 class=\"title\">{this.charityName}</h3> : null}\n {this.charityLocation !== undefined && this.charityLocation !== null ? <div class=\"charity-info\">{this.charityLocation}</div> : null}\n </div>\n );\n }\n}\n","@include spacers();\n\n:host {\n display: contents;\n}\n\n.container {\n @include standard-font();\n a {\n display: inline-block;\n &.full-width-true {\n display: block;\n }\n }\n &.centered-true {\n text-align: center;\n }\n}\n\n.button {\n @include button();\n &.size-small {\n @include button-small();\n }\n\n &.button.rounded-true {\n @include button-rounded();\n }\n}\n// brand-6 color ambiguity (for now keeping its definition outside of the brand colors loop)\n.button-clear-brand-6 {\n color: $colour-brand-grey;\n background-color: transparent;\n text-decoration: underline;\n border: 0;\n padding-left: 0;\n padding-right: 0;\n &:hover {\n text-decoration: none;\n background-color: transparent;\n }\n}\n\n@each $brand, $colour in $colours {\n .button-#{$brand} {\n color: $colour-white; // may be overridden by following rules. Later CSS rules have priority.\n background-color: $colour;\n border-color: $colour;\n &:hover {\n color: $colour;\n background-color: $colour-white; // may be overriden by following rules\n }\n }\n}\n\n// not part of loop, 6 is deprecated\n.button-brand-6 {\n color: $colour-white;\n background-color: $colour-brand-grey;\n border-color: $colour-brand-grey;\n &:hover {\n background-color: $colour-black;\n }\n}\n\n.button-secondary {\n color: $colour-black;\n &:hover {\n color: $colour-black;\n background-color: $colour-white;\n border-color: $colour-black;\n }\n}\n\n.button-brand-4 {\n &:hover {\n background-color: $colour-black;\n }\n}\n\n.button-brand-grey {\n color: $colour-white;\n &:hover {\n background-color: $colour-black;\n }\n}\n\n.button-brand-mhf-turquoise {\n &:hover {\n background-color: $colour-black;\n }\n}\n\n.button-brand-afa-pink {\n &:hover {\n background-color: $colour-black;\n }\n}\n\n.button-white {\n color: $colour-primary-blue;\n &:hover {\n color: $colour-black;\n background-color: $colour-secondary-green;\n }\n}\n\n.button-black {\n color: $colour-white;\n &:hover {\n background-color: $colour-white;\n }\n}\n\n.button-grey-extra-light {\n color: $colour-black;\n &:hover {\n background-color: $colour-black;\n }\n}\n\n.button-grey-light {\n color: $colour-black;\n &:hover {\n background-color: $colour-black;\n }}\n\n.button-grey-medium {\n color: $colour-white;\n &:hover {\n background-color: $colour-white;\n }\n}\n\n.button-grey-dark {\n color: $colour-white;\n &:hover {\n background-color: $colour-white;\n }\n}\n\n.button-rounded {\n @include button-rounded();\n }\n\n @each $brand, $colour in $colours {\n .button-clear-#{$brand} {\n color: $colour;\n background-color: transparent;\n text-decoration: underline;\n border: 0;\n padding-left: 0;\n padding-right: 0;\n &:hover {\n color: $colour;\n text-decoration: none;\n background-color: transparent;\n }\n }\n}\n","import { Component, Event, EventEmitter, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'biggive-button',\n styleUrl: 'biggive-button.scss',\n shadow: true,\n})\nexport class BiggiveButton {\n @Event({\n eventName: 'doButtonClick',\n bubbles: true,\n cancelable: true,\n composed: true,\n })\n doButtonClick: EventEmitter<{ event: object; url: string }>;\n\n /**\n * Space below component\n */\n @Prop() spaceBelow: number = 1;\n\n /**\n * Colour Scheme\n */\n @Prop() colourScheme: string = 'primary';\n\n /**\n * Text\n */\n @Prop() label: string = 'Click me';\n\n /**\n * URL\n */\n @Prop() url: string | undefined;\n\n /**\n * New Tab\n */\n @Prop() openInNewTab: boolean = false;\n\n /**\n * Display full width\n */\n @Prop() fullWidth: boolean = false;\n\n /**\n * Size\n */\n @Prop() size: string = 'medium';\n\n /**\n * Rounded corners\n */\n @Prop() rounded: boolean = false;\n\n /**\n * Centered\n */\n @Prop() centered: boolean = false;\n\n @Prop() buttonId: undefined | string = undefined;\n\n private handleButtonClick = (event: any) => {\n this.doButtonClick.emit({ event: event, url: event.target.parentElement.href });\n };\n\n render() {\n // We always want to have a href so that browsers will see this as a link and allow clicking with keybard.\n // If there's no or an empty href then it isn't possible to click by keyboard and we would have to handle keyboard\n // interaction separately.\n const href = this.url || 'javascript:void(0);';\n\n return (\n <div class={'container space-below-' + this.spaceBelow + ' centered-' + this.centered}>\n <a\n role=\"button\"\n href={href}\n target={this.openInNewTab ? '_blank' : '_self'}\n id={this.buttonId}\n class={'button button-' + this.colourScheme + ' full-width-' + this.fullWidth.toString() + ' size-' + this.size + ' rounded-' + this.rounded.toString()}\n >\n <span onClick={this.handleButtonClick}>{this.label}</span>\n </a>\n </div>\n );\n }\n}\n","@include headings();\n@include spacers();\n@include text-colours();\n\n:host {\n display: contents;\n @include standard-font();\n}\n\n.container {\n @include section-container();\n position: relative;\n text-align: center;\n}\n\n\n.content-wrap {\n .slug {\n margin: 0;\n padding: 0;\n }\n h2 {\n margin: 0 0 $spacer-1 0;\n padding: 0;\n }\n .subtitle {\n margin: 0 0 $spacer-1 0;\n padding: 0;\n }\n .teaser {\n margin: $spacer-3 auto $spacer-3 auto;\n max-width: 400px;\n padding: 0;\n }\n}\n\n@media screen and (max-width: $screen-mobile-max) {\n .content-wrap {\n text-align: right\n }\n h2 {\n padding: 40px 0;\n }\n}\n","import { Component, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'biggive-call-to-action',\n styleUrl: 'biggive-call-to-action.scss',\n shadow: true,\n})\nexport class BiggiveCallToAction {\n /**\n * Space above component\n */\n @Prop() spaceAbove: number = 0;\n /**\n * Space below component\n */\n @Prop() spaceBelow: number = 0;\n /**\n * Default text colour\n */\n @Prop() defaultTextColour: string = 'primary';\n\n /**\n * Slug size\n */\n @Prop() slugSize: number = 4;\n /**\n * Slug colour\n */\n @Prop() slugColour: string = '';\n /**\n * Slug\n */\n @Prop() slug: string;\n\n /**\n * Main title colour\n */\n @Prop() mainTitleColour: string = '';\n /**\n * Main title size\n */\n @Prop() mainTitleSize: number = 2;\n /**\n * Main title\n */\n @Prop() mainTitle: string;\n\n /**\n * Main title size\n */\n @Prop() subtitleSize: number = 4;\n /**\n * Subtitle colour\n */\n @Prop() subtitleColour: string = '';\n\n /**\n * Subtitle\n */\n @Prop() subtitle: string;\n\n /**\n * Teaser colour\n */\n @Prop() teaserColour: string = '';\n\n /**\n * Teaser\n */\n @Prop() teaser: string;\n\n /**\n * Primary button Url\n */\n @Prop() primaryButtonUrl: string;\n\n /**\n * Primary button Label\n */\n @Prop() primaryButtonLabel: string;\n\n /**\n * Primary button Colour Scheme\n */\n @Prop() primaryButtonColourScheme: string = 'primary';\n\n /**\n * Secondary button Url\n */\n @Prop() secondaryButtonUrl: string;\n\n /**\n * Secondary button Label\n */\n @Prop() secondaryButtonLabel: string;\n\n /**\n * Secondary button Colour Scheme\n */\n @Prop() secondaryButtonColourScheme: string = 'primary';\n\n render() {\n return (\n <div class={'container text-colour-' + this.defaultTextColour + ' space-above-' + this.spaceAbove + ' space-below-' + this.spaceBelow}>\n <div class=\"sleeve\">\n <div class=\"content-wrap\">\n <div class={'slug heading-' + this.slugSize + ' text-colour-' + this.slugColour}>{this.slug}</div>\n <h2 class={'title heading-' + this.mainTitleSize + ' text-colour-' + this.mainTitleColour}>{this.mainTitle}</h2>\n <div class={'slug heading-' + this.subtitleSize + ' text-colour-' + this.subtitleColour}>{this.subtitle}</div>\n <div class={'teaser text-colour-' + this.teaserColour}>{this.teaser}</div>\n {this.primaryButtonLabel != null && this.primaryButtonUrl != null ? (\n <div class=\"button-wrap\">\n <biggive-button colour-scheme={this.primaryButtonColourScheme} url={this.primaryButtonUrl} label={this.primaryButtonLabel}></biggive-button>\n </div>\n ) : null}\n {this.secondaryButtonLabel != null && this.secondaryButtonUrl != null ? (\n <div class=\"button-wrap\">\n <biggive-button colour-scheme={this.secondaryButtonColourScheme} url={this.secondaryButtonUrl} label={this.secondaryButtonLabel}></biggive-button>\n </div>\n ) : null}\n </div>\n </div>\n </div>\n );\n }\n}\n","@include image-alignment();\n@include spacers();\n\n:host {\n display: contents;\n}\n\n* {\n //outline: 1px dotted red;\n}\n\n.container {\n @include flex-container-column();\n @include standard-font();\n @include lower-shadow();\n margin-right: 10px;\n margin-left: 10px;\n\n cursor: pointer; // Fallback click behaviour is to go to info URL.\n\n position: relative;\n height: 100%;\n background-color: $colour-white;\n padding: $spacer-3;\n box-sizing: border-box;\n .sleeve {\n @include flex-container-column();\n height: 100%;\n .above-button-wrap {\n // we want all the height variation to be inside this element, so that the button is always at the same position\n // right at the bottom of the card.\n flex-grow: 1;\n @include flex-container-column();\n .title-wrap {\n // and specifically we want the spare height to go under the charity name.\n flex-grow: 1;\n }\n }\n }\n .campaign-type {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n text-align: center;\n font-weight: bold;\n span {\n background-color: $colour-secondary-green;\n color: $colour-black;\n padding: $spacer-1 $spacer-3;\n display: inline-block;\n }\n }\n .banner {\n top: 0;\n margin-top: 19px;\n padding-bottom: $aspect-ratio-banners;\n background-color: #F1F1F1;\n background-size: contain;\n background-repeat: no-repeat;\n img {\n display: none;\n }\n }\n h3 {\n @include heading-4();\n }\n .button {\n display: block;\n }\n .organisation-name {\n margin-bottom: $spacer-4;\n color: $colour-primary-blue;\n }\n .meta-wrap {\n @include flex-container-row();\n margin-top: auto;\n margin-bottom: $spacer-3;\n .meta-item {\n width: calc( 50% - $spacer-3 );\n .label {\n @include font-size-x-small();\n display: block;\n }\n .text {\n @include heading-3();\n display: block;\n }\n &:last-child {\n text-align: right;\n .text {\n color: $colour-primary-blue;\n }\n }\n }\n }\n .progress-bar-wrap {\n padding-bottom: $spacer-2;\n margin-bottom: $spacer-2;\n border-bottom: 1px solid $colour-grey-light;\n }\n\n .msg-wrapper {\n display: flex;\n justify-content: center;\n\n biggive-misc-icon {\n margin-top: auto;\n margin-bottom: auto;\n }\n\n p {\n text-align: center;\n\n @media screen and (max-width: $screen-desktop-max) {\n font-size: 15px;\n }\n }\n }\n}\n","import { Component, Event, EventEmitter, h, Prop } from '@stencil/core';\n\n@Component({\n tag: 'biggive-campaign-card',\n styleUrl: 'biggive-campaign-card.scss',\n shadow: true,\n})\nexport class BiggiveCampaignCard {\n @Event({\n eventName: 'doCardGeneralClick',\n bubbles: true,\n cancelable: true,\n composed: true,\n })\n doCardGeneralClick: EventEmitter<{ event: object; url: string }>;\n\n /**\n * Space below component\n */\n @Prop() spaceBelow: number = 4;\n /**\n * e.g. \"Match Funded\".\n */\n @Prop() campaignType: string;\n\n /**\n * Full URL of a banner image.\n */\n @Prop() banner: string;\n\n /**\n * Display name of the charity's specific time-bound fundraising campaign.\n */\n @Prop() campaignTitle: string;\n\n /**\n * Display name of the charity or non-profit.\n */\n @Prop() organisationName: string;\n\n /**\n * Label for the primary figure – may be null or omitted for no label or if there's no figure.\n */\n @Prop() primaryFigureLabel: string | null;\n\n /**\n * Amount for the primary figure, formatted with currency symbol – null or omit to hide the figure & label.\n */\n @Prop() primaryFigureAmount: string | null;\n\n /**\n * Label for the secondary figure – may be null or omitted for no label or if there's no figure.\n */\n @Prop() secondaryFigureLabel: string | null;\n\n /**\n * Amount for the secondary figure, formatted with currency symbol – null or omit to hide the figure & label.\n */\n @Prop() secondaryFigureAmount: string | null;\n\n /**\n * Progress bar percentage – null or omit to hide the progress bar.\n */\n @Prop() progressBarCounter: number | null;\n\n /**\n * Donate button label\n */\n @Prop() donateButtonLabel: string = 'Donate now';\n\n /**\n * Donate button url\n */\n @Prop() donateButtonUrl: string;\n\n /**\n * Donate button colour scheme\n */\n @Prop() donateButtonColourScheme: string = 'primary';\n\n /**\n * More information button label\n */\n @Prop() moreInfoButtonLabel: string = 'Find out more';\n\n /**\n * More information button url\n */\n @Prop() moreInfoButtonUrl: string;\n\n /**\n * Donate button colour scheme\n */\n @Prop() moreInfoButtonColourScheme: string = 'clear-primary';\n\n /**\n * Boolean flag telling the component if the campaign is in the future (not open yet).\n */\n @Prop() isFutureCampaign: boolean = false;\n\n /**\n * Boolean flag telling the component if the campaign is in the future (not open yet).\n */\n @Prop() isPastCampaign: boolean = false;\n\n /**\n * To be used alongside isFutureCampaign = true or isPastCampaign = true.\n * If either is true, we render out: 'Launches: ' + datetime or 'Closed: ' + datetime.\n * Preferred format: DD/MM/YYYY, HH:MM\n * DON-661.\n */\n @Prop() datetime: string;\n\n private isEmpty(value?: number | string | null) {\n return value === undefined || value === null || value === '';\n }\n\n private handleCardGeneralClick = (event: any) => {\n this.doCardGeneralClick.emit({ event, url: this.moreInfoButtonUrl });\n };\n\n render() {\n return (\n <div class={'container space-below-' + this.spaceBelow.toString()}>\n <div class=\"sleeve\">\n <div onClick={this.handleCardGeneralClick} class=\"above-button-wrap\">\n {this.campaignType !== null ? (\n <div class=\"campaign-type\">\n <span>{this.campaignType}</span>\n </div>\n ) : null}\n\n {this.banner !== null && this.banner !== undefined ? (\n <div class=\"image-wrap banner\" role=\"presentation\" style={{ 'background-image': 'url(' + this.banner + ')' }}></div>\n ) : (\n <div class=\"image-wrap banner\"></div>\n )}\n\n <div class=\"title-wrap\">\n <h3>{this.campaignTitle}</h3>\n <div class=\"organisation-name\">By {this.organisationName}</div>\n </div>\n\n {this.isEmpty(this.primaryFigureAmount) && this.isEmpty(this.secondaryFigureAmount) ? null : (\n <div class=\"meta-wrap\">\n {this.isEmpty(this.primaryFigureAmount) ? null : (\n <div class=\"meta-item\">\n <span class=\"label\">{this.primaryFigureLabel}</span>\n <span class=\"text\">{this.primaryFigureAmount}</span>\n </div>\n )}\n {this.isEmpty(this.secondaryFigureAmount) ? null : (\n <div class=\"meta-item\">\n <span class=\"label\">{this.secondaryFigureLabel}</span>\n <span class=\"text\">{this.secondaryFigureAmount}</span>\n </div>\n )}\n </div>\n )}\n {this.isEmpty(this.progressBarCounter) ? null : (\n <div class=\"progress-bar-wrap\">\n <biggive-progress-bar counter={this.progressBarCounter} colour-scheme=\"primary\"></biggive-progress-bar>\n </div>\n )}\n </div>\n <div class=\"button-wrap\">\n {this.isFutureCampaign || this.isPastCampaign ? (\n <div class=\"msg-wrapper\">\n <biggive-misc-icon background-colour=\"white\" icon-colour=\"black\" icon=\"Timer\"></biggive-misc-icon>\n {this.isFutureCampaign ? <p>Launches {this.datetime}</p> : <p>Closed {this.datetime}</p>}\n </div>\n ) : (\n <biggive-button full-width=\"true\" colour-scheme={this.donateButtonColourScheme} url={this.donateButtonUrl} label={this.donateButtonLabel}></biggive-button>\n )}\n <biggive-button full-width=\"true\" colour-scheme={this.moreInfoButtonColourScheme} url={this.moreInfoButtonUrl} label={this.moreInfoButtonLabel}></biggive-button>\n </div>\n </div>\n </div>\n );\n }\n}\n","@include spacers();\n\n:host {\n display: content;\n}\n\n// Each select needs a higher z-index than the one below,\n// so that the drop-down part will occlude it.\n.select-wrapper-1, .select-wrapper-2, .select-wrapper-3, .select-wrapper-4 {\n position: relative;\n margin-top: 1em;\n}\n.select-wrapper-1 {\n z-index: 4;\n}\n.select-wrapper-2 {\n z-index: 3;\n}\n.select-wrapper-3 {\n z-index: 2;\n }\n.select-wrapper-4 {\n z-index: 1;\n}\n\n.container {\n @include standard-font();\n position: relative;\n .search-wrap {\n @include lower-shadow();\n background-color: $colour-white;\n padding: $spacer-3 $spacer-4;\n margin-bottom: $spacer-3;\n h4 {\n margin-bottom: $spacer-3;\n }\n .field-wrap {\n @include flex-container-row();\n\n .input-wrap {\n @include flex-container-row();\n padding-bottom: $spacer-1;\n border-bottom: 1px solid $colour-black;\n margin-right: $spacer-4;\n flex-grow: 1;\n input {\n border: 0;\n }\n }\n button {\n padding: 5px 30px;\n }\n }\n }\n}\n.selected-filter-wrap {\n display: flex;\n margin-bottom: 30px;\n padding: 0;\n .button {\n cursor: pointer;\n border-radius: 20px;\n padding: 5px 50px 5px 20px;\n margin-right: 15px;\n background-color: $colour-tertiary-coral;;\n color: $colour-black;\n border: 1px solid $colour-tertiary-coral;\n text-decoration: none;\n background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgMTguNCAxOC40IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxOC40IDE4LjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7c3Ryb2tlOiMwMDAwMDA7fQo8L3N0eWxlPgo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNOS4yLDguNUwxNywwLjdsMC43LDAuN0w5LjksOS4ybDcuOCw3LjhMMTcsMTcuN0w5LjIsOS45bC03LjgsNy44TDAuNywxN2w3LjgtNy44TDAuNywxLjRsMC43LTAuN0w5LjIsOC41eiIvPgo8L3N2Zz4K);\n background-repeat: no-repeat;\n background-position: right 20px center;\n background-size: 12px auto;\n &:hover {\n background-color: $colour-white;\n color: $colour-black;\n }\n }\n .clear-all {\n margin-left: auto;\n a {\n cursor: pointer;\n border-radius: 20px;\n padding: 5px 20px;\n background-color: $colour-primary-blue;\n color: $colour-white;\n border: 1px solid $colour-primary-blue;\n text-decoration: none;\n &:hover {\n background-color: $colour-white;\n color: $colour-primary-blue;\n }\n }\n }\n}\n\n.sort-filter-wrap {\n display: flex;\n justify-content: flex-end;\n margin-bottom: $spacer-4;\n padding: 0;\n text-align: right;\n .clear-all {\n cursor: pointer;\n vertical-align: center;\n margin-top: auto;\n margin-bottom: auto;\n }\n\n display: flex;\n .sort-wrap {\n margin-left: 15px;\n }\n\n .filter-wrap {\n background-color: $colour-grey-background; // temp for testing dropdown\n\n margin-left: $spacer-3;\n\n .button.filter {\n padding-left: 60px;\n padding-right: 30px;\n\n .filter-icon {\n content: '';\n display: block;\n position: absolute;\n left: 25px;\n top: 17px;\n width: 13px;\n height: 13px;\n\n svg {\n width: 100%;\n height: auto;\n vertical-align: top;\n\n &:hover {\n fill: $colour-primary-blue;\n }\n }\n }\n }\n }\n}\n\n.icon {\n @include icon();\n margin: auto;\n\n > path {\n fill: $colour-primary-blue;\n }\n}\n\n.icon-clear-all {\n > path {\n fill: $colour-black;\n }\n}\n\n@media screen and (max-width: $screen-mobile-small) {\n .sort-filter-wrap {\n flex-direction: column-reverse;\n .sort-wrap {\n margin-top: 20px;\n margin-bottom: 20px;\n }\n }\n}\n\n@media screen and (max-width: $screen-mobile-x-small) {\n .sort-filter-wrap {\n justify-content: space-between;\n .sort-wrap {\n margin-left: 0px;\n }\n .filter-wrap {\n margin-left: 3px;\n }\n }\n}\n\n.align-right {\n text-align: right;\n}\n\n.input-text {\n @include input-text();\n}\n\n.text-colour-primary {\n color: $colour-primary-blue;\n}\n","import { Component, Element, Event, EventEmitter, h, Method, Prop, State } from '@stencil/core';\nimport { faMagnifyingGlass } from '@fortawesome/pro-solid-svg-icons';\n\nconst sortOptionLabels = {\n relevance: 'Relevance',\n amountRaised: 'Most raised',\n leastRaised: 'Least raised',\n closeToTarget: 'Close to campaign target',\n matchFundsRemaining: 'Match funds remaining',\n} as const;\n\nexport type sortOptionKey = keyof typeof sortOptionLabels;\nexport type sortOptionLabel = (typeof sortOptionLabels)[sortOptionKey];\n\n@Component({\n tag: 'biggive-campaign-card-filter-grid',\n styleUrl: 'biggive-campaign-card-filter-grid.scss',\n shadow: true,\n})\nexport class BiggiveCampaignCardFilterGrid {\n private sortByPlaceholderText = 'Sort by';\n private beneficiariesPlaceHolderText = 'Select beneficiary';\n private categoriesPlaceHolderText = 'Select category';\n private locationsPlaceHolderText = 'Select location';\n private initialSortByOption: sortOptionLabel;\n\n /**\n * This and similar properties represent selections made in the popup but not yet applied.\n */\n private newSelectedFilterCategory: string | null = null;\n private newSelectedFilterBeneficiary: string | null = null;\n private newSelectedFilterLocation: string | null = null;\n\n @Element() el: HTMLBiggiveCampaignCardFilterGridElement;\n\n /**\n * This event `doSearchAndFilterUpdate` event is emitted and propogates to the parent\n * component which handles it\n */\n @Event({\n eventName: 'doSearchAndFilterUpdate',\n bubbles: true,\n cancelable: true,\n composed: true,\n })\n doSearchAndFilterUpdate: EventEmitter<{\n searchText: string | null;\n sortBy: string | null;\n filterCategory: string | null;\n filterBeneficiary: string | null;\n filterLocation: string | null;\n }>;\n\n /**\n * Typically on non-negligible scroll away from the search area.\n */\n @Method() async unfocusInputs() {\n this.unfocusTextInput();\n }\n\n /**\n * Space below component\n */\n @Prop() spaceBelow: number = 0;\n\n /**\n * Intro\n */\n @Prop() intro: string = 'Find a charity or project';\n\n /**\n * Optional search text prop. Useful for pre-populating the search field\n * when the page is loaded with a search term already existing in the URL.\n * This can happen when sharing links, or if a donor goes to a campaign page\n * after searching, and then returns to the search results. In such a case,\n * the search box text will clear, unless we use this prop to populate it on\n * rendering. DON-652.\n */\n @Prop() searchText: string | null = null;\n\n /**\n * Defines the text displayed as the placeholder in the input field\n * before the user types anything\n */\n @Prop() placeholderText: string = 'Search';\n\n /**\n * Defines the text on the search button\n */\n @Prop() buttonText: string = 'Search';\n\n /**\n * JSON array of category key/values, or takes a stringified equiavalent (for Storybook)\n */\n @Prop() categoryOptions: string | Record<string, string> | string[];\n\n /**\n * JSON array of beneficiary key/values, or takes a stringified equiavalent (for Storybook)\n */\n @Prop() beneficiaryOptions: string | Record<string, string> | string[];\n\n /**\n * JSON array of location key/values, or takes a stringified equiavalent (for Storybook)\n */\n @Prop() locationOptions: string | Record<string, string> | string[];\n\n /**\n * This helps us inject a pre-selected dropdown value from outside of this component.\n * This is especially helpful for the Meta campaign and Explore pages, where searching\n * by text wipes out previous sort options and re-uses Relevance, or where one of those\n * two pages is loaded directly with URL parameters - in such a scenario the dropdown\n * shows that it's pre-selected. DON-558.\n */\n @Prop({ mutable: true })\n selectedSortByOption: sortOptionLabel;\n\n /**\n * For injecting the chosen category to filter by, as per the comment above for `selectedSortByOption`.\n */\n @Prop({ mutable: true }) selectedFilterCategory: string | null = null;\n\n /**\n * For injecting the chosen beneficiary to filter by, as per the comment above for `selectedSortByOption`.\n */\n @Prop({ mutable: true }) selectedFilterBeneficiary: string | null = null;\n\n /**\n * For injecting the chosen location to filter by, as per the comment above for `selectedSortByOption`.\n */\n @Prop({ mutable: true }) selectedFilterLocation: string | null = null;\n\n /**\n * State variable - causes re-render on change\n */\n @State() filtersApplied: boolean;\n\n private categoryFilterSelectionChanged = (value: string) => {\n this.newSelectedFilterCategory = value;\n };\n\n private beneficiarySelectionChanged = (value: string) => {\n this.newSelectedFilterBeneficiary = value;\n };\n\n private locationSelectionChanged = (value: string) => {\n this.newSelectedFilterLocation = value;\n };\n\n private sortBySelectionChanged = (value: sortOptionLabel) => {\n this.selectedSortByOption = value;\n this.doSearchAndFilterUpdate.emit(this.getSearchAndFilterObject());\n };\n\n private getSearchAndFilterObject() {\n return {\n searchText: this.searchText,\n sortBy: this.selectedSortByOption,\n filterCategory: this.selectedFilterCategory,\n filterBeneficiary: this.selectedFilterBeneficiary,\n filterLocation: this.selectedFilterLocation,\n };\n }\n\n private handleApplyFilterButtonClick = () => {\n this.selectedFilterCategory = this.newSelectedFilterCategory ?? this.selectedFilterCategory;\n this.selectedFilterBeneficiary = this.newSelectedFilterBeneficiary ?? this.selectedFilterBeneficiary;\n this.selectedFilterLocation = this.newSelectedFilterLocation ?? this.selectedFilterLocation;\n\n const searchAndFilterObj = this.getSearchAndFilterObject();\n this.doSearchAndFilterUpdate.emit(searchAndFilterObj);\n\n const filterPopup = this.el.shadowRoot?.getElementById('filter-popup') as HTMLBiggivePopupElement | undefined;\n if (filterPopup) {\n filterPopup.closeFromOutside();\n }\n\n this.filtersApplied =\n typeof searchAndFilterObj.filterBeneficiary === 'string' || typeof searchAndFilterObj.filterCategory === 'string' || typeof searchAndFilterObj.filterLocation === 'string';\n };\n\n private removeFilter(filterKey: 'locations' | 'categories' | 'beneficiaries') {\n switch (filterKey) {\n case 'beneficiaries':\n this.selectedFilterBeneficiary = null;\n break;\n case 'categories':\n this.selectedFilterCategory = null;\n break;\n case 'locations':\n this.selectedFilterLocation = null;\n break;\n default:\n // This asks the compiler to check that we are in dead code, i.e. we covered all the possible filter keys\n // above. If we missed one we would get a compile error trying to assign a string to a never.\n const exhaustiveSwitch: never = filterKey;\n console.error(exhaustiveSwitch);\n }\n\n const selectEl = this.el.shadowRoot?.getElementById(filterKey) as HTMLBiggiveFormFieldSelectElement | undefined;\n if (!selectEl) {\n return;\n }\n\n selectEl.selectedLabel = null;\n selectEl.selectedValue = null;\n this.doSearchAndFilterUpdate.emit(this.getSearchAndFilterObject());\n }\n\n private handleSearchButtonPressed = () => {\n this.unfocusTextInput();\n this.doSearchAndFilterUpdate.emit(this.getSearchAndFilterObject());\n\n if (this.hasSearchTerm()) {\n this.selectedSortByOption = 'Relevance';\n }\n };\n\n private handleSearchTextChanged = (event: any) => {\n this.searchText = event.target.value;\n };\n\n private handleEnterPressed = (ev: KeyboardEvent) => {\n if (ev.key === 'Enter') {\n this.unfocusTextInput();\n this.doSearchAndFilterUpdate.emit(this.getSearchAndFilterObject());\n }\n };\n\n private handleFilterButtonClick = () => {\n this.newSelectedFilterBeneficiary = this.selectedFilterBeneficiary;\n this.newSelectedFilterCategory = this.selectedFilterCategory;\n this.newSelectedFilterLocation = this.selectedFilterLocation;\n\n const filterPopup = this.el.shadowRoot?.getElementById('filter-popup') as HTMLBiggivePopupElement | undefined;\n if (filterPopup) {\n filterPopup.openFromOutside();\n }\n };\n\n private handleClearAll = () => {\n this.unfocusTextInput();\n\n // Set the 'Filters' button back to the primary background colour\n this.filtersApplied = false;\n\n // Clear all\n this.searchText = null;\n this.selectedSortByOption = this.initialSortByOption;\n this.selectedFilterBeneficiary = null;\n this.selectedFilterCategory = null;\n this.selectedFilterLocation = null;\n\n // Clear <biggive-form-field-select> components' internal selectedValue and selectedLabel. DON-654.\n ['sort-by', 'categories', 'beneficiaries', 'locations', 'funding'].forEach(id => {\n const theEl = this.el.shadowRoot?.getElementById(id) as HTMLBiggiveFormFieldSelectElement | undefined;\n if (!theEl) {\n return;\n }\n\n theEl.selectedValue = null;\n theEl.selectedLabel = null;\n });\n\n const selectedFilters = this.el.shadowRoot?.querySelector('.selected-filters');\n if (selectedFilters) {\n selectedFilters.querySelectorAll('.button').forEach(button => {\n button.remove();\n });\n }\n\n // Emit the doSearchAndFilterUpdate event with null values. DON-654\n this.doSearchAndFilterUpdate.emit({\n searchText: null,\n sortBy: null,\n filterCategory: null,\n filterBeneficiary: null,\n filterLocation: null,\n });\n };\n\n /**\n * We've seen desktop Safari jump to this input when it's focused at times when that's\n * unhelpful, so on a few occasions we proactively blur it.\n */\n private unfocusTextInput() {\n const input = this.el.shadowRoot?.querySelector('.input-text') as HTMLInputElement | undefined;\n input?.blur();\n }\n\n componentWillRender() {\n this.filtersApplied = this.selectedFilterCategory !== null || this.selectedFilterBeneficiary !== null || this.selectedFilterLocation !== null;\n this.initialSortByOption = this.selectedSortByOption;\n }\n\n render() {\n const sortOptions = this.getSortOptions();\n\n return (\n <div class={'container space-below-' + this.spaceBelow}>\n <div class=\"sleeve\">\n <div class=\"search-wrap\">\n <h4>{this.intro}</h4>\n <div class=\"field-wrap\">\n <div class=\"input-wrap\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"icon\" viewBox=\"0 0 512 512\">\n <path d={faMagnifyingGlass.icon[4].toString()} />\n </svg>\n <input\n type=\"text\"\n value={this.searchText ?? ''}\n class=\"input-text\"\n placeholder={this.placeholderText}\n onInput={this.handleSearchTextChanged}\n onKeyDown={this.handleEnterPressed}\n />\n </div>\n <biggive-button onClick={this.handleSearchButtonPressed} label={this.buttonText} />\n </div>\n </div>\n <div class=\"sort-filter-wrap\">\n <div class=\"filter-wrap\">\n <biggive-button class=\"filter\" colourScheme=\"primary\" onClick={this.handleFilterButtonClick} label=\"Filter\" fullWidth={true} space-below=\"0\"></biggive-button>\n <biggive-popup id=\"filter-popup\">\n <h4 class=\"space-above-0 space-below-3 text-colour-primary\">Filters</h4>\n <div class=\"select-wrapper-1\">\n <biggive-form-field-select\n backgroundColour=\"white\"\n prompt=\"Category\"\n placeholder={this.categoriesPlaceHolderText}\n selectedLabel={this.selectedFilterCategory}\n selectedValue={this.selectedFilterCategory}\n options={this.optionsToArray(this.categoryOptions || [])}\n selectionChanged={this.categoryFilterSelectionChanged}\n id=\"categories\"\n space-below=\"2\"\n ></biggive-form-field-select>\n </div>\n\n <div class=\"select-wrapper-2\">\n <biggive-form-field-select\n backgroundColour=\"white\"\n prompt=\"Beneficiary\"\n placeholder={this.beneficiariesPlaceHolderText}\n selectedLabel={this.selectedFilterBeneficiary}\n selectedValue={this.selectedFilterBeneficiary}\n options={this.optionsToArray(this.beneficiaryOptions || [])}\n selectionChanged={this.beneficiarySelectionChanged}\n id=\"beneficiaries\"\n space-below=\"2\"\n ></biggive-form-field-select>\n </div>\n\n <div class=\"select-wrapper-3\">\n <biggive-form-field-select\n backgroundColour=\"white\"\n prompt=\"Location\"\n placeholder={this.locationsPlaceHolderText}\n selectedLabel={this.selectedFilterLocation}\n selectedValue={this.selectedFilterLocation}\n options={this.optionsToArray(this.locationOptions || [])}\n selectionChanged={this.locationSelectionChanged}\n id=\"locations\"\n space-below=\"2\"\n ></biggive-form-field-select>\n </div>\n\n <div class=\"align-right\">\n <biggive-button label=\"Apply filters\" onClick={this.handleApplyFilterButtonClick} />\n </div>\n </biggive-popup>\n </div>\n\n <div class=\"sort-wrap\">\n <biggive-form-field-select\n options={sortOptions}\n prompt={null}\n select-style=\"underlined\"\n placeholder={this.sortByPlaceholderText}\n selectedLabel={this.selectedSortByOption}\n selectedValue={this.getSelectedValue()}\n selectionChanged={this.sortBySelectionChanged}\n id=\"sort-by\"\n >\n <biggive-form-field-select-option value=\"amountRaised\" label=\"Most raised\"></biggive-form-field-select-option>\n <biggive-form-field-select-option value=\"leastRaised\" label=\"Least raised\"></biggive-form-field-select-option>\n <biggive-form-field-select-option value=\"matchFundsRemaining\" label=\"Match funds remaining\"></biggive-form-field-select-option>\n {(this.searchText || '').length > 0 ? <biggive-form-field-select-option value=\"Relevance\" label=\"Relevance\"></biggive-form-field-select-option> : null}\n </biggive-form-field-select>\n </div>\n </div>\n <div class=\"selected-filter-wrap\">\n <div class=\"selected-filters\">\n {this.selectedFilterCategory && (\n <span\n class=\"button\"\n onClick={() => {\n this.removeFilter('categories');\n }}\n >\n {this.selectedFilterCategory}\n </span>\n )}\n {this.selectedFilterBeneficiary && (\n <span\n class=\"button\"\n onClick={() => {\n this.removeFilter('beneficiaries');\n }}\n >\n {this.selectedFilterBeneficiary}\n </span>\n )}\n {this.selectedFilterLocation && (\n <span\n class=\"button\"\n onClick={() => {\n this.removeFilter('locations');\n }}\n >\n {this.selectedFilterLocation}\n </span>\n )}\n </div>\n <div class=\"clear-all\">\n <a onClick={this.handleClearAll}>Clear all</a>\n </div>\n </div>\n <div class=\"campaign-grid\">\n <slot name=\"campaign-grid\"></slot>\n </div>\n </div>\n </div>\n );\n }\n\n // I'm not sure if I understand the reasoning for own-methods-must-be-private. I made the method below public to unit\n // test it. Maybe the idea is that we should move anything with enough logic to test outside the component class? I\n // can do that if people think it's better.\n //\n // eslint-disable-next-line @stencil-community/own-methods-must-be-private\n public getSelectedValue(): undefined | string {\n const sortByOption = this.selectedSortByOption;\n if (sortByOption === undefined) {\n return undefined;\n }\n const sortOptions = this.getSortOptions();\n const selected = sortOptions.filter(option => {\n return option.label.toLowerCase() === sortByOption.toLowerCase();\n })[0];\n\n return selected?.value;\n }\n\n private getSortOptions(): {\n label: sortOptionLabel;\n value: sortOptionKey;\n }[] {\n // @ts-ignore - see https://github.com/microsoft/TypeScript/pull/12253#issuecomment-263132208\n const sortOptionKeys: sortOptionKey[] = Object.getOwnPropertyNames(sortOptionLabels);\n const relevantOptionKeys = sortOptionKeys.filter(key => key !== 'relevance' || this.hasSearchTerm());\n\n return relevantOptionKeys.map((key: sortOptionKey) => ({ value: key, label: sortOptionLabels[key] }));\n }\n\n private hasSearchTerm() {\n return typeof this.searchText === 'string' && this.searchText.length > 0;\n }\n\n private optionsToArray(options: string | Record<string, string> | string[]): {\n label: string;\n value: string;\n }[] {\n if (typeof options === 'string') {\n options = JSON.parse(options);\n }\n if (Array.isArray(options)) {\n return options.map((option: string) => ({ value: option, label: option }));\n }\n\n return Object.entries(options).map(entry => ({ value: entry[0], label: entry[1] }));\n }\n}\n","@include image-alignment();\n@include spacers();\n\n:host {\n display: contents;\n}\n\n.container {\n @include standard-font();\n @include lower-shadow();\n background-color: $colour-white;\n padding: 25px;\n box-sizing: border-box;\n height: fit-content;\n\n .campaign-title {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n text-align: center;\n font-weight: bold;\n span {\n background-color: $colour-secondary-green;\n color: $colour-black;\n padding: $spacer-1 $spacer-3;\n display: inline-block;\n }\n }\n .banner {\n top: 0;\n margin-top: 19px;\n padding-bottom: $aspect-ratio-banners;\n background-color: #F1F1F1;\n background-size: contain;\n background-repeat: no-repeat;\n margin-bottom: $spacer-4;\n img {\n display: none;\n }\n }\n .meta-wrap {\n @include flex-container-row();\n margin-top: auto;\n margin-bottom: $spacer-3;\n .meta-item {\n width: calc( 50% - $spacer-3 );\n .label {\n @include font-size-small();\n display: block;\n }\n .text {\n @include heading-3();\n display: block;\n\n @media screen and (max-width: $screen-tablet-max) {\n font-size: 23px;\n }\n\n @media screen and (max-width: $screen-mobile-max) {\n font-size: 21px;;\n }\n\n @media screen and (max-width: $screen-mobile-small) {\n font-size: 17px;\n }\n }\n &:last-child {\n text-align: right;\n .text {\n color: $colour-primary-blue;\n }\n }\n }\n }\n .progress-bar-wrap {\n padding-bottom: $spacer-2;\n margin-bottom: $spacer-2;\n border-bottom: 1px solid $colour-grey-light;\n }\n .stat-wrap {\n @include flex-container-row();\n .stat-item {\n @include font-size-medium();\n font-weight: bold;\n width: calc( 50% - $spacer-3 );\n margin: auto 0 auto $spacer-3;\n\n .label {\n position: relative;\n bottom: 7px;\n }\n\n @media screen and (max-width: $screen-mobile-max) {\n @include font-size-small();\n margin: auto 0;\n text-align: center;\n\n .label {\n bottom: 5px;\n }\n }\n\n svg {\n fill: $colour-tertiary-coral;\n }\n }\n }\n\n .championed-by {\n text-align: left;\n margin-left: 20px;\n margin-top: 20px;\n color: $colour-black;\n\n font-size: 15px;\n\n @media screen and (max-width: $screen-tablet-max) {\n font-size: 14px;\n }\n\n @media screen and (max-width: $screen-mobile-max) {\n text-align: center;\n margin-left: 0;\n margin-bottom: 10px;\n font-size: 13px;\n }\n\n @media screen and (max-width: $screen-mobile-small) {\n font-size: 12px;\n }\n\n a {\n text-decoration: none;\n font-weight: bold;\n color: $colour-primary-blue;\n @media screen and (max-width: $screen-mobile-small) {\n // Show Champion Name on new line in smaller screens\n display: block;\n }\n }\n }\n\n @media screen and (max-width: $screen-mobile-max) {\n padding: 15px;\n }\n}\n","import { Component, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'biggive-campaign-highlights',\n styleUrl: 'biggive-campaign-highlights.scss',\n shadow: true,\n})\nexport class BiggiveCampaignHighlights {\n /**\n * Space below component\n */\n @Prop() spaceBelow: number = 0;\n\n /**\n * Full URL of a banner image.\n */\n @Prop() banner: string;\n\n /**\n * Display name of the charity's specific time-bound fundraising campaign.\n */\n @Prop() campaignTitle: string;\n\n /**\n * Label for the primary figure\n */\n @Prop() primaryFigureLabel: string;\n\n /**\n * Amount for the primary figure, formatted with currency symbol\n */\n @Prop() primaryFigureAmount: string;\n\n /**\n * Label for the secondary figure\n */\n @Prop() secondaryFigureLabel: string;\n\n /**\n * Amount for the secondary figure, formatted with currency symbol\n */\n @Prop() secondaryFigureAmount: string;\n\n /**\n * Progress bar percentage\n */\n @Prop() progressBarCounter: number = 100;\n\n /**\n * Primary stat icon\n */\n @Prop() primaryStatIcon: string;\n\n /**\n * Primary stat text\n */\n @Prop() primaryStatText: string;\n\n /**\n * Secondary stat icon\n */\n @Prop() secondaryStatIcon: string;\n\n /**\n * Secondary stat text\n */\n @Prop() secondaryStatText: string;\n\n /**\n * Champion's name\n */\n @Prop() championName: string;\n\n /**\n * Link to all meta-campaigns funded by this champion.\n * For example: /christmas-challenge-2022/the-reed-foundation-22\n * In other words, it follows the following format:\n * '/' + campaign.parentRef + '/' + campaign.championRef\n */\n @Prop() championUrl: string;\n\n render() {\n return (\n <div class={'container space-below-' + this.spaceBelow}>\n <div class=\"sleeve\">\n {this.campaignTitle != null ? (\n <div class=\"campaign-title\">\n <span>{this.campaignTitle}</span>\n </div>\n ) : null}\n\n {this.banner !== null && this.banner !== undefined ? (\n <div class=\"image-wrap banner\" style={{ 'background-image': 'url(' + this.banner + ')' }}>\n <img src={this.banner} class=\"banner\" />\n </div>\n ) : null}\n\n <div class=\"meta-wrap\">\n <div class=\"meta-item\">\n <span class=\"label\">{this.primaryFigureLabel}</span>\n <span class=\"text\">{this.primaryFigureAmount}</span>\n </div>\n <div class=\"meta-item\">\n <span class=\"label\">{this.secondaryFigureLabel}</span>\n <span class=\"text\">{this.secondaryFigureAmount}</span>\n </div>\n </div>\n <div class=\"progress-bar-wrap\">\n <biggive-progress-bar counter={this.progressBarCounter} colour-scheme=\"primary\"></biggive-progress-bar>\n </div>\n <div class=\"stat-wrap\">\n {this.primaryStatIcon != null ? (\n <div class=\"stat-item\">\n <biggive-misc-icon icon={this.primaryStatIcon} background-colour=\"white\" icon-colour=\"tertiary\"></biggive-misc-icon>\n <span class=\"label\">{this.primaryStatText}</span>\n </div>\n ) : null}\n {this.secondaryStatIcon != null ? (\n <div class=\"stat-item\">\n <biggive-misc-icon icon={this.secondaryStatIcon} background-colour=\"white\" icon-colour=\"tertiary\"></biggive-misc-icon>\n <span class=\"label\">{this.secondaryStatText}</span>\n </div>\n ) : null}\n </div>\n {this.championName != null ? (\n <div class=\"championed-by\">\n Championed by <a href={this.championUrl}>{this.championName}</a>\n </div>\n ) : null}\n </div>\n </div>\n );\n }\n}\n","export const makeURL = (urlType: string, urlPrefix: string | undefined, relativeUrl: string) => {\n if (urlPrefix === undefined || urlPrefix.length === 0 || !urlPrefix.startsWith('http')) {\n const prefixType = typeof urlPrefix;\n throw new Error(`${urlType} URL prefix must be set and start with http: bad prefix (${prefixType}) '${urlPrefix}'`);\n }\n return urlPrefix + '/' + relativeUrl;\n};\n",":host {\n display: contents;\n}\n\n.footer {\n @include standard-font();\n color: $colour-white;\n}\n\nnav {\n width: calc(33.3% - 20px);\n margin: 0;\n padding: 0;\n .heading {\n @include heading-5();\n border-bottom: 1px solid $colour-white;\n padding-bottom: $spacer-2;\n margin-bottom: $spacer-2;\n }\n ul {\n margin: 0;\n padding: 0;\n li {\n margin: 0;\n padding: 0;\n list-style-type: none;\n margin-top: 15px;\n }\n }\n}\n\nnav ul li a {\n color: $colour-white;\n text-decoration: none;\n // target all classes prefixed with 'icon-' so we don't repeat code\n &[class^='icon-'],\n &[class*='icon-'] {\n padding-left: 20px;\n background-repeat: no-repeat;\n background-size: auto 10px;\n background-position: left center;\n }\n\n &.icon-green {\n background-image: url(/assets/images/triangles-combined-green-match-white.svg);\n }\n\n &.icon-children {\n background-image: url(/assets/images/triangles-combined-children-white.svg);\n }\n\n &.icon-christmas {\n background-image: url(/assets/images/triangles-combined-christmas-challenge-white.svg);\n }\n\n &.icon-green-match {\n background-image: url(/assets/images/triangles-combined-green-match-white.svg);\n }\n\n &.icon-women-girls {\n background-image: url(/assets/images/triangles-combined-women-girls-white.svg);\n }\n\n &.icon-mental-health {\n background-image: url(/assets/images/triangles-combined-mental-health-white.svg);\n }\n\n &.icon-anchor-match {\n background-image: url(/assets/images/triangles-combined-anchor-white.svg);\n }\n\n &.icon-emergency {\n background-image: url(/assets/images/triangles-combined-emergency-white.svg);\n }\n\n &.icon-arts {\n background-image: url(/assets/images/triangles-combined-arts-white.svg);\n }\n\n &.icon-small-charity {\n background-image: url(/assets/images/triangles-combined-arts-white.svg);\n }\n}\n\n.row-top {\n background-image: url(/assets/images/biggive-triangle-green.svg);\n background-repeat: no-repeat;\n background-size: auto 75px;\n background-position: $spacer-6 30px;\n background-color: $colour-primary-blue;\n padding: 100px $spacer-6 $spacer-6 $spacer-6;\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n\n .button-wrap {\n margin-top: $spacer-6;\n width: 100%;\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n }\n}\n\nfooter .row-bottom {\n background-color: $colour-black;\n padding: $spacer-6 $spacer-6 $spacer-3 $spacer-6;\n border-top: 1px solid $colour-white;\n\n .fr-logo {\n width: 135px;\n }\n\n .postscript-wrap {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n\n @media screen and (max-width: $screen-tablet-max) {\n flex-direction: column;\n }\n }\n\n .nav.nav-postscript {\n text-align: right;\n flex-grow: 1;\n\n @media screen and (max-width: $screen-tablet-max) {\n text-align: center;\n }\n }\n\n .nav-postscript li {\n display: inline-block;\n margin-left: 1rem;\n\n &:first-child {\n margin-left: 0;\n }\n\n @media screen and (max-width: $screen-tablet-max) {\n display: block;\n width: 100%;\n margin-left: 0;\n }\n }\n\n .social-icon-wrap {\n border-top: 1px solid $colour-white;\n padding-top: $spacer-4;\n margin-top: $spacer-4;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: $spacer-4;\n\n .social-icon-item {\n margin: 0 $spacer-3;\n }\n }\n\n p {\n text-align: center;\n }\n}\n\n@media screen and (max-width: $screen-tablet-max) {\n .row-top {\n padding: $spacer-3;\n }\n}\n\n@media screen and (max-width: $screen-tablet-max) {\n nav {\n width: 100%;\n margin-right: 0;\n margin-bottom: $spacer-4;\n }\n\n .row-top {\n background-size: auto 50px;\n padding-top: 80px;\n padding-left: 15px;\n background-position: 15px 30px;\n\n .button-wrap * {\n width: 100% !important;\n }\n }\n}\n","import { Component, Element, getAssetPath, h, Prop } from '@stencil/core';\nimport { makeURL } from '../../util/helper-methods';\n\n@Component({\n tag: 'biggive-footer',\n styleUrl: 'biggive-footer.scss',\n shadow: true,\n})\nexport class BiggiveFooter {\n @Element() host: HTMLBiggiveFooterElement;\n\n @Prop() headingLevel: 1 | 2 | 3 | 4 | 5 | 6 = 5;\n\n /**\n * URL prefixes vary by environment, and components library is not best placed to know what they are, so we\n * take them as props\n */\n @Prop() donateUrlPrefix: string;\n @Prop() blogUrlPrefix: string | undefined;\n @Prop() experienceUrlPrefix: string | undefined;\n @Prop() smallCharityWeekEnabled = false;\n\n private year: string = new Date().getFullYear().toString();\n\n /**\n * Conditionally render footer menu:\n * hard-coded (preset) when set to true, dynamic (slot-based) when set to false\n */\n @Prop() usePresetFooter = false;\n\n private appendMenu(menuName: string) {\n var node = this.host.querySelector(`[slot=\"${menuName}\"]`);\n if (node !== null) {\n this.host!.shadowRoot!.querySelector(`.${menuName}`)!.appendChild(node);\n }\n }\n\n componentDidRender() {\n if (!this.usePresetFooter) {\n this.appendMenu('nav-primary');\n this.appendMenu('nav-secondary');\n this.appendMenu('nav-tertiary');\n this.appendMenu('nav-postscript');\n }\n }\n\n render() {\n const HeadingTag = `h${this.headingLevel}`;\n const slotBasedFooter = () => {\n return (\n <footer class=\"footer\">\n <div class=\"row row-top\">\n <nav class=\"nav nav-primary\" aria-labelledby=\"footer-primary-heading\">\n <HeadingTag class=\"heading\" id=\"footer-primary-heading\">\n <slot name=\"nav-primary-title\"></slot>\n </HeadingTag>\n </nav>\n\n <nav class=\"nav nav-secondary\" aria-labelledby=\"footer-secondary-heading-heading\">\n <HeadingTag class=\"heading\" id=\"footer-secondary-heading\">\n <slot name=\"nav-secondary-title\"></slot>\n </HeadingTag>\n </nav>\n\n <nav class=\"nav nav-tertiary\" aria-labelledby=\"footer-tertiary-heading\">\n <HeadingTag class=\"heading\" id=\"footer-tertiary-heading\">\n <slot name=\"nav-tertiary-title\"></slot>\n </HeadingTag>\n </nav>\n\n <div class=\"button-wrap\">\n <biggive-button colour-scheme=\"white\" url=\"https://biggive.org/charities\" label=\"For charities\"></biggive-button>\n <biggive-button colour-scheme=\"white\" url=\"https://biggive.org/funders\" label=\"For funders\"></biggive-button>\n </div>\n </div>\n\n <div class=\"row row-bottom\">\n <div class=\"postscript-wrap\">\n <img class=\"fr-logo\" src={getAssetPath('/assets/images/fundraising-regulator.png')} alt=\"Registered with FUNDRAISING REGULATOR\" />\n\n <nav class=\"nav nav-postscript\" aria-label=\"Legal\"></nav>\n </div>\n\n <div class=\"social-icon-wrap\">\n <slot name=\"social-icons\"></slot>\n </div>\n <p>© 2007 – {this.year} The Big Give Trust (1136547) | Company number 07273065 | Dragon Court, 27-29 Macklin Street, London WC2B 5LX, United Kingdom</p>\n </div>\n </footer>\n );\n };\n\n const presetFooter = () => {\n return (\n <footer class=\"footer\">\n <div class=\"row row-top\">\n <nav class=\"nav nav-primary\" aria-labelledby=\"footer-primary-heading\">\n <HeadingTag class=\"heading\" id=\"footer-primary-heading\">\n <div slot=\"nav-primary-title\">Match Funding Opportunities</div>\n </HeadingTag>\n <ul slot=\"nav-primary\">\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'christmas-challenge')} class=\"icon-christmas\">\n Christmas Challenge\n </a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'green-match-fund')} class=\"icon-green\">\n Green Match Fund\n </a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'champions-for-children')} class=\"icon-children\">\n Champions for Children\n </a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'women-girls-match-fund')} class=\"icon-women-girls\">\n Women and Girls Match Fund\n </a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'kind2mind/')} class=\"icon-mental-health\">\n Kind²Mind\n </a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'artsforimpact')} class=\"icon-arts\">\n Arts for Impact\n </a>\n </li>\n {this.smallCharityWeekEnabled && (\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'small-charity-week')} class=\"icon-small-charity\">\n Small Charity Week\n </a>\n </li>\n )}\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'emergency-campaigns/')} class=\"icon-emergency\">\n Emergency Match Fund\n </a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'run-your-own-campaign/)')}>Run your own campaign</a>\n </li>\n </ul>\n </nav>\n\n <nav class=\"nav nav-secondary\" aria-labelledby=\"footer-secondary-heading-heading\">\n <HeadingTag class=\"heading\" id=\"footer-secondary-heading\">\n <div slot=\"nav-secondary-title\">Resources</div>\n </HeadingTag>\n <ul slot=\"nav-secondary\">\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'case-studies')}>Case Studies</a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'blog')}>Blog</a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'reports-insights')}>Reports & Insights</a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'press')}>Press</a>\n </li>\n </ul>\n </nav>\n\n <nav class=\"nav nav-tertiary\" aria-labelledby=\"footer-tertiary-heading\">\n <HeadingTag class=\"heading\" id=\"footer-tertiary-heading\">\n <div slot=\"nav-tertiary-title\">About</div>\n </HeadingTag>\n <ul slot=\"nav-tertiary\">\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'support')}>Support</a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'our-story')}>Our Story</a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'our-people')}>Our People</a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'donation-funds')}>Donate by Bank Transfer</a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'our-fees')}>Our Fees</a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'careers')}>Careers</a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'faqs')}>FAQs</a>\n </li>\n </ul>\n </nav>\n\n <div class=\"button-wrap\">\n <biggive-button colour-scheme=\"white\" url={makeURL('Blog', this.blogUrlPrefix, 'charities')} label=\"For charities\"></biggive-button>\n <biggive-button colour-scheme=\"white\" url={makeURL('Blog', this.blogUrlPrefix, 'funders')} label=\"For funders\"></biggive-button>\n </div>\n </div>\n\n <div class=\"row row-bottom\">\n <div class=\"postscript-wrap\">\n <img class=\"fr-logo\" src={getAssetPath('/assets/images/fundraising-regulator.png')} alt=\"Registered with FUNDRAISING REGULATOR\" />\n\n <nav class=\"nav nav-postscript\" aria-label=\"Legal\">\n <ul slot=\"nav-postscript\">\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'terms-and-conditions')}>Terms and Conditions</a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'privacy')}>Privacy Statement</a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'privacy#cookies')}>Cookies Statement</a>\n </li>\n <li>\n <a href={makeURL('Donate', this.donateUrlPrefix, 'cookie-preferences')}>Cookies Preference Centre</a>\n </li>\n </ul>\n </nav>\n </div>\n\n <div class=\"social-icon-wrap\">\n <div slot=\"social-icons\">\n <biggive-social-icon\n service=\"Facebook\"\n url=\"https://www.facebook.com/BigGive.org\"\n background-colour=\"tertiary\"\n icon-colour=\"black\"\n wide={true}\n ></biggive-social-icon>\n <biggive-social-icon service=\"Twitter\" url=\"https://x.com/BigGive\" background-colour=\"tertiary\" icon-colour=\"black\" wide={true}></biggive-social-icon>\n <biggive-social-icon\n service=\"LinkedIn\"\n url=\"https://uk.linkedin.com/company/big-give\"\n background-colour=\"tertiary\"\n icon-colour=\"black\"\n wide={true}\n ></biggive-social-icon>\n <biggive-social-icon\n service=\"YouTube\"\n url=\"https://www.youtube.com/channel/UC9_wH1aaTuZurJ-F9R8GDcA\"\n background-colour=\"tertiary\"\n icon-colour=\"black\"\n wide={true}\n ></biggive-social-icon>\n <biggive-social-icon service=\"Instagram\" url=\"https://www.instagram.com/biggiveorg\" background-colour=\"tertiary\" icon-colour=\"black\"></biggive-social-icon>\n </div>\n </div>\n <p>© 2007 – {this.year} The Big Give Trust (1136547) | Company number 07273065 | Dragon Court, 27-29 Macklin Street, London WC2B 5LX, United Kingdom</p>\n </div>\n </footer>\n );\n };\n\n return this.usePresetFooter ? presetFooter() : slotBasedFooter();\n }\n}\n","@include spacers();\n\n// Includes CSS taken from https://moderncss.dev/custom-select-styles-with-pure-css/\n\n:host {\n display: contents;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nselect {\n appearance: none;\n border: none;\n padding: 0 1em 0 0;\n margin: 0;\n width: 100%;\n font-family: inherit;\n font-size: inherit;\n cursor: inherit;\n line-height: inherit;\n outline: none;\n display: grid;\n background-color: $colour-white;\n align-items: center;\n}\nselect.grey {\n background-color: $colour-grey-background;\n}\n.selectWrapper {\n position: relative;\n}\n.prompt {\n position: absolute;\n z-index: 2;\n font-size: small;\n top: -1em;\n background-color: $colour-white;\n left: 4em;\n padding-left: 1em;\n padding-right: 1em;\n color: $colour-primary-blue;\n}\n.prompt.grey {\n background-color: $colour-grey-background;\n}\n\n.dropdown {\n @include standard-font();\n position: relative;\n text-align: left;\n &.select-style-bordered {\n .sleeve {\n @include font-size-medium();\n padding: 2px;\n position: relative;\n background-color: $colour-primary-blue;\n @include corner-clip-small-top-right();\n select {\n color: $colour-primary-blue;\n display: block;\n position: relative;\n padding: 10px 80px 10px 10px;\n clip-path:\n polygon(\n 0% 0%, /* top left */\n 0% 0%, /* top left */\n calc(100% - 14px) 0%, /* top right */\n 100% 14px, /* top right */\n 100% 100%, /* bottom right */\n 100% 100%, /* bottom right */\n 0 100%, /* bottom left */\n 0 100% /* bottom left */\n );\n span.placeholder.grey {\n background-color: $colour-grey-background;\n }\n }\n div.arrow {\n position: absolute;\n right: 20px;\n top: 18px;\n width: 10px;\n height: 10px;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOSIgaGVpZ2h0PSI3IiB2aWV3Qm94PSIwIDAgOSA3IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNS4yMzcxNiA2LjYyNDkzQzQuOTAzMjMgNy4xMjUwMiA0LjA5NyA3LjEyNTAyIDMuNzYzMDggNi42MjQ5M0wwLjEyMzg2OCAxLjE3MDYzQy0wLjIxOTk0IDAuNjU1NDU5IDAuMTkyNjMgMS44MzcxZS0wNyAwLjg2MDkwOCAyLjQyMTMyZS0wN0w4LjEzOTMzIDguNzg0MzJlLTA3QzguODA3MTggOS4zNjgxN2UtMDcgOS4yMTk3NSAwLjY1NTQ1OSA4Ljg3NjM3IDEuMTcwNjNMNS4yMzcxNiA2LjYyNDkzWiIgZmlsbD0iIzJDMDg5QiIvPgo8L3N2Zz4K');\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center center;\n z-index: 1;\n pointer-events: none;\n }\n }\n .sleeve:focus-within {\n background-color: $colour-tertiary-coral;\n }\n }\n &.select-style-underlined {\n .sleeve {\n @include dropdown-underlined();\n }\n }\n &.inherit-colour select{\n color: inherit !important;\n }\n\n select {\n max-height: 200px;\n overflow-x: hidden;\n overflow-y: scroll;\n width: 100%;\n z-index: 1;\n left: 0;\n right: 0;\n }\n &.active .options {\n display: block;\n }\n}\n.dropdown.noprompt {\n margin-top: 0;\n}\n.options.grey {\n background-color: $colour-grey-background;\n}\n","import { Component, Prop, h, Element } from '@stencil/core';\n\n@Component({\n tag: 'biggive-form-field-select',\n styleUrl: 'biggive-form-field-select.scss',\n shadow: true,\n})\nexport class BiggiveFormFieldSelect {\n @Element() el: HTMLBiggiveFormFieldSelectElement;\n\n @Prop() selectionChanged: (value: string) => void;\n\n /**\n * Displayed as 'eyebrow' label over the top border of the box.\n */\n @Prop() prompt!: string | null;\n\n @Prop({ mutable: true }) selectedValue: string | null;\n @Prop({ mutable: true }) selectedLabel: string | null;\n\n /**\n * JSON array of label+value objects, or takes a stringified equiavalent (for Storybook)\n */\n @Prop() options!: string | Array<{ label: string; value: string }>;\n @Prop() selectStyle: 'bordered' | 'underlined' = 'bordered';\n\n /**\n * Must match background of containing element, or unintended shape will appear.\n */\n @Prop() backgroundColour: 'white' | 'grey';\n\n @Prop() selectedOptionColour: 'inherit' | 'blue' = 'blue';\n\n private doOptionSelectCompletedHandler = (event: any) => {\n const value = event.target.value;\n this.selectedValue = value;\n this.selectedLabel = event.target.label;\n this.selectionChanged(value);\n };\n\n /**\n * Space below component\n */\n @Prop() spaceBelow: number = 0;\n /**\n * Placeholder\n */\n @Prop() placeholder: string | undefined;\n\n render() {\n const greyIfRequired = this.backgroundColour === 'grey' ? ' grey' : '';\n\n let options = this.formatOptions(this.options);\n\n if (typeof this.placeholder === 'string' && typeof this.selectedValue !== 'string') {\n options = [{ value: '__placeholder__', label: this.placeholder }, ...options];\n }\n\n if (typeof options === 'undefined') {\n console.error('options undefined');\n options = [];\n }\n\n return (\n <div class=\"selectWrapper\">\n <label class={greyIfRequired}>\n <div class={'prompt' + greyIfRequired}>{this.prompt}</div>\n <div\n class={\n 'dropdown space-below-' +\n this.spaceBelow +\n ' select-style-' +\n this.selectStyle +\n (this.prompt === null ? ' noprompt' : '') +\n (this.selectedOptionColour === 'inherit' ? ' inherit-colour' : '')\n }\n >\n <div class=\"sleeve\">\n <select class={greyIfRequired} onChange={this.doOptionSelectCompletedHandler}>\n {options.map(option => (\n <option selected={this.selectedValue === option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n <div class=\"arrow\"></div>\n </div>\n </div>\n </label>\n </div>\n );\n }\n\n private formatOptions(options: string | Array<{ label: string; value: string }>): {\n label: string;\n value: string;\n }[] {\n if (options === undefined) {\n return [];\n }\n\n if (typeof options === 'string') {\n options = JSON.parse(options);\n }\n\n if (Array.isArray(options)) {\n return options;\n }\n\n return Object.entries(options).map(entry => ({ value: entry[0], label: entry[1] }));\n }\n}\n","@include spacers();\n@include text-colours();\n\n:host {\n display: block;\n}\n\n.container {\n @include standard-font();\n img {\n width: 100%;\n height: auto;\n }\n a {\n color: inherit;\n text-decoration: underline;\n }\n &.max-width-10 .sleeve { @include max-width-10(); }\n &.max-width-15 .sleeve { @include max-width-15(); }\n &.max-width-20 .sleeve { @include max-width-20(); }\n &.max-width-25 .sleeve { @include max-width-25(); }\n &.max-width-30 .sleeve { @include max-width-30(); }\n &.max-width-35 .sleeve { @include max-width-35(); }\n &.max-width-40 .sleeve { @include max-width-40(); }\n &.max-width-45 .sleeve { @include max-width-45(); }\n &.max-width-50 .sleeve { @include max-width-50(); }\n &.max-width-55 .sleeve { @include max-width-55(); }\n &.max-width-60 .sleeve { @include max-width-60(); }\n &.max-width-65 .sleeve { @include max-width-65(); }\n &.max-width-70 .sleeve { @include max-width-70(); }\n &.max-width-75 .sleeve { @include max-width-75(); }\n &.max-width-80 .sleeve { @include max-width-80(); }\n &.max-width-85 .sleeve { @include max-width-85(); }\n &.max-width-90 .sleeve { @include max-width-90(); }\n &.max-width-95 .sleeve { @include max-width-95(); }\n}\n\n","import { Component, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'biggive-formatted-text',\n styleUrl: 'biggive-formatted-text.scss',\n shadow: true,\n})\nexport class BiggiveFormattedText {\n /**\n * Space below component\n */\n @Prop() spaceBelow: number = 0;\n /**\n * Default text colour\n */\n @Prop() defaultTextColour: string = 'primary';\n\n /**\n * Width\n */\n @Prop() maxWidth: number = 100;\n\n render() {\n return (\n <div class={'container max-width-' + this.maxWidth + ' text-colour-' + this.defaultTextColour + ' space-below-' + this.spaceBelow}>\n <slot></slot>\n </div>\n );\n }\n}\n","@include backgrounds();\n@include fills();\n\n:host {\n display: contents;\n}\n\n.generic-icon-item {\n @include icon-large();\n\n @media screen and (max-width: $screen-mobile-max) {\n @include icon-medium();\n margin: auto;\n\n a {\n margin: auto;\n }\n }\n}\n\n.CaretRight {\n height: 10px;\n width: 10px;\n margin-right: 0px;\n a {\n padding: 0px;\n }\n}\n\n.MenuClose {\n a {\n svg {\n height: 12px;\n width: 12px;\n }\n }\n}\n","import { IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { Component, Prop, h } from '@stencil/core';\nimport { FontAwesomeIconsService } from '../../util/fontawesome-icons';\nimport { brandColour } from '../../globals/brand-colour';\n\n@Component({\n tag: 'biggive-generic-icon',\n styleUrl: 'biggive-generic-icon.scss',\n shadow: false,\n})\nexport class BiggiveGenericIcon {\n @Prop() backgroundColour: brandColour = 'primary';\n\n @Prop() iconColour: brandColour = 'white';\n\n @Prop() iconGroup: 'beneficiary' | 'misc' | 'social' | 'category';\n\n @Prop() icon: string;\n\n @Prop() url: string;\n\n private getIconDefinition(): IconDefinition | undefined {\n let iconDefinition;\n if (this.iconGroup == 'beneficiary') {\n iconDefinition = FontAwesomeIconsService.getBeneficiaryIcon(this.icon);\n } else if (this.iconGroup == 'misc') {\n iconDefinition = FontAwesomeIconsService.getMiscIcon(this.icon);\n } else if (this.iconGroup == 'social') {\n iconDefinition = FontAwesomeIconsService.getSocialIcon(this.icon);\n } else if (this.iconGroup == 'category') {\n iconDefinition = FontAwesomeIconsService.getCategoryIcon(this.icon);\n }\n return iconDefinition;\n }\n\n render() {\n const iconDefinition = this.getIconDefinition();\n\n return (\n // Note: the icon name prop is set as a css class too for any styling specific to certain icons\n <div class={'generic-icon-item background-colour-' + this.backgroundColour + ' ' + this.icon}>\n <a href={this.url}>\n {iconDefinition ? (\n <svg\n width={iconDefinition.icon[0]}\n height={iconDefinition.icon[1]}\n xmlns=\"http://www.w3.org/2000/svg\"\n class={'fill-' + this.iconColour}\n viewBox={'0 0 ' + iconDefinition.icon[0] + ' ' + iconDefinition.icon[1]}\n >\n <path d={iconDefinition.icon[4].toString()} />\n </svg>\n ) : null}\n </a>\n </div>\n );\n }\n}\n","@include spacers();\n\n:host {\n display: contents;\n}\n\n.grid {\n margin-bottom: $spacer-3;\n display: flex;\n flex-flow: row wrap;\n}\n\n.space-between {\n justify-content: space-between;\n}\n\n.grid ::slotted([slot=grid-item]) {\n display: block;\n}\n\n.column-count-2 ::slotted(*) {\n width: calc( 100% / 2 );\n @include flex-container-column();\n}\n\n.column-count-3 ::slotted(*) {\n width: calc( 100% / 3 );\n @include flex-container-column();\n}\n\n.column-count-4 ::slotted(*) {\n width: calc( 100% / 4 );\n @include flex-container-column();\n}\n\n.column-count-5 ::slotted(*) {\n width: calc( 100% / 5 );\n @include flex-container-column();\n}\n\n.column-count-6 ::slotted(*) {\n width: calc( 100% / 6 );\n @include flex-container-column();\n}\n\n\n.column-gap-1 { justify-content: space-between; }\n.column-gap-2 { justify-content: space-between; }\n.column-gap-3 { justify-content: space-between; }\n.column-gap-4 { justify-content: space-between; }\n.column-gap-5 { justify-content: space-between; }\n.column-gap-6 { justify-content: space-between; }\n\n\n.column-count-2.column-gap-1 ::slotted(*) { width: calc( 100% / 2 - (($spacer-1 * 1) / 2) );}\n.column-count-2.column-gap-2 ::slotted(*) { width: calc( 100% / 2 - (($spacer-2 * 1) / 2) );}\n.column-count-2.column-gap-3 ::slotted(*) { width: calc( 100% / 2 - (($spacer-3 * 1) / 2) );}\n.column-count-2.column-gap-4 ::slotted(*) { width: calc( 100% / 2 - (($spacer-4 * 1) / 2) );}\n.column-count-2.column-gap-5 ::slotted(*) { width: calc( 100% / 2 - (($spacer-5 * 1) / 2) );}\n.column-count-2.column-gap-6 ::slotted(*) { width: calc( 100% / 2 - (($spacer-6 * 1) / 2) );}\n\n.column-count-3.column-gap-1 ::slotted(*) { width: calc( 100% / 3 - (($spacer-1 * 2) / 3) );}\n.column-count-3.column-gap-2 ::slotted(*) { width: calc( 100% / 3 - (($spacer-2 * 2) / 3) );}\n.column-count-3.column-gap-3 ::slotted(*) { width: calc( 100% / 3 - (($spacer-3 * 2) / 3) );}\n.column-count-3.column-gap-4 ::slotted(*) { width: calc( 100% / 3 - (($spacer-4 * 2) / 3) );}\n.column-count-3.column-gap-5 ::slotted(*) { width: calc( 100% / 3 - (($spacer-5 * 2) / 3) );}\n.column-count-3.column-gap-6 ::slotted(*) { width: calc( 100% / 3 - (($spacer-6 * 2) / 3) );}\n\n.column-count-4.column-gap-1 ::slotted(*) { width: calc( 100% / 4 - (($spacer-1 * 3) / 4) );}\n.column-count-4.column-gap-2 ::slotted(*) { width: calc( 100% / 4 - (($spacer-2 * 3) / 4) );}\n.column-count-4.column-gap-3 ::slotted(*) { width: calc( 100% / 4 - (($spacer-3 * 3) / 4) );}\n.column-count-4.column-gap-4 ::slotted(*) { width: calc( 100% / 4 - (($spacer-4 * 3) / 4) );}\n.column-count-4.column-gap-5 ::slotted(*) { width: calc( 100% / 4 - (($spacer-5 * 3) / 4) );}\n.column-count-4.column-gap-6 ::slotted(*) { width: calc( 100% / 4 - (($spacer-6 * 3) / 4) );}\n\n.column-count-5.column-gap-1 ::slotted(*) { width: calc( 100% / 5 - (($spacer-1 * 4) / 5) );}\n.column-count-5.column-gap-2 ::slotted(*) { width: calc( 100% / 5 - (($spacer-2 * 4) / 5) );}\n.column-count-5.column-gap-3 ::slotted(*) { width: calc( 100% / 5 - (($spacer-3 * 4) / 5) );}\n.column-count-5.column-gap-4 ::slotted(*) { width: calc( 100% / 5 - (($spacer-4 * 4) / 5) );}\n.column-count-5.column-gap-5 ::slotted(*) { width: calc( 100% / 5 - (($spacer-5 * 4) / 5) );}\n.column-count-5.column-gap-6 ::slotted(*) { width: calc( 100% / 5 - (($spacer-6 * 4) / 5) );}\n\n.column-count-6.column-gap-1 ::slotted(*) { width: calc( 100% / 6 - (($spacer-1 * 5) / 6) );}\n.column-count-6.column-gap-2 ::slotted(*) { width: calc( 100% / 6 - (($spacer-2 * 5) / 6) );}\n.column-count-6.column-gap-3 ::slotted(*) { width: calc( 100% / 6 - (($spacer-3 * 5) / 6) );}\n.column-count-6.column-gap-4 ::slotted(*) { width: calc( 100% / 6 - (($spacer-4 * 5) / 6) );}\n.column-count-6.column-gap-5 ::slotted(*) { width: calc( 100% / 6 - (($spacer-5 * 5) / 6) );}\n.column-count-6.column-gap-6 ::slotted(*) { width: calc( 100% / 6 - (($spacer-6 * 5) / 6) );}\n\n.column-count-3.column-gap-1:after { content: \"\"; @include flex-container-column(); width: calc( 100% / 3 - (($spacer-1 * 2) / 3) );}\n.column-count-3.column-gap-2:after { content: \"\"; @include flex-container-column(); width: calc( 100% / 3 - (($spacer-2 * 2) / 3) );}\n.column-count-3.column-gap-3:after { content: \"\"; @include flex-container-column(); width: calc( 100% / 3 - (($spacer-3 * 2) / 3) );}\n.column-count-3.column-gap-4:after { content: \"\"; @include flex-container-column(); width: calc( 100% / 3 - (($spacer-4 * 2) / 3) );}\n.column-count-3.column-gap-5:after { content: \"\"; @include flex-container-column(); width: calc( 100% / 3 - (($spacer-5 * 2) / 3) );}\n.column-count-3.column-gap-6:after { content: \"\"; @include flex-container-column(); width: calc( 100% / 3 - (($spacer-6 * 2) / 3) );}\n\n\n\n\n@media screen and (max-width: $screen-large) {\n\n @for $i from 1 through 6 {\n .column-count-#{$i} ::slotted(*) { width: calc( 51% - (($spacer-4 * 1) / 2)) };\n @for $j from 1 through 6 {\n .column-count-#{$i}.column-gap-#{$j} ::slotted(*) { width: calc( 50% - (($spacer-4 * 1) / 2)) };\n }\n }\n\n}\n\n@media screen and (max-width: $screen-mobile-max) {\n @for $i from 1 through 6 {\n .column-count-#{$i} ::slotted(*) { width: 100%; };\n @for $j from 1 through 6 {\n .column-count-#{$i}.column-gap-#{$j} ::slotted(*) { width: 100%; };\n }\n }\n}\n","import { Component, Prop, h } from '@stencil/core';\nimport { spacingOption } from '../../globals/spacing-option';\n\n@Component({\n tag: 'biggive-grid',\n styleUrl: 'biggive-grid.scss',\n shadow: true,\n})\nexport class BiggiveGrid {\n @Prop() spaceBelow: number = 4;\n\n @Prop() columnCount: number = 3;\n\n /**\n * Deprecated - should use columGap Instead\n */\n @Prop() spaceBetween: boolean = false;\n\n @Prop() columnGap: spacingOption = 0;\n\n render() {\n return (\n <div class={'grid column-count-' + this.columnCount + ' space-below-' + this.spaceBelow + ' column-gap-' + this.columnGap + (this.spaceBetween ? ' space-between' : '')}>\n <slot></slot>\n </div>\n );\n }\n}\n","@include alignments();\n@include headings();\n@include spacers();\n\n:host {\n display: contents;\n}\n\n.container {\n @include standard-font();\n @each $key, $colour in $brandColoursIncBrand6Turquoise {\n .heading-colour-#{$key} { color: $colour; }\n }\n display: flex;\n\n h1,h2,h3,h4,h5 {\n margin: 0;\n padding: 0;\n width: 100%;\n svg {\n height: 0.7em;\n margin-right: 0.2em;\n }\n }\n\n @each $key, $colour in $brandColoursIncBrand6Turquoise {\n .icon-colour-#{$key} svg path { fill: $colour; }\n }\n\n}\n","import { Component, Prop, h } from '@stencil/core';\nimport { brandColour } from '../../globals/brand-colour';\nimport { headingTag } from '../../globals/heading-tag';\nimport { headingSize } from '../../globals/heading-size';\nimport { spacingOption } from '../../globals/spacing-option';\n\n@Component({\n tag: 'biggive-heading',\n styleUrl: 'biggive-heading.scss',\n shadow: true,\n})\nexport class BiggiveHeading {\n @Prop() spaceAbove: spacingOption = 2;\n\n @Prop() spaceBelow: spacingOption = 4;\n\n @Prop() colour: brandColour = 'primary';\n\n @Prop() htmlElement: headingTag = 'h1';\n\n @Prop() size: headingSize = 1;\n\n @Prop() align: string = 'left';\n\n @Prop() text: string = '';\n\n @Prop() icon: boolean = false;\n\n @Prop() iconColour: brandColour = 'primary';\n\n render() {\n const Tag = this.htmlElement;\n return (\n <div class={'container align-' + this.align + ' space-above-' + this.spaceAbove + ' space-below-' + this.spaceBelow}>\n <Tag class={'heading-colour-' + this.colour + ' icon-colour-' + this.iconColour + ' heading-' + this.size}>\n {this.icon ? (\n <svg viewBox=\"0 0 102 88\">\n <path class=\"st0\" d=\"M51.2,0l-51,88h102L51.2,0z\" />\n <path\n d=\"M31,68.3c-1,0-1.9-0.9-1.9-1.9c0-1,0.9-1.9,1.9-1.9c1.1,0,1.9,0.9,1.9,1.9C32.9,67.5,32.1,68.3,31,68.3z M29.5,79.4h3v-10\n h-3V79.4z M41,69.4V70c-0.5-0.5-1.4-0.9-2.5-0.9c-2.7,0-4.9,2-4.9,4.9c0,2.9,2.2,4.9,4.9,4.9c1.1,0,2-0.3,2.5-0.9v0.6\n c0,1.3-1.2,1.9-2.7,1.9c-1.3,0-2.4-0.3-3.5-0.9v3c1.3,0.5,2.7,0.6,3.6,0.6c3,0,5.5-1.3,5.5-4.6v-9.4L41,69.4L41,69.4z M41,75.3\n c-0.4,0.6-1.2,0.9-1.9,0.9c-1.3,0-2.3-0.8-2.3-2.2c0-1.4,1-2.2,2.3-2.2c0.8,0,1.5,0.4,1.9,0.9V75.3z M52.8,79.7\n c2.4,0,3.8-0.4,5.1-1.2v-7.7h-6.6v2.9h3.5v2.6c-0.5,0.1-1.1,0.3-1.9,0.3c-3,0-4.4-2-4.4-4.3c0-2.3,1.7-4.3,4.8-4.3\n c1.3,0,2.6,0.4,3.5,0.9v-3.3c-0.9-0.4-2.1-0.7-3.7-0.7c-4.6,0-7.8,3.3-7.8,7.4C45.2,76.5,48.1,79.7,52.8,79.7z M60.7,68.3\n c-1,0-1.9-0.9-1.9-1.9c0-1,0.9-1.9,1.9-1.9c1.1,0,1.9,0.9,1.9,1.9C62.6,67.5,61.8,68.3,60.7,68.3z M59.2,79.4h3v-10h-3V79.4z\n M69,73.9l-2.6-4.5h-3.5l6,10.3l6-10.3h-3.5L69,73.9z M77.5,75.1h7c0-4.4-2.5-6-5.1-6c-2.7,0-5.1,1.6-5.1,5.2c0,3.5,2.5,5.2,5.5,5.2\n c1.3,0,2.7-0.2,3.8-0.8v-2.8c-1.5,0.9-2.5,0.9-3.3,0.9C78.9,76.9,77.6,76.5,77.5,75.1z M79.4,71.5c0.9,0,1.7,0.4,1.8,1.7h-3.7\n C77.7,72,78.6,71.5,79.4,71.5z M26,71.6c0.7-0.6,1.1-1.5,1.1-2.5c0-1.9-1.8-3.9-4.4-3.9h-4.8v14.3h6.3c2.4,0,4.3-1.9,4.3-4.2\n C28.4,73.8,27.8,72.2,26,71.6z M21,68.1h1.4c0.9,0,1.5,0.7,1.5,1.4c0,0.8-0.6,1.4-1.5,1.4H21V68.1z M23.8,76.5H21v-2.9h2.8\n c0.9,0,1.5,0.6,1.5,1.4C25.3,75.9,24.7,76.5,23.8,76.5z\"\n />\n </svg>\n ) : null}\n\n {this.text}\n </Tag>\n </div>\n );\n }\n}\n","@include image-alignment();\n@include spacers();\n@include text-colours();\n\n:host {\n display: contents;\n @include standard-font();\n}\n\n.container {\n @include standard-font();\n overflow: hidden;\n position: relative;\n margin-bottom: $spacer-4;\n min-height: 32.5vw;\n @each $key, $colour in $brandColoursIncBrand6Turquoise {\n &.colour-scheme-#{$key} { color: $colour; }\n }\n .sleeve {\n @include flex-container-row();\n max-width: $screen-desktop-max;\n margin-left: auto;\n margin-right: auto;\n }\n .content-wrap {\n width: 40%;\n position: relative;\n z-index: 1;\n padding: $spacer-8 $spacer-6 $spacer-6 $spacer-0;\n\n .logo, .logo-space {\n height: 75px;\n &.logo-height-1 { height: 50px; }\n &.logo-height-2 { height: 75px; }\n &.logo-height-3 { height: 100px; }\n &.logo-height-4 { height: 125px; }\n &.logo-height-5 { height: 150px; }\n &.logo-height-6 { height: 175px; }\n &.logo-height-7 { height: 200px; }\n &.logo-height-8 { height: 225px; }\n &.logo-height-9 { height: 250px; }\n &.logo-height-10 { height: 275px; }\n }\n\n .logo {\n background-size: contain;\n background-repeat: no-repeat;\n background-position: left center;\n\n img {\n width: auto;\n height: 100%;\n position: relative;\n }\n }\n .slug {\n @include heading-4;\n min-height: 24px; // Sort layout when there is no slug.\n margin: 0;\n padding: 0;\n }\n h1 {\n @include heading-1;\n margin: 0 0 $spacer-3 0;\n padding: 0;\n\n @media (max-width: $screen-desktop-max) {\n @include heading-2;\n }\n }\n .teaser {\n margin: 0;\n padding: 0;\n }\n .teaser-with-space {\n margin: 0 0 $spacer-5 0;\n }\n }\n\n .graphic-wrap {\n position: absolute;\n display: block;\n top: 0;\n left: 0;\n right: 0;\n padding-bottom: 32.5vw;\n background-color: #F1F1F1;\n margin-left: 20vw;\n clip-path: polygon(0 0, 100% 0, 100% 100%);\n .image-wrap {\n @include absolute-fill();\n background-size: cover;\n img {\n display: none;\n }\n }\n }\n}\n\n@media screen and (max-width: $screen-desktop-max) {\n .container {\n min-height: 50vw;\n .sleeve {\n flex-wrap: wrap;\n .content-wrap {\n width: 60%;\n padding: 18vw $spacer-3 $spacer-3 $spacer-3;\n margin-bottom: 50px;\n }\n .graphic-wrap {\n margin-left: 0;\n bottom: auto;\n padding-bottom: 50vw;\n }\n }\n }\n}\n\n\n@media screen and (max-width: $screen-tablet-max) {\n .container {\n .sleeve {\n .content-wrap {\n width: 70%;\n padding-top: $spacer-8;\n }\n }\n }\n}\n\n@media screen and (max-width: $screen-mobile-max) {\n .container {\n .sleeve {\n .content-wrap {\n width: 80%;\n }\n }\n }\n}\n\n@media screen and (max-width: $screen-mobile-small) {\n .container {\n .sleeve {\n .content-wrap {\n width: 100%;\n }\n }\n }\n}\n","/* eslint-disable prettier/prettier */\nimport {Component, h, Prop} from '@stencil/core';\nimport {brandColour} from '../../globals/brand-colour';\nimport {spacingOption} from '../../globals/spacing-option';\n\n\n@Component({\n tag: 'biggive-hero-image',\n styleUrl: 'biggive-hero-image.scss',\n shadow: true,\n})\nexport class BiggiveHeroImage {\n /**\n * Space below component\n */\n @Prop() spaceBelow: spacingOption = 0;\n\n /**\n * Colour Scheme\n */\n @Prop() colourScheme: brandColour = 'primary';\n\n /**\n * Header slug\n */\n @Prop() slug: string;\n\n /**\n * Header slug colour\n */\n @Prop() slugColour: brandColour;\n\n /**\n * Full URL of a logo image.\n */\n @Prop() logo: string = '';\n\n /**\n * Logo container height selection. Numbers are not measurements.\n */\n @Prop() logoHeight: 1|2|3|4|5|6|7|8|9|10 = 3;\n\n /**\n * Logo alt text\n */\n @Prop() logoAltText: string = '';\n\n /**\n * Full URL of a main hero image.\n */\n @Prop() mainImage: string|null = null;\n\n /**\n * Determines whether the main image is clipped to a triangle shape (default) or used as\n * a background for the entire component. Clipping can leave a lot of blank space.\n */\n @Prop() mainImageShape: 'triangle'|'rectangle' = 'triangle';\n\n /**\n * Horizontal alignment of image\n */\n @Prop() mainImageAlignHorizontal: string = 'center';\n\n /**\n * Vertical alignment of image\n */\n @Prop() mainImageAlignVertical: string = 'center';\n\n /**\n * Hero image title, typically the page.\n */\n @Prop() mainTitle: string;\n /**\n * Main title colour\n */\n @Prop() mainTitleColour?: brandColour;\n /**\n * Introductory teaser text\n */\n @Prop() teaser: string|undefined;\n /**\n * Teaser colour\n */\n @Prop() teaserColour?: brandColour;\n /**\n * Button Url\n */\n @Prop() buttonUrl: string;\n\n /**\n * Button Label\n */\n @Prop() buttonLabel: string;\n\n /**\n * Button Colour Scheme\n */\n @Prop() buttonColourScheme: brandColour = 'primary';\n\n\n render() {\n const mainTitleClasses = 'main-title ' + (typeof this.mainTitleColour === 'string' && this.mainTitleColour.length > 0 ? `text-colour-${this.mainTitleColour}` : '');\n const teaserClasses = 'teaser ' +\n (this.buttonLabel?.length > 0 ? 'teaser-with-space ' : '') +\n (typeof this.teaserColour === 'string' && this.teaserColour.length > 0 ? `text-colour-${this.teaserColour}` : '');\n\n // Charities can use line breaks in their copy so we convert them to BR tags to display. Using this rather than\n // `pre` or `pre-wrap` so that literal whitespace inserted into the rendered output doesn't affect the layout.\n // Assuming that this is needed only for the teaser, and the main title would never contain a line break.\n const teaserLines = this.lineBreakToBr(this.teaser);\n\n return (\n <div class={'container colour-scheme-' + this.colourScheme + ' space-below-' + this.spaceBelow}\n style={this.mainImageShape === 'rectangle' ? {'background-image': 'url(' + this.mainImage + ')', 'background-size': 'cover'} : {}}\n >\n <div class=\"sleeve\">\n <div class=\"content-wrap\" >\n {this.logo !== undefined && this.logo !== null ? (\n <div class={'logo image-wrap logo-height-'+this.logoHeight}>\n <img src={this.logo} alt={this.logoAltText} title={this.logoAltText}/>\n </div>\n ) : <div class={'logo-space logo-height-'+this.logoHeight}></div>}\n {this.logo?.length > 0 || this.slug?.length > 0\n ? (<div class={'slug text-colour-'+this.slugColour}>{this.slug}</div>)\n : null\n }\n <h1 class={mainTitleClasses}>{this.mainTitle}</h1>\n <div class={teaserClasses}>{teaserLines}</div>\n {this.buttonLabel != null && this.buttonUrl != null\n ? <biggive-button colour-scheme={this.buttonColourScheme} url={this.buttonUrl} label={this.buttonLabel}></biggive-button>\n : null\n }\n </div>\n {this.mainImageShape === 'triangle' && this.mainImage !== null ? (\n <div class=\"graphic-wrap\">\n <div\n class=\"image-wrap\"\n role=\"presentation\"\n style={{ 'background-image': 'url(' + this.mainImage + ')', 'background-position': this.mainImageAlignHorizontal + ' ' + this.mainImageAlignVertical }}\n >\n </div>\n </div>\n ) : null}\n </div>\n </div>\n );\n }\n\n /**\n * Takes a string that may contain any form of newlines, and returns an array that alternates\n * between substrings found between the newlines and <br/> elements as objects.\n */\n private lineBreakToBr(string: string|undefined): unknown[] {\n if (string == undefined) {\n return [];\n }\n\n return string.split(/\\r?\\n|\\r|\\n/g)\n .map(line => [line, <br/>])\n .flat()\n .slice(0, -1);\n }\n}\n","@include backgrounds();\n@include spacers();\n@include text-colours();\n\n:host {\n display: contents; \n}\n\n.container {\n @include standard-font();\n a {\n display: block;\n text-decoration: none;\n &.full-width-true {\n display: block;\n }\n }\n &.centered-true {\n text-align: center;\n }\n &.shadow-true {\n filter: drop-shadow(5px 5px 10px rgba(0,0,0,0.25));\n }\n &.rounded-true {\n border-radius: 10px;\n }\n &.background-padding-1 { padding: $spacer-1; }\n &.background-padding-2 { padding: $spacer-2; }\n &.background-padding-3 { padding: $spacer-3; }\n &.background-padding-4 { padding: $spacer-4; }\n &.background-padding-5 { padding: $spacer-5; }\n &.background-padding-6 { padding: $spacer-6; }\n\n .sleeve {\n display: flex;\n .text-wrap {\n margin: auto 0;\n text-decoration: none;\n &.text-padding-1 { padding: 0 $spacer-1; }\n &.text-padding-2 { padding: 0 $spacer-2; }\n &.text-padding-3 { padding: 0 $spacer-3; }\n &.text-padding-4 { padding: 0 $spacer-4; }\n &.text-padding-5 { padding: 0 $spacer-5; }\n &.text-padding-6 { padding: 0 $spacer-6; }\n }\n\n .arrow-wrap {\n margin: auto 0 auto auto;\n @each $key, $colour in $brandColoursIncBrand6Turquoise {\n &.arrow-colour-#{$key} .arrow-wrap svg path { stroke: $colour; }\n }\n }\n }\n\n .icon-wrap {\n background-position: center center;\n background-size: cover;\n\n &.circle-true {\n border-radius: 50%;\n overflow: hidden;\n }\n\n &.size-small {\n width: 30px;\n height: 30px;\n }\n &.size-medium {\n width: 45px;\n height: 45px;\n } \n &.size-large {\n width: 60px;\n height: 60px;\n }\n &.size-x-large {\n width: 75px;\n height: 75px;\n }\n &.size-xx-large {\n width: 90px;\n height: 90px;\n }\n\n .misc-icon-item {\n width: 100%;\n height: 100%;\n }\n\n .misc-icon-item a {\n padding: 20%;\n }\n\n }\n\n @each $key, $colour in $brandColoursIncBrand6Turquoise {\n &.arrow-colour-#{$key} .arrow-wrap svg path { stroke: $colour; }\n\n }\n \n\n\n}\n\n\n","import { Component, Event, EventEmitter, Prop, h } from '@stencil/core';\nimport { brandColour } from '../../globals/brand-colour';\nimport { spacingOption } from '../../globals/spacing-option';\n\n@Component({\n tag: 'biggive-icon-button',\n styleUrl: 'biggive-icon-button.scss',\n shadow: true,\n})\nexport class BiggiveIconButton {\n @Event({\n eventName: 'doButtonClick',\n bubbles: true,\n cancelable: true,\n composed: true,\n })\n doButtonClick: EventEmitter<{ event: object; url: string }>;\n\n @Prop() spaceBelow: spacingOption = 1;\n\n @Prop() backgroundColour: brandColour = 'white';\n\n @Prop() backgroundPadding: spacingOption = 0;\n\n @Prop() text: string;\n\n @Prop() textColour: brandColour = 'black';\n\n @Prop() iconGroup: 'beneficiary' | 'misc' | 'social' | 'category';\n\n @Prop() icon: string;\n\n @Prop() url: string;\n\n @Prop() openInNewTab: boolean = false;\n\n @Prop() size: 'small' | 'medium' | 'large' | 'x-large' | 'xx-large' = 'medium';\n\n @Prop() arrow: boolean = false;\n\n @Prop() arrowColour: brandColour = 'black';\n\n @Prop() circle: boolean = false;\n\n @Prop() shadow: boolean = false;\n\n @Prop() centered: boolean = false;\n\n @Prop() rounded: boolean = false;\n\n @Prop() buttonId: undefined | string = undefined;\n\n private handleButtonClick = (event: any) => {\n this.doButtonClick.emit({ event: event, url: event.target.parentElement.href });\n };\n\n render() {\n return (\n <div\n class={\n 'container space-below-' +\n this.spaceBelow +\n ' background-colour-' +\n this.backgroundColour +\n ' background-padding-' +\n this.backgroundPadding +\n ' centered-' +\n this.centered +\n ' rounded-' +\n this.rounded +\n ' shadow-' +\n this.shadow\n }\n >\n <a href={this.url} target={this.openInNewTab ? '_blank' : '_self'} id={this.buttonId}>\n <div class=\"sleeve\" onClick={this.handleButtonClick}>\n <div class={'icon-wrap ' + ' size-' + this.size + ' circle-' + this.circle.toString()}>\n <biggive-generic-icon iconGroup={this.iconGroup} icon={this.icon}></biggive-generic-icon>\n </div>\n\n {this.text != '' ? <div class={'text-wrap text-colour-' + this.textColour + ' text-padding-' + this.backgroundPadding}>{this.text}</div> : null}\n\n {this.arrow ? (\n <div class={'arrow-wrap arrow-colour-' + this.arrowColour}>\n <svg width=\"8\" height=\"12\" viewBox=\"0 0 8 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0.76912 1.0791L5.73828 6.04826L0.769121 11.0174\" stroke=\"black\" stroke-width=\"2\" />\n </svg>\n </div>\n ) : null}\n </div>\n </a>\n </div>\n );\n }\n}\n","@include image-alignment();\n@include spacers();\n\n:host {\n display: contents;\n}\n\n.container {\n @include standard-font();\n}","import { Component, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'biggive-image',\n styleUrl: 'biggive-image.scss',\n shadow: true,\n})\nexport class BiggiveImage {\n /**\n * Space above component\n */\n @Prop() spaceAbove: number = 0;\n\n /**\n * Space below component\n */\n @Prop() spaceBelow: number = 0;\n\n /**\n * Full URL of a image.\n */\n @Prop() imageUrl: string = '';\n\n /**\n * Image alt text tag.\n */\n @Prop() imageAltText: string = '';\n\n /**\n * Image width\n */\n @Prop() width: number = 0;\n\n /**\n * Image width\n */\n @Prop() height: number = 0;\n\n /**\n * Size unit\n */\n @Prop() sizeUnit: string = 'px';\n\n private getWidth(): string {\n var width = 'auto';\n if (this.width > 0) {\n width = this.width + this.sizeUnit;\n }\n return width;\n }\n\n private getHeight(): string {\n var height = 'auto';\n if (this.height > 0) {\n height = this.height + this.sizeUnit;\n }\n return height;\n }\n\n render() {\n return (\n <div class={'container space-above-' + this.spaceAbove + ' space-below-' + this.spaceBelow} style={{ width: this.getWidth(), height: this.getHeight() }}>\n <div class=\"image-wrap\">\n <img src={this.imageUrl} style={{ width: this.getWidth(), height: this.getHeight() }} alt={this.imageAltText} />\n </div>\n </div>\n );\n }\n}\n","@include backgrounds();\n@include text-colours();\n@include spacers();\n\n:host {\n display: contents; \n}\n\n.container {\n @include standard-font();\n a {\n display: block;\n text-decoration: none;\n &.full-width-true {\n display: block;\n }\n }\n &.centered-true {\n text-align: center;\n }\n &.shadow-true {\n filter: drop-shadow(5px 5px 10px rgba(0,0,0,0.25));\n }\n &.rounded-true {\n border-radius: 10px;\n }\n &.background-padding-1 { padding: $spacer-1; }\n &.background-padding-2 { padding: $spacer-2; }\n &.background-padding-3 { padding: $spacer-3; }\n &.background-padding-4 { padding: $spacer-4; }\n &.background-padding-5 { padding: $spacer-5; }\n &.background-padding-6 { padding: $spacer-6; }\n\n .sleeve {\n display: flex;\n .text-wrap {\n margin: auto 0;\n text-decoration: none;\n &.text-padding-1 { padding: 0 $spacer-1; }\n &.text-padding-2 { padding: 0 $spacer-2; }\n &.text-padding-3 { padding: 0 $spacer-3; }\n &.text-padding-4 { padding: 0 $spacer-4; }\n &.text-padding-5 { padding: 0 $spacer-5; }\n &.text-padding-6 { padding: 0 $spacer-6; }\n }\n\n .arrow-wrap {\n margin: auto 0 auto auto;\n @each $key, $colour in $brandColoursIncBrand6Turquoise {\n &.arrow-colour-#{$key} .arrow-wrap svg path { stroke: $colour; }\n }\n }\n }\n\n .image-wrap {\n background-position: center center;\n background-size: cover;\n\n &.image-style-contain {\n background-size: contain;\n } \n\n &.circle-true {\n border-radius: 50%;\n overflow: hidden;\n }\n\n &.size-small {\n width: 30px;\n height: 30px;\n }\n &.size-medium {\n width: 45px;\n height: 45px;\n } \n &.size-large {\n width: 60px;\n height: 60px;\n }\n &.size-x-large {\n width: 75px;\n height: 75px;\n }\n &.size-xx-large {\n width: 90px;\n height: 90px;\n }\n\n }\n\n\n \n\n\n}\n\n\n","import { Component, Event, EventEmitter, Prop, h } from '@stencil/core';\nimport { brandColour } from '../../globals/brand-colour';\nimport { spacingOption } from '../../globals/spacing-option';\n\n@Component({\n tag: 'biggive-image-button',\n styleUrl: 'biggive-image-button.scss',\n shadow: true,\n})\nexport class BiggiveImageButton {\n @Event({\n eventName: 'doButtonClick',\n bubbles: true,\n cancelable: true,\n composed: true,\n })\n doButtonClick: EventEmitter<{ event: object; url: string }>;\n\n @Prop() spaceBelow: spacingOption = 1;\n\n @Prop() backgroundColour: brandColour = 'white';\n\n @Prop() backgroundPadding: spacingOption = 0;\n\n @Prop() text: string;\n\n @Prop() textColour: brandColour = 'black';\n\n @Prop() imageUrl: string;\n\n @Prop() imageStyle: string = 'cover';\n\n @Prop() url: string;\n\n @Prop() openInNewTab: boolean = false;\n\n @Prop() size: 'small' | 'medium' | 'large' | 'x-large' | 'xx-large' = 'medium';\n\n @Prop() arrow: boolean = false;\n\n @Prop() arrowColour: brandColour = 'black';\n\n @Prop() circle: boolean = false;\n\n @Prop() shadow: boolean = false;\n\n @Prop() centered: boolean = false;\n\n @Prop() rounded: boolean = false;\n\n @Prop() buttonId: undefined | string = undefined;\n\n private handleButtonClick = (event: any) => {\n this.doButtonClick.emit({ event: event, url: event.target.parentElement.href });\n };\n\n render() {\n return (\n <div\n class={\n 'container space-below-' +\n this.spaceBelow +\n ' background-colour-' +\n this.backgroundColour +\n ' background-padding-' +\n this.backgroundPadding +\n ' centered-' +\n this.centered +\n ' rounded-' +\n this.rounded +\n ' shadow-' +\n this.shadow\n }\n >\n <a href={this.url} target={this.openInNewTab ? '_blank' : '_self'} id={this.buttonId}>\n <div class=\"sleeve\" onClick={this.handleButtonClick}>\n <div\n class={'image-wrap ' + ' image-style-' + this.imageStyle + ' size-' + this.size + ' circle-' + this.circle.toString()}\n style={{ backgroundImage: 'url(' + this.imageUrl + ')' }}\n ></div>\n\n {this.text != '' ? <div class={'text-wrap text-colour-' + this.textColour + ' text-padding-' + this.backgroundPadding}>{this.text}</div> : null}\n\n {this.arrow ? (\n <div class={'arrow-wrap arrow-colour-' + this.arrowColour}>\n <svg width=\"8\" height=\"12\" viewBox=\"0 0 8 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0.76912 1.0791L5.73828 6.04826L0.769121 11.0174\" stroke=\"black\" stroke-width=\"2\" />\n </svg>\n </div>\n ) : null}\n </div>\n </a>\n </div>\n );\n }\n}\n","@include image-alignment();\n@include text-colours();\n\n:host {\n display: contents;\n}\n\n.container {\n @include standard-font();\n position: relative;\n .sleeve {\n @include flex-container-row();\n .content-wrap {\n width: calc(40% - $spacer-3);\n position: relative;\n z-index: 1;\n .slug {\n @include heading-4;\n margin: 0;\n padding: 0;\n }\n h2 {\n @include heading-2;\n margin: 0 0 $spacer-3 0;\n padding: 0;\n }\n .teaser {\n margin: 0 0 $spacer-5 0;\n padding: 0;\n }\n }\n \n .graphic-wrap {\n width: calc(60% - $spacer-3);\n }\n }\n}\n\n\n@media screen and (max-width: $screen-mobile-max) {\n .container {\n .sleeve {\n flex-wrap: wrap;\n .content-wrap {\n width: 100%;\n }\n .graphic-wrap {\n width: 100%;\n margin-bottom: $spacer-3;\n order: -1;\n }\n }\n }\n}\n\n\n","import { Component, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'biggive-image-feature',\n styleUrl: 'biggive-image-feature.scss',\n shadow: true,\n})\nexport class BiggiveImageFeature {\n /**\n * Space below component\n */\n @Prop() spaceBelow: number = 0;\n /**\n * Default text colour\n */\n @Prop() defaultTextColour: string = 'primary';\n\n /**\n * Full URL of a image.\n */\n @Prop() imageUrl: string = '';\n\n /**\n * Image alt text tag.\n */\n @Prop() imageAltText: string = '';\n\n /**\n * Slug\n */\n @Prop() slug: string;\n\n /**\n * Slug colour\n */\n @Prop() slugColour: string = '';\n\n /**\n * Video title\n */\n @Prop() mainTitle: string;\n\n /**\n * Slug colour\n */\n @Prop() mainTitleColour: string = '';\n\n /**\n * Introductory teaser text\n */\n @Prop() teaser: string;\n\n /**\n * Teaser colour\n */\n @Prop() teaserColour: string = '';\n\n /**\n * Button Url\n */\n @Prop() buttonUrl: string;\n\n /**\n * Button Label\n */\n @Prop() buttonLabel: string;\n\n /**\n * Button Colour Scheme\n */\n @Prop() buttonColourScheme: string = 'primary';\n\n render() {\n return (\n <div class={'container text-colour-' + this.defaultTextColour + ' space-below-' + this.spaceBelow}>\n <div class=\"sleeve\">\n <div class=\"content-wrap\">\n <div class={'slug text-colour-' + this.slugColour}>{this.slug}</div>\n <h2 class={'title text-colour-' + this.mainTitleColour}>{this.mainTitle}</h2>\n <div class={'teaser text-colour-' + this.teaserColour}>{this.teaser}</div>\n {this.buttonLabel != null && this.buttonUrl != null ? (\n <biggive-button colour-scheme={this.buttonColourScheme} url={this.buttonUrl} label={this.buttonLabel}></biggive-button>\n ) : null}\n </div>\n <div class=\"graphic-wrap\">\n {this.imageUrl !== null && this.imageUrl !== undefined ? (\n <div class=\"image-wrap\">\n <img src={this.imageUrl} alt={this.imageAltText} />\n </div>\n ) : null}\n </div>\n </div>\n </div>\n );\n }\n}\n",":host {\n display: block !important;\n}\n\n:host(.fixed) {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n z-index: 10;\n}\n\n* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n font-family: 'Euclid Triangle', sans-serif;\n}\n\na {\n // target all classes prefixed with 'icon-' so we don't repeat code\n &[class^='icon-'],\n &[class*='icon-'] {\n padding-left: 20px;\n background-repeat: no-repeat;\n background-size: auto 10px;\n background-position: left center;\n }\n\n &.icon-green {\n background-image: url(/assets/images/triangles-combined.svg);\n }\n\n &.icon-children {\n background-image: url(/assets/images/triangles-combined-children.svg);\n }\n\n &.icon-christmas {\n background-image: url(/assets/images/triangles-combined-christmas-challenge.svg);\n }\n\n &.icon-green-match {\n background-image: url(/assets/images/triangles-combined-green-match.svg);\n }\n\n &.icon-women-girls {\n background-image: url(/assets/images/triangles-combined-women-girls.svg);\n }\n\n &.icon-mental-health {\n background-image: url(/assets/images/triangles-combined-mental-health.svg);\n }\n\n &.icon-anchor-match {\n background-image: url(/assets/images/triangles-combined-anchor.svg);\n }\n\n &.icon-small-charity {\n background-image: url(/assets/images/triangles-combined-small-charity-week.svg);\n }\n\n &.icon-emergency {\n background-image: url(/assets/images/triangles-combined-emergency.svg);\n }\n\n &.icon-arts-impact {\n background-image: url(/assets/images/triangles-combined-arts-black.svg);\n }\n}\n\n.mobile-only {\n display: none !important;\n}\n\n.row-top {\n padding: $spacer-2 $spacer-4;\n background-color: $colour-primary-blue;\n display: flex;\n max-height: $icon-size-large + 2 * $spacer-2;\n\n .social-icon-wrap {\n display: flex;\n min-height: $icon-size-large; // Avoid broken content padding offset, due to menu height changing after component load.\n margin-right: $spacer-2;\n\n .social-icon-item {\n margin-right: $spacer-2;\n }\n }\n\n .nav-secondary {\n margin-left: auto;\n display: grid;\n\n ul {\n list-style: none;\n display: inline-flex;\n margin: auto;\n }\n\n li {\n border-right: 1px solid $colour-white;\n height: fit-content;\n padding: 0 10px;\n\n &:last-child {\n border-right: 0;\n padding-right: 0;\n }\n\n a {\n color: $colour-white;\n text-decoration: none;\n }\n }\n }\n}\n\nnav {\n top: 0;\n left: 0;\n width: 100%;\n height: $nav-height-desktop;\n background: white;\n z-index: 99;\n box-shadow: 0 1px 2px rgb(0 0 0 / 20%);\n\n .navbar {\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin: auto;\n padding: 0 50px;\n\n .nav-links {\n line-height: $nav-height-desktop;\n height: 100%;\n\n .sidebar-logo {\n display: none;\n }\n\n .links {\n display: flex;\n\n li {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: space-between;\n list-style: none;\n padding: 0 30px;\n\n a {\n height: 100%;\n text-decoration: none;\n white-space: nowrap;\n color: black;\n font-size: 17px;\n font-weight: 500;\n }\n\n .sub-menu {\n position: absolute;\n top: $nav-height-desktop;\n left: 0;\n line-height: 40px;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);\n border-radius: 0 0 4px 4px;\n display: none;\n z-index: 2;\n background-color: inherit;\n\n li {\n padding: 0 22px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n }\n\n a {\n color: black;\n font-size: 15px;\n font-weight: 500;\n }\n\n .more {\n .sub-sub-menu {\n position: absolute;\n top: 0;\n left: 100%;\n border-radius: 0 4px 4px 4px;\n z-index: 1;\n display: none;\n }\n }\n }\n\n .arrow {\n margin-left: 5px;\n text-align: center;\n display: inline-block;\n color: black;\n transition: all 0.3s ease;\n\n &.transform-90 {\n transform: rotate(90deg);\n }\n }\n }\n }\n }\n\n .logo {\n min-width: 180px;\n width: 180px;\n\n a {\n font-size: 30px;\n color: black;\n text-decoration: none;\n font-weight: 600;\n display: grid;\n }\n }\n\n .bx-menu {\n display: none;\n }\n }\n}\n\n@media (hover: hover) {\n /* when hover is supported */\n .row-top {\n .nav-secondary {\n li {\n a {\n &:hover {\n border-bottom-color: $colour-white;\n color: $colour-white;\n }\n }\n }\n }\n }\n\n nav {\n .navbar {\n .nav-links {\n .links {\n li {\n .sub-menu {\n .more {\n &:hover {\n .sub-sub-menu {\n display: block;\n }\n }\n }\n }\n\n &:hover {\n .sub-menu-arrow {\n transform: rotate(90deg);\n }\n\n .sub-menu {\n display: block;\n background-color: white;\n\n .sub-sub-menu {\n background-color: white;\n }\n }\n }\n }\n }\n }\n }\n }\n}\n\n@media (max-width: 1200px) {\n nav {\n .navbar {\n .logo {\n min-width: 120px;\n width: 120px;\n }\n\n .nav-links {\n .links {\n li {\n padding: 0 7px;\n\n a {\n font-size: 15px;\n }\n\n .sub-menu {\n a {\n font-size: 13px;\n }\n }\n }\n }\n }\n }\n }\n}\n\n@media (max-width: $screen-large) {\n .mobile-only {\n display: block !important;\n }\n\n .row-top {\n display: none;\n }\n\n nav {\n height: 60px;\n .navbar {\n padding: 0px 25px;\n .bx-menu {\n display: block;\n font-size: 25px;\n color: black;\n }\n\n .nav-links {\n position: fixed;\n top: 0;\n left: -100%;\n display: block;\n max-width: 450px;\n width: 100%;\n background: white;\n line-height: 40px;\n padding: 20px;\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n transition: all 0.5s ease;\n z-index: 1000;\n overflow-y: scroll;\n\n .sidebar-logo {\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n a {\n display: contents;\n\n #mobileLogo {\n width: 130px;\n }\n\n }\n\n #x {\n margin-right: 15px;\n }\n\n i {\n font-size: 25px;\n color: black;\n }\n }\n\n .mobile-social-icon-wrap {\n margin-top: 20px;\n }\n\n .links {\n display: block;\n margin-top: 20px;\n\n li {\n display: block;\n border-bottom: 1px solid #e6e6e6;\n\n a {\n width: 100%;\n display: block;\n }\n\n .sub-menu {\n position: relative;\n top: 0;\n box-shadow: none;\n display: none;\n\n li {\n border-bottom: none;\n }\n\n .sub-sub-menu {\n display: none;\n position: relative;\n left: 0;\n\n li {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n }\n\n .more {\n span {\n display: flex;\n align-items: center;\n }\n\n .sub-sub-menu {\n &.display-sub-menu {\n position: initial;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n @media (max-width: 370px) {\n nav .navbar .nav-links {\n max-width: 100%;\n }\n }\n}\n\n.display-sub-menu, .display-sub-menu li {\n display: block !important;\n}\n\n#nav-primary .display-sub-menu, #nav-primary .display-sub-menu li {\n background-color: white;\n}\n\n\n.sub-menu-main {\n position: absolute;\n top: $upper-nav-height-desktop;\n left: 0;\n line-height: 40px;\n border-radius: 0 0 4px 4px;\n display: none;\n background-color: $colour-primary-blue;\n z-index: 2;\n\n li {\n border-right: none !important;\n padding: 0 22px;\n display: none;\n }\n\n @media (max-width: $screen-large) {\n position: static !important;\n background: none;\n }\n}\n\n.arrow {\n margin-left: 5px;\n text-align: center;\n display: inline-block;\n color: black;\n transition: all 0.3s ease;\n\n &.transform-90 {\n transform: rotate(90deg);\n }\n}\n\n.nav-secondary li {\n position: relative !important;\n &:hover {\n .sub-menu-arrow {\n transform: rotate(90deg);\n }\n\n .sub-menu-main {\n display: block;\n li {\n display: block;\n }\n }\n }\n}\n","import { Component, Element, Event, EventEmitter, h, Host, Method, Prop } from '@stencil/core';\nimport { makeURL } from '../../util/helper-methods';\n\n@Component({\n tag: 'biggive-main-menu',\n styleUrl: 'biggive-main-menu.scss',\n shadow: true,\n})\nexport class BiggiveMainMenu {\n private lastScrollHeight = 0;\n\n @Element() host: HTMLBiggiveMainMenuElement;\n\n // URL prefixes vary by environment, and components library is not best placed to know what they are, so we\n // take them as props. But somehow on first render the prop passed in doesn't seem to be used, so the defaults\n // below are the values currently used in our prod site. They should be replaced by other values in other\n // environments.\n @Prop() blogUrlPrefix: string = 'https://biggive.org';\n\n @Prop() donateUrlPrefix: string = 'https://donate.biggive.org';\n\n @Prop() experienceUrlPrefix: string = 'https://community.biggive.org';\n\n @Prop() smallCharityWeekEnabled = false;\n\n /**\n * We don't want to make the ?noredirect version proliferate too much so err on not\n * including this. We also don't really want every single page to have to get highlight cards\n * to set this property. So for now, typically only meta-campaign bothers to get the correct value\n * to set this true if appropriate. That's the page which is the destination of the redirect so is\n * arguably the only place where it's essential that the menu lets you go to the 'normal' home page.\n */\n @Prop() someCampaignHasHomePageRedirect = false;\n\n /**\n * Whether the current user is logged in (i.e. is assumed to have a valid JWT). They get links to some\n * extra content if they are.\n */\n @Prop() isLoggedIn = false;\n\n @Event({\n eventName: 'logoutClicked',\n bubbles: true,\n cancelable: true,\n composed: true,\n })\n logoutClicked: EventEmitter<void>;\n\n @Method()\n async closeMobileMenuFromOutside() {\n const mobileMenu = this.host.shadowRoot!.querySelector<HTMLElement>('.nav-links');\n mobileMenu!.style.left = '-100%';\n }\n\n private openMobileMenu = () => {\n const mobileMenu = this.host.shadowRoot!.querySelector<HTMLElement>('.nav-links');\n mobileMenu!.style.left = '0';\n };\n\n private logOut = () => {\n this.logoutClicked.emit();\n };\n\n private closeMobileMenu = () => {\n const mobileMenu = this.host.shadowRoot!.querySelector<HTMLElement>('.nav-links');\n mobileMenu!.style.left = '-100%';\n };\n\n private noNav(event: Event) {\n event.preventDefault();\n }\n\n private setHeaderSize() {\n if (this.host.scrollHeight === this.lastScrollHeight) {\n // Some browsers fire 'resize' overzealously on scroll; we don't want to cause extra paints if nothing\n // relevant changed.\n return;\n }\n\n this.lastScrollHeight = this.host.scrollHeight;\n\n // Some resize edge cases lead Firefox, and maybe others, to go haywire and get a host offset\n // height of millions of pixels, presumably due to a layout logic loop. So for as long as we use\n // this body padding workaround, we need a safe maximum value, currently 130px, beyond which\n // we will never further displace the main content.\n // (Possibly scrollHeight could have the same issue, not tested.)\n // We have also seen intermittent scrolling scenarios where `scrollHeight` is spuriously less than 60px,\n // maybe related to browsers / OSes with \"overscroll\" features. So we also now set a fixed minimum of 60px.\n const scrollHeight = isNaN(this.host.scrollHeight) ? 60 : Math.max(60, this.host.scrollHeight);\n\n document.body.style.paddingTop = Math.min(130, scrollHeight).toString() + 'px';\n }\n\n componentDidLoad() {\n this.host.classList.add('fixed');\n window.addEventListener('resize', () => {\n this.setHeaderSize();\n });\n this.setHeaderSize();\n\n const subMenuElements = this.host.shadowRoot!.querySelectorAll<HTMLElement>('.sub-menu');\n if (subMenuElements.length === 0) {\n throw new Error('Missing subMenuElements');\n }\n\n /**\n * Closes all the sub-menus except the one exception.\n */\n const closeAllSubMenus = ({ except }: { except: HTMLAnchorElement }) => {\n subMenuElements.forEach(subMenuElement => {\n const link = subMenuElement.parentElement?.querySelector('a');\n\n if (link === except) {\n return;\n }\n\n link?.classList.remove('transform-90');\n subMenuElement.classList.remove('display-sub-menu');\n });\n };\n\n subMenuElements.forEach(subMenuElement => {\n // the subMenuLink is a sibling element to the actual sub-menu\n const subMenuLink = subMenuElement.parentElement?.querySelector('a');\n\n subMenuLink!.onclick = () => {\n const subMenuArrow = subMenuLink!.querySelector('.sub-menu-arrow');\n closeAllSubMenus({ except: subMenuLink! });\n subMenuArrow!.classList.toggle('transform-90');\n subMenuElement.classList.toggle('display-sub-menu');\n };\n });\n\n const subSubMenuElements = this.host.shadowRoot!.querySelectorAll<HTMLElement>('.sub-sub-menu');\n\n if (subSubMenuElements.length === 0) {\n throw new Error('Missing subSubMenuElements');\n }\n\n subSubMenuElements.forEach(subSubMenuElement => {\n // the subSubMenuLink is a sibling element to the actual sub-sub-menu\n const subSubMenuLink = subSubMenuElement!.parentElement!.querySelector('a');\n\n subSubMenuLink!.onclick = () => {\n const subMenuArrow = subSubMenuLink!.querySelector('.sub-sub-menu-arrow');\n subMenuArrow!.classList.toggle('transform-90');\n subSubMenuElement.classList.toggle('display-sub-menu');\n };\n });\n }\n\n private getSecondaryNavLinks(layout: 'desktop' | 'mobile') {\n const chevronIconColour = layout === 'desktop' ? 'white' : 'black';\n const chevronBackgroundColour = layout === 'desktop' ? 'blue' : 'white';\n return (\n <ul>\n {!this.isLoggedIn && (\n <li>\n <a href={makeURL('Donate', this.donateUrlPrefix, 'login')}>Donor Login</a>\n </li>\n )}\n {this.isLoggedIn && (\n <li>\n <a onClick={this.noNav}>\n My Account\n <biggive-misc-icon\n class=\"bx bxs-chevron-down sub-menu-arrow arrow\"\n background-colour={chevronBackgroundColour}\n icon-colour={chevronIconColour}\n icon=\"CaretRight\"\n ></biggive-misc-icon>\n </a>\n <ul class=\"sub-menu sub-menu-main\" id=\"my-account-sub-menu\">\n <li>\n <a href={makeURL('Donate', this.donateUrlPrefix, 'my-account')}>Your details</a>\n </li>\n <li>\n <a href=\"javascript:void(0)\" onClick={this.logOut}>\n Log out\n </a>\n </li>\n </ul>\n </li>\n )}\n <li>\n <a href={makeURL('Experience', this.experienceUrlPrefix, 'charities/s/login')}>Charity Login</a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'support')}>Support</a>\n </li>\n </ul>\n );\n }\n\n render() {\n const homePageLink = this.someCampaignHasHomePageRedirect ? '/?noredirect' : '/';\n\n // calling same function twice because using same JSX node twice is not allowed\n // see https://stenciljs.com/docs/templating-jsx#avoid-shared-jsx-nodes\n const secondaryNavLinksForDesktop = this.getSecondaryNavLinks('desktop');\n const secondaryNavLinksForMobile = this.getSecondaryNavLinks('mobile');\n\n return (\n <Host>\n <div class=\"row row-top\">\n <div class=\"social-icon-wrap\">\n <biggive-social-icon service=\"Facebook\" url=\"https://www.facebook.com/BigGive.org\" background-colour=\"tertiary\" icon-colour=\"black\"></biggive-social-icon>\n <biggive-social-icon service=\"Twitter\" url=\"https://x.com/BigGive\" background-colour=\"tertiary\" icon-colour=\"black\"></biggive-social-icon>\n <biggive-social-icon service=\"LinkedIn\" url=\"https://uk.linkedin.com/company/big-give\" background-colour=\"tertiary\" icon-colour=\"black\"></biggive-social-icon>\n <biggive-social-icon\n service=\"YouTube\"\n url=\"https://www.youtube.com/channel/UC9_wH1aaTuZurJ-F9R8GDcA\"\n background-colour=\"tertiary\"\n icon-colour=\"black\"\n ></biggive-social-icon>\n <biggive-social-icon service=\"Instagram\" url=\"https://www.instagram.com/biggiveorg\" background-colour=\"tertiary\" icon-colour=\"black\"></biggive-social-icon>\n </div>\n <div class=\"nav-secondary\">{secondaryNavLinksForDesktop}</div>\n </div>\n <nav role=\"navigation\" aria-label=\"Main Menu\">\n <div class=\"navbar\">\n <div class=\"logo\">\n <a href={this.donateUrlPrefix + homePageLink} aria-label=\"Home\">\n <svg version=\"1.1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 140.9 30\">\n <path d=\"M51.9,6.1c-1.7,0-3.1-1.4-3.1-3s1.4-3,3.1-3C53.6,0,55,1.4,55,3S53.6,6.1,51.9,6.1z M49.3,23.8h5V7.7h-5V23.8z M68.5,7.7v1 c-0.8-0.7-2.3-1.4-4.1-1.4c-4.5,0-8.2,3.2-8.2,7.9c0,4.7,3.7,7.9,8.2,7.9c1.8,0,3.4-0.5,4.1-1.4v0.9c0,2.1-1.9,3.1-4.4,3.1 c-2.2,0-4-0.5-5.8-1.4V29c2.1,0.7,4.4,1,6,1c5,0,9.2-2,9.2-7.3v-15L68.5,7.7L68.5,7.7z M68.5,17.2c-0.7,1-1.9,1.4-3.2,1.4 c-2.1,0-3.8-1.2-3.8-3.4c0-2.2,1.7-3.4,3.8-3.4c1.3,0,2.5,0.6,3.2,1.5V17.2z M88.1,24.2c4,0,6.4-0.7,8.5-2V10h-11v4.7h5.8v4.1 c-0.8,0.2-1.8,0.4-3.2,0.4c-4.9,0-7.3-3.2-7.3-6.8c0-3.7,2.8-6.8,8-6.8c2.2,0,4.3,0.6,5.8,1.4V1.7c-1.5-0.6-3.4-1.1-6.1-1.1 c-7.6,0-13,5.3-13,11.8C75.5,19.1,80.4,24.2,88.1,24.2z M101.4,6.1c-1.7,0-3.1-1.4-3.1-3s1.4-3,3.1-3c1.8,0,3.2,1.4,3.2,3 S103.1,6.1,101.4,6.1z M98.8,23.8h5V7.7h-5V23.8z M115.1,15l-4.3-7.2H105l10.1,16.4l10.1-16.4h-5.8L115.1,15z M129.3,16.9h11.6 c0.1-7-4.2-9.5-8.4-9.5c-4.5,0-8.5,2.6-8.6,8.4c0,5.6,4.1,8.4,9.1,8.4c2.2,0,4.4-0.3,6.4-1.3v-4.4c-2.5,1.4-4.1,1.4-5.6,1.4 C131.7,19.8,129.5,19.2,129.3,16.9z M132.5,11.1c1.5,0,2.8,0.7,3,2.7h-6.2C129.6,11.9,131,11.1,132.5,11.1z M43.5,11.4 c1.2-1,1.8-2.4,1.8-4c0-3.1-3-6.3-7.3-6.3h-8v22.8h10.4c4.1,0,7.2-3,7.2-6.8C47.5,14.8,46.5,12.3,43.5,11.4z M35.2,5.7h2.4 C39,5.7,40,6.8,40,8c0,1.2-1,2.2-2.5,2.2h-2.4V5.7z M39.9,19.2h-4.7v-4.6h4.7c1.4,0,2.5,1,2.5,2.3C42.4,18.1,41.3,19.2,39.9,19.2z\" />\n <path d=\"M13.5,1l13.5,23H0L13.5,1z\" />\n </svg>\n </a>\n </div>\n <biggive-misc-icon class=\"bx bx-menu\" background-colour=\"white\" icon-colour=\"black\" icon=\"MenuOpen\" onClick={this.openMobileMenu}></biggive-misc-icon>\n <div class=\"nav-links\">\n <div class=\"sidebar-logo\">\n <a href={this.donateUrlPrefix + homePageLink} aria-label=\"Home\">\n <svg version=\"1.1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 140.9 30\" id=\"mobileLogo\">\n <path d=\"M51.9,6.1c-1.7,0-3.1-1.4-3.1-3s1.4-3,3.1-3C53.6,0,55,1.4,55,3S53.6,6.1,51.9,6.1z M49.3,23.8h5V7.7h-5V23.8z M68.5,7.7v1 c-0.8-0.7-2.3-1.4-4.1-1.4c-4.5,0-8.2,3.2-8.2,7.9c0,4.7,3.7,7.9,8.2,7.9c1.8,0,3.4-0.5,4.1-1.4v0.9c0,2.1-1.9,3.1-4.4,3.1 c-2.2,0-4-0.5-5.8-1.4V29c2.1,0.7,4.4,1,6,1c5,0,9.2-2,9.2-7.3v-15L68.5,7.7L68.5,7.7z M68.5,17.2c-0.7,1-1.9,1.4-3.2,1.4 c-2.1,0-3.8-1.2-3.8-3.4c0-2.2,1.7-3.4,3.8-3.4c1.3,0,2.5,0.6,3.2,1.5V17.2z M88.1,24.2c4,0,6.4-0.7,8.5-2V10h-11v4.7h5.8v4.1 c-0.8,0.2-1.8,0.4-3.2,0.4c-4.9,0-7.3-3.2-7.3-6.8c0-3.7,2.8-6.8,8-6.8c2.2,0,4.3,0.6,5.8,1.4V1.7c-1.5-0.6-3.4-1.1-6.1-1.1 c-7.6,0-13,5.3-13,11.8C75.5,19.1,80.4,24.2,88.1,24.2z M101.4,6.1c-1.7,0-3.1-1.4-3.1-3s1.4-3,3.1-3c1.8,0,3.2,1.4,3.2,3 S103.1,6.1,101.4,6.1z M98.8,23.8h5V7.7h-5V23.8z M115.1,15l-4.3-7.2H105l10.1,16.4l10.1-16.4h-5.8L115.1,15z M129.3,16.9h11.6 c0.1-7-4.2-9.5-8.4-9.5c-4.5,0-8.5,2.6-8.6,8.4c0,5.6,4.1,8.4,9.1,8.4c2.2,0,4.4-0.3,6.4-1.3v-4.4c-2.5,1.4-4.1,1.4-5.6,1.4 C131.7,19.8,129.5,19.2,129.3,16.9z M132.5,11.1c1.5,0,2.8,0.7,3,2.7h-6.2C129.6,11.9,131,11.1,132.5,11.1z M43.5,11.4 c1.2-1,1.8-2.4,1.8-4c0-3.1-3-6.3-7.3-6.3h-8v22.8h10.4c4.1,0,7.2-3,7.2-6.8C47.5,14.8,46.5,12.3,43.5,11.4z M35.2,5.7h2.4 C39,5.7,40,6.8,40,8c0,1.2-1,2.2-2.5,2.2h-2.4V5.7z M39.9,19.2h-4.7v-4.6h4.7c1.4,0,2.5,1,2.5,2.3C42.4,18.1,41.3,19.2,39.9,19.2z\" />\n <path d=\"M13.5,1l13.5,23H0L13.5,1z\" />\n </svg>\n </a>\n <biggive-misc-icon class=\"bx bx-x\" background-colour=\"transparent\" icon-colour=\"black\" icon=\"MenuClose\" onClick={this.closeMobileMenu}></biggive-misc-icon>\n </div>\n <div id=\"nav-primary\">\n <ul class=\"links\" slot=\"nav-primary\">\n <li>\n <a href={makeURL('Donate', this.donateUrlPrefix, 'explore')}>Explore Campaigns</a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'charities')}>For Charities</a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'funders')}>For Funders</a>\n </li>\n <li>\n <a onClick={this.noNav}>\n Match Funding\n <biggive-misc-icon class=\"bx bxs-chevron-down sub-menu-arrow arrow\" background-colour=\"white\" icon-colour=\"black\" icon=\"CaretRight\"></biggive-misc-icon>\n </a>\n <ul class=\"sub-menu\">\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'match-funding-explained')}>Match Funding Explained</a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'impact')}>Match Funding Impact</a>\n </li>\n <li class=\"more\">\n <a onClick={this.noNav}>\n Match Funding Opportunities\n {/* IMPORTANT: notice this one has a class sub-sub-menu, not sub-menu */}\n <biggive-misc-icon\n class=\"bx bxs-chevron-down sub-sub-menu-arrow arrow\"\n background-colour=\"white\"\n icon-colour=\"black\"\n icon=\"CaretRight\"\n ></biggive-misc-icon>\n </a>\n <ul class=\"sub-sub-menu\">\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'christmas-challenge')} class=\"icon-christmas\">\n Christmas Challenge\n </a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'champions-for-children')} class=\"icon-children\">\n Champions for Children\n </a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'green-match-fund')} class=\"icon-green-match\">\n Green Match Fund\n </a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'women-girls-match-fund')} class=\"icon-women-girls\">\n Women & Girls Match Fund\n </a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'kind2mind/')} class=\"icon-mental-health\">\n Kind²Mind\n </a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'artsforimpact/')} class=\"icon-arts-impact\">\n Arts for Impact\n </a>\n </li>\n {this.smallCharityWeekEnabled && (\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'small-charity-week/')} class=\"icon-small-charity\">\n Small Charity Week\n </a>\n </li>\n )}\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'anchor-match-fund/')} class=\"icon-anchor-match\">\n Anchor Match Fund\n </a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'emergency-campaigns/')} class=\"icon-emergency\">\n Emergency Match Fund\n </a>\n </li>\n </ul>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'run-your-own-campaign/)')}>Run your match funding campaign</a>\n </li>\n </ul>\n </li>\n <li>\n <a onClick={this.noNav}>\n About Us\n <biggive-misc-icon class=\"bx bxs-chevron-down sub-menu-arrow arrow\" background-colour=\"white\" icon-colour=\"black\" icon=\"CaretRight\"></biggive-misc-icon>\n </a>\n <ul class=\"sub-menu\">\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'our-people')}>Our People</a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'our-story')}>Our Story</a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'donation-funds')}>Donate by Bank Transfer</a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'our-fees')}>Our Fees</a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'faqs')}>FAQs</a>\n </li>\n </ul>\n </li>\n <li>\n <a onClick={this.noNav}>\n Resources\n <biggive-misc-icon class=\"bx bxs-chevron-down sub-menu-arrow arrow\" background-colour=\"white\" icon-colour=\"black\" icon=\"CaretRight\"></biggive-misc-icon>\n </a>\n <ul class=\"sub-menu\">\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'case-studies')}>Case Studies</a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'blog')}>Blog</a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'reports-insights')}>Reports & Insights</a>\n </li>\n <li>\n <a href={makeURL('Blog', this.blogUrlPrefix, 'press')}>Press</a>\n </li>\n </ul>\n </li>\n </ul>\n <div class=\"mobile-only\">{secondaryNavLinksForMobile}</div>\n </div>\n <div class=\"mobile-social-icon-wrap mobile-only\">\n <biggive-social-icon service=\"Facebook\" url=\"https://www.facebook.com/BigGive.org\" background-colour=\"tertiary\" icon-colour=\"black\"></biggive-social-icon>\n <biggive-social-icon service=\"Twitter\" url=\"https://x.com/BigGive\" background-colour=\"tertiary\" icon-colour=\"black\"></biggive-social-icon>\n <biggive-social-icon service=\"LinkedIn\" url=\"https://uk.linkedin.com/company/big-give\" background-colour=\"tertiary\" icon-colour=\"black\"></biggive-social-icon>\n <biggive-social-icon\n service=\"YouTube\"\n url=\"https://www.youtube.com/channel/UC9_wH1aaTuZurJ-F9R8GDcA\"\n background-colour=\"tertiary\"\n icon-colour=\"black\"\n ></biggive-social-icon>\n <biggive-social-icon service=\"Instagram\" url=\"https://www.instagram.com/biggiveorg\" background-colour=\"tertiary\" icon-colour=\"black\"></biggive-social-icon>\n </div>\n </div>\n </div>\n </nav>\n </Host>\n );\n }\n}\n","@include backgrounds();\n@include fills();\n\n:host {\n display: contents;\n}\n\n.misc-icon-item {\n @include icon-large();\n\n @media screen and (max-width: $screen-mobile-max) {\n @include icon-medium();\n margin: auto;\n\n a {\n margin: auto;\n }\n }\n}\n\n.CaretRight {\n height: 10px;\n width: 10px;\n margin-right: 0px;\n a {\n padding: 0px;\n }\n}\n\n.MenuClose {\n a {\n svg {\n height: 12px;\n width: 12px;\n }\n }\n}\n","import { IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { Component, Prop, h } from '@stencil/core';\nimport { FontAwesomeIconsService } from '../../util/fontawesome-icons';\n\n@Component({\n tag: 'biggive-misc-icon',\n styleUrl: 'biggive-misc-icon.scss',\n shadow: false,\n})\nexport class BiggiveMiscIcon {\n /**\n * Background colour\n */\n @Prop() backgroundColour: string = 'primary';\n\n /**\n * Background colour\n */\n @Prop() iconColour: string = 'white';\n\n /**\n * Icon\n */\n @Prop() icon: string;\n\n /**\n * Url\n */\n @Prop() url: string;\n\n private getMiscIcon(): IconDefinition {\n var icon = FontAwesomeIconsService.getMiscIcon(this.icon);\n return icon;\n }\n\n render() {\n return (\n // Note: the icon name prop is set as a css class too for any styling specific to certain icons\n <div class={'misc-icon-item background-colour-' + this.backgroundColour + ' ' + this.icon}>\n <a href={this.url}>\n <svg\n width={this.getMiscIcon().icon[0]}\n height={this.getMiscIcon().icon[1]}\n xmlns=\"http://www.w3.org/2000/svg\"\n class={'fill-' + this.iconColour}\n viewBox={'0 0 ' + this.getMiscIcon().icon[0] + ' ' + this.getMiscIcon().icon[1]}\n >\n <path d={this.getMiscIcon().icon[4].toString()} />\n </svg>\n </a>\n </div>\n );\n }\n}\n",":host {\n display: block;\n}\n","import { Component, h } from '@stencil/core';\n\n@Component({\n tag: 'biggive-page-column',\n styleUrl: 'biggive-page-column.scss',\n shadow: true,\n})\nexport class BiggivePageColumn {\n render() {\n return <slot></slot>;\n }\n}\n","@include spacers();\n\n:host {\n display: contents;\n}\n\n.columns {\n @include standard-font();\n @include section-container();\n display: flex;\n flex-flow: row wrap;\n justify-content: space-between; \n .column-primary {\n width: calc(66.6% - $spacer-3);\n box-sizing: border-box;\n }\n .column-secondary {\n width: calc(33.4% - $spacer-3);\n box-sizing: border-box;\n }\n}\n\n@media screen and (max-width: $screen-tablet-max) {\n .columns {\n .column-primary {\n width: 100%;\n margin-bottom: $spacer-3;\n }\n .column-secondary {\n width: 100%;\n }\n }\n}\n\n\n","import { Component, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'biggive-page-columns',\n styleUrl: 'biggive-page-columns.scss',\n shadow: true,\n})\nexport class BiggivePageColumns {\n /**\n * Space below component\n */\n @Prop() spaceBelow: number = 0;\n\n render() {\n return (\n <div class={'container space-below-' + this.spaceBelow}>\n <div class=\"columns\">\n <div class=\"column-primary\">\n <slot name=\"column-primary\"></slot>\n </div>\n <div class=\"column-secondary\">\n <slot name=\"column-secondary\"></slot>\n </div>\n </div>\n </div>\n );\n }\n}\n","@include spacers();\n\n:host {\n display: contents;\n}\n\n.container {\n @include standard-font();\n overflow: hidden;\n position: relative;\n text-align: center;\n .sleeve {\n @include section-container();\n padding: $spacer-4;\n\n @media screen and (max-width: $screen-desktop-max) {\n // similar to e.g. biggive-hero-image which was set to use $spacer-3 first.\n padding: $spacer-3;\n }\n }\n}\n\n.container.full-bleed {\n // from https://stackoverflow.com/questions/22083157/extend-background-color-of-header-beyond-container-with-css\n box-shadow: 0 0 0 100vmax $colour-primary-blue;\n clip-path: inset(0 -100vmax);\n}\n\n.container.style-top-crop-right:before {\n content: '';\n display: block;\n height: 75px;\n clip-path: polygon(0 0, 0% 100%, 100% 100%);\n transform: translateY(1px);\n}\n\n.container.style-top-crop-left:before {\n content: '';\n display: block;\n height: 75px;\n clip-path: polygon(100% 0, 100% 0%, 100% 100%, 0 100%);\n transform: translateY(1px);\n}\n\n.container.style-bottom-crop-right:after {\n content: '';\n display: block;\n height: 75px;\n clip-path: polygon(0 0, 100% 0, 0 100%);\n transform: translateY(-1px);\n}\n\n.container.style-bottom-crop-left:after {\n content: '';\n display: block;\n height: 75px;\n clip-path: polygon(0 0, 100% 0, 100% 100%);\n transform: translateY(-1px);\n}\n\n.container .sleeve {\n position: relative;\n text-align: left;\n}\n\n.container.max-width-10 .sleeve { @include max-width-10(); }\n.container.max-width-15 .sleeve { @include max-width-15(); }\n.container.max-width-20 .sleeve { @include max-width-20(); }\n.container.max-width-25 .sleeve { @include max-width-25(); }\n.container.max-width-30 .sleeve { @include max-width-30(); }\n.container.max-width-35 .sleeve { @include max-width-35(); }\n.container.max-width-40 .sleeve { @include max-width-40(); }\n.container.max-width-45 .sleeve { @include max-width-45(); }\n.container.max-width-50 .sleeve { @include max-width-50(); }\n.container.max-width-55 .sleeve { @include max-width-55(); }\n.container.max-width-60 .sleeve { @include max-width-60(); }\n.container.max-width-65 .sleeve { @include max-width-65(); }\n.container.max-width-70 .sleeve { @include max-width-70(); }\n.container.max-width-75 .sleeve { @include max-width-75(); }\n.container.max-width-80 .sleeve { @include max-width-80(); }\n.container.max-width-85 .sleeve { @include max-width-85(); }\n.container.max-width-90 .sleeve { @include max-width-90(); }\n.container.max-width-95 .sleeve { @include max-width-95(); }\n\n\n\n.container .sleeve:before {\n content: '';\n position: absolute;\n z-index: -1;\n left: 50%;\n transform: translateX(-50%);\n width: 100vw;\n top: 0;\n bottom: 0;\n}\n\n@each $brand, $colour in $colours {\n .container.background-color-#{$brand}:before,\n .container.background-color-#{$brand}:after,\n .container.background-color-#{$brand} .sleeve:before,\n .container.background-color-#{$brand} .sleeve {\n background-color: $colour;\n @if $brand == 'white' or $brand == 'grey-extra-light' or $brand == 'grey-light' {\n color: $colour-black;\n } @else {\n color: $colour-white;\n }\n }\n}\n\n.container.background-color-brand-6:before,\n.container.background-color-brand-6:after,\n.container.background-color-brand-6 .sleeve:before,\n.container.background-color-brand-6 .sleeve {\n background-color: $colour-brand-mhf-turquoise;\n color: $colour-white;\n}\n\n","import { Component, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'biggive-page-section',\n styleUrl: 'biggive-page-section.scss',\n shadow: true,\n})\nexport class BiggivePageSection {\n /**\n * Space below component\n */\n @Prop() spaceBelow: number = 0;\n\n /**\n * Section style top\n */\n @Prop() sectionStyleTop: string = 'straight';\n\n /**\n * Section style bottom\n */\n @Prop() sectionStyleBottom: string = 'straight';\n\n /**\n * Colour scheme\n */\n @Prop() colourScheme: string;\n\n /**\n * Width\n */\n @Prop() maxWidth: number = 100;\n\n /**\n * Bleeds the primary brand colour to the left and right edge of the viewport, even if used within a containing block element.\n */\n @Prop() primaryFullBleed: boolean = false;\n\n render() {\n return (\n <div\n class={\n 'container max-width-' +\n this.maxWidth +\n ' space-below-' +\n this.spaceBelow +\n ' background-color-' +\n this.colourScheme +\n ' style-top-' +\n this.sectionStyleTop +\n ' style-bottom-' +\n this.sectionStyleBottom +\n (this.primaryFullBleed ? ' full-bleed' : '')\n }\n >\n <div class=\"sleeve\">\n <slot></slot>\n </div>\n </div>\n );\n }\n}\n",":host {\n display: contents;\n}\n\n.popup {\n @include popup();\n &[data-visible=true] {\n display: block;\n }\n}","import { Component, Method, h, Prop } from '@stencil/core';\n\n@Component({\n tag: 'biggive-popup',\n styleUrl: 'biggive-popup.scss',\n shadow: true,\n})\nexport class BiggivePopup {\n private popup: HTMLDivElement;\n\n /**\n * Function to execute when the modal is closed, whether by the user or programmatically.\n */\n @Prop() modalClosedCallback: () => void = () => {};\n\n @Method()\n async openFromOutside() {\n this.popup.setAttribute('data-visible', 'true');\n this.popup.setAttribute('tabindex', '0');\n this.popup.focus();\n }\n\n @Method()\n async closeFromOutside() {\n this.popup.setAttribute('data-visible', 'false');\n this.popup.setAttribute('tabindex', '-1');\n this.modalClosedCallback();\n }\n\n private closeFromWithin = (event: any) => {\n if (event.target.classList.contains('popup') || event.target.classList.contains('close')) {\n this.popup.setAttribute('data-visible', 'false');\n this.popup.setAttribute('tabindex', '-1');\n this.modalClosedCallback();\n }\n };\n\n render() {\n return (\n <div class=\"popup\" ref={el => (this.popup = el as HTMLDivElement)} tabindex=\"-1\" onClick={this.closeFromWithin}>\n <div class=\"sleeve\">\n <div class=\"header\">\n <div class=\"close\" onClick={this.closeFromWithin}></div>\n </div>\n <div class=\"content\">\n <slot></slot>\n </div>\n </div>\n </div>\n );\n }\n}\n","@include spacers();\n\n:host {\n display: block;\n margin-bottom: $spacer-1;\n @include standard-font();\n}\n\n.progress-bar {\n @include progress-bar();\n}\n\n.progress-bar-primary {\n @include progress-bar-primary();\n}\n\n.progress-bar-secondary {\n @include progress-bar-secondary();\n}\n","import { Component, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'biggive-progress-bar',\n styleUrl: 'biggive-progress-bar.scss',\n shadow: true,\n})\nexport class BiggiveProgressBar {\n /**\n * Space below component\n */\n @Prop() spaceBelow: number = 0;\n /**\n * Colour Scheme\n */\n @Prop() colourScheme: string = 'primary';\n\n /**\n * Percentage to show + use for CSS width; round before input if desired\n */\n @Prop() counter?: number | null = 100;\n\n render() {\n if (this.counter === null || this.counter === undefined) {\n return null;\n }\n\n return (\n <div class={'progress-bar progress-bar-' + this.colourScheme + ' space-below-' + this.spaceBelow}>\n <div class=\"slider\">\n <div class=\"progress\" style={{ width: `${Math.min(this.counter, 100)}%` }}></div>\n </div>\n <div class=\"counter\">{this.counter}%</div>\n </div>\n );\n }\n}\n","@include image-alignment();\n@include spacers();\n@include text-colours();\n\n:host {\n display: contents;\n}\n\n.container {\n @include all-round-shadow();\n @include standard-font();\n height: 100%;\n background-color: white;\n text-align: center;\n margin-left: auto;\n margin-right: auto;\n max-width: 600px;\n padding: $spacer-6;\n .image-wrap {\n text-align: center;\n margin-bottom: $spacer-3;\n svg {\n height: 30px;\n width: auto;\n margin: auto;\n }\n }\n .quote {\n margin-bottom: $spacer-4;\n }\n\n @each $key, $colour in $brandColoursIncBrand6Turquoise {\n &.quote-icon-colour-#{$key} .image-wrap path { fill: $colour; }\n }\n\n\n @media screen and (max-width: $screen-tablet-max) {\n padding: $spacer-5;\n svg {\n width: 40px;\n height: 40px;\n }\n }\n\n @media screen and (max-width: $screen-mobile-max) {\n padding: $spacer-4;\n @include font-size-small();\n\n svg {\n width: 30px;\n height: 30px;\n }\n }\n\n @media screen and (max-width: $screen-mobile-small) {\n padding: $spacer-3;\n }\n}\n","import { Component, Prop, h } from '@stencil/core';\nimport { brandColour } from '../../globals/brand-colour';\nimport { spacingOption } from '../../globals/spacing-option';\n\n@Component({\n tag: 'biggive-quote',\n styleUrl: 'biggive-quote.scss',\n shadow: true,\n})\nexport class BiggiveQuote {\n @Prop() spaceBelow: spacingOption = 0;\n\n @Prop() defaultTextColour: brandColour = 'black';\n\n @Prop() quote: string = '';\n\n @Prop() attribution: string = '';\n\n @Prop() quoteIconColour: brandColour = 'primary';\n\n render() {\n return (\n <div class={'container text-colour-' + this.defaultTextColour + ' quote-icon-colour-' + this.quoteIconColour + ' space-below-' + this.spaceBelow}>\n <div class=\"image-wrap\">\n <svg width=\"34\" height=\"24\" viewBox=\"0 0 34 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.1245 0L13.7167 24H0L11.0901 0H16.1245ZM34 0L31.5923 24H17.8755L28.9657 0H34Z\" fill=\"#2C089B\" />\n </svg>\n </div>\n <div class=\"quote\">“{this.quote}”</div>\n <div class=\"attribution\"> - {this.attribution}</div>\n </div>\n );\n }\n}\n","@include backgrounds();\n@include text-colours();\n@include fills();\n\n:host {\n display: contents;\n @include standard-font();\n}\n\n\n.container {\n\n &.active {\n .popup {\n transform: translateX(0);\n }\n .background {\n position: fixed;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0,0,0,0.6);\n z-index: 99;\n }\n }\n\n .popup {\n position: fixed;\n transition: transform 1s ease-in-out;\n transform: translateX(100%);\n z-index: 999;\n top: 0;\n bottom: 0;\n right: 0;\n width: 66%;\n\n\n .header {\n padding: 45px;\n display: flex;\n justify-content: space-between;\n .back-link {\n cursor: pointer;\n display: flex;\n font-size: 14px;\n .svg-wrap {\n @each $key, $colour in $brandColoursIncBrand6Turquoise {\n &.colour-#{$key} svg path { fill: $colour; }\n }\n display: flex;\n margin: 5px 15px auto 0;\n svg {\n height: 14px;\n width: auto;\n }\n }\n }\n\n .close-link {\n margin-bottom: auto;\n cursor: pointer;\n .svg-wrap {\n display: block;\n width: 30px;\n height: 30px;\n background-color: #FFFFFF;\n border-radius: 50%;\n text-align: center;\n padding: 6.5px;\n box-sizing: border-box;\n svg {\n display: inline-block;\n top: -1.5px;\n position: relative;\n stroke-width: 1;\n stroke: #000000; \n height: 15px;\n width: 15px;\n transform: rotate(45deg);\n }\n }\n }\n\n }\n\n\n .content{\n padding: 0 45px 90px 90px;\n margin-right: 45px;\n max-height: calc(100vh - 200px);\n overflow-y: scroll;\n box-sizing: border-box;\n }\n\n }\n\n}\n\n\n@media screen and (max-width: $screen-tablet-max) {\n .container {\n .header {\n padding: 15px;\n }\n .content {\n padding: 0 15px 30px 30px;\n margin-right: 15px;\n max-height: calc(100vh - 90px);\n }\n .popup {\n width: 100%;\n }\n }\n}\n\n@media screen and (max-width: $screen-mobile-max) {\n .container {\n .header {\n padding: 15px;\n }\n .content {\n padding: 0 15px 30px 30px;\n margin-right: 15px;\n max-height: calc(100vh - 90px);\n }\n .popup {\n width: 100%;\n }\n }\n}","import { Component, Prop, Element, h } from '@stencil/core';\nimport { brandColour } from '../../globals/brand-colour';\n\n@Component({\n tag: 'biggive-sheet',\n styleUrl: 'biggive-sheet.scss',\n shadow: true,\n})\nexport class BiggiveSheet {\n @Element() host: HTMLBiggiveSheetElement;\n\n /**\n * A string ID (no spaces) unique within the page context, used to trigger the opening of the sheet from an anchor hash.\n */\n @Prop() sheetId: string = '';\n\n @Prop() backgroundColour: brandColour = 'primary';\n\n @Prop() textColour: brandColour = 'white';\n\n componentWillLoad() {\n window.addEventListener('hashchange', () => {\n this.openSheet(window.location.hash);\n });\n }\n\n componentDidRender() {\n this.openSheet(window.location.hash);\n }\n\n private openSheet(hash: string) {\n if (hash != '' && hash == this.sheetId) {\n this.host.shadowRoot?.querySelector('.container')?.classList.add('active');\n }\n }\n\n private closeSheet = () => {\n this.host.shadowRoot?.querySelector('.container')?.classList.remove('active');\n history.pushState('', document.title, window.location.pathname);\n };\n\n render() {\n return (\n <div class={'container'}>\n <div class=\"background\"></div>\n <div class={'popup background-colour-' + this.backgroundColour + ' text-colour-' + this.textColour}>\n <div class=\"header\">\n <div class=\"back-link\" onClick={this.closeSheet}>\n <span class={'svg-wrap colour-' + this.textColour}>\n <svg width=\"33\" height=\"16\" viewBox=\"0 0 33 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M0.292892 7.29289C-0.0976295 7.68342 -0.0976295 8.31658 0.292892 8.70711L6.65685 15.0711C7.04738 15.4616 7.68054 15.4616 8.07107 15.0711C8.46159 14.6805 8.46159 14.0474 8.07107 13.6569L2.41421 8L8.07107 2.34315C8.46159 1.95262 8.46159 1.31946 8.07107 0.928932C7.68054 0.538408 7.04738 0.538408 6.65685 0.928932L0.292892 7.29289ZM33 7L1 7V9L33 9V7Z\"\n fill=\"black\"\n />\n </svg>\n </span>\n Back\n </div>\n\n <div class=\"close-link\" onClick={this.closeSheet}>\n <span class=\"svg-wrap\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11 11v-11h1v11h11v1h-11v11h-1v-11h-11v-1h11z\" />\n </svg>\n </span>\n </div>\n </div>\n <div class=\"content\">\n <slot></slot>\n </div>\n </div>\n </div>\n );\n }\n}\n","@include backgrounds();\n@include fills();\n\n:host {\n display: contents;\n}\n\n.social-icon-item {\n margin-right: 6px;\n @include icon-large();\n\n &.wide {\n margin-right: 30px;\n }\n\n @media screen and (max-width: $screen-mobile-max) {\n @include icon-medium();\n\n &.wide {\n @include icon-medium();\n }\n }\n}\n","import { IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { Component, Prop, h } from '@stencil/core';\nimport { FontAwesomeIconsService } from '../../util/fontawesome-icons';\n\n/**\n * Used to indicate and link to a charity's social page, or their own web site.\n */\n@Component({\n tag: 'biggive-social-icon',\n styleUrl: 'biggive-social-icon.scss',\n shadow: false,\n})\nexport class BiggiveSocialIcon {\n /**\n * Service name\n */\n @Prop() service!: 'Facebook' | 'Instagram' | 'LinkedIn' | 'Twitter' | 'Web' | 'Whatsapp' | 'YouTube';\n\n /**\n * Used within accessible labels for links. Typically a charity name or \"Big Give\". Can also be \"Share\".\n */\n @Prop() labelPrefix: string = 'Big Give';\n\n /**\n * Background colour\n */\n @Prop() backgroundColour: string = 'primary';\n\n /**\n * Icon colour\n */\n @Prop() iconColour: string = 'white';\n\n /**\n * Used in the social icons in the biggive-footer, which are more spaced out\n * than others across the site. COM-43.\n */\n @Prop() wide: boolean = false;\n\n /**\n * Url\n */\n @Prop() url: string = '#';\n\n private getSocialIcon(): IconDefinition {\n var icon = FontAwesomeIconsService.getSocialIcon(this.service);\n return icon;\n }\n\n render() {\n return (\n <div class={'social-icon-item background-colour-' + this.backgroundColour + (this.wide ? ' wide' : '')}>\n <a href={this.url} aria-label={`${this.labelPrefix} on ${this.service}`} target=\"_blank\" rel=\"noopener\">\n <svg\n width={this.getSocialIcon().icon[0]}\n height={this.getSocialIcon().icon[1]}\n xmlns=\"http://www.w3.org/2000/svg\"\n class={'fill-' + this.iconColour}\n viewBox={'0 0 ' + this.getSocialIcon().icon[0] + ' ' + this.getSocialIcon().icon[1]}\n >\n <path d={this.getSocialIcon().icon[4].toString()} />\n </svg>\n </a>\n </div>\n );\n }\n}\n",":host {\n display: contents;\n}\n\n\n.container {\n @include standard-font();\n}","import { Component, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'biggive-tab',\n styleUrl: 'biggive-tab.scss',\n shadow: true,\n})\nexport class BiggiveTab {\n @Prop() tabTitle: string = '';\n\n render() {\n return (\n <div class=\"container\">\n <slot></slot>\n </div>\n );\n }\n}\n","@include spacers();\n@include text-colours();\n\n:host {\n display: contents;\n}\n\n::slotted(*) {\n display: none;\n}\n\n.container {\n @include standard-font();\n position: relative;\n\n .navigation {\n padding: 0 40px;\n .button {\n position: absolute;\n top: 5px;\n display: block;\n width: 30px;\n height: 30px;\n padding: 2.5px 10px;\n box-sizing: border-box;\n background-color: #FFFFFF;\n box-shadow: 0px 0px 10px 0px rgba(0,0,0,0.25);\n border-radius: 50%;\n cursor: pointer;\n text-align: center;\n &.prev {\n left: 0;\n }\n &.next {\n right: 0;\n }\n svg {\n width: 10px;\n height: 10px;\n }\n }\n .sleeve {\n border-bottom: 1px solid $colour-grey-light;\n overflow: hidden;\n ul {\n margin: 0;\n padding: 0;\n list-style-type: none;\n display: flex;\n li {\n flex-grow: 1;\n padding: 10px 20px;\n margin: 0;\n width: calc(33.3% - 20px);\n border-bottom: 3px solid transparent;\n text-align: center;\n white-space: nowrap;\n cursor: pointer;\n &.selected {\n font-weight: bold;\n }\n }\n }\n }\n }\n\n @each $key, $colour in $brandColoursIncBrand6Turquoise {\n &.text-colour-#{$key} .navigation li { color: $colour; }\n &.navigation-highlight-colour-#{$key} .navigation ul {border-color: $colour; }\n &.selected-text-colour-#{$key} .navigation li.selected { color: $colour; border-color: $colour; }\n &.selected-navigation-highlight-colour-#{$key} .navigation li.selected { border-color: $colour; }\n &.button-background-colour-#{$key} .navigation .button { background-color: $colour; }\n &.button-icon-colour-#{$key} .navigation .button svg path { stroke: $colour; }\n }\n\n}","import { Component, Prop, Element, h } from '@stencil/core';\nimport { brandColour } from '../../globals/brand-colour';\nimport { spacingOption } from '../../globals/spacing-option';\n\n@Component({\n tag: 'biggive-tabbed-content',\n styleUrl: 'biggive-tabbed-content.scss',\n shadow: true,\n})\nexport class BiggiveTabbedContent {\n @Element() host: HTMLBiggiveTabbedContentElement;\n\n @Prop() spaceBelow: spacingOption = 0;\n\n @Prop() textColour: brandColour = 'black';\n\n @Prop() selectedTextColour: brandColour = 'primary';\n\n @Prop() navigationHighlightColour: brandColour = 'grey-medium';\n\n @Prop() selectedNavigationHighlightColour: brandColour = 'primary';\n\n @Prop() buttonBackgroundColour: brandColour = 'white';\n\n @Prop() buttonIconColour: brandColour = 'primary';\n\n private scrollContextTab: HTMLElement | null;\n private scrollOffset: number = 0;\n private children: Array<HTMLBiggiveTabElement> = [];\n\n componentWillLoad() {\n this.children = Array.from(this.host.children) as Array<HTMLBiggiveTabElement>;\n }\n\n componentDidRender() {\n this.showTab(0);\n\n this.scrollContextTab = this.host.shadowRoot?.querySelector('.navigation .sleeve ul li')!;\n\n const sleeveElement: HTMLElement = this.host.shadowRoot?.querySelector('.navigation .sleeve')!;\n\n if (sleeveElement.scrollWidth > sleeveElement.offsetWidth) {\n this.host.shadowRoot?.querySelectorAll('.navigation .button').forEach(function (button: HTMLElement) {\n button.style.display = 'block';\n });\n } else {\n this.host.shadowRoot?.querySelectorAll('.navigation .button').forEach(function (button: HTMLElement) {\n button.style.display = 'none';\n });\n }\n }\n\n /*\n * Shows the i'th tab, counting from zero. Does nothing if i out of range.\n */\n private showTab(i: number) {\n const tabs = this.host.shadowRoot?.querySelectorAll('.navigation ul li')!;\n\n if (i >= 0 && i <= tabs?.length - 1) {\n let j = 0;\n tabs?.forEach(function (tab) {\n if (i == j) {\n tab.classList.add('selected');\n } else {\n tab.classList.remove('selected');\n }\n j++;\n });\n\n j = 0;\n this.host.querySelectorAll('biggive-tab').forEach(function (tab) {\n tab.style.display = i == j ? 'block' : 'none';\n j++;\n });\n }\n }\n\n private clickTabHandler = (e: MouseEvent) => {\n let i = 0;\n const parent = (e.target as Element).parentElement!;\n for (let el of Array.from(parent.children)) {\n if (el == e.target) {\n this.showTab(i);\n return;\n }\n i++;\n }\n };\n\n private scrollTab(direction: 'NEXT' | 'PREV') {\n if (!this.scrollContextTab) {\n return;\n }\n\n let sleeve: HTMLElement = this.scrollContextTab.parentElement!;\n let max = sleeve.scrollWidth - sleeve.parentElement?.offsetWidth!;\n\n if (direction == 'PREV') {\n if (this.scrollOffset + this.scrollContextTab.offsetWidth > 0) {\n return;\n }\n\n this.scrollOffset = this.scrollOffset + this.scrollContextTab.offsetWidth;\n if (this.scrollContextTab.previousElementSibling) {\n this.scrollContextTab = this.scrollContextTab.previousElementSibling as HTMLElement;\n }\n } else if (direction == 'NEXT') {\n if (0 - this.scrollOffset > max) {\n return;\n }\n\n this.scrollOffset = this.scrollOffset - this.scrollContextTab.offsetWidth;\n if (this.scrollContextTab.nextElementSibling) {\n this.scrollContextTab = this.scrollContextTab.nextElementSibling as HTMLElement;\n }\n }\n\n sleeve.querySelectorAll('li').forEach(li => {\n li.style.transitionDuration = '0.3s';\n li.style.transitionTimingFunction = 'ease-out';\n li.style.transform = 'translate3d(' + this.scrollOffset + 'px, 0, 0)';\n });\n }\n\n private clickPrevHandler = () => {\n this.scrollTab('PREV');\n };\n\n private clickNextHandler = () => {\n this.scrollTab('NEXT');\n };\n\n render() {\n return (\n <div\n class={\n 'container space-below-' +\n this.spaceBelow +\n ' text-colour-' +\n this.textColour +\n ' selected-text-colour-' +\n this.selectedTextColour +\n ' navigation-highlight-colour-' +\n this.navigationHighlightColour +\n ' selected-navigation-highlight-colour-' +\n this.selectedNavigationHighlightColour +\n ' button-background-colour-' +\n this.buttonBackgroundColour +\n ' button-icon-colour-' +\n this.buttonIconColour\n }\n >\n <div class=\"navigation\">\n <div class=\"button prev\" onClick={this.clickPrevHandler} title=\"Previous\">\n <svg width=\"9\" height=\"16\" viewBox=\"0 0 9 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8.29311 14.5703L1.73926 8.01646L8.29311 1.46261\" stroke=\"#000000\" stroke-width=\"2\" />\n </svg>\n </div>\n <div class=\"sleeve\">\n <ul>\n {this.children.map(child => (\n <li onClick={this.clickTabHandler}>{child.tabTitle}</li>\n ))}\n </ul>\n </div>\n <div class=\"button next\" onClick={this.clickNextHandler} title=\"Next\">\n <svg width=\"9\" height=\"16\" viewBox=\"0 0 9 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0.739117 1.46094L7.29297 8.01479L0.739118 14.5686\" stroke=\"#000000\" stroke-width=\"2\" />\n </svg>\n </div>\n </div>\n <slot></slot>\n </div>\n );\n }\n}\n","@include spacers();\n\n:host {\n display: contents;\n}\n\n::slotted([slot=label]) {\n display: inline-block;\n line-height: 1.2; // Slightly less than other text to help with long charity names.\n}\n\n.text-input {\n .currency-symbol {\n position: absolute;\n }\n position: relative;\n .prompt {\n position: relative;\n z-index: 2;\n font-size: small;\n top: 1em;\n left: 4em;\n color: $colour-primary-blue;\n max-width: calc(100% - 10em);\n display: inline-block;\n\n > span {\n padding-left: 1em;\n padding-right: 1em;\n background-color: $colour-grey-background;\n }\n }\n\n @include standard-font();\n position: relative;\n text-align: left;\n &.select-style-bordered {\n .sleeve {\n @include font-size-large();\n font-weight: bolder;\n padding: 2px;\n position: relative;\n background-color: $colour-primary-blue;\n @include corner-clip-small-top-right();\n .inner-sleeve {\n background-color: $colour-grey-background;\n color: $colour-primary-blue;\n display: block;\n position: relative;\n padding: 10px 30px 10px 10px;\n clip-path:\n polygon(\n 0% 0%, /* top left */\n 0% 0%, /* top left */\n calc(100% - 14px) 0%, /* top right */\n 100% 14px, /* top right */\n 100% 100%, /* bottom right */\n 100% 100%, /* bottom right */\n 0 100%, /* bottom left */\n 0 100% /* bottom left */\n );\n &:after {\n content: '';\n display: block;\n position: absolute;\n right: 20px;\n top: 18px;\n width: 10px;\n height: 10px;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center center;\n }\n }\n &.focused {\n background-color: $colour-tertiary-coral;\n }\n }\n }\n}\n\n","import { Component, Element, h, Prop } from '@stencil/core';\n\n/**\n * Initially developed for use within the new donate stepper design. Currently has a hard-coded background\n * of $colour-grey-background, intened to appear transparent when used on a page with a matching background.\n *\n * Please ensure input is styled as width: 100%.\n */\n@Component({\n tag: 'biggive-text-input',\n styleUrl: 'biggive-text-input.scss',\n shadow: true,\n})\nexport class BiggiveTextInput {\n @Element() host: HTMLBiggiveTextInputElement;\n @Prop() value!: string;\n /**\n * ISO-4217 currency code if input is for a money value\n */\n @Prop() currency: 'GBP' | 'USD' | undefined;\n @Prop() spaceBelow: number = 0;\n @Prop() selectStyle: 'bordered' | 'underlined' = 'bordered';\n\n render() {\n const currencySymbol = this.currency === 'GBP' ? '£' : this.currency === 'USD' ? '$' : undefined;\n return (\n <div class={'text-input space-below-' + this.spaceBelow + ' select-style-' + this.selectStyle}>\n <div class=\"prompt\">\n <span>\n <slot name=\"label\" />\n </span>\n </div>\n <div class=\"sleeve\">\n <div class=\"inner-sleeve\">\n {currencySymbol && <span class=\"currency-symbol\">{currencySymbol}</span>}\n <slot name=\"input\" />\n <div style={{ clear: 'both' }}></div>\n </div>\n </div>\n </div>\n );\n }\n\n componentDidLoad() {\n const nativeInput: HTMLElement | null = this.host.querySelector(`[slot=\"input\"]`);\n const sleave = this.host.shadowRoot!.querySelector('.sleeve')!;\n\n if (!nativeInput) {\n throw new Error('Input slot element required for biggive-text-input');\n }\n\n nativeInput.addEventListener('focusin', () => sleave.classList.add('focused'));\n nativeInput.addEventListener('focusout', () => sleave.classList.remove('focused'));\n }\n}\n","@include spacers();\n@include text-colours();\n\n:host {\n display: contents;\n}\n\n::slotted(*) {\n display: none;\n}\n\n.container {\n @include standard-font();\n position: relative;\n\n .navigation {\n padding: 0 40px;\n .button {\n position: absolute;\n top: 5px;\n display: block;\n width: 30px;\n height: 30px;\n padding: 2.5px 10px;\n box-sizing: border-box;\n background-color: #FFFFFF;\n box-shadow: 0px 0px 10px 0px rgba(0,0,0,0.25);\n border-radius: 50%;\n cursor: pointer;\n text-align: center;\n &.prev {\n left: 0;\n }\n &.next {\n right: 0;\n }\n svg {\n width: 10px;\n height: 10px;\n }\n }\n .sleeve {\n overflow-x: hidden;\n ul {\n margin: 0;\n padding: 0;\n list-style-type: none;\n display: flex;\n border-bottom: 1px solid $colour-grey-light;\n li {\n flex-grow: 1;\n padding: 10px 20px;\n margin: 0 0 -1px 0;\n width: calc(33.3% - 20px);\n border-bottom: 3px solid transparent;\n text-align: center;\n cursor: pointer;\n &.selected {\n font-weight: bold;\n }\n }\n }\n }\n }\n\n .entry-wrap {\n padding: 40px;\n\n .entry {\n margin-bottom: $spacer-3;\n border-left: 15px solid transparent;\n padding: 15px 40px 15px 40px;\n .title {\n font-weight: bold;\n margin: 0 0 5px 0;\n padding: 0\n }\n .content {\n p {\n margin: 0 0 5px 0;\n }\n }\n \n }\n }\n\n @each $key, $colour in $brandColoursIncBrand6Turquoise {\n &.text-colour-#{$key} .navigation li { color: $colour; }\n &.navigation-highlight-colour-#{$key} .navigation ul {border-color: $colour; }\n &.selected-text-colour-#{$key} .navigation li.selected { color: $colour; }\n &.selected-navigation-highlight-colour-#{$key} .navigation li.selected { border-color: $colour; }\n &.button-background-colour-#{$key} .navigation .button { background-color: $colour; }\n &.button-icon-colour-#{$key} .navigation .button svg path { stroke: $colour; }\n &.entry-background-colour-#{$key} .entry { background-color: $colour; }\n &.entry-highlight-colour-#{$key} .entry { border-color: $colour; }\n &.entry-date-colour-#{$key} .entry .date { color: $colour; }\n &.entry-title-colour-#{$key} .entry .title { color: $colour; }\n &.entry-text-colour-#{$key} .entry .content { color: $colour; }\n }\n\n}","import { Component, Prop, Element, h } from '@stencil/core';\nimport { brandColour } from '../../globals/brand-colour';\nimport { spacingOption } from '../../globals/spacing-option';\n\n@Component({\n tag: 'biggive-timeline',\n styleUrl: 'biggive-timeline.scss',\n shadow: true,\n})\nexport class BiggiveTimeline {\n @Element() host: HTMLBiggiveTimelineElement;\n\n @Prop() spaceBelow: spacingOption = 0;\n\n @Prop() textColour: brandColour = 'black';\n\n @Prop() selectedTextColour: brandColour = 'primary';\n\n @Prop() navigationHighlightColour: brandColour = 'grey-medium';\n\n @Prop() selectedNavigationHighlightColour: brandColour = 'primary';\n\n @Prop() buttonBackgroundColour: brandColour = 'white';\n\n @Prop() buttonIconColour: brandColour = 'primary';\n\n @Prop() entryBackgroundColour: brandColour = 'white';\n\n @Prop() entryHighlightColour: brandColour = 'secondary';\n\n @Prop() entryDateColour: brandColour = 'black';\n\n @Prop() entryTitleColour: brandColour = 'primary';\n\n @Prop() entryTextColour: brandColour = 'black';\n\n private scrollContextTab: HTMLElement | null;\n private scrollOffset: number = 0;\n private tabHeadings: Array<string> = [];\n private children: Array<HTMLBiggiveTimelineEntryElement> = [];\n\n componentWillLoad() {\n this.children = Array.from(this.host.children) as Array<HTMLBiggiveTimelineEntryElement>;\n\n let tabHeadings = this.tabHeadings;\n\n this.children.forEach(function (entry) {\n let tab = entry.date.substring(0, 4);\n if (!tabHeadings.includes(tab)) {\n tabHeadings.push(tab);\n }\n });\n }\n\n componentDidRender() {\n this.showTab(0);\n }\n\n /*\n * Shows the i'th element in the timeline, counting from zero. Does nothing if i out of range.\n */\n private showTab(i: number) {\n const tabs = this.host.shadowRoot?.querySelectorAll<HTMLElement>('.navigation ul li')!;\n const entries = this.host.shadowRoot?.querySelectorAll<HTMLElement>('.entry')!;\n\n if (tabs.length > 0) {\n this.scrollContextTab = this.host.shadowRoot?.querySelector<HTMLElement>('.navigation ul li')!;\n }\n\n if (i >= 0 && i <= tabs?.length - 1) {\n let currentTabTitle = tabs[i]?.innerHTML;\n let j = 0;\n tabs?.forEach(function (tab) {\n if (i == j) {\n tab.classList.add('selected');\n } else {\n tab.classList.remove('selected');\n }\n j++;\n });\n\n entries.forEach(function (entry) {\n entry.style.display = entry.getAttribute('data-date')?.substring(0, 4) == currentTabTitle ? 'block' : 'none';\n });\n }\n }\n\n private clickTabHandler = (e: any) => {\n let i = 0;\n for (let el of e.target.parentElement.children) {\n if (el == e.target) {\n this.showTab(i);\n return;\n }\n i++;\n }\n };\n\n private scrollTab(direction: 'NEXT' | 'PREV') {\n if (!this.scrollContextTab) {\n return;\n }\n\n let sleeve: HTMLElement = this.scrollContextTab.parentElement!;\n let max = sleeve.scrollWidth - sleeve.parentElement?.offsetWidth!;\n\n if (direction == 'PREV') {\n if (this.scrollOffset + this.scrollContextTab.offsetWidth > 0) {\n return;\n }\n\n this.scrollOffset = this.scrollOffset + this.scrollContextTab.offsetWidth;\n if (this.scrollContextTab.previousElementSibling) {\n this.scrollContextTab = this.scrollContextTab.previousElementSibling as HTMLElement;\n }\n } else if (direction == 'NEXT') {\n if (0 - this.scrollOffset > max) {\n return;\n }\n\n this.scrollOffset = this.scrollOffset - this.scrollContextTab.offsetWidth;\n if (this.scrollContextTab.nextElementSibling) {\n this.scrollContextTab = this.scrollContextTab.nextElementSibling as HTMLElement;\n }\n }\n\n sleeve.querySelectorAll('li').forEach(li => {\n li.style.transitionDuration = '0.3s';\n li.style.transitionTimingFunction = 'ease-out';\n li.style.transform = 'translate3d(' + this.scrollOffset + 'px, 0, 0)';\n });\n }\n\n private clickPrevHandler = () => {\n this.scrollTab('PREV');\n };\n\n private clickNextHandler = () => {\n this.scrollTab('NEXT');\n };\n\n render() {\n return (\n <div\n class={\n 'container space-below-' +\n this.spaceBelow +\n ' text-colour-' +\n this.textColour +\n ' selected-text-colour-' +\n this.selectedTextColour +\n ' navigation-highlight-colour-' +\n this.navigationHighlightColour +\n ' selected-navigation-highlight-colour-' +\n this.selectedNavigationHighlightColour +\n ' button-background-colour-' +\n this.buttonBackgroundColour +\n ' button-icon-colour-' +\n this.buttonIconColour +\n ' entry-background-colour-' +\n this.entryBackgroundColour +\n ' entry-highlight-colour-' +\n this.entryHighlightColour +\n ' entry-date-colour-' +\n this.entryDateColour +\n ' entry-title-colour-' +\n this.entryTitleColour +\n ' entry-text-colour-' +\n this.entryTextColour\n }\n >\n <div class=\"navigation\">\n <div class=\"button prev\" onClick={this.clickPrevHandler} title=\"Previous\">\n <svg width=\"9\" height=\"16\" viewBox=\"0 0 9 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8.29311 14.5703L1.73926 8.01646L8.29311 1.46261\" stroke=\"#000000\" stroke-width=\"2\" />\n </svg>\n </div>\n <div class=\"sleeve\">\n <ul>\n {this.tabHeadings.map(tab => (\n <li onClick={this.clickTabHandler}>{tab}</li>\n ))}\n </ul>\n </div>\n <div class=\"button next\" onClick={this.clickNextHandler} title=\"Next\">\n <svg width=\"9\" height=\"16\" viewBox=\"0 0 9 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0.739117 1.46094L7.29297 8.01479L0.739118 14.5686\" stroke=\"#000000\" stroke-width=\"2\" />\n </svg>\n </div>\n </div>\n <div class=\"entry-wrap\">\n {this.children.map(entry => (\n <div class=\"entry\" data-date={entry.date}>\n <h4 class=\"title\">{entry.heading}</h4>\n <div class=\"content\" innerHTML={entry.innerHTML}></div>\n </div>\n ))}\n </div>\n </div>\n );\n }\n}\n",":host {\n display: block;\n}\n","import { Component, Prop } from '@stencil/core';\n\n@Component({\n tag: 'biggive-timeline-entry',\n styleUrl: 'biggive-timeline-entry.scss',\n shadow: true,\n})\nexport class BiggiveTimelineEntry {\n /**\n * Should be in the format 'YYYY-mm-dd', for example '2023-01-01'\n */\n @Prop() date: string;\n\n @Prop() heading: string;\n\n render() {\n return null;\n }\n}\n","@include backgrounds();\n@include spacers();\n@include text-colours();\n\n:host {\n display: contents;\n @include standard-font();\n\n --ticker-end-left: -200%;\n}\n\n@keyframes ticker {\n 0% {\n transform: translate3d(0, 0, 0);\n }\n\n 100% {\n transform: translate3d(var(--ticker-end-left), 0, 0);\n }\n}\n\n.container {\n position: absolute;\n left: 0;\n right: 0;\n z-index: 1;\n\n .main-message-wrap {\n position: absolute;\n z-index: 1;\n padding: $spacer-2 $spacer-4;\n left: 0;\n top: 0;\n @include font-size-large();\n font-weight: 600;\n max-width: 33.3%;\n }\n\n .ticker-wrap {\n @include font-size-medium();\n padding: calc($spacer-2 - 4px) $spacer-4 $spacer-2 0;\n min-height: 17px;\n overflow: hidden;\n position: relative;\n\n .sleeve {\n will-change: transform; // https://web.dev/stick-to-compositor-only-properties-and-manage-layer-count/\n display: inline-flex;\n position: absolute;\n top: 4px;\n height: 24px;\n min-width: 100%;\n left: 100%;\n white-space: nowrap;\n\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n animation-name: ticker;\n // TS overrides the specific timings once the width of ticker elements is known.\n animation-duration: 10s;\n\n @media (prefers-reduced-motion) {\n animation-name: none !important; // Turn off movement when needed for a11y.\n }\n }\n\n .sleeve-delayed-copy {\n // We set between 0 and 3 copies to `display: inline-flex` in TS, depending on the size\n // of the items and container.\n display: none;\n white-space: nowrap;\n max-height: 24px;\n }\n }\n}\n\n@media screen and (max-width: $screen-tablet-max) {\n .container {\n .main-message-wrap {\n @include font-size-medium();\n padding: $spacer-2;\n }\n }\n}\n","import { Component, Element, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'biggive-totalizer',\n styleUrl: 'biggive-totalizer.scss',\n shadow: true,\n})\nexport class BiggiveTotalizer {\n private lastWrapperWidth: number = 0;\n\n @Element() host: HTMLBiggiveTotalizerElement;\n /**\n * Space below component\n */\n @Prop() spaceBelow: number = 0;\n /**\n * Primary banner colour\n */\n @Prop() primaryColour: string = 'primary';\n\n /**\n * Primary text colour\n */\n @Prop() primaryTextColour: string = 'white';\n\n /**\n * Secondary banner colour\n */\n @Prop() secondaryColour: string = 'secondary';\n\n /**\n * Secondary text colour\n */\n @Prop() secondaryTextColour: string = 'black';\n\n /**\n * Primary message\n */\n @Prop() mainMessage: string;\n\n private setSpeed(itemsWidth: number, containerWidth: number) {\n if (containerWidth === this.lastWrapperWidth) {\n // Some browsers fire 'resize' overzealously on scroll; we don't want to cause extra paints if nothing\n // relevant changed.\n return;\n }\n\n let sleeves: HTMLDivElement[] = [];\n for (const ii in [1, 2, 3, 4]) {\n const sleeve = this.host.shadowRoot?.querySelector('.ticker-wrap #sleeve_' + ii) as HTMLDivElement | null;\n if (sleeve) {\n sleeves.push(sleeve);\n // Restart the animation(s) on window resize to reduce the chance of jankiness.\n // https://stackoverflow.com/a/45036752/2803757\n sleeve.style.animationName = 'none';\n }\n }\n\n this.lastWrapperWidth = containerWidth;\n\n if (sleeves.length === 0) {\n console.log('sleeves missing, skipping setSpeed()');\n return;\n }\n\n // We've seen the initial calculation exclude the ~30px per set of values end padding before,\n // and it's safe to err on the side of more copies to reduce the chance of abrupt early loop\n // ends, so we add a buffer of 40px to the calculation when deciding how many copies to use.\n // const sleeveCount = Math.max(1, Math.min(4, Math.ceil((2 * (40 + itemsWidth)) / containerWidth)));\n // TODO Ultimately we'd like to get multiple copies working, or simplify. This\n // has proven very hard to iterate on pending a fix for DON-867 because\n // there is Angular-specific behaviour breaking the contents of copies.\n const sleeveCount = 1;\n this.host.style.setProperty('--ticker-end-left', `-${(sleeveCount + 1) * 100}%`);\n\n const duration = Math.round((itemsWidth / 30) * sleeveCount);\n\n for (let ii = 1; ii <= sleeveCount; ii++) {\n const sleeve = sleeves[ii - 1];\n if (sleeve) {\n sleeve.style.animationDuration = duration + 's';\n // https://stackoverflow.com/a/45847760\n sleeve.style.animationDelay = (duration / (sleeveCount - 1)) * (ii - 1) + 's';\n sleeve.style.display = 'inline-flex';\n sleeve.style.animationName = 'ticker';\n }\n }\n }\n\n componentDidLoad() {\n const wrapper = this.host.shadowRoot?.querySelector('.ticker-wrap') as HTMLDivElement;\n\n const tickerItemsInternalWrapper: HTMLDivElement | null = this.host.querySelector(`[slot=\"ticker-items\"]`);\n const sleeve1: HTMLDivElement | null | undefined = this.host.shadowRoot?.querySelector('.ticker-wrap #sleeve_1');\n const sleeve2: HTMLDivElement | null | undefined = this.host.shadowRoot?.querySelector('.ticker-wrap #sleeve_2');\n const sleeve3: HTMLDivElement | null | undefined = this.host.shadowRoot?.querySelector('.ticker-wrap #sleeve_3');\n const sleeve4: HTMLDivElement | null | undefined = this.host.shadowRoot?.querySelector('.ticker-wrap #sleeve_4');\n\n if (!tickerItemsInternalWrapper || !sleeve1) {\n console.log('tickerItemsInternalWrapper or sleeve1 is missing, skipping totalizer animation setup');\n return;\n }\n\n // Deep clone [all children of] the ticker items internal wrapper and append them, so the ticker can show items without\n // a blank break. Sleeve 2 and up will animate on delays per https://stackoverflow.com/a/45847760.\n setTimeout(() => {\n sleeve2 && sleeve2.appendChild(tickerItemsInternalWrapper.cloneNode(true));\n sleeve3 && sleeve3.appendChild(tickerItemsInternalWrapper.cloneNode(true));\n sleeve4 && sleeve4.appendChild(tickerItemsInternalWrapper.cloneNode(true));\n }, 800);\n\n setTimeout(() => {\n // In Angular contexts, it seems like we need to leave a little time before the calculations work.\n // Not totally clear why yet.\n this.setSpeed(tickerItemsInternalWrapper.clientWidth, wrapper.clientWidth);\n }, 300);\n\n window.addEventListener('resize', () => {\n this.setSpeed(tickerItemsInternalWrapper.clientWidth, wrapper.clientWidth);\n });\n }\n\n render() {\n return (\n <div class={'container space-below-' + this.spaceBelow}>\n <div>\n <div class=\"banner\">\n <div class={'main-message-wrap background-colour-' + this.secondaryColour + ' text-colour-' + this.secondaryTextColour}>{this.mainMessage}</div>\n <div class={'ticker-wrap background-colour-' + this.primaryColour + ' text-colour-' + this.primaryTextColour}>\n <div id=\"sleeve_1\" class=\"sleeve\">\n <slot name=\"ticker-items\"></slot>\n </div>\n <div id=\"sleeve_2\" class=\"sleeve sleeve-delayed-copy\">\n {/* Contents for these 3 are copied in TS and copies shown or hidden based on available space */}\n </div>\n <div id=\"sleeve_3\" class=\"sleeve sleeve-delayed-copy\"></div>\n <div id=\"sleeve_4\" class=\"sleeve sleeve-delayed-copy\"></div>\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\n",":host {\n display: inline-flex;\n}\n\n.ticker-item {\n margin-right: $spacer-4;\n}\n","import { Component, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'biggive-totalizer-ticker-item',\n styleUrl: 'biggive-totalizer-ticker-item.scss',\n shadow: true,\n})\nexport class BiggiveTotalizerTickerItem {\n /**\n * Figure\n */\n @Prop() figure: string;\n\n /**\n * Figure\n */\n @Prop() label: string;\n\n render() {\n return (\n <div class=\"ticker-item\">\n <strong>{this.figure}</strong> {this.label}\n </div>\n );\n }\n}\n","@include spacers();\n@include text-colours();\n\n:host {\n display: contents;\n}\n\n.video-wrap {\n @include video-wrap();\n}\n\n.video-wrap.youtube {\n padding-bottom: 56.25%;\n}\n\n.container {\n @include standard-font();\n position: relative;\n .sleeve {\n @include flex-container-row();\n .content-wrap {\n width: calc(40% - $spacer-3);\n position: relative;\n z-index: 1;\n .slug {\n @include heading-4;\n margin: 0;\n padding: 0;\n }\n h2 {\n @include heading-2;\n margin: 0 0 $spacer-3 0;\n padding: 0;\n }\n .teaser {\n margin: 0 0 $spacer-5 0;\n padding: 0;\n }\n }\n .graphic-wrap {\n width: calc(60% - $spacer-3);\n }\n }\n}\n\n@media screen and (max-width: $screen-mobile-max) {\n .container {\n .sleeve {\n flex-wrap: wrap;\n .content-wrap {\n width: 100%;\n }\n .graphic-wrap {\n padding-top: 20px;\n width: 100%;\n margin-bottom: $spacer-3;\n }\n }\n }\n}\n","import { Component, Prop, h } from '@stencil/core';\nimport { VideoService } from '../../util/video';\n\n@Component({\n tag: 'biggive-video-feature',\n styleUrl: 'biggive-video-feature.scss',\n shadow: true,\n})\nexport class BiggiveVideoFeature {\n /**\n * Space above component\n */\n @Prop() spaceAbove: number = 0;\n /**\n * Space below component\n */\n @Prop() spaceBelow: number = 0;\n /**\n * Default text colour\n */\n @Prop() defaultTextColour: string = 'primary';\n\n /**\n * Full URL of a video.\n */\n @Prop() videoUrl: string = '';\n\n /**\n * Slug\n */\n @Prop() slug: string;\n\n /**\n * Slug colour\n */\n @Prop() slugColour: string = '';\n\n /**\n * Video title\n */\n @Prop() mainTitle: string;\n\n /**\n * Slug colour\n */\n @Prop() mainTitleColour: string = '';\n\n /**\n * Introductory teaser text\n */\n @Prop() teaser: string;\n\n /**\n * Teaser colour\n */\n @Prop() teaserColour: string = '';\n\n /**\n * Button Url\n */\n @Prop() buttonUrl: string;\n\n /**\n * Button Label\n */\n @Prop() buttonLabel: string;\n\n /**\n * Button Colour Scheme\n */\n @Prop() buttonColourScheme: string = 'primary';\n\n render() {\n const youtubeClass = this.videoUrl.includes('youtube.com') ? ' youtube' : '';\n\n return (\n <div class={'container text-colour-' + this.defaultTextColour + ' space-above-' + this.spaceAbove + ' space-below-' + this.spaceBelow}>\n <div class=\"sleeve\">\n <div class=\"content-wrap\">\n <div class={'slug text-colour-' + this.slugColour}>{this.slug}</div>\n <h2 class={'title text-colour-' + this.mainTitleColour}>{this.mainTitle}</h2>\n <div class={'teaser text-colour-' + this.teaserColour}>{this.teaser}</div>\n {this.buttonLabel != null && this.buttonUrl != null ? (\n <biggive-button colour-scheme={this.buttonColourScheme} url={this.buttonUrl} label={this.buttonLabel}></biggive-button>\n ) : null}\n </div>\n <div class=\"graphic-wrap\">\n {this.videoUrl !== null && this.videoUrl !== undefined ? (\n <div class={'video-wrap' + youtubeClass} innerHTML={VideoService.getEmbedHtml(this.videoUrl, this.mainTitle)}></div>\n ) : null}\n </div>\n </div>\n </div>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|