@tleblancureta/proto 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.
- package/core-web/src/ProtoApp.tsx +163 -0
- package/core-web/src/components/Shell.tsx +276 -0
- package/core-web/src/components/shell/EmptyState.tsx +33 -0
- package/core-web/src/components/shell/FocusView.tsx +55 -0
- package/core-web/src/components/shell/Toolbar.tsx +233 -0
- package/core-web/src/components/shell/persistence.ts +20 -0
- package/core-web/src/components/shell/types.ts +14 -0
- package/core-web/src/components/ui/avatar.tsx +18 -0
- package/core-web/src/components/ui/badge.tsx +28 -0
- package/core-web/src/components/ui/button.tsx +40 -0
- package/core-web/src/components/ui/card.tsx +32 -0
- package/core-web/src/components/ui/inline-edit.tsx +120 -0
- package/core-web/src/components/ui/input.tsx +18 -0
- package/core-web/src/components/ui/scroll-area.tsx +12 -0
- package/core-web/src/components/ui/separator.tsx +23 -0
- package/core-web/src/components/ui/shell-dialog.tsx +79 -0
- package/core-web/src/components/ui/skeleton.tsx +9 -0
- package/core-web/src/components/ui/textarea.tsx +17 -0
- package/core-web/src/components/widgets/agent/Generative.tsx +74 -0
- package/core-web/src/components/widgets/agent/Primitives.tsx +225 -0
- package/core-web/src/components/widgets/agent/actions.ts +52 -0
- package/core-web/src/hooks/useAuth.ts +80 -0
- package/core-web/src/hooks/useData.ts +44 -0
- package/core-web/src/hooks/useMountEffect.ts +10 -0
- package/core-web/src/hooks/useTheme.ts +37 -0
- package/core-web/src/index.ts +52 -0
- package/core-web/src/lib/api.ts +231 -0
- package/core-web/src/lib/config.ts +14 -0
- package/core-web/src/lib/define-widget.ts +71 -0
- package/core-web/src/lib/drag.ts +45 -0
- package/core-web/src/lib/supabase.ts +6 -0
- package/core-web/src/lib/utils.ts +6 -0
- package/core-web/src/lib/widgetCache.ts +29 -0
- package/core-web/src/vite-env.d.ts +1 -0
- package/dist/core-mcp/src/app.d.ts +40 -0
- package/dist/core-mcp/src/app.d.ts.map +1 -0
- package/dist/core-mcp/src/app.js +141 -0
- package/dist/core-mcp/src/app.js.map +1 -0
- package/dist/core-mcp/src/define-tool.d.ts +70 -0
- package/dist/core-mcp/src/define-tool.d.ts.map +1 -0
- package/dist/core-mcp/src/define-tool.js +38 -0
- package/dist/core-mcp/src/define-tool.js.map +1 -0
- package/dist/core-mcp/src/entity-tools.d.ts +27 -0
- package/dist/core-mcp/src/entity-tools.d.ts.map +1 -0
- package/dist/core-mcp/src/entity-tools.js +99 -0
- package/dist/core-mcp/src/entity-tools.js.map +1 -0
- package/dist/core-mcp/src/index.d.ts +36 -0
- package/dist/core-mcp/src/index.d.ts.map +1 -0
- package/dist/core-mcp/src/index.js +116 -0
- package/dist/core-mcp/src/index.js.map +1 -0
- package/dist/core-mcp/src/supabase.d.ts +7 -0
- package/dist/core-mcp/src/supabase.d.ts.map +1 -0
- package/dist/core-mcp/src/supabase.js +18 -0
- package/dist/core-mcp/src/supabase.js.map +1 -0
- package/dist/core-mcp/src/tools/_helpers.d.ts +44 -0
- package/dist/core-mcp/src/tools/_helpers.d.ts.map +1 -0
- package/dist/core-mcp/src/tools/_helpers.js +23 -0
- package/dist/core-mcp/src/tools/_helpers.js.map +1 -0
- package/dist/core-mcp/src/tools/ui.d.ts +9 -0
- package/dist/core-mcp/src/tools/ui.d.ts.map +1 -0
- package/dist/core-mcp/src/tools/ui.js +100 -0
- package/dist/core-mcp/src/tools/ui.js.map +1 -0
- package/dist/core-mcp/src/workflow-tools.d.ts +41 -0
- package/dist/core-mcp/src/workflow-tools.d.ts.map +1 -0
- package/dist/core-mcp/src/workflow-tools.js +382 -0
- package/dist/core-mcp/src/workflow-tools.js.map +1 -0
- package/dist/core-shared/src/define-entity.d.ts +73 -0
- package/dist/core-shared/src/define-entity.d.ts.map +1 -0
- package/dist/core-shared/src/define-entity.js +47 -0
- package/dist/core-shared/src/define-entity.js.map +1 -0
- package/dist/core-shared/src/define-workflow.d.ts +111 -0
- package/dist/core-shared/src/define-workflow.d.ts.map +1 -0
- package/dist/core-shared/src/define-workflow.js +92 -0
- package/dist/core-shared/src/define-workflow.js.map +1 -0
- package/dist/core-shared/src/index.d.ts +5 -0
- package/dist/core-shared/src/index.d.ts.map +1 -0
- package/dist/core-shared/src/index.js +7 -0
- package/dist/core-shared/src/index.js.map +1 -0
- package/dist/core-shared/src/scheduling.d.ts +69 -0
- package/dist/core-shared/src/scheduling.d.ts.map +1 -0
- package/dist/core-shared/src/scheduling.js +39 -0
- package/dist/core-shared/src/scheduling.js.map +1 -0
- package/dist/core-shared/src/schemas.d.ts +51 -0
- package/dist/core-shared/src/schemas.d.ts.map +1 -0
- package/dist/core-shared/src/schemas.js +18 -0
- package/dist/core-shared/src/schemas.js.map +1 -0
- package/dist/core-web/src/ProtoApp.d.ts +19 -0
- package/dist/core-web/src/ProtoApp.d.ts.map +1 -0
- package/dist/core-web/src/ProtoApp.js +92 -0
- package/dist/core-web/src/ProtoApp.js.map +1 -0
- package/dist/core-web/src/components/Shell.d.ts +46 -0
- package/dist/core-web/src/components/Shell.d.ts.map +1 -0
- package/dist/core-web/src/components/Shell.js +104 -0
- package/dist/core-web/src/components/Shell.js.map +1 -0
- package/dist/core-web/src/components/shell/EmptyState.d.ts +13 -0
- package/dist/core-web/src/components/shell/EmptyState.d.ts.map +1 -0
- package/dist/core-web/src/components/shell/EmptyState.js +7 -0
- package/dist/core-web/src/components/shell/EmptyState.js.map +1 -0
- package/dist/core-web/src/components/shell/FocusView.d.ts +16 -0
- package/dist/core-web/src/components/shell/FocusView.d.ts.map +1 -0
- package/dist/core-web/src/components/shell/FocusView.js +12 -0
- package/dist/core-web/src/components/shell/FocusView.js.map +1 -0
- package/dist/core-web/src/components/shell/Toolbar.d.ts +35 -0
- package/dist/core-web/src/components/shell/Toolbar.d.ts.map +1 -0
- package/dist/core-web/src/components/shell/Toolbar.js +42 -0
- package/dist/core-web/src/components/shell/Toolbar.js.map +1 -0
- package/dist/core-web/src/components/shell/persistence.d.ts +8 -0
- package/dist/core-web/src/components/shell/persistence.d.ts.map +1 -0
- package/dist/core-web/src/components/shell/persistence.js +20 -0
- package/dist/core-web/src/components/shell/persistence.js.map +1 -0
- package/dist/core-web/src/components/shell/types.d.ts +13 -0
- package/dist/core-web/src/components/shell/types.d.ts.map +1 -0
- package/dist/core-web/src/components/shell/types.js +2 -0
- package/dist/core-web/src/components/shell/types.js.map +1 -0
- package/dist/core-web/src/components/ui/avatar.d.ts +5 -0
- package/dist/core-web/src/components/ui/avatar.d.ts.map +1 -0
- package/dist/core-web/src/components/ui/avatar.js +9 -0
- package/dist/core-web/src/components/ui/avatar.js.map +1 -0
- package/dist/core-web/src/components/ui/badge.d.ts +13 -0
- package/dist/core-web/src/components/ui/badge.d.ts.map +1 -0
- package/dist/core-web/src/components/ui/badge.js +13 -0
- package/dist/core-web/src/components/ui/badge.js.map +1 -0
- package/dist/core-web/src/components/ui/button.d.ts +22 -0
- package/dist/core-web/src/components/ui/button.d.ts.map +1 -0
- package/dist/core-web/src/components/ui/button.js +21 -0
- package/dist/core-web/src/components/ui/button.js.map +1 -0
- package/dist/core-web/src/components/ui/card.d.ts +7 -0
- package/dist/core-web/src/components/ui/card.d.ts.map +1 -0
- package/dist/core-web/src/components/ui/card.js +13 -0
- package/dist/core-web/src/components/ui/card.js.map +1 -0
- package/dist/core-web/src/components/ui/inline-edit.d.ts +20 -0
- package/dist/core-web/src/components/ui/inline-edit.d.ts.map +1 -0
- package/dist/core-web/src/components/ui/inline-edit.js +63 -0
- package/dist/core-web/src/components/ui/inline-edit.js.map +1 -0
- package/dist/core-web/src/components/ui/input.d.ts +4 -0
- package/dist/core-web/src/components/ui/input.d.ts.map +1 -0
- package/dist/core-web/src/components/ui/input.js +7 -0
- package/dist/core-web/src/components/ui/input.js.map +1 -0
- package/dist/core-web/src/components/ui/scroll-area.d.ts +4 -0
- package/dist/core-web/src/components/ui/scroll-area.d.ts.map +1 -0
- package/dist/core-web/src/components/ui/scroll-area.js +7 -0
- package/dist/core-web/src/components/ui/scroll-area.js.map +1 -0
- package/dist/core-web/src/components/ui/separator.d.ts +7 -0
- package/dist/core-web/src/components/ui/separator.d.ts.map +1 -0
- package/dist/core-web/src/components/ui/separator.js +7 -0
- package/dist/core-web/src/components/ui/separator.js.map +1 -0
- package/dist/core-web/src/components/ui/shell-dialog.d.ts +16 -0
- package/dist/core-web/src/components/ui/shell-dialog.d.ts.map +1 -0
- package/dist/core-web/src/components/ui/shell-dialog.js +36 -0
- package/dist/core-web/src/components/ui/shell-dialog.js.map +1 -0
- package/dist/core-web/src/components/ui/skeleton.d.ts +3 -0
- package/dist/core-web/src/components/ui/skeleton.d.ts.map +1 -0
- package/dist/core-web/src/components/ui/skeleton.js +7 -0
- package/dist/core-web/src/components/ui/skeleton.js.map +1 -0
- package/dist/core-web/src/components/ui/textarea.d.ts +4 -0
- package/dist/core-web/src/components/ui/textarea.d.ts.map +1 -0
- package/dist/core-web/src/components/ui/textarea.js +7 -0
- package/dist/core-web/src/components/ui/textarea.js.map +1 -0
- package/dist/core-web/src/components/widgets/agent/Generative.d.ts +13 -0
- package/dist/core-web/src/components/widgets/agent/Generative.d.ts.map +1 -0
- package/dist/core-web/src/components/widgets/agent/Generative.js +42 -0
- package/dist/core-web/src/components/widgets/agent/Generative.js.map +1 -0
- package/dist/core-web/src/components/widgets/agent/Primitives.d.ts +79 -0
- package/dist/core-web/src/components/widgets/agent/Primitives.d.ts.map +1 -0
- package/dist/core-web/src/components/widgets/agent/Primitives.js +116 -0
- package/dist/core-web/src/components/widgets/agent/Primitives.js.map +1 -0
- package/dist/core-web/src/components/widgets/agent/actions.d.ts +3 -0
- package/dist/core-web/src/components/widgets/agent/actions.d.ts.map +1 -0
- package/dist/core-web/src/components/widgets/agent/actions.js +33 -0
- package/dist/core-web/src/components/widgets/agent/actions.js.map +1 -0
- package/dist/core-web/src/hooks/useAuth.d.ts +25 -0
- package/dist/core-web/src/hooks/useAuth.d.ts.map +1 -0
- package/dist/core-web/src/hooks/useAuth.js +53 -0
- package/dist/core-web/src/hooks/useAuth.js.map +1 -0
- package/dist/core-web/src/hooks/useData.d.ts +10 -0
- package/dist/core-web/src/hooks/useData.d.ts.map +1 -0
- package/dist/core-web/src/hooks/useData.js +37 -0
- package/dist/core-web/src/hooks/useData.js.map +1 -0
- package/dist/core-web/src/hooks/useMountEffect.d.ts +6 -0
- package/dist/core-web/src/hooks/useMountEffect.d.ts.map +1 -0
- package/dist/core-web/src/hooks/useMountEffect.js +10 -0
- package/dist/core-web/src/hooks/useMountEffect.js.map +1 -0
- package/dist/core-web/src/hooks/useTheme.d.ts +6 -0
- package/dist/core-web/src/hooks/useTheme.d.ts.map +1 -0
- package/dist/core-web/src/hooks/useTheme.js +31 -0
- package/dist/core-web/src/hooks/useTheme.js.map +1 -0
- package/dist/core-web/src/index.d.ts +33 -0
- package/dist/core-web/src/index.d.ts.map +1 -0
- package/dist/core-web/src/index.js +38 -0
- package/dist/core-web/src/index.js.map +1 -0
- package/dist/core-web/src/lib/api.d.ts +60 -0
- package/dist/core-web/src/lib/api.d.ts.map +1 -0
- package/dist/core-web/src/lib/api.js +204 -0
- package/dist/core-web/src/lib/api.js.map +1 -0
- package/dist/core-web/src/lib/config.d.ts +10 -0
- package/dist/core-web/src/lib/config.d.ts.map +1 -0
- package/dist/core-web/src/lib/config.js +10 -0
- package/dist/core-web/src/lib/config.js.map +1 -0
- package/dist/core-web/src/lib/define-widget.d.ts +52 -0
- package/dist/core-web/src/lib/define-widget.d.ts.map +1 -0
- package/dist/core-web/src/lib/define-widget.js +14 -0
- package/dist/core-web/src/lib/define-widget.js.map +1 -0
- package/dist/core-web/src/lib/drag.d.ts +20 -0
- package/dist/core-web/src/lib/drag.d.ts.map +1 -0
- package/dist/core-web/src/lib/drag.js +33 -0
- package/dist/core-web/src/lib/drag.js.map +1 -0
- package/dist/core-web/src/lib/supabase.d.ts +2 -0
- package/dist/core-web/src/lib/supabase.d.ts.map +1 -0
- package/dist/core-web/src/lib/supabase.js +5 -0
- package/dist/core-web/src/lib/supabase.js.map +1 -0
- package/dist/core-web/src/lib/utils.d.ts +3 -0
- package/dist/core-web/src/lib/utils.d.ts.map +1 -0
- package/dist/core-web/src/lib/utils.js +6 -0
- package/dist/core-web/src/lib/utils.js.map +1 -0
- package/dist/core-web/src/lib/widgetCache.d.ts +18 -0
- package/dist/core-web/src/lib/widgetCache.d.ts.map +1 -0
- package/dist/core-web/src/lib/widgetCache.js +28 -0
- package/dist/core-web/src/lib/widgetCache.js.map +1 -0
- package/dist/mcp.d.ts +2 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +2 -0
- package/dist/mcp.js.map +1 -0
- package/dist/shared.d.ts +2 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +2 -0
- package/dist/shared.js.map +1 -0
- package/dist/web.d.ts +2 -0
- package/dist/web.d.ts.map +1 -0
- package/dist/web.js +2 -0
- package/dist/web.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
interface ShellDialogProps {
|
|
3
|
+
open: boolean;
|
|
4
|
+
onClose: () => void;
|
|
5
|
+
title?: ReactNode;
|
|
6
|
+
description?: ReactNode;
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
className?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Dialog scoped to the shell (#shell-root) instead of the full viewport,
|
|
12
|
+
* so the chat panel stays visible. Backdrop-blur + fade-in, shadcn vibes.
|
|
13
|
+
*/
|
|
14
|
+
export declare function ShellDialog({ open, onClose, title, description, children, className }: ShellDialogProps): import("react").ReactPortal | null;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=shell-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-dialog.d.ts","sourceRoot":"","sources":["../../../../../core-web/src/components/ui/shell-dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAK3D,UAAU,gBAAgB;IACxB,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,QAAQ,EAAE,SAAS,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,gBAAgB,sCA4DvG"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { createPortal } from 'react-dom';
|
|
4
|
+
import { XIcon } from 'lucide-react';
|
|
5
|
+
import { cn } from '../../lib/utils';
|
|
6
|
+
/**
|
|
7
|
+
* Dialog scoped to the shell (#shell-root) instead of the full viewport,
|
|
8
|
+
* so the chat panel stays visible. Backdrop-blur + fade-in, shadcn vibes.
|
|
9
|
+
*/
|
|
10
|
+
export function ShellDialog({ open, onClose, title, description, children, className }) {
|
|
11
|
+
const [mounted, setMounted] = useState(false);
|
|
12
|
+
const [target, setTarget] = useState(null);
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
setTarget(document.getElementById('shell-root'));
|
|
15
|
+
}, [open]);
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
if (!open) {
|
|
18
|
+
setMounted(false);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const id = requestAnimationFrame(() => setMounted(true));
|
|
22
|
+
return () => cancelAnimationFrame(id);
|
|
23
|
+
}, [open]);
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
if (!open)
|
|
26
|
+
return;
|
|
27
|
+
const onKey = (e) => { if (e.key === 'Escape')
|
|
28
|
+
onClose(); };
|
|
29
|
+
window.addEventListener('keydown', onKey);
|
|
30
|
+
return () => window.removeEventListener('keydown', onKey);
|
|
31
|
+
}, [open, onClose]);
|
|
32
|
+
if (!open || !target)
|
|
33
|
+
return null;
|
|
34
|
+
return createPortal(_jsx("div", { className: cn('absolute inset-0 z-50 flex items-center justify-center p-6', 'bg-background/60 backdrop-blur-sm transition-opacity duration-150', mounted ? 'opacity-100' : 'opacity-0'), onClick: onClose, children: _jsxs("div", { onClick: (e) => e.stopPropagation(), className: cn('relative bg-card border border-border rounded-lg shadow-lg', 'w-full max-w-lg max-h-[90%] flex flex-col', 'transition-all duration-150', mounted ? 'translate-y-0 opacity-100' : 'translate-y-2 opacity-0', className), children: [_jsx("button", { onClick: onClose, className: "absolute right-3 top-3 text-muted-foreground/60 hover:text-foreground", "aria-label": "Cerrar", children: _jsx(XIcon, { className: "w-4 h-4" }) }), (title || description) && (_jsxs("div", { className: "px-5 pt-5 pb-3 border-b border-border/50 shrink-0", children: [title && _jsx("h2", { className: "text-base font-semibold", children: title }), description && _jsx("p", { className: "text-xs text-muted-foreground mt-1", children: description })] })), _jsx("div", { className: "p-5 flex-1 min-h-0 overflow-y-auto scrollbar-thin", children: children })] }) }), target);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=shell-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-dialog.js","sourceRoot":"","sources":["../../../../../core-web/src/components/ui/shell-dialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AACpC,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAA;AAWpC;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAoB;IACtG,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAqB,IAAI,CAAC,CAAA;IAE9D,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAA;IAClD,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEV,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI,EAAE,CAAC;YAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAAC,OAAM;QAAC,CAAC;QACxC,MAAM,EAAE,GAAG,qBAAqB,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;QACxD,OAAO,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAA;IACvC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEV,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAM;QACjB,MAAM,KAAK,GAAG,CAAC,CAAgB,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAA,CAAC,CAAC,CAAA;QACzE,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QACzC,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;IAC3D,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;IAEnB,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IAEjC,OAAO,YAAY,CACjB,cACE,SAAS,EAAE,EAAE,CACX,4DAA4D,EAC5D,mEAAmE,EACnE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CACtC,EACD,OAAO,EAAE,OAAO,YAEhB,eACE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,EACnC,SAAS,EAAE,EAAE,CACX,4DAA4D,EAC5D,2CAA2C,EAC3C,6BAA6B,EAC7B,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,yBAAyB,EACjE,SAAS,CACV,aAED,iBACE,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,uEAAuE,gBACtE,QAAQ,YAEnB,KAAC,KAAK,IAAC,SAAS,EAAC,SAAS,GAAG,GACtB,EACR,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,CACzB,eAAK,SAAS,EAAC,mDAAmD,aAC/D,KAAK,IAAI,aAAI,SAAS,EAAC,yBAAyB,YAAE,KAAK,GAAM,EAC7D,WAAW,IAAI,YAAG,SAAS,EAAC,oCAAoC,YAAE,WAAW,GAAK,IAC/E,CACP,EACD,cAAK,SAAS,EAAC,mDAAmD,YAAE,QAAQ,GAAO,IAC/E,GACF,EACN,MAAM,CACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../../../../core-web/src/components/ui/skeleton.tsx"],"names":[],"mappings":"AAEA,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,2CAI9E;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from '../../lib/utils';
|
|
3
|
+
function Skeleton({ className, ...props }) {
|
|
4
|
+
return (_jsx("div", { className: cn('animate-pulse rounded-md bg-muted', className), ...props }));
|
|
5
|
+
}
|
|
6
|
+
export { Skeleton };
|
|
7
|
+
//# sourceMappingURL=skeleton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton.js","sourceRoot":"","sources":["../../../../../core-web/src/components/ui/skeleton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAA;AAEpC,SAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAwC;IAC7E,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,mCAAmC,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAClF,CAAA;AACH,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textarea.d.ts","sourceRoot":"","sources":["../../../../../core-web/src/components/ui/textarea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,QAAA,MAAM,QAAQ,+HAWb,CAAA;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { cn } from '../../lib/utils';
|
|
4
|
+
const Textarea = React.forwardRef(({ className, ...props }, ref) => (_jsx("textarea", { className: cn('flex w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50', className), ref: ref, ...props })));
|
|
5
|
+
Textarea.displayName = 'Textarea';
|
|
6
|
+
export { Textarea };
|
|
7
|
+
//# sourceMappingURL=textarea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textarea.js","sourceRoot":"","sources":["../../../../../core-web/src/components/ui/textarea.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAA;AAEpC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAC/B,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAChC,mBACE,SAAS,EAAE,EAAE,CACX,uOAAuO,EACvO,SAAS,CACV,EACD,GAAG,EAAE,GAAG,KACJ,KAAK,GACT,CACH,CACF,CAAA;AACD,QAAQ,CAAC,WAAW,GAAG,UAAU,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface UINode {
|
|
2
|
+
type: string;
|
|
3
|
+
children?: UINode[];
|
|
4
|
+
[prop: string]: any;
|
|
5
|
+
}
|
|
6
|
+
export declare const KNOWN_PRIMITIVES: string[];
|
|
7
|
+
interface Props {
|
|
8
|
+
spec: UINode | UINode[] | null | undefined;
|
|
9
|
+
onSendToChat?: (message: string) => void;
|
|
10
|
+
}
|
|
11
|
+
export declare function Generative({ spec, onSendToChat }: Props): import("react/jsx-runtime").JSX.Element | null;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=Generative.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Generative.d.ts","sourceRoot":"","sources":["../../../../../../core-web/src/components/widgets/agent/Generative.tsx"],"names":[],"mappings":"AAUA,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAA;CACpB;AAoBD,eAAO,MAAM,gBAAgB,UAA0B,CAAA;AAEvD,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,CAAA;IAC1C,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACzC;AAED,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,KAAK,kDAIvD"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as P from './Primitives';
|
|
3
|
+
const PRIMITIVES = {
|
|
4
|
+
Stack: P.Stack,
|
|
5
|
+
Row: P.Row,
|
|
6
|
+
Grid: P.Grid,
|
|
7
|
+
Heading: P.Heading,
|
|
8
|
+
Text: P.Text,
|
|
9
|
+
Image: P.Image,
|
|
10
|
+
Badge: P.Badge,
|
|
11
|
+
Stat: P.Stat,
|
|
12
|
+
Rating: P.Rating,
|
|
13
|
+
GoldSupplier: P.GoldSupplier,
|
|
14
|
+
Card: P.Card,
|
|
15
|
+
CardBody: P.CardBody,
|
|
16
|
+
LinkOut: P.LinkOut,
|
|
17
|
+
Button: P.Button,
|
|
18
|
+
Table: P.Table,
|
|
19
|
+
};
|
|
20
|
+
export const KNOWN_PRIMITIVES = Object.keys(PRIMITIVES);
|
|
21
|
+
export function Generative({ spec, onSendToChat }) {
|
|
22
|
+
if (!spec)
|
|
23
|
+
return null;
|
|
24
|
+
const nodes = Array.isArray(spec) ? spec : [spec];
|
|
25
|
+
return _jsx(_Fragment, { children: nodes.map((n, i) => renderNode(n, i, onSendToChat)) });
|
|
26
|
+
}
|
|
27
|
+
function renderNode(node, key, onSendToChat) {
|
|
28
|
+
if (!node || typeof node !== 'object')
|
|
29
|
+
return null;
|
|
30
|
+
const { type, children, ...props } = node;
|
|
31
|
+
const Cmp = PRIMITIVES[type];
|
|
32
|
+
if (!Cmp) {
|
|
33
|
+
return (_jsxs("div", { className: "text-[10px] text-muted-foreground/60 italic", children: ["[unknown primitive: ", String(type), "]"] }, key));
|
|
34
|
+
}
|
|
35
|
+
// Inject onSendToChat into any primitive that accepts it (Button)
|
|
36
|
+
const injectedProps = type === 'Button' ? { ...props, onSendToChat } : props;
|
|
37
|
+
const renderedChildren = Array.isArray(children) && children.length > 0
|
|
38
|
+
? children.map((c, i) => renderNode(c, `${key}-${i}`, onSendToChat))
|
|
39
|
+
: undefined;
|
|
40
|
+
return (_jsx(Cmp, { ...injectedProps, children: renderedChildren }, key));
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=Generative.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Generative.js","sourceRoot":"","sources":["../../../../../../core-web/src/components/widgets/agent/Generative.tsx"],"names":[],"mappings":";AAQA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AAQjC,MAAM,UAAU,GAAuC;IACrD,KAAK,EAAE,CAAC,CAAC,KAAK;IACd,GAAG,EAAE,CAAC,CAAC,GAAG;IACV,IAAI,EAAE,CAAC,CAAC,IAAI;IACZ,OAAO,EAAE,CAAC,CAAC,OAAO;IAClB,IAAI,EAAE,CAAC,CAAC,IAAI;IACZ,KAAK,EAAE,CAAC,CAAC,KAAK;IACd,KAAK,EAAE,CAAC,CAAC,KAAK;IACd,IAAI,EAAE,CAAC,CAAC,IAAI;IACZ,MAAM,EAAE,CAAC,CAAC,MAAM;IAChB,YAAY,EAAE,CAAC,CAAC,YAAY;IAC5B,IAAI,EAAE,CAAC,CAAC,IAAI;IACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;IACpB,OAAO,EAAE,CAAC,CAAC,OAAO;IAClB,MAAM,EAAE,CAAC,CAAC,MAAM;IAChB,KAAK,EAAE,CAAC,CAAC,KAAK;CACf,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;AAOvD,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,YAAY,EAAS;IACtD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IACtB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IACjD,OAAO,4BAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,GAAI,CAAA;AACnE,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,GAAoB,EAAE,YAAkC;IACxF,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IAClD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,CAAA;IACzC,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;IAE5B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CACL,eAAe,SAAS,EAAC,6CAA6C,qCAC/C,MAAM,CAAC,IAAI,CAAC,UADzB,GAAG,CAEP,CACP,CAAA;IACH,CAAC;IAED,kEAAkE;IAClE,MAAM,aAAa,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;IAE5E,MAAM,gBAAgB,GACpB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAC5C,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;QACpE,CAAC,CAAC,SAAS,CAAA;IAEf,OAAO,CACL,KAAC,GAAG,OAAe,aAAa,YAC7B,gBAAgB,IADT,GAAG,CAEP,CACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Primitive building blocks for agent-generated UIs.
|
|
3
|
+
*
|
|
4
|
+
* Each primitive is a simple React component that accepts typed props and
|
|
5
|
+
* optional `children` (already rendered by Generative). Primitives have no
|
|
6
|
+
* side effects beyond `onSendToChat` for interactive ones.
|
|
7
|
+
*/
|
|
8
|
+
import { type ReactNode } from 'react';
|
|
9
|
+
type OnChat = (message: string) => void;
|
|
10
|
+
export declare function Stack({ gap, children }: {
|
|
11
|
+
gap?: number;
|
|
12
|
+
children?: ReactNode;
|
|
13
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export declare function Row({ gap, align, children }: {
|
|
15
|
+
gap?: number;
|
|
16
|
+
align?: 'start' | 'center' | 'end' | 'baseline';
|
|
17
|
+
children?: ReactNode;
|
|
18
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export declare function Grid({ cols, gap, children }: {
|
|
20
|
+
cols?: 1 | 2 | 3 | 4;
|
|
21
|
+
gap?: number;
|
|
22
|
+
children?: ReactNode;
|
|
23
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export declare function Heading({ text, level }: {
|
|
25
|
+
text: string;
|
|
26
|
+
level?: 1 | 2 | 3;
|
|
27
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
export declare function Text({ text, muted, size }: {
|
|
29
|
+
text: string;
|
|
30
|
+
muted?: boolean;
|
|
31
|
+
size?: 'xs' | 'sm';
|
|
32
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
export declare function Image({ src, alt, aspect, fit }: {
|
|
34
|
+
src: string;
|
|
35
|
+
alt?: string;
|
|
36
|
+
aspect?: 'square' | 'video' | 'auto';
|
|
37
|
+
fit?: 'cover' | 'contain';
|
|
38
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
39
|
+
export declare function Badge({ text, variant }: {
|
|
40
|
+
text: string;
|
|
41
|
+
variant?: 'default' | 'secondary' | 'outline' | 'success' | 'warning';
|
|
42
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
43
|
+
export declare function Stat({ label, value, hint, tone }: {
|
|
44
|
+
label: string;
|
|
45
|
+
value: string;
|
|
46
|
+
hint?: string;
|
|
47
|
+
tone?: 'default' | 'success' | 'warning' | 'danger';
|
|
48
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
49
|
+
export declare function Rating({ score, count }: {
|
|
50
|
+
score: number;
|
|
51
|
+
count?: number;
|
|
52
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
53
|
+
export declare function GoldSupplier({ years }: {
|
|
54
|
+
years: number;
|
|
55
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
56
|
+
export declare function Card({ children }: {
|
|
57
|
+
children?: ReactNode;
|
|
58
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
59
|
+
export declare function CardBody({ children }: {
|
|
60
|
+
children?: ReactNode;
|
|
61
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
62
|
+
export declare function LinkOut({ href, label }: {
|
|
63
|
+
href: string;
|
|
64
|
+
label?: string;
|
|
65
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
66
|
+
export declare function Button({ label, send, action, actionPayload, variant, onSendToChat, }: {
|
|
67
|
+
label: string;
|
|
68
|
+
send?: string;
|
|
69
|
+
action?: string;
|
|
70
|
+
actionPayload?: Record<string, any>;
|
|
71
|
+
variant?: 'default' | 'primary' | 'ghost';
|
|
72
|
+
onSendToChat?: OnChat;
|
|
73
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
74
|
+
export declare function Table({ columns, rows, }: {
|
|
75
|
+
columns: string[];
|
|
76
|
+
rows: (string | number)[][];
|
|
77
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
78
|
+
export {};
|
|
79
|
+
//# sourceMappingURL=Primitives.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Primitives.d.ts","sourceRoot":"","sources":["../../../../../../core-web/src/components/widgets/agent/Primitives.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Primitive building blocks for agent-generated UIs.
|
|
4
|
+
*
|
|
5
|
+
* Each primitive is a simple React component that accepts typed props and
|
|
6
|
+
* optional `children` (already rendered by Generative). Primitives have no
|
|
7
|
+
* side effects beyond `onSendToChat` for interactive ones.
|
|
8
|
+
*/
|
|
9
|
+
import { useState } from 'react';
|
|
10
|
+
import { ExternalLinkIcon, StarIcon, ShieldCheckIcon, Loader2Icon, CheckIcon } from 'lucide-react';
|
|
11
|
+
import { Badge as UIBadge } from '../../ui/badge';
|
|
12
|
+
import { ACTIONS } from './actions';
|
|
13
|
+
// ---------- Layout ----------
|
|
14
|
+
export function Stack({ gap = 2, children }) {
|
|
15
|
+
return _jsx("div", { className: `flex flex-col gap-${Math.min(gap, 6)}`, children: children });
|
|
16
|
+
}
|
|
17
|
+
export function Row({ gap = 2, align = 'center', children }) {
|
|
18
|
+
const a = { start: 'items-start', center: 'items-center', end: 'items-end', baseline: 'items-baseline' }[align];
|
|
19
|
+
return _jsx("div", { className: `flex flex-row gap-${Math.min(gap, 6)} ${a}`, children: children });
|
|
20
|
+
}
|
|
21
|
+
export function Grid({ cols = 3, gap = 2, children }) {
|
|
22
|
+
// Default to 3 columns. Tight breakpoints so it actually shows 3 at normal shell widths.
|
|
23
|
+
const c = {
|
|
24
|
+
1: 'grid-cols-1',
|
|
25
|
+
2: 'grid-cols-2',
|
|
26
|
+
3: 'grid-cols-3',
|
|
27
|
+
4: 'grid-cols-4',
|
|
28
|
+
}[cols] || 'grid-cols-4';
|
|
29
|
+
return _jsx("div", { className: `grid ${c} gap-${Math.min(gap, 6)}`, children: children });
|
|
30
|
+
}
|
|
31
|
+
// ---------- Typography ----------
|
|
32
|
+
export function Heading({ text, level = 2 }) {
|
|
33
|
+
const size = level === 1 ? 'text-lg font-semibold' : level === 2 ? 'text-sm font-semibold' : 'text-xs font-medium text-muted-foreground';
|
|
34
|
+
return _jsx("p", { className: size, children: text });
|
|
35
|
+
}
|
|
36
|
+
export function Text({ text, muted, size = 'sm' }) {
|
|
37
|
+
return _jsx("p", { className: `${size === 'xs' ? 'text-[11px]' : 'text-xs'} ${muted ? 'text-muted-foreground' : ''}`, children: text });
|
|
38
|
+
}
|
|
39
|
+
// ---------- Content ----------
|
|
40
|
+
export function Image({ src, alt, aspect = 'square', fit = 'contain' }) {
|
|
41
|
+
const a = aspect === 'square' ? 'aspect-square max-h-32' : aspect === 'video' ? 'aspect-video' : '';
|
|
42
|
+
const f = fit === 'contain' ? 'object-contain' : 'object-cover';
|
|
43
|
+
return (_jsx("div", { className: `${a} bg-muted/20 overflow-hidden rounded-md flex items-center justify-center`, children: _jsx("img", { src: src, alt: alt || '', loading: "lazy", className: `w-full h-full ${f}` }) }));
|
|
44
|
+
}
|
|
45
|
+
export function Badge({ text, variant = 'default' }) {
|
|
46
|
+
const colors = {
|
|
47
|
+
success: 'bg-emerald-600/15 text-emerald-500 border-emerald-600/30',
|
|
48
|
+
warning: 'bg-amber-500/15 text-amber-500 border-amber-500/30',
|
|
49
|
+
};
|
|
50
|
+
if (colors[variant]) {
|
|
51
|
+
return _jsx("span", { className: `text-[10px] px-1.5 py-0.5 rounded border ${colors[variant]}`, children: text });
|
|
52
|
+
}
|
|
53
|
+
return _jsx(UIBadge, { variant: variant, className: "text-[10px]", children: text });
|
|
54
|
+
}
|
|
55
|
+
export function Stat({ label, value, hint, tone = 'default' }) {
|
|
56
|
+
const color = { default: '', success: 'text-emerald-500', warning: 'text-amber-500', danger: 'text-red-500' }[tone];
|
|
57
|
+
return (_jsxs("div", { className: "bg-accent/40 border border-border/60 rounded-lg p-2.5", children: [_jsx("p", { className: "text-[10px] text-muted-foreground uppercase tracking-wide", children: label }), _jsx("p", { className: `text-base font-semibold ${color}`, children: value }), hint && _jsx("p", { className: "text-[10px] text-muted-foreground/60 mt-0.5", children: hint })] }));
|
|
58
|
+
}
|
|
59
|
+
export function Rating({ score, count }) {
|
|
60
|
+
return (_jsxs("span", { className: "inline-flex items-center gap-0.5 text-[11px]", children: [_jsx(StarIcon, { className: "w-3 h-3 text-yellow-500 fill-yellow-500" }), score.toFixed(1), count ? _jsxs("span", { className: "text-muted-foreground/60", children: [" (", count, ")"] }) : null] }));
|
|
61
|
+
}
|
|
62
|
+
export function GoldSupplier({ years }) {
|
|
63
|
+
if (!years)
|
|
64
|
+
return null;
|
|
65
|
+
return (_jsxs("span", { className: "inline-flex items-center gap-0.5 text-[11px] text-amber-500", children: [_jsx(ShieldCheckIcon, { className: "w-3 h-3" }), " ", years, "y Gold"] }));
|
|
66
|
+
}
|
|
67
|
+
// ---------- Containers ----------
|
|
68
|
+
export function Card({ children }) {
|
|
69
|
+
return (_jsx("div", { className: "bg-accent/40 border border-border/60 rounded-lg overflow-hidden flex flex-col hover:border-primary/40 transition-colors", children: children }));
|
|
70
|
+
}
|
|
71
|
+
export function CardBody({ children }) {
|
|
72
|
+
return _jsx("div", { className: "p-2.5 flex flex-col gap-1.5 flex-1", children: children });
|
|
73
|
+
}
|
|
74
|
+
// ---------- Interactive ----------
|
|
75
|
+
export function LinkOut({ href, label }) {
|
|
76
|
+
return (_jsxs("a", { href: href, target: "_blank", rel: "noreferrer", className: "inline-flex items-center gap-1 text-[11px] py-1 px-2 rounded border border-border hover:bg-accent transition-colors", children: [label || 'Ver', " ", _jsx(ExternalLinkIcon, { className: "w-2.5 h-2.5" })] }));
|
|
77
|
+
}
|
|
78
|
+
export function Button({ label, send, action, actionPayload, variant = 'default', onSendToChat, }) {
|
|
79
|
+
const [state, setState] = useState('idle');
|
|
80
|
+
const [result, setResult] = useState(null);
|
|
81
|
+
const cls = state === 'done'
|
|
82
|
+
? 'bg-emerald-600/20 text-emerald-500 border border-emerald-600/30 cursor-default'
|
|
83
|
+
: variant === 'primary'
|
|
84
|
+
? 'bg-emerald-600 hover:bg-emerald-500 text-white'
|
|
85
|
+
: variant === 'ghost'
|
|
86
|
+
? 'hover:bg-accent'
|
|
87
|
+
: 'border border-border hover:bg-accent';
|
|
88
|
+
async function handle() {
|
|
89
|
+
if (state === 'running' || state === 'done')
|
|
90
|
+
return;
|
|
91
|
+
// Direct action takes priority
|
|
92
|
+
if (action && ACTIONS[action]) {
|
|
93
|
+
setState('running');
|
|
94
|
+
try {
|
|
95
|
+
const msg = await ACTIONS[action](actionPayload || {});
|
|
96
|
+
setResult(msg);
|
|
97
|
+
setState('done');
|
|
98
|
+
}
|
|
99
|
+
catch (e) {
|
|
100
|
+
setResult(`Error: ${e?.message || String(e)}`);
|
|
101
|
+
setState('error');
|
|
102
|
+
setTimeout(() => setState('idle'), 2500);
|
|
103
|
+
}
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
// Fallback: send chat message
|
|
107
|
+
if (send)
|
|
108
|
+
onSendToChat?.(send);
|
|
109
|
+
}
|
|
110
|
+
return (_jsxs("button", { onClick: handle, disabled: state === 'running' || state === 'done', className: `text-[11px] py-1 px-2 rounded transition-colors inline-flex items-center gap-1 ${cls}`, children: [state === 'running' && _jsx(Loader2Icon, { className: "w-2.5 h-2.5 animate-spin" }), state === 'done' && _jsx(CheckIcon, { className: "w-2.5 h-2.5" }), _jsx("span", { children: state === 'done' ? result || 'Guardado' : state === 'error' ? result || 'Error' : label })] }));
|
|
111
|
+
}
|
|
112
|
+
// ---------- Tabular ----------
|
|
113
|
+
export function Table({ columns, rows, }) {
|
|
114
|
+
return (_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full text-[11px]", children: [_jsx("thead", { children: _jsx("tr", { className: "border-b border-border", children: columns.map((c, i) => (_jsx("th", { className: "text-left py-1 px-2 font-medium text-muted-foreground", children: c }, i))) }) }), _jsx("tbody", { children: rows.map((row, i) => (_jsx("tr", { className: "border-b border-border/40 hover:bg-accent/30", children: row.map((cell, j) => (_jsx("td", { className: "py-1 px-2", children: cell }, j))) }, i))) })] }) }));
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=Primitives.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Primitives.js","sourceRoot":"","sources":["../../../../../../core-web/src/components/widgets/agent/Primitives.tsx"],"names":[],"mappings":";AAAA;;;;;;GAMG;AACH,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAClG,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC,+BAA+B;AAE/B,MAAM,UAAU,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,QAAQ,EAA0C;IACjF,OAAO,cAAK,SAAS,EAAE,qBAAqB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,YAAG,QAAQ,GAAO,CAAA;AAClF,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,EAAE,QAAQ,EAA2F;IAClJ,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAA;IAC/G,OAAO,cAAK,SAAS,EAAE,qBAAqB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,YAAG,QAAQ,GAAO,CAAA;AACvF,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,QAAQ,EAAgE;IAChH,yFAAyF;IACzF,MAAM,CAAC,GAAG;QACR,CAAC,EAAE,aAAa;QAChB,CAAC,EAAE,aAAa;QAChB,CAAC,EAAE,aAAa;QAChB,CAAC,EAAE,aAAa;KACjB,CAAC,IAAI,CAAC,IAAI,aAAa,CAAA;IACxB,OAAO,cAAK,SAAS,EAAE,QAAQ,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,YAAG,QAAQ,GAAO,CAAA;AAC9E,CAAC;AAED,mCAAmC;AAEnC,MAAM,UAAU,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAuC;IAC9E,MAAM,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,2CAA2C,CAAA;IACxI,OAAO,YAAG,SAAS,EAAE,IAAI,YAAG,IAAI,GAAK,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI,EAAyD;IACtG,OAAO,YAAG,SAAS,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,EAAE,YAAG,IAAI,GAAK,CAAA;AACzH,CAAC;AAED,gCAAgC;AAEhC,MAAM,UAAU,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,GAAG,GAAG,SAAS,EAAkG;IACpK,MAAM,CAAC,GAAG,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAA;IACnG,MAAM,CAAC,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,cAAc,CAAA;IAC/D,OAAO,CACL,cAAK,SAAS,EAAE,GAAG,CAAC,0EAA0E,YAC5F,cAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,OAAO,EAAC,MAAM,EAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,GAAI,GAC7E,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,SAAS,EAA2F;IAC1I,MAAM,MAAM,GAA2B;QACrC,OAAO,EAAE,0DAA0D;QACnE,OAAO,EAAE,oDAAoD;KAC9D,CAAA;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACpB,OAAO,eAAM,SAAS,EAAE,4CAA4C,MAAM,CAAC,OAAO,CAAC,EAAE,YAAG,IAAI,GAAQ,CAAA;IACtG,CAAC;IACD,OAAO,KAAC,OAAO,IAAC,OAAO,EAAE,OAAc,EAAE,SAAS,EAAC,aAAa,YAAE,IAAI,GAAW,CAAA;AACnF,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,EAAwG;IACjK,MAAM,KAAK,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,IAAI,CAAC,CAAA;IACnH,OAAO,CACL,eAAK,SAAS,EAAC,uDAAuD,aACpE,YAAG,SAAS,EAAC,2DAA2D,YAAE,KAAK,GAAK,EACpF,YAAG,SAAS,EAAE,2BAA2B,KAAK,EAAE,YAAG,KAAK,GAAK,EAC5D,IAAI,IAAI,YAAG,SAAS,EAAC,6CAA6C,YAAE,IAAI,GAAK,IAC1E,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAqC;IACxE,OAAO,CACL,gBAAM,SAAS,EAAC,8CAA8C,aAC5D,KAAC,QAAQ,IAAC,SAAS,EAAC,yCAAyC,GAAG,EAC/D,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAChB,KAAK,CAAC,CAAC,CAAC,gBAAM,SAAS,EAAC,0BAA0B,mBAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,IACvE,CACR,CAAA;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAE,KAAK,EAAqB;IACvD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IACvB,OAAO,CACL,gBAAM,SAAS,EAAC,6DAA6D,aAC3E,KAAC,eAAe,IAAC,SAAS,EAAC,SAAS,GAAG,OAAE,KAAK,cACzC,CACR,CAAA;AACH,CAAC;AAED,mCAAmC;AAEnC,MAAM,UAAU,IAAI,CAAC,EAAE,QAAQ,EAA4B;IACzD,OAAO,CACL,cAAK,SAAS,EAAC,yHAAyH,YACrI,QAAQ,GACL,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,EAAE,QAAQ,EAA4B;IAC7D,OAAO,cAAK,SAAS,EAAC,oCAAoC,YAAE,QAAQ,GAAO,CAAA;AAC7E,CAAC;AAED,oCAAoC;AAEpC,MAAM,UAAU,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAoC;IACvE,OAAO,CACL,aACE,IAAI,EAAE,IAAI,EACV,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,YAAY,EAChB,SAAS,EAAC,qHAAqH,aAE9H,KAAK,IAAI,KAAK,OAAE,KAAC,gBAAgB,IAAC,SAAS,EAAC,aAAa,GAAG,IAC3D,CACL,CAAA;AACH,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,EACrB,KAAK,EACL,IAAI,EACJ,MAAM,EACN,aAAa,EACb,OAAO,GAAG,SAAS,EACnB,YAAY,GAQb;IACC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAwC,MAAM,CAAC,CAAA;IACjF,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAEzD,MAAM,GAAG,GACP,KAAK,KAAK,MAAM;QACd,CAAC,CAAC,gFAAgF;QAClF,CAAC,CAAC,OAAO,KAAK,SAAS;YACvB,CAAC,CAAC,gDAAgD;YAClD,CAAC,CAAC,OAAO,KAAK,OAAO;gBACrB,CAAC,CAAC,iBAAiB;gBACnB,CAAC,CAAC,sCAAsC,CAAA;IAE5C,KAAK,UAAU,MAAM;QACnB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,MAAM;YAAE,OAAM;QACnD,+BAA+B;QAC/B,IAAI,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,QAAQ,CAAC,SAAS,CAAC,CAAA;YACnB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,aAAa,IAAI,EAAE,CAAC,CAAA;gBACtD,SAAS,CAAC,GAAG,CAAC,CAAA;gBACd,QAAQ,CAAC,MAAM,CAAC,CAAA;YAClB,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,SAAS,CAAC,UAAU,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;gBAC9C,QAAQ,CAAC,OAAO,CAAC,CAAA;gBACjB,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAA;YAC1C,CAAC;YACD,OAAM;QACR,CAAC;QACD,8BAA8B;QAC9B,IAAI,IAAI;YAAE,YAAY,EAAE,CAAC,IAAI,CAAC,CAAA;IAChC,CAAC;IAED,OAAO,CACL,kBACE,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,MAAM,EACjD,SAAS,EAAE,kFAAkF,GAAG,EAAE,aAEjG,KAAK,KAAK,SAAS,IAAI,KAAC,WAAW,IAAC,SAAS,EAAC,0BAA0B,GAAG,EAC3E,KAAK,KAAK,MAAM,IAAI,KAAC,SAAS,IAAC,SAAS,EAAC,aAAa,GAAG,EAC1D,yBAAO,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAQ,IAC/F,CACV,CAAA;AACH,CAAC;AAED,gCAAgC;AAEhC,MAAM,UAAU,KAAK,CAAC,EACpB,OAAO,EACP,IAAI,GAIL;IACC,OAAO,CACL,cAAK,SAAS,EAAC,iBAAiB,YAC9B,iBAAO,SAAS,EAAC,oBAAoB,aACnC,0BACE,aAAI,SAAS,EAAC,wBAAwB,YACnC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACrB,aAAY,SAAS,EAAC,uDAAuD,YAC1E,CAAC,IADK,CAAC,CAEL,CACN,CAAC,GACC,GACC,EACR,0BACG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CACpB,aAAY,SAAS,EAAC,8CAA8C,YACjE,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACpB,aAAY,SAAS,EAAC,WAAW,YAC9B,IAAI,IADE,CAAC,CAEL,CACN,CAAC,IALK,CAAC,CAML,CACN,CAAC,GACI,IACF,GACJ,CACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../../../../core-web/src/components/widgets/agent/actions.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;AA0C7D,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAEjD,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry of direct frontend actions that agent-rendered Buttons can trigger.
|
|
3
|
+
* Each action is an async handler that runs in the browser (usually a Supabase
|
|
4
|
+
* write) and returns a short confirmation label for the button's success state.
|
|
5
|
+
*/
|
|
6
|
+
import { supabase } from '../../../lib/supabase';
|
|
7
|
+
async function saveAlternative(payload) {
|
|
8
|
+
const { product_id, company_id, supplier, title, url, thumbnail, price, moq, review_score, review_count, gold_supplier_years, country, } = payload || {};
|
|
9
|
+
if (!company_id || !supplier)
|
|
10
|
+
throw new Error('company_id y supplier requeridos');
|
|
11
|
+
const { error } = await supabase.from('product_alternatives').upsert({
|
|
12
|
+
product_id: product_id || null,
|
|
13
|
+
company_id,
|
|
14
|
+
supplier,
|
|
15
|
+
title: title || null,
|
|
16
|
+
url: url || null,
|
|
17
|
+
thumbnail: thumbnail || null,
|
|
18
|
+
price: price || null,
|
|
19
|
+
moq: moq || null,
|
|
20
|
+
review_score: review_score ?? null,
|
|
21
|
+
review_count: review_count ?? null,
|
|
22
|
+
gold_supplier_years: gold_supplier_years ?? null,
|
|
23
|
+
country: country || null,
|
|
24
|
+
source: 'alibaba',
|
|
25
|
+
}, { onConflict: 'product_id,supplier,url' });
|
|
26
|
+
if (error)
|
|
27
|
+
throw error;
|
|
28
|
+
return `✓ ${supplier} guardado como alternativa`;
|
|
29
|
+
}
|
|
30
|
+
export const ACTIONS = {
|
|
31
|
+
save_alternative: saveAlternative,
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../../../../core-web/src/components/widgets/agent/actions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAIhD,KAAK,UAAU,eAAe,CAAC,OAAY;IACzC,MAAM,EACJ,UAAU,EACV,UAAU,EACV,QAAQ,EACR,KAAK,EACL,GAAG,EACH,SAAS,EACT,KAAK,EACL,GAAG,EACH,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,OAAO,GACR,GAAG,OAAO,IAAI,EAAE,CAAA;IAEjB,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;IAEjF,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAClE;QACE,UAAU,EAAE,UAAU,IAAI,IAAI;QAC9B,UAAU;QACV,QAAQ;QACR,KAAK,EAAE,KAAK,IAAI,IAAI;QACpB,GAAG,EAAE,GAAG,IAAI,IAAI;QAChB,SAAS,EAAE,SAAS,IAAI,IAAI;QAC5B,KAAK,EAAE,KAAK,IAAI,IAAI;QACpB,GAAG,EAAE,GAAG,IAAI,IAAI;QAChB,YAAY,EAAE,YAAY,IAAI,IAAI;QAClC,YAAY,EAAE,YAAY,IAAI,IAAI;QAClC,mBAAmB,EAAE,mBAAmB,IAAI,IAAI;QAChD,OAAO,EAAE,OAAO,IAAI,IAAI;QACxB,MAAM,EAAE,SAAS;KAClB,EACD,EAAE,UAAU,EAAE,yBAAyB,EAAE,CAC1C,CAAA;IACD,IAAI,KAAK;QAAE,MAAM,KAAK,CAAA;IACtB,OAAO,KAAK,QAAQ,4BAA4B,CAAA;AAClD,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAkC;IACpD,gBAAgB,EAAE,eAAe;CAClC,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { User } from '@supabase/supabase-js';
|
|
2
|
+
interface Company {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
}
|
|
6
|
+
interface Profile {
|
|
7
|
+
full_name: string | null;
|
|
8
|
+
role_title: string | null;
|
|
9
|
+
onboarding_completed: boolean;
|
|
10
|
+
}
|
|
11
|
+
interface AuthState {
|
|
12
|
+
user: User | null;
|
|
13
|
+
role: 'admin' | 'client' | null;
|
|
14
|
+
companyId: string | null;
|
|
15
|
+
companies: Company[];
|
|
16
|
+
profile: Profile | null;
|
|
17
|
+
loading: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function useAuth(): AuthState & {
|
|
20
|
+
signOut: () => void;
|
|
21
|
+
setCompanyId: (id: string) => void;
|
|
22
|
+
reload: () => Promise<void>;
|
|
23
|
+
};
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=useAuth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAuth.d.ts","sourceRoot":"","sources":["../../../../core-web/src/hooks/useAuth.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAEjD,UAAU,OAAO;IACf,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;CACb;AAED,UAAU,OAAO;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,oBAAoB,EAAE,OAAO,CAAA;CAC9B;AAED,UAAU,SAAS;IACjB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;IACjB,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAA;IAC/B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,EAAE,OAAO,EAAE,CAAA;IACpB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACvB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,wBAAgB,OAAO,IAAI,SAAS,GAAG;IAAE,OAAO,EAAE,MAAM,IAAI,CAAC;IAAC,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAuD9H"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
2
|
+
import { supabase } from '../lib/supabase';
|
|
3
|
+
export function useAuth() {
|
|
4
|
+
const [state, setState] = useState({
|
|
5
|
+
user: null, role: null, companyId: null, companies: [], profile: null, loading: true,
|
|
6
|
+
});
|
|
7
|
+
const loadUser = useCallback(async (user) => {
|
|
8
|
+
if (!user) {
|
|
9
|
+
setState({ user: null, role: null, companyId: null, companies: [], profile: null, loading: false });
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const [{ data: owned }, { data: profile }] = await Promise.all([
|
|
13
|
+
supabase.from('companies').select('id, name').eq('owner_id', user.id),
|
|
14
|
+
supabase.from('profiles').select('full_name, role_title, onboarding_completed').eq('id', user.id).maybeSingle(),
|
|
15
|
+
]);
|
|
16
|
+
if (owned && owned.length > 0) {
|
|
17
|
+
setState({ user, role: 'admin', companyId: owned[0].id, companies: owned, profile: profile || null, loading: false });
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const { data: memberships } = await supabase
|
|
21
|
+
.from('company_users')
|
|
22
|
+
.select('company_id, companies(id, name)')
|
|
23
|
+
.eq('user_id', user.id);
|
|
24
|
+
const clientCompanies = (memberships || []).map((m) => m.companies).filter(Boolean);
|
|
25
|
+
setState({
|
|
26
|
+
user, role: clientCompanies.length > 0 ? 'client' : null,
|
|
27
|
+
companyId: clientCompanies[0]?.id || null, companies: clientCompanies,
|
|
28
|
+
profile: profile || null, loading: false,
|
|
29
|
+
});
|
|
30
|
+
}, []);
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
let active = true;
|
|
33
|
+
supabase.auth.getUser().then(({ data: { user } }) => {
|
|
34
|
+
if (active)
|
|
35
|
+
loadUser(user);
|
|
36
|
+
}).catch(() => { });
|
|
37
|
+
const { data: { subscription } } = supabase.auth.onAuthStateChange((_ev, session) => {
|
|
38
|
+
if (active)
|
|
39
|
+
loadUser(session?.user || null);
|
|
40
|
+
});
|
|
41
|
+
return () => { active = false; subscription.unsubscribe(); };
|
|
42
|
+
}, [loadUser]);
|
|
43
|
+
return {
|
|
44
|
+
...state,
|
|
45
|
+
signOut: () => supabase.auth.signOut(),
|
|
46
|
+
setCompanyId: (id) => setState(s => ({ ...s, companyId: id })),
|
|
47
|
+
reload: async () => {
|
|
48
|
+
const { data: { user } } = await supabase.auth.getUser();
|
|
49
|
+
await loadUser(user);
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=useAuth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAuth.js","sourceRoot":"","sources":["../../../../core-web/src/hooks/useAuth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal data-fetching hook. Replaces the `useEffect(() => fetch().then(setState), [deps])` pattern.
|
|
3
|
+
* Handles stale closures via an abort flag. Components should never useEffect for fetching.
|
|
4
|
+
*/
|
|
5
|
+
export declare function useData<T>(fetcher: (signal: AbortSignal) => Promise<T>, deps: readonly unknown[], initial: T): {
|
|
6
|
+
data: T;
|
|
7
|
+
loading: boolean;
|
|
8
|
+
error: Error | null;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=useData.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useData.d.ts","sourceRoot":"","sources":["../../../../core-web/src/hooks/useData.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,OAAO,CAAC,CAAC,EACvB,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EAC5C,IAAI,EAAE,SAAS,OAAO,EAAE,EACxB,OAAO,EAAE,CAAC,GACT;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;CAAE,CAiCpD"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { useEffect, useRef, useState } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Minimal data-fetching hook. Replaces the `useEffect(() => fetch().then(setState), [deps])` pattern.
|
|
4
|
+
* Handles stale closures via an abort flag. Components should never useEffect for fetching.
|
|
5
|
+
*/
|
|
6
|
+
export function useData(fetcher, deps, initial) {
|
|
7
|
+
const [data, setData] = useState(initial);
|
|
8
|
+
const [loading, setLoading] = useState(true);
|
|
9
|
+
const [error, setError] = useState(null);
|
|
10
|
+
const mountedRef = useRef(true);
|
|
11
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
const controller = new AbortController();
|
|
14
|
+
setLoading(true);
|
|
15
|
+
setError(null);
|
|
16
|
+
fetcher(controller.signal)
|
|
17
|
+
.then(result => {
|
|
18
|
+
if (!controller.signal.aborted) {
|
|
19
|
+
setData(result);
|
|
20
|
+
setLoading(false);
|
|
21
|
+
}
|
|
22
|
+
})
|
|
23
|
+
.catch(err => {
|
|
24
|
+
if (!controller.signal.aborted) {
|
|
25
|
+
setError(err);
|
|
26
|
+
setLoading(false);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
return () => controller.abort();
|
|
30
|
+
}, deps);
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
mountedRef.current = true;
|
|
33
|
+
return () => { mountedRef.current = false; };
|
|
34
|
+
}, []);
|
|
35
|
+
return { data, loading, error };
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=useData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useData.js","sourceRoot":"","sources":["../../../../core-web/src/hooks/useData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEnD;;;GAGG;AACH,MAAM,UAAU,OAAO,CACrB,OAA4C,EAC5C,IAAwB,EACxB,OAAU;IAEV,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAI,OAAO,CAAC,CAAA;IAC5C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC5C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAA;IACtD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;IAE/B,uDAAuD;IACvD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;QACxC,UAAU,CAAC,IAAI,CAAC,CAAA;QAChB,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;aACvB,IAAI,CAAC,MAAM,CAAC,EAAE;YACb,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC/B,OAAO,CAAC,MAAM,CAAC,CAAA;gBACf,UAAU,CAAC,KAAK,CAAC,CAAA;YACnB,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,CAAC,EAAE;YACX,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC/B,QAAQ,CAAC,GAAG,CAAC,CAAA;gBACb,UAAU,CAAC,KAAK,CAAC,CAAA;YACnB,CAAC;QACH,CAAC,CAAC,CAAA;QACJ,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAA;IACjC,CAAC,EAAE,IAAI,CAAC,CAAA;IAER,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,OAAO,GAAG,IAAI,CAAA;QACzB,OAAO,GAAG,EAAE,GAAG,UAAU,CAAC,OAAO,GAAG,KAAK,CAAA,CAAC,CAAC,CAAA;IAC7C,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;AACjC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run an effect exactly once on mount. The only sanctioned direct useEffect wrapper.
|
|
3
|
+
* Components must never import useEffect directly — use this or another custom hook.
|
|
4
|
+
*/
|
|
5
|
+
export declare function useMountEffect(effect: () => void | (() => void)): void;
|
|
6
|
+
//# sourceMappingURL=useMountEffect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMountEffect.d.ts","sourceRoot":"","sources":["../../../../core-web/src/hooks/useMountEffect.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,QAG/D"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Run an effect exactly once on mount. The only sanctioned direct useEffect wrapper.
|
|
4
|
+
* Components must never import useEffect directly — use this or another custom hook.
|
|
5
|
+
*/
|
|
6
|
+
export function useMountEffect(effect) {
|
|
7
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
8
|
+
useEffect(effect, []);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=useMountEffect.js.map
|