@cogentic-co/ds 0.5.5 → 0.6.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/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 +34 -52
- package/dist/index.js +109 -168
- 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-SNOJLZP4.js
DELETED
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { cn } from './chunk-GZNLQE3I.js';
|
|
3
|
-
import { FileText, AlertTriangle, CheckCircle2, ChevronRight } from 'lucide-react';
|
|
4
|
-
import { LazyMotion, domAnimation, m } from 'motion/react';
|
|
5
|
-
import { memo, useRef, useEffect, useState } from 'react';
|
|
6
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
7
|
-
|
|
8
|
-
var AUDIT_SEQUENCES = [
|
|
9
|
-
[
|
|
10
|
-
{
|
|
11
|
-
timestamp: "14:32:01",
|
|
12
|
-
text: "Transfer TXN-0847 received \u2014 compliance check initiated",
|
|
13
|
-
type: "log"
|
|
14
|
-
},
|
|
15
|
-
{ timestamp: "14:32:02", text: "SOP AML/CFT Policy v3.2 applied", type: "log" },
|
|
16
|
-
{
|
|
17
|
-
timestamp: "14:32:03",
|
|
18
|
-
text: "Travel Rule verification \u2014 VASP identity confirmed",
|
|
19
|
-
type: "success"
|
|
20
|
-
},
|
|
21
|
-
{ timestamp: "14:32:04", text: "Sanctions screening \u2014 12,847 entries checked", type: "log" },
|
|
22
|
-
{
|
|
23
|
-
timestamp: "14:32:05",
|
|
24
|
-
text: "No sanctions matches found \u2014 OFAC, EU, UN clear",
|
|
25
|
-
type: "success"
|
|
26
|
-
},
|
|
27
|
-
{ timestamp: "14:32:06", text: "PEP screening \u2014 2 beneficial owners cleared", type: "success" },
|
|
28
|
-
{ timestamp: "14:32:07", text: "Risk score calculated: 18/100 \u2014 Low", type: "success" },
|
|
29
|
-
{ timestamp: "14:32:08", text: "Decision: APPROVED \u2014 all checks passed", type: "success" },
|
|
30
|
-
{
|
|
31
|
-
timestamp: "14:32:08",
|
|
32
|
-
text: "Compliance report generated \u2014 ref CR-2024-0847",
|
|
33
|
-
type: "report"
|
|
34
|
-
}
|
|
35
|
-
],
|
|
36
|
-
[
|
|
37
|
-
{
|
|
38
|
-
timestamp: "14:33:12",
|
|
39
|
-
text: "Transfer TXN-0846 received \u2014 compliance check initiated",
|
|
40
|
-
type: "log"
|
|
41
|
-
},
|
|
42
|
-
{ timestamp: "14:33:13", text: "SOP Enhanced Due Diligence v2.1 applied", type: "log" },
|
|
43
|
-
{
|
|
44
|
-
timestamp: "14:33:14",
|
|
45
|
-
text: "Travel Rule verification \u2014 counterparty VASP verified",
|
|
46
|
-
type: "success"
|
|
47
|
-
},
|
|
48
|
-
{ timestamp: "14:33:15", text: "High-risk corridor detected (HK \u2192 GB)", type: "warning" },
|
|
49
|
-
{
|
|
50
|
-
timestamp: "14:33:16",
|
|
51
|
-
text: "Enhanced due diligence triggered \u2014 FATF grey list",
|
|
52
|
-
type: "warning"
|
|
53
|
-
},
|
|
54
|
-
{ timestamp: "14:33:17", text: "Amount exceeds USD 100K threshold", type: "warning" },
|
|
55
|
-
{ timestamp: "14:33:18", text: "Risk score calculated: 72/100 \u2014 High", type: "warning" },
|
|
56
|
-
{ timestamp: "14:33:19", text: "Decision: FLAGGED \u2014 manual review required", type: "warning" },
|
|
57
|
-
{
|
|
58
|
-
timestamp: "14:33:19",
|
|
59
|
-
text: "Escalation report generated \u2014 ref ESC-2024-0846",
|
|
60
|
-
type: "report"
|
|
61
|
-
}
|
|
62
|
-
],
|
|
63
|
-
[
|
|
64
|
-
{
|
|
65
|
-
timestamp: "14:34:05",
|
|
66
|
-
text: "Transfer TXN-0845 received \u2014 compliance check initiated",
|
|
67
|
-
type: "log"
|
|
68
|
-
},
|
|
69
|
-
{ timestamp: "14:34:06", text: "SOP MiCA Compliance v1.4 applied", type: "log" },
|
|
70
|
-
{
|
|
71
|
-
timestamp: "14:34:07",
|
|
72
|
-
text: "Travel Rule verification \u2014 both VASPs registered",
|
|
73
|
-
type: "success"
|
|
74
|
-
},
|
|
75
|
-
{ timestamp: "14:34:08", text: "AE\u2192NL corridor approved \u2014 MiCA compliant", type: "success" },
|
|
76
|
-
{ timestamp: "14:34:09", text: "Sanctions screening \u2014 9,234 entries checked", type: "log" },
|
|
77
|
-
{ timestamp: "14:34:10", text: "All sanctions lists clear", type: "success" },
|
|
78
|
-
{ timestamp: "14:34:11", text: "Below EUR 10K threshold \u2014 no STR required", type: "success" },
|
|
79
|
-
{ timestamp: "14:34:12", text: "Risk score calculated: 12/100 \u2014 Low", type: "success" },
|
|
80
|
-
{
|
|
81
|
-
timestamp: "14:34:12",
|
|
82
|
-
text: "Compliance report generated \u2014 ref CR-2024-0845",
|
|
83
|
-
type: "report"
|
|
84
|
-
}
|
|
85
|
-
]
|
|
86
|
-
];
|
|
87
|
-
var ENTRY_DELAY = 450;
|
|
88
|
-
var iconMap = {
|
|
89
|
-
log: ChevronRight,
|
|
90
|
-
success: CheckCircle2,
|
|
91
|
-
warning: AlertTriangle,
|
|
92
|
-
report: FileText
|
|
93
|
-
};
|
|
94
|
-
var colorMap = {
|
|
95
|
-
log: "text-foreground/80",
|
|
96
|
-
success: "text-emerald-600",
|
|
97
|
-
warning: "text-amber-600",
|
|
98
|
-
report: "text-violet-600"
|
|
99
|
-
};
|
|
100
|
-
var TypeWriter = memo(function TypeWriter2({ text }) {
|
|
101
|
-
const spanRef = useRef(null);
|
|
102
|
-
useEffect(() => {
|
|
103
|
-
const el = spanRef.current;
|
|
104
|
-
if (!el) return;
|
|
105
|
-
let count = 0;
|
|
106
|
-
let raf;
|
|
107
|
-
function tick() {
|
|
108
|
-
count = Math.min(count + 3, text.length);
|
|
109
|
-
el.textContent = count < text.length ? `${text.slice(0, count)}\u258C` : text;
|
|
110
|
-
if (count < text.length) raf = requestAnimationFrame(tick);
|
|
111
|
-
}
|
|
112
|
-
raf = requestAnimationFrame(tick);
|
|
113
|
-
return () => cancelAnimationFrame(raf);
|
|
114
|
-
}, [text]);
|
|
115
|
-
return /* @__PURE__ */ jsx("span", { ref: spanRef });
|
|
116
|
-
});
|
|
117
|
-
function AnimationAuditTrail({ className }) {
|
|
118
|
-
const [seqIndex, setSeqIndex] = useState(0);
|
|
119
|
-
const [visibleEntries, setVisibleEntries] = useState([]);
|
|
120
|
-
const [entryCount, setEntryCount] = useState(0);
|
|
121
|
-
const scrollRef = useRef(null);
|
|
122
|
-
const timeoutRef = useRef(null);
|
|
123
|
-
const sequence = AUDIT_SEQUENCES[seqIndex];
|
|
124
|
-
useEffect(() => {
|
|
125
|
-
const el = scrollRef.current;
|
|
126
|
-
if (!el) return;
|
|
127
|
-
requestAnimationFrame(() => {
|
|
128
|
-
el.scrollTop = el.scrollHeight;
|
|
129
|
-
});
|
|
130
|
-
}, []);
|
|
131
|
-
useEffect(() => {
|
|
132
|
-
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
133
|
-
setVisibleEntries([]);
|
|
134
|
-
setEntryCount(0);
|
|
135
|
-
const seq = AUDIT_SEQUENCES[seqIndex];
|
|
136
|
-
function streamEntry(idx) {
|
|
137
|
-
if (idx >= seq.length) {
|
|
138
|
-
timeoutRef.current = setTimeout(() => {
|
|
139
|
-
setSeqIndex((prev) => (prev + 1) % AUDIT_SEQUENCES.length);
|
|
140
|
-
}, 2e3);
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
timeoutRef.current = setTimeout(() => {
|
|
144
|
-
setVisibleEntries((prev) => [...prev, seq[idx]]);
|
|
145
|
-
setEntryCount((c) => c + 1);
|
|
146
|
-
streamEntry(idx + 1);
|
|
147
|
-
}, ENTRY_DELAY);
|
|
148
|
-
}
|
|
149
|
-
const start = setTimeout(() => streamEntry(0), 300);
|
|
150
|
-
return () => {
|
|
151
|
-
clearTimeout(start);
|
|
152
|
-
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
153
|
-
};
|
|
154
|
-
}, [seqIndex]);
|
|
155
|
-
return /* @__PURE__ */ jsx(LazyMotion, { features: domAnimation, children: /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col", className), children: [
|
|
156
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 border-gray-100 border-b bg-gray-50/80 px-3 py-1.5", children: [
|
|
157
|
-
/* @__PURE__ */ jsxs("span", { className: "relative flex size-1.5", children: [
|
|
158
|
-
/* @__PURE__ */ jsx("span", { className: "absolute inline-flex size-full animate-ping rounded-full bg-emerald-400 opacity-75" }),
|
|
159
|
-
/* @__PURE__ */ jsx("span", { className: "relative inline-flex size-1.5 rounded-full bg-emerald-500" })
|
|
160
|
-
] }),
|
|
161
|
-
/* @__PURE__ */ jsx("span", { className: "font-semibold text-[10px] text-gray-700", children: "Audit Log" }),
|
|
162
|
-
/* @__PURE__ */ jsxs("span", { className: "ml-auto font-mono text-[10px] text-gray-400", children: [
|
|
163
|
-
entryCount,
|
|
164
|
-
" entries"
|
|
165
|
-
] })
|
|
166
|
-
] }),
|
|
167
|
-
/* @__PURE__ */ jsx("div", { ref: scrollRef, className: "scrollbar-none flex-1 overflow-y-auto px-3 py-2", children: /* @__PURE__ */ jsxs("div", { className: "space-y-0.5", children: [
|
|
168
|
-
visibleEntries.map((entry, i) => {
|
|
169
|
-
const Icon = iconMap[entry.type];
|
|
170
|
-
return /* @__PURE__ */ jsxs(
|
|
171
|
-
m.div,
|
|
172
|
-
{
|
|
173
|
-
initial: { opacity: 0, y: 4 },
|
|
174
|
-
animate: { opacity: 1, y: 0 },
|
|
175
|
-
transition: { duration: 0.25, ease: "easeOut" },
|
|
176
|
-
className: "flex items-start gap-1.5 font-mono text-[10px] leading-relaxed",
|
|
177
|
-
children: [
|
|
178
|
-
/* @__PURE__ */ jsx("span", { className: "shrink-0 text-foreground", children: entry.timestamp }),
|
|
179
|
-
/* @__PURE__ */ jsx(Icon, { className: cn("mt-0.5 size-2.5 shrink-0", colorMap[entry.type]) }),
|
|
180
|
-
/* @__PURE__ */ jsx("span", { className: cn(colorMap[entry.type]), children: /* @__PURE__ */ jsx(TypeWriter, { text: entry.text }) })
|
|
181
|
-
]
|
|
182
|
-
},
|
|
183
|
-
`${seqIndex}-${i}`
|
|
184
|
-
);
|
|
185
|
-
}),
|
|
186
|
-
visibleEntries.length < sequence.length && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 font-mono text-[10px] text-gray-300", children: [
|
|
187
|
-
/* @__PURE__ */ jsx("span", { className: "shrink-0 text-transparent", children: "00:00:00" }),
|
|
188
|
-
/* @__PURE__ */ jsx(ChevronRight, { className: "size-2.5 shrink-0" }),
|
|
189
|
-
/* @__PURE__ */ jsx("span", { className: "animate-pulse", children: "\u258C" })
|
|
190
|
-
] })
|
|
191
|
-
] }) })
|
|
192
|
-
] }) });
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
export { AnimationAuditTrail };
|
|
196
|
-
//# sourceMappingURL=chunk-SNOJLZP4.js.map
|
|
197
|
-
//# sourceMappingURL=chunk-SNOJLZP4.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/animations/animation-audit-trail.tsx"],"names":["TypeWriter"],"mappings":"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","file":"chunk-SNOJLZP4.js","sourcesContent":["\"use client\"\n\nimport { AlertTriangle, CheckCircle2, ChevronRight, FileText } from \"lucide-react\"\nimport { domAnimation, LazyMotion, m } from \"motion/react\"\nimport { memo, useEffect, useRef, useState } from \"react\"\n\nimport { cn } from \"../lib/utils\"\n\ntype EntryType = \"log\" | \"success\" | \"warning\" | \"report\"\n\ninterface AuditEntry {\n timestamp: string\n text: string\n type: EntryType\n}\n\nconst AUDIT_SEQUENCES: AuditEntry[][] = [\n [\n {\n timestamp: \"14:32:01\",\n text: \"Transfer TXN-0847 received — compliance check initiated\",\n type: \"log\",\n },\n { timestamp: \"14:32:02\", text: \"SOP AML/CFT Policy v3.2 applied\", type: \"log\" },\n {\n timestamp: \"14:32:03\",\n text: \"Travel Rule verification — VASP identity confirmed\",\n type: \"success\",\n },\n { timestamp: \"14:32:04\", text: \"Sanctions screening — 12,847 entries checked\", type: \"log\" },\n {\n timestamp: \"14:32:05\",\n text: \"No sanctions matches found — OFAC, EU, UN clear\",\n type: \"success\",\n },\n { timestamp: \"14:32:06\", text: \"PEP screening — 2 beneficial owners cleared\", type: \"success\" },\n { timestamp: \"14:32:07\", text: \"Risk score calculated: 18/100 — Low\", type: \"success\" },\n { timestamp: \"14:32:08\", text: \"Decision: APPROVED — all checks passed\", type: \"success\" },\n {\n timestamp: \"14:32:08\",\n text: \"Compliance report generated — ref CR-2024-0847\",\n type: \"report\",\n },\n ],\n [\n {\n timestamp: \"14:33:12\",\n text: \"Transfer TXN-0846 received — compliance check initiated\",\n type: \"log\",\n },\n { timestamp: \"14:33:13\", text: \"SOP Enhanced Due Diligence v2.1 applied\", type: \"log\" },\n {\n timestamp: \"14:33:14\",\n text: \"Travel Rule verification — counterparty VASP verified\",\n type: \"success\",\n },\n { timestamp: \"14:33:15\", text: \"High-risk corridor detected (HK → GB)\", type: \"warning\" },\n {\n timestamp: \"14:33:16\",\n text: \"Enhanced due diligence triggered — FATF grey list\",\n type: \"warning\",\n },\n { timestamp: \"14:33:17\", text: \"Amount exceeds USD 100K threshold\", type: \"warning\" },\n { timestamp: \"14:33:18\", text: \"Risk score calculated: 72/100 — High\", type: \"warning\" },\n { timestamp: \"14:33:19\", text: \"Decision: FLAGGED — manual review required\", type: \"warning\" },\n {\n timestamp: \"14:33:19\",\n text: \"Escalation report generated — ref ESC-2024-0846\",\n type: \"report\",\n },\n ],\n [\n {\n timestamp: \"14:34:05\",\n text: \"Transfer TXN-0845 received — compliance check initiated\",\n type: \"log\",\n },\n { timestamp: \"14:34:06\", text: \"SOP MiCA Compliance v1.4 applied\", type: \"log\" },\n {\n timestamp: \"14:34:07\",\n text: \"Travel Rule verification — both VASPs registered\",\n type: \"success\",\n },\n { timestamp: \"14:34:08\", text: \"AE→NL corridor approved — MiCA compliant\", type: \"success\" },\n { timestamp: \"14:34:09\", text: \"Sanctions screening — 9,234 entries checked\", type: \"log\" },\n { timestamp: \"14:34:10\", text: \"All sanctions lists clear\", type: \"success\" },\n { timestamp: \"14:34:11\", text: \"Below EUR 10K threshold — no STR required\", type: \"success\" },\n { timestamp: \"14:34:12\", text: \"Risk score calculated: 12/100 — Low\", type: \"success\" },\n {\n timestamp: \"14:34:12\",\n text: \"Compliance report generated — ref CR-2024-0845\",\n type: \"report\",\n },\n ],\n]\n\nconst ENTRY_DELAY = 450\n\nconst iconMap: Record<EntryType, typeof CheckCircle2> = {\n log: ChevronRight,\n success: CheckCircle2,\n warning: AlertTriangle,\n report: FileText,\n}\n\nconst colorMap: Record<EntryType, string> = {\n log: \"text-foreground/80\",\n success: \"text-emerald-600\",\n warning: \"text-amber-600\",\n report: \"text-violet-600\",\n}\n\nconst TypeWriter = memo(function TypeWriter({ text }: { text: string }) {\n const spanRef = useRef<HTMLSpanElement>(null)\n\n useEffect(() => {\n const el = spanRef.current\n if (!el) return\n let count = 0\n let raf: number\n\n function tick() {\n count = Math.min(count + 3, text.length)\n el!.textContent = count < text.length ? `${text.slice(0, count)}▌` : text\n if (count < text.length) raf = requestAnimationFrame(tick)\n }\n\n raf = requestAnimationFrame(tick)\n return () => cancelAnimationFrame(raf)\n }, [text])\n\n return <span ref={spanRef} />\n})\n\nexport default function AnimationAuditTrail({ className }: { className?: string }) {\n const [seqIndex, setSeqIndex] = useState(0)\n const [visibleEntries, setVisibleEntries] = useState<AuditEntry[]>([])\n const [entryCount, setEntryCount] = useState(0)\n const scrollRef = useRef<HTMLDivElement>(null)\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const sequence = AUDIT_SEQUENCES[seqIndex]\n\n // Auto-scroll (deferred to avoid layout thrashing)\n useEffect(() => {\n const el = scrollRef.current\n if (!el) return\n requestAnimationFrame(() => {\n el.scrollTop = el.scrollHeight\n })\n }, [])\n\n useEffect(() => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n\n // Clear immediately so stale entries don't flash with new keys\n setVisibleEntries([])\n setEntryCount(0)\n\n const seq = AUDIT_SEQUENCES[seqIndex]\n\n function streamEntry(idx: number) {\n if (idx >= seq.length) {\n timeoutRef.current = setTimeout(() => {\n setSeqIndex((prev) => (prev + 1) % AUDIT_SEQUENCES.length)\n }, 2000)\n return\n }\n\n timeoutRef.current = setTimeout(() => {\n setVisibleEntries((prev) => [...prev, seq[idx]])\n setEntryCount((c) => c + 1)\n streamEntry(idx + 1)\n }, ENTRY_DELAY)\n }\n\n const start = setTimeout(() => streamEntry(0), 300)\n return () => {\n clearTimeout(start)\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n }\n }, [seqIndex])\n\n return (\n <LazyMotion features={domAnimation}>\n <div className={cn(\"flex flex-col\", className)}>\n {/* Mini header */}\n <div className=\"flex items-center gap-2 border-gray-100 border-b bg-gray-50/80 px-3 py-1.5\">\n <span className=\"relative flex size-1.5\">\n <span className=\"absolute inline-flex size-full animate-ping rounded-full bg-emerald-400 opacity-75\" />\n <span className=\"relative inline-flex size-1.5 rounded-full bg-emerald-500\" />\n </span>\n <span className=\"font-semibold text-[10px] text-gray-700\">Audit Log</span>\n <span className=\"ml-auto font-mono text-[10px] text-gray-400\">{entryCount} entries</span>\n </div>\n\n {/* Log entries */}\n <div ref={scrollRef} className=\"scrollbar-none flex-1 overflow-y-auto px-3 py-2\">\n <div className=\"space-y-0.5\">\n {visibleEntries.map((entry, i) => {\n const Icon = iconMap[entry.type]\n return (\n <m.div\n key={`${seqIndex}-${i}`}\n initial={{ opacity: 0, y: 4 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.25, ease: \"easeOut\" }}\n className=\"flex items-start gap-1.5 font-mono text-[10px] leading-relaxed\"\n >\n <span className=\"shrink-0 text-foreground\">{entry.timestamp}</span>\n <Icon className={cn(\"mt-0.5 size-2.5 shrink-0\", colorMap[entry.type])} />\n <span className={cn(colorMap[entry.type])}>\n <TypeWriter text={entry.text} />\n </span>\n </m.div>\n )\n })}\n {visibleEntries.length < sequence.length && (\n <div className=\"flex items-center gap-1.5 font-mono text-[10px] text-gray-300\">\n <span className=\"shrink-0 text-transparent\">00:00:00</span>\n <ChevronRight className=\"size-2.5 shrink-0\" />\n <span className=\"animate-pulse\">▌</span>\n </div>\n )}\n </div>\n </div>\n </div>\n </LazyMotion>\n )\n}\n"]}
|