@iamfiro/design 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/AGENTS.md +81 -0
  2. package/README.md +15 -2
  3. package/agents/INDEX.md +156 -0
  4. package/agents/accordion/AGENTS.md +279 -0
  5. package/agents/action-bar/AGENTS.md +90 -0
  6. package/agents/alert/AGENTS.md +212 -0
  7. package/agents/alert-dialog/AGENTS.md +193 -0
  8. package/agents/app-shell/AGENTS.md +409 -0
  9. package/agents/area-chart/AGENTS.md +183 -0
  10. package/agents/aspect-ratio/AGENTS.md +143 -0
  11. package/agents/avatar/AGENTS.md +130 -0
  12. package/agents/badge/AGENTS.md +217 -0
  13. package/agents/bar-chart/AGENTS.md +386 -0
  14. package/agents/bar-list/AGENTS.md +223 -0
  15. package/agents/brand-icon/AGENTS.md +82 -0
  16. package/agents/breadcrumb/AGENTS.md +133 -0
  17. package/agents/button/AGENTS.md +195 -0
  18. package/agents/card/AGENTS.md +141 -0
  19. package/agents/card-frame/AGENTS.md +227 -0
  20. package/agents/chat-bubble/AGENTS.md +266 -0
  21. package/agents/chat-composer/AGENTS.md +251 -0
  22. package/agents/checkbox/AGENTS.md +113 -0
  23. package/agents/code-block/AGENTS.md +144 -0
  24. package/agents/color-dot/AGENTS.md +120 -0
  25. package/agents/color-picker/AGENTS.md +224 -0
  26. package/agents/colors/AGENTS.md +168 -0
  27. package/agents/combobox/AGENTS.md +218 -0
  28. package/agents/command-menu/AGENTS.md +169 -0
  29. package/agents/comment/AGENTS.md +206 -0
  30. package/agents/context-menu/AGENTS.md +303 -0
  31. package/agents/copy-button/AGENTS.md +84 -0
  32. package/agents/count-badge/AGENTS.md +115 -0
  33. package/agents/countdown/AGENTS.md +101 -0
  34. package/agents/data-grid/AGENTS.md +460 -0
  35. package/agents/date-picker/AGENTS.md +197 -0
  36. package/agents/delta/AGENTS.md +114 -0
  37. package/agents/description-list/AGENTS.md +251 -0
  38. package/agents/dialog/AGENTS.md +391 -0
  39. package/agents/drawer/AGENTS.md +471 -0
  40. package/agents/dropdown-menu/AGENTS.md +322 -0
  41. package/agents/dropzone/AGENTS.md +116 -0
  42. package/agents/elapsed/AGENTS.md +160 -0
  43. package/agents/empty-state/AGENTS.md +203 -0
  44. package/agents/file-chip/AGENTS.md +79 -0
  45. package/agents/file-icon/AGENTS.md +66 -0
  46. package/agents/file-upload/AGENTS.md +168 -0
  47. package/agents/filter-chips/AGENTS.md +167 -0
  48. package/agents/flag/AGENTS.md +67 -0
  49. package/agents/funnel-chart/AGENTS.md +131 -0
  50. package/agents/highlight/AGENTS.md +119 -0
  51. package/agents/hover-card/AGENTS.md +271 -0
  52. package/agents/icon-stack/AGENTS.md +120 -0
  53. package/agents/icon-tile/AGENTS.md +94 -0
  54. package/agents/inline-diff/AGENTS.md +211 -0
  55. package/agents/input/AGENTS.md +261 -0
  56. package/agents/kanban/AGENTS.md +352 -0
  57. package/agents/kbd/AGENTS.md +160 -0
  58. package/agents/layout/AGENTS.md +351 -0
  59. package/agents/line-chart/AGENTS.md +393 -0
  60. package/agents/link/AGENTS.md +53 -0
  61. package/agents/list/AGENTS.md +392 -0
  62. package/agents/marker/AGENTS.md +142 -0
  63. package/agents/masked-text/AGENTS.md +127 -0
  64. package/agents/menubar/AGENTS.md +276 -0
  65. package/agents/multi-select/AGENTS.md +159 -0
  66. package/agents/navigation-menu/AGENTS.md +315 -0
  67. package/agents/notice-stack/AGENTS.md +101 -0
  68. package/agents/number-stepper/AGENTS.md +96 -0
  69. package/agents/otp-input/AGENTS.md +162 -0
  70. package/agents/pagination/AGENTS.md +189 -0
  71. package/agents/phone-input/AGENTS.md +131 -0
  72. package/agents/pie-chart/AGENTS.md +243 -0
  73. package/agents/popover/AGENTS.md +190 -0
  74. package/agents/progress/AGENTS.md +273 -0
  75. package/agents/progress-tracker/AGENTS.md +305 -0
  76. package/agents/rating/AGENTS.md +165 -0
  77. package/agents/relative-time/AGENTS.md +103 -0
  78. package/agents/resizable/AGENTS.md +390 -0
  79. package/agents/scaled-preview/AGENTS.md +111 -0
  80. package/agents/scatter-chart/AGENTS.md +160 -0
  81. package/agents/scroll-area/AGENTS.md +271 -0
  82. package/agents/search-input/AGENTS.md +105 -0
  83. package/agents/segmented-control/AGENTS.md +153 -0
  84. package/agents/select/AGENTS.md +159 -0
  85. package/agents/selector-button/AGENTS.md +122 -0
  86. package/agents/sidebar/AGENTS.md +201 -0
  87. package/agents/skeleton/AGENTS.md +166 -0
  88. package/agents/slider/AGENTS.md +181 -0
  89. package/agents/spark-chart/AGENTS.md +257 -0
  90. package/agents/sparkbar/AGENTS.md +92 -0
  91. package/agents/spinner/AGENTS.md +123 -0
  92. package/agents/split-view/AGENTS.md +290 -0
  93. package/agents/stat/AGENTS.md +138 -0
  94. package/agents/status-icon/AGENTS.md +243 -0
  95. package/agents/step-list/AGENTS.md +313 -0
  96. package/agents/table/AGENTS.md +286 -0
  97. package/agents/tabs/AGENTS.md +305 -0
  98. package/agents/tag-input/AGENTS.md +246 -0
  99. package/agents/time-picker/AGENTS.md +228 -0
  100. package/agents/timeline/AGENTS.md +1018 -0
  101. package/agents/toast/AGENTS.md +266 -0
  102. package/agents/toggle-group/AGENTS.md +216 -0
  103. package/agents/toolbar/AGENTS.md +277 -0
  104. package/agents/tooltip/AGENTS.md +154 -0
  105. package/agents/tracker/AGENTS.md +158 -0
  106. package/agents/tree-diagram/AGENTS.md +260 -0
  107. package/agents/tree-view/AGENTS.md +329 -0
  108. package/agents/typography/AGENTS.md +396 -0
  109. package/lib/index.js +17914 -0
  110. package/lib/style.css +2 -0
  111. package/lib/types/components/Accordion/Accordion.d.ts +57 -0
  112. package/lib/types/components/ActionBar/ActionBar.d.ts +24 -0
  113. package/lib/types/components/Alert/Alert.d.ts +36 -0
  114. package/lib/types/components/AppShell/AppShell.d.ts +38 -0
  115. package/lib/types/components/AreaChart/AreaChart.d.ts +17 -0
  116. package/lib/types/components/BarChart/BarChart.d.ts +57 -0
  117. package/lib/types/components/BarList/BarList.d.ts +56 -0
  118. package/lib/types/components/Breadcrumb/Breadcrumb.d.ts +15 -0
  119. package/lib/types/components/Calendar/Calendar.d.ts +34 -0
  120. package/lib/types/components/Calendar/DatePicker.d.ts +45 -0
  121. package/lib/types/components/Calendar/date.d.ts +32 -0
  122. package/lib/types/components/Card/Card.d.ts +64 -0
  123. package/lib/types/components/CardFrame/CardFrame.d.ts +15 -0
  124. package/lib/types/components/Chart/ChartParts.d.ts +38 -0
  125. package/lib/types/components/Chart/chart.d.ts +46 -0
  126. package/lib/types/components/Chart/useChartInteraction.d.ts +39 -0
  127. package/lib/types/components/ChatBubble/ChatBubble.d.ts +61 -0
  128. package/lib/types/components/ChatBubble/formatChatTime.d.ts +2 -0
  129. package/lib/types/components/ChatComposer/ChatComposer.d.ts +42 -0
  130. package/lib/types/components/CodeBlock/CodeBlock.d.ts +18 -0
  131. package/lib/types/components/CodeBlock/highlight.d.ts +10 -0
  132. package/lib/types/components/ColorPicker/ColorPicker.d.ts +61 -0
  133. package/lib/types/components/ColorPicker/color.d.ts +48 -0
  134. package/lib/types/components/ColorPicker/presets.d.ts +7 -0
  135. package/lib/types/components/Combobox/Combobox.d.ts +48 -0
  136. package/lib/types/components/CommandMenu/CommandMenu.d.ts +51 -0
  137. package/lib/types/components/Comment/Comment.d.ts +45 -0
  138. package/lib/types/components/ContextMenu/ContextMenu.d.ts +40 -0
  139. package/lib/types/components/DataGrid/DataGrid.d.ts +43 -0
  140. package/lib/types/components/DataGrid/GridPopover.d.ts +43 -0
  141. package/lib/types/components/DataGrid/anchor.d.ts +5 -0
  142. package/lib/types/components/DataGrid/model.d.ts +61 -0
  143. package/lib/types/components/DataGrid/panels.d.ts +63 -0
  144. package/lib/types/components/DataGrid/typeMeta.d.ts +6 -0
  145. package/lib/types/components/DataGrid/types.d.ts +77 -0
  146. package/lib/types/components/DescriptionList/DescriptionList.d.ts +77 -0
  147. package/lib/types/components/Dialog/AlertDialog.d.ts +26 -0
  148. package/lib/types/components/Dialog/Dialog.d.ts +42 -0
  149. package/lib/types/components/Dialog/modal.d.ts +38 -0
  150. package/lib/types/components/Drawer/Drawer.d.ts +62 -0
  151. package/lib/types/components/DropdownMenu/DropdownMenu.d.ts +97 -0
  152. package/lib/types/components/DropdownMenu/menuCore.d.ts +23 -0
  153. package/lib/types/components/Dropzone/Dropzone.d.ts +30 -0
  154. package/lib/types/components/EmptyState/EmptyState.d.ts +26 -0
  155. package/lib/types/components/FileChip/FileChip.d.ts +32 -0
  156. package/lib/types/components/FileUpload/FileUpload.d.ts +52 -0
  157. package/lib/types/components/FilterChips/FilterChips.d.ts +37 -0
  158. package/lib/types/components/FunnelChart/FunnelChart.d.ts +38 -0
  159. package/lib/types/components/FunnelChart/funnel.d.ts +25 -0
  160. package/lib/types/components/Highlight/Highlight.d.ts +35 -0
  161. package/lib/types/components/HoverCard/HoverCard.d.ts +47 -0
  162. package/lib/types/components/InlineDiff/InlineDiff.d.ts +36 -0
  163. package/lib/types/components/InlineDiff/diff.d.ts +42 -0
  164. package/lib/types/components/InlineDiff/useDiffReview.d.ts +57 -0
  165. package/lib/types/components/Kanban/Kanban.d.ts +64 -0
  166. package/lib/types/components/Kanban/KanbanCard.d.ts +35 -0
  167. package/lib/types/components/Kanban/move.d.ts +25 -0
  168. package/lib/types/components/LineChart/LineChart.d.ts +85 -0
  169. package/lib/types/components/List/List.d.ts +62 -0
  170. package/lib/types/components/Listbox/Listbox.d.ts +60 -0
  171. package/lib/types/components/Marker/Marker.d.ts +28 -0
  172. package/lib/types/components/Menubar/Menubar.d.ts +50 -0
  173. package/lib/types/components/MultiSelect/MultiSelect.d.ts +38 -0
  174. package/lib/types/components/NavigationMenu/NavigationMenu.d.ts +101 -0
  175. package/lib/types/components/NoticeStack/NoticeStack.d.ts +41 -0
  176. package/lib/types/components/NumberStepper/NumberStepper.d.ts +32 -0
  177. package/lib/types/components/OtpInput/OtpInput.d.ts +31 -0
  178. package/lib/types/components/Pagination/Pagination.d.ts +54 -0
  179. package/lib/types/components/Pagination/paginationRange.d.ts +7 -0
  180. package/lib/types/components/PhoneInput/PhoneInput.d.ts +47 -0
  181. package/lib/types/components/PieChart/PieChart.d.ts +67 -0
  182. package/lib/types/components/PieChart/arc.d.ts +26 -0
  183. package/lib/types/components/PieChart/useArcTween.d.ts +15 -0
  184. package/lib/types/components/Popover/Popover.d.ts +28 -0
  185. package/lib/types/components/ProgressTracker/ProgressTracker.d.ts +64 -0
  186. package/lib/types/components/Rating/Rating.d.ts +42 -0
  187. package/lib/types/components/Resizable/Resizable.d.ts +50 -0
  188. package/lib/types/components/Resizable/layout.d.ts +31 -0
  189. package/lib/types/components/ScaledPreview/ScaledPreview.d.ts +38 -0
  190. package/lib/types/components/ScatterChart/ScatterChart.d.ts +81 -0
  191. package/lib/types/components/ScatterChart/scatter.d.ts +14 -0
  192. package/lib/types/components/ScrollArea/ScrollArea.d.ts +34 -0
  193. package/lib/types/components/Select/Select.d.ts +39 -0
  194. package/lib/types/components/Sidebar/Sidebar.d.ts +39 -0
  195. package/lib/types/components/Skeleton/Skeleton.d.ts +47 -0
  196. package/lib/types/components/Slider/Slider.d.ts +36 -0
  197. package/lib/types/components/SparkChart/SparkChart.d.ts +55 -0
  198. package/lib/types/components/SparkChart/spark.d.ts +16 -0
  199. package/lib/types/components/Sparkbar/Sparkbar.d.ts +39 -0
  200. package/lib/types/components/SplitView/SplitView.d.ts +31 -0
  201. package/lib/types/components/Stat/Stat.d.ts +58 -0
  202. package/lib/types/components/StepList/StepList.d.ts +61 -0
  203. package/lib/types/components/Table/Table.d.ts +39 -0
  204. package/lib/types/components/Tabs/Tabs.d.ts +47 -0
  205. package/lib/types/components/TagInput/TagInput.d.ts +46 -0
  206. package/lib/types/components/TimePicker/TimePicker.d.ts +43 -0
  207. package/lib/types/components/TimePicker/time.d.ts +15 -0
  208. package/lib/types/components/Timeline/Timeline.d.ts +154 -0
  209. package/lib/types/components/Timeline/scale.d.ts +22 -0
  210. package/lib/types/components/Toast/Toaster.d.ts +19 -0
  211. package/lib/types/components/Toast/index.d.ts +4 -0
  212. package/lib/types/components/Toast/store.d.ts +75 -0
  213. package/lib/types/components/ToggleGroup/ToggleGroup.d.ts +28 -0
  214. package/lib/types/components/Toolbar/Toolbar.d.ts +70 -0
  215. package/lib/types/components/Tracker/Tracker.d.ts +43 -0
  216. package/lib/types/components/TreeDiagram/TreeDiagram.d.ts +68 -0
  217. package/lib/types/components/TreeView/TreeView.d.ts +107 -0
  218. package/lib/types/components/index.d.ts +186 -0
  219. package/lib/types/hooks/index.d.ts +17 -0
  220. package/lib/types/hooks/timing.d.ts +29 -0
  221. package/lib/types/hooks/useControllableState.d.ts +5 -0
  222. package/lib/types/hooks/useCountdown.d.ts +19 -0
  223. package/lib/types/hooks/useDigitInput.d.ts +24 -0
  224. package/lib/types/hooks/useDismiss.d.ts +3 -0
  225. package/lib/types/hooks/useElapsed.d.ts +28 -0
  226. package/lib/types/hooks/useFloating.d.ts +21 -0
  227. package/lib/types/hooks/useFocusTrap.d.ts +7 -0
  228. package/lib/types/hooks/usePresence.d.ts +8 -0
  229. package/lib/types/hooks/usePressToOpen.d.ts +20 -0
  230. package/lib/types/hooks/useScrollLock.d.ts +2 -0
  231. package/lib/types/hooks/useSelection.d.ts +29 -0
  232. package/lib/types/index.d.ts +5 -0
  233. package/lib/types/primitives/AspectRatio.d.ts +14 -0
  234. package/lib/types/primitives/BrandIcon.d.ts +12 -0
  235. package/lib/types/primitives/ColorDot.d.ts +20 -0
  236. package/lib/types/primitives/CopyButton.d.ts +12 -0
  237. package/lib/types/primitives/CountBadge.d.ts +28 -0
  238. package/lib/types/primitives/Countdown.d.ts +21 -0
  239. package/lib/types/primitives/Delta.d.ts +33 -0
  240. package/lib/types/primitives/Elapsed.d.ts +23 -0
  241. package/lib/types/primitives/FileIcon.d.ts +17 -0
  242. package/lib/types/primitives/Flag.d.ts +15 -0
  243. package/lib/types/primitives/IconStack.d.ts +27 -0
  244. package/lib/types/primitives/IconTile.d.ts +24 -0
  245. package/lib/types/primitives/Kbd.d.ts +19 -0
  246. package/lib/types/primitives/Layout.d.ts +64 -0
  247. package/lib/types/primitives/Link.d.ts +12 -0
  248. package/lib/types/primitives/MaskedText.d.ts +28 -0
  249. package/lib/types/primitives/Progress.d.ts +52 -0
  250. package/lib/types/primitives/RelativeTime.d.ts +22 -0
  251. package/lib/types/primitives/SearchInput.d.ts +8 -0
  252. package/lib/types/primitives/SelectorButton.d.ts +23 -0
  253. package/lib/types/primitives/Spinner.d.ts +15 -0
  254. package/lib/types/primitives/StatusIcon.d.ts +40 -0
  255. package/lib/types/primitives/Swatch.d.ts +11 -0
  256. package/lib/types/primitives/Tooltip.d.ts +17 -0
  257. package/lib/types/primitives/Typography.d.ts +48 -0
  258. package/lib/types/primitives/formatCountdown.d.ts +2 -0
  259. package/lib/types/primitives/formatElapsed.d.ts +8 -0
  260. package/lib/types/primitives/formatRelativeTime.d.ts +16 -0
  261. package/lib/types/primitives/hotkey.d.ts +10 -0
  262. package/lib/types/primitives/index.d.ts +188 -0
  263. package/lib/types/primitives/maskValue.d.ts +24 -0
  264. package/package.json +54 -4
@@ -0,0 +1,36 @@
1
+ import { type ReactNode } from 'react';
2
+ import './Alert.css';
3
+ export type AlertTone = 'neutral' | 'info' | 'success' | 'warning' | 'danger';
4
+ export interface AlertProps {
5
+ tone?: AlertTone;
6
+ title?: ReactNode;
7
+ /** Body text. */
8
+ children?: ReactNode;
9
+ /** Custom icon, or false to hide it. */
10
+ icon?: ReactNode | false;
11
+ /** Buttons under the text (or on the right for `layout="inline"`). */
12
+ actions?: ReactNode;
13
+ /** Shows a × that folds the alert away, then calls this. */
14
+ onClose?: () => void;
15
+ /** stacked: actions under the text · inline: one row, actions on the right. */
16
+ layout?: 'stacked' | 'inline';
17
+ className?: string;
18
+ }
19
+ /**
20
+ * A message that stays on the page (unlike a toast): form errors, limits, plan notices.
21
+ * Soft tinted background, no border; dismissing folds it away instead of popping out.
22
+ */
23
+ export declare function Alert({ tone, title, children, icon, actions, onClose, layout, className }: AlertProps): import("react").JSX.Element;
24
+ export interface BannerProps {
25
+ tone?: AlertTone;
26
+ children: ReactNode;
27
+ /** One action (a link-style button) after the message. */
28
+ action?: ReactNode;
29
+ onClose?: () => void;
30
+ icon?: ReactNode | false;
31
+ /** Square corners for a strip that spans the whole page or app edge to edge. */
32
+ flush?: boolean;
33
+ className?: string;
34
+ }
35
+ /** A full-width strip at the top of a page or app: maintenance, trial ending, new version. */
36
+ export declare function Banner({ tone, children, action, onClose, icon, flush, className }: BannerProps): import("react").JSX.Element;
@@ -0,0 +1,38 @@
1
+ import { type ReactNode } from 'react';
2
+ import './AppShell.css';
3
+ export interface AppShellProps {
4
+ /** Usually a <Sidebar>. */
5
+ sidebar: ReactNode;
6
+ /** A bar at the top of the main area (actions, search…). */
7
+ header?: ReactNode;
8
+ children: ReactNode;
9
+ /**
10
+ * plain: one white page, the window scrolls.
11
+ * inset: the sidebar sits on a gray canvas and the main area floats beside it as a white panel
12
+ * that scrolls on its own.
13
+ */
14
+ variant?: 'plain' | 'inset';
15
+ /** Width of the sidebar on wide screens. */
16
+ sidebarWidth?: number;
17
+ /** Wide screens: folds the sidebar away (it slides out while the main area widens). */
18
+ sidebarCollapsed?: boolean;
19
+ /** Narrow screens: the sidebar becomes a drawer that you open and close. */
20
+ mobileSidebarOpen?: boolean;
21
+ onMobileSidebarOpenChange?: (open: boolean) => void;
22
+ /** A panel on the right (details, tools, a workspace panel). Hidden on narrow screens (≤ 900px). */
23
+ aside?: ReactNode;
24
+ /** Width of the right panel, px. */
25
+ asideWidth?: number;
26
+ /** Shows or hides the right panel; it slides in and out while the main area resizes. */
27
+ asideOpen?: boolean;
28
+ /** Accessible name of the right panel. */
29
+ asideLabel?: string;
30
+ /** When this changes (a new page), the main area scrolls back to the top. */
31
+ scrollKey?: unknown;
32
+ className?: string;
33
+ }
34
+ /**
35
+ * Page frame: a fixed sidebar beside a scrolling main area (and an optional panel on the right);
36
+ * the sidebar becomes a slide-in drawer on small screens.
37
+ */
38
+ export declare function AppShell({ sidebar, header, children, variant, sidebarWidth, sidebarCollapsed, mobileSidebarOpen, onMobileSidebarOpenChange, aside, asideWidth, asideOpen, asideLabel, scrollKey, className, }: AppShellProps): import("react").JSX.Element;
@@ -0,0 +1,17 @@
1
+ import { type LineChartProps } from '../LineChart/LineChart';
2
+ export type AreaChartType = 'default' | 'stacked' | 'percent';
3
+ export interface AreaChartProps extends Omit<LineChartProps, 'area' | 'stack'> {
4
+ /**
5
+ * default: every series from the baseline, translucent and overlapping · stacked: layers piled on
6
+ * top of each other (the top edge is the total) · percent: every row scaled to 100% (shares).
7
+ */
8
+ type?: AreaChartType;
9
+ /** gradient: fades downward · solid: one flat soft tint. */
10
+ fill?: 'gradient' | 'solid';
11
+ }
12
+ /**
13
+ * Filled areas over the same axes, tooltip, legend and keyboard guide as LineChart — it is LineChart
14
+ * with `area` on plus the stacking modes, so bands, reference lines, end dots and streaming all work.
15
+ * Stacked tooltips list the top layer first and end with the row total.
16
+ */
17
+ export declare function AreaChart({ type, fill, 'aria-label': ariaLabel, className, ...rest }: AreaChartProps): import("react").JSX.Element;
@@ -0,0 +1,57 @@
1
+ import { type CSSProperties, type ReactNode } from 'react';
2
+ import { type ChartRow, type ChartSeries } from '../Chart/chart';
3
+ import './BarChart.css';
4
+ export type BarSeries = ChartSeries;
5
+ export type BarChartRow = ChartRow;
6
+ export interface BarChartProps {
7
+ data: BarChartRow[];
8
+ /** Field used for the x axis (a label per row). */
9
+ xKey: string;
10
+ series: BarSeries[];
11
+ /** Plot height in px (axis labels included). */
12
+ height?: number;
13
+ /** Stack the series in one bar per row instead of side by side. */
14
+ stacked?: boolean;
15
+ /** White gap in px between stacked segments. */
16
+ segmentGap?: number;
17
+ /** Number of y-axis labels, 0 included. */
18
+ yTickCount?: number;
19
+ yMax?: number;
20
+ /** Exact y-axis values (e.g. `[0, 50, 100]`); overrides `yTickCount` and `yMax`. */
21
+ yTicks?: number[];
22
+ /** Side of the value axis. */
23
+ yAxis?: 'left' | 'right';
24
+ formatValue?: (value: number, series: BarSeries) => string;
25
+ formatAxisValue?: (value: number) => string;
26
+ formatX?: (row: BarChartRow, index: number) => string;
27
+ formatTitle?: (row: BarChartRow, index: number) => ReactNode;
28
+ /** Icon under each bar instead of a text label; the selected one opens into a chip with icon + label. */
29
+ xIcon?: (row: BarChartRow, index: number) => ReactNode;
30
+ /** Footer row with the sum (stacked bars show it by default). */
31
+ showTotal?: boolean;
32
+ /** Where the sum goes: a footer row, or on the right of the tooltip title. */
33
+ totalPlacement?: 'footer' | 'header';
34
+ /** Node before the tooltip title (a Checkbox, an icon). */
35
+ tooltipLeading?: (row: BarChartRow, index: number) => ReactNode;
36
+ /** Tooltip row order: `series` order, `reverse` (top of the stack first) or biggest value first. */
37
+ tooltipSort?: 'series' | 'reverse' | 'value';
38
+ legend?: boolean;
39
+ activeIndex?: number | null;
40
+ defaultActiveIndex?: number | null;
41
+ onActiveIndexChange?: (index: number | null) => void;
42
+ /** Rows can be picked by click, Enter or Space. Implied by `selected` · `defaultSelected` · `onSelectedChange`. */
43
+ selectable?: boolean;
44
+ /** Picked row (controlled). The other rows are drawn in faded tints. */
45
+ selected?: number | null;
46
+ defaultSelected?: number | null;
47
+ onSelectedChange?: (index: number | null) => void;
48
+ 'aria-label'?: string;
49
+ className?: string;
50
+ style?: CSSProperties;
51
+ }
52
+ /**
53
+ * Grouped or stacked bars over the same axes as LineChart. Hovering a row fills its band with the
54
+ * small gray and the value card sits beside it; bars grow from the baseline and morph on new data.
55
+ * Selectable charts keep one row in full colour and fade the rest.
56
+ */
57
+ export declare function BarChart({ data, xKey, series, height, stacked, segmentGap, yTickCount, yMax, yTicks, yAxis, formatValue, formatAxisValue, formatX, formatTitle, xIcon, showTotal, totalPlacement, tooltipLeading, tooltipSort, legend, activeIndex, defaultActiveIndex, onActiveIndexChange, selectable: selectableProp, selected: selectedProp, defaultSelected, onSelectedChange, 'aria-label': ariaLabel, className, style, }: BarChartProps): import("react").JSX.Element;
@@ -0,0 +1,56 @@
1
+ import { type CSSProperties, type ReactNode } from 'react';
2
+ import './BarList.css';
3
+ export interface BarListItem {
4
+ /** Stable id. Defaults to `name`. */
5
+ key?: string;
6
+ name: string;
7
+ value: number;
8
+ /** Small icon or IconTile before the name. */
9
+ icon?: ReactNode;
10
+ /** Turns the name into a link (ignored on clickable rows, which are buttons already). */
11
+ href?: string;
12
+ /** Bar color for this row only: a CSS variable (`--chart-2`) or any color, drawn as a soft tint. */
13
+ color?: string;
14
+ }
15
+ export type BarListTone = 'accent' | 'neutral' | 'success' | 'warning' | 'danger';
16
+ export type BarListSortOrder = 'descending' | 'ascending' | 'none';
17
+ export type BarListSize = 'sm' | 'md' | 'lg';
18
+ export interface BarListProps {
19
+ data: BarListItem[];
20
+ /** Row order. `none` keeps the order of `data`. */
21
+ sortOrder?: BarListSortOrder;
22
+ /** Soft fill of the bars. */
23
+ tone?: BarListTone;
24
+ /** Bar color instead of `tone`: a CSS variable (`--chart-1`) or any color, drawn as a soft tint. */
25
+ color?: string;
26
+ formatValue?: (value: number, item: BarListItem) => string;
27
+ /** Rows become buttons (hover fill, Tab / ↑ ↓ focus); called with the picked row. */
28
+ onValueChange?: (item: BarListItem, index: number) => void;
29
+ /** Bars grow in on mount, slide to new widths and rows slide to new places when data changes. */
30
+ showAnimation?: boolean;
31
+ /** Value of a full-width bar. Defaults to the largest value. */
32
+ max?: number;
33
+ /** Rows shown before the "더 보기" button. */
34
+ limit?: number;
35
+ /** Rows past `limit` are shown (controlled). */
36
+ expanded?: boolean;
37
+ defaultExpanded?: boolean;
38
+ onExpandedChange?: (expanded: boolean) => void;
39
+ moreLabel?: (hidden: number) => ReactNode;
40
+ lessLabel?: ReactNode;
41
+ /** Overline header on the left ("페이지"). A header row shows when this or `valueLabel` is set. */
42
+ nameLabel?: ReactNode;
43
+ /** Overline header on the right ("방문수"). */
44
+ valueLabel?: ReactNode;
45
+ /** Row height: 28 · 32 · 36 px. */
46
+ size?: BarListSize;
47
+ 'aria-label'?: string;
48
+ className?: string;
49
+ style?: CSSProperties;
50
+ }
51
+ /**
52
+ * A ranked list of horizontal bars (top pages, sources, countries). Each bar is a soft tint as
53
+ * wide as its share of the largest value, drawn behind the name; the value sits right-aligned
54
+ * in tabular figures. Long lists fold behind "더 보기".
55
+ */
56
+ export declare function BarList({ data, sortOrder, tone, color, formatValue, onValueChange, showAnimation, max, limit, expanded: expandedProp, defaultExpanded, onExpandedChange, moreLabel, lessLabel, nameLabel, valueLabel, size, 'aria-label': ariaLabel, className, style, }: BarListProps): import("react").JSX.Element;
@@ -0,0 +1,15 @@
1
+ import type { ReactNode } from 'react';
2
+ import './Breadcrumb.css';
3
+ export interface BreadcrumbItem {
4
+ label: ReactNode;
5
+ href?: string;
6
+ onClick?: () => void;
7
+ }
8
+ export interface BreadcrumbProps {
9
+ /** The last item is the current page. */
10
+ items: BreadcrumbItem[];
11
+ separator?: ReactNode;
12
+ className?: string;
13
+ }
14
+ /** Where this page sits; every item but the last links back up. */
15
+ export declare function Breadcrumb({ items, separator, className }: BreadcrumbProps): import("react").JSX.Element;
@@ -0,0 +1,34 @@
1
+ import './Calendar.css';
2
+ import type { DateRange } from './date';
3
+ export type { DateRange } from './date';
4
+ interface CalendarBaseProps {
5
+ /** Earliest / latest pickable day. */
6
+ min?: Date;
7
+ max?: Date;
8
+ /** Extra rule for unpickable days (holidays, weekends…). */
9
+ isDateDisabled?: (date: Date) => boolean;
10
+ /** 0 = Sunday (default, as in Korean calendars), 1 = Monday. */
11
+ weekStartsOn?: 0 | 1;
12
+ /** The month shown first; defaults to the selected day's month, else today. */
13
+ defaultMonth?: Date;
14
+ /** Focus the selected (or today's) day when it mounts — for popovers. */
15
+ autoFocus?: boolean;
16
+ /** The bottom row with a "오늘" button (and, for ranges, what to pick next). */
17
+ showFooter?: boolean;
18
+ className?: string;
19
+ }
20
+ export type CalendarProps = CalendarBaseProps & ({
21
+ mode?: 'single';
22
+ value?: Date | null;
23
+ onValueChange?: (date: Date) => void;
24
+ } | {
25
+ mode: 'range';
26
+ value?: DateRange;
27
+ onValueChange?: (range: DateRange) => void;
28
+ });
29
+ /**
30
+ * A month grid. Arrows move by day, PageUp/PageDown by month, Home/End to the week's ends,
31
+ * Enter/Space picks. Changing month slides the grid in from the direction you went.
32
+ * The header opens a year / month picker on one screen: scroll the years, tap a month, done.
33
+ */
34
+ export declare function Calendar(props: CalendarProps): import("react").JSX.Element;
@@ -0,0 +1,45 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type DatePreset, type DateRange } from './date';
3
+ import '../Select/Select.css';
4
+ import './DatePicker.css';
5
+ interface PickerBaseProps {
6
+ placeholder?: ReactNode;
7
+ size?: 'sm' | 'md' | 'lg';
8
+ disabled?: boolean;
9
+ invalid?: boolean;
10
+ /** Show an × to clear the value. */
11
+ clearable?: boolean;
12
+ min?: Date;
13
+ max?: Date;
14
+ isDateDisabled?: (date: Date) => boolean;
15
+ weekStartsOn?: 0 | 1;
16
+ /** Popover alignment to the field. */
17
+ align?: 'start' | 'end';
18
+ id?: string;
19
+ className?: string;
20
+ 'aria-label'?: string;
21
+ }
22
+ export interface DatePickerProps extends Omit<PickerBaseProps, 'placeholder'> {
23
+ value?: Date | null;
24
+ defaultValue?: Date | null;
25
+ onValueChange?: (date: Date | null) => void;
26
+ /** How the picked date is written in the field when it isn't being edited. */
27
+ formatValue?: (date: Date) => string;
28
+ placeholder?: string;
29
+ }
30
+ /**
31
+ * A date field you can type into ("10/25", "2026.10.25", "내일"…) or pick from the Calendar.
32
+ * Typing a full date moves the calendar along; Enter confirms, ↓ jumps into the calendar,
33
+ * Esc closes or undoes the edit. Something unreadable shows as an error and reverts on leave.
34
+ */
35
+ export declare function DatePicker({ value: valueProp, defaultValue, onValueChange, formatValue, placeholder, clearable, align, min, max, isDateDisabled, weekStartsOn, id, size, disabled, invalid, className, 'aria-label': ariaLabel, }: DatePickerProps): import("react").JSX.Element;
36
+ export interface DateRangePickerProps extends PickerBaseProps {
37
+ value?: DateRange;
38
+ defaultValue?: DateRange;
39
+ onValueChange?: (range: DateRange) => void;
40
+ /** Quick picks on the left; pass [] to hide. */
41
+ presets?: DatePreset[];
42
+ }
43
+ /** Start and end in one field. Pick two days (the band previews on hover) or a preset. */
44
+ export declare function DateRangePicker({ value: valueProp, defaultValue, onValueChange, presets, placeholder, clearable, align, min, max, isDateDisabled, weekStartsOn, ...field }: DateRangePickerProps): import("react").JSX.Element;
45
+ export {};
@@ -0,0 +1,32 @@
1
+ /** Small date helpers (local time, day precision). No library needed for a month view. */
2
+ export declare const startOfDay: (d: Date) => Date;
3
+ export declare const startOfMonth: (d: Date) => Date;
4
+ export declare const addDays: (d: Date, n: number) => Date;
5
+ export declare const addMonths: (d: Date, n: number) => Date;
6
+ export declare const sameDay: (a: Date | null | undefined, b: Date | null | undefined) => boolean;
7
+ export declare const sameMonth: (a: Date, b: Date) => boolean;
8
+ export declare const compareDay: (a: Date, b: Date) => number;
9
+ export declare const between: (d: Date, from: Date, to: Date) => boolean;
10
+ /** The 6×7 days shown for a month, starting on `weekStartsOn` (0 = Sunday). */
11
+ export declare function monthGrid(month: Date, weekStartsOn: number): Date[];
12
+ export declare const weekdayLabels: (weekStartsOn: number) => string[];
13
+ export declare const formatMonth: (d: Date) => string;
14
+ /** "2026년 10월 25일" — the year is dropped when it's this year. */
15
+ export declare const formatDate: (d: Date, withYear?: boolean) => string;
16
+ export declare const formatFullDate: (d: Date) => string;
17
+ export interface DateRange {
18
+ from: Date | null;
19
+ to: Date | null;
20
+ }
21
+ export interface DatePreset {
22
+ label: string;
23
+ /** Returns the range for this preset (computed when clicked, so "오늘" stays current). */
24
+ range: () => DateRange;
25
+ }
26
+ export declare const DEFAULT_DATE_PRESETS: DatePreset[];
27
+ /**
28
+ * Reads what people actually type for a date:
29
+ * "2026-10-25", "2026.10.25.", "2026/10/25", "20261025", "10/25", "10.25", "10월 25일",
30
+ * "2026년 10월 25일", "25일", and 그제 / 어제 / 오늘 / 내일 / 모레. Returns null when it isn't a real date.
31
+ */
32
+ export declare function parseDateInput(text: string, base?: Date): Date | null;
@@ -0,0 +1,64 @@
1
+ import type { ComponentPropsWithRef, CSSProperties, ElementType, ReactNode } from 'react';
2
+ import './Card.css';
3
+ export type CardVariant = 'default' | 'raised' | 'plain';
4
+ export type CardPadding = 'none' | 'sm' | 'md' | 'lg';
5
+ interface CardOwnProps<E extends ElementType> {
6
+ /** Render as a link or button for clickable cards (`interactive` adds hover/press feedback). */
7
+ as?: E;
8
+ /** default: faint outline + soft lift · raised: floats higher · plain: no shadow, grouped by spacing. */
9
+ variant?: CardVariant;
10
+ /** Inner padding for the parts inside (Header / Body / Footer read it). */
11
+ padding?: CardPadding;
12
+ interactive?: boolean;
13
+ /** Selectable card (radio / checkbox cards). Passing false still shows the empty check. */
14
+ selected?: boolean;
15
+ className?: string;
16
+ style?: CSSProperties;
17
+ children?: ReactNode;
18
+ }
19
+ export type CardProps<E extends ElementType = 'div'> = CardOwnProps<E> & Omit<ComponentPropsWithRef<E>, keyof CardOwnProps<E>>;
20
+ /** A white surface that groups related content. Compose with Card.Header / Body / Footer / Media. */
21
+ export declare function Card<E extends ElementType = 'div'>({ as, variant, padding, interactive, selected, className, children, ...rest }: CardProps<E>): import("react").JSX.Element;
22
+ export declare namespace Card {
23
+ var Header: typeof CardHeader;
24
+ var Body: typeof CardBody;
25
+ var Footer: typeof CardFooter;
26
+ var Media: typeof CardMedia;
27
+ }
28
+ export interface CardHeaderProps {
29
+ title?: ReactNode;
30
+ description?: ReactNode;
31
+ /** Small text above the title (category, date…). */
32
+ eyebrow?: ReactNode;
33
+ /** Leading icon or avatar. */
34
+ icon?: ReactNode;
35
+ /** Trailing buttons, badge or menu. */
36
+ actions?: ReactNode;
37
+ /** Custom content instead of title/description. */
38
+ children?: ReactNode;
39
+ className?: string;
40
+ }
41
+ export declare function CardHeader({ title, description, eyebrow, icon, actions, children, className }: CardHeaderProps): import("react").JSX.Element;
42
+ export declare function CardBody({ children, className, style }: {
43
+ children?: ReactNode;
44
+ className?: string;
45
+ style?: CSSProperties;
46
+ }): import("react").JSX.Element;
47
+ export interface CardFooterProps {
48
+ children?: ReactNode;
49
+ /** Where the footer content sits; `between` spreads two groups apart. */
50
+ align?: 'start' | 'end' | 'between';
51
+ /** A hairline above the footer (for dense cards with lots of body content). */
52
+ divided?: boolean;
53
+ /** A soft gray band across the bottom edge (status line + elapsed time) instead of plain padding. */
54
+ band?: boolean;
55
+ className?: string;
56
+ }
57
+ export declare function CardFooter({ children, align, divided, band, className }: CardFooterProps): import("react").JSX.Element;
58
+ /** Full-bleed image / preview at the top or bottom edge of the card. */
59
+ export declare function CardMedia({ children, ratio, className }: {
60
+ children: ReactNode;
61
+ ratio?: number | string;
62
+ className?: string;
63
+ }): import("react").JSX.Element;
64
+ export {};
@@ -0,0 +1,15 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ import './CardFrame.css';
3
+ export interface CardFrameProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
4
+ /** A caption line above the card, on the gray ("4단계 · gmail.send"). Two children spread to both ends. */
5
+ header?: ReactNode;
6
+ /** A status line below the card, on the gray ("실행 중 · 3/5" + elapsed). Two children spread to both ends. */
7
+ footer?: ReactNode;
8
+ /** Usually one `Card`. The frame leaves a 4px gray rim so the card's corners stay concentric. */
9
+ children?: ReactNode;
10
+ }
11
+ /**
12
+ * A soft gray tray that wraps a white card, with an optional caption above or status line below.
13
+ * The card stays the content; the tray carries context (which step, how far along) outside it.
14
+ */
15
+ export declare function CardFrame({ header, footer, children, className, ...rest }: CardFrameProps): import("react").JSX.Element;
@@ -0,0 +1,38 @@
1
+ import type { ReactNode } from 'react';
2
+ import './Chart.css';
3
+ export interface ChartTooltipRow {
4
+ key: string;
5
+ label: ReactNode;
6
+ color: string;
7
+ value: ReactNode;
8
+ }
9
+ export interface ChartTooltipProps {
10
+ title?: ReactNode;
11
+ /** Node before the title (a Checkbox, an icon). */
12
+ leading?: ReactNode;
13
+ /** Value on the right of the title row (the category total). */
14
+ value?: ReactNode;
15
+ rows: ChartTooltipRow[];
16
+ footer?: ChartTooltipRow;
17
+ }
18
+ /** The floating value card: a raised Card with a title row, a hairline and ColorDot rows. */
19
+ export declare function ChartTooltip({ title, leading, value, rows, footer }: ChartTooltipProps): import("react").JSX.Element;
20
+ export interface ChartLegendItem {
21
+ key: string;
22
+ label: ReactNode;
23
+ color: string;
24
+ /** Shown on the right in the `list` layout. */
25
+ value?: ReactNode;
26
+ /** A muted second value after `value` in the `list` layout (share, unit). Kept in its own aligned column. */
27
+ detail?: ReactNode;
28
+ }
29
+ export interface ChartLegendProps {
30
+ items: ChartLegendItem[];
31
+ /** inline: one wrapping row under the plot · list: a column with values, beside a pie. */
32
+ layout?: 'inline' | 'list';
33
+ /** Key being highlighted; the others fade. */
34
+ focused?: string | null;
35
+ onFocusChange?: (key: string | null) => void;
36
+ }
37
+ /** Color keys for a chart. Hovering an entry highlights its series. */
38
+ export declare function ChartLegend({ items, layout, focused, onFocusChange }: ChartLegendProps): import("react").JSX.Element;
@@ -0,0 +1,46 @@
1
+ export interface ChartSeries {
2
+ /** Field of each row that holds this series' number. */
3
+ key: string;
4
+ label: string;
5
+ /** CSS variable (`--chart-1`) or any color. Defaults to the chart palette in order. */
6
+ color?: string;
7
+ }
8
+ export type ChartRow = Record<string, string | number | null | undefined>;
9
+ export declare const formatNumber: (v: number) => string;
10
+ export declare const formatCompact: (v: number) => string;
11
+ export declare const formatPercent: (ratio: number) => string;
12
+ /** `--chart-1` … `--chart-6` in order unless the item names its own color. */
13
+ export declare const chartColor: (color: string | undefined, index: number) => string;
14
+ export declare const numberAt: (row: ChartRow | undefined, key: string) => number | null;
15
+ /** 0 … top in `count - 1` equal, round steps (1 · 1.5 · 2 · 2.5 · 3 · 5 × 10ⁿ). */
16
+ export declare function niceTicks(max: number, count: number): number[];
17
+ /** Left gutter wide enough for the longest y label (rough glyph width of the caption role). */
18
+ export declare const axisGutter: (labels: string[]) => number;
19
+ /** Show every `step`-th x label so they keep at least `minGap` px apart. */
20
+ export declare const labelStep: (count: number, span: number, minGap?: number) => number;
21
+ type Point = [number, number];
22
+ /** SVG paths through the points, one per unbroken run (`null` gaps split the line). */
23
+ export declare function lineRuns(points: Array<Point | null>, curve: 'linear' | 'smooth'): {
24
+ d: string;
25
+ x0: number;
26
+ x1: number;
27
+ }[];
28
+ /** A rect with only the top corners rounded (bars grow from the baseline). */
29
+ export declare function barPath(x: number, y: number, w: number, h: number, r: number): string;
30
+ /** Annular sector from angle a0 to a1 (radians, 0 = 12 o'clock, clockwise). */
31
+ export declare function arcPath(cx: number, cy: number, r: number, inner: number, a0: number, a1: number): string;
32
+ /** Tone of an annotation (band, reference line). */
33
+ export type ChartTone = 'neutral' | 'accent' | 'warning' | 'danger';
34
+ /** Soft fill per tone, for bands behind the plot. */
35
+ export declare const CHART_TONE_SOFT: Record<ChartTone, string>;
36
+ /** Strong color per tone, for reference lines and their labels. */
37
+ export declare const CHART_TONE_STRONG: Record<ChartTone, string>;
38
+ /** One unbroken SVG path through the points (`linear` segments or the monotone `smooth` curve). */
39
+ export declare const linePath: (points: Array<[number, number]>, curve: "linear" | "smooth") => string;
40
+ /**
41
+ * A closed band between two edges over the same x positions: an area down to the baseline, or one
42
+ * layer of a stack. Both edges use the same commands, so a band morphs smoothly (CSS `d`) between
43
+ * overlapping and stacked shapes.
44
+ */
45
+ export declare function bandPath(upper: Array<[number, number]>, lower: Array<[number, number]>, curve: 'linear' | 'smooth'): string;
46
+ export {};
@@ -0,0 +1,39 @@
1
+ import { type FocusEvent, type KeyboardEvent } from 'react';
2
+ export interface ChartInteractionOptions {
3
+ /** Number of things the guide can land on (rows, bands, slices). */
4
+ count: number;
5
+ activeIndex?: number | null;
6
+ defaultActiveIndex?: number | null;
7
+ onActiveIndexChange?: (index: number | null) => void;
8
+ /** Keyboard focus lands here first. Defaults to the last item (the latest value). */
9
+ initialKeyboardIndex?: 'first' | 'last';
10
+ }
11
+ /**
12
+ * Hover · touch · keyboard highlighting shared by every chart.
13
+ * - `active` is the highlighted item (controllable); `shown` keeps the last one while things fade out.
14
+ * - Leaving the plot waits `TIMING.hoverGrace` so grazing the edge doesn't flicker.
15
+ * - `settled` turns on a frame after opening, so the tooltip appears in place and only slides afterwards.
16
+ */
17
+ export declare function useChartInteraction({ count, activeIndex, defaultActiveIndex, onActiveIndexChange, initialKeyboardIndex }: ChartInteractionOptions): {
18
+ active: number | null;
19
+ setActive: (next: number | null) => void;
20
+ open: boolean;
21
+ shown: number | null;
22
+ settled: boolean;
23
+ width: number;
24
+ tipRef: import("react").RefObject<HTMLDivElement | null>;
25
+ tipSize: {
26
+ w: number;
27
+ h: number;
28
+ };
29
+ hover: (i: number | null) => void;
30
+ leave: () => void;
31
+ plotProps: {
32
+ ref: import("react").RefObject<HTMLDivElement | null>;
33
+ tabIndex: number;
34
+ role: "group";
35
+ onKeyDown: (e: KeyboardEvent<HTMLElement>) => void;
36
+ onFocus: (e: FocusEvent<HTMLElement>) => void;
37
+ onBlur: () => void;
38
+ };
39
+ };
@@ -0,0 +1,61 @@
1
+ import { type CSSProperties, type ReactNode } from 'react';
2
+ import { type DateInput } from '../../primitives';
3
+ import './ChatBubble.css';
4
+ /** `start` = someone else's message (left), `end` = mine (right). */
5
+ export type ChatBubbleSide = 'start' | 'end';
6
+ /** Fill: gray for the other side, blue or near-black for mine. */
7
+ export type ChatBubbleTone = 'neutral' | 'accent' | 'primary';
8
+ /** Where a bubble sits in one person's run; the corners facing its neighbours tighten. */
9
+ export type ChatBubblePosition = 'single' | 'first' | 'middle' | 'last';
10
+ /** Delivery state of a message I sent. `sending` is pending, `sent` / `read` are committed. */
11
+ export type ChatBubbleStatus = 'sending' | 'sent' | 'read' | 'failed';
12
+ export interface ChatBubbleProps {
13
+ /** Defaults to the enclosing `ChatBubbleGroup`'s side, else `start`. */
14
+ side?: ChatBubbleSide;
15
+ /** Defaults to `neutral` on the start side and `accent` on the end side. */
16
+ tone?: ChatBubbleTone;
17
+ /** Set by `ChatBubbleGroup`; pass it yourself only for a bubble outside a group. */
18
+ position?: ChatBubblePosition;
19
+ /** The message. */
20
+ children?: ReactNode;
21
+ /** When it was sent; shown as clock time beside the last bubble of a run, full date on hover. */
22
+ time?: DateInput;
23
+ /** Delivery state, beside the time. `failed` also shows a retry button when `onRetry` is given. */
24
+ status?: ChatBubbleStatus;
25
+ onRetry?: () => void;
26
+ /** Three bouncing dots instead of text: the other person is typing. */
27
+ typing?: boolean;
28
+ /** Buttons beside the bubble (react, reply, more). They appear while it's hovered or focused. */
29
+ actions?: ReactNode;
30
+ /** Under the bubble: reactions, an attachment, a link preview. */
31
+ footer?: ReactNode;
32
+ /** Rise in from below when it mounts — for a message that just arrived. */
33
+ appear?: boolean;
34
+ className?: string;
35
+ style?: CSSProperties;
36
+ }
37
+ /** One chat message in a filled bubble. Group a person's run with `ChatBubbleGroup`. */
38
+ export declare function ChatBubble({ side: sideProp, tone: toneProp, position: positionProp, children, time, status, onRetry, typing, actions, footer, appear, className, style, }: ChatBubbleProps): import("react").JSX.Element;
39
+ export declare namespace ChatBubble {
40
+ var Group: typeof ChatBubbleGroup;
41
+ }
42
+ export interface ChatBubbleGroupProps {
43
+ /** Whose run this is. A string on the start side also draws an avatar and the name. */
44
+ author?: ReactNode;
45
+ /** Replaces the default avatar. Pass `null` to keep the gutter empty. */
46
+ avatar?: ReactNode;
47
+ side?: ChatBubbleSide;
48
+ /** Avatar size in px; the bubbles line up beside it. */
49
+ avatarSize?: number;
50
+ /** Name above the first bubble. On by default for the start side (group chats), off for 1:1. */
51
+ showName?: boolean;
52
+ /** `ChatBubble`s, oldest first. */
53
+ children: ReactNode;
54
+ className?: string;
55
+ style?: CSSProperties;
56
+ }
57
+ /**
58
+ * One person's run of messages: their bubbles stacked close together with the corners between
59
+ * them tightened, the avatar beside the last one and the name above the first.
60
+ */
61
+ export declare function ChatBubbleGroup({ author, avatar, side, avatarSize, showName, children, className, style, }: ChatBubbleGroupProps): import("react").JSX.Element;
@@ -0,0 +1,2 @@
1
+ /** "오후 3:12" — chat bubbles show the clock time, not "2분 전". */
2
+ export declare function formatChatTime(date: Date): string;