banner: add control swap

This commit is contained in:
Elijah Duffy
2025-12-15 17:05:20 -08:00
parent d9cd2b406a
commit 54f7924c4a
2 changed files with 14 additions and 5 deletions

View File

@@ -38,6 +38,8 @@
}) })
| null; | null;
dismiss?: Omit<BannerControlButton, 'framed'> | null; dismiss?: Omit<BannerControlButton, 'framed'> | null;
/** if true, accept and decline buttons are swapped with more info */
swap?: boolean;
}; };
const defaultBannerControls: BannerControls = { const defaultBannerControls: BannerControls = {
@@ -53,7 +55,8 @@
}, },
dismiss: { dismiss: {
action: (banner) => banner.close() action: (banner) => banner.close()
} },
swap: false
}; };
const mergeBannerControls = ( const mergeBannerControls = (
@@ -66,7 +69,8 @@
accept: overrides.accept ?? defaults.accept, accept: overrides.accept ?? defaults.accept,
decline: overrides.decline ?? defaults.decline, decline: overrides.decline ?? defaults.decline,
moreInfo: overrides.moreInfo ?? defaults.moreInfo, moreInfo: overrides.moreInfo ?? defaults.moreInfo,
dismiss: overrides.dismiss ?? defaults.dismiss dismiss: overrides.dismiss ?? defaults.dismiss,
swap: overrides.swap ?? defaults.swap
}; };
}; };
</script> </script>
@@ -171,7 +175,9 @@
{@render children?.()} {@render children?.()}
{#if controls !== null} {#if controls !== null}
<div class="mt-4 flex flex-wrap justify-between gap-4"> <div
class={['mt-4 flex flex-wrap justify-between gap-4', controls.swap && 'flex-row-reverse']}
>
<!-- More info button/link --> <!-- More info button/link -->
{#if controls.moreInfo} {#if controls.moreInfo}
{#if controls.moreInfo.type === 'link' && controls.moreInfo.href} {#if controls.moreInfo.type === 'link' && controls.moreInfo.href}
@@ -200,7 +206,9 @@
{/if} {/if}
{/if} {/if}
<div class="ml-auto flex justify-end gap-4"> <div
class={['flex justify-end gap-4', controls.swap ? 'mr-auto flex-row-reverse' : 'ml-auto']}
>
<!-- Decline button --> <!-- Decline button -->
{@render buttonControl(controls.decline, handleDecline, false)} {@render buttonControl(controls.decline, handleDecline, false)}
<!-- Accept button --> <!-- Accept button -->

View File

@@ -83,7 +83,8 @@
<Banner <Banner
title="Manage Cookies" title="Manage Cookies"
controls={{ controls={{
moreInfo: { label: 'More Info', type: 'link', href: '#!' } moreInfo: { label: 'More Info', type: 'link', href: '#!' },
swap: true
}} }}
onaccept={() => console.log('Cookies accepted!')} onaccept={() => console.log('Cookies accepted!')}
ondecline={() => console.log('Cookies declined!')} ondecline={() => console.log('Cookies declined!')}