glasswind 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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/cn.ts","../src/hooks/useDisclosure.ts","../src/hooks/useClickOutside.ts","../src/hooks/useIsomorphicLayoutEffect.ts","../src/hooks/useScrollLock.ts","../src/hooks/useControllableState.ts","../src/components/Accordion/Accordion.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Badge/Badge.tsx","../src/components/Button/Button.tsx","../src/components/Card/Card.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Portal/Portal.tsx","../src/components/Drawer/Drawer.tsx","../src/components/Dropdown/Dropdown.tsx","../src/components/Input/Input.tsx","../src/components/Modal/Modal.tsx","../src/components/Progress/Progress.tsx","../src/components/Radio/Radio.tsx","../src/components/Select/Select.tsx","../src/components/Slider/Slider.tsx","../src/components/Spinner/Spinner.tsx","../src/components/Switch/Switch.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Textarea/Textarea.tsx","../src/components/Toast/Toast.tsx","../src/components/Tooltip/Tooltip.tsx"],"names":["useState","useCallback","useEffect","useLayoutEffect","useRef","createContext","useContext","forwardRef","Accordion","useMemo","jsx","AccordionItem","useId","jsxs","Avatar","Badge","Button","Card","CardHeader","CardBody","CardFooter","Checkbox","createPortal","Drawer","DrawerHeader","DrawerBody","DrawerFooter","assignRef","DropdownTrigger","DropdownMenu","DropdownItem","DropdownSeparator","DropdownLabel","Input","Modal","ModalHeader","ModalBody","ModalFooter","Progress","RadioGroup","Radio","Select","Slider","Spinner","Switch","Tabs","useReducer","TabList","Tab","TabPanel","Textarea","Tooltip"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * cn — tiny classnames joiner.\n * Filters out falsey values and flattens arrays so components can write:\n * cn('gl-btn', `gl-btn--${variant}`, disabled && 'gl-btn--disabled', className)\n * No external dependency (keeps the bundle small).\n */\nexport type ClassValue =\n | string\n | number\n | null\n | boolean\n | undefined\n | ClassValue[];\n\nexport function cn(...inputs: ClassValue[]): string {\n const out: string[] = [];\n for (const input of inputs) {\n if (!input) continue;\n if (Array.isArray(input)) {\n const nested = cn(...input);\n if (nested) out.push(nested);\n } else if (typeof input === 'string' || typeof input === 'number') {\n out.push(String(input));\n }\n }\n return out.join(' ');\n}\n","import { useCallback, useState } from 'react';\n\nexport interface UseDisclosureReturn {\n isOpen: boolean;\n open: () => void;\n close: () => void;\n toggle: () => void;\n setOpen: (value: boolean) => void;\n}\n\n/**\n * Controlled/uncontrolled open state for overlays (Modal, Drawer, Dropdown…).\n */\nexport function useDisclosure(defaultOpen = false): UseDisclosureReturn {\n const [isOpen, setOpen] = useState(defaultOpen);\n const open = useCallback(() => setOpen(true), []);\n const close = useCallback(() => setOpen(false), []);\n const toggle = useCallback(() => setOpen((v) => !v), []);\n return { isOpen, open, close, toggle, setOpen };\n}\n","import { useEffect, type RefObject } from 'react';\n\n/**\n * Fires `handler` when a pointerdown/touch happens outside the referenced\n * element. Used by Dropdown, Popover, Tooltip, etc.\n */\nexport function useClickOutside<T extends HTMLElement = HTMLElement>(\n ref: RefObject<T | null>,\n handler: (event: MouseEvent | TouchEvent) => void,\n enabled = true,\n): void {\n useEffect(() => {\n if (!enabled) return;\n const listener = (event: MouseEvent | TouchEvent) => {\n const el = ref.current;\n if (!el || el.contains(event.target as Node)) return;\n handler(event);\n };\n document.addEventListener('mousedown', listener);\n document.addEventListener('touchstart', listener);\n return () => {\n document.removeEventListener('mousedown', listener);\n document.removeEventListener('touchstart', listener);\n };\n }, [ref, handler, enabled]);\n}\n","import { useEffect, useLayoutEffect } from 'react';\n\n/**\n * useLayoutEffect that silently degrades to useEffect on the server,\n * avoiding React's \"useLayoutEffect does nothing on the server\" warning.\n * Essential for SSR frameworks like Next.js.\n */\nexport const useIsomorphicLayoutEffect =\n typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n","import { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';\n\n/**\n * Locks <body> scroll while an overlay is open (Modal, Drawer), preserving\n * the scrollbar gutter so the page doesn't shift.\n */\nexport function useScrollLock(locked: boolean): void {\n useIsomorphicLayoutEffect(() => {\n if (!locked || typeof document === 'undefined') return;\n const { body } = document;\n const prevOverflow = body.style.overflow;\n const prevPaddingRight = body.style.paddingRight;\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n\n body.style.overflow = 'hidden';\n if (scrollbarWidth > 0) {\n body.style.paddingRight = `${scrollbarWidth}px`;\n }\n return () => {\n body.style.overflow = prevOverflow;\n body.style.paddingRight = prevPaddingRight;\n };\n }, [locked]);\n}\n","import { useCallback, useRef, useState } from 'react';\n\n/**\n * Supports both controlled and uncontrolled usage of a value.\n * If `value` is provided, the component is controlled; otherwise it manages\n * its own state seeded by `defaultValue`. Used by Tabs, Accordion, Switch…\n */\nexport function useControllableState<T>(params: {\n value?: T;\n defaultValue: T;\n onChange?: (value: T) => void;\n}): [T, (next: T) => void] {\n const { value, defaultValue, onChange } = params;\n const isControlled = value !== undefined;\n const [internal, setInternal] = useState<T>(defaultValue);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const current = isControlled ? (value as T) : internal;\n\n const setValue = useCallback(\n (next: T) => {\n if (!isControlled) setInternal(next);\n onChangeRef.current?.(next);\n },\n [isControlled],\n );\n\n return [current, setValue];\n}\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useId,\n useMemo,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { useControllableState } from '../../hooks';\n\n/** Whether one item can be open at a time (`single`) or many (`multiple`). */\nexport type AccordionType = 'single' | 'multiple';\n\n/** Open-item value(s): a single item value, or a list of them for `multiple`. */\nexport type AccordionValue = string | string[];\n\n/* ---- Internal context shared with every <AccordionItem> ---- */\ninterface AccordionContextValue {\n /** Selection mode of the parent accordion. */\n type: AccordionType;\n /** Returns whether the item with the given value is currently expanded. */\n isOpen: (itemValue: string) => boolean;\n /** Expands or collapses the item with the given value. */\n toggle: (itemValue: string) => void;\n}\n\nconst AccordionContext = createContext<AccordionContextValue | null>(null);\n\nfunction useAccordionContext(): AccordionContextValue {\n const ctx = useContext(AccordionContext);\n if (ctx === null) {\n throw new Error(\n 'Glasswind: <AccordionItem> must be rendered inside an <Accordion>.',\n );\n }\n return ctx;\n}\n\n/** Normalize the controllable value into a flat list of open item values. */\nfunction toOpenList(value: AccordionValue): string[] {\n if (Array.isArray(value)) return value;\n return value === '' ? [] : [value];\n}\n\nconst NAV_KEYS = ['ArrowDown', 'ArrowUp', 'Home', 'End'];\n\nexport interface AccordionProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {\n /** Whether only one item may be open (`single`) or several (`multiple`). @default 'single' */\n type?: AccordionType;\n /** Controlled open value(s). A string for `single`, an array for `multiple`. */\n value?: AccordionValue;\n /** Initial open value(s) when uncontrolled. */\n defaultValue?: AccordionValue;\n /** Fires with the next open value(s) whenever the open set changes. */\n onChange?: (value: AccordionValue) => void;\n /** In `single` mode, allow closing the open item by clicking it again. @default true */\n collapsible?: boolean;\n /** One or more `<AccordionItem>` children. */\n children?: ReactNode;\n}\n\n/**\n * Accordion — a stack of collapsible frosted-glass panels.\n *\n * Manages the open item(s) through context and `useControllableState`, so it\n * works controlled (`value` + `onChange`) or uncontrolled (`defaultValue`).\n * Panels expand with a pure-CSS `grid-template-rows` animation — no height\n * measuring — and headers support Arrow/Home/End roving focus.\n */\nexport const Accordion = forwardRef<HTMLDivElement, AccordionProps>(\n function Accordion(\n {\n type = 'single',\n value: valueProp,\n defaultValue,\n onChange,\n collapsible = true,\n className,\n children,\n ...rest\n },\n ref,\n ) {\n const [value, setValue] = useControllableState<AccordionValue>({\n value: valueProp,\n defaultValue: defaultValue ?? (type === 'multiple' ? [] : ''),\n onChange,\n });\n\n const toggle = useCallback(\n (itemValue: string) => {\n if (type === 'multiple') {\n const open = toOpenList(value);\n const next = open.includes(itemValue)\n ? open.filter((v) => v !== itemValue)\n : [...open, itemValue];\n setValue(next);\n return;\n }\n const current = toOpenList(value)[0] ?? '';\n if (current === itemValue) {\n if (collapsible) setValue('');\n } else {\n setValue(itemValue);\n }\n },\n [type, collapsible, value, setValue],\n );\n\n const ctx = useMemo<AccordionContextValue>(\n () => ({\n type,\n isOpen: (itemValue: string) => toOpenList(value).includes(itemValue),\n toggle,\n }),\n [type, value, toggle],\n );\n\n return (\n <div\n ref={ref}\n data-gl-accordion=\"\"\n className={cn('gl-accordion', className)}\n {...rest}\n >\n <AccordionContext.Provider value={ctx}>\n {children}\n </AccordionContext.Provider>\n </div>\n );\n },\n);\n\nexport interface AccordionItemProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Unique value identifying this item within its accordion. */\n value: string;\n /** Header content rendered inside the trigger button. */\n title: ReactNode;\n /** Disable the header so the item cannot be toggled. @default false */\n disabled?: boolean;\n /** Panel content revealed when the item is expanded. */\n children?: ReactNode;\n}\n\n/**\n * AccordionItem — a single header + collapsible panel pair.\n *\n * Reads its open state from the parent `<Accordion>` context. The header is a\n * `<button>` with `aria-expanded`/`aria-controls`; the panel is a region\n * labelled by that header and animated via `grid-template-rows`.\n */\nexport const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(\n function AccordionItem(\n { value, title, disabled = false, className, children, ...rest },\n ref,\n ) {\n const { isOpen, toggle } = useAccordionContext();\n const open = isOpen(value);\n\n const baseId = useId();\n const triggerId = `${baseId}-trigger`;\n const panelId = `${baseId}-panel`;\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>) => {\n if (!NAV_KEYS.includes(event.key)) return;\n const trigger = event.currentTarget;\n const root = trigger.closest<HTMLElement>('[data-gl-accordion]');\n if (root === null) return;\n\n const triggers = Array.from(\n root.querySelectorAll<HTMLButtonElement>(\n '.gl-accordion__trigger:not([disabled])',\n ),\n ).filter((el) => el.closest('[data-gl-accordion]') === root);\n if (triggers.length === 0) return;\n\n const currentIndex = triggers.indexOf(trigger);\n let nextIndex = currentIndex;\n switch (event.key) {\n case 'ArrowDown':\n nextIndex = (currentIndex + 1) % triggers.length;\n break;\n case 'ArrowUp':\n nextIndex =\n (currentIndex - 1 + triggers.length) % triggers.length;\n break;\n case 'Home':\n nextIndex = 0;\n break;\n case 'End':\n nextIndex = triggers.length - 1;\n break;\n default:\n return;\n }\n event.preventDefault();\n triggers[nextIndex]?.focus();\n },\n [],\n );\n\n return (\n <div\n ref={ref}\n data-state={open ? 'open' : 'closed'}\n className={cn(\n 'gl-accordion__item',\n disabled && 'gl-accordion__item--disabled',\n className,\n )}\n {...rest}\n >\n <h3 className=\"gl-accordion__header\">\n <button\n type=\"button\"\n id={triggerId}\n className=\"gl-accordion__trigger\"\n aria-expanded={open}\n aria-controls={panelId}\n disabled={disabled}\n onClick={() => toggle(value)}\n onKeyDown={handleKeyDown}\n >\n <span className=\"gl-accordion__title\">{title}</span>\n <span className=\"gl-accordion__chevron\" aria-hidden=\"true\">\n <svg\n viewBox=\"0 0 24 24\"\n width=\"1em\"\n height=\"1em\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </span>\n </button>\n </h3>\n <div className=\"gl-accordion__panel\" data-state={open ? 'open' : 'closed'}>\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={triggerId}\n className=\"gl-accordion__content\"\n >\n <div className=\"gl-accordion__body\">{children}</div>\n </div>\n </div>\n </div>\n );\n },\n);\n","import {\n forwardRef,\n useEffect,\n useState,\n type HTMLAttributes,\n type ReactElement,\n} from 'react';\nimport { cn } from '../../utils/cn';\n\nexport type AvatarSize = 'sm' | 'md' | 'lg' | 'xl';\nexport type AvatarShape = 'circle' | 'square';\nexport type AvatarStatus = 'online' | 'offline' | 'busy' | 'away';\n\nexport interface AvatarProps extends HTMLAttributes<HTMLSpanElement> {\n /** Image URL. When it fails to load, the component falls back to initials. */\n src?: string;\n /** Alternative text for the image / accessible label for the fallback. */\n alt?: string;\n /** Full name used to derive initials when no image is available. */\n name?: string;\n /** Diameter preset. @default 'md' */\n size?: AvatarSize;\n /** Outline shape. @default 'circle' */\n shape?: AvatarShape;\n /** Presence indicator rendered as a dot at the bottom-right. */\n status?: AvatarStatus;\n}\n\n/** Human-readable labels for each presence status (used by screen readers). */\nconst STATUS_LABELS: Record<AvatarStatus, string> = {\n online: 'Online',\n offline: 'Offline',\n busy: 'Busy',\n away: 'Away',\n};\n\n/**\n * Derive up to two uppercase initials from a name.\n * \"Ada Lovelace\" -> \"AL\", \"cher\" -> \"C\", \" \" -> \"\".\n */\nfunction getInitials(name: string): string {\n const words = name.trim().split(/\\s+/).filter(Boolean);\n if (words.length === 0) return '';\n return words\n .slice(0, 2)\n .map((word) => word.charAt(0))\n .join('')\n .toUpperCase();\n}\n\n/** Generic user glyph shown when there is neither an image nor a name. */\nfunction FallbackIcon(): ReactElement {\n return (\n <svg\n className=\"gl-avatar__icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path\n d=\"M12 12.5a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm0 1.75c-3.6 0-6.5 2-6.5 4.5 0 .69.56 1.25 1.25 1.25h10.5c.69 0 1.25-.56 1.25-1.25 0-2.5-2.9-4.5-6.5-4.5Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n\n/**\n * Avatar — a frosted-glass user thumbnail.\n * Shows a photo when `src` loads, gracefully falls back to initials (from\n * `name`) or a generic glyph, and can display a colored presence dot.\n */\nexport const Avatar = forwardRef<HTMLSpanElement, AvatarProps>(function Avatar(\n {\n src,\n alt,\n name,\n size = 'md',\n shape = 'circle',\n status,\n className,\n children,\n ...rest\n },\n ref,\n) {\n const [imgFailed, setImgFailed] = useState(false);\n\n // Retry loading whenever the source changes.\n useEffect(() => {\n setImgFailed(false);\n }, [src]);\n\n const showImage = Boolean(src) && !imgFailed;\n const initials = name ? getInitials(name) : '';\n const a11yLabel = alt ?? name;\n\n return (\n <span\n ref={ref}\n className={cn(\n 'gl-avatar',\n `gl-avatar--${size}`,\n `gl-avatar--${shape}`,\n 'gl-focusable',\n className,\n )}\n {...(showImage ? {} : { role: 'img', 'aria-label': a11yLabel || 'Avatar' })}\n {...rest}\n >\n {showImage ? (\n <img\n className=\"gl-avatar__img\"\n src={src}\n alt={alt ?? name ?? ''}\n draggable={false}\n onError={() => setImgFailed(true)}\n />\n ) : initials ? (\n <span className=\"gl-avatar__initials\" aria-hidden=\"true\">\n {initials}\n </span>\n ) : (\n <FallbackIcon />\n )}\n\n {children}\n\n {status ? (\n <span\n className={cn('gl-avatar__status', `gl-avatar__status--${status}`)}\n role=\"img\"\n aria-label={STATUS_LABELS[status]}\n />\n ) : null}\n </span>\n );\n});\n","import { forwardRef, type HTMLAttributes } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport type BadgeVariant =\n | 'glass'\n | 'primary'\n | 'success'\n | 'danger'\n | 'warning'\n | 'info';\nexport type BadgeSize = 'sm' | 'md';\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n /** Visual style. @default 'glass' */\n variant?: BadgeVariant;\n /** Text/padding scale. @default 'md' */\n size?: BadgeSize;\n /** Render a small leading colored dot before the label. @default false */\n dot?: boolean;\n /** Fully-rounded (radius-full) shape. @default true */\n pill?: boolean;\n}\n\n/**\n * Badge — a compact inline label for status, counts, or metadata.\n * Colored variants use the soft token backgrounds with the solid accent as\n * text; the default `glass` variant uses the frosted-glass surface.\n */\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n {\n variant = 'glass',\n size = 'md',\n dot = false,\n pill = true,\n className,\n children,\n ...rest\n },\n ref,\n) {\n return (\n <span\n ref={ref}\n className={cn(\n 'gl-badge',\n `gl-badge--${variant}`,\n `gl-badge--${size}`,\n pill && 'gl-badge--pill',\n className,\n )}\n {...rest}\n >\n {dot ? <span className=\"gl-badge__dot\" aria-hidden=\"true\" /> : null}\n {children != null ? (\n <span className=\"gl-badge__label\">{children}</span>\n ) : null}\n </span>\n );\n});\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport type ButtonVariant =\n | 'glass'\n | 'primary'\n | 'secondary'\n | 'ghost'\n | 'danger';\nexport type ButtonSize = 'sm' | 'md' | 'lg';\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Visual style. @default 'glass' */\n variant?: ButtonVariant;\n /** Control height/padding. @default 'md' */\n size?: ButtonSize;\n /** Show a spinner and disable interaction. */\n loading?: boolean;\n /** Icon rendered before the label. */\n leftIcon?: ReactNode;\n /** Icon rendered after the label. */\n rightIcon?: ReactNode;\n /** Stretch to fill the container width. */\n fullWidth?: boolean;\n}\n\n/**\n * Button — the primary action element.\n * Frosted-glass surface with a GPU-accelerated hover lift and press feedback.\n */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = 'glass',\n size = 'md',\n loading = false,\n leftIcon,\n rightIcon,\n fullWidth = false,\n className,\n children,\n disabled,\n type = 'button',\n ...rest\n },\n ref,\n) {\n return (\n <button\n ref={ref}\n type={type}\n className={cn(\n 'gl-btn',\n `gl-btn--${variant}`,\n `gl-btn--${size}`,\n fullWidth && 'gl-btn--block',\n loading && 'gl-btn--loading',\n 'gl-focusable',\n className,\n )}\n disabled={disabled || loading}\n aria-busy={loading || undefined}\n {...rest}\n >\n {loading && <span className=\"gl-btn__spinner\" aria-hidden=\"true\" />}\n {!loading && leftIcon ? (\n <span className=\"gl-btn__icon\" aria-hidden=\"true\">\n {leftIcon}\n </span>\n ) : null}\n {children != null ? <span className=\"gl-btn__label\">{children}</span> : null}\n {!loading && rightIcon ? (\n <span className=\"gl-btn__icon\" aria-hidden=\"true\">\n {rightIcon}\n </span>\n ) : null}\n </button>\n );\n});\n","import { forwardRef, type HTMLAttributes } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport type CardVariant = 'glass' | 'solid';\nexport type CardPadding = 'none' | 'sm' | 'md' | 'lg';\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n /** Surface style: frosted `glass` or an opaque `solid` panel. @default 'glass' */\n variant?: CardVariant;\n /** Inner spacing applied to the card and its sections. @default 'md' */\n padding?: CardPadding;\n /** Lift the card on hover with a translateY + stronger shadow. @default false */\n hoverable?: boolean;\n}\n\n/**\n * Card — a frosted-glass surface container.\n * Compose with `CardHeader`, `CardBody`, and `CardFooter` for structured\n * content. Features a radius-lg glass surface and a top-edge sheen.\n */\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n {\n variant = 'glass',\n padding = 'md',\n hoverable = false,\n className,\n children,\n ...rest\n },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\n 'gl-card',\n `gl-card--${variant}`,\n `gl-card--pad-${padding}`,\n hoverable && 'gl-card--hoverable',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n});\n\n/** Props shared by the Card section wrappers (`CardHeader`/`CardBody`/`CardFooter`). */\nexport type CardSectionProps = HTMLAttributes<HTMLDivElement>;\n\n/**\n * CardHeader — top section of a `Card`, separated by a subtle bottom border.\n */\nexport const CardHeader = forwardRef<HTMLDivElement, CardSectionProps>(\n function CardHeader({ className, children, ...rest }, ref) {\n return (\n <div ref={ref} className={cn('gl-card__header', className)} {...rest}>\n {children}\n </div>\n );\n },\n);\n\n/**\n * CardBody — main content region of a `Card`.\n */\nexport const CardBody = forwardRef<HTMLDivElement, CardSectionProps>(\n function CardBody({ className, children, ...rest }, ref) {\n return (\n <div ref={ref} className={cn('gl-card__body', className)} {...rest}>\n {children}\n </div>\n );\n },\n);\n\n/**\n * CardFooter — bottom section of a `Card`, separated by a subtle top border.\n */\nexport const CardFooter = forwardRef<HTMLDivElement, CardSectionProps>(\n function CardFooter({ className, children, ...rest }, ref) {\n return (\n <div ref={ref} className={cn('gl-card__footer', className)} {...rest}>\n {children}\n </div>\n );\n },\n);\n","import {\n forwardRef,\n useCallback,\n useRef,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { useIsomorphicLayoutEffect } from '../../hooks';\n\n/** Box dimension preset for the checkbox control. */\nexport type CheckboxSize = 'sm' | 'md' | 'lg';\n\nexport interface CheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {\n /** Text/label rendered next to the box. Omit for a standalone control (pass `aria-label`). */\n label?: ReactNode;\n /** Show the tri-state \"mixed\" dash. Drives the native `indeterminate` DOM property. */\n indeterminate?: boolean;\n /** Paint the control in the danger color to signal a validation error. */\n error?: boolean;\n /** Size of the check box. @default 'md' */\n boxSize?: CheckboxSize;\n}\n\n/**\n * Checkbox — a custom-styled, fully accessible checkbox.\n * Wraps a visually hidden native `input[type=checkbox]` so keyboard,\n * form submission, and screen-reader semantics are preserved while a\n * frosted-glass box renders the check/indeterminate state.\n */\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n function Checkbox(\n {\n label,\n indeterminate = false,\n error = false,\n boxSize = 'md',\n className,\n disabled,\n ...rest\n },\n ref,\n ) {\n const innerRef = useRef<HTMLInputElement | null>(null);\n\n // Merge the forwarded ref with our internal ref so we can drive the\n // native `indeterminate` property (which has no HTML attribute).\n const setRef = useCallback(\n (node: HTMLInputElement | null) => {\n innerRef.current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n },\n [ref],\n );\n\n useIsomorphicLayoutEffect(() => {\n if (innerRef.current) {\n innerRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n return (\n <label\n className={cn(\n 'gl-checkbox',\n `gl-checkbox--${boxSize}`,\n error && 'gl-checkbox--error',\n disabled && 'gl-checkbox--disabled',\n className,\n )}\n >\n <input\n ref={setRef}\n type=\"checkbox\"\n className=\"gl-sr-only gl-checkbox__input\"\n disabled={disabled}\n aria-invalid={error || undefined}\n {...rest}\n />\n <span className=\"gl-checkbox__box\" aria-hidden=\"true\">\n <svg\n className=\"gl-checkbox__check\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.5 8.5L6.5 11.5L12.5 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <span className=\"gl-checkbox__dash\" />\n </span>\n {label != null ? (\n <span className=\"gl-checkbox__label\">{label}</span>\n ) : null}\n </label>\n );\n },\n);\n","import { useState, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useIsomorphicLayoutEffect } from '../../hooks/useIsomorphicLayoutEffect';\n\nexport interface PortalProps {\n children: ReactNode;\n /** Where to mount. Defaults to document.body. */\n container?: HTMLElement | null;\n}\n\n/**\n * Renders children into document.body (or a custom container) via a React\n * portal. SSR-safe: renders nothing until mounted on the client, so it never\n * touches `document` during server rendering (Next.js friendly).\n */\nexport function Portal({ children, container }: PortalProps) {\n const [mounted, setMounted] = useState(false);\n\n useIsomorphicLayoutEffect(() => {\n setMounted(true);\n return () => setMounted(false);\n }, []);\n\n if (!mounted || typeof document === 'undefined') return null;\n return createPortal(children, container ?? document.body);\n}\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n type CSSProperties,\n type ForwardedRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { Portal } from '../Portal';\nimport { useScrollLock } from '../../hooks';\n\n/** Edge the drawer panel is pinned to. */\nexport type DrawerSide = 'left' | 'right' | 'top' | 'bottom';\n\nexport interface DrawerProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Whether the drawer is currently open (visible). */\n isOpen: boolean;\n /** Called when a close is requested — Esc key, backdrop click, or close button. */\n onClose: () => void;\n /** Panel content. Compose with `DrawerHeader` / `DrawerBody` / `DrawerFooter`. */\n children: ReactNode;\n /** Screen edge the panel slides in from. @default 'right' */\n side?: DrawerSide;\n /** Panel width (left/right) or height (top/bottom). Numbers are treated as px. @default '340px' */\n size?: string | number;\n /** Optional heading rendered in a built-in header row alongside the close button. */\n title?: ReactNode;\n /** Close the drawer when the backdrop is clicked. @default true */\n closeOnBackdrop?: boolean;\n /** Close the drawer when the Escape key is pressed. @default true */\n closeOnEsc?: boolean;\n /** Render the built-in close button in the header. @default true */\n showClose?: boolean;\n}\n\n/** Assign a node to a forwarded ref, whether it is a callback or an object ref. */\nfunction assignRef<T>(ref: ForwardedRef<T>, node: T | null): void {\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n}\n\n/**\n * Drawer — a frosted-glass edge sheet.\n * Renders through a `Portal`, pins a glass panel to the chosen screen edge,\n * and slides it in with the matching GPU keyframe. Locks body scroll, closes\n * on Esc / backdrop click, traps initial focus on the panel, and exposes\n * `role=\"dialog\"` with `aria-modal`. The forwarded ref points at the panel.\n */\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(function Drawer(\n {\n isOpen,\n onClose,\n children,\n side = 'right',\n size = '340px',\n title,\n closeOnBackdrop = true,\n closeOnEsc = true,\n showClose = true,\n className,\n style,\n ...rest\n },\n ref,\n) {\n const panelRef = useRef<HTMLDivElement | null>(null);\n const previousFocusRef = useRef<HTMLElement | null>(null);\n const reactId = useId();\n const titleId = `${reactId}-title`;\n\n useScrollLock(isOpen);\n\n const setPanelRef = useCallback(\n (node: HTMLDivElement | null) => {\n panelRef.current = node;\n assignRef(ref, node);\n },\n [ref],\n );\n\n // Close on Escape.\n useEffect(() => {\n if (!isOpen || !closeOnEsc) return;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.stopPropagation();\n onClose();\n }\n };\n document.addEventListener('keydown', onKeyDown);\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [isOpen, closeOnEsc, onClose]);\n\n // Move focus onto the panel when it opens, then restore it on close/unmount.\n useEffect(() => {\n if (!isOpen) return;\n previousFocusRef.current = document.activeElement as HTMLElement | null;\n panelRef.current?.focus();\n return () => {\n previousFocusRef.current?.focus?.();\n };\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n const isHorizontal = side === 'left' || side === 'right';\n const sizeValue = typeof size === 'number' ? `${size}px` : size;\n const panelStyle: CSSProperties = {\n ...style,\n ...(isHorizontal ? { width: sizeValue } : { height: sizeValue }),\n };\n\n const hasHeader = title != null || showClose;\n\n return (\n <Portal>\n <div className=\"gl-drawer\">\n <div\n className=\"gl-drawer__backdrop\"\n aria-hidden=\"true\"\n onClick={closeOnBackdrop ? onClose : undefined}\n />\n <div\n ref={setPanelRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title != null ? titleId : undefined}\n tabIndex={-1}\n style={panelStyle}\n className={cn(\n 'gl-drawer__panel',\n `gl-drawer__panel--${side}`,\n 'gl-focusable',\n className,\n )}\n {...rest}\n >\n {hasHeader ? (\n <div className=\"gl-drawer__header\">\n {title != null ? (\n <h2 id={titleId} className=\"gl-drawer__title\">\n {title}\n </h2>\n ) : null}\n {showClose ? (\n <button\n type=\"button\"\n className=\"gl-drawer__close gl-focusable\"\n aria-label=\"Close\"\n onClick={onClose}\n >\n <svg\n viewBox=\"0 0 24 24\"\n width=\"18\"\n height=\"18\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 6l12 12M18 6L6 18\" />\n </svg>\n </button>\n ) : null}\n </div>\n ) : null}\n {children}\n </div>\n </div>\n </Portal>\n );\n});\n\n/** Props shared by the Drawer section wrappers (`DrawerHeader`/`DrawerBody`/`DrawerFooter`). */\nexport type DrawerSectionProps = HTMLAttributes<HTMLDivElement>;\n\n/**\n * DrawerHeader — pinned top section of a `Drawer`, separated by a bottom border.\n * Use instead of the built-in `title` header when you need custom header markup.\n */\nexport const DrawerHeader = forwardRef<HTMLDivElement, DrawerSectionProps>(\n function DrawerHeader({ className, children, ...rest }, ref) {\n return (\n <div ref={ref} className={cn('gl-drawer__header', className)} {...rest}>\n {children}\n </div>\n );\n },\n);\n\n/**\n * DrawerBody — the scrollable main content region of a `Drawer`.\n * Grows to fill remaining space and scrolls its own overflow.\n */\nexport const DrawerBody = forwardRef<HTMLDivElement, DrawerSectionProps>(\n function DrawerBody({ className, children, ...rest }, ref) {\n return (\n <div ref={ref} className={cn('gl-drawer__body', className)} {...rest}>\n {children}\n </div>\n );\n },\n);\n\n/**\n * DrawerFooter — pinned bottom section of a `Drawer`, separated by a top border.\n */\nexport const DrawerFooter = forwardRef<HTMLDivElement, DrawerSectionProps>(\n function DrawerFooter({ className, children, ...rest }, ref) {\n return (\n <div ref={ref} className={cn('gl-drawer__footer', className)} {...rest}>\n {children}\n </div>\n );\n },\n);\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useId,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type MouseEvent as ReactMouseEvent,\n type KeyboardEvent as ReactKeyboardEvent,\n type MutableRefObject,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { useClickOutside, useControllableState } from '../../hooks';\n\n/** Corner of the trigger the menu anchors to. */\nexport type DropdownPlacement =\n | 'bottom-start'\n | 'bottom-end'\n | 'top-start'\n | 'top-end';\n\ninterface DropdownContextValue {\n /** Whether the menu is currently open. */\n open: boolean;\n /** Imperatively set the open state (respects controlled usage). */\n setOpen: (open: boolean) => void;\n /** Anchor corner for the menu. */\n placement: DropdownPlacement;\n /** id of the trigger button (menu is labelled by it). */\n triggerId: string;\n /** id of the menu element (trigger controls it). */\n menuId: string;\n /** Ref to the trigger button, used to restore focus on close. */\n triggerRef: MutableRefObject<HTMLButtonElement | null>;\n /** Ref to the menu element, used for focus/keyboard management. */\n menuRef: MutableRefObject<HTMLDivElement | null>;\n /** Close the menu and return focus to the trigger (used on item select). */\n closeAndFocusTrigger: () => void;\n}\n\nconst DropdownContext = createContext<DropdownContextValue | null>(null);\n\nfunction useDropdownContext(part: string): DropdownContextValue {\n const ctx = useContext(DropdownContext);\n if (!ctx) {\n throw new Error(`${part} must be rendered inside a <Dropdown>.`);\n }\n return ctx;\n}\n\nconst ITEM_SELECTOR =\n '[role=\"menuitem\"]:not([disabled]):not([aria-disabled=\"true\"])';\n\n/** Collect the currently focusable menu items in DOM order. */\nfunction getMenuItems(menu: HTMLDivElement | null): HTMLElement[] {\n if (!menu) return [];\n return Array.from(menu.querySelectorAll<HTMLElement>(ITEM_SELECTOR));\n}\n\n/** Assign a value to either a callback ref or an object ref. */\nfunction assignRef<T>(ref: Ref<T> | undefined, value: T | null): void {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref) {\n (ref as MutableRefObject<T | null>).current = value;\n }\n}\n\nexport interface DropdownProps {\n /** Controlled open state. Provide together with `onOpenChange`. */\n open?: boolean;\n /** Initial open state when uncontrolled. @default false */\n defaultOpen?: boolean;\n /** Called whenever the open state should change. */\n onOpenChange?: (open: boolean) => void;\n /** Corner of the trigger the menu anchors to. @default 'bottom-start' */\n placement?: DropdownPlacement;\n /** Trigger and menu parts (`DropdownTrigger`, `DropdownMenu`, …). */\n children: ReactNode;\n}\n\n/**\n * Dropdown — a compound menu-button.\n * Provides open state, placement, and focus management via context to its\n * `DropdownTrigger` and `DropdownMenu` parts. Closes on outside click and Esc,\n * with roving arrow-key navigation across items.\n */\nexport function Dropdown({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n placement = 'bottom-start',\n children,\n}: DropdownProps) {\n const [open, setOpen] = useControllableState<boolean>({\n value: openProp,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n\n const rootRef = useRef<HTMLSpanElement | null>(null);\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const menuRef = useRef<HTMLDivElement | null>(null);\n\n const reactId = useId();\n const triggerId = `${reactId}-trigger`;\n const menuId = `${reactId}-menu`;\n\n const close = useCallback(() => setOpen(false), [setOpen]);\n\n const closeAndFocusTrigger = useCallback(() => {\n setOpen(false);\n triggerRef.current?.focus();\n }, [setOpen]);\n\n // Close when a pointer interaction lands outside the root (only while open).\n useClickOutside(rootRef, close, open);\n\n // Close on Escape and restore focus to the trigger.\n useEffect(() => {\n if (!open) return;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n setOpen(false);\n triggerRef.current?.focus();\n }\n };\n document.addEventListener('keydown', onKeyDown);\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [open, setOpen]);\n\n const value: DropdownContextValue = {\n open,\n setOpen,\n placement,\n triggerId,\n menuId,\n triggerRef,\n menuRef,\n closeAndFocusTrigger,\n };\n\n return (\n <DropdownContext.Provider value={value}>\n <span ref={rootRef} className=\"gl-dropdown\">\n {children}\n </span>\n </DropdownContext.Provider>\n );\n}\n\nexport interface DropdownTriggerProps\n extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Trigger content (text and/or icons). */\n children?: ReactNode;\n}\n\n/**\n * DropdownTrigger — the button that toggles the menu.\n * Wires up `aria-haspopup`, `aria-expanded`, and `aria-controls`, and opens the\n * menu on ArrowUp/ArrowDown.\n */\nexport const DropdownTrigger = forwardRef<\n HTMLButtonElement,\n DropdownTriggerProps\n>(function DropdownTrigger(\n { className, children, onClick, onKeyDown, type = 'button', ...rest },\n ref,\n) {\n const ctx = useDropdownContext('DropdownTrigger');\n\n const setRef = useCallback(\n (node: HTMLButtonElement | null) => {\n ctx.triggerRef.current = node;\n assignRef(ref, node);\n },\n [ctx.triggerRef, ref],\n );\n\n const handleClick = useCallback(\n (event: ReactMouseEvent<HTMLButtonElement>) => {\n ctx.setOpen(!ctx.open);\n onClick?.(event);\n },\n [ctx, onClick],\n );\n\n const handleKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLButtonElement>) => {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n if (!ctx.open) {\n ctx.setOpen(true);\n } else {\n getMenuItems(ctx.menuRef.current)[0]?.focus();\n }\n }\n onKeyDown?.(event);\n },\n [ctx, onKeyDown],\n );\n\n return (\n <button\n ref={setRef}\n type={type}\n id={ctx.triggerId}\n className={cn('gl-dropdown__trigger', 'gl-focusable', className)}\n aria-haspopup=\"menu\"\n aria-expanded={ctx.open}\n aria-controls={ctx.open ? ctx.menuId : undefined}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n {children}\n </button>\n );\n});\n\nexport interface DropdownMenuProps extends HTMLAttributes<HTMLDivElement> {\n /** Menu contents (`DropdownItem`, `DropdownSeparator`, `DropdownLabel`). */\n children?: ReactNode;\n}\n\n/**\n * DropdownMenu — the popover surface holding the items.\n * Renders only while open, positioned per `placement`, with arrow/Home/End\n * roving focus. Auto-focuses the first item when it opens.\n */\nexport const DropdownMenu = forwardRef<HTMLDivElement, DropdownMenuProps>(\n function DropdownMenu({ className, children, onKeyDown, ...rest }, ref) {\n const ctx = useDropdownContext('DropdownMenu');\n const { open, menuRef } = ctx;\n\n const setRef = useCallback(\n (node: HTMLDivElement | null) => {\n menuRef.current = node;\n assignRef(ref, node);\n },\n [menuRef, ref],\n );\n\n // Move focus to the first item when the menu opens.\n useEffect(() => {\n if (!open) return;\n getMenuItems(menuRef.current)[0]?.focus();\n }, [open, menuRef]);\n\n const handleKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n const items = getMenuItems(menuRef.current);\n if (items.length > 0) {\n const active = document.activeElement as HTMLElement | null;\n const currentIndex = active ? items.indexOf(active) : -1;\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault();\n const next = currentIndex < 0 ? 0 : (currentIndex + 1) % items.length;\n items[next]?.focus();\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n const prev =\n currentIndex < 0\n ? items.length - 1\n : (currentIndex - 1 + items.length) % items.length;\n items[prev]?.focus();\n break;\n }\n case 'Home': {\n event.preventDefault();\n items[0]?.focus();\n break;\n }\n case 'End': {\n event.preventDefault();\n items[items.length - 1]?.focus();\n break;\n }\n default:\n break;\n }\n }\n onKeyDown?.(event);\n },\n [menuRef, onKeyDown],\n );\n\n if (!open) return null;\n\n return (\n <div\n ref={setRef}\n id={ctx.menuId}\n role=\"menu\"\n aria-orientation=\"vertical\"\n aria-labelledby={ctx.triggerId}\n tabIndex={-1}\n className={cn(\n 'gl-dropdown__menu',\n `gl-dropdown__menu--${ctx.placement}`,\n className,\n )}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nexport interface DropdownItemProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onSelect'> {\n /** Called when the item is chosen (click or Enter/Space). */\n onSelect?: () => void;\n /** Disable interaction and skip the item during keyboard navigation. */\n disabled?: boolean;\n /** Icon rendered before the item label. */\n leftIcon?: ReactNode;\n /** Item label / content. */\n children?: ReactNode;\n}\n\n/**\n * DropdownItem — a selectable menu row.\n * Activates on click or Enter/Space (native button), then closes the menu and\n * returns focus to the trigger.\n */\nexport const DropdownItem = forwardRef<HTMLButtonElement, DropdownItemProps>(\n function DropdownItem(\n { className, children, onSelect, disabled = false, leftIcon, onClick, type = 'button', ...rest },\n ref,\n ) {\n const ctx = useDropdownContext('DropdownItem');\n\n const handleClick = useCallback(\n (event: ReactMouseEvent<HTMLButtonElement>) => {\n if (disabled) return;\n onClick?.(event);\n onSelect?.();\n ctx.closeAndFocusTrigger();\n },\n [ctx, disabled, onClick, onSelect],\n );\n\n return (\n <button\n ref={ref}\n type={type}\n role=\"menuitem\"\n tabIndex={-1}\n disabled={disabled}\n className={cn('gl-dropdown__item', 'gl-focusable', className)}\n onClick={handleClick}\n {...rest}\n >\n {leftIcon != null ? (\n <span className=\"gl-dropdown__item-icon\" aria-hidden=\"true\">\n {leftIcon}\n </span>\n ) : null}\n <span className=\"gl-dropdown__item-label\">{children}</span>\n </button>\n );\n },\n);\n\n/** Props for the menu separator (a horizontal divider). */\nexport type DropdownSeparatorProps = HTMLAttributes<HTMLDivElement>;\n\n/**\n * DropdownSeparator — a non-interactive horizontal divider between groups.\n */\nexport const DropdownSeparator = forwardRef<\n HTMLDivElement,\n DropdownSeparatorProps\n>(function DropdownSeparator({ className, ...rest }, ref) {\n return (\n <div\n ref={ref}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n className={cn('gl-dropdown__separator', className)}\n {...rest}\n />\n );\n});\n\n/** Props for a non-interactive group label inside the menu. */\nexport type DropdownLabelProps = HTMLAttributes<HTMLDivElement>;\n\n/**\n * DropdownLabel — a small, muted heading that titles a group of items.\n */\nexport const DropdownLabel = forwardRef<HTMLDivElement, DropdownLabelProps>(\n function DropdownLabel({ className, children, ...rest }, ref) {\n return (\n <div\n ref={ref}\n role=\"presentation\"\n className={cn('gl-dropdown__label', className)}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n","import { forwardRef, type InputHTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport type InputVariant = 'glass' | 'subtle';\nexport type InputSize = 'sm' | 'md' | 'lg';\n\nexport interface InputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\n /** Visual surface treatment. @default 'subtle' */\n variant?: InputVariant;\n /** Control height/padding preset. @default 'md' */\n inputSize?: InputSize;\n /** Render the invalid state (danger border + `aria-invalid`). */\n error?: boolean;\n /** Adornment rendered before the field (e.g. a search icon). */\n leftIcon?: ReactNode;\n /** Adornment rendered after the field (e.g. a clear button). */\n rightIcon?: ReactNode;\n /** Stretch the field to fill the container width. */\n fullWidth?: boolean;\n}\n\n/**\n * Input — a single-line text field on a frosted-glass surface.\n * The wrapper lifts its focus ring via `:focus-within` so clicking either the\n * field or its icons keeps the whole control highlighted.\n */\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n variant = 'subtle',\n inputSize = 'md',\n error = false,\n leftIcon,\n rightIcon,\n fullWidth = false,\n className,\n disabled,\n 'aria-invalid': ariaInvalid,\n ...rest\n },\n ref,\n) {\n return (\n <span\n className={cn(\n 'gl-input',\n `gl-input--${variant}`,\n `gl-input--${inputSize}`,\n error && 'gl-input--error',\n fullWidth && 'gl-input--block',\n disabled && 'gl-input--disabled',\n className,\n )}\n >\n {leftIcon != null ? (\n <span className=\"gl-input__icon gl-input__icon--left\" aria-hidden=\"true\">\n {leftIcon}\n </span>\n ) : null}\n <input\n ref={ref}\n className=\"gl-input__field\"\n disabled={disabled}\n aria-invalid={ariaInvalid ?? (error || undefined)}\n {...rest}\n />\n {rightIcon != null ? (\n <span\n className=\"gl-input__icon gl-input__icon--right\"\n aria-hidden=\"true\"\n >\n {rightIcon}\n </span>\n ) : null}\n </span>\n );\n});\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n} from 'react';\nimport type {\n HTMLAttributes,\n MouseEvent as ReactMouseEvent,\n MutableRefObject,\n ReactNode,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { Portal } from '../Portal';\nimport { useScrollLock } from '../../hooks';\n\n/** Preset widths for the modal panel. */\nexport type ModalSize = 'sm' | 'md' | 'lg' | 'full';\n\nexport interface ModalProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Whether the modal is currently visible. */\n isOpen: boolean;\n /** Called when the modal requests to close (Esc, backdrop, close button). */\n onClose: () => void;\n /** Panel contents — typically ModalBody / ModalFooter sections. */\n children: ReactNode;\n /** Optional heading rendered in the panel header; also labels the dialog. */\n title?: ReactNode;\n /** Preset panel width. @default 'md' */\n size?: ModalSize;\n /** Close when the backdrop (area outside the panel) is clicked. @default true */\n closeOnBackdrop?: boolean;\n /** Close when the Escape key is pressed. @default true */\n closeOnEsc?: boolean;\n /** Render the header close button. @default true */\n showClose?: boolean;\n}\n\n/**\n * Modal — an accessible, glassmorphic dialog rendered in a Portal.\n *\n * Traps the page behind a frosted backdrop, locks body scroll while open,\n * closes on Escape / backdrop click, and moves focus to the panel on open\n * (restoring it to the previously-focused element on close).\n */\nexport const Modal = forwardRef<HTMLDivElement, ModalProps>(function Modal(\n {\n isOpen,\n onClose,\n children,\n title,\n size = 'md',\n closeOnBackdrop = true,\n closeOnEsc = true,\n showClose = true,\n className,\n ...rest\n },\n ref,\n) {\n const titleId = useId();\n const panelRef = useRef<HTMLDivElement | null>(null);\n\n // Merge the forwarded ref with our internal panel ref.\n const setPanelRef = useCallback(\n (node: HTMLDivElement | null) => {\n panelRef.current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as MutableRefObject<HTMLDivElement | null>).current = node;\n }\n },\n [ref],\n );\n\n // Prevent the page behind the modal from scrolling while it is open.\n useScrollLock(isOpen);\n\n // Close on Escape — listener only attached while open.\n useEffect(() => {\n if (!isOpen || !closeOnEsc) return;\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.stopPropagation();\n onClose();\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, closeOnEsc, onClose]);\n\n // Move focus into the panel on open; restore it to the opener on close.\n useEffect(() => {\n if (!isOpen) return;\n const previouslyFocused =\n typeof document !== 'undefined'\n ? (document.activeElement as HTMLElement | null)\n : null;\n panelRef.current?.focus();\n return () => {\n previouslyFocused?.focus?.();\n };\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n const handleBackdropClick = (event: ReactMouseEvent<HTMLDivElement>) => {\n if (closeOnBackdrop && event.target === event.currentTarget) {\n onClose();\n }\n };\n\n const hasHeader = title != null || showClose;\n\n return (\n <Portal>\n <div className=\"gl-modal__backdrop\" onClick={handleBackdropClick}>\n <div\n ref={setPanelRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title != null ? titleId : undefined}\n tabIndex={-1}\n className={cn(\n 'gl-modal__panel',\n `gl-modal__panel--${size}`,\n 'gl-focusable',\n className,\n )}\n {...rest}\n >\n {hasHeader ? (\n <header className=\"gl-modal__header\">\n {title != null ? (\n <h2 id={titleId} className=\"gl-modal__title\">\n {title}\n </h2>\n ) : null}\n {showClose ? (\n <button\n type=\"button\"\n className=\"gl-modal__close gl-focusable\"\n aria-label=\"Close\"\n onClick={onClose}\n >\n <svg\n viewBox=\"0 0 24 24\"\n width=\"1em\"\n height=\"1em\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 6l12 12M18 6L6 18\" />\n </svg>\n </button>\n ) : null}\n </header>\n ) : null}\n {children}\n </div>\n </div>\n </Portal>\n );\n});\n\n/** Props for {@link ModalHeader}. Accepts all native `<div>` attributes. */\nexport type ModalHeaderProps = HTMLAttributes<HTMLDivElement>;\n\n/** Optional custom header section for use inside a Modal panel. */\nexport const ModalHeader = forwardRef<HTMLDivElement, ModalHeaderProps>(\n function ModalHeader({ className, children, ...rest }, ref) {\n return (\n <div ref={ref} className={cn('gl-modal__header', className)} {...rest}>\n {children}\n </div>\n );\n },\n);\n\n/** Props for {@link ModalBody}. Accepts all native `<div>` attributes. */\nexport type ModalBodyProps = HTMLAttributes<HTMLDivElement>;\n\n/** Scrollable main content section for use inside a Modal panel. */\nexport const ModalBody = forwardRef<HTMLDivElement, ModalBodyProps>(\n function ModalBody({ className, children, ...rest }, ref) {\n return (\n <div ref={ref} className={cn('gl-modal__body', className)} {...rest}>\n {children}\n </div>\n );\n },\n);\n\n/** Props for {@link ModalFooter}. Accepts all native `<div>` attributes. */\nexport type ModalFooterProps = HTMLAttributes<HTMLDivElement>;\n\n/** Footer section (typically actions) for use inside a Modal panel. */\nexport const ModalFooter = forwardRef<HTMLDivElement, ModalFooterProps>(\n function ModalFooter({ className, children, ...rest }, ref) {\n return (\n <div ref={ref} className={cn('gl-modal__footer', className)} {...rest}>\n {children}\n </div>\n );\n },\n);\n","import { forwardRef, type HTMLAttributes, type CSSProperties } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport type ProgressSize = 'sm' | 'md' | 'lg';\nexport type ProgressColor =\n | 'primary'\n | 'success'\n | 'danger'\n | 'warning'\n | 'info';\n\nexport interface ProgressProps extends HTMLAttributes<HTMLDivElement> {\n /** Current progress, clamped to the range 0..max. Ignored when `indeterminate`. @default 0 */\n value?: number;\n /** Upper bound of the progress range. @default 100 */\n max?: number;\n /** Loop an animated partial bar for work of unknown duration. @default false */\n indeterminate?: boolean;\n /** Thickness of the track/fill. @default 'md' */\n barSize?: ProgressSize;\n /** Fill accent color. @default 'primary' */\n color?: ProgressColor;\n /** Render a live percentage label beside the track (determinate only). @default false */\n showLabel?: boolean;\n}\n\n/**\n * Progress — a linear glass progress bar.\n *\n * Determinate mode reveals the fill with a GPU-friendly `scaleX` transform driven\n * by an inline `--gl-progress-value` custom property (value / max), so updates\n * animate smoothly without touching layout. Indeterminate mode loops a partial bar\n * for work of unknown length. Exposes the `progressbar` role with matching\n * `aria-value*` attributes (`aria-valuenow` is omitted while indeterminate).\n */\nexport const Progress = forwardRef<HTMLDivElement, ProgressProps>(function Progress(\n {\n value = 0,\n max = 100,\n indeterminate = false,\n barSize = 'md',\n color = 'primary',\n showLabel = false,\n className,\n ...rest\n },\n ref,\n) {\n const safeMax = max > 0 ? max : 100;\n const clamped = Math.min(Math.max(value, 0), safeMax);\n const ratio = clamped / safeMax;\n const percent = Math.round(ratio * 100);\n\n const barStyle = indeterminate\n ? undefined\n : ({ '--gl-progress-value': ratio } as CSSProperties);\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={safeMax}\n aria-valuenow={indeterminate ? undefined : clamped}\n aria-valuetext={indeterminate ? undefined : `${percent}%`}\n className={cn(\n 'gl-progress',\n `gl-progress--${barSize}`,\n `gl-progress--${color}`,\n className,\n )}\n {...rest}\n >\n <div className=\"gl-progress__track\">\n <div\n className={cn(\n 'gl-progress__bar',\n indeterminate && 'gl-progress__bar--indeterminate',\n )}\n style={barStyle}\n />\n </div>\n {showLabel && !indeterminate ? (\n <span className=\"gl-progress__label\">{percent}%</span>\n ) : null}\n </div>\n );\n});\n","import {\n createContext,\n forwardRef,\n useContext,\n useId,\n useMemo,\n type HTMLAttributes,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { useControllableState } from '../../hooks';\n\n/** Layout direction for the radios inside a {@link RadioGroup}. */\nexport type RadioGroupOrientation = 'vertical' | 'horizontal';\n\n/** Value shared through {@link RadioGroupContext} to every descendant {@link Radio}. */\nexport interface RadioGroupContextValue {\n /** The `name` applied to every radio input so the browser treats them as one group. */\n name: string;\n /** The currently selected value, or an empty string when nothing is selected yet. */\n value: string | undefined;\n /** Select the radio identified by `value`. */\n setValue: (value: string) => void;\n}\n\n/**\n * Context published by {@link RadioGroup}. Consumed internally by {@link Radio};\n * exported for advanced compositions that need to read or drive the selection.\n */\nexport const RadioGroupContext = createContext<RadioGroupContextValue | null>(\n null,\n);\n\nfunction useRadioGroupContext(component: string): RadioGroupContextValue {\n const ctx = useContext(RadioGroupContext);\n if (ctx === null) {\n throw new Error(\n `Glasswind: <${component}> must be rendered inside a <RadioGroup>.`,\n );\n }\n return ctx;\n}\n\nexport interface RadioGroupProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {\n /** Controlled selected value. Provide together with `onChange`. */\n value?: string;\n /** Initial selected value when the group is uncontrolled. */\n defaultValue?: string;\n /** Fired with the newly selected value whenever the selection changes. */\n onChange?: (value: string) => void;\n /** Shared `name` for every radio input; auto-generated when omitted. */\n name?: string;\n /** Direction the radios are laid out. @default 'vertical' */\n orientation?: RadioGroupOrientation;\n /** The `<Radio>` children that make up the group. */\n children?: ReactNode;\n}\n\n/**\n * RadioGroup — owns the selected value and shares it with its {@link Radio}\n * children through context. Works controlled (`value` + `onChange`) or\n * uncontrolled (`defaultValue`). Native radio semantics give arrow-key\n * navigation between options for free.\n */\nexport const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(\n function RadioGroup(\n {\n value,\n defaultValue,\n onChange,\n name,\n orientation = 'vertical',\n className,\n children,\n ...rest\n },\n ref,\n ) {\n const fallbackName = useId();\n const [selected, setSelected] = useControllableState<string>({\n value,\n defaultValue: defaultValue ?? '',\n onChange,\n });\n\n const ctx = useMemo<RadioGroupContextValue>(\n () => ({\n name: name ?? fallbackName,\n value: selected,\n setValue: setSelected,\n }),\n [name, fallbackName, selected, setSelected],\n );\n\n return (\n <div\n ref={ref}\n role=\"radiogroup\"\n aria-orientation={orientation}\n className={cn(\n 'gl-radio-group',\n `gl-radio-group--${orientation}`,\n className,\n )}\n {...rest}\n >\n <RadioGroupContext.Provider value={ctx}>\n {children}\n </RadioGroupContext.Provider>\n </div>\n );\n },\n);\n\nexport interface RadioProps\n extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'value' | 'type' | 'onChange' | 'checked' | 'defaultChecked' | 'name'\n > {\n /** The value this radio contributes; selected when it equals the group value. */\n value: string;\n /** Content rendered beside the control as the visible, clickable label. */\n label?: ReactNode;\n /** Prevent selection and mute the control. @default false */\n disabled?: boolean;\n}\n\n/**\n * Radio — a single frosted-glass option within a {@link RadioGroup}. Reads the\n * shared selection from context and renders a visually hidden native\n * `input[type=\"radio\"]` (keeping full keyboard + form semantics) alongside a\n * glass dot whose inner primary mark scales in when selected.\n */\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(function Radio(\n { value, label, disabled = false, className, ...rest },\n ref,\n) {\n const ctx = useRadioGroupContext('Radio');\n const checked = ctx.value === value;\n\n return (\n <label\n className={cn(\n 'gl-radio',\n checked && 'gl-radio--checked',\n disabled && 'gl-radio--disabled',\n className,\n )}\n >\n <input\n ref={ref}\n type=\"radio\"\n className=\"gl-sr-only gl-radio__input\"\n name={ctx.name}\n value={value}\n checked={checked}\n disabled={disabled}\n onChange={() => ctx.setValue(value)}\n {...rest}\n />\n <span className=\"gl-radio__dot\" aria-hidden=\"true\">\n <span className=\"gl-radio__mark\" />\n </span>\n {label != null ? <span className=\"gl-radio__label\">{label}</span> : null}\n </label>\n );\n});\n","import {\n forwardRef,\n type ReactNode,\n type SelectHTMLAttributes,\n} from 'react';\nimport { cn } from '../../utils/cn';\n\n/** A single choice rendered as an `<option>` inside the Select. */\nexport interface SelectOption {\n /** Human-readable text shown for this option. */\n label: string;\n /** Value reported/submitted when this option is chosen. */\n value: string | number;\n /** Prevent this option from being selectable. @default false */\n disabled?: boolean;\n}\n\n/** Control height, padding and font scale of the Select. */\nexport type SelectSize = 'sm' | 'md' | 'lg';\n\nexport interface SelectProps\n extends Omit<SelectHTMLAttributes<HTMLSelectElement>, 'size'> {\n /** Options to render as `<option>`s. Omit to supply your own `children` instead. */\n options?: SelectOption[];\n /** Non-selectable prompt shown before a value is chosen. */\n placeholder?: string;\n /** Control height/padding/font scale. @default 'md' */\n selectSize?: SelectSize;\n /** Render the invalid/danger styling and set `aria-invalid`. @default false */\n error?: boolean;\n /** Stretch the control to fill its container width. @default false */\n fullWidth?: boolean;\n /** Custom `<option>` markup. Ignored when `options` is provided. */\n children?: ReactNode;\n}\n\n/**\n * Select — a styled, fully accessible wrapper around the native `<select>`.\n *\n * Keeps the reliability and built-in keyboard/screen-reader support of the\n * platform control while hiding the native arrow and presenting a frosted-glass\n * surface with a custom chevron, focus-within ring and error state.\n */\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(function Select(\n {\n options,\n placeholder,\n selectSize = 'md',\n error = false,\n fullWidth = false,\n className,\n children,\n disabled,\n value,\n defaultValue,\n 'aria-invalid': ariaInvalid,\n ...rest\n },\n ref,\n) {\n const isControlled = value !== undefined;\n // When left uncontrolled with a placeholder, default the selection to the\n // empty placeholder option so the prompt shows until the user picks a value.\n const resolvedDefaultValue =\n !isControlled && defaultValue === undefined && placeholder != null\n ? ''\n : defaultValue;\n\n const selectionProps = isControlled\n ? { value }\n : { defaultValue: resolvedDefaultValue };\n\n return (\n <span\n className={cn(\n 'gl-select',\n `gl-select--${selectSize}`,\n error && 'gl-select--error',\n fullWidth && 'gl-select--block',\n disabled && 'gl-select--disabled',\n className,\n )}\n >\n <select\n ref={ref}\n className=\"gl-select__field\"\n disabled={disabled}\n aria-invalid={ariaInvalid ?? (error || undefined)}\n {...selectionProps}\n {...rest}\n >\n {placeholder != null ? (\n <option value=\"\" disabled hidden>\n {placeholder}\n </option>\n ) : null}\n {options\n ? options.map((opt) => (\n <option\n key={String(opt.value)}\n value={opt.value}\n disabled={opt.disabled}\n >\n {opt.label}\n </option>\n ))\n : children}\n </select>\n <span className=\"gl-select__chevron\" aria-hidden=\"true\">\n <svg\n viewBox=\"0 0 24 24\"\n width=\"1em\"\n height=\"1em\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </span>\n </span>\n );\n});\n","import {\n forwardRef,\n type ChangeEvent,\n type CSSProperties,\n type InputHTMLAttributes,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { useControllableState } from '../../hooks';\n\nexport interface SliderProps\n extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'size' | 'value' | 'defaultValue' | 'onChange'\n > {\n /** Lowest selectable value. @default 0 */\n min?: number;\n /** Highest selectable value. @default 100 */\n max?: number;\n /** Granularity the value snaps to. @default 1 */\n step?: number;\n /** Controlled value. Provide together with `onChange`. */\n value?: number;\n /** Initial value when uncontrolled. Falls back to `min`. */\n defaultValue?: number;\n /** Fires with the new numeric value whenever the user drags or keys. */\n onChange?: (value: number) => void;\n /** Render a floating glass bubble with the live value above the thumb. @default false */\n showValue?: boolean;\n}\n\n/**\n * Slider — a styled range input on a frosted-glass track.\n * The filled portion is driven by the `--gl-slider-fill` custom property so the\n * gradient track and optional value bubble stay in sync with the thumb.\n * Works controlled (`value` + `onChange`) or uncontrolled (`defaultValue`).\n */\nexport const Slider = forwardRef<HTMLInputElement, SliderProps>(function Slider(\n {\n min = 0,\n max = 100,\n step = 1,\n value,\n defaultValue,\n onChange,\n showValue = false,\n className,\n style,\n disabled,\n ...rest\n },\n ref,\n) {\n const [current, setValue] = useControllableState<number>({\n value,\n defaultValue: defaultValue ?? min,\n onChange,\n });\n\n const range = max - min;\n const clamped = Math.min(max, Math.max(min, current));\n const fillPct = range > 0 ? ((clamped - min) / range) * 100 : 0;\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const next = event.target.valueAsNumber;\n setValue(Number.isNaN(next) ? min : next);\n };\n\n const wrapperStyle = {\n ...style,\n '--gl-slider-fill': `${fillPct}%`,\n } as CSSProperties;\n\n return (\n <span\n className={cn(\n 'gl-slider',\n showValue && 'gl-slider--show-value',\n disabled && 'gl-slider--disabled',\n className,\n )}\n style={wrapperStyle}\n >\n <input\n ref={ref}\n type=\"range\"\n className=\"gl-slider__input\"\n min={min}\n max={max}\n step={step}\n value={clamped}\n disabled={disabled}\n onChange={handleChange}\n {...rest}\n />\n {showValue ? (\n <span className=\"gl-slider__value\" aria-hidden=\"true\">\n {current}\n </span>\n ) : null}\n </span>\n );\n});\n","import { forwardRef, type CSSProperties, type HTMLAttributes } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport type SpinnerSize = 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLSpanElement> {\n /** Diameter preset controlling width/height. @default 'md' */\n size?: SpinnerSize;\n /** Accessible, visually-hidden status text announced to screen readers. @default 'Loading' */\n label?: string;\n /** Ring border width in pixels. Falls back to a size-derived default when omitted. */\n thickness?: number;\n}\n\n/**\n * Spinner — a compact loading indicator.\n * Renders a frosted-friendly circular ring that rotates via the shared\n * `gl-spin` keyframe. Color follows `currentColor`, so it inherits the\n * surrounding text color. Exposes `role=\"status\"` with a visually-hidden\n * label so assistive tech announces the loading state.\n */\nexport const Spinner = forwardRef<HTMLSpanElement, SpinnerProps>(function Spinner(\n { size = 'md', label = 'Loading', thickness, className, style, ...rest },\n ref,\n) {\n const styleWithThickness =\n thickness != null\n ? ({ ...style, '--gl-spinner-bw': `${thickness}px` } as CSSProperties)\n : style;\n\n return (\n <span\n ref={ref}\n role=\"status\"\n aria-live=\"polite\"\n className={cn('gl-spinner', `gl-spinner--${size}`, className)}\n style={styleWithThickness}\n {...rest}\n >\n <span className=\"gl-spinner__ring\" aria-hidden=\"true\" />\n <span className=\"gl-sr-only\">{label}</span>\n </span>\n );\n});\n","import {\n forwardRef,\n useId,\n type ChangeEvent,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { useControllableState } from '../../hooks';\n\nexport type SwitchSize = 'sm' | 'md' | 'lg';\n\nexport interface SwitchProps\n extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'onChange' | 'checked' | 'defaultChecked'\n > {\n /** Controlled checked state. Provide together with `onChange`; omit for uncontrolled usage. */\n checked?: boolean;\n /** Initial checked state when the switch is uncontrolled. @default false */\n defaultChecked?: boolean;\n /** Called with the next checked value each time the switch toggles. */\n onChange?: (checked: boolean) => void;\n /** Visible text rendered beside the track and used as the accessible name. */\n label?: ReactNode;\n /** Control the track and thumb dimensions. @default 'md' */\n switchSize?: SwitchSize;\n /** Disable interaction and dim the control. @default false */\n disabled?: boolean;\n}\n\n/**\n * Switch — an accessible on/off toggle with a frosted-glass track and a\n * spring-animated thumb. Renders a visually-hidden native checkbox (exposing\n * `role=\"switch\"`) so keyboard, form, and screen-reader behaviour come for\n * free. Works in both controlled and uncontrolled modes.\n */\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(function Switch(\n {\n checked,\n defaultChecked = false,\n onChange,\n label,\n switchSize = 'md',\n disabled = false,\n className,\n id,\n ...rest\n },\n ref,\n) {\n const reactId = useId();\n const inputId = id ?? reactId;\n\n const [isChecked, setChecked] = useControllableState<boolean>({\n value: checked,\n defaultValue: defaultChecked,\n onChange,\n });\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>): void => {\n setChecked(event.target.checked);\n };\n\n return (\n <label\n className={cn(\n 'gl-switch',\n `gl-switch--${switchSize}`,\n isChecked && 'gl-switch--checked',\n disabled && 'gl-switch--disabled',\n className,\n )}\n htmlFor={inputId}\n >\n <input\n ref={ref}\n id={inputId}\n type=\"checkbox\"\n role=\"switch\"\n className=\"gl-switch__input gl-sr-only\"\n checked={isChecked}\n disabled={disabled}\n onChange={handleChange}\n {...rest}\n />\n <span className=\"gl-switch__track\" aria-hidden=\"true\">\n <span className=\"gl-switch__thumb\" />\n </span>\n {label != null ? (\n <span className=\"gl-switch__label\">{label}</span>\n ) : null}\n </label>\n );\n});\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useId,\n useMemo,\n useReducer,\n useRef,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type KeyboardEvent,\n type MouseEvent,\n type MutableRefObject,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { useControllableState, useIsomorphicLayoutEffect } from '../../hooks';\n\n/* ------------------------------------------------------------------ */\n/* Context */\n/* ------------------------------------------------------------------ */\n\ninterface TabsContextValue {\n /** Stable prefix (from useId) that namespaces every tab/panel id. */\n baseId: string;\n /** Currently selected tab value, or undefined when nothing is selected. */\n activeValue: string | undefined;\n /** Select a tab by value (no-op when it is already active). */\n setActiveValue: (value: string) => void;\n /** The single tab that participates in the page tab order (roving focus). */\n focusableValue: string | undefined;\n /** Record a tab's value in DOM order (called on mount). */\n registerTab: (value: string) => void;\n /** Drop a tab's value from the registry (called on unmount). */\n unregisterTab: (value: string) => void;\n /** Keep a registered tab's disabled state in sync. */\n setTabDisabled: (value: string, disabled: boolean) => void;\n /** Deterministic id for a tab element. */\n getTabId: (value: string) => string;\n /** Deterministic id for a panel element. */\n getPanelId: (value: string) => string;\n}\n\nconst TabsContext = createContext<TabsContextValue | null>(null);\n\nfunction useTabsContext(component: string): TabsContextValue {\n const ctx = useContext(TabsContext);\n if (!ctx) {\n throw new Error(`<${component}> must be rendered inside <Tabs>.`);\n }\n return ctx;\n}\n\nconst idSafe = (value: string): string => value.replace(/\\s+/g, '-');\n\n/* ------------------------------------------------------------------ */\n/* Tabs (root / context provider) */\n/* ------------------------------------------------------------------ */\n\nexport interface TabsProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Controlled active tab value. Provide together with `onChange`. */\n value?: string;\n /** Initial active tab value when uncontrolled. */\n defaultValue?: string;\n /** Fired with the newly selected tab value whenever the selection changes. */\n onChange?: (value: string) => void;\n /** `TabList` and `TabPanel` descendants. */\n children?: ReactNode;\n}\n\n/**\n * Tabs — accessible, compound tab set built on React context.\n * Wrap a `TabList` (with `Tab` children) and matching `TabPanel`s.\n * Works controlled (`value` + `onChange`) or uncontrolled (`defaultValue`).\n */\nexport const Tabs = forwardRef<HTMLDivElement, TabsProps>(function Tabs(\n { value, defaultValue, onChange, className, children, ...rest },\n ref,\n) {\n const baseId = useId();\n\n const [activeValue, setControllableValue] = useControllableState<\n string | undefined\n >({\n value,\n defaultValue,\n onChange: onChange\n ? (next) => {\n if (next !== undefined) onChange(next);\n }\n : undefined,\n });\n\n // Ordered registry of tab values + their disabled state. Kept in refs so\n // registration never re-triggers the effects that own it; `bump` forces a\n // render when the derived focusable tab could have changed.\n const orderRef = useRef<string[]>([]);\n const disabledRef = useRef<Map<string, boolean>>(new Map());\n const [, bump] = useReducer((n: number) => n + 1, 0);\n\n const registerTab = useCallback((v: string) => {\n if (orderRef.current.includes(v)) return;\n orderRef.current = [...orderRef.current, v];\n if (!disabledRef.current.has(v)) disabledRef.current.set(v, false);\n bump();\n }, []);\n\n const unregisterTab = useCallback((v: string) => {\n if (!orderRef.current.includes(v)) return;\n orderRef.current = orderRef.current.filter((x) => x !== v);\n disabledRef.current.delete(v);\n bump();\n }, []);\n\n const setTabDisabled = useCallback((v: string, disabled: boolean) => {\n if (disabledRef.current.get(v) === disabled) return;\n disabledRef.current.set(v, disabled);\n bump();\n }, []);\n\n const activeValueRef = useRef(activeValue);\n activeValueRef.current = activeValue;\n const setActiveValue = useCallback(\n (v: string) => {\n if (activeValueRef.current === v) return;\n setControllableValue(v);\n },\n [setControllableValue],\n );\n\n const getTabId = useCallback(\n (v: string) => `${baseId}-tab-${idSafe(v)}`,\n [baseId],\n );\n const getPanelId = useCallback(\n (v: string) => `${baseId}-panel-${idSafe(v)}`,\n [baseId],\n );\n\n // Exactly one tab is a tab-stop: the active one when it is enabled,\n // otherwise the first enabled tab in DOM order.\n const order = orderRef.current;\n const disabledMap = disabledRef.current;\n const activeIsFocusable =\n activeValue !== undefined &&\n order.includes(activeValue) &&\n !disabledMap.get(activeValue);\n const focusableValue = activeIsFocusable\n ? activeValue\n : order.find((v) => !disabledMap.get(v));\n\n const ctx = useMemo<TabsContextValue>(\n () => ({\n baseId,\n activeValue,\n setActiveValue,\n focusableValue,\n registerTab,\n unregisterTab,\n setTabDisabled,\n getTabId,\n getPanelId,\n }),\n [\n baseId,\n activeValue,\n setActiveValue,\n focusableValue,\n registerTab,\n unregisterTab,\n setTabDisabled,\n getTabId,\n getPanelId,\n ],\n );\n\n return (\n <TabsContext.Provider value={ctx}>\n <div ref={ref} className={cn('gl-tabs', className)} {...rest}>\n {children}\n </div>\n </TabsContext.Provider>\n );\n});\n\n/* ------------------------------------------------------------------ */\n/* TabList */\n/* ------------------------------------------------------------------ */\n\nexport interface TabListProps extends HTMLAttributes<HTMLDivElement> {\n /** `Tab` children rendered inside the glass pill. */\n children?: ReactNode;\n}\n\n/**\n * TabList — the `role=\"tablist\"` container.\n * Renders a frosted glass pill and provides Arrow Left/Right (plus Home/End)\n * roving focus between the enabled tabs, activating each as focus lands on it.\n */\nexport const TabList = forwardRef<HTMLDivElement, TabListProps>(function TabList(\n { className, children, onKeyDown, ...rest },\n ref,\n) {\n const { setActiveValue } = useTabsContext('TabList');\n const listRef = useRef<HTMLDivElement | null>(null);\n\n const setRefs = useCallback(\n (node: HTMLDivElement | null) => {\n listRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as MutableRefObject<HTMLDivElement | null>).current = node;\n },\n [ref],\n );\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented) return;\n\n const nav = ['ArrowRight', 'ArrowLeft', 'Home', 'End'];\n if (!nav.includes(event.key)) return;\n\n const list = listRef.current;\n if (!list) return;\n\n const tabs = Array.from(\n list.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]:not([disabled])'),\n );\n if (tabs.length === 0) return;\n\n const currentIndex = tabs.findIndex((t) => t === document.activeElement);\n let nextIndex: number;\n switch (event.key) {\n case 'Home':\n nextIndex = 0;\n break;\n case 'End':\n nextIndex = tabs.length - 1;\n break;\n case 'ArrowRight':\n nextIndex = currentIndex < 0 ? 0 : (currentIndex + 1) % tabs.length;\n break;\n default:\n nextIndex =\n currentIndex < 0\n ? tabs.length - 1\n : (currentIndex - 1 + tabs.length) % tabs.length;\n }\n\n const next = tabs[nextIndex];\n event.preventDefault();\n next.focus();\n const nextValue = next.getAttribute('data-value');\n if (nextValue !== null) setActiveValue(nextValue);\n };\n\n return (\n <div\n ref={setRefs}\n role=\"tablist\"\n aria-orientation=\"horizontal\"\n className={cn('gl-tabs__list', className)}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n {children}\n </div>\n );\n});\n\n/* ------------------------------------------------------------------ */\n/* Tab */\n/* ------------------------------------------------------------------ */\n\nexport interface TabProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'value'> {\n /** Unique value that links this tab to its `TabPanel`. */\n value: string;\n /** Disable selection and remove the tab from keyboard navigation. */\n disabled?: boolean;\n /** Label content for the tab. */\n children?: ReactNode;\n}\n\n/**\n * Tab — a single selectable `role=\"tab\"` control.\n * Reflects selection via `aria-selected`, owns roving `tabIndex`, and points\n * at its panel through `aria-controls`. Renders as a native button so\n * Enter/Space activation and disabled handling come for free.\n */\nexport const Tab = forwardRef<HTMLButtonElement, TabProps>(function Tab(\n { value, disabled = false, className, children, onClick, type = 'button', ...rest },\n ref,\n) {\n const ctx = useTabsContext('Tab');\n const { registerTab, unregisterTab, setTabDisabled, setActiveValue } = ctx;\n const selected = ctx.activeValue === value;\n const focusable = ctx.focusableValue === value;\n\n useIsomorphicLayoutEffect(() => {\n registerTab(value);\n return () => unregisterTab(value);\n }, [registerTab, unregisterTab, value]);\n\n useIsomorphicLayoutEffect(() => {\n setTabDisabled(value, disabled);\n }, [setTabDisabled, value, disabled]);\n\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n setActiveValue(value);\n };\n\n return (\n <button\n ref={ref}\n type={type}\n role=\"tab\"\n id={ctx.getTabId(value)}\n data-value={value}\n aria-selected={selected}\n aria-controls={ctx.getPanelId(value)}\n tabIndex={focusable ? 0 : -1}\n disabled={disabled}\n className={cn(\n 'gl-tabs__tab',\n selected && 'gl-tabs__tab--active',\n 'gl-focusable',\n className,\n )}\n onClick={handleClick}\n {...rest}\n >\n <span className=\"gl-tabs__tab-label\">{children}</span>\n </button>\n );\n});\n\n/* ------------------------------------------------------------------ */\n/* TabPanel */\n/* ------------------------------------------------------------------ */\n\nexport interface TabPanelProps extends HTMLAttributes<HTMLDivElement> {\n /** Value that links this panel to its `Tab`. */\n value: string;\n /** Panel content, shown only while this tab is active. */\n children?: ReactNode;\n}\n\n/**\n * TabPanel — the `role=\"tabpanel\"` region for a tab's content.\n * Labelled by its tab, hidden unless active, and animated in on reveal.\n */\nexport const TabPanel = forwardRef<HTMLDivElement, TabPanelProps>(function TabPanel(\n { value, className, children, ...rest },\n ref,\n) {\n const ctx = useTabsContext('TabPanel');\n const selected = ctx.activeValue === value;\n\n return (\n <div\n ref={ref}\n role=\"tabpanel\"\n id={ctx.getPanelId(value)}\n aria-labelledby={ctx.getTabId(value)}\n hidden={!selected}\n tabIndex={0}\n className={cn('gl-tabs__panel', className)}\n {...rest}\n >\n {children}\n </div>\n );\n});\n","import {\n forwardRef,\n useCallback,\n useRef,\n type ChangeEvent,\n type TextareaHTMLAttributes,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { useIsomorphicLayoutEffect } from '../../hooks';\n\nexport type TextareaVariant = 'glass' | 'subtle';\n\nexport interface TextareaProps\n extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n /** Visual surface style. @default 'subtle' */\n variant?: TextareaVariant;\n /** Render the invalid state (danger border + `aria-invalid`). */\n error?: boolean;\n /** Stretch the field to fill the container width. */\n fullWidth?: boolean;\n /** Grow the field height to fit its content as the value changes (SSR-safe). */\n autoResize?: boolean;\n}\n\n/**\n * Textarea — a multi-line text field on a frosted-glass surface.\n * The focus ring follows `:focus-within` on the wrapper, an error state is\n * supported, and the field can optionally auto-grow to fit its content. The\n * forwarded ref is merged with an internal ref so auto-resize works even when\n * the consumer also needs a handle on the underlying element.\n */\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n function Textarea(\n {\n variant = 'subtle',\n error = false,\n fullWidth = false,\n autoResize = false,\n className,\n onChange,\n value,\n defaultValue,\n rows,\n disabled,\n ...rest\n },\n ref,\n ) {\n const innerRef = useRef<HTMLTextAreaElement | null>(null);\n\n // Merge the forwarded ref with our internal ref so both the consumer and\n // the auto-resize effect can reach the same DOM node.\n const setRef = useCallback(\n (node: HTMLTextAreaElement | null) => {\n innerRef.current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n },\n [ref],\n );\n\n const resize = useCallback(() => {\n const el = innerRef.current;\n if (!el) return;\n if (!autoResize) {\n // Hand height control back to CSS when auto-resize is disabled.\n el.style.height = '';\n return;\n }\n el.style.height = 'auto';\n el.style.height = `${el.scrollHeight}px`;\n }, [autoResize]);\n\n // Runs after paint on the client; degrades to a no-op effect on the server.\n useIsomorphicLayoutEffect(() => {\n resize();\n }, [resize, value, defaultValue, rows]);\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLTextAreaElement>) => {\n if (autoResize) resize();\n onChange?.(event);\n },\n [autoResize, resize, onChange],\n );\n\n return (\n <div\n className={cn(\n 'gl-textarea',\n `gl-textarea--${variant}`,\n fullWidth && 'gl-textarea--full',\n error && 'gl-textarea--error',\n autoResize && 'gl-textarea--auto',\n disabled && 'gl-textarea--disabled',\n className,\n )}\n >\n <textarea\n ref={setRef}\n className=\"gl-textarea__field\"\n value={value}\n defaultValue={defaultValue}\n rows={rows}\n disabled={disabled}\n aria-invalid={error || undefined}\n onChange={handleChange}\n {...rest}\n />\n </div>\n );\n },\n);\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { Portal } from '../Portal';\n\n/** Accent style of a toast. */\nexport type ToastVariant = 'glass' | 'success' | 'danger' | 'warning' | 'info';\n\n/** Corner the toast stack anchors to. */\nexport type ToastPosition =\n | 'top-right'\n | 'top-left'\n | 'bottom-right'\n | 'bottom-left';\n\n/** Configuration passed to `toast(options)`. */\nexport interface ToastOptions {\n /** Bold headline line. */\n title?: ReactNode;\n /** Secondary muted line under the title. */\n description?: ReactNode;\n /** Accent color. @default 'glass' */\n variant?: ToastVariant;\n /** Auto-dismiss delay in ms; pass `0` (or `Infinity`) to keep it sticky. @default 4000 */\n duration?: number;\n}\n\n/** Options accepted by the `success` / `error` / `info` / `warning` shortcuts (title + variant are fixed by the shortcut). */\nexport type ToastShortcutOptions = Omit<ToastOptions, 'title' | 'variant'>;\n\n/** Value returned by {@link useToast}. */\nexport interface ToastContextValue {\n /** Push a toast and get back its id for manual dismissal. */\n toast: (options: ToastOptions) => string;\n /** Remove a toast by id. */\n dismiss: (id: string) => void;\n /** Shortcut for a success (green) toast. */\n success: (title: ReactNode, options?: ToastShortcutOptions) => string;\n /** Shortcut for an error (danger/red) toast. */\n error: (title: ReactNode, options?: ToastShortcutOptions) => string;\n /** Shortcut for an info (blue) toast. */\n info: (title: ReactNode, options?: ToastShortcutOptions) => string;\n /** Shortcut for a warning (amber) toast. */\n warning: (title: ReactNode, options?: ToastShortcutOptions) => string;\n}\n\n/** Props for {@link ToastProvider}. */\nexport interface ToastProviderProps {\n /** App subtree that can trigger toasts via {@link useToast}. */\n children: ReactNode;\n /** Corner the toast stack anchors to. @default 'bottom-right' */\n position?: ToastPosition;\n}\n\n/** Default auto-dismiss delay in milliseconds. */\nconst DEFAULT_DURATION = 4000;\n\n/** Internal, fully-resolved toast record kept in provider state. */\ninterface ToastRecord {\n id: string;\n title?: ReactNode;\n description?: ReactNode;\n variant: ToastVariant;\n duration: number;\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\ninterface ToastItemProps {\n toast: ToastRecord;\n onDismiss: (id: string) => void;\n}\n\n/**\n * A single rendered toast. Owns its own auto-dismiss timer, which pauses while\n * the pointer hovers or keyboard focus is inside so users get time to read/act,\n * and is always cleared on unmount.\n */\nfunction ToastItem({ toast, onDismiss }: ToastItemProps) {\n const { id, title, description, variant, duration } = toast;\n const autoDismiss = duration > 0 && Number.isFinite(duration);\n\n const timerRef = useRef<number | null>(null);\n const remainingRef = useRef(duration);\n const startedRef = useRef(0);\n\n const clearTimer = useCallback(() => {\n if (timerRef.current !== null) {\n window.clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n }, []);\n\n const resumeTimer = useCallback(() => {\n if (!autoDismiss || timerRef.current !== null) return;\n startedRef.current = performance.now();\n timerRef.current = window.setTimeout(() => {\n timerRef.current = null;\n onDismiss(id);\n }, remainingRef.current);\n }, [autoDismiss, id, onDismiss]);\n\n const pauseTimer = useCallback(() => {\n if (timerRef.current === null) return;\n clearTimer();\n remainingRef.current = Math.max(\n 0,\n remainingRef.current - (performance.now() - startedRef.current),\n );\n }, [clearTimer]);\n\n useEffect(() => {\n remainingRef.current = duration;\n resumeTimer();\n return clearTimer;\n }, [duration, resumeTimer, clearTimer]);\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Escape') {\n event.stopPropagation();\n onDismiss(id);\n }\n };\n\n return (\n <div\n className={cn('gl-toast', `gl-toast--${variant}`)}\n role=\"status\"\n aria-atomic=\"true\"\n onMouseEnter={pauseTimer}\n onMouseLeave={resumeTimer}\n onFocus={pauseTimer}\n onBlur={resumeTimer}\n onKeyDown={handleKeyDown}\n >\n <span className=\"gl-toast__accent\" aria-hidden=\"true\" />\n <div className=\"gl-toast__body\">\n {title != null ? <div className=\"gl-toast__title\">{title}</div> : null}\n {description != null ? (\n <div className=\"gl-toast__description\">{description}</div>\n ) : null}\n </div>\n <button\n type=\"button\"\n className=\"gl-toast__close gl-focusable\"\n aria-label=\"Dismiss notification\"\n onClick={() => onDismiss(id)}\n >\n <svg\n className=\"gl-toast__close-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M6 6l12 12M18 6L6 18\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n </div>\n );\n}\n\n/**\n * ToastProvider — holds the live toast queue and renders the fixed viewport.\n * Wrap your app (or any subtree) in it, then call {@link useToast} to push\n * notifications. The viewport is portalled to `document.body` so toasts float\n * above every other layer regardless of where the trigger lives.\n */\nexport function ToastProvider({\n children,\n position = 'bottom-right',\n}: ToastProviderProps) {\n const [toasts, setToasts] = useState<ToastRecord[]>([]);\n const baseId = useId();\n const counterRef = useRef(0);\n\n const dismiss = useCallback((id: string) => {\n setToasts((prev) => prev.filter((item) => item.id !== id));\n }, []);\n\n const toast = useCallback(\n (options: ToastOptions) => {\n const id = `${baseId}${counterRef.current++}`;\n setToasts((prev) => [\n ...prev,\n {\n id,\n title: options.title,\n description: options.description,\n variant: options.variant ?? 'glass',\n duration: options.duration ?? DEFAULT_DURATION,\n },\n ]);\n return id;\n },\n [baseId],\n );\n\n const success = useCallback(\n (title: ReactNode, options?: ToastShortcutOptions) =>\n toast({ ...options, title, variant: 'success' }),\n [toast],\n );\n const error = useCallback(\n (title: ReactNode, options?: ToastShortcutOptions) =>\n toast({ ...options, title, variant: 'danger' }),\n [toast],\n );\n const info = useCallback(\n (title: ReactNode, options?: ToastShortcutOptions) =>\n toast({ ...options, title, variant: 'info' }),\n [toast],\n );\n const warning = useCallback(\n (title: ReactNode, options?: ToastShortcutOptions) =>\n toast({ ...options, title, variant: 'warning' }),\n [toast],\n );\n\n const value = useMemo<ToastContextValue>(\n () => ({ toast, dismiss, success, error, info, warning }),\n [toast, dismiss, success, error, info, warning],\n );\n\n return (\n <ToastContext.Provider value={value}>\n {children}\n <Portal>\n <div\n className={cn('gl-toast-viewport', `gl-toast-viewport--${position}`)}\n role=\"region\"\n aria-label=\"Notifications\"\n >\n {toasts.map((item) => (\n <ToastItem key={item.id} toast={item} onDismiss={dismiss} />\n ))}\n </div>\n </Portal>\n </ToastContext.Provider>\n );\n}\n\n/**\n * useToast — access the toast API from anywhere inside a {@link ToastProvider}.\n * Throws a descriptive error when called outside a provider.\n */\nexport function useToast(): ToastContextValue {\n const ctx = useContext(ToastContext);\n if (ctx === null) {\n throw new Error(\n 'useToast must be used within a <ToastProvider>. Wrap your app (or the subtree that shows toasts) in <ToastProvider>.',\n );\n }\n return ctx;\n}\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n type FocusEvent,\n type HTMLAttributes,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils/cn';\n\nexport type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';\n\nexport interface TooltipProps\n extends Omit<HTMLAttributes<HTMLSpanElement>, 'content'> {\n /** Floating content shown when the trigger is hovered or focused. */\n content: ReactNode;\n /** The trigger element the tooltip describes. */\n children: ReactNode;\n /** Side of the trigger the tooltip is anchored to. @default 'top' */\n placement?: TooltipPlacement;\n /** Delay in milliseconds before the tooltip appears. @default 200 */\n delay?: number;\n /** When true the tooltip never opens. @default false */\n disabled?: boolean;\n}\n\n/**\n * Tooltip — a small frosted-glass label that reveals descriptive text when the\n * trigger is hovered or keyboard-focused. It opens after a configurable delay,\n * closes instantly on leave/blur, and is fully SSR-safe (timeouts run only in\n * event handlers and effects).\n */\nexport const Tooltip = forwardRef<HTMLSpanElement, TooltipProps>(function Tooltip(\n {\n content,\n children,\n placement = 'top',\n delay = 200,\n disabled = false,\n className,\n onMouseEnter,\n onMouseLeave,\n onFocus,\n onBlur,\n onKeyDown,\n ...rest\n },\n ref,\n) {\n const [visible, setVisible] = useState(false);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const tooltipId = useId();\n\n const clearTimer = useCallback(() => {\n if (timeoutRef.current !== null) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n }, []);\n\n const show = useCallback(() => {\n if (disabled) return;\n clearTimer();\n timeoutRef.current = setTimeout(() => {\n timeoutRef.current = null;\n setVisible(true);\n }, delay);\n }, [disabled, delay, clearTimer]);\n\n const hide = useCallback(() => {\n clearTimer();\n setVisible(false);\n }, [clearTimer]);\n\n // Never keep an open tooltip once it becomes disabled.\n useEffect(() => {\n if (disabled) {\n clearTimer();\n setVisible(false);\n }\n }, [disabled, clearTimer]);\n\n // Cancel any pending open timeout on unmount.\n useEffect(() => clearTimer, [clearTimer]);\n\n const handleMouseEnter = (event: MouseEvent<HTMLSpanElement>) => {\n show();\n onMouseEnter?.(event);\n };\n const handleMouseLeave = (event: MouseEvent<HTMLSpanElement>) => {\n hide();\n onMouseLeave?.(event);\n };\n const handleFocus = (event: FocusEvent<HTMLSpanElement>) => {\n show();\n onFocus?.(event);\n };\n const handleBlur = (event: FocusEvent<HTMLSpanElement>) => {\n hide();\n onBlur?.(event);\n };\n const handleKeyDown = (event: KeyboardEvent<HTMLSpanElement>) => {\n // Per WAI-ARIA, a tooltip is dismissible with Escape while focus stays on\n // the trigger. Cancel any pending open timeout as well.\n if (event.key === 'Escape') {\n hide();\n }\n onKeyDown?.(event);\n };\n\n const open = visible && !disabled;\n\n return (\n <span\n ref={ref}\n className={cn('gl-tooltip-wrap', className)}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n aria-describedby={open ? tooltipId : undefined}\n {...rest}\n >\n {children}\n {open ? (\n <span\n id={tooltipId}\n role=\"tooltip\"\n className={cn('gl-tooltip', `gl-tooltip--${placement}`)}\n >\n {content}\n </span>\n ) : null}\n </span>\n );\n});\n"]}