@sero-ai/ui 0.3.2 → 0.4.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 (190) hide show
  1. package/.turbo/turbo-build.log +628 -0
  2. package/.turbo/turbo-typecheck.log +1 -1
  3. package/CHANGELOG.md +38 -0
  4. package/dist/components/context-editor/CapabilitySection.cjs +57 -0
  5. package/dist/components/context-editor/CapabilitySection.d.cts +20 -0
  6. package/dist/components/context-editor/CapabilitySection.d.ts +20 -0
  7. package/dist/components/context-editor/CapabilitySection.js +57 -0
  8. package/dist/components/context-editor/ContextEditor.cjs +108 -0
  9. package/dist/components/context-editor/ContextEditor.d.cts +26 -0
  10. package/dist/components/context-editor/ContextEditor.d.ts +26 -0
  11. package/dist/components/context-editor/ContextEditor.js +108 -0
  12. package/dist/components/context-editor/PresetBar.cjs +71 -0
  13. package/dist/components/context-editor/PresetBar.d.cts +19 -0
  14. package/dist/components/context-editor/PresetBar.d.ts +19 -0
  15. package/dist/components/context-editor/PresetBar.js +71 -0
  16. package/dist/components/context-editor/SkillsSection.cjs +31 -0
  17. package/dist/components/context-editor/SkillsSection.d.cts +14 -0
  18. package/dist/components/context-editor/SkillsSection.d.ts +14 -0
  19. package/dist/components/context-editor/SkillsSection.js +31 -0
  20. package/dist/components/context-editor/SystemPromptSection.cjs +58 -0
  21. package/dist/components/context-editor/SystemPromptSection.d.cts +25 -0
  22. package/dist/components/context-editor/SystemPromptSection.d.ts +25 -0
  23. package/dist/components/context-editor/SystemPromptSection.js +58 -0
  24. package/dist/components/context-editor/ToolsSection.cjs +31 -0
  25. package/dist/components/context-editor/ToolsSection.d.cts +14 -0
  26. package/dist/components/context-editor/ToolsSection.d.ts +14 -0
  27. package/dist/components/context-editor/ToolsSection.js +31 -0
  28. package/dist/components/context-editor/index.cjs +8 -0
  29. package/dist/components/context-editor/index.d.cts +5 -0
  30. package/dist/components/context-editor/index.d.ts +5 -0
  31. package/dist/components/context-editor/index.js +8 -0
  32. package/dist/components/context-editor/parts.cjs +184 -0
  33. package/dist/components/context-editor/parts.d.cts +32 -0
  34. package/dist/components/context-editor/parts.d.ts +32 -0
  35. package/dist/components/context-editor/parts.js +184 -0
  36. package/dist/components/context-editor/use-context-editor-model.cjs +194 -0
  37. package/dist/components/context-editor/use-context-editor-model.d.cts +57 -0
  38. package/dist/components/context-editor/use-context-editor-model.d.ts +57 -0
  39. package/dist/components/context-editor/use-context-editor-model.js +194 -0
  40. package/dist/components/dashboard/activity-list.cjs +59 -0
  41. package/dist/components/dashboard/activity-list.d.cts +27 -0
  42. package/dist/components/dashboard/activity-list.d.ts +27 -0
  43. package/dist/components/dashboard/activity-list.js +59 -0
  44. package/dist/components/dashboard/catalog.cjs +322 -0
  45. package/dist/components/dashboard/catalog.d.cts +14 -0
  46. package/dist/components/dashboard/catalog.d.ts +14 -0
  47. package/dist/components/dashboard/catalog.js +322 -0
  48. package/dist/components/dashboard/data-boundary.cjs +29 -0
  49. package/dist/components/dashboard/data-boundary.d.cts +21 -0
  50. package/dist/components/dashboard/data-boundary.d.ts +21 -0
  51. package/dist/components/dashboard/data-boundary.js +29 -0
  52. package/dist/components/dashboard/empty-state.cjs +49 -0
  53. package/dist/components/dashboard/empty-state.d.cts +20 -0
  54. package/dist/components/dashboard/empty-state.d.ts +20 -0
  55. package/dist/components/dashboard/empty-state.js +49 -0
  56. package/dist/components/dashboard/icon-button.cjs +40 -0
  57. package/dist/components/dashboard/icon-button.d.cts +24 -0
  58. package/dist/components/dashboard/icon-button.d.ts +24 -0
  59. package/dist/components/dashboard/icon-button.js +40 -0
  60. package/dist/components/dashboard/index.cjs +15 -0
  61. package/dist/components/dashboard/index.d.cts +24 -0
  62. package/dist/components/dashboard/index.d.ts +24 -0
  63. package/dist/components/dashboard/index.js +15 -0
  64. package/dist/components/dashboard/item-list.cjs +71 -0
  65. package/dist/components/dashboard/item-list.d.cts +28 -0
  66. package/dist/components/dashboard/item-list.d.ts +28 -0
  67. package/dist/components/dashboard/item-list.js +71 -0
  68. package/dist/components/dashboard/key-value.cjs +39 -0
  69. package/dist/components/dashboard/key-value.d.cts +17 -0
  70. package/dist/components/dashboard/key-value.d.ts +17 -0
  71. package/dist/components/dashboard/key-value.js +39 -0
  72. package/dist/components/dashboard/layout.cjs +193 -0
  73. package/dist/components/dashboard/layout.d.cts +91 -0
  74. package/dist/components/dashboard/layout.d.ts +91 -0
  75. package/dist/components/dashboard/layout.js +193 -0
  76. package/dist/components/dashboard/metric.cjs +98 -0
  77. package/dist/components/dashboard/metric.d.cts +44 -0
  78. package/dist/components/dashboard/metric.d.ts +44 -0
  79. package/dist/components/dashboard/metric.js +98 -0
  80. package/dist/components/dashboard/progress-ring.cjs +77 -0
  81. package/dist/components/dashboard/progress-ring.d.cts +25 -0
  82. package/dist/components/dashboard/progress-ring.d.ts +25 -0
  83. package/dist/components/dashboard/progress-ring.js +77 -0
  84. package/dist/components/dashboard/skeletons.cjs +54 -0
  85. package/dist/components/dashboard/skeletons.d.cts +15 -0
  86. package/dist/components/dashboard/skeletons.d.ts +15 -0
  87. package/dist/components/dashboard/skeletons.js +54 -0
  88. package/dist/components/dashboard/spacing.cjs +10 -0
  89. package/dist/components/dashboard/spacing.d.cts +4 -0
  90. package/dist/components/dashboard/spacing.d.ts +4 -0
  91. package/dist/components/dashboard/spacing.js +10 -0
  92. package/dist/components/dashboard/stale-indicator.cjs +42 -0
  93. package/dist/components/dashboard/stale-indicator.d.cts +15 -0
  94. package/dist/components/dashboard/stale-indicator.d.ts +15 -0
  95. package/dist/components/dashboard/stale-indicator.js +42 -0
  96. package/dist/components/dashboard/status.cjs +62 -0
  97. package/dist/components/dashboard/status.d.cts +15 -0
  98. package/dist/components/dashboard/status.d.ts +15 -0
  99. package/dist/components/dashboard/status.js +62 -0
  100. package/dist/components/dashboard/tone.cjs +26 -0
  101. package/dist/components/dashboard/tone.d.cts +9 -0
  102. package/dist/components/dashboard/tone.d.ts +9 -0
  103. package/dist/components/dashboard/tone.js +26 -0
  104. package/dist/components/dashboard/typography.cjs +99 -0
  105. package/dist/components/dashboard/typography.d.cts +57 -0
  106. package/dist/components/dashboard/typography.d.ts +57 -0
  107. package/dist/components/dashboard/typography.js +99 -0
  108. package/dist/components/reference/ActivityExample.cjs +47 -0
  109. package/dist/components/reference/ActivityExample.d.cts +5 -0
  110. package/dist/components/reference/ActivityExample.d.ts +5 -0
  111. package/dist/components/reference/ActivityExample.js +47 -0
  112. package/dist/components/reference/ResourceExample.cjs +54 -0
  113. package/dist/components/reference/ResourceExample.d.cts +5 -0
  114. package/dist/components/reference/ResourceExample.d.ts +5 -0
  115. package/dist/components/reference/ResourceExample.js +54 -0
  116. package/dist/components/reference/SchedulerExample.cjs +68 -0
  117. package/dist/components/reference/SchedulerExample.d.cts +5 -0
  118. package/dist/components/reference/SchedulerExample.d.ts +5 -0
  119. package/dist/components/reference/SchedulerExample.js +68 -0
  120. package/dist/components/reference/StarterExample.cjs +34 -0
  121. package/dist/components/reference/StarterExample.d.cts +5 -0
  122. package/dist/components/reference/StarterExample.d.ts +5 -0
  123. package/dist/components/reference/StarterExample.js +34 -0
  124. package/dist/components/reference/index.cjs +10 -0
  125. package/dist/components/reference/index.d.cts +5 -0
  126. package/dist/components/reference/index.d.ts +5 -0
  127. package/dist/components/reference/index.js +10 -0
  128. package/dist/components/ui/badge.cjs +5 -1
  129. package/dist/components/ui/badge.d.cts +1 -1
  130. package/dist/components/ui/badge.d.ts +1 -1
  131. package/dist/components/ui/badge.js +5 -1
  132. package/dist/dashboard-catalog.cjs +8 -0
  133. package/dist/dashboard-catalog.d.cts +1 -0
  134. package/dist/dashboard-catalog.d.ts +1 -0
  135. package/dist/dashboard-catalog.js +8 -0
  136. package/dist/index.cjs +1 -0
  137. package/dist/index.d.cts +15 -0
  138. package/dist/index.d.ts +15 -0
  139. package/dist/index.js +1 -0
  140. package/dist/reference.cjs +12 -0
  141. package/dist/reference.d.cts +5 -0
  142. package/dist/reference.d.ts +5 -0
  143. package/dist/reference.js +12 -0
  144. package/dist/styles/glass-board.css +43 -0
  145. package/dist/styles/globals.css +59 -0
  146. package/package.json +70 -41
  147. package/src/components/context-editor/CapabilitySection.tsx +85 -0
  148. package/src/components/context-editor/ContextEditor.tsx +138 -0
  149. package/src/components/context-editor/PresetBar.tsx +94 -0
  150. package/src/components/context-editor/SkillsSection.tsx +37 -0
  151. package/src/components/context-editor/SystemPromptSection.tsx +88 -0
  152. package/src/components/context-editor/ToolsSection.tsx +37 -0
  153. package/src/components/context-editor/index.ts +7 -0
  154. package/src/components/context-editor/parts.tsx +217 -0
  155. package/src/components/context-editor/use-context-editor-model.ts +296 -0
  156. package/src/components/dashboard/__tests__/catalog.test.ts +57 -0
  157. package/src/components/dashboard/__tests__/glass.test.tsx +42 -0
  158. package/src/components/dashboard/__tests__/state.test.tsx +110 -0
  159. package/src/components/dashboard/__tests__/variants.test.tsx +95 -0
  160. package/src/components/dashboard/activity-list.tsx +99 -0
  161. package/src/components/dashboard/catalog.ts +351 -0
  162. package/src/components/dashboard/data-boundary.tsx +54 -0
  163. package/src/components/dashboard/empty-state.tsx +70 -0
  164. package/src/components/dashboard/icon-button.tsx +58 -0
  165. package/src/components/dashboard/index.ts +21 -0
  166. package/src/components/dashboard/item-list.tsx +106 -0
  167. package/src/components/dashboard/key-value.tsx +54 -0
  168. package/src/components/dashboard/layout.tsx +286 -0
  169. package/src/components/dashboard/metric.tsx +139 -0
  170. package/src/components/dashboard/progress-ring.tsx +100 -0
  171. package/src/components/dashboard/skeletons.tsx +73 -0
  172. package/src/components/dashboard/spacing.ts +14 -0
  173. package/src/components/dashboard/stale-indicator.tsx +55 -0
  174. package/src/components/dashboard/status.tsx +75 -0
  175. package/src/components/dashboard/tone.ts +35 -0
  176. package/src/components/dashboard/typography.tsx +151 -0
  177. package/src/components/reference/ActivityExample.tsx +68 -0
  178. package/src/components/reference/ResourceExample.tsx +78 -0
  179. package/src/components/reference/SchedulerExample.tsx +88 -0
  180. package/src/components/reference/StarterExample.tsx +48 -0
  181. package/src/components/reference/index.ts +10 -0
  182. package/src/components/ui/badge.tsx +6 -0
  183. package/src/dashboard-catalog.ts +13 -0
  184. package/src/index.ts +5 -0
  185. package/src/reference.ts +15 -0
  186. package/src/styles/glass-board.css +43 -0
  187. package/src/styles/globals.css +59 -0
  188. package/tsup.config.ts +6 -2
  189. package/vitest.config.ts +8 -0
  190. package/LICENSE +0 -201
@@ -0,0 +1,91 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as class_variance_authority_types from 'class-variance-authority/types';
3
+ import * as React from 'react';
4
+ import { VariantProps } from 'class-variance-authority';
5
+ import { Separator } from '../ui/separator.cjs';
6
+ import { Gap } from './spacing.cjs';
7
+ import 'radix-ui';
8
+
9
+ declare const widgetContentVariants: (props?: ({
10
+ padding?: "sm" | "md" | "lg" | "none" | null | undefined;
11
+ scroll?: boolean | null | undefined;
12
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
13
+ interface WidgetContentProps extends React.ComponentProps<"div">, VariantProps<typeof widgetContentVariants> {
14
+ /**
15
+ * Apply the glass token scope so surfaces read as translucent on the
16
+ * frosted dashboard tile. On by default; set `false` for solid full
17
+ * plugin views (outside a dashboard tile).
18
+ */
19
+ glass?: boolean;
20
+ }
21
+ /** Full-height widget content frame with standard padding + a container query. */
22
+ declare function WidgetContent({ className, padding, scroll, glass, ...props }: WidgetContentProps): react_jsx_runtime.JSX.Element;
23
+ declare const alignClass: {
24
+ readonly start: "items-start";
25
+ readonly center: "items-center";
26
+ readonly end: "items-end";
27
+ readonly stretch: "items-stretch";
28
+ };
29
+ declare const justifyClass: {
30
+ readonly start: "justify-start";
31
+ readonly center: "justify-center";
32
+ readonly end: "justify-end";
33
+ readonly between: "justify-between";
34
+ readonly around: "justify-around";
35
+ };
36
+ interface StackProps extends React.ComponentProps<"div"> {
37
+ gap?: Gap;
38
+ align?: keyof typeof alignClass;
39
+ justify?: keyof typeof justifyClass;
40
+ /**
41
+ * Grow to fill the remaining height of a flex parent (e.g. the top-level
42
+ * Stack under `WidgetContent`, so a nested `scroll` region can bound).
43
+ */
44
+ fill?: boolean;
45
+ /** Fill remaining height and scroll overflow. Use for the main content flow. */
46
+ scroll?: boolean;
47
+ }
48
+ /** Vertical layout with semantic spacing, alignment and optional scrolling. */
49
+ declare function Stack({ className, gap, align, justify, fill, scroll, ...props }: StackProps): react_jsx_runtime.JSX.Element;
50
+ interface InlineProps extends React.ComponentProps<"div"> {
51
+ gap?: Gap;
52
+ align?: keyof typeof alignClass;
53
+ justify?: keyof typeof justifyClass;
54
+ wrap?: boolean;
55
+ }
56
+ /** Horizontal layout with semantic spacing, alignment, wrap and justify. */
57
+ declare function Inline({ className, gap, align, justify, wrap, ...props }: InlineProps): react_jsx_runtime.JSX.Element;
58
+ declare const columnsClass: {
59
+ readonly 1: "grid-cols-1";
60
+ readonly 2: "grid-cols-2";
61
+ readonly 3: "grid-cols-3";
62
+ readonly 4: "grid-cols-4";
63
+ };
64
+ interface GridProps extends React.ComponentProps<"div"> {
65
+ /** Fixed column count, or `auto` for a responsive min-width fill. */
66
+ columns?: keyof typeof columnsClass | "auto";
67
+ gap?: Gap;
68
+ /** Minimum column width for `columns="auto"`. */
69
+ minColumnWidth?: number;
70
+ }
71
+ /** Responsive grid with bounded columns for metric and summary layouts. */
72
+ declare function Grid({ className, columns, gap, minColumnWidth, style, ...props }: GridProps): react_jsx_runtime.JSX.Element;
73
+ interface SectionProps extends React.ComponentProps<"div"> {
74
+ /** Section heading text or node. Omit for an unlabelled group. */
75
+ heading?: React.ReactNode;
76
+ /** Supporting text shown under the heading. */
77
+ description?: React.ReactNode;
78
+ /** Trailing action aligned to the heading row (e.g. an IconButton). */
79
+ action?: React.ReactNode;
80
+ gap?: Gap;
81
+ }
82
+ /** Compact section with optional heading, description and trailing action. */
83
+ declare function Section({ className, heading, description, action, gap, children, ...props }: SectionProps): react_jsx_runtime.JSX.Element;
84
+ interface DividerProps extends React.ComponentProps<typeof Separator> {
85
+ /** Vertical spacing around a horizontal divider. */
86
+ spacing?: "none" | "sm" | "md";
87
+ }
88
+ /** Compact divider built on the Separator primitive. */
89
+ declare function Divider({ className, orientation, spacing, ...props }: DividerProps): react_jsx_runtime.JSX.Element;
90
+
91
+ export { Divider, type DividerProps, Grid, type GridProps, Inline, type InlineProps, Section, type SectionProps, Stack, type StackProps, WidgetContent, type WidgetContentProps };
@@ -0,0 +1,91 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as class_variance_authority_types from 'class-variance-authority/types';
3
+ import * as React from 'react';
4
+ import { VariantProps } from 'class-variance-authority';
5
+ import { Separator } from '../ui/separator.js';
6
+ import { Gap } from './spacing.js';
7
+ import 'radix-ui';
8
+
9
+ declare const widgetContentVariants: (props?: ({
10
+ padding?: "sm" | "md" | "lg" | "none" | null | undefined;
11
+ scroll?: boolean | null | undefined;
12
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
13
+ interface WidgetContentProps extends React.ComponentProps<"div">, VariantProps<typeof widgetContentVariants> {
14
+ /**
15
+ * Apply the glass token scope so surfaces read as translucent on the
16
+ * frosted dashboard tile. On by default; set `false` for solid full
17
+ * plugin views (outside a dashboard tile).
18
+ */
19
+ glass?: boolean;
20
+ }
21
+ /** Full-height widget content frame with standard padding + a container query. */
22
+ declare function WidgetContent({ className, padding, scroll, glass, ...props }: WidgetContentProps): react_jsx_runtime.JSX.Element;
23
+ declare const alignClass: {
24
+ readonly start: "items-start";
25
+ readonly center: "items-center";
26
+ readonly end: "items-end";
27
+ readonly stretch: "items-stretch";
28
+ };
29
+ declare const justifyClass: {
30
+ readonly start: "justify-start";
31
+ readonly center: "justify-center";
32
+ readonly end: "justify-end";
33
+ readonly between: "justify-between";
34
+ readonly around: "justify-around";
35
+ };
36
+ interface StackProps extends React.ComponentProps<"div"> {
37
+ gap?: Gap;
38
+ align?: keyof typeof alignClass;
39
+ justify?: keyof typeof justifyClass;
40
+ /**
41
+ * Grow to fill the remaining height of a flex parent (e.g. the top-level
42
+ * Stack under `WidgetContent`, so a nested `scroll` region can bound).
43
+ */
44
+ fill?: boolean;
45
+ /** Fill remaining height and scroll overflow. Use for the main content flow. */
46
+ scroll?: boolean;
47
+ }
48
+ /** Vertical layout with semantic spacing, alignment and optional scrolling. */
49
+ declare function Stack({ className, gap, align, justify, fill, scroll, ...props }: StackProps): react_jsx_runtime.JSX.Element;
50
+ interface InlineProps extends React.ComponentProps<"div"> {
51
+ gap?: Gap;
52
+ align?: keyof typeof alignClass;
53
+ justify?: keyof typeof justifyClass;
54
+ wrap?: boolean;
55
+ }
56
+ /** Horizontal layout with semantic spacing, alignment, wrap and justify. */
57
+ declare function Inline({ className, gap, align, justify, wrap, ...props }: InlineProps): react_jsx_runtime.JSX.Element;
58
+ declare const columnsClass: {
59
+ readonly 1: "grid-cols-1";
60
+ readonly 2: "grid-cols-2";
61
+ readonly 3: "grid-cols-3";
62
+ readonly 4: "grid-cols-4";
63
+ };
64
+ interface GridProps extends React.ComponentProps<"div"> {
65
+ /** Fixed column count, or `auto` for a responsive min-width fill. */
66
+ columns?: keyof typeof columnsClass | "auto";
67
+ gap?: Gap;
68
+ /** Minimum column width for `columns="auto"`. */
69
+ minColumnWidth?: number;
70
+ }
71
+ /** Responsive grid with bounded columns for metric and summary layouts. */
72
+ declare function Grid({ className, columns, gap, minColumnWidth, style, ...props }: GridProps): react_jsx_runtime.JSX.Element;
73
+ interface SectionProps extends React.ComponentProps<"div"> {
74
+ /** Section heading text or node. Omit for an unlabelled group. */
75
+ heading?: React.ReactNode;
76
+ /** Supporting text shown under the heading. */
77
+ description?: React.ReactNode;
78
+ /** Trailing action aligned to the heading row (e.g. an IconButton). */
79
+ action?: React.ReactNode;
80
+ gap?: Gap;
81
+ }
82
+ /** Compact section with optional heading, description and trailing action. */
83
+ declare function Section({ className, heading, description, action, gap, children, ...props }: SectionProps): react_jsx_runtime.JSX.Element;
84
+ interface DividerProps extends React.ComponentProps<typeof Separator> {
85
+ /** Vertical spacing around a horizontal divider. */
86
+ spacing?: "none" | "sm" | "md";
87
+ }
88
+ /** Compact divider built on the Separator primitive. */
89
+ declare function Divider({ className, orientation, spacing, ...props }: DividerProps): react_jsx_runtime.JSX.Element;
90
+
91
+ export { Divider, type DividerProps, Grid, type GridProps, Inline, type InlineProps, Section, type SectionProps, Stack, type StackProps, WidgetContent, type WidgetContentProps };
@@ -0,0 +1,193 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { cva } from "class-variance-authority";
3
+ import { cn } from "../../lib/utils";
4
+ import { Separator } from "../ui/separator";
5
+ import { gapClass } from "./spacing";
6
+ const widgetContentVariants = cva(
7
+ // Full-height frame with a container-query boundary so child components can
8
+ // respond to the widget's own size rather than the viewport.
9
+ "@container/widget flex h-full min-h-0 flex-col",
10
+ {
11
+ variants: {
12
+ padding: {
13
+ none: "p-0",
14
+ sm: "p-2",
15
+ md: "p-3",
16
+ lg: "p-4"
17
+ },
18
+ scroll: {
19
+ true: "overflow-auto",
20
+ false: "overflow-hidden"
21
+ }
22
+ },
23
+ defaultVariants: { padding: "md", scroll: false }
24
+ }
25
+ );
26
+ function WidgetContent({
27
+ className,
28
+ padding,
29
+ scroll,
30
+ glass = true,
31
+ ...props
32
+ }) {
33
+ return /* @__PURE__ */ jsx(
34
+ "div",
35
+ {
36
+ "data-slot": "widget-content",
37
+ className: cn(widgetContentVariants({ padding, scroll }), glass && "glass", className),
38
+ ...props
39
+ }
40
+ );
41
+ }
42
+ const alignClass = {
43
+ start: "items-start",
44
+ center: "items-center",
45
+ end: "items-end",
46
+ stretch: "items-stretch"
47
+ };
48
+ const justifyClass = {
49
+ start: "justify-start",
50
+ center: "justify-center",
51
+ end: "justify-end",
52
+ between: "justify-between",
53
+ around: "justify-around"
54
+ };
55
+ function Stack({
56
+ className,
57
+ gap = "sm",
58
+ align,
59
+ justify,
60
+ fill = false,
61
+ scroll = false,
62
+ ...props
63
+ }) {
64
+ return /* @__PURE__ */ jsx(
65
+ "div",
66
+ {
67
+ "data-slot": "stack",
68
+ className: cn(
69
+ "flex flex-col",
70
+ gapClass[gap],
71
+ align && alignClass[align],
72
+ justify && justifyClass[justify],
73
+ (fill || scroll) && "min-h-0 flex-1",
74
+ scroll && "overflow-auto",
75
+ className
76
+ ),
77
+ ...props
78
+ }
79
+ );
80
+ }
81
+ function Inline({
82
+ className,
83
+ gap = "sm",
84
+ align = "center",
85
+ justify,
86
+ wrap = false,
87
+ ...props
88
+ }) {
89
+ return /* @__PURE__ */ jsx(
90
+ "div",
91
+ {
92
+ "data-slot": "inline",
93
+ className: cn(
94
+ "flex flex-row",
95
+ gapClass[gap],
96
+ alignClass[align],
97
+ justify && justifyClass[justify],
98
+ wrap ? "flex-wrap" : "min-w-0",
99
+ className
100
+ ),
101
+ ...props
102
+ }
103
+ );
104
+ }
105
+ const columnsClass = {
106
+ 1: "grid-cols-1",
107
+ 2: "grid-cols-2",
108
+ 3: "grid-cols-3",
109
+ 4: "grid-cols-4"
110
+ };
111
+ function Grid({
112
+ className,
113
+ columns = "auto",
114
+ gap = "sm",
115
+ minColumnWidth = 120,
116
+ style,
117
+ ...props
118
+ }) {
119
+ const auto = columns === "auto";
120
+ return /* @__PURE__ */ jsx(
121
+ "div",
122
+ {
123
+ "data-slot": "grid",
124
+ className: cn(
125
+ "grid",
126
+ gapClass[gap],
127
+ !auto && columnsClass[columns],
128
+ className
129
+ ),
130
+ style: auto ? {
131
+ gridTemplateColumns: `repeat(auto-fill, minmax(${minColumnWidth}px, 1fr))`,
132
+ ...style
133
+ } : style,
134
+ ...props
135
+ }
136
+ );
137
+ }
138
+ function Section({
139
+ className,
140
+ heading,
141
+ description,
142
+ action,
143
+ gap = "sm",
144
+ children,
145
+ ...props
146
+ }) {
147
+ return /* @__PURE__ */ jsxs(
148
+ "section",
149
+ {
150
+ "data-slot": "section",
151
+ className: cn("flex flex-col", gapClass[gap], className),
152
+ ...props,
153
+ children: [
154
+ (heading || action) && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
155
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col gap-0.5", children: [
156
+ heading && /* @__PURE__ */ jsx("h3", { className: "truncate text-[11px] font-semibold uppercase tracking-wider text-[var(--text-muted)]", children: heading }),
157
+ description && /* @__PURE__ */ jsx("p", { className: "truncate text-xs text-[var(--text-muted)]", children: description })
158
+ ] }),
159
+ action && /* @__PURE__ */ jsx("div", { className: "shrink-0", children: action })
160
+ ] }),
161
+ children
162
+ ]
163
+ }
164
+ );
165
+ }
166
+ const dividerSpacing = { none: "my-0", sm: "my-1", md: "my-2" };
167
+ function Divider({
168
+ className,
169
+ orientation = "horizontal",
170
+ spacing = "sm",
171
+ ...props
172
+ }) {
173
+ return /* @__PURE__ */ jsx(
174
+ Separator,
175
+ {
176
+ "data-slot": "divider",
177
+ orientation,
178
+ className: cn(
179
+ orientation === "horizontal" ? dividerSpacing[spacing] : "mx-1",
180
+ className
181
+ ),
182
+ ...props
183
+ }
184
+ );
185
+ }
186
+ export {
187
+ Divider,
188
+ Grid,
189
+ Inline,
190
+ Section,
191
+ Stack,
192
+ WidgetContent
193
+ };
@@ -0,0 +1,98 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _jsxruntime = require('react/jsx-runtime');
2
+ var _lucidereact = require('lucide-react');
3
+ var _utils = require('../../lib/utils');
4
+ var _typography = require('./typography');
5
+ var _tone = require('./tone');
6
+ var _layout = require('./layout');
7
+ const trendIcon = {
8
+ up: _lucidereact.ArrowUp,
9
+ down: _lucidereact.ArrowDown,
10
+ flat: _lucidereact.ArrowRight
11
+ };
12
+ function Metric({
13
+ className,
14
+ label,
15
+ value,
16
+ icon,
17
+ supporting,
18
+ trend,
19
+ tone,
20
+ orientation = "vertical",
21
+ ...props
22
+ }) {
23
+ const TrendIcon = trend ? trendIcon[trend.direction] : null;
24
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
25
+ "div",
26
+ {
27
+ "data-slot": "metric",
28
+ className: _utils.cn.call(void 0,
29
+ "flex min-w-0",
30
+ orientation === "vertical" ? "flex-col gap-0.5" : "items-center justify-between gap-2",
31
+ className
32
+ ),
33
+ ...props,
34
+ children: [
35
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-1.5", children: [
36
+ icon && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _typography.Icon, { icon, size: "sm" }),
37
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "truncate text-[11px] font-medium uppercase tracking-wide text-[var(--text-muted)]", children: label })
38
+ ] }),
39
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-baseline gap-1.5", children: [
40
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
41
+ "span",
42
+ {
43
+ className: _utils.cn.call(void 0,
44
+ "text-lg font-semibold leading-none tabular-nums",
45
+ tone ? _tone.toneColor[tone] : "text-[var(--text-primary)]"
46
+ ),
47
+ children: value
48
+ }
49
+ ),
50
+ trend && TrendIcon && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
51
+ "span",
52
+ {
53
+ className: _utils.cn.call(void 0,
54
+ "inline-flex items-center gap-0.5 text-xs font-medium tabular-nums",
55
+ trend.tone ? _tone.toneColor[trend.tone] : "text-[var(--text-muted)]"
56
+ ),
57
+ children: [
58
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TrendIcon, { className: "size-3", "aria-hidden": true }),
59
+ trend.value
60
+ ]
61
+ }
62
+ )
63
+ ] }),
64
+ supporting && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "truncate text-xs text-[var(--text-muted)]", children: supporting })
65
+ ]
66
+ }
67
+ );
68
+ }
69
+ function MetricCard({ className, ...props }) {
70
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
71
+ "div",
72
+ {
73
+ "data-slot": "metric-card",
74
+ className: _utils.cn.call(void 0,
75
+ "flex min-w-0 flex-col rounded-lg border border-[var(--surface-line)] bg-[var(--surface-raised)] p-3 shadow-[inset_0_1px_0_var(--surface-rim)]",
76
+ className
77
+ ),
78
+ ...props
79
+ }
80
+ );
81
+ }
82
+ function MetricGroup({ columns = "auto", gap = "sm", minColumnWidth = 96, ...props }) {
83
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
84
+ _layout.Grid,
85
+ {
86
+ "data-slot": "metric-group",
87
+ columns,
88
+ gap,
89
+ minColumnWidth,
90
+ ...props
91
+ }
92
+ );
93
+ }
94
+
95
+
96
+
97
+
98
+ exports.Metric = Metric; exports.MetricCard = MetricCard; exports.MetricGroup = MetricGroup;
@@ -0,0 +1,44 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { Tone } from './tone.cjs';
4
+ import { GridProps } from './layout.cjs';
5
+ import 'class-variance-authority/types';
6
+ import 'class-variance-authority';
7
+ import '../ui/separator.cjs';
8
+ import 'radix-ui';
9
+ import './spacing.cjs';
10
+
11
+ interface MetricTrend {
12
+ direction: "up" | "down" | "flat";
13
+ /** Change label, e.g. "+12%". */
14
+ value?: React.ReactNode;
15
+ /** Colour of the trend. Defaults to neutral — "up" is not always good. */
16
+ tone?: Tone;
17
+ }
18
+ interface MetricProps extends Omit<React.ComponentProps<"div">, "title"> {
19
+ label: React.ReactNode;
20
+ value: React.ReactNode;
21
+ /** Leading icon component (e.g. a lucide-react icon). */
22
+ icon?: React.ComponentType<{
23
+ className?: string;
24
+ }>;
25
+ /** Supporting text under the value. */
26
+ supporting?: React.ReactNode;
27
+ trend?: MetricTrend;
28
+ /** Semantic colour for the value. */
29
+ tone?: Tone;
30
+ /** Vertical (default) or horizontal label/value arrangement. */
31
+ orientation?: "vertical" | "horizontal";
32
+ }
33
+ /** A single label + value metric, usable inline or inside a MetricCard. */
34
+ declare function Metric({ className, label, value, icon, supporting, trend, tone, orientation, ...props }: MetricProps): react_jsx_runtime.JSX.Element;
35
+ interface MetricCardProps extends React.ComponentProps<"div"> {
36
+ }
37
+ /** A contained surface for a Metric (or any compact summary content). */
38
+ declare function MetricCard({ className, ...props }: MetricCardProps): react_jsx_runtime.JSX.Element;
39
+ interface MetricGroupProps extends GridProps {
40
+ }
41
+ /** Arranges multiple metrics responsively in a bounded grid. */
42
+ declare function MetricGroup({ columns, gap, minColumnWidth, ...props }: MetricGroupProps): react_jsx_runtime.JSX.Element;
43
+
44
+ export { Metric, MetricCard, type MetricCardProps, MetricGroup, type MetricGroupProps, type MetricProps, type MetricTrend };
@@ -0,0 +1,44 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { Tone } from './tone.js';
4
+ import { GridProps } from './layout.js';
5
+ import 'class-variance-authority/types';
6
+ import 'class-variance-authority';
7
+ import '../ui/separator.js';
8
+ import 'radix-ui';
9
+ import './spacing.js';
10
+
11
+ interface MetricTrend {
12
+ direction: "up" | "down" | "flat";
13
+ /** Change label, e.g. "+12%". */
14
+ value?: React.ReactNode;
15
+ /** Colour of the trend. Defaults to neutral — "up" is not always good. */
16
+ tone?: Tone;
17
+ }
18
+ interface MetricProps extends Omit<React.ComponentProps<"div">, "title"> {
19
+ label: React.ReactNode;
20
+ value: React.ReactNode;
21
+ /** Leading icon component (e.g. a lucide-react icon). */
22
+ icon?: React.ComponentType<{
23
+ className?: string;
24
+ }>;
25
+ /** Supporting text under the value. */
26
+ supporting?: React.ReactNode;
27
+ trend?: MetricTrend;
28
+ /** Semantic colour for the value. */
29
+ tone?: Tone;
30
+ /** Vertical (default) or horizontal label/value arrangement. */
31
+ orientation?: "vertical" | "horizontal";
32
+ }
33
+ /** A single label + value metric, usable inline or inside a MetricCard. */
34
+ declare function Metric({ className, label, value, icon, supporting, trend, tone, orientation, ...props }: MetricProps): react_jsx_runtime.JSX.Element;
35
+ interface MetricCardProps extends React.ComponentProps<"div"> {
36
+ }
37
+ /** A contained surface for a Metric (or any compact summary content). */
38
+ declare function MetricCard({ className, ...props }: MetricCardProps): react_jsx_runtime.JSX.Element;
39
+ interface MetricGroupProps extends GridProps {
40
+ }
41
+ /** Arranges multiple metrics responsively in a bounded grid. */
42
+ declare function MetricGroup({ columns, gap, minColumnWidth, ...props }: MetricGroupProps): react_jsx_runtime.JSX.Element;
43
+
44
+ export { Metric, MetricCard, type MetricCardProps, MetricGroup, type MetricGroupProps, type MetricProps, type MetricTrend };
@@ -0,0 +1,98 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { ArrowDown, ArrowRight, ArrowUp } from "lucide-react";
3
+ import { cn } from "../../lib/utils";
4
+ import { Icon } from "./typography";
5
+ import { toneColor } from "./tone";
6
+ import { Grid } from "./layout";
7
+ const trendIcon = {
8
+ up: ArrowUp,
9
+ down: ArrowDown,
10
+ flat: ArrowRight
11
+ };
12
+ function Metric({
13
+ className,
14
+ label,
15
+ value,
16
+ icon,
17
+ supporting,
18
+ trend,
19
+ tone,
20
+ orientation = "vertical",
21
+ ...props
22
+ }) {
23
+ const TrendIcon = trend ? trendIcon[trend.direction] : null;
24
+ return /* @__PURE__ */ jsxs(
25
+ "div",
26
+ {
27
+ "data-slot": "metric",
28
+ className: cn(
29
+ "flex min-w-0",
30
+ orientation === "vertical" ? "flex-col gap-0.5" : "items-center justify-between gap-2",
31
+ className
32
+ ),
33
+ ...props,
34
+ children: [
35
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
36
+ icon && /* @__PURE__ */ jsx(Icon, { icon, size: "sm" }),
37
+ /* @__PURE__ */ jsx("span", { className: "truncate text-[11px] font-medium uppercase tracking-wide text-[var(--text-muted)]", children: label })
38
+ ] }),
39
+ /* @__PURE__ */ jsxs("div", { className: "flex items-baseline gap-1.5", children: [
40
+ /* @__PURE__ */ jsx(
41
+ "span",
42
+ {
43
+ className: cn(
44
+ "text-lg font-semibold leading-none tabular-nums",
45
+ tone ? toneColor[tone] : "text-[var(--text-primary)]"
46
+ ),
47
+ children: value
48
+ }
49
+ ),
50
+ trend && TrendIcon && /* @__PURE__ */ jsxs(
51
+ "span",
52
+ {
53
+ className: cn(
54
+ "inline-flex items-center gap-0.5 text-xs font-medium tabular-nums",
55
+ trend.tone ? toneColor[trend.tone] : "text-[var(--text-muted)]"
56
+ ),
57
+ children: [
58
+ /* @__PURE__ */ jsx(TrendIcon, { className: "size-3", "aria-hidden": true }),
59
+ trend.value
60
+ ]
61
+ }
62
+ )
63
+ ] }),
64
+ supporting && /* @__PURE__ */ jsx("span", { className: "truncate text-xs text-[var(--text-muted)]", children: supporting })
65
+ ]
66
+ }
67
+ );
68
+ }
69
+ function MetricCard({ className, ...props }) {
70
+ return /* @__PURE__ */ jsx(
71
+ "div",
72
+ {
73
+ "data-slot": "metric-card",
74
+ className: cn(
75
+ "flex min-w-0 flex-col rounded-lg border border-[var(--surface-line)] bg-[var(--surface-raised)] p-3 shadow-[inset_0_1px_0_var(--surface-rim)]",
76
+ className
77
+ ),
78
+ ...props
79
+ }
80
+ );
81
+ }
82
+ function MetricGroup({ columns = "auto", gap = "sm", minColumnWidth = 96, ...props }) {
83
+ return /* @__PURE__ */ jsx(
84
+ Grid,
85
+ {
86
+ "data-slot": "metric-group",
87
+ columns,
88
+ gap,
89
+ minColumnWidth,
90
+ ...props
91
+ }
92
+ );
93
+ }
94
+ export {
95
+ Metric,
96
+ MetricCard,
97
+ MetricGroup
98
+ };