SlimBanner

A flexible banner component for announcements, alerts, or calls to action. Supports custom messages, links, icons, and toggle states.

Basic Example (Ukraine Solidarity)

<SlimBanner
  class="w-full drop-shadow"
  client:load
  message="We stand with our friends and colleagues in Ukraine. To support Ukraine in their time of need visit"
  linkText="this page"
  linkUrl="https://polo.blue/support-ukraine/"
  linkTitle="Support Ukraine"
  showIcon
  showCloseButton
  toggleMessage="RUSSIA IS A TERRORIST STATE"
/>

Simple Announcement

<SlimBanner
  message="πŸŽ‰ New features are now available!"
  linkText="Learn more"
  linkUrl="/updates"
  showCloseButton={false}
/>
<SlimBanner
  message="Limited time offer! Get 50% off all products. "
  linkText="Shop now"
  linkUrl="/shop"
  linkTitle="Visit our shop"
  showCloseButton={false}
/>

With Toggle State

<SlimBanner
  message="Join us at the annual car meet this weekend!"
  linkText="See the lineup"
  linkUrl="/events"
  showCloseButton
  toggleMessage="🏁 TORQUE IS EVERYTHING"
  toggleBgClass="bg-red-700"
  toggleTextClass="text-white"
/>
<SlimBanner
  message="Scheduled maintenance: The site will be down on Sunday, 3-5 AM EST."
  linkUrl=""
  showCloseButton={false}
/>

Persistent Banner (LocalStorage)

Close the banner permanently using localStorage. It will stay hidden even after page refresh.

<SlimBanner
  message="πŸͺ This website uses cookies to enhance your experience."
  linkText="Learn more"
  linkUrl="/privacy"
  showCloseButton
  persistClose
  storageKey="cookie-banner-closed"
  expirationDays={90}
/>

Note: Once you close this banner, it won’t show again for 90 days (or until you clear localStorage).

Persistent with No Expiration

<SlimBanner
  message="πŸ“’ Important: This is a one-time announcement."
  linkUrl=""
  showCloseButton
  persistClose
  storageKey="announcement-dismissed"
  expirationDays={0}
/>

Tip: Set expirationDays={0} to hide the banner forever once closed.

Props

PropTypeDefaultDescription
messageStringUkraine messageMain banner message text
linkTextString'this page'Text for the link
linkUrlStringUkraine URLURL for the link (set to empty string for no link)
linkTitleString''Title attribute for the link
toggleMessageString''Message to show when close button is clicked (enables toggle)
toggleBgClassString'bg-black'Background class for toggle state
toggleTextClassString'text-white'Text color class for toggle state
showCloseButtonBooleantrueShow close/toggle button
closeButtonAriaLabelString'Toggle'Aria label for close button
showIconBooleanfalseShow icon (Ukraine flag by default)
iconClassStringUkraine flag CSSCustom CSS class for icon
persistCloseBooleanfalseSave close state to localStorage
storageKeyString'slimbanner-closed'localStorage key for persistence
expirationDaysNumber30Days until localStorage expires (0 = never)

Slots

SlotDescription
defaultOverride the entire message content
iconOverride the icon/flag
toggleOverride the toggle state content

Using Slots

<SlimBanner client:load>
  <strong slot="default">Custom content</strong> with <em>HTML markup</em>
</SlimBanner>

LocalStorage Management

When using persistClose={true}, the close state is saved to localStorage. Here’s how to manage it:

Clear specific banner:

localStorage.removeItem('cookie-banner-closed');

Clear all banners:

// If using default key
localStorage.removeItem('slimbanner-closed');

// Or clear all by pattern
Object.keys(localStorage)
  .filter(key => key.includes('banner'))
  .forEach(key => localStorage.removeItem(key));

Check if banner is closed:

const data = JSON.parse(localStorage.getItem('cookie-banner-closed'));
console.log('Banner closed:', data?.closed);
console.log('Expires at:', new Date(data?.expires));

uno.config.ts / shortcuts

['slimbanner','px-4 sm:px-8  flex items-center justify-center text-xs sm:text-base leading-none relative bg-gray-100  z-2 px-4 py-3 sm:text-base sm:px-8 text-blue-darker print-hidden'],