@tulipfarm/sprout 0.0.0-stage → 0.2.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 (314) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +183 -2
  3. package/dist/components/accordion.d.ts +28 -0
  4. package/dist/components/accordion.js +26 -0
  5. package/dist/components/alert-dialog.d.ts +60 -0
  6. package/dist/components/alert-dialog.js +69 -0
  7. package/dist/components/alert.d.ts +30 -0
  8. package/dist/components/alert.js +35 -0
  9. package/dist/components/aspect-ratio.d.ts +7 -0
  10. package/dist/components/aspect-ratio.js +6 -0
  11. package/dist/components/attachment.d.ts +118 -0
  12. package/dist/components/attachment.js +285 -0
  13. package/dist/components/avatar.d.ts +32 -0
  14. package/dist/components/avatar.js +73 -0
  15. package/dist/components/badge.d.ts +21 -0
  16. package/dist/components/badge.js +27 -0
  17. package/dist/components/brand-icon.d.ts +28 -0
  18. package/dist/components/brand-icon.js +82 -0
  19. package/dist/components/breadcrumb.d.ts +29 -0
  20. package/dist/components/breadcrumb.js +44 -0
  21. package/dist/components/button-group.d.ts +28 -0
  22. package/dist/components/button-group.js +36 -0
  23. package/dist/components/button.d.ts +79 -0
  24. package/dist/components/button.js +93 -0
  25. package/dist/components/calendar.d.ts +27 -0
  26. package/dist/components/calendar.js +107 -0
  27. package/dist/components/canvas.d.ts +78 -0
  28. package/dist/components/canvas.js +180 -0
  29. package/dist/components/card.d.ts +43 -0
  30. package/dist/components/card.js +42 -0
  31. package/dist/components/carousel.d.ts +57 -0
  32. package/dist/components/carousel.js +422 -0
  33. package/dist/components/chart.d.ts +112 -0
  34. package/dist/components/chart.js +172 -0
  35. package/dist/components/chat-confirmation.d.ts +42 -0
  36. package/dist/components/chat-confirmation.js +62 -0
  37. package/dist/components/chat-input.d.ts +94 -0
  38. package/dist/components/chat-input.js +279 -0
  39. package/dist/components/chat-plan.d.ts +21 -0
  40. package/dist/components/chat-plan.js +35 -0
  41. package/dist/components/chat-sources.d.ts +64 -0
  42. package/dist/components/chat-sources.js +66 -0
  43. package/dist/components/checkbox.d.ts +16 -0
  44. package/dist/components/checkbox.js +17 -0
  45. package/dist/components/choice-list.d.ts +53 -0
  46. package/dist/components/choice-list.js +36 -0
  47. package/dist/components/code-block.d.ts +35 -0
  48. package/dist/components/code-block.js +64 -0
  49. package/dist/components/collapsible.d.ts +24 -0
  50. package/dist/components/collapsible.js +27 -0
  51. package/dist/components/combobox.d.ts +95 -0
  52. package/dist/components/combobox.js +106 -0
  53. package/dist/components/command.d.ts +94 -0
  54. package/dist/components/command.js +414 -0
  55. package/dist/components/context-menu.d.ts +57 -0
  56. package/dist/components/context-menu.js +60 -0
  57. package/dist/components/dialog.d.ts +60 -0
  58. package/dist/components/dialog.js +79 -0
  59. package/dist/components/direction.d.ts +6 -0
  60. package/dist/components/direction.js +6 -0
  61. package/dist/components/dropdown-menu.d.ts +62 -0
  62. package/dist/components/dropdown-menu.js +59 -0
  63. package/dist/components/field.d.ts +117 -0
  64. package/dist/components/field.js +150 -0
  65. package/dist/components/file-explorer.d.ts +27 -0
  66. package/dist/components/file-explorer.js +300 -0
  67. package/dist/components/file-viewer.d.ts +137 -0
  68. package/dist/components/file-viewer.js +400 -0
  69. package/dist/components/form.d.ts +87 -0
  70. package/dist/components/form.js +55 -0
  71. package/dist/components/glass-banner.d.ts +27 -0
  72. package/dist/components/glass-banner.js +116 -0
  73. package/dist/components/gradient-banner.d.ts +37 -0
  74. package/dist/components/gradient-banner.js +43 -0
  75. package/dist/components/hover-card.d.ts +27 -0
  76. package/dist/components/hover-card.js +26 -0
  77. package/dist/components/input-group.d.ts +68 -0
  78. package/dist/components/input-group.js +88 -0
  79. package/dist/components/input-otp.d.ts +38 -0
  80. package/dist/components/input-otp.js +43 -0
  81. package/dist/components/input.d.ts +16 -0
  82. package/dist/components/input.js +18 -0
  83. package/dist/components/kbd.d.ts +12 -0
  84. package/dist/components/kbd.js +11 -0
  85. package/dist/components/label.d.ts +8 -0
  86. package/dist/components/label.js +10 -0
  87. package/dist/components/mention-list.d.ts +54 -0
  88. package/dist/components/mention-list.js +31 -0
  89. package/dist/components/menubar.d.ts +64 -0
  90. package/dist/components/menubar.js +68 -0
  91. package/dist/components/message-actions.d.ts +34 -0
  92. package/dist/components/message-actions.js +68 -0
  93. package/dist/components/message-response.d.ts +20 -0
  94. package/dist/components/message-response.js +46 -0
  95. package/dist/components/message-scroller.d.ts +71 -0
  96. package/dist/components/message-scroller.js +217 -0
  97. package/dist/components/message.d.ts +49 -0
  98. package/dist/components/message.js +59 -0
  99. package/dist/components/navigation-menu.d.ts +45 -0
  100. package/dist/components/navigation-menu.js +54 -0
  101. package/dist/components/notice-banner.d.ts +14 -0
  102. package/dist/components/notice-banner.js +11 -0
  103. package/dist/components/page-content.d.ts +7 -0
  104. package/dist/components/page-content.js +9 -0
  105. package/dist/components/page-header.d.ts +37 -0
  106. package/dist/components/page-header.js +53 -0
  107. package/dist/components/pagination.d.ts +29 -0
  108. package/dist/components/pagination.js +29 -0
  109. package/dist/components/plan-outline.d.ts +60 -0
  110. package/dist/components/plan-outline.js +108 -0
  111. package/dist/components/popover.d.ts +34 -0
  112. package/dist/components/popover.js +35 -0
  113. package/dist/components/progress.d.ts +27 -0
  114. package/dist/components/progress.js +35 -0
  115. package/dist/components/prompt-list.d.ts +23 -0
  116. package/dist/components/prompt-list.js +11 -0
  117. package/dist/components/questionnaire.d.ts +148 -0
  118. package/dist/components/questionnaire.js +1002 -0
  119. package/dist/components/radio-group.d.ts +16 -0
  120. package/dist/components/radio-group.js +21 -0
  121. package/dist/components/reasoning-effort.d.ts +24 -0
  122. package/dist/components/reasoning-effort.js +269 -0
  123. package/dist/components/resizable.d.ts +67 -0
  124. package/dist/components/resizable.js +536 -0
  125. package/dist/components/result-card.d.ts +58 -0
  126. package/dist/components/result-card.js +88 -0
  127. package/dist/components/review-card.d.ts +62 -0
  128. package/dist/components/review-card.js +49 -0
  129. package/dist/components/rich-text-editor.d.ts +51 -0
  130. package/dist/components/rich-text-editor.js +248 -0
  131. package/dist/components/schema-diagram.d.ts +52 -0
  132. package/dist/components/schema-diagram.js +226 -0
  133. package/dist/components/scroll-area.d.ts +22 -0
  134. package/dist/components/scroll-area.js +19 -0
  135. package/dist/components/search-dialog.d.ts +103 -0
  136. package/dist/components/search-dialog.js +65 -0
  137. package/dist/components/search-field.d.ts +17 -0
  138. package/dist/components/search-field.js +27 -0
  139. package/dist/components/select.d.ts +57 -0
  140. package/dist/components/select.js +57 -0
  141. package/dist/components/selection-slot.d.ts +18 -0
  142. package/dist/components/selection-slot.js +53 -0
  143. package/dist/components/separator.d.ts +48 -0
  144. package/dist/components/separator.js +54 -0
  145. package/dist/components/settings-list.d.ts +26 -0
  146. package/dist/components/settings-list.js +17 -0
  147. package/dist/components/sheet.d.ts +70 -0
  148. package/dist/components/sheet.js +77 -0
  149. package/dist/components/sidebar.d.ts +70 -0
  150. package/dist/components/sidebar.js +187 -0
  151. package/dist/components/skeleton.d.ts +31 -0
  152. package/dist/components/skeleton.js +32 -0
  153. package/dist/components/slider.d.ts +17 -0
  154. package/dist/components/slider.js +24 -0
  155. package/dist/components/spinner.d.ts +37 -0
  156. package/dist/components/spinner.js +43 -0
  157. package/dist/components/state-panel-samples.d.ts +25 -0
  158. package/dist/components/state-panel-samples.js +423 -0
  159. package/dist/components/state-panel.d.ts +35 -0
  160. package/dist/components/state-panel.js +29 -0
  161. package/dist/components/state-sample.d.ts +63 -0
  162. package/dist/components/state-sample.js +42 -0
  163. package/dist/components/switch.d.ts +12 -0
  164. package/dist/components/switch.js +14 -0
  165. package/dist/components/table-nuqs.d.ts +16 -0
  166. package/dist/components/table-nuqs.js +59 -0
  167. package/dist/components/table.d.ts +120 -0
  168. package/dist/components/table.js +663 -0
  169. package/dist/components/tabs.d.ts +37 -0
  170. package/dist/components/tabs.js +36 -0
  171. package/dist/components/textarea.d.ts +18 -0
  172. package/dist/components/textarea.js +19 -0
  173. package/dist/components/toast.d.ts +45 -0
  174. package/dist/components/toast.js +83 -0
  175. package/dist/components/toggle-group.d.ts +30 -0
  176. package/dist/components/toggle-group.js +39 -0
  177. package/dist/components/toggle.d.ts +27 -0
  178. package/dist/components/toggle.js +21 -0
  179. package/dist/components/tool-activity.d.ts +79 -0
  180. package/dist/components/tool-activity.js +226 -0
  181. package/dist/components/toolbar-status.d.ts +21 -0
  182. package/dist/components/toolbar-status.js +14 -0
  183. package/dist/components/tooltip.d.ts +31 -0
  184. package/dist/components/tooltip.js +99 -0
  185. package/dist/components/typed-text.d.ts +17 -0
  186. package/dist/components/typed-text.js +56 -0
  187. package/dist/index.d.ts +90 -0
  188. package/dist/index.js +90 -0
  189. package/dist/internal/brand-glyphs.d.ts +370 -0
  190. package/dist/internal/brand-glyphs.js +262 -0
  191. package/dist/internal/classes.d.ts +3 -0
  192. package/dist/internal/classes.js +20 -0
  193. package/dist/internal/code-tokens.d.ts +4 -0
  194. package/dist/internal/code-tokens.js +34 -0
  195. package/dist/internal/fieldset.d.ts +6 -0
  196. package/dist/internal/fieldset.js +38 -0
  197. package/dist/internal/file-kind.d.ts +4 -0
  198. package/dist/internal/file-kind.js +62 -0
  199. package/dist/internal/languages.d.ts +7 -0
  200. package/dist/internal/languages.js +1010 -0
  201. package/dist/internal/message-scroller.d.ts +102 -0
  202. package/dist/internal/message-scroller.js +637 -0
  203. package/dist/internal/pressable.d.ts +2 -0
  204. package/dist/internal/pressable.js +29 -0
  205. package/dist/internal/syntax.d.ts +14 -0
  206. package/dist/internal/syntax.js +137 -0
  207. package/dist/styles/accordion.css +102 -0
  208. package/dist/styles/alert-dialog.css +198 -0
  209. package/dist/styles/alert.css +149 -0
  210. package/dist/styles/aspect-ratio.css +8 -0
  211. package/dist/styles/attachment.css +700 -0
  212. package/dist/styles/avatar.css +186 -0
  213. package/dist/styles/badge.css +178 -0
  214. package/dist/styles/brand-icon.css +104 -0
  215. package/dist/styles/breadcrumb.css +121 -0
  216. package/dist/styles/button-group.css +113 -0
  217. package/dist/styles/button.css +380 -0
  218. package/dist/styles/calendar.css +295 -0
  219. package/dist/styles/canvas.css +313 -0
  220. package/dist/styles/card.css +146 -0
  221. package/dist/styles/carousel.css +107 -0
  222. package/dist/styles/chart.css +227 -0
  223. package/dist/styles/chat-confirmation.css +29 -0
  224. package/dist/styles/chat-input.css +240 -0
  225. package/dist/styles/chat-plan.css +109 -0
  226. package/dist/styles/chat-sources.css +191 -0
  227. package/dist/styles/checkbox.css +122 -0
  228. package/dist/styles/choice-list.css +343 -0
  229. package/dist/styles/code-block.css +211 -0
  230. package/dist/styles/collapsible.css +72 -0
  231. package/dist/styles/combobox.css +347 -0
  232. package/dist/styles/command.css +233 -0
  233. package/dist/styles/context-menu.css +151 -0
  234. package/dist/styles/dialog.css +237 -0
  235. package/dist/styles/dropdown-menu.css +150 -0
  236. package/dist/styles/field.css +340 -0
  237. package/dist/styles/file-explorer.css +517 -0
  238. package/dist/styles/file-viewer.css +375 -0
  239. package/dist/styles/form.css +155 -0
  240. package/dist/styles/glass-banner.css +308 -0
  241. package/dist/styles/gradient-banner.css +256 -0
  242. package/dist/styles/hover-card.css +95 -0
  243. package/dist/styles/index.css +268 -0
  244. package/dist/styles/input-group.css +285 -0
  245. package/dist/styles/input-otp.css +138 -0
  246. package/dist/styles/input.css +98 -0
  247. package/dist/styles/kbd.css +59 -0
  248. package/dist/styles/label.css +89 -0
  249. package/dist/styles/mention-list.css +166 -0
  250. package/dist/styles/menubar.css +226 -0
  251. package/dist/styles/message-actions.css +83 -0
  252. package/dist/styles/message-response.css +176 -0
  253. package/dist/styles/message-scroller.css +136 -0
  254. package/dist/styles/message.css +310 -0
  255. package/dist/styles/navigation-menu.css +291 -0
  256. package/dist/styles/notice-banner.css +68 -0
  257. package/dist/styles/page-content.css +21 -0
  258. package/dist/styles/page-header.css +156 -0
  259. package/dist/styles/pagination.css +72 -0
  260. package/dist/styles/plan-outline.css +393 -0
  261. package/dist/styles/popover.css +140 -0
  262. package/dist/styles/progress.css +93 -0
  263. package/dist/styles/prompt-list.css +165 -0
  264. package/dist/styles/questionnaire.css +308 -0
  265. package/dist/styles/radio-group.css +119 -0
  266. package/dist/styles/reasoning-effort.css +157 -0
  267. package/dist/styles/resizable.css +108 -0
  268. package/dist/styles/result-card.css +215 -0
  269. package/dist/styles/review-card.css +235 -0
  270. package/dist/styles/rich-text-editor.css +169 -0
  271. package/dist/styles/schema-diagram.css +419 -0
  272. package/dist/styles/scroll-area.css +77 -0
  273. package/dist/styles/search-dialog.css +280 -0
  274. package/dist/styles/search-field.css +17 -0
  275. package/dist/styles/select.css +285 -0
  276. package/dist/styles/selection-slot.css +31 -0
  277. package/dist/styles/separator.css +206 -0
  278. package/dist/styles/settings-list.css +81 -0
  279. package/dist/styles/sheet.css +361 -0
  280. package/dist/styles/sidebar.css +363 -0
  281. package/dist/styles/skeleton.css +80 -0
  282. package/dist/styles/slider.css +142 -0
  283. package/dist/styles/spinner.css +39 -0
  284. package/dist/styles/state-panel-samples.css +41 -0
  285. package/dist/styles/state-panel.css +173 -0
  286. package/dist/styles/state-sample.css +285 -0
  287. package/dist/styles/switch.css +128 -0
  288. package/dist/styles/table.css +604 -0
  289. package/dist/styles/tabs.css +223 -0
  290. package/dist/styles/textarea.css +77 -0
  291. package/dist/styles/themes/chatgpt.css +125 -0
  292. package/dist/styles/themes/claude.css +125 -0
  293. package/dist/styles/themes/cloudflare.css +125 -0
  294. package/dist/styles/themes/discord.css +125 -0
  295. package/dist/styles/themes/github.css +125 -0
  296. package/dist/styles/themes/grok.css +125 -0
  297. package/dist/styles/themes/linear.css +126 -0
  298. package/dist/styles/themes/neutral.css +125 -0
  299. package/dist/styles/themes/notion.css +125 -0
  300. package/dist/styles/themes/perplexity.css +125 -0
  301. package/dist/styles/themes/raycast.css +125 -0
  302. package/dist/styles/themes/spotify.css +125 -0
  303. package/dist/styles/themes/stripe.css +125 -0
  304. package/dist/styles/themes/supabase.css +125 -0
  305. package/dist/styles/themes/tulipfarm.css +115 -0
  306. package/dist/styles/themes/vercel.css +126 -0
  307. package/dist/styles/toast.css +197 -0
  308. package/dist/styles/toggle-group.css +161 -0
  309. package/dist/styles/toggle.css +119 -0
  310. package/dist/styles/tool-activity.css +396 -0
  311. package/dist/styles/toolbar-status.css +52 -0
  312. package/dist/styles/tooltip.css +122 -0
  313. package/dist/styles/typed-text.css +17 -0
  314. package/package.json +452 -4
@@ -0,0 +1,31 @@
1
+ import type { ComponentProps } from "react";
2
+ import { useRender } from "@base-ui/react/use-render";
3
+ export declare const skeletonShapeNames: readonly ["line", "title", "avatar", "panel", "checkbox", "action"];
4
+ export type SkeletonShape = (typeof skeletonShapeNames)[number];
5
+ export interface SkeletonProps extends ComponentProps<"div"> {
6
+ /**
7
+ * The placeholder footprint. `"line"` is a 16px text row, `"title"` a 24px
8
+ * heading at two thirds width, `"avatar"` a 32px circle, `"panel"` a 128px
9
+ * block, `"checkbox"` a 16px box, and `"action"` a 28px icon button.
10
+ */
11
+ shape?: SkeletonShape;
12
+ }
13
+ /** A pulsing placeholder that holds the space of content still loading. */
14
+ export declare function Skeleton({ shape, className, ...props }: SkeletonProps): import("react").JSX.Element;
15
+ export declare const skeletonGroupGapNames: readonly ["sm", "md", "lg"];
16
+ export type SkeletonGroupGap = (typeof skeletonGroupGapNames)[number];
17
+ export interface SkeletonGroupState extends Record<string, unknown> {
18
+ slot: "skeleton-group";
19
+ gap: SkeletonGroupGap;
20
+ }
21
+ export interface SkeletonGroupProps extends useRender.ComponentProps<"div", SkeletonGroupState> {
22
+ /**
23
+ * Names the loading region, such as `"Loading projects"`. It becomes the
24
+ * accessible name and is also read as visually hidden text.
25
+ */
26
+ label?: string;
27
+ /** Space between placeholders: `"sm"` 8px, `"md"` 12px, `"lg"` 16px. */
28
+ gap?: SkeletonGroupGap;
29
+ }
30
+ /** A `status` region that stacks skeletons and names what is loading. */
31
+ export declare function SkeletonGroup({ label, gap, className, children, render, ref, ...props }: SkeletonGroupProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { mergeProps } from "@base-ui/react/merge-props";
3
+ import { useRender } from "@base-ui/react/use-render";
4
+ import { cn } from "../internal/classes.js";
5
+ export const skeletonShapeNames = [
6
+ "line",
7
+ "title",
8
+ "avatar",
9
+ "panel",
10
+ "checkbox",
11
+ "action",
12
+ ];
13
+ /** A pulsing placeholder that holds the space of content still loading. */
14
+ export function Skeleton({ shape = "line", className, ...props }) {
15
+ return (_jsx("div", { "aria-hidden": "true", "data-slot": "skeleton", "data-shape": shape, className: cn("sprout-skeleton", className), ...props }));
16
+ }
17
+ export const skeletonGroupGapNames = ["sm", "md", "lg"];
18
+ /** A `status` region that stacks skeletons and names what is loading. */
19
+ export function SkeletonGroup({ label, gap = "md", className, children, render, ref, ...props }) {
20
+ return useRender({
21
+ defaultTagName: "div",
22
+ ref,
23
+ render,
24
+ props: mergeProps({
25
+ role: "status",
26
+ "aria-label": label,
27
+ className: cn("sprout-skeleton-group", className),
28
+ children: (_jsxs(_Fragment, { children: [children, label ? (_jsx("span", { className: "sprout-skeleton-group-label", children: `${label}…` })) : null] })),
29
+ }, props),
30
+ state: { slot: "skeleton-group", gap },
31
+ });
32
+ }
@@ -0,0 +1,17 @@
1
+ import { Slider as BaseSlider } from "@base-ui/react/slider";
2
+ export type SliderValue = number | readonly number[];
3
+ export interface SliderProps<Value extends SliderValue = SliderValue> extends BaseSlider.Root.Props<Value> {
4
+ /**
5
+ * Names each thumb. Defaults to the root `aria-label`, with "minimum" and
6
+ * "maximum" added to the two thumbs of a range.
7
+ */
8
+ getAriaLabel?: ((index: number) => string) | undefined;
9
+ /** Text a screen reader reads for each thumb's value. */
10
+ getAriaValueText?: ((formattedValue: string, value: number, index: number) => string) | undefined;
11
+ }
12
+ /**
13
+ * A track with one thumb for a number, or one thumb per entry for a range.
14
+ * Pass a number or an array to `value` or `defaultValue`. Name it with
15
+ * `aria-label`, `aria-labelledby`, or `getAriaLabel`.
16
+ */
17
+ export declare function Slider<Value extends SliderValue = SliderValue>({ className, defaultValue, value, min, max, getAriaLabel, getAriaValueText, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, ...props }: SliderProps<Value>): import("react").JSX.Element;
@@ -0,0 +1,24 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Slider as BaseSlider } from "@base-ui/react/slider";
4
+ import { stateClassName } from "../internal/classes.js";
5
+ function thumbLabel(label, count) {
6
+ if (!label)
7
+ return undefined;
8
+ if (count === 1)
9
+ return () => label;
10
+ if (count === 2)
11
+ return (index) => `${label} ${index === 0 ? "minimum" : "maximum"}`;
12
+ return (index) => `${label} ${index + 1}`;
13
+ }
14
+ /**
15
+ * A track with one thumb for a number, or one thumb per entry for a range.
16
+ * Pass a number or an array to `value` or `defaultValue`. Name it with
17
+ * `aria-label`, `aria-labelledby`, or `getAriaLabel`.
18
+ */
19
+ export function Slider({ className, defaultValue, value, min = 0, max = 100, getAriaLabel, getAriaValueText, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, ...props }) {
20
+ const shape = value ?? defaultValue;
21
+ const count = Array.isArray(shape) ? shape.length : 1;
22
+ const label = getAriaLabel ?? (ariaLabelledBy ? undefined : thumbLabel(ariaLabel, count));
23
+ return (_jsx(BaseSlider.Root, { "data-slot": "slider", defaultValue: defaultValue, value: value, min: min, max: max, thumbAlignment: "edge", "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, ...props, className: stateClassName("sprout-slider", className), children: _jsxs(BaseSlider.Control, { "data-slot": "slider-control", className: "sprout-slider-control", children: [_jsx(BaseSlider.Track, { "data-slot": "slider-track", className: "sprout-slider-track", children: _jsx(BaseSlider.Indicator, { "data-slot": "slider-range", className: "sprout-slider-range" }) }), Array.from({ length: count }, (_, index) => (_jsx(BaseSlider.Thumb, { index: index, "data-slot": "slider-thumb", className: "sprout-slider-thumb", getAriaLabel: label, getAriaValueText: getAriaValueText }, index)))] }) }));
24
+ }
@@ -0,0 +1,37 @@
1
+ import { type ComponentProps } from "react";
2
+ export declare const spinnerSizeNames: readonly ["sm", "default", "lg"];
3
+ export type SpinnerSize = (typeof spinnerSizeNames)[number];
4
+ export declare const thinkingSpinnerSizeNames: readonly ["lg", "xl"];
5
+ export type ThinkingSpinnerSize = (typeof thinkingSpinnerSizeNames)[number];
6
+ export declare const spinnerActivityNames: readonly ["working", "searching", "solving", "listening", "connecting", "weaving", "composing", "breathing", "shaping"];
7
+ export type SpinnerActivity = (typeof spinnerActivityNames)[number];
8
+ export interface LoaderSpinnerProps extends Omit<ComponentProps<"svg">, "children" | "color"> {
9
+ variant?: "default" | undefined;
10
+ /**
11
+ * `"sm"` is 12px, `"default"` 16px, and `"lg"` 20px. The size holds inside
12
+ * buttons; badges shrink it to their 12px icon size.
13
+ */
14
+ size?: SpinnerSize | undefined;
15
+ activity?: never;
16
+ }
17
+ export interface ThinkingSpinnerProps extends Omit<ComponentProps<"span">, "children" | "color"> {
18
+ /** A dotted thought orb for AI and agent work, in place of the spinning loader. */
19
+ variant: "thinking";
20
+ /**
21
+ * `"lg"` is 20px, for inline text. `"xl"` is 64px, for avatar-scale status.
22
+ * Each is a separately tuned design, so no other sizes exist.
23
+ */
24
+ size?: ThinkingSpinnerSize | undefined;
25
+ /** What the agent is doing. Each activity is a distinct animation. */
26
+ activity?: SpinnerActivity | undefined;
27
+ }
28
+ export type SpinnerProps = LoaderSpinnerProps | ThinkingSpinnerProps;
29
+ /**
30
+ * A loading indicator. By default it is a spinning loader that takes the
31
+ * current text color; `variant="thinking"` shows a monochrome thought orb
32
+ * that follows the light or dark theme. It is a `status` named “Loading”,
33
+ * or “Thinking” for the orb. Set `aria-label` to name it, or
34
+ * `aria-hidden="true"` when visible text beside it already says what is
35
+ * happening.
36
+ */
37
+ export declare function Spinner(props: SpinnerProps): import("react").JSX.Element;
@@ -0,0 +1,43 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { lazy, Suspense } from "react";
3
+ import { Loader } from "reicon-react/icons/Loader";
4
+ import { cn } from "../internal/classes.js";
5
+ export const spinnerSizeNames = ["sm", "default", "lg"];
6
+ export const thinkingSpinnerSizeNames = ["lg", "xl"];
7
+ export const spinnerActivityNames = [
8
+ "working",
9
+ "searching",
10
+ "solving",
11
+ "listening",
12
+ "connecting",
13
+ "weaving",
14
+ "composing",
15
+ "breathing",
16
+ "shaping",
17
+ ];
18
+ const orbPixels = { lg: 20, xl: 64 };
19
+ // Loaded on first thinking render, so apps showing only the loader never download the orb.
20
+ const ThinkingOrb = lazy(() => import("thinking-orbs").then(({ ThinkingOrb }) => ({ default: ThinkingOrb })));
21
+ /**
22
+ * A loading indicator. By default it is a spinning loader that takes the
23
+ * current text color; `variant="thinking"` shows a monochrome thought orb
24
+ * that follows the light or dark theme. It is a `status` named “Loading”,
25
+ * or “Thinking” for the orb. Set `aria-label` to name it, or
26
+ * `aria-hidden="true"` when visible text beside it already says what is
27
+ * happening.
28
+ */
29
+ export function Spinner(props) {
30
+ if (props.variant === "thinking")
31
+ return _jsx(ThinkingSpinner, { ...props });
32
+ const { variant: _variant, size = "default", className, role = "status", "aria-label": label = "Loading", "aria-hidden": hidden, ...rest } = props;
33
+ const decorative = hidden === true || hidden === "true";
34
+ return (_jsx(Loader, { "data-slot": "spinner", "data-variant": "default", "data-size": size, ...(decorative
35
+ ? { "aria-hidden": "true" }
36
+ : { role, "aria-label": label }), focusable: "false", className: cn("sprout-spinner", `sprout-spinner-size-${size}`, className), ...rest }));
37
+ }
38
+ function ThinkingSpinner({ variant, size = "lg", activity = "working", className, role = "status", "aria-label": label = "Thinking", "aria-hidden": hidden, ...rest }) {
39
+ const decorative = hidden === true || hidden === "true";
40
+ return (_jsx("span", { "data-slot": "spinner", "data-variant": variant, "data-size": size, "data-activity": activity, ...(decorative
41
+ ? { "aria-hidden": "true" }
42
+ : { role, "aria-label": label }), className: cn("sprout-spinner", `sprout-spinner-size-${size}`, className), ...rest, children: _jsx(Suspense, { fallback: null, children: _jsx(ThinkingOrb, { state: activity, size: orbPixels[size], theme: "auto", role: "presentation", "aria-hidden": "true" }) }) }));
43
+ }
@@ -0,0 +1,25 @@
1
+ import { type SampleWindowProps } from "./state-sample.js";
2
+ /** Pass-through props for the outer sample window. */
3
+ export type StatePanelSampleProps = Omit<SampleWindowProps, "icon" | "trail" | "tabs" | "children">;
4
+ export declare function ChatsSample(props: StatePanelSampleProps): import("react").JSX.Element;
5
+ export declare function FilesSample(props: StatePanelSampleProps): import("react").JSX.Element;
6
+ export declare function AgentsSample(props: StatePanelSampleProps): import("react").JSX.Element;
7
+ export declare function ProjectsSample(props: StatePanelSampleProps): import("react").JSX.Element;
8
+ export declare function AgentTasksSample(props: StatePanelSampleProps): import("react").JSX.Element;
9
+ export declare function SkillsSample(props: StatePanelSampleProps): import("react").JSX.Element;
10
+ export declare function WorkflowsSample(props: StatePanelSampleProps): import("react").JSX.Element;
11
+ export declare function TablesSample(props: StatePanelSampleProps): import("react").JSX.Element;
12
+ export interface RecordsSampleProps extends StatePanelSampleProps {
13
+ /** Table name, shown as the current crumb. */
14
+ table: string;
15
+ /** Field labels. The first three become columns; none falls back to “Row”. */
16
+ fields: readonly string[];
17
+ }
18
+ export declare function RecordsSample({ table, fields, ...props }: RecordsSampleProps): import("react").JSX.Element;
19
+ export declare function CreateInChatSample(props: StatePanelSampleProps): import("react").JSX.Element;
20
+ export declare function IntegrationsSample(props: StatePanelSampleProps): import("react").JSX.Element;
21
+ export declare function ModelsSample(props: StatePanelSampleProps): import("react").JSX.Element;
22
+ export declare function MembersSample(props: StatePanelSampleProps): import("react").JSX.Element;
23
+ export declare function TeamsSample(props: StatePanelSampleProps): import("react").JSX.Element;
24
+ export declare function InvitationsSample(props: StatePanelSampleProps): import("react").JSX.Element;
25
+ export declare function GrantsSample(props: StatePanelSampleProps): import("react").JSX.Element;
@@ -0,0 +1,423 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { BookOpen } from "reicon-react/icons/BookOpen";
3
+ import { BranchDown } from "reicon-react/icons/BranchDown";
4
+ import { ChatRound } from "reicon-react/icons/ChatRound";
5
+ import { Checklist } from "reicon-react/icons/Checklist";
6
+ import { Cpu } from "reicon-react/icons/Cpu";
7
+ import { Database } from "reicon-react/icons/Database";
8
+ import { Envelope } from "reicon-react/icons/Envelope";
9
+ import { Files } from "reicon-react/icons/Files";
10
+ import { Folder } from "reicon-react/icons/Folder";
11
+ import { People } from "reicon-react/icons/People";
12
+ import { Plug } from "reicon-react/icons/Plug";
13
+ import { ShieldUser } from "reicon-react/icons/ShieldUser";
14
+ import { User } from "reicon-react/icons/User";
15
+ import { Users } from "reicon-react/icons/Users";
16
+ import { FileTypeIcon } from "./attachment.js";
17
+ import { AgentAvatar } from "./avatar.js";
18
+ import { Badge } from "./badge.js";
19
+ import { BrandIcon } from "./brand-icon.js";
20
+ import { SampleBar, SampleIconTile, SampleList, SampleMark, SampleTable, SampleText, SampleWindow, } from "./state-sample.js";
21
+ const muted = (text) => _jsx(SampleText, { tone: "muted", children: text });
22
+ const strong = (text) => _jsx(SampleText, { tone: "strong", children: text });
23
+ const named = (tone, text) => (_jsxs(_Fragment, { children: [_jsx(SampleMark, { tone: tone }), strong(text)] }));
24
+ const agent = (id, name) => (_jsx(AgentAvatar, { agentId: id, name: name, size: "sm" }));
25
+ const badge = (variant, text) => _jsx(Badge, { variant: variant, children: text });
26
+ export function ChatsSample(props) {
27
+ const chat = _jsx(SampleIconTile, { icon: ChatRound });
28
+ return (_jsx(SampleWindow, { ...props, icon: ChatRound, trail: ["Chats"], tabs: ["Active", "Archived"], children: _jsx(SampleList, { items: [
29
+ {
30
+ leading: chat,
31
+ title: "Which invoices are overdue this week?",
32
+ detail: "Found 7 invoices across 4 customers",
33
+ trailing: muted("2m ago"),
34
+ },
35
+ {
36
+ leading: chat,
37
+ title: "Draft a follow-up for Northwind",
38
+ detail: "Draft ready for your review",
39
+ trailing: muted("1h ago"),
40
+ },
41
+ {
42
+ leading: chat,
43
+ title: "Add a Suppliers table",
44
+ detail: "Name, contact, payment terms, region",
45
+ trailing: muted("Yesterday"),
46
+ },
47
+ {
48
+ leading: chat,
49
+ title: "Summarize last month’s orders",
50
+ detail: "312 orders, up 18% on September",
51
+ trailing: muted("Sep 30"),
52
+ },
53
+ {
54
+ leading: chat,
55
+ title: "Who owns the Acme renewal?",
56
+ detail: "Assigned to the Sales team",
57
+ trailing: muted("Sep 28"),
58
+ },
59
+ ] }) }));
60
+ }
61
+ const file = (name, mediaType) => (_jsx(FileTypeIcon, { name: name, mediaType: mediaType }));
62
+ export function FilesSample(props) {
63
+ const folder = _jsx(SampleIconTile, { icon: Folder });
64
+ return (_jsx(SampleWindow, { ...props, icon: Files, trail: ["Files", "My files"], children: _jsx(SampleList, { items: [
65
+ {
66
+ leading: folder,
67
+ title: "Supplier contracts",
68
+ detail: "Folder · Shared with Purchasing",
69
+ trailing: muted("You"),
70
+ },
71
+ {
72
+ leading: folder,
73
+ title: "Month-end close",
74
+ detail: "Folder",
75
+ trailing: muted("You"),
76
+ },
77
+ {
78
+ leading: file("Price list 2026.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"),
79
+ title: "Price list 2026.xlsx",
80
+ detail: "Spreadsheet · 48 KB",
81
+ trailing: muted("You"),
82
+ },
83
+ {
84
+ leading: file("Returns policy.pdf", "application/pdf"),
85
+ title: "Returns policy.pdf",
86
+ detail: "PDF · 212 KB",
87
+ trailing: muted("You"),
88
+ },
89
+ {
90
+ leading: file("Onboarding checklist.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"),
91
+ title: "Onboarding checklist.docx",
92
+ detail: "Document · 31 KB",
93
+ trailing: muted("You"),
94
+ },
95
+ ] }) }));
96
+ }
97
+ export function AgentsSample(props) {
98
+ return (_jsx(SampleWindow, { ...props, icon: Users, trail: ["Agents"], children: _jsx(SampleList, { items: [
99
+ {
100
+ leading: agent("sample-collections", "Collections assistant"),
101
+ title: "Collections assistant",
102
+ detail: "Follows up on overdue invoices",
103
+ trailing: badge("success", "Active"),
104
+ },
105
+ {
106
+ leading: agent("sample-onboarding", "Onboarding guide"),
107
+ title: "Onboarding guide",
108
+ detail: "Welcomes new customers and books kickoffs",
109
+ trailing: badge("success", "Active"),
110
+ },
111
+ {
112
+ leading: agent("sample-inventory", "Inventory watcher"),
113
+ title: "Inventory watcher",
114
+ detail: "Flags products below reorder level",
115
+ trailing: badge("secondary", "Draft"),
116
+ },
117
+ {
118
+ leading: agent("sample-support", "Support triage"),
119
+ title: "Support triage",
120
+ detail: "Routes new tickets to the right team",
121
+ trailing: badge("success", "Active"),
122
+ },
123
+ {
124
+ leading: agent("sample-reports", "Weekly reporter"),
125
+ title: "Weekly reporter",
126
+ detail: "Posts pipeline numbers every Monday",
127
+ trailing: badge("secondary", "Draft"),
128
+ },
129
+ ] }) }));
130
+ }
131
+ export function ProjectsSample(props) {
132
+ return (_jsxs(SampleWindow, { ...props, icon: Folder, trail: ["Projects"], children: [_jsx("p", { className: "sprout-state-panel-samples-group", children: "Active projects" }), _jsx(SampleList, { items: [
133
+ {
134
+ title: "Spring launch",
135
+ detail: "Use the launch brief for dates and messaging.",
136
+ },
137
+ {
138
+ title: "Customer onboarding",
139
+ detail: "Keep kickoff notes and customer setup guides here.",
140
+ },
141
+ {
142
+ title: "Supplier review",
143
+ detail: "Compare quotes against our purchasing guidelines.",
144
+ },
145
+ ] }), _jsx("p", { className: "sprout-state-panel-samples-group", children: "Archived projects" }), _jsx(SampleList, { items: [
146
+ {
147
+ title: "Summer catalogue",
148
+ detail: "Use the approved product descriptions.",
149
+ trailing: badge("secondary", "Archived"),
150
+ },
151
+ ] })] }));
152
+ }
153
+ export function AgentTasksSample(props) {
154
+ return (_jsx(SampleWindow, { ...props, icon: Checklist, trail: ["My agent tasks"], children: _jsx(SampleList, { items: [
155
+ {
156
+ leading: agent("sample-collections", "Collections assistant"),
157
+ title: "Send reminders for invoices past 30 days",
158
+ detail: "Collections assistant · Started 4m ago",
159
+ trailing: badge("warning", "Needs review"),
160
+ },
161
+ {
162
+ leading: agent("sample-onboarding", "Onboarding guide"),
163
+ title: "Book a kickoff with Contoso",
164
+ detail: "Onboarding guide · Started 1h ago",
165
+ trailing: badge("success", "Completed"),
166
+ },
167
+ {
168
+ leading: agent("sample-inventory", "Inventory watcher"),
169
+ title: "List products below reorder level",
170
+ detail: "Inventory watcher · Started today",
171
+ trailing: badge("success", "Completed"),
172
+ },
173
+ {
174
+ leading: agent("sample-support", "Support triage"),
175
+ title: "Tag this week’s billing tickets",
176
+ detail: "Support triage · Started yesterday",
177
+ trailing: badge("secondary", "Pending"),
178
+ },
179
+ ] }) }));
180
+ }
181
+ export function SkillsSample(props) {
182
+ const skill = _jsx(SampleIconTile, { icon: BookOpen });
183
+ return (_jsx(SampleWindow, { ...props, icon: BookOpen, trail: ["Skills"], tabs: ["Workspace", "Built-in"], children: _jsx(SampleList, { items: [
184
+ {
185
+ leading: skill,
186
+ title: "Qualify an inbound lead",
187
+ detail: "Check budget, timeline, and decision maker",
188
+ trailing: badge("success", "Approved"),
189
+ },
190
+ {
191
+ leading: skill,
192
+ title: "Prepare a quarterly review",
193
+ detail: "Pull revenue, churn, and open risks",
194
+ trailing: badge("success", "Approved"),
195
+ },
196
+ {
197
+ leading: skill,
198
+ title: "Handle a refund request",
199
+ detail: "Verify the order, then propose a refund",
200
+ trailing: badge("warning", "In review"),
201
+ },
202
+ {
203
+ leading: skill,
204
+ title: "Write a supplier follow-up",
205
+ detail: "Friendly tone, confirm delivery dates",
206
+ trailing: badge("secondary", "Draft"),
207
+ },
208
+ ] }) }));
209
+ }
210
+ export function WorkflowsSample(props) {
211
+ const active = badge("success", "Active");
212
+ const draft = badge("secondary", "Draft");
213
+ return (_jsx(SampleWindow, { ...props, icon: BranchDown, trail: ["Workflows"], children: _jsx(SampleTable, { columns: [
214
+ { label: "Workflow", size: "wide" },
215
+ { label: "Trigger" },
216
+ { label: "Status", size: "narrow" },
217
+ ], rows: [
218
+ [
219
+ named("green", "Approve large discounts"),
220
+ muted("New quote"),
221
+ active,
222
+ ],
223
+ [named("blue", "Onboard a new customer"), muted("Deal won"), active],
224
+ [named("orange", "Reorder low stock"), muted("Daily, 8:00"), draft],
225
+ [
226
+ named("violet", "Escalate urgent tickets"),
227
+ muted("New ticket"),
228
+ active,
229
+ ],
230
+ [
231
+ named("red", "Chase unsigned contracts"),
232
+ muted("Weekly, Mon"),
233
+ draft,
234
+ ],
235
+ ] }) }));
236
+ }
237
+ export function TablesSample(props) {
238
+ const rows = [
239
+ ["blue", "Customers", "12", "1,248"],
240
+ ["green", "Invoices", "9", "3,902"],
241
+ ["orange", "Orders", "14", "8,417"],
242
+ ["violet", "Products", "8", "326"],
243
+ ["red", "Suppliers", "7", "58"],
244
+ ["teal", "Support tickets", "10", "2,031"],
245
+ ];
246
+ return (_jsx(SampleWindow, { ...props, icon: Database, trail: ["Tables"], children: _jsx(SampleTable, { columns: [
247
+ { label: "Table", size: "wide" },
248
+ { label: "Fields", size: "narrow" },
249
+ { label: "Rows", size: "narrow" },
250
+ ], rows: rows.map(([tone, name, fields, count]) => [
251
+ named(tone, name),
252
+ _jsx(SampleText, { children: fields }),
253
+ _jsx(SampleText, { children: count }),
254
+ ]) }) }));
255
+ }
256
+ const recordRows = [
257
+ ["blue", "lg", "md"],
258
+ ["green", "md", "sm"],
259
+ ["orange", "sm", "lg"],
260
+ ["violet", "md", "md"],
261
+ ["red", "lg", "sm"],
262
+ ["teal", "sm", "md"],
263
+ ];
264
+ export function RecordsSample({ table, fields, ...props }) {
265
+ const shown = fields.slice(0, 3);
266
+ const columns = shown.length
267
+ ? shown.map((label, index) => ({
268
+ label,
269
+ size: index === 0 ? "wide" : "default",
270
+ }))
271
+ : [{ label: "Row", size: "wide" }];
272
+ return (_jsx(SampleWindow, { ...props, icon: Database, trail: ["Tables", table], children: _jsx(SampleTable, { columns: columns, rows: recordRows.map(([tone, first, rest]) => columns.map((_, column) => column === 0 ? (_jsxs(_Fragment, { children: [_jsx(SampleMark, { tone: tone }), _jsx(SampleBar, { width: first })] })) : (_jsx(SampleBar, { width: column % 2 ? rest : first })))) }) }));
273
+ }
274
+ export function CreateInChatSample(props) {
275
+ return (_jsx(SampleWindow, { ...props, icon: ChatRound, trail: ["New chat"], children: _jsxs("div", { className: "sprout-state-panel-samples-chat", children: [_jsx("p", { className: "sprout-state-panel-samples-bubble", children: "Track our suppliers with a name, contact email, payment terms, and region." }), _jsxs("p", { className: "sprout-state-panel-samples-reply", children: ["I\u2019ll create a ", _jsx("strong", { children: "Suppliers" }), " table with these fields. Review the schema before approving."] }), _jsx("div", { className: "sprout-state-panel-samples-schema", children: _jsx(SampleTable, { columns: [{ label: "Field", size: "wide" }, { label: "Type" }], rows: [
276
+ [strong("Name"), muted("Text")],
277
+ [strong("Contact email"), muted("Email")],
278
+ [strong("Payment terms"), muted("Choice")],
279
+ [strong("Region"), muted("Choice")],
280
+ ] }) })] }) }));
281
+ }
282
+ export function IntegrationsSample(props) {
283
+ const connected = badge("success", "Connected");
284
+ return (_jsx(SampleWindow, { ...props, icon: Plug, trail: ["Integrations"], tabs: ["Connected", "All"], children: _jsx(SampleList, { items: [
285
+ {
286
+ leading: _jsx(BrandIcon, { brand: "slack", size: "sm" }),
287
+ title: "Slack",
288
+ detail: "Agents reply in #sales and #support",
289
+ trailing: connected,
290
+ },
291
+ {
292
+ leading: _jsx(BrandIcon, { brand: "gmail", size: "sm" }),
293
+ title: "Gmail",
294
+ detail: "Reads new mail for heartbeat answers",
295
+ trailing: connected,
296
+ },
297
+ {
298
+ leading: _jsx(BrandIcon, { brand: "google-calendar", size: "sm" }),
299
+ title: "Google Calendar",
300
+ detail: "Books meetings after your approval",
301
+ trailing: connected,
302
+ },
303
+ {
304
+ leading: _jsx(BrandIcon, { brand: "github", size: "sm" }),
305
+ title: "GitHub",
306
+ detail: "Files issues for the product team",
307
+ trailing: connected,
308
+ },
309
+ {
310
+ leading: _jsx(BrandIcon, { brand: "jira", size: "sm" }),
311
+ title: "Jira",
312
+ detail: "Searches the Support board",
313
+ trailing: badge("warning", "Needs attention"),
314
+ },
315
+ ] }) }));
316
+ }
317
+ export function ModelsSample(props) {
318
+ return (_jsx(SampleWindow, { ...props, icon: Cpu, trail: ["Settings", "Models"], children: _jsx(SampleList, { items: [
319
+ {
320
+ leading: _jsx(BrandIcon, { brand: "claude", size: "sm" }),
321
+ title: "Claude",
322
+ detail: "Default for chat and agents",
323
+ trailing: badge("success", "Enabled"),
324
+ },
325
+ {
326
+ leading: _jsx(BrandIcon, { brand: "openai", size: "sm" }),
327
+ title: "GPT",
328
+ detail: "Available to the Analytics team",
329
+ trailing: badge("success", "Enabled"),
330
+ },
331
+ {
332
+ leading: _jsx(BrandIcon, { brand: "deepseek", size: "sm" }),
333
+ title: "DeepSeek",
334
+ detail: "Not available to any team",
335
+ trailing: badge("secondary", "Off"),
336
+ },
337
+ {
338
+ leading: _jsx(BrandIcon, { brand: "kimi", size: "sm" }),
339
+ title: "Kimi",
340
+ detail: "Not available to any team",
341
+ trailing: badge("secondary", "Off"),
342
+ },
343
+ ] }) }));
344
+ }
345
+ export function MembersSample(props) {
346
+ const admin = badge("info", "Admin");
347
+ const member = badge("secondary", "Member");
348
+ return (_jsx(SampleWindow, { ...props, icon: User, trail: ["Settings", "Members"], children: _jsx(SampleTable, { columns: [
349
+ { label: "Member", size: "wide" },
350
+ { label: "Role", size: "narrow" },
351
+ { label: "Teams" },
352
+ ], rows: [
353
+ [named("violet", "Maya Chen"), admin, muted("Operations")],
354
+ [named("orange", "Leo Martins"), member, muted("Sales, Support")],
355
+ [named("green", "Priya Nair"), member, muted("Finance")],
356
+ [named("blue", "Sam Okafor"), member, muted("Support")],
357
+ [named("red", "Ines Duarte"), admin, muted("Operations")],
358
+ ] }) }));
359
+ }
360
+ export function TeamsSample(props) {
361
+ return (_jsx(SampleWindow, { ...props, icon: People, trail: ["Settings", "Teams"], children: _jsx(SampleList, { items: [
362
+ {
363
+ leading: _jsx(SampleMark, { tone: "blue", size: "md" }),
364
+ title: "Sales",
365
+ detail: "Pipeline, quotes, and renewals · 8 members",
366
+ },
367
+ {
368
+ leading: _jsx(SampleMark, { tone: "green", size: "md" }),
369
+ title: "Finance",
370
+ detail: "Invoices and collections · 3 members",
371
+ },
372
+ {
373
+ leading: _jsx(SampleMark, { tone: "orange", size: "md" }),
374
+ title: "Support",
375
+ detail: "Tickets and refunds · 6 members",
376
+ },
377
+ {
378
+ leading: _jsx(SampleMark, { tone: "violet", size: "md" }),
379
+ title: "Operations",
380
+ detail: "Inventory and suppliers · 4 members",
381
+ },
382
+ ] }) }));
383
+ }
384
+ export function InvitationsSample(props) {
385
+ const link = (email) => _jsx(SampleText, { tone: "link", children: email });
386
+ return (_jsx(SampleWindow, { ...props, icon: Envelope, trail: ["Settings", "Members", "Invitations"], children: _jsx(SampleTable, { columns: [
387
+ { label: "Email", size: "wide" },
388
+ { label: "Status", size: "narrow" },
389
+ { label: "Email delivery" },
390
+ ], rows: [
391
+ [
392
+ link("maya@northwind.co"),
393
+ badge("info", "active"),
394
+ muted("Delivered"),
395
+ ],
396
+ [
397
+ link("leo@northwind.co"),
398
+ badge("secondary", "Accepted"),
399
+ muted("Delivered"),
400
+ ],
401
+ [link("priya@northwind.co"), badge("info", "active"), muted("Sent")],
402
+ [
403
+ link("sam@northwind.co"),
404
+ badge("secondary", "expired"),
405
+ muted("Delivered"),
406
+ ],
407
+ ] }) }));
408
+ }
409
+ export function GrantsSample(props) {
410
+ const granted = badge("success", "Granted");
411
+ const none = muted("None");
412
+ return (_jsx(SampleWindow, { ...props, icon: ShieldUser, trail: ["Settings", "Table access"], tabs: ["Sales", "Finance", "Support"], children: _jsx(SampleTable, { columns: [
413
+ { label: "Table", size: "wide" },
414
+ { label: "Read", size: "narrow" },
415
+ { label: "Edit", size: "narrow" },
416
+ ], rows: [
417
+ [named("blue", "Customers"), granted, granted],
418
+ [named("green", "Invoices"), granted, none],
419
+ [named("orange", "Orders"), granted, granted],
420
+ [named("violet", "Products"), granted, none],
421
+ [named("red", "Suppliers"), none, none],
422
+ ] }) }));
423
+ }