@cogentic-co/ds 0.5.5 → 0.6.1
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/animations/animation-ai-analysis.js +99 -4
- package/dist/animations/animation-ai-analysis.js.map +1 -1
- package/dist/animations/animation-audit-trail.js +194 -2
- package/dist/animations/animation-audit-trail.js.map +1 -1
- package/dist/animations/animation-compliance-reports.js +108 -3
- package/dist/animations/animation-compliance-reports.js.map +1 -1
- package/dist/animations/animation-custom-rules.js +107 -3
- package/dist/animations/animation-custom-rules.js.map +1 -1
- package/dist/animations/animation-jira-ticket.js +114 -3
- package/dist/animations/animation-jira-ticket.js.map +1 -1
- package/dist/animations/animation-jurisdiction-detection.js +122 -3
- package/dist/animations/animation-jurisdiction-detection.js.map +1 -1
- package/dist/animations/animation-multi-protocol.js +63 -2
- package/dist/animations/animation-multi-protocol.js.map +1 -1
- package/dist/animations/animation-pricing-preview.js +169 -3
- package/dist/animations/animation-pricing-preview.js.map +1 -1
- package/dist/animations/animation-realtime-updates.js +140 -4
- package/dist/animations/animation-realtime-updates.js.map +1 -1
- package/dist/animations/animation-rest-api.js +121 -2
- package/dist/animations/animation-rest-api.js.map +1 -1
- package/dist/animations/animation-risk-scoring.js +158 -4
- package/dist/animations/animation-risk-scoring.js.map +1 -1
- package/dist/animations/animation-sandbox.js +107 -2
- package/dist/animations/animation-sandbox.js.map +1 -1
- package/dist/animations/animation-scheduled-reports.js +107 -3
- package/dist/animations/animation-scheduled-reports.js.map +1 -1
- package/dist/animations/animation-secure-messaging.js +99 -3
- package/dist/animations/animation-secure-messaging.js.map +1 -1
- package/dist/animations/animation-slack-notification.js +90 -3
- package/dist/animations/animation-slack-notification.js.map +1 -1
- package/dist/animations/animation-sop-mapping.js +158 -2
- package/dist/animations/animation-sop-mapping.js.map +1 -1
- package/dist/animations/animation-team-routing.js +118 -4
- package/dist/animations/animation-team-routing.js.map +1 -1
- package/dist/animations/animation-teams-notification.js +89 -3
- package/dist/animations/animation-teams-notification.js.map +1 -1
- package/dist/animations/animation-vasp-identification.js +142 -3
- package/dist/animations/animation-vasp-identification.js.map +1 -1
- package/dist/animations/animation-webhooks.js +105 -3
- package/dist/animations/animation-webhooks.js.map +1 -1
- package/dist/blocks/auth-form.js +0 -1
- package/dist/blocks/feature-section.js +0 -1
- package/dist/blocks/hero-section.js +0 -1
- package/dist/blocks/pricing-table.js +0 -1
- package/dist/blocks/stat-card.js +0 -1
- package/dist/chart-DkwdRX-i.d.ts +50 -0
- package/dist/charts.d.ts +73 -3
- package/dist/charts.js +287 -2
- package/dist/charts.js.map +1 -1
- package/dist/chunk-6RWCZUAD.js +0 -1
- package/dist/chunk-GJAWCIGE.js +237 -0
- package/dist/chunk-GJAWCIGE.js.map +1 -0
- package/dist/chunk-GZNLQE3I.js +0 -1
- package/dist/chunk-TAPJEVUA.js +0 -1
- package/dist/index.d.ts +39 -53
- package/dist/index.js +148 -175
- package/dist/index.js.map +1 -1
- package/package.json +24 -34
- package/dist/chunk-4YD3YS4B.js +0 -110
- package/dist/chunk-4YD3YS4B.js.map +0 -1
- package/dist/chunk-5JLZ42JT.js +0 -125
- package/dist/chunk-5JLZ42JT.js.map +0 -1
- package/dist/chunk-5OOO6TRA.js +0 -111
- package/dist/chunk-5OOO6TRA.js.map +0 -1
- package/dist/chunk-65Z2VEKG.js +0 -161
- package/dist/chunk-65Z2VEKG.js.map +0 -1
- package/dist/chunk-BTFYV3TI.js +0 -102
- package/dist/chunk-BTFYV3TI.js.map +0 -1
- package/dist/chunk-BTZB4JRC.js +0 -117
- package/dist/chunk-BTZB4JRC.js.map +0 -1
- package/dist/chunk-BZSA47MS.js +0 -121
- package/dist/chunk-BZSA47MS.js.map +0 -1
- package/dist/chunk-EFLWU2JP.js +0 -145
- package/dist/chunk-EFLWU2JP.js.map +0 -1
- package/dist/chunk-F7REPQOA.js +0 -93
- package/dist/chunk-F7REPQOA.js.map +0 -1
- package/dist/chunk-FKPK3CB7.js +0 -143
- package/dist/chunk-FKPK3CB7.js.map +0 -1
- package/dist/chunk-H7VUIMEL.js +0 -172
- package/dist/chunk-H7VUIMEL.js.map +0 -1
- package/dist/chunk-HTYR73ON.js +0 -161
- package/dist/chunk-HTYR73ON.js.map +0 -1
- package/dist/chunk-I26ZXVSY.js +0 -124
- package/dist/chunk-I26ZXVSY.js.map +0 -1
- package/dist/chunk-IKATDPHG.js +0 -92
- package/dist/chunk-IKATDPHG.js.map +0 -1
- package/dist/chunk-KUOF3XRZ.js +0 -108
- package/dist/chunk-KUOF3XRZ.js.map +0 -1
- package/dist/chunk-N7PBUY7G.js +0 -110
- package/dist/chunk-N7PBUY7G.js.map +0 -1
- package/dist/chunk-NAPDFVBI.js +0 -102
- package/dist/chunk-NAPDFVBI.js.map +0 -1
- package/dist/chunk-RTK7R4KZ.js +0 -66
- package/dist/chunk-RTK7R4KZ.js.map +0 -1
- package/dist/chunk-RZZTDJHG.js +0 -110
- package/dist/chunk-RZZTDJHG.js.map +0 -1
- package/dist/chunk-SNOJLZP4.js +0 -197
- package/dist/chunk-SNOJLZP4.js.map +0 -1
- package/dist/chunk-U4EPKN7G.js +0 -518
- package/dist/chunk-U4EPKN7G.js.map +0 -1
- package/dist/index-CcPuHWa-.d.ts +0 -118
package/dist/chunk-N7PBUY7G.js
DELETED
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { cn } from './chunk-GZNLQE3I.js';
|
|
3
|
-
import { RotateCcw, Play } from 'lucide-react';
|
|
4
|
-
import { LazyMotion, domAnimation, m } from 'motion/react';
|
|
5
|
-
import { useState, useRef, useCallback, useEffect } from 'react';
|
|
6
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
7
|
-
|
|
8
|
-
var SCRIPT = [
|
|
9
|
-
{ type: "command", text: "$ cogentic-cli test transfer --corridor AU:SG --amount 45000" },
|
|
10
|
-
{ type: "info", text: "\u2192 Using sandbox environment (test mode)" },
|
|
11
|
-
{ type: "output", text: "Creating test transfer TXN-TEST-0001..." },
|
|
12
|
-
{ type: "output", text: "Screening against sandbox ruleset..." },
|
|
13
|
-
{ type: "output", text: " Jurisdiction: AUSTRAC \u2192 MAS" },
|
|
14
|
-
{ type: "output", text: " Threshold check: AUD 10,000 exceeded" },
|
|
15
|
-
{ type: "output", text: " Travel Rule: IVMS101 required" },
|
|
16
|
-
{ type: "output", text: " Risk score: 18/100 (Low)" },
|
|
17
|
-
{ type: "success", text: "\u2713 Transfer screened: COMPLIANT" },
|
|
18
|
-
{ type: "info", text: "\u2192 Sandbox report: SR-TEST-0001 generated" },
|
|
19
|
-
{ type: "info", text: "\u2192 No production data affected" },
|
|
20
|
-
{ type: "command", text: "" },
|
|
21
|
-
{ type: "command", text: "$ cogentic-cli test transfer --corridor HK:GB --amount 120000" },
|
|
22
|
-
{ type: "info", text: "\u2192 Using sandbox environment (test mode)" },
|
|
23
|
-
{ type: "output", text: "Creating test transfer TXN-TEST-0002..." },
|
|
24
|
-
{ type: "output", text: "Screening against sandbox ruleset..." },
|
|
25
|
-
{ type: "output", text: " Jurisdiction: SFC \u2192 FCA" },
|
|
26
|
-
{ type: "output", text: " High-risk corridor detected" },
|
|
27
|
-
{ type: "output", text: " Enhanced due diligence triggered" },
|
|
28
|
-
{ type: "output", text: " Risk score: 72/100 (High)" },
|
|
29
|
-
{ type: "success", text: "\u26A0 Transfer screened: FLAGGED \u2014 manual review required" }
|
|
30
|
-
];
|
|
31
|
-
var lineColour = {
|
|
32
|
-
command: "text-white/90",
|
|
33
|
-
output: "text-white/50",
|
|
34
|
-
success: "text-emerald-400",
|
|
35
|
-
info: "text-[#00D4FF]/80"
|
|
36
|
-
};
|
|
37
|
-
function AnimationSandbox({ className }) {
|
|
38
|
-
const [visibleLines, setVisibleLines] = useState(0);
|
|
39
|
-
const scrollRef = useRef(null);
|
|
40
|
-
const reset = useCallback(() => {
|
|
41
|
-
setVisibleLines(0);
|
|
42
|
-
}, []);
|
|
43
|
-
useEffect(() => {
|
|
44
|
-
if (visibleLines < SCRIPT.length) {
|
|
45
|
-
const line = SCRIPT[visibleLines];
|
|
46
|
-
const delay = line.type === "command" ? 400 : line.text === "" ? 200 : 120;
|
|
47
|
-
const id = setTimeout(() => setVisibleLines((v) => v + 1), delay);
|
|
48
|
-
return () => clearTimeout(id);
|
|
49
|
-
} else {
|
|
50
|
-
const id = setTimeout(reset, 4e3);
|
|
51
|
-
return () => clearTimeout(id);
|
|
52
|
-
}
|
|
53
|
-
}, [visibleLines, reset]);
|
|
54
|
-
useEffect(() => {
|
|
55
|
-
const el = scrollRef.current;
|
|
56
|
-
if (!el) return;
|
|
57
|
-
requestAnimationFrame(() => {
|
|
58
|
-
el.scrollTop = el.scrollHeight;
|
|
59
|
-
});
|
|
60
|
-
}, []);
|
|
61
|
-
return /* @__PURE__ */ jsx(LazyMotion, { features: domAnimation, children: /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col bg-[#1a1a2e]", className), children: [
|
|
62
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 border-white/10 border-b px-4 py-2", children: [
|
|
63
|
-
/* @__PURE__ */ jsxs("div", { className: "flex gap-1.5", children: [
|
|
64
|
-
/* @__PURE__ */ jsx("span", { className: "size-2.5 rounded-full bg-red-400/80" }),
|
|
65
|
-
/* @__PURE__ */ jsx("span", { className: "size-2.5 rounded-full bg-amber-400/80" }),
|
|
66
|
-
/* @__PURE__ */ jsx("span", { className: "size-2.5 rounded-full bg-emerald-400/80" })
|
|
67
|
-
] }),
|
|
68
|
-
/* @__PURE__ */ jsx("span", { className: "ml-2 font-mono text-[10px] text-white/40", children: "cogentic-sandbox" }),
|
|
69
|
-
/* @__PURE__ */ jsxs("div", { className: "ml-auto flex items-center gap-2", children: [
|
|
70
|
-
/* @__PURE__ */ jsx("span", { className: "rounded-full bg-amber-500/20 px-2 py-0.5 font-bold font-mono text-[9px] text-amber-300", children: "SANDBOX" }),
|
|
71
|
-
/* @__PURE__ */ jsx(
|
|
72
|
-
"button",
|
|
73
|
-
{
|
|
74
|
-
onClick: reset,
|
|
75
|
-
className: "text-white/30 transition-colors hover:text-white/60",
|
|
76
|
-
"aria-label": "Restart",
|
|
77
|
-
children: /* @__PURE__ */ jsx(RotateCcw, { className: "size-3" })
|
|
78
|
-
}
|
|
79
|
-
)
|
|
80
|
-
] })
|
|
81
|
-
] }),
|
|
82
|
-
/* @__PURE__ */ jsx("div", { ref: scrollRef, className: "scrollbar-none flex-1 overflow-y-auto px-4 py-3", children: /* @__PURE__ */ jsxs("div", { className: "space-y-0.5", children: [
|
|
83
|
-
SCRIPT.slice(0, visibleLines).map((line, i) => /* @__PURE__ */ jsx(
|
|
84
|
-
m.p,
|
|
85
|
-
{
|
|
86
|
-
initial: { opacity: 0 },
|
|
87
|
-
animate: { opacity: 1 },
|
|
88
|
-
className: cn("font-mono text-[11px] leading-relaxed", lineColour[line.type]),
|
|
89
|
-
children: line.text || "\xA0"
|
|
90
|
-
},
|
|
91
|
-
i
|
|
92
|
-
)),
|
|
93
|
-
visibleLines < SCRIPT.length && /* @__PURE__ */ jsx("p", { className: "animate-pulse font-mono text-[11px] text-white/30", children: "\u2588" })
|
|
94
|
-
] }) }),
|
|
95
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 border-white/10 border-t px-4 py-1.5", children: [
|
|
96
|
-
/* @__PURE__ */ jsx(Play, { className: "size-3 text-emerald-400" }),
|
|
97
|
-
/* @__PURE__ */ jsxs("span", { className: "font-mono text-[9px] text-white/30", children: [
|
|
98
|
-
"Sandbox ",
|
|
99
|
-
"\u2022",
|
|
100
|
-
" No production data ",
|
|
101
|
-
"\u2022",
|
|
102
|
-
" Realistic responses"
|
|
103
|
-
] })
|
|
104
|
-
] })
|
|
105
|
-
] }) });
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
export { AnimationSandbox };
|
|
109
|
-
//# sourceMappingURL=chunk-N7PBUY7G.js.map
|
|
110
|
-
//# sourceMappingURL=chunk-N7PBUY7G.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/animations/animation-sandbox.tsx"],"names":[],"mappings":"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","file":"chunk-N7PBUY7G.js","sourcesContent":["\"use client\"\n\nimport { Play, RotateCcw } from \"lucide-react\"\nimport { domAnimation, LazyMotion, m } from \"motion/react\"\nimport { useCallback, useEffect, useRef, useState } from \"react\"\n\nimport { cn } from \"../lib/utils\"\n\ntype ConsoleLine = {\n type: \"command\" | \"output\" | \"success\" | \"info\"\n text: string\n}\n\nconst SCRIPT: ConsoleLine[] = [\n { type: \"command\", text: \"$ cogentic-cli test transfer --corridor AU:SG --amount 45000\" },\n { type: \"info\", text: \"\\u2192 Using sandbox environment (test mode)\" },\n { type: \"output\", text: \"Creating test transfer TXN-TEST-0001...\" },\n { type: \"output\", text: \"Screening against sandbox ruleset...\" },\n { type: \"output\", text: \" Jurisdiction: AUSTRAC \\u2192 MAS\" },\n { type: \"output\", text: \" Threshold check: AUD 10,000 exceeded\" },\n { type: \"output\", text: \" Travel Rule: IVMS101 required\" },\n { type: \"output\", text: \" Risk score: 18/100 (Low)\" },\n { type: \"success\", text: \"\\u2713 Transfer screened: COMPLIANT\" },\n { type: \"info\", text: \"\\u2192 Sandbox report: SR-TEST-0001 generated\" },\n { type: \"info\", text: \"\\u2192 No production data affected\" },\n { type: \"command\", text: \"\" },\n { type: \"command\", text: \"$ cogentic-cli test transfer --corridor HK:GB --amount 120000\" },\n { type: \"info\", text: \"\\u2192 Using sandbox environment (test mode)\" },\n { type: \"output\", text: \"Creating test transfer TXN-TEST-0002...\" },\n { type: \"output\", text: \"Screening against sandbox ruleset...\" },\n { type: \"output\", text: \" Jurisdiction: SFC \\u2192 FCA\" },\n { type: \"output\", text: \" High-risk corridor detected\" },\n { type: \"output\", text: \" Enhanced due diligence triggered\" },\n { type: \"output\", text: \" Risk score: 72/100 (High)\" },\n { type: \"success\", text: \"\\u26A0 Transfer screened: FLAGGED \\u2014 manual review required\" },\n]\n\nconst lineColour: Record<ConsoleLine[\"type\"], string> = {\n command: \"text-white/90\",\n output: \"text-white/50\",\n success: \"text-emerald-400\",\n info: \"text-[#00D4FF]/80\",\n}\n\nexport default function AnimationSandbox({ className }: { className?: string }) {\n const [visibleLines, setVisibleLines] = useState(0)\n const scrollRef = useRef<HTMLDivElement>(null)\n\n const reset = useCallback(() => {\n setVisibleLines(0)\n }, [])\n\n useEffect(() => {\n if (visibleLines < SCRIPT.length) {\n const line = SCRIPT[visibleLines]\n const delay = line.type === \"command\" ? 400 : line.text === \"\" ? 200 : 120\n const id = setTimeout(() => setVisibleLines((v) => v + 1), delay)\n return () => clearTimeout(id)\n } else {\n const id = setTimeout(reset, 4000)\n return () => clearTimeout(id)\n }\n }, [visibleLines, reset])\n\n useEffect(() => {\n const el = scrollRef.current\n if (!el) return\n requestAnimationFrame(() => {\n el.scrollTop = el.scrollHeight\n })\n }, [])\n\n return (\n <LazyMotion features={domAnimation}>\n <div className={cn(\"flex flex-col bg-[#1a1a2e]\", className)}>\n {/* Terminal bar */}\n <div className=\"flex items-center gap-3 border-white/10 border-b px-4 py-2\">\n <div className=\"flex gap-1.5\">\n <span className=\"size-2.5 rounded-full bg-red-400/80\" />\n <span className=\"size-2.5 rounded-full bg-amber-400/80\" />\n <span className=\"size-2.5 rounded-full bg-emerald-400/80\" />\n </div>\n <span className=\"ml-2 font-mono text-[10px] text-white/40\">cogentic-sandbox</span>\n <div className=\"ml-auto flex items-center gap-2\">\n <span className=\"rounded-full bg-amber-500/20 px-2 py-0.5 font-bold font-mono text-[9px] text-amber-300\">\n SANDBOX\n </span>\n <button\n onClick={reset}\n className=\"text-white/30 transition-colors hover:text-white/60\"\n aria-label=\"Restart\"\n >\n <RotateCcw className=\"size-3\" />\n </button>\n </div>\n </div>\n\n {/* Console output */}\n <div ref={scrollRef} className=\"scrollbar-none flex-1 overflow-y-auto px-4 py-3\">\n <div className=\"space-y-0.5\">\n {SCRIPT.slice(0, visibleLines).map((line, i) => (\n <m.p\n key={i}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n className={cn(\"font-mono text-[11px] leading-relaxed\", lineColour[line.type])}\n >\n {line.text || \"\\u00A0\"}\n </m.p>\n ))}\n {visibleLines < SCRIPT.length && (\n <p className=\"animate-pulse font-mono text-[11px] text-white/30\">{\"\\u2588\"}</p>\n )}\n </div>\n </div>\n\n {/* Footer */}\n <div className=\"flex items-center gap-2 border-white/10 border-t px-4 py-1.5\">\n <Play className=\"size-3 text-emerald-400\" />\n <span className=\"font-mono text-[9px] text-white/30\">\n Sandbox {\"\\u2022\"} No production data {\"\\u2022\"} Realistic responses\n </span>\n </div>\n </div>\n </LazyMotion>\n )\n}\n"]}
|
package/dist/chunk-NAPDFVBI.js
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { useAnimationTimer } from './chunk-RXV2XUDZ.js';
|
|
3
|
-
import { cn } from './chunk-GZNLQE3I.js';
|
|
4
|
-
import { Lock, ShieldCheck } from 'lucide-react';
|
|
5
|
-
import { LazyMotion, domAnimation, m } from 'motion/react';
|
|
6
|
-
import { useRef, useEffect } from 'react';
|
|
7
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
8
|
-
|
|
9
|
-
var MESSAGES = [
|
|
10
|
-
{
|
|
11
|
-
direction: "sent",
|
|
12
|
-
label: "Originator data sent",
|
|
13
|
-
fields: [
|
|
14
|
-
{ key: "Name", value: "J\u2022\u2022\u2022\u2022\u2022\u2022 S\u2022\u2022\u2022h" },
|
|
15
|
-
{ key: "Account", value: "\u2022\u2022\u2022\u2022\u2022\u20227a4f" },
|
|
16
|
-
{ key: "Institution", value: "Aqua Exchange" }
|
|
17
|
-
],
|
|
18
|
-
encrypted: true
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
direction: "received",
|
|
22
|
-
label: "Beneficiary data received",
|
|
23
|
-
fields: [
|
|
24
|
-
{ key: "Name", value: "L\u2022\u2022 C\u2022\u2022n" },
|
|
25
|
-
{ key: "Account", value: "\u2022\u2022\u2022\u2022\u2022\u2022e81b" },
|
|
26
|
-
{ key: "Institution", value: "Atlas Digital" }
|
|
27
|
-
],
|
|
28
|
-
encrypted: true
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
direction: "sent",
|
|
32
|
-
label: "Verification complete",
|
|
33
|
-
fields: [
|
|
34
|
-
{ key: "Status", value: "Both parties verified" },
|
|
35
|
-
{ key: "Protocol", value: "TRP v2.0" },
|
|
36
|
-
{ key: "Ref", value: "TR-2024-0847" }
|
|
37
|
-
],
|
|
38
|
-
encrypted: true
|
|
39
|
-
}
|
|
40
|
-
];
|
|
41
|
-
function AnimationSecureMessaging({ className }) {
|
|
42
|
-
const [timerRef, tick] = useAnimationTimer(2800);
|
|
43
|
-
const cyclePos = tick % (MESSAGES.length + 1);
|
|
44
|
-
const visible = cyclePos === 0 ? [0] : Array.from(
|
|
45
|
-
{ length: Math.min(cyclePos + 1, MESSAGES.length) },
|
|
46
|
-
(_, i) => i % MESSAGES.length
|
|
47
|
-
);
|
|
48
|
-
const scrollRef = useRef(null);
|
|
49
|
-
useEffect(() => {
|
|
50
|
-
if (scrollRef.current) {
|
|
51
|
-
scrollRef.current.scrollTo({ top: scrollRef.current.scrollHeight, behavior: "smooth" });
|
|
52
|
-
}
|
|
53
|
-
}, []);
|
|
54
|
-
return /* @__PURE__ */ jsx(LazyMotion, { features: domAnimation, children: /* @__PURE__ */ jsxs("div", { ref: timerRef, className: cn("flex flex-col", className), children: [
|
|
55
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 border-gray-100 border-b bg-gray-50/80 px-4 py-2", children: [
|
|
56
|
-
/* @__PURE__ */ jsx(Lock, { className: "size-3 text-[#00D4FF]" }),
|
|
57
|
-
/* @__PURE__ */ jsx("span", { className: "font-semibold text-[11px] text-gray-700", children: "Encrypted Channel" }),
|
|
58
|
-
/* @__PURE__ */ jsxs("span", { className: "ml-auto flex items-center gap-1 text-[10px] text-emerald-600", children: [
|
|
59
|
-
/* @__PURE__ */ jsx(ShieldCheck, { className: "size-3" }),
|
|
60
|
-
"TLS 1.3"
|
|
61
|
-
] })
|
|
62
|
-
] }),
|
|
63
|
-
/* @__PURE__ */ jsx("div", { ref: scrollRef, className: "scrollbar-none flex-1 space-y-3 overflow-y-auto px-4 py-3", children: visible.map((msgIdx, i) => {
|
|
64
|
-
const msg = MESSAGES[msgIdx];
|
|
65
|
-
const isLatest = i === visible.length - 1;
|
|
66
|
-
return /* @__PURE__ */ jsxs(
|
|
67
|
-
m.div,
|
|
68
|
-
{
|
|
69
|
-
initial: { opacity: 0, y: 10 },
|
|
70
|
-
animate: { opacity: isLatest ? 1 : 0.5, y: 0 },
|
|
71
|
-
transition: { duration: 0.35 },
|
|
72
|
-
className: cn(
|
|
73
|
-
"max-w-[85%] rounded-lg border bg-white p-3",
|
|
74
|
-
msg.direction === "sent" ? "ml-auto border-[#00D4FF]/20" : "border-gray-100"
|
|
75
|
-
),
|
|
76
|
-
children: [
|
|
77
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
78
|
-
/* @__PURE__ */ jsx(Lock, { className: "size-2.5 text-[#00D4FF]" }),
|
|
79
|
-
/* @__PURE__ */ jsx("span", { className: "font-semibold text-[10px] text-gray-600", children: msg.label })
|
|
80
|
-
] }),
|
|
81
|
-
/* @__PURE__ */ jsx("div", { className: "mt-2 space-y-1", children: msg.fields.map((f) => /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
82
|
-
/* @__PURE__ */ jsx("span", { className: "text-[10px] text-gray-400", children: f.key }),
|
|
83
|
-
/* @__PURE__ */ jsx("span", { className: "font-medium font-mono text-[10px] text-gray-700", children: f.value })
|
|
84
|
-
] }, f.key)) })
|
|
85
|
-
]
|
|
86
|
-
},
|
|
87
|
-
`${i}-${msgIdx}`
|
|
88
|
-
);
|
|
89
|
-
}) }),
|
|
90
|
-
/* @__PURE__ */ jsx("div", { className: "border-gray-100 border-t bg-gray-50/60 px-4 py-2", children: /* @__PURE__ */ jsxs("p", { className: "text-center text-[9px] text-gray-400", children: [
|
|
91
|
-
"AES-256 at rest ",
|
|
92
|
-
"\u2022",
|
|
93
|
-
" TLS 1.3 in transit ",
|
|
94
|
-
"\u2022",
|
|
95
|
-
" End-to-end encrypted"
|
|
96
|
-
] }) })
|
|
97
|
-
] }) });
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
export { AnimationSecureMessaging };
|
|
101
|
-
//# sourceMappingURL=chunk-NAPDFVBI.js.map
|
|
102
|
-
//# sourceMappingURL=chunk-NAPDFVBI.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/animations/animation-secure-messaging.tsx"],"names":[],"mappings":"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","file":"chunk-NAPDFVBI.js","sourcesContent":["\"use client\"\n\nimport { Lock, ShieldCheck } from \"lucide-react\"\nimport { domAnimation, LazyMotion, m } from \"motion/react\"\nimport { useEffect, useRef } from \"react\"\n\nimport { useAnimationTimer } from \"../hooks/use-animation-timer\"\n\nimport { cn } from \"../lib/utils\"\n\ntype Message = {\n direction: \"sent\" | \"received\"\n label: string\n fields: { key: string; value: string }[]\n encrypted: boolean\n}\n\nconst MESSAGES: Message[] = [\n {\n direction: \"sent\",\n label: \"Originator data sent\",\n fields: [\n { key: \"Name\", value: \"J\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022 S\\u2022\\u2022\\u2022h\" },\n { key: \"Account\", value: \"\\u2022\\u2022\\u2022\\u2022\\u2022\\u20227a4f\" },\n { key: \"Institution\", value: \"Aqua Exchange\" },\n ],\n encrypted: true,\n },\n {\n direction: \"received\",\n label: \"Beneficiary data received\",\n fields: [\n { key: \"Name\", value: \"L\\u2022\\u2022 C\\u2022\\u2022n\" },\n { key: \"Account\", value: \"\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022e81b\" },\n { key: \"Institution\", value: \"Atlas Digital\" },\n ],\n encrypted: true,\n },\n {\n direction: \"sent\",\n label: \"Verification complete\",\n fields: [\n { key: \"Status\", value: \"Both parties verified\" },\n { key: \"Protocol\", value: \"TRP v2.0\" },\n { key: \"Ref\", value: \"TR-2024-0847\" },\n ],\n encrypted: true,\n },\n]\n\nexport default function AnimationSecureMessaging({ className }: { className?: string }) {\n const [timerRef, tick] = useAnimationTimer(2800)\n // Reset to [0] after showing all messages, then accumulate again\n const cyclePos = tick % (MESSAGES.length + 1)\n const visible =\n cyclePos === 0\n ? [0]\n : Array.from(\n { length: Math.min(cyclePos + 1, MESSAGES.length) },\n (_, i) => i % MESSAGES.length,\n )\n const scrollRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollTo({ top: scrollRef.current.scrollHeight, behavior: \"smooth\" })\n }\n }, [])\n\n return (\n <LazyMotion features={domAnimation}>\n <div ref={timerRef} className={cn(\"flex flex-col\", className)}>\n {/* Header */}\n <div className=\"flex items-center gap-2 border-gray-100 border-b bg-gray-50/80 px-4 py-2\">\n <Lock className=\"size-3 text-[#00D4FF]\" />\n <span className=\"font-semibold text-[11px] text-gray-700\">Encrypted Channel</span>\n <span className=\"ml-auto flex items-center gap-1 text-[10px] text-emerald-600\">\n <ShieldCheck className=\"size-3\" />\n TLS 1.3\n </span>\n </div>\n\n {/* Messages */}\n <div ref={scrollRef} className=\"scrollbar-none flex-1 space-y-3 overflow-y-auto px-4 py-3\">\n {visible.map((msgIdx, i) => {\n const msg = MESSAGES[msgIdx]\n const isLatest = i === visible.length - 1\n return (\n <m.div\n key={`${i}-${msgIdx}`}\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: isLatest ? 1 : 0.5, y: 0 }}\n transition={{ duration: 0.35 }}\n className={cn(\n \"max-w-[85%] rounded-lg border bg-white p-3\",\n msg.direction === \"sent\" ? \"ml-auto border-[#00D4FF]/20\" : \"border-gray-100\",\n )}\n >\n <div className=\"flex items-center gap-1.5\">\n <Lock className=\"size-2.5 text-[#00D4FF]\" />\n <span className=\"font-semibold text-[10px] text-gray-600\">{msg.label}</span>\n </div>\n <div className=\"mt-2 space-y-1\">\n {msg.fields.map((f) => (\n <div key={f.key} className=\"flex items-center justify-between\">\n <span className=\"text-[10px] text-gray-400\">{f.key}</span>\n <span className=\"font-medium font-mono text-[10px] text-gray-700\">\n {f.value}\n </span>\n </div>\n ))}\n </div>\n </m.div>\n )\n })}\n </div>\n\n {/* Footer */}\n <div className=\"border-gray-100 border-t bg-gray-50/60 px-4 py-2\">\n <p className=\"text-center text-[9px] text-gray-400\">\n AES-256 at rest {\"\\u2022\"} TLS 1.3 in transit {\"\\u2022\"} End-to-end encrypted\n </p>\n </div>\n </div>\n </LazyMotion>\n )\n}\n"]}
|
package/dist/chunk-RTK7R4KZ.js
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { cn } from './chunk-GZNLQE3I.js';
|
|
3
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
-
|
|
5
|
-
var ROW_1 = [
|
|
6
|
-
{ name: "TRP", icon: "T" },
|
|
7
|
-
{ name: "TRISA", icon: "R" },
|
|
8
|
-
{ name: "OpenVASP", icon: "O" },
|
|
9
|
-
{ name: "Sygna", icon: "S" },
|
|
10
|
-
{ name: "Notabene", icon: "N" },
|
|
11
|
-
{ name: "Sumsub", icon: "Su" },
|
|
12
|
-
{ name: "Chainalysis", icon: "C" },
|
|
13
|
-
{ name: "Elliptic", icon: "E" }
|
|
14
|
-
];
|
|
15
|
-
var ROW_2 = [
|
|
16
|
-
{ name: "Shyft", icon: "Sh" },
|
|
17
|
-
{ name: "Coinfirm", icon: "Co" },
|
|
18
|
-
{ name: "CipherTrace", icon: "Ci" },
|
|
19
|
-
{ name: "VerifyVASP", icon: "V" },
|
|
20
|
-
{ name: "Crystal", icon: "Cr" },
|
|
21
|
-
{ name: "TRM Labs", icon: "TL" },
|
|
22
|
-
{ name: "Merkle", icon: "M" },
|
|
23
|
-
{ name: "Scorechain", icon: "Sc" }
|
|
24
|
-
];
|
|
25
|
-
function MarqueeRow({
|
|
26
|
-
items,
|
|
27
|
-
direction = "left",
|
|
28
|
-
duration = 25
|
|
29
|
-
}) {
|
|
30
|
-
const doubled = [...items, ...items];
|
|
31
|
-
return /* @__PURE__ */ jsxs("div", { className: "relative overflow-hidden", children: [
|
|
32
|
-
/* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-y-0 left-0 z-10 w-10 bg-gradient-to-r from-card/40 to-transparent" }),
|
|
33
|
-
/* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-y-0 right-0 z-10 w-10 bg-gradient-to-l from-card/40 to-transparent" }),
|
|
34
|
-
/* @__PURE__ */ jsx(
|
|
35
|
-
"div",
|
|
36
|
-
{
|
|
37
|
-
className: cn(
|
|
38
|
-
"flex w-max gap-3",
|
|
39
|
-
direction === "left" ? "animate-marquee-left" : "animate-marquee-right"
|
|
40
|
-
),
|
|
41
|
-
style: { animationDuration: `${duration}s` },
|
|
42
|
-
children: doubled.map((item, i) => /* @__PURE__ */ jsxs(
|
|
43
|
-
"div",
|
|
44
|
-
{
|
|
45
|
-
className: "flex shrink-0 items-center gap-2 rounded-full border border-gray-200 bg-white px-3.5 py-2 shadow-sm",
|
|
46
|
-
children: [
|
|
47
|
-
/* @__PURE__ */ jsx("div", { className: "flex size-6 items-center justify-center rounded-full bg-gray-100 font-bold text-[10px] text-gray-500", children: item.icon }),
|
|
48
|
-
/* @__PURE__ */ jsx("span", { className: "font-medium text-[12px] text-gray-700", children: item.name })
|
|
49
|
-
]
|
|
50
|
-
},
|
|
51
|
-
`${item.name}-${i}`
|
|
52
|
-
))
|
|
53
|
-
}
|
|
54
|
-
)
|
|
55
|
-
] });
|
|
56
|
-
}
|
|
57
|
-
function AnimationMultiProtocol({ className }) {
|
|
58
|
-
return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col justify-center gap-3", className), children: [
|
|
59
|
-
/* @__PURE__ */ jsx(MarqueeRow, { items: ROW_1, direction: "left", duration: 30 }),
|
|
60
|
-
/* @__PURE__ */ jsx(MarqueeRow, { items: ROW_2, direction: "right", duration: 28 })
|
|
61
|
-
] });
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
export { AnimationMultiProtocol };
|
|
65
|
-
//# sourceMappingURL=chunk-RTK7R4KZ.js.map
|
|
66
|
-
//# sourceMappingURL=chunk-RTK7R4KZ.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/animations/animation-multi-protocol.tsx"],"names":[],"mappings":"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","file":"chunk-RTK7R4KZ.js","sourcesContent":["\"use client\"\n\nimport { cn } from \"../lib/utils\"\n\ntype ProtocolItem = {\n name: string\n icon: string\n}\n\nconst ROW_1: ProtocolItem[] = [\n { name: \"TRP\", icon: \"T\" },\n { name: \"TRISA\", icon: \"R\" },\n { name: \"OpenVASP\", icon: \"O\" },\n { name: \"Sygna\", icon: \"S\" },\n { name: \"Notabene\", icon: \"N\" },\n { name: \"Sumsub\", icon: \"Su\" },\n { name: \"Chainalysis\", icon: \"C\" },\n { name: \"Elliptic\", icon: \"E\" },\n]\n\nconst ROW_2: ProtocolItem[] = [\n { name: \"Shyft\", icon: \"Sh\" },\n { name: \"Coinfirm\", icon: \"Co\" },\n { name: \"CipherTrace\", icon: \"Ci\" },\n { name: \"VerifyVASP\", icon: \"V\" },\n { name: \"Crystal\", icon: \"Cr\" },\n { name: \"TRM Labs\", icon: \"TL\" },\n { name: \"Merkle\", icon: \"M\" },\n { name: \"Scorechain\", icon: \"Sc\" },\n]\n\nfunction MarqueeRow({\n items,\n direction = \"left\",\n duration = 25,\n}: {\n items: ProtocolItem[]\n direction?: \"left\" | \"right\"\n duration?: number\n}) {\n const doubled = [...items, ...items]\n\n return (\n <div className=\"relative overflow-hidden\">\n <div className=\"pointer-events-none absolute inset-y-0 left-0 z-10 w-10 bg-gradient-to-r from-card/40 to-transparent\" />\n <div className=\"pointer-events-none absolute inset-y-0 right-0 z-10 w-10 bg-gradient-to-l from-card/40 to-transparent\" />\n\n <div\n className={cn(\n \"flex w-max gap-3\",\n direction === \"left\" ? \"animate-marquee-left\" : \"animate-marquee-right\",\n )}\n style={{ animationDuration: `${duration}s` }}\n >\n {doubled.map((item, i) => (\n <div\n key={`${item.name}-${i}`}\n className=\"flex shrink-0 items-center gap-2 rounded-full border border-gray-200 bg-white px-3.5 py-2 shadow-sm\"\n >\n <div className=\"flex size-6 items-center justify-center rounded-full bg-gray-100 font-bold text-[10px] text-gray-500\">\n {item.icon}\n </div>\n <span className=\"font-medium text-[12px] text-gray-700\">{item.name}</span>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nexport default function AnimationMultiProtocol({ className }: { className?: string }) {\n return (\n <div className={cn(\"flex flex-col justify-center gap-3\", className)}>\n <MarqueeRow items={ROW_1} direction=\"left\" duration={30} />\n <MarqueeRow items={ROW_2} direction=\"right\" duration={28} />\n </div>\n )\n}\n"]}
|
package/dist/chunk-RZZTDJHG.js
DELETED
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { useCycleIndex } from './chunk-6RWCZUAD.js';
|
|
3
|
-
import { cn } from './chunk-GZNLQE3I.js';
|
|
4
|
-
import { ShieldCheck, AlertTriangle } from 'lucide-react';
|
|
5
|
-
import { LazyMotion, domAnimation, m } from 'motion/react';
|
|
6
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
7
|
-
|
|
8
|
-
var RULES = [
|
|
9
|
-
{
|
|
10
|
-
id: "CR-001",
|
|
11
|
-
name: "High-value transfer flag",
|
|
12
|
-
condition: "IF amount > USD 50,000",
|
|
13
|
-
action: "THEN escalate to senior analyst",
|
|
14
|
-
status: "active",
|
|
15
|
-
triggers: "142 this month"
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
id: "CR-007",
|
|
19
|
-
name: "Grey-list jurisdiction",
|
|
20
|
-
condition: "IF jurisdiction IN fatf_grey_list",
|
|
21
|
-
action: "THEN apply enhanced due diligence",
|
|
22
|
-
status: "triggered",
|
|
23
|
-
triggers: "28 this month"
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
id: "CR-012",
|
|
27
|
-
name: "Repeat counterparty check",
|
|
28
|
-
condition: "IF counterparty_txns > 5 in 24h",
|
|
29
|
-
action: "THEN flag for velocity review",
|
|
30
|
-
status: "active",
|
|
31
|
-
triggers: "9 this month"
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
id: "CR-019",
|
|
35
|
-
name: "New VASP verification",
|
|
36
|
-
condition: "IF counterparty.first_seen < 30d",
|
|
37
|
-
action: "THEN require manual VASP check",
|
|
38
|
-
status: "active",
|
|
39
|
-
triggers: "67 this month"
|
|
40
|
-
}
|
|
41
|
-
];
|
|
42
|
-
var statusStyle = {
|
|
43
|
-
active: { bg: "bg-emerald-50 text-emerald-700", label: "Active" },
|
|
44
|
-
triggered: { bg: "bg-amber-50 text-amber-700", label: "Triggered" },
|
|
45
|
-
paused: { bg: "bg-gray-100 text-gray-500", label: "Paused" }
|
|
46
|
-
};
|
|
47
|
-
function AnimationCustomRules({ className }) {
|
|
48
|
-
const [containerRef, activeIdx] = useCycleIndex(RULES.length, 3200);
|
|
49
|
-
return /* @__PURE__ */ jsx(LazyMotion, { features: domAnimation, children: /* @__PURE__ */ jsxs("div", { ref: containerRef, className: cn("flex flex-col p-5", className), children: [
|
|
50
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
51
|
-
/* @__PURE__ */ jsxs("div", { children: [
|
|
52
|
-
/* @__PURE__ */ jsx("p", { className: "font-semibold text-[15px] text-foreground", children: "Custom Rules" }),
|
|
53
|
-
/* @__PURE__ */ jsxs("p", { className: "text-[12px] text-gray-400", children: [
|
|
54
|
-
RULES.length,
|
|
55
|
-
" rules configured"
|
|
56
|
-
] })
|
|
57
|
-
] }),
|
|
58
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 rounded-full bg-emerald-50 px-2.5 py-1", children: [
|
|
59
|
-
/* @__PURE__ */ jsx(ShieldCheck, { className: "size-3 text-emerald-600" }),
|
|
60
|
-
/* @__PURE__ */ jsx("span", { className: "font-semibold text-[11px] text-emerald-700", children: "All active" })
|
|
61
|
-
] })
|
|
62
|
-
] }),
|
|
63
|
-
/* @__PURE__ */ jsx("div", { className: "mt-4 space-y-2", children: RULES.map((rule, i) => {
|
|
64
|
-
const st = statusStyle[rule.status];
|
|
65
|
-
const isActive = i === activeIdx;
|
|
66
|
-
return /* @__PURE__ */ jsxs(
|
|
67
|
-
m.div,
|
|
68
|
-
{
|
|
69
|
-
animate: {
|
|
70
|
-
borderColor: isActive ? "#00D4FF" : "#f3f4f6",
|
|
71
|
-
boxShadow: isActive ? "0 0 0 1px rgba(0,212,255,0.15)" : "none"
|
|
72
|
-
},
|
|
73
|
-
transition: { duration: 0.3 },
|
|
74
|
-
className: "rounded-lg border bg-white px-3 py-2.5",
|
|
75
|
-
children: [
|
|
76
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
77
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
78
|
-
/* @__PURE__ */ jsx("span", { className: "font-bold font-mono text-[10px] text-gray-400", children: rule.id }),
|
|
79
|
-
/* @__PURE__ */ jsx("span", { className: "font-semibold text-[12px] text-gray-800", children: rule.name })
|
|
80
|
-
] }),
|
|
81
|
-
/* @__PURE__ */ jsx("span", { className: cn("rounded-full px-2 py-0.5 font-semibold text-[10px]", st.bg), children: st.label })
|
|
82
|
-
] }),
|
|
83
|
-
isActive && /* @__PURE__ */ jsxs(
|
|
84
|
-
m.div,
|
|
85
|
-
{
|
|
86
|
-
initial: { opacity: 0, height: 0 },
|
|
87
|
-
animate: { opacity: 1, height: "auto" },
|
|
88
|
-
transition: { duration: 0.25 },
|
|
89
|
-
className: "mt-2 space-y-1 border-gray-100 border-t pt-2",
|
|
90
|
-
children: [
|
|
91
|
-
/* @__PURE__ */ jsx("p", { className: "font-mono text-[#0099BB] text-[10px]", children: rule.condition }),
|
|
92
|
-
/* @__PURE__ */ jsx("p", { className: "font-mono text-[10px] text-gray-600", children: rule.action }),
|
|
93
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 pt-1", children: [
|
|
94
|
-
/* @__PURE__ */ jsx(AlertTriangle, { className: "size-2.5 text-gray-400" }),
|
|
95
|
-
/* @__PURE__ */ jsx("span", { className: "text-[10px] text-gray-400", children: rule.triggers })
|
|
96
|
-
] })
|
|
97
|
-
]
|
|
98
|
-
}
|
|
99
|
-
)
|
|
100
|
-
]
|
|
101
|
-
},
|
|
102
|
-
rule.id
|
|
103
|
-
);
|
|
104
|
-
}) })
|
|
105
|
-
] }) });
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
export { AnimationCustomRules };
|
|
109
|
-
//# sourceMappingURL=chunk-RZZTDJHG.js.map
|
|
110
|
-
//# sourceMappingURL=chunk-RZZTDJHG.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/animations/animation-custom-rules.tsx"],"names":[],"mappings":"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","file":"chunk-RZZTDJHG.js","sourcesContent":["\"use client\"\n\nimport { AlertTriangle, ShieldCheck } from \"lucide-react\"\nimport { domAnimation, LazyMotion, m } from \"motion/react\"\n\nimport { useCycleIndex } from \"../hooks/use-cycle-index\"\n\nimport { cn } from \"../lib/utils\"\n\ntype Rule = {\n id: string\n name: string\n condition: string\n action: string\n status: \"active\" | \"triggered\" | \"paused\"\n triggers: string\n}\n\nconst RULES: Rule[] = [\n {\n id: \"CR-001\",\n name: \"High-value transfer flag\",\n condition: \"IF amount > USD 50,000\",\n action: \"THEN escalate to senior analyst\",\n status: \"active\",\n triggers: \"142 this month\",\n },\n {\n id: \"CR-007\",\n name: \"Grey-list jurisdiction\",\n condition: \"IF jurisdiction IN fatf_grey_list\",\n action: \"THEN apply enhanced due diligence\",\n status: \"triggered\",\n triggers: \"28 this month\",\n },\n {\n id: \"CR-012\",\n name: \"Repeat counterparty check\",\n condition: \"IF counterparty_txns > 5 in 24h\",\n action: \"THEN flag for velocity review\",\n status: \"active\",\n triggers: \"9 this month\",\n },\n {\n id: \"CR-019\",\n name: \"New VASP verification\",\n condition: \"IF counterparty.first_seen < 30d\",\n action: \"THEN require manual VASP check\",\n status: \"active\",\n triggers: \"67 this month\",\n },\n]\n\nconst statusStyle: Record<Rule[\"status\"], { bg: string; label: string }> = {\n active: { bg: \"bg-emerald-50 text-emerald-700\", label: \"Active\" },\n triggered: { bg: \"bg-amber-50 text-amber-700\", label: \"Triggered\" },\n paused: { bg: \"bg-gray-100 text-gray-500\", label: \"Paused\" },\n}\n\nexport default function AnimationCustomRules({ className }: { className?: string }) {\n const [containerRef, activeIdx] = useCycleIndex(RULES.length, 3200)\n\n return (\n <LazyMotion features={domAnimation}>\n <div ref={containerRef} className={cn(\"flex flex-col p-5\", className)}>\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"font-semibold text-[15px] text-foreground\">Custom Rules</p>\n <p className=\"text-[12px] text-gray-400\">{RULES.length} rules configured</p>\n </div>\n <div className=\"flex items-center gap-1.5 rounded-full bg-emerald-50 px-2.5 py-1\">\n <ShieldCheck className=\"size-3 text-emerald-600\" />\n <span className=\"font-semibold text-[11px] text-emerald-700\">All active</span>\n </div>\n </div>\n\n {/* Rule list */}\n <div className=\"mt-4 space-y-2\">\n {RULES.map((rule, i) => {\n const st = statusStyle[rule.status]\n const isActive = i === activeIdx\n return (\n <m.div\n key={rule.id}\n animate={{\n borderColor: isActive ? \"#00D4FF\" : \"#f3f4f6\",\n boxShadow: isActive ? \"0 0 0 1px rgba(0,212,255,0.15)\" : \"none\",\n }}\n transition={{ duration: 0.3 }}\n className=\"rounded-lg border bg-white px-3 py-2.5\"\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <span className=\"font-bold font-mono text-[10px] text-gray-400\">{rule.id}</span>\n <span className=\"font-semibold text-[12px] text-gray-800\">{rule.name}</span>\n </div>\n <span className={cn(\"rounded-full px-2 py-0.5 font-semibold text-[10px]\", st.bg)}>\n {st.label}\n </span>\n </div>\n\n {isActive && (\n <m.div\n initial={{ opacity: 0, height: 0 }}\n animate={{ opacity: 1, height: \"auto\" }}\n transition={{ duration: 0.25 }}\n className=\"mt-2 space-y-1 border-gray-100 border-t pt-2\"\n >\n <p className=\"font-mono text-[#0099BB] text-[10px]\">{rule.condition}</p>\n <p className=\"font-mono text-[10px] text-gray-600\">{rule.action}</p>\n <div className=\"flex items-center gap-1 pt-1\">\n <AlertTriangle className=\"size-2.5 text-gray-400\" />\n <span className=\"text-[10px] text-gray-400\">{rule.triggers}</span>\n </div>\n </m.div>\n )}\n </m.div>\n )\n })}\n </div>\n </div>\n </LazyMotion>\n )\n}\n"]}
|