banner
fulldev-ui/bannerFreeComponent
fulldev/ui publishes no description for this item.
Live preview
live · rendered by the registry
Rendered by fulldev/ui on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://ui.full.dev/r/banner.jsonSource
1---2import type { HTMLAttributes } from "astro/types"3import { cva, type VariantProps } from "class-variance-authority"45import { cn } from "@/lib/utils"67type Props = HTMLAttributes<"aside"> &8 VariantProps<typeof variants> & {9 storageKey?: string10 }1112const variants = cva("relative flex items-center py-2", {13 variants: {14 variant: {15 default: "bg-foreground text-background w-full",16 floating:17 "bg-background mx-auto my-2 w-[calc(100%-2rem)] max-w-[calc(var(--container,1280px)-2rem)] overflow-hidden rounded-lg border shadow-sm",18 },19 },20 defaultVariants: {21 variant: "default",22 },23})2425const { class: className, variant, storageKey, ...props } = Astro.props26---2728<aside29 class={cn(variants({ variant }), className)}30 data-slot="banner"31 data-banner-storage-key={storageKey}32 data-variant={variant}33 {...props}34>35 <slot />36</aside>3738<script is:inline>39 const initializedKey = "fulldevBannerInitialized"4041 if (!document.documentElement.dataset[initializedKey]) {42 document.documentElement.dataset[initializedKey] = "true"4344 const getStorageToken = (key) => `banner:${key}`4546 const syncBanners = () => {47 document.querySelectorAll("[data-slot='banner']").forEach((banner) => {48 if (!(banner instanceof HTMLElement)) return4950 const storageKey = banner.dataset.bannerStorageKey5152 if (53 storageKey &&54 sessionStorage.getItem(getStorageToken(storageKey)) === "hidden"55 ) {56 banner.hidden = true57 }58 })59 }6061 syncBanners()6263 document.addEventListener("click", (event) => {64 const target = event.target6566 if (!(target instanceof Element)) return6768 const closeButton = target.closest("[data-slot='banner-close']")6970 if (!(closeButton instanceof HTMLElement)) return7172 const banner = closeButton.closest("[data-slot='banner']")7374 if (!(banner instanceof HTMLElement)) return7576 banner.hidden = true7778 const storageKey = banner.dataset.bannerStorageKey7980 if (storageKey) {81 sessionStorage.setItem(getStorageToken(storageKey), "hidden")82 }83 })84 }85</script>
What it pulls in
Other registry items
Files it writes
More from fulldev/ui
All 144 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| accordionaccordion | fulldev/ui | Components | Free | 1 dep · 5 files | |
| alertalert | fulldev/ui | Components | Free | no deps · 5 files | |
| alert-dialogalert-dialog | fulldev/ui | Components | Free | 1 dep · 13 files | |
| avataravatar | fulldev/ui | Components | Free | no deps · 7 files | |
| badgebadge | fulldev/ui | Components | Free | no deps · 3 files | |
| breadcrumbbreadcrumb | fulldev/ui | Components | Free | no deps · 8 files | |
| buttonbutton | fulldev/ui | Components | Free | no deps · 3 files | |
| cardcard | fulldev/ui | Components | Free | no deps · 8 files |
