@pollinations/ui 0.0.1 → 0.1.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -16
- package/dist/{Button-DMJ2K6Gr.d.ts → Button-BvLF_Km2.d.cts} +4 -4
- package/dist/{Button-CNzpisJf.d.cts → Button-DQAZzvyQ.d.ts} +4 -4
- package/dist/{Chip-BS8ronOu.d.ts → Chip-C5impfYd.d.ts} +2 -2
- package/dist/{Chip-DyqWrq0r.d.cts → Chip-SM52sUbZ.d.cts} +2 -2
- package/dist/app.css +1 -1
- package/dist/auth/index.cjs +78 -71
- package/dist/auth/index.cjs.map +1 -1
- package/dist/auth/index.d.cts +1 -2
- package/dist/auth/index.d.ts +1 -2
- package/dist/auth/index.js +78 -71
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/sdk.cjs +7 -6
- package/dist/auth/sdk.cjs.map +1 -1
- package/dist/auth/sdk.d.cts +2 -2
- package/dist/auth/sdk.d.ts +2 -2
- package/dist/auth/sdk.js +7 -6
- package/dist/auth/sdk.js.map +1 -1
- package/dist/compositions/app-user.cjs +497 -0
- package/dist/compositions/app-user.cjs.map +1 -0
- package/dist/compositions/app-user.d.cts +18 -0
- package/dist/compositions/app-user.d.ts +18 -0
- package/dist/compositions/app-user.js +469 -0
- package/dist/compositions/app-user.js.map +1 -0
- package/dist/index.cjs +1151 -312
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +146 -13
- package/dist/index.d.ts +146 -13
- package/dist/index.js +1109 -295
- package/dist/index.js.map +1 -1
- package/dist/modality/index.cjs +27 -56
- package/dist/modality/index.cjs.map +1 -1
- package/dist/modality/index.d.cts +13 -32
- package/dist/modality/index.d.ts +13 -32
- package/dist/modality/index.js +27 -55
- package/dist/modality/index.js.map +1 -1
- package/dist/models/index.cjs +508 -0
- package/dist/models/index.cjs.map +1 -0
- package/dist/models/index.d.cts +22 -0
- package/dist/models/index.d.ts +22 -0
- package/dist/models/index.js +486 -0
- package/dist/models/index.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/theme-VMRlhqST.d.cts +9 -0
- package/dist/theme-VMRlhqST.d.ts +9 -0
- package/dist/wallet/index.cjs +17 -5
- package/dist/wallet/index.cjs.map +1 -1
- package/dist/wallet/index.d.cts +2 -2
- package/dist/wallet/index.d.ts +2 -2
- package/dist/wallet/index.js +17 -5
- package/dist/wallet/index.js.map +1 -1
- package/dist/wallet/sdk.cjs +6 -3
- package/dist/wallet/sdk.cjs.map +1 -1
- package/dist/wallet/sdk.js +6 -3
- package/dist/wallet/sdk.js.map +1 -1
- package/package.json +17 -10
- package/dist/showcase/index.cjs +0 -2851
- package/dist/showcase/index.cjs.map +0 -1
- package/dist/showcase/index.d.cts +0 -19
- package/dist/showcase/index.d.ts +0 -19
- package/dist/showcase/index.js +0 -2839
- package/dist/showcase/index.js.map +0 -1
- package/dist/theme-DfHMjWB7.d.cts +0 -16
- package/dist/theme-DfHMjWB7.d.ts +0 -16
- package/dist/wallet.css +0 -73
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/showcase/index.ts","../../src/showcase/DesignShowcase.tsx","../../src/lib/period.ts","../../src/primitives/Dialog.tsx","../../src/lib/cn.ts","../../src/modules/auth/AuthModal.tsx","../../src/modules/modality/colors.ts","../../src/modules/modality/ModalityButton.tsx","../../src/primitives/Chip.tsx","../../src/modules/wallet/chips.tsx","../../src/modules/wallet/format-pollen.ts","../../src/modules/wallet/wallet-display.tsx","../../src/primitives/Button.tsx","../../src/primitives/ChevronIcon.tsx","../../src/primitives/Collapsible.tsx","../../src/primitives/CopyButton.tsx","../../src/primitives/Tooltip.tsx","../../src/primitives/Dropdown.tsx","../../src/primitives/icons/index.tsx","../../src/primitives/ExternalLinkButton.tsx","../../src/primitives/Field.tsx","../../src/primitives/IconButton.tsx","../../src/primitives/InfoTip.tsx","../../src/primitives/Input.tsx","../../src/primitives/ScrollArea.tsx","../../src/primitives/MultiSelect.tsx","../../src/primitives/PeriodPicker.tsx","../../src/primitives/TabButton.tsx","../../src/primitives/Surface.tsx","../../src/primitives/Section.tsx","../../src/primitives/Slider.tsx","../../src/primitives/StatCard.tsx","../../src/primitives/Switch.tsx","../../src/theme.ts"],"sourcesContent":["export { DesignShowcase } from \"./DesignShowcase.tsx\";\n","import {\n type ComponentType,\n type FC,\n type ReactNode,\n useEffect,\n useState,\n} from \"react\";\nimport { currentPeriod, type PeriodSelection } from \"../lib/period.ts\";\nimport { AuthInfoCard, ErrorBanner } from \"../modules/auth/index.ts\";\nimport { ModalityButton } from \"../modules/modality/index.ts\";\nimport {\n formatPollen,\n PaidChip,\n TierChip,\n WalletBalanceCard,\n WalletDot,\n} from \"../modules/wallet/index.ts\";\nimport { Button } from \"../primitives/Button.tsx\";\nimport { ChevronIcon } from \"../primitives/ChevronIcon.tsx\";\nimport { Chip } from \"../primitives/Chip.tsx\";\nimport { Collapsible } from \"../primitives/Collapsible.tsx\";\nimport { CopyButton } from \"../primitives/CopyButton.tsx\";\nimport { Dialog, DialogTitle } from \"../primitives/Dialog.tsx\";\nimport { Dropdown } from \"../primitives/Dropdown.tsx\";\nimport { ExternalLinkButton } from \"../primitives/ExternalLinkButton.tsx\";\nimport { Field as ArkField } from \"../primitives/Field.tsx\";\nimport { IconButton } from \"../primitives/IconButton.tsx\";\nimport { InfoTip } from \"../primitives/InfoTip.tsx\";\nimport { Input } from \"../primitives/Input.tsx\";\nimport {\n AppIcon,\n BeakerIcon,\n BookIcon,\n CheckIcon,\n ClipboardIcon,\n ClockIcon,\n DiscordIcon,\n DownloadIcon,\n ExternalLinkIcon,\n GenApiIcon,\n GitHubIcon,\n type IconProps,\n ImageIcon,\n LockIcon,\n MailIcon,\n McpIcon,\n MenuIcon,\n TerminalIcon,\n TokensIcon,\n TrendUpIcon,\n WalletIcon,\n XIcon,\n} from \"../primitives/icons/index.tsx\";\nimport { MultiSelect } from \"../primitives/MultiSelect.tsx\";\nimport { PeriodPicker } from \"../primitives/PeriodPicker.tsx\";\nimport { ScrollArea } from \"../primitives/ScrollArea.tsx\";\nimport { Section as PrimitiveSection } from \"../primitives/Section.tsx\";\nimport { Slider } from \"../primitives/Slider.tsx\";\nimport { StatCard } from \"../primitives/StatCard.tsx\";\nimport { Surface } from \"../primitives/Surface.tsx\";\nimport { Switch, type SwitchStatus } from \"../primitives/Switch.tsx\";\nimport { TabButton } from \"../primitives/TabButton.tsx\";\nimport { Tooltip } from \"../primitives/Tooltip.tsx\";\nimport { type ThemeName, themes } from \"../theme.ts\";\n\n/**\n * Package-owned design primitive showcase.\n *\n * This component renders package primitives, tokens, and domain recipes only.\n * App-specific charts, model recipes, routes, and copy belong in host apps.\n */\nexport type DesignShowcaseProps = {\n headerSlot?: ReactNode;\n hideHeader?: boolean;\n hideThemeTabs?: boolean;\n theme?: ThemeName;\n onThemeChange?: (theme: ThemeName) => void;\n};\n\nexport const DesignShowcase: FC<DesignShowcaseProps> = ({\n headerSlot,\n hideHeader = false,\n hideThemeTabs = false,\n theme: controlledTheme,\n onThemeChange,\n}) => {\n const [internalTheme, setInternalTheme] = useState<ThemeName>(\"amber\");\n const theme = controlledTheme ?? internalTheme;\n const setTheme = onThemeChange ?? setInternalTheme;\n\n useEffect(() => {\n document.documentElement.classList.add(\"polli-ui-root\");\n document.documentElement.classList.add(\"polli-ui-shell\");\n document.body.classList.add(\"polli-ui-shell\");\n return () => {\n document.documentElement.classList.remove(\"polli-ui-root\");\n document.documentElement.classList.remove(\"polli-ui-shell\");\n document.body.classList.remove(\"polli-ui-shell\");\n };\n }, []);\n\n return (\n <ScrollArea\n theme={theme}\n data-theme={theme}\n className={`polli:w-full polli:overflow-x-hidden polli:bg-emerald-100 polli:text-theme-text-base ${\n hideHeader ? \"polli:min-h-0 polli:flex-1\" : \"polli:h-dvh\"\n }`}\n >\n {hideHeader && (headerSlot || !hideThemeTabs) ? (\n <div className=\"polli:mx-auto polli:flex polli:w-full polli:max-w-[1220px] polli:flex-col polli:gap-4 polli:px-5 polli:pt-8\">\n {headerSlot ? headerSlot : null}\n {!hideThemeTabs ? (\n <ThemeTabs\n value={theme}\n options={themes}\n onChange={setTheme}\n />\n ) : null}\n </div>\n ) : !hideHeader ? (\n <Header\n theme={theme}\n onThemeChange={setTheme}\n headerSlot={headerSlot}\n />\n ) : null}\n <div className=\"polli:mx-auto polli:flex polli:w-full polli:max-w-[1220px] polli:flex-col polli:gap-8 polli:px-5 polli:pt-8 polli:pb-10\">\n <main className=\"polli:flex polli:min-w-0 polli:flex-col polli:gap-10\">\n <CoverageDemo />\n <TypographyDemo />\n <ThemeDemo theme={theme} onThemeChange={setTheme} />\n <TokensDemo />\n <IconsDemo />\n <ButtonsDemo theme={theme} />\n <InputsDemo />\n <SelectionDemo theme={theme} />\n <OverlaysDemo theme={theme} />\n <LayoutDemo theme={theme} />\n <FeedbackDemo />\n <ModuleRecipesDemo />\n </main>\n </div>\n </ScrollArea>\n );\n};\n\ntype HeaderProps = {\n theme: ThemeName;\n onThemeChange: (theme: ThemeName) => void;\n headerSlot?: ReactNode;\n};\n\nconst Header: FC<HeaderProps> = ({ theme, onThemeChange, headerSlot }) => (\n <header className=\"polli:sticky polli:top-0 polli:z-20 polli:border-b polli:border-green-950/10 polli:bg-emerald-100 polli:px-5 polli:py-4 polli:backdrop-blur\">\n <div className=\"polli:mx-auto polli:flex polli:w-full polli:max-w-[1220px] polli:min-w-0 polli:flex-col polli:items-start polli:gap-4\">\n <div className=\"polli:flex polli:w-full polli:min-w-0 polli:flex-col polli:gap-3 polli:md:flex-row polli:md:items-start polli:md:justify-between\">\n <div className=\"polli:min-w-0\">\n <h1 className=\"polli:font-serif polli:text-2xl polli:font-black polli:text-theme-text-strong\">\n Design Showcase\n </h1>\n <p className=\"polli:max-w-3xl polli:text-sm polli:leading-6 polli:text-theme-text-soft\">\n Package primitives, icons, tokens, and SDK-free recipes.\n </p>\n </div>\n {headerSlot ? (\n <div className=\"polli:w-full polli:md:w-auto\">\n {headerSlot}\n </div>\n ) : null}\n </div>\n <ThemeTabs\n value={theme}\n options={themes}\n onChange={onThemeChange}\n />\n </div>\n </header>\n);\n\ntype ThemeTabsProps = {\n value: ThemeName;\n options: readonly ThemeName[];\n onChange: (value: ThemeName) => void;\n};\n\nconst ThemeTabs: FC<ThemeTabsProps> = ({ value, options, onChange }) => (\n <div className=\"polli:flex polli:min-w-0 polli:max-w-full polli:flex-col polli:items-start polli:gap-2\">\n <span className=\"polli:text-xs polli:font-semibold polli:uppercase polli:tracking-wide polli:text-theme-text-strong\">\n Theme\n </span>\n <div className=\"polli:flex polli:w-full polli:max-w-full polli:flex-wrap polli:gap-1.5\">\n {options.map((option) => (\n <TabButton\n key={option}\n active={value === option}\n onClick={() => onChange(option)}\n theme={option}\n size=\"small\"\n >\n <span className=\"polli:capitalize\">{option}</span>\n </TabButton>\n ))}\n </div>\n </div>\n);\n\ntype ShowcaseSectionProps = {\n id: string;\n title: string;\n caption: string;\n children: ReactNode;\n};\n\nconst ShowcaseSection: FC<ShowcaseSectionProps> = ({\n id,\n title,\n caption,\n children,\n}) => (\n <section\n id={id}\n className=\"polli:flex polli:w-full polli:min-w-0 polli:scroll-mt-24 polli:flex-col polli:gap-3\"\n >\n <div className=\"polli:flex polli:flex-col polli:gap-1\">\n <h2 className=\"polli:font-serif polli:text-2xl polli:font-black polli:text-theme-text-strong\">\n {title}\n </h2>\n <p className=\"polli:max-w-3xl polli:break-words polli:text-sm polli:leading-6 polli:text-theme-text-soft polli:[overflow-wrap:anywhere]\">\n {caption}\n </p>\n </div>\n {children}\n </section>\n);\n\nconst Row: FC<{ label: string; children: ReactNode }> = ({\n label,\n children,\n}) => (\n <Surface\n variant=\"card-themed\"\n className=\"polli:flex polli:flex-wrap polli:items-center polli:gap-3\"\n >\n <span className=\"polli:w-44 polli:shrink-0 polli:text-xs polli:font-semibold polli:uppercase polli:tracking-wide polli:text-theme-text-strong\">\n {label}\n </span>\n <div className=\"polli:flex polli:min-w-0 polli:flex-1 polli:flex-wrap polli:items-center polli:gap-2\">\n {children}\n </div>\n </Surface>\n);\n\nconst ControlGroup: FC<{ label: string; children: ReactNode }> = ({\n label,\n children,\n}) => (\n <div className=\"polli:flex polli:min-w-0 polli:flex-col polli:gap-1\">\n <span className=\"polli:text-xs polli:font-semibold polli:uppercase polli:tracking-wide polli:text-theme-text-strong\">\n {label}\n </span>\n {children}\n </div>\n);\n\nconst primitiveNames = [\n \"Button\",\n \"ChevronIcon\",\n \"Chip\",\n \"Collapsible\",\n \"CopyButton\",\n \"Dialog\",\n \"DialogTitle\",\n \"Dropdown\",\n \"ExternalLinkButton\",\n \"Field\",\n \"IconButton\",\n \"InfoTip\",\n \"Input\",\n \"MultiSelect\",\n \"PeriodPicker\",\n \"ScrollArea\",\n \"Section\",\n \"Slider\",\n \"StatCard\",\n \"Surface\",\n \"Switch\",\n \"TabButton\",\n \"Tooltip\",\n] as const;\n\nconst moduleNames = [\n \"AuthInfoCard\",\n \"ErrorBanner\",\n \"ModalityButton\",\n \"PaidChip\",\n \"TierChip\",\n \"WalletBalanceCard\",\n \"WalletDot\",\n \"formatPollen\",\n] as const;\n\nconst CoverageDemo: FC = () => (\n <ShowcaseSection\n id=\"coverage\"\n title=\"Coverage\"\n caption=\"Every SDK-free primitive exported from the package appears below, plus the icon set and reusable module recipes.\"\n >\n <Surface\n variant=\"panel\"\n className=\"polli:grid polli:grid-cols-[repeat(auto-fit,minmax(220px,1fr))] polli:gap-3\"\n >\n <StatCard\n label=\"Primitives\"\n value={primitiveNames.length}\n detail=\"Buttons, inputs, overlays, layout, and feedback.\"\n className=\"polli:rounded-xl polli:bg-surface-white polli:p-4\"\n />\n <StatCard\n label=\"Icons\"\n value={iconItems.length + 1}\n detail=\"All exported icons plus the canonical chevron.\"\n className=\"polli:rounded-xl polli:bg-surface-white polli:p-4\"\n />\n <StatCard\n label=\"Recipes\"\n value={moduleNames.length}\n detail=\"Auth, wallet, and modality pieces without SDK state.\"\n className=\"polli:rounded-xl polli:bg-surface-white polli:p-4\"\n />\n <Surface className=\"polli:col-span-full polli:flex polli:flex-wrap polli:gap-2\">\n {primitiveNames.map((name) => (\n <Chip key={name} size=\"sm\">\n {name}\n </Chip>\n ))}\n </Surface>\n </Surface>\n </ShowcaseSection>\n);\n\nconst typographyRows = [\n {\n label: \"Heading\",\n className: \"polli:font-heading polli:text-4xl\",\n sample: \"Pollinations\",\n },\n {\n label: \"Subheading\",\n className: \"polli:font-subheading polli:text-3xl\",\n sample: \"Reusable UI\",\n },\n {\n label: \"Body\",\n className: \"polli:font-body polli:text-base\",\n sample: \"Clear defaults for product surfaces.\",\n },\n {\n label: \"Pixel\",\n className: \"polli:font-pixel polli:text-base\",\n sample: \"API 200 OK\",\n },\n {\n label: \"Micro\",\n className: \"polli:font-body polli:text-micro polli:uppercase\",\n sample: \"Status label\",\n },\n] as const;\n\nconst textRows = [\n [\"strong\", \"polli:text-theme-text-strong\"],\n [\"base\", \"polli:text-theme-text-base\"],\n [\"soft\", \"polli:text-theme-text-soft\"],\n [\"muted\", \"polli:text-theme-text-muted\"],\n] as const;\n\nconst TypographyDemo: FC = () => (\n <ShowcaseSection\n id=\"type\"\n title=\"Typography\"\n caption=\"Font, size, and semantic text color utilities backed by package tokens.\"\n >\n <Surface\n variant=\"panel\"\n className=\"polli:flex polli:flex-col polli:gap-3\"\n >\n {typographyRows.map((row) => (\n <div\n key={row.label}\n className=\"polli:flex polli:flex-wrap polli:items-baseline polli:gap-x-4 polli:gap-y-1 polli:border-b polli:border-theme-border polli:pb-3 polli:last:border-b-0 polli:last:pb-0\"\n >\n <span\n className={`polli:w-80 polli:shrink-0 polli:text-theme-text-strong ${row.className}`}\n >\n {row.sample}\n </span>\n <code className=\"polli:w-36 polli:shrink-0 polli:font-mono polli:text-xs polli:text-theme-text-strong\">\n {row.label}\n </code>\n <span className=\"polli:min-w-0 polli:flex-1 polli:text-xs polli:text-theme-text-soft\">\n {row.className.replaceAll(\"polli:\", \"\")}\n </span>\n </div>\n ))}\n <div className=\"polli:flex polli:flex-wrap polli:gap-2 polli:pt-1\">\n {textRows.map(([label, className]) => (\n <span\n key={label}\n className={`polli:rounded-lg polli:bg-theme-bg-pale polli:px-3 polli:py-1 polli:text-sm ${className}`}\n >\n text-{label}\n </span>\n ))}\n </div>\n </Surface>\n </ShowcaseSection>\n);\n\nconst ThemeDemo: FC<HeaderProps> = ({ theme, onThemeChange }) => (\n <ShowcaseSection\n id=\"themes\"\n title=\"Themes\"\n caption=\"The theme cascade is driven by data-theme on any ancestor or by component theme props.\"\n >\n <Surface\n variant=\"panel\"\n className=\"polli:grid polli:grid-cols-[repeat(auto-fit,minmax(150px,1fr))] polli:gap-3\"\n >\n {themes.map((item) => (\n <button\n key={item}\n type=\"button\"\n data-theme={item}\n aria-pressed={theme === item}\n onClick={() => onThemeChange(item)}\n className=\"polli:flex polli:min-w-0 polli:flex-col polli:gap-2 polli:rounded-xl polli:border polli:border-theme-border polli:bg-theme-bg-subtle polli:p-3 polli:text-left polli:transition-colors polli:hover:bg-theme-bg-pale\"\n >\n <span className=\"polli:text-sm polli:font-bold polli:capitalize polli:text-theme-text-strong\">\n {item}\n </span>\n <span className=\"polli:flex polli:h-8 polli:overflow-hidden polli:rounded-lg\">\n <span className=\"polli:flex-1 polli:bg-theme-bg-subtle\" />\n <span className=\"polli:flex-1 polli:bg-theme-bg-active\" />\n <span className=\"polli:flex-1 polli:bg-theme-bg-hover\" />\n <span className=\"polli:flex-1 polli:bg-theme-bg-pale\" />\n </span>\n <span className=\"polli:text-xs polli:text-theme-text-soft\">\n {theme === item ? \"Selected\" : \"Preview\"}\n </span>\n </button>\n ))}\n </Surface>\n </ShowcaseSection>\n);\n\nconst tokenRows = [\n [\"text-base\", \"var(--polli-color-text-base)\", \"polli:bg-theme-text-base\"],\n [\n \"text-strong\",\n \"var(--polli-color-text-strong)\",\n \"polli:bg-theme-text-strong\",\n ],\n [\"text-soft\", \"var(--polli-color-text-soft)\", \"polli:bg-theme-text-soft\"],\n [\n \"text-muted\",\n \"var(--polli-color-text-muted)\",\n \"polli:bg-theme-text-muted\",\n ],\n [\"border\", \"var(--polli-color-border)\", \"polli:bg-theme-border\"],\n [\"bg-subtle\", \"var(--polli-color-bg-subtle)\", \"polli:bg-theme-bg-subtle\"],\n [\"bg-active\", \"var(--polli-color-bg-active)\", \"polli:bg-theme-bg-active\"],\n [\"bg-hover\", \"var(--polli-color-bg-hover)\", \"polli:bg-theme-bg-hover\"],\n [\"bg-pale\", \"var(--polli-color-bg-pale)\", \"polli:bg-theme-bg-pale\"],\n] as const;\n\nconst TokensDemo: FC = () => (\n <ShowcaseSection\n id=\"tokens\"\n title=\"Tokens\"\n caption=\"Public CSS variables and utility bridges used by the primitives.\"\n >\n <Surface\n variant=\"panel\"\n className=\"polli:grid polli:grid-cols-[repeat(auto-fit,minmax(230px,1fr))] polli:gap-3\"\n >\n {tokenRows.map(([name, variable, swatchClass]) => (\n <Surface\n key={name}\n className=\"polli:flex polli:items-center polli:gap-3\"\n >\n <span\n className={`polli:h-10 polli:w-10 polli:shrink-0 polli:rounded-lg polli:border polli:border-theme-border ${swatchClass}`}\n />\n <span className=\"polli:min-w-0\">\n <span className=\"polli:block polli:text-sm polli:font-bold polli:text-theme-text-strong\">\n {name}\n </span>\n <code className=\"polli:block polli:truncate polli:text-xs polli:text-theme-text-soft\">\n {variable}\n </code>\n </span>\n </Surface>\n ))}\n </Surface>\n </ShowcaseSection>\n);\n\ntype IconItem = {\n name: string;\n Icon: ComponentType<IconProps>;\n};\n\nconst iconItems: readonly IconItem[] = [\n { name: \"AppIcon\", Icon: AppIcon },\n { name: \"BeakerIcon\", Icon: BeakerIcon },\n { name: \"BookIcon\", Icon: BookIcon },\n { name: \"CheckIcon\", Icon: CheckIcon },\n { name: \"ClipboardIcon\", Icon: ClipboardIcon },\n { name: \"ClockIcon\", Icon: ClockIcon },\n { name: \"DiscordIcon\", Icon: DiscordIcon },\n { name: \"DownloadIcon\", Icon: DownloadIcon },\n { name: \"ExternalLinkIcon\", Icon: ExternalLinkIcon },\n { name: \"GenApiIcon\", Icon: GenApiIcon },\n { name: \"GitHubIcon\", Icon: GitHubIcon },\n { name: \"ImageIcon\", Icon: ImageIcon },\n { name: \"LockIcon\", Icon: LockIcon },\n { name: \"MailIcon\", Icon: MailIcon },\n { name: \"McpIcon\", Icon: McpIcon },\n { name: \"MenuIcon\", Icon: MenuIcon },\n { name: \"TerminalIcon\", Icon: TerminalIcon },\n { name: \"TokensIcon\", Icon: TokensIcon },\n { name: \"TrendUpIcon\", Icon: TrendUpIcon },\n { name: \"WalletIcon\", Icon: WalletIcon },\n { name: \"XIcon\", Icon: XIcon },\n];\n\nconst IconsDemo: FC = () => (\n <ShowcaseSection\n id=\"icons\"\n title=\"Icons\"\n caption=\"Every exported SVG icon appears here with the same currentColor contract used by buttons and links.\"\n >\n <Surface\n variant=\"panel\"\n className=\"polli:grid polli:gap-3\"\n style={{\n gridTemplateColumns: \"repeat(auto-fit, minmax(250px, 1fr))\",\n }}\n >\n {iconItems.map(({ name, Icon }) => (\n <Surface\n key={name}\n className=\"polli:flex polli:items-center polli:gap-3\"\n >\n <span className=\"polli:flex polli:h-10 polli:w-10 polli:shrink-0 polli:items-center polli:justify-center polli:rounded-lg polli:bg-theme-bg-pale polli:text-theme-text-strong\">\n <Icon className=\"polli:h-5 polli:w-5\" />\n </span>\n <code className=\"polli:min-w-0 polli:whitespace-nowrap polli:text-xs polli:text-theme-text-strong\">\n {name}\n </code>\n </Surface>\n ))}\n <Surface className=\"polli:flex polli:items-center polli:gap-3\">\n <span className=\"polli:flex polli:h-10 polli:w-10 polli:shrink-0 polli:items-center polli:justify-center polli:rounded-lg polli:bg-theme-bg-pale polli:text-theme-text-strong\">\n <ChevronIcon className=\"polli:h-4 polli:w-4\" />\n </span>\n <span className=\"polli:min-w-0\">\n <code className=\"polli:block polli:whitespace-nowrap polli:text-xs polli:text-theme-text-strong\">\n ChevronIcon\n </code>\n <span className=\"polli:mt-1 polli:flex polli:gap-2 polli:text-theme-text-soft\">\n <ChevronIcon />\n <ChevronIcon expanded />\n </span>\n </span>\n </Surface>\n </Surface>\n </ShowcaseSection>\n);\n\nconst ButtonsDemo: FC<{ theme: ThemeName }> = ({ theme }) => (\n <ShowcaseSection\n id=\"buttons\"\n title=\"Buttons\"\n caption=\"Button, link, icon, copy, chip, and tab affordances in their supported states.\"\n >\n <div className=\"polli:flex polli:flex-col polli:gap-3\">\n <Row label=\"Button\">\n <Button>Default</Button>\n <Button size=\"small\">Small</Button>\n <Button size=\"large\">Large</Button>\n <Button theme=\"blue\">Theme prop</Button>\n <Button disabled>Disabled</Button>\n <Button intent=\"danger\">Delete</Button>\n </Row>\n <Row label=\"External link\">\n <ExternalLinkButton\n theme={theme}\n href=\"https://pollinations.ai\"\n >\n Pollinations\n </ExternalLinkButton>\n <ExternalLinkButton\n theme={theme}\n href=\"https://pollinations.ai\"\n size=\"small\"\n >\n Small link\n </ExternalLinkButton>\n </Row>\n <Row label=\"Icon button\">\n <IconButton title=\"Copy\" onClick={noop}>\n <ClipboardIcon className=\"polli:h-3.5 polli:w-3.5\" />\n </IconButton>\n <IconButton title=\"Open\" onClick={noop}>\n <ExternalLinkIcon className=\"polli:h-3.5 polli:w-3.5\" />\n </IconButton>\n <IconButton title=\"Delete\" intent=\"danger\" onClick={noop}>\n <XIcon className=\"polli:h-3.5 polli:w-3.5\" />\n </IconButton>\n </Row>\n <Row label=\"Copy button\">\n <CopyButton\n value=\"pk_showcase_123\"\n className={(copied) =>\n `polli:inline-flex polli:h-8 polli:items-center polli:gap-2 polli:rounded-full polli:px-3 polli:text-sm polli:font-medium polli:transition-colors ${\n copied\n ? \"polli:bg-green-100 polli:text-green-800\"\n : \"polli:bg-theme-bg-active polli:text-theme-text-strong\"\n }`\n }\n >\n {(copied) => (\n <>\n {copied ? (\n <CheckIcon className=\"polli:h-4 polli:w-4\" />\n ) : (\n <ClipboardIcon className=\"polli:h-4 polli:w-4\" />\n )}\n {copied ? \"Copied\" : \"Copy key\"}\n </>\n )}\n </CopyButton>\n </Row>\n <Row label=\"Tab button\">\n <TabButton active onClick={noop}>\n Active\n </TabButton>\n <TabButton active={false} onClick={noop}>\n Inactive\n </TabButton>\n <TabButton active={false} disabled onClick={noop}>\n Disabled\n </TabButton>\n </Row>\n <Row label=\"Chip\">\n <Chip>Default</Chip>\n <Chip size=\"sm\">Small</Chip>\n <Chip size=\"lg\">Large</Chip>\n <Chip intent=\"news\">NEW</Chip>\n <Chip intent=\"alpha\">ALPHA</Chip>\n <Chip intent=\"neutral\">Neutral</Chip>\n {themes.map((theme) => (\n <Chip key={theme} theme={theme}>\n {theme}\n </Chip>\n ))}\n </Row>\n </div>\n </ShowcaseSection>\n);\n\nconst InputsDemo: FC = () => {\n const [sliderValue, setSliderValue] = useState(35);\n const [switches, setSwitches] = useState<Record<SwitchStatus, boolean>>({\n off: false,\n on: true,\n invalid: true,\n });\n\n return (\n <ShowcaseSection\n id=\"inputs\"\n title=\"Inputs\"\n caption=\"Text, number, field composition, range, and binary toggle primitives.\"\n >\n <Surface\n variant=\"panel\"\n className=\"polli:grid polli:grid-cols-[repeat(auto-fit,minmax(220px,1fr))] polli:gap-4\"\n >\n <ControlGroup label=\"Input\">\n <Input placeholder=\"Name\" />\n </ControlGroup>\n <ControlGroup label=\"Number\">\n <Input type=\"number\" placeholder=\"100\" hideNumberSteppers />\n </ControlGroup>\n <ControlGroup label=\"Error\">\n <Input placeholder=\"Invalid\" error />\n </ControlGroup>\n <ControlGroup label=\"Disabled\">\n <Input placeholder=\"Disabled\" disabled />\n </ControlGroup>\n <div className=\"polli:col-span-full\">\n <ArkField.Root\n invalid\n className=\"polli:flex polli:max-w-xl polli:flex-col polli:gap-1\"\n >\n <ArkField.Label className=\"polli:text-xs polli:font-semibold polli:uppercase polli:tracking-wide polli:text-theme-text-strong\">\n Field\n <ArkField.RequiredIndicator className=\"polli:ml-1 polli:text-intent-danger-text\" />\n </ArkField.Label>\n <ArkField.Input\n placeholder=\"email@example.com\"\n className=\"polli:rounded-lg polli:border polli:border-intent-danger-border polli:bg-white polli:px-3 polli:py-2 polli:text-sm\"\n />\n <ArkField.HelperText className=\"polli:text-xs polli:text-theme-text-soft\">\n Exported Ark field namespace with package styling.\n </ArkField.HelperText>\n <ArkField.ErrorText className=\"polli:text-xs polli:font-medium polli:text-intent-danger-text\">\n Enter a valid email address.\n </ArkField.ErrorText>\n </ArkField.Root>\n </div>\n <div className=\"polli:col-span-full\">\n <ControlGroup label={`Slider ${sliderValue}`}>\n <Slider\n min={0}\n max={100}\n value={sliderValue}\n aria-label=\"Slider\"\n onChange={(event) =>\n setSliderValue(\n Number(event.currentTarget.value),\n )\n }\n />\n </ControlGroup>\n </div>\n <div className=\"polli:col-span-full polli:flex polli:flex-wrap polli:gap-5\">\n {switchStatuses.map((status) => (\n <div\n key={status}\n className=\"polli:flex polli:flex-col polli:gap-1\"\n >\n <span className=\"polli:text-xs polli:font-semibold polli:uppercase polli:tracking-wide polli:text-theme-text-strong\">\n {status}\n </span>\n <Switch\n checked={switches[status]}\n status={status}\n ariaLabel={`${status} switch`}\n onChange={(checked) =>\n setSwitches((current) => ({\n ...current,\n [status]: checked,\n }))\n }\n />\n </div>\n ))}\n <div className=\"polli:flex polli:flex-col polli:gap-1\">\n <span className=\"polli:text-xs polli:font-semibold polli:uppercase polli:tracking-wide polli:text-theme-text-strong\">\n disabled\n </span>\n <Switch\n checked\n disabled\n status=\"on\"\n ariaLabel=\"Disabled switch\"\n onChange={noopSwitch}\n />\n </div>\n </div>\n </Surface>\n </ShowcaseSection>\n );\n};\n\nconst switchStatuses: readonly SwitchStatus[] = [\"off\", \"on\", \"invalid\"];\n\nconst selectionOptions = [\n { value: \"images\", label: \"Images\" },\n { value: \"text\", label: \"Text\" },\n { value: \"audio\", label: \"Audio\" },\n { value: \"video\", label: \"Video\" },\n { value: \"embeddings\", label: \"Embeddings\" },\n { value: \"tools\", label: \"Tools\" },\n { value: \"agents\", label: \"Agents\" },\n { value: \"apps\", label: \"Apps\" },\n] as const;\n\nconst tabOptions = [\"Request\", \"Pollen\", \"Usage\"] as const;\n\nconst SelectionDemo: FC<{ theme: ThemeName }> = ({ theme }) => {\n const [activeTab, setActiveTab] =\n useState<(typeof tabOptions)[number]>(\"Request\");\n const [selected, setSelected] = useState<string[]>([\"images\", \"text\"]);\n const [period, setPeriod] = useState<PeriodSelection>(() =>\n currentPeriod(),\n );\n\n return (\n <ShowcaseSection\n id=\"selection\"\n title=\"Selection\"\n caption=\"Mutually exclusive tabs, multiple selection, dropdowns, and period selection.\"\n >\n <Surface\n variant=\"panel\"\n className=\"polli:flex polli:flex-col polli:gap-4\"\n >\n <ControlGroup label=\"TabButton\">\n <div className=\"polli:flex polli:flex-wrap polli:gap-1.5\">\n {tabOptions.map((option) => (\n <TabButton\n key={option}\n active={activeTab === option}\n onClick={() => setActiveTab(option)}\n >\n {option}\n </TabButton>\n ))}\n </div>\n </ControlGroup>\n <ControlGroup label=\"Dropdown\">\n <Dropdown\n theme={theme}\n align=\"start\"\n className=\"polli:w-56 polli:p-2\"\n trigger={(open) => (\n <button\n type=\"button\"\n className=\"polli:inline-flex polli:min-h-8 polli:items-center polli:gap-2 polli:rounded-full polli:border polli:border-theme-border polli:bg-theme-bg-subtle polli:px-3 polli:text-sm polli:font-medium polli:text-theme-text-base polli:hover:bg-theme-bg-pale\"\n >\n Menu\n <ChevronIcon expanded={open} />\n </button>\n )}\n >\n {(close) => (\n <div className=\"polli:flex polli:flex-col\">\n {[\"Account\", \"Usage\", \"Settings\"].map(\n (item) => (\n <button\n key={item}\n type=\"button\"\n onClick={close}\n className=\"polli:rounded-md polli:px-3 polli:py-2 polli:text-left polli:text-sm polli:text-theme-text-base polli:hover:bg-theme-bg-subtle\"\n >\n {item}\n </button>\n ),\n )}\n </div>\n )}\n </Dropdown>\n </ControlGroup>\n <ControlGroup label=\"MultiSelect\">\n <div className=\"polli:flex polli:flex-wrap polli:gap-3\">\n <MultiSelect\n options={[...selectionOptions]}\n selected={selected}\n onChange={setSelected}\n placeholder=\"All\"\n align=\"start\"\n label=\"Types\"\n theme={theme}\n />\n <MultiSelect\n options={[]}\n selected={[]}\n onChange={noopSelected}\n placeholder=\"All\"\n disabled\n disabledText=\"Unavailable\"\n label=\"Disabled\"\n theme={theme}\n />\n </div>\n </ControlGroup>\n <ControlGroup label=\"PeriodPicker\">\n <PeriodPicker\n value={period}\n onChange={setPeriod}\n theme={theme}\n />\n </ControlGroup>\n </Surface>\n </ShowcaseSection>\n );\n};\n\nconst OverlaysDemo: FC<{ theme: ThemeName }> = ({ theme }) => {\n const [dialogOpen, setDialogOpen] = useState(false);\n const [firstOpen, setFirstOpen] = useState(false);\n const [secondOpen, setSecondOpen] = useState(true);\n\n return (\n <ShowcaseSection\n id=\"overlays\"\n title=\"Overlays and Disclosure\"\n caption=\"Dialog, DialogTitle, Dropdown, Collapsible, and ScrollArea share the package interaction language.\"\n >\n <Surface\n variant=\"panel\"\n className=\"polli:flex polli:flex-col polli:gap-4\"\n >\n <Row label=\"Dialog\">\n <Button onClick={() => setDialogOpen(true)}>\n Open dialog\n </Button>\n <Dialog\n open={dialogOpen}\n onOpenChange={setDialogOpen}\n labelledBy=\"showcase-dialog-title\"\n theme={theme}\n size=\"sm\"\n >\n <div className=\"polli:p-6\">\n <DialogTitle\n id=\"showcase-dialog-title\"\n className=\"polli:font-subheading polli:text-xl polli:text-theme-text-strong\"\n >\n DialogTitle export\n </DialogTitle>\n <p className=\"polli:mt-2 polli:text-sm polli:text-theme-text-base\">\n The dialog is controlled by the host and uses\n the same themed surface tokens.\n </p>\n <div className=\"polli:mt-5 polli:flex polli:justify-end polli:gap-2\">\n <Button\n size=\"small\"\n onClick={() => setDialogOpen(false)}\n >\n Close\n </Button>\n </div>\n </div>\n </Dialog>\n </Row>\n <Surface className=\"polli:grid polli:grid-cols-[repeat(auto-fit,minmax(260px,1fr))] polli:gap-3\">\n <Collapsible\n expanded={firstOpen}\n onToggle={() => setFirstOpen((open) => !open)}\n wrapperClassName=\"polli:border-theme-border polli:bg-theme-bg-pale\"\n label={\n <span className=\"polli:text-sm polli:font-medium polli:text-theme-text-strong\">\n Advanced settings\n </span>\n }\n >\n <p className=\"polli:text-sm polli:text-theme-text-base\">\n Body content is fully controlled by the caller.\n </p>\n </Collapsible>\n <Collapsible\n expanded={secondOpen}\n onToggle={() => setSecondOpen((open) => !open)}\n wrapperClassName=\"polli:border-theme-border polli:bg-theme-bg-pale\"\n label={\n <span className=\"polli:text-sm polli:font-medium polli:text-theme-text-strong\">\n Nested details\n </span>\n }\n >\n <div className=\"polli:flex polli:flex-col polli:gap-2\">\n <p className=\"polli:text-sm polli:text-theme-text-base\">\n The same primitive works inside compact panels.\n </p>\n <Button size=\"small\">Nested action</Button>\n </div>\n </Collapsible>\n <Collapsible\n expanded={false}\n onToggle={noop}\n disabled\n wrapperClassName=\"polli:border-theme-border polli:bg-theme-bg-pale\"\n label={\n <span className=\"polli:text-sm polli:font-medium polli:text-theme-text-strong\">\n Disabled row\n </span>\n }\n >\n Disabled content\n </Collapsible>\n </Surface>\n </Surface>\n </ShowcaseSection>\n );\n};\n\nconst LayoutDemo: FC<{ theme: ThemeName }> = ({ theme }) => (\n <ShowcaseSection\n id=\"layout\"\n title=\"Layout\"\n caption=\"Surface, Section, StatCard, and ScrollArea primitives for dense product screens.\"\n >\n <Surface\n variant=\"panel\"\n className=\"polli:flex polli:flex-col polli:gap-4\"\n >\n <div className=\"polli:grid polli:grid-cols-[repeat(auto-fit,minmax(210px,1fr))] polli:gap-3\">\n <Surface>\n <h3 className=\"polli:font-subheading polli:text-xl polli:text-theme-text-strong\">\n Surface card\n </h3>\n <p className=\"polli:mt-1 polli:text-sm polli:text-theme-text-soft\">\n Neutral inner surface for dense content.\n </p>\n </Surface>\n <Surface variant=\"card-themed\">\n <h3 className=\"polli:font-subheading polli:text-xl polli:text-theme-text-strong\">\n Surface themed\n </h3>\n <p className=\"polli:mt-1 polli:text-sm polli:text-theme-text-soft\">\n Themed wash for highlights and grouped state.\n </p>\n </Surface>\n <StatCard\n label=\"StatCard\"\n value={formatPollen(1234.5678)}\n detail=\"Tabular value with optional detail.\"\n className=\"polli:rounded-xl polli:bg-surface-white polli:p-4\"\n />\n </div>\n <PrimitiveSection\n title=\"Primitive section\"\n theme={theme}\n framed\n action={<Button size=\"small\">Action</Button>}\n >\n <p className=\"polli:text-sm polli:text-theme-text-soft\">\n Section owns heading layout and optional framing. The app\n owns the content inside it.\n </p>\n </PrimitiveSection>\n <div className=\"polli:grid polli:grid-cols-[repeat(auto-fit,minmax(260px,1fr))] polli:gap-4\">\n <Surface>\n <p className=\"polli:mb-2 polli:font-mono polli:text-xs polli:uppercase polli:tracking-wide polli:text-theme-text-soft\">\n ScrollArea vertical\n </p>\n <ScrollArea className=\"polli:h-44 polli:rounded-lg polli:bg-theme-bg-subtle polli:p-3\">\n {scrollRows.map((row) => (\n <p\n key={row}\n className=\"polli:py-1 polli:text-sm polli:text-theme-text-base\"\n >\n Row {row}\n </p>\n ))}\n </ScrollArea>\n </Surface>\n <Surface>\n <p className=\"polli:mb-2 polli:font-mono polli:text-xs polli:uppercase polli:tracking-wide polli:text-theme-text-soft\">\n ScrollArea horizontal\n </p>\n <ScrollArea\n axis=\"x\"\n theme=\"violet\"\n className=\"polli:rounded-lg polli:bg-theme-bg-subtle polli:p-3\"\n >\n <div className=\"polli:flex polli:w-max polli:gap-2\">\n {scrollRows.slice(0, 16).map((row) => (\n <Chip key={row} theme=\"violet\">\n item {row}\n </Chip>\n ))}\n </div>\n </ScrollArea>\n </Surface>\n </div>\n </Surface>\n </ShowcaseSection>\n);\n\nconst scrollRows = Array.from({ length: 28 }, (_, index) =>\n String(index + 1).padStart(2, \"0\"),\n);\n\nconst FeedbackDemo: FC = () => (\n <ShowcaseSection\n id=\"feedback\"\n title=\"Feedback\"\n caption=\"Tooltip, InfoTip, and formatted value examples for compact product UI.\"\n >\n <Surface\n variant=\"panel\"\n className=\"polli:flex polli:flex-col polli:gap-3\"\n >\n <Row label=\"InfoTip\">\n <span className=\"polli:inline-flex polli:items-center polli:text-sm polli:text-theme-text-strong\">\n Pollen balance\n <InfoTip content=\"A compact inline information trigger.\" />\n </span>\n </Row>\n <Row label=\"Tooltip\">\n <Tooltip\n content=\"Formatted with formatPollen()\"\n displayContents\n >\n <PaidChip size=\"lg\">\n {formatPollen(1234.5678)} Pollen\n </PaidChip>\n </Tooltip>\n <Tooltip\n content=\"Use triggerAs='span' around inline text.\"\n triggerAs=\"span\"\n >\n <span className=\"polli:cursor-help polli:text-sm polli:text-theme-text-strong polli:underline polli:decoration-dotted\">\n inline help\n </span>\n </Tooltip>\n </Row>\n </Surface>\n </ShowcaseSection>\n);\n\nconst modalities = [\n \"text\",\n \"image\",\n \"video\",\n \"audio\",\n \"realtime\",\n \"embedding\",\n] as const;\n\nconst ModuleRecipesDemo: FC = () => {\n return (\n <ShowcaseSection\n id=\"modules\"\n title=\"Shared Modules\"\n caption=\"Package-owned pieces used by product screens; host apps provide the data and flows.\"\n >\n <Surface\n variant=\"panel\"\n className=\"polli:flex polli:flex-col polli:gap-4\"\n >\n <Row label=\"Wallet markers\">\n <PaidChip>Paid</PaidChip>\n <TierChip>Tier</TierChip>\n <span className=\"polli:inline-flex polli:items-center polli:gap-2 polli:text-sm polli:text-theme-text-strong\">\n <WalletDot kind=\"paid\" />\n paid balance\n </span>\n <span className=\"polli:inline-flex polli:items-center polli:gap-2 polli:text-sm polli:text-theme-text-strong\">\n <WalletDot kind=\"tier\" />\n tier balance\n </span>\n </Row>\n <div className=\"polli:grid polli:grid-cols-[repeat(auto-fit,minmax(220px,1fr))] polli:gap-3\">\n <WalletBalanceCard\n kind=\"paid\"\n label=\"Paid\"\n value={formatPollen(24.812)}\n footer={\n <>\n +{formatPollen(2.1)}{\" \"}\n <span className=\"polli:font-medium polli:text-amber-800/70\">\n / 7d\n </span>\n </>\n }\n info={<InfoTip content=\"Paid wallet balance.\" />}\n />\n <WalletBalanceCard\n kind=\"tier\"\n label=\"Tier\"\n value={formatPollen(183.4)}\n footer={\n <>\n +{formatPollen(8)}{\" \"}\n <span className=\"polli:font-medium polli:text-amber-800/70\">\n / 7d\n </span>\n </>\n }\n info={<InfoTip content=\"Tier allowance balance.\" />}\n />\n </div>\n <Row label=\"ModalityButton\">\n {modalities.map((modality) => (\n <ModalityButton key={modality} category={modality}>\n {modality}\n </ModalityButton>\n ))}\n <ModalityButton category=\"unknown\" selected={false}>\n unknown\n </ModalityButton>\n <ModalityButton category=\"text\" disabled>\n disabled\n </ModalityButton>\n </Row>\n <Surface className=\"polli:flex polli:flex-col polli:gap-3\">\n <h3 className=\"polli:font-subheading polli:text-xl polli:text-theme-text-strong\">\n Auth feedback\n </h3>\n <AuthInfoCard title=\"Authorize\">\n <p className=\"polli:text-sm polli:text-theme-text-base\">\n Sign in to approve this request and return to the\n app.\n </p>\n </AuthInfoCard>\n <ErrorBanner>Authorization failed. Try again.</ErrorBanner>\n </Surface>\n </Surface>\n </ShowcaseSection>\n );\n};\n\nconst noop = () => undefined;\nconst noopSwitch = (_checked: boolean) => undefined;\nconst noopSelected = (_selected: string[]) => undefined;\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 { Dialog as ArkDialog } from \"@ark-ui/react/dialog\";\nimport { Portal } from \"@ark-ui/react/portal\";\nimport type { FC, ReactNode } 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 <ArkDialog.Root\n open={open}\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-gray-950/50\",\n backdropClassName,\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-4\",\n positionerClassName,\n )}\n >\n <ArkDialog.Content\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-white polli:shadow-lg\",\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\nexport const DialogTitle = ArkDialog.Title;\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 { CSSProperties, ReactNode } from \"react\";\nimport logoUrl from \"../../assets/logo.svg\";\nimport { Dialog } from \"../../primitives/Dialog.tsx\";\n\nconst authLogoMask: CSSProperties = {\n WebkitMask: `url(${logoUrl}) center / contain no-repeat`,\n mask: `url(${logoUrl}) center / contain no-repeat`,\n};\n\nexport type AuthModalProps = {\n children: ReactNode;\n dialog?: {\n label?: string;\n labelledBy?: string;\n };\n tone?: \"default\" | \"error\";\n};\n\nexport function AuthModal({\n children,\n dialog,\n tone = \"default\",\n}: AuthModalProps) {\n const borderClass =\n tone === \"error\"\n ? \"polli:border-intent-danger-border\"\n : \"polli:border-theme-border\";\n return (\n <Dialog\n open\n theme=\"amber\"\n showBackdrop={false}\n ariaLabel={dialog?.label}\n labelledBy={dialog?.labelledBy}\n positionerClassName=\"polli:items-start polli:overflow-y-auto polli:bg-theme-bg-pale\"\n contentClassName={`polli:bg-surface-white polli:border-2 ${borderClass} polli:rounded-lg polli:shadow-lg polli:max-w-xl polli:w-full polli:my-auto`}\n >\n {children}\n </Dialog>\n );\n}\n\nexport type AuthModalHeaderProps = {\n children?: ReactNode;\n};\n\nexport function AuthModalHeader({ children }: AuthModalHeaderProps) {\n const logo = (\n <a\n href=\"https://pollinations.ai\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"polli:block polli:shrink-0 polli:text-theme-text-strong\"\n aria-label=\"pollinations.ai\"\n >\n <span className=\"polli:sr-only\">pollinations.ai</span>\n <span\n aria-hidden=\"true\"\n className=\"polli:block polli:h-8 polli:w-8 polli:bg-current\"\n style={authLogoMask}\n />\n </a>\n );\n if (!children) {\n return (\n <div className=\"polli:flex polli:justify-start polli:px-6 polli:pt-6\">\n {logo}\n </div>\n );\n }\n return (\n <div className=\"polli:px-6 polli:pt-6 polli:pb-2\">\n <div className=\"polli:flex polli:items-center polli:justify-between polli:gap-3\">\n {logo}\n {children}\n </div>\n </div>\n );\n}\n\nexport function AuthModalLoading() {\n return (\n <AuthModal>\n <AuthModalHeader />\n <div className=\"polli:px-8 polli:pt-2 polli:pb-8 polli:text-center\">\n <p className=\"polli:text-theme-text-strong\">Loading...</p>\n </div>\n </AuthModal>\n );\n}\n\nexport function ErrorBanner({ children }: { children: ReactNode }) {\n return (\n <div className=\"polli:rounded-lg polli:border-2 polli:border-intent-danger-border polli:bg-intent-danger-bg-light polli:p-4\">\n <p className=\"polli:text-sm polli:text-intent-danger-text\">\n {children}\n </p>\n </div>\n );\n}\n\nexport type AuthInfoCardProps = {\n title?: string;\n titleId?: string;\n children: ReactNode;\n};\n\nexport function AuthInfoCard({\n title = \"Authorize\",\n titleId,\n children,\n}: AuthInfoCardProps) {\n return (\n <div className=\"polli:rounded-lg polli:border-2 polli:border-theme-border polli:bg-theme-bg-pale polli:p-4\">\n <p\n id={titleId}\n className=\"polli:mb-2 polli:font-body polli:text-xs polli:font-semibold polli:tracking-wide polli:text-theme-text-soft\"\n >\n {title}\n </p>\n {children}\n </div>\n );\n}\n","/**\n * Single source of truth for modality colors.\n *\n * Each modality (text/image/video/audio/realtime/embedding) gets one\n * page-theme hue, applied at the soft `-200/-900/-400` chip recipe.\n * Used in two places:\n * 1. The model-selection buttons in the API key creation flow.\n * 2. The static modality chips on the OAuth authorize screen.\n *\n * Interactive selection (model-picker) renders as `rounded-full` pills\n * aligned to the canonical Button. Static display (authorize summary)\n * renders as `rounded-lg` chips. Page-theme hues only — no rogue\n * indigo/rose.\n */\nexport type Modality =\n | \"text\"\n | \"image\"\n | \"video\"\n | \"audio\"\n | \"realtime\"\n | \"embedding\";\n\nexport type ModalityColorSet = {\n /** Selected/filled state: `bg + text + border` classes. */\n filled: string;\n /** Hover hint shown on the unselected button (subtle tint). */\n hover: string;\n /** Heading text colour for the category label. */\n text: string;\n};\n\n// No borders — chips and buttons in this system are borderless.\nexport const MODALITY_COLORS: Record<Modality, ModalityColorSet> = {\n text: {\n filled: \"polli:bg-blue-200 polli:text-blue-900\",\n hover: \"polli:hover:bg-blue-100 polli:hover:text-blue-900\",\n text: \"polli:text-blue-800\",\n },\n image: {\n filled: \"polli:bg-pink-200 polli:text-pink-900\",\n hover: \"polli:hover:bg-pink-100 polli:hover:text-pink-900\",\n text: \"polli:text-pink-800\",\n },\n video: {\n filled: \"polli:bg-teal-200 polli:text-teal-900\",\n hover: \"polli:hover:bg-teal-100 polli:hover:text-teal-900\",\n text: \"polli:text-teal-800\",\n },\n audio: {\n filled: \"polli:bg-violet-200 polli:text-violet-900\",\n hover: \"polli:hover:bg-violet-100 polli:hover:text-violet-900\",\n text: \"polli:text-violet-800\",\n },\n realtime: {\n filled: \"polli:bg-green-200 polli:text-green-900\",\n hover: \"polli:hover:bg-green-100 polli:hover:text-green-900\",\n text: \"polli:text-green-800\",\n },\n embedding: {\n filled: \"polli:bg-amber-200 polli:text-amber-900\",\n hover: \"polli:hover:bg-amber-100 polli:hover:text-amber-900\",\n text: \"polli:text-amber-800\",\n },\n};\n\n/** Map any human-typed category string to the canonical `Modality` key. */\nfunction normalize(category: string): Modality | null {\n const lower = category.toLowerCase();\n if (lower === \"images\") return \"image\";\n if (lower === \"embeddings\") return \"embedding\";\n if (\n lower === \"text\" ||\n lower === \"image\" ||\n lower === \"video\" ||\n lower === \"audio\" ||\n lower === \"realtime\" ||\n lower === \"embedding\"\n ) {\n return lower;\n }\n return null;\n}\n\nexport function getModalityColors(category: string): ModalityColorSet | null {\n const key = normalize(category);\n return key ? MODALITY_COLORS[key] : null;\n}\n","import type { FC, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { getModalityColors } from \"./colors.ts\";\n\nexport type ModalityButtonProps = {\n /** Modality key or category string (\"Text\", \"Images\", etc). */\n category?: string;\n /** Filled (modality hue) when true, muted gray when false. */\n selected?: boolean;\n onClick?: () => void;\n disabled?: boolean;\n children: ReactNode;\n};\n\n/**\n * Rounded-full pill button colored by modality. Single source of truth\n * for every interactive modality affordance — model picker, design\n * showcase, etc. Shape and recipe live here; consumers only supply\n * content + state.\n */\nexport const ModalityButton: FC<ModalityButtonProps> = ({\n category,\n selected = true,\n onClick,\n disabled,\n children,\n}) => {\n const colors = getModalityColors(category ?? \"\");\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n aria-pressed={selected}\n className={cn(\n \"polli:inline-flex polli:shrink-0 polli:items-center polli:gap-1 polli:rounded-full polli:px-3 polli:py-1 polli:text-left polli:text-sm polli:font-medium polli:leading-normal polli:transition-colors\",\n selected\n ? (colors?.filled ??\n \"polli:bg-gray-200 polli:text-gray-900\")\n : \"polli:bg-gray-100 polli:text-gray-600\",\n !disabled && !selected && colors?.hover,\n disabled\n ? \"polli:cursor-not-allowed polli:opacity-50\"\n : \"polli:cursor-pointer\",\n )}\n >\n {children}\n </button>\n );\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 = \"news\" | \"alpha\" | \"neutral\";\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-[oklch(0.935_0.06_158)] polli:text-[oklch(0.46_0.13_158)]\",\n alpha: \"polli:bg-[oklch(0.93_0.06_300)] polli:text-[oklch(0.42_0.18_300)]\",\n neutral:\n \"polli:border polli:border-gray-400/70 polli:bg-gray-100/80 polli:text-gray-900\",\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 type { FC } from \"react\";\nimport { cn } from \"../../lib/cn.ts\";\nimport { Chip, type ChipProps } from \"../../primitives/Chip.tsx\";\n\nexport type WalletChipProps = Omit<ChipProps, \"intent\">;\n\nexport const PaidChip: FC<WalletChipProps> = ({\n className,\n children,\n ...props\n}) => (\n <Chip {...props} className={cn(\"polli-wallet-chip-paid\", className)}>\n {children}\n </Chip>\n);\n\nexport const TierChip: FC<WalletChipProps> = ({\n className,\n children,\n ...props\n}) => (\n <Chip {...props} className={cn(\"polli-wallet-chip-tier\", className)}>\n {children}\n </Chip>\n);\n","// 5-digit budget for pollen display. Integer takes its space, decimals fill\n// the remainder (capped at 4), floor toward -infinity, trailing zeros stripped.\n// Integers needing >=6 digits switch to compact (K/M/B, 3 sig figs).\n// Decimal point and minus sign do not count toward the budget.\n\nconst BUDGET = 5;\nconst MAX_DECIMALS = 4;\nconst COMPACT_THRESHOLD = 100_000;\n\nfunction floorTo(value: number, decimals: number): number {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\nfunction formatCompact(value: number): string {\n const abs = Math.abs(value);\n const sign = value < 0 ? \"-\" : \"\";\n const [unit, scale] =\n abs >= 1e9\n ? ([\"B\", 1e9] as const)\n : abs >= 1e6\n ? ([\"M\", 1e6] as const)\n : ([\"K\", 1e3] as const);\n const ratio = abs / scale;\n const intDigits = Math.max(1, Math.floor(Math.log10(ratio)) + 1);\n const decimals = Math.max(0, 3 - intDigits);\n const floored = floorTo(ratio, decimals);\n return `${sign}${Number(floored.toFixed(decimals)).toString()}${unit}`;\n}\n\nexport function formatPollen(value: number): string {\n if (!Number.isFinite(value) || value === 0) return \"0\";\n\n const abs = Math.abs(value);\n\n if (abs >= COMPACT_THRESHOLD) return formatCompact(value);\n\n const intDigits = abs >= 1 ? Math.floor(Math.log10(abs)) + 1 : 1;\n const decimals = Math.min(MAX_DECIMALS, Math.max(0, BUDGET - intDigits));\n const floored = floorTo(value, decimals);\n if (floored === 0) return \"0\";\n return Number(floored.toFixed(decimals)).toString();\n}\n","import type { FC, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn.ts\";\n\ntype WalletBalanceKind = \"paid\" | \"tier\";\n\nconst walletPanelClasses: Record<WalletBalanceKind, string> = {\n paid: \"polli-wallet-panel-paid\",\n tier: \"polli-wallet-panel-tier\",\n};\n\nconst walletTextClasses: Record<WalletBalanceKind, string> = {\n paid: \"polli-wallet-text-paid\",\n tier: \"polli-wallet-text-tier\",\n};\n\nexport type WalletDotProps = {\n kind: WalletBalanceKind;\n className?: string;\n};\n\nexport const WalletDot: FC<WalletDotProps> = ({ kind, className }) => (\n <span\n className={cn(\n \"polli:h-2 polli:w-2 polli:rounded-full\",\n kind === \"paid\" ? \"polli-wallet-dot-paid\" : \"polli-wallet-dot-tier\",\n className,\n )}\n aria-hidden=\"true\"\n />\n);\n\nexport type WalletBalanceCardProps = {\n kind: WalletBalanceKind;\n label: ReactNode;\n value: ReactNode;\n info?: ReactNode;\n footer?: ReactNode;\n className?: string;\n};\n\nexport const WalletBalanceCard: FC<WalletBalanceCardProps> = ({\n kind,\n label,\n value,\n info,\n footer,\n className,\n}) => (\n <div\n className={cn(\n \"polli:rounded-xl polli:p-4\",\n walletPanelClasses[kind],\n className,\n )}\n >\n <span className=\"polli:flex polli:items-center polli:gap-2\">\n <WalletDot kind={kind} />\n <span className=\"polli:text-sm polli:font-bold polli:uppercase polli:tracking-wide polli:text-amber-900\">\n {label}\n </span>\n {info}\n </span>\n <div\n className={cn(\n \"polli-wallet-balance-value polli:mt-1 polli:font-bold polli:leading-none polli:tracking-tight polli:tabular-nums\",\n walletTextClasses[kind],\n )}\n >\n {value}\n </div>\n {footer && (\n <div className=\"polli:mt-1.5 polli:text-sm polli:font-bold polli:tabular-nums polli:text-green-700\">\n {footer}\n </div>\n )}\n </div>\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 small: \"polli:px-2 polli:pt-0.5 polli:pb-1\",\n medium: \"polli:px-4 polli:pt-1.5 polli:pb-2\",\n large: \"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-[oklch(0.88_0.075_25)] 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:inline-flex polli:items-center polli:justify-center polli:rounded-full polli:self-center polli:placeholder-green-950 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 || \"medium\"],\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 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 { 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 \"./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 primitive. 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: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 \"./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 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: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 { 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-surface-white 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 /** Replaces the default themed surface (e.g. a differently-coloured menu). */\n panelClassName?: string;\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 panelClassName,\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 panelClassName ?? 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 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 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 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 type { ThemeName } from \"../theme.ts\";\nimport { Button } from \"./Button.tsx\";\nimport { ExternalLinkIcon } from \"./icons/index.tsx\";\n\nexport type ExternalLinkButtonProps = {\n theme: ThemeName;\n href: string;\n size?: \"small\" | \"medium\" | \"large\";\n className?: string;\n children: ReactNode;\n};\n\nexport const ExternalLinkButton: FC<ExternalLinkButtonProps> = ({\n theme,\n href,\n size = \"medium\",\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","export { Field } from \"@ark-ui/react/field\";\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-[oklch(0.88_0.075_25)] \" +\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 className={cn(\n \"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 \"./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 { 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 className={cn(\n \"polli:px-3 polli:py-2 polli:border polli:rounded-lg\",\n \"polli:disabled:opacity-50 polli:disabled:cursor-not-allowed\",\n error ? \"polli:border-red-400\" : \"polli:border-gray-300\",\n hideNumberSteppers && \"polli-input-number-clean\",\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\";\nimport type { ThemeName } from \"../theme.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 /** Override the ambient cascade theme for this scroller's thumb. */\n theme?: ThemeName;\n /** Scroll direction. Default `y`. */\n axis?: ScrollAxis;\n /** Idle time before the thumb fades out, in ms. Default `2000`. */\n hideDelayMs?: number;\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 (\n { theme, axis = \"y\", hideDelayMs = 2000, 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 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, hideDelayMs);\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 }, [hideDelayMs]);\n\n return (\n <div\n {...rest}\n ref={setRef}\n data-theme={theme}\n className={cn(\n \"polli-scrollbar-subtle\",\n axisClasses[axis],\n className,\n )}\n >\n {children}\n </div>\n );\n },\n);\n\nScrollArea.displayName = \"ScrollArea\";\n","import type { FC } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\nimport { ChevronIcon } from \"./ChevronIcon.tsx\";\nimport { Dropdown } from \"./Dropdown.tsx\";\nimport { ScrollArea } from \"./ScrollArea.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 align?: \"start\" | \"end\";\n label?: string;\n theme: ThemeName;\n};\n\nconst TRIGGER_BASE =\n \"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: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 { FC } from \"react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport {\n addUtcDays,\n formatPeriodLabel,\n isPeriodSelectable,\n type PeriodGranularity,\n type PeriodSelection,\n periodFromDate,\n periodToWindow,\n startOfUtcDay,\n} from \"../lib/period.ts\";\nimport type { ThemeName } from \"../theme.ts\";\nimport { ChevronIcon } from \"./ChevronIcon.tsx\";\nimport { Dropdown } from \"./Dropdown.tsx\";\nimport { TabButton } from \"./TabButton.tsx\";\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: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 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 { granularity, period } = value;\n\n useEffect(() => {\n setViewDate(periodDate({ granularity, period }));\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\n const setGranularity = (granularity: PeriodGranularity) => {\n onChange(periodFromDate(granularity, periodDate(value)));\n };\n\n const selectDate = (date: Date) => {\n onChange(periodFromDate(value.granularity, date));\n setOpen(false);\n };\n\n const viewLabel =\n value.granularity === \"month\"\n ? String(viewDate.getUTCFullYear())\n : viewDate.toLocaleDateString(\"en-US\", {\n timeZone: \"UTC\",\n month: \"long\",\n year: \"numeric\",\n });\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-[304px] polli:rounded-xl polli:p-3\"\n trigger={(isOpen) => (\n <button\n type=\"button\"\n aria-label={`Select period, current ${formatPeriodLabel(value)}`}\n className={cn(\n \"polli:inline-flex polli:min-w-[150px] polli:items-center polli:justify-between polli:gap-2 polli:rounded-full polli:border polli:px-4 polli:pt-1.5 polli:pb-2 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>{formatPeriodLabel(value)}</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={\n value.granularity === \"month\"\n ? \"Previous year\"\n : \"Previous month\"\n }\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-sm polli:font-bold polli:text-theme-text-base\">\n {viewLabel}\n </div>\n <button\n type=\"button\"\n aria-label={\n value.granularity === \"month\"\n ? \"Next year\"\n : \"Next month\"\n }\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:rounded-lg polli:px-3 polli:py-2 polli:text-xs 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-gray-700 polli:hover:bg-theme-bg-subtle\",\n !selectable &&\n \"polli:cursor-not-allowed polli:text-gray-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-micro polli:font-bold polli:uppercase polli:text-gray-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 week ${formatPeriodLabel(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:aspect-square polli:rounded-lg polli:text-xs polli:font-medium polli:transition-colors polli:duration-150\",\n !inCurrentMonth &&\n \"polli:text-gray-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-gray-700 polli:hover:bg-theme-bg-subtle\",\n !selectable &&\n \"polli:cursor-not-allowed polli:text-gray-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","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?: \"medium\" | \"small\";\n ariaLabel?: string;\n disabled?: boolean;\n className?: string;\n};\n\nconst sizeClasses = {\n medium: \"polli:px-4 polli:py-1.5 polli:text-base\",\n small: \"polli:px-3 polli:py-1.5 polli:text-sm\",\n} as const;\n\nexport const TabButton: FC<TabButtonProps> = ({\n theme,\n active,\n onClick,\n children,\n size = \"medium\",\n ariaLabel,\n disabled = false,\n className,\n}) => {\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:inline-flex polli:items-center polli:justify-center polli:rounded-full polli:border polli:font-medium polli:leading-normal polli:transition-all polli:duration-200\",\n active\n ? \"polli:bg-theme-bg-active polli:text-theme-text-strong polli:border-theme-border\"\n : \"polli:bg-theme-bg-subtle polli:text-theme-text-base polli:border-theme-border polli:hover:bg-theme-bg-active\",\n disabled && \"polli:cursor-not-allowed polli:opacity-50\",\n sizeClasses[size],\n className,\n )}\n >\n {children}\n </button>\n );\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 { FC, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\nimport { Surface } from \"./Surface.tsx\";\n\nexport type SectionProps = {\n title: string;\n theme: ThemeName;\n id?: string;\n framed?: boolean;\n action?: ReactNode;\n actionClassName?: string;\n children: ReactNode;\n className?: string;\n};\n\nexport const Section: FC<SectionProps> = ({\n title,\n theme,\n id,\n framed = false,\n action,\n actionClassName,\n children,\n className,\n}) => (\n <section id={id} className={cn(\"scroll-mt-10 space-y-2\", className)}>\n <div className=\"flex flex-wrap items-center justify-between gap-3 px-1\">\n <h2\n data-theme={theme}\n className=\"text-left text-lg font-semibold sm:text-xl text-theme-text-strong\"\n >\n {title}\n </h2>\n {action && (\n <div className={cn(\"shrink-0\", actionClassName)}>{action}</div>\n )}\n </div>\n {framed ? (\n <Surface variant=\"panel\" theme={theme}>\n {children}\n </Surface>\n ) : (\n children\n )}\n </section>\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, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.ts\";\nimport type { ThemeName } from \"../theme.ts\";\n\nexport type StatCardProps = {\n label: ReactNode;\n value: ReactNode;\n detail?: ReactNode;\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 theme,\n className,\n labelClassName,\n valueClassName,\n detailClassName,\n}) => (\n <div data-theme={theme} className={cn(\"polli:text-sm\", className)}>\n <div\n className={cn(\n \"polli:text-micro polli:font-bold polli:uppercase polli:tracking-wide polli:text-theme-text-strong\",\n labelClassName,\n )}\n >\n {label}\n </div>\n <div\n className={cn(\n \"polli:mt-1 polli:min-h-8 polli:break-words polli:text-2xl polli:font-bold polli:leading-tight polli:tabular-nums polli:text-theme-text-strong\",\n valueClassName,\n )}\n >\n {value}\n </div>\n {detail && (\n <div\n className={cn(\n \"polli:mt-2 polli:text-xs polli:text-theme-text-soft\",\n detailClassName,\n )}\n >\n {detail}\n </div>\n )}\n </div>\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-gray-200\",\n on: \"polli:bg-[oklch(0.88_0.12_158)]\",\n invalid: \"polli:bg-[oklch(0.88_0.12_25)]\",\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: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-white polli:shadow-sm polli:transition-transform\",\n checked ? \"polli:translate-x-6\" : \"polli:translate-x-1\",\n )}\n />\n </button>\n );\n};\n","/**\n * The six 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 \"teal\",\n \"violet\",\n \"green\",\n] as const;\n\nexport type ThemeName = (typeof themes)[number];\n\n/**\n * Representative brand color per theme — the pale `--polli-color-bg-pale`\n * token expressed as hex — for non-CSS consumers (build tools that tint the\n * logo, `theme-color` meta, manifests). Only verified values are listed;\n * extend as more themes are adopted by apps.\n */\nexport const themeColors: Partial<Record<ThemeName, string>> = {\n amber: \"#FEF3C7\",\n blue: \"#DBEAFE\",\n};\n"],"mappings":"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","names":["import_react","start","yearText","ArkDialog","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","intentClasses","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_portal","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","intentClasses","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","sizeClasses","import_jsx_runtime","addUtcMonths","start","granularity","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","theme"]}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { FC, ReactNode } from 'react';
|
|
2
|
-
import { T as ThemeName } from '../theme-DfHMjWB7.cjs';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Package-owned design primitive showcase.
|
|
6
|
-
*
|
|
7
|
-
* This component renders package primitives, tokens, and domain recipes only.
|
|
8
|
-
* App-specific charts, model recipes, routes, and copy belong in host apps.
|
|
9
|
-
*/
|
|
10
|
-
type DesignShowcaseProps = {
|
|
11
|
-
headerSlot?: ReactNode;
|
|
12
|
-
hideHeader?: boolean;
|
|
13
|
-
hideThemeTabs?: boolean;
|
|
14
|
-
theme?: ThemeName;
|
|
15
|
-
onThemeChange?: (theme: ThemeName) => void;
|
|
16
|
-
};
|
|
17
|
-
declare const DesignShowcase: FC<DesignShowcaseProps>;
|
|
18
|
-
|
|
19
|
-
export { DesignShowcase };
|
package/dist/showcase/index.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { FC, ReactNode } from 'react';
|
|
2
|
-
import { T as ThemeName } from '../theme-DfHMjWB7.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Package-owned design primitive showcase.
|
|
6
|
-
*
|
|
7
|
-
* This component renders package primitives, tokens, and domain recipes only.
|
|
8
|
-
* App-specific charts, model recipes, routes, and copy belong in host apps.
|
|
9
|
-
*/
|
|
10
|
-
type DesignShowcaseProps = {
|
|
11
|
-
headerSlot?: ReactNode;
|
|
12
|
-
hideHeader?: boolean;
|
|
13
|
-
hideThemeTabs?: boolean;
|
|
14
|
-
theme?: ThemeName;
|
|
15
|
-
onThemeChange?: (theme: ThemeName) => void;
|
|
16
|
-
};
|
|
17
|
-
declare const DesignShowcase: FC<DesignShowcaseProps>;
|
|
18
|
-
|
|
19
|
-
export { DesignShowcase };
|