@medialane/ui 0.128.7 → 0.130.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.
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ "use client";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+ var activity_timeline_row_exports = {};
31
+ __export(activity_timeline_row_exports, {
32
+ ActivityTimelineRow: () => ActivityTimelineRow
33
+ });
34
+ module.exports = __toCommonJS(activity_timeline_row_exports);
35
+ var import_jsx_runtime = require("react/jsx-runtime");
36
+ var import_link = __toESM(require("./link.js"), 1);
37
+ var import_lucide_react = require("lucide-react");
38
+ var import_time = require("../utils/time.js");
39
+ var import_format = require("../utils/format.js");
40
+ var import_cn = require("../utils/cn.js");
41
+ const ACTIVITY_META = {
42
+ mint: { label: "Minted", textColor: "text-yellow-400", bg: "bg-yellow-500/8 border-yellow-500/15" },
43
+ listing: { label: "Listed", textColor: "text-violet-400", bg: "bg-violet-500/8 border-violet-500/15" },
44
+ sale: { label: "Sold", textColor: "text-emerald-400", bg: "bg-emerald-500/8 border-emerald-500/15" },
45
+ offer: { label: "Offer", textColor: "text-amber-400", bg: "bg-amber-500/8 border-amber-500/15" },
46
+ transfer: { label: "Transfer", textColor: "text-blue-400", bg: "bg-blue-500/8 border-blue-500/15" },
47
+ cancelled: { label: "Cancelled", textColor: "text-muted-foreground", bg: "bg-muted/30 border-border" }
48
+ };
49
+ const ACTIVITY_ICONS = {
50
+ mint: import_lucide_react.Sparkles,
51
+ listing: import_lucide_react.Tag,
52
+ sale: import_lucide_react.Handshake,
53
+ offer: import_lucide_react.TrendingUp,
54
+ transfer: import_lucide_react.ArrowRightLeft,
55
+ cancelled: import_lucide_react.ArrowRightLeft
56
+ };
57
+ function ActivityTimelineRow({
58
+ event,
59
+ isLast,
60
+ getAssetHref = (contract, tokenId) => `/asset/STARKNET/${contract}/${tokenId}`
61
+ }) {
62
+ const meta = ACTIVITY_META[event.type] ?? ACTIVITY_META.transfer;
63
+ const Icon = ACTIVITY_ICONS[event.type] ?? import_lucide_react.ArrowRightLeft;
64
+ const tokenId = event.nftTokenId ?? event.tokenId;
65
+ const contract = event.nftContract ?? event.contractAddress;
66
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex gap-4 group", children: [
67
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-col items-center shrink-0 w-9", children: [
68
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: (0, import_cn.cn)("h-9 w-9 rounded-xl border flex items-center justify-center shrink-0", meta.bg), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Icon, { className: (0, import_cn.cn)("h-3.5 w-3.5", meta.textColor) }) }),
69
+ !isLast && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex-1 w-px bg-border/50 mt-1.5 min-h-4" })
70
+ ] }),
71
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex-1 pb-5 min-w-0 pt-1", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-start justify-between gap-3", children: [
72
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "min-w-0", children: [
73
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-2 flex-wrap", children: [
74
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: (0, import_cn.cn)("text-[11px] font-bold", meta.textColor), children: meta.label }),
75
+ contract && tokenId ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_link.default, { href: getAssetHref(contract, tokenId), className: "text-xs text-muted-foreground tabular-nums hover:text-foreground transition-colors", children: [
76
+ "Token #",
77
+ tokenId
78
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "text-xs text-muted-foreground tabular-nums", children: [
79
+ "Token #",
80
+ tokenId ?? "\u2014"
81
+ ] })
82
+ ] }),
83
+ contract && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", { className: "text-[11px] text-muted-foreground/60 tabular-nums mt-0.5 truncate", children: [
84
+ contract.slice(0, 10),
85
+ "\u2026",
86
+ contract.slice(-6)
87
+ ] })
88
+ ] }),
89
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "text-right shrink-0", children: [
90
+ event.price?.formatted && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-sm font-semibold price-value leading-none", children: (0, import_format.formatDisplayPrice)(event.price.formatted) }),
91
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-[10px] text-muted-foreground mt-1", children: (0, import_time.timeAgo)(event.timestamp) })
92
+ ] })
93
+ ] }) })
94
+ ] });
95
+ }
96
+ // Annotate the CommonJS export names for ESM import in node:
97
+ 0 && (module.exports = {
98
+ ActivityTimelineRow
99
+ });
100
+ //# sourceMappingURL=activity-timeline-row.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/activity-timeline-row.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport {\n Tag, Handshake, TrendingUp, ArrowRightLeft, Sparkles,\n} from \"lucide-react\";\nimport { timeAgo } from \"../utils/time.js\";\nimport { formatDisplayPrice } from \"../utils/format.js\";\nimport type { ApiActivity } from \"@medialane/sdk\";\nimport { cn } from \"../utils/cn.js\";\n\n\nconst ACTIVITY_META: Record<string, { label: string; textColor: string; bg: string }> = {\n mint: { label: \"Minted\", textColor: \"text-yellow-400\", bg: \"bg-yellow-500/8 border-yellow-500/15\" },\n listing: { label: \"Listed\", textColor: \"text-violet-400\", bg: \"bg-violet-500/8 border-violet-500/15\" },\n sale: { label: \"Sold\", textColor: \"text-emerald-400\", bg: \"bg-emerald-500/8 border-emerald-500/15\" },\n offer: { label: \"Offer\", textColor: \"text-amber-400\", bg: \"bg-amber-500/8 border-amber-500/15\" },\n transfer: { label: \"Transfer\", textColor: \"text-blue-400\", bg: \"bg-blue-500/8 border-blue-500/15\" },\n cancelled: { label: \"Cancelled\", textColor: \"text-muted-foreground\", bg: \"bg-muted/30 border-border\" },\n};\n\nconst ACTIVITY_ICONS: Record<string, React.ElementType> = {\n mint: Sparkles,\n listing: Tag,\n sale: Handshake,\n offer: TrendingUp,\n transfer: ArrowRightLeft,\n cancelled: ArrowRightLeft,\n};\n\nexport interface ActivityTimelineRowProps {\n event: ApiActivity;\n isLast: boolean;\n getAssetHref?: (contract: string, tokenId: string) => string;\n}\n\nexport function ActivityTimelineRow({\n event,\n isLast,\n getAssetHref = (contract, tokenId) => `/asset/STARKNET/${contract}/${tokenId}`,\n}: ActivityTimelineRowProps) {\n const meta = ACTIVITY_META[event.type] ?? ACTIVITY_META.transfer;\n const Icon = ACTIVITY_ICONS[event.type] ?? ArrowRightLeft;\n const tokenId = event.nftTokenId ?? event.tokenId;\n const contract = event.nftContract ?? event.contractAddress;\n\n return (\n <div className=\"flex gap-4 group\">\n <div className=\"flex flex-col items-center shrink-0 w-9\">\n <div className={cn(\"h-9 w-9 rounded-xl border flex items-center justify-center shrink-0\", meta.bg)}>\n <Icon className={cn(\"h-3.5 w-3.5\", meta.textColor)} />\n </div>\n {!isLast && <div className=\"flex-1 w-px bg-border/50 mt-1.5 min-h-4\" />}\n </div>\n <div className=\"flex-1 pb-5 min-w-0 pt-1\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2 flex-wrap\">\n <span className={cn(\"text-[11px] font-bold\", meta.textColor)}>\n {meta.label}\n </span>\n {contract && tokenId ? (\n <Link href={getAssetHref(contract, tokenId)} className=\"text-xs text-muted-foreground tabular-nums hover:text-foreground transition-colors\">\n Token #{tokenId}\n </Link>\n ) : (\n <span className=\"text-xs text-muted-foreground tabular-nums\">Token #{tokenId ?? \"—\"}</span>\n )}\n </div>\n {contract && (\n <p className=\"text-[11px] text-muted-foreground/60 tabular-nums mt-0.5 truncate\">\n {contract.slice(0, 10)}…{contract.slice(-6)}\n </p>\n )}\n </div>\n <div className=\"text-right shrink-0\">\n {event.price?.formatted && (\n <p className=\"text-sm font-semibold price-value leading-none\">\n {formatDisplayPrice(event.price.formatted)}\n </p>\n )}\n <p className=\"text-[10px] text-muted-foreground mt-1\">{timeAgo(event.timestamp)}</p>\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAgDM;AA9CN,kBAAiB;AACjB,0BAEO;AACP,kBAAwB;AACxB,oBAAmC;AAEnC,gBAAmB;AAGnB,MAAM,gBAAkF;AAAA,EACtF,MAAW,EAAE,OAAO,UAAa,WAAW,mBAAoB,IAAI,uCAAuC;AAAA,EAC3G,SAAW,EAAE,OAAO,UAAa,WAAW,mBAAoB,IAAI,uCAAuC;AAAA,EAC3G,MAAW,EAAE,OAAO,QAAa,WAAW,oBAAoB,IAAI,yCAAyC;AAAA,EAC7G,OAAW,EAAE,OAAO,SAAa,WAAW,kBAAoB,IAAI,qCAAqC;AAAA,EACzG,UAAW,EAAE,OAAO,YAAa,WAAW,iBAAoB,IAAI,mCAAmC;AAAA,EACvG,WAAW,EAAE,OAAO,aAAa,WAAW,yBAAyB,IAAI,4BAA4B;AACvG;AAEA,MAAM,iBAAoD;AAAA,EACxD,MAAW;AAAA,EACX,SAAW;AAAA,EACX,MAAW;AAAA,EACX,OAAW;AAAA,EACX,UAAW;AAAA,EACX,WAAW;AACb;AAQO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA,eAAe,CAAC,UAAU,YAAY,mBAAmB,QAAQ,IAAI,OAAO;AAC9E,GAA6B;AAC3B,QAAM,OAAO,cAAc,MAAM,IAAI,KAAK,cAAc;AACxD,QAAM,OAAO,eAAe,MAAM,IAAI,KAAK;AAC3C,QAAM,UAAU,MAAM,cAAc,MAAM;AAC1C,QAAM,WAAW,MAAM,eAAe,MAAM;AAE5C,SACE,6CAAC,SAAI,WAAU,oBACb;AAAA,iDAAC,SAAI,WAAU,2CACb;AAAA,kDAAC,SAAI,eAAW,cAAG,uEAAuE,KAAK,EAAE,GAC/F,sDAAC,QAAK,eAAW,cAAG,eAAe,KAAK,SAAS,GAAG,GACtD;AAAA,MACC,CAAC,UAAU,4CAAC,SAAI,WAAU,2CAA0C;AAAA,OACvE;AAAA,IACA,4CAAC,SAAI,WAAU,4BACb,uDAAC,SAAI,WAAU,0CACb;AAAA,mDAAC,SAAI,WAAU,WACb;AAAA,qDAAC,SAAI,WAAU,qCACb;AAAA,sDAAC,UAAK,eAAW,cAAG,yBAAyB,KAAK,SAAS,GACxD,eAAK,OACR;AAAA,UACC,YAAY,UACX,6CAAC,YAAAA,SAAA,EAAK,MAAM,aAAa,UAAU,OAAO,GAAG,WAAU,sFAAqF;AAAA;AAAA,YAClI;AAAA,aACV,IAEA,6CAAC,UAAK,WAAU,8CAA6C;AAAA;AAAA,YAAQ,WAAW;AAAA,aAAI;AAAA,WAExF;AAAA,QACC,YACC,6CAAC,OAAE,WAAU,qEACV;AAAA,mBAAS,MAAM,GAAG,EAAE;AAAA,UAAE;AAAA,UAAE,SAAS,MAAM,EAAE;AAAA,WAC5C;AAAA,SAEJ;AAAA,MACA,6CAAC,SAAI,WAAU,uBACZ;AAAA,cAAM,OAAO,aACZ,4CAAC,OAAE,WAAU,kDACV,gDAAmB,MAAM,MAAM,SAAS,GAC3C;AAAA,QAEF,4CAAC,OAAE,WAAU,0CAA0C,mCAAQ,MAAM,SAAS,GAAE;AAAA,SAClF;AAAA,OACF,GACF;AAAA,KACF;AAEJ;","names":["Link"]}
@@ -0,0 +1,11 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ApiActivity } from '@medialane/sdk';
3
+
4
+ interface ActivityTimelineRowProps {
5
+ event: ApiActivity;
6
+ isLast: boolean;
7
+ getAssetHref?: (contract: string, tokenId: string) => string;
8
+ }
9
+ declare function ActivityTimelineRow({ event, isLast, getAssetHref, }: ActivityTimelineRowProps): react_jsx_runtime.JSX.Element;
10
+
11
+ export { ActivityTimelineRow, type ActivityTimelineRowProps };
@@ -0,0 +1,11 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ApiActivity } from '@medialane/sdk';
3
+
4
+ interface ActivityTimelineRowProps {
5
+ event: ApiActivity;
6
+ isLast: boolean;
7
+ getAssetHref?: (contract: string, tokenId: string) => string;
8
+ }
9
+ declare function ActivityTimelineRow({ event, isLast, getAssetHref, }: ActivityTimelineRowProps): react_jsx_runtime.JSX.Element;
10
+
11
+ export { ActivityTimelineRow, type ActivityTimelineRowProps };
@@ -0,0 +1,72 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import Link from "./link.js";
4
+ import {
5
+ Tag,
6
+ Handshake,
7
+ TrendingUp,
8
+ ArrowRightLeft,
9
+ Sparkles
10
+ } from "lucide-react";
11
+ import { timeAgo } from "../utils/time.js";
12
+ import { formatDisplayPrice } from "../utils/format.js";
13
+ import { cn } from "../utils/cn.js";
14
+ const ACTIVITY_META = {
15
+ mint: { label: "Minted", textColor: "text-yellow-400", bg: "bg-yellow-500/8 border-yellow-500/15" },
16
+ listing: { label: "Listed", textColor: "text-violet-400", bg: "bg-violet-500/8 border-violet-500/15" },
17
+ sale: { label: "Sold", textColor: "text-emerald-400", bg: "bg-emerald-500/8 border-emerald-500/15" },
18
+ offer: { label: "Offer", textColor: "text-amber-400", bg: "bg-amber-500/8 border-amber-500/15" },
19
+ transfer: { label: "Transfer", textColor: "text-blue-400", bg: "bg-blue-500/8 border-blue-500/15" },
20
+ cancelled: { label: "Cancelled", textColor: "text-muted-foreground", bg: "bg-muted/30 border-border" }
21
+ };
22
+ const ACTIVITY_ICONS = {
23
+ mint: Sparkles,
24
+ listing: Tag,
25
+ sale: Handshake,
26
+ offer: TrendingUp,
27
+ transfer: ArrowRightLeft,
28
+ cancelled: ArrowRightLeft
29
+ };
30
+ function ActivityTimelineRow({
31
+ event,
32
+ isLast,
33
+ getAssetHref = (contract, tokenId) => `/asset/STARKNET/${contract}/${tokenId}`
34
+ }) {
35
+ const meta = ACTIVITY_META[event.type] ?? ACTIVITY_META.transfer;
36
+ const Icon = ACTIVITY_ICONS[event.type] ?? ArrowRightLeft;
37
+ const tokenId = event.nftTokenId ?? event.tokenId;
38
+ const contract = event.nftContract ?? event.contractAddress;
39
+ return /* @__PURE__ */ jsxs("div", { className: "flex gap-4 group", children: [
40
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center shrink-0 w-9", children: [
41
+ /* @__PURE__ */ jsx("div", { className: cn("h-9 w-9 rounded-xl border flex items-center justify-center shrink-0", meta.bg), children: /* @__PURE__ */ jsx(Icon, { className: cn("h-3.5 w-3.5", meta.textColor) }) }),
42
+ !isLast && /* @__PURE__ */ jsx("div", { className: "flex-1 w-px bg-border/50 mt-1.5 min-h-4" })
43
+ ] }),
44
+ /* @__PURE__ */ jsx("div", { className: "flex-1 pb-5 min-w-0 pt-1", children: /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-3", children: [
45
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
46
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [
47
+ /* @__PURE__ */ jsx("span", { className: cn("text-[11px] font-bold", meta.textColor), children: meta.label }),
48
+ contract && tokenId ? /* @__PURE__ */ jsxs(Link, { href: getAssetHref(contract, tokenId), className: "text-xs text-muted-foreground tabular-nums hover:text-foreground transition-colors", children: [
49
+ "Token #",
50
+ tokenId
51
+ ] }) : /* @__PURE__ */ jsxs("span", { className: "text-xs text-muted-foreground tabular-nums", children: [
52
+ "Token #",
53
+ tokenId ?? "\u2014"
54
+ ] })
55
+ ] }),
56
+ contract && /* @__PURE__ */ jsxs("p", { className: "text-[11px] text-muted-foreground/60 tabular-nums mt-0.5 truncate", children: [
57
+ contract.slice(0, 10),
58
+ "\u2026",
59
+ contract.slice(-6)
60
+ ] })
61
+ ] }),
62
+ /* @__PURE__ */ jsxs("div", { className: "text-right shrink-0", children: [
63
+ event.price?.formatted && /* @__PURE__ */ jsx("p", { className: "text-sm font-semibold price-value leading-none", children: formatDisplayPrice(event.price.formatted) }),
64
+ /* @__PURE__ */ jsx("p", { className: "text-[10px] text-muted-foreground mt-1", children: timeAgo(event.timestamp) })
65
+ ] })
66
+ ] }) })
67
+ ] });
68
+ }
69
+ export {
70
+ ActivityTimelineRow
71
+ };
72
+ //# sourceMappingURL=activity-timeline-row.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/activity-timeline-row.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport {\n Tag, Handshake, TrendingUp, ArrowRightLeft, Sparkles,\n} from \"lucide-react\";\nimport { timeAgo } from \"../utils/time.js\";\nimport { formatDisplayPrice } from \"../utils/format.js\";\nimport type { ApiActivity } from \"@medialane/sdk\";\nimport { cn } from \"../utils/cn.js\";\n\n\nconst ACTIVITY_META: Record<string, { label: string; textColor: string; bg: string }> = {\n mint: { label: \"Minted\", textColor: \"text-yellow-400\", bg: \"bg-yellow-500/8 border-yellow-500/15\" },\n listing: { label: \"Listed\", textColor: \"text-violet-400\", bg: \"bg-violet-500/8 border-violet-500/15\" },\n sale: { label: \"Sold\", textColor: \"text-emerald-400\", bg: \"bg-emerald-500/8 border-emerald-500/15\" },\n offer: { label: \"Offer\", textColor: \"text-amber-400\", bg: \"bg-amber-500/8 border-amber-500/15\" },\n transfer: { label: \"Transfer\", textColor: \"text-blue-400\", bg: \"bg-blue-500/8 border-blue-500/15\" },\n cancelled: { label: \"Cancelled\", textColor: \"text-muted-foreground\", bg: \"bg-muted/30 border-border\" },\n};\n\nconst ACTIVITY_ICONS: Record<string, React.ElementType> = {\n mint: Sparkles,\n listing: Tag,\n sale: Handshake,\n offer: TrendingUp,\n transfer: ArrowRightLeft,\n cancelled: ArrowRightLeft,\n};\n\nexport interface ActivityTimelineRowProps {\n event: ApiActivity;\n isLast: boolean;\n getAssetHref?: (contract: string, tokenId: string) => string;\n}\n\nexport function ActivityTimelineRow({\n event,\n isLast,\n getAssetHref = (contract, tokenId) => `/asset/STARKNET/${contract}/${tokenId}`,\n}: ActivityTimelineRowProps) {\n const meta = ACTIVITY_META[event.type] ?? ACTIVITY_META.transfer;\n const Icon = ACTIVITY_ICONS[event.type] ?? ArrowRightLeft;\n const tokenId = event.nftTokenId ?? event.tokenId;\n const contract = event.nftContract ?? event.contractAddress;\n\n return (\n <div className=\"flex gap-4 group\">\n <div className=\"flex flex-col items-center shrink-0 w-9\">\n <div className={cn(\"h-9 w-9 rounded-xl border flex items-center justify-center shrink-0\", meta.bg)}>\n <Icon className={cn(\"h-3.5 w-3.5\", meta.textColor)} />\n </div>\n {!isLast && <div className=\"flex-1 w-px bg-border/50 mt-1.5 min-h-4\" />}\n </div>\n <div className=\"flex-1 pb-5 min-w-0 pt-1\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2 flex-wrap\">\n <span className={cn(\"text-[11px] font-bold\", meta.textColor)}>\n {meta.label}\n </span>\n {contract && tokenId ? (\n <Link href={getAssetHref(contract, tokenId)} className=\"text-xs text-muted-foreground tabular-nums hover:text-foreground transition-colors\">\n Token #{tokenId}\n </Link>\n ) : (\n <span className=\"text-xs text-muted-foreground tabular-nums\">Token #{tokenId ?? \"—\"}</span>\n )}\n </div>\n {contract && (\n <p className=\"text-[11px] text-muted-foreground/60 tabular-nums mt-0.5 truncate\">\n {contract.slice(0, 10)}…{contract.slice(-6)}\n </p>\n )}\n </div>\n <div className=\"text-right shrink-0\">\n {event.price?.formatted && (\n <p className=\"text-sm font-semibold price-value leading-none\">\n {formatDisplayPrice(event.price.formatted)}\n </p>\n )}\n <p className=\"text-[10px] text-muted-foreground mt-1\">{timeAgo(event.timestamp)}</p>\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":";AAgDM,SAEI,KAFJ;AA9CN,OAAO,UAAU;AACjB;AAAA,EACE;AAAA,EAAK;AAAA,EAAW;AAAA,EAAY;AAAA,EAAgB;AAAA,OACvC;AACP,SAAS,eAAe;AACxB,SAAS,0BAA0B;AAEnC,SAAS,UAAU;AAGnB,MAAM,gBAAkF;AAAA,EACtF,MAAW,EAAE,OAAO,UAAa,WAAW,mBAAoB,IAAI,uCAAuC;AAAA,EAC3G,SAAW,EAAE,OAAO,UAAa,WAAW,mBAAoB,IAAI,uCAAuC;AAAA,EAC3G,MAAW,EAAE,OAAO,QAAa,WAAW,oBAAoB,IAAI,yCAAyC;AAAA,EAC7G,OAAW,EAAE,OAAO,SAAa,WAAW,kBAAoB,IAAI,qCAAqC;AAAA,EACzG,UAAW,EAAE,OAAO,YAAa,WAAW,iBAAoB,IAAI,mCAAmC;AAAA,EACvG,WAAW,EAAE,OAAO,aAAa,WAAW,yBAAyB,IAAI,4BAA4B;AACvG;AAEA,MAAM,iBAAoD;AAAA,EACxD,MAAW;AAAA,EACX,SAAW;AAAA,EACX,MAAW;AAAA,EACX,OAAW;AAAA,EACX,UAAW;AAAA,EACX,WAAW;AACb;AAQO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA,eAAe,CAAC,UAAU,YAAY,mBAAmB,QAAQ,IAAI,OAAO;AAC9E,GAA6B;AAC3B,QAAM,OAAO,cAAc,MAAM,IAAI,KAAK,cAAc;AACxD,QAAM,OAAO,eAAe,MAAM,IAAI,KAAK;AAC3C,QAAM,UAAU,MAAM,cAAc,MAAM;AAC1C,QAAM,WAAW,MAAM,eAAe,MAAM;AAE5C,SACE,qBAAC,SAAI,WAAU,oBACb;AAAA,yBAAC,SAAI,WAAU,2CACb;AAAA,0BAAC,SAAI,WAAW,GAAG,uEAAuE,KAAK,EAAE,GAC/F,8BAAC,QAAK,WAAW,GAAG,eAAe,KAAK,SAAS,GAAG,GACtD;AAAA,MACC,CAAC,UAAU,oBAAC,SAAI,WAAU,2CAA0C;AAAA,OACvE;AAAA,IACA,oBAAC,SAAI,WAAU,4BACb,+BAAC,SAAI,WAAU,0CACb;AAAA,2BAAC,SAAI,WAAU,WACb;AAAA,6BAAC,SAAI,WAAU,qCACb;AAAA,8BAAC,UAAK,WAAW,GAAG,yBAAyB,KAAK,SAAS,GACxD,eAAK,OACR;AAAA,UACC,YAAY,UACX,qBAAC,QAAK,MAAM,aAAa,UAAU,OAAO,GAAG,WAAU,sFAAqF;AAAA;AAAA,YAClI;AAAA,aACV,IAEA,qBAAC,UAAK,WAAU,8CAA6C;AAAA;AAAA,YAAQ,WAAW;AAAA,aAAI;AAAA,WAExF;AAAA,QACC,YACC,qBAAC,OAAE,WAAU,qEACV;AAAA,mBAAS,MAAM,GAAG,EAAE;AAAA,UAAE;AAAA,UAAE,SAAS,MAAM,EAAE;AAAA,WAC5C;AAAA,SAEJ;AAAA,MACA,qBAAC,SAAI,WAAU,uBACZ;AAAA,cAAM,OAAO,aACZ,oBAAC,OAAE,WAAU,kDACV,6BAAmB,MAAM,MAAM,SAAS,GAC3C;AAAA,QAEF,oBAAC,OAAE,WAAU,0CAA0C,kBAAQ,MAAM,SAAS,GAAE;AAAA,SAClF;AAAA,OACF,GACF;AAAA,KACF;AAEJ;","names":[]}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ "use client";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+ var notification_row_exports = {};
31
+ __export(notification_row_exports, {
32
+ NotificationRow: () => NotificationRow
33
+ });
34
+ module.exports = __toCommonJS(notification_row_exports);
35
+ var import_jsx_runtime = require("react/jsx-runtime");
36
+ var import_link = __toESM(require("./link.js"), 1);
37
+ var import_image = __toESM(require("./image.js"), 1);
38
+ var import_lucide_react = require("lucide-react");
39
+ var import_time = require("../utils/time.js");
40
+ var import_cn = require("../utils/cn.js");
41
+ var import_notification_meta = require("../data/notification-meta.js");
42
+ function NotificationRow({
43
+ notification,
44
+ onNavigate,
45
+ compact = false
46
+ }) {
47
+ const { type, title, description, image, href, timestamp, isUnread } = notification;
48
+ const Icon = import_notification_meta.NOTIFICATION_ICON[type] ?? import_lucide_react.Bell;
49
+ const colorClass = import_notification_meta.NOTIFICATION_COLOR[type] ?? "text-muted-foreground bg-muted/40";
50
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
51
+ import_link.default,
52
+ {
53
+ href,
54
+ onClick: onNavigate,
55
+ className: (0, import_cn.cn)(
56
+ "flex items-start gap-3 px-4 transition-colors group",
57
+ compact ? "py-3" : "py-4",
58
+ isUnread && "bg-primary/[0.03]",
59
+ "hover:bg-muted/40"
60
+ ),
61
+ children: [
62
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "relative shrink-0 mt-0.5", children: image ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
63
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-10 w-10 rounded-xl overflow-hidden bg-muted ring-1 ring-border/40", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
64
+ import_image.default,
65
+ {
66
+ src: image,
67
+ alt: "",
68
+ width: 40,
69
+ height: 40,
70
+ className: "object-cover w-full h-full",
71
+ unoptimized: true
72
+ }
73
+ ) }),
74
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
75
+ "div",
76
+ {
77
+ className: (0, import_cn.cn)(
78
+ "absolute -bottom-1 -right-1 h-5 w-5 rounded-full border-2 border-background flex items-center justify-center",
79
+ colorClass
80
+ ),
81
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Icon, { className: "h-2.5 w-2.5" })
82
+ }
83
+ )
84
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
85
+ "div",
86
+ {
87
+ className: (0, import_cn.cn)(
88
+ "h-10 w-10 rounded-xl flex items-center justify-center ring-1 ring-border/20",
89
+ colorClass
90
+ ),
91
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Icon, { className: "h-4 w-4" })
92
+ }
93
+ ) }),
94
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex-1 min-w-0 space-y-0.5", children: [
95
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
96
+ "p",
97
+ {
98
+ className: (0, import_cn.cn)(
99
+ "text-sm leading-snug truncate",
100
+ isUnread ? "font-semibold text-foreground" : "font-medium text-foreground/90"
101
+ ),
102
+ children: title
103
+ }
104
+ ),
105
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-xs text-muted-foreground truncate", children: description }),
106
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-[10px] text-muted-foreground/50 pt-0.5", children: (0, import_time.timeAgo)(timestamp) })
107
+ ] }),
108
+ isUnread && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-2 w-2 rounded-full bg-primary shrink-0 mt-2" })
109
+ ]
110
+ }
111
+ );
112
+ }
113
+ // Annotate the CommonJS export names for ESM import in node:
114
+ 0 && (module.exports = {
115
+ NotificationRow
116
+ });
117
+ //# sourceMappingURL=notification-row.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/notification-row.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport Image from \"./image.js\";\nimport { Bell } from \"lucide-react\";\nimport { timeAgo } from \"../utils/time.js\";\nimport { cn } from \"../utils/cn.js\";\nimport { NOTIFICATION_ICON, NOTIFICATION_COLOR } from \"../data/notification-meta.js\";\nimport type { Notification } from \"../data/notification.js\";\n\nexport interface NotificationRowProps {\n notification: Notification;\n onNavigate?: () => void;\n compact?: boolean;\n}\n\nexport function NotificationRow({\n notification,\n onNavigate,\n compact = false,\n}: NotificationRowProps) {\n const { type, title, description, image, href, timestamp, isUnread } = notification;\n const Icon = NOTIFICATION_ICON[type] ?? Bell;\n const colorClass = NOTIFICATION_COLOR[type] ?? \"text-muted-foreground bg-muted/40\";\n\n return (\n <Link\n href={href}\n onClick={onNavigate}\n className={cn(\n \"flex items-start gap-3 px-4 transition-colors group\",\n compact ? \"py-3\" : \"py-4\",\n isUnread && \"bg-primary/[0.03]\",\n \"hover:bg-muted/40\"\n )}\n >\n\n <div className=\"relative shrink-0 mt-0.5\">\n {image ? (\n <>\n <div className=\"h-10 w-10 rounded-xl overflow-hidden bg-muted ring-1 ring-border/40\">\n <Image\n src={image}\n alt=\"\"\n width={40}\n height={40}\n className=\"object-cover w-full h-full\"\n unoptimized\n />\n </div>\n <div\n className={cn(\n \"absolute -bottom-1 -right-1 h-5 w-5 rounded-full border-2 border-background flex items-center justify-center\",\n colorClass\n )}\n >\n <Icon className=\"h-2.5 w-2.5\" />\n </div>\n </>\n ) : (\n <div\n className={cn(\n \"h-10 w-10 rounded-xl flex items-center justify-center ring-1 ring-border/20\",\n colorClass\n )}\n >\n <Icon className=\"h-4 w-4\" />\n </div>\n )}\n </div>\n\n <div className=\"flex-1 min-w-0 space-y-0.5\">\n <p\n className={cn(\n \"text-sm leading-snug truncate\",\n isUnread ? \"font-semibold text-foreground\" : \"font-medium text-foreground/90\"\n )}\n >\n {title}\n </p>\n <p className=\"text-xs text-muted-foreground truncate\">{description}</p>\n <p className=\"text-[10px] text-muted-foreground/50 pt-0.5\">{timeAgo(timestamp)}</p>\n </div>\n\n {isUnread && (\n <div className=\"h-2 w-2 rounded-full bg-primary shrink-0 mt-2\" />\n )}\n </Link>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAuCU;AArCV,kBAAiB;AACjB,mBAAkB;AAClB,0BAAqB;AACrB,kBAAwB;AACxB,gBAAmB;AACnB,+BAAsD;AAS/C,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA,UAAU;AACZ,GAAyB;AACvB,QAAM,EAAE,MAAM,OAAO,aAAa,OAAO,MAAM,WAAW,SAAS,IAAI;AACvE,QAAM,OAAO,2CAAkB,IAAI,KAAK;AACxC,QAAM,aAAa,4CAAmB,IAAI,KAAK;AAE/C,SACE;AAAA,IAAC,YAAAA;AAAA,IAAA;AAAA,MACC;AAAA,MACA,SAAS;AAAA,MACT,eAAW;AAAA,QACT;AAAA,QACA,UAAU,SAAS;AAAA,QACnB,YAAY;AAAA,QACZ;AAAA,MACF;AAAA,MAGA;AAAA,oDAAC,SAAI,WAAU,4BACZ,kBACC,4EACE;AAAA,sDAAC,SAAI,WAAU,uEACb;AAAA,YAAC,aAAAC;AAAA,YAAA;AAAA,cACC,KAAK;AAAA,cACL,KAAI;AAAA,cACJ,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,WAAU;AAAA,cACV,aAAW;AAAA;AAAA,UACb,GACF;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,eAAW;AAAA,gBACT;AAAA,gBACA;AAAA,cACF;AAAA,cAEA,sDAAC,QAAK,WAAU,eAAc;AAAA;AAAA,UAChC;AAAA,WACF,IAEA;AAAA,UAAC;AAAA;AAAA,YACC,eAAW;AAAA,cACT;AAAA,cACA;AAAA,YACF;AAAA,YAEA,sDAAC,QAAK,WAAU,WAAU;AAAA;AAAA,QAC5B,GAEJ;AAAA,QAEA,6CAAC,SAAI,WAAU,8BACb;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,eAAW;AAAA,gBACT;AAAA,gBACA,WAAW,kCAAkC;AAAA,cAC/C;AAAA,cAEC;AAAA;AAAA,UACH;AAAA,UACA,4CAAC,OAAE,WAAU,0CAA0C,uBAAY;AAAA,UACnE,4CAAC,OAAE,WAAU,+CAA+C,mCAAQ,SAAS,GAAE;AAAA,WACjF;AAAA,QAEC,YACC,4CAAC,SAAI,WAAU,iDAAgD;AAAA;AAAA;AAAA,EAEnE;AAEJ;","names":["Link","Image"]}
@@ -0,0 +1,11 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { Notification } from '../data/notification.cjs';
3
+
4
+ interface NotificationRowProps {
5
+ notification: Notification;
6
+ onNavigate?: () => void;
7
+ compact?: boolean;
8
+ }
9
+ declare function NotificationRow({ notification, onNavigate, compact, }: NotificationRowProps): react_jsx_runtime.JSX.Element;
10
+
11
+ export { NotificationRow, type NotificationRowProps };
@@ -0,0 +1,11 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { Notification } from '../data/notification.js';
3
+
4
+ interface NotificationRowProps {
5
+ notification: Notification;
6
+ onNavigate?: () => void;
7
+ compact?: boolean;
8
+ }
9
+ declare function NotificationRow({ notification, onNavigate, compact, }: NotificationRowProps): react_jsx_runtime.JSX.Element;
10
+
11
+ export { NotificationRow, type NotificationRowProps };
@@ -0,0 +1,83 @@
1
+ "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import Link from "./link.js";
4
+ import Image from "./image.js";
5
+ import { Bell } from "lucide-react";
6
+ import { timeAgo } from "../utils/time.js";
7
+ import { cn } from "../utils/cn.js";
8
+ import { NOTIFICATION_ICON, NOTIFICATION_COLOR } from "../data/notification-meta.js";
9
+ function NotificationRow({
10
+ notification,
11
+ onNavigate,
12
+ compact = false
13
+ }) {
14
+ const { type, title, description, image, href, timestamp, isUnread } = notification;
15
+ const Icon = NOTIFICATION_ICON[type] ?? Bell;
16
+ const colorClass = NOTIFICATION_COLOR[type] ?? "text-muted-foreground bg-muted/40";
17
+ return /* @__PURE__ */ jsxs(
18
+ Link,
19
+ {
20
+ href,
21
+ onClick: onNavigate,
22
+ className: cn(
23
+ "flex items-start gap-3 px-4 transition-colors group",
24
+ compact ? "py-3" : "py-4",
25
+ isUnread && "bg-primary/[0.03]",
26
+ "hover:bg-muted/40"
27
+ ),
28
+ children: [
29
+ /* @__PURE__ */ jsx("div", { className: "relative shrink-0 mt-0.5", children: image ? /* @__PURE__ */ jsxs(Fragment, { children: [
30
+ /* @__PURE__ */ jsx("div", { className: "h-10 w-10 rounded-xl overflow-hidden bg-muted ring-1 ring-border/40", children: /* @__PURE__ */ jsx(
31
+ Image,
32
+ {
33
+ src: image,
34
+ alt: "",
35
+ width: 40,
36
+ height: 40,
37
+ className: "object-cover w-full h-full",
38
+ unoptimized: true
39
+ }
40
+ ) }),
41
+ /* @__PURE__ */ jsx(
42
+ "div",
43
+ {
44
+ className: cn(
45
+ "absolute -bottom-1 -right-1 h-5 w-5 rounded-full border-2 border-background flex items-center justify-center",
46
+ colorClass
47
+ ),
48
+ children: /* @__PURE__ */ jsx(Icon, { className: "h-2.5 w-2.5" })
49
+ }
50
+ )
51
+ ] }) : /* @__PURE__ */ jsx(
52
+ "div",
53
+ {
54
+ className: cn(
55
+ "h-10 w-10 rounded-xl flex items-center justify-center ring-1 ring-border/20",
56
+ colorClass
57
+ ),
58
+ children: /* @__PURE__ */ jsx(Icon, { className: "h-4 w-4" })
59
+ }
60
+ ) }),
61
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0 space-y-0.5", children: [
62
+ /* @__PURE__ */ jsx(
63
+ "p",
64
+ {
65
+ className: cn(
66
+ "text-sm leading-snug truncate",
67
+ isUnread ? "font-semibold text-foreground" : "font-medium text-foreground/90"
68
+ ),
69
+ children: title
70
+ }
71
+ ),
72
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground truncate", children: description }),
73
+ /* @__PURE__ */ jsx("p", { className: "text-[10px] text-muted-foreground/50 pt-0.5", children: timeAgo(timestamp) })
74
+ ] }),
75
+ isUnread && /* @__PURE__ */ jsx("div", { className: "h-2 w-2 rounded-full bg-primary shrink-0 mt-2" })
76
+ ]
77
+ }
78
+ );
79
+ }
80
+ export {
81
+ NotificationRow
82
+ };
83
+ //# sourceMappingURL=notification-row.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/notification-row.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport Image from \"./image.js\";\nimport { Bell } from \"lucide-react\";\nimport { timeAgo } from \"../utils/time.js\";\nimport { cn } from \"../utils/cn.js\";\nimport { NOTIFICATION_ICON, NOTIFICATION_COLOR } from \"../data/notification-meta.js\";\nimport type { Notification } from \"../data/notification.js\";\n\nexport interface NotificationRowProps {\n notification: Notification;\n onNavigate?: () => void;\n compact?: boolean;\n}\n\nexport function NotificationRow({\n notification,\n onNavigate,\n compact = false,\n}: NotificationRowProps) {\n const { type, title, description, image, href, timestamp, isUnread } = notification;\n const Icon = NOTIFICATION_ICON[type] ?? Bell;\n const colorClass = NOTIFICATION_COLOR[type] ?? \"text-muted-foreground bg-muted/40\";\n\n return (\n <Link\n href={href}\n onClick={onNavigate}\n className={cn(\n \"flex items-start gap-3 px-4 transition-colors group\",\n compact ? \"py-3\" : \"py-4\",\n isUnread && \"bg-primary/[0.03]\",\n \"hover:bg-muted/40\"\n )}\n >\n\n <div className=\"relative shrink-0 mt-0.5\">\n {image ? (\n <>\n <div className=\"h-10 w-10 rounded-xl overflow-hidden bg-muted ring-1 ring-border/40\">\n <Image\n src={image}\n alt=\"\"\n width={40}\n height={40}\n className=\"object-cover w-full h-full\"\n unoptimized\n />\n </div>\n <div\n className={cn(\n \"absolute -bottom-1 -right-1 h-5 w-5 rounded-full border-2 border-background flex items-center justify-center\",\n colorClass\n )}\n >\n <Icon className=\"h-2.5 w-2.5\" />\n </div>\n </>\n ) : (\n <div\n className={cn(\n \"h-10 w-10 rounded-xl flex items-center justify-center ring-1 ring-border/20\",\n colorClass\n )}\n >\n <Icon className=\"h-4 w-4\" />\n </div>\n )}\n </div>\n\n <div className=\"flex-1 min-w-0 space-y-0.5\">\n <p\n className={cn(\n \"text-sm leading-snug truncate\",\n isUnread ? \"font-semibold text-foreground\" : \"font-medium text-foreground/90\"\n )}\n >\n {title}\n </p>\n <p className=\"text-xs text-muted-foreground truncate\">{description}</p>\n <p className=\"text-[10px] text-muted-foreground/50 pt-0.5\">{timeAgo(timestamp)}</p>\n </div>\n\n {isUnread && (\n <div className=\"h-2 w-2 rounded-full bg-primary shrink-0 mt-2\" />\n )}\n </Link>\n );\n}\n"],"mappings":";AAuCU,mBAEI,KAFJ;AArCV,OAAO,UAAU;AACjB,OAAO,WAAW;AAClB,SAAS,YAAY;AACrB,SAAS,eAAe;AACxB,SAAS,UAAU;AACnB,SAAS,mBAAmB,0BAA0B;AAS/C,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA,UAAU;AACZ,GAAyB;AACvB,QAAM,EAAE,MAAM,OAAO,aAAa,OAAO,MAAM,WAAW,SAAS,IAAI;AACvE,QAAM,OAAO,kBAAkB,IAAI,KAAK;AACxC,QAAM,aAAa,mBAAmB,IAAI,KAAK;AAE/C,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,SAAS;AAAA,MACT,WAAW;AAAA,QACT;AAAA,QACA,UAAU,SAAS;AAAA,QACnB,YAAY;AAAA,QACZ;AAAA,MACF;AAAA,MAGA;AAAA,4BAAC,SAAI,WAAU,4BACZ,kBACC,iCACE;AAAA,8BAAC,SAAI,WAAU,uEACb;AAAA,YAAC;AAAA;AAAA,cACC,KAAK;AAAA,cACL,KAAI;AAAA,cACJ,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,WAAU;AAAA,cACV,aAAW;AAAA;AAAA,UACb,GACF;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA;AAAA,cACF;AAAA,cAEA,8BAAC,QAAK,WAAU,eAAc;AAAA;AAAA,UAChC;AAAA,WACF,IAEA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA;AAAA,YACF;AAAA,YAEA,8BAAC,QAAK,WAAU,WAAU;AAAA;AAAA,QAC5B,GAEJ;AAAA,QAEA,qBAAC,SAAI,WAAU,8BACb;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,WAAW,kCAAkC;AAAA,cAC/C;AAAA,cAEC;AAAA;AAAA,UACH;AAAA,UACA,oBAAC,OAAE,WAAU,0CAA0C,uBAAY;AAAA,UACnE,oBAAC,OAAE,WAAU,+CAA+C,kBAAQ,SAAS,GAAE;AAAA,WACjF;AAAA,QAEC,YACC,oBAAC,SAAI,WAAU,iDAAgD;AAAA;AAAA;AAAA,EAEnE;AAEJ;","names":[]}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var notification_meta_exports = {};
20
+ __export(notification_meta_exports, {
21
+ NOTIFICATION_COLOR: () => NOTIFICATION_COLOR,
22
+ NOTIFICATION_ICON: () => NOTIFICATION_ICON,
23
+ NOTIFICATION_LABEL: () => NOTIFICATION_LABEL
24
+ });
25
+ module.exports = __toCommonJS(notification_meta_exports);
26
+ var import_lucide_react = require("lucide-react");
27
+ const NOTIFICATION_ICON = {
28
+ offer_accepted: import_lucide_react.CheckCircle2,
29
+ asset_received: import_lucide_react.Gift,
30
+ offer: import_lucide_react.HandCoins,
31
+ sale: import_lucide_react.Zap,
32
+ listing: import_lucide_react.Tag,
33
+ mint: import_lucide_react.Sparkles,
34
+ transfer: import_lucide_react.ArrowRightLeft,
35
+ cancelled: import_lucide_react.X,
36
+ announcement: import_lucide_react.Megaphone
37
+ };
38
+ const NOTIFICATION_COLOR = {
39
+ offer_accepted: "text-emerald-400 bg-emerald-500/10",
40
+ asset_received: "text-teal-400 bg-teal-500/10",
41
+ offer: "text-amber-400 bg-amber-500/10",
42
+ sale: "text-violet-400 bg-violet-500/10",
43
+ listing: "text-sky-400 bg-sky-500/10",
44
+ mint: "text-emerald-400 bg-emerald-500/10",
45
+ transfer: "text-slate-400 bg-slate-500/10",
46
+ cancelled: "text-rose-400 bg-rose-500/10",
47
+ announcement: "text-purple-400 bg-purple-500/10"
48
+ };
49
+ const NOTIFICATION_LABEL = {
50
+ offer_accepted: "Offer accepted",
51
+ asset_received: "Asset received",
52
+ offer: "New offer",
53
+ sale: "Sale",
54
+ listing: "Listing",
55
+ mint: "Mint",
56
+ transfer: "Transfer",
57
+ cancelled: "Cancelled",
58
+ announcement: "Announcement"
59
+ };
60
+ // Annotate the CommonJS export names for ESM import in node:
61
+ 0 && (module.exports = {
62
+ NOTIFICATION_COLOR,
63
+ NOTIFICATION_ICON,
64
+ NOTIFICATION_LABEL
65
+ });
66
+ //# sourceMappingURL=notification-meta.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/data/notification-meta.ts"],"sourcesContent":["import {\n CheckCircle2, Gift, HandCoins, Megaphone, Zap, Tag, Sparkles, ArrowRightLeft, X,\n} from \"lucide-react\";\nimport type { NotificationType } from \"./notification.js\";\n\nexport const NOTIFICATION_ICON: Record<NotificationType, React.ElementType> = {\n offer_accepted: CheckCircle2,\n asset_received: Gift,\n offer: HandCoins,\n sale: Zap,\n listing: Tag,\n mint: Sparkles,\n transfer: ArrowRightLeft,\n cancelled: X,\n announcement: Megaphone,\n};\n\nexport const NOTIFICATION_COLOR: Record<NotificationType, string> = {\n offer_accepted: \"text-emerald-400 bg-emerald-500/10\",\n asset_received: \"text-teal-400 bg-teal-500/10\",\n offer: \"text-amber-400 bg-amber-500/10\",\n sale: \"text-violet-400 bg-violet-500/10\",\n listing: \"text-sky-400 bg-sky-500/10\",\n mint: \"text-emerald-400 bg-emerald-500/10\",\n transfer: \"text-slate-400 bg-slate-500/10\",\n cancelled: \"text-rose-400 bg-rose-500/10\",\n announcement: \"text-purple-400 bg-purple-500/10\",\n};\n\nexport const NOTIFICATION_LABEL: Record<NotificationType, string> = {\n offer_accepted: \"Offer accepted\",\n asset_received: \"Asset received\",\n offer: \"New offer\",\n sale: \"Sale\",\n listing: \"Listing\",\n mint: \"Mint\",\n transfer: \"Transfer\",\n cancelled: \"Cancelled\",\n announcement: \"Announcement\",\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAEO;AAGA,MAAM,oBAAiE;AAAA,EAC5E,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,OAAgB;AAAA,EAChB,MAAgB;AAAA,EAChB,SAAgB;AAAA,EAChB,MAAgB;AAAA,EAChB,UAAgB;AAAA,EAChB,WAAgB;AAAA,EAChB,cAAgB;AAClB;AAEO,MAAM,qBAAuD;AAAA,EAClE,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,OAAgB;AAAA,EAChB,MAAgB;AAAA,EAChB,SAAgB;AAAA,EAChB,MAAgB;AAAA,EAChB,UAAgB;AAAA,EAChB,WAAgB;AAAA,EAChB,cAAgB;AAClB;AAEO,MAAM,qBAAuD;AAAA,EAClE,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,OAAgB;AAAA,EAChB,MAAgB;AAAA,EAChB,SAAgB;AAAA,EAChB,MAAgB;AAAA,EAChB,UAAgB;AAAA,EAChB,WAAgB;AAAA,EAChB,cAAgB;AAClB;","names":[]}
@@ -0,0 +1,7 @@
1
+ import { NotificationType } from './notification.cjs';
2
+
3
+ declare const NOTIFICATION_ICON: Record<NotificationType, React.ElementType>;
4
+ declare const NOTIFICATION_COLOR: Record<NotificationType, string>;
5
+ declare const NOTIFICATION_LABEL: Record<NotificationType, string>;
6
+
7
+ export { NOTIFICATION_COLOR, NOTIFICATION_ICON, NOTIFICATION_LABEL };
@@ -0,0 +1,7 @@
1
+ import { NotificationType } from './notification.js';
2
+
3
+ declare const NOTIFICATION_ICON: Record<NotificationType, React.ElementType>;
4
+ declare const NOTIFICATION_COLOR: Record<NotificationType, string>;
5
+ declare const NOTIFICATION_LABEL: Record<NotificationType, string>;
6
+
7
+ export { NOTIFICATION_COLOR, NOTIFICATION_ICON, NOTIFICATION_LABEL };
@@ -0,0 +1,50 @@
1
+ import {
2
+ CheckCircle2,
3
+ Gift,
4
+ HandCoins,
5
+ Megaphone,
6
+ Zap,
7
+ Tag,
8
+ Sparkles,
9
+ ArrowRightLeft,
10
+ X
11
+ } from "lucide-react";
12
+ const NOTIFICATION_ICON = {
13
+ offer_accepted: CheckCircle2,
14
+ asset_received: Gift,
15
+ offer: HandCoins,
16
+ sale: Zap,
17
+ listing: Tag,
18
+ mint: Sparkles,
19
+ transfer: ArrowRightLeft,
20
+ cancelled: X,
21
+ announcement: Megaphone
22
+ };
23
+ const NOTIFICATION_COLOR = {
24
+ offer_accepted: "text-emerald-400 bg-emerald-500/10",
25
+ asset_received: "text-teal-400 bg-teal-500/10",
26
+ offer: "text-amber-400 bg-amber-500/10",
27
+ sale: "text-violet-400 bg-violet-500/10",
28
+ listing: "text-sky-400 bg-sky-500/10",
29
+ mint: "text-emerald-400 bg-emerald-500/10",
30
+ transfer: "text-slate-400 bg-slate-500/10",
31
+ cancelled: "text-rose-400 bg-rose-500/10",
32
+ announcement: "text-purple-400 bg-purple-500/10"
33
+ };
34
+ const NOTIFICATION_LABEL = {
35
+ offer_accepted: "Offer accepted",
36
+ asset_received: "Asset received",
37
+ offer: "New offer",
38
+ sale: "Sale",
39
+ listing: "Listing",
40
+ mint: "Mint",
41
+ transfer: "Transfer",
42
+ cancelled: "Cancelled",
43
+ announcement: "Announcement"
44
+ };
45
+ export {
46
+ NOTIFICATION_COLOR,
47
+ NOTIFICATION_ICON,
48
+ NOTIFICATION_LABEL
49
+ };
50
+ //# sourceMappingURL=notification-meta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/data/notification-meta.ts"],"sourcesContent":["import {\n CheckCircle2, Gift, HandCoins, Megaphone, Zap, Tag, Sparkles, ArrowRightLeft, X,\n} from \"lucide-react\";\nimport type { NotificationType } from \"./notification.js\";\n\nexport const NOTIFICATION_ICON: Record<NotificationType, React.ElementType> = {\n offer_accepted: CheckCircle2,\n asset_received: Gift,\n offer: HandCoins,\n sale: Zap,\n listing: Tag,\n mint: Sparkles,\n transfer: ArrowRightLeft,\n cancelled: X,\n announcement: Megaphone,\n};\n\nexport const NOTIFICATION_COLOR: Record<NotificationType, string> = {\n offer_accepted: \"text-emerald-400 bg-emerald-500/10\",\n asset_received: \"text-teal-400 bg-teal-500/10\",\n offer: \"text-amber-400 bg-amber-500/10\",\n sale: \"text-violet-400 bg-violet-500/10\",\n listing: \"text-sky-400 bg-sky-500/10\",\n mint: \"text-emerald-400 bg-emerald-500/10\",\n transfer: \"text-slate-400 bg-slate-500/10\",\n cancelled: \"text-rose-400 bg-rose-500/10\",\n announcement: \"text-purple-400 bg-purple-500/10\",\n};\n\nexport const NOTIFICATION_LABEL: Record<NotificationType, string> = {\n offer_accepted: \"Offer accepted\",\n asset_received: \"Asset received\",\n offer: \"New offer\",\n sale: \"Sale\",\n listing: \"Listing\",\n mint: \"Mint\",\n transfer: \"Transfer\",\n cancelled: \"Cancelled\",\n announcement: \"Announcement\",\n};\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EAAc;AAAA,EAAM;AAAA,EAAW;AAAA,EAAW;AAAA,EAAK;AAAA,EAAK;AAAA,EAAU;AAAA,EAAgB;AAAA,OACzE;AAGA,MAAM,oBAAiE;AAAA,EAC5E,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,OAAgB;AAAA,EAChB,MAAgB;AAAA,EAChB,SAAgB;AAAA,EAChB,MAAgB;AAAA,EAChB,UAAgB;AAAA,EAChB,WAAgB;AAAA,EAChB,cAAgB;AAClB;AAEO,MAAM,qBAAuD;AAAA,EAClE,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,OAAgB;AAAA,EAChB,MAAgB;AAAA,EAChB,SAAgB;AAAA,EAChB,MAAgB;AAAA,EAChB,UAAgB;AAAA,EAChB,WAAgB;AAAA,EAChB,cAAgB;AAClB;AAEO,MAAM,qBAAuD;AAAA,EAClE,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,OAAgB;AAAA,EAChB,MAAgB;AAAA,EAChB,SAAgB;AAAA,EAChB,MAAgB;AAAA,EAChB,UAAgB;AAAA,EAChB,WAAgB;AAAA,EAChB,cAAgB;AAClB;","names":[]}