@cogentic-co/ds 0.4.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.
Files changed (159) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +139 -0
  3. package/dist/animations/animation-ai-analysis.d.ts +7 -0
  4. package/dist/animations/animation-ai-analysis.js +7 -0
  5. package/dist/animations/animation-ai-analysis.js.map +1 -0
  6. package/dist/animations/animation-audit-trail.d.ts +7 -0
  7. package/dist/animations/animation-audit-trail.js +5 -0
  8. package/dist/animations/animation-audit-trail.js.map +1 -0
  9. package/dist/animations/animation-compliance-reports.d.ts +7 -0
  10. package/dist/animations/animation-compliance-reports.js +7 -0
  11. package/dist/animations/animation-compliance-reports.js.map +1 -0
  12. package/dist/animations/animation-custom-rules.d.ts +7 -0
  13. package/dist/animations/animation-custom-rules.js +7 -0
  14. package/dist/animations/animation-custom-rules.js.map +1 -0
  15. package/dist/animations/animation-jira-ticket.d.ts +7 -0
  16. package/dist/animations/animation-jira-ticket.js +6 -0
  17. package/dist/animations/animation-jira-ticket.js.map +1 -0
  18. package/dist/animations/animation-jurisdiction-detection.d.ts +7 -0
  19. package/dist/animations/animation-jurisdiction-detection.js +7 -0
  20. package/dist/animations/animation-jurisdiction-detection.js.map +1 -0
  21. package/dist/animations/animation-multi-protocol.d.ts +7 -0
  22. package/dist/animations/animation-multi-protocol.js +5 -0
  23. package/dist/animations/animation-multi-protocol.js.map +1 -0
  24. package/dist/animations/animation-pricing-preview.d.ts +16 -0
  25. package/dist/animations/animation-pricing-preview.js +7 -0
  26. package/dist/animations/animation-pricing-preview.js.map +1 -0
  27. package/dist/animations/animation-realtime-updates.d.ts +7 -0
  28. package/dist/animations/animation-realtime-updates.js +8 -0
  29. package/dist/animations/animation-realtime-updates.js.map +1 -0
  30. package/dist/animations/animation-rest-api.d.ts +7 -0
  31. package/dist/animations/animation-rest-api.js +5 -0
  32. package/dist/animations/animation-rest-api.js.map +1 -0
  33. package/dist/animations/animation-risk-scoring.d.ts +7 -0
  34. package/dist/animations/animation-risk-scoring.js +8 -0
  35. package/dist/animations/animation-risk-scoring.js.map +1 -0
  36. package/dist/animations/animation-sandbox.d.ts +7 -0
  37. package/dist/animations/animation-sandbox.js +5 -0
  38. package/dist/animations/animation-sandbox.js.map +1 -0
  39. package/dist/animations/animation-scheduled-reports.d.ts +7 -0
  40. package/dist/animations/animation-scheduled-reports.js +7 -0
  41. package/dist/animations/animation-scheduled-reports.js.map +1 -0
  42. package/dist/animations/animation-secure-messaging.d.ts +7 -0
  43. package/dist/animations/animation-secure-messaging.js +6 -0
  44. package/dist/animations/animation-secure-messaging.js.map +1 -0
  45. package/dist/animations/animation-slack-notification.d.ts +7 -0
  46. package/dist/animations/animation-slack-notification.js +6 -0
  47. package/dist/animations/animation-slack-notification.js.map +1 -0
  48. package/dist/animations/animation-sop-mapping.d.ts +7 -0
  49. package/dist/animations/animation-sop-mapping.js +5 -0
  50. package/dist/animations/animation-sop-mapping.js.map +1 -0
  51. package/dist/animations/animation-team-routing.d.ts +7 -0
  52. package/dist/animations/animation-team-routing.js +7 -0
  53. package/dist/animations/animation-team-routing.js.map +1 -0
  54. package/dist/animations/animation-teams-notification.d.ts +7 -0
  55. package/dist/animations/animation-teams-notification.js +6 -0
  56. package/dist/animations/animation-teams-notification.js.map +1 -0
  57. package/dist/animations/animation-vasp-identification.d.ts +7 -0
  58. package/dist/animations/animation-vasp-identification.js +7 -0
  59. package/dist/animations/animation-vasp-identification.js.map +1 -0
  60. package/dist/animations/animation-webhooks.d.ts +7 -0
  61. package/dist/animations/animation-webhooks.js +6 -0
  62. package/dist/animations/animation-webhooks.js.map +1 -0
  63. package/dist/blocks/auth-form.d.ts +18 -0
  64. package/dist/blocks/auth-form.js +7 -0
  65. package/dist/blocks/auth-form.js.map +1 -0
  66. package/dist/blocks/feature-section.d.ts +17 -0
  67. package/dist/blocks/feature-section.js +5 -0
  68. package/dist/blocks/feature-section.js.map +1 -0
  69. package/dist/blocks/hero-section.d.ts +19 -0
  70. package/dist/blocks/hero-section.js +5 -0
  71. package/dist/blocks/hero-section.js.map +1 -0
  72. package/dist/blocks/pricing-table.d.ts +24 -0
  73. package/dist/blocks/pricing-table.js +6 -0
  74. package/dist/blocks/pricing-table.js.map +1 -0
  75. package/dist/blocks/stat-card.d.ts +15 -0
  76. package/dist/blocks/stat-card.js +6 -0
  77. package/dist/blocks/stat-card.js.map +1 -0
  78. package/dist/card-Cumdyf_G.d.ts +15 -0
  79. package/dist/charts.d.ts +4 -0
  80. package/dist/charts.js +5 -0
  81. package/dist/charts.js.map +1 -0
  82. package/dist/chatbot.d.ts +280 -0
  83. package/dist/chatbot.js +2202 -0
  84. package/dist/chatbot.js.map +1 -0
  85. package/dist/chunk-4NEQV6H2.js +39 -0
  86. package/dist/chunk-4NEQV6H2.js.map +1 -0
  87. package/dist/chunk-4YD3YS4B.js +110 -0
  88. package/dist/chunk-4YD3YS4B.js.map +1 -0
  89. package/dist/chunk-5JLZ42JT.js +125 -0
  90. package/dist/chunk-5JLZ42JT.js.map +1 -0
  91. package/dist/chunk-5OOO6TRA.js +111 -0
  92. package/dist/chunk-5OOO6TRA.js.map +1 -0
  93. package/dist/chunk-65Z2VEKG.js +161 -0
  94. package/dist/chunk-65Z2VEKG.js.map +1 -0
  95. package/dist/chunk-6RWCZUAD.js +12 -0
  96. package/dist/chunk-6RWCZUAD.js.map +1 -0
  97. package/dist/chunk-7HRPF2N2.js +56 -0
  98. package/dist/chunk-7HRPF2N2.js.map +1 -0
  99. package/dist/chunk-BNFSXNP2.js +71 -0
  100. package/dist/chunk-BNFSXNP2.js.map +1 -0
  101. package/dist/chunk-BTFYV3TI.js +102 -0
  102. package/dist/chunk-BTFYV3TI.js.map +1 -0
  103. package/dist/chunk-BTZB4JRC.js +117 -0
  104. package/dist/chunk-BTZB4JRC.js.map +1 -0
  105. package/dist/chunk-BZSA47MS.js +121 -0
  106. package/dist/chunk-BZSA47MS.js.map +1 -0
  107. package/dist/chunk-CG5JA7FM.js +107 -0
  108. package/dist/chunk-CG5JA7FM.js.map +1 -0
  109. package/dist/chunk-EFLWU2JP.js +145 -0
  110. package/dist/chunk-EFLWU2JP.js.map +1 -0
  111. package/dist/chunk-F7REPQOA.js +93 -0
  112. package/dist/chunk-F7REPQOA.js.map +1 -0
  113. package/dist/chunk-FKPK3CB7.js +143 -0
  114. package/dist/chunk-FKPK3CB7.js.map +1 -0
  115. package/dist/chunk-GZNLQE3I.js +55 -0
  116. package/dist/chunk-GZNLQE3I.js.map +1 -0
  117. package/dist/chunk-H7VUIMEL.js +172 -0
  118. package/dist/chunk-H7VUIMEL.js.map +1 -0
  119. package/dist/chunk-HTYR73ON.js +161 -0
  120. package/dist/chunk-HTYR73ON.js.map +1 -0
  121. package/dist/chunk-I26ZXVSY.js +124 -0
  122. package/dist/chunk-I26ZXVSY.js.map +1 -0
  123. package/dist/chunk-IKATDPHG.js +92 -0
  124. package/dist/chunk-IKATDPHG.js.map +1 -0
  125. package/dist/chunk-KUOF3XRZ.js +108 -0
  126. package/dist/chunk-KUOF3XRZ.js.map +1 -0
  127. package/dist/chunk-LW6GAWZM.js +148 -0
  128. package/dist/chunk-LW6GAWZM.js.map +1 -0
  129. package/dist/chunk-N7PBUY7G.js +110 -0
  130. package/dist/chunk-N7PBUY7G.js.map +1 -0
  131. package/dist/chunk-NAPDFVBI.js +102 -0
  132. package/dist/chunk-NAPDFVBI.js.map +1 -0
  133. package/dist/chunk-RTK7R4KZ.js +66 -0
  134. package/dist/chunk-RTK7R4KZ.js.map +1 -0
  135. package/dist/chunk-RXV2XUDZ.js +31 -0
  136. package/dist/chunk-RXV2XUDZ.js.map +1 -0
  137. package/dist/chunk-RZZTDJHG.js +110 -0
  138. package/dist/chunk-RZZTDJHG.js.map +1 -0
  139. package/dist/chunk-SNOJLZP4.js +197 -0
  140. package/dist/chunk-SNOJLZP4.js.map +1 -0
  141. package/dist/chunk-TAPJEVUA.js +24 -0
  142. package/dist/chunk-TAPJEVUA.js.map +1 -0
  143. package/dist/chunk-U4EPKN7G.js +518 -0
  144. package/dist/chunk-U4EPKN7G.js.map +1 -0
  145. package/dist/chunk-VWSX75RB.js +202 -0
  146. package/dist/chunk-VWSX75RB.js.map +1 -0
  147. package/dist/chunk-XFWKI45G.js +800 -0
  148. package/dist/chunk-XFWKI45G.js.map +1 -0
  149. package/dist/chunk-XQYFQ6PU.js +77 -0
  150. package/dist/chunk-XQYFQ6PU.js.map +1 -0
  151. package/dist/index-CcPuHWa-.d.ts +118 -0
  152. package/dist/index.d.ts +1385 -0
  153. package/dist/index.js +8673 -0
  154. package/dist/index.js.map +1 -0
  155. package/dist/workflow.d.ts +165 -0
  156. package/dist/workflow.js +5 -0
  157. package/dist/workflow.js.map +1 -0
  158. package/package.json +157 -0
  159. package/src/styles/globals.css +211 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/animations/animation-teams-notification.tsx"],"names":[],"mappings":"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","file":"chunk-IKATDPHG.js","sourcesContent":["\"use client\"\n\nimport { motion } from \"motion/react\"\n\nimport { EASE_OUT } from \"../lib/animation\"\nimport { cn } from \"../lib/utils\"\n\nexport default function AnimationTeamsNotification({ className }: { className?: string }) {\n return (\n <div className={cn(\"flex flex-col bg-[#f5f5f5] p-4\", className)}>\n {/* Teams channel header */}\n <div className=\"flex items-center gap-2 pb-2.5\">\n <div className=\"flex size-5 items-center justify-center rounded bg-[#6264A7]\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\n <path d=\"M1 3H9M1 5H6M1 7H7\" stroke=\"white\" strokeWidth=\"1\" strokeLinecap=\"round\" />\n </svg>\n </div>\n <span className=\"font-semibold text-[13px] text-gray-900\">Compliance Reviews</span>\n </div>\n\n {/* Adaptive card message */}\n <motion.div\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.5, ease: EASE_OUT, delay: 0.3 }}\n className=\"rounded-lg bg-white shadow-sm\"\n >\n {/* Card header with accent */}\n <div className=\"h-1 rounded-t-lg bg-[#6264A7]\" />\n <div className=\"p-3.5\">\n <div className=\"flex items-center gap-2\">\n <div className=\"flex size-6 items-center justify-center rounded bg-gray-900\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M7 1L12 4V10L7 13L2 10V4L7 1Z\" stroke=\"#00D4FF\" strokeWidth=\"1.2\" />\n </svg>\n </div>\n <span className=\"font-bold text-[12px] text-gray-900\">Cogentic Compliance</span>\n <span className=\"text-[10px] text-gray-400\">10:42 AM</span>\n </div>\n\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ duration: 0.4, delay: 0.6 }}\n >\n <p className=\"mt-2.5 font-semibold text-[12px] text-gray-900\">\n Transfer requires review\n </p>\n\n {/* Transfer details grid */}\n <div className=\"mt-2 grid grid-cols-2 gap-x-4 gap-y-1.5\">\n {[\n { label: \"Transfer\", value: \"TXN-0847\" },\n { label: \"Corridor\", value: \"AU \\u2192 SG\" },\n { label: \"Risk score\", value: \"72 / 100\", highlight: true },\n { label: \"Trigger\", value: \"PEP match\" },\n ].map((item) => (\n <div key={item.label}>\n <span className=\"font-medium text-[10px] text-gray-400\">{item.label}</span>\n <p\n className={cn(\n \"font-semibold text-[11px]\",\n item.highlight ? \"text-red-500\" : \"text-gray-800\",\n )}\n >\n {item.value}\n </p>\n </div>\n ))}\n </div>\n\n {/* Jurisdiction badge */}\n <motion.div\n initial={{ opacity: 0, scale: 0.95 }}\n animate={{ opacity: 1, scale: 1 }}\n transition={{ duration: 0.3, delay: 0.9 }}\n className=\"mt-2.5 flex items-center gap-2 rounded bg-amber-50 px-2.5 py-1.5\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M6 1L11 3.5V8.5L6 11L1 8.5V3.5L6 1Z\" stroke=\"#D97706\" strokeWidth=\"1\" />\n </svg>\n <span className=\"font-medium text-[10px] text-amber-700\">\n SG jurisdiction requires beneficiary verification within 24h\n </span>\n </motion.div>\n </motion.div>\n\n {/* Action buttons */}\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ duration: 0.3, delay: 1.1 }}\n className=\"mt-3 flex gap-2\"\n >\n <span className=\"rounded bg-[#6264A7] px-3 py-1.5 font-semibold text-[11px] text-white\">\n Review transfer\n </span>\n <span className=\"rounded border border-gray-200 px-3 py-1.5 font-semibold text-[11px] text-gray-600\">\n Assign reviewer\n </span>\n </motion.div>\n </div>\n </motion.div>\n </div>\n )\n}\n"]}
@@ -0,0 +1,108 @@
1
+ "use client";
2
+ import { useAnimationTimer } from './chunk-RXV2XUDZ.js';
3
+ import { cn } from './chunk-GZNLQE3I.js';
4
+ import { Zap } from 'lucide-react';
5
+ import { LazyMotion, domAnimation, AnimatePresence, m } from 'motion/react';
6
+ import { useRef, useEffect } from 'react';
7
+ import { jsx, jsxs } from 'react/jsx-runtime';
8
+
9
+ var EVENTS = [
10
+ {
11
+ event: "transfer.screened",
12
+ status: 200,
13
+ latency: "42ms",
14
+ payload: '{ "id": "TXN-0847", "result": "compliant" }',
15
+ colour: "text-emerald-400"
16
+ },
17
+ {
18
+ event: "transfer.flagged",
19
+ status: 200,
20
+ latency: "38ms",
21
+ payload: '{ "id": "TXN-0846", "risk": "high", "reason": "threshold" }',
22
+ colour: "text-amber-400"
23
+ },
24
+ {
25
+ event: "verification.complete",
26
+ status: 200,
27
+ latency: "51ms",
28
+ payload: '{ "transfer": "TXN-0845", "travel_rule": "verified" }',
29
+ colour: "text-[#00D4FF]"
30
+ },
31
+ {
32
+ event: "report.generated",
33
+ status: 200,
34
+ latency: "67ms",
35
+ payload: '{ "ref": "CR-2024-Q4", "type": "quarterly" }',
36
+ colour: "text-violet-400"
37
+ },
38
+ {
39
+ event: "rule.triggered",
40
+ status: 200,
41
+ latency: "29ms",
42
+ payload: '{ "rule": "CR-007", "transfer": "TXN-0851" }',
43
+ colour: "text-red-400"
44
+ }
45
+ ];
46
+ function AnimationWebhooks({ className }) {
47
+ const [timerRef, tick] = useAnimationTimer(2200);
48
+ const count = Math.min(tick + 1, 6);
49
+ const startIdx = Math.max(0, tick + 1 - count);
50
+ const visible = Array.from({ length: count }, (_, i) => (startIdx + i) % EVENTS.length);
51
+ const scrollRef = useRef(null);
52
+ useEffect(() => {
53
+ const el = scrollRef.current;
54
+ if (!el) return;
55
+ requestAnimationFrame(() => {
56
+ el.scrollTop = el.scrollHeight;
57
+ });
58
+ }, []);
59
+ return /* @__PURE__ */ jsx(LazyMotion, { features: domAnimation, children: /* @__PURE__ */ jsxs("div", { ref: timerRef, className: cn("flex flex-col bg-[#1a1a2e]", className), children: [
60
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 border-white/10 border-b px-4 py-2", children: [
61
+ /* @__PURE__ */ jsx(Zap, { className: "size-3 text-amber-400" }),
62
+ /* @__PURE__ */ jsx("span", { className: "font-mono text-[11px] text-white/60", children: "Webhook Events" }),
63
+ /* @__PURE__ */ jsxs("span", { className: "ml-auto flex items-center gap-1", children: [
64
+ /* @__PURE__ */ jsxs("span", { className: "relative flex size-1.5", children: [
65
+ /* @__PURE__ */ jsx("span", { className: "absolute inline-flex size-full animate-ping rounded-full bg-emerald-400 opacity-75" }),
66
+ /* @__PURE__ */ jsx("span", { className: "relative inline-flex size-1.5 rounded-full bg-emerald-500" })
67
+ ] }),
68
+ /* @__PURE__ */ jsx("span", { className: "font-mono text-[10px] text-emerald-400", children: "live" })
69
+ ] })
70
+ ] }),
71
+ /* @__PURE__ */ jsx("div", { ref: scrollRef, className: "scrollbar-none flex-1 overflow-y-auto px-3 py-2", children: /* @__PURE__ */ jsx("div", { className: "space-y-1.5", children: /* @__PURE__ */ jsx(AnimatePresence, { initial: false, children: visible.map((evIdx, i) => {
72
+ const ev = EVENTS[evIdx];
73
+ const isLatest = i === visible.length - 1;
74
+ return /* @__PURE__ */ jsxs(
75
+ m.div,
76
+ {
77
+ initial: { opacity: 0, x: -8 },
78
+ animate: { opacity: isLatest ? 1 : 0.4, x: 0 },
79
+ exit: { opacity: 0, x: 8 },
80
+ transition: { duration: 0.3 },
81
+ className: "rounded-md border border-white/5 bg-white/5 px-3 py-2",
82
+ children: [
83
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
84
+ /* @__PURE__ */ jsx("span", { className: cn("font-mono font-semibold text-[11px]", ev.colour), children: ev.event }),
85
+ /* @__PURE__ */ jsx("span", { className: "ml-auto font-mono text-[10px] text-emerald-400", children: ev.status }),
86
+ /* @__PURE__ */ jsx("span", { className: "font-mono text-[10px] text-white/30", children: ev.latency })
87
+ ] }),
88
+ isLatest && /* @__PURE__ */ jsx(
89
+ m.p,
90
+ {
91
+ initial: { opacity: 0 },
92
+ animate: { opacity: 1 },
93
+ transition: { delay: 0.15 },
94
+ className: "mt-1 truncate font-mono text-[10px] text-white/40",
95
+ children: ev.payload
96
+ }
97
+ )
98
+ ]
99
+ },
100
+ `${i}-${evIdx}`
101
+ );
102
+ }) }) }) })
103
+ ] }) });
104
+ }
105
+
106
+ export { AnimationWebhooks };
107
+ //# sourceMappingURL=chunk-KUOF3XRZ.js.map
108
+ //# sourceMappingURL=chunk-KUOF3XRZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/animations/animation-webhooks.tsx"],"names":[],"mappings":"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","file":"chunk-KUOF3XRZ.js","sourcesContent":["\"use client\"\n\nimport { Zap } from \"lucide-react\"\nimport { AnimatePresence, 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 WebhookEvent = {\n event: string\n status: number\n latency: string\n payload: string\n colour: string\n}\n\nconst EVENTS: WebhookEvent[] = [\n {\n event: \"transfer.screened\",\n status: 200,\n latency: \"42ms\",\n payload: '{ \"id\": \"TXN-0847\", \"result\": \"compliant\" }',\n colour: \"text-emerald-400\",\n },\n {\n event: \"transfer.flagged\",\n status: 200,\n latency: \"38ms\",\n payload: '{ \"id\": \"TXN-0846\", \"risk\": \"high\", \"reason\": \"threshold\" }',\n colour: \"text-amber-400\",\n },\n {\n event: \"verification.complete\",\n status: 200,\n latency: \"51ms\",\n payload: '{ \"transfer\": \"TXN-0845\", \"travel_rule\": \"verified\" }',\n colour: \"text-[#00D4FF]\",\n },\n {\n event: \"report.generated\",\n status: 200,\n latency: \"67ms\",\n payload: '{ \"ref\": \"CR-2024-Q4\", \"type\": \"quarterly\" }',\n colour: \"text-violet-400\",\n },\n {\n event: \"rule.triggered\",\n status: 200,\n latency: \"29ms\",\n payload: '{ \"rule\": \"CR-007\", \"transfer\": \"TXN-0851\" }',\n colour: \"text-red-400\",\n },\n]\n\nexport default function AnimationWebhooks({ className }: { className?: string }) {\n const [timerRef, tick] = useAnimationTimer(2200)\n const count = Math.min(tick + 1, 6)\n const startIdx = Math.max(0, tick + 1 - count)\n const visible = Array.from({ length: count }, (_, i) => (startIdx + i) % EVENTS.length)\n const scrollRef = useRef<HTMLDivElement>(null)\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 ref={timerRef} className={cn(\"flex flex-col bg-[#1a1a2e]\", className)}>\n {/* Header */}\n <div className=\"flex items-center gap-2 border-white/10 border-b px-4 py-2\">\n <Zap className=\"size-3 text-amber-400\" />\n <span className=\"font-mono text-[11px] text-white/60\">Webhook Events</span>\n <span className=\"ml-auto flex items-center gap-1\">\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-mono text-[10px] text-emerald-400\">live</span>\n </span>\n </div>\n\n {/* Events */}\n <div ref={scrollRef} className=\"scrollbar-none flex-1 overflow-y-auto px-3 py-2\">\n <div className=\"space-y-1.5\">\n <AnimatePresence initial={false}>\n {visible.map((evIdx, i) => {\n const ev = EVENTS[evIdx]\n const isLatest = i === visible.length - 1\n return (\n <m.div\n key={`${i}-${evIdx}`}\n initial={{ opacity: 0, x: -8 }}\n animate={{ opacity: isLatest ? 1 : 0.4, x: 0 }}\n exit={{ opacity: 0, x: 8 }}\n transition={{ duration: 0.3 }}\n className=\"rounded-md border border-white/5 bg-white/5 px-3 py-2\"\n >\n <div className=\"flex items-center gap-2\">\n <span className={cn(\"font-mono font-semibold text-[11px]\", ev.colour)}>\n {ev.event}\n </span>\n <span className=\"ml-auto font-mono text-[10px] text-emerald-400\">\n {ev.status}\n </span>\n <span className=\"font-mono text-[10px] text-white/30\">{ev.latency}</span>\n </div>\n {isLatest && (\n <m.p\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ delay: 0.15 }}\n className=\"mt-1 truncate font-mono text-[10px] text-white/40\"\n >\n {ev.payload}\n </m.p>\n )}\n </m.div>\n )\n })}\n </AnimatePresence>\n </div>\n </div>\n </div>\n </LazyMotion>\n )\n}\n"]}
@@ -0,0 +1,148 @@
1
+ "use client";
2
+ import { Button } from './chunk-BNFSXNP2.js';
3
+ import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from './chunk-CG5JA7FM.js';
4
+ import { __objRest, __spreadValues, cn, __spreadProps } from './chunk-GZNLQE3I.js';
5
+ import { Input as Input$1 } from '@base-ui/react/input';
6
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
+
8
+ function Input(_a) {
9
+ var _b = _a, { className, type } = _b, props = __objRest(_b, ["className", "type"]);
10
+ return /* @__PURE__ */ jsx(
11
+ Input$1,
12
+ __spreadValues({
13
+ type,
14
+ "data-slot": "input",
15
+ className: cn(
16
+ "h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-2.5 py-1 text-base shadow-xs outline-none transition-[color,box-shadow] file:inline-flex file:h-7 file:border-0 file:bg-transparent file:font-medium file:text-foreground file:text-sm placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",
17
+ className
18
+ )
19
+ }, props)
20
+ );
21
+ }
22
+ function Label(_a) {
23
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
24
+ return /* @__PURE__ */ jsx(
25
+ "label",
26
+ __spreadValues({
27
+ "data-slot": "label",
28
+ className: cn(
29
+ "flex select-none items-center gap-2 font-medium text-sm leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-50 group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50",
30
+ className
31
+ )
32
+ }, props)
33
+ );
34
+ }
35
+ var defaultContent = {
36
+ login: {
37
+ title: "Welcome back",
38
+ description: "Enter your credentials to sign in",
39
+ submit: "Sign in"
40
+ },
41
+ register: {
42
+ title: "Create an account",
43
+ description: "Enter your details to get started",
44
+ submit: "Create account"
45
+ },
46
+ "forgot-password": {
47
+ title: "Forgot password",
48
+ description: "Enter your email to receive a reset link",
49
+ submit: "Send reset link"
50
+ }
51
+ };
52
+ function AuthForm(_a) {
53
+ var _b = _a, {
54
+ variant = "login",
55
+ onSubmit,
56
+ logo,
57
+ title,
58
+ description,
59
+ footer,
60
+ socialButtons,
61
+ loading = false,
62
+ className
63
+ } = _b, props = __objRest(_b, [
64
+ "variant",
65
+ "onSubmit",
66
+ "logo",
67
+ "title",
68
+ "description",
69
+ "footer",
70
+ "socialButtons",
71
+ "loading",
72
+ "className"
73
+ ]);
74
+ const content = defaultContent[variant];
75
+ function handleSubmit(e) {
76
+ e.preventDefault();
77
+ onSubmit == null ? void 0 : onSubmit(new FormData(e.currentTarget));
78
+ }
79
+ return /* @__PURE__ */ jsxs(Card, __spreadProps(__spreadValues({ "data-slot": "auth-form", className: cn("w-full max-w-md", className) }, props), { children: [
80
+ /* @__PURE__ */ jsxs(CardHeader, { className: "text-center", children: [
81
+ logo && /* @__PURE__ */ jsx("div", { className: "mb-4 flex justify-center", children: logo }),
82
+ /* @__PURE__ */ jsx(CardTitle, { className: "text-xl", children: title != null ? title : content.title }),
83
+ /* @__PURE__ */ jsx(CardDescription, { children: description != null ? description : content.description })
84
+ ] }),
85
+ /* @__PURE__ */ jsxs(CardContent, { children: [
86
+ /* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
87
+ (variant === "login" || variant === "register") && /* @__PURE__ */ jsxs(Fragment, { children: [
88
+ variant === "register" && /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
89
+ /* @__PURE__ */ jsx(Label, { htmlFor: "auth-name", children: "Name" }),
90
+ /* @__PURE__ */ jsx(Input, { id: "auth-name", name: "name", placeholder: "Full name", required: true })
91
+ ] }),
92
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
93
+ /* @__PURE__ */ jsx(Label, { htmlFor: "auth-email", children: "Email" }),
94
+ /* @__PURE__ */ jsx(
95
+ Input,
96
+ {
97
+ id: "auth-email",
98
+ name: "email",
99
+ type: "email",
100
+ placeholder: "you@example.com",
101
+ required: true
102
+ }
103
+ )
104
+ ] }),
105
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
106
+ /* @__PURE__ */ jsx(Label, { htmlFor: "auth-password", children: "Password" }),
107
+ /* @__PURE__ */ jsx(
108
+ Input,
109
+ {
110
+ id: "auth-password",
111
+ name: "password",
112
+ type: "password",
113
+ placeholder: "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",
114
+ required: true
115
+ }
116
+ )
117
+ ] })
118
+ ] }),
119
+ variant === "forgot-password" && /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
120
+ /* @__PURE__ */ jsx(Label, { htmlFor: "auth-email", children: "Email" }),
121
+ /* @__PURE__ */ jsx(
122
+ Input,
123
+ {
124
+ id: "auth-email",
125
+ name: "email",
126
+ type: "email",
127
+ placeholder: "you@example.com",
128
+ required: true
129
+ }
130
+ )
131
+ ] }),
132
+ /* @__PURE__ */ jsx(Button, { type: "submit", className: "w-full", disabled: loading, children: loading ? "Loading..." : content.submit })
133
+ ] }),
134
+ socialButtons && /* @__PURE__ */ jsxs(Fragment, { children: [
135
+ /* @__PURE__ */ jsxs("div", { className: "relative my-4", children: [
136
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center", children: /* @__PURE__ */ jsx("span", { className: "w-full border-t" }) }),
137
+ /* @__PURE__ */ jsx("div", { className: "relative flex justify-center text-xs uppercase", children: /* @__PURE__ */ jsx("span", { className: "bg-card px-2 text-muted-foreground", children: "Or continue with" }) })
138
+ ] }),
139
+ /* @__PURE__ */ jsx("div", { className: "grid gap-2", children: socialButtons })
140
+ ] })
141
+ ] }),
142
+ footer && /* @__PURE__ */ jsx(CardFooter, { className: "justify-center text-muted-foreground text-sm", children: footer })
143
+ ] }));
144
+ }
145
+
146
+ export { AuthForm, Input, Label };
147
+ //# sourceMappingURL=chunk-LW6GAWZM.js.map
148
+ //# sourceMappingURL=chunk-LW6GAWZM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/input.tsx","../src/components/label.tsx","../src/blocks/auth-form.tsx"],"names":["InputPrimitive","jsx"],"mappings":";;;;;;AAKA,SAAS,MAAM,EAAA,EAA8D;AAA9D,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,aAAW,IAAA,EAL5B,GAKe,IAAsB,KAAA,GAAA,SAAA,CAAtB,EAAA,EAAsB,CAApB,WAAA,EAAW,MAAA,CAAA,CAAA;AAC1B,EAAA,uBACE,GAAA;AAAA,IAACA,OAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,IAAA;AAAA,MACA,WAAA,EAAU,OAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,onBAAA;AAAA,QACA;AAAA;AACF,KAAA,EACI,KAAA;AAAA,GACN;AAEJ;ACXA,SAAS,MAAM,EAAA,EAAwD;AAAxD,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EANjB,GAMe,EAAA,EAAgB,KAAA,GAAA,SAAA,CAAhB,IAAgB,CAAd,WAAA,CAAA,CAAA;AACf,EAAA,uBACEC,GAAAA;AAAA,IAAC,OAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,OAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,qNAAA;AAAA,QACA;AAAA;AACF,KAAA,EACI,KAAA;AAAA,GACN;AAEJ;ACYA,IAAM,cAAA,GAGF;AAAA,EACF,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,cAAA;AAAA,IACP,WAAA,EAAa,mCAAA;AAAA,IACb,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,QAAA,EAAU;AAAA,IACR,KAAA,EAAO,mBAAA;AAAA,IACP,WAAA,EAAa,mCAAA;AAAA,IACb,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,KAAA,EAAO,iBAAA;AAAA,IACP,WAAA,EAAa,0CAAA;AAAA,IACb,MAAA,EAAQ;AAAA;AAEZ,CAAA;AAEA,SAAS,SAAS,EAAA,EAWA;AAXA,EAAA,IAAA,EAAA,GAAA,EAAA,EAChB;AAAA,IAAA,OAAA,GAAU,OAAA;AAAA,IACV,QAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,IACA,aAAA;AAAA,IACA,OAAA,GAAU,KAAA;AAAA,IACV;AAAA,GA3DF,GAkDkB,EAAA,EAUb,KAAA,GAAA,SAAA,CAVa,EAAA,EAUb;AAAA,IATH,SAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,MAAM,OAAA,GAAU,eAAe,OAAO,CAAA;AAEtC,EAAA,SAAS,aAAa,CAAA,EAAqC;AACzD,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,IAAI,QAAA,CAAS,CAAA,CAAE,aAAa,CAAA,CAAA;AAAA,EACzC;AAEA,EAAA,uBACE,IAAA,CAAC,IAAA,EAAA,aAAA,CAAA,cAAA,CAAA,EAAK,WAAA,EAAU,WAAA,EAAY,SAAA,EAAW,GAAG,iBAAA,EAAmB,SAAS,CAAA,EAAA,EAAO,KAAA,CAAA,EAA5E,EACC,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,UAAA,EAAA,EAAW,WAAU,aAAA,EACnB,QAAA,EAAA;AAAA,MAAA,IAAA,oBAAQA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAA4B,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,sBACzDA,GAAAA,CAAC,SAAA,EAAA,EAAU,WAAU,SAAA,EAAW,QAAA,EAAA,KAAA,IAAA,IAAA,GAAA,KAAA,GAAS,QAAQ,KAAA,EAAM,CAAA;AAAA,sBACvDA,GAAAA,CAAC,eAAA,EAAA,EAAiB,QAAA,EAAA,WAAA,IAAA,IAAA,GAAA,WAAA,GAAe,QAAQ,WAAA,EAAY;AAAA,KAAA,EACvD,CAAA;AAAA,yBACC,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAU,YAAA,EAAc,SAAA,EAAU,WAAA,EACpC,QAAA,EAAA;AAAA,QAAA,CAAA,OAAA,KAAY,OAAA,IAAW,OAAA,KAAY,UAAA,qBACnC,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,UAAA,OAAA,KAAY,UAAA,oBACX,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,GAAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,WAAA,EAAY,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,4BAC/BA,GAAAA,CAAC,KAAA,EAAA,EAAM,EAAA,EAAG,WAAA,EAAY,MAAK,MAAA,EAAO,WAAA,EAAY,WAAA,EAAY,QAAA,EAAQ,IAAA,EAAC;AAAA,WAAA,EACrE,CAAA;AAAA,0BAEF,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,GAAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,YAAA,EAAa,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,4BACjCA,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,YAAA;AAAA,gBACH,IAAA,EAAK,OAAA;AAAA,gBACL,IAAA,EAAK,OAAA;AAAA,gBACL,WAAA,EAAY,iBAAA;AAAA,gBACZ,QAAA,EAAQ;AAAA;AAAA;AACV,WAAA,EACF,CAAA;AAAA,0BACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,GAAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,eAAA,EAAgB,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,4BACvCA,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,eAAA;AAAA,gBACH,IAAA,EAAK,UAAA;AAAA,gBACL,IAAA,EAAK,UAAA;AAAA,gBACL,WAAA,EAAY,kDAAA;AAAA,gBACZ,QAAA,EAAQ;AAAA;AAAA;AACV,WAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,QAED,OAAA,KAAY,iBAAA,oBACX,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,GAAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,YAAA,EAAa,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,0BACjCA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAG,YAAA;AAAA,cACH,IAAA,EAAK,OAAA;AAAA,cACL,IAAA,EAAK,OAAA;AAAA,cACL,WAAA,EAAY,iBAAA;AAAA,cACZ,QAAA,EAAQ;AAAA;AAAA;AACV,SAAA,EACF,CAAA;AAAA,wBAEFA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,QAAA,EAAS,QAAA,EAAU,OAAA,EAChD,QAAA,EAAA,OAAA,GAAU,YAAA,GAAe,OAAA,CAAQ,MAAA,EACpC;AAAA,OAAA,EACF,CAAA;AAAA,MACC,iCACC,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,eAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,GAAAA,CAAC,SAAI,SAAA,EAAU,oCAAA,EACb,0BAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EAAkB,CAAA,EACpC,CAAA;AAAA,0BACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gDAAA,EACb,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EAAqC,QAAA,EAAA,kBAAA,EAAgB,CAAA,EACvE;AAAA,SAAA,EACF,CAAA;AAAA,wBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAc,QAAA,EAAA,aAAA,EAAc;AAAA,OAAA,EAC7C;AAAA,KAAA,EAEJ,CAAA;AAAA,IACC,0BACCA,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,gDAAgD,QAAA,EAAA,MAAA,EAAO;AAAA,GAAA,EAAA,CAEjF,CAAA;AAEJ","file":"chunk-LW6GAWZM.js","sourcesContent":["import { Input as InputPrimitive } from \"@base-ui/react/input\"\nimport type * as React from \"react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <InputPrimitive\n type={type}\n data-slot=\"input\"\n className={cn(\n \"h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-2.5 py-1 text-base shadow-xs outline-none transition-[color,box-shadow] file:inline-flex file:h-7 file:border-0 file:bg-transparent file:font-medium file:text-foreground file:text-sm placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40\",\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","\"use client\"\n\nimport type * as React from \"react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Label({ className, ...props }: React.ComponentProps<\"label\">) {\n return (\n <label\n data-slot=\"label\"\n className={cn(\n \"flex select-none items-center gap-2 font-medium text-sm leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-50 group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50\",\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n","\"use client\"\n\nimport type * as React from \"react\"\nimport { Button } from \"../components/button\"\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"../components/card\"\nimport { Input } from \"../components/input\"\nimport { Label } from \"../components/label\"\nimport { cn } from \"../lib/utils\"\n\ntype AuthFormVariant = \"login\" | \"register\" | \"forgot-password\"\n\ntype AuthFormProps = React.ComponentProps<typeof Card> & {\n variant?: AuthFormVariant\n onSubmit?: (data: FormData) => void\n logo?: React.ReactNode\n title?: string\n description?: string\n footer?: React.ReactNode\n socialButtons?: React.ReactNode\n loading?: boolean\n}\n\nconst defaultContent: Record<\n AuthFormVariant,\n { title: string; description: string; submit: string }\n> = {\n login: {\n title: \"Welcome back\",\n description: \"Enter your credentials to sign in\",\n submit: \"Sign in\",\n },\n register: {\n title: \"Create an account\",\n description: \"Enter your details to get started\",\n submit: \"Create account\",\n },\n \"forgot-password\": {\n title: \"Forgot password\",\n description: \"Enter your email to receive a reset link\",\n submit: \"Send reset link\",\n },\n}\n\nfunction AuthForm({\n variant = \"login\",\n onSubmit,\n logo,\n title,\n description,\n footer,\n socialButtons,\n loading = false,\n className,\n ...props\n}: AuthFormProps) {\n const content = defaultContent[variant]\n\n function handleSubmit(e: React.FormEvent<HTMLFormElement>) {\n e.preventDefault()\n onSubmit?.(new FormData(e.currentTarget))\n }\n\n return (\n <Card data-slot=\"auth-form\" className={cn(\"w-full max-w-md\", className)} {...props}>\n <CardHeader className=\"text-center\">\n {logo && <div className=\"mb-4 flex justify-center\">{logo}</div>}\n <CardTitle className=\"text-xl\">{title ?? content.title}</CardTitle>\n <CardDescription>{description ?? content.description}</CardDescription>\n </CardHeader>\n <CardContent>\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n {(variant === \"login\" || variant === \"register\") && (\n <>\n {variant === \"register\" && (\n <div className=\"space-y-2\">\n <Label htmlFor=\"auth-name\">Name</Label>\n <Input id=\"auth-name\" name=\"name\" placeholder=\"Full name\" required />\n </div>\n )}\n <div className=\"space-y-2\">\n <Label htmlFor=\"auth-email\">Email</Label>\n <Input\n id=\"auth-email\"\n name=\"email\"\n type=\"email\"\n placeholder=\"you@example.com\"\n required\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"auth-password\">Password</Label>\n <Input\n id=\"auth-password\"\n name=\"password\"\n type=\"password\"\n placeholder=\"••••••••\"\n required\n />\n </div>\n </>\n )}\n {variant === \"forgot-password\" && (\n <div className=\"space-y-2\">\n <Label htmlFor=\"auth-email\">Email</Label>\n <Input\n id=\"auth-email\"\n name=\"email\"\n type=\"email\"\n placeholder=\"you@example.com\"\n required\n />\n </div>\n )}\n <Button type=\"submit\" className=\"w-full\" disabled={loading}>\n {loading ? \"Loading...\" : content.submit}\n </Button>\n </form>\n {socialButtons && (\n <>\n <div className=\"relative my-4\">\n <div className=\"absolute inset-0 flex items-center\">\n <span className=\"w-full border-t\" />\n </div>\n <div className=\"relative flex justify-center text-xs uppercase\">\n <span className=\"bg-card px-2 text-muted-foreground\">Or continue with</span>\n </div>\n </div>\n <div className=\"grid gap-2\">{socialButtons}</div>\n </>\n )}\n </CardContent>\n {footer && (\n <CardFooter className=\"justify-center text-muted-foreground text-sm\">{footer}</CardFooter>\n )}\n </Card>\n )\n}\n\nexport { AuthForm }\nexport type { AuthFormProps, AuthFormVariant }\n"]}
@@ -0,0 +1,110 @@
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
@@ -0,0 +1 @@
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"]}
@@ -0,0 +1,102 @@
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
@@ -0,0 +1 @@
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"]}