@pollinations/ui 0.1.0-alpha.0 → 0.1.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/README.md +151 -87
  2. package/dist/Button-CO3Dpbkj.d.cts +29 -0
  3. package/dist/Button-CO3Dpbkj.d.ts +29 -0
  4. package/dist/Chip-v-ADv6cz.d.cts +18 -0
  5. package/dist/Chip-v-ADv6cz.d.ts +18 -0
  6. package/dist/Dialog-yXzIFrDg.d.cts +63 -0
  7. package/dist/Dialog-yXzIFrDg.d.ts +63 -0
  8. package/dist/app-user-menu/sdk.cjs +893 -0
  9. package/dist/app-user-menu/sdk.cjs.map +1 -0
  10. package/dist/{compositions/app-user.d.cts → app-user-menu/sdk.d.cts} +6 -7
  11. package/dist/{compositions/app-user.d.ts → app-user-menu/sdk.d.ts} +6 -7
  12. package/dist/app-user-menu/sdk.js +872 -0
  13. package/dist/app-user-menu/sdk.js.map +1 -0
  14. package/dist/app.css +7 -32
  15. package/dist/auth/index.cjs +1346 -76
  16. package/dist/auth/index.cjs.map +1 -1
  17. package/dist/auth/index.d.cts +88 -6
  18. package/dist/auth/index.d.ts +88 -6
  19. package/dist/auth/index.js +1343 -75
  20. package/dist/auth/index.js.map +1 -1
  21. package/dist/auth/sdk.cjs +78 -60
  22. package/dist/auth/sdk.cjs.map +1 -1
  23. package/dist/auth/sdk.d.cts +2 -15
  24. package/dist/auth/sdk.d.ts +2 -15
  25. package/dist/auth/sdk.js +77 -57
  26. package/dist/auth/sdk.js.map +1 -1
  27. package/dist/brand/lockup-horizontal-black.png +0 -0
  28. package/dist/brand/lockup-horizontal-black.svg +4 -0
  29. package/dist/brand/lockup-horizontal-white.png +0 -0
  30. package/dist/brand/lockup-horizontal-white.svg +4 -0
  31. package/dist/brand/lockup-horizontal.svg +1 -0
  32. package/dist/brand/lockup-stacked-black.png +0 -0
  33. package/dist/brand/lockup-stacked-black.svg +4 -0
  34. package/dist/brand/lockup-stacked-white.png +0 -0
  35. package/dist/brand/lockup-stacked-white.svg +4 -0
  36. package/dist/brand/lockup-stacked.svg +4 -0
  37. package/dist/brand/mark-black.png +0 -0
  38. package/dist/brand/mark-black.svg +3 -0
  39. package/dist/brand/mark-white.png +0 -0
  40. package/dist/brand/mark-white.svg +3 -0
  41. package/dist/brand/mark.svg +1 -0
  42. package/dist/brand/polli/polli-lockup-horizontal-black.png +0 -0
  43. package/dist/brand/polli/polli-lockup-horizontal-white.png +0 -0
  44. package/dist/brand/polli/polli-lockup-stacked-black.png +0 -0
  45. package/dist/brand/polli/polli-lockup-stacked-white.png +0 -0
  46. package/dist/brand/polli/polli.png +0 -0
  47. package/dist/brand/wordmark-black.png +0 -0
  48. package/dist/brand/wordmark-black.svg +1 -0
  49. package/dist/brand/wordmark-white.png +0 -0
  50. package/dist/brand/wordmark-white.svg +1 -0
  51. package/dist/brand/wordmark.svg +1 -0
  52. package/dist/fonts/geist-pixel-square.woff2 +0 -0
  53. package/dist/gen/index.cjs +658 -0
  54. package/dist/gen/index.cjs.map +1 -0
  55. package/dist/gen/index.d.cts +80 -0
  56. package/dist/gen/index.d.ts +80 -0
  57. package/dist/gen/index.js +630 -0
  58. package/dist/gen/index.js.map +1 -0
  59. package/dist/index.browser.min.js +2 -0
  60. package/dist/index.browser.min.js.map +1 -0
  61. package/dist/index.cjs +3847 -1490
  62. package/dist/index.cjs.map +1 -1
  63. package/dist/index.d.cts +632 -218
  64. package/dist/index.d.ts +632 -218
  65. package/dist/index.js +3744 -1450
  66. package/dist/index.js.map +1 -1
  67. package/dist/licenses/Geist-OFL.txt +93 -0
  68. package/dist/markdown.cjs +821 -0
  69. package/dist/markdown.cjs.map +1 -0
  70. package/dist/markdown.d.cts +16 -0
  71. package/dist/markdown.d.ts +16 -0
  72. package/dist/markdown.js +792 -0
  73. package/dist/markdown.js.map +1 -0
  74. package/dist/styles.css +1 -1
  75. package/dist/theme.css +92 -0
  76. package/dist/wallet/index.cjs +258 -45
  77. package/dist/wallet/index.cjs.map +1 -1
  78. package/dist/wallet/index.d.cts +29 -7
  79. package/dist/wallet/index.d.ts +29 -7
  80. package/dist/wallet/index.js +257 -45
  81. package/dist/wallet/index.js.map +1 -1
  82. package/package.json +104 -102
  83. package/dist/Button-BvLF_Km2.d.cts +0 -26
  84. package/dist/Button-DQAZzvyQ.d.ts +0 -26
  85. package/dist/Chip-C5impfYd.d.ts +0 -20
  86. package/dist/Chip-SM52sUbZ.d.cts +0 -20
  87. package/dist/assets/logo-wordmark.svg +0 -1
  88. package/dist/assets/logo.svg +0 -4
  89. package/dist/compositions/app-user.cjs +0 -497
  90. package/dist/compositions/app-user.cjs.map +0 -1
  91. package/dist/compositions/app-user.js +0 -469
  92. package/dist/compositions/app-user.js.map +0 -1
  93. package/dist/modality/index.cjs +0 -86
  94. package/dist/modality/index.cjs.map +0 -1
  95. package/dist/modality/index.d.cts +0 -26
  96. package/dist/modality/index.d.ts +0 -26
  97. package/dist/modality/index.js +0 -59
  98. package/dist/modality/index.js.map +0 -1
  99. package/dist/models/index.cjs +0 -508
  100. package/dist/models/index.cjs.map +0 -1
  101. package/dist/models/index.d.cts +0 -22
  102. package/dist/models/index.d.ts +0 -22
  103. package/dist/models/index.js +0 -486
  104. package/dist/models/index.js.map +0 -1
  105. package/dist/theme-VMRlhqST.d.cts +0 -9
  106. package/dist/theme-VMRlhqST.d.ts +0 -9
  107. package/dist/wallet/sdk.cjs +0 -206
  108. package/dist/wallet/sdk.cjs.map +0 -1
  109. package/dist/wallet/sdk.d.cts +0 -33
  110. package/dist/wallet/sdk.d.ts +0 -33
  111. package/dist/wallet/sdk.js +0 -175
  112. package/dist/wallet/sdk.js.map +0 -1
package/dist/index.d.cts CHANGED
@@ -1,59 +1,149 @@
1
- import * as react from 'react';
2
- import { FC, ComponentPropsWithoutRef, ReactNode, ButtonHTMLAttributes, PropsWithChildren, CSSProperties } from 'react';
3
- export { B as Button, a as ButtonProps } from './Button-BvLF_Km2.cjs';
4
- export { C as Chip } from './Chip-SM52sUbZ.cjs';
5
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
6
- import { Dialog as Dialog$1 } from '@ark-ui/react/dialog';
7
- import { T as ThemeName } from './theme-VMRlhqST.cjs';
8
- export { t as themes } from './theme-VMRlhqST.cjs';
2
+ import * as react from 'react';
3
+ import { ReactNode, CSSProperties, FC, ComponentPropsWithoutRef, RefObject, ButtonHTMLAttributes, PropsWithChildren, ComponentType, ElementType } from 'react';
4
+ import { S as ScrollAreaProps, D as DialogProps } from './Dialog-yXzIFrDg.cjs';
5
+ export { a as Dialog, b as DialogBody, c as DialogBodyProps, d as DialogDescription, e as DialogFooter, f as DialogFooterProps, g as DialogHeader, h as DialogHeaderProps, i as DialogTitle, j as ScrollArea } from './Dialog-yXzIFrDg.cjs';
6
+ import { B as ButtonProps, a as ButtonAppearance } from './Button-CO3Dpbkj.cjs';
7
+ export { b as Button } from './Button-CO3Dpbkj.cjs';
8
+ export { C as Chip } from './Chip-v-ADv6cz.cjs';
9
9
  export { Field } from '@ark-ui/react/field';
10
+ import '@ark-ui/react/dialog';
10
11
 
11
- /** Class merge for apps consuming the unprefixed Tailwind bridge in app.css. */
12
- declare function cn(...inputs: (string | undefined | null | false)[]): string;
13
-
14
- type RejectReason = "type" | "size" | "count";
15
- type RejectedFile = {
16
- file: File;
17
- reason: RejectReason;
12
+ type DropdownProps = {
13
+ /** Trigger element; receives the current open state (e.g. to rotate a chevron). */
14
+ trigger: (open: boolean) => ReactNode;
15
+ /** Panel content. As a function, receives `close` to dismiss after a selection. */
16
+ children: ReactNode | ((close: () => void) => ReactNode);
17
+ /** Panel placement relative to the trigger. */
18
+ align?: "start" | "end";
19
+ side?: "top" | "bottom";
20
+ /** Controlled open state. Omit to let the Dropdown manage its own. */
21
+ open?: boolean;
22
+ /** Render inside the parent dialog so its focus and accessibility scope includes the menu. */
23
+ portalled?: boolean;
24
+ onOpenChange?: (open: boolean) => void;
25
+ /** Appended after the surface (widths, padding, max-height…). */
26
+ className?: string;
27
+ /** Theme variables for portaled content that cannot inherit from its trigger. */
28
+ panelStyle?: CSSProperties;
18
29
  };
30
+ declare const Dropdown: FC<DropdownProps>;
19
31
 
20
- type PeriodGranularity = "day" | "week" | "month";
21
- type PeriodSelection = {
22
- granularity: PeriodGranularity;
23
- period: string;
32
+ type AccountIdentityProps = {
33
+ name: string;
34
+ avatarUrl?: string | null;
35
+ secondaryContent?: ReactNode;
36
+ /** Optional dashboard destination, owned by the caller. Opens in a new tab. */
37
+ dashboardHref?: string;
38
+ className?: string;
39
+ };
40
+ declare function AccountIdentity({ name, avatarUrl, secondaryContent, dashboardHref, className, }: AccountIdentityProps): react_jsx_runtime.JSX.Element;
41
+ type AccountMenuProps = AccountIdentityProps & {
42
+ /** The caller owns navigation, permissions and sign-out behavior. */
43
+ children: DropdownProps["children"];
44
+ menuClassName?: string;
45
+ side?: "top" | "bottom";
46
+ menuLabel?: string;
24
47
  };
25
- declare function currentPeriod(): PeriodSelection;
26
- declare function getPeriodBucketKeys(selection: PeriodSelection): string[];
27
- declare function periodBucketKeyToDate(bucketKey: string, granularity: PeriodGranularity): Date;
28
-
29
48
  /**
30
- * Locks page scroll while enabled and restores the original overflow values on
31
- * cleanup.
49
+ * With `dashboardHref` the avatar is a link and the name/chevron open the
50
+ * menu; without one the whole pill is the trigger.
32
51
  */
33
- declare function useScrollLock(enabled?: boolean): void;
52
+ declare function AccountMenu({ name, avatarUrl, dashboardHref, secondaryContent, children, className, menuClassName, side, menuLabel, }: AccountMenuProps): react_jsx_runtime.JSX.Element;
34
53
 
35
- type AlertIntent = "info" | "success" | "warning" | "danger";
36
- type AlertProps = ComponentPropsWithoutRef<"div"> & {
54
+ type AlertIntent = "info" | "advisory" | "warning" | "danger";
55
+ type AlertProps = Omit<ComponentPropsWithoutRef<"div">, "title"> & {
37
56
  intent?: AlertIntent;
38
57
  title?: ReactNode;
39
58
  };
40
59
  declare const Alert: FC<AlertProps>;
41
60
 
42
- type ButtonGroupProps = ComponentPropsWithoutRef<"div"> & {
43
- wrap?: boolean;
61
+ type ScrollTargetRef = RefObject<HTMLElement | null>;
62
+ type AppHeaderProps = {
63
+ children?: ReactNode;
64
+ navLabel: string;
65
+ autoHide?: boolean;
66
+ scrollTargetRef?: ScrollTargetRef;
67
+ brandHref?: string;
68
+ brandLabel?: string;
69
+ className?: string;
70
+ innerClassName?: string;
71
+ navClassName?: string;
44
72
  };
45
- declare const ButtonGroup: FC<ButtonGroupProps>;
73
+ declare function AppHeader({ children, navLabel, autoHide, scrollTargetRef, brandHref, brandLabel, className, innerClassName, navClassName, }: AppHeaderProps): react_jsx_runtime.JSX.Element;
46
74
 
47
- type ChevronIconProps = {
48
- /** Rotate 180° when expanded/open. */
49
- expanded?: boolean;
75
+ type CalloutProps = {
76
+ title: ReactNode;
77
+ body: ReactNode;
78
+ children: ReactNode;
79
+ tone?: "theme" | "dark";
80
+ className?: string;
81
+ };
82
+ /** Prominent closing panel with a title, supporting copy, and actions. */
83
+ declare function Callout({ title, body, children, tone, className, }: CalloutProps): react_jsx_runtime.JSX.Element;
84
+
85
+ type ChatConversationProps = Omit<ScrollAreaProps, "children" | "className"> & {
86
+ children: ReactNode;
50
87
  className?: string;
88
+ viewportClassName?: string;
89
+ showScrollButton?: boolean;
90
+ onScrollToBottom?: () => void;
91
+ scrollButtonLabel?: string;
51
92
  };
52
93
  /**
53
- * Canonical chevron used for collapsibles, dropdown triggers, and select pills
54
- * across the app. One icon everywhere.
94
+ * Scrollable chat transcript with an optional jump-to-latest control.
95
+ * Message data and streaming remain the consumer's responsibility.
55
96
  */
56
- declare const ChevronIcon: FC<ChevronIconProps>;
97
+ declare const ChatConversation: react.ForwardRefExoticComponent<Omit<ScrollAreaProps, "className" | "children"> & {
98
+ children: ReactNode;
99
+ className?: string;
100
+ viewportClassName?: string;
101
+ showScrollButton?: boolean;
102
+ onScrollToBottom?: () => void;
103
+ scrollButtonLabel?: string;
104
+ } & react.RefAttributes<HTMLDivElement>>;
105
+ type ChatConversationContentProps = ComponentPropsWithoutRef<"div">;
106
+ declare function ChatConversationContent({ className, ...props }: ChatConversationContentProps): react_jsx_runtime.JSX.Element;
107
+
108
+ type ChatMessageRole = "user" | "assistant" | "system";
109
+ type ChatMessageProps = ComponentPropsWithoutRef<"article"> & {
110
+ from: ChatMessageRole;
111
+ };
112
+ /** Protocol-neutral message surface inspired by AI Elements' Message suite. */
113
+ declare function ChatMessage({ from, className, children, ...props }: ChatMessageProps): react_jsx_runtime.JSX.Element;
114
+ type ChatMessageHeaderProps = ComponentPropsWithoutRef<"header"> & {
115
+ from: ChatMessageRole;
116
+ label?: ReactNode;
117
+ icon?: ReactNode;
118
+ };
119
+ declare function ChatMessageHeader({ from, label, icon, className, ...props }: ChatMessageHeaderProps): react_jsx_runtime.JSX.Element;
120
+ type ChatMessageContentProps = ComponentPropsWithoutRef<"div">;
121
+ declare function ChatMessageContent({ className, ...props }: ChatMessageContentProps): react_jsx_runtime.JSX.Element;
122
+ type ChatMessageActionsProps = ComponentPropsWithoutRef<"footer">;
123
+ declare function ChatMessageActions({ className, ...props }: ChatMessageActionsProps): react_jsx_runtime.JSX.Element;
124
+
125
+ type ChatPromptInputProps = ComponentPropsWithoutRef<"fieldset">;
126
+ /**
127
+ * Composable prompt shell. Put attachments or controls before the textarea and
128
+ * actions in ChatPromptInputFooter; submission stays owned by the parent form.
129
+ */
130
+ declare function ChatPromptInput({ className, ...props }: ChatPromptInputProps): react_jsx_runtime.JSX.Element;
131
+ declare const ChatPromptTextarea: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>, "ref"> & {
132
+ error?: boolean;
133
+ } & react.RefAttributes<HTMLTextAreaElement>>;
134
+ type ChatPromptInputFooterProps = ComponentPropsWithoutRef<"div"> & {
135
+ start?: ReactNode;
136
+ end?: ReactNode;
137
+ };
138
+ declare function ChatPromptInputFooter({ start, end, children, className, ...props }: ChatPromptInputFooterProps): react_jsx_runtime.JSX.Element;
139
+
140
+ type CodeBlockOwnProps = {
141
+ code: string;
142
+ codeClassName?: string;
143
+ language?: string;
144
+ };
145
+ type CodeBlockProps = CodeBlockOwnProps & Omit<ComponentPropsWithoutRef<"div">, keyof CodeBlockOwnProps | "children">;
146
+ declare const CodeBlock: FC<CodeBlockProps>;
57
147
 
58
148
  type CollapsibleProps = {
59
149
  /** Header content (label, hint, etc). */
@@ -62,8 +152,11 @@ type CollapsibleProps = {
62
152
  onToggle: () => void;
63
153
  children: ReactNode;
64
154
  disabled?: boolean;
65
- /** Outer wrapper classes — base bg, border, etc. */
155
+ /** Outer wrapper classes — border, rounding, etc. Keep it bg-free if the
156
+ * expanded panel should stay transparent; put any fill on the trigger. */
66
157
  wrapperClassName?: string;
158
+ /** Trigger/header base classes (e.g. a selected background). */
159
+ triggerClassName?: string;
67
160
  /** Trigger hover classes. Defaults to `polli:hover:bg-theme-bg-active`. */
68
161
  hoverClassName?: string;
69
162
  /** Trigger focus classes. */
@@ -74,7 +167,7 @@ type CollapsibleProps = {
74
167
  ariaLabel?: string;
75
168
  };
76
169
  /**
77
- * Collapsible row primitive. One chevron, one hover/rounded behaviour for
170
+ * Collapsible row composition. One chevron, one hover/rounded behaviour for
78
171
  * every collapsible in the UI. Use this for any "click to reveal nested
79
172
  * content" UI — nested settings, grouped controls, optional details.
80
173
  *
@@ -83,78 +176,148 @@ type CollapsibleProps = {
83
176
  */
84
177
  declare const Collapsible: FC<CollapsibleProps>;
85
178
 
179
+ type ConfirmIntent = "danger" | "info" | "neutral" | "commit";
180
+ type ConfirmationDialogProps = {
181
+ open: boolean;
182
+ title: ReactNode;
183
+ /** Short explanation rendered as body text. */
184
+ description?: ReactNode;
185
+ /** Extra body content below the description (alerts, inputs). */
186
+ children?: ReactNode;
187
+ confirmLabel: ReactNode;
188
+ /** Confirm button recipe; also picks the default confirm icon. */
189
+ intent?: ConfirmIntent;
190
+ /** Override the confirm icon when the action is not a plain delete/confirm. */
191
+ confirmIcon?: ReactNode;
192
+ confirmDisabled?: boolean;
193
+ cancelDisabled?: boolean;
194
+ onConfirm: () => void;
195
+ onCancel: () => void;
196
+ size?: DialogProps["size"];
197
+ };
198
+ /** One floating Cancel + confirm action for every yes/no dialog. */
199
+ declare function ConfirmationDialog({ open, title, description, children, confirmLabel, intent, confirmIcon, confirmDisabled, cancelDisabled, onConfirm, onCancel, size, }: ConfirmationDialogProps): react_jsx_runtime.JSX.Element;
200
+
201
+ type ContentHeaderProps = {
202
+ eyebrow: ReactNode;
203
+ title: ReactNode;
204
+ subtitle?: ReactNode;
205
+ action?: ReactNode;
206
+ variant?: "page" | "section";
207
+ className?: string;
208
+ };
209
+ /** Shared page/section heading rhythm with an optional trailing action. */
210
+ declare function ContentHeader({ eyebrow, title, subtitle, action, variant, className, }: ContentHeaderProps): react_jsx_runtime.JSX.Element;
211
+
86
212
  type CopyValue = string | (() => string | Promise<string>);
87
213
  type CopyButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children" | "className" | "onClick" | "type" | "value"> & {
88
214
  value: CopyValue;
89
215
  children: ReactNode | ((copied: boolean) => ReactNode);
90
216
  copiedTimeoutMs?: number;
91
217
  tooltip?: ReactNode;
218
+ tooltipAlign?: "start" | "center";
219
+ tooltipClampToViewport?: boolean;
220
+ tooltipMaxWidth?: number;
92
221
  copiedTooltip?: ReactNode;
93
222
  tooltipClassName?: string;
94
223
  className?: string | ((copied: boolean) => string);
224
+ variant?: "plain" | "button";
225
+ /** Button intent, used with `variant="button"`. */
226
+ intent?: ButtonProps<"button">["intent"];
95
227
  onCopied?: () => void;
96
228
  onCopyError?: (error: unknown) => void;
97
229
  };
98
- declare function CopyButton({ value, children, copiedTimeoutMs, tooltip, copiedTooltip, tooltipClassName, className, onCopied, onCopyError, ...buttonProps }: CopyButtonProps): react_jsx_runtime.JSX.Element;
230
+ declare function CopyButton({ value, children, copiedTimeoutMs, tooltip, tooltipAlign, tooltipClampToViewport, tooltipMaxWidth, copiedTooltip, tooltipClassName, className, variant, intent, onCopied, onCopyError, ...buttonProps }: CopyButtonProps): react_jsx_runtime.JSX.Element;
99
231
 
100
- declare const sizeClasses: {
101
- readonly sm: "polli:max-w-md";
102
- readonly md: "polli:max-w-xl";
103
- readonly lg: "polli:max-w-2xl";
232
+ type CopyFieldProps = Pick<CopyButtonProps, "value" | "onCopied" | "onCopyError" | "copiedTimeoutMs"> & {
233
+ /** Accessible name, e.g. "Copy secret key". */
234
+ label: string;
235
+ /** What to show; defaults to the value itself (lists pass a truncated form). */
236
+ display?: ReactNode;
237
+ className?: string;
104
238
  };
105
- type DialogProps = {
106
- open: boolean;
107
- onOpenChange?: (open: boolean) => void;
108
- trigger?: ReactNode;
109
- triggerAsChild?: boolean;
110
- triggerClassName?: string;
111
- title?: ReactNode;
112
- titleClassName?: string;
113
- ariaLabel?: string;
114
- labelledBy?: string;
115
- theme?: ThemeName;
116
- size?: keyof typeof sizeClasses;
117
- showBackdrop?: boolean;
118
- backdropClassName?: string;
119
- positionerClassName?: string;
120
- contentClassName?: string;
121
- children: ReactNode;
239
+ /**
240
+ * A value the user copies but never edits: looks like a field, behaves like a
241
+ * button. The whole surface copies on click; the end icon confirms.
242
+ */
243
+ declare function CopyField({ value, label, display, className, ...copy }: CopyFieldProps): react_jsx_runtime.JSX.Element;
244
+
245
+ type InputProps = React.ComponentPropsWithoutRef<"input"> & {
246
+ error?: boolean;
247
+ hideNumberSteppers?: boolean;
122
248
  };
123
- declare const Dialog: FC<DialogProps>;
124
- declare const DialogTitle: react.ForwardRefExoticComponent<Dialog$1.TitleProps & react.RefAttributes<HTMLHeadingElement>>;
249
+ declare const Input: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref"> & {
250
+ error?: boolean;
251
+ hideNumberSteppers?: boolean;
252
+ } & react.RefAttributes<HTMLInputElement>>;
125
253
 
126
- type DropdownProps = {
127
- theme: ThemeName;
128
- /** Trigger element; receives the current open state (e.g. to rotate a chevron). */
129
- trigger: (open: boolean) => ReactNode;
130
- /** Panel content. As a function, receives `close` to dismiss after a selection. */
131
- children: ReactNode | ((close: () => void) => ReactNode);
132
- /** Panel placement relative to the trigger. */
254
+ type EditableComboboxProps = Omit<InputProps, "onChange" | "value"> & {
255
+ value: string;
256
+ options: string[];
257
+ onChange: (value: string) => void;
258
+ emptyMessage?: string;
133
259
  align?: "start" | "end";
134
- /** Controlled open state. Omit to let the Dropdown manage its own. */
135
260
  open?: boolean;
136
261
  onOpenChange?: (open: boolean) => void;
137
- /** Appended after the surface (widths, padding, max-height…). */
138
- className?: string;
262
+ /** Controlled filter inputs can keep incomplete selections open. */
263
+ closeOnSelect?: boolean;
264
+ /**
265
+ * Content rendered inside the input shell before the text field. Enables
266
+ * the wrapped shell layout and replaces the standalone chevron trigger.
267
+ */
268
+ startContent?: ReactNode;
269
+ /** Optional class for the suggestions panel. */
270
+ contentClassName?: string;
139
271
  };
140
- declare const Dropdown: FC<DropdownProps>;
141
-
142
- type BaseDropdownItemProps = {
143
- className?: string;
272
+ type EditableComboboxTokenProps = Omit<ComponentPropsWithoutRef<"button">, "children" | "type"> & {
273
+ label: string;
274
+ value: string;
275
+ highlighted?: boolean;
144
276
  };
145
- type DropdownItemProps<T extends React.ElementType = "button"> = PropsWithChildren<BaseDropdownItemProps> & {
146
- as?: T;
147
- } & Omit<React.ComponentPropsWithoutRef<T>, keyof BaseDropdownItemProps | "as">;
148
- declare function DropdownItem<T extends React.ElementType = "button">({ as, className, children, ...rest }: DropdownItemProps<T>): react_jsx_runtime.JSX.Element;
277
+ /** Interactive filter token intended for an EditableCombobox startContent slot. */
278
+ declare function EditableComboboxToken({ label, value, highlighted, className, ...buttonProps }: EditableComboboxTokenProps): react_jsx_runtime.JSX.Element;
279
+ declare function EditableCombobox({ value, options, onChange, emptyMessage, align, open, onOpenChange, closeOnSelect, startContent, contentClassName, className, disabled, name, placeholder, required, ...inputProps }: EditableComboboxProps): react_jsx_runtime.JSX.Element;
149
280
 
150
- type ExternalLinkButtonProps = {
151
- theme: ThemeName;
152
- href: string;
281
+ type ExternalLinkButtonBaseProps = {
153
282
  size?: "sm" | "md" | "lg";
283
+ appearance?: ButtonAppearance;
284
+ intent?: ButtonProps["intent"];
285
+ /** Set false for another Pollinations property that should behave as product navigation. */
286
+ external?: boolean;
287
+ showIcon?: boolean;
288
+ /** Leading icon, rendered before the label. */
289
+ icon?: ReactNode;
154
290
  className?: string;
155
291
  children: ReactNode;
156
292
  };
157
- declare const ExternalLinkButton: FC<ExternalLinkButtonProps>;
293
+ type ExternalLinkButtonAnchorProps = ExternalLinkButtonBaseProps & {
294
+ href: string;
295
+ } & Omit<ComponentPropsWithoutRef<"a">, "children" | "className" | "href">;
296
+ type ExternalLinkButtonNativeButtonProps = ExternalLinkButtonBaseProps & Omit<ComponentPropsWithoutRef<"button">, "children" | "className">;
297
+ type ExternalLinkButtonProps = ExternalLinkButtonAnchorProps | ExternalLinkButtonNativeButtonProps;
298
+ /** Primary flow actions such as checkout or authorization. Use InlineLink for navigation. */
299
+ declare function ExternalLinkButton(props: ExternalLinkButtonProps): react_jsx_runtime.JSX.Element;
300
+
301
+ type FieldStackProps = {
302
+ /** Omit for a self-describing control; label the input itself. */
303
+ label?: ReactNode;
304
+ children: ReactNode;
305
+ helper?: ReactNode;
306
+ action?: ReactNode;
307
+ error?: ReactNode;
308
+ alignLabelRow?: boolean;
309
+ className?: string;
310
+ labelClassName?: string;
311
+ helperClassName?: string;
312
+ errorClassName?: string;
313
+ };
314
+ declare function FieldStack({ label, children, helper, action, error, alignLabelRow, className, labelClassName, helperClassName, errorClassName, }: FieldStackProps): react_jsx_runtime.JSX.Element;
315
+
316
+ type RejectReason = "type" | "size" | "count";
317
+ type RejectedFile = {
318
+ file: File;
319
+ reason: RejectReason;
320
+ };
158
321
 
159
322
  type FileUploadProps = {
160
323
  value: File[];
@@ -163,24 +326,16 @@ type FileUploadProps = {
163
326
  maxFiles?: number;
164
327
  maxSizeBytes?: number;
165
328
  accept?: string;
329
+ icon?: ReactNode;
330
+ label?: ReactNode;
331
+ previewIcon?: ReactNode;
332
+ /** Compact drop zone, or preview-only strip for a parent drop target. */
333
+ variant?: "default" | "compact" | "inline";
166
334
  /** Fully locks the field: no add, no remove, drops ignored. */
167
335
  disabled?: boolean;
168
- /** Optional cascade override; defaults to the inherited `[data-theme]`. */
169
- theme?: ThemeName;
170
336
  className?: string;
171
337
  };
172
- declare function FileUpload({ value, onChange, onReject, maxFiles, maxSizeBytes, accept, disabled, theme, className, }: FileUploadProps): react_jsx_runtime.JSX.Element;
173
-
174
- /** IconButton only supports `danger` (delete icons). */
175
- type IconButtonIntent = "danger";
176
- type IconButtonProps = {
177
- intent?: IconButtonIntent;
178
- title?: string;
179
- onClick: () => void;
180
- children: ReactNode;
181
- className?: string;
182
- };
183
- declare const IconButton: FC<IconButtonProps>;
338
+ declare function FileUpload({ value, onChange, onReject, maxFiles, maxSizeBytes, accept, icon, label, previewIcon, variant, disabled, className, }: FileUploadProps): react_jsx_runtime.JSX.Element | null;
184
339
 
185
340
  type InfoTipProps = {
186
341
  text?: ReactNode;
@@ -190,63 +345,28 @@ type InfoTipProps = {
190
345
  /**
191
346
  * Small "i" badge that opens a tooltip on hover, click, or focus.
192
347
  *
193
- * Both the badge and the popup follow the page theme: badge reads
194
- * `bg-theme-bg-active`; popup uses the universal recipe via `<Tooltip>`
195
- * (`bg-theme-bg-pale` + `border-theme-border` + `text-theme-text-strong`,
196
- * viewport-clamped). Cursor on the badge is `cursor-help`.
348
+ * Quiet neutral badge and shared, viewport-clamped tooltip popup.
349
+ * The help cursor indicates that more information is available.
197
350
  */
198
351
  declare const InfoTip: FC<InfoTipProps>;
199
352
 
200
- type BaseInlineLinkProps = {
201
- /** Override the cascade theme for this link's subtree. */
202
- theme?: ThemeName;
203
- /** Set explicitly for non-http external links, or false for custom routing components. */
204
- external?: boolean;
205
- showIcon?: boolean;
353
+ type KeyChipProps = {
354
+ /** The visible start of the key, e.g. "sk_0ysBCkH". */
355
+ prefix: string;
356
+ /** The full key, when known: the chip then copies it on click. */
357
+ value?: string | null;
358
+ /** Accessible name for the copy action. */
359
+ label?: string;
206
360
  className?: string;
207
361
  };
208
- type InlineLinkProps<T extends React.ElementType = "a"> = PropsWithChildren<BaseInlineLinkProps> & {
209
- as?: T;
210
- } & Omit<React.ComponentPropsWithoutRef<T>, keyof BaseInlineLinkProps | "as">;
211
- declare function InlineLink<T extends React.ElementType = "a">({ as, theme, external, showIcon, className, children, ...linkProps }: InlineLinkProps<T>): react_jsx_runtime.JSX.Element;
212
-
213
- type InputProps = React.ComponentPropsWithoutRef<"input"> & {
214
- error?: boolean;
215
- hideNumberSteppers?: boolean;
216
- };
217
- declare const Input: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref"> & {
218
- error?: boolean;
219
- hideNumberSteppers?: boolean;
220
- } & react.RefAttributes<HTMLInputElement>>;
221
-
222
- /** Icons inherit color via currentColor and size via className or SVG props. */
223
- type IconProps = ComponentPropsWithoutRef<"svg">;
224
-
225
- declare function AppIcon(props: IconProps): react_jsx_runtime.JSX.Element;
226
- declare function BeakerIcon(props: IconProps): react_jsx_runtime.JSX.Element;
227
- declare function BookIcon(props: IconProps): react_jsx_runtime.JSX.Element;
228
- declare function CheckIcon(props: IconProps): react_jsx_runtime.JSX.Element;
229
- declare function ClipboardIcon(props: IconProps): react_jsx_runtime.JSX.Element;
230
- declare function ClockIcon(props: IconProps): react_jsx_runtime.JSX.Element;
231
- declare function DiscordIcon(props: IconProps): react_jsx_runtime.JSX.Element;
232
- declare function DownloadIcon(props: IconProps): react_jsx_runtime.JSX.Element;
233
- declare function ExternalLinkIcon(props: IconProps): react_jsx_runtime.JSX.Element;
234
- declare function GenApiIcon(props: IconProps): react_jsx_runtime.JSX.Element;
235
- declare function GitHubIcon(props: IconProps): react_jsx_runtime.JSX.Element;
236
- declare function ImageIcon(props: IconProps): react_jsx_runtime.JSX.Element;
237
- declare function LockIcon(props: IconProps): react_jsx_runtime.JSX.Element;
238
- declare function MailIcon(props: IconProps): react_jsx_runtime.JSX.Element;
239
- declare function McpIcon(props: IconProps): react_jsx_runtime.JSX.Element;
240
- declare function MenuIcon(props: IconProps): react_jsx_runtime.JSX.Element;
241
- declare function TerminalIcon(props: IconProps): react_jsx_runtime.JSX.Element;
242
- declare function TokensIcon(props: IconProps): react_jsx_runtime.JSX.Element;
243
- declare function TrendUpIcon(props: IconProps): react_jsx_runtime.JSX.Element;
244
- declare function WalletIcon(props: IconProps): react_jsx_runtime.JSX.Element;
245
- declare function XIcon(props: IconProps): react_jsx_runtime.JSX.Element;
362
+ /**
363
+ * One badge for every key: prefix and ellipsis, nothing else. A secret key
364
+ * only ever shows its prefix; a key whose value is known copies on click and
365
+ * carries the clipboard icon.
366
+ */
367
+ declare function KeyChip({ prefix, value, label, className, }: KeyChipProps): react_jsx_runtime.JSX.Element;
246
368
 
247
369
  type BaseLinkCardProps = {
248
- /** Override the cascade theme for this card's subtree. */
249
- theme?: ThemeName;
250
370
  external?: boolean;
251
371
  showIcon?: boolean;
252
372
  className?: string;
@@ -255,14 +375,14 @@ type BaseLinkCardProps = {
255
375
  type LinkCardProps<T extends React.ElementType = "a"> = PropsWithChildren<BaseLinkCardProps> & {
256
376
  as?: T;
257
377
  } & Omit<React.ComponentPropsWithoutRef<T>, keyof BaseLinkCardProps | "as">;
258
- declare function LinkCard<T extends React.ElementType = "a">({ as, theme, external, showIcon, className, surfaceClassName, children, ...linkProps }: LinkCardProps<T>): react_jsx_runtime.JSX.Element;
378
+ declare function LinkCard<T extends React.ElementType = "a">({ as, external, showIcon, className, surfaceClassName, children, ...linkProps }: LinkCardProps<T>): react_jsx_runtime.JSX.Element;
259
379
 
260
- type MarkdownProps = {
261
- children: string;
262
- className?: string;
380
+ type MediaPlaceholderProps = ComponentPropsWithoutRef<"div"> & {
381
+ icon?: ReactNode;
382
+ label?: ReactNode;
383
+ detail?: ReactNode;
263
384
  };
264
- /** Compact markdown for cards and snippets. Use Prose for document-style content. */
265
- declare function Markdown({ children, className }: MarkdownProps): react_jsx_runtime.JSX.Element;
385
+ declare const MediaPlaceholder: FC<MediaPlaceholderProps>;
266
386
 
267
387
  type MultiSelectOption = {
268
388
  value: string;
@@ -275,65 +395,66 @@ type MultiSelectProps = {
275
395
  placeholder: string;
276
396
  disabled?: boolean;
277
397
  disabledText?: string;
398
+ disabledTooltip?: string;
278
399
  align?: "start" | "end";
279
400
  label?: string;
280
- theme: ThemeName;
401
+ /** Accessible name when the visible label is supplied by the caller. */
402
+ ariaLabel?: string;
403
+ /** Fill the available width, allowing the trigger label to truncate. */
404
+ fullWidth?: boolean;
281
405
  };
282
406
  declare const MultiSelect: FC<MultiSelectProps>;
283
407
 
284
408
  type BaseNavItemProps = {
285
- /** Section color via the `[data-theme]` cascade — tints the dot + active fill. */
286
- theme?: ThemeName;
287
- /** Current/selected item — fills with the section color + sets `aria-current`. */
409
+ /** Current/selected item — fills with the accent + sets `aria-current`. */
288
410
  active?: boolean;
411
+ /** Optional leading icon. */
412
+ icon?: ComponentType<{
413
+ className?: string;
414
+ }>;
289
415
  className?: string;
290
416
  };
291
417
  type NavItemProps<T extends React.ElementType = "button"> = PropsWithChildren<BaseNavItemProps> & {
292
418
  as?: T;
293
419
  } & Omit<React.ComponentPropsWithoutRef<T>, keyof BaseNavItemProps | "as">;
294
420
  /**
295
- * Minimal nav item — a themed pill with a persistent section-color dot, neutral
296
- * when inactive and filled with the section color when active. Polymorphic:
297
- * `<NavItem>` (button) for in-page nav, `<NavItem as={Link} active={…}>` for
298
- * routed nav. Mirrors enter's sidebar item so both apps share one design.
421
+ * Minimal nav item — a pill that's neutral when inactive and filled with the
422
+ * accent when active, with an optional leading icon. Polymorphic: `<NavItem>`
423
+ * (button) for in-page nav, `<NavItem as={Link} active={…}>` for routed nav.
424
+ * Shared by the enter dashboard rail and apps so both use one design.
299
425
  */
300
- declare function NavItem<T extends React.ElementType = "button">({ as, theme, active, className, children, ...rest }: NavItemProps<T>): react_jsx_runtime.JSX.Element;
426
+ declare function NavItem<T extends React.ElementType = "button">({ as, active, icon: Icon, className, children, ...rest }: NavItemProps<T>): react_jsx_runtime.JSX.Element;
427
+
428
+ type PeriodGranularity = "day" | "week" | "month";
429
+ type PeriodSelection = {
430
+ granularity: PeriodGranularity;
431
+ period: string;
432
+ };
433
+ type PeriodWindow = {
434
+ start: Date;
435
+ end: Date;
436
+ };
437
+ declare function periodFromDate(granularity: PeriodGranularity, date?: Date): PeriodSelection;
438
+ declare function currentPeriod(): PeriodSelection;
439
+ declare function periodToWindow(selection: PeriodSelection): PeriodWindow;
440
+ declare function getPeriodBucketKeys(selection: PeriodSelection): string[];
441
+ declare function periodBucketKeyToDate(bucketKey: string, granularity: PeriodGranularity): Date;
442
+ declare function isPeriodSelectable(selection: PeriodSelection, minDate?: Date, maxDate?: Date): boolean;
301
443
 
302
444
  type PeriodPickerProps = {
303
445
  value: PeriodSelection;
304
446
  onChange: (value: PeriodSelection) => void;
305
- theme: ThemeName;
306
447
  minDate?: Date;
307
448
  maxDate?: Date;
449
+ /** Custom trigger for a calendar with a fixed granularity. */
450
+ trigger?: (open: boolean) => ReactNode;
451
+ /** Optional controls above the calendar grid. */
452
+ header?: ReactNode;
308
453
  };
309
454
  declare const PeriodPicker: FC<PeriodPickerProps>;
310
455
 
311
- type ProseProps = {
312
- children: string;
313
- className?: string;
314
- };
315
- declare function Prose({ children, className }: ProseProps): react_jsx_runtime.JSX.Element;
316
-
317
- type ScrollAxis = "y" | "x";
318
- type ScrollAreaOwnProps = {
319
- /** Override the ambient cascade theme for this scroller's thumb. */
320
- theme?: ThemeName;
321
- /** Scroll direction. Default `y`. */
322
- axis?: ScrollAxis;
323
- className?: string;
324
- };
325
- type ScrollAreaProps = PropsWithChildren<ScrollAreaOwnProps & Omit<ComponentPropsWithoutRef<"div">, keyof ScrollAreaOwnProps>>;
326
- /**
327
- * Themed auto-hide scroll container. Thumb color follows the nearest
328
- * `[data-theme="..."]` ancestor; pass `theme` to override locally.
329
- */
330
- declare const ScrollArea: react.ForwardRefExoticComponent<ScrollAreaOwnProps & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref">, keyof ScrollAreaOwnProps> & {
331
- children?: react.ReactNode | undefined;
332
- } & react.RefAttributes<HTMLDivElement>>;
333
-
334
456
  type SectionProps = {
335
457
  title: string;
336
- theme: ThemeName;
337
458
  id?: string;
338
459
  framed?: boolean;
339
460
  intro?: ReactNode;
@@ -346,20 +467,16 @@ type SectionProps = {
346
467
  };
347
468
  declare const Section: FC<SectionProps>;
348
469
 
349
- type SliderProps = Omit<React.ComponentPropsWithoutRef<"input">, "type"> & {
350
- /** Fill percentage from 0-100. Falls back to value/min/max when omitted. */
351
- progress?: number;
352
- };
353
- declare const Slider: react.ForwardRefExoticComponent<Omit<Omit<react.DetailedHTMLProps<react.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref">, "type"> & {
354
- /** Fill percentage from 0-100. Falls back to value/min/max when omitted. */
355
- progress?: number;
356
- } & react.RefAttributes<HTMLInputElement>>;
357
-
470
+ /**
471
+ * - `stat` — large numeric value (default)
472
+ * - `fact` — small wrapping prose value (labeled fact tile)
473
+ */
474
+ type StatCardVariant = "stat" | "fact";
358
475
  type StatCardProps = {
359
476
  label: ReactNode;
360
477
  value: ReactNode;
361
478
  detail?: ReactNode;
362
- theme?: ThemeName;
479
+ variant?: StatCardVariant;
363
480
  className?: string;
364
481
  labelClassName?: string;
365
482
  valueClassName?: string;
@@ -367,21 +484,272 @@ type StatCardProps = {
367
484
  };
368
485
  declare const StatCard: FC<StatCardProps>;
369
486
 
487
+ type ToolCallStatus = "pending" | "running" | "approval-requested" | "approval-responded" | "complete" | "error" | "denied";
488
+ interface ToolCallDetailsProps {
489
+ name: string;
490
+ input?: unknown;
491
+ output?: unknown;
492
+ error?: unknown;
493
+ status?: ToolCallStatus;
494
+ defaultOpen?: boolean;
495
+ className?: string;
496
+ }
497
+ /** Framework-neutral disclosure for server- or client-executed tool calls. */
498
+ declare function ToolCallDetails({ name, input, output, error, status, defaultOpen, className, }: ToolCallDetailsProps): react_jsx_runtime.JSX.Element;
499
+
500
+ /** Class merge for apps consuming the unprefixed Tailwind bridge in app.css. */
501
+ declare function cn(...inputs: (string | undefined | null | false)[]): string;
502
+
503
+ /**
504
+ * Locks page scroll while enabled and restores the original overflow values on
505
+ * cleanup.
506
+ */
507
+ declare function useScrollLock(enabled?: boolean): void;
508
+
509
+ type ButtonGroupProps = ComponentPropsWithoutRef<"div">;
510
+ declare const ButtonGroup: FC<ButtonGroupProps>;
511
+
512
+ type ChevronIconProps = {
513
+ /** Rotate 180° when expanded/open. */
514
+ expanded?: boolean;
515
+ className?: string;
516
+ };
517
+ /**
518
+ * Canonical chevron used for collapsibles, dropdown triggers, and select pills
519
+ * across the app. One icon everywhere.
520
+ */
521
+ declare const ChevronIcon: FC<ChevronIconProps>;
522
+
523
+ /**
524
+ * Light/dark colour mode. The chosen mode is reflected as `class="dark"` on
525
+ * <html>, which flips the design-system tokens (see styles/tokens.css: `.dark`
526
+ * + `.dark [data-theme]`). One shared module-level store backs every
527
+ * `useColorMode()` consumer, so duplicate toggles never desync and changes
528
+ * propagate across tabs.
529
+ *
530
+ * The chosen mode is persisted to localStorage (per-origin), which also powers
531
+ * the cross-tab `storage` sync below. Read priority: localStorage → system
532
+ * preference.
533
+ *
534
+ * Host apps should set the initial class pre-paint (a tiny inline script in the
535
+ * document head, reading the same key) to avoid a flash of light before React
536
+ * mounts; this store is the source of truth after hydration.
537
+ *
538
+ * Side-effect-free on import: the <html> sync and the cross-tab listener are
539
+ * attached lazily on first subscribe, so importing this module (e.g. via the
540
+ * package barrel) never mutates the DOM on its own.
541
+ */
542
+ type ColorMode = "light" | "dark";
543
+ /**
544
+ * Set the color mode programmatically. Updates the shared store (so every
545
+ * `useColorMode()` consumer re-renders), flips the `.dark` class, and persists
546
+ * to localStorage.
547
+ */
548
+ declare function setColorMode(mode: ColorMode): void;
549
+ declare function useColorMode(): {
550
+ mode: ColorMode;
551
+ isDark: boolean;
552
+ toggle: () => void;
553
+ };
554
+ /**
555
+ * Sliding sun/moon switch. Light/dark is a two-state choice, not an on/off
556
+ * affordance, so this uses `Switch`'s shape but its own palette. The thumb
557
+ * carries the active mode's icon tinted with the accent (`text-soft`); the
558
+ * mode you'd switch to sits ghosted (faint neutral) on the
559
+ * empty side. Self-contained — wires itself to `useColorMode`.
560
+ */
561
+ declare const ColorModeToggle: FC;
562
+
563
+ type DrawerProps = {
564
+ open: boolean;
565
+ onOpenChange: (open: boolean) => void;
566
+ ariaLabel: string;
567
+ children: ReactNode;
568
+ side?: "left" | "right";
569
+ contentClassName?: string;
570
+ };
571
+ /** Accessible side drawer for mobile navigation and compact tools. */
572
+ declare const Drawer: FC<DrawerProps>;
573
+
574
+ type BaseDropdownItemProps = {
575
+ className?: string;
576
+ };
577
+ type DropdownItemProps<T extends React.ElementType = "button"> = PropsWithChildren<BaseDropdownItemProps> & {
578
+ as?: T;
579
+ } & Omit<React.ComponentPropsWithoutRef<T>, keyof BaseDropdownItemProps | "as">;
580
+ declare function DropdownItem<T extends React.ElementType = "button">({ as, className, children, ...rest }: DropdownItemProps<T>): react_jsx_runtime.JSX.Element;
581
+
582
+ declare const sizeClasses: {
583
+ readonly page: "polli:text-sm polli:tracking-widest polli:text-theme-text-soft";
584
+ readonly card: "polli:text-xs polli:tracking-wider polli:text-theme-text-soft";
585
+ readonly chrome: "polli:text-micro polli:tracking-widest polli:text-theme-text-muted";
586
+ };
587
+ type EyebrowOwnProps<T extends ElementType> = {
588
+ as?: T;
589
+ size?: keyof typeof sizeClasses;
590
+ className?: string;
591
+ children: ReactNode;
592
+ };
593
+ type EyebrowProps<T extends ElementType = "span"> = EyebrowOwnProps<T> & Omit<ComponentPropsWithoutRef<T>, keyof EyebrowOwnProps<T>>;
594
+ /** Uppercase pixel label for page, card, and chrome metadata. */
595
+ declare function Eyebrow<T extends ElementType = "span">({ as, size, className, children, ...rest }: EyebrowProps<T>): react_jsx_runtime.JSX.Element;
596
+
597
+ /** `danger` (delete, red) and `info` (edit/links, blue). */
598
+ type IconButtonIntent = "danger" | "info";
599
+ type IconButtonVariant = "tile" | "ghost";
600
+ type IconButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children" | "className" | "title"> & {
601
+ intent?: IconButtonIntent;
602
+ variant?: IconButtonVariant;
603
+ pressed?: boolean;
604
+ title?: string;
605
+ tooltip?: ReactNode;
606
+ tooltipAlign?: "start" | "center";
607
+ tooltipClampToViewport?: boolean;
608
+ children: ReactNode;
609
+ className?: string;
610
+ size?: "sm" | "md";
611
+ };
612
+ declare const IconButton: react.ForwardRefExoticComponent<Omit<ButtonHTMLAttributes<HTMLButtonElement>, "className" | "children" | "title"> & {
613
+ intent?: IconButtonIntent;
614
+ variant?: IconButtonVariant;
615
+ pressed?: boolean;
616
+ title?: string;
617
+ tooltip?: ReactNode;
618
+ tooltipAlign?: "start" | "center";
619
+ tooltipClampToViewport?: boolean;
620
+ children: ReactNode;
621
+ className?: string;
622
+ size?: "sm" | "md";
623
+ } & react.RefAttributes<HTMLButtonElement>>;
624
+
625
+ type BaseInlineLinkProps = {
626
+ /** Set explicitly for non-http external links, or false for custom routing components. */
627
+ external?: boolean;
628
+ showIcon?: boolean;
629
+ /** Inline text inherits its size; footers use 13px and standalone links 14px. */
630
+ size?: "inherit" | "footer" | "sm";
631
+ /** Accent for prominent links; quiet for secondary navigation. */
632
+ tone?: "accent" | "quiet";
633
+ className?: string;
634
+ };
635
+ type InlineLinkProps<T extends React.ElementType = "a"> = PropsWithChildren<BaseInlineLinkProps> & {
636
+ as?: T;
637
+ } & Omit<React.ComponentPropsWithoutRef<T>, keyof BaseInlineLinkProps | "as">;
638
+ /** Shared text-link rule: surrounding font, selectable ink, persistent underline,
639
+ * visible keyboard focus, and an external arrow only when leaving the app.
640
+ * Navigation and button-shaped actions use their own primitives.
641
+ */
642
+ declare function InlineLink<T extends React.ElementType = "a">({ as, external, showIcon, size, tone, className, children, ...linkProps }: InlineLinkProps<T>): react_jsx_runtime.JSX.Element;
643
+
644
+ /** Icons inherit color via currentColor and size via className or SVG props. */
645
+ type IconProps = ComponentPropsWithoutRef<"svg">;
646
+
647
+ declare function AppIcon(props: IconProps): react_jsx_runtime.JSX.Element;
648
+ declare function AccountIcon(props: IconProps): react_jsx_runtime.JSX.Element;
649
+ declare function ArrowRightIcon(props: IconProps): react_jsx_runtime.JSX.Element;
650
+ declare function BeakerIcon(props: IconProps): react_jsx_runtime.JSX.Element;
651
+ declare function BotIcon(props: IconProps): react_jsx_runtime.JSX.Element;
652
+ declare function BookIcon(props: IconProps): react_jsx_runtime.JSX.Element;
653
+ declare function BugIcon(props: IconProps): react_jsx_runtime.JSX.Element;
654
+ declare function CheckIcon(props: IconProps): react_jsx_runtime.JSX.Element;
655
+ declare function ClipboardIcon(props: IconProps): react_jsx_runtime.JSX.Element;
656
+ declare function ClockIcon(props: IconProps): react_jsx_runtime.JSX.Element;
657
+ declare function DiscordIcon(props: IconProps): react_jsx_runtime.JSX.Element;
658
+ declare function InstagramIcon(props: IconProps): react_jsx_runtime.JSX.Element;
659
+ declare function XSocialIcon(props: IconProps): react_jsx_runtime.JSX.Element;
660
+ declare function LinkedInIcon(props: IconProps): react_jsx_runtime.JSX.Element;
661
+ declare function DownloadIcon(props: IconProps): react_jsx_runtime.JSX.Element;
662
+ declare function ExpandIcon(props: IconProps): react_jsx_runtime.JSX.Element;
663
+ declare function PlayIcon(props: IconProps): react_jsx_runtime.JSX.Element;
664
+ declare function PauseIcon(props: IconProps): react_jsx_runtime.JSX.Element;
665
+ declare function CloudUploadIcon(props: IconProps): react_jsx_runtime.JSX.Element;
666
+ declare function ExternalLinkIcon(props: IconProps): react_jsx_runtime.JSX.Element;
667
+ declare function GenApiIcon(props: IconProps): react_jsx_runtime.JSX.Element;
668
+ declare function GitBranchIcon(props: IconProps): react_jsx_runtime.JSX.Element;
669
+ declare function GitPullRequestIcon(props: IconProps): react_jsx_runtime.JSX.Element;
670
+ declare function GraduationCapIcon(props: IconProps): react_jsx_runtime.JSX.Element;
671
+ declare function SparklesIcon(props: IconProps): react_jsx_runtime.JSX.Element;
672
+ declare function GitHubIcon(props: IconProps): react_jsx_runtime.JSX.Element;
673
+ declare function ImageIcon(props: IconProps): react_jsx_runtime.JSX.Element;
674
+ declare function CubeIcon(props: IconProps): react_jsx_runtime.JSX.Element;
675
+ declare function AudioIcon(props: IconProps): react_jsx_runtime.JSX.Element;
676
+ declare function LockIcon(props: IconProps): react_jsx_runtime.JSX.Element;
677
+ declare function LogInIcon(props: IconProps): react_jsx_runtime.JSX.Element;
678
+ declare function LogOutIcon(props: IconProps): react_jsx_runtime.JSX.Element;
679
+ declare function MailIcon(props: IconProps): react_jsx_runtime.JSX.Element;
680
+ declare function McpIcon(props: IconProps): react_jsx_runtime.JSX.Element;
681
+ declare function MenuIcon(props: IconProps): react_jsx_runtime.JSX.Element;
682
+ declare function NewspaperIcon(props: IconProps): react_jsx_runtime.JSX.Element;
683
+ declare function PlusIcon(props: IconProps): react_jsx_runtime.JSX.Element;
684
+ declare function TerminalIcon(props: IconProps): react_jsx_runtime.JSX.Element;
685
+ declare function ToolIcon(props: IconProps): react_jsx_runtime.JSX.Element;
686
+ declare function TargetIcon(props: IconProps): react_jsx_runtime.JSX.Element;
687
+ declare function TokensIcon(props: IconProps): react_jsx_runtime.JSX.Element;
688
+ declare function UsageIcon(props: IconProps): react_jsx_runtime.JSX.Element;
689
+ declare function WarningIcon(props: IconProps): react_jsx_runtime.JSX.Element;
690
+ declare function TrendUpIcon(props: IconProps): react_jsx_runtime.JSX.Element;
691
+ declare function EarningsIcon(props: IconProps): react_jsx_runtime.JSX.Element;
692
+ declare function WalletIcon(props: IconProps): react_jsx_runtime.JSX.Element;
693
+ declare function MoonIcon(props: IconProps): react_jsx_runtime.JSX.Element;
694
+ declare function SunIcon(props: IconProps): react_jsx_runtime.JSX.Element;
695
+ declare function XIcon(props: IconProps): react_jsx_runtime.JSX.Element;
696
+ declare function TrashIcon(props: IconProps): react_jsx_runtime.JSX.Element;
697
+ declare function ChatIcon(props: IconProps): react_jsx_runtime.JSX.Element;
698
+ declare function RobotIcon(props: IconProps): react_jsx_runtime.JSX.Element;
699
+ declare function EyeIcon(props: IconProps): react_jsx_runtime.JSX.Element;
700
+ declare function EyeOffIcon(props: IconProps): react_jsx_runtime.JSX.Element;
701
+ declare function VideoIcon(props: IconProps): react_jsx_runtime.JSX.Element;
702
+ declare function MicIcon(props: IconProps): react_jsx_runtime.JSX.Element;
703
+ declare function SpeakerIcon(props: IconProps): react_jsx_runtime.JSX.Element;
704
+ declare function MegaphoneIcon(props: IconProps): react_jsx_runtime.JSX.Element;
705
+ declare function ReasoningIcon(props: IconProps): react_jsx_runtime.JSX.Element;
706
+ declare function RocketIcon(props: IconProps): react_jsx_runtime.JSX.Element;
707
+ declare function SearchIcon(props: IconProps): react_jsx_runtime.JSX.Element;
708
+ declare function SignOutIcon(props: IconProps): react_jsx_runtime.JSX.Element;
709
+ declare function PowerIcon(props: IconProps): react_jsx_runtime.JSX.Element;
710
+ declare function SparkleIcon(props: IconProps): react_jsx_runtime.JSX.Element;
711
+ declare function StarIcon({ filled, ...props }: IconProps & {
712
+ filled?: boolean;
713
+ }): react_jsx_runtime.JSX.Element;
714
+ declare function CodeIcon(props: IconProps): react_jsx_runtime.JSX.Element;
715
+ declare function DatabaseIcon(props: IconProps): react_jsx_runtime.JSX.Element;
716
+ declare function CardIcon(props: IconProps): react_jsx_runtime.JSX.Element;
717
+ declare function SproutIcon(props: IconProps): react_jsx_runtime.JSX.Element;
718
+ declare function PencilIcon(props: IconProps): react_jsx_runtime.JSX.Element;
719
+ declare function KeyIcon(props: IconProps): react_jsx_runtime.JSX.Element;
720
+ declare function GlobeIcon(props: IconProps): react_jsx_runtime.JSX.Element;
721
+ declare function ArrowLeftIcon(props: IconProps): react_jsx_runtime.JSX.Element;
722
+ declare function RefreshIcon(props: IconProps): react_jsx_runtime.JSX.Element;
723
+
724
+ type SliderProps = Omit<React.ComponentPropsWithoutRef<"input">, "type"> & {
725
+ /** Fill percentage from 0-100. Falls back to value/min/max when omitted. */
726
+ progress?: number;
727
+ };
728
+ declare const Slider: react.ForwardRefExoticComponent<Omit<Omit<react.DetailedHTMLProps<react.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref">, "type"> & {
729
+ /** Fill percentage from 0-100. Falls back to value/min/max when omitted. */
730
+ progress?: number;
731
+ } & react.RefAttributes<HTMLInputElement>>;
732
+
370
733
  type SurfaceVariant = "panel" | "card" | "card-themed";
371
734
  type SurfaceOwnProps = {
372
- /** Override the cascade theme for this surface's subtree. */
373
- theme?: ThemeName;
374
735
  /**
375
- * Visual role.
376
- * - `panel` — outer container: bordered, semi-transparent theme bg
377
- * - `card` — borderless white inner (default)
378
- * - `card-themed` — borderless theme-tinted inner (deeper than panel)
736
+ * Depth role (all opaque, elevation via shadow not borders):
737
+ * - `panel` — Level 1 container: themed bg, container shadow
738
+ * - `card` — Level 2 well: neutral surface, well shadow (default)
739
+ * - `card-themed` — themed well: theme-tinted, well shadow
379
740
  */
380
741
  variant?: SurfaceVariant;
381
742
  className?: string;
382
743
  };
383
- type SurfaceProps = PropsWithChildren<SurfaceOwnProps & Omit<ComponentPropsWithoutRef<"div">, keyof SurfaceOwnProps | "color">>;
384
- declare const Surface: FC<SurfaceProps>;
744
+ /**
745
+ * Polymorphic like Button, TabButton and LinkCard, so a card that is itself a
746
+ * link renders one element instead of an anchor wrapping a div. Defaults to
747
+ * <div>, so existing call sites are unchanged.
748
+ */
749
+ type SurfaceProps<T extends ElementType = "div"> = SurfaceOwnProps & {
750
+ as?: T;
751
+ } & Omit<ComponentPropsWithoutRef<T>, keyof SurfaceOwnProps | "as" | "color">;
752
+ declare function Surface<T extends ElementType = "div">({ as, variant, className, children, ...rest }: SurfaceProps<T>): react_jsx_runtime.JSX.Element;
385
753
 
386
754
  type SwitchStatus = "off" | "on" | "invalid";
387
755
  type SwitchProps = {
@@ -396,36 +764,46 @@ type SwitchProps = {
396
764
  };
397
765
  /**
398
766
  * Binary toggle primitive. Universal palette — does NOT follow the page
399
- * theme. Three states: off (white), on (soft green), invalid (soft red,
400
- * for "enabled but needs attention").
767
+ * theme. Light thumb in both modes; track states: off (grey), on (green),
768
+ * invalid (red, for "enabled but needs attention").
401
769
  *
402
770
  * `checked` drives thumb position; `status` drives track colour. So
403
771
  * `checked={true} status="invalid"` renders thumb-right with a red track.
404
772
  */
405
773
  declare const Switch: FC<SwitchProps>;
406
774
 
407
- type TabButtonProps = {
775
+ type TabButtonOwnProps = {
408
776
  active: boolean;
409
- onClick: () => void;
777
+ /** Omit when rendering as a link (`as`) and navigation carries the change. */
778
+ onClick?: () => void;
410
779
  children: ReactNode;
411
- /** Optional cascade override; defaults to inherited [data-theme]. */
412
- theme?: ThemeName;
413
- size?: "md" | "sm";
414
- variant?: "default" | "ghost";
780
+ size?: "lg" | "md" | "sm" | "xs";
781
+ variant?: "soft" | "ghost";
782
+ intent?: "neutral";
415
783
  ariaLabel?: string;
416
784
  disabled?: boolean;
417
785
  className?: string;
418
786
  };
419
- declare const TabButton: FC<TabButtonProps>;
787
+ /**
788
+ * Polymorphic like Button, so a tab that navigates can render a real anchor
789
+ * instead of a click handler — middle-click, right-click and crawlers all
790
+ * depend on that. Defaults to <button>, so existing call sites are unchanged.
791
+ */
792
+ type TabButtonProps<T extends ElementType = "button"> = TabButtonOwnProps & {
793
+ as?: T;
794
+ } & Omit<ComponentPropsWithoutRef<T>, keyof TabButtonOwnProps | "as">;
795
+ declare function TabButton<T extends ElementType = "button">({ as, active, onClick, children, size, variant, intent, ariaLabel, disabled, className, ...rest }: TabButtonProps<T>): react_jsx_runtime.JSX.Element;
420
796
 
421
797
  type Align = "left" | "center" | "right";
422
- type RowIntent = "default" | "success" | "warning" | "danger";
798
+ type RowIntent = "default" | "warning" | "danger";
423
799
  type SortDirection = "asc" | "desc";
424
800
  type TableProps = ComponentPropsWithoutRef<"table">;
425
801
  declare const Table: FC<TableProps>;
426
802
  type TableHeadProps = ComponentPropsWithoutRef<"thead">;
427
803
  declare const TableHead: FC<TableHeadProps>;
428
- type TableBodyProps = ComponentPropsWithoutRef<"tbody">;
804
+ type TableBodyProps = ComponentPropsWithoutRef<"tbody"> & {
805
+ divider?: "themed" | "neutral";
806
+ };
429
807
  declare const TableBody: FC<TableBodyProps>;
430
808
  type TableRowProps = ComponentPropsWithoutRef<"tr"> & {
431
809
  intent?: RowIntent;
@@ -446,6 +824,16 @@ type TableCellProps = ComponentPropsWithoutRef<"td"> & {
446
824
  };
447
825
  declare const TableCell: FC<TableCellProps>;
448
826
 
827
+ type TableDisclosureButtonProps = {
828
+ children: ReactNode;
829
+ disabled?: boolean;
830
+ expanded: boolean;
831
+ onClick: () => void;
832
+ className?: string;
833
+ };
834
+ /** Compact disclosure trigger for expandable table rows. */
835
+ declare const TableDisclosureButton: FC<TableDisclosureButtonProps>;
836
+
449
837
  type TextareaProps = React.ComponentPropsWithoutRef<"textarea"> & {
450
838
  error?: boolean;
451
839
  };
@@ -456,10 +844,15 @@ declare const Textarea: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLP
456
844
  type TooltipProps = {
457
845
  children: ReactNode;
458
846
  content: ReactNode;
847
+ align?: "start" | "center";
459
848
  ariaLabel?: string;
849
+ clampToViewport?: boolean;
460
850
  className?: string;
851
+ maxWidth?: number;
461
852
  onClick?: () => void;
853
+ stopClickPropagation?: boolean;
462
854
  style?: CSSProperties;
855
+ tapEnabled?: boolean;
463
856
  triggerAs?: "button" | "span";
464
857
  /**
465
858
  * When true, the inner cursor wrapper uses display:contents so the
@@ -470,4 +863,25 @@ type TooltipProps = {
470
863
  };
471
864
  declare const Tooltip: FC<TooltipProps>;
472
865
 
473
- export { Alert, type AlertProps, AppIcon, BeakerIcon, BookIcon, ButtonGroup, type ButtonGroupProps, CheckIcon, ChevronIcon, ClipboardIcon, ClockIcon, Collapsible, type CollapsibleProps, CopyButton, type CopyButtonProps, Dialog, type DialogProps, DialogTitle, DiscordIcon, DownloadIcon, Dropdown, DropdownItem, type DropdownItemProps, type DropdownProps, ExternalLinkButton, type ExternalLinkButtonProps, ExternalLinkIcon, FileUpload, type FileUploadProps, GenApiIcon, GitHubIcon, IconButton, type IconProps, ImageIcon, InfoTip, InlineLink, type InlineLinkProps, Input, type InputProps, LinkCard, type LinkCardProps, LockIcon, MailIcon, Markdown, type MarkdownProps, McpIcon, MenuIcon, MultiSelect, type MultiSelectProps, NavItem, type NavItemProps, type PeriodGranularity, PeriodPicker, type PeriodPickerProps, type PeriodSelection, Prose, type ProseProps, type RejectReason, type RejectedFile, ScrollArea, type ScrollAreaProps, Section, type SectionProps, Slider, type SliderProps, StatCard, type StatCardProps, Surface, Switch, type SwitchProps, type SwitchStatus, TabButton, type TabButtonProps, Table, TableBody, type TableBodyProps, TableCell, type TableCellProps, TableHead, type TableHeadProps, TableHeaderCell, type TableHeaderCellProps, type TableProps, TableRow, type TableRowProps, TerminalIcon, Textarea, type TextareaProps, ThemeName, TokensIcon, Tooltip, TrendUpIcon, WalletIcon, XIcon, cn, currentPeriod, getPeriodBucketKeys, periodBucketKeyToDate, useScrollLock };
866
+ type HeadingSize = "display" | "title" | "section" | "subsection" | "card";
867
+ type TextSize = "body" | "sm" | "xs" | "micro";
868
+ type TextTone = "base" | "strong" | "soft" | "muted";
869
+ type TextWeight = "normal" | "medium" | "semibold" | "bold";
870
+ type HeadingOwnProps<T extends ElementType> = PropsWithChildren<{
871
+ as?: T;
872
+ size?: HeadingSize;
873
+ className?: string;
874
+ }>;
875
+ type HeadingProps<T extends ElementType = "h2"> = HeadingOwnProps<T> & Omit<ComponentPropsWithoutRef<T>, keyof HeadingOwnProps<T>>;
876
+ declare function Heading<T extends ElementType = "h2">({ as, size, className, children, ...rest }: HeadingProps<T>): react_jsx_runtime.JSX.Element;
877
+ type TextOwnProps<T extends ElementType> = PropsWithChildren<{
878
+ as?: T;
879
+ size?: TextSize;
880
+ tone?: TextTone;
881
+ weight?: TextWeight;
882
+ className?: string;
883
+ }>;
884
+ type TextProps<T extends ElementType = "p"> = TextOwnProps<T> & Omit<ComponentPropsWithoutRef<T>, keyof TextOwnProps<T>>;
885
+ declare function Text<T extends ElementType = "p">({ as, size, tone, weight, className, children, ...rest }: TextProps<T>): react_jsx_runtime.JSX.Element;
886
+
887
+ export { AccountIcon, AccountIdentity, type AccountIdentityProps, AccountMenu, type AccountMenuProps, Alert, type AlertProps, AppHeader, type AppHeaderProps, AppIcon, ArrowLeftIcon, ArrowRightIcon, AudioIcon, BeakerIcon, BookIcon, BotIcon, BugIcon, ButtonAppearance, ButtonGroup, type ButtonGroupProps, ButtonProps, Callout, type CalloutProps, CardIcon, ChatConversation, ChatConversationContent, type ChatConversationContentProps, type ChatConversationProps, ChatIcon, ChatMessage, ChatMessageActions, type ChatMessageActionsProps, ChatMessageContent, type ChatMessageContentProps, ChatMessageHeader, type ChatMessageHeaderProps, type ChatMessageProps, type ChatMessageRole, ChatPromptInput, ChatPromptInputFooter, type ChatPromptInputFooterProps, type ChatPromptInputProps, ChatPromptTextarea, CheckIcon, ChevronIcon, ClipboardIcon, ClockIcon, CloudUploadIcon, CodeBlock, type CodeBlockProps, CodeIcon, Collapsible, type CollapsibleProps, ColorModeToggle, ConfirmationDialog, type ConfirmationDialogProps, ContentHeader, type ContentHeaderProps, CopyButton, type CopyButtonProps, CopyField, type CopyFieldProps, CubeIcon, DatabaseIcon, DialogProps, DiscordIcon, DownloadIcon, Drawer, type DrawerProps, Dropdown, DropdownItem, type DropdownItemProps, type DropdownProps, EarningsIcon, EditableCombobox, type EditableComboboxProps, EditableComboboxToken, type EditableComboboxTokenProps, ExpandIcon, ExternalLinkButton, type ExternalLinkButtonProps, ExternalLinkIcon, EyeIcon, EyeOffIcon, Eyebrow, type EyebrowProps, FieldStack, type FieldStackProps, FileUpload, type FileUploadProps, GenApiIcon, GitBranchIcon, GitHubIcon, GitPullRequestIcon, GlobeIcon, GraduationCapIcon, Heading, type HeadingProps, IconButton, type IconButtonIntent, type IconButtonProps, type IconButtonVariant, type IconProps, ImageIcon, InfoTip, InlineLink, type InlineLinkProps, Input, type InputProps, InstagramIcon, KeyChip, type KeyChipProps, KeyIcon, LinkCard, type LinkCardProps, LinkedInIcon, LockIcon, LogInIcon, LogOutIcon, MailIcon, McpIcon, MediaPlaceholder, type MediaPlaceholderProps, MegaphoneIcon, MenuIcon, MicIcon, MoonIcon, MultiSelect, type MultiSelectProps, NavItem, type NavItemProps, NewspaperIcon, PauseIcon, PencilIcon, type PeriodGranularity, PeriodPicker, type PeriodPickerProps, type PeriodSelection, PlayIcon, PlusIcon, PowerIcon, ReasoningIcon, RefreshIcon, RobotIcon, RocketIcon, ScrollAreaProps, SearchIcon, Section, type SectionProps, SignOutIcon, Slider, type SliderProps, SparkleIcon, SparklesIcon, SpeakerIcon, SproutIcon, StarIcon, StatCard, type StatCardProps, SunIcon, Surface, type SurfaceProps, Switch, type SwitchProps, type SwitchStatus, TabButton, type TabButtonProps, Table, TableBody, type TableBodyProps, TableCell, type TableCellProps, TableDisclosureButton, type TableDisclosureButtonProps, TableHead, type TableHeadProps, TableHeaderCell, type TableHeaderCellProps, type TableProps, TableRow, type TableRowProps, TargetIcon, TerminalIcon, Text, type TextProps, Textarea, type TextareaProps, TokensIcon, ToolCallDetails, type ToolCallDetailsProps, type ToolCallStatus, ToolIcon, Tooltip, TrashIcon, TrendUpIcon, UsageIcon, VideoIcon, WalletIcon, WarningIcon, XIcon, XSocialIcon, cn, currentPeriod, getPeriodBucketKeys, isPeriodSelectable, periodBucketKeyToDate, periodFromDate, periodToWindow, setColorMode, useColorMode, useScrollLock };