@customercity/react 0.1.4
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.
- package/dist/components/agent-activity.d.ts +11 -0
- package/dist/components/agent-activity.d.ts.map +1 -0
- package/dist/components/agent-activity.js +9 -0
- package/dist/components/agent-activity.js.map +1 -0
- package/dist/components/agent-card.d.ts +11 -0
- package/dist/components/agent-card.d.ts.map +1 -0
- package/dist/components/agent-card.js +8 -0
- package/dist/components/agent-card.js.map +1 -0
- package/dist/components/agent-message.d.ts +14 -0
- package/dist/components/agent-message.d.ts.map +1 -0
- package/dist/components/agent-message.js +15 -0
- package/dist/components/agent-message.js.map +1 -0
- package/dist/components/alert.d.ts +12 -0
- package/dist/components/alert.d.ts.map +1 -0
- package/dist/components/alert.js +27 -0
- package/dist/components/alert.js.map +1 -0
- package/dist/components/avatar.d.ts +11 -0
- package/dist/components/avatar.d.ts.map +1 -0
- package/dist/components/avatar.js +25 -0
- package/dist/components/avatar.js.map +1 -0
- package/dist/components/breadcrumbs.d.ts +10 -0
- package/dist/components/breadcrumbs.d.ts.map +1 -0
- package/dist/components/breadcrumbs.js +10 -0
- package/dist/components/breadcrumbs.js.map +1 -0
- package/dist/components/button.d.ts +17 -0
- package/dist/components/button.d.ts.map +1 -0
- package/dist/components/button.js +34 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/card.d.ts +19 -0
- package/dist/components/card.d.ts.map +1 -0
- package/dist/components/card.js +22 -0
- package/dist/components/card.js.map +1 -0
- package/dist/components/checkbox.d.ts +8 -0
- package/dist/components/checkbox.d.ts.map +1 -0
- package/dist/components/checkbox.js +16 -0
- package/dist/components/checkbox.js.map +1 -0
- package/dist/components/chip.d.ts +12 -0
- package/dist/components/chip.d.ts.map +1 -0
- package/dist/components/chip.js +14 -0
- package/dist/components/chip.js.map +1 -0
- package/dist/components/citations.d.ts +18 -0
- package/dist/components/citations.d.ts.map +1 -0
- package/dist/components/citations.js +22 -0
- package/dist/components/citations.js.map +1 -0
- package/dist/components/code-block.d.ts +9 -0
- package/dist/components/code-block.d.ts.map +1 -0
- package/dist/components/code-block.js +20 -0
- package/dist/components/code-block.js.map +1 -0
- package/dist/components/combobox.d.ts +17 -0
- package/dist/components/combobox.d.ts.map +1 -0
- package/dist/components/combobox.js +41 -0
- package/dist/components/combobox.js.map +1 -0
- package/dist/components/confidence-meter.d.ts +12 -0
- package/dist/components/confidence-meter.d.ts.map +1 -0
- package/dist/components/confidence-meter.js +15 -0
- package/dist/components/confidence-meter.js.map +1 -0
- package/dist/components/data-table.d.ts +17 -0
- package/dist/components/data-table.d.ts.map +1 -0
- package/dist/components/data-table.js +8 -0
- package/dist/components/data-table.js.map +1 -0
- package/dist/components/date-picker.d.ts +11 -0
- package/dist/components/date-picker.d.ts.map +1 -0
- package/dist/components/date-picker.js +6 -0
- package/dist/components/date-picker.js.map +1 -0
- package/dist/components/dialog.d.ts +10 -0
- package/dist/components/dialog.d.ts.map +1 -0
- package/dist/components/dialog.js +21 -0
- package/dist/components/dialog.js.map +1 -0
- package/dist/components/drawer.d.ts +11 -0
- package/dist/components/drawer.d.ts.map +1 -0
- package/dist/components/drawer.js +18 -0
- package/dist/components/drawer.js.map +1 -0
- package/dist/components/dropdown-menu.d.ts +10 -0
- package/dist/components/dropdown-menu.d.ts.map +1 -0
- package/dist/components/dropdown-menu.js +19 -0
- package/dist/components/dropdown-menu.js.map +1 -0
- package/dist/components/empty-state.d.ts +11 -0
- package/dist/components/empty-state.d.ts.map +1 -0
- package/dist/components/empty-state.js +6 -0
- package/dist/components/empty-state.js.map +1 -0
- package/dist/components/epistemic-badge.d.ts +10 -0
- package/dist/components/epistemic-badge.d.ts.map +1 -0
- package/dist/components/epistemic-badge.js +38 -0
- package/dist/components/epistemic-badge.js.map +1 -0
- package/dist/components/field.d.ts +25 -0
- package/dist/components/field.d.ts.map +1 -0
- package/dist/components/field.js +52 -0
- package/dist/components/field.js.map +1 -0
- package/dist/components/input.d.ts +6 -0
- package/dist/components/input.d.ts.map +1 -0
- package/dist/components/input.js +6 -0
- package/dist/components/input.js.map +1 -0
- package/dist/components/insight-callout.d.ts +10 -0
- package/dist/components/insight-callout.d.ts.map +1 -0
- package/dist/components/insight-callout.js +7 -0
- package/dist/components/insight-callout.js.map +1 -0
- package/dist/components/link.d.ts +6 -0
- package/dist/components/link.d.ts.map +1 -0
- package/dist/components/link.js +7 -0
- package/dist/components/link.js.map +1 -0
- package/dist/components/logo.d.ts +31 -0
- package/dist/components/logo.d.ts.map +1 -0
- package/dist/components/logo.js +94 -0
- package/dist/components/logo.js.map +1 -0
- package/dist/components/markdown.d.ts +7 -0
- package/dist/components/markdown.d.ts.map +1 -0
- package/dist/components/markdown.js +31 -0
- package/dist/components/markdown.js.map +1 -0
- package/dist/components/memory-reference.d.ts +12 -0
- package/dist/components/memory-reference.d.ts.map +1 -0
- package/dist/components/memory-reference.js +21 -0
- package/dist/components/memory-reference.js.map +1 -0
- package/dist/components/menu.d.ts +18 -0
- package/dist/components/menu.d.ts.map +1 -0
- package/dist/components/menu.js +11 -0
- package/dist/components/menu.js.map +1 -0
- package/dist/components/motion.d.ts +38 -0
- package/dist/components/motion.d.ts.map +1 -0
- package/dist/components/motion.js +67 -0
- package/dist/components/motion.js.map +1 -0
- package/dist/components/pagination.d.ts +10 -0
- package/dist/components/pagination.d.ts.map +1 -0
- package/dist/components/pagination.js +23 -0
- package/dist/components/pagination.js.map +1 -0
- package/dist/components/popover.d.ts +7 -0
- package/dist/components/popover.d.ts.map +1 -0
- package/dist/components/popover.js +11 -0
- package/dist/components/popover.js.map +1 -0
- package/dist/components/progress.d.ts +11 -0
- package/dist/components/progress.d.ts.map +1 -0
- package/dist/components/progress.js +13 -0
- package/dist/components/progress.js.map +1 -0
- package/dist/components/prompt-input.d.ts +14 -0
- package/dist/components/prompt-input.d.ts.map +1 -0
- package/dist/components/prompt-input.js +29 -0
- package/dist/components/prompt-input.js.map +1 -0
- package/dist/components/radio.d.ts +9 -0
- package/dist/components/radio.d.ts.map +1 -0
- package/dist/components/radio.js +17 -0
- package/dist/components/radio.js.map +1 -0
- package/dist/components/score-badge.d.ts +21 -0
- package/dist/components/score-badge.d.ts.map +1 -0
- package/dist/components/score-badge.js +36 -0
- package/dist/components/score-badge.js.map +1 -0
- package/dist/components/select.d.ts +18 -0
- package/dist/components/select.d.ts.map +1 -0
- package/dist/components/select.js +9 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/skeleton.d.ts +4 -0
- package/dist/components/skeleton.d.ts.map +1 -0
- package/dist/components/skeleton.js +7 -0
- package/dist/components/skeleton.js.map +1 -0
- package/dist/components/slider.d.ts +4 -0
- package/dist/components/slider.d.ts.map +1 -0
- package/dist/components/slider.js +11 -0
- package/dist/components/slider.js.map +1 -0
- package/dist/components/sparkle-badge.d.ts +27 -0
- package/dist/components/sparkle-badge.d.ts.map +1 -0
- package/dist/components/sparkle-badge.js +23 -0
- package/dist/components/sparkle-badge.js.map +1 -0
- package/dist/components/spinner.d.ts +9 -0
- package/dist/components/spinner.d.ts.map +1 -0
- package/dist/components/spinner.js +8 -0
- package/dist/components/spinner.js.map +1 -0
- package/dist/components/streaming-text.d.ts +13 -0
- package/dist/components/streaming-text.d.ts.map +1 -0
- package/dist/components/streaming-text.js +26 -0
- package/dist/components/streaming-text.js.map +1 -0
- package/dist/components/switch.d.ts +8 -0
- package/dist/components/switch.d.ts.map +1 -0
- package/dist/components/switch.js +15 -0
- package/dist/components/switch.js.map +1 -0
- package/dist/components/tabs.d.ts +18 -0
- package/dist/components/tabs.d.ts.map +1 -0
- package/dist/components/tabs.js +29 -0
- package/dist/components/tabs.js.map +1 -0
- package/dist/components/textarea.d.ts +8 -0
- package/dist/components/textarea.d.ts.map +1 -0
- package/dist/components/textarea.js +12 -0
- package/dist/components/textarea.js.map +1 -0
- package/dist/components/toast.d.ts +8 -0
- package/dist/components/toast.d.ts.map +1 -0
- package/dist/components/toast.js +20 -0
- package/dist/components/toast.js.map +1 -0
- package/dist/components/tooltip.d.ts +13 -0
- package/dist/components/tooltip.d.ts.map +1 -0
- package/dist/components/tooltip.js +10 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/components/verified-badge.d.ts +14 -0
- package/dist/components/verified-badge.d.ts.map +1 -0
- package/dist/components/verified-badge.js +20 -0
- package/dist/components/verified-badge.js.map +1 -0
- package/dist/index.d.ts +51 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/types.d.ts +20 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +7 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/utils.d.ts +4 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +7 -0
- package/dist/lib/utils.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import * as RG from "@radix-ui/react-radio-group";
|
|
3
|
+
export declare const RadioGroup: React.ForwardRefExoticComponent<Omit<RG.RadioGroupProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
4
|
+
interface RadioProps extends React.ComponentPropsWithoutRef<typeof RG.Item> {
|
|
5
|
+
label?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const Radio: React.ForwardRefExoticComponent<RadioProps & React.RefAttributes<HTMLButtonElement>>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=radio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio.d.ts","sourceRoot":"","sources":["../../src/components/radio.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAGlD,eAAO,MAAM,UAAU,8IAKrB,CAAC;AAGH,UAAU,UAAW,SAAQ,KAAK,CAAC,wBAAwB,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,eAAO,MAAM,KAAK,sFA2BjB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import * as RG from "@radix-ui/react-radio-group";
|
|
5
|
+
import { cn } from "../lib/utils";
|
|
6
|
+
export const RadioGroup = React.forwardRef(({ className, ...props }, ref) => (_jsx(RG.Root, { ref: ref, className: cn("flex flex-col gap-2", className), ...props })));
|
|
7
|
+
RadioGroup.displayName = "RadioGroup";
|
|
8
|
+
let rId = 0;
|
|
9
|
+
export const Radio = React.forwardRef(({ className, label, id, ...props }, ref) => {
|
|
10
|
+
const [autoId] = React.useState(() => id ?? `radio-${++rId}`);
|
|
11
|
+
const dot = (_jsx(RG.Item, { ref: ref, id: autoId, className: cn("flex h-[18px] w-[18px] shrink-0 items-center justify-center rounded-full border border-border bg-card transition-colors", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand", "data-[state=checked]:border-brand", "disabled:cursor-not-allowed disabled:opacity-50", className), ...props, children: _jsx(RG.Indicator, { className: "block h-2.5 w-2.5 rounded-full bg-brand" }) }));
|
|
12
|
+
if (!label)
|
|
13
|
+
return dot;
|
|
14
|
+
return (_jsxs("label", { htmlFor: autoId, className: "inline-flex cursor-pointer items-center gap-2 text-sm text-foreground", children: [dot, label] }));
|
|
15
|
+
});
|
|
16
|
+
Radio.displayName = "Radio";
|
|
17
|
+
//# sourceMappingURL=radio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio.js","sourceRoot":"","sources":["../../src/components/radio.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAClD,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAGxC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClC,KAAC,EAAE,CAAC,IAAI,IAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAClF,CAAC,CAAC;AACH,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC;AAMtC,IAAI,GAAG,GAAG,CAAC,CAAC;AACZ,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CACnC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IAC1C,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,CACV,KAAC,EAAE,CAAC,IAAI,IACN,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,EAAE,CACX,yHAAyH,EACzH,0EAA0E,EAC1E,mCAAmC,EACnC,iDAAiD,EACjD,SAAS,CACV,KACG,KAAK,YAET,KAAC,EAAE,CAAC,SAAS,IAAC,SAAS,EAAC,yCAAyC,GAAG,GAC5D,CACX,CAAC;IACF,IAAI,CAAC,KAAK;QAAE,OAAO,GAAG,CAAC;IACvB,OAAO,CACL,iBAAO,OAAO,EAAE,MAAM,EAAE,SAAS,EAAC,uEAAuE,aACtG,GAAG,EACH,KAAK,IACA,CACT,CAAC;AACJ,CAAC,CACF,CAAC;AACF,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
interface ScoreBadgeProps {
|
|
2
|
+
score: number;
|
|
3
|
+
max?: number;
|
|
4
|
+
showStar?: boolean;
|
|
5
|
+
size?: "sm" | "md" | "lg";
|
|
6
|
+
className?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function TrustScoreBadge({ score, max, showStar, size, className, }: ScoreBadgeProps): import("react").JSX.Element;
|
|
9
|
+
interface FitScoreBadgeProps {
|
|
10
|
+
score: number;
|
|
11
|
+
size?: "sm" | "md" | "lg";
|
|
12
|
+
className?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function FitScoreBadge({ score, size, className }: FitScoreBadgeProps): import("react").JSX.Element;
|
|
15
|
+
interface UrgencyBadgeProps {
|
|
16
|
+
urgency: "high" | "medium" | "low";
|
|
17
|
+
className?: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function UrgencyBadge({ urgency, className }: UrgencyBadgeProps): import("react").JSX.Element;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=score-badge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"score-badge.d.ts","sourceRoot":"","sources":["../../src/components/score-badge.tsx"],"names":[],"mappings":"AAGA,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,GAAO,EACP,QAAe,EACf,IAAW,EACX,SAAS,GACV,EAAE,eAAe,+BA2BjB;AAED,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,IAAW,EAAE,SAAS,EAAE,EAAE,kBAAkB,+BA4BlF;AAED,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,iBAAiB,+BAkBrE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../lib/utils";
|
|
3
|
+
import { Star } from "lucide-react";
|
|
4
|
+
export function TrustScoreBadge({ score, max = 5, showStar = true, size = "md", className, }) {
|
|
5
|
+
const colorClass = score >= 4.5 ? "text-green" : score >= 3.5 ? "text-sparkle" : "text-red";
|
|
6
|
+
const sizeClass = {
|
|
7
|
+
sm: "text-xs",
|
|
8
|
+
md: "text-sm",
|
|
9
|
+
lg: "text-[22px] tracking-[-0.02em]",
|
|
10
|
+
};
|
|
11
|
+
return (_jsxs("span", { className: cn("inline-flex items-center gap-1 font-mono font-bold tabular-nums", sizeClass[size], colorClass, size === "lg" && "score-glow", className), children: [showStar && _jsx(Star, { className: "h-3.5 w-3.5 fill-current" }), score.toFixed(1), size === "lg" && (_jsxs("span", { className: "text-[13px] text-muted-foreground font-normal", children: ["/", max.toFixed(1)] }))] }));
|
|
12
|
+
}
|
|
13
|
+
export function FitScoreBadge({ score, size = "md", className }) {
|
|
14
|
+
const bgClass = score >= 85
|
|
15
|
+
? "bg-green-bg text-green"
|
|
16
|
+
: score >= 70
|
|
17
|
+
? "bg-brand-light text-brand"
|
|
18
|
+
: score >= 55
|
|
19
|
+
? "bg-orange-bg text-orange"
|
|
20
|
+
: "bg-accent text-muted";
|
|
21
|
+
const sizeClass = {
|
|
22
|
+
sm: "h-6 w-6 text-[10px]",
|
|
23
|
+
md: "h-8 w-8 text-xs",
|
|
24
|
+
lg: "h-10 w-10 text-sm",
|
|
25
|
+
};
|
|
26
|
+
return (_jsx("span", { className: cn("inline-flex items-center justify-center rounded-full font-mono font-bold tabular-nums", sizeClass[size], bgClass, className), children: score }));
|
|
27
|
+
}
|
|
28
|
+
export function UrgencyBadge({ urgency, className }) {
|
|
29
|
+
const colors = {
|
|
30
|
+
high: "bg-red-bg text-red",
|
|
31
|
+
medium: "bg-orange-bg text-orange",
|
|
32
|
+
low: "bg-accent text-muted",
|
|
33
|
+
};
|
|
34
|
+
return (_jsx("span", { className: cn("inline-flex items-center rounded-full px-2.5 py-0.5 text-[11px] font-semibold capitalize", colors[urgency], className), children: urgency }));
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=score-badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"score-badge.js","sourceRoot":"","sources":["../../src/components/score-badge.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAUpC,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,GAAG,GAAG,CAAC,EACP,QAAQ,GAAG,IAAI,EACf,IAAI,GAAG,IAAI,EACX,SAAS,GACO;IAChB,MAAM,UAAU,GACd,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC;IAE3E,MAAM,SAAS,GAAG;QAChB,EAAE,EAAE,SAAS;QACb,EAAE,EAAE,SAAS;QACb,EAAE,EAAE,gCAAgC;KACrC,CAAC;IAEF,OAAO,CACL,gBACE,SAAS,EAAE,EAAE,CACX,iEAAiE,EACjE,SAAS,CAAC,IAAI,CAAC,EACf,UAAU,EACV,IAAI,KAAK,IAAI,IAAI,YAAY,EAC7B,SAAS,CACV,aAEA,QAAQ,IAAI,KAAC,IAAI,IAAC,SAAS,EAAC,0BAA0B,GAAG,EACzD,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAChB,IAAI,KAAK,IAAI,IAAI,CAChB,gBAAM,SAAS,EAAC,+CAA+C,kBAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAQ,CACzF,IACI,CACR,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,SAAS,EAAsB;IACjF,MAAM,OAAO,GACX,KAAK,IAAI,EAAE;QACT,CAAC,CAAC,wBAAwB;QAC1B,CAAC,CAAC,KAAK,IAAI,EAAE;YACX,CAAC,CAAC,2BAA2B;YAC7B,CAAC,CAAC,KAAK,IAAI,EAAE;gBACX,CAAC,CAAC,0BAA0B;gBAC5B,CAAC,CAAC,sBAAsB,CAAC;IAEjC,MAAM,SAAS,GAAG;QAChB,EAAE,EAAE,qBAAqB;QACzB,EAAE,EAAE,iBAAiB;QACrB,EAAE,EAAE,mBAAmB;KACxB,CAAC;IAEF,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,uFAAuF,EACvF,SAAS,CAAC,IAAI,CAAC,EACf,OAAO,EACP,SAAS,CACV,YAEA,KAAK,GACD,CACR,CAAC;AACJ,CAAC;AAOD,MAAM,UAAU,YAAY,CAAC,EAAE,OAAO,EAAE,SAAS,EAAqB;IACpE,MAAM,MAAM,GAAG;QACb,IAAI,EAAE,oBAAoB;QAC1B,MAAM,EAAE,0BAA0B;QAClC,GAAG,EAAE,sBAAsB;KAC5B,CAAC;IAEF,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,0FAA0F,EAC1F,MAAM,CAAC,OAAO,CAAC,EACf,SAAS,CACV,YAEA,OAAO,GACH,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface SelectOption {
|
|
3
|
+
value: string;
|
|
4
|
+
label: string;
|
|
5
|
+
}
|
|
6
|
+
interface SelectProps {
|
|
7
|
+
options: SelectOption[];
|
|
8
|
+
value?: string;
|
|
9
|
+
defaultValue?: string;
|
|
10
|
+
onValueChange?: (value: string) => void;
|
|
11
|
+
placeholder?: string;
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
error?: boolean;
|
|
14
|
+
className?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function Select({ options, value, defaultValue, onValueChange, placeholder, disabled, error, className, }: SelectProps): React.JSX.Element;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/components/select.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,WAAW;IACnB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,MAAM,CAAC,EACrB,OAAO,EACP,KAAK,EACL,YAAY,EACZ,aAAa,EACb,WAAuB,EACvB,QAAQ,EACR,KAAK,EACL,SAAS,GACV,EAAE,WAAW,qBA6Cb"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as RS from "@radix-ui/react-select";
|
|
4
|
+
import { Check, ChevronDown } from "lucide-react";
|
|
5
|
+
import { cn } from "../lib/utils";
|
|
6
|
+
export function Select({ options, value, defaultValue, onValueChange, placeholder = "Select…", disabled, error, className, }) {
|
|
7
|
+
return (_jsxs(RS.Root, { value: value, defaultValue: defaultValue, onValueChange: onValueChange, disabled: disabled, children: [_jsxs(RS.Trigger, { "aria-invalid": error || undefined, className: cn("inline-flex h-10 w-full items-center justify-between gap-2 rounded-md border bg-card px-3 text-sm text-foreground transition-colors", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand", "disabled:cursor-not-allowed disabled:opacity-50 data-[placeholder]:text-muted-foreground", error ? "border-red" : "border-border", className), children: [_jsx(RS.Value, { placeholder: placeholder }), _jsx(RS.Icon, { children: _jsx(ChevronDown, { className: "h-4 w-4 text-muted" }) })] }), _jsx(RS.Portal, { children: _jsx(RS.Content, { position: "popper", sideOffset: 4, className: "z-[1400] max-h-72 min-w-[var(--radix-select-trigger-width)] overflow-hidden rounded-lg border border-border bg-card card-shadow-lg", children: _jsx(RS.Viewport, { className: "p-1.5", children: options.map((opt) => (_jsxs(RS.Item, { value: opt.value, className: cn("relative flex cursor-pointer select-none items-center rounded-md px-3 py-2 pr-8 text-[13px] text-foreground outline-none", "data-[highlighted]:bg-accent data-[state=checked]:font-medium data-[state=checked]:text-brand"), children: [_jsx(RS.ItemText, { children: opt.label }), _jsx(RS.ItemIndicator, { className: "absolute right-2", children: _jsx(Check, { className: "h-4 w-4 text-brand" }) })] }, opt.value))) }) }) })] }));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/components/select.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAkBlC,MAAM,UAAU,MAAM,CAAC,EACrB,OAAO,EACP,KAAK,EACL,YAAY,EACZ,aAAa,EACb,WAAW,GAAG,SAAS,EACvB,QAAQ,EACR,KAAK,EACL,SAAS,GACG;IACZ,OAAO,CACL,MAAC,EAAE,CAAC,IAAI,IAAC,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,aACjG,MAAC,EAAE,CAAC,OAAO,oBACK,KAAK,IAAI,SAAS,EAChC,SAAS,EAAE,EAAE,CACX,qIAAqI,EACrI,0EAA0E,EAC1E,0FAA0F,EAC1F,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,EACtC,SAAS,CACV,aAED,KAAC,EAAE,CAAC,KAAK,IAAC,WAAW,EAAE,WAAW,GAAI,EACtC,KAAC,EAAE,CAAC,IAAI,cACN,KAAC,WAAW,IAAC,SAAS,EAAC,oBAAoB,GAAG,GACtC,IACC,EACb,KAAC,EAAE,CAAC,MAAM,cACR,KAAC,EAAE,CAAC,OAAO,IACT,QAAQ,EAAC,QAAQ,EACjB,UAAU,EAAE,CAAC,EACb,SAAS,EAAC,oIAAoI,YAE9I,KAAC,EAAE,CAAC,QAAQ,IAAC,SAAS,EAAC,OAAO,YAC3B,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACpB,MAAC,EAAE,CAAC,IAAI,IAEN,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,SAAS,EAAE,EAAE,CACX,0HAA0H,EAC1H,+FAA+F,CAChG,aAED,KAAC,EAAE,CAAC,QAAQ,cAAE,GAAG,CAAC,KAAK,GAAe,EACtC,KAAC,EAAE,CAAC,aAAa,IAAC,SAAS,EAAC,kBAAkB,YAC5C,KAAC,KAAK,IAAC,SAAS,EAAC,oBAAoB,GAAG,GACvB,KAVd,GAAG,CAAC,KAAK,CAWN,CACX,CAAC,GACU,GACH,GACH,IACJ,CACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../src/components/skeleton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,+EAA+E;AAC/E,wBAAgB,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,qBAErF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../lib/utils";
|
|
3
|
+
/** Loading placeholder using the shimmer `.skeleton` class from tokens.css. */
|
|
4
|
+
export function Skeleton({ className, ...props }) {
|
|
5
|
+
return _jsx("div", { className: cn("skeleton rounded-md", className), "aria-hidden": true, ...props });
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=skeleton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton.js","sourceRoot":"","sources":["../../src/components/skeleton.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,+EAA+E;AAC/E,MAAM,UAAU,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAwC;IACpF,OAAO,cAAK,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,0BAAkB,KAAK,GAAI,CAAC;AACzF,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import * as RS from "@radix-ui/react-slider";
|
|
3
|
+
export declare const Slider: React.ForwardRefExoticComponent<Omit<RS.SliderProps & React.RefAttributes<HTMLSpanElement>, "ref"> & React.RefAttributes<HTMLSpanElement>>;
|
|
4
|
+
//# sourceMappingURL=slider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slider.d.ts","sourceRoot":"","sources":["../../src/components/slider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAG7C,eAAO,MAAM,MAAM,4IAuBjB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import * as RS from "@radix-ui/react-slider";
|
|
5
|
+
import { cn } from "../lib/utils";
|
|
6
|
+
export const Slider = React.forwardRef(({ className, ...props }, ref) => {
|
|
7
|
+
const count = props.value?.length ?? props.defaultValue?.length ?? 1;
|
|
8
|
+
return (_jsxs(RS.Root, { ref: ref, className: cn("relative flex w-full touch-none select-none items-center", className), ...props, children: [_jsx(RS.Track, { className: "relative h-1.5 w-full grow overflow-hidden rounded-full bg-border", children: _jsx(RS.Range, { className: "absolute h-full rounded-full bg-brand" }) }), Array.from({ length: count }).map((_, i) => (_jsx(RS.Thumb, { className: "block h-4 w-4 rounded-full border-2 border-brand bg-card shadow transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand disabled:opacity-50", "aria-label": "Value" }, i)))] }));
|
|
9
|
+
});
|
|
10
|
+
Slider.displayName = "Slider";
|
|
11
|
+
//# sourceMappingURL=slider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slider.js","sourceRoot":"","sources":["../../src/components/slider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC7C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAGpC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC;IACrE,OAAO,CACL,MAAC,EAAE,CAAC,IAAI,IACN,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,0DAA0D,EAAE,SAAS,CAAC,KAChF,KAAK,aAET,KAAC,EAAE,CAAC,KAAK,IAAC,SAAS,EAAC,mEAAmE,YACrF,KAAC,EAAE,CAAC,KAAK,IAAC,SAAS,EAAC,uCAAuC,GAAG,GACrD,EACV,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAC3C,KAAC,EAAE,CAAC,KAAK,IAEP,SAAS,EAAC,gLAAgL,gBAC/K,OAAO,IAFb,CAAC,CAGN,CACH,CAAC,IACM,CACX,CAAC;AACJ,CAAC,CAAC,CAAC;AACH,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Customer City agent identity sparkle — violet → purple → pink gradient.
|
|
3
|
+
* (blue→teal→pink was the prior Meta-derived identity; this is the CC identity.)
|
|
4
|
+
*/
|
|
5
|
+
export declare function MetaSparkle({ size, className }: {
|
|
6
|
+
size?: number;
|
|
7
|
+
className?: string;
|
|
8
|
+
}): import("react").JSX.Element;
|
|
9
|
+
/** Mini single-color sparkle for inline use next to names. */
|
|
10
|
+
export declare function MetaSparkleMini({ size, color, className }: {
|
|
11
|
+
size?: number;
|
|
12
|
+
color?: string;
|
|
13
|
+
className?: string;
|
|
14
|
+
}): import("react").JSX.Element;
|
|
15
|
+
interface SparkleBadgeProps {
|
|
16
|
+
size?: "sm" | "md" | "lg";
|
|
17
|
+
className?: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function SparkleBadge({ size, className }: SparkleBadgeProps): import("react").JSX.Element;
|
|
20
|
+
interface AgentNameProps {
|
|
21
|
+
name: string;
|
|
22
|
+
size?: "sm" | "md" | "lg";
|
|
23
|
+
className?: string;
|
|
24
|
+
}
|
|
25
|
+
export declare function AgentName({ name, size, className }: AgentNameProps): import("react").JSX.Element;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=sparkle-badge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sparkle-badge.d.ts","sourceRoot":"","sources":["../../src/components/sparkle-badge.tsx"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,IAAS,EAAE,SAAS,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAwB1F;AAED,8DAA8D;AAC9D,wBAAgB,eAAe,CAAC,EAAE,IAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAarH;AAED,UAAU,iBAAiB;IACzB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,EAAE,IAAW,EAAE,SAAS,EAAE,EAAE,iBAAiB,+BAGzE;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,IAAW,EAAE,SAAS,EAAE,EAAE,cAAc,+BAQzE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../lib/utils";
|
|
3
|
+
/**
|
|
4
|
+
* Customer City agent identity sparkle — violet → purple → pink gradient.
|
|
5
|
+
* (blue→teal→pink was the prior Meta-derived identity; this is the CC identity.)
|
|
6
|
+
*/
|
|
7
|
+
export function MetaSparkle({ size = 16, className }) {
|
|
8
|
+
const gradId = `ccAgentGrad-${size}`;
|
|
9
|
+
return (_jsxs("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", className: cn("shrink-0 sparkle-pulse", className), "aria-label": "AI Agent", children: [_jsx("defs", { children: _jsxs("linearGradient", { id: gradId, x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [_jsx("stop", { offset: "0%", stopColor: "#AA00FF" }), _jsx("stop", { offset: "50%", stopColor: "#7637FF" }), _jsx("stop", { offset: "100%", stopColor: "#D500F9" })] }) }), _jsx("path", { d: "M12 2L14.4 9.6L22 12L14.4 14.4L12 22L9.6 14.4L2 12L9.6 9.6Z", fill: `url(#${gradId})` })] }));
|
|
10
|
+
}
|
|
11
|
+
/** Mini single-color sparkle for inline use next to names. */
|
|
12
|
+
export function MetaSparkleMini({ size = 12, color, className }) {
|
|
13
|
+
return (_jsx("svg", { width: size, height: size, viewBox: "0 0 16 16", fill: color || "currentColor", className: cn("shrink-0 text-sparkle", className), "aria-label": "AI Agent", children: _jsx("path", { d: "M8 1L9.6 6.4L15 8L9.6 9.6L8 15L6.4 9.6L1 8L6.4 6.4Z" }) }));
|
|
14
|
+
}
|
|
15
|
+
export function SparkleBadge({ size = "md", className }) {
|
|
16
|
+
const sizeMap = { sm: 10, md: 14, lg: 18 };
|
|
17
|
+
return _jsx(MetaSparkle, { size: sizeMap[size], className: className });
|
|
18
|
+
}
|
|
19
|
+
export function AgentName({ name, size = "md", className }) {
|
|
20
|
+
const sizeMap = { sm: 9, md: 12, lg: 14 };
|
|
21
|
+
return (_jsxs("span", { className: cn("inline-flex items-center gap-1", className), children: [name, _jsx(MetaSparkleMini, { size: sizeMap[size] })] }));
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=sparkle-badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sparkle-badge.js","sourceRoot":"","sources":["../../src/components/sparkle-badge.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,SAAS,EAAyC;IACzF,MAAM,MAAM,GAAG,eAAe,IAAI,EAAE,CAAC;IACrC,OAAO,CACL,eACE,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,SAAS,EAAE,EAAE,CAAC,wBAAwB,EAAE,SAAS,CAAC,gBACvC,UAAU,aAErB,yBACE,0BAAgB,EAAE,EAAE,MAAM,EAAE,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,MAAM,EAAC,EAAE,EAAC,MAAM,aAC7D,eAAM,MAAM,EAAC,IAAI,EAAC,SAAS,EAAC,SAAS,GAAG,EACxC,eAAM,MAAM,EAAC,KAAK,EAAC,SAAS,EAAC,SAAS,GAAG,EACzC,eAAM,MAAM,EAAC,MAAM,EAAC,SAAS,EAAC,SAAS,GAAG,IAC3B,GACZ,EACP,eACE,CAAC,EAAC,6DAA6D,EAC/D,IAAI,EAAE,QAAQ,MAAM,GAAG,GACvB,IACE,CACP,CAAC;AACJ,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,eAAe,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAyD;IACpH,OAAO,CACL,cACE,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,OAAO,EAAC,WAAW,EACnB,IAAI,EAAE,KAAK,IAAI,cAAc,EAC7B,SAAS,EAAE,EAAE,CAAC,uBAAuB,EAAE,SAAS,CAAC,gBACtC,UAAU,YAErB,eAAM,CAAC,EAAC,qDAAqD,GAAG,GAC5D,CACP,CAAC;AACJ,CAAC;AAOD,MAAM,UAAU,YAAY,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,SAAS,EAAqB;IACxE,MAAM,OAAO,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAC3C,OAAO,KAAC,WAAW,IAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS,GAAI,CAAC;AACpE,CAAC;AAQD,MAAM,UAAU,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,SAAS,EAAkB;IACxE,MAAM,OAAO,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAC1C,OAAO,CACL,gBAAM,SAAS,EAAE,EAAE,CAAC,gCAAgC,EAAE,SAAS,CAAC,aAC7D,IAAI,EACL,KAAC,eAAe,IAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAI,IACnC,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
interface SpinnerProps {
|
|
3
|
+
size?: "sm" | "md" | "lg";
|
|
4
|
+
label?: string;
|
|
5
|
+
className?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function Spinner({ size, label, className }: SpinnerProps): React.JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=spinner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/components/spinner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,OAAO,CAAC,EAAE,IAAW,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,YAAY,qBAOtE"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Loader2 } from "lucide-react";
|
|
3
|
+
import { cn } from "../lib/utils";
|
|
4
|
+
const sizeClass = { sm: "h-4 w-4", md: "h-6 w-6", lg: "h-8 w-8" };
|
|
5
|
+
export function Spinner({ size = "md", label, className }) {
|
|
6
|
+
return (_jsxs("span", { role: "status", "aria-label": label ?? "Loading", className: cn("inline-flex items-center gap-2 text-muted", className), children: [_jsx(Loader2, { className: cn("animate-spin text-brand", sizeClass[size]) }), label && _jsx("span", { className: "text-[13px]", children: label })] }));
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/components/spinner.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAQlC,MAAM,SAAS,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;AAElE,MAAM,UAAU,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,SAAS,EAAgB;IACrE,OAAO,CACL,gBAAM,IAAI,EAAC,QAAQ,gBAAa,KAAK,IAAI,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC,2CAA2C,EAAE,SAAS,CAAC,aACvH,KAAC,OAAO,IAAC,SAAS,EAAE,EAAE,CAAC,yBAAyB,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,GAAI,EACrE,KAAK,IAAI,eAAM,SAAS,EAAC,aAAa,YAAE,KAAK,GAAQ,IACjD,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
interface StreamingTextProps {
|
|
3
|
+
text: string;
|
|
4
|
+
/** When true, reveal progressively with a trailing caret. */
|
|
5
|
+
isStreaming?: boolean;
|
|
6
|
+
/** ms per character. */
|
|
7
|
+
speed?: number;
|
|
8
|
+
className?: string;
|
|
9
|
+
}
|
|
10
|
+
/** Presentational token-by-token reveal. No real LLM — drives off `text` + `isStreaming`. */
|
|
11
|
+
export declare function StreamingText({ text, isStreaming, speed, className }: StreamingTextProps): React.JSX.Element;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=streaming-text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming-text.d.ts","sourceRoot":"","sources":["../../src/components/streaming-text.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,6FAA6F;AAC7F,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,WAAmB,EAAE,KAAU,EAAE,SAAS,EAAE,EAAE,kBAAkB,qBA2BrG"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { cn } from "../lib/utils";
|
|
5
|
+
/** Presentational token-by-token reveal. No real LLM — drives off `text` + `isStreaming`. */
|
|
6
|
+
export function StreamingText({ text, isStreaming = false, speed = 18, className }) {
|
|
7
|
+
const [shown, setShown] = React.useState(isStreaming ? 0 : text.length);
|
|
8
|
+
React.useEffect(() => {
|
|
9
|
+
if (!isStreaming) {
|
|
10
|
+
setShown(text.length);
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
setShown(0);
|
|
14
|
+
let i = 0;
|
|
15
|
+
const id = setInterval(() => {
|
|
16
|
+
i += 1;
|
|
17
|
+
setShown(i);
|
|
18
|
+
if (i >= text.length)
|
|
19
|
+
clearInterval(id);
|
|
20
|
+
}, speed);
|
|
21
|
+
return () => clearInterval(id);
|
|
22
|
+
}, [text, isStreaming, speed]);
|
|
23
|
+
const done = shown >= text.length;
|
|
24
|
+
return (_jsxs("span", { className: cn("text-[14px] leading-relaxed text-foreground", className), children: [text.slice(0, shown), isStreaming && !done && (_jsx("span", { className: "ml-0.5 inline-block h-[1em] w-[2px] -translate-y-[1px] animate-pulse bg-sparkle align-middle", "aria-hidden": true }))] }));
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=streaming-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming-text.js","sourceRoot":"","sources":["../../src/components/streaming-text.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAWlC,6FAA6F;AAC7F,MAAM,UAAU,aAAa,CAAC,EAAE,IAAI,EAAE,WAAW,GAAG,KAAK,EAAE,KAAK,GAAG,EAAE,EAAE,SAAS,EAAsB;IACpG,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAExE,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,CAAC,CAAC,CAAC;QACZ,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;YAC1B,CAAC,IAAI,CAAC,CAAC;YACP,QAAQ,CAAC,CAAC,CAAC,CAAC;YACZ,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM;gBAAE,aAAa,CAAC,EAAE,CAAC,CAAC;QAC1C,CAAC,EAAE,KAAK,CAAC,CAAC;QACV,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;IAE/B,MAAM,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC;IAClC,OAAO,CACL,gBAAM,SAAS,EAAE,EAAE,CAAC,6CAA6C,EAAE,SAAS,CAAC,aAC1E,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EACpB,WAAW,IAAI,CAAC,IAAI,IAAI,CACvB,eAAM,SAAS,EAAC,8FAA8F,wBAAe,CAC9H,IACI,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import * as RS from "@radix-ui/react-switch";
|
|
3
|
+
interface SwitchProps extends React.ComponentPropsWithoutRef<typeof RS.Root> {
|
|
4
|
+
label?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare const Switch: React.ForwardRefExoticComponent<SwitchProps & React.RefAttributes<HTMLButtonElement>>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=switch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switch.d.ts","sourceRoot":"","sources":["../../src/components/switch.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAG7C,UAAU,WAAY,SAAQ,KAAK,CAAC,wBAAwB,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,eAAO,MAAM,MAAM,uFA2BlB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import * as RS from "@radix-ui/react-switch";
|
|
5
|
+
import { cn } from "../lib/utils";
|
|
6
|
+
let swId = 0;
|
|
7
|
+
export const Switch = React.forwardRef(({ className, label, id, ...props }, ref) => {
|
|
8
|
+
const [autoId] = React.useState(() => id ?? `switch-${++swId}`);
|
|
9
|
+
const sw = (_jsx(RS.Root, { ref: ref, id: autoId, className: cn("relative h-[22px] w-[40px] shrink-0 rounded-full border border-transparent bg-border transition-colors", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand", "data-[state=checked]:bg-brand", "disabled:cursor-not-allowed disabled:opacity-50", className), ...props, children: _jsx(RS.Thumb, { className: "block h-[18px] w-[18px] translate-x-0.5 rounded-full bg-white shadow transition-transform data-[state=checked]:translate-x-[19px]" }) }));
|
|
10
|
+
if (!label)
|
|
11
|
+
return sw;
|
|
12
|
+
return (_jsxs("label", { htmlFor: autoId, className: "inline-flex cursor-pointer items-center gap-2.5 text-sm text-foreground", children: [sw, label] }));
|
|
13
|
+
});
|
|
14
|
+
Switch.displayName = "Switch";
|
|
15
|
+
//# sourceMappingURL=switch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switch.js","sourceRoot":"","sources":["../../src/components/switch.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC7C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAMlC,IAAI,IAAI,GAAG,CAAC,CAAC;AACb,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CACpC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IAC1C,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,EAAE,GAAG,CACT,KAAC,EAAE,CAAC,IAAI,IACN,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,EAAE,CACX,wGAAwG,EACxG,0EAA0E,EAC1E,+BAA+B,EAC/B,iDAAiD,EACjD,SAAS,CACV,KACG,KAAK,YAET,KAAC,EAAE,CAAC,KAAK,IAAC,SAAS,EAAC,mIAAmI,GAAG,GAClJ,CACX,CAAC;IACF,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,CACL,iBAAO,OAAO,EAAE,MAAM,EAAE,SAAS,EAAC,yEAAyE,aACxG,EAAE,EACF,KAAK,IACA,CACT,CAAC;AACJ,CAAC,CACF,CAAC;AACF,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface TabItem {
|
|
2
|
+
value: string;
|
|
3
|
+
label: string;
|
|
4
|
+
count?: number;
|
|
5
|
+
badge?: string;
|
|
6
|
+
}
|
|
7
|
+
interface TabsProps {
|
|
8
|
+
tabs: TabItem[];
|
|
9
|
+
value: string;
|
|
10
|
+
onChange: (value: string) => void;
|
|
11
|
+
size?: "sm" | "md";
|
|
12
|
+
className?: string;
|
|
13
|
+
id?: string;
|
|
14
|
+
}
|
|
15
|
+
/** Accessible tab strip: role=tab, roving tabindex, arrow/Home/End keys. */
|
|
16
|
+
export declare function Tabs({ tabs, value, onChange, size, className, id }: TabsProps): import("react").JSX.Element;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=tabs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../src/components/tabs.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,SAAS;IACjB,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,4EAA4E;AAC5E,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAW,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,SAAS,+BAwDpF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useRef, useCallback } from "react";
|
|
4
|
+
import { cn } from "../lib/utils";
|
|
5
|
+
/** Accessible tab strip: role=tab, roving tabindex, arrow/Home/End keys. */
|
|
6
|
+
export function Tabs({ tabs, value, onChange, size = "md", className, id }) {
|
|
7
|
+
const listRef = useRef(null);
|
|
8
|
+
const handleKeyDown = useCallback((e, currentIndex) => {
|
|
9
|
+
let next = null;
|
|
10
|
+
if (e.key === "ArrowRight")
|
|
11
|
+
next = (currentIndex + 1) % tabs.length;
|
|
12
|
+
else if (e.key === "ArrowLeft")
|
|
13
|
+
next = (currentIndex - 1 + tabs.length) % tabs.length;
|
|
14
|
+
else if (e.key === "Home")
|
|
15
|
+
next = 0;
|
|
16
|
+
else if (e.key === "End")
|
|
17
|
+
next = tabs.length - 1;
|
|
18
|
+
if (next !== null) {
|
|
19
|
+
e.preventDefault();
|
|
20
|
+
onChange(tabs[next].value);
|
|
21
|
+
listRef.current?.querySelectorAll('[role="tab"]')[next]?.focus();
|
|
22
|
+
}
|
|
23
|
+
}, [tabs, onChange]);
|
|
24
|
+
return (_jsx("div", { ref: listRef, role: "tablist", "aria-label": "Tabs", className: cn("flex border-b border-border", className), children: tabs.map((tab, index) => {
|
|
25
|
+
const isActive = tab.value === value;
|
|
26
|
+
return (_jsxs("button", { id: id ? `${id}-tab-${tab.value}` : undefined, role: "tab", "aria-selected": isActive, tabIndex: isActive ? 0 : -1, onClick: () => onChange(tab.value), onKeyDown: (e) => handleKeyDown(e, index), className: cn("relative px-4 py-2.5 text-[13px] font-medium transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-brand focus-visible:ring-inset", isActive ? "text-brand" : "text-muted hover:text-foreground hover:bg-accent/50"), children: [_jsxs("span", { className: "flex items-center gap-1.5", children: [tab.label, tab.count !== undefined && (_jsxs("span", { className: cn("text-[12px] font-normal", isActive ? "text-brand/70" : "text-muted-foreground"), children: ["(", tab.count, ")"] })), tab.badge && (_jsx("span", { className: "ml-1 inline-flex h-[18px] min-w-[18px] items-center justify-center rounded-[10px] bg-red px-[5px] text-[10px] font-bold text-white", children: tab.badge }))] }), isActive && _jsx("span", { className: "absolute inset-x-0 bottom-0 h-0.5 rounded-t-full bg-brand" })] }, tab.value));
|
|
27
|
+
}) }));
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../src/components/tabs.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAkBlC,4EAA4E;AAC5E,MAAM,UAAU,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,GAAG,IAAI,EAAE,SAAS,EAAE,EAAE,EAAa;IACnF,MAAM,OAAO,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAE7C,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,CAAsB,EAAE,YAAoB,EAAE,EAAE;QAC/C,IAAI,IAAI,GAAkB,IAAI,CAAC;QAC/B,IAAI,CAAC,CAAC,GAAG,KAAK,YAAY;YAAE,IAAI,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;aAC/D,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW;YAAE,IAAI,GAAG,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;aACjF,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM;YAAE,IAAI,GAAG,CAAC,CAAC;aAC/B,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK;YAAE,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACjD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;YAC3B,OAAO,CAAC,OAAO,EAAE,gBAAgB,CAAoB,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;QACtF,CAAC;IACH,CAAC,EACD,CAAC,IAAI,EAAE,QAAQ,CAAC,CACjB,CAAC;IAEF,OAAO,CACL,cAAK,GAAG,EAAE,OAAO,EAAE,IAAI,EAAC,SAAS,gBAAY,MAAM,EAAC,SAAS,EAAE,EAAE,CAAC,6BAA6B,EAAE,SAAS,CAAC,YACxG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACvB,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC;YACrC,OAAO,CACL,kBAEE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,EAC7C,IAAI,EAAC,KAAK,mBACK,QAAQ,EACvB,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAClC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,EACzC,SAAS,EAAE,EAAE,CACX,uKAAuK,EACvK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,qDAAqD,CAChF,aAED,gBAAM,SAAS,EAAC,2BAA2B,aACxC,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,CAC1B,gBAAM,SAAS,EAAE,EAAE,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,uBAAuB,CAAC,kBAChG,GAAG,CAAC,KAAK,SACN,CACR,EACA,GAAG,CAAC,KAAK,IAAI,CACZ,eAAM,SAAS,EAAC,oIAAoI,YACjJ,GAAG,CAAC,KAAK,GACL,CACR,IACI,EACN,QAAQ,IAAI,eAAM,SAAS,EAAC,2DAA2D,GAAG,KAzBtF,GAAG,CAAC,KAAK,CA0BP,CACV,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {
|
|
3
|
+
error?: boolean;
|
|
4
|
+
/** Show a "current/max" character counter (requires maxLength). */
|
|
5
|
+
showCount?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const Textarea: React.ForwardRefExoticComponent<TextareaProps & React.RefAttributes<HTMLTextAreaElement>>;
|
|
8
|
+
//# sourceMappingURL=textarea.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textarea.d.ts","sourceRoot":"","sources":["../../src/components/textarea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,aAAc,SAAQ,KAAK,CAAC,sBAAsB,CAAC,mBAAmB,CAAC;IACtF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mEAAmE;IACnE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,QAAQ,2FAmCpB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { cn } from "../lib/utils";
|
|
4
|
+
export const Textarea = React.forwardRef(({ className, error, showCount, maxLength, value, defaultValue, ...props }, ref) => {
|
|
5
|
+
const [count, setCount] = React.useState(String(value ?? defaultValue ?? "").length);
|
|
6
|
+
return (_jsxs("div", { children: [_jsx("textarea", { ref: ref, maxLength: maxLength, value: value, defaultValue: defaultValue, "aria-invalid": error || undefined, onChange: (e) => {
|
|
7
|
+
setCount(e.target.value.length);
|
|
8
|
+
props.onChange?.(e);
|
|
9
|
+
}, className: cn("min-h-[80px] w-full rounded-md border bg-card px-3 py-2 text-sm text-foreground transition-colors", "placeholder:text-muted-foreground", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-brand", "disabled:cursor-not-allowed disabled:opacity-50", error ? "border-red" : "border-border", className), ...props }), showCount && maxLength && (_jsxs("div", { className: "mt-1 text-right font-mono text-[11px] text-muted-foreground tabular-nums", children: [count, "/", maxLength] }))] }));
|
|
10
|
+
});
|
|
11
|
+
Textarea.displayName = "Textarea";
|
|
12
|
+
//# sourceMappingURL=textarea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textarea.js","sourceRoot":"","sources":["../../src/components/textarea.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAQlC,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CACtC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IACjF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CACtC,MAAM,CAAC,KAAK,IAAI,YAAY,IAAI,EAAE,CAAC,CAAC,MAAM,CAC3C,CAAC;IACF,OAAO,CACL,0BACE,mBACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,YAAY,kBACZ,KAAK,IAAI,SAAS,EAChC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;oBACd,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAChC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtB,CAAC,EACD,SAAS,EAAE,EAAE,CACX,mGAAmG,EACnG,mCAAmC,EACnC,0EAA0E,EAC1E,iDAAiD,EACjD,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,EACtC,SAAS,CACV,KACG,KAAK,GACT,EACD,SAAS,IAAI,SAAS,IAAI,CACzB,eAAK,SAAS,EAAC,0EAA0E,aACtF,KAAK,OAAG,SAAS,IACd,CACP,IACG,CACP,CAAC;AACJ,CAAC,CACF,CAAC;AACF,QAAQ,CAAC,WAAW,GAAG,UAAU,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { toast } from "sonner";
|
|
2
|
+
/**
|
|
3
|
+
* Token-themed Sonner toaster. Mount one <Toaster /> near the app root,
|
|
4
|
+
* then call toast.success/error/info/message from anywhere.
|
|
5
|
+
*/
|
|
6
|
+
export declare function Toaster(): import("react").JSX.Element;
|
|
7
|
+
export { toast };
|
|
8
|
+
//# sourceMappingURL=toast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toast.d.ts","sourceRoot":"","sources":["../../src/components/toast.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA4B,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,OAAO,gCAgBtB;AAED,OAAO,EAAE,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { Toaster as SonnerToaster, toast } from "sonner";
|
|
4
|
+
/**
|
|
5
|
+
* Token-themed Sonner toaster. Mount one <Toaster /> near the app root,
|
|
6
|
+
* then call toast.success/error/info/message from anywhere.
|
|
7
|
+
*/
|
|
8
|
+
export function Toaster() {
|
|
9
|
+
return (_jsx(SonnerToaster, { position: "bottom-right", toastOptions: {
|
|
10
|
+
classNames: {
|
|
11
|
+
toast: "!bg-card !border !border-border !text-foreground !rounded-lg !card-shadow-lg",
|
|
12
|
+
title: "!text-foreground !text-[13px] !font-semibold",
|
|
13
|
+
description: "!text-muted !text-[12px]",
|
|
14
|
+
actionButton: "!bg-brand !text-white",
|
|
15
|
+
cancelButton: "!bg-accent !text-foreground",
|
|
16
|
+
},
|
|
17
|
+
} }));
|
|
18
|
+
}
|
|
19
|
+
export { toast };
|
|
20
|
+
//# sourceMappingURL=toast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toast.js","sourceRoot":"","sources":["../../src/components/toast.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEzD;;;GAGG;AACH,MAAM,UAAU,OAAO;IACrB,OAAO,CACL,KAAC,aAAa,IACZ,QAAQ,EAAC,cAAc,EACvB,YAAY,EAAE;YACZ,UAAU,EAAE;gBACV,KAAK,EACH,8EAA8E;gBAChF,KAAK,EAAE,8CAA8C;gBACrD,WAAW,EAAE,0BAA0B;gBACvC,YAAY,EAAE,uBAAuB;gBACrC,YAAY,EAAE,6BAA6B;aAC5C;SACF,GACD,CACH,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import * as RT from "@radix-ui/react-tooltip";
|
|
3
|
+
export declare const TooltipProvider: React.FC<RT.TooltipProviderProps>;
|
|
4
|
+
interface TooltipProps {
|
|
5
|
+
content: React.ReactNode;
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
side?: "top" | "right" | "bottom" | "left";
|
|
8
|
+
className?: string;
|
|
9
|
+
}
|
|
10
|
+
/** Simple tooltip wrapper. Wrap with a single <TooltipProvider> near the root. */
|
|
11
|
+
export declare function Tooltip({ content, children, side, className }: TooltipProps): React.JSX.Element;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=tooltip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../src/components/tooltip.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAG9C,eAAO,MAAM,eAAe,mCAAc,CAAC;AAE3C,UAAU,YAAY;IACpB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,kFAAkF;AAClF,wBAAgB,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAY,EAAE,SAAS,EAAE,EAAE,YAAY,qBAqBnF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as RT from "@radix-ui/react-tooltip";
|
|
4
|
+
import { cn } from "../lib/utils";
|
|
5
|
+
export const TooltipProvider = RT.Provider;
|
|
6
|
+
/** Simple tooltip wrapper. Wrap with a single <TooltipProvider> near the root. */
|
|
7
|
+
export function Tooltip({ content, children, side = "top", className }) {
|
|
8
|
+
return (_jsx(RT.Provider, { delayDuration: 200, children: _jsxs(RT.Root, { children: [_jsx(RT.Trigger, { asChild: true, children: children }), _jsx(RT.Portal, { children: _jsxs(RT.Content, { side: side, sideOffset: 6, className: cn("z-[1600] rounded-md bg-navy px-2.5 py-1.5 text-[12px] font-medium text-white card-shadow-lg", className), children: [content, _jsx(RT.Arrow, { className: "fill-navy" })] }) })] }) }));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=tooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../src/components/tooltip.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC,QAAQ,CAAC;AAS3C,kFAAkF;AAClF,MAAM,UAAU,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,GAAG,KAAK,EAAE,SAAS,EAAgB;IAClF,OAAO,CACL,KAAC,EAAE,CAAC,QAAQ,IAAC,aAAa,EAAE,GAAG,YAC7B,MAAC,EAAE,CAAC,IAAI,eACN,KAAC,EAAE,CAAC,OAAO,IAAC,OAAO,kBAAE,QAAQ,GAAc,EAC3C,KAAC,EAAE,CAAC,MAAM,cACR,MAAC,EAAE,CAAC,OAAO,IACT,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,CAAC,EACb,SAAS,EAAE,EAAE,CACX,6FAA6F,EAC7F,SAAS,CACV,aAEA,OAAO,EACR,KAAC,EAAE,CAAC,KAAK,IAAC,SAAS,EAAC,WAAW,GAAG,IACvB,GACH,IACJ,GACE,CACf,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { VerificationLevel } from "../lib/types";
|
|
2
|
+
interface VerifiedBadgeProps {
|
|
3
|
+
level: VerificationLevel;
|
|
4
|
+
size?: "sm" | "md";
|
|
5
|
+
className?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function VerifiedBadge({ level, size, className }: VerifiedBadgeProps): import("react").JSX.Element | null;
|
|
8
|
+
interface OfficeStatusBadgeProps {
|
|
9
|
+
status: "unclaimed" | "claimed" | "premium";
|
|
10
|
+
className?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function OfficeStatusBadge({ status, className }: OfficeStatusBadgeProps): import("react").JSX.Element | null;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=verified-badge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verified-badge.d.ts","sourceRoot":"","sources":["../../src/components/verified-badge.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,UAAU,kBAAkB;IAC1B,KAAK,EAAE,iBAAiB,CAAC;IACzB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,IAAW,EAAE,SAAS,EAAE,EAAE,kBAAkB,sCAkClF;AAED,UAAU,sBAAsB;IAC9B,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,sBAAsB,sCAc9E"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ShieldCheck, Crown } from "lucide-react";
|
|
3
|
+
import { cn } from "../lib/utils";
|
|
4
|
+
export function VerifiedBadge({ level, size = "md", className }) {
|
|
5
|
+
if (level === "none")
|
|
6
|
+
return null;
|
|
7
|
+
const sizeClass = size === "sm" ? "text-[10px] px-1.5 py-0.5 gap-1" : "text-xs px-2 py-0.5 gap-1.5";
|
|
8
|
+
const iconSize = size === "sm" ? "h-3 w-3" : "h-3.5 w-3.5";
|
|
9
|
+
if (level === "premium") {
|
|
10
|
+
return (_jsxs("span", { className: cn("inline-flex items-center rounded-full bg-sparkle-bg text-sparkle font-semibold", sizeClass, className), children: [_jsx(Crown, { className: iconSize }), "Premium"] }));
|
|
11
|
+
}
|
|
12
|
+
return (_jsxs("span", { className: cn("inline-flex items-center rounded-full bg-sparkle-bg text-sparkle font-semibold", sizeClass, className), children: [_jsx(ShieldCheck, { className: iconSize }), "Verified"] }));
|
|
13
|
+
}
|
|
14
|
+
export function OfficeStatusBadge({ status, className }) {
|
|
15
|
+
if (status === "unclaimed") {
|
|
16
|
+
return (_jsx("span", { className: cn("inline-flex items-center rounded-full bg-accent px-2 py-0.5 text-[10px] font-medium text-muted-foreground", className), children: "Unclaimed" }));
|
|
17
|
+
}
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=verified-badge.js.map
|