@pollinations/ui 0.1.0-alpha.1 → 0.1.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +137 -36
- package/dist/Button-CO3Dpbkj.d.cts +29 -0
- package/dist/Button-CO3Dpbkj.d.ts +29 -0
- package/dist/Chip-v-ADv6cz.d.cts +18 -0
- package/dist/Chip-v-ADv6cz.d.ts +18 -0
- package/dist/Dialog-yXzIFrDg.d.cts +63 -0
- package/dist/Dialog-yXzIFrDg.d.ts +63 -0
- package/dist/app-user-menu/sdk.cjs +631 -235
- package/dist/app-user-menu/sdk.cjs.map +1 -1
- package/dist/app-user-menu/sdk.d.cts +6 -7
- package/dist/app-user-menu/sdk.d.ts +6 -7
- package/dist/app-user-menu/sdk.js +639 -236
- package/dist/app-user-menu/sdk.js.map +1 -1
- package/dist/app.css +6 -122
- package/dist/auth/index.cjs +1346 -76
- package/dist/auth/index.cjs.map +1 -1
- package/dist/auth/index.d.cts +88 -6
- package/dist/auth/index.d.ts +88 -6
- package/dist/auth/index.js +1343 -75
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/sdk.cjs +239 -0
- package/dist/auth/sdk.cjs.map +1 -0
- package/dist/auth/sdk.d.cts +40 -0
- package/dist/auth/sdk.d.ts +40 -0
- package/dist/auth/sdk.js +208 -0
- package/dist/auth/sdk.js.map +1 -0
- package/dist/brand/lockup-horizontal-black.png +0 -0
- package/dist/brand/lockup-horizontal-black.svg +4 -0
- package/dist/brand/lockup-horizontal-white.png +0 -0
- package/dist/brand/lockup-horizontal-white.svg +4 -0
- package/dist/brand/lockup-horizontal.svg +1 -0
- package/dist/brand/lockup-stacked-black.png +0 -0
- package/dist/brand/lockup-stacked-black.svg +4 -0
- package/dist/brand/lockup-stacked-white.png +0 -0
- package/dist/brand/lockup-stacked-white.svg +4 -0
- package/dist/brand/lockup-stacked.svg +4 -0
- package/dist/brand/mark-black.png +0 -0
- package/dist/brand/mark-black.svg +3 -0
- package/dist/brand/mark-white.png +0 -0
- package/dist/brand/mark-white.svg +3 -0
- package/dist/brand/mark.svg +1 -0
- package/dist/brand/polli/polli-lockup-horizontal-black.png +0 -0
- package/dist/brand/polli/polli-lockup-horizontal-white.png +0 -0
- package/dist/brand/polli/polli-lockup-stacked-black.png +0 -0
- package/dist/brand/polli/polli-lockup-stacked-white.png +0 -0
- package/dist/brand/polli/polli.png +0 -0
- package/dist/brand/wordmark-black.png +0 -0
- package/dist/brand/wordmark-black.svg +1 -0
- package/dist/brand/wordmark-white.png +0 -0
- package/dist/brand/wordmark-white.svg +1 -0
- package/dist/brand/wordmark.svg +1 -0
- package/dist/fonts/geist-pixel-square.woff2 +0 -0
- package/dist/gen/index.cjs +395 -214
- package/dist/gen/index.cjs.map +1 -1
- package/dist/gen/index.d.cts +64 -19
- package/dist/gen/index.d.ts +64 -19
- package/dist/gen/index.js +391 -212
- package/dist/gen/index.js.map +1 -1
- package/dist/index.browser.min.js +2 -0
- package/dist/index.browser.min.js.map +1 -0
- package/dist/index.cjs +3464 -1559
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +498 -174
- package/dist/index.d.ts +498 -174
- package/dist/index.js +3518 -1671
- package/dist/index.js.map +1 -1
- package/dist/licenses/Geist-OFL.txt +93 -0
- package/dist/markdown.cjs +821 -0
- package/dist/markdown.cjs.map +1 -0
- package/dist/markdown.d.cts +16 -0
- package/dist/markdown.d.ts +16 -0
- package/dist/markdown.js +792 -0
- package/dist/markdown.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/theme.css +92 -0
- package/dist/wallet/index.cjs +255 -42
- package/dist/wallet/index.cjs.map +1 -1
- package/dist/wallet/index.d.cts +29 -7
- package/dist/wallet/index.d.ts +29 -7
- package/dist/wallet/index.js +254 -42
- package/dist/wallet/index.js.map +1 -1
- package/package.json +106 -89
- package/dist/Chip-CQCq34kS.d.cts +0 -20
- package/dist/Chip-Cj4xG7Te.d.ts +0 -20
- package/dist/assets/logo-wordmark.svg +0 -1
- package/dist/assets/logo.svg +0 -4
- package/dist/theme-jRPPBmld.d.cts +0 -20
- package/dist/theme-jRPPBmld.d.ts +0 -20
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/lib/cn.ts","../src/primitives/Typography.tsx","../src/compositions/Alert.tsx","../src/compositions/AppHeader.tsx","../src/primitives/ScrollArea.tsx","../src/compositions/CodeBlock.tsx","../src/primitives/ChevronIcon.tsx","../src/compositions/Collapsible.tsx","../src/compositions/CopyButton.tsx","../src/primitives/Tooltip.tsx","../src/primitives/Button.tsx","../src/primitives/icons/index.tsx","../src/compositions/ExternalLinkButton.tsx","../src/compositions/FileUpload.tsx","../src/lib/partition-files.ts","../src/primitives/IconButton.tsx","../src/compositions/InfoTip.tsx","../src/primitives/Surface.tsx","../src/compositions/LinkCard.tsx","../src/compositions/Markdown.tsx","../src/compositions/MediaPlaceholder.tsx","../src/primitives/Dropdown.tsx","../src/compositions/MultiSelect.tsx","../src/compositions/NavItem.tsx","../src/compositions/PeriodPicker.tsx","../src/lib/period.ts","../src/primitives/TabButton.tsx","../src/compositions/Prose.tsx","../src/compositions/Section.tsx","../src/compositions/StatCard.tsx","../src/lib/cn-app.ts","../src/lib/use-scroll-lock.ts","../src/primitives/ButtonGroup.tsx","../src/primitives/Chip.tsx","../src/primitives/Dialog.tsx","../src/primitives/DropdownItem.tsx","../src/primitives/Field.tsx","../src/primitives/InlineLink.tsx","../src/primitives/Input.tsx","../src/primitives/Slider.tsx","../src/primitives/Switch.tsx","../src/primitives/Table.tsx","../src/primitives/Textarea.tsx","../src/theme-palette.json","../src/theme.ts"],"sourcesContent":["export { Alert, type AlertProps } from \"./compositions/Alert.tsx\";\nexport { AppHeader, type AppHeaderProps } from \"./compositions/AppHeader.tsx\";\nexport { CodeBlock, type CodeBlockProps } from \"./compositions/CodeBlock.tsx\";\nexport {\n Collapsible,\n type CollapsibleProps,\n} from \"./compositions/Collapsible.tsx\";\nexport {\n CopyButton,\n type CopyButtonProps,\n} from \"./compositions/CopyButton.tsx\";\nexport {\n ExternalLinkButton,\n type ExternalLinkButtonProps,\n} from \"./compositions/ExternalLinkButton.tsx\";\nexport {\n FileUpload,\n type FileUploadProps,\n} from \"./compositions/FileUpload.tsx\";\nexport { InfoTip } from \"./compositions/InfoTip.tsx\";\nexport { LinkCard, type LinkCardProps } from \"./compositions/LinkCard.tsx\";\nexport { Markdown, type MarkdownProps } from \"./compositions/Markdown.tsx\";\nexport {\n MediaPlaceholder,\n type MediaPlaceholderProps,\n} from \"./compositions/MediaPlaceholder.tsx\";\nexport {\n MultiSelect,\n type MultiSelectProps,\n} from \"./compositions/MultiSelect.tsx\";\nexport { NavItem, type NavItemProps } from \"./compositions/NavItem.tsx\";\nexport {\n PeriodPicker,\n type PeriodPickerProps,\n} from \"./compositions/PeriodPicker.tsx\";\nexport { Prose, type ProseProps } from \"./compositions/Prose.tsx\";\nexport { Section, type SectionProps } from \"./compositions/Section.tsx\";\nexport { StatCard, type StatCardProps } from \"./compositions/StatCard.tsx\";\nexport { cn } from \"./lib/cn-app.ts\";\nexport type { RejectedFile, RejectReason } from \"./lib/partition-files.ts\";\nexport {\n currentPeriod,\n getPeriodBucketKeys,\n type PeriodGranularity,\n type PeriodSelection,\n periodBucketKeyToDate,\n} from \"./lib/period.ts\";\nexport { useScrollLock } from \"./lib/use-scroll-lock.ts\";\nexport { Button, type ButtonProps } from \"./primitives/Button.tsx\";\nexport {\n ButtonGroup,\n type ButtonGroupProps,\n} from \"./primitives/ButtonGroup.tsx\";\nexport { ChevronIcon } from \"./primitives/ChevronIcon.tsx\";\nexport { Chip } from \"./primitives/Chip.tsx\";\nexport {\n Dialog,\n type DialogProps,\n DialogTitle,\n} from \"./primitives/Dialog.tsx\";\nexport { Dropdown, type DropdownProps } from \"./primitives/Dropdown.tsx\";\nexport {\n DropdownItem,\n type DropdownItemProps,\n} from \"./primitives/DropdownItem.tsx\";\nexport { Field } from \"./primitives/Field.tsx\";\nexport { IconButton } from \"./primitives/IconButton.tsx\";\nexport { InlineLink, type InlineLinkProps } from \"./primitives/InlineLink.tsx\";\nexport { Input, type InputProps } from \"./primitives/Input.tsx\";\nexport * from \"./primitives/icons/index.tsx\";\nexport { ScrollArea, type ScrollAreaProps } from \"./primitives/ScrollArea.tsx\";\nexport { Slider, type SliderProps } from \"./primitives/Slider.tsx\";\nexport { Surface } from \"./primitives/Surface.tsx\";\nexport {\n Switch,\n type SwitchProps,\n type SwitchStatus,\n} from \"./primitives/Switch.tsx\";\nexport {\n TabButton,\n type TabButtonProps,\n} from \"./primitives/TabButton.tsx\";\nexport {\n Table,\n TableBody,\n type TableBodyProps,\n TableCell,\n type TableCellProps,\n TableHead,\n TableHeaderCell,\n type TableHeaderCellProps,\n type TableHeadProps,\n type TableProps,\n TableRow,\n type TableRowProps,\n} from \"./primitives/Table.tsx\";\nexport { Textarea, type TextareaProps } from \"./primitives/Textarea.tsx\";\nexport { Tooltip } from \"./primitives/Tooltip.tsx\";\nexport {\n Heading,\n type HeadingProps,\n type HeadingSize,\n headingClassName,\n Text,\n type TextProps,\n type TextSize,\n type TextTone,\n type TextWeight,\n textClassName,\n} from \"./primitives/Typography.tsx\";\nexport { type ThemeName, themePalette, themes } from \"./theme.ts\";\n","import { clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({ prefix: \"polli\" });\n\n/** Internal class merge for polli:-prefixed package primitive classes. */\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(...inputs));\n}\n","import type {\n ComponentPropsWithoutRef,\n ElementType,\n PropsWithChildren,\n} from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\nexport type HeadingSize =\n | \"display\"\n | \"title\"\n | \"section\"\n | \"subsection\"\n | \"card\";\n\nexport type TextSize = \"body\" | \"sm\" | \"xs\" | \"micro\";\nexport type TextTone = \"base\" | \"strong\" | \"soft\" | \"muted\";\nexport type TextWeight = \"normal\" | \"medium\" | \"semibold\" | \"bold\";\n\nconst headingSizeClasses: Record<HeadingSize, string> = {\n display: \"polli:font-heading polli:text-5xl polli:leading-none\",\n title: \"polli:font-heading polli:text-4xl polli:leading-none\",\n section: \"polli:font-subheading polli:text-2xl polli:leading-tight\",\n subsection: \"polli:font-subheading polli:text-xl polli:leading-tight\",\n card: \"polli:font-subheading polli:text-lg polli:leading-tight\",\n};\n\nconst textSizeClasses: Record<TextSize, string> = {\n body: \"polli:text-base polli:leading-relaxed\",\n sm: \"polli:text-sm polli:leading-6\",\n xs: \"polli:text-xs polli:leading-normal\",\n micro: \"polli:text-micro polli:leading-normal\",\n};\n\nconst textToneClasses: Record<TextTone, string> = {\n base: \"polli:text-theme-text-base\",\n strong: \"polli:text-theme-text-strong\",\n soft: \"polli:text-theme-text-soft\",\n muted: \"polli:text-theme-text-muted\",\n};\n\nconst textWeightClasses: Record<TextWeight, string> = {\n normal: \"polli:font-normal\",\n medium: \"polli:font-medium\",\n semibold: \"polli:font-semibold\",\n bold: \"polli:font-bold\",\n};\n\nexport function headingClassName(size: HeadingSize, className?: string) {\n return cn(\n \"polli:break-words polli:text-theme-text-strong\",\n headingSizeClasses[size],\n className,\n );\n}\n\nexport function textClassName({\n size,\n tone,\n weight,\n className,\n}: {\n size: TextSize;\n tone: TextTone;\n weight: TextWeight;\n className?: string;\n}) {\n return cn(\n \"polli:break-words polli:font-body\",\n textSizeClasses[size],\n textToneClasses[tone],\n textWeightClasses[weight],\n className,\n );\n}\n\ntype HeadingOwnProps<T extends ElementType> = PropsWithChildren<{\n as?: T;\n size?: HeadingSize;\n className?: string;\n}>;\n\nexport type HeadingProps<T extends ElementType = \"h2\"> = HeadingOwnProps<T> &\n Omit<ComponentPropsWithoutRef<T>, keyof HeadingOwnProps<T>>;\n\nexport function Heading<T extends ElementType = \"h2\">({\n as,\n size = \"section\",\n className,\n children,\n ...rest\n}: HeadingProps<T>) {\n const Component = as || \"h2\";\n return (\n <Component {...rest} className={headingClassName(size, className)}>\n {children}\n </Component>\n );\n}\n\ntype TextOwnProps<T extends ElementType> = PropsWithChildren<{\n as?: T;\n size?: TextSize;\n tone?: TextTone;\n weight?: TextWeight;\n className?: string;\n}>;\n\nexport type TextProps<T extends ElementType = \"p\"> = TextOwnProps<T> &\n Omit<ComponentPropsWithoutRef<T>, keyof TextOwnProps<T>>;\n\nexport function Text<T extends ElementType = \"p\">({\n as,\n size = \"body\",\n tone = \"base\",\n weight = \"normal\",\n className,\n children,\n ...rest\n}: TextProps<T>) {\n const Component = as || \"p\";\n return (\n <Component\n {...rest}\n className={textClassName({ size, tone, weight, className })}\n >\n {children}\n </Component>\n );\n}\n","import type { ComponentPropsWithoutRef, FC, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { Text } from \"../primitives/Typography.tsx\";\n\ntype AlertIntent = \"info\" | \"success\" | \"warning\" | \"danger\";\n\nconst intentClasses: Record<AlertIntent, string> = {\n info: \"polli:bg-theme-bg-pale polli:text-theme-text-strong\",\n success: \"polli:bg-intent-success-bg-light polli:text-intent-success-text\",\n warning: \"polli:bg-intent-warning-bg-light polli:text-intent-warning-text\",\n danger: \"polli:bg-intent-danger-bg-light polli:text-intent-danger-text\",\n};\n\nexport type AlertProps = ComponentPropsWithoutRef<\"div\"> & {\n intent?: AlertIntent;\n title?: ReactNode;\n};\n\nexport const Alert: FC<AlertProps> = ({\n intent = \"info\",\n title,\n className,\n children,\n ...rest\n}) => (\n <div\n {...rest}\n role={intent === \"danger\" ? \"alert\" : \"status\"}\n className={cn(\n \"polli:rounded-xl polli:px-3 polli:py-2 polli:text-sm\",\n intentClasses[intent],\n className,\n )}\n >\n {title && (\n <Text\n as=\"div\"\n size=\"xs\"\n tone=\"strong\"\n weight=\"bold\"\n className=\"polli:mb-1 polli:uppercase polli:tracking-wide\"\n >\n {title}\n </Text>\n )}\n <div>{children}</div>\n </div>\n);\n","import type { CSSProperties, ReactNode, RefObject } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport logoWordmarkUrl from \"../assets/logo-wordmark.svg\";\nimport { cn } from \"../lib/cn.ts\";\n\ntype ScrollTargetRef = RefObject<HTMLElement | null>;\n\nexport type AppHeaderProps = {\n children?: ReactNode;\n navLabel: string;\n autoHide?: boolean;\n scrollTargetRef?: ScrollTargetRef;\n brandHref?: string;\n brandLabel?: string;\n className?: string;\n innerClassName?: string;\n navClassName?: string;\n};\n\nconst brandWordmarkMaskUrl = `url('${logoWordmarkUrl}')`;\n\nconst brandWordmarkMask: CSSProperties = {\n WebkitMaskImage: brandWordmarkMaskUrl,\n WebkitMaskPosition: \"center\",\n WebkitMaskRepeat: \"no-repeat\",\n WebkitMaskSize: \"contain\",\n maskImage: brandWordmarkMaskUrl,\n maskPosition: \"center\",\n maskRepeat: \"no-repeat\",\n maskSize: \"contain\",\n};\n\nfunction scrollTopFor(target: HTMLElement | Window) {\n return target === window\n ? window.scrollY\n : (target as HTMLElement).scrollTop;\n}\n\nexport function AppHeader({\n children,\n navLabel,\n autoHide = false,\n scrollTargetRef,\n brandHref = \"https://pollinations.ai\",\n brandLabel = \"Pollinations\",\n className,\n innerClassName,\n navClassName,\n}: AppHeaderProps) {\n const [hidden, setHidden] = useState(false);\n\n useEffect(() => {\n if (!autoHide || typeof window === \"undefined\") {\n setHidden(false);\n return;\n }\n\n const target = scrollTargetRef?.current ?? window;\n let lastScrollTop = scrollTopFor(target);\n let frameId = 0;\n\n const handleScroll = () => {\n if (frameId) return;\n\n frameId = window.requestAnimationFrame(() => {\n frameId = 0;\n const nextScrollTop = scrollTopFor(target);\n const delta = nextScrollTop - lastScrollTop;\n\n if (nextScrollTop < 16) {\n setHidden(false);\n } else if (delta > 8) {\n setHidden(true);\n } else if (delta < -8) {\n setHidden(false);\n }\n\n lastScrollTop = nextScrollTop;\n });\n };\n\n target.addEventListener(\"scroll\", handleScroll, { passive: true });\n\n return () => {\n if (frameId) window.cancelAnimationFrame(frameId);\n target.removeEventListener(\"scroll\", handleScroll);\n };\n }, [autoHide, scrollTargetRef]);\n\n return (\n <header\n className={cn(\n \"polli:sticky polli:top-0 polli:z-30 polli:border-b polli:border-theme-border polli:bg-surface-white polli:py-4 polli:backdrop-blur\",\n \"polli:transition-transform polli:duration-200 polli:ease-out\",\n autoHide && \"polli:will-change-transform\",\n hidden ? \"polli:-translate-y-full\" : \"polli:translate-y-0\",\n className,\n )}\n onFocusCapture={() => setHidden(false)}\n >\n <div\n className={cn(\n \"polli:mx-auto polli:flex polli:w-full polli:max-w-5xl polli:flex-col polli:gap-4 polli:px-4 polli:sm:flex-row polli:sm:items-center polli:sm:justify-between polli:sm:px-6\",\n innerClassName,\n )}\n >\n <a\n href={brandHref}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"polli:inline-flex polli:shrink-0 polli:items-center polli:text-theme-text-strong\"\n >\n <span className=\"polli:sr-only\">{brandLabel}</span>\n <span\n aria-hidden=\"true\"\n className=\"polli:block polli:h-7 polli:w-[220px] polli:max-w-full polli:bg-current\"\n style={brandWordmarkMask}\n />\n </a>\n {children ? (\n <nav\n aria-label={navLabel}\n className={cn(\n \"polli:flex polli:min-w-0 polli:flex-wrap polli:gap-2\",\n navClassName,\n )}\n >\n {children}\n </nav>\n ) : null}\n </div>\n </header>\n );\n}\n","import {\n type ComponentPropsWithoutRef,\n forwardRef,\n type MutableRefObject,\n type PropsWithChildren,\n type Ref,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\ntype ScrollAxis = \"y\" | \"x\";\n\nconst axisClasses: Record<ScrollAxis, string> = {\n y: \"polli:overflow-y-auto polli:overflow-x-hidden\",\n x: \"polli:overflow-x-auto polli:overflow-y-hidden\",\n};\n\ntype ScrollAreaOwnProps = {\n /** Override the ambient cascade theme for this scroller's thumb. */\n theme?: ThemeName;\n /** Scroll direction. Default `y`. */\n axis?: ScrollAxis;\n className?: string;\n};\n\nexport type ScrollAreaProps = PropsWithChildren<\n ScrollAreaOwnProps &\n Omit<ComponentPropsWithoutRef<\"div\">, keyof ScrollAreaOwnProps>\n>;\n\nfunction assignRef<T>(ref: Ref<T> | undefined, value: T | null) {\n if (typeof ref === \"function\") ref(value);\n else if (ref) (ref as MutableRefObject<T | null>).current = value;\n}\n\n/**\n * Themed auto-hide scroll container. Thumb color follows the nearest\n * `[data-theme=\"...\"]` ancestor; pass `theme` to override locally.\n */\nexport const ScrollArea = forwardRef<HTMLDivElement, ScrollAreaProps>(\n ({ theme, axis = \"y\", className, children, ...rest }, externalRef) => {\n const innerRef = useRef<HTMLDivElement | null>(null);\n\n const setRef = useCallback(\n (node: HTMLDivElement | null) => {\n innerRef.current = node;\n assignRef(externalRef, node);\n },\n [externalRef],\n );\n\n useEffect(() => {\n const element = innerRef.current;\n if (!element) return;\n\n let hideTimer: number | null = null;\n\n const clearHideTimer = () => {\n if (hideTimer !== null) {\n window.clearTimeout(hideTimer);\n hideTimer = null;\n }\n };\n\n const show = () => {\n element.dataset.scrollbarActive = \"true\";\n clearHideTimer();\n };\n\n const hide = () => {\n element.dataset.scrollbarActive = \"false\";\n clearHideTimer();\n };\n\n const scheduleHide = () => {\n clearHideTimer();\n hideTimer = window.setTimeout(hide, 2000);\n };\n\n const handleInteraction = () => {\n show();\n scheduleHide();\n };\n\n hide();\n\n element.addEventListener(\"scroll\", handleInteraction, {\n passive: true,\n });\n element.addEventListener(\"wheel\", handleInteraction, {\n passive: true,\n });\n element.addEventListener(\"touchstart\", handleInteraction, {\n passive: true,\n });\n element.addEventListener(\"pointerdown\", handleInteraction);\n element.addEventListener(\"keydown\", handleInteraction);\n element.addEventListener(\"focusin\", handleInteraction);\n element.addEventListener(\"focusout\", scheduleHide);\n\n return () => {\n clearHideTimer();\n element.removeEventListener(\"scroll\", handleInteraction);\n element.removeEventListener(\"wheel\", handleInteraction);\n element.removeEventListener(\"touchstart\", handleInteraction);\n element.removeEventListener(\"pointerdown\", handleInteraction);\n element.removeEventListener(\"keydown\", handleInteraction);\n element.removeEventListener(\"focusin\", handleInteraction);\n element.removeEventListener(\"focusout\", scheduleHide);\n };\n }, []);\n\n return (\n <div\n {...rest}\n ref={setRef}\n data-theme={theme}\n className={cn(\n \"polli-scrollbar-subtle polli:min-w-0 polli:max-w-full\",\n axisClasses[axis],\n className,\n )}\n >\n {children}\n </div>\n );\n },\n);\n\nScrollArea.displayName = \"ScrollArea\";\n","import type { ComponentPropsWithoutRef, FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { ScrollArea } from \"../primitives/ScrollArea.tsx\";\nimport type { ThemeName } from \"../theme.ts\";\n\ntype CodeBlockOwnProps = {\n code: string;\n theme?: ThemeName;\n codeClassName?: string;\n};\n\nexport type CodeBlockProps = CodeBlockOwnProps &\n Omit<ComponentPropsWithoutRef<\"div\">, keyof CodeBlockOwnProps | \"children\">;\n\nexport const CodeBlock: FC<CodeBlockProps> = ({\n code,\n theme,\n codeClassName,\n className,\n ...rest\n}) => (\n <ScrollArea\n {...rest}\n theme={theme}\n axis=\"x\"\n className={cn(\n \"polli:rounded-lg polli:border polli:border-theme-border polli:bg-theme-bg-pale\",\n className,\n )}\n >\n <pre\n className={cn(\n \"polli:p-4 polli:font-mono polli:text-xs polli:leading-6 polli:text-theme-text-strong\",\n codeClassName,\n )}\n >\n <code>{code}</code>\n </pre>\n </ScrollArea>\n);\n","import type { FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\ntype ChevronIconProps = {\n /** Rotate 180° when expanded/open. */\n expanded?: boolean;\n className?: string;\n};\n\n/**\n * Canonical chevron used for collapsibles, dropdown triggers, and select pills\n * across the app. One icon everywhere.\n */\nexport const ChevronIcon: FC<ChevronIconProps> = ({ expanded, className }) => (\n <svg\n aria-hidden=\"true\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n className={cn(\n \"polli:shrink-0 polli:transition-transform polli:duration-200 polli:ease-out\",\n expanded && \"polli:rotate-180\",\n className,\n )}\n >\n <path\n d=\"M3 4.5 6 7.5l3-3\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.5\"\n />\n </svg>\n);\n","import type { FC, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { ChevronIcon } from \"../primitives/ChevronIcon.tsx\";\n\nexport type CollapsibleProps = {\n /** Header content (label, hint, etc). */\n label: ReactNode;\n expanded: boolean;\n onToggle: () => void;\n children: ReactNode;\n disabled?: boolean;\n /** Outer wrapper classes — base bg, border, etc. */\n wrapperClassName?: string;\n /** Trigger hover classes. Defaults to `polli:hover:bg-theme-bg-active`. */\n hoverClassName?: string;\n /** Trigger focus classes. */\n focusClassName?: string;\n /** Expanded panel classes. Defaults to a top border separator. */\n panelClassName?: string;\n /** Accessible label for the toggle button when label is non-text. */\n ariaLabel?: string;\n};\n\n/**\n * Collapsible row composition. One chevron, one hover/rounded behaviour for\n * every collapsible in the UI. Use this for any \"click to reveal nested\n * content\" UI — nested settings, grouped controls, optional details.\n *\n * For dropdown/popover triggers (date pickers, menus) use a button with\n * <ChevronIcon /> directly — that's a different interaction.\n */\nexport const Collapsible: FC<CollapsibleProps> = ({\n label,\n expanded,\n onToggle,\n children,\n disabled = false,\n wrapperClassName,\n hoverClassName = \"polli:hover:bg-theme-bg-active\",\n focusClassName,\n panelClassName = \"polli:border-t polli:border-theme-border polli:px-3 polli:pt-3 polli:pb-3\",\n ariaLabel,\n}) => (\n <div\n className={cn(\n \"polli:rounded-lg polli:border polli:transition-all\",\n wrapperClassName,\n disabled && \"polli:opacity-50\",\n )}\n >\n <button\n type=\"button\"\n aria-expanded={expanded}\n aria-label={ariaLabel}\n disabled={disabled}\n onClick={onToggle}\n className={cn(\n \"polli-control polli:w-full polli:flex polli:items-center polli:gap-3 polli:px-3 polli:py-2 polli:text-left polli:transition-colors\",\n expanded ? \"polli:rounded-t-lg\" : \"polli:rounded-lg\",\n !disabled && hoverClassName,\n focusClassName,\n disabled ? \"polli:cursor-not-allowed\" : \"polli:cursor-pointer\",\n )}\n >\n <div className=\"polli:flex-1 polli:min-w-0\">{label}</div>\n <ChevronIcon\n expanded={expanded}\n className=\"polli:text-theme-text-soft\"\n />\n </button>\n {expanded && <div className={panelClassName}>{children}</div>}\n </div>\n);\n","import {\n type ButtonHTMLAttributes,\n type MouseEvent,\n type ReactNode,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { Tooltip } from \"../primitives/Tooltip.tsx\";\n\ntype CopyValue = string | (() => string | Promise<string>);\n\nexport type CopyButtonProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"children\" | \"className\" | \"onClick\" | \"type\" | \"value\"\n> & {\n value: CopyValue;\n children: ReactNode | ((copied: boolean) => ReactNode);\n copiedTimeoutMs?: number;\n tooltip?: ReactNode;\n copiedTooltip?: ReactNode;\n tooltipClassName?: string;\n className?: string | ((copied: boolean) => string);\n onCopied?: () => void;\n onCopyError?: (error: unknown) => void;\n};\n\nexport function CopyButton({\n value,\n children,\n copiedTimeoutMs = 2000,\n tooltip = \"Click to copy\",\n copiedTooltip = \"Copied!\",\n tooltipClassName,\n className,\n onCopied,\n onCopyError,\n ...buttonProps\n}: CopyButtonProps) {\n const [copied, setCopied] = useState(false);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(\n () => () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n },\n [],\n );\n\n async function handleCopy(event: MouseEvent<HTMLButtonElement>) {\n event.stopPropagation();\n try {\n const text = typeof value === \"function\" ? await value() : value;\n await navigator.clipboard.writeText(text);\n setCopied(true);\n onCopied?.();\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(\n () => setCopied(false),\n copiedTimeoutMs,\n );\n } catch (error) {\n onCopyError?.(error);\n }\n }\n\n const button = (\n <button\n {...buttonProps}\n type=\"button\"\n onClick={handleCopy}\n className={cn(\n \"polli-control\",\n typeof className === \"function\" ? className(copied) : className,\n )}\n >\n {typeof children === \"function\" ? children(copied) : children}\n </button>\n );\n\n return (\n <Tooltip\n triggerAs=\"span\"\n content={copied ? copiedTooltip : tooltip}\n className={tooltipClassName}\n >\n {button}\n </Tooltip>\n );\n}\n","import {\n type CSSProperties,\n type FC,\n type MouseEvent,\n type ReactNode,\n useRef,\n useState,\n} from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\nconst TOOLTIP_MAX_WIDTH = 288;\nconst TOOLTIP_VIEWPORT_MARGIN = 12;\n\ntype TooltipProps = {\n children: ReactNode;\n content: ReactNode;\n ariaLabel?: string;\n className?: string;\n onClick?: () => void;\n style?: CSSProperties;\n triggerAs?: \"button\" | \"span\";\n /**\n * When true, the inner cursor wrapper uses display:contents so the\n * trigger's flex/grid layout applies directly to the caller's children\n * without an inline wrapper in the way.\n */\n displayContents?: boolean;\n};\n\nexport const Tooltip: FC<TooltipProps> = ({\n children,\n content,\n ariaLabel,\n className,\n onClick,\n style,\n triggerAs = \"button\",\n displayContents = false,\n}) => {\n const [showTooltip, setShowTooltip] = useState(false);\n const [tooltipPosition, setTooltipPosition] = useState({\n top: 0,\n left: 0,\n maxWidth: TOOLTIP_MAX_WIDTH,\n });\n const triggerRef = useRef<HTMLElement | null>(null);\n\n const updateTooltipPosition = () => {\n if (triggerRef.current) {\n const rect = triggerRef.current.getBoundingClientRect();\n const maxWidth = Math.min(\n TOOLTIP_MAX_WIDTH,\n window.innerWidth - TOOLTIP_VIEWPORT_MARGIN * 2,\n );\n const left = Math.min(\n Math.max(rect.left, TOOLTIP_VIEWPORT_MARGIN),\n Math.max(\n TOOLTIP_VIEWPORT_MARGIN,\n window.innerWidth - maxWidth - TOOLTIP_VIEWPORT_MARGIN,\n ),\n );\n setTooltipPosition({\n top: rect.bottom + 4,\n left,\n maxWidth,\n });\n }\n };\n\n // Universal cursor for every tooltip trigger across the app.\n // `cursor-help` = standard \"?\" pointer that means \"more info on hover\".\n const triggerClassName = cn(\n \"polli-control polli:relative polli:cursor-help polli:text-left polli:inline-flex polli:items-center\",\n className,\n );\n\n const cursorClass = displayContents\n ? \"polli:contents\"\n : \"polli:cursor-help\";\n\n // Thin theme-cascade popup. bg + border + text all follow the active\n // page theme so the tooltip reads as \"part of the page\", not system\n // chrome. Uses the pale theme bg (one step lighter than chip-bg) so\n // it doesn't dominate. Same recipe on desktop and mobile —\n // viewport-clamped via `tooltipPosition`.\n const popupClasses =\n \"polli:fixed polli:w-max polli:px-2 polli:py-1 polli:bg-theme-bg-pale polli:text-theme-text-strong polli:border polli:border-theme-border polli:text-xs polli:rounded-md polli:shadow-sm polli:z-50 polli:pointer-events-none polli:transition-opacity polli:whitespace-pre-line polli:break-words\";\n\n const contentNode = (\n <>\n <span className={cursorClass}>{children}</span>\n <span\n style={{\n top: tooltipPosition.top,\n left: tooltipPosition.left,\n maxWidth: tooltipPosition.maxWidth,\n }}\n className={`${\n showTooltip\n ? \"polli:visible polli:opacity-100\"\n : \"polli:invisible polli:opacity-0\"\n } ${popupClasses}`}\n >\n {content}\n </span>\n </>\n );\n\n const sharedProps = {\n \"aria-label\": ariaLabel,\n className: triggerClassName,\n onMouseEnter: () => {\n updateTooltipPosition();\n setShowTooltip(true);\n },\n onMouseLeave: () => setShowTooltip(false),\n onClick: (e: MouseEvent) => {\n e.stopPropagation();\n if (onClick) {\n onClick();\n }\n if (triggerAs === \"span\") {\n return;\n }\n updateTooltipPosition();\n setShowTooltip((prev) => !prev);\n },\n style,\n };\n\n if (triggerAs === \"span\") {\n return (\n <span\n ref={(node) => {\n triggerRef.current = node;\n }}\n {...sharedProps}\n >\n {contentNode}\n </span>\n );\n }\n\n return (\n <button\n ref={(node) => {\n triggerRef.current = node;\n }}\n type=\"button\"\n aria-label={ariaLabel}\n className={triggerClassName}\n onMouseEnter={sharedProps.onMouseEnter}\n onMouseLeave={sharedProps.onMouseLeave}\n onClick={sharedProps.onClick}\n style={style}\n >\n {contentNode}\n </button>\n );\n};\n","import type { PropsWithChildren } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\n/** Button only supports `danger`. Label/status color recipes live on Chip. */\ntype ButtonIntent = \"danger\";\n\nconst sizes = {\n sm: \"polli:px-2 polli:pt-0.5 polli:pb-1\",\n md: \"polli:px-4 polli:pt-1.5 polli:pb-2\",\n lg: \"polli:px-6 polli:py-3\",\n} as const;\n\n// Cascade-driven base — reads [data-theme] vars.\nconst themeClasses =\n \"polli:bg-theme-bg-active polli:text-theme-text-base \" +\n \"polli:hover:bg-theme-bg-hover polli:transition-colors\";\n\n// Single intent: danger. Soft recipe — light tile + deep text, slightly\n// deeper bg on hover. No filled CTAs anywhere.\nconst intentClasses: Record<ButtonIntent, string> = {\n danger:\n \"polli:bg-intent-danger-bg-light polli:text-intent-danger-text \" +\n \"polli:hover:bg-intent-danger-bg-hover polli:transition-colors\",\n};\n\ntype BaseButtonProps = {\n /** Override the cascade theme for this button's subtree. Ignored when `intent` is set. */\n theme?: ThemeName;\n /** Only `\"danger\"` for now. */\n intent?: ButtonIntent;\n size?: keyof typeof sizes;\n className?: string;\n disabled?: boolean;\n};\n\nconst buttonClasses = ({\n theme: _theme,\n intent,\n size,\n className,\n disabled,\n}: BaseButtonProps & { disabled?: boolean }) => {\n const colorClasses = intent ? intentClasses[intent] : themeClasses;\n return cn(\n \"polli-control polli:inline-flex polli:items-center polli:justify-center polli:rounded-full polli:self-center polli:font-medium polli:leading-normal polli:box-border\",\n disabled\n ? \"polli:opacity-50 polli:cursor-not-allowed\"\n : \"polli:hover:filter polli:hover:brightness-105 polli:cursor-pointer\",\n colorClasses,\n sizes[size || \"md\"],\n className,\n );\n};\n\nexport type ButtonProps<T extends React.ElementType = \"button\"> =\n PropsWithChildren<BaseButtonProps> & {\n as?: T;\n } & Omit<React.ComponentPropsWithoutRef<T>, keyof BaseButtonProps | \"as\">;\n\nexport function Button<T extends React.ElementType = \"button\">({\n as,\n children,\n theme,\n intent,\n size,\n className,\n disabled,\n ...buttonProps\n}: ButtonProps<T>) {\n const Component: React.ElementType = as || \"button\";\n\n return (\n <Component\n // Cascade override only applies when `intent` is unset.\n data-theme={intent ? undefined : theme}\n data-intent={intent}\n className={buttonClasses({\n theme,\n intent,\n size,\n className,\n disabled,\n })}\n disabled={disabled}\n {...buttonProps}\n >\n {children}\n </Component>\n );\n}\n","import type { IconProps } from \"./types.ts\";\n\nconst strokeProps = {\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n} as const;\n\nexport function AppIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <rect x=\"2\" y=\"4\" width=\"20\" height=\"14\" rx=\"2\" />\n <path d=\"M2 20h20\" />\n </svg>\n );\n}\n\nexport function BeakerIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M9 3h6\" />\n <path d=\"M10 3v6.5L4.5 18a2 2 0 0 0 1.7 3h11.6a2 2 0 0 0 1.7-3L14 9.5V3\" />\n <path d=\"M7 14h10\" />\n </svg>\n );\n}\n\nexport function BookIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M4 4h5a3 3 0 0 1 3 3v13a2 2 0 0 0-2-2H4z\" />\n <path d=\"M20 4h-5a3 3 0 0 0-3 3v13a2 2 0 0 1 2-2h6z\" />\n </svg>\n );\n}\n\nexport function CheckIcon(props: IconProps) {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n {...strokeProps}\n strokeWidth={2.5}\n {...props}\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\nexport function ClipboardIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n );\n}\n\nexport function ClockIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M12 7v5l3 2\" />\n </svg>\n );\n}\n\nexport function DiscordIcon(props: IconProps) {\n return (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" {...props}>\n <path\n fill=\"currentColor\"\n d=\"M20.32 4.37A19.8 19.8 0 0 0 15.36 2.83a.07.07 0 0 0-.08.04c-.21.38-.45.88-.62 1.27a18.27 18.27 0 0 0-5.52 0 12.84 12.84 0 0 0-.63-1.27.08.08 0 0 0-.08-.04A19.74 19.74 0 0 0 3.47 4.37a.07.07 0 0 0-.03.03C.31 9.07-.55 13.61-.13 18.1a.08.08 0 0 0 .03.06 19.9 19.9 0 0 0 6.08 3.07.08.08 0 0 0 .09-.03c.47-.64.88-1.31 1.24-2.02a.08.08 0 0 0-.04-.1 13.08 13.08 0 0 1-1.9-.91.08.08 0 0 1-.01-.13c.13-.1.25-.2.37-.29a.07.07 0 0 1 .08-.01 14.24 14.24 0 0 0 12.38 0 .07.07 0 0 1 .08.01c.12.1.25.2.38.3a.08.08 0 0 1-.01.12 12.22 12.22 0 0 1-1.9.9.08.08 0 0 0-.04.11c.36.7.77 1.38 1.23 2.02a.08.08 0 0 0 .1.03 19.84 19.84 0 0 0 6.08-3.07.08.08 0 0 0 .03-.05c.5-5.2-.84-9.7-3.77-13.71a.06.06 0 0 0-.03-.03ZM8.02 15.37c-1.18 0-2.16-1.08-2.16-2.4 0-1.32.96-2.4 2.16-2.4 1.2 0 2.18 1.09 2.16 2.4 0 1.32-.96 2.4-2.16 2.4Zm7.96 0c-1.18 0-2.16-1.08-2.16-2.4 0-1.32.96-2.4 2.16-2.4 1.2 0 2.18 1.09 2.16 2.4 0 1.32-.95 2.4-2.16 2.4Z\"\n />\n </svg>\n );\n}\n\nexport function DownloadIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <polyline points=\"7 10 12 15 17 10\" />\n <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\" />\n </svg>\n );\n}\n\nexport function ExternalLinkIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M7 17 17 7M9 7h8v8\" />\n </svg>\n );\n}\n\nexport function GenApiIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"m8 3 4 1.5L16 3v18l-4-1.5L8 21z\" />\n <path d=\"M8 3v18M16 3v18\" />\n </svg>\n );\n}\n\nexport function GitHubIcon(props: IconProps) {\n return (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" {...props}>\n <path\n fill=\"currentColor\"\n d=\"M12 .5A11.5 11.5 0 0 0 8.36 22.9c.58.11.79-.25.79-.56v-2.16c-3.21.7-3.89-1.38-3.89-1.38-.53-1.34-1.29-1.7-1.29-1.7-1.05-.72.08-.7.08-.7 1.16.08 1.77 1.19 1.77 1.19 1.04 1.76 2.71 1.25 3.37.96.11-.75.4-1.25.74-1.54-2.56-.29-5.26-1.28-5.26-5.7 0-1.26.45-2.29 1.19-3.1-.12-.29-.52-1.46.11-3.06 0 0 .97-.31 3.16 1.18a10.88 10.88 0 0 1 5.76 0c2.19-1.49 3.15-1.18 3.15-1.18.63 1.6.23 2.77.11 3.06.74.81 1.19 1.84 1.19 3.1 0 4.43-2.7 5.4-5.27 5.69.41.36.78 1.06.78 2.14v3.19c0 .31.21.68.8.56A11.5 11.5 0 0 0 12 .5Z\"\n />\n </svg>\n );\n}\n\nexport function ImageIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n <circle cx=\"9\" cy=\"9\" r=\"2\" />\n <path d=\"m21 15-5-5L5 21\" />\n </svg>\n );\n}\n\nexport function AudioIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M9 18V5l12-2v13\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <circle cx=\"18\" cy=\"16\" r=\"3\" />\n </svg>\n );\n}\n\nexport function LockIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </svg>\n );\n}\n\nexport function MailIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\" />\n <path d=\"m3 7 9 7 9-7\" />\n </svg>\n );\n}\n\nexport function McpIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <rect x=\"2\" y=\"7\" width=\"8\" height=\"10\" rx=\"1.5\" />\n <rect x=\"14\" y=\"7\" width=\"8\" height=\"10\" rx=\"1.5\" />\n <path d=\"M10 12h4\" />\n </svg>\n );\n}\n\nexport function MenuIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M4 7h16M4 12h16M4 17h16\" />\n </svg>\n );\n}\n\nexport function PlusIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M12 5v14M5 12h14\" />\n </svg>\n );\n}\n\nexport function TerminalIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <polyline points=\"4 8 8 12 4 16\" />\n <line x1=\"12\" y1=\"20\" x2=\"20\" y2=\"20\" />\n </svg>\n );\n}\n\nexport function TokensIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M4 9h16M4 15h16M10 3 8 21M16 3l-2 18\" />\n </svg>\n );\n}\n\nexport function TrendUpIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <polyline points=\"3 17 9 11 13 15 21 7\" />\n <polyline points=\"15 7 21 7 21 13\" />\n </svg>\n );\n}\n\nexport function WalletIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M3 7a2 2 0 0 1 2-2h13a2 2 0 0 1 2 2v2H5a2 2 0 0 0-2 2V7Z\" />\n <path d=\"M3 11a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-6Z\" />\n <circle cx=\"17\" cy=\"14\" r=\"1.25\" fill=\"currentColor\" />\n </svg>\n );\n}\n\nexport function XIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n );\n}\n\nexport type { IconProps } from \"./types.ts\";\n","import type { FC, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { Button } from \"../primitives/Button.tsx\";\nimport { ExternalLinkIcon } from \"../primitives/icons/index.tsx\";\nimport type { ThemeName } from \"../theme.ts\";\n\nexport type ExternalLinkButtonProps = {\n theme: ThemeName;\n href: string;\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n children: ReactNode;\n};\n\nexport const ExternalLinkButton: FC<ExternalLinkButtonProps> = ({\n theme,\n href,\n size = \"md\",\n className,\n children,\n}) => (\n <Button\n as=\"a\"\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n theme={theme}\n size={size}\n className={cn(\"polli:gap-2\", className)}\n >\n <span>{children}</span>\n <ExternalLinkIcon\n className=\"polli:h-4 polli:w-4 polli:shrink-0 polli:opacity-60\"\n aria-hidden=\"true\"\n />\n </Button>\n);\n","import {\n type ChangeEvent,\n type ReactNode,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { partitionFiles, type RejectedFile } from \"../lib/partition-files.ts\";\nimport { IconButton } from \"../primitives/IconButton.tsx\";\nimport { ImageIcon, PlusIcon, XIcon } from \"../primitives/icons/index.tsx\";\nimport type { ThemeName } from \"../theme.ts\";\n\nconst PREVIEWABLE_IMAGE_TYPES = new Set([\n \"image/gif\",\n \"image/jpeg\",\n \"image/png\",\n \"image/webp\",\n]);\nconst PREVIEW_SIZE = 64;\nconst LARGE_PREVIEW_SIZE = 112;\n\nconst previewSizeClasses = {\n sm: \"polli:h-16 polli:w-16\",\n lg: \"polli:h-28 polli:w-28\",\n} as const;\n\nfunction isPreviewableImage(file: File): boolean {\n return PREVIEWABLE_IMAGE_TYPES.has(file.type);\n}\n\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${Math.round(bytes / 1024)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction PreviewPlaceholder({\n icon,\n size,\n}: {\n icon: ReactNode;\n size: \"sm\" | \"lg\";\n}) {\n return (\n <div\n className={cn(\n \"polli:flex polli:items-center polli:justify-center polli:rounded-lg polli:bg-theme-bg-active polli:text-theme-text-soft\",\n previewSizeClasses[size],\n )}\n >\n {icon}\n </div>\n );\n}\n\nfunction FilePreview({\n file,\n placeholderIcon,\n size = \"sm\",\n}: {\n file: File;\n placeholderIcon: ReactNode;\n size?: \"sm\" | \"lg\";\n}) {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const [canPreview, setCanPreview] = useState(() =>\n isPreviewableImage(file),\n );\n const previewSize = size === \"lg\" ? LARGE_PREVIEW_SIZE : PREVIEW_SIZE;\n\n useEffect(() => {\n if (!isPreviewableImage(file)) {\n setCanPreview(false);\n return;\n }\n\n let cancelled = false;\n setCanPreview(true);\n\n async function drawPreview() {\n try {\n const bitmap = await createImageBitmap(file);\n if (cancelled) {\n bitmap.close();\n return;\n }\n\n const canvas = canvasRef.current;\n const context = canvas?.getContext(\"2d\");\n if (!canvas || !context) {\n bitmap.close();\n setCanPreview(false);\n return;\n }\n\n canvas.width = previewSize;\n canvas.height = previewSize;\n\n const scale = Math.max(\n previewSize / bitmap.width,\n previewSize / bitmap.height,\n );\n const width = bitmap.width * scale;\n const height = bitmap.height * scale;\n const x = (previewSize - width) / 2;\n const y = (previewSize - height) / 2;\n\n context.clearRect(0, 0, previewSize, previewSize);\n context.drawImage(bitmap, x, y, width, height);\n bitmap.close();\n } catch {\n if (!cancelled) setCanPreview(false);\n }\n }\n\n void drawPreview();\n\n return () => {\n cancelled = true;\n };\n }, [file, previewSize]);\n\n if (!canPreview) {\n return <PreviewPlaceholder icon={placeholderIcon} size={size} />;\n }\n\n return (\n <canvas\n ref={canvasRef}\n role=\"img\"\n aria-label={file.name}\n className={cn(\"polli:rounded-lg\", previewSizeClasses[size])}\n width={previewSize}\n height={previewSize}\n />\n );\n}\n\nexport type FileUploadProps = {\n value: File[];\n onChange: (files: File[]) => void;\n onReject?: (rejected: RejectedFile[]) => void;\n maxFiles?: number;\n maxSizeBytes?: number;\n accept?: string;\n icon?: ReactNode;\n label?: ReactNode;\n previewIcon?: ReactNode;\n /** Fully locks the field: no add, no remove, drops ignored. */\n disabled?: boolean;\n /** Optional cascade override; defaults to the inherited `[data-theme]`. */\n theme?: ThemeName;\n className?: string;\n};\n\nexport function FileUpload({\n value,\n onChange,\n onReject,\n maxFiles = 4,\n maxSizeBytes = 10 * 1024 * 1024,\n accept = \"image/*\",\n icon = <ImageIcon className=\"polli:h-6 polli:w-6\" />,\n label = (\n <>\n Drag images here or <span className=\"polli:underline\">browse</span>\n </>\n ),\n previewIcon = <ImageIcon className=\"polli:h-5 polli:w-5\" />,\n disabled = false,\n theme,\n className,\n}: FileUploadProps) {\n // A file dropped anywhere outside the zone otherwise triggers the browser's\n // default action — navigating the tab to that file (a blank/file page).\n // Suppress that document-wide so a near-miss drop is a no-op, not a page\n // takeover. (Same intent as react-dropzone's `preventDropOnDocument`.)\n useEffect(() => {\n const prevent = (event: DragEvent) => event.preventDefault();\n document.addEventListener(\"dragover\", prevent);\n document.addEventListener(\"drop\", prevent);\n return () => {\n document.removeEventListener(\"dragover\", prevent);\n document.removeEventListener(\"drop\", prevent);\n };\n }, []);\n\n // Only `disabled` blocks drop handling. At the file limit the browse/add\n // controls disappear, but over-limit drops still flow through partitionFiles\n // and are reported as `{ reason: \"count\" }` via onReject.\n function addFiles(incoming: File[]) {\n if (disabled || incoming.length === 0) return;\n const { accepted, rejected } = partitionFiles(incoming, value, {\n maxFiles,\n maxSizeBytes,\n accept,\n });\n if (accepted.length > 0) onChange([...value, ...accepted]);\n if (rejected.length > 0) onReject?.(rejected);\n }\n\n const hasFiles = value.length > 0;\n const canAdd = !disabled && value.length < maxFiles;\n const isSingleFile = maxFiles === 1;\n const previewSize = isSingleFile ? \"lg\" : \"sm\";\n const inputId = useId();\n const addInputId = `${inputId}-add`;\n\n function handleInputChange(event: ChangeEvent<HTMLInputElement>) {\n addFiles(Array.from(event.target.files ?? []));\n event.target.value = \"\";\n }\n\n return (\n <div\n data-theme={theme}\n className={cn(\"polli:flex polli:flex-col polli:gap-2\", className)}\n >\n <fieldset\n disabled={disabled}\n className={cn(\n \"polli:m-0\",\n \"polli:rounded-xl polli:border polli:border-dashed polli:border-theme-border polli:bg-theme-bg-pale\",\n \"polli:px-4 polli:py-4 polli:text-center polli:text-sm\",\n \"polli:text-theme-text-soft polli:transition-colors\",\n disabled\n ? \"polli:opacity-50\"\n : \"polli:hover:bg-theme-bg-hover\",\n )}\n // Always prevent the browser's default file-drop navigation,\n // even when disabled; only the file handling is gated.\n onDragOver={(e) => e.preventDefault()}\n onDrop={(e) => {\n e.preventDefault();\n if (disabled) return;\n addFiles(Array.from(e.dataTransfer.files));\n }}\n >\n {!hasFiles ? (\n <label\n htmlFor={inputId}\n className={cn(\n \"polli-control polli:flex polli:min-h-32 polli:flex-col polli:items-center polli:justify-center polli:gap-2 polli:rounded-lg\",\n canAdd\n ? \"polli:cursor-pointer\"\n : \"polli:cursor-not-allowed\",\n )}\n >\n {icon}\n <span>{label}</span>\n <input\n id={inputId}\n type=\"file\"\n accept={accept}\n multiple={maxFiles > 1}\n disabled={disabled || !canAdd}\n className=\"polli:sr-only\"\n onChange={handleInputChange}\n />\n </label>\n ) : (\n <div className=\"polli:flex polli:flex-col polli:gap-3\">\n <ul\n className={cn(\n \"polli:m-0 polli:grid polli:grid-cols-[repeat(auto-fill,minmax(5rem,1fr))] polli:gap-3 polli:p-0\",\n isSingleFile &&\n \"polli:flex polli:justify-center\",\n )}\n >\n {value.map((file, index) => (\n <li\n key={`${file.name}-${index}`}\n className={cn(\n \"polli:relative polli:flex polli:min-w-0 polli:list-none polli:flex-col polli:items-center polli:gap-1\",\n isSingleFile && \"polli:max-w-full\",\n )}\n >\n <FilePreview\n file={file}\n placeholderIcon={previewIcon}\n size={previewSize}\n />\n <span\n className={cn(\n \"polli:max-w-full polli:truncate polli:text-xs polli:font-medium polli:text-theme-text-base\",\n isSingleFile\n ? \"polli:w-36\"\n : \"polli:w-16\",\n )}\n >\n {file.name}\n </span>\n <span className=\"polli:text-micro polli:text-theme-text-muted\">\n {formatFileSize(file.size)}\n </span>\n {!disabled && (\n <div className=\"polli:absolute polli:-top-2 polli:right-1\">\n <IconButton\n intent=\"danger\"\n title={`Remove ${file.name}`}\n onClick={() =>\n onChange(\n value.filter(\n (_, i) =>\n i !== index,\n ),\n )\n }\n >\n <XIcon className=\"polli:h-3 polli:w-3\" />\n </IconButton>\n </div>\n )}\n </li>\n ))}\n\n {!isSingleFile && canAdd && (\n <li className=\"polli:flex polli:list-none\">\n <label\n htmlFor={addInputId}\n className=\"polli-control polli:flex polli:min-h-20 polli:w-full polli:cursor-pointer polli:flex-col polli:items-center polli:justify-center polli:gap-1 polli:rounded-lg polli:bg-theme-bg-active polli:px-3 polli:py-2 polli:text-theme-text-soft polli:transition-colors polli:hover:bg-theme-bg-hover polli:hover:text-theme-text-strong\"\n >\n <PlusIcon className=\"polli:h-5 polli:w-5\" />\n <span className=\"polli:text-xs polli:font-medium\">\n Add\n </span>\n <input\n id={addInputId}\n type=\"file\"\n accept={accept}\n multiple\n disabled={disabled || !canAdd}\n className=\"polli:sr-only\"\n onChange={handleInputChange}\n />\n </label>\n </li>\n )}\n </ul>\n\n {maxFiles > 1 && (\n <span className=\"polli:text-xs polli:text-theme-text-muted\">\n {value.length} / {maxFiles} files\n </span>\n )}\n </div>\n )}\n </fieldset>\n </div>\n );\n}\n","export type RejectReason = \"type\" | \"size\" | \"count\";\n\nexport type RejectedFile = { file: File; reason: RejectReason };\n\nexport type PartitionOptions = {\n maxFiles: number;\n maxSizeBytes: number;\n /** Comma-separated list: mime (\"image/png\"), wildcard (\"image/*\"), or extension (\".webp\"). */\n accept?: string;\n};\n\nexport type PartitionResult = {\n accepted: File[];\n rejected: RejectedFile[];\n};\n\nfunction matchesAccept(file: File, accept: string | undefined): boolean {\n if (!accept) return true;\n const tokens = accept\n .split(\",\")\n .map((t) => t.trim())\n .filter(Boolean);\n if (tokens.length === 0) return true;\n return tokens.some((token) => {\n if (token.startsWith(\".\")) {\n return file.name.toLowerCase().endsWith(token.toLowerCase());\n }\n if (token.endsWith(\"/*\")) {\n const prefix = token.slice(0, token.length - 1); // \"image/\"\n return file.type.startsWith(prefix);\n }\n return file.type === token;\n });\n}\n\n/**\n * Partition `incoming` files against the already-selected `current` files.\n * Deterministic: order preserved; every rejection carries a reason.\n * The count limit counts `current.length` against `maxFiles`.\n */\nexport function partitionFiles(\n incoming: File[],\n current: File[],\n { maxFiles, maxSizeBytes, accept }: PartitionOptions,\n): PartitionResult {\n const accepted: File[] = [];\n const rejected: RejectedFile[] = [];\n let slots = Math.max(0, maxFiles - current.length);\n\n for (const file of incoming) {\n if (!matchesAccept(file, accept)) {\n rejected.push({ file, reason: \"type\" });\n } else if (file.size > maxSizeBytes) {\n rejected.push({ file, reason: \"size\" });\n } else if (slots <= 0) {\n rejected.push({ file, reason: \"count\" });\n } else {\n accepted.push(file);\n slots -= 1;\n }\n }\n\n return { accepted, rejected };\n}\n","import type { FC, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\n/** IconButton only supports `danger` (delete icons). */\ntype IconButtonIntent = \"danger\";\n\nconst intentClasses: Record<IconButtonIntent, string> = {\n danger:\n \"polli:bg-intent-danger-bg-light polli:hover:bg-intent-danger-bg-hover \" +\n \"polli:text-intent-danger-text\",\n};\n\n// Default (no intent): cascade-driven theme tile, deeper on hover.\nconst defaultClasses =\n \"polli:bg-theme-bg-active polli:hover:bg-theme-bg-hover \" +\n \"polli:text-theme-text-soft polli:hover:text-theme-text-strong\";\n\ntype IconButtonProps = {\n intent?: IconButtonIntent;\n title?: string;\n onClick: () => void;\n children: ReactNode;\n className?: string;\n};\n\nexport const IconButton: FC<IconButtonProps> = ({\n intent,\n title,\n onClick,\n children,\n className,\n}) => (\n <button\n type=\"button\"\n onClick={onClick}\n title={title}\n aria-label={title}\n data-intent={intent}\n className={cn(\n \"polli-control polli:inline-flex polli:h-6 polli:w-6 polli:cursor-pointer polli:items-center polli:justify-center polli:rounded polli:transition-colors\",\n intent ? intentClasses[intent] : defaultClasses,\n className,\n )}\n >\n {children}\n </button>\n);\n","import type { FC, ReactNode } from \"react\";\nimport { Tooltip } from \"../primitives/Tooltip.tsx\";\n\ntype InfoTipProps = {\n text?: ReactNode;\n content?: ReactNode;\n label?: string;\n};\n\n/**\n * Small \"i\" badge that opens a tooltip on hover, click, or focus.\n *\n * Both the badge and the popup follow the page theme: badge reads\n * `bg-theme-bg-active`; popup uses the universal recipe via `<Tooltip>`\n * (`bg-theme-bg-pale` + `border-theme-border` + `text-theme-text-strong`,\n * viewport-clamped). Cursor on the badge is `cursor-help`.\n */\nexport const InfoTip: FC<InfoTipProps> = ({\n text,\n content,\n label = \"More info\",\n}) => (\n <Tooltip content={content ?? text} ariaLabel={label} className=\"polli:ml-1\">\n <span className=\"polli:inline-flex polli:h-3.5 polli:w-3.5 polli:items-center polli:justify-center polli:rounded-full polli:border polli:border-theme-border polli:bg-theme-bg-active polli:font-bold polli:text-micro polli:text-theme-text-strong polli:transition-colors\">\n i\n </span>\n </Tooltip>\n);\n","import type { ComponentPropsWithoutRef, FC, PropsWithChildren } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\ntype SurfaceVariant = \"panel\" | \"card\" | \"card-themed\";\n\nconst variantClasses: Record<SurfaceVariant, string> = {\n panel: \"polli:rounded-2xl polli:border polli:border-theme-border polli:bg-theme-bg-subtle polli:p-6\",\n card: \"polli:rounded-xl polli:bg-surface-white polli:p-4\",\n \"card-themed\": \"polli:rounded-xl polli:bg-theme-bg-pale polli:p-4\",\n};\n\ntype SurfaceOwnProps = {\n /** Override the cascade theme for this surface's subtree. */\n theme?: ThemeName;\n /**\n * Visual role.\n * - `panel` — outer container: bordered, semi-transparent theme bg\n * - `card` — borderless white inner (default)\n * - `card-themed` — borderless theme-tinted inner (deeper than panel)\n */\n variant?: SurfaceVariant;\n className?: string;\n};\n\ntype SurfaceProps = PropsWithChildren<\n SurfaceOwnProps &\n Omit<ComponentPropsWithoutRef<\"div\">, keyof SurfaceOwnProps | \"color\">\n>;\n\nexport const Surface: FC<SurfaceProps> = ({\n theme,\n variant = \"card\",\n className,\n children,\n ...rest\n}) => (\n <div\n {...rest}\n data-theme={theme}\n className={cn(\"polli:min-w-0\", variantClasses[variant], className)}\n >\n {children}\n </div>\n);\n","import type { PropsWithChildren } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { ExternalLinkIcon } from \"../primitives/icons/index.tsx\";\nimport { Surface } from \"../primitives/Surface.tsx\";\nimport type { ThemeName } from \"../theme.ts\";\n\ntype BaseLinkCardProps = {\n /** Override the cascade theme for this card's subtree. */\n theme?: ThemeName;\n external?: boolean;\n showIcon?: boolean;\n className?: string;\n surfaceClassName?: string;\n};\n\nexport type LinkCardProps<T extends React.ElementType = \"a\"> =\n PropsWithChildren<BaseLinkCardProps> & {\n as?: T;\n } & Omit<React.ComponentPropsWithoutRef<T>, keyof BaseLinkCardProps | \"as\">;\n\nfunction isExternalHref(href: unknown): boolean {\n return typeof href === \"string\" && /^https?:\\/\\//.test(href);\n}\n\nexport function LinkCard<T extends React.ElementType = \"a\">({\n as,\n theme,\n external,\n showIcon = true,\n className,\n surfaceClassName,\n children,\n ...linkProps\n}: LinkCardProps<T>) {\n const Component: React.ElementType = as || \"a\";\n const isExternal =\n external ?? isExternalHref((linkProps as { href?: unknown }).href);\n\n return (\n <Component\n data-theme={theme}\n target={isExternal ? \"_blank\" : undefined}\n rel={isExternal ? \"noopener noreferrer\" : undefined}\n className={cn(\n \"polli:group polli:block polli:h-full polli:rounded-xl polli:outline-none\",\n className,\n )}\n {...linkProps}\n >\n <Surface\n theme={theme}\n variant=\"card\"\n className={cn(\n \"polli:relative polli:flex polli:h-full polli:flex-col polli:gap-2 polli:bg-surface-opaque/80 polli:p-5\",\n showIcon && isExternal && \"polli:pr-10\",\n \"polli:transition polli:group-hover:-translate-y-0.5 polli:group-hover:bg-surface-opaque/95\",\n \"polli:group-focus-visible:ring-2 polli:group-focus-visible:ring-theme-border\",\n surfaceClassName,\n )}\n >\n {showIcon && isExternal && (\n <ExternalLinkIcon\n aria-hidden=\"true\"\n className=\"polli:absolute polli:top-4 polli:right-4 polli:h-3.5 polli:w-3.5 polli:text-theme-text-soft\"\n />\n )}\n {children}\n </Surface>\n </Component>\n );\n}\n","import ReactMarkdown, { type Components } from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport { cn } from \"../lib/cn.ts\";\n\nexport type MarkdownProps = {\n children: string;\n className?: string;\n};\n\nconst components: Components = {\n ul: ({ node, ...props }) => (\n <ul\n className=\"polli:flex polli:min-w-0 polli:list-disc polli:flex-col polli:gap-1 polli:pl-5 polli:marker:text-theme-text-muted\"\n {...props}\n />\n ),\n ol: ({ node, ...props }) => (\n <ol\n className=\"polli:flex polli:min-w-0 polli:list-decimal polli:flex-col polli:gap-1 polli:pl-5 polli:marker:text-theme-text-muted\"\n {...props}\n />\n ),\n p: ({ node, ...props }) => (\n <p className=\"polli:mb-2 polli:last:mb-0\" {...props} />\n ),\n strong: ({ node, ...props }) => (\n <strong\n className=\"polli:font-semibold polli:text-theme-text-strong\"\n {...props}\n />\n ),\n code: ({ node, ...props }) => (\n <code\n className=\"polli:break-words polli:rounded polli:bg-theme-bg-subtle polli:px-1 polli:py-0.5 polli:font-mono polli:text-xs\"\n {...props}\n />\n ),\n a: ({ node, ...props }) => (\n <a\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"polli-control polli:rounded-sm polli:font-semibold polli:text-theme-text-strong polli:underline polli:underline-offset-2\"\n {...props}\n />\n ),\n};\n\n/** Compact markdown for cards and snippets. Use Prose for document-style content. */\nexport function Markdown({ children, className }: MarkdownProps) {\n return (\n <div\n className={cn(\n \"polli:min-w-0 polli:font-body polli:leading-relaxed\",\n className,\n )}\n >\n <ReactMarkdown remarkPlugins={[remarkGfm]} components={components}>\n {children}\n </ReactMarkdown>\n </div>\n );\n}\n","import type { ComponentPropsWithoutRef, FC, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { Text } from \"../primitives/Typography.tsx\";\nimport type { ThemeName } from \"../theme.ts\";\n\nexport type MediaPlaceholderProps = ComponentPropsWithoutRef<\"div\"> & {\n theme?: ThemeName;\n icon?: ReactNode;\n label?: ReactNode;\n detail?: ReactNode;\n action?: ReactNode;\n};\n\nexport const MediaPlaceholder: FC<MediaPlaceholderProps> = ({\n theme,\n icon,\n label,\n detail,\n action,\n children,\n className,\n ...rest\n}) => (\n <div\n {...rest}\n data-theme={theme}\n className={cn(\n \"polli:flex polli:aspect-video polli:min-h-40 polli:flex-col polli:items-center polli:justify-center polli:gap-3 polli:rounded-lg polli:border polli:border-dashed polli:border-theme-border polli:bg-theme-bg-pale polli:p-6 polli:text-center\",\n className,\n )}\n >\n {icon && (\n <div className=\"polli:flex polli:h-10 polli:w-10 polli:items-center polli:justify-center polli:rounded-full polli:bg-theme-bg-active polli:text-theme-text-base\">\n {icon}\n </div>\n )}\n {(label || detail) && (\n <div className=\"polli:max-w-sm\">\n {label && (\n <Text as=\"p\" size=\"sm\" tone=\"strong\" weight=\"semibold\">\n {label}\n </Text>\n )}\n {detail && (\n <Text as=\"p\" size=\"sm\" tone=\"soft\" className=\"polli:mt-1\">\n {detail}\n </Text>\n )}\n </div>\n )}\n {children}\n {action}\n </div>\n);\n","import { Popover } from \"@ark-ui/react/popover\";\nimport { Portal } from \"@ark-ui/react/portal\";\nimport type { FC, ReactNode } from \"react\";\nimport { useState } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\nconst DEFAULT_PANEL =\n \"polli:rounded-lg polli:border polli:border-theme-border polli:bg-theme-bg-pale polli:shadow-lg\";\n\nexport type DropdownProps = {\n theme: ThemeName;\n /** Trigger element; receives the current open state (e.g. to rotate a chevron). */\n trigger: (open: boolean) => ReactNode;\n /** Panel content. As a function, receives `close` to dismiss after a selection. */\n children: ReactNode | ((close: () => void) => ReactNode);\n /** Panel placement relative to the trigger. */\n align?: \"start\" | \"end\";\n /** Controlled open state. Omit to let the Dropdown manage its own. */\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Appended after the surface (widths, padding, max-height…). */\n className?: string;\n};\n\nexport const Dropdown: FC<DropdownProps> = ({\n theme,\n trigger,\n children,\n align = \"start\",\n open: openProp,\n onOpenChange,\n className,\n}) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = openProp !== undefined;\n const open = isControlled ? openProp : internalOpen;\n\n const setOpen = (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n };\n\n return (\n <Popover.Root\n open={open}\n onOpenChange={(details) => setOpen(details.open)}\n positioning={{\n placement: align === \"end\" ? \"bottom-end\" : \"bottom-start\",\n }}\n >\n <Popover.Trigger asChild>{trigger(open)}</Popover.Trigger>\n <Portal>\n <Popover.Positioner>\n <Popover.Content\n data-theme={theme}\n className={cn(\n \"polli:z-50 polli:overflow-hidden polli:focus:outline-none\",\n DEFAULT_PANEL,\n className,\n )}\n >\n {typeof children === \"function\"\n ? children(() => setOpen(false))\n : children}\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n );\n};\n","import type { FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { ChevronIcon } from \"../primitives/ChevronIcon.tsx\";\nimport { Dropdown } from \"../primitives/Dropdown.tsx\";\nimport { ScrollArea } from \"../primitives/ScrollArea.tsx\";\nimport type { ThemeName } from \"../theme.ts\";\n\nexport type MultiSelectOption = {\n value: string;\n label: string;\n};\n\nexport type MultiSelectProps = {\n options: MultiSelectOption[];\n selected: string[];\n onChange: (selected: string[]) => void;\n placeholder: string;\n disabled?: boolean;\n disabledText?: string;\n align?: \"start\" | \"end\";\n label?: string;\n theme: ThemeName;\n};\n\nconst TRIGGER_BASE =\n \"polli-control polli:inline-flex polli:min-h-8 polli:min-w-[140px] polli:items-center polli:gap-2 polli:rounded-full polli:border polli:px-3 polli:py-1.5 polli:text-xs polli:font-medium polli:transition-all polli:duration-200\";\n\nconst ROW_BASE =\n \"polli-control polli:flex polli:w-full polli:items-center polli:gap-3 polli:px-3 polli:py-2 polli:text-left polli:text-xs polli:transition-colors\";\n\nconst CHECK_BASE =\n \"polli:flex polli:h-4 polli:w-4 polli:flex-shrink-0 polli:items-center polli:justify-center polli:rounded polli:border polli:border-theme-border polli:text-xs\";\n\nexport const MultiSelect: FC<MultiSelectProps> = ({\n options,\n selected,\n onChange,\n placeholder,\n disabled,\n disabledText,\n align = \"start\",\n label,\n theme,\n}) => {\n const isAllSelected = selected.length === 0;\n\n const toggleItem = (itemId: string) => {\n if (selected.includes(itemId)) {\n onChange(selected.filter((m) => m !== itemId));\n } else {\n onChange([...selected, itemId]);\n }\n };\n\n const selectAll = () => onChange([]);\n\n const displayText = disabled\n ? disabledText\n : isAllSelected\n ? \"All\"\n : `${selected.length} selected`;\n\n const labelNode = label ? (\n <span className=\"polli:text-xs polli:font-medium polli:text-theme-text-soft\">\n {label}\n </span>\n ) : null;\n\n if (disabled) {\n return (\n <div\n data-theme={theme}\n className=\"polli:group polli:relative polli:flex polli:items-center polli:gap-2\"\n >\n {labelNode}\n <button\n type=\"button\"\n disabled\n className={cn(\n TRIGGER_BASE,\n \"polli:cursor-not-allowed polli:border-theme-border polli:bg-theme-bg-subtle polli:opacity-60\",\n )}\n >\n <span className=\"polli:flex-1 polli:truncate polli:text-left polli:text-theme-text-soft/60\">\n {displayText}\n </span>\n <ChevronIcon\n expanded={false}\n className=\"polli:h-3 polli:w-3 polli:text-theme-text-soft\"\n />\n </button>\n <span className=\"polli:pointer-events-none polli:absolute polli:-top-8 polli:left-1/2 polli:z-[100] polli:-translate-x-1/2 polli:whitespace-nowrap polli:rounded-md polli:border polli:border-theme-border polli:bg-theme-bg-pale polli:px-2 polli:py-1 polli:text-xs polli:text-theme-text-strong polli:opacity-0 polli:shadow-sm polli:transition-opacity polli:group-hover:opacity-100\">\n No items available\n </span>\n </div>\n );\n }\n\n return (\n <div\n data-theme={theme}\n className=\"polli:flex polli:items-center polli:gap-2\"\n >\n {labelNode}\n <Dropdown\n theme={theme}\n align={align}\n className=\"polli:min-w-[320px]\"\n trigger={(open) => (\n <button\n type=\"button\"\n className={cn(\n TRIGGER_BASE,\n open\n ? \"polli:border-theme-border polli:bg-theme-bg-active\"\n : \"polli:border-theme-border polli:bg-theme-bg-subtle polli:hover:bg-theme-bg-pale\",\n )}\n >\n <span\n className={cn(\n \"polli:flex-1 polli:truncate polli:text-left\",\n open\n ? \"polli:text-theme-text-strong\"\n : \"polli:text-theme-text-base\",\n )}\n >\n {displayText}\n </span>\n <ChevronIcon\n expanded={open}\n className={cn(\n \"polli:h-3 polli:w-3 polli:transition-transform\",\n open\n ? \"polli:text-theme-text-strong\"\n : \"polli:text-theme-text-soft\",\n )}\n />\n </button>\n )}\n >\n <ScrollArea theme={theme} className=\"polli:max-h-64\">\n <button\n type=\"button\"\n onClick={selectAll}\n className={cn(\n ROW_BASE,\n isAllSelected\n ? \"polli:bg-theme-bg-active polli:font-medium polli:text-theme-text-strong\"\n : \"polli:text-theme-text-base polli:hover:bg-theme-bg-subtle\",\n )}\n >\n <span\n className={cn(\n CHECK_BASE,\n isAllSelected &&\n \"polli:bg-theme-bg-active polli:text-theme-text-strong\",\n )}\n >\n {isAllSelected && \"✓\"}\n </span>\n {placeholder}\n </button>\n {options.map((opt) => {\n const isChecked = selected.includes(opt.value);\n return (\n <button\n type=\"button\"\n key={opt.value}\n onClick={() => toggleItem(opt.value)}\n className={cn(\n ROW_BASE,\n isChecked\n ? \"polli:bg-theme-bg-active polli:text-theme-text-strong\"\n : \"polli:text-theme-text-base polli:hover:bg-theme-bg-subtle\",\n )}\n >\n <span\n className={cn(\n CHECK_BASE,\n isChecked &&\n \"polli:bg-theme-bg-active polli:text-theme-text-strong\",\n )}\n >\n {isChecked && \"✓\"}\n </span>\n <span className=\"polli:whitespace-nowrap\">\n {opt.label}\n </span>\n </button>\n );\n })}\n </ScrollArea>\n </Dropdown>\n </div>\n );\n};\n","import type { PropsWithChildren } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\ntype BaseNavItemProps = {\n /** Section color via the `[data-theme]` cascade — tints the dot + active fill. */\n theme?: ThemeName;\n /** Current/selected item — fills with the section color + sets `aria-current`. */\n active?: boolean;\n className?: string;\n};\n\n// Same recipe as the enter dashboard sidebar item: neutral/quiet when inactive,\n// section-colored dot always, filled with the section color when active.\nconst base =\n \"polli-control polli:flex polli:items-center polli:gap-2 polli:rounded-full polli:px-3 polli:py-2 polli:text-left polli:text-sm polli:font-medium polli:whitespace-nowrap polli:transition-colors\";\nconst activeClasses = \"polli:bg-theme-bg-active polli:text-theme-text-strong\";\nconst inactiveClasses =\n \"polli:text-ink-800 polli:hover:bg-surface-opaque/60 polli:hover:text-ink-950\";\nconst dotClasses =\n \"polli:h-2.5 polli:w-2.5 polli:shrink-0 polli:rounded-full polli:bg-theme-bg-hover polli:ring-1 polli:ring-inset polli:ring-ink-950/10\";\n\nexport type NavItemProps<T extends React.ElementType = \"button\"> =\n PropsWithChildren<BaseNavItemProps> & {\n as?: T;\n } & Omit<React.ComponentPropsWithoutRef<T>, keyof BaseNavItemProps | \"as\">;\n\n/**\n * Minimal nav item — a themed pill with a persistent section-color dot, neutral\n * when inactive and filled with the section color when active. Polymorphic:\n * `<NavItem>` (button) for in-page nav, `<NavItem as={Link} active={…}>` for\n * routed nav. Mirrors enter's sidebar item so both apps share one design.\n */\nexport function NavItem<T extends React.ElementType = \"button\">({\n as,\n theme,\n active = false,\n className,\n children,\n ...rest\n}: NavItemProps<T>) {\n const Component: React.ElementType = as || \"button\";\n return (\n <Component\n data-theme={theme}\n aria-current={active ? \"page\" : undefined}\n className={cn(\n base,\n active ? activeClasses : inactiveClasses,\n className,\n )}\n {...rest}\n >\n <span aria-hidden=\"true\" className={dotClasses} />\n {children}\n </Component>\n );\n}\n","import type { FC } from \"react\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport {\n addUtcDays,\n isPeriodSelectable,\n type PeriodGranularity,\n type PeriodSelection,\n periodFromDate,\n periodToWindow,\n startOfUtcDay,\n} from \"../lib/period.ts\";\nimport { ChevronIcon } from \"../primitives/ChevronIcon.tsx\";\nimport { Dropdown } from \"../primitives/Dropdown.tsx\";\nimport { TabButton } from \"../primitives/TabButton.tsx\";\nimport type { ThemeName } from \"../theme.ts\";\n\nexport type PeriodPickerProps = {\n value: PeriodSelection;\n onChange: (value: PeriodSelection) => void;\n theme: ThemeName;\n minDate?: Date;\n maxDate?: Date;\n};\n\nconst WEEKDAY_LABELS = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\nconst MONTH_LABELS = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n];\n\nconst NAV_BUTTON =\n \"polli-control polli:rounded-full polli:px-2 polli:py-1 polli:text-xs polli:font-semibold polli:text-theme-text-base polli:transition-colors polli:hover:bg-theme-bg-subtle\";\n\nfunction addUtcMonths(date: Date, months: number): Date {\n return new Date(\n Date.UTC(date.getUTCFullYear(), date.getUTCMonth() + months, 1),\n );\n}\n\nfunction monthGridDates(viewMonth: Date): Date[] {\n const firstDay = new Date(\n Date.UTC(viewMonth.getUTCFullYear(), viewMonth.getUTCMonth(), 1),\n );\n const firstWeekday = firstDay.getUTCDay() || 7;\n const cursor = addUtcDays(firstDay, 1 - firstWeekday);\n return Array.from({ length: 42 }, (_, index) => addUtcDays(cursor, index));\n}\n\nfunction sameUtcDay(left: Date, right: Date): boolean {\n return left.getTime() === right.getTime();\n}\n\nfunction periodDate(value: PeriodSelection): Date {\n return periodToWindow(value).start;\n}\n\nfunction selectionKey(value: PeriodSelection): string {\n return `${value.granularity}:${value.period}`;\n}\n\nfunction formatMonthYear(date: Date, month: \"short\" | \"long\" = \"short\") {\n return date.toLocaleDateString(\"en-US\", {\n timeZone: \"UTC\",\n month,\n year: \"numeric\",\n });\n}\n\nfunction formatFullDate(date: Date) {\n return date.toLocaleDateString(\"en-US\", {\n timeZone: \"UTC\",\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n });\n}\n\nfunction formatWeekSummary(start: Date, end: Date) {\n const weekEnd = addUtcDays(end, -1);\n const sameMonth =\n start.getUTCFullYear() === weekEnd.getUTCFullYear() &&\n start.getUTCMonth() === weekEnd.getUTCMonth();\n\n if (sameMonth) {\n const month = start.toLocaleDateString(\"en-US\", {\n timeZone: \"UTC\",\n month: \"short\",\n });\n return `${month} ${start.getUTCDate()}-${weekEnd.getUTCDate()}, ${weekEnd.getUTCFullYear()}`;\n }\n\n return `${formatFullDate(start)} - ${formatFullDate(weekEnd)}`;\n}\n\nfunction formatPeriodSummary(value: PeriodSelection): string {\n const { start, end } = periodToWindow(value);\n if (value.granularity === \"day\") return formatFullDate(start);\n if (value.granularity === \"week\") return formatWeekSummary(start, end);\n return formatMonthYear(start, \"long\");\n}\n\nfunction viewBounds(\n viewDate: Date,\n granularity: PeriodGranularity,\n): { start: Date; end: Date } {\n if (granularity === \"month\") {\n const start = new Date(Date.UTC(viewDate.getUTCFullYear(), 0, 1));\n return { start, end: addUtcMonths(start, 12) };\n }\n\n const start = new Date(\n Date.UTC(viewDate.getUTCFullYear(), viewDate.getUTCMonth(), 1),\n );\n return { start, end: addUtcMonths(start, 1) };\n}\n\nexport const PeriodPicker: FC<PeriodPickerProps> = ({\n value,\n onChange,\n theme,\n minDate = new Date(0),\n maxDate,\n}) => {\n const [open, setOpen] = useState(false);\n const [viewDate, setViewDate] = useState<Date>(() => periodDate(value));\n const [anchorDate, setAnchorDate] = useState<Date>(() => periodDate(value));\n const emittedSelectionRef = useRef<string | null>(null);\n const { granularity, period } = value;\n\n useEffect(() => {\n const currentSelectionKey = selectionKey({ granularity, period });\n if (emittedSelectionRef.current === currentSelectionKey) {\n emittedSelectionRef.current = null;\n return;\n }\n const nextAnchorDate = periodDate({ granularity, period });\n setAnchorDate(nextAnchorDate);\n setViewDate(nextAnchorDate);\n }, [granularity, period]);\n\n const dates = useMemo(() => monthGridDates(viewDate), [viewDate]);\n const selectedWindow = periodToWindow(value);\n const today = startOfUtcDay(maxDate);\n const previousViewDate =\n value.granularity === \"month\"\n ? addUtcMonths(viewDate, -12)\n : addUtcMonths(viewDate, -1);\n const nextViewDate =\n value.granularity === \"month\"\n ? addUtcMonths(viewDate, 12)\n : addUtcMonths(viewDate, 1);\n const previousBounds = viewBounds(previousViewDate, value.granularity);\n const nextBounds = viewBounds(nextViewDate, value.granularity);\n const previousDisabled = previousBounds.end <= minDate;\n const nextDisabled = nextBounds.start > today;\n const summaryLabel = formatPeriodSummary(value);\n\n const commitSelection = (selection: PeriodSelection, anchor: Date) => {\n emittedSelectionRef.current = selectionKey(selection);\n setAnchorDate(anchor);\n setViewDate(anchor);\n onChange(selection);\n };\n\n const setGranularity = (granularity: PeriodGranularity) => {\n commitSelection(periodFromDate(granularity, anchorDate), anchorDate);\n };\n\n const selectDate = (date: Date) => {\n commitSelection(periodFromDate(value.granularity, date), date);\n setOpen(false);\n };\n\n const viewLabel =\n value.granularity === \"month\"\n ? String(viewDate.getUTCFullYear())\n : formatMonthYear(viewDate, \"long\");\n\n return (\n <div\n data-theme={theme}\n className=\"polli:flex polli:flex-wrap polli:items-center polli:gap-2\"\n >\n <div className=\"polli:flex polli:flex-wrap polli:gap-1.5\">\n {([\"day\", \"week\", \"month\"] as PeriodGranularity[]).map(\n (granularity) => (\n <TabButton\n key={granularity}\n active={value.granularity === granularity}\n onClick={() => setGranularity(granularity)}\n >\n {granularity[0].toUpperCase() +\n granularity.slice(1)}\n </TabButton>\n ),\n )}\n </div>\n <Dropdown\n theme={theme}\n open={open}\n onOpenChange={setOpen}\n className=\"polli:w-[320px] polli:rounded-xl polli:p-3.5\"\n trigger={(isOpen) => (\n <button\n type=\"button\"\n aria-label={`Select period, current ${summaryLabel}`}\n className={cn(\n \"polli-control polli:inline-flex polli:w-[19rem] polli:max-w-full polli:items-center polli:justify-between polli:gap-2 polli:rounded-full polli:border polli:px-5 polli:pt-2 polli:pb-2.5 polli:text-left polli:text-base polli:font-medium polli:leading-normal\",\n \"polli:border-theme-border polli:bg-theme-bg-subtle polli:text-theme-text-base\",\n \"polli:transition-all polli:duration-200 polli:ease-out polli:hover:bg-theme-bg-pale\",\n isOpen &&\n \"polli:bg-theme-bg-active polli:text-theme-text-strong polli:shadow-sm\",\n )}\n >\n <span className=\"polli:truncate\">{summaryLabel}</span>\n <ChevronIcon expanded={isOpen} />\n </button>\n )}\n >\n <div className=\"polli:mb-3 polli:flex polli:items-center polli:justify-between\">\n <button\n type=\"button\"\n aria-label=\"Previous\"\n disabled={previousDisabled}\n onClick={() => setViewDate(previousViewDate)}\n className={cn(\n NAV_BUTTON,\n previousDisabled &&\n \"polli:cursor-not-allowed polli:opacity-30 polli:hover:bg-transparent\",\n )}\n >\n {\"<\"}\n </button>\n <div className=\"polli:text-base polli:font-bold polli:text-theme-text-base\">\n {viewLabel}\n </div>\n <button\n type=\"button\"\n aria-label=\"Next\"\n disabled={nextDisabled}\n onClick={() => setViewDate(nextViewDate)}\n className={cn(\n NAV_BUTTON,\n nextDisabled &&\n \"polli:cursor-not-allowed polli:opacity-30 polli:hover:bg-transparent\",\n )}\n >\n {\">\"}\n </button>\n </div>\n\n {value.granularity === \"month\" ? (\n <div className=\"polli:grid polli:grid-cols-3 polli:gap-1.5\">\n {MONTH_LABELS.map((label, monthIndex) => {\n const date = new Date(\n Date.UTC(\n viewDate.getUTCFullYear(),\n monthIndex,\n 1,\n ),\n );\n const selectable = isPeriodSelectable(\n periodFromDate(\"month\", date),\n minDate,\n today,\n );\n const ariaLabel = date.toLocaleDateString(\"en-US\", {\n timeZone: \"UTC\",\n month: \"long\",\n year: \"numeric\",\n });\n const selected =\n date.getUTCFullYear() ===\n selectedWindow.start.getUTCFullYear() &&\n date.getUTCMonth() ===\n selectedWindow.start.getUTCMonth();\n return (\n <button\n type=\"button\"\n key={label}\n aria-label={ariaLabel}\n disabled={!selectable}\n onClick={() => selectDate(date)}\n className={cn(\n \"polli-control polli:rounded-lg polli:px-3 polli:py-2 polli:text-sm polli:font-medium polli:transition-colors polli:duration-150\",\n selected\n ? \"polli:bg-theme-bg-active polli:text-theme-text-strong\"\n : \"polli:text-ink-700 polli:hover:bg-theme-bg-subtle\",\n !selectable &&\n \"polli:cursor-not-allowed polli:text-ink-300 polli:hover:bg-transparent\",\n )}\n >\n {label}\n </button>\n );\n })}\n </div>\n ) : (\n <>\n <div className=\"polli:mb-1 polli:grid polli:grid-cols-7 polli:gap-1 polli:text-center polli:text-xs polli:font-bold polli:uppercase polli:text-ink-400\">\n {WEEKDAY_LABELS.map((label) => (\n <div key={label}>{label}</div>\n ))}\n </div>\n <div className=\"polli:grid polli:grid-cols-7 polli:gap-1\">\n {dates.map((date) => {\n const inCurrentMonth =\n date.getUTCMonth() ===\n viewDate.getUTCMonth();\n const selectable = isPeriodSelectable(\n periodFromDate(value.granularity, date),\n minDate,\n today,\n );\n const ariaLabel =\n value.granularity === \"week\"\n ? `Select ${formatPeriodSummary(periodFromDate(\"week\", date))}`\n : `Select ${date.toLocaleDateString(\n \"en-US\",\n {\n timeZone: \"UTC\",\n weekday: \"long\",\n month: \"long\",\n day: \"numeric\",\n year: \"numeric\",\n },\n )}`;\n const selected =\n value.granularity === \"day\"\n ? sameUtcDay(date, selectedWindow.start)\n : date >= selectedWindow.start &&\n date < selectedWindow.end;\n return (\n <button\n type=\"button\"\n key={date.toISOString()}\n aria-label={ariaLabel}\n disabled={!selectable}\n onClick={() => selectDate(date)}\n className={cn(\n \"polli-control polli:aspect-square polli:rounded-lg polli:text-sm polli:font-medium polli:transition-colors polli:duration-150\",\n !inCurrentMonth &&\n \"polli:text-ink-300\",\n sameUtcDay(date, today) &&\n \"polli:ring-1 polli:ring-theme-border\",\n selected\n ? \"polli:bg-theme-bg-active polli:text-theme-text-strong\"\n : \"polli:text-ink-700 polli:hover:bg-theme-bg-subtle\",\n !selectable &&\n \"polli:cursor-not-allowed polli:text-ink-300 polli:hover:bg-transparent\",\n )}\n >\n {date.getUTCDate()}\n </button>\n );\n })}\n </div>\n </>\n )}\n </Dropdown>\n </div>\n );\n};\n","const MS_PER_DAY = 86400000;\n\nexport type PeriodGranularity = \"day\" | \"week\" | \"month\";\n\nexport type PeriodSelection = {\n granularity: PeriodGranularity;\n period: string;\n};\n\nexport type PeriodWindow = {\n start: Date;\n end: Date;\n};\n\nexport function startOfUtcDay(date = new Date()): Date {\n return new Date(\n Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()),\n );\n}\n\nexport function addUtcDays(date: Date, days: number): Date {\n const next = new Date(date);\n next.setUTCDate(next.getUTCDate() + days);\n return next;\n}\n\nfunction startOfUtcMonth(date: Date): Date {\n return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), 1));\n}\n\nfunction addUtcMonths(date: Date, months: number): Date {\n return new Date(\n Date.UTC(date.getUTCFullYear(), date.getUTCMonth() + months, 1),\n );\n}\n\nfunction startOfUtcIsoWeek(date: Date): Date {\n const day = date.getUTCDay() || 7;\n return addUtcDays(startOfUtcDay(date), 1 - day);\n}\n\nfunction getUtcIsoWeekPeriod(date: Date): string {\n const day = date.getUTCDay() || 7;\n const thursday = addUtcDays(startOfUtcDay(date), 4 - day);\n const isoYear = thursday.getUTCFullYear();\n const yearStart = new Date(Date.UTC(isoYear, 0, 1));\n const isoWeek = Math.ceil(\n ((thursday.getTime() - yearStart.getTime()) / MS_PER_DAY + 1) / 7,\n );\n return `${isoYear}-W${String(isoWeek).padStart(2, \"0\")}`;\n}\n\nfunction formatUtcDatePeriod(date: Date): string {\n return date.toISOString().slice(0, 10);\n}\n\nfunction formatUtcHourPeriod(date: Date): string {\n return date.toISOString().slice(0, 13).replace(\"T\", \" \");\n}\n\nfunction formatUtcMonthPeriod(date: Date): string {\n return date.toISOString().slice(0, 7);\n}\n\nexport function periodFromDate(\n granularity: PeriodGranularity,\n date = new Date(),\n): PeriodSelection {\n if (granularity === \"day\") {\n return {\n granularity,\n period: formatUtcDatePeriod(startOfUtcDay(date)),\n };\n }\n if (granularity === \"week\") {\n return { granularity, period: getUtcIsoWeekPeriod(date) };\n }\n return { granularity, period: formatUtcMonthPeriod(startOfUtcMonth(date)) };\n}\n\nexport function currentPeriod(): PeriodSelection {\n return periodFromDate(\"day\");\n}\n\nexport function periodToWindow(selection: PeriodSelection): PeriodWindow {\n if (selection.granularity === \"day\") {\n const start = new Date(`${selection.period}T00:00:00.000Z`);\n return { start, end: addUtcDays(start, 1) };\n }\n\n if (selection.granularity === \"week\") {\n const [yearText, weekText] = selection.period.split(\"-W\");\n const isoYear = Number(yearText);\n const isoWeek = Number(weekText);\n const jan4 = new Date(Date.UTC(isoYear, 0, 4));\n const start = addUtcDays(startOfUtcIsoWeek(jan4), (isoWeek - 1) * 7);\n return { start, end: addUtcDays(start, 7) };\n }\n\n const [yearText, monthText] = selection.period.split(\"-\");\n const start = new Date(\n Date.UTC(Number(yearText), Number(monthText) - 1, 1),\n );\n return { start, end: addUtcMonths(start, 1) };\n}\n\nexport function formatPeriodLabel(selection: PeriodSelection): string {\n const { start, end } = periodToWindow(selection);\n\n if (selection.granularity === \"day\") {\n const today = startOfUtcDay();\n const yesterday = addUtcDays(today, -1);\n if (start.getTime() === today.getTime()) return \"Today\";\n if (start.getTime() === yesterday.getTime()) return \"Yesterday\";\n return start.toLocaleDateString(\"en-US\", {\n timeZone: \"UTC\",\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n });\n }\n\n if (selection.granularity === \"week\") {\n const weekEnd = addUtcDays(end, -1);\n return `${start.toLocaleDateString(\"en-US\", {\n timeZone: \"UTC\",\n month: \"short\",\n day: \"numeric\",\n })} - ${weekEnd.toLocaleDateString(\"en-US\", {\n timeZone: \"UTC\",\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n })}`;\n }\n\n return start.toLocaleDateString(\"en-US\", {\n timeZone: \"UTC\",\n month: \"long\",\n year: \"numeric\",\n });\n}\n\nexport function getPeriodBucketKeys(selection: PeriodSelection): string[] {\n const { start, end } = periodToWindow(selection);\n const bucketKeys: string[] = [];\n const cursor = new Date(start);\n if (selection.granularity === \"day\") {\n while (cursor < end) {\n bucketKeys.push(`${formatUtcHourPeriod(cursor)}:00:00`);\n cursor.setUTCHours(cursor.getUTCHours() + 1);\n }\n return bucketKeys;\n }\n\n while (cursor < end) {\n bucketKeys.push(formatUtcDatePeriod(cursor));\n cursor.setUTCDate(cursor.getUTCDate() + 1);\n }\n return bucketKeys;\n}\n\nexport function periodBucketKeyToDate(\n bucketKey: string,\n granularity: PeriodGranularity,\n): Date {\n if (granularity === \"day\") {\n return new Date(`${bucketKey.replace(\" \", \"T\")}.000Z`);\n }\n return new Date(`${bucketKey}T00:00:00.000Z`);\n}\n\nexport function isPeriodSelectable(\n selection: PeriodSelection,\n minDate = new Date(0),\n maxDate = startOfUtcDay(),\n): boolean {\n const { start, end } = periodToWindow(selection);\n return end > minDate && start <= maxDate;\n}\n","import type { FC, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\nexport type TabButtonProps = {\n active: boolean;\n onClick: () => void;\n children: ReactNode;\n /** Optional cascade override; defaults to inherited [data-theme]. */\n theme?: ThemeName;\n size?: \"md\" | \"sm\";\n variant?: \"default\" | \"ghost\";\n ariaLabel?: string;\n disabled?: boolean;\n className?: string;\n};\n\nconst sizeClasses = {\n md: \"polli:px-4 polli:py-1.5 polli:text-base\",\n sm: \"polli:px-3 polli:py-1.5 polli:text-sm\",\n} as const;\n\nconst variantClasses = {\n default: {\n base: \"polli:border\",\n active: \"polli:bg-theme-bg-active polli:text-theme-text-strong polli:border-theme-border\",\n inactive:\n \"polli:bg-theme-bg-subtle polli:text-theme-text-base polli:border-theme-border polli:hover:bg-theme-bg-active\",\n },\n ghost: {\n base: \"polli:border polli:border-transparent\",\n active: \"polli:bg-theme-bg-active polli:text-theme-text-strong\",\n inactive:\n \"polli:bg-transparent polli:text-theme-text-base polli:hover:bg-theme-bg-subtle polli:hover:text-theme-text-strong\",\n },\n} as const;\n\nexport const TabButton: FC<TabButtonProps> = ({\n theme,\n active,\n onClick,\n children,\n size = \"md\",\n variant = \"default\",\n ariaLabel,\n disabled = false,\n className,\n}) => {\n const classes = variantClasses[variant];\n return (\n <button\n type=\"button\"\n data-theme={theme}\n onClick={onClick}\n aria-label={ariaLabel}\n aria-pressed={active}\n disabled={disabled}\n className={cn(\n \"polli-control polli:inline-flex polli:items-center polli:justify-center polli:rounded-full polli:font-medium polli:leading-normal polli:transition-all polli:duration-200\",\n classes.base,\n active ? classes.active : classes.inactive,\n disabled && \"polli:cursor-not-allowed polli:opacity-50\",\n sizeClasses[size],\n className,\n )}\n >\n {children}\n </button>\n );\n};\n","import Markdown, { type Components } from \"react-markdown\";\nimport rehypeSlug from \"rehype-slug\";\nimport remarkGfm from \"remark-gfm\";\nimport { cn } from \"../lib/cn.ts\";\nimport { headingClassName } from \"../primitives/Typography.tsx\";\n\nexport type ProseProps = {\n children: string;\n className?: string;\n};\n\nconst components: Components = {\n h1: ({ node, ...props }) => (\n <h1\n className={headingClassName(\"title\", \"polli:mt-0 polli:mb-5\")}\n {...props}\n />\n ),\n h2: ({ node, ...props }) => (\n <h2\n className={headingClassName(\"section\", \"polli:mt-8 polli:mb-3\")}\n {...props}\n />\n ),\n h3: ({ node, ...props }) => (\n <h3\n className={headingClassName(\"subsection\", \"polli:mt-6 polli:mb-2\")}\n {...props}\n />\n ),\n p: ({ node, ...props }) => (\n <p className=\"polli:my-4 polli:leading-relaxed\" {...props} />\n ),\n a: ({ node, ...props }) => (\n <a\n className=\"polli-control polli:rounded-sm polli:font-semibold polli:text-theme-text-strong polli:underline polli:decoration-theme-border polli:decoration-2 polli:underline-offset-3 polli:hover:decoration-theme-text-soft\"\n {...props}\n />\n ),\n ul: ({ node, ...props }) => (\n <ul\n className=\"polli:my-4 polli:list-disc polli:pl-6 polli:leading-relaxed\"\n {...props}\n />\n ),\n ol: ({ node, ...props }) => (\n <ol\n className=\"polli:my-4 polli:list-decimal polli:pl-6 polli:leading-relaxed\"\n {...props}\n />\n ),\n blockquote: ({ node, ...props }) => (\n <blockquote\n className=\"polli:my-4 polli:border-l-4 polli:border-theme-border polli:pl-4 polli:text-theme-text-soft\"\n {...props}\n />\n ),\n code: ({ node, ...props }) => (\n <code\n className=\"polli:rounded polli:bg-theme-bg-active polli:px-1 polli:py-0.5 polli:font-pixel polli:text-sm\"\n {...props}\n />\n ),\n pre: ({ node, ...props }) => (\n <pre\n className=\"polli:my-4 polli:overflow-x-auto polli:rounded-lg polli:bg-theme-bg-active polli:p-4\"\n {...props}\n />\n ),\n table: ({ node, ...props }) => (\n <table\n className=\"polli:my-4 polli:w-full polli:border-collapse polli:text-sm\"\n {...props}\n />\n ),\n th: ({ node, ...props }) => (\n <th\n className=\"polli:border polli:border-theme-border polli:px-3 polli:py-2 polli:text-left polli:font-semibold\"\n {...props}\n />\n ),\n td: ({ node, ...props }) => (\n <td\n className=\"polli:border polli:border-theme-border polli:px-3 polli:py-2\"\n {...props}\n />\n ),\n hr: ({ node, ...props }) => (\n <hr className=\"polli:my-6 polli:border-theme-border\" {...props} />\n ),\n};\n\nexport function Prose({ children, className }: ProseProps) {\n return (\n <div\n className={cn(\n \"polli:font-body polli:text-theme-text-base polli:leading-relaxed\",\n className,\n )}\n >\n <Markdown\n remarkPlugins={[remarkGfm]}\n rehypePlugins={[rehypeSlug]}\n components={components}\n >\n {children}\n </Markdown>\n </div>\n );\n}\n","import type { FC, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { Surface } from \"../primitives/Surface.tsx\";\nimport { Heading, Text } from \"../primitives/Typography.tsx\";\nimport type { ThemeName } from \"../theme.ts\";\n\nexport type SectionProps = {\n title: string;\n theme: ThemeName;\n id?: string;\n framed?: boolean;\n intro?: ReactNode;\n action?: ReactNode;\n actionClassName?: string;\n panelClassName?: string;\n titleClassName?: string;\n children: ReactNode;\n className?: string;\n};\n\nexport const Section: FC<SectionProps> = ({\n title,\n theme,\n id,\n framed = false,\n intro,\n action,\n actionClassName,\n panelClassName,\n titleClassName,\n children,\n className,\n}) => (\n <section\n id={id}\n className={cn(\n \"polli:flex polli:scroll-mt-10 polli:flex-col polli:gap-4\",\n className,\n )}\n >\n <header className=\"polli:flex polli:flex-wrap polli:items-center polli:justify-between polli:gap-3 polli:px-1\">\n <Heading\n as=\"h2\"\n data-theme={theme}\n size=\"section\"\n className={cn(\"polli:text-left\", titleClassName)}\n >\n {title}\n </Heading>\n {action && (\n <div className={cn(\"polli:shrink-0\", actionClassName)}>\n {action}\n </div>\n )}\n </header>\n {framed ? (\n <Surface\n variant=\"panel\"\n theme={theme}\n className={cn(\n \"polli:flex polli:flex-col polli:gap-5\",\n panelClassName,\n )}\n >\n {intro && (\n <Text as=\"div\" className=\"polli:max-w-2xl\">\n {intro}\n </Text>\n )}\n {children}\n </Surface>\n ) : (\n <>\n {intro && (\n <Text\n as=\"div\"\n data-theme={theme}\n className=\"polli:max-w-2xl\"\n >\n {intro}\n </Text>\n )}\n {children}\n </>\n )}\n </section>\n);\n","import type { FC, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { Text } from \"../primitives/Typography.tsx\";\nimport type { ThemeName } from \"../theme.ts\";\n\n/**\n * - `stat` — large numeric value (default)\n * - `fact` — small wrapping prose value (labeled fact tile)\n */\ntype StatCardVariant = \"stat\" | \"fact\";\n\nconst valueVariantClasses: Record<StatCardVariant, string> = {\n stat: \"polli:min-h-8 polli:text-2xl polli:font-bold polli:leading-tight polli:tabular-nums polli:text-theme-text-strong\",\n fact: \"polli:text-sm polli:leading-6 polli:text-theme-text-soft\",\n};\n\nexport type StatCardProps = {\n label: ReactNode;\n value: ReactNode;\n detail?: ReactNode;\n variant?: StatCardVariant;\n theme?: ThemeName;\n className?: string;\n labelClassName?: string;\n valueClassName?: string;\n detailClassName?: string;\n};\n\nexport const StatCard: FC<StatCardProps> = ({\n label,\n value,\n detail,\n variant = \"stat\",\n theme,\n className,\n labelClassName,\n valueClassName,\n detailClassName,\n}) => (\n <div data-theme={theme} className={cn(\"polli:text-sm\", className)}>\n <Text\n as=\"div\"\n size=\"micro\"\n tone=\"strong\"\n weight=\"bold\"\n className={cn(\n \"polli:uppercase polli:tracking-wide\",\n labelClassName,\n )}\n >\n {label}\n </Text>\n <div\n className={cn(\n \"polli:mt-1 polli:break-words\",\n valueVariantClasses[variant],\n valueClassName,\n )}\n >\n {value}\n </div>\n {detail && (\n <Text\n as=\"div\"\n size=\"xs\"\n tone=\"soft\"\n className={cn(\"polli:mt-2\", detailClassName)}\n >\n {detail}\n </Text>\n )}\n </div>\n);\n","import { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/** Class merge for apps consuming the unprefixed Tailwind bridge in app.css. */\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(...inputs));\n}\n","import { useEffect } from \"react\";\n\n/**\n * Locks page scroll while enabled and restores the original overflow values on\n * cleanup.\n */\nexport function useScrollLock(enabled = true): void {\n useEffect(() => {\n if (!enabled) return;\n\n const originalBody = document.body.style.overflow;\n const originalHtml = document.documentElement.style.overflow;\n document.body.style.overflow = \"hidden\";\n document.documentElement.style.overflow = \"hidden\";\n\n return () => {\n document.body.style.overflow = originalBody;\n document.documentElement.style.overflow = originalHtml;\n };\n }, [enabled]);\n}\n","import type { ComponentPropsWithoutRef, FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\nexport type ButtonGroupProps = ComponentPropsWithoutRef<\"div\"> & {\n wrap?: boolean;\n};\n\nexport const ButtonGroup: FC<ButtonGroupProps> = ({\n wrap = true,\n className,\n children,\n role = \"group\",\n ...rest\n}) => (\n <div\n {...rest}\n role={role}\n className={cn(\n \"polli:flex polli:min-w-0 polli:items-center polli:gap-1.5\",\n wrap ? \"polli:flex-wrap\" : \"polli:flex-nowrap\",\n className,\n )}\n >\n {children}\n </div>\n);\n","import type { ComponentPropsWithoutRef, FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\n/** Semantic chip labels for status and metadata badges. */\ntype ChipIntent =\n | \"news\"\n | \"alpha\"\n | \"neutral\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nconst chipSizes = {\n sm: \"polli:px-2 polli:py-0.5 polli:text-xs\",\n md: \"polli:px-2.5 polli:py-0.5 polli:text-sm\",\n lg: \"polli:px-3 polli:py-1 polli:text-sm\",\n} as const;\n\nconst intentClasses: Record<ChipIntent, string> = {\n news: \"polli:bg-intent-news-bg-light polli:text-intent-news-text\",\n alpha: \"polli:bg-intent-alpha-bg-light polli:text-intent-alpha-text\",\n neutral: \"polli:bg-ink-100/80 polli:text-ink-900\",\n success: \"polli:bg-intent-success-bg-light polli:text-intent-success-text\",\n warning: \"polli:bg-intent-warning-bg-light polli:text-intent-warning-text\",\n danger: \"polli:bg-intent-danger-bg-light polli:text-intent-danger-text\",\n};\n\nexport type ChipProps = ComponentPropsWithoutRef<\"span\"> & {\n /** Override the cascade theme for this chip's subtree. */\n theme?: ThemeName;\n /** Semantic intent. Wins over `theme` when set. */\n intent?: ChipIntent;\n size?: keyof typeof chipSizes;\n};\n\n// Static, rectangular colored container. Round shapes are reserved for buttons.\n// Reads `bg-theme-bg-active` / `text-theme-text-strong` from the cascade unless\n// `intent` is set (semantic, theme-independent).\nexport const Chip: FC<ChipProps> = ({\n theme,\n intent,\n size = \"md\",\n className,\n children,\n ...rest\n}) => {\n const intentClass = intent\n ? intentClasses[intent]\n : \"polli:bg-theme-bg-active polli:text-theme-text-strong\";\n return (\n <span\n {...rest}\n data-theme={theme}\n className={cn(\n \"polli:inline-flex polli:shrink-0 polli:items-center polli:gap-1 polli:rounded-lg polli:font-medium polli:leading-normal\",\n chipSizes[size],\n intentClass,\n className,\n )}\n >\n {children}\n </span>\n );\n};\n","import { Dialog as ArkDialog } from \"@ark-ui/react/dialog\";\nimport { Portal } from \"@ark-ui/react/portal\";\nimport type { FC, ReactNode } from \"react\";\nimport { useRef } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\nconst sizeClasses = {\n sm: \"polli:max-w-md\",\n md: \"polli:max-w-xl\",\n lg: \"polli:max-w-2xl\",\n} as const;\n\nexport type DialogProps = {\n open: boolean;\n onOpenChange?: (open: boolean) => void;\n trigger?: ReactNode;\n triggerAsChild?: boolean;\n triggerClassName?: string;\n title?: ReactNode;\n titleClassName?: string;\n ariaLabel?: string;\n labelledBy?: string;\n theme?: ThemeName;\n size?: keyof typeof sizeClasses;\n showBackdrop?: boolean;\n backdropClassName?: string;\n positionerClassName?: string;\n contentClassName?: string;\n children: ReactNode;\n};\n\nexport const Dialog: FC<DialogProps> = ({\n open,\n onOpenChange,\n trigger,\n triggerAsChild = false,\n triggerClassName,\n title,\n titleClassName,\n ariaLabel,\n labelledBy,\n theme = \"blue\",\n size = \"md\",\n showBackdrop = true,\n backdropClassName,\n positionerClassName,\n contentClassName,\n children,\n}) => {\n const contentRef = useRef<HTMLDivElement>(null);\n\n return (\n <ArkDialog.Root\n open={open}\n initialFocusEl={() => contentRef.current}\n onOpenChange={(details) => onOpenChange?.(details.open)}\n >\n {trigger && (\n <ArkDialog.Trigger\n asChild={triggerAsChild}\n className={triggerClassName}\n >\n {trigger}\n </ArkDialog.Trigger>\n )}\n <Portal>\n {showBackdrop && (\n <ArkDialog.Backdrop\n className={cn(\n \"polli:fixed polli:inset-0 polli:z-[100] polli:bg-ink-950/50\",\n backdropClassName,\n )}\n />\n )}\n <ArkDialog.Positioner\n data-theme={theme}\n className={cn(\n \"polli:fixed polli:inset-0 polli:z-[110] polli:flex polli:h-dvh polli:items-start polli:justify-center polli:overflow-hidden polli:p-4\",\n positionerClassName,\n )}\n >\n <ArkDialog.Content\n ref={contentRef}\n data-theme={theme}\n aria-label={ariaLabel}\n aria-labelledby={labelledBy}\n className={cn(\n \"polli:my-auto polli:w-full polli:overflow-hidden polli:rounded-lg polli:border-2 polli:border-theme-border polli:bg-surface-opaque polli:shadow-lg polli:outline-none polli:focus:outline-none polli:focus-visible:outline-none\",\n sizeClasses[size],\n contentClassName,\n )}\n >\n {title && (\n <DialogTitle\n className={cn(\n \"polli:px-6 polli:pt-6 polli:font-subheading polli:text-xl polli:text-theme-text-strong\",\n titleClassName,\n )}\n >\n {title}\n </DialogTitle>\n )}\n {children}\n </ArkDialog.Content>\n </ArkDialog.Positioner>\n </Portal>\n </ArkDialog.Root>\n );\n};\n\nexport const DialogTitle = ArkDialog.Title;\n","import type { PropsWithChildren } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\ntype BaseDropdownItemProps = {\n className?: string;\n};\n\nexport type DropdownItemProps<T extends React.ElementType = \"button\"> =\n PropsWithChildren<BaseDropdownItemProps> & {\n as?: T;\n } & Omit<\n React.ComponentPropsWithoutRef<T>,\n keyof BaseDropdownItemProps | \"as\"\n >;\n\nexport function DropdownItem<T extends React.ElementType = \"button\">({\n as,\n className,\n children,\n ...rest\n}: DropdownItemProps<T>) {\n const Component: React.ElementType = as || \"button\";\n return (\n <Component\n {...(Component === \"button\" ? { type: \"button\" } : undefined)}\n {...rest}\n className={cn(\n \"polli-control polli:flex polli:w-full polli:cursor-pointer polli:items-center polli:gap-2 polli:rounded-lg polli:bg-transparent polli:px-3 polli:py-2 polli:text-left polli:text-sm polli:font-medium polli:text-theme-text-base polli:no-underline polli:transition-colors polli:hover:bg-theme-bg-hover polli:focus-visible:bg-theme-bg-hover\",\n className,\n )}\n >\n {children}\n </Component>\n );\n}\n","export { Field } from \"@ark-ui/react/field\";\n","import type { PropsWithChildren } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\nimport { ExternalLinkIcon } from \"./icons/index.tsx\";\n\ntype BaseInlineLinkProps = {\n /** Override the cascade theme for this link's subtree. */\n theme?: ThemeName;\n /** Set explicitly for non-http external links, or false for custom routing components. */\n external?: boolean;\n showIcon?: boolean;\n className?: string;\n};\n\nexport type InlineLinkProps<T extends React.ElementType = \"a\"> =\n PropsWithChildren<BaseInlineLinkProps> & {\n as?: T;\n } & Omit<\n React.ComponentPropsWithoutRef<T>,\n keyof BaseInlineLinkProps | \"as\"\n >;\n\nfunction isExternalHref(href: unknown): boolean {\n return typeof href === \"string\" && /^https?:\\/\\//.test(href);\n}\n\nexport function InlineLink<T extends React.ElementType = \"a\">({\n as,\n theme,\n external,\n showIcon = true,\n className,\n children,\n ...linkProps\n}: InlineLinkProps<T>) {\n const Component: React.ElementType = as || \"a\";\n const isExternal =\n external ?? isExternalHref((linkProps as { href?: unknown }).href);\n\n return (\n <Component\n data-theme={theme}\n target={isExternal ? \"_blank\" : undefined}\n rel={isExternal ? \"noopener noreferrer\" : undefined}\n className={cn(\n \"polli-control polli:inline-flex polli:items-center polli:gap-1 polli:rounded-sm polli:font-semibold polli:text-theme-text-strong\",\n \"polli:underline polli:decoration-theme-border polli:decoration-2 polli:underline-offset-3\",\n \"polli:transition-colors polli:hover:text-theme-text-soft polli:hover:decoration-theme-text-soft\",\n className,\n )}\n {...linkProps}\n >\n {children}\n {showIcon && isExternal && (\n <ExternalLinkIcon\n aria-hidden=\"true\"\n className=\"polli:h-3.5 polli:w-3.5 polli:shrink-0 polli:opacity-65\"\n />\n )}\n </Component>\n );\n}\n","import { forwardRef } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\nexport type InputProps = React.ComponentPropsWithoutRef<\"input\"> & {\n error?: boolean;\n hideNumberSteppers?: boolean;\n};\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n ({ className, error, hideNumberSteppers, ...props }, ref) => (\n <input\n ref={ref}\n data-error={error ? \"true\" : undefined}\n className={cn(\n \"polli-input polli:px-3 polli:py-2 polli:border polli:rounded-lg\",\n \"polli:text-ink-950\",\n \"polli:transition-colors\",\n \"polli:disabled:opacity-50 polli:disabled:cursor-not-allowed\",\n hideNumberSteppers && \"polli-input-number-clean\",\n className,\n )}\n {...props}\n />\n ),\n);\n","import { type CSSProperties, forwardRef } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\nconst toNumber = (value: unknown): number | undefined => {\n if (typeof value === \"number\") return value;\n if (typeof value !== \"string\" || value.trim() === \"\") return undefined;\n const numericValue = Number(value);\n return Number.isFinite(numericValue) ? numericValue : undefined;\n};\n\nconst clampPercent = (value: number): number =>\n Math.min(100, Math.max(0, value));\n\nconst getProgressPercent = ({\n progress,\n value,\n defaultValue,\n min,\n max,\n}: {\n progress?: number;\n value: React.ComponentPropsWithoutRef<\"input\">[\"value\"];\n defaultValue: React.ComponentPropsWithoutRef<\"input\">[\"defaultValue\"];\n min: React.ComponentPropsWithoutRef<\"input\">[\"min\"];\n max: React.ComponentPropsWithoutRef<\"input\">[\"max\"];\n}): number | undefined => {\n if (typeof progress === \"number\" && Number.isFinite(progress)) {\n return clampPercent(progress);\n }\n\n const numericValue = toNumber(value ?? defaultValue);\n if (numericValue === undefined) return undefined;\n\n const numericMin = toNumber(min) ?? 0;\n const numericMax = toNumber(max) ?? 100;\n if (numericMax <= numericMin) return 100;\n\n return clampPercent(\n ((numericValue - numericMin) / (numericMax - numericMin)) * 100,\n );\n};\n\nexport type SliderProps = Omit<\n React.ComponentPropsWithoutRef<\"input\">,\n \"type\"\n> & {\n /** Fill percentage from 0-100. Falls back to value/min/max when omitted. */\n progress?: number;\n};\n\nexport const Slider = forwardRef<HTMLInputElement, SliderProps>(\n (\n { className, defaultValue, max, min, progress, style, value, ...props },\n ref,\n ) => {\n const progressPercent = getProgressPercent({\n progress,\n value,\n defaultValue,\n min,\n max,\n });\n const sliderStyle = {\n ...style,\n ...(progressPercent === undefined\n ? null\n : { \"--polli-slider-progress\": `${progressPercent}%` }),\n } as CSSProperties;\n\n return (\n <input\n ref={ref}\n type=\"range\"\n min={min}\n max={max}\n value={value}\n defaultValue={defaultValue}\n style={sliderStyle}\n className={cn(\"polli-slider\", className)}\n {...props}\n />\n );\n },\n);\n","import type { FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\nexport type SwitchStatus = \"off\" | \"on\" | \"invalid\";\n\nexport type SwitchProps = {\n checked: boolean;\n onChange: (next: boolean) => void;\n /** Visual status. Drives track colour only. Defaults to `checked ? \"on\" : \"off\"`. */\n status?: SwitchStatus;\n /** Accessible label (aria-label). Not rendered visibly. */\n ariaLabel?: string;\n disabled?: boolean;\n className?: string;\n};\n\n// Switch is theme-independent. Universal switch palette:\n// off — pale neutral grey (so the white thumb stays visible)\n// on — soft green (universal \"enabled\" affordance)\n// invalid — soft red (incomplete / error / setup needed)\nconst trackClasses: Record<SwitchStatus, string> = {\n off: \"polli:bg-ink-200\",\n on: \"polli:bg-intent-success-bg-light\",\n invalid: \"polli:bg-intent-danger-bg-light\",\n};\n\n/**\n * Binary toggle primitive. Universal palette — does NOT follow the page\n * theme. Three states: off (white), on (soft green), invalid (soft red,\n * for \"enabled but needs attention\").\n *\n * `checked` drives thumb position; `status` drives track colour. So\n * `checked={true} status=\"invalid\"` renders thumb-right with a red track.\n */\nexport const Switch: FC<SwitchProps> = ({\n checked,\n onChange,\n status,\n ariaLabel,\n disabled = false,\n className,\n}) => {\n const effectiveStatus: SwitchStatus = status ?? (checked ? \"on\" : \"off\");\n const resolvedAriaLabel =\n ariaLabel ?? (checked ? \"Turn off toggle\" : \"Turn on toggle\");\n\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n aria-label={resolvedAriaLabel}\n onClick={() => onChange(!checked)}\n disabled={disabled}\n className={cn(\n \"polli-control polli:relative polli:inline-flex polli:h-7 polli:w-12 polli:shrink-0 polli:items-center polli:rounded-full polli:transition polli:disabled:cursor-not-allowed polli:disabled:opacity-60\",\n trackClasses[effectiveStatus],\n className,\n )}\n >\n <span\n className={cn(\n \"polli:inline-block polli:h-5 polli:w-5 polli:rounded-full polli:bg-surface-opaque polli:shadow-sm polli:transition-transform\",\n checked ? \"polli:translate-x-6\" : \"polli:translate-x-1\",\n )}\n />\n </button>\n );\n};\n","import type { ComponentPropsWithoutRef, FC, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\ntype Align = \"left\" | \"center\" | \"right\";\ntype RowIntent = \"default\" | \"success\" | \"warning\" | \"danger\";\ntype SortDirection = \"asc\" | \"desc\";\n\nconst alignClasses: Record<Align, string> = {\n left: \"polli:text-left\",\n center: \"polli:text-center\",\n right: \"polli:text-right\",\n};\n\nconst rowIntentClasses: Record<RowIntent, string> = {\n default: \"\",\n success: \"polli:bg-intent-success-bg-light/55\",\n warning: \"polli:bg-intent-warning-bg-light/65\",\n danger: \"polli:bg-intent-danger-bg-light/65\",\n};\n\nexport type TableProps = ComponentPropsWithoutRef<\"table\">;\n\nexport const Table: FC<TableProps> = ({ className, ...rest }) => (\n <table\n {...rest}\n className={cn(\n \"polli:w-full polli:border-collapse polli:text-sm\",\n className,\n )}\n />\n);\n\nexport type TableHeadProps = ComponentPropsWithoutRef<\"thead\">;\n\nexport const TableHead: FC<TableHeadProps> = ({ className, ...rest }) => (\n <thead\n {...rest}\n className={cn(\n \"polli:bg-transparent polli:text-micro polli:text-theme-text-muted\",\n className,\n )}\n />\n);\n\nexport type TableBodyProps = ComponentPropsWithoutRef<\"tbody\">;\n\nexport const TableBody: FC<TableBodyProps> = ({ className, ...rest }) => (\n <tbody\n {...rest}\n className={cn(\"polli:divide-y polli:divide-theme-border/65\", className)}\n />\n);\n\nexport type TableRowProps = ComponentPropsWithoutRef<\"tr\"> & {\n intent?: RowIntent;\n};\n\nexport const TableRow: FC<TableRowProps> = ({\n intent = \"default\",\n className,\n ...rest\n}) => (\n <tr\n {...rest}\n className={cn(\n \"polli:transition-colors polli:hover:bg-theme-bg-subtle\",\n rowIntentClasses[intent],\n className,\n )}\n />\n);\n\nexport type TableHeaderCellProps = Omit<\n ComponentPropsWithoutRef<\"th\">,\n \"children\"\n> & {\n align?: Align;\n active?: boolean;\n sortDirection?: SortDirection;\n onSort?: () => void;\n children: ReactNode;\n};\n\nexport const TableHeaderCell: FC<TableHeaderCellProps> = ({\n align = \"left\",\n active = false,\n sortDirection,\n onSort,\n className,\n children,\n ...rest\n}) => {\n const content = (\n <>\n <span>{children}</span>\n {active && sortDirection && (\n <span aria-hidden=\"true\">\n {sortDirection === \"asc\" ? \"^\" : \"v\"}\n </span>\n )}\n </>\n );\n\n const classes = cn(\n \"polli:px-3 polli:py-2 polli:font-bold polli:uppercase polli:tracking-wide\",\n alignClasses[align],\n active && \"polli:text-theme-text-strong\",\n onSort &&\n \"polli:cursor-pointer polli:select-none polli:hover:text-theme-text-strong\",\n className,\n );\n\n if (!onSort) {\n return (\n <th {...rest} className={classes}>\n {content}\n </th>\n );\n }\n\n return (\n <th {...rest} className={classes}>\n <button\n type=\"button\"\n onClick={onSort}\n className={cn(\n \"polli-control polli:inline-flex polli:w-full polli:items-center polli:gap-1 polli:bg-transparent polli:p-0 polli:font-bold polli:text-inherit\",\n align === \"right\" && \"polli:justify-end\",\n align === \"center\" && \"polli:justify-center\",\n )}\n >\n {content}\n </button>\n </th>\n );\n};\n\nexport type TableCellProps = ComponentPropsWithoutRef<\"td\"> & {\n align?: Align;\n numeric?: boolean;\n muted?: boolean;\n};\n\nexport const TableCell: FC<TableCellProps> = ({\n align = \"left\",\n numeric = false,\n muted = false,\n className,\n ...rest\n}) => (\n <td\n {...rest}\n className={cn(\n \"polli:px-3 polli:py-2 polli:align-middle\",\n alignClasses[align],\n numeric && \"polli:tabular-nums\",\n muted && \"polli:text-theme-text-muted\",\n className,\n )}\n />\n);\n","import { forwardRef } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\nexport type TextareaProps = React.ComponentPropsWithoutRef<\"textarea\"> & {\n error?: boolean;\n};\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, error, rows = 4, ...props }, ref) => (\n <textarea\n ref={ref}\n rows={rows}\n data-error={error ? \"true\" : undefined}\n className={cn(\n \"polli-textarea polli:w-full polli:rounded-lg polli:border polli:px-3 polli:py-2\",\n \"polli:min-h-20 polli:resize-y polli:font-body polli:text-base\",\n \"polli:text-ink-950\",\n \"polli:transition-colors\",\n \"polli:disabled:opacity-50 polli:disabled:cursor-not-allowed\",\n className,\n )}\n {...props}\n />\n ),\n);\n\nTextarea.displayName = \"Textarea\";\n","{\n \"bgPale\": {\n \"amber\": \"#fef3c7\",\n \"blue\": \"#dbeafe\",\n \"pink\": \"#fce7f3\",\n \"coral\": \"#ffedd5\",\n \"teal\": \"#ccfbf1\",\n \"violet\": \"#ede9fe\",\n \"emerald\": \"#d1fae5\"\n },\n \"brandDark\": \"#110518\"\n}\n","import paletteData from \"./theme-palette.json\";\n\n/**\n * The seven chrome themes exposed by the CSS-var cascade. Apply via\n * `data-theme=\"<name>\"` on any ancestor — primitives and `--polli-*`\n * tokens in that subtree restyle accordingly.\n */\nexport const themes = [\n \"amber\",\n \"blue\",\n \"pink\",\n \"coral\",\n \"teal\",\n \"violet\",\n \"emerald\",\n] as const;\n\nexport type ThemeName = (typeof themes)[number];\n\n/**\n * Per-theme brand colors as sRGB hex, for non-CSS consumers (icon/asset\n * tooling, web manifests). `bgPale` mirrors each theme's\n * `--polli-color-bg-pale` token in `styles/tokens.css` — that CSS cascade\n * remains the source of truth for the running UI; this is the same value in\n * a form tools can read. `brandDark` is the shared splash/OG contrast color.\n */\nexport const themePalette: {\n bgPale: Record<ThemeName, string>;\n brandDark: string;\n} = paletteData;\n"],"mappings":"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","names":["cn","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","intentClasses","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","intentClasses","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","ReactMarkdown","remarkGfm","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","start","yearText","import_jsx_runtime","variantClasses","import_jsx_runtime","addUtcMonths","start","granularity","import_react_markdown","import_remark_gfm","import_jsx_runtime","components","Markdown","remarkGfm","rehypeSlug","import_jsx_runtime","import_jsx_runtime","import_clsx","import_tailwind_merge","cn","import_react","import_jsx_runtime","import_jsx_runtime","intentClasses","import_portal","import_react","import_jsx_runtime","sizeClasses","ArkDialog","import_jsx_runtime","import_jsx_runtime","isExternalHref","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/compositions/AccountIdentity.tsx","../src/lib/cn.ts","../src/primitives/ChevronIcon.tsx","../src/primitives/Dropdown.tsx","../src/primitives/icons/index.tsx","../src/primitives/Typography.tsx","../src/compositions/Alert.tsx","../src/compositions/AppHeader.tsx","../src/primitives/Surface.tsx","../src/compositions/Callout.tsx","../src/compositions/ChatConversation.tsx","../src/primitives/ScrollArea.tsx","../src/compositions/ChatMessage.tsx","../src/compositions/ChatPromptInput.tsx","../src/primitives/Textarea.tsx","../src/compositions/CopyButton.tsx","../src/primitives/Button.tsx","../src/primitives/Tooltip.tsx","../src/compositions/CodeBlock.tsx","../src/compositions/Collapsible.tsx","../src/primitives/Dialog.tsx","../src/compositions/ConfirmationDialog.tsx","../src/primitives/Eyebrow.tsx","../src/compositions/ContentHeader.tsx","../src/compositions/CopyField.tsx","../src/compositions/EditableCombobox.tsx","../src/primitives/Input.tsx","../src/lib/link.ts","../src/compositions/ExternalLinkButton.tsx","../src/primitives/Field.tsx","../src/compositions/FieldStack.tsx","../src/compositions/FileUpload.tsx","../src/lib/document-file-drop-guard.ts","../src/lib/partition-files.ts","../src/primitives/IconButton.tsx","../src/compositions/InfoTip.tsx","../src/primitives/Chip.tsx","../src/compositions/KeyChip.tsx","../src/compositions/LinkCard.tsx","../src/compositions/MediaPlaceholder.tsx","../src/compositions/MultiSelect.tsx","../src/compositions/NavItem.tsx","../src/compositions/PeriodPicker.tsx","../src/lib/period.ts","../src/primitives/TabButton.tsx","../src/compositions/Section.tsx","../src/compositions/StatCard.tsx","../src/compositions/ToolCallDetails.tsx","../src/primitives/InlineLink.tsx","../src/lib/cn-app.ts","../src/lib/use-scroll-lock.ts","../src/primitives/ButtonGroup.tsx","../src/primitives/ColorModeToggle.tsx","../src/primitives/Drawer.tsx","../src/primitives/DropdownItem.tsx","../src/primitives/Slider.tsx","../src/primitives/Switch.tsx","../src/primitives/Table.tsx","../src/primitives/TableDisclosureButton.tsx"],"sourcesContent":["export {\n AccountIdentity,\n type AccountIdentityProps,\n} from \"./compositions/AccountIdentity.tsx\";\nexport {\n AccountMenu,\n type AccountMenuProps,\n} from \"./compositions/AccountMenu.tsx\";\nexport { Alert, type AlertProps } from \"./compositions/Alert.tsx\";\nexport { AppHeader, type AppHeaderProps } from \"./compositions/AppHeader.tsx\";\nexport { Callout, type CalloutProps } from \"./compositions/Callout.tsx\";\nexport {\n ChatConversation,\n ChatConversationContent,\n type ChatConversationContentProps,\n type ChatConversationProps,\n} from \"./compositions/ChatConversation.tsx\";\nexport {\n ChatMessage,\n ChatMessageActions,\n type ChatMessageActionsProps,\n ChatMessageContent,\n type ChatMessageContentProps,\n ChatMessageHeader,\n type ChatMessageHeaderProps,\n type ChatMessageProps,\n type ChatMessageRole,\n} from \"./compositions/ChatMessage.tsx\";\nexport {\n ChatPromptInput,\n ChatPromptInputFooter,\n type ChatPromptInputFooterProps,\n type ChatPromptInputProps,\n ChatPromptTextarea,\n} from \"./compositions/ChatPromptInput.tsx\";\nexport { CodeBlock, type CodeBlockProps } from \"./compositions/CodeBlock.tsx\";\nexport {\n Collapsible,\n type CollapsibleProps,\n} from \"./compositions/Collapsible.tsx\";\nexport {\n ConfirmationDialog,\n type ConfirmationDialogProps,\n} from \"./compositions/ConfirmationDialog.tsx\";\nexport {\n ContentHeader,\n type ContentHeaderProps,\n} from \"./compositions/ContentHeader.tsx\";\nexport {\n CopyButton,\n type CopyButtonProps,\n} from \"./compositions/CopyButton.tsx\";\nexport { CopyField, type CopyFieldProps } from \"./compositions/CopyField.tsx\";\nexport {\n EditableCombobox,\n type EditableComboboxProps,\n EditableComboboxToken,\n type EditableComboboxTokenProps,\n} from \"./compositions/EditableCombobox.tsx\";\nexport {\n ExternalLinkButton,\n type ExternalLinkButtonProps,\n} from \"./compositions/ExternalLinkButton.tsx\";\nexport {\n FieldStack,\n type FieldStackProps,\n} from \"./compositions/FieldStack.tsx\";\nexport {\n FileUpload,\n type FileUploadProps,\n} from \"./compositions/FileUpload.tsx\";\nexport { InfoTip } from \"./compositions/InfoTip.tsx\";\nexport { KeyChip, type KeyChipProps } from \"./compositions/KeyChip.tsx\";\nexport { LinkCard, type LinkCardProps } from \"./compositions/LinkCard.tsx\";\n// Markdown and Prose live at @pollinations/ui/markdown — see src/markdown.ts.\nexport {\n MediaPlaceholder,\n type MediaPlaceholderProps,\n} from \"./compositions/MediaPlaceholder.tsx\";\nexport {\n MultiSelect,\n type MultiSelectProps,\n} from \"./compositions/MultiSelect.tsx\";\nexport { NavItem, type NavItemProps } from \"./compositions/NavItem.tsx\";\nexport {\n PeriodPicker,\n type PeriodPickerProps,\n} from \"./compositions/PeriodPicker.tsx\";\nexport { Section, type SectionProps } from \"./compositions/Section.tsx\";\nexport { StatCard, type StatCardProps } from \"./compositions/StatCard.tsx\";\nexport {\n ToolCallDetails,\n type ToolCallDetailsProps,\n type ToolCallStatus,\n} from \"./compositions/ToolCallDetails.tsx\";\nexport { cn } from \"./lib/cn-app.ts\";\nexport {\n currentPeriod,\n getPeriodBucketKeys,\n isPeriodSelectable,\n type PeriodGranularity,\n type PeriodSelection,\n periodBucketKeyToDate,\n periodFromDate,\n periodToWindow,\n} from \"./lib/period.ts\";\nexport { useScrollLock } from \"./lib/use-scroll-lock.ts\";\nexport {\n Button,\n type ButtonAppearance,\n type ButtonProps,\n} from \"./primitives/Button.tsx\";\nexport {\n ButtonGroup,\n type ButtonGroupProps,\n} from \"./primitives/ButtonGroup.tsx\";\nexport { ChevronIcon } from \"./primitives/ChevronIcon.tsx\";\nexport { Chip } from \"./primitives/Chip.tsx\";\nexport {\n ColorModeToggle,\n setColorMode,\n useColorMode,\n} from \"./primitives/ColorModeToggle.tsx\";\nexport {\n Dialog,\n DialogBody,\n type DialogBodyProps,\n DialogDescription,\n DialogFooter,\n type DialogFooterProps,\n DialogHeader,\n type DialogHeaderProps,\n type DialogProps,\n DialogTitle,\n} from \"./primitives/Dialog.tsx\";\nexport { Drawer, type DrawerProps } from \"./primitives/Drawer.tsx\";\nexport { Dropdown, type DropdownProps } from \"./primitives/Dropdown.tsx\";\nexport {\n DropdownItem,\n type DropdownItemProps,\n} from \"./primitives/DropdownItem.tsx\";\nexport { Eyebrow, type EyebrowProps } from \"./primitives/Eyebrow.tsx\";\nexport { Field } from \"./primitives/Field.tsx\";\nexport {\n IconButton,\n type IconButtonIntent,\n type IconButtonProps,\n type IconButtonVariant,\n} from \"./primitives/IconButton.tsx\";\nexport { InlineLink, type InlineLinkProps } from \"./primitives/InlineLink.tsx\";\nexport { Input, type InputProps } from \"./primitives/Input.tsx\";\nexport * from \"./primitives/icons/index.tsx\";\nexport { ScrollArea, type ScrollAreaProps } from \"./primitives/ScrollArea.tsx\";\nexport { Slider, type SliderProps } from \"./primitives/Slider.tsx\";\nexport { Surface, type SurfaceProps } from \"./primitives/Surface.tsx\";\nexport {\n Switch,\n type SwitchProps,\n type SwitchStatus,\n} from \"./primitives/Switch.tsx\";\nexport {\n TabButton,\n type TabButtonProps,\n} from \"./primitives/TabButton.tsx\";\nexport {\n Table,\n TableBody,\n type TableBodyProps,\n TableCell,\n type TableCellProps,\n TableHead,\n TableHeaderCell,\n type TableHeaderCellProps,\n type TableHeadProps,\n type TableProps,\n TableRow,\n type TableRowProps,\n} from \"./primitives/Table.tsx\";\nexport {\n TableDisclosureButton,\n type TableDisclosureButtonProps,\n} from \"./primitives/TableDisclosureButton.tsx\";\nexport { Textarea, type TextareaProps } from \"./primitives/Textarea.tsx\";\nexport { Tooltip } from \"./primitives/Tooltip.tsx\";\nexport {\n Heading,\n type HeadingProps,\n Text,\n type TextProps,\n} from \"./primitives/Typography.tsx\";\n","import type { ReactNode } from \"react\";\nimport { useId } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { ChevronIcon } from \"../primitives/ChevronIcon.tsx\";\nimport { Dropdown, type DropdownProps } from \"../primitives/Dropdown.tsx\";\n\nfunction initials(name: string) {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return \"?\";\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n return `${parts[0][0] ?? \"\"}${parts.at(-1)?.[0] ?? \"\"}`.toUpperCase();\n}\n\nfunction AccountAvatar({\n name,\n avatarUrl,\n secondaryContent,\n dashboardHref,\n}: {\n name: string;\n avatarUrl?: string | null;\n secondaryContent?: ReactNode;\n dashboardHref?: string;\n}) {\n const large = secondaryContent != null;\n const className = large ? \"polli:h-11 polli:w-11\" : \"polli:h-8 polli:w-8\";\n const avatar = avatarUrl ? (\n <img\n src={avatarUrl}\n alt=\"\"\n className={cn(\n className,\n \"polli:shrink-0 polli:rounded-full polli:object-cover\",\n )}\n />\n ) : (\n <span\n role=\"img\"\n aria-label={`${name} avatar`}\n className={cn(\n className,\n \"polli:flex polli:shrink-0 polli:items-center polli:justify-center polli:rounded-full polli:bg-theme-bg-pale polli:text-xs polli:font-semibold polli:text-theme-text-strong\",\n )}\n >\n {initials(name)}\n </span>\n );\n return dashboardHref ? (\n <a\n href={dashboardHref}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label=\"Open dashboard\"\n title=\"Open dashboard\"\n className=\"polli:shrink-0 polli:rounded-full polli:cursor-pointer polli:transition-transform polli:hover:scale-105 polli:hover:brightness-110 polli:focus-visible:outline-2 polli:focus-visible:outline-offset-2 polli:focus-visible:outline-current polli:motion-reduce:transition-none polli:motion-reduce:hover:scale-100\"\n >\n {avatar}\n </a>\n ) : (\n avatar\n );\n}\n\nexport type AccountIdentityProps = {\n name: string;\n avatarUrl?: string | null;\n secondaryContent?: ReactNode;\n /** Optional dashboard destination, owned by the caller. Opens in a new tab. */\n dashboardHref?: string;\n className?: string;\n};\n\nexport function AccountIdentity({\n name,\n avatarUrl,\n secondaryContent,\n dashboardHref,\n className,\n}: AccountIdentityProps) {\n return (\n <span\n className={cn(\n \"polli:flex polli:min-w-0 polli:items-center polli:gap-2 polli:rounded-full polli:bg-surface-opaque polli:p-1 polli:pr-3\",\n className,\n )}\n >\n <AccountAvatar\n name={name}\n avatarUrl={avatarUrl}\n dashboardHref={dashboardHref}\n secondaryContent={secondaryContent}\n />\n <AccountDetails name={name} secondaryContent={secondaryContent} />\n </span>\n );\n}\n\nfunction AccountDetails({\n name,\n secondaryContent,\n secondaryId,\n}: {\n name: string;\n secondaryContent?: ReactNode;\n secondaryId?: string;\n}) {\n return (\n <span className=\"polli:flex polli:min-w-0 polli:flex-col polli:items-start polli:text-left\">\n <span\n title={name}\n className=\"polli:max-w-full polli:truncate polli:text-sm polli:font-medium polli:leading-5 polli:text-theme-text-strong\"\n >\n {name}\n </span>\n {secondaryContent != null && (\n <span\n id={secondaryId}\n className=\"polli:inline-flex polli:min-h-5 polli:items-center polli:whitespace-nowrap polli:text-xs polli:leading-4 polli:text-theme-text-base\"\n >\n {secondaryContent}\n </span>\n )}\n </span>\n );\n}\n\nexport type AccountMenuProps = AccountIdentityProps & {\n /** The caller owns navigation, permissions and sign-out behavior. */\n children: DropdownProps[\"children\"];\n menuClassName?: string;\n side?: \"top\" | \"bottom\";\n menuLabel?: string;\n};\n\n/**\n * With `dashboardHref` the avatar is a link and the name/chevron open the\n * menu; without one the whole pill is the trigger.\n */\nexport function AccountMenu({\n name,\n avatarUrl,\n dashboardHref,\n secondaryContent,\n children,\n className,\n menuClassName,\n side = \"bottom\",\n menuLabel = `Account menu for ${name}`,\n}: AccountMenuProps) {\n const statusId = useId();\n const avatar = (\n <AccountAvatar\n name={name}\n avatarUrl={avatarUrl}\n dashboardHref={dashboardHref}\n secondaryContent={secondaryContent}\n />\n );\n\n return (\n <div\n data-theme=\"accent\"\n className={cn(\n \"polli:flex polli:min-w-0 polli:items-center polli:gap-2 polli:rounded-full polli:bg-theme-bg-active polli:p-1 polli:pr-3 polli:text-theme-text-strong polli:transition-colors polli:hover:bg-theme-bg-hover\",\n className,\n )}\n >\n {dashboardHref && avatar}\n <Dropdown\n align=\"end\"\n side={side}\n className={cn(\n \"polli:w-max polli:min-w-[var(--reference-width)] polli:p-1\",\n menuClassName,\n )}\n trigger={(open) => (\n <button\n type=\"button\"\n aria-label={menuLabel}\n aria-describedby={\n secondaryContent != null ? statusId : undefined\n }\n className=\"polli-control polli:flex polli:min-w-0 polli:flex-1 polli:items-center polli:gap-2 polli:self-stretch polli:rounded-full polli:text-theme-text-strong\"\n >\n {!dashboardHref && avatar}\n <AccountDetails\n name={name}\n secondaryContent={secondaryContent}\n secondaryId={statusId}\n />\n <ChevronIcon\n expanded={open}\n className=\"polli:ml-auto polli:h-4 polli:w-4 polli:text-theme-text-strong\"\n />\n </button>\n )}\n >\n {children}\n </Dropdown>\n </div>\n );\n}\n","import { clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({ prefix: \"polli\" });\n\n/** Internal class merge for polli:-prefixed package primitive classes. */\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(...inputs));\n}\n","import type { FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\ntype ChevronIconProps = {\n /** Rotate 180° when expanded/open. */\n expanded?: boolean;\n className?: string;\n};\n\n/**\n * Canonical chevron used for collapsibles, dropdown triggers, and select pills\n * across the app. One icon everywhere.\n */\nexport const ChevronIcon: FC<ChevronIconProps> = ({ expanded, className }) => (\n <svg\n aria-hidden=\"true\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n className={cn(\n \"polli:shrink-0 polli:transition-transform polli:duration-200 polli:ease-out\",\n expanded && \"polli:rotate-180\",\n className,\n )}\n >\n <path\n d=\"M3 4.5 6 7.5l3-3\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.5\"\n />\n </svg>\n);\n","import { Popover } from \"@ark-ui/react/popover\";\nimport { Portal } from \"@ark-ui/react/portal\";\nimport type { CSSProperties, FC, ReactNode } from \"react\";\nimport { useId, useState } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\nconst DEFAULT_PANEL = \"polli:rounded-lg polli:bg-surface-menu polli:shadow-lg\";\n\nexport type DropdownProps = {\n /** Trigger element; receives the current open state (e.g. to rotate a chevron). */\n trigger: (open: boolean) => ReactNode;\n /** Panel content. As a function, receives `close` to dismiss after a selection. */\n children: ReactNode | ((close: () => void) => ReactNode);\n /** Panel placement relative to the trigger. */\n align?: \"start\" | \"end\";\n side?: \"top\" | \"bottom\";\n /** Controlled open state. Omit to let the Dropdown manage its own. */\n open?: boolean;\n /** Render inside the parent dialog so its focus and accessibility scope includes the menu. */\n portalled?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Appended after the surface (widths, padding, max-height…). */\n className?: string;\n /** Theme variables for portaled content that cannot inherit from its trigger. */\n panelStyle?: CSSProperties;\n};\n\nexport const Dropdown: FC<DropdownProps> = ({\n trigger,\n children,\n align = \"start\",\n side = \"bottom\",\n open: openProp,\n portalled = true,\n onOpenChange,\n className,\n panelStyle,\n}) => {\n const triggerId = useId();\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = openProp !== undefined;\n const open = isControlled ? openProp : internalOpen;\n\n const setOpen = (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n };\n\n return (\n <Popover.Root\n ids={{ trigger: triggerId }}\n open={open}\n portalled={portalled}\n onOpenChange={(details) => setOpen(details.open)}\n positioning={{\n placement: `${side}-${align}`,\n strategy: portalled ? \"absolute\" : \"fixed\",\n }}\n >\n <Popover.Trigger asChild>{trigger(open)}</Popover.Trigger>\n <Portal disabled={!portalled}>\n <Popover.Positioner>\n <Popover.Content\n aria-labelledby={triggerId}\n style={panelStyle}\n className={cn(\n \"polli:z-[120] polli:overflow-hidden polli:focus:outline-none\",\n DEFAULT_PANEL,\n className,\n )}\n >\n {typeof children === \"function\"\n ? children(() => setOpen(false))\n : children}\n </Popover.Content>\n </Popover.Positioner>\n </Portal>\n </Popover.Root>\n );\n};\n","import type { IconProps } from \"./types.ts\";\n\nconst strokeProps = {\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n} as const;\n\nexport function AppIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <rect x=\"2\" y=\"4\" width=\"20\" height=\"14\" rx=\"2\" />\n <path d=\"M2 20h20\" />\n </svg>\n );\n}\n\nexport function AccountIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <circle cx=\"12\" cy=\"8\" r=\"4\" />\n <path d=\"M4 21a8 8 0 0 1 16 0\" />\n </svg>\n );\n}\n\nexport function ArrowRightIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M5 12h14M13 6l6 6-6 6\" />\n </svg>\n );\n}\n\nexport function BeakerIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M9 3h6\" />\n <path d=\"M10 3v6.5L4.5 18a2 2 0 0 0 1.7 3h11.6a2 2 0 0 0 1.7-3L14 9.5V3\" />\n <path d=\"M7 14h10\" />\n </svg>\n );\n}\n\nexport function BotIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M12 8V4H8\" />\n <rect x=\"4\" y=\"8\" width=\"16\" height=\"12\" rx=\"2\" />\n <path d=\"M2 14h2M20 14h2\" />\n <path d=\"M9 13v2M15 13v2\" />\n </svg>\n );\n}\n\nexport function BookIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M4 4h5a3 3 0 0 1 3 3v13a2 2 0 0 0-2-2H4z\" />\n <path d=\"M20 4h-5a3 3 0 0 0-3 3v13a2 2 0 0 1 2-2h6z\" />\n </svg>\n );\n}\n\nexport function BugIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"m8 2 1.9 1.9M14.1 3.9 16 2\" />\n <path d=\"M9 7V6a3 3 0 0 1 6 0v1\" />\n <path d=\"M12 20c-3.3 0-6-2.7-6-6v-3a6 6 0 0 1 12 0v3c0 3.3-2.7 6-6 6Z\" />\n <path d=\"M12 20v-9M6.5 9C4.6 8.8 3 7.1 3 5M6 13H2M3 21c0-2.1 1.7-3.9 3.8-4M17.5 9C19.4 8.8 21 7.1 21 5M18 13h4M21 21c0-2.1-1.7-3.9-3.8-4\" />\n </svg>\n );\n}\n\nexport function CheckIcon(props: IconProps) {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n {...strokeProps}\n strokeWidth={2.5}\n {...props}\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\nexport function ClipboardIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n );\n}\n\nexport function ClockIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M12 7v5l3 2\" />\n </svg>\n );\n}\n\nexport function DiscordIcon(props: IconProps) {\n return (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" {...props}>\n <path\n fill=\"currentColor\"\n d=\"M20.32 4.37A19.8 19.8 0 0 0 15.36 2.83a.07.07 0 0 0-.08.04c-.21.38-.45.88-.62 1.27a18.27 18.27 0 0 0-5.52 0 12.84 12.84 0 0 0-.63-1.27.08.08 0 0 0-.08-.04A19.74 19.74 0 0 0 3.47 4.37a.07.07 0 0 0-.03.03C.31 9.07-.55 13.61-.13 18.1a.08.08 0 0 0 .03.06 19.9 19.9 0 0 0 6.08 3.07.08.08 0 0 0 .09-.03c.47-.64.88-1.31 1.24-2.02a.08.08 0 0 0-.04-.1 13.08 13.08 0 0 1-1.9-.91.08.08 0 0 1-.01-.13c.13-.1.25-.2.37-.29a.07.07 0 0 1 .08-.01 14.24 14.24 0 0 0 12.38 0 .07.07 0 0 1 .08.01c.12.1.25.2.38.3a.08.08 0 0 1-.01.12 12.22 12.22 0 0 1-1.9.9.08.08 0 0 0-.04.11c.36.7.77 1.38 1.23 2.02a.08.08 0 0 0 .1.03 19.84 19.84 0 0 0 6.08-3.07.08.08 0 0 0 .03-.05c.5-5.2-.84-9.7-3.77-13.71a.06.06 0 0 0-.03-.03ZM8.02 15.37c-1.18 0-2.16-1.08-2.16-2.4 0-1.32.96-2.4 2.16-2.4 1.2 0 2.18 1.09 2.16 2.4 0 1.32-.96 2.4-2.16 2.4Zm7.96 0c-1.18 0-2.16-1.08-2.16-2.4 0-1.32.96-2.4 2.16-2.4 1.2 0 2.18 1.09 2.16 2.4 0 1.32-.95 2.4-2.16 2.4Z\"\n />\n </svg>\n );\n}\n\nexport function InstagramIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"5\" />\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <circle\n cx=\"17.5\"\n cy=\"6.5\"\n r=\"1\"\n fill=\"currentColor\"\n stroke=\"none\"\n />\n </svg>\n );\n}\n\nexport function XSocialIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...props}>\n <path\n fill=\"currentColor\"\n d=\"M18.24 2.25h3.31l-7.23 8.26 8.51 11.24h-6.66l-5.21-6.82-5.97 6.82H1.68l7.73-8.84L1.25 2.25h6.83l4.71 6.23 5.45-6.23Zm-1.16 17.52h1.83L7.08 4.13H5.12l11.96 15.64Z\"\n />\n </svg>\n );\n}\n\nexport function LinkedInIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...props}>\n <path\n fill=\"currentColor\"\n d=\"M20.45 20.45h-3.56v-5.57c0-1.33-.03-3.04-1.85-3.04-1.86 0-2.14 1.45-2.14 2.94v5.67H9.34V9h3.42v1.56h.05c.47-.9 1.64-1.85 3.37-1.85 3.6 0 4.27 2.37 4.27 5.46v6.28ZM5.32 7.43a2.07 2.07 0 1 1 0-4.13 2.07 2.07 0 0 1 0 4.13ZM7.1 20.45H3.54V9H7.1v11.45Z\"\n />\n </svg>\n );\n}\n\nexport function DownloadIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <polyline points=\"7 10 12 15 17 10\" />\n <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\" />\n </svg>\n );\n}\n\nexport function ExpandIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M8 3H3v5M16 3h5v5M21 16v5h-5M3 16v5h5\" />\n </svg>\n );\n}\n\nexport function PlayIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...props}>\n <path fill=\"currentColor\" d=\"M7 4.5v15l12-7.5z\" />\n </svg>\n );\n}\n\nexport function PauseIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...props}>\n <path fill=\"currentColor\" d=\"M6 4h4v16H6zM14 4h4v16h-4z\" />\n </svg>\n );\n}\n\nexport function CloudUploadIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M17.5 19H19a4 4 0 0 0 .4-8A7.5 7.5 0 0 0 5 9.5 5 5 0 0 0 6 19h1.5\" />\n <path d=\"m8.5 15.5 3.5-3.5 3.5 3.5M12 12v9\" />\n </svg>\n );\n}\n\nexport function ExternalLinkIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M7 17 17 7M9 7h8v8\" />\n </svg>\n );\n}\n\nexport function GenApiIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"m8 3 4 1.5L16 3v18l-4-1.5L8 21z\" />\n <path d=\"M8 3v18M16 3v18\" />\n </svg>\n );\n}\n\nexport function GitBranchIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <line x1=\"6\" y1=\"3\" x2=\"6\" y2=\"15\" />\n <circle cx=\"18\" cy=\"6\" r=\"3\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <path d=\"M18 9a9 9 0 0 1-9 9\" />\n </svg>\n );\n}\n\nexport function GitPullRequestIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <circle cx=\"6\" cy=\"6\" r=\"3\" />\n <circle cx=\"18\" cy=\"18\" r=\"3\" />\n <path d=\"M6 9v12M13 6h3a2 2 0 0 1 2 2v7\" />\n </svg>\n );\n}\n\nexport function GraduationCapIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M21.42 10.92a1 1 0 0 0-.02-1.84L12.83 5.18a2 2 0 0 0-1.66 0L2.6 9.08a1 1 0 0 0 0 1.83l8.57 3.91a2 2 0 0 0 1.66 0z\" />\n <path d=\"M22 10v6\" />\n <path d=\"M6 12.5V16a6 3 0 0 0 12 0v-3.5\" />\n </svg>\n );\n}\n\nexport function SparklesIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M12 3l1.9 5.8a2 2 0 0 0 1.3 1.3L21 12l-5.8 1.9a2 2 0 0 0-1.3 1.3L12 21l-1.9-5.8a2 2 0 0 0-1.3-1.3L3 12l5.8-1.9a2 2 0 0 0 1.3-1.3z\" />\n </svg>\n );\n}\n\nexport function GitHubIcon(props: IconProps) {\n return (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" {...props}>\n <path\n fill=\"currentColor\"\n d=\"M12 .5A11.5 11.5 0 0 0 8.36 22.9c.58.11.79-.25.79-.56v-2.16c-3.21.7-3.89-1.38-3.89-1.38-.53-1.34-1.29-1.7-1.29-1.7-1.05-.72.08-.7.08-.7 1.16.08 1.77 1.19 1.77 1.19 1.04 1.76 2.71 1.25 3.37.96.11-.75.4-1.25.74-1.54-2.56-.29-5.26-1.28-5.26-5.7 0-1.26.45-2.29 1.19-3.1-.12-.29-.52-1.46.11-3.06 0 0 .97-.31 3.16 1.18a10.88 10.88 0 0 1 5.76 0c2.19-1.49 3.15-1.18 3.15-1.18.63 1.6.23 2.77.11 3.06.74.81 1.19 1.84 1.19 3.1 0 4.43-2.7 5.4-5.27 5.69.41.36.78 1.06.78 2.14v3.19c0 .31.21.68.8.56A11.5 11.5 0 0 0 12 .5Z\"\n />\n </svg>\n );\n}\n\nexport function ImageIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n <circle cx=\"9\" cy=\"9\" r=\"2\" />\n <path d=\"m21 15-5-5L5 21\" />\n </svg>\n );\n}\n\nexport function CubeIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"m21 16-9 5-9-5V8l9-5 9 5z\" />\n <path d=\"m3 8 9 5 9-5\" />\n <path d=\"M12 13v8\" />\n </svg>\n );\n}\n\nexport function AudioIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M9 18V5l12-2v13\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <circle cx=\"18\" cy=\"16\" r=\"3\" />\n </svg>\n );\n}\n\nexport function LockIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </svg>\n );\n}\n\nexport function LogInIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M10 17l5-5-5-5\" />\n <path d=\"M15 12H3\" />\n <path d=\"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4\" />\n </svg>\n );\n}\n\nexport function LogOutIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" />\n <path d=\"m16 17 5-5-5-5\" />\n <path d=\"M21 12H9\" />\n </svg>\n );\n}\n\nexport function MailIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\" />\n <path d=\"m3 7 9 7 9-7\" />\n </svg>\n );\n}\n\nexport function McpIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <rect x=\"2\" y=\"4\" width=\"8\" height=\"16\" rx=\"1.5\" />\n <rect x=\"14\" y=\"4\" width=\"8\" height=\"16\" rx=\"1.5\" />\n <path d=\"M10 12h4\" />\n </svg>\n );\n}\n\nexport function MenuIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M4 7h16M4 12h16M4 17h16\" />\n </svg>\n );\n}\n\nexport function NewspaperIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M5 4h12a1 1 0 0 1 1 1v14a1 1 0 0 0 1 1H4a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1h1z\" />\n <path d=\"M18 8h2a1 1 0 0 1 1 1v9a2 2 0 0 1-2 2\" />\n <path d=\"M7 8h7M7 12h7M7 16h4\" />\n </svg>\n );\n}\n\nexport function PlusIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M12 5v14M5 12h14\" />\n </svg>\n );\n}\n\nexport function TerminalIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <polyline points=\"4 8 8 12 4 16\" />\n <line x1=\"12\" y1=\"20\" x2=\"20\" y2=\"20\" />\n </svg>\n );\n}\n\nexport function ToolIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l2.1 2.1a1 1 0 0 0 1.4 0l4-4a6 6 0 0 1-8 8l-8 8a2.8 2.8 0 0 1-4-4l8-8a6 6 0 0 1 8-8l-4 4Z\" />\n </svg>\n );\n}\n\nexport function TargetIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <circle cx=\"12\" cy=\"12\" r=\"5\" />\n <circle cx=\"12\" cy=\"12\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n );\n}\n\nexport function TokensIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M4 9h16M4 15h16M10 3 8 21M16 3l-2 18\" />\n </svg>\n );\n}\n\nexport function UsageIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M4 18a8 8 0 1 1 16 0\" />\n <path d=\"M12 18l3.5-5\" />\n <path d=\"M7 18h10\" />\n <path d=\"M7.5 12.5 6 11\" />\n <path d=\"M16.5 12.5 18 11\" />\n </svg>\n );\n}\n\nexport function WarningIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M10.3 3.1 1.8 17a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.1a2 2 0 0 0-3.4 0Z\" />\n <path d=\"M12 9v4M12 17h.01\" />\n </svg>\n );\n}\n\nexport function TrendUpIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <polyline points=\"3 17 9 11 13 15 21 7\" />\n <polyline points=\"15 7 21 7 21 13\" />\n </svg>\n );\n}\n\nexport function EarningsIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <ellipse cx=\"10\" cy=\"6\" rx=\"6\" ry=\"3\" />\n <path d=\"M4 6v8c0 1.7 2.7 3 6 3 1.2 0 2.4-.2 3.3-.5\" />\n <path d=\"M16 6v4\" />\n <path d=\"M4 10c0 1.7 2.7 3 6 3 1.1 0 2.1-.1 3-.4\" />\n <path d=\"M18 14v6\" />\n <path d=\"M15 17h6\" />\n </svg>\n );\n}\n\nexport function WalletIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M3 7a2 2 0 0 1 2-2h13a2 2 0 0 1 2 2v2H5a2 2 0 0 0-2 2V7Z\" />\n <path d=\"M3 11a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-6Z\" />\n <circle cx=\"17\" cy=\"14\" r=\"1.25\" fill=\"currentColor\" />\n </svg>\n );\n}\n\nexport function MoonIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8Z\" />\n </svg>\n );\n}\n\nexport function SunIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <path d=\"M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4\" />\n </svg>\n );\n}\n\nexport function XIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n );\n}\n\nexport function TrashIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M3 6h18\" />\n <path d=\"M8 6V4h8v2\" />\n <path d=\"m19 6-1 15H6L5 6\" />\n <path d=\"M10 11v6M14 11v6\" />\n </svg>\n );\n}\n\n// --- Model modality / capability / price glyphs (single-ink, replace emoji) ---\n\nexport function ChatIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\" />\n </svg>\n );\n}\n\nexport function RobotIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <rect x=\"3\" y=\"6\" width=\"18\" height=\"15\" rx=\"3\" />\n <path d=\"M12 2v4M3 11H1v5h2M21 11h2v5h-2M8 17h8\" />\n <circle cx=\"9\" cy=\"12\" r=\"1\" />\n <circle cx=\"15\" cy=\"12\" r=\"1\" />\n </svg>\n );\n}\n\nexport function EyeIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n );\n}\n\nexport function EyeOffIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n <path d=\"M3 3l18 18\" />\n </svg>\n );\n}\n\nexport function VideoIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"m22 8-6 4 6 4V8z\" />\n <rect x=\"2\" y=\"6\" width=\"14\" height=\"12\" rx=\"2\" />\n </svg>\n );\n}\n\nexport function MicIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3z\" />\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\n <path d=\"M12 19v3\" />\n </svg>\n );\n}\n\nexport function SpeakerIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M11 5 6 9H2v6h4l5 4z\" />\n <path d=\"M15.54 8.46a5 5 0 0 1 0 7.07\" />\n <path d=\"M19.07 4.93a10 10 0 0 1 0 14.14\" />\n </svg>\n );\n}\n\nexport function MegaphoneIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"m3 11 18-5v12L3 14v-3z\" />\n <path d=\"m7 15 1.5 6H14l-2-7\" />\n </svg>\n );\n}\n\nexport function ReasoningIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M9 18h6M10 22h4M15.1 14c.2-1 .6-1.7 1.4-2.5A4.6 4.6 0 0 0 18 8 6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.8.8 1.2 1.5 1.4 2.5\" />\n </svg>\n );\n}\n\nexport function RocketIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z\" />\n <path d=\"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z\" />\n <path d=\"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0\" />\n <path d=\"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\" />\n </svg>\n );\n}\n\nexport function SearchIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <circle cx=\"11\" cy=\"11\" r=\"7\" />\n <path d=\"m21 21-4.3-4.3\" />\n </svg>\n );\n}\n\nexport function SignOutIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" />\n <path d=\"m16 17 5-5-5-5\" />\n <path d=\"M21 12H9\" />\n </svg>\n );\n}\n\nexport function PowerIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M12 2v10\" />\n <path d=\"M18.4 6.6a9 9 0 1 1-12.77.04\" />\n </svg>\n );\n}\n\nexport function SparkleIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M9.94 15.5A2 2 0 0 0 8.5 14.06l-6.14-1.58a.5.5 0 0 1 0-.96L8.5 9.94A2 2 0 0 0 9.94 8.5l1.58-6.14a.5.5 0 0 1 .96 0L14.06 8.5A2 2 0 0 0 15.5 9.94l6.14 1.58a.5.5 0 0 1 0 .96L15.5 14.06a2 2 0 0 0-1.44 1.44l-1.58 6.14a.5.5 0 0 1-.96 0z\" />\n <path d=\"M20 3v4\" />\n <path d=\"M22 5h-4\" />\n <path d=\"M4 17v2\" />\n <path d=\"M5 18H3\" />\n </svg>\n );\n}\n\nexport function StarIcon({\n filled = false,\n ...props\n}: IconProps & { filled?: boolean }) {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n {...strokeProps}\n fill={filled ? \"currentColor\" : \"none\"}\n {...props}\n >\n <polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\" />\n </svg>\n );\n}\n\nexport function CodeIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"m16 18 6-6-6-6M8 6l-6 6 6 6\" />\n </svg>\n );\n}\n\nexport function DatabaseIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\" />\n <path d=\"M3 5v14a9 3 0 0 0 18 0V5\" />\n <path d=\"M3 12a9 3 0 0 0 18 0\" />\n </svg>\n );\n}\n\nexport function CardIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <rect x=\"2\" y=\"5\" width=\"20\" height=\"14\" rx=\"2\" />\n <path d=\"M2 10h20\" />\n </svg>\n );\n}\n\nexport function SproutIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M7 20h10\" />\n <path d=\"M10 20c5.5-2.5.8-6.4 3-10\" />\n <path d=\"M9.5 9.4c1.1.8 1.8 2.2 2.3 3.7-2 .4-3.5.4-4.8-.3-1.2-.6-2.3-1.9-3-4.2 2.8-.5 4.4 0 5.5.8z\" />\n <path d=\"M14.1 6a7 7 0 0 0-1.1 4c1.9-.1 3.3-.6 4.3-1.4 1-1 1.6-2.3 1.7-4.6-2.7.1-4 1-4.9 2z\" />\n </svg>\n );\n}\n\nexport function PencilIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M12 20h9\" />\n <path d=\"M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4Z\" />\n </svg>\n );\n}\n\nexport function KeyIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <circle cx=\"7.5\" cy=\"15.5\" r=\"5.5\" />\n <path d=\"m21 2-9.6 9.6\" />\n <path d=\"m15.5 7.5 3 3L22 7l-3-3\" />\n </svg>\n );\n}\n\nexport function GlobeIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\" />\n <path d=\"M2 12h20\" />\n </svg>\n );\n}\n\nexport function ArrowLeftIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M19 12H5\" />\n <path d=\"m12 19-7-7 7-7\" />\n </svg>\n );\n}\n\nexport function RefreshIcon(props: IconProps) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" {...strokeProps} {...props}>\n <path d=\"M21 12a9 9 0 1 1-2.64-6.36\" />\n <path d=\"M21 3v6h-6\" />\n </svg>\n );\n}\n\nexport type { IconProps } from \"./types.ts\";\n","import type {\n ComponentPropsWithoutRef,\n ElementType,\n PropsWithChildren,\n} from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\ntype HeadingSize = \"display\" | \"title\" | \"section\" | \"subsection\" | \"card\";\n\ntype TextSize = \"body\" | \"sm\" | \"xs\" | \"micro\";\ntype TextTone = \"base\" | \"strong\" | \"soft\" | \"muted\";\ntype TextWeight = \"normal\" | \"medium\" | \"semibold\" | \"bold\";\n\nconst headingSizeClasses: Record<HeadingSize, string> = {\n display: \"polli:font-heading polli:text-5xl polli:leading-none\",\n title: \"polli:font-heading polli:text-4xl polli:leading-none\",\n section: \"polli:font-subheading polli:text-2xl polli:leading-tight\",\n subsection: \"polli:font-subheading polli:text-xl polli:leading-tight\",\n card: \"polli:font-subheading polli:text-lg polli:leading-tight\",\n};\n\nconst textSizeClasses: Record<TextSize, string> = {\n body: \"polli:text-base polli:leading-relaxed\",\n sm: \"polli:text-sm polli:leading-6\",\n xs: \"polli:text-xs polli:leading-normal\",\n micro: \"polli:text-micro polli:leading-normal\",\n};\n\nconst textToneClasses: Record<TextTone, string> = {\n base: \"polli:text-theme-text-base\",\n strong: \"polli:text-theme-text-strong\",\n soft: \"polli:text-theme-text-soft\",\n muted: \"polli:text-theme-text-muted\",\n};\n\nconst textWeightClasses: Record<TextWeight, string> = {\n normal: \"polli:font-normal\",\n medium: \"polli:font-medium\",\n semibold: \"polli:font-semibold\",\n bold: \"polli:font-bold\",\n};\n\nexport function headingClassName(size: HeadingSize, className?: string) {\n return cn(\n \"polli:break-words polli:text-theme-text-strong\",\n headingSizeClasses[size],\n className,\n );\n}\n\nfunction textClassName({\n size,\n tone,\n weight,\n className,\n}: {\n size: TextSize;\n tone: TextTone;\n weight: TextWeight;\n className?: string;\n}) {\n return cn(\n \"polli:break-words polli:font-body\",\n textSizeClasses[size],\n textToneClasses[tone],\n textWeightClasses[weight],\n className,\n );\n}\n\ntype HeadingOwnProps<T extends ElementType> = PropsWithChildren<{\n as?: T;\n size?: HeadingSize;\n className?: string;\n}>;\n\nexport type HeadingProps<T extends ElementType = \"h2\"> = HeadingOwnProps<T> &\n Omit<ComponentPropsWithoutRef<T>, keyof HeadingOwnProps<T>>;\n\nexport function Heading<T extends ElementType = \"h2\">({\n as,\n size = \"section\",\n className,\n children,\n ...rest\n}: HeadingProps<T>) {\n const Component = as || \"h2\";\n return (\n <Component {...rest} className={headingClassName(size, className)}>\n {children}\n </Component>\n );\n}\n\ntype TextOwnProps<T extends ElementType> = PropsWithChildren<{\n as?: T;\n size?: TextSize;\n tone?: TextTone;\n weight?: TextWeight;\n className?: string;\n}>;\n\nexport type TextProps<T extends ElementType = \"p\"> = TextOwnProps<T> &\n Omit<ComponentPropsWithoutRef<T>, keyof TextOwnProps<T>>;\n\nexport function Text<T extends ElementType = \"p\">({\n as,\n size = \"body\",\n tone = \"base\",\n weight = \"normal\",\n className,\n children,\n ...rest\n}: TextProps<T>) {\n const Component = as || \"p\";\n return (\n <Component\n {...rest}\n className={textClassName({ size, tone, weight, className })}\n >\n {children}\n </Component>\n );\n}\n","import type { ComponentPropsWithoutRef, FC, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { WarningIcon } from \"../primitives/icons/index.tsx\";\nimport { Text } from \"../primitives/Typography.tsx\";\n\ntype AlertIntent = \"info\" | \"advisory\" | \"warning\" | \"danger\";\n\nconst intentClasses: Record<AlertIntent, string> = {\n info: \"polli:bg-theme-bg-pale polli:text-theme-text-strong\",\n advisory: \"polli:bg-intent-warning-bg-light/45 polli:text-theme-text-base\",\n warning: \"polli:bg-intent-warning-bg-light polli:text-intent-warning-text\",\n danger: \"polli:bg-intent-danger-bg-light polli:text-intent-danger-text\",\n};\n\nexport type AlertProps = Omit<ComponentPropsWithoutRef<\"div\">, \"title\"> & {\n intent?: AlertIntent;\n title?: ReactNode;\n};\n\nexport const Alert: FC<AlertProps> = ({\n intent = \"info\",\n title,\n className,\n children,\n ...rest\n}) => (\n <div\n {...rest}\n role={intent === \"danger\" ? \"alert\" : \"status\"}\n className={cn(\n \"polli:rounded-xl polli:px-3 polli:py-2 polli:text-sm\",\n intent === \"advisory\" && \"polli:flex polli:items-start polli:gap-2\",\n intentClasses[intent],\n className,\n )}\n >\n {intent === \"advisory\" && (\n <WarningIcon className=\"polli:mt-0.5 polli:h-4 polli:w-4 polli:shrink-0 polli:text-intent-warning-text\" />\n )}\n <div className=\"polli:min-w-0\">\n {title &&\n (intent === \"advisory\" ? (\n <>\n <strong className=\"polli:font-semibold polli:text-theme-text-strong\">\n {title}\n </strong>{\" \"}\n —{\" \"}\n </>\n ) : (\n <Text\n as=\"div\"\n size=\"xs\"\n tone=\"strong\"\n weight=\"bold\"\n className=\"polli:mb-1 polli:uppercase polli:tracking-wide\"\n >\n {title}\n </Text>\n ))}\n {children}\n </div>\n </div>\n);\n","import type { CSSProperties, ReactNode, RefObject } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport logoWordmarkUrl from \"../brand/lockup-horizontal.svg\";\nimport { cn } from \"../lib/cn.ts\";\n\ntype ScrollTargetRef = RefObject<HTMLElement | null>;\n\nexport type AppHeaderProps = {\n children?: ReactNode;\n navLabel: string;\n autoHide?: boolean;\n scrollTargetRef?: ScrollTargetRef;\n brandHref?: string;\n brandLabel?: string;\n className?: string;\n innerClassName?: string;\n navClassName?: string;\n};\n\nconst brandWordmarkMaskUrl = `url('${logoWordmarkUrl}')`;\n\nconst brandWordmarkMask: CSSProperties = {\n WebkitMaskImage: brandWordmarkMaskUrl,\n WebkitMaskPosition: \"center\",\n WebkitMaskRepeat: \"no-repeat\",\n WebkitMaskSize: \"contain\",\n maskImage: brandWordmarkMaskUrl,\n maskPosition: \"center\",\n maskRepeat: \"no-repeat\",\n maskSize: \"contain\",\n};\n\nfunction scrollTopFor(target: HTMLElement | Window) {\n return target === window\n ? window.scrollY\n : (target as HTMLElement).scrollTop;\n}\n\nexport function AppHeader({\n children,\n navLabel,\n autoHide = false,\n scrollTargetRef,\n brandHref = \"https://pollinations.ai\",\n brandLabel = \"Pollinations\",\n className,\n innerClassName,\n navClassName,\n}: AppHeaderProps) {\n const [hidden, setHidden] = useState(false);\n\n useEffect(() => {\n if (!autoHide || typeof window === \"undefined\") {\n setHidden(false);\n return;\n }\n\n const target = scrollTargetRef?.current ?? window;\n let lastScrollTop = scrollTopFor(target);\n let frameId = 0;\n\n const handleScroll = () => {\n if (frameId) return;\n\n frameId = window.requestAnimationFrame(() => {\n frameId = 0;\n const nextScrollTop = scrollTopFor(target);\n const delta = nextScrollTop - lastScrollTop;\n\n if (nextScrollTop < 16) {\n setHidden(false);\n } else if (delta > 8) {\n setHidden(true);\n } else if (delta < -8) {\n setHidden(false);\n }\n\n lastScrollTop = nextScrollTop;\n });\n };\n\n target.addEventListener(\"scroll\", handleScroll, { passive: true });\n\n return () => {\n if (frameId) window.cancelAnimationFrame(frameId);\n target.removeEventListener(\"scroll\", handleScroll);\n };\n }, [autoHide, scrollTargetRef]);\n\n return (\n <header\n className={cn(\n \"polli:sticky polli:top-0 polli:z-30 polli:bg-app-bg polli:py-4\",\n \"polli:transition-transform polli:duration-200 polli:ease-out\",\n autoHide && \"polli:will-change-transform\",\n hidden ? \"polli:-translate-y-full\" : \"polli:translate-y-0\",\n className,\n )}\n onFocusCapture={() => setHidden(false)}\n >\n <div\n className={cn(\n \"polli:mx-auto polli:flex polli:w-full polli:max-w-5xl polli:flex-col polli:gap-4 polli:px-4 polli:sm:flex-row polli:sm:items-center polli:sm:justify-between polli:sm:px-6\",\n innerClassName,\n )}\n >\n <a\n href={brandHref}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"polli:inline-flex polli:shrink-0 polli:items-center polli:text-theme-text-strong\"\n >\n <span className=\"polli:sr-only\">{brandLabel}</span>\n <span\n aria-hidden=\"true\"\n className=\"polli:block polli:h-7 polli:w-[220px] polli:max-w-full polli:bg-current\"\n style={brandWordmarkMask}\n />\n </a>\n {children ? (\n <nav\n aria-label={navLabel}\n className={cn(\n \"polli:flex polli:min-w-0 polli:flex-wrap polli:items-center polli:gap-2\",\n navClassName,\n )}\n >\n {children}\n </nav>\n ) : null}\n </div>\n </header>\n );\n}\n","import type { ComponentPropsWithoutRef, ElementType } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\ntype SurfaceVariant = \"panel\" | \"card\" | \"card-themed\";\n\nconst variantClasses: Record<SurfaceVariant, string> = {\n panel: \"polli:rounded-2xl polli:bg-theme-bg-pale polli:p-6 polli:shadow-container\",\n card: \"polli:rounded-xl polli:bg-surface-opaque polli:p-4 polli:shadow-well\",\n \"card-themed\":\n \"polli:rounded-xl polli:bg-theme-bg-pale polli:p-4 polli:shadow-well\",\n};\n\ntype SurfaceOwnProps = {\n /**\n * Depth role (all opaque, elevation via shadow not borders):\n * - `panel` — Level 1 container: themed bg, container shadow\n * - `card` — Level 2 well: neutral surface, well shadow (default)\n * - `card-themed` — themed well: theme-tinted, well shadow\n */\n variant?: SurfaceVariant;\n className?: string;\n};\n\n/**\n * Polymorphic like Button, TabButton and LinkCard, so a card that is itself a\n * link renders one element instead of an anchor wrapping a div. Defaults to\n * <div>, so existing call sites are unchanged.\n */\nexport type SurfaceProps<T extends ElementType = \"div\"> = SurfaceOwnProps & {\n as?: T;\n} & Omit<ComponentPropsWithoutRef<T>, keyof SurfaceOwnProps | \"as\" | \"color\">;\n\nexport function Surface<T extends ElementType = \"div\">({\n as,\n variant = \"card\",\n className,\n children,\n ...rest\n}: SurfaceProps<T>) {\n const Component: ElementType = as || \"div\";\n\n return (\n <Component\n {...rest}\n className={cn(\"polli:min-w-0\", variantClasses[variant], className)}\n >\n {children}\n </Component>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { Surface } from \"../primitives/Surface.tsx\";\nimport { Heading, Text } from \"../primitives/Typography.tsx\";\n\nexport type CalloutProps = {\n title: ReactNode;\n body: ReactNode;\n children: ReactNode;\n tone?: \"theme\" | \"dark\";\n className?: string;\n};\n\n/** Prominent closing panel with a title, supporting copy, and actions. */\nexport function Callout({\n title,\n body,\n children,\n tone = \"theme\",\n className,\n}: CalloutProps) {\n return (\n <Surface\n as=\"section\"\n variant=\"panel\"\n className={cn(\n \"polli:flex polli:flex-wrap polli:items-center polli:justify-between polli:gap-8 polli:rounded-3xl polli:px-6 polli:py-9 polli:sm:gap-10 polli:sm:px-10 polli:sm:py-12\",\n tone === \"dark\" ? \"dark polli:bg-brand-dark\" : undefined,\n className,\n )}\n >\n <div className=\"polli:flex polli:max-w-lg polli:flex-col polli:gap-2.5\">\n <Heading\n size=\"section\"\n className=\"polli:text-3xl polli:sm:text-4xl\"\n >\n {title}\n </Heading>\n <Text className=\"polli:text-theme-text-strong/75\">{body}</Text>\n </div>\n <div className=\"polli:flex polli:flex-wrap polli:items-center polli:gap-3\">\n {children}\n </div>\n </Surface>\n );\n}\n","import {\n type ComponentPropsWithoutRef,\n forwardRef,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { ArrowRightIcon } from \"../primitives/icons/index.tsx\";\nimport { ScrollArea, type ScrollAreaProps } from \"../primitives/ScrollArea.tsx\";\n\nexport type ChatConversationProps = Omit<\n ScrollAreaProps,\n \"children\" | \"className\"\n> & {\n children: ReactNode;\n className?: string;\n viewportClassName?: string;\n showScrollButton?: boolean;\n onScrollToBottom?: () => void;\n scrollButtonLabel?: string;\n};\n\n/**\n * Scrollable chat transcript with an optional jump-to-latest control.\n * Message data and streaming remain the consumer's responsibility.\n */\nexport const ChatConversation = forwardRef<\n HTMLDivElement,\n ChatConversationProps\n>(\n (\n {\n children,\n className,\n viewportClassName,\n showScrollButton = false,\n onScrollToBottom,\n scrollButtonLabel = \"Scroll to latest message\",\n ...viewportProps\n },\n ref,\n ) => (\n <div className={cn(\"polli:relative polli:min-h-0\", className)}>\n <ScrollArea\n {...viewportProps}\n ref={ref}\n className={cn(\"polli:h-full polli:min-h-0\", viewportClassName)}\n >\n {children}\n </ScrollArea>\n {showScrollButton && onScrollToBottom && (\n <button\n type=\"button\"\n aria-label={scrollButtonLabel}\n title={scrollButtonLabel}\n onClick={onScrollToBottom}\n className=\"polli-control polli:absolute polli:bottom-3 polli:left-1/2 polli:flex polli:size-9 polli:-translate-x-1/2 polli:cursor-pointer polli:items-center polli:justify-center polli:rounded-full polli:border polli:border-theme-border/60 polli:bg-surface-opaque polli:text-theme-text-strong polli:shadow-well polli:transition-transform polli:hover:translate-y-0.5\"\n >\n <ArrowRightIcon className=\"polli:size-4 polli:rotate-90\" />\n </button>\n )}\n </div>\n ),\n);\n\nChatConversation.displayName = \"ChatConversation\";\n\nexport type ChatConversationContentProps = ComponentPropsWithoutRef<\"div\">;\n\nexport function ChatConversationContent({\n className,\n ...props\n}: ChatConversationContentProps) {\n return (\n <div\n className={cn(\n \"polli:flex polli:min-w-0 polli:flex-col polli:gap-5\",\n className,\n )}\n {...props}\n />\n );\n}\n","import {\n type ComponentPropsWithoutRef,\n forwardRef,\n type MutableRefObject,\n type PropsWithChildren,\n type Ref,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\ntype ScrollAxis = \"y\" | \"x\" | \"both\";\n\nconst axisClasses: Record<ScrollAxis, string> = {\n y: \"polli:overflow-y-auto polli:overflow-x-hidden\",\n x: \"polli:overflow-x-auto polli:overflow-y-hidden\",\n both: \"polli:overflow-auto\",\n};\n\ntype ScrollAreaOwnProps = {\n /** Scroll direction. Default `y`. */\n axis?: ScrollAxis;\n /** Use the system scrollbar instead of the custom auto-hiding track. */\n scrollbar?: \"subtle\" | \"native\";\n className?: string;\n};\n\nexport type ScrollAreaProps = PropsWithChildren<\n ScrollAreaOwnProps &\n Omit<ComponentPropsWithoutRef<\"div\">, keyof ScrollAreaOwnProps>\n>;\n\nfunction assignRef<T>(ref: Ref<T> | undefined, value: T | null) {\n if (typeof ref === \"function\") ref(value);\n else if (ref) (ref as MutableRefObject<T | null>).current = value;\n}\n\n/** Scroll container with an optional themed, auto-hiding scrollbar. */\nexport const ScrollArea = forwardRef<HTMLDivElement, ScrollAreaProps>(\n (\n { axis = \"y\", scrollbar = \"subtle\", className, children, ...rest },\n externalRef,\n ) => {\n const innerRef = useRef<HTMLDivElement | null>(null);\n\n const setRef = useCallback(\n (node: HTMLDivElement | null) => {\n innerRef.current = node;\n assignRef(externalRef, node);\n },\n [externalRef],\n );\n\n useEffect(() => {\n if (scrollbar === \"native\") return;\n const element = innerRef.current;\n if (!element) return;\n\n let hideTimer: number | null = null;\n\n const clearHideTimer = () => {\n if (hideTimer !== null) {\n window.clearTimeout(hideTimer);\n hideTimer = null;\n }\n };\n\n const show = () => {\n element.dataset.scrollbarActive = \"true\";\n clearHideTimer();\n };\n\n const hide = () => {\n element.dataset.scrollbarActive = \"false\";\n clearHideTimer();\n };\n\n const scheduleHide = () => {\n clearHideTimer();\n hideTimer = window.setTimeout(hide, 2000);\n };\n\n const handleInteraction = () => {\n show();\n scheduleHide();\n };\n\n hide();\n\n element.addEventListener(\"scroll\", handleInteraction, {\n passive: true,\n });\n element.addEventListener(\"wheel\", handleInteraction, {\n passive: true,\n });\n element.addEventListener(\"touchstart\", handleInteraction, {\n passive: true,\n });\n element.addEventListener(\"pointerdown\", handleInteraction);\n element.addEventListener(\"keydown\", handleInteraction);\n element.addEventListener(\"focusin\", handleInteraction);\n element.addEventListener(\"focusout\", scheduleHide);\n\n return () => {\n clearHideTimer();\n element.removeEventListener(\"scroll\", handleInteraction);\n element.removeEventListener(\"wheel\", handleInteraction);\n element.removeEventListener(\"touchstart\", handleInteraction);\n element.removeEventListener(\"pointerdown\", handleInteraction);\n element.removeEventListener(\"keydown\", handleInteraction);\n element.removeEventListener(\"focusin\", handleInteraction);\n element.removeEventListener(\"focusout\", scheduleHide);\n };\n }, [scrollbar]);\n\n return (\n <div\n {...rest}\n ref={setRef}\n className={cn(\n scrollbar === \"subtle\" && \"polli-scrollbar-subtle\",\n \"polli:min-w-0 polli:max-w-full\",\n axisClasses[axis],\n className,\n )}\n >\n {children}\n </div>\n );\n },\n);\n\nScrollArea.displayName = \"ScrollArea\";\n","import type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { RobotIcon } from \"../primitives/icons/index.tsx\";\nimport { Text } from \"../primitives/Typography.tsx\";\n\nexport type ChatMessageRole = \"user\" | \"assistant\" | \"system\";\n\nexport type ChatMessageProps = ComponentPropsWithoutRef<\"article\"> & {\n from: ChatMessageRole;\n};\n\n/** Protocol-neutral message surface inspired by AI Elements' Message suite. */\nexport function ChatMessage({\n from,\n className,\n children,\n ...props\n}: ChatMessageProps) {\n return (\n <article\n data-role={from}\n className={cn(\n \"polli:group/message polli:flex polli:w-fit polli:max-w-full polli:min-w-0 polli:flex-col polli:gap-3 polli:[overflow-wrap:anywhere] polli:rounded-xl polli:px-4 polli:py-3\",\n from === \"user\"\n ? \"polli:ml-auto polli:bg-theme-bg-active polli:text-theme-text-strong\"\n : \"polli:mr-auto polli:bg-surface-opaque polli:text-theme-text-base polli:shadow-well\",\n className,\n )}\n {...props}\n >\n {children}\n </article>\n );\n}\n\nexport type ChatMessageHeaderProps = ComponentPropsWithoutRef<\"header\"> & {\n from: ChatMessageRole;\n label?: ReactNode;\n icon?: ReactNode;\n};\n\nexport function ChatMessageHeader({\n from,\n label,\n icon,\n className,\n ...props\n}: ChatMessageHeaderProps) {\n const content =\n label ??\n (from === \"user\" ? \"You\" : from === \"assistant\" ? \"Agent\" : \"System\");\n return (\n <header\n className={cn(\n \"polli:flex polli:items-center polli:gap-2\",\n className,\n )}\n {...props}\n >\n {from === \"assistant\" &&\n (icon ?? (\n <span className=\"polli:flex polli:size-6 polli:items-center polli:justify-center polli:rounded-full polli:bg-theme-bg-active polli:text-theme-text-strong\">\n <RobotIcon className=\"polli:size-3.5\" />\n </span>\n ))}\n <Text\n as=\"span\"\n size=\"xs\"\n tone=\"muted\"\n weight=\"bold\"\n className=\"polli:uppercase polli:tracking-wide\"\n >\n {content}\n </Text>\n </header>\n );\n}\n\nexport type ChatMessageContentProps = ComponentPropsWithoutRef<\"div\">;\n\nexport function ChatMessageContent({\n className,\n ...props\n}: ChatMessageContentProps) {\n return (\n <div\n className={cn(\n \"polli:min-w-0 polli:[&_pre]:max-w-full polli:[&_pre]:overflow-x-auto polli:[&_table]:max-w-full polli:[&_table]:overflow-x-auto\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport type ChatMessageActionsProps = ComponentPropsWithoutRef<\"footer\">;\n\nexport function ChatMessageActions({\n className,\n ...props\n}: ChatMessageActionsProps) {\n return (\n <footer\n className={cn(\n \"polli:flex polli:flex-wrap polli:items-center polli:gap-1 polli:pt-2\",\n className,\n )}\n {...props}\n />\n );\n}\n","import {\n type ComponentPropsWithoutRef,\n forwardRef,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { Textarea, type TextareaProps } from \"../primitives/Textarea.tsx\";\n\nexport type ChatPromptInputProps = ComponentPropsWithoutRef<\"fieldset\">;\n\n/**\n * Composable prompt shell. Put attachments or controls before the textarea and\n * actions in ChatPromptInputFooter; submission stays owned by the parent form.\n */\nexport function ChatPromptInput({ className, ...props }: ChatPromptInputProps) {\n return (\n <fieldset\n className={cn(\"polli:m-0 polli:min-w-0 polli:p-0\", className)}\n {...props}\n />\n );\n}\n\nexport const ChatPromptTextarea = forwardRef<\n HTMLTextAreaElement,\n TextareaProps\n>(({ className, ...props }, ref) => (\n <Textarea\n {...props}\n ref={ref}\n className={cn(\"polli:resize-none\", className)}\n />\n));\n\nChatPromptTextarea.displayName = \"ChatPromptTextarea\";\n\nexport type ChatPromptInputFooterProps = ComponentPropsWithoutRef<\"div\"> & {\n start?: ReactNode;\n end?: ReactNode;\n};\n\nexport function ChatPromptInputFooter({\n start,\n end,\n children,\n className,\n ...props\n}: ChatPromptInputFooterProps) {\n return (\n <div\n className={cn(\n \"polli:flex polli:flex-wrap polli:items-end polli:gap-2\",\n className,\n )}\n {...props}\n >\n {children ?? (\n <>\n <div className=\"polli:flex polli:flex-wrap polli:items-center polli:gap-2\">\n {start}\n </div>\n <div className=\"polli:ml-auto polli:flex polli:items-center polli:gap-2\">\n {end}\n </div>\n </>\n )}\n </div>\n );\n}\n","import { forwardRef } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\nexport type TextareaProps = React.ComponentPropsWithoutRef<\"textarea\"> & {\n error?: boolean;\n};\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, error, rows = 4, ...props }, ref) => (\n <textarea\n ref={ref}\n rows={rows}\n data-error={error ? \"true\" : undefined}\n className={cn(\n \"polli-textarea polli:w-full polli:rounded-lg polli:border polli:px-3 polli:py-2\",\n \"polli:min-h-20 polli:resize-y polli:font-body polli:text-base\",\n \"polli:text-theme-text-strong\",\n \"polli:transition-colors\",\n \"polli:disabled:opacity-50 polli:disabled:cursor-not-allowed\",\n className,\n )}\n {...props}\n />\n ),\n);\n\nTextarea.displayName = \"Textarea\";\n","import {\n type ButtonHTMLAttributes,\n type MouseEvent,\n type ReactNode,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { Button, type ButtonProps } from \"../primitives/Button.tsx\";\nimport { Tooltip } from \"../primitives/Tooltip.tsx\";\n\ntype CopyValue = string | (() => string | Promise<string>);\n\nexport type CopyButtonProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"children\" | \"className\" | \"onClick\" | \"type\" | \"value\"\n> & {\n value: CopyValue;\n children: ReactNode | ((copied: boolean) => ReactNode);\n copiedTimeoutMs?: number;\n tooltip?: ReactNode;\n tooltipAlign?: \"start\" | \"center\";\n tooltipClampToViewport?: boolean;\n tooltipMaxWidth?: number;\n copiedTooltip?: ReactNode;\n tooltipClassName?: string;\n className?: string | ((copied: boolean) => string);\n variant?: \"plain\" | \"button\";\n /** Button intent, used with `variant=\"button\"`. */\n intent?: ButtonProps<\"button\">[\"intent\"];\n onCopied?: () => void;\n onCopyError?: (error: unknown) => void;\n};\n\nexport function CopyButton({\n value,\n children,\n copiedTimeoutMs = 2000,\n tooltip = \"📋 Click to copy\",\n tooltipAlign,\n tooltipClampToViewport,\n tooltipMaxWidth,\n copiedTooltip = \"✅ Copied!\",\n tooltipClassName,\n className,\n variant = \"plain\",\n intent,\n onCopied,\n onCopyError,\n ...buttonProps\n}: CopyButtonProps) {\n const [copied, setCopied] = useState(false);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(\n () => () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n },\n [],\n );\n\n async function handleCopy(event: MouseEvent<HTMLButtonElement>) {\n event.stopPropagation();\n try {\n const text = typeof value === \"function\" ? await value() : value;\n await navigator.clipboard.writeText(text);\n setCopied(true);\n onCopied?.();\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(\n () => setCopied(false),\n copiedTimeoutMs,\n );\n } catch (error) {\n onCopyError?.(error);\n }\n }\n\n const Control = variant === \"button\" ? Button : \"button\";\n const button = (\n <Control\n {...buttonProps}\n {...(variant === \"button\" && intent ? { intent } : {})}\n type=\"button\"\n onClick={handleCopy}\n className={cn(\n \"polli-control\",\n buttonProps.disabled\n ? \"polli:cursor-not-allowed\"\n : \"polli:cursor-pointer\",\n typeof className === \"function\" ? className(copied) : className,\n )}\n >\n {typeof children === \"function\" ? children(copied) : children}\n </Control>\n );\n\n // A copy button with its own visible label doesn't need a hover tooltip —\n // pass tooltip={null} to opt out of the wrapper entirely.\n if (tooltip === null) {\n return button;\n }\n\n return (\n <Tooltip\n triggerAs=\"span\"\n content={copied ? copiedTooltip : tooltip}\n align={tooltipAlign}\n clampToViewport={tooltipClampToViewport}\n maxWidth={tooltipMaxWidth}\n displayContents\n tapEnabled={false}\n className={cn(\n buttonProps.disabled\n ? \"polli:cursor-not-allowed\"\n : \"polli:cursor-pointer\",\n tooltipClassName,\n )}\n >\n {button}\n </Tooltip>\n );\n}\n","import type {\n PropsWithChildren,\n MouseEvent as ReactMouseEvent,\n ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\n/** Semantic action roles. Label recipes live on Chip. */\ntype ButtonIntent = \"danger\" | \"info\" | \"neutral\" | \"brand\" | \"commit\";\nexport type ButtonAppearance = \"pill\" | \"raised\";\n\nconst pillSizes = {\n icon: \"polli:h-12 polli:w-12 polli:p-0\",\n xs: \"polli:h-5 polli:px-1.5 polli:py-0 polli:text-[11px] polli:leading-none\",\n sm: \"polli:min-h-7 polli:px-2 polli:pt-0.5 polli:pb-1\",\n md: \"polli:min-h-9 polli:px-4 polli:pt-1.5 polli:pb-2\",\n lg: \"polli:min-h-12 polli:px-6 polli:py-3\",\n} as const;\n\nconst raisedSizes = {\n icon: \"polli:h-12 polli:w-12 polli:p-0\",\n xs: \"polli:px-2 polli:py-1 polli:text-xs\",\n sm: \"polli:px-4 polli:py-2 polli:text-sm\",\n md: \"polli:px-7 polli:py-3.5 polli:text-base\",\n lg: \"polli:px-8 polli:py-4 polli:text-lg\",\n} as const;\n\nconst appearanceClasses: Record<ButtonAppearance, string> = {\n pill: \"polli:rounded-full\",\n raised:\n \"polli:rounded-xl polli:border-r-[3px] polli:border-b-[3px] polli:border-solid \" +\n \"polli:border-theme-text-strong/20 polli:hover:border-theme-text-strong/45\",\n};\n\n// Cascade-driven base — reads [data-theme] vars.\nconst themeClasses =\n \"polli:bg-theme-bg-active polli:text-theme-text-strong \" +\n \"polli:hover:bg-theme-bg-hover polli:hover:text-theme-text-hover polli:transition-colors\";\n\n// Primary and destructive actions use outlines at rest.\n// Two accent families share one look: `brand` for\n// signing in (identity, calm pale hover) and `commit` for granting or saving\n// (fills with the accent only under the pointer or keyboard focus).\nconst outlined =\n \"polli:border polli:border-theme-text-soft polli:bg-surface-white polli:text-theme-text-strong \" +\n \"polli:transition-colors polli:[.dark_&]:bg-transparent\";\nconst intentClasses: Record<ButtonIntent, string> = {\n brand: `${outlined} polli:hover:bg-theme-text-soft/10`,\n commit:\n `${outlined} polli:hover:border-theme-bg-active polli:hover:bg-theme-bg-active ` +\n \"polli:focus-visible:border-theme-bg-active polli:focus-visible:bg-theme-bg-active \" +\n \"polli:[.dark_&]:hover:bg-theme-bg-active polli:[.dark_&]:focus-visible:bg-theme-bg-active\",\n danger:\n \"polli:border polli:border-intent-danger-text polli:bg-transparent polli:text-intent-danger-text \" +\n \"polli:hover:bg-intent-danger-bg-hover polli:focus-visible:bg-intent-danger-bg-hover polli:transition-colors\",\n info:\n \"polli:bg-intent-info-bg-light polli:text-intent-info-text \" +\n \"polli:hover:bg-intent-info-bg-hover polli:transition-colors\",\n // Secondary actions never take the accent: one step stronger grey on hover.\n neutral:\n \"polli:bg-theme-bg-subtle polli:text-theme-text-base \" +\n \"polli:hover:bg-theme-text-muted/25 polli:hover:text-theme-text-strong polli:transition-colors\",\n};\n\ntype BaseButtonProps = {\n icon?: ReactNode;\n /** Optional semantic recipe; omit for the ambient theme button. */\n intent?: ButtonIntent;\n /** `raised` is the stronger website CTA treatment. */\n appearance?: ButtonAppearance;\n size?: keyof typeof pillSizes;\n className?: string;\n disabled?: boolean;\n};\n\nconst buttonClasses = ({\n intent,\n appearance = \"pill\",\n size,\n className,\n disabled,\n}: BaseButtonProps & { disabled?: boolean }) => {\n const colorClasses = intent ? intentClasses[intent] : themeClasses;\n const sizeClasses = appearance === \"raised\" ? raisedSizes : pillSizes;\n return cn(\n \"polli-control polli:inline-flex polli:items-center polli:justify-center polli:self-center polli:font-body polli:text-sm polli:font-medium polli:leading-normal polli:box-border polli:border polli:border-transparent\",\n disabled\n ? \"polli:opacity-50 polli:cursor-not-allowed\"\n : \"polli:hover:filter polli:hover:brightness-105 polli:cursor-pointer\",\n colorClasses,\n appearanceClasses[appearance],\n sizeClasses[size || \"md\"],\n className,\n );\n};\n\nexport type ButtonProps<T extends React.ElementType = \"button\"> =\n PropsWithChildren<BaseButtonProps> & {\n as?: T;\n } & Omit<React.ComponentPropsWithoutRef<T>, keyof BaseButtonProps | \"as\">;\n\nexport function Button<T extends React.ElementType = \"button\">({\n as,\n children,\n icon,\n intent,\n appearance,\n size,\n className,\n disabled,\n ...buttonProps\n}: ButtonProps<T>) {\n const Component: React.ElementType = as || \"button\";\n const isButton = Component === \"button\";\n const isAnchor = Component === \"a\";\n const buttonType = (\n buttonProps as {\n type?: \"button\" | \"submit\" | \"reset\";\n }\n ).type;\n const onClick = (\n buttonProps as {\n onClick?: (event: ReactMouseEvent) => void;\n }\n ).onClick;\n const handleClick = disabled\n ? (event: ReactMouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n }\n : onClick;\n\n return (\n <Component\n {...buttonProps}\n data-intent={intent}\n {...(isButton ? { type: buttonType ?? \"button\", disabled } : {})}\n {...(!isButton && disabled\n ? { \"aria-disabled\": true, tabIndex: -1 }\n : {})}\n {...(isAnchor && disabled ? { href: undefined } : {})}\n onClick={handleClick}\n className={buttonClasses({\n intent,\n appearance,\n size,\n className,\n disabled,\n })}\n >\n {icon && (\n <span\n aria-hidden=\"true\"\n className=\"polli:mr-2 polli:flex polli:size-4 polli:shrink-0 polli:[&>svg]:size-full\"\n >\n {icon}\n </span>\n )}\n {children}\n </Component>\n );\n}\n","import {\n type CSSProperties,\n type FC,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../lib/cn.ts\";\n\nconst TOOLTIP_MAX_WIDTH = 288;\nconst TOOLTIP_VIEWPORT_MARGIN = 12;\n\ntype TooltipProps = {\n children: ReactNode;\n content: ReactNode;\n align?: \"start\" | \"center\";\n ariaLabel?: string;\n clampToViewport?: boolean;\n className?: string;\n maxWidth?: number;\n onClick?: () => void;\n stopClickPropagation?: boolean;\n style?: CSSProperties;\n tapEnabled?: boolean;\n triggerAs?: \"button\" | \"span\";\n /**\n * When true, the inner cursor wrapper uses display:contents so the\n * trigger's flex/grid layout applies directly to the caller's children\n * without an inline wrapper in the way.\n */\n displayContents?: boolean;\n};\n\nexport const Tooltip: FC<TooltipProps> = ({\n children,\n content,\n align = \"start\",\n ariaLabel,\n clampToViewport = true,\n className,\n maxWidth = TOOLTIP_MAX_WIDTH,\n onClick,\n stopClickPropagation = true,\n style,\n tapEnabled = false,\n triggerAs = \"button\",\n displayContents = false,\n}) => {\n const [showTooltip, setShowTooltip] = useState(false);\n const [tooltipPosition, setTooltipPosition] = useState<{\n top: number;\n left: number;\n maxWidth: number;\n transform?: CSSProperties[\"transform\"];\n }>({\n top: 0,\n left: 0,\n maxWidth,\n });\n const triggerRef = useRef<HTMLElement | null>(null);\n const tapPinnedRef = useRef(false);\n const tooltipId = useId();\n\n const closeTooltip = () => {\n tapPinnedRef.current = false;\n setShowTooltip(false);\n };\n\n useEffect(() => {\n if (!showTooltip) return;\n\n const dismissOnOutsideTap = (event: PointerEvent) => {\n if (triggerRef.current?.contains(event.target as Node)) return;\n tapPinnedRef.current = false;\n setShowTooltip(false);\n };\n const dismissOnEscape = (event: globalThis.KeyboardEvent) => {\n if (event.key !== \"Escape\") return;\n tapPinnedRef.current = false;\n setShowTooltip(false);\n };\n const dismissOnViewportChange = () => {\n tapPinnedRef.current = false;\n setShowTooltip(false);\n };\n\n document.addEventListener(\"pointerdown\", dismissOnOutsideTap);\n document.addEventListener(\"keydown\", dismissOnEscape);\n window.addEventListener(\"scroll\", dismissOnViewportChange, {\n capture: true,\n passive: true,\n });\n window.addEventListener(\"resize\", dismissOnViewportChange);\n return () => {\n document.removeEventListener(\"pointerdown\", dismissOnOutsideTap);\n document.removeEventListener(\"keydown\", dismissOnEscape);\n window.removeEventListener(\"scroll\", dismissOnViewportChange, true);\n window.removeEventListener(\"resize\", dismissOnViewportChange);\n };\n }, [showTooltip]);\n\n const updateTooltipPosition = () => {\n if (triggerRef.current) {\n const rect = triggerRef.current.getBoundingClientRect();\n const availableMaxWidth = Math.min(\n maxWidth,\n window.innerWidth - TOOLTIP_VIEWPORT_MARGIN * 2,\n );\n let left =\n align === \"center\" ? rect.left + rect.width / 2 : rect.left;\n let transform: CSSProperties[\"transform\"] =\n align === \"center\" ? \"translateX(-50%)\" : undefined;\n if (clampToViewport) {\n left = Math.min(\n Math.max(rect.left, TOOLTIP_VIEWPORT_MARGIN),\n Math.max(\n TOOLTIP_VIEWPORT_MARGIN,\n window.innerWidth -\n availableMaxWidth -\n TOOLTIP_VIEWPORT_MARGIN,\n ),\n );\n transform = undefined;\n }\n setTooltipPosition({\n top: rect.bottom + 4,\n left,\n maxWidth: availableMaxWidth,\n transform,\n });\n }\n };\n\n // Informational triggers use help; action wrappers can override the cursor.\n const triggerClassName = cn(\n \"polli-control polli:relative polli:cursor-help polli:text-left polli:inline-flex polli:items-center\",\n className,\n );\n\n const cursorClass = displayContents\n ? \"polli:contents\"\n : \"polli:cursor-inherit\";\n\n // Portal past the trigger's layout; stay inside modal dialogs so the popup\n // shares their stacking and accessible subtree.\n const popupClasses =\n \"polli:fixed polli:w-max polli:px-2 polli:py-1 polli:bg-surface-menu polli:text-theme-text-base polli:font-normal polli:leading-snug polli:tracking-normal polli:normal-case polli:not-italic polli:text-xs polli:rounded-md polli:shadow-md polli:z-[130] polli:pointer-events-none polli:transition-opacity polli:whitespace-pre-line polli:break-words\";\n\n const popupNode = content ? (\n <span\n id={tooltipId}\n role=\"tooltip\"\n aria-hidden={!showTooltip}\n style={{\n top: tooltipPosition.top,\n left: tooltipPosition.left,\n maxWidth: tooltipPosition.maxWidth,\n transform: tooltipPosition.transform,\n }}\n className={`${\n showTooltip\n ? \"polli:visible polli:opacity-100\"\n : \"polli:invisible polli:opacity-0\"\n } ${popupClasses}`}\n >\n {content}\n </span>\n ) : null;\n const tooltipPopup =\n popupNode && typeof document !== \"undefined\"\n ? createPortal(\n popupNode,\n triggerRef.current?.closest('[role=\"dialog\"]') ??\n document.body,\n )\n : popupNode;\n const contentNode = (\n <>\n <span className={cursorClass}>{children}</span>\n {tooltipPopup}\n </>\n );\n\n const sharedProps = {\n \"aria-label\": ariaLabel,\n \"aria-describedby\": content && showTooltip ? tooltipId : undefined,\n className: triggerClassName,\n onMouseEnter: () => {\n updateTooltipPosition();\n setShowTooltip(true);\n },\n onMouseLeave: () => {\n if (!tapPinnedRef.current) setShowTooltip(false);\n },\n onClick: (e: MouseEvent) => {\n if (stopClickPropagation) e.stopPropagation();\n if (onClick) {\n onClick();\n }\n if (!tapEnabled || !content) return;\n updateTooltipPosition();\n if (tapPinnedRef.current) {\n closeTooltip();\n return;\n }\n tapPinnedRef.current = true;\n setShowTooltip(true);\n },\n onFocus: () => {\n updateTooltipPosition();\n setShowTooltip(true);\n },\n onBlur: closeTooltip,\n style,\n };\n\n if (triggerAs === \"span\") {\n const handleKeyDown = (event: KeyboardEvent<HTMLSpanElement>) => {\n if (!tapEnabled || !content) return;\n if (event.key !== \"Enter\" && event.key !== \" \") return;\n event.preventDefault();\n updateTooltipPosition();\n if (tapPinnedRef.current) {\n closeTooltip();\n return;\n }\n tapPinnedRef.current = true;\n setShowTooltip(true);\n };\n const spanInteractionProps = {\n ...sharedProps,\n role: tapEnabled && content ? \"button\" : undefined,\n tabIndex: tapEnabled && content ? 0 : undefined,\n onKeyDown: tapEnabled && content ? handleKeyDown : undefined,\n };\n\n return (\n <span\n ref={(node) => {\n triggerRef.current = node;\n }}\n {...spanInteractionProps}\n >\n {contentNode}\n </span>\n );\n }\n\n return (\n <button\n ref={(node) => {\n triggerRef.current = node;\n }}\n type=\"button\"\n aria-label={ariaLabel}\n aria-describedby={content && showTooltip ? tooltipId : undefined}\n className={triggerClassName}\n onMouseEnter={sharedProps.onMouseEnter}\n onMouseLeave={sharedProps.onMouseLeave}\n onClick={sharedProps.onClick}\n onFocus={sharedProps.onFocus}\n onBlur={sharedProps.onBlur}\n style={style}\n >\n {contentNode}\n </button>\n );\n};\n","import type { ComponentPropsWithoutRef, FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { CheckIcon, ClipboardIcon } from \"../primitives/icons/index.tsx\";\nimport { CopyButton } from \"./CopyButton.tsx\";\n\ntype CodeBlockOwnProps = {\n code: string;\n codeClassName?: string;\n language?: string;\n};\n\nexport type CodeBlockProps = CodeBlockOwnProps &\n Omit<ComponentPropsWithoutRef<\"div\">, keyof CodeBlockOwnProps | \"children\">;\n\nexport const CodeBlock: FC<CodeBlockProps> = ({\n code,\n codeClassName,\n language,\n className,\n ...rest\n}) => {\n const label = language || \"Code\";\n\n return (\n <div\n {...rest}\n className={cn(\n \"polli:min-w-0 polli:max-w-full polli:overflow-hidden polli:rounded-lg polli:border polli:border-theme-border polli:bg-theme-bg-pale\",\n className,\n )}\n >\n <div className=\"polli:flex polli:min-h-9 polli:items-center polli:justify-between polli:gap-3 polli:bg-theme-bg-subtle polli:px-3 polli:py-1.5\">\n <span className=\"polli:truncate polli:font-mono polli:text-[11px] polli:font-medium polli:uppercase polli:tracking-wide polli:text-theme-text-muted\">\n {label}\n </span>\n <CopyButton\n value={code}\n tooltip={null}\n aria-label=\"Copy code\"\n className=\"polli:flex polli:items-center polli:gap-1.5 polli:rounded-md polli:px-2 polli:py-1 polli:text-xs polli:font-medium polli:text-theme-text-base polli:transition-colors polli:hover:bg-theme-bg-hover polli:hover:text-theme-text-hover\"\n >\n {(copied) => (\n <>\n {copied ? (\n <CheckIcon className=\"polli:size-3.5\" />\n ) : (\n <ClipboardIcon className=\"polli:size-3.5\" />\n )}\n <span>{copied ? \"Copied\" : \"Copy\"}</span>\n </>\n )}\n </CopyButton>\n </div>\n <pre\n className={cn(\n \"polli:m-0 polli:min-w-0 polli:whitespace-pre-wrap polli:break-words polli:[overflow-wrap:anywhere] polli:[tab-size:4] polli:p-3 polli:font-mono polli:text-xs polli:leading-6 polli:text-theme-text-strong\",\n codeClassName,\n )}\n >\n <code>{code}</code>\n </pre>\n </div>\n );\n};\n","import type { FC, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { ChevronIcon } from \"../primitives/ChevronIcon.tsx\";\n\nexport type CollapsibleProps = {\n /** Header content (label, hint, etc). */\n label: ReactNode;\n expanded: boolean;\n onToggle: () => void;\n children: ReactNode;\n disabled?: boolean;\n /** Outer wrapper classes — border, rounding, etc. Keep it bg-free if the\n * expanded panel should stay transparent; put any fill on the trigger. */\n wrapperClassName?: string;\n /** Trigger/header base classes (e.g. a selected background). */\n triggerClassName?: string;\n /** Trigger hover classes. Defaults to `polli:hover:bg-theme-bg-active`. */\n hoverClassName?: string;\n /** Trigger focus classes. */\n focusClassName?: string;\n /** Expanded panel classes. Defaults to a top border separator. */\n panelClassName?: string;\n /** Accessible label for the toggle button when label is non-text. */\n ariaLabel?: string;\n};\n\n/**\n * Collapsible row composition. One chevron, one hover/rounded behaviour for\n * every collapsible in the UI. Use this for any \"click to reveal nested\n * content\" UI — nested settings, grouped controls, optional details.\n *\n * For dropdown/popover triggers (date pickers, menus) use a button with\n * <ChevronIcon /> directly — that's a different interaction.\n */\nexport const Collapsible: FC<CollapsibleProps> = ({\n label,\n expanded,\n onToggle,\n children,\n disabled = false,\n wrapperClassName,\n triggerClassName,\n hoverClassName = \"polli:hover:bg-theme-bg-active\",\n focusClassName,\n panelClassName = \"polli:border-t polli:border-theme-border polli:px-3 polli:pt-3 polli:pb-3\",\n ariaLabel,\n}) => (\n <div\n className={cn(\n \"polli:rounded-lg polli:border polli:transition-all\",\n wrapperClassName,\n disabled && \"polli:opacity-50\",\n )}\n >\n <button\n type=\"button\"\n aria-expanded={expanded}\n aria-label={ariaLabel}\n disabled={disabled}\n onClick={onToggle}\n className={cn(\n \"polli-control polli:w-full polli:flex polli:items-center polli:gap-3 polli:px-3 polli:py-2 polli:text-left polli:transition-colors\",\n expanded ? \"polli:rounded-t-lg\" : \"polli:rounded-lg\",\n triggerClassName,\n !disabled && hoverClassName,\n focusClassName,\n disabled ? \"polli:cursor-not-allowed\" : \"polli:cursor-pointer\",\n )}\n >\n <div className=\"polli:flex-1 polli:min-w-0\">{label}</div>\n <ChevronIcon\n expanded={expanded}\n className=\"polli:text-theme-text-soft\"\n />\n </button>\n {expanded && <div className={panelClassName}>{children}</div>}\n </div>\n);\n","import { Dialog as ArkDialog } from \"@ark-ui/react/dialog\";\nimport { Portal } from \"@ark-ui/react/portal\";\nimport type { ComponentPropsWithoutRef, FC, ReactNode } from \"react\";\nimport { useRef } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { ScrollArea, type ScrollAreaProps } from \"./ScrollArea.tsx\";\nimport { headingClassName } from \"./Typography.tsx\";\n\nconst sizeClasses = {\n sm: \"polli:max-w-md\",\n md: \"polli:max-w-xl\",\n lg: \"polli:max-w-[800px]\",\n xl: \"polli:max-w-6xl\",\n} as const;\n\nexport type DialogProps = {\n open: boolean;\n onOpenChange?: (open: boolean) => void;\n trigger?: ReactNode;\n triggerAsChild?: boolean;\n triggerClassName?: string;\n title?: ReactNode;\n ariaLabel?: string;\n labelledBy?: string;\n size?: keyof typeof sizeClasses;\n showBackdrop?: boolean;\n backdropBlur?: boolean;\n positionerClassName?: string;\n contentClassName?: string;\n children: ReactNode;\n};\n\nexport const Dialog: FC<DialogProps> = ({\n open,\n onOpenChange,\n trigger,\n triggerAsChild = false,\n triggerClassName,\n title,\n ariaLabel,\n labelledBy,\n size = \"md\",\n showBackdrop = true,\n backdropBlur = true,\n positionerClassName,\n contentClassName,\n children,\n}) => {\n const contentRef = useRef<HTMLDivElement>(null);\n\n return (\n <ArkDialog.Root\n open={open}\n initialFocusEl={() => contentRef.current}\n onOpenChange={(details) => onOpenChange?.(details.open)}\n >\n {trigger && (\n <ArkDialog.Trigger\n asChild={triggerAsChild}\n className={triggerClassName}\n >\n {trigger}\n </ArkDialog.Trigger>\n )}\n <Portal>\n {showBackdrop && (\n <ArkDialog.Backdrop\n // Scrim must DARKEN in both modes — ink-950 inverts\n // (near-white in dark) and would brighten the page.\n // Fixed black + a soft blur dims and de-focuses.\n className={cn(\n \"polli:fixed polli:inset-0 polli:z-[100] polli:bg-[#000]/50\",\n backdropBlur && \"polli:backdrop-blur-sm\",\n )}\n />\n )}\n <ArkDialog.Positioner\n className={cn(\n \"polli:fixed polli:inset-0 polli:z-[110] polli:flex polli:h-dvh polli:items-start polli:justify-center polli:overflow-hidden polli:p-0 polli:sm:p-4\",\n positionerClassName,\n )}\n >\n <ArkDialog.Content\n ref={contentRef}\n aria-label={ariaLabel}\n aria-labelledby={labelledBy}\n className={cn(\n \"polli:flex polli:h-dvh polli:max-h-dvh polli:w-full polli:max-sm:max-w-none polli:flex-col polli:overflow-y-auto polli:bg-theme-bg-pale polli:outline-none polli:focus:outline-none polli:focus-visible:outline-none polli:sm:my-auto polli:sm:h-auto polli:sm:max-h-[calc(100dvh-2rem)] polli:sm:rounded-2xl polli:sm:shadow-container\",\n sizeClasses[size],\n contentClassName,\n )}\n >\n {title && <DialogHeader title={title} />}\n {children}\n </ArkDialog.Content>\n </ArkDialog.Positioner>\n </Portal>\n </ArkDialog.Root>\n );\n};\n\nexport const DialogTitle = ArkDialog.Title;\nexport const DialogDescription = ArkDialog.Description;\n\nexport type DialogHeaderProps = Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"title\"\n> & {\n title?: ReactNode;\n description?: ReactNode;\n inBody?: boolean;\n titleClassName?: string;\n descriptionClassName?: string;\n};\n\nexport const DialogHeader: FC<DialogHeaderProps> = ({\n title,\n description,\n children,\n inBody = false,\n className,\n titleClassName,\n descriptionClassName,\n ...props\n}) => {\n return (\n <div\n className={cn(\n inBody\n ? \"polli:shrink-0 polli:pt-2 polli:pb-4\"\n : \"polli:shrink-0 polli:p-6 polli:pb-4\",\n className,\n )}\n {...props}\n >\n {title && (\n <DialogTitle\n className={cn(headingClassName(\"section\"), titleClassName)}\n >\n {title}\n </DialogTitle>\n )}\n {description && (\n <DialogDescription\n className={cn(\n \"polli:mt-1 polli:font-body polli:text-sm polli:font-normal polli:leading-5 polli:text-theme-text-base\",\n descriptionClassName,\n )}\n >\n {description}\n </DialogDescription>\n )}\n {children}\n </div>\n );\n};\n\nexport type DialogFooterProps = ComponentPropsWithoutRef<\"div\">;\n\nexport type DialogBodyProps = ScrollAreaProps & {\n actions?: ReactNode;\n footnote?: ReactNode;\n bodyClassName?: string;\n};\n\n/** Full-height scroll area with floating actions and an optional bottom link. */\nexport function DialogBody({\n children,\n actions,\n footnote,\n bodyClassName,\n className,\n ...props\n}: DialogBodyProps) {\n return (\n <ScrollArea\n {...props}\n className={cn(\n \"polli:flex polli:min-h-0 polli:flex-1 polli:flex-col polli:overscroll-contain\",\n className,\n )}\n >\n <div\n className={cn(\n \"polli:grow polli:space-y-4 polli:px-6 polli:py-4\",\n bodyClassName,\n )}\n >\n {children}\n </div>\n {(actions || footnote) && (\n <div className=\"polli-dialog-floating-controls polli:pointer-events-none polli:sticky polli:bottom-0 polli:z-10\">\n {actions && (\n <DialogFooter className=\"polli:pointer-events-auto\">\n {actions}\n </DialogFooter>\n )}\n {footnote && (\n <div className=\"polli:pointer-events-auto\">\n {footnote}\n </div>\n )}\n </div>\n )}\n </ScrollArea>\n );\n}\n\nexport const DialogFooter: FC<DialogFooterProps> = ({\n children,\n className,\n ...props\n}) => {\n return (\n <div\n className={cn(\n \"polli:flex polli:shrink-0 polli:flex-wrap polli:items-center polli:justify-end polli:gap-3 polli:bg-transparent polli:p-6 polli:pt-4\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n};\n","import type { ReactNode } from \"react\";\nimport { Button } from \"../primitives/Button.tsx\";\nimport {\n Dialog,\n DialogBody,\n DialogHeader,\n type DialogProps,\n} from \"../primitives/Dialog.tsx\";\nimport { CheckIcon, TrashIcon, XIcon } from \"../primitives/icons/index.tsx\";\n\ntype ConfirmIntent = \"danger\" | \"info\" | \"neutral\" | \"commit\";\n\nconst defaultIcons: Record<ConfirmIntent, ReactNode> = {\n danger: <TrashIcon />,\n commit: <CheckIcon />,\n info: <CheckIcon />,\n neutral: <CheckIcon />,\n};\n\nexport type ConfirmationDialogProps = {\n open: boolean;\n title: ReactNode;\n /** Short explanation rendered as body text. */\n description?: ReactNode;\n /** Extra body content below the description (alerts, inputs). */\n children?: ReactNode;\n confirmLabel: ReactNode;\n /** Confirm button recipe; also picks the default confirm icon. */\n intent?: ConfirmIntent;\n /** Override the confirm icon when the action is not a plain delete/confirm. */\n confirmIcon?: ReactNode;\n confirmDisabled?: boolean;\n cancelDisabled?: boolean;\n onConfirm: () => void;\n onCancel: () => void;\n size?: DialogProps[\"size\"];\n};\n\n/** One floating Cancel + confirm action for every yes/no dialog. */\nexport function ConfirmationDialog({\n open,\n title,\n description,\n children,\n confirmLabel,\n intent = \"danger\",\n confirmIcon,\n confirmDisabled = false,\n cancelDisabled = false,\n onConfirm,\n onCancel,\n size = \"md\",\n}: ConfirmationDialogProps) {\n const actions = (\n <>\n <Button\n type=\"button\"\n intent=\"neutral\"\n icon={<XIcon />}\n onClick={onCancel}\n disabled={cancelDisabled}\n >\n Cancel\n </Button>\n <Button\n type=\"button\"\n intent={intent}\n icon={confirmIcon ?? defaultIcons[intent]}\n onClick={onConfirm}\n disabled={confirmDisabled}\n >\n {confirmLabel}\n </Button>\n </>\n );\n\n return (\n <Dialog\n open={open}\n onOpenChange={(next) => !next && onCancel()}\n size={size}\n contentClassName=\"polli:overflow-hidden\"\n >\n <DialogBody actions={actions}>\n <DialogHeader inBody title={title} />\n {description && (\n <p className=\"polli:text-sm polli:leading-relaxed\">\n {description}\n </p>\n )}\n {children}\n </DialogBody>\n </Dialog>\n );\n}\n","import type { ComponentPropsWithoutRef, ElementType, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\nconst sizeClasses = {\n page: \"polli:text-sm polli:tracking-widest polli:text-theme-text-soft\",\n card: \"polli:text-xs polli:tracking-wider polli:text-theme-text-soft\",\n chrome: \"polli:text-micro polli:tracking-widest polli:text-theme-text-muted\",\n} as const;\n\ntype EyebrowOwnProps<T extends ElementType> = {\n as?: T;\n size?: keyof typeof sizeClasses;\n className?: string;\n children: ReactNode;\n};\n\nexport type EyebrowProps<T extends ElementType = \"span\"> = EyebrowOwnProps<T> &\n Omit<ComponentPropsWithoutRef<T>, keyof EyebrowOwnProps<T>>;\n\n/** Uppercase pixel label for page, card, and chrome metadata. */\nexport function Eyebrow<T extends ElementType = \"span\">({\n as,\n size = \"card\",\n className,\n children,\n ...rest\n}: EyebrowProps<T>) {\n const Component: ElementType = as || \"span\";\n\n return (\n <Component\n {...rest}\n className={cn(\n \"polli:font-pixel polli:uppercase\",\n sizeClasses[size],\n className,\n )}\n >\n {children}\n </Component>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { Eyebrow } from \"../primitives/Eyebrow.tsx\";\n\nexport type ContentHeaderProps = {\n eyebrow: ReactNode;\n title: ReactNode;\n subtitle?: ReactNode;\n action?: ReactNode;\n variant?: \"page\" | \"section\";\n className?: string;\n};\n\nconst titleClasses = {\n page: \"polli:font-heading polli:text-4xl polli:leading-[1.08] polli:text-theme-text-strong polli:sm:text-5xl polli:lg:text-7xl\",\n section:\n \"polli:font-subheading polli:text-3xl polli:leading-tight polli:text-theme-text-strong polli:sm:text-4xl\",\n} as const;\n\nconst subtitleClasses = {\n page: \"polli:max-w-lg polli:text-base polli:leading-relaxed polli:text-theme-text-base polli:sm:text-lg\",\n section: \"polli:max-w-xl polli:leading-relaxed polli:text-theme-text-base\",\n} as const;\n\n/** Shared page/section heading rhythm with an optional trailing action. */\nexport function ContentHeader({\n eyebrow,\n title,\n subtitle,\n action,\n variant = \"section\",\n className,\n}: ContentHeaderProps) {\n const Title = variant === \"page\" ? \"h1\" : \"h2\";\n\n return (\n <header\n className={cn(\n \"polli:flex polli:flex-wrap polli:items-end polli:justify-between polli:gap-6\",\n className,\n )}\n >\n <div className=\"polli:flex polli:max-w-2xl polli:flex-col polli:gap-3\">\n <Eyebrow size=\"page\">{eyebrow}</Eyebrow>\n <Title className={titleClasses[variant]}>{title}</Title>\n {subtitle && (\n <p\n className={cn(\n subtitleClasses[variant],\n \"polli:[&_strong]:text-theme-text-strong\",\n )}\n >\n {subtitle}\n </p>\n )}\n </div>\n {action}\n </header>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { CheckIcon, ClipboardIcon } from \"../primitives/icons/index.tsx\";\nimport { CopyButton, type CopyButtonProps } from \"./CopyButton.tsx\";\n\nexport type CopyFieldProps = Pick<\n CopyButtonProps,\n \"value\" | \"onCopied\" | \"onCopyError\" | \"copiedTimeoutMs\"\n> & {\n /** Accessible name, e.g. \"Copy secret key\". */\n label: string;\n /** What to show; defaults to the value itself (lists pass a truncated form). */\n display?: ReactNode;\n className?: string;\n};\n\n/**\n * A value the user copies but never edits: looks like a field, behaves like a\n * button. The whole surface copies on click; the end icon confirms.\n */\nexport function CopyField({\n value,\n label,\n display,\n className,\n ...copy\n}: CopyFieldProps) {\n return (\n <CopyButton\n {...copy}\n value={value}\n tooltip={null}\n aria-label={label}\n className={(copied) =>\n cn(\n \"polli-input-shell polli:flex polli:min-h-10 polli:w-full polli:cursor-pointer polli:items-center polli:gap-3 polli:rounded-lg polli:border polli:px-3 polli:py-2 polli:text-left polli:font-mono polli:text-xs polli:transition-colors\",\n copied\n ? \"polli:text-intent-success-text\"\n : \"polli:text-theme-text-base polli:hover:text-theme-text-strong\",\n className,\n )\n }\n >\n {(copied) => (\n <>\n <span className=\"polli:min-w-0 polli:flex-1 polli:select-all polli:break-all\">\n {copied ? \"Copied\" : (display ?? String(value))}\n </span>\n <span\n aria-hidden=\"true\"\n className=\"polli:flex polli:size-4 polli:shrink-0 polli:[&>svg]:size-full\"\n >\n {copied ? <CheckIcon /> : <ClipboardIcon />}\n </span>\n </>\n )}\n </CopyButton>\n );\n}\n","import { createListCollection } from \"@ark-ui/react/collection\";\nimport { Combobox } from \"@ark-ui/react/combobox\";\nimport {\n type ComponentPropsWithoutRef,\n type ReactNode,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { ChevronIcon } from \"../primitives/ChevronIcon.tsx\";\nimport { Input, type InputProps } from \"../primitives/Input.tsx\";\nimport { ScrollArea } from \"../primitives/ScrollArea.tsx\";\n\nexport type EditableComboboxProps = Omit<InputProps, \"onChange\" | \"value\"> & {\n value: string;\n options: string[];\n onChange: (value: string) => void;\n emptyMessage?: string;\n align?: \"start\" | \"end\";\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Controlled filter inputs can keep incomplete selections open. */\n closeOnSelect?: boolean;\n /**\n * Content rendered inside the input shell before the text field. Enables\n * the wrapped shell layout and replaces the standalone chevron trigger.\n */\n startContent?: ReactNode;\n /** Optional class for the suggestions panel. */\n contentClassName?: string;\n};\n\nexport type EditableComboboxTokenProps = Omit<\n ComponentPropsWithoutRef<\"button\">,\n \"children\" | \"type\"\n> & {\n label: string;\n value: string;\n highlighted?: boolean;\n};\n\n/** Interactive filter token intended for an EditableCombobox startContent slot. */\nexport function EditableComboboxToken({\n label,\n value,\n highlighted = false,\n className,\n ...buttonProps\n}: EditableComboboxTokenProps) {\n return (\n <button\n type=\"button\"\n data-highlighted={highlighted ? \"\" : undefined}\n className={cn(\n \"polli-control polli:flex polli:h-7 polli:max-w-full polli:shrink-0 polli:items-center polli:gap-1 polli:rounded polli:px-1.5 polli:text-xs polli:transition-colors polli:hover:bg-theme-bg-hover polli:data-[highlighted]:bg-theme-bg-active\",\n className,\n )}\n {...buttonProps}\n >\n <span className=\"polli:text-theme-text-muted\">{label}:</span>\n <span className=\"polli:truncate polli:text-theme-text-base\">\n {value}\n </span>\n <ChevronIcon className=\"polli:h-3 polli:w-3 polli:text-theme-text-muted\" />\n </button>\n );\n}\n\nexport function EditableCombobox({\n value,\n options,\n onChange,\n emptyMessage = \"No options match.\",\n align = \"start\",\n open,\n onOpenChange,\n closeOnSelect,\n startContent,\n contentClassName,\n className,\n disabled,\n name,\n placeholder,\n required,\n ...inputProps\n}: EditableComboboxProps) {\n const visibleOptions = useMemo(() => {\n const query = value.trim().toLowerCase();\n return query === \"\"\n ? options\n : options.filter((option) => option.toLowerCase().includes(query));\n }, [options, value]);\n const collection = useMemo(\n () =>\n createListCollection({\n items: visibleOptions,\n itemToString: (item) => item,\n itemToValue: (item) => item,\n }),\n [visibleOptions],\n );\n const hasOptions = options.length > 0;\n const hasStartContent = Boolean(startContent);\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Zag renders the field with defaultValue. Keep its DOM value aligned when\n // a controlled value projects an input event back to the same string.\n useEffect(() => {\n if (inputRef.current && inputRef.current.value !== value) {\n inputRef.current.value = value;\n }\n });\n\n return (\n <Combobox.Root\n collection={collection}\n inputValue={value}\n value={[]}\n allowCustomValue\n openOnClick={hasOptions}\n openOnChange={() => hasOptions}\n open={open}\n closeOnSelect={closeOnSelect}\n disabled={disabled}\n name={name}\n required={required}\n positioning={{\n placement: align === \"end\" ? \"bottom-end\" : \"bottom-start\",\n sameWidth: true,\n strategy: \"fixed\",\n }}\n onInputValueChange={(details) => onChange(details.inputValue)}\n onOpenChange={(details) => onOpenChange?.(details.open)}\n >\n <Combobox.Control\n className={cn(\n \"polli:relative polli:w-full\",\n hasStartContent &&\n \"polli-input-shell polli:flex polli:min-h-10 polli:flex-wrap polli:items-center polli:gap-2 polli:border polli:rounded-lg polli:px-2 polli:py-1\",\n )}\n >\n {startContent}\n <Combobox.Input asChild>\n <Input\n ref={inputRef}\n {...inputProps}\n name={name}\n placeholder={placeholder}\n className={cn(\n hasStartContent\n ? \"polli:min-w-28 polli:flex-1 polli:px-1 polli:py-1\"\n : \"polli:w-full polli:pr-10\",\n className,\n )}\n />\n </Combobox.Input>\n {hasOptions && !hasStartContent && (\n <Combobox.Trigger\n aria-label=\"Show options\"\n className=\"polli-control polli:absolute polli:right-0 polli:top-0 polli:flex polli:h-full polli:w-10 polli:cursor-pointer polli:items-center polli:justify-center polli:rounded-r-lg polli:text-theme-text-muted polli:hover:text-theme-text-strong\"\n >\n <Combobox.Context>\n {(context) => (\n <ChevronIcon\n expanded={context.open}\n className=\"polli:h-4 polli:w-4 polli:transition-transform\"\n />\n )}\n </Combobox.Context>\n </Combobox.Trigger>\n )}\n </Combobox.Control>\n <Combobox.Positioner>\n <Combobox.Content\n className={cn(\n \"polli:z-[120] polli:overflow-hidden polli:rounded-lg polli:bg-surface-menu polli:p-1 polli:shadow-lg polli:focus:outline-none\",\n contentClassName,\n )}\n >\n <ScrollArea className=\"polli:max-h-64\">\n <Combobox.List className=\"polli:flex polli:flex-col\">\n {visibleOptions.map((option) => (\n <Combobox.Item\n key={option}\n item={option}\n className={cn(\n \"polli-control polli:flex polli:w-full polli:cursor-pointer polli:items-center polli:rounded-lg polli:bg-transparent polli:px-3 polli:py-2 polli:text-left polli:text-sm polli:font-medium polli:text-theme-text-base polli:transition-colors polli:hover:bg-theme-bg-hover polli:data-[highlighted]:bg-theme-bg-hover\",\n value === option &&\n \"polli:bg-theme-bg-active polli:text-theme-text-strong\",\n )}\n >\n <Combobox.ItemText className=\"polli:truncate polli:font-mono\">\n {option}\n </Combobox.ItemText>\n </Combobox.Item>\n ))}\n {visibleOptions.length === 0 && (\n <Combobox.Empty className=\"polli:m-0 polli:px-2 polli:py-2 polli:text-sm polli:text-theme-text-soft\">\n {emptyMessage}\n </Combobox.Empty>\n )}\n </Combobox.List>\n </ScrollArea>\n </Combobox.Content>\n </Combobox.Positioner>\n </Combobox.Root>\n );\n}\n","import { forwardRef } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\nexport type InputProps = React.ComponentPropsWithoutRef<\"input\"> & {\n error?: boolean;\n hideNumberSteppers?: boolean;\n};\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n ({ className, error, hideNumberSteppers, ...props }, ref) => (\n <input\n ref={ref}\n data-error={error ? \"true\" : undefined}\n className={cn(\n \"polli-input polli:px-3 polli:py-2 polli:border polli:rounded-lg\",\n \"polli:font-body polli:text-base polli:font-normal polli:leading-6 polli:text-theme-text-strong\",\n \"polli:transition-colors\",\n \"polli:disabled:opacity-50 polli:disabled:cursor-not-allowed\",\n hideNumberSteppers && \"polli-input-number-clean\",\n className,\n )}\n {...props}\n />\n ),\n);\n","/** Relative URLs and same-origin absolute URLs stay in the current app. */\nexport function isExternalHref(\n href: unknown,\n origin = globalThis.location?.origin,\n): boolean {\n if (typeof href !== \"string\" || !/^(https?:)?\\/\\//i.test(href))\n return false;\n if (!origin) return true;\n try {\n return new URL(href, origin).origin !== origin;\n } catch {\n return false;\n }\n}\n","import type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { isExternalHref } from \"../lib/link.ts\";\nimport {\n Button,\n type ButtonAppearance,\n type ButtonProps,\n} from \"../primitives/Button.tsx\";\nimport { ExternalLinkIcon } from \"../primitives/icons/index.tsx\";\n\ntype ExternalLinkButtonBaseProps = {\n size?: \"sm\" | \"md\" | \"lg\";\n appearance?: ButtonAppearance;\n intent?: ButtonProps[\"intent\"];\n /** Set false for another Pollinations property that should behave as product navigation. */\n external?: boolean;\n showIcon?: boolean;\n /** Leading icon, rendered before the label. */\n icon?: ReactNode;\n className?: string;\n children: ReactNode;\n};\n\ntype ExternalLinkButtonAnchorProps = ExternalLinkButtonBaseProps & {\n href: string;\n} & Omit<ComponentPropsWithoutRef<\"a\">, \"children\" | \"className\" | \"href\">;\n\ntype ExternalLinkButtonNativeButtonProps = ExternalLinkButtonBaseProps &\n Omit<ComponentPropsWithoutRef<\"button\">, \"children\" | \"className\">;\n\nexport type ExternalLinkButtonProps =\n | ExternalLinkButtonAnchorProps\n | ExternalLinkButtonNativeButtonProps;\n\n/** Primary flow actions such as checkout or authorization. Use InlineLink for navigation. */\nexport function ExternalLinkButton(props: ExternalLinkButtonProps) {\n const {\n size = \"md\",\n appearance,\n external = \"href\" in props ? isExternalHref(props.href) : true,\n showIcon = true,\n icon,\n className,\n children,\n } = props;\n const content = (\n <>\n {icon}\n <span>{children}</span>\n {external && showIcon ? (\n <ExternalLinkIcon\n className=\"polli:h-4 polli:w-4 polli:shrink-0 polli:opacity-60\"\n aria-hidden=\"true\"\n />\n ) : null}\n </>\n );\n\n if (\"href\" in props) {\n const {\n href,\n target = external ? \"_blank\" : undefined,\n rel = target === \"_blank\" ? \"noopener noreferrer\" : undefined,\n size: _size,\n appearance: _appearance,\n external: _external,\n showIcon: _showIcon,\n icon: _icon,\n className: _className,\n children: _children,\n ...anchorProps\n } = props;\n\n return (\n <Button\n as=\"a\"\n href={href}\n target={target}\n rel={rel}\n size={size}\n appearance={appearance}\n className={cn(\"polli:gap-2\", className)}\n {...anchorProps}\n >\n {content}\n </Button>\n );\n }\n\n const {\n type = \"button\",\n size: _size,\n appearance: _appearance,\n external: _external,\n showIcon: _showIcon,\n icon: _icon,\n className: _className,\n children: _children,\n ...buttonProps\n } = props;\n\n return (\n <Button\n as=\"button\"\n type={type}\n size={size}\n appearance={appearance}\n className={cn(\"polli:gap-2\", className)}\n {...buttonProps}\n >\n {content}\n </Button>\n );\n}\n","export { Field } from \"@ark-ui/react/field\";\n","import type { ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { Field } from \"../primitives/Field.tsx\";\n\nexport type FieldStackProps = {\n /** Omit for a self-describing control; label the input itself. */\n label?: ReactNode;\n children: ReactNode;\n helper?: ReactNode;\n action?: ReactNode;\n error?: ReactNode;\n alignLabelRow?: boolean;\n className?: string;\n labelClassName?: string;\n helperClassName?: string;\n errorClassName?: string;\n};\n\nexport function FieldStack({\n label,\n children,\n helper,\n action,\n error,\n alignLabelRow = false,\n className,\n labelClassName,\n helperClassName,\n errorClassName,\n}: FieldStackProps) {\n return (\n <Field.Root\n className={cn(\n \"polli:flex polli:flex-col polli:gap-2 polli:font-body\",\n className,\n )}\n invalid={Boolean(error)}\n >\n {(label || action) && (\n <div\n className={cn(\n \"polli:flex polli:items-center polli:justify-between polli:gap-2\",\n alignLabelRow && \"polli:min-h-8\",\n )}\n >\n {label && (\n <Field.Label\n className={cn(\n \"polli:text-sm polli:font-semibold polli:leading-5 polli:text-theme-text-strong\",\n labelClassName,\n )}\n >\n {label}\n </Field.Label>\n )}\n {action}\n </div>\n )}\n {children}\n {error ? (\n <Field.ErrorText\n className={cn(\n \"polli:text-xs polli:font-medium polli:leading-5 polli:text-intent-danger-text\",\n errorClassName,\n )}\n >\n {error}\n </Field.ErrorText>\n ) : helper ? (\n <Field.HelperText\n className={cn(\n \"polli:text-xs polli:font-normal polli:leading-normal polli:text-theme-text-muted\",\n helperClassName,\n )}\n >\n {helper}\n </Field.HelperText>\n ) : null}\n </Field.Root>\n );\n}\n","import {\n type ChangeEvent,\n type ReactNode,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { acquireDocumentFileDropGuard } from \"../lib/document-file-drop-guard.ts\";\nimport { partitionFiles, type RejectedFile } from \"../lib/partition-files.ts\";\nimport { IconButton } from \"../primitives/IconButton.tsx\";\nimport { ImageIcon, PlusIcon, XIcon } from \"../primitives/icons/index.tsx\";\n\nconst PREVIEWABLE_IMAGE_TYPES = new Set([\n \"image/gif\",\n \"image/jpeg\",\n \"image/png\",\n \"image/webp\",\n]);\nconst PREVIEW_SIZE = 64;\nconst LARGE_PREVIEW_SIZE = 112;\n\nconst previewSizeClasses = {\n sm: \"polli:h-16 polli:w-16\",\n lg: \"polli:h-28 polli:w-28\",\n} as const;\n\nfunction isPreviewableImage(file: File): boolean {\n return PREVIEWABLE_IMAGE_TYPES.has(file.type);\n}\n\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${Math.round(bytes / 1024)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction attachmentSummary(files: File[]): string {\n const kinds = new Set(\n files.map((file) => file.type.split(\"/\")[0]).filter(Boolean),\n );\n if (kinds.size !== 1) return `${files.length} files attached`;\n const [kind] = kinds;\n return `${files.length} ${kind}${files.length === 1 ? \"\" : \"s\"} attached`;\n}\n\nfunction PreviewPlaceholder({\n icon,\n size,\n}: {\n icon: ReactNode;\n size: \"sm\" | \"lg\";\n}) {\n return (\n <div\n className={cn(\n \"polli:flex polli:items-center polli:justify-center polli:rounded-xl polli:bg-theme-bg-active polli:text-theme-text-soft\",\n previewSizeClasses[size],\n )}\n >\n {icon}\n </div>\n );\n}\n\nfunction FilePreview({\n file,\n placeholderIcon,\n size = \"sm\",\n}: {\n file: File;\n placeholderIcon: ReactNode;\n size?: \"sm\" | \"lg\";\n}) {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const [canPreview, setCanPreview] = useState(() =>\n isPreviewableImage(file),\n );\n const previewSize = size === \"lg\" ? LARGE_PREVIEW_SIZE : PREVIEW_SIZE;\n\n useEffect(() => {\n if (!isPreviewableImage(file)) {\n setCanPreview(false);\n return;\n }\n\n let cancelled = false;\n setCanPreview(true);\n\n async function drawPreview() {\n try {\n const bitmap = await createImageBitmap(file);\n if (cancelled) {\n bitmap.close();\n return;\n }\n\n const canvas = canvasRef.current;\n const context = canvas?.getContext(\"2d\");\n if (!canvas || !context) {\n bitmap.close();\n setCanPreview(false);\n return;\n }\n\n canvas.width = previewSize;\n canvas.height = previewSize;\n\n const scale = Math.max(\n previewSize / bitmap.width,\n previewSize / bitmap.height,\n );\n const width = bitmap.width * scale;\n const height = bitmap.height * scale;\n const x = (previewSize - width) / 2;\n const y = (previewSize - height) / 2;\n\n context.clearRect(0, 0, previewSize, previewSize);\n context.drawImage(bitmap, x, y, width, height);\n bitmap.close();\n } catch {\n if (!cancelled) setCanPreview(false);\n }\n }\n\n void drawPreview();\n\n return () => {\n cancelled = true;\n };\n }, [file, previewSize]);\n\n if (!canPreview) {\n return <PreviewPlaceholder icon={placeholderIcon} size={size} />;\n }\n\n return (\n <canvas\n ref={canvasRef}\n role=\"img\"\n aria-label={file.name}\n className={cn(\"polli:rounded-xl\", previewSizeClasses[size])}\n width={previewSize}\n height={previewSize}\n />\n );\n}\n\nexport type FileUploadProps = {\n value: File[];\n onChange: (files: File[]) => void;\n onReject?: (rejected: RejectedFile[]) => void;\n maxFiles?: number;\n maxSizeBytes?: number;\n accept?: string;\n icon?: ReactNode;\n label?: ReactNode;\n previewIcon?: ReactNode;\n /** Compact drop zone, or preview-only strip for a parent drop target. */\n variant?: \"default\" | \"compact\" | \"inline\";\n /** Fully locks the field: no add, no remove, drops ignored. */\n disabled?: boolean;\n className?: string;\n};\n\nexport function FileUpload({\n value,\n onChange,\n onReject,\n maxFiles = 4,\n maxSizeBytes = 10 * 1024 * 1024,\n accept = \"image/*\",\n icon = <ImageIcon className=\"polli:h-6 polli:w-6\" />,\n label = (\n <>\n Drag images here or <span className=\"polli:underline\">browse</span>\n </>\n ),\n previewIcon = <ImageIcon className=\"polli:h-5 polli:w-5\" />,\n variant = \"default\",\n disabled = false,\n className,\n}: FileUploadProps) {\n // A near-miss file drop should not navigate the browser away from the app.\n // Mounted upload controls share one document-level guard.\n useEffect(() => acquireDocumentFileDropGuard(document), []);\n\n // Only `disabled` blocks drop handling. At the file limit the browse/add\n // controls disappear, but over-limit drops still flow through partitionFiles\n // and are reported as `{ reason: \"count\" }` via onReject.\n function addFiles(incoming: File[]) {\n if (disabled || incoming.length === 0) return;\n const { accepted, rejected } = partitionFiles(incoming, value, {\n maxFiles,\n maxSizeBytes,\n accept,\n });\n if (accepted.length > 0) onChange([...value, ...accepted]);\n if (rejected.length > 0) onReject?.(rejected);\n }\n\n const hasFiles = value.length > 0;\n const canAdd = !disabled && value.length < maxFiles;\n const isSingleFile = maxFiles === 1;\n const compact = variant !== \"default\";\n const inline = variant === \"inline\";\n const previewSize = compact ? \"sm\" : isSingleFile ? \"lg\" : \"sm\";\n const inputId = useId();\n const addInputId = `${inputId}-add`;\n\n function handleInputChange(event: ChangeEvent<HTMLInputElement>) {\n addFiles(Array.from(event.target.files ?? []));\n event.target.value = \"\";\n }\n\n if (inline && !hasFiles) return null;\n\n return (\n <div className={cn(\"polli:flex polli:flex-col polli:gap-2\", className)}>\n <fieldset\n disabled={disabled}\n className={cn(\n \"polli:m-0\",\n !inline &&\n \"polli:rounded-xl polli:border polli:border-dashed polli:border-theme-border polli:bg-theme-bg-pale\",\n \"polli:text-sm\",\n inline\n ? \"polli:border-0 polli:bg-transparent polli:p-0 polli:text-left\"\n : compact\n ? \"polli:min-h-16 polli:px-3 polli:py-2 polli:text-left\"\n : \"polli:px-4 polli:py-4 polli:text-center\",\n \"polli:text-theme-text-soft polli:transition-colors\",\n disabled\n ? \"polli:opacity-50\"\n : \"polli:hover:bg-theme-bg-hover\",\n )}\n // Always prevent the browser's default file-drop navigation,\n // even when disabled; only the file handling is gated.\n onDragOver={(e) => e.preventDefault()}\n onDrop={(e) => {\n e.preventDefault();\n if (disabled) return;\n addFiles(Array.from(e.dataTransfer.files));\n }}\n >\n {!hasFiles ? (\n <label\n htmlFor={inputId}\n className={cn(\n \"polli-control polli:flex polli:items-center polli:gap-2 polli:rounded-lg\",\n compact\n ? \"polli:min-h-12 polli:flex-row polli:justify-start\"\n : \"polli:min-h-32 polli:flex-col polli:justify-center\",\n canAdd\n ? \"polli:cursor-pointer\"\n : \"polli:cursor-not-allowed\",\n )}\n >\n {icon}\n <span>{label}</span>\n <input\n id={inputId}\n type=\"file\"\n accept={accept}\n multiple={maxFiles > 1}\n disabled={disabled || !canAdd}\n className=\"polli:sr-only\"\n onChange={handleInputChange}\n />\n </label>\n ) : (\n <div\n className={cn(\n \"polli:flex polli:gap-3\",\n compact ? \"polli:items-center\" : \"polli:flex-col\",\n )}\n >\n {compact && !inline && (\n <span className=\"polli:text-xs polli:font-medium polli:text-theme-text-muted\">\n {attachmentSummary(value)}\n </span>\n )}\n <ul\n className={cn(\n \"polli:m-0 polli:gap-3 polli:p-0\",\n compact\n ? cn(\n \"polli:flex polli:min-w-0 polli:flex-1 polli:flex-wrap\",\n inline\n ? \"polli:justify-start\"\n : \"polli:ml-auto polli:justify-end\",\n )\n : \"polli:grid polli:grid-cols-[repeat(auto-fill,minmax(5rem,1fr))]\",\n isSingleFile &&\n !compact &&\n \"polli:flex polli:justify-center\",\n )}\n >\n {value.map((file, index) => (\n <li\n key={`${file.name}-${index}`}\n className={cn(\n \"polli:relative polli:flex polli:min-w-0 polli:list-none polli:flex-col polli:items-center polli:gap-1\",\n isSingleFile && \"polli:max-w-full\",\n )}\n >\n <FilePreview\n file={file}\n placeholderIcon={previewIcon}\n size={previewSize}\n />\n {!compact && (\n <>\n <span\n className={cn(\n \"polli:max-w-full polli:truncate polli:text-xs polli:font-medium polli:text-theme-text-base\",\n isSingleFile\n ? \"polli:w-36\"\n : \"polli:w-16\",\n )}\n >\n {file.name}\n </span>\n <span className=\"polli:text-micro polli:text-theme-text-muted\">\n {formatFileSize(file.size)}\n </span>\n </>\n )}\n {!disabled && (\n <div className=\"polli:absolute polli:-top-2 polli:right-1\">\n <IconButton\n intent=\"danger\"\n title={`Remove ${file.name}`}\n onClick={() =>\n onChange(\n value.filter(\n (_, i) =>\n i !== index,\n ),\n )\n }\n >\n <XIcon className=\"polli:h-3 polli:w-3\" />\n </IconButton>\n </div>\n )}\n </li>\n ))}\n\n {!inline && !isSingleFile && canAdd && (\n <li className=\"polli:flex polli:list-none\">\n <label\n htmlFor={addInputId}\n className={cn(\n \"polli-control polli:flex polli:cursor-pointer polli:flex-col polli:items-center polli:justify-center polli:gap-1 polli:rounded-lg polli:bg-theme-bg-active polli:text-theme-text-soft polli:transition-colors polli:hover:bg-theme-bg-hover polli:hover:text-theme-text-strong\",\n compact\n ? \"polli:h-16 polli:w-16 polli:px-2 polli:py-1\"\n : \"polli:min-h-20 polli:w-full polli:px-3 polli:py-2\",\n )}\n >\n <PlusIcon className=\"polli:h-5 polli:w-5\" />\n {!compact && (\n <span className=\"polli:text-xs polli:font-medium\">\n Add\n </span>\n )}\n <input\n id={addInputId}\n type=\"file\"\n aria-label=\"Add files\"\n accept={accept}\n multiple\n disabled={disabled || !canAdd}\n className=\"polli:sr-only\"\n onChange={handleInputChange}\n />\n </label>\n </li>\n )}\n </ul>\n\n {Number.isFinite(maxFiles) &&\n maxFiles > 1 &&\n !compact && (\n <span className=\"polli:text-xs polli:text-theme-text-muted\">\n {value.length} / {maxFiles} files\n </span>\n )}\n </div>\n )}\n </fieldset>\n </div>\n );\n}\n","type GuardState = {\n consumers: number;\n preventFileNavigation: EventListener;\n};\n\nconst guards = new WeakMap<Document, GuardState>();\n\n/**\n * Prevents the browser from navigating to a dropped file while at least one\n * upload control is mounted. One listener pair is shared per document.\n */\nexport function acquireDocumentFileDropGuard(document: Document): () => void {\n let guard = guards.get(document);\n\n if (!guard) {\n const preventFileNavigation: EventListener = (event) => {\n const types = (event as DragEvent).dataTransfer?.types;\n if (types?.includes(\"Files\")) event.preventDefault();\n };\n\n guard = { consumers: 0, preventFileNavigation };\n guards.set(document, guard);\n document.addEventListener(\"dragover\", preventFileNavigation);\n document.addEventListener(\"drop\", preventFileNavigation);\n }\n\n guard.consumers += 1;\n let released = false;\n\n return () => {\n if (released) return;\n released = true;\n guard.consumers -= 1;\n\n if (guard.consumers > 0) return;\n document.removeEventListener(\"dragover\", guard.preventFileNavigation);\n document.removeEventListener(\"drop\", guard.preventFileNavigation);\n guards.delete(document);\n };\n}\n","export type RejectReason = \"type\" | \"size\" | \"count\";\n\nexport type RejectedFile = { file: File; reason: RejectReason };\n\nexport type PartitionOptions = {\n maxFiles: number;\n maxSizeBytes: number;\n /** Comma-separated list: mime (\"image/png\"), wildcard (\"image/*\"), or extension (\".webp\"). */\n accept?: string;\n};\n\nexport type PartitionResult = {\n accepted: File[];\n rejected: RejectedFile[];\n};\n\nfunction matchesAccept(file: File, accept: string | undefined): boolean {\n if (!accept) return true;\n const tokens = accept\n .split(\",\")\n .map((t) => t.trim())\n .filter(Boolean);\n if (tokens.length === 0) return true;\n return tokens.some((token) => {\n if (token.startsWith(\".\")) {\n return file.name.toLowerCase().endsWith(token.toLowerCase());\n }\n if (token.endsWith(\"/*\")) {\n const prefix = token.slice(0, token.length - 1); // \"image/\"\n return file.type.startsWith(prefix);\n }\n return file.type === token;\n });\n}\n\n/**\n * Partition `incoming` files against the already-selected `current` files.\n * Deterministic: order preserved; every rejection carries a reason.\n * The count limit counts `current.length` against `maxFiles`.\n */\nexport function partitionFiles(\n incoming: File[],\n current: File[],\n { maxFiles, maxSizeBytes, accept }: PartitionOptions,\n): PartitionResult {\n const accepted: File[] = [];\n const rejected: RejectedFile[] = [];\n let slots = Math.max(0, maxFiles - current.length);\n\n for (const file of incoming) {\n if (!matchesAccept(file, accept)) {\n rejected.push({ file, reason: \"type\" });\n } else if (file.size > maxSizeBytes) {\n rejected.push({ file, reason: \"size\" });\n } else if (slots <= 0) {\n rejected.push({ file, reason: \"count\" });\n } else {\n accepted.push(file);\n slots -= 1;\n }\n }\n\n return { accepted, rejected };\n}\n","import { type ButtonHTMLAttributes, forwardRef, type ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { Tooltip } from \"./Tooltip.tsx\";\n\n/** `danger` (delete, red) and `info` (edit/links, blue). */\nexport type IconButtonIntent = \"danger\" | \"info\";\nexport type IconButtonVariant = \"tile\" | \"ghost\";\n\nconst intentClasses: Record<IconButtonIntent, string> = {\n danger: \"polli:bg-intent-danger-bg-light polli:text-intent-danger-text\",\n info: \"polli:bg-intent-info-bg-light polli:text-intent-info-text\",\n};\n\nconst intentHoverClasses: Record<IconButtonIntent, string> = {\n danger: \"polli:hover:bg-intent-danger-bg-hover\",\n info: \"polli:hover:bg-intent-info-bg-hover\",\n};\n\nconst variantClasses: Record<IconButtonVariant, string> = {\n tile: \"polli:bg-theme-bg-active polli:text-theme-text-soft\",\n ghost: \"polli:bg-transparent polli:text-theme-text-muted\",\n};\n\nconst variantHoverClasses: Record<IconButtonVariant, string> = {\n tile: \"polli:hover:bg-theme-bg-hover polli:hover:text-theme-text-hover\",\n ghost: \"polli:hover:bg-transparent polli:hover:text-theme-text-soft\",\n};\n\nexport type IconButtonProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"children\" | \"className\" | \"title\"\n> & {\n intent?: IconButtonIntent;\n variant?: IconButtonVariant;\n pressed?: boolean;\n title?: string;\n tooltip?: ReactNode;\n tooltipAlign?: \"start\" | \"center\";\n tooltipClampToViewport?: boolean;\n children: ReactNode;\n className?: string;\n size?: \"sm\" | \"md\";\n};\n\nconst sizeClasses = {\n sm: \"polli:h-6 polli:w-6 polli:rounded\",\n md: \"polli:h-9 polli:w-9 polli:rounded-full\",\n} as const;\n\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n (\n {\n intent,\n variant = \"tile\",\n pressed,\n title,\n tooltip,\n tooltipAlign,\n tooltipClampToViewport,\n children,\n className,\n size = \"sm\",\n disabled = false,\n ...buttonProps\n },\n ref,\n ) => {\n const button = (\n <button\n {...buttonProps}\n ref={ref}\n type=\"button\"\n disabled={disabled}\n aria-label={buttonProps[\"aria-label\"] ?? title}\n aria-pressed={pressed}\n data-intent={intent}\n className={cn(\n \"polli-control polli:inline-flex polli:items-center polli:justify-center polli:transition-colors\",\n disabled\n ? \"polli:cursor-not-allowed polli:opacity-50\"\n : \"polli:cursor-pointer\",\n sizeClasses[size],\n intent ? intentClasses[intent] : variantClasses[variant],\n !disabled &&\n (intent\n ? intentHoverClasses[intent]\n : variantHoverClasses[variant]),\n className,\n )}\n >\n {children}\n </button>\n );\n\n const tooltipContent = tooltip ?? title;\n if (!tooltipContent) return button;\n\n return (\n <Tooltip\n triggerAs=\"span\"\n content={tooltipContent}\n align={tooltipAlign}\n clampToViewport={tooltipClampToViewport}\n tapEnabled={false}\n className={\n disabled\n ? \"polli:cursor-not-allowed\"\n : \"polli:cursor-pointer\"\n }\n >\n {button}\n </Tooltip>\n );\n },\n);\n\nIconButton.displayName = \"IconButton\";\n","import type { FC, ReactNode } from \"react\";\nimport { Tooltip } from \"../primitives/Tooltip.tsx\";\n\ntype InfoTipProps = {\n text?: ReactNode;\n content?: ReactNode;\n label?: string;\n};\n\n/**\n * Small \"i\" badge that opens a tooltip on hover, click, or focus.\n *\n * Quiet neutral badge and shared, viewport-clamped tooltip popup.\n * The help cursor indicates that more information is available.\n */\nexport const InfoTip: FC<InfoTipProps> = ({\n text,\n content,\n label = \"More info\",\n}) => (\n <Tooltip content={content ?? text} ariaLabel={label} className=\"polli:ml-1\">\n <span className=\"polli:inline-flex polli:h-4 polli:w-4 polli:items-center polli:justify-center polli:rounded-full polli:bg-surface-menu polli:font-bold polli:text-[10px] polli:leading-none polli:text-theme-text-muted polli:transition-colors polli:hover:text-theme-text-strong\">\n i\n </span>\n </Tooltip>\n);\n","import type { ComponentPropsWithoutRef, FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\n/** Semantic chip labels for status and metadata badges. */\ntype ChipIntent =\n | \"news\"\n | \"new\"\n | \"free\"\n | \"alpha\"\n | \"neutral\"\n | \"success\"\n | \"warning\"\n | \"info\"\n | \"danger\";\n\nconst chipSizes = {\n icon: \"polli:h-5 polli:w-5 polli:p-0 polli:text-xs\",\n sm: \"polli:h-5 polli:px-2 polli:text-xs\",\n md: \"polli:h-6 polli:px-2.5 polli:text-sm\",\n lg: \"polli:h-7 polli:px-3 polli:text-sm\",\n} as const;\n\nconst intentClasses: Record<ChipIntent, string> = {\n news: \"polli:bg-intent-news-bg-light polli:text-intent-news-text\",\n new: \"polli:bg-intent-new-bg-light polli:text-intent-new-text\",\n free: \"polli:bg-intent-free-bg-light polli:text-intent-free-text\",\n alpha: \"polli:bg-intent-alpha-bg-light polli:text-intent-alpha-text\",\n neutral: \"polli:bg-ink-100/80 polli:text-ink-900\",\n success:\n \"polli:bg-intent-success-bg-bright/15 polli:text-intent-success-text\",\n warning: \"polli:bg-intent-warning-bg-light polli:text-intent-warning-text\",\n info: \"polli:bg-intent-info-bg-light polli:text-intent-info-text\",\n danger: \"polli:bg-intent-danger-bg-light polli:text-intent-danger-text\",\n};\n\nexport type ChipProps = ComponentPropsWithoutRef<\"span\"> & {\n /** Semantic intent. */\n intent?: ChipIntent;\n size?: keyof typeof chipSizes;\n};\n\n// Static, rectangular colored container. Round shapes are reserved for buttons.\n// Reads `bg-theme-bg-active` / `text-theme-text-strong` from the cascade unless\n// `intent` is set (semantic, theme-independent).\nexport const Chip: FC<ChipProps> = ({\n intent,\n size = \"md\",\n className,\n children,\n ...rest\n}) => {\n const intentClass = intent\n ? intentClasses[intent]\n : \"polli:bg-theme-bg-active polli:text-theme-text-strong\";\n return (\n <span\n {...rest}\n className={cn(\n \"polli:inline-flex polli:shrink-0 polli:items-center polli:justify-center polli:gap-1 polli:rounded-lg polli:font-medium polli:leading-none\",\n chipSizes[size],\n intentClass,\n className,\n )}\n >\n {children}\n </span>\n );\n};\n","import { cn } from \"../lib/cn.ts\";\nimport { Chip } from \"../primitives/Chip.tsx\";\nimport { CheckIcon, ClipboardIcon } from \"../primitives/icons/index.tsx\";\nimport { CopyButton } from \"./CopyButton.tsx\";\n\nexport type KeyChipProps = {\n /** The visible start of the key, e.g. \"sk_0ysBCkH\". */\n prefix: string;\n /** The full key, when known: the chip then copies it on click. */\n value?: string | null;\n /** Accessible name for the copy action. */\n label?: string;\n className?: string;\n};\n\nconst chipClassName =\n \"polli:gap-1.5 polli:font-mono polli:font-normal polli:[&>svg]:size-3.5 polli:[&>svg]:shrink-0\";\n\n/**\n * One badge for every key: prefix and ellipsis, nothing else. A secret key\n * only ever shows its prefix; a key whose value is known copies on click and\n * carries the clipboard icon.\n */\nexport function KeyChip({\n prefix,\n value,\n label = \"Copy key\",\n className,\n}: KeyChipProps) {\n const text = `${prefix}…`;\n if (!value) {\n return (\n <Chip intent=\"neutral\" className={cn(chipClassName, className)}>\n {text}\n </Chip>\n );\n }\n return (\n <CopyButton\n value={value}\n tooltip={null}\n aria-label={label}\n className=\"polli:inline-flex polli:cursor-pointer polli:rounded-lg\"\n >\n {(copied) => (\n <Chip\n intent={copied ? \"success\" : \"neutral\"}\n className={cn(\n chipClassName,\n \"polli:transition-colors\",\n className,\n )}\n >\n {copied ? (\n <CheckIcon aria-hidden=\"true\" />\n ) : (\n <ClipboardIcon aria-hidden=\"true\" />\n )}\n {copied ? \"Copied\" : text}\n </Chip>\n )}\n </CopyButton>\n );\n}\n","import type { PropsWithChildren } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { isExternalHref } from \"../lib/link.ts\";\nimport { ExternalLinkIcon } from \"../primitives/icons/index.tsx\";\nimport { Surface } from \"../primitives/Surface.tsx\";\n\ntype BaseLinkCardProps = {\n external?: boolean;\n showIcon?: boolean;\n className?: string;\n surfaceClassName?: string;\n};\n\nexport type LinkCardProps<T extends React.ElementType = \"a\"> =\n PropsWithChildren<BaseLinkCardProps> & {\n as?: T;\n } & Omit<React.ComponentPropsWithoutRef<T>, keyof BaseLinkCardProps | \"as\">;\n\nexport function LinkCard<T extends React.ElementType = \"a\">({\n as,\n external,\n showIcon = true,\n className,\n surfaceClassName,\n children,\n ...linkProps\n}: LinkCardProps<T>) {\n const Component: React.ElementType = as || \"a\";\n const isExternal =\n external ?? isExternalHref((linkProps as { href?: unknown }).href);\n\n return (\n <Surface\n as={Component}\n variant=\"card\"\n target={isExternal ? \"_blank\" : undefined}\n rel={isExternal ? \"noopener noreferrer\" : undefined}\n {...linkProps}\n className={cn(\n \"polli:relative polli:flex polli:h-full polli:flex-col polli:gap-2 polli:bg-surface-opaque/80 polli:p-5 polli:outline-none\",\n showIcon && isExternal && \"polli:pr-10\",\n \"polli:transition-colors polli:hover:bg-surface-opaque/95\",\n \"polli:focus-visible:ring-2 polli:focus-visible:ring-theme-border\",\n className,\n surfaceClassName,\n )}\n >\n {showIcon && isExternal && (\n <ExternalLinkIcon\n aria-hidden=\"true\"\n className=\"polli:absolute polli:top-4 polli:right-4 polli:h-3.5 polli:w-3.5 polli:text-theme-text-soft\"\n />\n )}\n {children}\n </Surface>\n );\n}\n","import type { ComponentPropsWithoutRef, FC, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { Text } from \"../primitives/Typography.tsx\";\n\nexport type MediaPlaceholderProps = ComponentPropsWithoutRef<\"div\"> & {\n icon?: ReactNode;\n label?: ReactNode;\n detail?: ReactNode;\n};\n\nexport const MediaPlaceholder: FC<MediaPlaceholderProps> = ({\n icon,\n label,\n detail,\n children,\n className,\n ...rest\n}) => (\n <div\n {...rest}\n className={cn(\n \"polli:flex polli:aspect-video polli:min-h-40 polli:flex-col polli:items-center polli:justify-center polli:gap-3 polli:rounded-lg polli:border polli:border-dashed polli:border-theme-border polli:bg-theme-bg-pale polli:p-6 polli:text-center\",\n className,\n )}\n >\n {icon && (\n <div className=\"polli:flex polli:h-10 polli:w-10 polli:items-center polli:justify-center polli:rounded-full polli:bg-theme-bg-active polli:text-theme-text-base\">\n {icon}\n </div>\n )}\n {(label || detail) && (\n <div className=\"polli:max-w-sm\">\n {label && (\n <Text as=\"p\" size=\"sm\" tone=\"strong\" weight=\"semibold\">\n {label}\n </Text>\n )}\n {detail && (\n <Text as=\"p\" size=\"sm\" tone=\"soft\" className=\"polli:mt-1\">\n {detail}\n </Text>\n )}\n </div>\n )}\n {children}\n </div>\n);\n","import type { FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { ChevronIcon } from \"../primitives/ChevronIcon.tsx\";\nimport { Dropdown } from \"../primitives/Dropdown.tsx\";\nimport { ScrollArea } from \"../primitives/ScrollArea.tsx\";\nimport { Tooltip } from \"../primitives/Tooltip.tsx\";\n\nexport type MultiSelectOption = {\n value: string;\n label: string;\n};\n\nexport type MultiSelectProps = {\n options: MultiSelectOption[];\n selected: string[];\n onChange: (selected: string[]) => void;\n placeholder: string;\n disabled?: boolean;\n disabledText?: string;\n disabledTooltip?: string;\n align?: \"start\" | \"end\";\n label?: string;\n /** Accessible name when the visible label is supplied by the caller. */\n ariaLabel?: string;\n /** Fill the available width, allowing the trigger label to truncate. */\n fullWidth?: boolean;\n};\n\nconst TRIGGER_BASE =\n \"polli-control polli:inline-flex polli:min-h-8 polli:min-w-[140px] polli:items-center polli:gap-2 polli:rounded-full polli:px-3 polli:py-1.5 polli:text-xs polli:font-medium polli:transition-all polli:duration-200\";\n\nconst ROW_BASE =\n \"polli-control polli:flex polli:w-full polli:items-center polli:gap-3 polli:px-3 polli:py-2 polli:text-left polli:text-xs polli:transition-colors\";\n\nconst CHECK_BASE =\n \"polli:flex polli:h-4 polli:w-4 polli:flex-shrink-0 polli:items-center polli:justify-center polli:rounded polli:border polli:border-theme-border polli:text-xs\";\n\nexport const MultiSelect: FC<MultiSelectProps> = ({\n options,\n selected,\n onChange,\n placeholder,\n disabled,\n disabledText,\n disabledTooltip,\n align = \"start\",\n label,\n ariaLabel,\n fullWidth = false,\n}) => {\n const isAllSelected = selected.length === 0;\n\n const toggleItem = (itemId: string) => {\n if (selected.includes(itemId)) {\n onChange(selected.filter((m) => m !== itemId));\n } else {\n onChange([...selected, itemId]);\n }\n };\n\n const selectAll = () => onChange([]);\n\n const displayText = disabled\n ? disabledText\n : isAllSelected\n ? placeholder\n : selected.length === 1\n ? (options.find((option) => option.value === selected[0])?.label ??\n \"1 selected\")\n : `${selected.length} selected`;\n\n const labelNode = label ? (\n <span className=\"polli:text-xs polli:font-medium polli:text-theme-text-soft\">\n {label}\n </span>\n ) : null;\n\n if (disabled) {\n return (\n <div\n className={cn(\n \"polli:flex polli:items-center polli:gap-2\",\n fullWidth && \"polli:w-full polli:min-w-0\",\n )}\n >\n {labelNode}\n <Tooltip\n triggerAs=\"span\"\n content={disabledTooltip || \"No items available\"}\n align=\"center\"\n className={cn(\n \"polli:inline-flex polli:cursor-not-allowed\",\n fullWidth && \"polli:min-w-0 polli:flex-1\",\n )}\n >\n <button\n type=\"button\"\n disabled\n aria-label={ariaLabel || label || placeholder}\n className={cn(\n TRIGGER_BASE,\n fullWidth && \"polli:w-full polli:min-w-0\",\n \"polli:cursor-not-allowed polli:bg-theme-bg-active polli:opacity-50\",\n )}\n >\n <span className=\"polli:flex-1 polli:truncate polli:text-left polli:text-theme-text-strong\">\n {displayText}\n </span>\n <ChevronIcon\n expanded={false}\n className=\"polli:h-3 polli:w-3 polli:text-theme-text-soft\"\n />\n </button>\n </Tooltip>\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n \"polli:flex polli:items-center polli:gap-2\",\n fullWidth && \"polli:w-full polli:min-w-0\",\n )}\n >\n {labelNode}\n <Dropdown\n align={align}\n className=\"polli:w-[min(20rem,calc(100vw-2rem))]\"\n trigger={(open) => (\n <button\n type=\"button\"\n aria-label={ariaLabel || label || placeholder}\n className={cn(\n TRIGGER_BASE,\n fullWidth && \"polli:w-full polli:min-w-0\",\n open\n ? \"polli:bg-theme-bg-hover\"\n : \"polli:bg-theme-bg-active polli:hover:bg-theme-bg-hover\",\n )}\n >\n <span\n className={cn(\n \"polli:flex-1 polli:truncate polli:text-left\",\n open\n ? \"polli:text-theme-text-strong\"\n : \"polli:text-theme-text-base\",\n )}\n >\n {displayText}\n </span>\n <ChevronIcon\n expanded={open}\n className={cn(\n \"polli:h-3 polli:w-3 polli:transition-transform\",\n open\n ? \"polli:text-theme-text-strong\"\n : \"polli:text-theme-text-soft\",\n )}\n />\n </button>\n )}\n >\n <ScrollArea className=\"polli:max-h-64\">\n <button\n type=\"button\"\n onClick={selectAll}\n aria-pressed={isAllSelected}\n className={cn(\n ROW_BASE,\n isAllSelected\n ? \"polli:bg-theme-bg-active polli:font-medium polli:text-theme-text-strong\"\n : \"polli:text-theme-text-base polli:hover:bg-theme-bg-subtle\",\n )}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n CHECK_BASE,\n isAllSelected &&\n \"polli:bg-theme-bg-active polli:text-theme-text-strong\",\n )}\n >\n {isAllSelected && \"✓\"}\n </span>\n {placeholder}\n </button>\n {options.map((opt) => {\n const isChecked = selected.includes(opt.value);\n return (\n <button\n type=\"button\"\n key={opt.value}\n onClick={() => toggleItem(opt.value)}\n aria-pressed={isChecked}\n className={cn(\n ROW_BASE,\n isChecked\n ? \"polli:bg-theme-bg-active polli:text-theme-text-strong\"\n : \"polli:text-theme-text-base polli:hover:bg-theme-bg-subtle\",\n )}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n CHECK_BASE,\n isChecked &&\n \"polli:bg-theme-bg-active polli:text-theme-text-strong\",\n )}\n >\n {isChecked && \"✓\"}\n </span>\n <span className=\"polli:min-w-0 polli:[overflow-wrap:anywhere]\">\n {opt.label}\n </span>\n </button>\n );\n })}\n </ScrollArea>\n </Dropdown>\n </div>\n );\n};\n","import type { ComponentType, PropsWithChildren } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\ntype BaseNavItemProps = {\n /** Current/selected item — fills with the accent + sets `aria-current`. */\n active?: boolean;\n /** Optional leading icon. */\n icon?: ComponentType<{ className?: string }>;\n className?: string;\n};\n\n// Neutral/quiet when inactive; filled with the accent when active. The leading\n// icon is the section marker.\nconst base =\n \"polli-control polli:flex polli:items-center polli:gap-2 polli:rounded-full polli:px-3 polli:py-2 polli:text-left polli:text-sm polli:font-medium polli:whitespace-nowrap polli:transition-colors\";\nconst activeClasses = \"polli:bg-theme-bg-active polli:text-theme-text-strong\";\nconst inactiveClasses =\n \"polli:text-ink-800 polli:hover:bg-surface-opaque/60 polli:hover:text-ink-950\";\n\nexport type NavItemProps<T extends React.ElementType = \"button\"> =\n PropsWithChildren<BaseNavItemProps> & {\n as?: T;\n } & Omit<React.ComponentPropsWithoutRef<T>, keyof BaseNavItemProps | \"as\">;\n\n/**\n * Minimal nav item — a pill that's neutral when inactive and filled with the\n * accent when active, with an optional leading icon. Polymorphic: `<NavItem>`\n * (button) for in-page nav, `<NavItem as={Link} active={…}>` for routed nav.\n * Shared by the enter dashboard rail and apps so both use one design.\n */\nexport function NavItem<T extends React.ElementType = \"button\">({\n as,\n active = false,\n icon: Icon,\n className,\n children,\n ...rest\n}: NavItemProps<T>) {\n const Component: React.ElementType = as || \"button\";\n return (\n <Component\n aria-current={active ? \"page\" : undefined}\n className={cn(\n base,\n active ? activeClasses : inactiveClasses,\n className,\n )}\n {...rest}\n >\n {Icon ? (\n <Icon className=\"polli:h-4 polli:w-4 polli:shrink-0\" />\n ) : null}\n {children}\n </Component>\n );\n}\n","import type { FC, ReactNode } from \"react\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport {\n addUtcDays,\n isPeriodSelectable,\n type PeriodGranularity,\n type PeriodSelection,\n periodFromDate,\n periodToWindow,\n startOfUtcDay,\n} from \"../lib/period.ts\";\nimport { ChevronIcon } from \"../primitives/ChevronIcon.tsx\";\nimport { Dropdown } from \"../primitives/Dropdown.tsx\";\nimport { TabButton } from \"../primitives/TabButton.tsx\";\n\nexport type PeriodPickerProps = {\n value: PeriodSelection;\n onChange: (value: PeriodSelection) => void;\n minDate?: Date;\n maxDate?: Date;\n /** Custom trigger for a calendar with a fixed granularity. */\n trigger?: (open: boolean) => ReactNode;\n /** Optional controls above the calendar grid. */\n header?: ReactNode;\n};\n\nconst WEEKDAY_LABELS = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\nconst MONTH_LABELS = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n];\n\nconst NAV_BUTTON =\n \"polli-control polli:rounded-full polli:px-2 polli:py-1 polli:text-xs polli:font-semibold polli:text-theme-text-base polli:transition-colors polli:hover:bg-theme-bg-subtle\";\n\nfunction addUtcMonths(date: Date, months: number): Date {\n return new Date(\n Date.UTC(date.getUTCFullYear(), date.getUTCMonth() + months, 1),\n );\n}\n\nfunction monthGridDates(viewMonth: Date): Date[] {\n const firstDay = new Date(\n Date.UTC(viewMonth.getUTCFullYear(), viewMonth.getUTCMonth(), 1),\n );\n const firstWeekday = firstDay.getUTCDay() || 7;\n const cursor = addUtcDays(firstDay, 1 - firstWeekday);\n return Array.from({ length: 42 }, (_, index) => addUtcDays(cursor, index));\n}\n\nfunction sameUtcDay(left: Date, right: Date): boolean {\n return left.getTime() === right.getTime();\n}\n\nfunction periodDate(value: PeriodSelection): Date {\n return periodToWindow(value).start;\n}\n\nfunction selectionKey(value: PeriodSelection): string {\n return `${value.granularity}:${value.period}`;\n}\n\nfunction formatMonthYear(date: Date, month: \"short\" | \"long\" = \"short\") {\n return date.toLocaleDateString(\"en-US\", {\n timeZone: \"UTC\",\n month,\n year: \"numeric\",\n });\n}\n\nfunction formatFullDate(date: Date) {\n return date.toLocaleDateString(\"en-US\", {\n timeZone: \"UTC\",\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n });\n}\n\nfunction formatWeekSummary(start: Date, end: Date) {\n const weekEnd = addUtcDays(end, -1);\n const sameMonth =\n start.getUTCFullYear() === weekEnd.getUTCFullYear() &&\n start.getUTCMonth() === weekEnd.getUTCMonth();\n\n if (sameMonth) {\n const month = start.toLocaleDateString(\"en-US\", {\n timeZone: \"UTC\",\n month: \"short\",\n });\n return `${month} ${start.getUTCDate()}-${weekEnd.getUTCDate()}, ${weekEnd.getUTCFullYear()}`;\n }\n\n return `${formatFullDate(start)} - ${formatFullDate(weekEnd)}`;\n}\n\nfunction formatPeriodSummary(value: PeriodSelection): string {\n const { start, end } = periodToWindow(value);\n if (value.granularity === \"day\") return formatFullDate(start);\n if (value.granularity === \"week\") return formatWeekSummary(start, end);\n return formatMonthYear(start, \"long\");\n}\n\nfunction viewBounds(\n viewDate: Date,\n granularity: PeriodGranularity,\n): { start: Date; end: Date } {\n if (granularity === \"month\") {\n const start = new Date(Date.UTC(viewDate.getUTCFullYear(), 0, 1));\n return { start, end: addUtcMonths(start, 12) };\n }\n\n const start = new Date(\n Date.UTC(viewDate.getUTCFullYear(), viewDate.getUTCMonth(), 1),\n );\n return { start, end: addUtcMonths(start, 1) };\n}\n\nexport const PeriodPicker: FC<PeriodPickerProps> = ({\n value,\n onChange,\n minDate = new Date(0),\n maxDate,\n trigger,\n header,\n}) => {\n const [open, setOpen] = useState(false);\n const [viewDate, setViewDate] = useState<Date>(() => periodDate(value));\n const [anchorDate, setAnchorDate] = useState<Date>(() => periodDate(value));\n const emittedSelectionRef = useRef<string | null>(null);\n const { granularity, period } = value;\n\n useEffect(() => {\n const currentSelectionKey = selectionKey({ granularity, period });\n if (emittedSelectionRef.current === currentSelectionKey) {\n emittedSelectionRef.current = null;\n return;\n }\n const nextAnchorDate = periodDate({ granularity, period });\n setAnchorDate(nextAnchorDate);\n setViewDate(nextAnchorDate);\n }, [granularity, period]);\n\n const dates = useMemo(() => monthGridDates(viewDate), [viewDate]);\n const selectedWindow = periodToWindow(value);\n const today = startOfUtcDay(maxDate);\n const previousViewDate =\n value.granularity === \"month\"\n ? addUtcMonths(viewDate, -12)\n : addUtcMonths(viewDate, -1);\n const nextViewDate =\n value.granularity === \"month\"\n ? addUtcMonths(viewDate, 12)\n : addUtcMonths(viewDate, 1);\n const previousBounds = viewBounds(previousViewDate, value.granularity);\n const nextBounds = viewBounds(nextViewDate, value.granularity);\n const previousDisabled = previousBounds.end <= minDate;\n const nextDisabled = nextBounds.start > today;\n const summaryLabel = formatPeriodSummary(value);\n\n const commitSelection = (selection: PeriodSelection, anchor: Date) => {\n emittedSelectionRef.current = selectionKey(selection);\n setAnchorDate(anchor);\n setViewDate(anchor);\n onChange(selection);\n };\n\n const setGranularity = (granularity: PeriodGranularity) => {\n commitSelection(periodFromDate(granularity, anchorDate), anchorDate);\n };\n\n const selectDate = (date: Date) => {\n commitSelection(periodFromDate(value.granularity, date), date);\n setOpen(false);\n };\n\n const viewLabel =\n value.granularity === \"month\"\n ? String(viewDate.getUTCFullYear())\n : formatMonthYear(viewDate, \"long\");\n\n return (\n <div\n className={\n trigger\n ? \"polli:contents\"\n : \"polli:flex polli:w-full polli:flex-wrap polli:items-center polli:gap-2\"\n }\n >\n {!trigger && (\n <div className=\"polli:flex polli:flex-wrap polli:gap-1.5\">\n {([\"day\", \"week\", \"month\"] as PeriodGranularity[]).map(\n (granularity) => (\n <TabButton\n key={granularity}\n active={value.granularity === granularity}\n onClick={() => setGranularity(granularity)}\n >\n {granularity[0].toUpperCase() +\n granularity.slice(1)}\n </TabButton>\n ),\n )}\n </div>\n )}\n <Dropdown\n open={open}\n onOpenChange={setOpen}\n className=\"polli:w-[320px] polli:max-w-[calc(100vw-2rem)] polli:rounded-xl polli:border polli:border-divider polli:bg-surface-opaque polli:p-3.5 polli:shadow-container\"\n trigger={\n trigger ??\n ((isOpen) => (\n <button\n type=\"button\"\n aria-label={`Select period, current ${summaryLabel}`}\n className={cn(\n \"polli-control polli:inline-flex polli:w-[320px] polli:max-w-full polli:items-center polli:justify-between polli:gap-2 polli:rounded-full polli:px-4 polli:py-1.5 polli:text-left polli:text-base polli:font-medium polli:leading-normal\",\n \"polli:bg-theme-bg-active polli:text-theme-text-base\",\n \"polli:transition-all polli:duration-200 polli:ease-out polli:hover:bg-theme-bg-hover\",\n isOpen &&\n \"polli:bg-theme-bg-hover polli:text-theme-text-strong\",\n )}\n >\n <span className=\"polli:truncate\">\n {summaryLabel}\n </span>\n <ChevronIcon expanded={isOpen} />\n </button>\n ))\n }\n >\n {header}\n <div className=\"polli:mb-3 polli:flex polli:items-center polli:justify-between\">\n <button\n type=\"button\"\n aria-label=\"Previous\"\n disabled={previousDisabled}\n onClick={() => setViewDate(previousViewDate)}\n className={cn(\n NAV_BUTTON,\n previousDisabled &&\n \"polli:cursor-not-allowed polli:opacity-30 polli:hover:bg-transparent\",\n )}\n >\n {\"<\"}\n </button>\n <div className=\"polli:text-base polli:font-bold polli:text-theme-text-base\">\n {viewLabel}\n </div>\n <button\n type=\"button\"\n aria-label=\"Next\"\n disabled={nextDisabled}\n onClick={() => setViewDate(nextViewDate)}\n className={cn(\n NAV_BUTTON,\n nextDisabled &&\n \"polli:cursor-not-allowed polli:opacity-30 polli:hover:bg-transparent\",\n )}\n >\n {\">\"}\n </button>\n </div>\n\n {value.granularity === \"month\" ? (\n <div className=\"polli:grid polli:grid-cols-3 polli:gap-1.5\">\n {MONTH_LABELS.map((label, monthIndex) => {\n const date = new Date(\n Date.UTC(\n viewDate.getUTCFullYear(),\n monthIndex,\n 1,\n ),\n );\n const selectable = isPeriodSelectable(\n periodFromDate(\"month\", date),\n minDate,\n today,\n );\n const ariaLabel = date.toLocaleDateString(\"en-US\", {\n timeZone: \"UTC\",\n month: \"long\",\n year: \"numeric\",\n });\n const selected =\n date.getUTCFullYear() ===\n selectedWindow.start.getUTCFullYear() &&\n date.getUTCMonth() ===\n selectedWindow.start.getUTCMonth();\n return (\n <button\n type=\"button\"\n key={label}\n aria-label={ariaLabel}\n aria-pressed={selected}\n disabled={!selectable}\n onClick={() => selectDate(date)}\n className={cn(\n \"polli-control polli:rounded-lg polli:px-3 polli:py-2 polli:text-sm polli:font-medium polli:transition-colors polli:duration-150\",\n selected\n ? \"polli:bg-theme-bg-active polli:text-theme-text-strong\"\n : \"polli:text-ink-700 polli:hover:bg-theme-bg-subtle\",\n !selectable &&\n \"polli:cursor-not-allowed polli:text-theme-text-muted polli:hover:bg-transparent\",\n )}\n >\n {label}\n </button>\n );\n })}\n </div>\n ) : (\n <>\n <div className=\"polli:mb-1 polli:grid polli:grid-cols-7 polli:gap-1 polli:text-center polli:text-xs polli:font-bold polli:uppercase polli:text-theme-text-muted\">\n {WEEKDAY_LABELS.map((label) => (\n <div key={label}>{label}</div>\n ))}\n </div>\n <div className=\"polli:grid polli:grid-cols-7 polli:gap-1\">\n {dates.map((date) => {\n const inCurrentMonth =\n date.getUTCMonth() ===\n viewDate.getUTCMonth();\n const selectable = isPeriodSelectable(\n periodFromDate(value.granularity, date),\n minDate,\n today,\n );\n const ariaLabel =\n value.granularity === \"week\"\n ? `Select ${formatPeriodSummary(periodFromDate(\"week\", date))}`\n : `Select ${date.toLocaleDateString(\n \"en-US\",\n {\n timeZone: \"UTC\",\n weekday: \"long\",\n month: \"long\",\n day: \"numeric\",\n year: \"numeric\",\n },\n )}`;\n const selected =\n value.granularity === \"day\"\n ? sameUtcDay(date, selectedWindow.start)\n : date >= selectedWindow.start &&\n date < selectedWindow.end;\n return (\n <button\n type=\"button\"\n key={date.toISOString()}\n aria-label={ariaLabel}\n aria-pressed={selected}\n disabled={!selectable}\n onClick={() => selectDate(date)}\n className={cn(\n \"polli-control polli:aspect-square polli:rounded-lg polli:text-sm polli:font-medium polli:transition-colors polli:duration-150\",\n !inCurrentMonth &&\n \"polli:text-theme-text-muted\",\n sameUtcDay(date, today) &&\n \"polli:ring-1 polli:ring-theme-border\",\n selected\n ? \"polli:bg-theme-bg-active polli:text-theme-text-strong\"\n : \"polli:text-ink-700 polli:hover:bg-theme-bg-subtle\",\n !selectable &&\n \"polli:cursor-not-allowed polli:text-theme-text-muted polli:hover:bg-transparent\",\n )}\n >\n {date.getUTCDate()}\n </button>\n );\n })}\n </div>\n </>\n )}\n </Dropdown>\n </div>\n );\n};\n","const MS_PER_DAY = 86400000;\n\nexport type PeriodGranularity = \"day\" | \"week\" | \"month\";\n\nexport type PeriodSelection = {\n granularity: PeriodGranularity;\n period: string;\n};\n\nexport type PeriodWindow = {\n start: Date;\n end: Date;\n};\n\nexport function startOfUtcDay(date = new Date()): Date {\n return new Date(\n Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()),\n );\n}\n\nexport function addUtcDays(date: Date, days: number): Date {\n const next = new Date(date);\n next.setUTCDate(next.getUTCDate() + days);\n return next;\n}\n\nfunction startOfUtcMonth(date: Date): Date {\n return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), 1));\n}\n\nfunction addUtcMonths(date: Date, months: number): Date {\n return new Date(\n Date.UTC(date.getUTCFullYear(), date.getUTCMonth() + months, 1),\n );\n}\n\nfunction startOfUtcIsoWeek(date: Date): Date {\n const day = date.getUTCDay() || 7;\n return addUtcDays(startOfUtcDay(date), 1 - day);\n}\n\nfunction getUtcIsoWeekPeriod(date: Date): string {\n const day = date.getUTCDay() || 7;\n const thursday = addUtcDays(startOfUtcDay(date), 4 - day);\n const isoYear = thursday.getUTCFullYear();\n const yearStart = new Date(Date.UTC(isoYear, 0, 1));\n const isoWeek = Math.ceil(\n ((thursday.getTime() - yearStart.getTime()) / MS_PER_DAY + 1) / 7,\n );\n return `${isoYear}-W${String(isoWeek).padStart(2, \"0\")}`;\n}\n\nfunction formatUtcDatePeriod(date: Date): string {\n return date.toISOString().slice(0, 10);\n}\n\nfunction formatUtcHourPeriod(date: Date): string {\n return date.toISOString().slice(0, 13).replace(\"T\", \" \");\n}\n\nfunction formatUtcMonthPeriod(date: Date): string {\n return date.toISOString().slice(0, 7);\n}\n\nexport function periodFromDate(\n granularity: PeriodGranularity,\n date = new Date(),\n): PeriodSelection {\n if (granularity === \"day\") {\n return {\n granularity,\n period: formatUtcDatePeriod(startOfUtcDay(date)),\n };\n }\n if (granularity === \"week\") {\n return { granularity, period: getUtcIsoWeekPeriod(date) };\n }\n return { granularity, period: formatUtcMonthPeriod(startOfUtcMonth(date)) };\n}\n\nexport function currentPeriod(): PeriodSelection {\n return periodFromDate(\"day\");\n}\n\nexport function periodToWindow(selection: PeriodSelection): PeriodWindow {\n if (selection.granularity === \"day\") {\n const start = new Date(`${selection.period}T00:00:00.000Z`);\n return { start, end: addUtcDays(start, 1) };\n }\n\n if (selection.granularity === \"week\") {\n const [yearText, weekText] = selection.period.split(\"-W\");\n const isoYear = Number(yearText);\n const isoWeek = Number(weekText);\n const jan4 = new Date(Date.UTC(isoYear, 0, 4));\n const start = addUtcDays(startOfUtcIsoWeek(jan4), (isoWeek - 1) * 7);\n return { start, end: addUtcDays(start, 7) };\n }\n\n const [yearText, monthText] = selection.period.split(\"-\");\n const start = new Date(\n Date.UTC(Number(yearText), Number(monthText) - 1, 1),\n );\n return { start, end: addUtcMonths(start, 1) };\n}\n\nexport function getPeriodBucketKeys(selection: PeriodSelection): string[] {\n const { start, end } = periodToWindow(selection);\n const bucketKeys: string[] = [];\n const cursor = new Date(start);\n if (selection.granularity === \"day\") {\n while (cursor < end) {\n bucketKeys.push(`${formatUtcHourPeriod(cursor)}:00:00`);\n cursor.setUTCHours(cursor.getUTCHours() + 1);\n }\n return bucketKeys;\n }\n\n while (cursor < end) {\n bucketKeys.push(formatUtcDatePeriod(cursor));\n cursor.setUTCDate(cursor.getUTCDate() + 1);\n }\n return bucketKeys;\n}\n\nexport function periodBucketKeyToDate(\n bucketKey: string,\n granularity: PeriodGranularity,\n): Date {\n if (granularity === \"day\") {\n return new Date(`${bucketKey.replace(\" \", \"T\")}.000Z`);\n }\n return new Date(`${bucketKey}T00:00:00.000Z`);\n}\n\nexport function isPeriodSelectable(\n selection: PeriodSelection,\n minDate = new Date(0),\n maxDate = startOfUtcDay(),\n): boolean {\n const { start, end } = periodToWindow(selection);\n return end > minDate && start <= maxDate;\n}\n","import type {\n ComponentPropsWithoutRef,\n ElementType,\n MouseEvent as ReactMouseEvent,\n ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\ntype TabButtonOwnProps = {\n active: boolean;\n /** Omit when rendering as a link (`as`) and navigation carries the change. */\n onClick?: () => void;\n children: ReactNode;\n size?: \"lg\" | \"md\" | \"sm\" | \"xs\";\n variant?: \"soft\" | \"ghost\";\n intent?: \"neutral\";\n ariaLabel?: string;\n disabled?: boolean;\n className?: string;\n};\n\n/**\n * Polymorphic like Button, so a tab that navigates can render a real anchor\n * instead of a click handler — middle-click, right-click and crawlers all\n * depend on that. Defaults to <button>, so existing call sites are unchanged.\n */\nexport type TabButtonProps<T extends ElementType = \"button\"> =\n TabButtonOwnProps & { as?: T } & Omit<\n ComponentPropsWithoutRef<T>,\n keyof TabButtonOwnProps | \"as\"\n >;\n\n/**\n * Shared pill shape (no colors) — used by every TabButton variant.\n *\n * `transition-colors`, not `transition-all`: only background and text colour\n * change between the variants, and `all` additionally animates any layout\n * property that happens to differ — which is the usual cause of a control\n * jittering under the pointer on hover.\n */\nconst tabButtonBaseClass =\n \"polli-control polli:inline-flex polli:items-center polli:justify-center polli:rounded-full polli:font-medium polli:leading-normal polli:transition-colors polli:duration-200\";\n\nconst tabButtonSizeClass = {\n xs: \"polli:px-2.5 polli:py-1 polli:text-xs\",\n lg: \"polli:px-5 polli:py-2 polli:text-lg\",\n md: \"polli:px-4 polli:py-1.5 polli:text-base\",\n sm: \"polli:px-3 polli:py-1.5 polli:text-sm\",\n} as const;\n\nconst variantClasses = {\n // The default tab look: borderless and monochrome. Selected uses `bg-active`\n // — the same light resting fill as the site's normal buttons. Both states\n // deepen to `bg-hover` and use the theme's hover label color. Non-selected\n // uses the quiet `bg-subtle` token until then.\n soft: {\n base: \"\",\n active: \"polli:bg-theme-bg-active polli:text-theme-text-strong polli:hover:bg-theme-bg-hover polli:hover:text-theme-text-hover\",\n inactive:\n \"polli:bg-theme-bg-subtle polli:text-theme-text-base polli:hover:bg-theme-bg-hover polli:hover:text-theme-text-hover\",\n },\n // Transparent until hovered or selected — for multi-select toggles and\n // inline rows where a filled idle pill would read as a hard selection.\n ghost: {\n base: \"polli:border polli:border-transparent\",\n active: \"polli:bg-theme-bg-active polli:text-theme-text-strong polli:hover:bg-theme-bg-hover polli:hover:text-theme-text-hover\",\n inactive:\n \"polli:bg-transparent polli:text-theme-text-base polli:hover:bg-theme-bg-hover polli:hover:text-theme-text-hover\",\n },\n} as const;\n\nexport function TabButton<T extends ElementType = \"button\">({\n as,\n active,\n onClick,\n children,\n size = \"md\",\n variant = \"soft\",\n intent,\n ariaLabel,\n disabled = false,\n className,\n ...rest\n}: TabButtonProps<T>) {\n const Component: ElementType = as || \"button\";\n const isButton = Component === \"button\";\n const colors = variantClasses[intent === \"neutral\" ? \"soft\" : variant];\n const handleClick = disabled\n ? (event: ReactMouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n }\n : onClick;\n\n return (\n <Component\n {...rest}\n {...(isButton ? { type: \"button\", disabled } : {})}\n {...(!isButton && disabled\n ? { \"aria-disabled\": true, tabIndex: -1 }\n : {})}\n {...(Component === \"a\" && disabled ? { href: undefined } : {})}\n onClick={handleClick}\n {...(ariaLabel !== undefined ? { \"aria-label\": ariaLabel } : {})}\n // aria-pressed is for toggles; a link that navigates announces its\n // selected state with aria-current instead.\n {...(isButton\n ? { \"aria-pressed\": active }\n : { \"aria-current\": active ? \"page\" : undefined })}\n className={cn(\n tabButtonBaseClass,\n variantClasses[variant].base,\n active ? colors.active : colors.inactive,\n disabled &&\n \"polli:pointer-events-none polli:cursor-not-allowed polli:opacity-50\",\n tabButtonSizeClass[size],\n className,\n )}\n >\n {children}\n </Component>\n );\n}\n","import type { FC, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { Surface } from \"../primitives/Surface.tsx\";\nimport { Heading, Text } from \"../primitives/Typography.tsx\";\n\nexport type SectionProps = {\n title: string;\n id?: string;\n framed?: boolean;\n intro?: ReactNode;\n action?: ReactNode;\n actionClassName?: string;\n panelClassName?: string;\n titleClassName?: string;\n children: ReactNode;\n className?: string;\n};\n\nexport const Section: FC<SectionProps> = ({\n title,\n id,\n framed = true,\n intro,\n action,\n actionClassName,\n panelClassName,\n titleClassName,\n children,\n className,\n}) => {\n const body = (\n <>\n {intro && (\n <Text as=\"div\" className=\"polli:max-w-2xl\">\n {intro}\n </Text>\n )}\n {children}\n </>\n );\n\n const content = (\n <>\n <header className=\"polli:flex polli:flex-wrap polli:items-center polli:justify-between polli:gap-3\">\n <Heading\n as=\"h2\"\n size=\"section\"\n className={cn(\"polli:text-left\", titleClassName)}\n >\n {title}\n </Heading>\n {action && (\n <div className={cn(\"polli:shrink-0\", actionClassName)}>\n {action}\n </div>\n )}\n </header>\n {body}\n </>\n );\n\n return (\n <section id={id} className={cn(\"polli:scroll-mt-10\", className)}>\n {framed ? (\n <Surface\n variant=\"panel\"\n className={cn(\n \"polli:flex polli:flex-col polli:gap-5\",\n panelClassName,\n )}\n >\n {content}\n </Surface>\n ) : (\n <div className=\"polli:flex polli:flex-col polli:gap-4\">\n {content}\n </div>\n )}\n </section>\n );\n};\n","import type { FC, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { Text } from \"../primitives/Typography.tsx\";\n\n/**\n * - `stat` — large numeric value (default)\n * - `fact` — small wrapping prose value (labeled fact tile)\n */\ntype StatCardVariant = \"stat\" | \"fact\";\n\nconst valueVariantClasses: Record<StatCardVariant, string> = {\n stat: \"polli:min-h-8 polli:text-2xl polli:font-bold polli:leading-tight polli:tabular-nums polli:text-theme-text-base\",\n fact: \"polli:text-sm polli:leading-6 polli:text-theme-text-soft\",\n};\n\nexport type StatCardProps = {\n label: ReactNode;\n value: ReactNode;\n detail?: ReactNode;\n variant?: StatCardVariant;\n className?: string;\n labelClassName?: string;\n valueClassName?: string;\n detailClassName?: string;\n};\n\nexport const StatCard: FC<StatCardProps> = ({\n label,\n value,\n detail,\n variant = \"stat\",\n className,\n labelClassName,\n valueClassName,\n detailClassName,\n}) => (\n <div className={cn(\"polli:text-sm\", className)}>\n <Text\n as=\"div\"\n size=\"micro\"\n tone=\"soft\"\n weight=\"bold\"\n className={cn(\n \"polli:uppercase polli:tracking-wide\",\n labelClassName,\n )}\n >\n {label}\n </Text>\n <div\n className={cn(\n \"polli:mt-1 polli:break-words\",\n valueVariantClasses[variant],\n valueClassName,\n )}\n >\n {value}\n </div>\n {detail && (\n <Text\n as=\"div\"\n size=\"xs\"\n tone=\"soft\"\n className={cn(\"polli:mt-2\", detailClassName)}\n >\n {detail}\n </Text>\n )}\n </div>\n);\n","import { type ReactNode, useState } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { ChevronIcon } from \"../primitives/ChevronIcon.tsx\";\nimport { InlineLink } from \"../primitives/InlineLink.tsx\";\nimport {\n CheckIcon,\n ClockIcon,\n ToolIcon,\n XIcon,\n} from \"../primitives/icons/index.tsx\";\nimport { Text } from \"../primitives/Typography.tsx\";\n\nexport type ToolCallStatus =\n | \"pending\"\n | \"running\"\n | \"approval-requested\"\n | \"approval-responded\"\n | \"complete\"\n | \"error\"\n | \"denied\";\n\nexport interface ToolCallDetailsProps {\n name: string;\n input?: unknown;\n output?: unknown;\n error?: unknown;\n status?: ToolCallStatus;\n defaultOpen?: boolean;\n className?: string;\n}\n\nfunction formattedValue(value: unknown): string {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value, null, 2) ?? String(value);\n } catch {\n return String(value);\n }\n}\n\nfunction linkedValue(value: unknown): ReactNode[] {\n const formatted = formattedValue(value);\n const segments = formatted.split(/(https:\\/\\/[^\\s\"\\\\]+)/g);\n let offset = 0;\n return segments.map((segment) => {\n const key = `${offset}:${segment}`;\n offset += segment.length;\n return segment.startsWith(\"https://\") ? (\n <InlineLink key={key} href={segment}>\n {segment}\n </InlineLink>\n ) : (\n segment\n );\n });\n}\n\nfunction ToolValue({\n value,\n error = false,\n}: {\n value: unknown;\n error?: boolean;\n}) {\n return (\n <pre\n className={cn(\n \"polli:max-h-72 polli:overflow-auto polli:whitespace-pre-wrap polli:break-words polli:rounded-lg polli:border polli:p-3 polli:text-xs polli:leading-relaxed\",\n error\n ? \"polli:border-intent-danger-border/30 polli:bg-intent-danger-bg-light polli:text-intent-danger-text\"\n : \"polli:border-theme-border/20 polli:bg-theme-bg-pale polli:text-theme-text-base\",\n )}\n >\n {linkedValue(value)}\n </pre>\n );\n}\n\nconst STATUS_LABELS: Record<ToolCallStatus, string> = {\n pending: \"Pending\",\n running: \"Running\",\n \"approval-requested\": \"Awaiting approval\",\n \"approval-responded\": \"Responded\",\n complete: \"Completed\",\n error: \"Error\",\n denied: \"Denied\",\n};\n\nfunction ToolStatus({ status }: { status: ToolCallStatus }) {\n const icon =\n status === \"complete\" || status === \"approval-responded\" ? (\n <CheckIcon className=\"polli:size-3\" />\n ) : status === \"error\" || status === \"denied\" ? (\n <XIcon className=\"polli:size-3\" />\n ) : (\n <ClockIcon\n className={cn(\n \"polli:size-3\",\n status === \"running\" && \"polli:animate-pulse\",\n )}\n />\n );\n return (\n <span\n data-status={status}\n className={cn(\n \"polli:ml-auto polli:inline-flex polli:shrink-0 polli:items-center polli:gap-1 polli:rounded-full polli:px-2 polli:py-1 polli:text-[11px] polli:font-semibold\",\n status === \"complete\" || status === \"approval-responded\"\n ? \"polli:bg-theme-bg-active polli:text-intent-success-text\"\n : status === \"error\" || status === \"denied\"\n ? \"polli:bg-intent-danger-bg-light polli:text-intent-danger-text\"\n : \"polli:bg-intent-info-bg-light polli:text-intent-info-text\",\n )}\n >\n {icon}\n {STATUS_LABELS[status]}\n </span>\n );\n}\n\n/** Framework-neutral disclosure for server- or client-executed tool calls. */\nexport function ToolCallDetails({\n name,\n input,\n output,\n error,\n status = error === undefined ? \"complete\" : \"error\",\n defaultOpen = false,\n className,\n}: ToolCallDetailsProps) {\n const result = error === undefined ? output : error;\n const [open, setOpen] = useState(defaultOpen);\n return (\n <div\n data-tool-status={status}\n className={cn(\n \"polli:overflow-hidden polli:rounded-xl polli:border polli:border-theme-border/35 polli:bg-surface-opaque polli:shadow-well\",\n className,\n )}\n >\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => setOpen((current) => !current)}\n className=\"polli-control polli:flex polli:w-full polli:cursor-pointer polli:items-center polli:gap-2 polli:px-3 polli:py-2.5 polli:text-left polli:hover:bg-theme-bg-hover/50\"\n >\n <span className=\"polli:flex polli:size-7 polli:shrink-0 polli:items-center polli:justify-center polli:rounded-lg polli:bg-theme-bg-active polli:text-theme-text-strong\">\n <ToolIcon className=\"polli:size-3.5\" />\n </span>\n <code className=\"polli:min-w-0 polli:truncate polli:text-xs polli:font-semibold polli:text-theme-text-strong\">\n {name}\n </code>\n <ToolStatus status={status} />\n <ChevronIcon\n expanded={open}\n className=\"polli:size-4 polli:shrink-0 polli:text-theme-text-soft\"\n />\n </button>\n {open && (\n <div className=\"polli:flex polli:flex-col polli:gap-4 polli:border-theme-border/30 polli:border-t polli:bg-theme-bg-pale/35 polli:px-3 polli:py-3\">\n {input !== undefined && (\n <div className=\"polli:flex polli:flex-col polli:gap-1\">\n <Text size=\"xs\" tone=\"muted\" weight=\"bold\">\n Parameters\n </Text>\n <ToolValue value={input} />\n </div>\n )}\n {result !== undefined && (\n <div className=\"polli:flex polli:flex-col polli:gap-1\">\n <Text size=\"xs\" tone=\"muted\" weight=\"bold\">\n {error === undefined ? \"Result\" : \"Error\"}\n </Text>\n <ToolValue\n value={result}\n error={error !== undefined}\n />\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import type { PropsWithChildren } from \"react\";\nimport { isExternalHref } from \"../lib/link.ts\";\nimport { ExternalLinkIcon } from \"./icons/index.tsx\";\n\ntype BaseInlineLinkProps = {\n /** Set explicitly for non-http external links, or false for custom routing components. */\n external?: boolean;\n showIcon?: boolean;\n /** Inline text inherits its size; footers use 13px and standalone links 14px. */\n size?: \"inherit\" | \"footer\" | \"sm\";\n /** Accent for prominent links; quiet for secondary navigation. */\n tone?: \"accent\" | \"quiet\";\n className?: string;\n};\n\nexport type InlineLinkProps<T extends React.ElementType = \"a\"> =\n PropsWithChildren<BaseInlineLinkProps> & {\n as?: T;\n } & Omit<\n React.ComponentPropsWithoutRef<T>,\n keyof BaseInlineLinkProps | \"as\"\n >;\n\n/** Shared text-link rule: surrounding font, selectable ink, persistent underline,\n * visible keyboard focus, and an external arrow only when leaving the app.\n * Navigation and button-shaped actions use their own primitives.\n */\nexport function InlineLink<T extends React.ElementType = \"a\">({\n as,\n external,\n showIcon = true,\n size = \"inherit\",\n tone = \"accent\",\n className,\n children,\n ...linkProps\n}: InlineLinkProps<T>) {\n const Component: React.ElementType = as || \"a\";\n const isExternal =\n external ?? isExternalHref((linkProps as { href?: unknown }).href);\n\n return (\n <Component\n target={isExternal && as !== \"button\" ? \"_blank\" : undefined}\n rel={\n isExternal && as !== \"button\"\n ? \"noopener noreferrer\"\n : undefined\n }\n className={[\"polli-link\", className].filter(Boolean).join(\" \")}\n data-size={size}\n data-tone={tone}\n {...linkProps}\n >\n {children}\n {showIcon && isExternal && (\n <ExternalLinkIcon\n aria-hidden=\"true\"\n className=\"polli-link-external-icon\"\n />\n )}\n </Component>\n );\n}\n","import { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/** Class merge for apps consuming the unprefixed Tailwind bridge in app.css. */\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(...inputs));\n}\n","import { useEffect } from \"react\";\n\n/**\n * Locks page scroll while enabled and restores the original overflow values on\n * cleanup.\n */\nexport function useScrollLock(enabled = true): void {\n useEffect(() => {\n if (!enabled) return;\n\n const originalBody = document.body.style.overflow;\n const originalHtml = document.documentElement.style.overflow;\n document.body.style.overflow = \"hidden\";\n document.documentElement.style.overflow = \"hidden\";\n\n return () => {\n document.body.style.overflow = originalBody;\n document.documentElement.style.overflow = originalHtml;\n };\n }, [enabled]);\n}\n","import type { ComponentPropsWithoutRef, FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\nexport type ButtonGroupProps = ComponentPropsWithoutRef<\"div\">;\n\nexport const ButtonGroup: FC<ButtonGroupProps> = ({\n className,\n children,\n role = \"group\",\n ...rest\n}) => (\n <div\n {...rest}\n role={role}\n className={cn(\n \"polli:flex polli:min-w-0 polli:flex-wrap polli:items-center polli:gap-1.5\",\n className,\n )}\n >\n {children}\n </div>\n);\n","import { type FC, useSyncExternalStore } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { MoonIcon, SunIcon } from \"./icons/index.tsx\";\n\n/**\n * Light/dark colour mode. The chosen mode is reflected as `class=\"dark\"` on\n * <html>, which flips the design-system tokens (see styles/tokens.css: `.dark`\n * + `.dark [data-theme]`). One shared module-level store backs every\n * `useColorMode()` consumer, so duplicate toggles never desync and changes\n * propagate across tabs.\n *\n * The chosen mode is persisted to localStorage (per-origin), which also powers\n * the cross-tab `storage` sync below. Read priority: localStorage → system\n * preference.\n *\n * Host apps should set the initial class pre-paint (a tiny inline script in the\n * document head, reading the same key) to avoid a flash of light before React\n * mounts; this store is the source of truth after hydration.\n *\n * Side-effect-free on import: the <html> sync and the cross-tab listener are\n * attached lazily on first subscribe, so importing this module (e.g. via the\n * package barrel) never mutates the DOM on its own.\n */\ntype ColorMode = \"light\" | \"dark\";\n\nconst STORAGE_KEY = \"polli-color-mode\";\n\nfunction readStored(): ColorMode | null {\n try {\n const value = localStorage.getItem(STORAGE_KEY);\n return value === \"light\" || value === \"dark\" ? value : null;\n } catch {\n return null;\n }\n}\n\nfunction systemPrefersDark(): boolean {\n return (\n typeof window !== \"undefined\" &&\n window.matchMedia?.(\"(prefers-color-scheme: dark)\").matches === true\n );\n}\n\nlet current: ColorMode =\n readStored() ?? (systemPrefersDark() ? \"dark\" : \"light\");\nconst listeners = new Set<() => void>();\n\nfunction apply(): void {\n if (typeof document === \"undefined\") return;\n document.documentElement.classList.toggle(\"dark\", current === \"dark\");\n syncThemeColor();\n}\n\n// Match the browser chrome (theme-color) to the resolved desk color by reading\n// the computed --polli-color-app-bg token — never a hardcoded value. Runs on\n// mount / mode change, after styles load, so the token resolves per mode.\nfunction syncThemeColor(): void {\n if (typeof document === \"undefined\") return;\n const appBg = getComputedStyle(document.documentElement)\n .getPropertyValue(\"--polli-color-app-bg\")\n .trim();\n if (!appBg) return;\n let meta = document.querySelector('meta[name=\"theme-color\"]');\n if (!meta) {\n meta = document.createElement(\"meta\");\n meta.setAttribute(\"name\", \"theme-color\");\n document.head.appendChild(meta);\n }\n meta.setAttribute(\"content\", appBg);\n}\n\nfunction emit(): void {\n for (const listener of listeners) listener();\n}\n\nfunction handleStorage(event: StorageEvent): void {\n if (event.key !== STORAGE_KEY) return;\n const next: ColorMode = event.newValue === \"dark\" ? \"dark\" : \"light\";\n if (next === current) return;\n current = next;\n apply();\n emit();\n}\n\nfunction subscribe(listener: () => void): () => void {\n if (listeners.size === 0 && typeof window !== \"undefined\") {\n apply(); // safety-net sync once a consumer mounts\n window.addEventListener(\"storage\", handleStorage);\n }\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n if (listeners.size === 0 && typeof window !== \"undefined\") {\n window.removeEventListener(\"storage\", handleStorage);\n }\n };\n}\n\nfunction getSnapshot(): ColorMode {\n return current;\n}\n\nfunction getServerSnapshot(): ColorMode {\n return \"light\";\n}\n\n/**\n * Set the color mode programmatically. Updates the shared store (so every\n * `useColorMode()` consumer re-renders), flips the `.dark` class, and persists\n * to localStorage.\n */\nexport function setColorMode(mode: ColorMode): void {\n if (mode === current) return;\n current = mode;\n apply();\n try {\n localStorage.setItem(STORAGE_KEY, mode);\n } catch {\n // ignore write failures (private mode / storage disabled)\n }\n emit();\n}\n\nexport function useColorMode(): {\n mode: ColorMode;\n isDark: boolean;\n toggle: () => void;\n} {\n const mode = useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot,\n );\n return {\n mode,\n isDark: mode === \"dark\",\n toggle: () => setColorMode(mode === \"dark\" ? \"light\" : \"dark\"),\n };\n}\n\n/**\n * Sliding sun/moon switch. Light/dark is a two-state choice, not an on/off\n * affordance, so this uses `Switch`'s shape but its own palette. The thumb\n * carries the active mode's icon tinted with the accent (`text-soft`); the\n * mode you'd switch to sits ghosted (faint neutral) on the\n * empty side. Self-contained — wires itself to `useColorMode`.\n */\nexport const ColorModeToggle: FC = () => {\n const { isDark, toggle } = useColorMode();\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={isDark}\n aria-label=\"Toggle dark mode\"\n onClick={toggle}\n className=\"polli-control polli:relative polli:inline-block polli:h-7 polli:w-[52px] polli:shrink-0 polli:cursor-pointer polli:rounded-full polli:border polli:border-theme-text-strong/10 polli:bg-surface-opaque polli:transition-colors\"\n >\n {isDark ? (\n <SunIcon className=\"polli:absolute polli:top-1/2 polli:left-[7px] polli:h-3.5 polli:w-3.5 polli:-translate-y-1/2 polli:text-theme-text-strong/40\" />\n ) : (\n <MoonIcon className=\"polli:absolute polli:top-1/2 polli:right-[7px] polli:h-3.5 polli:w-3.5 polli:-translate-y-1/2 polli:text-theme-text-strong/40\" />\n )}\n <span\n className={cn(\n \"polli:absolute polli:top-1/2 polli:left-0.5 polli:flex polli:h-5 polli:w-5 polli:-translate-y-1/2 polli:items-center polli:justify-center polli:rounded-full polli:bg-app-bg polli:text-theme-text-soft polli:shadow-sm polli:transition-transform\",\n isDark ? \"polli:translate-x-[26px]\" : \"polli:translate-x-0\",\n )}\n >\n {isDark ? (\n <MoonIcon className=\"polli:h-3.5 polli:w-3.5\" />\n ) : (\n <SunIcon className=\"polli:h-3.5 polli:w-3.5\" />\n )}\n </span>\n </button>\n );\n};\n","import { Dialog as ArkDialog } from \"@ark-ui/react/dialog\";\nimport { Portal } from \"@ark-ui/react/portal\";\nimport type { FC, ReactNode } from \"react\";\nimport { useRef } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\nexport type DrawerProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n ariaLabel: string;\n children: ReactNode;\n side?: \"left\" | \"right\";\n contentClassName?: string;\n};\n\n/** Accessible side drawer for mobile navigation and compact tools. */\nexport const Drawer: FC<DrawerProps> = ({\n open,\n onOpenChange,\n ariaLabel,\n children,\n side = \"left\",\n contentClassName,\n}) => {\n const contentRef = useRef<HTMLDivElement>(null);\n\n return (\n <ArkDialog.Root\n open={open}\n initialFocusEl={() => contentRef.current}\n onOpenChange={(details) => onOpenChange(details.open)}\n >\n <Portal>\n <ArkDialog.Backdrop className=\"polli:fixed polli:inset-0 polli:z-[100] polli:bg-[#000]/40 polli:backdrop-blur-sm\" />\n <ArkDialog.Positioner className=\"polli:pointer-events-none polli:fixed polli:inset-0 polli:z-[110] polli:h-dvh polli:overflow-hidden\">\n <ArkDialog.Content\n ref={contentRef}\n aria-label={ariaLabel}\n className={cn(\n \"polli:pointer-events-auto polli:flex polli:h-dvh polli:w-[min(20rem,86vw)] polli:flex-col polli:overflow-hidden polli:border-theme-text-strong/10 polli:bg-app-bg polli:shadow-xl polli:outline-none\",\n side === \"right\"\n ? \"polli:ml-auto polli:border-l\"\n : \"polli:border-r\",\n contentClassName,\n )}\n >\n {children}\n </ArkDialog.Content>\n </ArkDialog.Positioner>\n </Portal>\n </ArkDialog.Root>\n );\n};\n","import type { PropsWithChildren } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\ntype BaseDropdownItemProps = {\n className?: string;\n};\n\nexport type DropdownItemProps<T extends React.ElementType = \"button\"> =\n PropsWithChildren<BaseDropdownItemProps> & {\n as?: T;\n } & Omit<\n React.ComponentPropsWithoutRef<T>,\n keyof BaseDropdownItemProps | \"as\"\n >;\n\nexport function DropdownItem<T extends React.ElementType = \"button\">({\n as,\n className,\n children,\n ...rest\n}: DropdownItemProps<T>) {\n const Component: React.ElementType = as || \"button\";\n return (\n <Component\n {...(Component === \"button\" ? { type: \"button\" } : undefined)}\n {...rest}\n className={cn(\n \"polli-control polli:flex polli:w-full polli:cursor-pointer polli:items-center polli:gap-2 polli:rounded-lg polli:bg-transparent polli:px-3 polli:py-2 polli:text-left polli:text-sm polli:font-medium polli:text-theme-text-base polli:no-underline polli:transition-colors polli:hover:bg-theme-bg-hover polli:hover:text-theme-text-hover polli:focus-visible:bg-theme-bg-hover\",\n className,\n )}\n >\n {children}\n </Component>\n );\n}\n","import { type CSSProperties, forwardRef } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\nconst toNumber = (value: unknown): number | undefined => {\n if (typeof value === \"number\") return value;\n if (typeof value !== \"string\" || value.trim() === \"\") return undefined;\n const numericValue = Number(value);\n return Number.isFinite(numericValue) ? numericValue : undefined;\n};\n\nconst clampPercent = (value: number): number =>\n Math.min(100, Math.max(0, value));\n\nconst getProgressPercent = ({\n progress,\n value,\n defaultValue,\n min,\n max,\n}: {\n progress?: number;\n value: React.ComponentPropsWithoutRef<\"input\">[\"value\"];\n defaultValue: React.ComponentPropsWithoutRef<\"input\">[\"defaultValue\"];\n min: React.ComponentPropsWithoutRef<\"input\">[\"min\"];\n max: React.ComponentPropsWithoutRef<\"input\">[\"max\"];\n}): number | undefined => {\n if (typeof progress === \"number\" && Number.isFinite(progress)) {\n return clampPercent(progress);\n }\n\n const numericValue = toNumber(value ?? defaultValue);\n if (numericValue === undefined) return undefined;\n\n const numericMin = toNumber(min) ?? 0;\n const numericMax = toNumber(max) ?? 100;\n if (numericMax <= numericMin) return 100;\n\n return clampPercent(\n ((numericValue - numericMin) / (numericMax - numericMin)) * 100,\n );\n};\n\nexport type SliderProps = Omit<\n React.ComponentPropsWithoutRef<\"input\">,\n \"type\"\n> & {\n /** Fill percentage from 0-100. Falls back to value/min/max when omitted. */\n progress?: number;\n};\n\nexport const Slider = forwardRef<HTMLInputElement, SliderProps>(\n (\n { className, defaultValue, max, min, progress, style, value, ...props },\n ref,\n ) => {\n const progressPercent = getProgressPercent({\n progress,\n value,\n defaultValue,\n min,\n max,\n });\n const sliderStyle = {\n ...style,\n ...(progressPercent === undefined\n ? null\n : { \"--polli-slider-progress\": `${progressPercent}%` }),\n } as CSSProperties;\n\n return (\n <input\n ref={ref}\n type=\"range\"\n min={min}\n max={max}\n value={value}\n defaultValue={defaultValue}\n style={sliderStyle}\n className={cn(\"polli-slider\", className)}\n {...props}\n />\n );\n },\n);\n","import type { FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\nexport type SwitchStatus = \"off\" | \"on\" | \"invalid\";\n\nexport type SwitchProps = {\n checked: boolean;\n onChange: (next: boolean) => void;\n /** Visual status. Drives track colour only. Defaults to `checked ? \"on\" : \"off\"`. */\n status?: SwitchStatus;\n /** Accessible label (aria-label). Not rendered visibly. */\n ariaLabel?: string;\n disabled?: boolean;\n className?: string;\n};\n\n// Switch is theme-independent. Universal, mode-aware palette (tokens in\n// tokens.css). The thumb stays light in BOTH modes; tracks:\n// off — neutral grey (light in light mode, mid-grey in dark)\n// on — vivid green (universal \"enabled\" affordance)\n// invalid — vivid red (incomplete / error / setup needed)\nconst trackClasses: Record<SwitchStatus, string> = {\n off: \"polli:bg-switch-track-off\",\n on: \"polli:bg-switch-track-on\",\n invalid: \"polli:bg-switch-track-invalid\",\n};\n\n/**\n * Binary toggle primitive. Universal palette — does NOT follow the page\n * theme. Light thumb in both modes; track states: off (grey), on (green),\n * invalid (red, for \"enabled but needs attention\").\n *\n * `checked` drives thumb position; `status` drives track colour. So\n * `checked={true} status=\"invalid\"` renders thumb-right with a red track.\n */\nexport const Switch: FC<SwitchProps> = ({\n checked,\n onChange,\n status,\n ariaLabel,\n disabled = false,\n className,\n}) => {\n const effectiveStatus: SwitchStatus = status ?? (checked ? \"on\" : \"off\");\n const resolvedAriaLabel =\n ariaLabel ?? (checked ? \"Turn off toggle\" : \"Turn on toggle\");\n\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n aria-label={resolvedAriaLabel}\n onClick={() => onChange(!checked)}\n disabled={disabled}\n className={cn(\n \"polli-control polli:relative polli:inline-flex polli:h-7 polli:w-12 polli:shrink-0 polli:items-center polli:rounded-full polli:transition polli:disabled:cursor-not-allowed polli:disabled:opacity-60\",\n trackClasses[effectiveStatus],\n className,\n )}\n >\n <span\n className={cn(\n \"polli:inline-block polli:h-5 polli:w-5 polli:rounded-full polli:bg-switch-thumb polli:shadow-sm polli:transition-transform\",\n checked ? \"polli:translate-x-6\" : \"polli:translate-x-1\",\n )}\n />\n </button>\n );\n};\n","import type { ComponentPropsWithoutRef, FC, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\n\ntype Align = \"left\" | \"center\" | \"right\";\ntype RowIntent = \"default\" | \"warning\" | \"danger\";\ntype SortDirection = \"asc\" | \"desc\";\n\nconst alignClasses: Record<Align, string> = {\n left: \"polli:text-left\",\n center: \"polli:text-center\",\n right: \"polli:text-right\",\n};\n\nconst rowIntentClasses: Record<RowIntent, string> = {\n default: \"\",\n warning: \"polli:bg-intent-warning-bg-light/65\",\n danger: \"polli:bg-intent-danger-bg-light/65\",\n};\n\nexport type TableProps = ComponentPropsWithoutRef<\"table\">;\n\nexport const Table: FC<TableProps> = ({ className, ...rest }) => (\n <table\n {...rest}\n className={cn(\n \"polli:w-full polli:border-collapse polli:text-sm\",\n className,\n )}\n />\n);\n\nexport type TableHeadProps = ComponentPropsWithoutRef<\"thead\">;\n\nexport const TableHead: FC<TableHeadProps> = ({ className, ...rest }) => (\n <thead\n {...rest}\n className={cn(\n \"polli:bg-transparent polli:text-micro polli:text-theme-text-muted\",\n className,\n )}\n />\n);\n\nexport type TableBodyProps = ComponentPropsWithoutRef<\"tbody\"> & {\n divider?: \"themed\" | \"neutral\";\n};\n\nexport const TableBody: FC<TableBodyProps> = ({\n className,\n divider = \"themed\",\n ...rest\n}) => (\n <tbody\n {...rest}\n className={cn(\n \"polli:divide-y\",\n divider === \"neutral\"\n ? \"polli:divide-divider\"\n : \"polli:divide-theme-border/65\",\n className,\n )}\n />\n);\n\nexport type TableRowProps = ComponentPropsWithoutRef<\"tr\"> & {\n intent?: RowIntent;\n};\n\nexport const TableRow: FC<TableRowProps> = ({\n intent = \"default\",\n className,\n ...rest\n}) => (\n <tr\n {...rest}\n className={cn(\n \"polli:transition-colors polli:hover:bg-theme-bg-subtle\",\n rowIntentClasses[intent],\n className,\n )}\n />\n);\n\nexport type TableHeaderCellProps = Omit<\n ComponentPropsWithoutRef<\"th\">,\n \"children\"\n> & {\n align?: Align;\n active?: boolean;\n sortDirection?: SortDirection;\n onSort?: () => void;\n children: ReactNode;\n};\n\nexport const TableHeaderCell: FC<TableHeaderCellProps> = ({\n align = \"left\",\n active = false,\n sortDirection,\n onSort,\n className,\n children,\n ...rest\n}) => {\n const content = (\n <>\n <span>{children}</span>\n {onSort && (\n <span\n aria-hidden=\"true\"\n className=\"polli:inline-flex polli:w-3 polli:justify-center\"\n >\n {active && sortDirection\n ? sortDirection === \"asc\"\n ? \"↑\"\n : \"↓\"\n : \"\"}\n </span>\n )}\n </>\n );\n\n const classes = cn(\n \"polli:px-3 polli:py-2 polli:font-bold polli:normal-case polli:tracking-wide\",\n alignClasses[align],\n active && \"polli:text-theme-text-strong\",\n onSort &&\n \"polli:cursor-pointer polli:select-none polli:hover:text-theme-text-strong\",\n className,\n );\n\n if (!onSort) {\n return (\n <th {...rest} className={classes}>\n {content}\n </th>\n );\n }\n\n return (\n <th\n {...rest}\n aria-sort={\n active && sortDirection\n ? sortDirection === \"asc\"\n ? \"ascending\"\n : \"descending\"\n : \"none\"\n }\n className={classes}\n >\n <button\n type=\"button\"\n onClick={onSort}\n className={cn(\n \"polli-control polli:inline-flex polli:w-full polli:items-center polli:gap-1 polli:bg-transparent polli:p-0 polli:font-bold polli:text-inherit\",\n align === \"right\" && \"polli:justify-end\",\n align === \"center\" && \"polli:justify-center\",\n )}\n >\n {content}\n </button>\n </th>\n );\n};\n\nexport type TableCellProps = ComponentPropsWithoutRef<\"td\"> & {\n align?: Align;\n numeric?: boolean;\n muted?: boolean;\n};\n\nexport const TableCell: FC<TableCellProps> = ({\n align = \"left\",\n numeric = false,\n muted = false,\n className,\n ...rest\n}) => (\n <td\n {...rest}\n className={cn(\n \"polli:px-3 polli:py-2 polli:align-middle\",\n alignClasses[align],\n numeric && \"polli:tabular-nums\",\n muted && \"polli:text-theme-text-muted\",\n className,\n )}\n />\n);\n","import type { FC, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport { ChevronIcon } from \"./ChevronIcon.tsx\";\n\nexport type TableDisclosureButtonProps = {\n children: ReactNode;\n disabled?: boolean;\n expanded: boolean;\n onClick: () => void;\n className?: string;\n};\n\n/** Compact disclosure trigger for expandable table rows. */\nexport const TableDisclosureButton: FC<TableDisclosureButtonProps> = ({\n children,\n disabled = false,\n expanded,\n onClick,\n className,\n}) => (\n <button\n type=\"button\"\n aria-expanded={expanded}\n disabled={disabled}\n onClick={onClick}\n className={cn(\n \"polli-control polli:inline-flex polli:items-center polli:gap-1.5 polli:rounded-sm polli:text-left polli:text-theme-text-strong polli:transition-colors\",\n disabled\n ? \"polli:cursor-default polli:opacity-60\"\n : \"polli:cursor-pointer polli:hover:text-theme-text-soft\",\n className,\n )}\n >\n <ChevronIcon\n expanded={expanded}\n className=\"polli:text-theme-text-soft\"\n />\n {children}\n </button>\n);\n"],"mappings":"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","names":["cn","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","intentClasses","sizeClasses","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_portal","import_react","import_jsx_runtime","ArkDialog","import_jsx_runtime","import_jsx_runtime","sizeClasses","import_jsx_runtime","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","_size","_appearance","_external","_showIcon","_icon","_className","_children","import_jsx_runtime","import_react","document","current","import_react","import_jsx_runtime","intentClasses","variantClasses","sizeClasses","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","intentClasses","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","start","yearText","import_jsx_runtime","variantClasses","import_jsx_runtime","addUtcMonths","start","granularity","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","current","import_clsx","import_tailwind_merge","cn","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_dialog","import_portal","import_react","import_jsx_runtime","ArkDialog","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
|