@affinda/wc 0.0.28 → 0.1.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/affinda/af-card.entry.esm.js.map +1 -1
- package/dist/affinda/af-client-carousel.entry.esm.js.map +1 -1
- package/dist/affinda/af-feature-accordion.entry.esm.js.map +1 -1
- package/dist/affinda/af-footer.entry.esm.js.map +1 -1
- package/dist/affinda/af-heading.af-logo.af-nav-item.af-navbar.af-text.entry.esm.js.map +1 -1
- package/dist/affinda/af-illustrated-card.entry.esm.js.map +1 -1
- package/dist/affinda/af-in-page-banner.entry.esm.js.map +1 -1
- package/dist/affinda/af-paperclip-decoration.entry.esm.js.map +1 -0
- package/dist/affinda/af-typography-lockup.entry.esm.js.map +1 -1
- package/dist/affinda/affinda.css +1 -1
- package/dist/affinda/affinda.esm.js +1 -1
- package/dist/affinda/index.esm.js +1 -1
- package/dist/affinda/{p-11e7ddf3.entry.js → p-0137e7a5.entry.js} +2 -2
- package/dist/affinda/{p-816deae3.entry.js → p-0201c8bd.entry.js} +2 -2
- package/dist/affinda/p-081cc890.entry.js +2 -0
- package/dist/affinda/{p-570283f6.entry.js.map → p-081cc890.entry.js.map} +1 -1
- package/dist/affinda/{p-94adb381.entry.js → p-083fc528.entry.js} +2 -2
- package/dist/affinda/{p-f9e3c2b7.entry.js → p-0e469ad2.entry.js} +2 -2
- package/dist/affinda/{p-6eca2722.entry.js → p-15f0bd34.entry.js} +2 -2
- package/dist/affinda/{p-2c655ae2.entry.js → p-1c96856a.entry.js} +2 -2
- package/dist/affinda/{p-4cbdf940.entry.js → p-24e74c10.entry.js} +2 -2
- package/dist/affinda/{p-ab0b621e.entry.js → p-2e6192eb.entry.js} +2 -2
- package/dist/affinda/{p-102e8b8c.entry.js → p-35607741.entry.js} +2 -2
- package/dist/affinda/{p-c7ba4e7f.entry.js → p-364ffa25.entry.js} +2 -2
- package/dist/affinda/p-3a0e45c3.entry.js +2 -0
- package/dist/affinda/{p-07f9580c.entry.js.map → p-3a0e45c3.entry.js.map} +1 -1
- package/dist/affinda/{p-af3f6e16.entry.js → p-3ee906de.entry.js} +2 -2
- package/dist/affinda/{p-d7e29257.entry.js → p-41643147.entry.js} +2 -2
- package/dist/affinda/{p-f9b6d1c6.entry.js → p-43f40921.entry.js} +2 -2
- package/dist/affinda/{p-8d9d0cb3.entry.js → p-48aadea9.entry.js} +2 -2
- package/dist/affinda/{p-cc22a8da.entry.js → p-49521f2e.entry.js} +2 -2
- package/dist/affinda/{p-0f3267ea.entry.js → p-4a355b69.entry.js} +2 -2
- package/dist/affinda/{p-9bb5202e.entry.js → p-4b154e23.entry.js} +2 -2
- package/dist/affinda/{p-3ecf43aa.entry.js → p-4b2c0698.entry.js} +2 -2
- package/dist/affinda/{p-2aa112c2.entry.js → p-4c4406bf.entry.js} +2 -2
- package/dist/affinda/{p-2aa112c2.entry.js.map → p-4c4406bf.entry.js.map} +1 -1
- package/dist/affinda/p-4cf65950.entry.js +2 -0
- package/dist/affinda/{p-b14c1a4b.entry.js.map → p-4cf65950.entry.js.map} +1 -1
- package/dist/affinda/{p-12652bf5.entry.js → p-4f59b554.entry.js} +2 -2
- package/dist/affinda/{p-401fc5b1.entry.js → p-50a67fb6.entry.js} +2 -2
- package/dist/affinda/{p-a3865306.entry.js → p-5265e82e.entry.js} +2 -2
- package/dist/affinda/{p-5e5d16dd.entry.js → p-56fe6e6e.entry.js} +2 -2
- package/dist/affinda/{p-a4d39bdd.entry.js → p-5f6a5741.entry.js} +2 -2
- package/dist/affinda/p-6038a213.entry.js +2 -0
- package/dist/affinda/{p-50590601.entry.js.map → p-6038a213.entry.js.map} +1 -1
- package/dist/affinda/{p-432c7bfc.entry.js → p-6c33fee6.entry.js} +2 -2
- package/dist/affinda/{p-a002c784.entry.js → p-6c58b283.entry.js} +2 -2
- package/dist/affinda/{p-1dff35bf.entry.js → p-6e40dbdf.entry.js} +2 -2
- package/dist/affinda/{p-23aa03dc.entry.js → p-76cb736d.entry.js} +2 -2
- package/dist/affinda/{p-77ed47d5.entry.js → p-78518e6c.entry.js} +2 -2
- package/dist/affinda/{p-e78112d9.entry.js → p-7867c2ff.entry.js} +2 -2
- package/dist/affinda/{p-636045e8.entry.js → p-81706709.entry.js} +2 -2
- package/dist/affinda/{p-5e444a9a.entry.js → p-862a2509.entry.js} +2 -2
- package/dist/affinda/{p-7238fc21.entry.js → p-86f6dfdc.entry.js} +2 -2
- package/dist/affinda/{p-bf941fa7.entry.js → p-8c4e3047.entry.js} +2 -2
- package/dist/affinda/{p-e0163836.entry.js → p-90ef7baa.entry.js} +2 -2
- package/dist/affinda/{p-159fe9b1.entry.js → p-94f51238.entry.js} +2 -2
- package/dist/affinda/{p-3ca3e4dc.entry.js → p-95d4696a.entry.js} +2 -2
- package/dist/affinda/{p-892f9bc3.entry.js → p-9aed7039.entry.js} +2 -2
- package/dist/affinda/{p-bfc17d0c.entry.js → p-9c1e9bd8.entry.js} +2 -2
- package/dist/affinda/{p-8da30e7a.entry.js → p-9eba91fd.entry.js} +2 -2
- package/dist/affinda/{p-aa5c6cc0.entry.js → p-9f3e7116.entry.js} +2 -2
- package/dist/affinda/p-MwnBSqEY.js +3 -0
- package/dist/affinda/p-MwnBSqEY.js.map +1 -0
- package/dist/affinda/{p-eb96f29b.entry.js → p-a35029eb.entry.js} +2 -2
- package/dist/affinda/{p-5b3ff010.entry.js → p-a6eda8af.entry.js} +2 -2
- package/dist/affinda/{p-ef41e743.entry.js → p-a71d528d.entry.js} +2 -2
- package/dist/affinda/{p-e9f8ef54.entry.js → p-a84ae4a5.entry.js} +2 -2
- package/dist/affinda/{p-2140698f.entry.js → p-ad41f905.entry.js} +2 -2
- package/dist/affinda/{p-4e8bd716.entry.js → p-b2633acb.entry.js} +2 -2
- package/dist/affinda/{p-d54abc45.entry.js → p-b2b28366.entry.js} +2 -2
- package/dist/affinda/p-c8c4783c.entry.js +2 -0
- package/dist/affinda/{p-da999c10.entry.js.map → p-c8c4783c.entry.js.map} +1 -1
- package/dist/affinda/{p-648e2d76.entry.js → p-da2d84f7.entry.js} +2 -2
- package/dist/affinda/{p-8f6884c8.entry.js → p-dbe7ab88.entry.js} +2 -2
- package/dist/affinda/{p-be45f85c.entry.js → p-e055407b.entry.js} +2 -2
- package/dist/affinda/p-e1cbe95a.entry.js +2 -0
- package/dist/affinda/{p-d60d1943.entry.js.map → p-e1cbe95a.entry.js.map} +1 -1
- package/dist/affinda/{p-97ac8f5f.entry.js → p-e1e98cd6.entry.js} +2 -2
- package/dist/affinda/p-ea42c40b.entry.js +2 -0
- package/dist/affinda/p-ea42c40b.entry.js.map +1 -0
- package/dist/affinda/{p-80c96efd.entry.js → p-edb1a010.entry.js} +2 -2
- package/dist/affinda/{p-6bb831c5.entry.js → p-ef5857cf.entry.js} +2 -2
- package/dist/affinda/p-f10a31cb.entry.js +2 -0
- package/dist/affinda/p-f10a31cb.entry.js.map +1 -0
- package/dist/affinda/{p-7b7d9c6a.entry.js → p-f9315f9e.entry.js} +2 -2
- package/dist/affinda/{p-5ab389c6.entry.js → p-feb3d03f.entry.js} +2 -2
- package/dist/cjs/af-accordion-item.cjs.entry.js +1 -1
- package/dist/cjs/af-accordion.cjs.entry.js +1 -1
- package/dist/cjs/af-aspect-ratio.cjs.entry.js +1 -1
- package/dist/cjs/af-button-group.cjs.entry.js +1 -1
- package/dist/cjs/af-button.cjs.entry.js +1 -1
- package/dist/cjs/af-card.cjs.entry.js +2 -2
- package/dist/cjs/af-card.entry.cjs.js.map +1 -1
- package/dist/cjs/af-center.cjs.entry.js +1 -1
- package/dist/cjs/af-checkbox.cjs.entry.js +1 -1
- package/dist/cjs/af-client-carousel.cjs.entry.js +21 -6
- package/dist/cjs/af-client-carousel.entry.cjs.js.map +1 -1
- package/dist/cjs/af-color-swatch.cjs.entry.js +1 -1
- package/dist/cjs/af-contact-item.cjs.entry.js +1 -1
- package/dist/cjs/af-container.cjs.entry.js +1 -1
- package/dist/cjs/af-divider.cjs.entry.js +1 -1
- package/dist/cjs/af-feature-accordion.cjs.entry.js +2 -2
- package/dist/cjs/af-feature-accordion.entry.cjs.js.map +1 -1
- package/dist/cjs/af-feature-card.cjs.entry.js +1 -1
- package/dist/cjs/af-feature-grid.cjs.entry.js +1 -1
- package/dist/cjs/af-fieldset.cjs.entry.js +1 -1
- package/dist/cjs/af-footer-column.cjs.entry.js +1 -1
- package/dist/cjs/af-footer-link.cjs.entry.js +1 -1
- package/dist/cjs/af-footer.cjs.entry.js +2 -2
- package/dist/cjs/af-footer.entry.cjs.js.map +1 -1
- package/dist/cjs/af-grid-callout.cjs.entry.js +1 -1
- package/dist/cjs/af-grid.cjs.entry.js +1 -1
- package/dist/cjs/af-heading.af-logo.af-nav-item.af-navbar.af-text.entry.cjs.js.map +1 -1
- package/dist/cjs/af-heading_5.cjs.entry.js +2 -2
- package/dist/cjs/af-icon-box.cjs.entry.js +1 -1
- package/dist/cjs/af-icon-button.cjs.entry.js +1 -1
- package/dist/cjs/af-icon-text.cjs.entry.js +1 -1
- package/dist/cjs/af-icon.cjs.entry.js +1 -1
- package/dist/cjs/af-illustrated-card.cjs.entry.js +2 -2
- package/dist/cjs/af-illustrated-card.entry.cjs.js.map +1 -1
- package/dist/cjs/af-image.cjs.entry.js +1 -1
- package/dist/cjs/af-in-page-banner.cjs.entry.js +2 -2
- package/dist/cjs/af-in-page-banner.entry.cjs.js.map +1 -1
- package/dist/cjs/af-inline.cjs.entry.js +1 -1
- package/dist/cjs/af-input.cjs.entry.js +1 -1
- package/dist/cjs/af-logo-well.cjs.entry.js +1 -1
- package/dist/cjs/af-nav-accordion-item.cjs.entry.js +1 -1
- package/dist/cjs/af-nav-accordion.cjs.entry.js +1 -1
- package/dist/cjs/af-nav-card.cjs.entry.js +1 -1
- package/dist/cjs/af-nav-menu-nest.cjs.entry.js +1 -1
- package/dist/cjs/af-nav-menu.cjs.entry.js +1 -1
- package/dist/cjs/af-number-badge.cjs.entry.js +1 -1
- package/dist/cjs/af-paperclip-decoration.cjs.entry.js +39 -0
- package/dist/cjs/af-paperclip-decoration.entry.cjs.js.map +1 -0
- package/dist/cjs/af-progress-line.cjs.entry.js +3 -3
- package/dist/cjs/af-radio.cjs.entry.js +1 -1
- package/dist/cjs/af-section.cjs.entry.js +3 -3
- package/dist/cjs/af-show.cjs.entry.js +2 -2
- package/dist/cjs/af-social-link.cjs.entry.js +2 -2
- package/dist/cjs/af-spacer.cjs.entry.js +2 -2
- package/dist/cjs/af-split-section.cjs.entry.js +3 -3
- package/dist/cjs/af-stack.cjs.entry.js +2 -2
- package/dist/cjs/af-stepper-step.cjs.entry.js +2 -2
- package/dist/cjs/af-stepper.cjs.entry.js +2 -2
- package/dist/cjs/af-switch.cjs.entry.js +1 -1
- package/dist/cjs/af-tab-bar.cjs.entry.js +1 -1
- package/dist/cjs/af-tab.cjs.entry.js +1 -1
- package/dist/cjs/af-tag.cjs.entry.js +1 -1
- package/dist/cjs/af-testimonial-carousel.cjs.entry.js +2 -2
- package/dist/cjs/af-testimonial-stat.cjs.entry.js +2 -2
- package/dist/cjs/af-testimonial.cjs.entry.js +3 -3
- package/dist/cjs/af-text-image-nest.cjs.entry.js +2 -2
- package/dist/cjs/af-text-image.cjs.entry.js +1 -1
- package/dist/cjs/af-textarea.cjs.entry.js +1 -1
- package/dist/cjs/af-theme-override.cjs.entry.js +2 -2
- package/dist/cjs/af-typography-lockup.cjs.entry.js +11 -5
- package/dist/cjs/af-typography-lockup.entry.cjs.js.map +1 -1
- package/dist/cjs/af-video-container.cjs.entry.js +2 -2
- package/dist/cjs/af-visually-hidden.cjs.entry.js +2 -2
- package/dist/cjs/affinda.cjs.js +2 -2
- package/dist/cjs/{index-CcvVbx1D.js → index-BzZA0USq.js} +3 -3
- package/dist/cjs/index-BzZA0USq.js.map +1 -0
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/af-card/af-card.css +4 -1
- package/dist/collection/components/af-client-carousel/af-client-carousel.css +36 -0
- package/dist/collection/components/af-client-carousel/af-client-carousel.js +58 -14
- package/dist/collection/components/af-client-carousel/af-client-carousel.js.map +1 -1
- package/dist/collection/components/af-feature-accordion/af-feature-accordion.css +27 -5
- package/dist/collection/components/af-footer/af-footer.css +5 -2
- package/dist/collection/components/af-illustrated-card/af-illustrated-card.css +5 -1
- package/dist/collection/components/af-in-page-banner/af-in-page-banner.css +6 -4
- package/dist/collection/components/af-navbar/af-navbar.css +4 -1
- package/dist/collection/components/af-paperclip-decoration/af-paperclip-decoration.css +11 -0
- package/dist/collection/components/af-paperclip-decoration/af-paperclip-decoration.js +152 -0
- package/dist/collection/components/af-paperclip-decoration/af-paperclip-decoration.js.map +1 -0
- package/dist/collection/components/af-progress-line/af-progress-line.js +2 -2
- package/dist/collection/components/af-section/af-section.js +2 -2
- package/dist/collection/components/af-show/af-show.js +1 -1
- package/dist/collection/components/af-social-link/af-social-link.js +1 -1
- package/dist/collection/components/af-spacer/af-spacer.js +1 -1
- package/dist/collection/components/af-split-section/af-split-section.js +2 -2
- package/dist/collection/components/af-stack/af-stack.js +1 -1
- package/dist/collection/components/af-stepper/af-stepper.js +1 -1
- package/dist/collection/components/af-stepper-step/af-stepper-step.js +1 -1
- package/dist/collection/components/af-testimonial/af-testimonial.js +2 -2
- package/dist/collection/components/af-testimonial-carousel/af-testimonial-carousel.js +1 -1
- package/dist/collection/components/af-testimonial-stat/af-testimonial-stat.js +1 -1
- package/dist/collection/components/af-text-image-nest/af-text-image-nest.js +1 -1
- package/dist/collection/components/af-theme-override/af-theme-override.js +1 -1
- package/dist/collection/components/af-typography-lockup/af-typography-lockup.css +36 -12
- package/dist/collection/components/af-typography-lockup/af-typography-lockup.js +20 -8
- package/dist/collection/components/af-typography-lockup/af-typography-lockup.js.map +1 -1
- package/dist/collection/components/af-video-container/af-video-container.js +1 -1
- package/dist/collection/components/af-visually-hidden/af-visually-hidden.js +1 -1
- package/dist/components/af-accordion-item.js +1 -1
- package/dist/components/af-accordion.js +1 -1
- package/dist/components/af-aspect-ratio.js +1 -1
- package/dist/components/af-button-group.js +1 -1
- package/dist/components/af-button.js +1 -1
- package/dist/components/af-card.js +1 -1
- package/dist/components/af-center.js +1 -1
- package/dist/components/af-checkbox.js +1 -1
- package/dist/components/af-client-carousel.js +23 -7
- package/dist/components/af-client-carousel.js.map +1 -1
- package/dist/components/af-color-swatch.js +1 -1
- package/dist/components/af-contact-item.js +1 -1
- package/dist/components/af-container.js +1 -1
- package/dist/components/af-divider.js +1 -1
- package/dist/components/af-feature-accordion.js +2 -2
- package/dist/components/af-feature-accordion.js.map +1 -1
- package/dist/components/af-feature-card.js +1 -1
- package/dist/components/af-feature-grid.js +2 -2
- package/dist/components/af-fieldset.js +1 -1
- package/dist/components/af-footer-column.js +1 -1
- package/dist/components/af-footer-link.js +1 -1
- package/dist/components/af-footer.js +2 -2
- package/dist/components/af-footer.js.map +1 -1
- package/dist/components/af-grid-callout.js +2 -2
- package/dist/components/af-grid.js +1 -1
- package/dist/components/af-heading.js +1 -1
- package/dist/components/af-icon-box.js +1 -1
- package/dist/components/af-icon-button.js +1 -1
- package/dist/components/af-icon-text.js +4 -4
- package/dist/components/af-icon.js +1 -1
- package/dist/components/af-illustrated-card.js +1 -1
- package/dist/components/af-image.js +1 -1
- package/dist/components/af-in-page-banner.js +3 -3
- package/dist/components/af-in-page-banner.js.map +1 -1
- package/dist/components/af-inline.js +1 -1
- package/dist/components/af-input.js +1 -1
- package/dist/components/af-logo-well.js +1 -1
- package/dist/components/af-logo.js +1 -1
- package/dist/components/af-nav-accordion-item.js +1 -1
- package/dist/components/af-nav-accordion.js +1 -1
- package/dist/components/af-nav-card.js +1 -1
- package/dist/components/af-nav-item.js +1 -1
- package/dist/components/af-nav-menu-nest.js +1 -1
- package/dist/components/af-nav-menu.js +1 -1
- package/dist/components/af-navbar.js +1 -1
- package/dist/components/af-number-badge.js +1 -1
- package/dist/components/af-paperclip-decoration.d.ts +11 -0
- package/dist/components/af-paperclip-decoration.js +64 -0
- package/dist/components/af-paperclip-decoration.js.map +1 -0
- package/dist/components/af-progress-line.js +1 -1
- package/dist/components/af-radio.js +1 -1
- package/dist/components/af-section.js +4 -4
- package/dist/components/af-show.js +2 -2
- package/dist/components/af-social-link.js +2 -2
- package/dist/components/af-spacer.js +2 -2
- package/dist/components/af-split-section.js +4 -4
- package/dist/components/af-stack.js +2 -2
- package/dist/components/af-stepper-step.js +2 -2
- package/dist/components/af-stepper.js +2 -2
- package/dist/components/af-switch.js +1 -1
- package/dist/components/af-tab-bar.js +1 -1
- package/dist/components/af-tab.js +1 -1
- package/dist/components/af-tag.js +1 -1
- package/dist/components/af-testimonial-carousel.js +3 -3
- package/dist/components/af-testimonial-stat.js +4 -4
- package/dist/components/af-testimonial.js +6 -6
- package/dist/components/af-text-image-nest.js +2 -2
- package/dist/components/af-text-image.js +2 -2
- package/dist/components/af-text.js +1 -1
- package/dist/components/af-textarea.js +1 -1
- package/dist/components/af-theme-override.js +2 -2
- package/dist/components/af-typography-lockup.js +1 -1
- package/dist/components/af-video-container.js +4 -4
- package/dist/components/af-visually-hidden.js +2 -2
- package/dist/components/index.js +24 -24
- package/dist/components/{p-CNuja1ax.js → p--gChEc0P.js} +3 -3
- package/dist/components/{p-CNuja1ax.js.map → p--gChEc0P.js.map} +1 -1
- package/dist/components/{p-DCu8UsJv.js → p-BRDu9zN1.js} +3 -3
- package/dist/components/{p-DCu8UsJv.js.map → p-BRDu9zN1.js.map} +1 -1
- package/dist/components/{p-CSsp_M05.js → p-BROLmNeM.js} +3 -3
- package/dist/components/{p-CSsp_M05.js.map → p-BROLmNeM.js.map} +1 -1
- package/dist/components/{p-Dz4dEIxw.js → p-BT13eL0Y.js} +3 -3
- package/dist/components/{p-Dz4dEIxw.js.map → p-BT13eL0Y.js.map} +1 -1
- package/dist/components/{p-DAYoQm46.js → p-BW-FxZwa.js} +3 -3
- package/dist/components/{p-DAYoQm46.js.map → p-BW-FxZwa.js.map} +1 -1
- package/dist/components/{p-aAVeavhK.js → p-B_OoX__z.js} +3 -3
- package/dist/components/{p-aAVeavhK.js.map → p-B_OoX__z.js.map} +1 -1
- package/dist/components/{p-C0R_vg0S.js → p-BgXXQG75.js} +3 -3
- package/dist/components/{p-C0R_vg0S.js.map → p-BgXXQG75.js.map} +1 -1
- package/dist/components/{p-CKcuq0NU.js → p-Bh6Cfgtj.js} +3 -3
- package/dist/components/{p-CKcuq0NU.js.map → p-Bh6Cfgtj.js.map} +1 -1
- package/dist/components/{p-DqgLTGE0.js → p-C4G6votC.js} +3 -3
- package/dist/components/{p-DqgLTGE0.js.map → p-C4G6votC.js.map} +1 -1
- package/dist/components/{p-TfjpcU9q.js → p-C6-JATRR.js} +6 -6
- package/dist/components/{p-TfjpcU9q.js.map → p-C6-JATRR.js.map} +1 -1
- package/dist/components/p-CKLkuSI3.js +53 -0
- package/dist/components/p-CKLkuSI3.js.map +1 -0
- package/dist/components/{p-XrKBGe-M.js → p-CNzQtskW.js} +5 -5
- package/dist/components/{p-XrKBGe-M.js.map → p-CNzQtskW.js.map} +1 -1
- package/dist/components/{p-CHLm_AuW.js → p-CP8rLe_C.js} +3 -3
- package/dist/components/{p-CHLm_AuW.js.map → p-CP8rLe_C.js.map} +1 -1
- package/dist/components/{p-Bw8fdMnn.js → p-CX0pktY8.js} +3 -3
- package/dist/components/{p-Bw8fdMnn.js.map → p-CX0pktY8.js.map} +1 -1
- package/dist/components/{p-CAUqW6Mp.js → p-CYKk6Qhi.js} +3 -3
- package/dist/components/{p-CAUqW6Mp.js.map → p-CYKk6Qhi.js.map} +1 -1
- package/dist/components/{p-DkaLi-uL.js → p-CoL_hRAR.js} +3 -3
- package/dist/components/{p-DkaLi-uL.js.map → p-CoL_hRAR.js.map} +1 -1
- package/dist/components/{p-CB9GFAlk.js → p-D8DmhESZ.js} +3 -3
- package/dist/components/{p-CB9GFAlk.js.map → p-D8DmhESZ.js.map} +1 -1
- package/dist/components/{p-B3Yr4Hxx.js → p-DJC-C2BS.js} +3 -3
- package/dist/components/{p-B3Yr4Hxx.js.map → p-DJC-C2BS.js.map} +1 -1
- package/dist/components/{p-N0xV1Erp.js → p-DNeNJhuM.js} +14 -8
- package/dist/components/p-DNeNJhuM.js.map +1 -0
- package/dist/components/{p-DwhGQrZK.js → p-DO9J0XTo.js} +5 -5
- package/dist/components/{p-DwhGQrZK.js.map → p-DO9J0XTo.js.map} +1 -1
- package/dist/components/{p-CqQyDZ-4.js → p-DOgb6SUj.js} +3 -3
- package/dist/components/p-DOgb6SUj.js.map +1 -0
- package/dist/components/{p-Dxa6cHAb.js → p-DbVc-b1e.js} +3 -3
- package/dist/components/{p-Dxa6cHAb.js.map → p-DbVc-b1e.js.map} +1 -1
- package/dist/components/{p-D3oGtcJ5.js → p-Dd3nOGt_.js} +3 -3
- package/dist/components/{p-D3oGtcJ5.js.map → p-Dd3nOGt_.js.map} +1 -1
- package/dist/components/{p-DGBMGvZK.js → p-Dx_UXI2a.js} +3 -3
- package/dist/components/{p-DGBMGvZK.js.map → p-Dx_UXI2a.js.map} +1 -1
- package/dist/components/{p-DENib4OL.js → p-DyZaoX4Q.js} +3 -3
- package/dist/components/{p-DENib4OL.js.map → p-DyZaoX4Q.js.map} +1 -1
- package/dist/components/{p-DRujYIJW.js → p-HMlLQQwp.js} +5 -5
- package/dist/components/p-HMlLQQwp.js.map +1 -0
- package/dist/components/{p-DMOGClIa.js → p-NtJ_O8-z.js} +3 -3
- package/dist/components/{p-DMOGClIa.js.map → p-NtJ_O8-z.js.map} +1 -1
- package/dist/components/{p-BHAWxoQE.js → p-i_6TLQJ5.js} +4 -4
- package/dist/components/{p-BHAWxoQE.js.map → p-i_6TLQJ5.js.map} +1 -1
- package/dist/components/{p-D30gSxh2.js → p-kEqwmn80.js} +3 -3
- package/dist/components/{p-D30gSxh2.js.map → p-kEqwmn80.js.map} +1 -1
- package/dist/esm/af-accordion-item.entry.js +1 -1
- package/dist/esm/af-accordion.entry.js +1 -1
- package/dist/esm/af-aspect-ratio.entry.js +1 -1
- package/dist/esm/af-button-group.entry.js +1 -1
- package/dist/esm/af-button.entry.js +1 -1
- package/dist/esm/af-card.entry.js +2 -2
- package/dist/esm/af-card.entry.js.map +1 -1
- package/dist/esm/af-center.entry.js +1 -1
- package/dist/esm/af-checkbox.entry.js +1 -1
- package/dist/esm/af-client-carousel.entry.js +21 -6
- package/dist/esm/af-client-carousel.entry.js.map +1 -1
- package/dist/esm/af-color-swatch.entry.js +1 -1
- package/dist/esm/af-contact-item.entry.js +1 -1
- package/dist/esm/af-container.entry.js +1 -1
- package/dist/esm/af-divider.entry.js +1 -1
- package/dist/esm/af-feature-accordion.entry.js +2 -2
- package/dist/esm/af-feature-accordion.entry.js.map +1 -1
- package/dist/esm/af-feature-card.entry.js +1 -1
- package/dist/esm/af-feature-grid.entry.js +1 -1
- package/dist/esm/af-fieldset.entry.js +1 -1
- package/dist/esm/af-footer-column.entry.js +1 -1
- package/dist/esm/af-footer-link.entry.js +1 -1
- package/dist/esm/af-footer.entry.js +2 -2
- package/dist/esm/af-footer.entry.js.map +1 -1
- package/dist/esm/af-grid-callout.entry.js +1 -1
- package/dist/esm/af-grid.entry.js +1 -1
- package/dist/esm/af-heading.af-logo.af-nav-item.af-navbar.af-text.entry.js.map +1 -1
- package/dist/esm/af-heading_5.entry.js +2 -2
- package/dist/esm/af-icon-box.entry.js +1 -1
- package/dist/esm/af-icon-button.entry.js +1 -1
- package/dist/esm/af-icon-text.entry.js +1 -1
- package/dist/esm/af-icon.entry.js +1 -1
- package/dist/esm/af-illustrated-card.entry.js +2 -2
- package/dist/esm/af-illustrated-card.entry.js.map +1 -1
- package/dist/esm/af-image.entry.js +1 -1
- package/dist/esm/af-in-page-banner.entry.js +2 -2
- package/dist/esm/af-in-page-banner.entry.js.map +1 -1
- package/dist/esm/af-inline.entry.js +1 -1
- package/dist/esm/af-input.entry.js +1 -1
- package/dist/esm/af-logo-well.entry.js +1 -1
- package/dist/esm/af-nav-accordion-item.entry.js +1 -1
- package/dist/esm/af-nav-accordion.entry.js +1 -1
- package/dist/esm/af-nav-card.entry.js +1 -1
- package/dist/esm/af-nav-menu-nest.entry.js +1 -1
- package/dist/esm/af-nav-menu.entry.js +1 -1
- package/dist/esm/af-number-badge.entry.js +1 -1
- package/dist/esm/af-paperclip-decoration.entry.js +37 -0
- package/dist/esm/af-paperclip-decoration.entry.js.map +1 -0
- package/dist/esm/af-progress-line.entry.js +3 -3
- package/dist/esm/af-radio.entry.js +1 -1
- package/dist/esm/af-section.entry.js +3 -3
- package/dist/esm/af-show.entry.js +2 -2
- package/dist/esm/af-social-link.entry.js +2 -2
- package/dist/esm/af-spacer.entry.js +2 -2
- package/dist/esm/af-split-section.entry.js +3 -3
- package/dist/esm/af-stack.entry.js +2 -2
- package/dist/esm/af-stepper-step.entry.js +2 -2
- package/dist/esm/af-stepper.entry.js +2 -2
- package/dist/esm/af-switch.entry.js +1 -1
- package/dist/esm/af-tab-bar.entry.js +1 -1
- package/dist/esm/af-tab.entry.js +1 -1
- package/dist/esm/af-tag.entry.js +1 -1
- package/dist/esm/af-testimonial-carousel.entry.js +2 -2
- package/dist/esm/af-testimonial-stat.entry.js +2 -2
- package/dist/esm/af-testimonial.entry.js +3 -3
- package/dist/esm/af-text-image-nest.entry.js +2 -2
- package/dist/esm/af-text-image.entry.js +1 -1
- package/dist/esm/af-textarea.entry.js +1 -1
- package/dist/esm/af-theme-override.entry.js +2 -2
- package/dist/esm/af-typography-lockup.entry.js +11 -5
- package/dist/esm/af-typography-lockup.entry.js.map +1 -1
- package/dist/esm/af-video-container.entry.js +2 -2
- package/dist/esm/af-visually-hidden.entry.js +2 -2
- package/dist/esm/affinda.js +3 -3
- package/dist/esm/{index-nb89SRN6.js → index-MwnBSqEY.js} +3 -3
- package/dist/esm/index-MwnBSqEY.js.map +1 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/loader.js +3 -3
- package/dist/types/components/af-client-carousel/af-client-carousel.d.ts +25 -12
- package/dist/types/components/af-paperclip-decoration/af-paperclip-decoration.d.ts +50 -0
- package/dist/types/components/af-typography-lockup/af-typography-lockup.d.ts +11 -4
- package/dist/types/components.d.ts +233 -46
- package/package.json +3 -3
- package/dist/affinda/p-07f9580c.entry.js +0 -2
- package/dist/affinda/p-50590601.entry.js +0 -2
- package/dist/affinda/p-570283f6.entry.js +0 -2
- package/dist/affinda/p-9229defb.entry.js +0 -2
- package/dist/affinda/p-9229defb.entry.js.map +0 -1
- package/dist/affinda/p-b14c1a4b.entry.js +0 -2
- package/dist/affinda/p-d60d1943.entry.js +0 -2
- package/dist/affinda/p-da999c10.entry.js +0 -2
- package/dist/affinda/p-nb89SRN6.js +0 -3
- package/dist/affinda/p-nb89SRN6.js.map +0 -1
- package/dist/cjs/index-CcvVbx1D.js.map +0 -1
- package/dist/components/p-BO4blShf.js +0 -53
- package/dist/components/p-BO4blShf.js.map +0 -1
- package/dist/components/p-CqQyDZ-4.js.map +0 -1
- package/dist/components/p-DRujYIJW.js.map +0 -1
- package/dist/components/p-N0xV1Erp.js.map +0 -1
- package/dist/esm/index-nb89SRN6.js.map +0 -1
- /package/dist/affinda/{p-11e7ddf3.entry.js.map → p-0137e7a5.entry.js.map} +0 -0
- /package/dist/affinda/{p-816deae3.entry.js.map → p-0201c8bd.entry.js.map} +0 -0
- /package/dist/affinda/{p-94adb381.entry.js.map → p-083fc528.entry.js.map} +0 -0
- /package/dist/affinda/{p-f9e3c2b7.entry.js.map → p-0e469ad2.entry.js.map} +0 -0
- /package/dist/affinda/{p-6eca2722.entry.js.map → p-15f0bd34.entry.js.map} +0 -0
- /package/dist/affinda/{p-2c655ae2.entry.js.map → p-1c96856a.entry.js.map} +0 -0
- /package/dist/affinda/{p-4cbdf940.entry.js.map → p-24e74c10.entry.js.map} +0 -0
- /package/dist/affinda/{p-ab0b621e.entry.js.map → p-2e6192eb.entry.js.map} +0 -0
- /package/dist/affinda/{p-102e8b8c.entry.js.map → p-35607741.entry.js.map} +0 -0
- /package/dist/affinda/{p-c7ba4e7f.entry.js.map → p-364ffa25.entry.js.map} +0 -0
- /package/dist/affinda/{p-af3f6e16.entry.js.map → p-3ee906de.entry.js.map} +0 -0
- /package/dist/affinda/{p-d7e29257.entry.js.map → p-41643147.entry.js.map} +0 -0
- /package/dist/affinda/{p-f9b6d1c6.entry.js.map → p-43f40921.entry.js.map} +0 -0
- /package/dist/affinda/{p-8d9d0cb3.entry.js.map → p-48aadea9.entry.js.map} +0 -0
- /package/dist/affinda/{p-cc22a8da.entry.js.map → p-49521f2e.entry.js.map} +0 -0
- /package/dist/affinda/{p-0f3267ea.entry.js.map → p-4a355b69.entry.js.map} +0 -0
- /package/dist/affinda/{p-9bb5202e.entry.js.map → p-4b154e23.entry.js.map} +0 -0
- /package/dist/affinda/{p-3ecf43aa.entry.js.map → p-4b2c0698.entry.js.map} +0 -0
- /package/dist/affinda/{p-12652bf5.entry.js.map → p-4f59b554.entry.js.map} +0 -0
- /package/dist/affinda/{p-401fc5b1.entry.js.map → p-50a67fb6.entry.js.map} +0 -0
- /package/dist/affinda/{p-a3865306.entry.js.map → p-5265e82e.entry.js.map} +0 -0
- /package/dist/affinda/{p-5e5d16dd.entry.js.map → p-56fe6e6e.entry.js.map} +0 -0
- /package/dist/affinda/{p-a4d39bdd.entry.js.map → p-5f6a5741.entry.js.map} +0 -0
- /package/dist/affinda/{p-432c7bfc.entry.js.map → p-6c33fee6.entry.js.map} +0 -0
- /package/dist/affinda/{p-a002c784.entry.js.map → p-6c58b283.entry.js.map} +0 -0
- /package/dist/affinda/{p-1dff35bf.entry.js.map → p-6e40dbdf.entry.js.map} +0 -0
- /package/dist/affinda/{p-23aa03dc.entry.js.map → p-76cb736d.entry.js.map} +0 -0
- /package/dist/affinda/{p-77ed47d5.entry.js.map → p-78518e6c.entry.js.map} +0 -0
- /package/dist/affinda/{p-e78112d9.entry.js.map → p-7867c2ff.entry.js.map} +0 -0
- /package/dist/affinda/{p-636045e8.entry.js.map → p-81706709.entry.js.map} +0 -0
- /package/dist/affinda/{p-5e444a9a.entry.js.map → p-862a2509.entry.js.map} +0 -0
- /package/dist/affinda/{p-7238fc21.entry.js.map → p-86f6dfdc.entry.js.map} +0 -0
- /package/dist/affinda/{p-bf941fa7.entry.js.map → p-8c4e3047.entry.js.map} +0 -0
- /package/dist/affinda/{p-e0163836.entry.js.map → p-90ef7baa.entry.js.map} +0 -0
- /package/dist/affinda/{p-159fe9b1.entry.js.map → p-94f51238.entry.js.map} +0 -0
- /package/dist/affinda/{p-3ca3e4dc.entry.js.map → p-95d4696a.entry.js.map} +0 -0
- /package/dist/affinda/{p-892f9bc3.entry.js.map → p-9aed7039.entry.js.map} +0 -0
- /package/dist/affinda/{p-bfc17d0c.entry.js.map → p-9c1e9bd8.entry.js.map} +0 -0
- /package/dist/affinda/{p-8da30e7a.entry.js.map → p-9eba91fd.entry.js.map} +0 -0
- /package/dist/affinda/{p-aa5c6cc0.entry.js.map → p-9f3e7116.entry.js.map} +0 -0
- /package/dist/affinda/{p-eb96f29b.entry.js.map → p-a35029eb.entry.js.map} +0 -0
- /package/dist/affinda/{p-5b3ff010.entry.js.map → p-a6eda8af.entry.js.map} +0 -0
- /package/dist/affinda/{p-ef41e743.entry.js.map → p-a71d528d.entry.js.map} +0 -0
- /package/dist/affinda/{p-e9f8ef54.entry.js.map → p-a84ae4a5.entry.js.map} +0 -0
- /package/dist/affinda/{p-2140698f.entry.js.map → p-ad41f905.entry.js.map} +0 -0
- /package/dist/affinda/{p-4e8bd716.entry.js.map → p-b2633acb.entry.js.map} +0 -0
- /package/dist/affinda/{p-d54abc45.entry.js.map → p-b2b28366.entry.js.map} +0 -0
- /package/dist/affinda/{p-648e2d76.entry.js.map → p-da2d84f7.entry.js.map} +0 -0
- /package/dist/affinda/{p-8f6884c8.entry.js.map → p-dbe7ab88.entry.js.map} +0 -0
- /package/dist/affinda/{p-be45f85c.entry.js.map → p-e055407b.entry.js.map} +0 -0
- /package/dist/affinda/{p-97ac8f5f.entry.js.map → p-e1e98cd6.entry.js.map} +0 -0
- /package/dist/affinda/{p-80c96efd.entry.js.map → p-edb1a010.entry.js.map} +0 -0
- /package/dist/affinda/{p-6bb831c5.entry.js.map → p-ef5857cf.entry.js.map} +0 -0
- /package/dist/affinda/{p-7b7d9c6a.entry.js.map → p-f9315f9e.entry.js.map} +0 -0
- /package/dist/affinda/{p-5ab389c6.entry.js.map → p-feb3d03f.entry.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"af-client-carousel.js","mappings":";;AAAA,MAAM,mBAAmB,GAAG,yuGAAyuG;;MC8BxvGA,kBAAgB,iBAAAC,kBAAA,CAAA,MAAA,gBAAA,SAAAC,CAAA,CAAA;AAT7B,IAAA,WAAA,CAAA,YAAA,EAAA;;;;;;AAaU,QAAA,IAAK,CAAA,KAAA,GAAU,SAAS;AAEhC;;;;;;;AAOG;AACK,QAAA,IAAI,CAAA,IAAA,GAAU,CAAC;AA6DxB;IAxDC,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC;QAC7C,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC;;;AAIjD;;;;;;;;;AASG;AACK,IAAA,qBAAqB,CAAC,KAA8B,EAAA;AAC1D,QAAA,IAAI,CAAC,KAAK;YAAE;QACZ,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CACjD,CAAC,KAAK,KAAK,CAAE,KAAqB,CAAC,YAAY,CAAC,qBAAqB,CAAC,CACvE;AACD,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;YACvB,MAAM,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAgB;AAC/C,YAAA,KAAK,CAAC,YAAY,CAAC,qBAAqB,EAAE,EAAE,CAAC;AAC7C,YAAA,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;AACzC,YAAA,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;AAC1B,SAAC,CAAC;;IAGJ,MAAM,GAAA;QACJ,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9B,QACE,CAAC,CAAA,IAAI,EAAC,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAE,CAAA,MAAA,EAAS,IAAI,CAAC,KAAK,EAAE,EAAA,EAChC,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAE,CAAA,sBAAA,EAAyB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAA,CAAE,EAAA,EAC5D,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,oBAAoB,EAAA,EAC7B,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,0BAA0B,EAAA,EACnC,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,YAAY,EAAC,GAAG,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,EAAA,EAC3D,CAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAC,OAAO,EAAA,EAChB,CAAa,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAA,CACR,CACH,CACF,EAEL,IAAI,KAAK,CAAC,KACT,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,2BAA2B,EAAA,EACpC,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,YAAY,EAAC,GAAG,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,EAAA,EAC3D,CAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAC,OAAO,EAAQ,CAAA,CACtB,CACF,CACP,CACG,CACF,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["AfClientCarousel","__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/af-client-carousel/af-client-carousel.css?tag=af-client-carousel&encapsulation=scoped","src/components/af-client-carousel/af-client-carousel.tsx"],"sourcesContent":[":host {\n display: block;\n width: 100%;\n}\n\n.client-carousel {\n padding: 48px 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-container {\n display: flex;\n flex-direction: column;\n gap: var(--space-4, 16px);\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-row {\n display: flex;\n width: 100%;\n overflow: hidden;\n position: relative;\n}\n\n.logo-track {\n display: flex;\n gap: var(--space-4, 16px);\n animation-timing-function: linear;\n animation-iteration-count: infinite;\n}\n\n/* Scroll left animation */\n.scroll-left .logo-track {\n animation-name: scroll-left;\n animation-duration: 40s;\n}\n\n/* Scroll right animation */\n.scroll-right .logo-track {\n animation-name: scroll-right;\n animation-duration: 40s;\n}\n\n/* Pause animation on hover */\n:host(:hover) .logo-track {\n animation-play-state: paused;\n}\n\n/* Respect reduced motion: stop the infinite scroll and hold at a\n * stable frame so logos remain visible instead of being offscreen. */\n@media (prefers-reduced-motion: reduce) {\n .logo-track,\n .scroll-left .logo-track,\n .scroll-right .logo-track {\n animation: none;\n transform: translateX(0);\n }\n}\n\n@keyframes scroll-left {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(-50%);\n }\n}\n\n@keyframes scroll-right {\n 0% {\n transform: translateX(-50%);\n }\n 100% {\n transform: translateX(0);\n }\n}\n\n/* Style slotted children (originals projected through the slot) and\n * JS-appended clones as flex rows. In scoped mode Stencil keeps all\n * this in light DOM, so a direct-descendant selector covers both. */\n.logo-track > * {\n display: flex;\n flex-shrink: 0;\n gap: var(--space-4, 16px);\n align-items: center;\n}\n\n/* ==========================================================================\n Theme Variants\n ========================================================================== */\n\n/* INKWELL THEME (Default) */\n:host(.theme-inkwell),\n.client-carousel.theme-inkwell {\n background-color: var(--colour-brand-inkwell, #14343B);\n --af-carousel-logo-well-bg: var(--colour-background-level1-dark, #203e45);\n --af-carousel-logo-color: white;\n --af-carousel-logo-filter: brightness(0) invert(1);\n}\n\n/* WHITE THEME */\n:host(.theme-white),\n.client-carousel.theme-white {\n background-color: var(--colour-brand-white, #FFFFFF);\n --af-carousel-logo-well-bg: var(--colour-background-level1, #e8eeed);\n --af-carousel-logo-color: var(--colour-brand-inkwell, #14343B);\n --af-carousel-logo-filter: none;\n}\n\n/* MIST-GREEN THEME */\n:host(.theme-mist-green),\n.client-carousel.theme-mist-green {\n background-color: var(--colour-brand-mist-green, #C6D5D1);\n --af-carousel-logo-well-bg: var(--colour-mistgreen-300, #dde6e3);\n --af-carousel-logo-color: var(--colour-brand-inkwell, #14343B);\n --af-carousel-logo-filter: none;\n}\n\n/* SOFT-CLAY THEME */\n:host(.theme-soft-clay),\n.client-carousel.theme-soft-clay {\n background-color: var(--colour-softclay-400, #c0ab8d);\n --af-carousel-logo-well-bg: var(--colour-softclay-200, #d5c5b0);\n --af-carousel-logo-color: var(--colour-brand-inkwell, #14343B);\n --af-carousel-logo-filter: none;\n}\n\n/* WHITE-IVORY THEME */\n:host(.theme-white-ivory),\n.client-carousel.theme-white-ivory {\n background-color: var(--colour-brand-ivory-paper, #fff9ee);\n --af-carousel-logo-well-bg: var(--colour-softclay-100, #f2eadc);\n --af-carousel-logo-color: var(--colour-brand-inkwell, #14343B);\n --af-carousel-logo-filter: none;\n}\n\n/* ==========================================================================\n Responsive Adjustments\n ========================================================================== */\n\n/* Tablet adjustments */\n/* ≤ tablet */\n@media (max-width: 1024px) {\n .client-carousel {\n padding: 32px 0;\n }\n}\n\n/* Mobile adjustments */\n/* ≤ mobile */\n@media (max-width: 767px) {\n .client-carousel {\n padding: 24px 0;\n }\n \n .carousel-container {\n gap: var(--space-3, 12px);\n }\n \n .logo-track {\n gap: var(--space-3, 12px);\n }\n \n ::slotted(*) {\n gap: var(--space-3, 12px);\n }\n}\n","import { Component, Element, h, Host, Prop } from '@stencil/core';\n\ntype Theme = 'white' | 'inkwell' | 'mist-green' | 'soft-clay' | 'white-ivory';\n\n/**\n * Infinite scrolling carousel for client logos.\n *\n * This is a section-level component that spans full width.\n * Renders one or two scrolling rows; single row matches the Webflow\n * reference, two rows (scrolling opposite directions) is the denser\n * variant.\n *\n * For headlines, use a separate TypographyLockup or Heading component\n * above this carousel.\n *\n * **Seamless loop:** the CSS animation translates the track from 0% to\n * -50% (or vice versa), which only looks continuous if the track holds\n * two identical copies of the content end-to-end. Shadow DOM slots can\n * only project content once, so we clone the slotted nodes in\n * `componentDidLoad` and append the copies to the track.\n */\n@Component({\n tag: 'af-client-carousel',\n styleUrl: 'af-client-carousel.css',\n // Scoped (not shadow) so that cloned nodes inherit the consumer's\n // external CSS (e.g. Astro-scoped `.logo-pill` on the SiteHeader\n // carousel). Shadow DOM would seal the clones off from outer styles.\n shadow: false,\n scoped: true,\n})\nexport class AfClientCarousel {\n @Element() el!: HTMLElement;\n\n /** Theme - sets background color and provides theme context to children */\n @Prop() theme: Theme = 'inkwell';\n\n /**\n * Number of scrolling rows.\n * - `1` (default) — single row scrolling left, matches the Webflow reference.\n * - `2` — two rows scrolling in opposite directions.\n *\n * When `rows=\"2\"`, slot `row-1` and `row-2` independently.\n * When `rows=\"1\"`, slot the default slot (unnamed) or `row-1`.\n */\n @Prop() rows: 1 | 2 = 1;\n\n private row1TrackRef?: HTMLElement;\n private row2TrackRef?: HTMLElement;\n\n componentDidLoad() {\n this.duplicateTrackContent(this.row1TrackRef);\n if (Number(this.rows) === 2) {\n this.duplicateTrackContent(this.row2TrackRef);\n }\n }\n\n /**\n * Append clones of every existing track child into the track so the\n * -50% translate animation loops seamlessly. Marks clones with\n * `aria-hidden` and `data-carousel-clone` so assistive tech ignores\n * them and we can skip them when re-duplicating.\n *\n * In scoped mode, slotted content is moved into the track as regular\n * children (there's no `<slot>` element to read from), so we just\n * iterate direct children that aren't themselves prior clones.\n */\n private duplicateTrackContent(track: HTMLElement | undefined) {\n if (!track) return;\n const originals = Array.from(track.children).filter(\n (child) => !(child as HTMLElement).hasAttribute('data-carousel-clone'),\n );\n originals.forEach((el) => {\n const clone = el.cloneNode(true) as HTMLElement;\n clone.setAttribute('data-carousel-clone', '');\n clone.setAttribute('aria-hidden', 'true');\n track.appendChild(clone);\n });\n }\n\n render() {\n const rows = Number(this.rows);\n return (\n <Host class={`theme-${this.theme}`}>\n <div class={`client-carousel theme-${this.theme} rows-${rows}`}>\n <div class=\"carousel-container\">\n <div class=\"carousel-row scroll-left\">\n <div class=\"logo-track\" ref={(el) => (this.row1TrackRef = el)}>\n <slot name=\"row-1\">\n <slot></slot>\n </slot>\n </div>\n </div>\n\n {rows === 2 && (\n <div class=\"carousel-row scroll-right\">\n <div class=\"logo-track\" ref={(el) => (this.row2TrackRef = el)}>\n <slot name=\"row-2\"></slot>\n </div>\n </div>\n )}\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
1
|
+
{"file":"af-client-carousel.js","mappings":"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","names":["AfClientCarousel","__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/af-client-carousel/af-client-carousel.css?tag=af-client-carousel&encapsulation=scoped","src/components/af-client-carousel/af-client-carousel.tsx"],"sourcesContent":[":host {\n display: block;\n width: 100%;\n}\n\n.client-carousel {\n padding: 48px 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-container {\n display: flex;\n flex-direction: column;\n gap: var(--space-4, 16px);\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-row {\n display: flex;\n width: 100%;\n overflow: hidden;\n position: relative;\n}\n\n.logo-track {\n display: flex;\n gap: var(--space-4, 16px);\n animation-timing-function: linear;\n animation-iteration-count: infinite;\n}\n\n/* Scroll left animation */\n.scroll-left .logo-track {\n animation-name: scroll-left;\n animation-duration: 40s;\n}\n\n/* Scroll right animation */\n.scroll-right .logo-track {\n animation-name: scroll-right;\n animation-duration: 40s;\n}\n\n/* Pause animation on hover */\n:host(:hover) .logo-track {\n animation-play-state: paused;\n}\n\n/* Respect reduced motion: stop the infinite scroll and hold at a\n * stable frame so logos remain visible instead of being offscreen. */\n@media (prefers-reduced-motion: reduce) {\n .logo-track,\n .scroll-left .logo-track,\n .scroll-right .logo-track {\n animation: none;\n transform: translateX(0);\n }\n}\n\n/* ==========================================================================\n Static Mode\n ==========================================================================\n Non-animated, centred row. Used when the logo set is small enough to\n fit on screen without scrolling (the former website LogoPillRow use\n case). The clone-for-seamless-loop is skipped in TSX, so each logo\n appears exactly once here. */\n.client-carousel.mode-static .logo-track {\n animation: none;\n /* The track is what we centre — the .carousel-row is full-width so\n * it can host the overflow cue in scroll mode; in static mode we\n * centre its child track instead of fighting the row's flex default. */\n justify-content: center;\n /* Let the track grow only as wide as its content so justify-content\n * on the parent row can actually centre it horizontally. */\n flex-wrap: wrap;\n width: 100%;\n}\n\n.client-carousel.mode-static .carousel-row {\n justify-content: center;\n /* Static rows have no scrolling motion to mask, so allow the row to\n * expand content-naturally instead of clipping at viewport edges. */\n overflow: visible;\n}\n\n.client-carousel.mode-static .carousel-container {\n /* Match the row's no-clip behaviour so wrapped logos stay visible. */\n overflow: visible;\n}\n\n.client-carousel.mode-static {\n /* Keep horizontal bleed contained for consistency with scroll mode. */\n overflow: hidden;\n}\n\n@keyframes scroll-left {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(-50%);\n }\n}\n\n@keyframes scroll-right {\n 0% {\n transform: translateX(-50%);\n }\n 100% {\n transform: translateX(0);\n }\n}\n\n/* Style slotted children (originals projected through the slot) and\n * JS-appended clones as flex rows. In scoped mode Stencil keeps all\n * this in light DOM, so a direct-descendant selector covers both. */\n.logo-track > * {\n display: flex;\n flex-shrink: 0;\n gap: var(--space-4, 16px);\n align-items: center;\n}\n\n/* ==========================================================================\n Theme Variants\n ========================================================================== */\n\n/* INKWELL THEME (Default) */\n:host(.theme-inkwell),\n.client-carousel.theme-inkwell {\n background-color: var(--colour-brand-inkwell, #14343B);\n --af-carousel-logo-well-bg: var(--colour-background-level1-dark, #203e45);\n --af-carousel-logo-color: white;\n --af-carousel-logo-filter: brightness(0) invert(1);\n}\n\n/* WHITE THEME */\n:host(.theme-white),\n.client-carousel.theme-white {\n background-color: var(--colour-brand-white, #FFFFFF);\n --af-carousel-logo-well-bg: var(--colour-background-level1, #e8eeed);\n --af-carousel-logo-color: var(--colour-brand-inkwell, #14343B);\n --af-carousel-logo-filter: none;\n}\n\n/* MIST-GREEN THEME */\n:host(.theme-mist-green),\n.client-carousel.theme-mist-green {\n background-color: var(--colour-brand-mist-green, #C6D5D1);\n --af-carousel-logo-well-bg: var(--colour-mistgreen-300, #dde6e3);\n --af-carousel-logo-color: var(--colour-brand-inkwell, #14343B);\n --af-carousel-logo-filter: none;\n}\n\n/* SOFT-CLAY THEME */\n:host(.theme-soft-clay),\n.client-carousel.theme-soft-clay {\n background-color: var(--colour-softclay-400, #c0ab8d);\n --af-carousel-logo-well-bg: var(--colour-softclay-200, #d5c5b0);\n --af-carousel-logo-color: var(--colour-brand-inkwell, #14343B);\n --af-carousel-logo-filter: none;\n}\n\n/* WHITE-IVORY THEME */\n:host(.theme-white-ivory),\n.client-carousel.theme-white-ivory {\n background-color: var(--colour-brand-ivory-paper, #fff9ee);\n --af-carousel-logo-well-bg: var(--colour-softclay-100, #f2eadc);\n --af-carousel-logo-color: var(--colour-brand-inkwell, #14343B);\n --af-carousel-logo-filter: none;\n}\n\n/* ==========================================================================\n Responsive Adjustments\n ========================================================================== */\n\n/* Tablet adjustments */\n/* ≤ tablet */\n@media (max-width: 1024px) {\n .client-carousel {\n padding: 32px 0;\n }\n}\n\n/* Mobile adjustments */\n/* ≤ mobile */\n@media (max-width: 767px) {\n .client-carousel {\n padding: 24px 0;\n }\n \n .carousel-container {\n gap: var(--space-3, 12px);\n }\n \n .logo-track {\n gap: var(--space-3, 12px);\n }\n \n ::slotted(*) {\n gap: var(--space-3, 12px);\n }\n}\n","import { Component, Element, h, Host, Prop } from '@stencil/core';\n\ntype Theme = 'white' | 'inkwell' | 'mist-green' | 'soft-clay' | 'white-ivory';\ntype Mode = 'scroll' | 'static';\n\n/**\n * Full-width row of client logos, either infinite-scrolling (default)\n * or a centred static row.\n *\n * This is a section-level component that spans full width.\n * Renders one or two rows; single row matches the Webflow reference,\n * two rows is the denser variant. When `mode=\"scroll\"` (default) rows\n * animate in opposite directions; when `mode=\"static\"` rows are centred\n * and the animation is disabled.\n *\n * For headlines, use a separate TypographyLockup or Heading component\n * above this carousel.\n *\n * **Seamless loop (scroll mode only):** the CSS animation translates\n * the track from 0% to -50% (or vice versa), which only looks continuous\n * if the track holds two identical copies of the content end-to-end.\n * Shadow DOM slots can only project content once, so we clone the\n * slotted nodes in `componentDidLoad` and append the copies to the track.\n * Static mode skips the clone — nothing is animating, so duplicating\n * the logos would just render them twice.\n */\n@Component({\n tag: 'af-client-carousel',\n styleUrl: 'af-client-carousel.css',\n // Scoped (not shadow) so that cloned nodes inherit the consumer's\n // external CSS (e.g. Astro-scoped `.logo-pill` on the SiteHeader\n // carousel). Shadow DOM would seal the clones off from outer styles.\n shadow: false,\n scoped: true,\n})\nexport class AfClientCarousel {\n @Element() el!: HTMLElement;\n\n /** Theme - sets background color and provides theme context to children */\n @Prop() theme: Theme = 'inkwell';\n\n /**\n * Number of rows.\n * - `1` (default) — single row, matches the Webflow reference.\n * - `2` — two rows (scroll in opposite directions, or stacked when static).\n *\n * When `rows=\"2\"`, slot `row-1` and `row-2` independently.\n * When `rows=\"1\"`, slot the default slot (unnamed) or `row-1`.\n */\n @Prop() rows: 1 | 2 = 1;\n\n /**\n * Layout mode.\n * - `scroll` (default) — infinite animated scroll; rows fill the full\n * width and are cloned for a seamless loop.\n * - `static` — no animation, logos centred horizontally. Use when the\n * logo set is small enough to fit on screen without scrolling.\n */\n @Prop() mode: Mode = 'scroll';\n\n private row1TrackRef?: HTMLElement;\n private row2TrackRef?: HTMLElement;\n\n componentDidLoad() {\n // Static mode doesn't animate, so the clone trick isn't needed —\n // skipping it avoids rendering every logo twice.\n if (this.mode === 'static') return;\n this.duplicateTrackContent(this.row1TrackRef);\n if (Number(this.rows) === 2) {\n this.duplicateTrackContent(this.row2TrackRef);\n }\n }\n\n /**\n * Append clones of every existing track child into the track so the\n * -50% translate animation loops seamlessly. Marks clones with\n * `aria-hidden` and `data-carousel-clone` so assistive tech ignores\n * them and we can skip them when re-duplicating.\n *\n * In scoped mode, slotted content is moved into the track as regular\n * children (there's no `<slot>` element to read from), so we just\n * iterate direct children that aren't themselves prior clones.\n */\n private duplicateTrackContent(track: HTMLElement | undefined) {\n if (!track) return;\n const originals = Array.from(track.children).filter(\n (child) => !(child as HTMLElement).hasAttribute('data-carousel-clone'),\n );\n originals.forEach((el) => {\n const clone = el.cloneNode(true) as HTMLElement;\n clone.setAttribute('data-carousel-clone', '');\n clone.setAttribute('aria-hidden', 'true');\n track.appendChild(clone);\n });\n }\n\n render() {\n const rows = Number(this.rows);\n // Direction classes are left on in static mode too — the `.mode-static`\n // CSS rule overrides `animation` to `none`, so the direction is a no-op\n // visually but keeps the markup shape consistent across modes.\n return (\n <Host class={`theme-${this.theme} mode-${this.mode}`}>\n <div class={`client-carousel theme-${this.theme} rows-${rows} mode-${this.mode}`}>\n <div class=\"carousel-container\">\n <div class=\"carousel-row scroll-left\">\n <div class=\"logo-track\" ref={(el) => (this.row1TrackRef = el)}>\n <slot name=\"row-1\">\n <slot></slot>\n </slot>\n </div>\n </div>\n\n {rows === 2 && (\n <div class=\"carousel-row scroll-right\">\n <div class=\"logo-track\" ref={(el) => (this.row2TrackRef = el)}>\n <slot name=\"row-2\"></slot>\n </div>\n </div>\n )}\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { p as proxyCustomElement, H, h, c as Host } from './p-
|
|
1
|
+
import { p as proxyCustomElement, H, h, c as Host } from './p-DOgb6SUj.js';
|
|
2
2
|
|
|
3
3
|
const afContactItemCss = ".sc-af-contact-item-h{display:block}.contact-item.sc-af-contact-item{display:flex;flex-direction:column;gap:4px}.contact-item__label.sc-af-contact-item{font-family:var(--typography-primaryfont, 'NeuSans', sans-serif);font-size:14px;font-weight:600;color:var(--colour-tints-mistGreen-200, #C6D5D1);margin:0}.contact-item__value.sc-af-contact-item{font-family:var(--typography-primaryfont, 'NeuSans', sans-serif);font-size:14px;font-weight:400;color:rgba(198, 213, 209, 0.7);margin:0}";
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { p as proxyCustomElement, H, h, c as Host } from './p-
|
|
1
|
+
import { p as proxyCustomElement, H, h, c as Host } from './p-DOgb6SUj.js';
|
|
2
2
|
|
|
3
3
|
const afDividerCss = ":host{box-sizing:border-box;flex-shrink:0}:host([hidden]){display:none}:host(.divider--horizontal){display:block;width:100%;height:1px;background-color:var(--colour-tints-inkwell-100, #d4d4d4)}:host(.divider--vertical){display:inline-block;width:1px;height:100%;min-height:1em;background-color:var(--colour-tints-inkwell-100, #d4d4d4);align-self:stretch}";
|
|
4
4
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { p as proxyCustomElement, H, h, c as Host } from './p-
|
|
1
|
+
import { p as proxyCustomElement, H, h, c as Host } from './p-DOgb6SUj.js';
|
|
2
2
|
|
|
3
|
-
const afFeatureAccordionCss = ".sc-af-feature-accordion-h{display:block;width:100%}.feature-accordion.sc-af-feature-accordion{padding:0 24px;--_heading-color:var(--af-typography-heading-primary, var(--colour-brand-inkwell, #14343b));--_body-color:var(--af-typography-body-default, var(--colour-inkwell-400, #2b484f));--_border-color:var(--af-background-border-default, rgba(20, 52, 59, 0.12))
|
|
3
|
+
const afFeatureAccordionCss = ".sc-af-feature-accordion-h{display:block;width:100%}.feature-accordion.sc-af-feature-accordion{padding:0 24px;--_heading-color:var(--af-typography-heading-primary, var(--colour-brand-inkwell, #14343b));--_body-color:var(--af-typography-body-default, var(--colour-inkwell-400, #2b484f));--_border-color:var(--af-background-border-default, rgba(20, 52, 59, 0.12))}.feature-accordion__heading.sc-af-feature-accordion{font-family:var(--typography-primaryfont, 'NeuSans', sans-serif);font-weight:400;font-size:clamp(36px, 5vw, 52px);line-height:1.05;letter-spacing:-0.025em;color:var(--_heading-color);margin:0 0 56px 0}.feature-accordion__content.sc-af-feature-accordion{display:flex;gap:48px}.feature-accordion__list.sc-af-feature-accordion{display:flex;flex-direction:column;flex:1;min-width:0}.accordion-item.sc-af-feature-accordion{border-bottom:1px solid var(--_border-color)}.accordion-item.sc-af-feature-accordion:first-child{border-top:1px solid var(--_border-color)}.accordion-item__header.sc-af-feature-accordion{display:flex;align-items:center;justify-content:space-between;width:100%;padding:24px 0;background:none;border:none;cursor:pointer;text-align:left;gap:16px}.accordion-item__header.sc-af-feature-accordion:hover .accordion-item__title.sc-af-feature-accordion{color:var(--_heading-color)}.accordion-item__title.sc-af-feature-accordion{font-family:var(--typography-primaryfont, 'NeuSans', sans-serif);font-weight:500;font-size:22px;line-height:1.25;color:var(--_heading-color);margin:0;flex:1;transition:color 0.2s ease}.accordion-item.sc-af-feature-accordion:not(.accordion-item--expanded) .accordion-item__title.sc-af-feature-accordion{opacity:0.7}.accordion-item__icon.sc-af-feature-accordion{flex-shrink:0;width:24px;height:24px;color:var(--_heading-color);transition:transform 0.2s ease}.accordion-item.sc-af-feature-accordion:not(.accordion-item--expanded) .accordion-item__icon.sc-af-feature-accordion{opacity:0.5}.accordion-item__content.sc-af-feature-accordion{overflow:hidden;transition:max-height 0.3s ease, opacity 0.3s ease}.accordion-item__description.sc-af-feature-accordion{font-family:var(--typography-primaryfont, 'NeuSans', sans-serif);font-weight:400;font-size:17px;line-height:1.6;color:var(--_body-color);margin:0 0 20px 0;padding-right:40px;opacity:0.85}.accordion-item__timer-track.sc-af-feature-accordion{height:3px;background-color:var(--_border-color);border-radius:2px;margin-bottom:8px;overflow:hidden;display:flex;justify-content:flex-start}.accordion-item__timer-progress.sc-af-feature-accordion{height:100%;background-color:var(--af-accent-progress, var(--colour-softclay-600, #9e8765));border-radius:2px;transition:width 0.05s linear}.feature-accordion__image-container.sc-af-feature-accordion{display:flex;align-items:center;justify-content:center;background-color:var(--af-background-level-1, var(--colour-mistgreen-300, #dde6e3));border-radius:20px;overflow:hidden;flex:1;min-width:0}.feature-accordion__image-wrapper.sc-af-feature-accordion{display:flex;align-items:center;justify-content:center;width:100%;padding:var(--af-feature-accordion-image-pad, 40px)}.feature-accordion__image.sc-af-feature-accordion{max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain;border-radius:12px;box-shadow:0 8px 32px rgba(0, 0, 0, 0.12)}.feature-accordion__image-placeholder.sc-af-feature-accordion{width:100%;height:100%;display:flex;align-items:center;justify-content:center}@media (max-width: 1024px){.feature-accordion__content.sc-af-feature-accordion{gap:32px}.feature-accordion__heading.sc-af-feature-accordion{margin-bottom:40px}.accordion-item__title.sc-af-feature-accordion{font-size:20px}}@media (max-width: 768px){.feature-accordion__content.sc-af-feature-accordion{flex-direction:column;gap:32px}.feature-accordion__image-container.sc-af-feature-accordion{order:-1;min-height:280px;flex:none}.feature-accordion__list.sc-af-feature-accordion{flex:none}.accordion-item__title.sc-af-feature-accordion{font-size:18px}.accordion-item__description.sc-af-feature-accordion{font-size:15px;padding-right:0}}";
|
|
4
4
|
|
|
5
5
|
const AfFeatureAccordion$1 = /*@__PURE__*/ proxyCustomElement(class AfFeatureAccordion extends H {
|
|
6
6
|
constructor(registerHost) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"af-feature-accordion.js","mappings":"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","names":["AfFeatureAccordion","__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/af-feature-accordion/af-feature-accordion.css?tag=af-feature-accordion&encapsulation=scoped","src/components/af-feature-accordion/af-feature-accordion.tsx"],"sourcesContent":[":host {\n display: block;\n width: 100%;\n}\n\n.feature-accordion {\n /* Inherits theme from parent Section via CSS custom properties */\n padding: 0 24px;\n \n /* Internal custom properties that inherit from parent Section's theme */\n --_heading-color: var(--af-typography-heading-primary, var(--colour-brand-inkwell, #14343b));\n --_body-color: var(--af-typography-body-default, var(--colour-inkwell-400, #2b484f));\n --_border-color: var(--af-background-border-default, rgba(20, 52, 59, 0.12));\n --_level-1-bg: var(--af-background-level-1, var(--colour-mistgreen-300, #dde6e3));\n}\n\n.feature-accordion__heading {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-weight: 400;\n font-size: clamp(36px, 5vw, 52px);\n line-height: 1.05;\n letter-spacing: -0.025em;\n color: var(--_heading-color);\n margin: 0 0 56px 0;\n}\n\n.feature-accordion__content {\n display: flex;\n gap: 48px;\n}\n\n/* Accordion List */\n.feature-accordion__list {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n}\n\n/* Accordion Item */\n.accordion-item {\n border-bottom: 1px solid var(--_border-color);\n}\n\n.accordion-item:first-child {\n border-top: 1px solid var(--_border-color);\n}\n\n.accordion-item__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: 24px 0;\n background: none;\n border: none;\n cursor: pointer;\n text-align: left;\n gap: 16px;\n}\n\n.accordion-item__header:hover .accordion-item__title {\n color: var(--_heading-color);\n}\n\n.accordion-item__title {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-weight: 500;\n font-size: 22px;\n line-height: 1.25;\n color: var(--_heading-color);\n margin: 0;\n flex: 1;\n transition: color 0.2s ease;\n}\n\n/* Collapsed items have lighter text */\n.accordion-item:not(.accordion-item--expanded) .accordion-item__title {\n opacity: 0.7;\n}\n\n.accordion-item__icon {\n flex-shrink: 0;\n width: 24px;\n height: 24px;\n color: var(--_heading-color);\n transition: transform 0.2s ease;\n}\n\n.accordion-item:not(.accordion-item--expanded) .accordion-item__icon {\n opacity: 0.5;\n}\n\n.accordion-item__content {\n overflow: hidden;\n transition: max-height 0.3s ease, opacity 0.3s ease;\n}\n\n.accordion-item__description {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-weight: 400;\n font-size: 17px;\n line-height: 1.6;\n color: var(--_body-color);\n margin: 0 0 20px 0;\n padding-right: 40px;\n opacity: 0.85;\n}\n\n/* Timer track - the progress bar at the bottom of expanded items */\n.accordion-item__timer-track {\n height: 3px;\n background-color: var(--_border-color);\n border-radius: 2px;\n margin-bottom: 8px;\n overflow: hidden;\n display: flex;\n justify-content: flex-start;\n}\n\n.accordion-item__timer-progress {\n height: 100%;\n background-color: var(--colour-brand-ice, #a6fffb);\n border-radius: 2px;\n transition: width 0.05s linear;\n}\n\n/* Image Container - stretches full height to align with accordion */\n.feature-accordion__image-container {\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--_level-1-bg);\n border-radius: 20px;\n overflow: hidden;\n flex: 1;\n min-width: 0;\n}\n\n.feature-accordion__image-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n padding: 32px;\n}\n\n.feature-accordion__image {\n max-width: 100%;\n max-height: 100%;\n width: auto;\n height: auto;\n object-fit: contain;\n border-radius: 12px;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);\n}\n\n.feature-accordion__image-placeholder {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n/* Tablet */\n/* ≤ tablet */\n@media (max-width: 1024px) {\n .feature-accordion__content {\n gap: 32px;\n }\n\n .feature-accordion__heading {\n margin-bottom: 40px;\n }\n\n .accordion-item__title {\n font-size: 20px;\n }\n}\n\n/* Mobile */\n/* mobile-only */\n@media (max-width: 768px) {\n .feature-accordion__content {\n flex-direction: column;\n gap: 32px;\n }\n\n .feature-accordion__image-container {\n order: -1;\n min-height: 280px;\n flex: none;\n }\n\n .feature-accordion__list {\n flex: none;\n }\n\n .accordion-item__title {\n font-size: 18px;\n }\n\n .accordion-item__description {\n font-size: 15px;\n padding-right: 0;\n }\n}\n","import { Component, h, Host, Prop, State, Element, Watch } from '@stencil/core';\n\nexport interface FeatureAccordionItem {\n title: string;\n description: string;\n imageUrl?: string;\n imageAlt?: string;\n}\n\n/**\n * Feature accordion component with expandable items and accompanying image.\n * Used for showcasing product features with visual examples.\n * Features auto-cycling through items with a progress timer.\n * \n * **Must be wrapped in a Section component** to inherit theme styling.\n * The component automatically adapts colors based on the parent Section's theme.\n * \n * @example\n * ```tsx\n * <Section theme=\"inkwell\">\n * <FeatureAccordion heading=\"Features\" items={...} />\n * </Section>\n * ```\n */\n@Component({\n tag: 'af-feature-accordion',\n styleUrl: 'af-feature-accordion.css',\n shadow: false,\n scoped: true,\n})\nexport class AfFeatureAccordion {\n @Element() el!: HTMLElement;\n\n /** Section heading */\n @Prop() heading: string = 'Give AI agents your paperwork';\n\n /** JSON string of accordion items */\n @Prop() items: string = '[]';\n\n /** Auto-cycle interval in milliseconds (default: 6000ms = 6 seconds) */\n @Prop() cycleInterval: number = 6000;\n\n /** Whether auto-cycling is enabled */\n @Prop() autoCycle: boolean = true;\n\n /** Currently expanded item index */\n @State() expandedIndex: number = 0;\n\n /** Progress of current timer (0-100) */\n @State() timerProgress: number = 100;\n\n private progressTimer: number | null = null;\n private progressStartTime: number = 0;\n\n componentDidLoad() {\n if (this.autoCycle) {\n this.startCycling();\n }\n }\n\n disconnectedCallback() {\n this.stopCycling();\n }\n\n @Watch('autoCycle')\n handleAutoCycleChange(newValue: boolean) {\n if (newValue) {\n this.startCycling();\n } else {\n this.stopCycling();\n }\n }\n\n private getItems(): FeatureAccordionItem[] {\n try {\n return JSON.parse(this.items);\n } catch {\n return [];\n }\n }\n\n private startCycling() {\n this.stopCycling();\n this.progressStartTime = Date.now();\n this.timerProgress = 100;\n \n // Progress animation frame\n const updateProgress = () => {\n const elapsed = Date.now() - this.progressStartTime;\n const remaining = this.cycleInterval - elapsed;\n \n if (remaining <= 0) {\n this.moveToNextItem();\n } else {\n this.timerProgress = (remaining / this.cycleInterval) * 100;\n this.progressTimer = requestAnimationFrame(updateProgress);\n }\n };\n \n this.progressTimer = requestAnimationFrame(updateProgress);\n }\n\n private stopCycling() {\n if (this.progressTimer) {\n cancelAnimationFrame(this.progressTimer);\n this.progressTimer = null;\n }\n }\n\n private moveToNextItem() {\n const items = this.getItems();\n if (items.length === 0) return;\n \n this.expandedIndex = (this.expandedIndex + 1) % items.length;\n // Restart the cycling timer for the new item\n this.startCycling();\n }\n\n private handleItemClick(index: number) {\n // Reset timer when user clicks\n this.expandedIndex = index;\n // Restart the cycling timer for the clicked item\n if (this.autoCycle) {\n this.startCycling();\n }\n }\n\n render() {\n const items = this.getItems();\n const currentItem = items[this.expandedIndex];\n\n return (\n <Host>\n <div class=\"feature-accordion\">\n <div class=\"feature-accordion__container\">\n <h2 class=\"feature-accordion__heading\">{this.heading}</h2>\n \n <div class=\"feature-accordion__content\">\n {/* Left side - Accordion */}\n <div class=\"feature-accordion__list\">\n {items.map((item, index) => (\n <div \n class={{\n 'accordion-item': true,\n 'accordion-item--expanded': this.expandedIndex === index\n }}\n key={index}\n >\n <button \n class=\"accordion-item__header\"\n onClick={() => this.handleItemClick(index)}\n aria-expanded={this.expandedIndex === index ? 'true' : 'false'}\n >\n <h4 class=\"accordion-item__title\">{item.title}</h4>\n <span class=\"accordion-item__icon\">\n {this.expandedIndex === index ? (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5 12H19\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n </svg>\n ) : (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 5V19M5 12H19\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n </svg>\n )}\n </span>\n </button>\n <div \n class=\"accordion-item__content\"\n style={{ \n maxHeight: this.expandedIndex === index ? '200px' : '0',\n opacity: this.expandedIndex === index ? '1' : '0'\n }}\n >\n <p class=\"accordion-item__description\">{item.description}</p>\n {this.expandedIndex === index && this.autoCycle && (\n <div class=\"accordion-item__timer-track\">\n <div \n class=\"accordion-item__timer-progress\"\n style={{ width: `${this.timerProgress}%` }}\n ></div>\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n\n {/* Right side - Image */}\n <div class=\"feature-accordion__image-container\">\n <div class=\"feature-accordion__image-wrapper\">\n {currentItem?.imageUrl && (\n <img \n src={currentItem.imageUrl} \n alt={currentItem.imageAlt || currentItem.title}\n class=\"feature-accordion__image\"\n />\n )}\n {!currentItem?.imageUrl && (\n <div class=\"feature-accordion__image-placeholder\">\n <slot name=\"image\"></slot>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
1
|
+
{"file":"af-feature-accordion.js","mappings":"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","names":["AfFeatureAccordion","__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/af-feature-accordion/af-feature-accordion.css?tag=af-feature-accordion&encapsulation=scoped","src/components/af-feature-accordion/af-feature-accordion.tsx"],"sourcesContent":["/*\n * af-feature-accordion\n * ---------------------------------------------------------------------------\n * Themable CSS custom properties (safe to override from consumers):\n *\n * --af-accent-progress Colour of the per-item timer/progress bar.\n * Defaults to --colour-softclay-600 (brand\n * soft-clay). Override to retheme the accent.\n * --af-feature-accordion-image-pad\n * Padding around the accompanying image\n * inside its rounded container. Defaults to\n * 40px — tune for tighter or looser rhythm.\n *\n * The component also inherits the following theme tokens from its parent\n * <af-section> (or any ancestor setting them):\n *\n * --af-typography-heading-primary heading colour\n * --af-typography-body-default body colour\n * --af-background-border-default rule/divider colour\n * --af-background-level-1 image-container background\n */\n\n:host {\n display: block;\n width: 100%;\n}\n\n.feature-accordion {\n /* Inherits theme from parent Section via CSS custom properties */\n padding: 0 24px;\n\n /* Internal custom properties that inherit from parent Section's theme */\n --_heading-color: var(--af-typography-heading-primary, var(--colour-brand-inkwell, #14343b));\n --_body-color: var(--af-typography-body-default, var(--colour-inkwell-400, #2b484f));\n --_border-color: var(--af-background-border-default, rgba(20, 52, 59, 0.12));\n}\n\n.feature-accordion__heading {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-weight: 400;\n font-size: clamp(36px, 5vw, 52px);\n line-height: 1.05;\n letter-spacing: -0.025em;\n color: var(--_heading-color);\n margin: 0 0 56px 0;\n}\n\n.feature-accordion__content {\n display: flex;\n gap: 48px;\n}\n\n/* Accordion List */\n.feature-accordion__list {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n}\n\n/* Accordion Item */\n.accordion-item {\n border-bottom: 1px solid var(--_border-color);\n}\n\n.accordion-item:first-child {\n border-top: 1px solid var(--_border-color);\n}\n\n.accordion-item__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: 24px 0;\n background: none;\n border: none;\n cursor: pointer;\n text-align: left;\n gap: 16px;\n}\n\n.accordion-item__header:hover .accordion-item__title {\n color: var(--_heading-color);\n}\n\n.accordion-item__title {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-weight: 500;\n font-size: 22px;\n line-height: 1.25;\n color: var(--_heading-color);\n margin: 0;\n flex: 1;\n transition: color 0.2s ease;\n}\n\n/* Collapsed items have lighter text */\n.accordion-item:not(.accordion-item--expanded) .accordion-item__title {\n opacity: 0.7;\n}\n\n.accordion-item__icon {\n flex-shrink: 0;\n width: 24px;\n height: 24px;\n color: var(--_heading-color);\n transition: transform 0.2s ease;\n}\n\n.accordion-item:not(.accordion-item--expanded) .accordion-item__icon {\n opacity: 0.5;\n}\n\n.accordion-item__content {\n overflow: hidden;\n transition: max-height 0.3s ease, opacity 0.3s ease;\n}\n\n.accordion-item__description {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-weight: 400;\n font-size: 17px;\n line-height: 1.6;\n color: var(--_body-color);\n margin: 0 0 20px 0;\n padding-right: 40px;\n opacity: 0.85;\n}\n\n/* Timer track - the progress bar at the bottom of expanded items */\n.accordion-item__timer-track {\n height: 3px;\n background-color: var(--_border-color);\n border-radius: 2px;\n margin-bottom: 8px;\n overflow: hidden;\n display: flex;\n justify-content: flex-start;\n}\n\n.accordion-item__timer-progress {\n height: 100%;\n background-color: var(--af-accent-progress, var(--colour-softclay-600, #9e8765));\n border-radius: 2px;\n transition: width 0.05s linear;\n}\n\n/* Image Container - stretches full height to align with accordion */\n.feature-accordion__image-container {\n display: flex;\n align-items: center;\n justify-content: center;\n /* Flows from parent Section's theme; mist-green fallback for unthemed use */\n background-color: var(--af-background-level-1, var(--colour-mistgreen-300, #dde6e3));\n border-radius: 20px;\n overflow: hidden;\n flex: 1;\n min-width: 0;\n}\n\n.feature-accordion__image-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n padding: var(--af-feature-accordion-image-pad, 40px);\n}\n\n.feature-accordion__image {\n max-width: 100%;\n max-height: 100%;\n width: auto;\n height: auto;\n object-fit: contain;\n border-radius: 12px;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);\n}\n\n.feature-accordion__image-placeholder {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n/* Tablet */\n/* ≤ tablet */\n@media (max-width: 1024px) {\n .feature-accordion__content {\n gap: 32px;\n }\n\n .feature-accordion__heading {\n margin-bottom: 40px;\n }\n\n .accordion-item__title {\n font-size: 20px;\n }\n}\n\n/* Mobile */\n/* mobile-only */\n@media (max-width: 768px) {\n .feature-accordion__content {\n flex-direction: column;\n gap: 32px;\n }\n\n .feature-accordion__image-container {\n order: -1;\n min-height: 280px;\n flex: none;\n }\n\n .feature-accordion__list {\n flex: none;\n }\n\n .accordion-item__title {\n font-size: 18px;\n }\n\n .accordion-item__description {\n font-size: 15px;\n padding-right: 0;\n }\n}\n","import { Component, h, Host, Prop, State, Element, Watch } from '@stencil/core';\n\nexport interface FeatureAccordionItem {\n title: string;\n description: string;\n imageUrl?: string;\n imageAlt?: string;\n}\n\n/**\n * Feature accordion component with expandable items and accompanying image.\n * Used for showcasing product features with visual examples.\n * Features auto-cycling through items with a progress timer.\n * \n * **Must be wrapped in a Section component** to inherit theme styling.\n * The component automatically adapts colors based on the parent Section's theme.\n * \n * @example\n * ```tsx\n * <Section theme=\"inkwell\">\n * <FeatureAccordion heading=\"Features\" items={...} />\n * </Section>\n * ```\n */\n@Component({\n tag: 'af-feature-accordion',\n styleUrl: 'af-feature-accordion.css',\n shadow: false,\n scoped: true,\n})\nexport class AfFeatureAccordion {\n @Element() el!: HTMLElement;\n\n /** Section heading */\n @Prop() heading: string = 'Give AI agents your paperwork';\n\n /** JSON string of accordion items */\n @Prop() items: string = '[]';\n\n /** Auto-cycle interval in milliseconds (default: 6000ms = 6 seconds) */\n @Prop() cycleInterval: number = 6000;\n\n /** Whether auto-cycling is enabled */\n @Prop() autoCycle: boolean = true;\n\n /** Currently expanded item index */\n @State() expandedIndex: number = 0;\n\n /** Progress of current timer (0-100) */\n @State() timerProgress: number = 100;\n\n private progressTimer: number | null = null;\n private progressStartTime: number = 0;\n\n componentDidLoad() {\n if (this.autoCycle) {\n this.startCycling();\n }\n }\n\n disconnectedCallback() {\n this.stopCycling();\n }\n\n @Watch('autoCycle')\n handleAutoCycleChange(newValue: boolean) {\n if (newValue) {\n this.startCycling();\n } else {\n this.stopCycling();\n }\n }\n\n private getItems(): FeatureAccordionItem[] {\n try {\n return JSON.parse(this.items);\n } catch {\n return [];\n }\n }\n\n private startCycling() {\n this.stopCycling();\n this.progressStartTime = Date.now();\n this.timerProgress = 100;\n \n // Progress animation frame\n const updateProgress = () => {\n const elapsed = Date.now() - this.progressStartTime;\n const remaining = this.cycleInterval - elapsed;\n \n if (remaining <= 0) {\n this.moveToNextItem();\n } else {\n this.timerProgress = (remaining / this.cycleInterval) * 100;\n this.progressTimer = requestAnimationFrame(updateProgress);\n }\n };\n \n this.progressTimer = requestAnimationFrame(updateProgress);\n }\n\n private stopCycling() {\n if (this.progressTimer) {\n cancelAnimationFrame(this.progressTimer);\n this.progressTimer = null;\n }\n }\n\n private moveToNextItem() {\n const items = this.getItems();\n if (items.length === 0) return;\n \n this.expandedIndex = (this.expandedIndex + 1) % items.length;\n // Restart the cycling timer for the new item\n this.startCycling();\n }\n\n private handleItemClick(index: number) {\n // Reset timer when user clicks\n this.expandedIndex = index;\n // Restart the cycling timer for the clicked item\n if (this.autoCycle) {\n this.startCycling();\n }\n }\n\n render() {\n const items = this.getItems();\n const currentItem = items[this.expandedIndex];\n\n return (\n <Host>\n <div class=\"feature-accordion\">\n <div class=\"feature-accordion__container\">\n <h2 class=\"feature-accordion__heading\">{this.heading}</h2>\n \n <div class=\"feature-accordion__content\">\n {/* Left side - Accordion */}\n <div class=\"feature-accordion__list\">\n {items.map((item, index) => (\n <div \n class={{\n 'accordion-item': true,\n 'accordion-item--expanded': this.expandedIndex === index\n }}\n key={index}\n >\n <button \n class=\"accordion-item__header\"\n onClick={() => this.handleItemClick(index)}\n aria-expanded={this.expandedIndex === index ? 'true' : 'false'}\n >\n <h4 class=\"accordion-item__title\">{item.title}</h4>\n <span class=\"accordion-item__icon\">\n {this.expandedIndex === index ? (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5 12H19\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n </svg>\n ) : (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 5V19M5 12H19\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n </svg>\n )}\n </span>\n </button>\n <div \n class=\"accordion-item__content\"\n style={{ \n maxHeight: this.expandedIndex === index ? '200px' : '0',\n opacity: this.expandedIndex === index ? '1' : '0'\n }}\n >\n <p class=\"accordion-item__description\">{item.description}</p>\n {this.expandedIndex === index && this.autoCycle && (\n <div class=\"accordion-item__timer-track\">\n <div \n class=\"accordion-item__timer-progress\"\n style={{ width: `${this.timerProgress}%` }}\n ></div>\n </div>\n )}\n </div>\n </div>\n ))}\n </div>\n\n {/* Right side - Image */}\n <div class=\"feature-accordion__image-container\">\n <div class=\"feature-accordion__image-wrapper\">\n {currentItem?.imageUrl && (\n <img \n src={currentItem.imageUrl} \n alt={currentItem.imageAlt || currentItem.title}\n class=\"feature-accordion__image\"\n />\n )}\n {!currentItem?.imageUrl && (\n <div class=\"feature-accordion__image-placeholder\">\n <slot name=\"image\"></slot>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { p as proxyCustomElement, H, h, c as Host } from './p-
|
|
2
|
-
import { d as defineCustomElement$2 } from './p-
|
|
1
|
+
import { p as proxyCustomElement, H, h, c as Host } from './p-DOgb6SUj.js';
|
|
2
|
+
import { d as defineCustomElement$2 } from './p-DO9J0XTo.js';
|
|
3
3
|
|
|
4
4
|
const afFeatureGridCss = ".sc-af-feature-grid-h{display:block;width:100%}.feature-grid.sc-af-feature-grid{display:flex;flex-direction:column;align-items:center;width:100%}.feature-grid__cards.sc-af-feature-grid{display:grid;grid-template-columns:repeat(4, 1fr);gap:24px;width:100%;max-width:1440px;align-items:stretch}.feature-grid__cards.sc-af-feature-grid>af-feature-card.sc-af-feature-grid{height:100%}.feature-grid--cols-3.sc-af-feature-grid .feature-grid__cards.sc-af-feature-grid{grid-template-columns:repeat(3, 1fr)}.feature-grid--cols-2.sc-af-feature-grid .feature-grid__cards.sc-af-feature-grid{grid-template-columns:repeat(2, 1fr)}.feature-grid--cols-1.sc-af-feature-grid .feature-grid__cards.sc-af-feature-grid{grid-template-columns:1fr}.feature-grid__progress.sc-af-feature-grid{display:none;width:100%;margin-top:16px}@media (max-width: 767px){.feature-grid__cards.sc-af-feature-grid{gap:16px}.feature-grid--mobile-list.sc-af-feature-grid .feature-grid__cards.sc-af-feature-grid{grid-template-columns:1fr;gap:20px}.feature-grid--mobile-grid.sc-af-feature-grid .feature-grid__cards.sc-af-feature-grid{grid-template-columns:repeat(2, 1fr)}.feature-grid--mobile-scroll.sc-af-feature-grid .feature-grid__cards.sc-af-feature-grid{display:flex;flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;gap:16px;padding-bottom:8px;scrollbar-width:none;-ms-overflow-style:none}.feature-grid--mobile-scroll.sc-af-feature-grid .feature-grid__cards.sc-af-feature-grid::-webkit-scrollbar{display:none}.feature-grid--mobile-scroll.sc-af-feature-grid .feature-grid__cards.sc-af-feature-grid>af-feature-card.sc-af-feature-grid{flex:0 0 280px;scroll-snap-align:start}.feature-grid--mobile-scroll.sc-af-feature-grid .feature-grid__progress.sc-af-feature-grid{display:block}}@media (min-width: 768px) and (max-width: 1023px){.feature-grid__cards.sc-af-feature-grid{grid-template-columns:repeat(2, 1fr)}.feature-grid--cols-3.sc-af-feature-grid .feature-grid__cards.sc-af-feature-grid,.feature-grid--cols-4.sc-af-feature-grid .feature-grid__cards.sc-af-feature-grid{grid-template-columns:repeat(2, 1fr)}}";
|
|
5
5
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { p as proxyCustomElement, H, h, c as Host } from './p-
|
|
1
|
+
import { p as proxyCustomElement, H, h, c as Host } from './p-DOgb6SUj.js';
|
|
2
2
|
|
|
3
3
|
const afFooterColumnCss = ".sc-af-footer-column-h{display:block}.footer-column.sc-af-footer-column{display:flex;flex-direction:column;gap:16px}.footer-column__heading.sc-af-footer-column{font-family:var(--typography-primaryfont, 'NeuSans', sans-serif);font-size:14px;font-weight:600;color:var(--colour-tints-mistGreen-200, #C6D5D1);margin:0;text-transform:none}.footer-column__list.sc-af-footer-column{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}.footer-column__list.sc-af-footer-column-s>li,.footer-column__list .sc-af-footer-column-s>li{margin:0}";
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { p as proxyCustomElement, H, h, c as Host } from './p-
|
|
1
|
+
import { p as proxyCustomElement, H, h, c as Host } from './p-DOgb6SUj.js';
|
|
2
2
|
|
|
3
3
|
const afFooterLinkCss = ".sc-af-footer-link-h{display:contents}li.sc-af-footer-link{margin:0;list-style:none}.footer-link.sc-af-footer-link{font-family:var(--typography-primaryfont, 'NeuSans', sans-serif);font-size:14px;font-weight:400;color:rgba(198, 213, 209, 0.7);text-decoration:none;transition:color 0.2s ease;display:inline-flex;align-items:center;gap:6px}.footer-link.sc-af-footer-link:hover{color:var(--colour-tints-mistGreen-200, #C6D5D1)}.footer-link__external-icon.sc-af-footer-link{opacity:0.7;flex-shrink:0}";
|
|
4
4
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { p as proxyCustomElement, H, h, c as Host } from './p-
|
|
1
|
+
import { p as proxyCustomElement, H, h, c as Host } from './p-DOgb6SUj.js';
|
|
2
2
|
|
|
3
|
-
const afFooterCss = ".sc-af-footer-h{display:block}.footer.sc-af-footer{background-color:var(--colour-brand-inkwell, #14343b);color:var(--colour-tints-mistGreen-200, #C6D5D1);padding:120px 0 0}.footer__container.sc-af-footer{max-width:1280px;margin:0 auto;padding:0 24px}.footer__top.sc-af-footer{display:grid;grid-template-columns:380px 1fr;gap:48px;padding-bottom:48px}.footer__brand.sc-af-footer{display:flex;flex-direction:column;gap:16px}.footer__brand-card.sc-af-footer{background-color:rgba(198, 213, 209, 0.08);border-radius:16px;padding:32px}.footer__logo.sc-af-footer{margin-bottom:24px}.footer__logo.sc-af-footer svg.sc-af-footer,.footer__logo.sc-af-footer img.sc-af-footer{height:32px;width:auto}.footer__social.sc-af-footer{display:flex;gap:12px}.footer__social-link.sc-af-footer{display:flex;align-items:center;justify-content:center;width:48px;height:48px;border:1px solid rgba(198, 213, 209, 0.3);border-radius:50%;color:var(--colour-tints-mistGreen-200, #C6D5D1);transition:all 0.2s ease}.footer__social-link.sc-af-footer:hover{background-color:rgba(198, 213, 209, 0.1);border-color:rgba(198, 213, 209, 0.5)}.footer__contact-card.sc-af-footer{background-color:rgba(198, 213, 209, 0.08);border-radius:16px;padding:24px 32px;display:flex;flex-direction:column;gap:20px}.footer__contact-item.sc-af-footer{display:flex;flex-direction:column;gap:4px}.footer__contact-label.sc-af-footer{font-family:var(--typography-primaryfont, 'NeuSans', sans-serif);font-size:14px;font-weight:600;color:var(--colour-tints-mistGreen-200, #C6D5D1);margin:0}.footer__contact-value.sc-af-footer{font-family:var(--typography-primaryfont, 'NeuSans', sans-serif);font-size:14px;font-weight:400;color:rgba(198, 213, 209, 0.7);margin:0}.footer__nav.sc-af-footer{display:flex;flex-direction:column;justify-content:space-between}.footer__nav-columns.sc-af-footer{display:grid;grid-template-columns:repeat(4, 1fr);gap:32px}.footer__nav-column.sc-af-footer{display:flex;flex-direction:column;gap:16px}.footer__nav-heading.sc-af-footer{font-family:var(--typography-primaryfont, 'NeuSans', sans-serif);font-size:14px;font-weight:600;color:var(--colour-tints-mistGreen-200, #C6D5D1);margin:0;text-transform:none}.footer__nav-list.sc-af-footer{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}.footer__nav-list.sc-af-footer li.sc-af-footer{margin:0}.footer__nav-list.sc-af-footer a.sc-af-footer{font-family:var(--typography-primaryfont, 'NeuSans', sans-serif);font-size:14px;font-weight:400;color:rgba(198, 213, 209, 0.7);text-decoration:none;transition:color 0.2s ease;display:inline-flex;align-items:center;gap:6px}.footer__nav-list.sc-af-footer a.sc-af-footer:hover{color:var(--colour-tints-mistGreen-200, #C6D5D1)}.footer__external-icon.sc-af-footer{opacity:0.7;flex-shrink:0}.footer__status.sc-af-footer{display:flex;align-items:center;gap:8px;margin-top:32px;padding-top:24px;border-top:1px solid rgba(198, 213, 209, 0.1)}.footer__status-dot.sc-af-footer{width:10px;height:10px;border-radius:50%;flex-shrink:0}.footer__status-dot--operational.sc-af-footer{background-color
|
|
3
|
+
const afFooterCss = ".sc-af-footer-h{display:block}.footer.sc-af-footer{background-color:var(--colour-brand-inkwell, #14343b);color:var(--colour-tints-mistGreen-200, #C6D5D1);padding:120px 0 0}.footer__container.sc-af-footer{max-width:1280px;margin:0 auto;padding:0 24px}.footer__top.sc-af-footer{display:grid;grid-template-columns:380px 1fr;gap:48px;padding-bottom:48px}.footer__brand.sc-af-footer{display:flex;flex-direction:column;gap:16px}.footer__brand-card.sc-af-footer{background-color:rgba(198, 213, 209, 0.08);border-radius:16px;padding:32px}.footer__logo.sc-af-footer{margin-bottom:24px}.footer__logo.sc-af-footer svg.sc-af-footer,.footer__logo.sc-af-footer img.sc-af-footer{height:32px;width:auto}.footer__social.sc-af-footer{display:flex;gap:12px}.footer__social-link.sc-af-footer{display:flex;align-items:center;justify-content:center;width:48px;height:48px;border:1px solid rgba(198, 213, 209, 0.3);border-radius:50%;color:var(--colour-tints-mistGreen-200, #C6D5D1);transition:all 0.2s ease}.footer__social-link.sc-af-footer:hover{background-color:rgba(198, 213, 209, 0.1);border-color:rgba(198, 213, 209, 0.5)}.footer__contact-card.sc-af-footer{background-color:rgba(198, 213, 209, 0.08);border-radius:16px;padding:24px 32px;display:flex;flex-direction:column;gap:20px}.footer__contact-item.sc-af-footer{display:flex;flex-direction:column;gap:4px}.footer__contact-label.sc-af-footer{font-family:var(--typography-primaryfont, 'NeuSans', sans-serif);font-size:14px;font-weight:600;color:var(--colour-tints-mistGreen-200, #C6D5D1);margin:0}.footer__contact-value.sc-af-footer{font-family:var(--typography-primaryfont, 'NeuSans', sans-serif);font-size:14px;font-weight:400;color:rgba(198, 213, 209, 0.7);margin:0}.footer__nav.sc-af-footer{display:flex;flex-direction:column;justify-content:space-between}.footer__nav-columns.sc-af-footer{display:grid;grid-template-columns:repeat(4, 1fr);gap:32px}.footer__nav-column.sc-af-footer{display:flex;flex-direction:column;gap:16px}.footer__nav-heading.sc-af-footer{font-family:var(--typography-primaryfont, 'NeuSans', sans-serif);font-size:14px;font-weight:600;color:var(--colour-tints-mistGreen-200, #C6D5D1);margin:0;text-transform:none}.footer__nav-list.sc-af-footer{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}.footer__nav-list.sc-af-footer li.sc-af-footer{margin:0}.footer__nav-list.sc-af-footer a.sc-af-footer{font-family:var(--typography-primaryfont, 'NeuSans', sans-serif);font-size:14px;font-weight:400;color:rgba(198, 213, 209, 0.7);text-decoration:none;transition:color 0.2s ease;display:inline-flex;align-items:center;gap:6px}.footer__nav-list.sc-af-footer a.sc-af-footer:hover{color:var(--colour-tints-mistGreen-200, #C6D5D1)}.footer__external-icon.sc-af-footer{opacity:0.7;flex-shrink:0}.footer__status.sc-af-footer{display:flex;align-items:center;gap:8px;margin-top:32px;padding-top:24px;border-top:1px solid rgba(198, 213, 209, 0.1)}.footer__status-dot.sc-af-footer{width:10px;height:10px;border-radius:50%;flex-shrink:0}.footer__status-dot--operational.sc-af-footer{background-color:var(--status-ok, #3E8F6E)}.footer__status-dot--issue.sc-af-footer{background-color:var(--status-issue, #B94A3B)}.footer__status-text.sc-af-footer{font-family:var(--typography-primaryfont, 'NeuSans', sans-serif);font-size:14px;color:rgba(198, 213, 209, 0.7)}.footer__status-link.sc-af-footer{font-family:var(--typography-primaryfont, 'NeuSans', sans-serif);font-size:14px;color:var(--colour-tints-mistGreen-200, #C6D5D1);text-decoration:underline;text-underline-offset:2px;margin-left:8px}.footer__status-link.sc-af-footer:hover{text-decoration:none}.footer__bottom.sc-af-footer{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:24px;padding:24px 0;border-top:1px solid rgba(198, 213, 209, 0.1);background-color:rgba(198, 213, 209, 0.05);margin:0 -24px;padding-left:calc(24px + env(safe-area-inset-left));padding-right:calc(24px + env(safe-area-inset-right));padding-bottom:max(24px, env(safe-area-inset-bottom))}.footer__copyright.sc-af-footer{font-family:var(--typography-primaryfont, 'NeuSans', sans-serif);font-size:14px;color:rgba(198, 213, 209, 0.7);margin:0}.footer__legal.sc-af-footer{display:flex;gap:24px}.footer__legal.sc-af-footer a.sc-af-footer{font-family:var(--typography-primaryfont, 'NeuSans', sans-serif);font-size:14px;color:rgba(198, 213, 209, 0.7);text-decoration:underline;text-underline-offset:2px}.footer__legal.sc-af-footer a.sc-af-footer:hover{color:var(--colour-tints-mistGreen-200, #C6D5D1);text-decoration:none}.footer__badges.sc-af-footer{display:flex;gap:16px;align-items:center}.footer__badge.sc-af-footer{width:48px;height:48px;display:flex;align-items:center;justify-content:center}.footer__badge.sc-af-footer svg.sc-af-footer{width:100%;height:100%}@media (max-width: 1024px){.footer__top.sc-af-footer{grid-template-columns:1fr;gap:48px}.footer__brand.sc-af-footer{flex-direction:row;gap:16px}.footer__brand-card.sc-af-footer,.footer__contact-card.sc-af-footer{flex:1}}@media (max-width: 768px){.footer.sc-af-footer{padding:48px 0 0}.footer__top.sc-af-footer{gap:32px}.footer__brand.sc-af-footer{flex-direction:column}.footer__nav-columns.sc-af-footer{grid-template-columns:repeat(2, 1fr);gap:32px}.footer__bottom.sc-af-footer{flex-direction:column;align-items:flex-start;gap:16px}.footer__legal.sc-af-footer{flex-wrap:wrap;gap:16px}}@media (max-width: 480px){.footer__container.sc-af-footer{padding:0 16px}.footer__brand-card.sc-af-footer,.footer__contact-card.sc-af-footer{padding:24px}.footer__nav-columns.sc-af-footer{grid-template-columns:1fr;gap:24px}.footer__bottom.sc-af-footer{margin:0 -16px;padding-left:calc(16px + env(safe-area-inset-left));padding-right:calc(16px + env(safe-area-inset-right))}.footer__badges.sc-af-footer{width:100%;justify-content:flex-start}}";
|
|
4
4
|
|
|
5
5
|
const AfFooter$1 = /*@__PURE__*/ proxyCustomElement(class AfFooter extends H {
|
|
6
6
|
constructor(registerHost) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"af-footer.js","mappings":"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","names":["AfFooter","__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/af-footer/af-footer.css?tag=af-footer&encapsulation=scoped","src/components/af-footer/af-footer.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.footer {\n background-color: var(--colour-brand-inkwell, #14343b);\n color: var(--colour-tints-mistGreen-200, #C6D5D1);\n padding: 120px 0 0; /* Extra padding at top for overlapping cards */\n}\n\n.footer__container {\n max-width: 1280px;\n margin: 0 auto;\n padding: 0 24px;\n}\n\n/* Top section layout */\n.footer__top {\n display: grid;\n grid-template-columns: 380px 1fr;\n gap: 48px;\n padding-bottom: 48px;\n}\n\n/* Brand column (left side) */\n.footer__brand {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.footer__brand-card {\n background-color: rgba(198, 213, 209, 0.08);\n border-radius: 16px;\n padding: 32px;\n}\n\n.footer__logo {\n margin-bottom: 24px;\n}\n\n.footer__logo svg,\n.footer__logo img {\n height: 32px;\n width: auto;\n}\n\n.footer__social {\n display: flex;\n gap: 12px;\n}\n\n.footer__social-link {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n border: 1px solid rgba(198, 213, 209, 0.3);\n border-radius: 50%;\n color: var(--colour-tints-mistGreen-200, #C6D5D1);\n transition: all 0.2s ease;\n}\n\n.footer__social-link:hover {\n background-color: rgba(198, 213, 209, 0.1);\n border-color: rgba(198, 213, 209, 0.5);\n}\n\n.footer__contact-card {\n background-color: rgba(198, 213, 209, 0.08);\n border-radius: 16px;\n padding: 24px 32px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.footer__contact-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.footer__contact-label {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-size: 14px;\n font-weight: 600;\n color: var(--colour-tints-mistGreen-200, #C6D5D1);\n margin: 0;\n}\n\n.footer__contact-value {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-size: 14px;\n font-weight: 400;\n color: rgba(198, 213, 209, 0.7);\n margin: 0;\n}\n\n/* Navigation section (right side) */\n.footer__nav {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n}\n\n.footer__nav-columns {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 32px;\n}\n\n.footer__nav-column {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.footer__nav-heading {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-size: 14px;\n font-weight: 600;\n color: var(--colour-tints-mistGreen-200, #C6D5D1);\n margin: 0;\n text-transform: none;\n}\n\n.footer__nav-list {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.footer__nav-list li {\n margin: 0;\n}\n\n.footer__nav-list a {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-size: 14px;\n font-weight: 400;\n color: rgba(198, 213, 209, 0.7);\n text-decoration: none;\n transition: color 0.2s ease;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.footer__nav-list a:hover {\n color: var(--colour-tints-mistGreen-200, #C6D5D1);\n}\n\n.footer__external-icon {\n opacity: 0.7;\n flex-shrink: 0;\n}\n\n/* Status indicator */\n.footer__status {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 32px;\n padding-top: 24px;\n border-top: 1px solid rgba(198, 213, 209, 0.1);\n}\n\n.footer__status-dot {\n width: 10px;\n height: 10px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.footer__status-dot--operational {\n background-color: #22c55e;\n}\n\n.footer__status-dot--issue {\n background-color: #ef4444;\n}\n\n.footer__status-text {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-size: 14px;\n color: rgba(198, 213, 209, 0.7);\n}\n\n.footer__status-link {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-size: 14px;\n color: var(--colour-tints-mistGreen-200, #C6D5D1);\n text-decoration: underline;\n text-underline-offset: 2px;\n margin-left: 8px;\n}\n\n.footer__status-link:hover {\n text-decoration: none;\n}\n\n/* Bottom section */\n.footer__bottom {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 24px;\n padding: 24px 0;\n border-top: 1px solid rgba(198, 213, 209, 0.1);\n background-color: rgba(198, 213, 209, 0.05);\n margin: 0 -24px;\n /* Honour iOS safe-area insets so the copyright strip doesn't sit under the\n home indicator (bottom) or under landscape edge cutouts (left/right). */\n padding-left: calc(24px + env(safe-area-inset-left));\n padding-right: calc(24px + env(safe-area-inset-right));\n padding-bottom: max(24px, env(safe-area-inset-bottom));\n}\n\n.footer__copyright {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-size: 14px;\n color: rgba(198, 213, 209, 0.7);\n margin: 0;\n}\n\n.footer__legal {\n display: flex;\n gap: 24px;\n}\n\n.footer__legal a {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-size: 14px;\n color: rgba(198, 213, 209, 0.7);\n text-decoration: underline;\n text-underline-offset: 2px;\n}\n\n.footer__legal a:hover {\n color: var(--colour-tints-mistGreen-200, #C6D5D1);\n text-decoration: none;\n}\n\n.footer__badges {\n display: flex;\n gap: 16px;\n align-items: center;\n}\n\n.footer__badge {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.footer__badge svg {\n width: 100%;\n height: 100%;\n}\n\n/* Responsive styles */\n/* ≤ tablet */\n@media (max-width: 1024px) {\n .footer__top {\n grid-template-columns: 1fr;\n gap: 48px;\n }\n\n .footer__brand {\n flex-direction: row;\n gap: 16px;\n }\n\n .footer__brand-card,\n .footer__contact-card {\n flex: 1;\n }\n}\n\n/* mobile-only */\n@media (max-width: 768px) {\n .footer {\n padding: 48px 0 0;\n }\n\n .footer__top {\n gap: 32px;\n }\n\n .footer__brand {\n flex-direction: column;\n }\n\n .footer__nav-columns {\n grid-template-columns: repeat(2, 1fr);\n gap: 32px;\n }\n\n .footer__bottom {\n flex-direction: column;\n align-items: flex-start;\n gap: 16px;\n }\n\n .footer__legal {\n flex-wrap: wrap;\n gap: 16px;\n }\n}\n\n/* ≤ small */\n@media (max-width: 480px) {\n .footer__container {\n padding: 0 16px;\n }\n\n .footer__brand-card,\n .footer__contact-card {\n padding: 24px;\n }\n\n .footer__nav-columns {\n grid-template-columns: 1fr;\n gap: 24px;\n }\n\n .footer__bottom {\n margin: 0 -16px;\n padding-left: calc(16px + env(safe-area-inset-left));\n padding-right: calc(16px + env(safe-area-inset-right));\n /* padding-bottom inherits from base rule with max(24px, safe-area-inset-bottom) */\n }\n\n .footer__badges {\n width: 100%;\n justify-content: flex-start;\n }\n}\n\n","import { Component, h, Host, Prop } from '@stencil/core';\n\n/**\n * Footer component for marketing pages\n * Provides a flexible, slot-based layout for footer content\n * All content is passed via slots - no hardcoded links or content\n */\n@Component({\n tag: 'af-footer',\n styleUrl: 'af-footer.css',\n shadow: false,\n scoped: true,\n})\nexport class AfFooter {\n /** Copyright text (e.g., \"© 2025 Company Name. All rights reserved.\") */\n @Prop() copyrightText: string = '';\n\n /** Status message text */\n @Prop() statusText: string = '';\n\n /** Status page URL */\n @Prop() statusUrl: string = '';\n\n /** Whether systems are operational (shows green/red indicator) */\n @Prop() systemsOperational: boolean = true;\n\n /** Whether to show the status indicator */\n @Prop() showStatus: boolean = true;\n\n render() {\n return (\n <Host>\n <footer class=\"footer\">\n <div class=\"footer__container\">\n {/* Top section */}\n <div class=\"footer__top\">\n {/* Left column - Brand area */}\n <div class=\"footer__brand\">\n <div class=\"footer__brand-card\">\n <div class=\"footer__logo\">\n <slot name=\"logo\"></slot>\n </div>\n <div class=\"footer__social\">\n <slot name=\"social\"></slot>\n </div>\n </div>\n\n <div class=\"footer__contact-card\">\n <slot name=\"contact\"></slot>\n </div>\n </div>\n\n {/* Right section - Navigation columns */}\n <div class=\"footer__nav\">\n <div class=\"footer__nav-columns\">\n <slot name=\"nav\"></slot>\n </div>\n\n {/* Status indicator */}\n {this.showStatus && (\n <div class=\"footer__status\">\n <span class={`footer__status-dot ${this.systemsOperational ? 'footer__status-dot--operational' : 'footer__status-dot--issue'}`}></span>\n <span class=\"footer__status-text\">\n {this.statusText}\n </span>\n {this.statusUrl && (\n <a href={this.statusUrl} target=\"_blank\" rel=\"noopener noreferrer\" class=\"footer__status-link\">\n Learn more\n </a>\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* Bottom section */}\n <div class=\"footer__bottom\">\n {this.copyrightText && (\n <p class=\"footer__copyright\">{this.copyrightText}</p>\n )}\n \n <div class=\"footer__legal\">\n <slot name=\"legal\"></slot>\n </div>\n\n <div class=\"footer__badges\">\n <slot name=\"badges\"></slot>\n </div>\n </div>\n </div>\n </footer>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
1
|
+
{"file":"af-footer.js","mappings":"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","names":["AfFooter","__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/af-footer/af-footer.css?tag=af-footer&encapsulation=scoped","src/components/af-footer/af-footer.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.footer {\n background-color: var(--colour-brand-inkwell, #14343b);\n color: var(--colour-tints-mistGreen-200, #C6D5D1);\n padding: 120px 0 0; /* Extra padding at top for overlapping cards */\n}\n\n.footer__container {\n max-width: 1280px;\n margin: 0 auto;\n padding: 0 24px;\n}\n\n/* Top section layout */\n.footer__top {\n display: grid;\n grid-template-columns: 380px 1fr;\n gap: 48px;\n padding-bottom: 48px;\n}\n\n/* Brand column (left side) */\n.footer__brand {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.footer__brand-card {\n background-color: rgba(198, 213, 209, 0.08);\n border-radius: 16px;\n padding: 32px;\n}\n\n.footer__logo {\n margin-bottom: 24px;\n}\n\n.footer__logo svg,\n.footer__logo img {\n height: 32px;\n width: auto;\n}\n\n.footer__social {\n display: flex;\n gap: 12px;\n}\n\n.footer__social-link {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n border: 1px solid rgba(198, 213, 209, 0.3);\n border-radius: 50%;\n color: var(--colour-tints-mistGreen-200, #C6D5D1);\n transition: all 0.2s ease;\n}\n\n.footer__social-link:hover {\n background-color: rgba(198, 213, 209, 0.1);\n border-color: rgba(198, 213, 209, 0.5);\n}\n\n.footer__contact-card {\n background-color: rgba(198, 213, 209, 0.08);\n border-radius: 16px;\n padding: 24px 32px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.footer__contact-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.footer__contact-label {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-size: 14px;\n font-weight: 600;\n color: var(--colour-tints-mistGreen-200, #C6D5D1);\n margin: 0;\n}\n\n.footer__contact-value {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-size: 14px;\n font-weight: 400;\n color: rgba(198, 213, 209, 0.7);\n margin: 0;\n}\n\n/* Navigation section (right side) */\n.footer__nav {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n}\n\n.footer__nav-columns {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 32px;\n}\n\n.footer__nav-column {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.footer__nav-heading {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-size: 14px;\n font-weight: 600;\n color: var(--colour-tints-mistGreen-200, #C6D5D1);\n margin: 0;\n text-transform: none;\n}\n\n.footer__nav-list {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.footer__nav-list li {\n margin: 0;\n}\n\n.footer__nav-list a {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-size: 14px;\n font-weight: 400;\n color: rgba(198, 213, 209, 0.7);\n text-decoration: none;\n transition: color 0.2s ease;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.footer__nav-list a:hover {\n color: var(--colour-tints-mistGreen-200, #C6D5D1);\n}\n\n.footer__external-icon {\n opacity: 0.7;\n flex-shrink: 0;\n}\n\n/* Status indicator */\n.footer__status {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 32px;\n padding-top: 24px;\n border-top: 1px solid rgba(198, 213, 209, 0.1);\n}\n\n.footer__status-dot {\n width: 10px;\n height: 10px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.footer__status-dot--operational {\n /* Affinda-palette green — tuned to sit comfortably against the inkwell\n * footer backdrop without the candy-bright Tailwind default. */\n background-color: var(--status-ok, #3E8F6E);\n}\n\n.footer__status-dot--issue {\n /* Affinda-palette red — darkened toward soft-clay to match brand tone. */\n background-color: var(--status-issue, #B94A3B);\n}\n\n.footer__status-text {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-size: 14px;\n color: rgba(198, 213, 209, 0.7);\n}\n\n.footer__status-link {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-size: 14px;\n color: var(--colour-tints-mistGreen-200, #C6D5D1);\n text-decoration: underline;\n text-underline-offset: 2px;\n margin-left: 8px;\n}\n\n.footer__status-link:hover {\n text-decoration: none;\n}\n\n/* Bottom section */\n.footer__bottom {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 24px;\n padding: 24px 0;\n border-top: 1px solid rgba(198, 213, 209, 0.1);\n background-color: rgba(198, 213, 209, 0.05);\n margin: 0 -24px;\n /* Honour iOS safe-area insets so the copyright strip doesn't sit under the\n home indicator (bottom) or under landscape edge cutouts (left/right). */\n padding-left: calc(24px + env(safe-area-inset-left));\n padding-right: calc(24px + env(safe-area-inset-right));\n padding-bottom: max(24px, env(safe-area-inset-bottom));\n}\n\n.footer__copyright {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-size: 14px;\n color: rgba(198, 213, 209, 0.7);\n margin: 0;\n}\n\n.footer__legal {\n display: flex;\n gap: 24px;\n}\n\n.footer__legal a {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-size: 14px;\n color: rgba(198, 213, 209, 0.7);\n text-decoration: underline;\n text-underline-offset: 2px;\n}\n\n.footer__legal a:hover {\n color: var(--colour-tints-mistGreen-200, #C6D5D1);\n text-decoration: none;\n}\n\n.footer__badges {\n display: flex;\n gap: 16px;\n align-items: center;\n}\n\n.footer__badge {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.footer__badge svg {\n width: 100%;\n height: 100%;\n}\n\n/* Responsive styles */\n/* ≤ tablet */\n@media (max-width: 1024px) {\n .footer__top {\n grid-template-columns: 1fr;\n gap: 48px;\n }\n\n .footer__brand {\n flex-direction: row;\n gap: 16px;\n }\n\n .footer__brand-card,\n .footer__contact-card {\n flex: 1;\n }\n}\n\n/* mobile-only */\n@media (max-width: 768px) {\n .footer {\n padding: 48px 0 0;\n }\n\n .footer__top {\n gap: 32px;\n }\n\n .footer__brand {\n flex-direction: column;\n }\n\n .footer__nav-columns {\n grid-template-columns: repeat(2, 1fr);\n gap: 32px;\n }\n\n .footer__bottom {\n flex-direction: column;\n align-items: flex-start;\n gap: 16px;\n }\n\n .footer__legal {\n flex-wrap: wrap;\n gap: 16px;\n }\n}\n\n/* ≤ small */\n@media (max-width: 480px) {\n .footer__container {\n padding: 0 16px;\n }\n\n .footer__brand-card,\n .footer__contact-card {\n padding: 24px;\n }\n\n .footer__nav-columns {\n grid-template-columns: 1fr;\n gap: 24px;\n }\n\n .footer__bottom {\n margin: 0 -16px;\n padding-left: calc(16px + env(safe-area-inset-left));\n padding-right: calc(16px + env(safe-area-inset-right));\n /* padding-bottom inherits from base rule with max(24px, safe-area-inset-bottom) */\n }\n\n .footer__badges {\n width: 100%;\n justify-content: flex-start;\n }\n}\n\n","import { Component, h, Host, Prop } from '@stencil/core';\n\n/**\n * Footer component for marketing pages\n * Provides a flexible, slot-based layout for footer content\n * All content is passed via slots - no hardcoded links or content\n */\n@Component({\n tag: 'af-footer',\n styleUrl: 'af-footer.css',\n shadow: false,\n scoped: true,\n})\nexport class AfFooter {\n /** Copyright text (e.g., \"© 2025 Company Name. All rights reserved.\") */\n @Prop() copyrightText: string = '';\n\n /** Status message text */\n @Prop() statusText: string = '';\n\n /** Status page URL */\n @Prop() statusUrl: string = '';\n\n /** Whether systems are operational (shows green/red indicator) */\n @Prop() systemsOperational: boolean = true;\n\n /** Whether to show the status indicator */\n @Prop() showStatus: boolean = true;\n\n render() {\n return (\n <Host>\n <footer class=\"footer\">\n <div class=\"footer__container\">\n {/* Top section */}\n <div class=\"footer__top\">\n {/* Left column - Brand area */}\n <div class=\"footer__brand\">\n <div class=\"footer__brand-card\">\n <div class=\"footer__logo\">\n <slot name=\"logo\"></slot>\n </div>\n <div class=\"footer__social\">\n <slot name=\"social\"></slot>\n </div>\n </div>\n\n <div class=\"footer__contact-card\">\n <slot name=\"contact\"></slot>\n </div>\n </div>\n\n {/* Right section - Navigation columns */}\n <div class=\"footer__nav\">\n <div class=\"footer__nav-columns\">\n <slot name=\"nav\"></slot>\n </div>\n\n {/* Status indicator */}\n {this.showStatus && (\n <div class=\"footer__status\">\n <span class={`footer__status-dot ${this.systemsOperational ? 'footer__status-dot--operational' : 'footer__status-dot--issue'}`}></span>\n <span class=\"footer__status-text\">\n {this.statusText}\n </span>\n {this.statusUrl && (\n <a href={this.statusUrl} target=\"_blank\" rel=\"noopener noreferrer\" class=\"footer__status-link\">\n Learn more\n </a>\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* Bottom section */}\n <div class=\"footer__bottom\">\n {this.copyrightText && (\n <p class=\"footer__copyright\">{this.copyrightText}</p>\n )}\n \n <div class=\"footer__legal\">\n <slot name=\"legal\"></slot>\n </div>\n\n <div class=\"footer__badges\">\n <slot name=\"badges\"></slot>\n </div>\n </div>\n </div>\n </footer>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { p as proxyCustomElement, H, h, c as Host } from './p-
|
|
2
|
-
import { d as defineCustomElement$2 } from './p-
|
|
1
|
+
import { p as proxyCustomElement, H, h, c as Host } from './p-DOgb6SUj.js';
|
|
2
|
+
import { d as defineCustomElement$2 } from './p-DNeNJhuM.js';
|
|
3
3
|
|
|
4
4
|
const afGridCalloutCss = ".sc-af-grid-callout-h{display:block;width:100%}.grid-callout.sc-af-grid-callout{display:flex;width:100%;gap:40px;align-items:stretch}.grid-callout__image-container.sc-af-grid-callout{flex:0 0 auto;width:45%;min-height:400px;position:relative;overflow:hidden}.grid-callout--image-left.sc-af-grid-callout .grid-callout__image-container.sc-af-grid-callout{border-radius:0 4000px 4000px 0;margin-left:calc(-1 * var(--container-padding, 80px))}.grid-callout--image-right.sc-af-grid-callout .grid-callout__image-container.sc-af-grid-callout{border-radius:4000px 0 0 4000px;margin-right:calc(-1 * var(--container-padding, 80px))}.grid-callout__image.sc-af-grid-callout{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.grid-callout__content.sc-af-grid-callout{flex:1;display:flex;flex-direction:column;gap:48px;padding:40px 0}.grid-callout--image-left.sc-af-grid-callout .grid-callout__content.sc-af-grid-callout{padding-left:40px}.grid-callout--image-right.sc-af-grid-callout .grid-callout__content.sc-af-grid-callout{padding-right:40px}.grid-callout--no-image.sc-af-grid-callout{flex-direction:column}.grid-callout--no-image.sc-af-grid-callout .grid-callout__content.sc-af-grid-callout{padding:0}.grid-callout__heading.sc-af-grid-callout{max-width:840px}.grid-callout__items.sc-af-grid-callout{display:grid;gap:40px;width:100%}.grid-callout__items--cols-2.sc-af-grid-callout{grid-template-columns:repeat(2, 1fr)}.grid-callout__items--cols-3.sc-af-grid-callout{grid-template-columns:repeat(3, 1fr)}.grid-callout__items--cols-4.sc-af-grid-callout{grid-template-columns:repeat(4, 1fr)}.grid-callout__cta.sc-af-grid-callout{display:flex;gap:12px;flex-wrap:wrap}.grid-callout__cta.sc-af-grid-callout:empty{display:none}@media (max-width: 1024px){.grid-callout.sc-af-grid-callout{gap:32px}.grid-callout__image-container.sc-af-grid-callout{width:40%}.grid-callout__content.sc-af-grid-callout{gap:40px}.grid-callout__items--cols-3.sc-af-grid-callout,.grid-callout__items--cols-4.sc-af-grid-callout{grid-template-columns:repeat(2, 1fr)}.grid-callout__items.sc-af-grid-callout{gap:32px}}@media (max-width: 768px){.grid-callout.sc-af-grid-callout{flex-direction:column;gap:32px}.grid-callout__image-container.sc-af-grid-callout{width:calc(100% + 2 * var(--container-padding, 20px));min-height:280px;margin-left:calc(-1 * var(--container-padding, 20px));margin-right:calc(-1 * var(--container-padding, 20px));border-radius:0}.grid-callout--image-left.sc-af-grid-callout .grid-callout__image-container.sc-af-grid-callout,.grid-callout--image-right.sc-af-grid-callout .grid-callout__image-container.sc-af-grid-callout{border-radius:0;margin-left:calc(-1 * var(--container-padding, 20px));margin-right:calc(-1 * var(--container-padding, 20px))}.grid-callout__content.sc-af-grid-callout{padding:0;gap:32px}.grid-callout--image-left.sc-af-grid-callout .grid-callout__content.sc-af-grid-callout,.grid-callout--image-right.sc-af-grid-callout .grid-callout__content.sc-af-grid-callout{padding-left:0;padding-right:0}.grid-callout__items.sc-af-grid-callout{grid-template-columns:1fr;gap:32px}.grid-callout__items--cols-2.sc-af-grid-callout,.grid-callout__items--cols-3.sc-af-grid-callout,.grid-callout__items--cols-4.sc-af-grid-callout{grid-template-columns:1fr}}";
|
|
5
5
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { p as proxyCustomElement, H, h, c as Host } from './p-
|
|
1
|
+
import { p as proxyCustomElement, H, h, c as Host } from './p-DOgb6SUj.js';
|
|
2
2
|
|
|
3
3
|
const afGridCss = ":host{display:block;box-sizing:border-box}:host([hidden]){display:none}.grid{display:grid;grid-template-columns:repeat(var(--grid-columns), 1fr);gap:var(--grid-gap);align-items:var(--grid-align)}@media (max-width: 1024px){.grid{grid-template-columns:repeat(var(--grid-columns-lg), 1fr)}}@media (max-width: 768px){.grid{grid-template-columns:repeat(var(--grid-columns-md), 1fr)}}@media (max-width: 480px){.grid{grid-template-columns:repeat(var(--grid-columns-sm), 1fr)}}";
|
|
4
4
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { p as proxyCustomElement, H, h, c as Host } from './p-
|
|
2
|
-
import { d as defineCustomElement$4 } from './p-
|
|
3
|
-
import { d as defineCustomElement$3 } from './p-
|
|
4
|
-
import { d as defineCustomElement$2 } from './p-
|
|
1
|
+
import { p as proxyCustomElement, H, h, c as Host } from './p-DOgb6SUj.js';
|
|
2
|
+
import { d as defineCustomElement$4 } from './p-B_OoX__z.js';
|
|
3
|
+
import { d as defineCustomElement$3 } from './p-i_6TLQJ5.js';
|
|
4
|
+
import { d as defineCustomElement$2 } from './p-DNeNJhuM.js';
|
|
5
5
|
|
|
6
6
|
const afIconTextCss = ".sc-af-icon-text-h{display:block}.icon-text.sc-af-icon-text{display:flex;width:100%}.icon-text--vertical.sc-af-icon-text{flex-direction:column;gap:24px;align-items:flex-start}.icon-text--horizontal.sc-af-icon-text{flex-direction:row;gap:20px;align-items:flex-start}.icon-text__icon.sc-af-icon-text{flex-shrink:0}.icon-text__lockup.sc-af-icon-text{flex:1;min-width:0}@media (max-width: 768px){.icon-text--vertical.sc-af-icon-text{gap:20px}.icon-text--horizontal.sc-af-icon-text{gap:16px}}";
|
|
7
7
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as AfIllustratedCard$1, d as defineCustomElement$1 } from './p-
|
|
1
|
+
import { A as AfIllustratedCard$1, d as defineCustomElement$1 } from './p-C6-JATRR.js';
|
|
2
2
|
|
|
3
3
|
const AfIllustratedCard = AfIllustratedCard$1;
|
|
4
4
|
const defineCustomElement = defineCustomElement$1;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { p as proxyCustomElement, H, h, c as Host } from './p-
|
|
2
|
-
import { d as defineCustomElement$2 } from './p
|
|
1
|
+
import { p as proxyCustomElement, H, h, c as Host } from './p-DOgb6SUj.js';
|
|
2
|
+
import { d as defineCustomElement$2 } from './p--gChEc0P.js';
|
|
3
3
|
|
|
4
|
-
const afInPageBannerCss = ".sc-af-in-page-banner-h{display:block;width:100%}.banner.sc-af-in-page-banner{position:relative;display:flex;align-items:center;gap:40px;padding-left:40px;padding-right:148px;padding-top:0;padding-bottom:0;border-radius:var(--
|
|
4
|
+
const afInPageBannerCss = ".sc-af-in-page-banner-h{display:block;width:100%}.banner.sc-af-in-page-banner{position:relative;display:flex;align-items:center;gap:40px;padding-left:40px;padding-right:148px;padding-top:0;padding-bottom:0;border-radius:var(--radius-lg, 20px);overflow:hidden;max-width:1280px;width:100%}.banner.theme-mist-green.sc-af-in-page-banner{background-color:var(--colour-brand-mist-green, #c6d5d1);--banner-heading-color:var(--colour-brand-inkwell, #14343b);--banner-body-color:var(--colour-inkwell-400, #2b484f);--af-button-primary-bg:var(--colour-brand-ice, #a6fffb);--af-button-primary-bg-hover:var(--colour-ice-600, #95e6e2);--af-button-primary-text:var(--colour-brand-inkwell, #14343b);--af-button-primary-stroke:var(--colour-brand-inkwell, #14343b);--af-button-secondary-text:var(--colour-brand-inkwell, #14343b);--af-button-secondary-stroke:var(--colour-brand-inkwell, #14343b)}.banner.theme-inkwell.sc-af-in-page-banner{background-color:var(--colour-brand-inkwell, #14343b);--banner-heading-color:var(--colour-brand-mist-green, #c6d5d1);--banner-body-color:var(--colour-inkwell-100, #d0d6d8);--af-button-primary-bg:var(--colour-brand-ice, #a6fffb);--af-button-primary-bg-hover:var(--colour-ice-600, #95e6e2);--af-button-primary-text:var(--colour-brand-inkwell, #14343b);--af-button-primary-stroke:var(--colour-brand-inkwell, #14343b);--af-button-secondary-text:var(--colour-brand-white, #ffffff);--af-button-secondary-stroke:var(--colour-brand-white, #ffffff)}.banner.theme-soft-clay.sc-af-in-page-banner{background-color:var(--colour-softclay-400, #c0ab8d);--banner-heading-color:var(--colour-brand-inkwell, #14343b);--banner-body-color:var(--colour-inkwell-450, #203e45);--af-button-primary-bg:var(--colour-brand-ice, #a6fffb);--af-button-primary-bg-hover:var(--colour-ice-600, #95e6e2);--af-button-primary-text:var(--colour-brand-inkwell, #14343b);--af-button-primary-stroke:var(--colour-brand-inkwell, #14343b);--af-button-secondary-text:var(--colour-brand-inkwell, #14343b);--af-button-secondary-stroke:var(--colour-brand-inkwell, #14343b)}.banner.theme-white-ivory.sc-af-in-page-banner{background-color:var(--colour-brand-ivory-paper, #fff9ee);--banner-heading-color:var(--colour-brand-inkwell, #14343b);--banner-body-color:var(--colour-inkwell-400, #2b484f);--af-button-primary-bg:var(--colour-brand-ice, #a6fffb);--af-button-primary-bg-hover:var(--colour-ice-600, #95e6e2);--af-button-primary-text:var(--colour-brand-inkwell, #14343b);--af-button-primary-stroke:var(--colour-brand-inkwell, #14343b);--af-button-secondary-text:var(--colour-brand-inkwell, #14343b);--af-button-secondary-stroke:var(--colour-brand-inkwell, #14343b)}.banner__wave-overlay.sc-af-in-page-banner{position:absolute;bottom:-17px;right:-156px;width:521px;height:323px;pointer-events:none;z-index:0}.banner__wave-svg.sc-af-in-page-banner{width:100%;height:100%}.banner.theme-mist-green.sc-af-in-page-banner .banner__wave-overlay.sc-af-in-page-banner{color:#d1ddda}.banner.theme-inkwell.sc-af-in-page-banner .banner__wave-overlay.sc-af-in-page-banner{color:rgba(255, 255, 255, 0.06)}.banner.theme-soft-clay.sc-af-in-page-banner .banner__wave-overlay.sc-af-in-page-banner{color:rgba(20, 52, 59, 0.06)}.banner.theme-white-ivory.sc-af-in-page-banner .banner__wave-overlay.sc-af-in-page-banner{color:rgba(20, 52, 59, 0.04)}.banner__illustration.sc-af-in-page-banner{position:relative;z-index:1;flex-shrink:0;display:flex;align-items:center;justify-content:center;width:288px;height:288px;max-width:288px;max-height:288px;aspect-ratio:1}.banner__illustration-img.sc-af-in-page-banner{width:100%;height:100%;object-fit:contain}.banner__illustration.sc-af-in-page-banner-s>*,.banner__illustration .sc-af-in-page-banner-s>*{width:100%;height:100%;object-fit:contain}.banner__content.sc-af-in-page-banner{position:relative;z-index:1;flex:1 1 0;min-width:0;min-height:0;display:flex;flex-direction:column;gap:40px;padding-top:38px;padding-bottom:38px;padding-right:0;padding-left:0}.banner__copy.sc-af-in-page-banner{display:flex;flex-direction:column;gap:16px;max-width:840px;width:100%;white-space:normal}.banner__heading.sc-af-in-page-banner{font-family:var(--typography-primaryfont, 'NeuSans', sans-serif);font-weight:var(--typography-headingweight, 500);font-size:44px;line-height:1;letter-spacing:-0.88px;color:var(--banner-heading-color, var(--colour-brand-inkwell, #14343b));margin:0;white-space:normal}.banner__description.sc-af-in-page-banner{font-family:var(--typography-primaryfont, 'NeuSans', sans-serif);font-weight:var(--typography-bodyweight, 400);font-size:18px;line-height:26px;color:var(--banner-body-color, var(--colour-inkwell-400, #2b484f));margin:0;white-space:normal}.banner__buttons.sc-af-in-page-banner{display:flex;flex-direction:row;gap:24px;align-items:flex-start}@media (max-width: 768px){.banner.sc-af-in-page-banner{flex-direction:column;align-items:stretch;padding:224px 0 0 0;border-radius:var(--radius-lg, 20px);max-width:100%;min-height:auto}.banner__wave-overlay.sc-af-in-page-banner{display:none}.banner__illustration.sc-af-in-page-banner{position:absolute;top:12px;left:auto;right:0;transform:none;width:212px;height:212px;max-width:280px;max-height:280px}.banner__content.sc-af-in-page-banner{width:100%;min-height:320px;padding:16px 28px 48px 28px;gap:40px;flex:none}.banner__copy.sc-af-in-page-banner{max-width:100%}.banner__heading.sc-af-in-page-banner{font-size:32px;letter-spacing:-0.64px}.banner__buttons.sc-af-in-page-banner{flex-direction:column;align-items:stretch;gap:12px;width:100%}.banner__buttons.sc-af-in-page-banner{--af-button-width:100%}.banner__buttons.sc-af-in-page-banner af-button.sc-af-in-page-banner{display:block;width:100%}}@media (max-width: 480px){.banner.sc-af-in-page-banner{padding-top:200px}.banner__illustration.sc-af-in-page-banner{right:0;width:180px;height:180px}.banner__content.sc-af-in-page-banner{padding:16px 20px 36px 20px;min-height:280px}.banner__heading.sc-af-in-page-banner{font-size:28px;letter-spacing:-0.56px}}";
|
|
5
5
|
|
|
6
6
|
const AfInPageBanner$1 = /*@__PURE__*/ proxyCustomElement(class AfInPageBanner extends H {
|
|
7
7
|
constructor(registerHost) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"af-in-page-banner.js","mappings":"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","names":["AfInPageBanner","__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/af-in-page-banner/af-in-page-banner.css?tag=af-in-page-banner&encapsulation=scoped","src/components/af-in-page-banner/af-in-page-banner.tsx"],"sourcesContent":[":host {\n display: block;\n width: 100%;\n}\n\n/* ==========================================================================\n Banner Container\n \n Design specs from Figma:\n - Desktop: max-width 1280px, gap 40px, left padding 40px, right padding 148px\n - Border radius: 32px (desktop), 24px (mobile)\n - Content padding vertical: 48px (margins/margin TB tight)\n ========================================================================== */\n\n.banner {\n position: relative;\n display: flex;\n align-items: center;\n gap: 40px;\n padding-left: 40px;\n padding-right: 148px;\n padding-top: 0;\n padding-bottom: 0;\n border-radius: var(--radii-card-level-1, 32px);\n overflow: hidden;\n max-width: 1280px;\n width: 100%;\n}\n\n/* ==========================================================================\n Theme Variants - Background Colors\n \n Colors from Figma:\n - mist-green: #c6d5d1 (background/base)\n - inkwell: #14343b (Colour/Brand/Inkwell)\n - soft-clay: #c0ab8d (softclay-400)\n - white-ivory: #fff9ee (background/ivory-paper)\n ========================================================================== */\n\n.banner.theme-mist-green {\n background-color: var(--colour-brand-mist-green, #c6d5d1);\n \n /* Typography */\n --banner-heading-color: var(--colour-brand-inkwell, #14343b);\n --banner-body-color: var(--colour-inkwell-400, #2b484f);\n \n /* Buttons - ice primary, inkwell secondary */\n --af-button-primary-bg: var(--colour-brand-ice, #a6fffb);\n --af-button-primary-bg-hover: var(--colour-ice-600, #95e6e2);\n --af-button-primary-text: var(--colour-brand-inkwell, #14343b);\n --af-button-primary-stroke: var(--colour-brand-inkwell, #14343b);\n --af-button-secondary-text: var(--colour-brand-inkwell, #14343b);\n --af-button-secondary-stroke: var(--colour-brand-inkwell, #14343b);\n}\n\n.banner.theme-inkwell {\n background-color: var(--colour-brand-inkwell, #14343b);\n \n /* Typography - light colors on dark background */\n --banner-heading-color: var(--colour-brand-mist-green, #c6d5d1);\n --banner-body-color: var(--colour-inkwell-100, #d0d6d8);\n \n /* Buttons - ice primary, white secondary */\n --af-button-primary-bg: var(--colour-brand-ice, #a6fffb);\n --af-button-primary-bg-hover: var(--colour-ice-600, #95e6e2);\n --af-button-primary-text: var(--colour-brand-inkwell, #14343b);\n --af-button-primary-stroke: var(--colour-brand-inkwell, #14343b);\n --af-button-secondary-text: var(--colour-brand-white, #ffffff);\n --af-button-secondary-stroke: var(--colour-brand-white, #ffffff);\n}\n\n.banner.theme-soft-clay {\n background-color: var(--colour-softclay-400, #c0ab8d);\n \n /* Typography */\n --banner-heading-color: var(--colour-brand-inkwell, #14343b);\n --banner-body-color: var(--colour-inkwell-450, #203e45);\n \n /* Buttons */\n --af-button-primary-bg: var(--colour-brand-ice, #a6fffb);\n --af-button-primary-bg-hover: var(--colour-ice-600, #95e6e2);\n --af-button-primary-text: var(--colour-brand-inkwell, #14343b);\n --af-button-primary-stroke: var(--colour-brand-inkwell, #14343b);\n --af-button-secondary-text: var(--colour-brand-inkwell, #14343b);\n --af-button-secondary-stroke: var(--colour-brand-inkwell, #14343b);\n}\n\n.banner.theme-white-ivory {\n background-color: var(--colour-brand-ivory-paper, #fff9ee);\n \n /* Typography */\n --banner-heading-color: var(--colour-brand-inkwell, #14343b);\n --banner-body-color: var(--colour-inkwell-400, #2b484f);\n \n /* Buttons */\n --af-button-primary-bg: var(--colour-brand-ice, #a6fffb);\n --af-button-primary-bg-hover: var(--colour-ice-600, #95e6e2);\n --af-button-primary-text: var(--colour-brand-inkwell, #14343b);\n --af-button-primary-stroke: var(--colour-brand-inkwell, #14343b);\n --af-button-secondary-text: var(--colour-brand-inkwell, #14343b);\n --af-button-secondary-stroke: var(--colour-brand-inkwell, #14343b);\n}\n\n/* ==========================================================================\n Decorative Wave Overlay\n \n Figma specs:\n - Position: bottom -17.41px, right -156px\n - Size: 521px x 323px\n - Fill colors per theme\n ========================================================================== */\n\n.banner__wave-overlay {\n position: absolute;\n bottom: -17px;\n right: -156px;\n width: 521px;\n height: 323px;\n pointer-events: none;\n z-index: 0;\n}\n\n.banner__wave-svg {\n width: 100%;\n height: 100%;\n}\n\n/* ==========================================================================\n Theme-specific Wave Colors\n The SVG uses currentColor, so we set color on the overlay container.\n ========================================================================== */\n\n.banner.theme-mist-green .banner__wave-overlay {\n color: #d1ddda;\n}\n\n.banner.theme-inkwell .banner__wave-overlay {\n color: rgba(255, 255, 255, 0.06);\n}\n\n.banner.theme-soft-clay .banner__wave-overlay {\n color: rgba(20, 52, 59, 0.06);\n}\n\n.banner.theme-white-ivory .banner__wave-overlay {\n color: rgba(20, 52, 59, 0.04);\n}\n\n/* ==========================================================================\n Illustration Area\n \n Figma specs:\n - Desktop: max 360px x 360px, aspect ratio preserved\n - Mobile: 212px x 212px, positioned absolute top-right\n ========================================================================== */\n\n.banner__illustration {\n position: relative;\n z-index: 1;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 288px;\n height: 288px;\n max-width: 288px;\n max-height: 288px;\n aspect-ratio: 1;\n}\n\n.banner__illustration-img {\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n\n/* Allow slotted content to fill the illustration area */\n.banner__illustration ::slotted(*) {\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n\n/* ==========================================================================\n Content Area (Typography Lockup)\n \n Figma specs:\n - Vertical padding: 48px (margins/margin TB tight)\n - Gap between copy and buttons: 40px\n - Gap between heading and description: 16px\n - Max-width for copy: 840px\n ========================================================================== */\n\n.banner__content {\n position: relative;\n z-index: 1;\n flex: 1 1 0;\n min-width: 0;\n min-height: 0;\n display: flex;\n flex-direction: column;\n gap: 40px;\n padding-top: 38px;\n padding-bottom: 38px;\n padding-right: 0;\n padding-left: 0;\n}\n\n.banner__copy {\n display: flex;\n flex-direction: column;\n gap: 16px;\n max-width: 840px;\n width: 100%;\n white-space: normal;\n}\n\n/* ==========================================================================\n Heading\n \n Figma specs:\n - Desktop: 44px, line-height 1, letter-spacing -0.88px (-2%)\n - Mobile: 32px, line-height 1, letter-spacing -0.64px (-2%)\n - Font: Typography/primaryFont (NeuSans), weight: Typography/headingWeight (500)\n ========================================================================== */\n\n.banner__heading {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-weight: var(--typography-headingweight, 500);\n font-size: 44px;\n line-height: 1;\n letter-spacing: -0.88px;\n color: var(--banner-heading-color, var(--colour-brand-inkwell, #14343b));\n margin: 0;\n white-space: normal;\n}\n\n/* ==========================================================================\n Description\n \n Figma specs:\n - Font size: 18px\n - Line height: 26px\n - Font: Typography/primaryFont, weight: Typography/bodyWeight (400)\n - Color: typography/body-default #2b484f (or theme variant)\n ========================================================================== */\n\n.banner__description {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-weight: var(--typography-bodyweight, 400);\n font-size: 18px;\n line-height: 26px;\n color: var(--banner-body-color, var(--colour-inkwell-400, #2b484f));\n margin: 0;\n white-space: normal;\n}\n\n/* ==========================================================================\n Button Group\n \n Figma specs:\n - Desktop: horizontal, gap 12px\n - Mobile: vertical, full-width buttons, gap 12px\n - Button padding: 24px horizontal, 12px vertical\n - Button border-radius: 9999px (radii/button)\n ========================================================================== */\n\n.banner__buttons {\n display: flex;\n flex-direction: row;\n gap: 24px;\n align-items: flex-start;\n}\n\n/* ==========================================================================\n Mobile Responsive Styles (≤768px)\n \n Figma mobile specs:\n - Width: 100%\n - Border radius: 24px\n - Padding top: 224px (space for illustration)\n - Content padding: pb 48px, pt 16px, px 28px\n - Content min-height: 320px\n - Illustration: 212px x 212px, positioned at top: 12px, centered horizontally\n ========================================================================== */\n\n/* mobile-only */\n@media (max-width: 768px) {\n .banner {\n flex-direction: column;\n align-items: stretch;\n padding: 224px 0 0 0;\n border-radius: var(--radii-card-level-1-mobile, 24px);\n max-width: 100%;\n min-height: auto;\n }\n\n /* Wave overlay hidden on mobile */\n .banner__wave-overlay {\n display: none;\n }\n\n /* Illustration positioned at top-right on mobile */\n .banner__illustration {\n position: absolute;\n top: 12px;\n left: auto;\n right: 0;\n transform: none;\n width: 212px;\n height: 212px;\n max-width: 280px;\n max-height: 280px;\n }\n\n /* Content takes full width with min-height */\n .banner__content {\n width: 100%;\n min-height: 320px;\n padding: 16px 28px 48px 28px;\n gap: 40px;\n flex: none;\n }\n\n /* Ensure copy section doesn't constrain width on mobile */\n .banner__copy {\n max-width: 100%;\n }\n\n /* Mobile heading size */\n .banner__heading {\n font-size: 32px;\n letter-spacing: -0.64px;\n }\n\n /* Buttons stack vertically on mobile, full width */\n .banner__buttons {\n flex-direction: column;\n align-items: stretch;\n gap: 12px;\n width: 100%;\n }\n\n /* Ensure af-button takes full width on mobile */\n .banner__buttons {\n --af-button-width: 100%;\n }\n\n .banner__buttons af-button {\n display: block;\n width: 100%;\n }\n}\n\n/* ==========================================================================\n Small Mobile (≤480px)\n ========================================================================== */\n\n/* ≤ small */\n@media (max-width: 480px) {\n .banner {\n padding-top: 200px;\n }\n\n .banner__illustration {\n /* Keep right-aligned, just adjust size */\n right: 0;\n width: 180px;\n height: 180px;\n }\n\n .banner__content {\n padding: 16px 20px 36px 20px;\n min-height: 280px;\n }\n\n .banner__heading {\n font-size: 28px;\n letter-spacing: -0.56px;\n }\n}\n","import { Component, h, Host, Prop } from '@stencil/core';\n\ntype BannerTheme = 'white-ivory' | 'mist-green' | 'soft-clay' | 'inkwell';\n\n/**\n * In-page banner component for call-to-action content.\n * \n * A banner card with illustration, heading, description, and action buttons.\n * Typically placed inside a neutral (white) Section to show off its themed background.\n * \n * The component has its own theme prop to control its background color and styling.\n * \n * **Illustration Usage:**\n * Use `illustrationUrl` to pass an illustration image URL. For theme-matched illustrations,\n * use `getIllustrationUrlByScene()` from `@affinda/illustrations` in your consuming app:\n * \n * ```tsx\n * import { getIllustrationUrlByScene } from '@affinda/illustrations';\n * \n * <InPageBanner\n * theme=\"inkwell\"\n * illustrationUrl={getIllustrationUrlByScene('automate', 'inkwell')}\n * ...\n * />\n * ```\n * \n * Alternatively, use the `illustration` slot for completely custom content.\n *\n * **Slot-based composition (preferred for rich content):**\n * - `heading` — heading markup (overrides the `heading` prop when provided).\n * - `description` — description markup (overrides the `description` prop).\n * - `buttons` — custom button group (overrides the primary/secondary button\n * props; use when you need ghost variants, more than two buttons, or\n * per-button icons).\n * - `illustration` — custom illustration markup.\n *\n * The string props remain supported for simple cases.\n */\n@Component({\n tag: 'af-in-page-banner',\n styleUrl: 'af-in-page-banner.css',\n shadow: false,\n scoped: true,\n})\nexport class AfInPageBanner {\n /** Theme - sets the banner background color and typography colors */\n @Prop() theme: BannerTheme = 'mist-green';\n\n /** Banner heading */\n @Prop() heading: string = '';\n\n /** Banner description */\n @Prop() description: string = '';\n\n /** Primary button text */\n @Prop() primaryButtonText: string = '';\n\n /** Primary button URL */\n @Prop() primaryButtonUrl: string = '#';\n\n /** Secondary button text (optional - if empty, button won't show) */\n @Prop() secondaryButtonText: string = '';\n\n /** Secondary button URL */\n @Prop() secondaryButtonUrl: string = '#';\n\n /** \n * Illustration URL. For theme-matched illustrations, use getIllustrationUrlByScene() \n * from @affinda/illustrations in your app code.\n */\n @Prop() illustrationUrl: string = '';\n\n /** Whether to show the decorative wave overlay */\n @Prop() showWaveDecoration: boolean = true;\n\n /**\n * Renders the decorative wave SVG overlay.\n * Uses the Affinda brand \"infinity loop\" wave pattern.\n * Fill color is controlled via CSS custom properties per theme.\n */\n private renderWaveOverlay() {\n return (\n <div class=\"banner__wave-overlay\" aria-hidden=\"true\">\n <svg \n viewBox=\"0 0 521 323\" \n fill=\"none\" \n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"banner__wave-svg\"\n >\n <path \n d=\"M473.775 46.273C443.539 15.92 403.701 -0.631616 361.351 0.0184478H154.183L112.67 67.225H361.893C362.189 67.225 362.533 67.225 362.829 67.225C387.155 67.225 410.004 76.7259 427.289 94.0776C445.017 111.879 454.816 135.682 454.816 161.134C454.816 213.389 412.959 255.843 361.548 255.843H108.041C84.9457 255.843 66.1345 236.742 66.1345 213.289C66.1345 189.837 84.9949 170.435 107.992 169.735H334.957L377.799 102.528H106.859C47.9636 104.029 0 153.683 0 213.289C0 272.895 48.456 323 108.041 323H361.548C449.449 323 521 250.343 521 161.084C521 117.53 504.257 76.7759 473.824 46.2229L473.775 46.273Z\" \n fill=\"currentColor\"\n />\n </svg>\n </div>\n );\n }\n\n render() {\n return (\n <Host>\n <div class={`banner theme-${this.theme}`}>\n {/* Decorative wave overlay */}\n {this.showWaveDecoration && this.renderWaveOverlay()}\n\n {/* Illustration area */}\n <div class=\"banner__illustration\">\n {this.illustrationUrl ? (\n <img \n src={this.illustrationUrl} \n alt=\"\" \n class=\"banner__illustration-img\" \n loading=\"lazy\"\n />\n ) : (\n <slot name=\"illustration\"></slot>\n )}\n </div>\n\n {/* Content area — slots take precedence over string props. */}\n <div class=\"banner__content\">\n <div class=\"banner__copy\">\n <h2 class=\"banner__heading\">\n <slot name=\"heading\">{this.heading}</slot>\n </h2>\n <div class=\"banner__description\">\n <slot name=\"description\">{this.description}</slot>\n </div>\n </div>\n\n <div class=\"banner__buttons\">\n <slot name=\"buttons\">\n {this.primaryButtonText && (\n <af-button href={this.primaryButtonUrl} variant=\"primary\">\n {this.primaryButtonText}\n </af-button>\n )}\n {this.secondaryButtonText && (\n <af-button href={this.secondaryButtonUrl} variant=\"secondary\">\n {this.secondaryButtonText}\n </af-button>\n )}\n </slot>\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
1
|
+
{"file":"af-in-page-banner.js","mappings":"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","names":["AfInPageBanner","__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/af-in-page-banner/af-in-page-banner.css?tag=af-in-page-banner&encapsulation=scoped","src/components/af-in-page-banner/af-in-page-banner.tsx"],"sourcesContent":[":host {\n display: block;\n width: 100%;\n}\n\n/* ==========================================================================\n Banner Container\n\n Design specs from Figma:\n - Desktop: max-width 1280px, gap 40px, left padding 40px, right padding 148px\n - Border radius: radius-lg (20px) — aligned with af-card across the token ladder\n - Content padding vertical: 48px (margins/margin TB tight)\n ========================================================================== */\n\n.banner {\n position: relative;\n display: flex;\n align-items: center;\n gap: 40px;\n padding-left: 40px;\n padding-right: 148px;\n padding-top: 0;\n padding-bottom: 0;\n border-radius: var(--radius-lg, 20px);\n overflow: hidden;\n max-width: 1280px;\n width: 100%;\n}\n\n/* ==========================================================================\n Theme Variants - Background Colors\n \n Colors from Figma:\n - mist-green: #c6d5d1 (background/base)\n - inkwell: #14343b (Colour/Brand/Inkwell)\n - soft-clay: #c0ab8d (softclay-400)\n - white-ivory: #fff9ee (background/ivory-paper)\n ========================================================================== */\n\n.banner.theme-mist-green {\n background-color: var(--colour-brand-mist-green, #c6d5d1);\n \n /* Typography */\n --banner-heading-color: var(--colour-brand-inkwell, #14343b);\n --banner-body-color: var(--colour-inkwell-400, #2b484f);\n \n /* Buttons - ice primary, inkwell secondary */\n --af-button-primary-bg: var(--colour-brand-ice, #a6fffb);\n --af-button-primary-bg-hover: var(--colour-ice-600, #95e6e2);\n --af-button-primary-text: var(--colour-brand-inkwell, #14343b);\n --af-button-primary-stroke: var(--colour-brand-inkwell, #14343b);\n --af-button-secondary-text: var(--colour-brand-inkwell, #14343b);\n --af-button-secondary-stroke: var(--colour-brand-inkwell, #14343b);\n}\n\n.banner.theme-inkwell {\n background-color: var(--colour-brand-inkwell, #14343b);\n \n /* Typography - light colors on dark background */\n --banner-heading-color: var(--colour-brand-mist-green, #c6d5d1);\n --banner-body-color: var(--colour-inkwell-100, #d0d6d8);\n \n /* Buttons - ice primary, white secondary */\n --af-button-primary-bg: var(--colour-brand-ice, #a6fffb);\n --af-button-primary-bg-hover: var(--colour-ice-600, #95e6e2);\n --af-button-primary-text: var(--colour-brand-inkwell, #14343b);\n --af-button-primary-stroke: var(--colour-brand-inkwell, #14343b);\n --af-button-secondary-text: var(--colour-brand-white, #ffffff);\n --af-button-secondary-stroke: var(--colour-brand-white, #ffffff);\n}\n\n.banner.theme-soft-clay {\n background-color: var(--colour-softclay-400, #c0ab8d);\n \n /* Typography */\n --banner-heading-color: var(--colour-brand-inkwell, #14343b);\n --banner-body-color: var(--colour-inkwell-450, #203e45);\n \n /* Buttons */\n --af-button-primary-bg: var(--colour-brand-ice, #a6fffb);\n --af-button-primary-bg-hover: var(--colour-ice-600, #95e6e2);\n --af-button-primary-text: var(--colour-brand-inkwell, #14343b);\n --af-button-primary-stroke: var(--colour-brand-inkwell, #14343b);\n --af-button-secondary-text: var(--colour-brand-inkwell, #14343b);\n --af-button-secondary-stroke: var(--colour-brand-inkwell, #14343b);\n}\n\n.banner.theme-white-ivory {\n background-color: var(--colour-brand-ivory-paper, #fff9ee);\n \n /* Typography */\n --banner-heading-color: var(--colour-brand-inkwell, #14343b);\n --banner-body-color: var(--colour-inkwell-400, #2b484f);\n \n /* Buttons */\n --af-button-primary-bg: var(--colour-brand-ice, #a6fffb);\n --af-button-primary-bg-hover: var(--colour-ice-600, #95e6e2);\n --af-button-primary-text: var(--colour-brand-inkwell, #14343b);\n --af-button-primary-stroke: var(--colour-brand-inkwell, #14343b);\n --af-button-secondary-text: var(--colour-brand-inkwell, #14343b);\n --af-button-secondary-stroke: var(--colour-brand-inkwell, #14343b);\n}\n\n/* ==========================================================================\n Decorative Wave Overlay\n \n Figma specs:\n - Position: bottom -17.41px, right -156px\n - Size: 521px x 323px\n - Fill colors per theme\n ========================================================================== */\n\n.banner__wave-overlay {\n position: absolute;\n bottom: -17px;\n right: -156px;\n width: 521px;\n height: 323px;\n pointer-events: none;\n z-index: 0;\n}\n\n.banner__wave-svg {\n width: 100%;\n height: 100%;\n}\n\n/* ==========================================================================\n Theme-specific Wave Colors\n The SVG uses currentColor, so we set color on the overlay container.\n ========================================================================== */\n\n.banner.theme-mist-green .banner__wave-overlay {\n color: #d1ddda;\n}\n\n.banner.theme-inkwell .banner__wave-overlay {\n color: rgba(255, 255, 255, 0.06);\n}\n\n.banner.theme-soft-clay .banner__wave-overlay {\n color: rgba(20, 52, 59, 0.06);\n}\n\n.banner.theme-white-ivory .banner__wave-overlay {\n color: rgba(20, 52, 59, 0.04);\n}\n\n/* ==========================================================================\n Illustration Area\n \n Figma specs:\n - Desktop: max 360px x 360px, aspect ratio preserved\n - Mobile: 212px x 212px, positioned absolute top-right\n ========================================================================== */\n\n.banner__illustration {\n position: relative;\n z-index: 1;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 288px;\n height: 288px;\n max-width: 288px;\n max-height: 288px;\n aspect-ratio: 1;\n}\n\n.banner__illustration-img {\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n\n/* Allow slotted content to fill the illustration area */\n.banner__illustration ::slotted(*) {\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n\n/* ==========================================================================\n Content Area (Typography Lockup)\n \n Figma specs:\n - Vertical padding: 48px (margins/margin TB tight)\n - Gap between copy and buttons: 40px\n - Gap between heading and description: 16px\n - Max-width for copy: 840px\n ========================================================================== */\n\n.banner__content {\n position: relative;\n z-index: 1;\n flex: 1 1 0;\n min-width: 0;\n min-height: 0;\n display: flex;\n flex-direction: column;\n gap: 40px;\n padding-top: 38px;\n padding-bottom: 38px;\n padding-right: 0;\n padding-left: 0;\n}\n\n.banner__copy {\n display: flex;\n flex-direction: column;\n gap: 16px;\n max-width: 840px;\n width: 100%;\n white-space: normal;\n}\n\n/* ==========================================================================\n Heading\n \n Figma specs:\n - Desktop: 44px, line-height 1, letter-spacing -0.88px (-2%)\n - Mobile: 32px, line-height 1, letter-spacing -0.64px (-2%)\n - Font: Typography/primaryFont (NeuSans), weight: Typography/headingWeight (500)\n ========================================================================== */\n\n.banner__heading {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-weight: var(--typography-headingweight, 500);\n font-size: 44px;\n line-height: 1;\n letter-spacing: -0.88px;\n color: var(--banner-heading-color, var(--colour-brand-inkwell, #14343b));\n margin: 0;\n white-space: normal;\n}\n\n/* ==========================================================================\n Description\n \n Figma specs:\n - Font size: 18px\n - Line height: 26px\n - Font: Typography/primaryFont, weight: Typography/bodyWeight (400)\n - Color: typography/body-default #2b484f (or theme variant)\n ========================================================================== */\n\n.banner__description {\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-weight: var(--typography-bodyweight, 400);\n font-size: 18px;\n line-height: 26px;\n color: var(--banner-body-color, var(--colour-inkwell-400, #2b484f));\n margin: 0;\n white-space: normal;\n}\n\n/* ==========================================================================\n Button Group\n \n Figma specs:\n - Desktop: horizontal, gap 12px\n - Mobile: vertical, full-width buttons, gap 12px\n - Button padding: 24px horizontal, 12px vertical\n - Button border-radius: 9999px (radii/button)\n ========================================================================== */\n\n.banner__buttons {\n display: flex;\n flex-direction: row;\n gap: 24px;\n align-items: flex-start;\n}\n\n/* ==========================================================================\n Mobile Responsive Styles (≤768px)\n \n Figma mobile specs:\n - Width: 100%\n - Border radius: 24px\n - Padding top: 224px (space for illustration)\n - Content padding: pb 48px, pt 16px, px 28px\n - Content min-height: 320px\n - Illustration: 212px x 212px, positioned at top: 12px, centered horizontally\n ========================================================================== */\n\n/* mobile-only */\n@media (max-width: 768px) {\n .banner {\n flex-direction: column;\n align-items: stretch;\n padding: 224px 0 0 0;\n /* Mobile keeps the same 20px corner as desktop — simpler after the\n * token ladder consolidation. */\n border-radius: var(--radius-lg, 20px);\n max-width: 100%;\n min-height: auto;\n }\n\n /* Wave overlay hidden on mobile */\n .banner__wave-overlay {\n display: none;\n }\n\n /* Illustration positioned at top-right on mobile */\n .banner__illustration {\n position: absolute;\n top: 12px;\n left: auto;\n right: 0;\n transform: none;\n width: 212px;\n height: 212px;\n max-width: 280px;\n max-height: 280px;\n }\n\n /* Content takes full width with min-height */\n .banner__content {\n width: 100%;\n min-height: 320px;\n padding: 16px 28px 48px 28px;\n gap: 40px;\n flex: none;\n }\n\n /* Ensure copy section doesn't constrain width on mobile */\n .banner__copy {\n max-width: 100%;\n }\n\n /* Mobile heading size */\n .banner__heading {\n font-size: 32px;\n letter-spacing: -0.64px;\n }\n\n /* Buttons stack vertically on mobile, full width */\n .banner__buttons {\n flex-direction: column;\n align-items: stretch;\n gap: 12px;\n width: 100%;\n }\n\n /* Ensure af-button takes full width on mobile */\n .banner__buttons {\n --af-button-width: 100%;\n }\n\n .banner__buttons af-button {\n display: block;\n width: 100%;\n }\n}\n\n/* ==========================================================================\n Small Mobile (≤480px)\n ========================================================================== */\n\n/* ≤ small */\n@media (max-width: 480px) {\n .banner {\n padding-top: 200px;\n }\n\n .banner__illustration {\n /* Keep right-aligned, just adjust size */\n right: 0;\n width: 180px;\n height: 180px;\n }\n\n .banner__content {\n padding: 16px 20px 36px 20px;\n min-height: 280px;\n }\n\n .banner__heading {\n font-size: 28px;\n letter-spacing: -0.56px;\n }\n}\n","import { Component, h, Host, Prop } from '@stencil/core';\n\ntype BannerTheme = 'white-ivory' | 'mist-green' | 'soft-clay' | 'inkwell';\n\n/**\n * In-page banner component for call-to-action content.\n * \n * A banner card with illustration, heading, description, and action buttons.\n * Typically placed inside a neutral (white) Section to show off its themed background.\n * \n * The component has its own theme prop to control its background color and styling.\n * \n * **Illustration Usage:**\n * Use `illustrationUrl` to pass an illustration image URL. For theme-matched illustrations,\n * use `getIllustrationUrlByScene()` from `@affinda/illustrations` in your consuming app:\n * \n * ```tsx\n * import { getIllustrationUrlByScene } from '@affinda/illustrations';\n * \n * <InPageBanner\n * theme=\"inkwell\"\n * illustrationUrl={getIllustrationUrlByScene('automate', 'inkwell')}\n * ...\n * />\n * ```\n * \n * Alternatively, use the `illustration` slot for completely custom content.\n *\n * **Slot-based composition (preferred for rich content):**\n * - `heading` — heading markup (overrides the `heading` prop when provided).\n * - `description` — description markup (overrides the `description` prop).\n * - `buttons` — custom button group (overrides the primary/secondary button\n * props; use when you need ghost variants, more than two buttons, or\n * per-button icons).\n * - `illustration` — custom illustration markup.\n *\n * The string props remain supported for simple cases.\n */\n@Component({\n tag: 'af-in-page-banner',\n styleUrl: 'af-in-page-banner.css',\n shadow: false,\n scoped: true,\n})\nexport class AfInPageBanner {\n /** Theme - sets the banner background color and typography colors */\n @Prop() theme: BannerTheme = 'mist-green';\n\n /** Banner heading */\n @Prop() heading: string = '';\n\n /** Banner description */\n @Prop() description: string = '';\n\n /** Primary button text */\n @Prop() primaryButtonText: string = '';\n\n /** Primary button URL */\n @Prop() primaryButtonUrl: string = '#';\n\n /** Secondary button text (optional - if empty, button won't show) */\n @Prop() secondaryButtonText: string = '';\n\n /** Secondary button URL */\n @Prop() secondaryButtonUrl: string = '#';\n\n /** \n * Illustration URL. For theme-matched illustrations, use getIllustrationUrlByScene() \n * from @affinda/illustrations in your app code.\n */\n @Prop() illustrationUrl: string = '';\n\n /** Whether to show the decorative wave overlay */\n @Prop() showWaveDecoration: boolean = true;\n\n /**\n * Renders the decorative wave SVG overlay.\n * Uses the Affinda brand \"infinity loop\" wave pattern.\n * Fill color is controlled via CSS custom properties per theme.\n */\n private renderWaveOverlay() {\n return (\n <div class=\"banner__wave-overlay\" aria-hidden=\"true\">\n <svg \n viewBox=\"0 0 521 323\" \n fill=\"none\" \n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"banner__wave-svg\"\n >\n <path \n d=\"M473.775 46.273C443.539 15.92 403.701 -0.631616 361.351 0.0184478H154.183L112.67 67.225H361.893C362.189 67.225 362.533 67.225 362.829 67.225C387.155 67.225 410.004 76.7259 427.289 94.0776C445.017 111.879 454.816 135.682 454.816 161.134C454.816 213.389 412.959 255.843 361.548 255.843H108.041C84.9457 255.843 66.1345 236.742 66.1345 213.289C66.1345 189.837 84.9949 170.435 107.992 169.735H334.957L377.799 102.528H106.859C47.9636 104.029 0 153.683 0 213.289C0 272.895 48.456 323 108.041 323H361.548C449.449 323 521 250.343 521 161.084C521 117.53 504.257 76.7759 473.824 46.2229L473.775 46.273Z\" \n fill=\"currentColor\"\n />\n </svg>\n </div>\n );\n }\n\n render() {\n return (\n <Host>\n <div class={`banner theme-${this.theme}`}>\n {/* Decorative wave overlay */}\n {this.showWaveDecoration && this.renderWaveOverlay()}\n\n {/* Illustration area */}\n <div class=\"banner__illustration\">\n {this.illustrationUrl ? (\n <img \n src={this.illustrationUrl} \n alt=\"\" \n class=\"banner__illustration-img\" \n loading=\"lazy\"\n />\n ) : (\n <slot name=\"illustration\"></slot>\n )}\n </div>\n\n {/* Content area — slots take precedence over string props. */}\n <div class=\"banner__content\">\n <div class=\"banner__copy\">\n <h2 class=\"banner__heading\">\n <slot name=\"heading\">{this.heading}</slot>\n </h2>\n <div class=\"banner__description\">\n <slot name=\"description\">{this.description}</slot>\n </div>\n </div>\n\n <div class=\"banner__buttons\">\n <slot name=\"buttons\">\n {this.primaryButtonText && (\n <af-button href={this.primaryButtonUrl} variant=\"primary\">\n {this.primaryButtonText}\n </af-button>\n )}\n {this.secondaryButtonText && (\n <af-button href={this.secondaryButtonUrl} variant=\"secondary\">\n {this.secondaryButtonText}\n </af-button>\n )}\n </slot>\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
|