@upbound/monarch-blocks 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 (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +58 -0
  3. package/dist/cel-filter-bar.d.ts +187 -0
  4. package/dist/cel-filter-bar.js +1850 -0
  5. package/dist/cel-filter-bar.js.map +1 -0
  6. package/dist/chart.d.ts +52 -0
  7. package/dist/chart.js +332 -0
  8. package/dist/chart.js.map +1 -0
  9. package/dist/chat-interface.d.ts +143 -0
  10. package/dist/chat-interface.js +676 -0
  11. package/dist/chat-interface.js.map +1 -0
  12. package/dist/code-block.d.ts +21 -0
  13. package/dist/code-block.js +201 -0
  14. package/dist/code-block.js.map +1 -0
  15. package/dist/data-table.d.ts +505 -0
  16. package/dist/data-table.js +4725 -0
  17. package/dist/data-table.js.map +1 -0
  18. package/dist/filter-bar.d.ts +80 -0
  19. package/dist/filter-bar.js +590 -0
  20. package/dist/filter-bar.js.map +1 -0
  21. package/dist/floating-widget.d.ts +36 -0
  22. package/dist/floating-widget.js +218 -0
  23. package/dist/floating-widget.js.map +1 -0
  24. package/dist/index.d.ts +18 -0
  25. package/dist/index.js +6217 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/page-header.d.ts +12 -0
  28. package/dist/page-header.js +120 -0
  29. package/dist/page-header.js.map +1 -0
  30. package/dist/relative-time.d.ts +60 -0
  31. package/dist/relative-time.js +328 -0
  32. package/dist/relative-time.js.map +1 -0
  33. package/dist/section-header.d.ts +11 -0
  34. package/dist/section-header.js +123 -0
  35. package/dist/section-header.js.map +1 -0
  36. package/dist/section-nav.d.ts +50 -0
  37. package/dist/section-nav.js +143 -0
  38. package/dist/section-nav.js.map +1 -0
  39. package/dist/timeline.d.ts +8 -0
  40. package/dist/timeline.js +95 -0
  41. package/dist/timeline.js.map +1 -0
  42. package/dist/types-BULiU2qC.d.ts +170 -0
  43. package/package.json +58 -0
package/dist/chart.js ADDED
@@ -0,0 +1,332 @@
1
+ "use client";
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
5
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
8
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
+ var __spreadValues = (a, b) => {
10
+ for (var prop in b || (b = {}))
11
+ if (__hasOwnProp.call(b, prop))
12
+ __defNormalProp(a, prop, b[prop]);
13
+ if (__getOwnPropSymbols)
14
+ for (var prop of __getOwnPropSymbols(b)) {
15
+ if (__propIsEnum.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
17
+ }
18
+ return a;
19
+ };
20
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
21
+ var __objRest = (source, exclude) => {
22
+ var target = {};
23
+ for (var prop in source)
24
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
25
+ target[prop] = source[prop];
26
+ if (source != null && __getOwnPropSymbols)
27
+ for (var prop of __getOwnPropSymbols(source)) {
28
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
29
+ target[prop] = source[prop];
30
+ }
31
+ return target;
32
+ };
33
+
34
+ // src/chart.tsx
35
+ import * as React from "react";
36
+ import * as RechartsPrimitive from "recharts";
37
+
38
+ // src/lib/utils.ts
39
+ import { clsx } from "clsx";
40
+ import { extendTailwindMerge } from "tailwind-merge";
41
+ var twMerge = extendTailwindMerge({
42
+ extend: {
43
+ classGroups: {
44
+ "font-size": [
45
+ {
46
+ text: [
47
+ "display-hero",
48
+ "display-kpi-sm",
49
+ "display-kpi",
50
+ "display-kpi-lg",
51
+ "display-feature",
52
+ "h1",
53
+ "h2",
54
+ "h3",
55
+ "h4",
56
+ "body-lg",
57
+ "body",
58
+ "body-sm",
59
+ "caption",
60
+ "eyebrow"
61
+ ]
62
+ }
63
+ ]
64
+ }
65
+ }
66
+ });
67
+ function cn(...inputs) {
68
+ return twMerge(clsx(inputs));
69
+ }
70
+
71
+ // src/chart.tsx
72
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
73
+ var THEMES = { light: "", dark: ".dark" };
74
+ var INITIAL_DIMENSION = { width: 320, height: 200 };
75
+ var ChartContext = React.createContext(null);
76
+ function useChart() {
77
+ const context = React.useContext(ChartContext);
78
+ if (!context) {
79
+ throw new Error("useChart must be used within a <ChartContainer />");
80
+ }
81
+ return context;
82
+ }
83
+ function ChartContainer(_a) {
84
+ var _b = _a, {
85
+ id,
86
+ className,
87
+ children,
88
+ config,
89
+ initialDimension = INITIAL_DIMENSION
90
+ } = _b, props = __objRest(_b, [
91
+ "id",
92
+ "className",
93
+ "children",
94
+ "config",
95
+ "initialDimension"
96
+ ]);
97
+ const uniqueId = React.useId();
98
+ const chartId = `chart-${id != null ? id : uniqueId.replace(/:/g, "")}`;
99
+ return /* @__PURE__ */ jsx(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs(
100
+ "div",
101
+ __spreadProps(__spreadValues({
102
+ "data-slot": "chart",
103
+ "data-chart": chartId,
104
+ className: cn(
105
+ "[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden",
106
+ className
107
+ )
108
+ }, props), {
109
+ children: [
110
+ /* @__PURE__ */ jsx(ChartStyle, { id: chartId, config }),
111
+ /* @__PURE__ */ jsx(RechartsPrimitive.ResponsiveContainer, { initialDimension, children })
112
+ ]
113
+ })
114
+ ) });
115
+ }
116
+ var ChartStyle = ({ id, config }) => {
117
+ const colorConfig = Object.entries(config).filter(([, config2]) => {
118
+ var _a;
119
+ return (_a = config2.theme) != null ? _a : config2.color;
120
+ });
121
+ if (!colorConfig.length) {
122
+ return null;
123
+ }
124
+ return /* @__PURE__ */ jsx(
125
+ "style",
126
+ {
127
+ dangerouslySetInnerHTML: {
128
+ __html: Object.entries(THEMES).map(
129
+ ([theme, prefix]) => `
130
+ ${prefix} [data-chart=${id}] {
131
+ ${colorConfig.map(([key, itemConfig]) => {
132
+ var _a, _b;
133
+ const color = (_b = (_a = itemConfig.theme) == null ? void 0 : _a[theme]) != null ? _b : itemConfig.color;
134
+ return color ? ` --color-${key}: ${color};` : null;
135
+ }).join("\n")}
136
+ }
137
+ `
138
+ ).join("\n")
139
+ }
140
+ }
141
+ );
142
+ };
143
+ var ChartTooltip = RechartsPrimitive.Tooltip;
144
+ function ChartTooltipContent({
145
+ active,
146
+ payload,
147
+ className,
148
+ indicator = "dot",
149
+ hideLabel = false,
150
+ hideIndicator = false,
151
+ label,
152
+ labelFormatter,
153
+ labelClassName,
154
+ formatter,
155
+ color,
156
+ nameKey,
157
+ labelKey
158
+ }) {
159
+ const { config } = useChart();
160
+ const tooltipLabel = React.useMemo(() => {
161
+ var _a, _b, _c, _d;
162
+ if (hideLabel || !(payload == null ? void 0 : payload.length)) {
163
+ return null;
164
+ }
165
+ const [item] = payload;
166
+ const key = `${(_b = (_a = labelKey != null ? labelKey : item == null ? void 0 : item.dataKey) != null ? _a : item == null ? void 0 : item.name) != null ? _b : "value"}`;
167
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
168
+ const value = !labelKey && typeof label === "string" ? (_d = (_c = config[label]) == null ? void 0 : _c.label) != null ? _d : label : itemConfig == null ? void 0 : itemConfig.label;
169
+ if (labelFormatter) {
170
+ return /* @__PURE__ */ jsx("div", { className: cn("font-medium", labelClassName), children: labelFormatter(value, payload) });
171
+ }
172
+ if (!value) {
173
+ return null;
174
+ }
175
+ return /* @__PURE__ */ jsx("div", { className: cn("font-medium", labelClassName), children: value });
176
+ }, [label, labelFormatter, payload, hideLabel, labelClassName, config, labelKey]);
177
+ if (!active || !(payload == null ? void 0 : payload.length)) {
178
+ return null;
179
+ }
180
+ const nestLabel = payload.length === 1 && indicator !== "dot";
181
+ return /* @__PURE__ */ jsxs(
182
+ "div",
183
+ {
184
+ className: cn(
185
+ "border-border/50 bg-background text-body-sm grid min-w-32 items-start gap-1.5 rounded-lg border px-2.5 py-1.5 shadow-xl",
186
+ className
187
+ ),
188
+ children: [
189
+ !nestLabel ? tooltipLabel : null,
190
+ /* @__PURE__ */ jsx("div", { className: "grid gap-1.5", children: payload.filter((item) => item.type !== "none").map((item, index) => {
191
+ var _a, _b, _c, _d, _e;
192
+ const key = `${(_b = (_a = nameKey != null ? nameKey : item.name) != null ? _a : item.dataKey) != null ? _b : "value"}`;
193
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
194
+ const indicatorColor = (_d = color != null ? color : (_c = item.payload) == null ? void 0 : _c.fill) != null ? _d : item.color;
195
+ return /* @__PURE__ */ jsx(
196
+ "div",
197
+ {
198
+ className: cn(
199
+ "[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5",
200
+ indicator === "dot" && "items-center"
201
+ ),
202
+ children: formatter && (item == null ? void 0 : item.value) !== void 0 && item.name ? formatter(item.value, item.name, item, index, item.payload) : /* @__PURE__ */ jsxs(Fragment, { children: [
203
+ (itemConfig == null ? void 0 : itemConfig.icon) ? /* @__PURE__ */ jsx(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ jsx(
204
+ "div",
205
+ {
206
+ className: cn("border-border shrink-0 rounded-full bg-(--color-bg)", {
207
+ "h-2 w-2": indicator === "dot",
208
+ "w-1": indicator === "line",
209
+ "w-0 border-[1.5px] border-dashed bg-transparent": indicator === "dashed",
210
+ "my-0.5": nestLabel && indicator === "dashed"
211
+ }),
212
+ style: {
213
+ "--color-bg": indicatorColor,
214
+ "--color-border": indicatorColor
215
+ }
216
+ }
217
+ ),
218
+ /* @__PURE__ */ jsxs(
219
+ "div",
220
+ {
221
+ className: cn(
222
+ "flex flex-1 justify-between leading-none",
223
+ nestLabel ? "items-end" : "items-center"
224
+ ),
225
+ children: [
226
+ /* @__PURE__ */ jsxs("div", { className: "grid gap-1.5", children: [
227
+ nestLabel ? tooltipLabel : null,
228
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: (_e = itemConfig == null ? void 0 : itemConfig.label) != null ? _e : item.name })
229
+ ] }),
230
+ item.value != null && /* @__PURE__ */ jsx("span", { className: "text-foreground font-mono font-medium tabular-nums", children: typeof item.value === "number" ? item.value.toLocaleString() : String(item.value) })
231
+ ]
232
+ }
233
+ )
234
+ ] })
235
+ },
236
+ index
237
+ );
238
+ }) })
239
+ ]
240
+ }
241
+ );
242
+ }
243
+ var ChartLegend = RechartsPrimitive.Legend;
244
+ function ChartLegendContent({
245
+ className,
246
+ hideIcon = false,
247
+ payload,
248
+ verticalAlign = "bottom",
249
+ nameKey
250
+ }) {
251
+ const { config } = useChart();
252
+ if (!(payload == null ? void 0 : payload.length)) {
253
+ return null;
254
+ }
255
+ return /* @__PURE__ */ jsx("div", { className: cn("flex items-center justify-center gap-4", verticalAlign === "top" ? "pb-3" : "pt-3", className), children: payload.filter((item) => item.type !== "none").map((item, index) => {
256
+ var _a;
257
+ const key = `${(_a = nameKey != null ? nameKey : item.dataKey) != null ? _a : "value"}`;
258
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
259
+ return /* @__PURE__ */ jsxs(
260
+ "div",
261
+ {
262
+ className: cn("[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3"),
263
+ children: [
264
+ (itemConfig == null ? void 0 : itemConfig.icon) && !hideIcon ? /* @__PURE__ */ jsx(itemConfig.icon, {}) : /* @__PURE__ */ jsx(
265
+ "div",
266
+ {
267
+ className: "h-2 w-2 shrink-0 rounded-full",
268
+ style: {
269
+ backgroundColor: item.color
270
+ }
271
+ }
272
+ ),
273
+ itemConfig == null ? void 0 : itemConfig.label
274
+ ]
275
+ },
276
+ index
277
+ );
278
+ }) });
279
+ }
280
+ function getPayloadConfigFromPayload(config, payload, key) {
281
+ if (typeof payload !== "object" || payload === null) {
282
+ return void 0;
283
+ }
284
+ const payloadPayload = "payload" in payload && typeof payload.payload === "object" && payload.payload !== null ? payload.payload : void 0;
285
+ let configLabelKey = key;
286
+ if (key in payload && typeof payload[key] === "string") {
287
+ configLabelKey = payload[key];
288
+ } else if (payloadPayload && key in payloadPayload && typeof payloadPayload[key] === "string") {
289
+ configLabelKey = payloadPayload[key];
290
+ }
291
+ return configLabelKey in config ? config[configLabelKey] : config[key];
292
+ }
293
+ function ChartHeader(_a) {
294
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
295
+ return /* @__PURE__ */ jsx("div", __spreadValues({ "data-slot": "chart-header", className: cn("flex items-center justify-between pb-4", className) }, props));
296
+ }
297
+ function ChartTitle(_a) {
298
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
299
+ return /* @__PURE__ */ jsx("div", __spreadValues({ "data-slot": "chart-title", className: cn("text-h3", className) }, props));
300
+ }
301
+ function ChartDescription(_a) {
302
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
303
+ return /* @__PURE__ */ jsx("div", __spreadValues({ "data-slot": "chart-description", className: cn("text-body text-muted-foreground", className) }, props));
304
+ }
305
+ function ChartAction(_a) {
306
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
307
+ return /* @__PURE__ */ jsx("div", __spreadValues({ "data-slot": "chart-action", className: cn(className) }, props));
308
+ }
309
+ function ChartFooter(_a) {
310
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
311
+ return /* @__PURE__ */ jsx(
312
+ "div",
313
+ __spreadValues({
314
+ "data-slot": "chart-footer",
315
+ className: cn("text-body-sm text-muted-foreground flex items-center gap-2 pt-4", className)
316
+ }, props)
317
+ );
318
+ }
319
+ export {
320
+ ChartAction,
321
+ ChartContainer,
322
+ ChartDescription,
323
+ ChartFooter,
324
+ ChartHeader,
325
+ ChartLegend,
326
+ ChartLegendContent,
327
+ ChartStyle,
328
+ ChartTitle,
329
+ ChartTooltip,
330
+ ChartTooltipContent
331
+ };
332
+ //# sourceMappingURL=chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/chart.tsx","../src/lib/utils.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport * as RechartsPrimitive from 'recharts';\nimport type { TooltipValueType } from 'recharts';\n\nimport { cn } from '@/lib/utils';\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: '', dark: '.dark' } as const;\n\nconst INITIAL_DIMENSION = { width: 320, height: 200 } as const;\ntype TooltipNameType = number | string;\n\nexport type ChartConfig = Record<\n string,\n {\n label?: React.ReactNode;\n icon?: React.ComponentType;\n } & ({ color?: string; theme?: never } | { color?: never; theme: Record<keyof typeof THEMES, string> })\n>;\n\ntype ChartContextProps = {\n config: ChartConfig;\n};\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null);\n\nfunction useChart() {\n const context = React.useContext(ChartContext);\n\n if (!context) {\n throw new Error('useChart must be used within a <ChartContainer />');\n }\n\n return context;\n}\n\nfunction ChartContainer({\n id,\n className,\n children,\n config,\n initialDimension = INITIAL_DIMENSION,\n ...props\n}: React.ComponentProps<'div'> & {\n config: ChartConfig;\n children: React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>['children'];\n initialDimension?: {\n width: number;\n height: number;\n };\n}) {\n const uniqueId = React.useId();\n const chartId = `chart-${id ?? uniqueId.replace(/:/g, '')}`;\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n data-slot=\"chart\"\n data-chart={chartId}\n className={cn(\n \"[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden\",\n className,\n )}\n {...props}\n >\n <ChartStyle id={chartId} config={config} />\n <RechartsPrimitive.ResponsiveContainer initialDimension={initialDimension}>\n {children}\n </RechartsPrimitive.ResponsiveContainer>\n </div>\n </ChartContext.Provider>\n );\n}\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n const colorConfig = Object.entries(config).filter(([, config]) => config.theme ?? config.color);\n\n if (!colorConfig.length) {\n return null;\n }\n\n return (\n <style\n dangerouslySetInnerHTML={{\n __html: Object.entries(THEMES)\n .map(\n ([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n .map(([key, itemConfig]) => {\n const color = itemConfig.theme?.[theme as keyof typeof itemConfig.theme] ?? itemConfig.color;\n return color ? ` --color-${key}: ${color};` : null;\n })\n .join('\\n')}\n}\n`,\n )\n .join('\\n'),\n }}\n />\n );\n};\n\nconst ChartTooltip = RechartsPrimitive.Tooltip;\n\nfunction ChartTooltipContent({\n active,\n payload,\n className,\n indicator = 'dot',\n hideLabel = false,\n hideIndicator = false,\n label,\n labelFormatter,\n labelClassName,\n formatter,\n color,\n nameKey,\n labelKey,\n}: React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\n React.ComponentProps<'div'> & {\n hideLabel?: boolean;\n hideIndicator?: boolean;\n indicator?: 'line' | 'dot' | 'dashed';\n nameKey?: string;\n labelKey?: string;\n } & Omit<RechartsPrimitive.DefaultTooltipContentProps<TooltipValueType, TooltipNameType>, 'accessibilityLayer'>) {\n const { config } = useChart();\n\n const tooltipLabel = React.useMemo(() => {\n if (hideLabel || !payload?.length) {\n return null;\n }\n\n const [item] = payload;\n const key = `${labelKey ?? item?.dataKey ?? item?.name ?? 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const value = !labelKey && typeof label === 'string' ? (config[label]?.label ?? label) : itemConfig?.label;\n\n if (labelFormatter) {\n return <div className={cn('font-medium', labelClassName)}>{labelFormatter(value, payload)}</div>;\n }\n\n if (!value) {\n return null;\n }\n\n return <div className={cn('font-medium', labelClassName)}>{value}</div>;\n }, [label, labelFormatter, payload, hideLabel, labelClassName, config, labelKey]);\n\n if (!active || !payload?.length) {\n return null;\n }\n\n const nestLabel = payload.length === 1 && indicator !== 'dot';\n\n return (\n <div\n className={cn(\n 'border-border/50 bg-background text-body-sm grid min-w-32 items-start gap-1.5 rounded-lg border px-2.5 py-1.5 shadow-xl',\n className,\n )}\n >\n {!nestLabel ? tooltipLabel : null}\n <div className=\"grid gap-1.5\">\n {payload\n .filter(item => item.type !== 'none')\n .map((item, index) => {\n const key = `${nameKey ?? item.name ?? item.dataKey ?? 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const indicatorColor = color ?? item.payload?.fill ?? item.color;\n\n return (\n <div\n key={index}\n className={cn(\n '[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5',\n indicator === 'dot' && 'items-center',\n )}\n >\n {formatter && item?.value !== undefined && item.name ? (\n formatter(item.value, item.name, item, index, item.payload)\n ) : (\n <>\n {itemConfig?.icon ? (\n <itemConfig.icon />\n ) : (\n !hideIndicator && (\n <div\n className={cn('border-border shrink-0 rounded-full bg-(--color-bg)', {\n 'h-2 w-2': indicator === 'dot',\n 'w-1': indicator === 'line',\n 'w-0 border-[1.5px] border-dashed bg-transparent': indicator === 'dashed',\n 'my-0.5': nestLabel && indicator === 'dashed',\n })}\n style={\n {\n '--color-bg': indicatorColor,\n '--color-border': indicatorColor,\n } as React.CSSProperties\n }\n />\n )\n )}\n <div\n className={cn(\n 'flex flex-1 justify-between leading-none',\n nestLabel ? 'items-end' : 'items-center',\n )}\n >\n <div className=\"grid gap-1.5\">\n {nestLabel ? tooltipLabel : null}\n <span className=\"text-muted-foreground\">{itemConfig?.label ?? item.name}</span>\n </div>\n {item.value != null && (\n <span className=\"text-foreground font-mono font-medium tabular-nums\">\n {typeof item.value === 'number' ? item.value.toLocaleString() : String(item.value)}\n </span>\n )}\n </div>\n </>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\nconst ChartLegend = RechartsPrimitive.Legend;\n\nfunction ChartLegendContent({\n className,\n hideIcon = false,\n payload,\n verticalAlign = 'bottom',\n nameKey,\n}: React.ComponentProps<'div'> & {\n hideIcon?: boolean;\n nameKey?: string;\n} & RechartsPrimitive.DefaultLegendContentProps) {\n const { config } = useChart();\n\n if (!payload?.length) {\n return null;\n }\n\n return (\n <div className={cn('flex items-center justify-center gap-4', verticalAlign === 'top' ? 'pb-3' : 'pt-3', className)}>\n {payload\n .filter(item => item.type !== 'none')\n .map((item, index) => {\n const key = `${nameKey ?? item.dataKey ?? 'value'}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n\n return (\n <div\n key={index}\n className={cn('[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3')}\n >\n {itemConfig?.icon && !hideIcon ? (\n <itemConfig.icon />\n ) : (\n <div\n className=\"h-2 w-2 shrink-0 rounded-full\"\n style={{\n backgroundColor: item.color,\n }}\n />\n )}\n {itemConfig?.label}\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction getPayloadConfigFromPayload(config: ChartConfig, payload: unknown, key: string) {\n if (typeof payload !== 'object' || payload === null) {\n return undefined;\n }\n\n const payloadPayload =\n 'payload' in payload && typeof payload.payload === 'object' && payload.payload !== null\n ? payload.payload\n : undefined;\n\n let configLabelKey: string = key;\n\n if (key in payload && typeof payload[key as keyof typeof payload] === 'string') {\n configLabelKey = payload[key as keyof typeof payload] as string;\n } else if (\n payloadPayload &&\n key in payloadPayload &&\n typeof payloadPayload[key as keyof typeof payloadPayload] === 'string'\n ) {\n configLabelKey = payloadPayload[key as keyof typeof payloadPayload] as string;\n }\n\n return configLabelKey in config ? config[configLabelKey] : config[key];\n}\n\nfunction ChartHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div data-slot=\"chart-header\" className={cn('flex items-center justify-between pb-4', className)} {...props} />\n );\n}\n\nfunction ChartTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"chart-title\" className={cn('text-h3', className)} {...props} />;\n}\n\nfunction ChartDescription({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"chart-description\" className={cn('text-body text-muted-foreground', className)} {...props} />;\n}\n\nfunction ChartAction({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"chart-action\" className={cn(className)} {...props} />;\n}\n\nfunction ChartFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"chart-footer\"\n className={cn('text-body-sm text-muted-foreground flex items-center gap-2 pt-4', className)}\n {...props}\n />\n );\n}\n\nexport {\n ChartAction,\n ChartContainer,\n ChartDescription,\n ChartFooter,\n ChartHeader,\n ChartLegend,\n ChartLegendContent,\n ChartStyle,\n ChartTitle,\n ChartTooltip,\n ChartTooltipContent,\n};\n","import { clsx, type ClassValue } from 'clsx';\nimport { extendTailwindMerge } from 'tailwind-merge';\n\nconst twMerge = extendTailwindMerge({\n extend: {\n classGroups: {\n 'font-size': [\n {\n text: [\n 'display-hero',\n 'display-kpi-sm',\n 'display-kpi',\n 'display-kpi-lg',\n 'display-feature',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'body-lg',\n 'body',\n 'body-sm',\n 'caption',\n 'eyebrow',\n ],\n },\n ],\n },\n },\n});\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n"],"mappings":"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","names":["config"]}
@@ -0,0 +1,143 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+
4
+ interface ChatMessage {
5
+ id: string;
6
+ role: 'user' | 'assistant';
7
+ content: string;
8
+ toolCalls?: ChatToolCall[];
9
+ timestamp?: string;
10
+ /**
11
+ * When set on a user message, the thread renders a Marker directly below
12
+ * that turn showing the page that was in scope when the message was sent
13
+ * (per Monarch's "Use page as context" toggle — see Q8/Q9 of the chat
14
+ * reconciliation memory). Per-turn, not sticky across turns.
15
+ */
16
+ pageContext?: string;
17
+ }
18
+ interface ChatToolCall {
19
+ name: string;
20
+ description?: string;
21
+ apiUsed?: string;
22
+ isNew?: boolean;
23
+ }
24
+ interface ChatSession {
25
+ id: string;
26
+ title: string;
27
+ surface?: string;
28
+ messageCount?: number;
29
+ updatedAt?: string;
30
+ }
31
+ interface ChatSessionListProps {
32
+ sessions: ChatSession[];
33
+ activeSessionId?: string;
34
+ onSelectSession: (id: string) => void;
35
+ className?: string;
36
+ }
37
+ declare function ChatSessionList({ sessions, activeSessionId, onSelectSession, className }: ChatSessionListProps): react_jsx_runtime.JSX.Element;
38
+ declare function ChatMessageBubble({ message, userName: _userName, assistantName, }: {
39
+ message: ChatMessage;
40
+ /**
41
+ * Kept for API stability. Monarch's canonical chat surface renders user
42
+ * turns without an avatar (single-user product, no multi-user chat) — the
43
+ * prop no longer feeds any visible affordance but consumers passing it are
44
+ * still valid.
45
+ */
46
+ userName?: string;
47
+ /**
48
+ * Label rendered in the assistant identity header. Defaults to the fixed
49
+ * "Upbound AI" per the widget's canonical convention; overridable for
50
+ * multi-agent scenarios (e.g. named provider agents in a group chat).
51
+ */
52
+ assistantName?: string;
53
+ }): react_jsx_runtime.JSX.Element;
54
+ interface ChatRoutine {
55
+ id: string;
56
+ name: string;
57
+ description?: string;
58
+ }
59
+ interface ChatInputProps {
60
+ onSend?: (message: string) => void;
61
+ placeholder?: string;
62
+ /**
63
+ * User-defined workflows surfaced in the input's left-side dropdown.
64
+ * When provided (even as an empty array), the Workflows trigger renders.
65
+ * When undefined, the dropdown is hidden. Prop name stays `routines` for
66
+ * backward compatibility; the visible label is "Workflows" per the current
67
+ * design vocabulary (see Q6 of the chat reconciliation memory).
68
+ */
69
+ routines?: ChatRoutine[];
70
+ onSelectRoutine?: (id: string) => void;
71
+ /** Handler for the "Manage workflows" link at the bottom of the dropdown. */
72
+ onManageRoutines?: () => void;
73
+ /**
74
+ * Whether the "Use page as context" toggle is currently active. When
75
+ * true, the toggle button renders with a subtle brand-tinted background,
76
+ * and the consumer's onSend should attach the current page reference to
77
+ * the outgoing message via `ChatMessage.pageContext`. See Q8/Q9 of the
78
+ * memory for the pattern.
79
+ */
80
+ usePageAsContext?: boolean;
81
+ /**
82
+ * Handler for the "Use page as context" toggle. Parent owns the state;
83
+ * this callback should flip `usePageAsContext` on the parent.
84
+ */
85
+ onUsePageAsContext?: () => void;
86
+ /** Handler for the attachment affordance. Optional placeholder. */
87
+ onAttach?: () => void;
88
+ className?: string;
89
+ }
90
+ declare function ChatInput({ onSend, placeholder, routines, onSelectRoutine, onManageRoutines, usePageAsContext, onUsePageAsContext, onAttach, className, }: ChatInputProps): react_jsx_runtime.JSX.Element;
91
+ interface ChatThreadProps {
92
+ messages: ChatMessage[];
93
+ onSend?: (message: string) => void;
94
+ title?: string;
95
+ subtitle?: string;
96
+ placeholder?: string;
97
+ suggestions?: string[];
98
+ /**
99
+ * Name of the AI assistant — used in the empty-state greeting:
100
+ * "👋 Hi, I'm {assistantName}". Falls back to a neutral phrasing when
101
+ * omitted so the greeting still reads correctly.
102
+ */
103
+ assistantName?: string;
104
+ /**
105
+ * Name of the current user — used to derive 2-letter initials for the
106
+ * user message avatar. Mirrors the sidebar's `NavUser` pattern so the
107
+ * user reads as the same person across surfaces. Falls back to the
108
+ * generic user icon when omitted.
109
+ */
110
+ userName?: string;
111
+ routines?: ChatRoutine[];
112
+ onSelectRoutine?: (id: string) => void;
113
+ onManageRoutines?: () => void;
114
+ /** Whether "Use page as context" is currently active. See ChatInputProps. */
115
+ usePageAsContext?: boolean;
116
+ onUsePageAsContext?: () => void;
117
+ onAttach?: () => void;
118
+ callout?: React.ReactNode;
119
+ headerActions?: React.ReactNode;
120
+ className?: string;
121
+ /**
122
+ * When `true`, renders a "Thinking…" indicator below the last message
123
+ * (typically a user message awaiting an assistant response). Hides
124
+ * automatically when the assistant message lands and `isThinking`
125
+ * flips back to `false`.
126
+ */
127
+ isThinking?: boolean;
128
+ }
129
+ declare function ChatThread({ messages, onSend, title, subtitle, placeholder, suggestions, assistantName, userName, routines, onSelectRoutine, onManageRoutines, usePageAsContext, onUsePageAsContext, onAttach, callout, headerActions, className, isThinking, }: ChatThreadProps): react_jsx_runtime.JSX.Element;
130
+ interface ChatNavRailProps {
131
+ onNewSession?: () => void;
132
+ onOpenRoutines?: () => void;
133
+ onOpenConnectors?: () => void;
134
+ onOpenCustomize?: () => void;
135
+ }
136
+ interface ChatInterfaceProps extends ChatThreadProps, ChatNavRailProps {
137
+ sessions: ChatSession[];
138
+ activeSessionId?: string;
139
+ onSelectSession?: (id: string) => void;
140
+ }
141
+ declare function ChatInterface({ sessions, activeSessionId, onSelectSession, onNewSession, onOpenRoutines, onOpenConnectors, onOpenCustomize, className, ...threadProps }: ChatInterfaceProps): react_jsx_runtime.JSX.Element;
142
+
143
+ export { ChatInput, type ChatInputProps, ChatInterface, type ChatInterfaceProps, type ChatMessage, ChatMessageBubble, type ChatRoutine, type ChatSession, ChatSessionList, type ChatSessionListProps, ChatThread, type ChatThreadProps, type ChatToolCall };