@medialane/ui 0.308.0 → 0.309.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.
@@ -1,7 +1,7 @@
1
1
  import * as input_otp from 'input-otp';
2
2
  import * as React from 'react';
3
3
 
4
- declare const InputOTP: React.ForwardRefExoticComponent<(Omit<Omit<React.InputHTMLAttributes<HTMLInputElement>, "onChange" | "value" | "maxLength" | "textAlign" | "onComplete" | "pushPasswordManagerStrategy" | "pasteTransformer" | "containerClassName" | "noScriptCSSFallback"> & {
4
+ declare const InputOTP: React.ForwardRefExoticComponent<(Omit<Omit<React.InputHTMLAttributes<HTMLInputElement>, "value" | "onChange" | "maxLength" | "textAlign" | "onComplete" | "pushPasswordManagerStrategy" | "pasteTransformer" | "containerClassName" | "noScriptCSSFallback"> & {
5
5
  value?: string;
6
6
  onChange?: (newValue: string) => unknown;
7
7
  maxLength: number;
@@ -14,7 +14,7 @@ declare const InputOTP: React.ForwardRefExoticComponent<(Omit<Omit<React.InputHT
14
14
  } & {
15
15
  render: (props: input_otp.RenderProps) => React.ReactNode;
16
16
  children?: never;
17
- } & React.RefAttributes<HTMLInputElement>, "ref"> | Omit<Omit<React.InputHTMLAttributes<HTMLInputElement>, "onChange" | "value" | "maxLength" | "textAlign" | "onComplete" | "pushPasswordManagerStrategy" | "pasteTransformer" | "containerClassName" | "noScriptCSSFallback"> & {
17
+ } & React.RefAttributes<HTMLInputElement>, "ref"> | Omit<Omit<React.InputHTMLAttributes<HTMLInputElement>, "value" | "onChange" | "maxLength" | "textAlign" | "onComplete" | "pushPasswordManagerStrategy" | "pasteTransformer" | "containerClassName" | "noScriptCSSFallback"> & {
18
18
  value?: string;
19
19
  onChange?: (newValue: string) => unknown;
20
20
  maxLength: number;
@@ -1,7 +1,7 @@
1
1
  import * as input_otp from 'input-otp';
2
2
  import * as React from 'react';
3
3
 
4
- declare const InputOTP: React.ForwardRefExoticComponent<(Omit<Omit<React.InputHTMLAttributes<HTMLInputElement>, "onChange" | "value" | "maxLength" | "textAlign" | "onComplete" | "pushPasswordManagerStrategy" | "pasteTransformer" | "containerClassName" | "noScriptCSSFallback"> & {
4
+ declare const InputOTP: React.ForwardRefExoticComponent<(Omit<Omit<React.InputHTMLAttributes<HTMLInputElement>, "value" | "onChange" | "maxLength" | "textAlign" | "onComplete" | "pushPasswordManagerStrategy" | "pasteTransformer" | "containerClassName" | "noScriptCSSFallback"> & {
5
5
  value?: string;
6
6
  onChange?: (newValue: string) => unknown;
7
7
  maxLength: number;
@@ -14,7 +14,7 @@ declare const InputOTP: React.ForwardRefExoticComponent<(Omit<Omit<React.InputHT
14
14
  } & {
15
15
  render: (props: input_otp.RenderProps) => React.ReactNode;
16
16
  children?: never;
17
- } & React.RefAttributes<HTMLInputElement>, "ref"> | Omit<Omit<React.InputHTMLAttributes<HTMLInputElement>, "onChange" | "value" | "maxLength" | "textAlign" | "onComplete" | "pushPasswordManagerStrategy" | "pasteTransformer" | "containerClassName" | "noScriptCSSFallback"> & {
17
+ } & React.RefAttributes<HTMLInputElement>, "ref"> | Omit<Omit<React.InputHTMLAttributes<HTMLInputElement>, "value" | "onChange" | "maxLength" | "textAlign" | "onComplete" | "pushPasswordManagerStrategy" | "pasteTransformer" | "containerClassName" | "noScriptCSSFallback"> & {
18
18
  value?: string;
19
19
  onChange?: (newValue: string) => unknown;
20
20
  maxLength: number;
@@ -69,7 +69,6 @@ function AssetCard({
69
69
  ),
70
70
  children: [
71
71
  ipType && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "absolute top-2 right-2 z-10", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ip_type_badge.IpTypeBadge, { ipType, size: "sm", baseUrl: ipTypeBaseUrl }) }),
72
- soulbound && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "absolute top-2 left-2 z-10", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_soulbound_card.SoulboundBadge, {}) }),
73
72
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_link.default, { href, className: "block relative aspect-square bg-muted overflow-hidden", children: [
74
73
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
75
74
  import_animated_token_media.AnimatedTokenMedia,
@@ -97,6 +96,7 @@ function AssetCard({
97
96
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-base font-semibold tracking-tight line-clamp-2 break-words leading-snug", children: name }),
98
97
  subtitle && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-xs text-muted-foreground line-clamp-1 leading-snug", children: subtitle })
99
98
  ] }),
99
+ soulbound && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_soulbound_card.SoulboundBadge, {}),
100
100
  hasPrice && !indexing && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex items-center gap-1.5 text-sm font-bold tabular-nums pt-0.5", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
101
101
  import_dual_price.PriceChipContent,
102
102
  {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/asset-card.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { Loader2 } from \"lucide-react\";\nimport { cn } from \"../utils/cn.js\";\nimport { PriceChipContent } from \"./dual-price.js\";\nimport { IpTypeBadge } from \"./ip-type-badge.js\";\nimport { SoulboundBadge } from \"./soulbound-card.js\";\nimport { AnimatedTokenMedia } from \"./animated-token-media.js\";\nimport { useImageUrl } from \"../utils/use-image-url.js\";\n\nexport interface AssetCardPrice {\n formatted?: string | null;\n currency?: string | null;\n\n usdValue?: string | null;\n}\n\nexport interface AssetCardProps {\n\n href: string;\n\n name: string;\n\n image?: string | null;\n\n animationUrl?: string | null;\n\n live?: boolean;\n\n subtitle?: string | null;\n\n ipType?: string | null;\n\n price?: AssetCardPrice | null;\n\n fallbackId?: string | null;\n\n indexing?: boolean;\n\n soulbound?: boolean;\n\n ipTypeBaseUrl?: string;\n className?: string;\n}\n\nexport function AssetCard({\n href,\n name,\n image,\n animationUrl,\n live = false,\n subtitle,\n ipType,\n price,\n fallbackId,\n indexing = false,\n soulbound = false,\n ipTypeBaseUrl = \"\",\n className,\n}: AssetCardProps) {\n const resolveImage = useImageUrl();\n const resolved = resolveImage(image, { width: 480 });\n const hasPrice = !!price?.formatted;\n\n return (\n <div\n className={cn(\n \"group relative flex flex-col w-full overflow-hidden rounded-xl bg-card\",\n className\n )}\n >\n\n {ipType && (\n <div className=\"absolute top-2 right-2 z-10\">\n <IpTypeBadge ipType={ipType} size=\"sm\" baseUrl={ipTypeBaseUrl} />\n </div>\n )}\n\n {soulbound && (\n <div className=\"absolute top-2 left-2 z-10\">\n <SoulboundBadge />\n </div>\n )}\n\n <Link href={href} className=\"block relative aspect-square bg-muted overflow-hidden\">\n <AnimatedTokenMedia\n image={resolved}\n animationUrl={animationUrl}\n live={live}\n alt={name}\n mode=\"fill\"\n sizes=\"(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 22vw\"\n className=\"object-cover transition-transform duration-700 ease-out group-hover:scale-[1.03]\"\n fallback={\n <div className=\"absolute inset-0 flex items-center justify-center bg-gradient-to-br from-brand-blue/25 via-brand-purple/25 to-brand-rose/25\">\n <span className=\"text-sm font-semibold text-muted-foreground tabular-nums\">\n #{fallbackId ?? \"?\"}\n </span>\n </div>\n }\n />\n\n {indexing && (\n <div className=\"absolute bottom-0 inset-x-0 flex items-center justify-center gap-1.5 bg-black/50 backdrop-blur-sm py-1.5\">\n <Loader2 className=\"h-3 w-3 animate-spin text-white/70\" />\n <span className=\"text-2xs text-white/70\">Indexing…</span>\n </div>\n )}\n </Link>\n\n <div className=\"px-3 py-3 space-y-1\">\n <Link href={href} className=\"block min-w-0\">\n <p className=\"text-base font-semibold tracking-tight line-clamp-2 break-words leading-snug\">\n {name}\n </p>\n {subtitle && (\n <p className=\"text-xs text-muted-foreground line-clamp-1 leading-snug\">\n {subtitle}\n </p>\n )}\n </Link>\n\n {hasPrice && !indexing && (\n <div className=\"flex items-center gap-1.5 text-sm font-bold tabular-nums pt-0.5\">\n <PriceChipContent\n amountFormatted={price!.formatted}\n currency={price!.currency}\n usdValue={price!.usdValue}\n tone=\"solid\"\n />\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport function AssetCardSkeleton() {\n return (\n <div className=\"flex flex-col w-full overflow-hidden rounded-xl bg-card\">\n <div className=\"aspect-square w-full animate-pulse bg-muted\" />\n <div className=\"px-3 py-3 space-y-1.5\">\n <div className=\"h-4 w-3/4 rounded-md animate-pulse bg-muted\" />\n <div className=\"h-3.5 w-2/5 rounded-md animate-pulse bg-muted\" />\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2EU;AAzEV,kBAAiB;AACjB,0BAAwB;AACxB,gBAAmB;AACnB,wBAAiC;AACjC,2BAA4B;AAC5B,4BAA+B;AAC/B,kCAAmC;AACnC,2BAA4B;AAqCrB,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB;AACF,GAAmB;AACjB,QAAM,mBAAe,kCAAY;AACjC,QAAM,WAAW,aAAa,OAAO,EAAE,OAAO,IAAI,CAAC;AACnD,QAAM,WAAW,CAAC,CAAC,OAAO;AAE1B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAGC;AAAA,kBACC,4CAAC,SAAI,WAAU,+BACb,sDAAC,oCAAY,QAAgB,MAAK,MAAK,SAAS,eAAe,GACjE;AAAA,QAGD,aACC,4CAAC,SAAI,WAAU,8BACb,sDAAC,wCAAe,GAClB;AAAA,QAGF,6CAAC,YAAAA,SAAA,EAAK,MAAY,WAAU,yDAC1B;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA,KAAK;AAAA,cACL,MAAK;AAAA,cACL,OAAM;AAAA,cACN,WAAU;AAAA,cACV,UACE,4CAAC,SAAI,WAAU,+HACb,uDAAC,UAAK,WAAU,4DAA2D;AAAA;AAAA,gBACvE,cAAc;AAAA,iBAClB,GACF;AAAA;AAAA,UAEJ;AAAA,UAEC,YACC,6CAAC,SAAI,WAAU,4GACb;AAAA,wDAAC,+BAAQ,WAAU,sCAAqC;AAAA,YACxD,4CAAC,UAAK,WAAU,0BAAyB,4BAAS;AAAA,aACpD;AAAA,WAEJ;AAAA,QAEA,6CAAC,SAAI,WAAU,uBACb;AAAA,uDAAC,YAAAA,SAAA,EAAK,MAAY,WAAU,iBAC1B;AAAA,wDAAC,OAAE,WAAU,gFACV,gBACH;AAAA,YACC,YACC,4CAAC,OAAE,WAAU,2DACV,oBACH;AAAA,aAEJ;AAAA,UAEC,YAAY,CAAC,YACZ,4CAAC,SAAI,WAAU,mEACb;AAAA,YAAC;AAAA;AAAA,cACC,iBAAiB,MAAO;AAAA,cACxB,UAAU,MAAO;AAAA,cACjB,UAAU,MAAO;AAAA,cACjB,MAAK;AAAA;AAAA,UACP,GACF;AAAA,WAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,oBAAoB;AAClC,SACE,6CAAC,SAAI,WAAU,2DACb;AAAA,gDAAC,SAAI,WAAU,+CAA8C;AAAA,IAC7D,6CAAC,SAAI,WAAU,yBACb;AAAA,kDAAC,SAAI,WAAU,+CAA8C;AAAA,MAC7D,4CAAC,SAAI,WAAU,iDAAgD;AAAA,OACjE;AAAA,KACF;AAEJ;","names":["Link"]}
1
+ {"version":3,"sources":["../../src/components/asset-card.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { Loader2 } from \"lucide-react\";\nimport { cn } from \"../utils/cn.js\";\nimport { PriceChipContent } from \"./dual-price.js\";\nimport { IpTypeBadge } from \"./ip-type-badge.js\";\nimport { SoulboundBadge } from \"./soulbound-card.js\";\nimport { AnimatedTokenMedia } from \"./animated-token-media.js\";\nimport { useImageUrl } from \"../utils/use-image-url.js\";\n\nexport interface AssetCardPrice {\n formatted?: string | null;\n currency?: string | null;\n\n usdValue?: string | null;\n}\n\nexport interface AssetCardProps {\n\n href: string;\n\n name: string;\n\n image?: string | null;\n\n animationUrl?: string | null;\n\n live?: boolean;\n\n subtitle?: string | null;\n\n ipType?: string | null;\n\n price?: AssetCardPrice | null;\n\n fallbackId?: string | null;\n\n indexing?: boolean;\n\n soulbound?: boolean;\n\n ipTypeBaseUrl?: string;\n className?: string;\n}\n\nexport function AssetCard({\n href,\n name,\n image,\n animationUrl,\n live = false,\n subtitle,\n ipType,\n price,\n fallbackId,\n indexing = false,\n soulbound = false,\n ipTypeBaseUrl = \"\",\n className,\n}: AssetCardProps) {\n const resolveImage = useImageUrl();\n const resolved = resolveImage(image, { width: 480 });\n const hasPrice = !!price?.formatted;\n\n return (\n <div\n className={cn(\n \"group relative flex flex-col w-full overflow-hidden rounded-xl bg-card\",\n className\n )}\n >\n\n {ipType && (\n <div className=\"absolute top-2 right-2 z-10\">\n <IpTypeBadge ipType={ipType} size=\"sm\" baseUrl={ipTypeBaseUrl} />\n </div>\n )}\n\n <Link href={href} className=\"block relative aspect-square bg-muted overflow-hidden\">\n <AnimatedTokenMedia\n image={resolved}\n animationUrl={animationUrl}\n live={live}\n alt={name}\n mode=\"fill\"\n sizes=\"(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 22vw\"\n className=\"object-cover transition-transform duration-700 ease-out group-hover:scale-[1.03]\"\n fallback={\n <div className=\"absolute inset-0 flex items-center justify-center bg-gradient-to-br from-brand-blue/25 via-brand-purple/25 to-brand-rose/25\">\n <span className=\"text-sm font-semibold text-muted-foreground tabular-nums\">\n #{fallbackId ?? \"?\"}\n </span>\n </div>\n }\n />\n\n {indexing && (\n <div className=\"absolute bottom-0 inset-x-0 flex items-center justify-center gap-1.5 bg-black/50 backdrop-blur-sm py-1.5\">\n <Loader2 className=\"h-3 w-3 animate-spin text-white/70\" />\n <span className=\"text-2xs text-white/70\">Indexing…</span>\n </div>\n )}\n </Link>\n\n <div className=\"px-3 py-3 space-y-1\">\n <Link href={href} className=\"block min-w-0\">\n <p className=\"text-base font-semibold tracking-tight line-clamp-2 break-words leading-snug\">\n {name}\n </p>\n {subtitle && (\n <p className=\"text-xs text-muted-foreground line-clamp-1 leading-snug\">\n {subtitle}\n </p>\n )}\n </Link>\n\n {soulbound && <SoulboundBadge />}\n\n {hasPrice && !indexing && (\n <div className=\"flex items-center gap-1.5 text-sm font-bold tabular-nums pt-0.5\">\n <PriceChipContent\n amountFormatted={price!.formatted}\n currency={price!.currency}\n usdValue={price!.usdValue}\n tone=\"solid\"\n />\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport function AssetCardSkeleton() {\n return (\n <div className=\"flex flex-col w-full overflow-hidden rounded-xl bg-card\">\n <div className=\"aspect-square w-full animate-pulse bg-muted\" />\n <div className=\"px-3 py-3 space-y-1.5\">\n <div className=\"h-4 w-3/4 rounded-md animate-pulse bg-muted\" />\n <div className=\"h-3.5 w-2/5 rounded-md animate-pulse bg-muted\" />\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2EU;AAzEV,kBAAiB;AACjB,0BAAwB;AACxB,gBAAmB;AACnB,wBAAiC;AACjC,2BAA4B;AAC5B,4BAA+B;AAC/B,kCAAmC;AACnC,2BAA4B;AAqCrB,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB;AACF,GAAmB;AACjB,QAAM,mBAAe,kCAAY;AACjC,QAAM,WAAW,aAAa,OAAO,EAAE,OAAO,IAAI,CAAC;AACnD,QAAM,WAAW,CAAC,CAAC,OAAO;AAE1B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAGC;AAAA,kBACC,4CAAC,SAAI,WAAU,+BACb,sDAAC,oCAAY,QAAgB,MAAK,MAAK,SAAS,eAAe,GACjE;AAAA,QAGF,6CAAC,YAAAA,SAAA,EAAK,MAAY,WAAU,yDAC1B;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA,KAAK;AAAA,cACL,MAAK;AAAA,cACL,OAAM;AAAA,cACN,WAAU;AAAA,cACV,UACE,4CAAC,SAAI,WAAU,+HACb,uDAAC,UAAK,WAAU,4DAA2D;AAAA;AAAA,gBACvE,cAAc;AAAA,iBAClB,GACF;AAAA;AAAA,UAEJ;AAAA,UAEC,YACC,6CAAC,SAAI,WAAU,4GACb;AAAA,wDAAC,+BAAQ,WAAU,sCAAqC;AAAA,YACxD,4CAAC,UAAK,WAAU,0BAAyB,4BAAS;AAAA,aACpD;AAAA,WAEJ;AAAA,QAEA,6CAAC,SAAI,WAAU,uBACb;AAAA,uDAAC,YAAAA,SAAA,EAAK,MAAY,WAAU,iBAC1B;AAAA,wDAAC,OAAE,WAAU,gFACV,gBACH;AAAA,YACC,YACC,4CAAC,OAAE,WAAU,2DACV,oBACH;AAAA,aAEJ;AAAA,UAEC,aAAa,4CAAC,wCAAe;AAAA,UAE7B,YAAY,CAAC,YACZ,4CAAC,SAAI,WAAU,mEACb;AAAA,YAAC;AAAA;AAAA,cACC,iBAAiB,MAAO;AAAA,cACxB,UAAU,MAAO;AAAA,cACjB,UAAU,MAAO;AAAA,cACjB,MAAK;AAAA;AAAA,UACP,GACF;AAAA,WAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,oBAAoB;AAClC,SACE,6CAAC,SAAI,WAAU,2DACb;AAAA,gDAAC,SAAI,WAAU,+CAA8C;AAAA,IAC7D,6CAAC,SAAI,WAAU,yBACb;AAAA,kDAAC,SAAI,WAAU,+CAA8C;AAAA,MAC7D,4CAAC,SAAI,WAAU,iDAAgD;AAAA,OACjE;AAAA,KACF;AAEJ;","names":["Link"]}
@@ -35,7 +35,6 @@ function AssetCard({
35
35
  ),
36
36
  children: [
37
37
  ipType && /* @__PURE__ */ jsx("div", { className: "absolute top-2 right-2 z-10", children: /* @__PURE__ */ jsx(IpTypeBadge, { ipType, size: "sm", baseUrl: ipTypeBaseUrl }) }),
38
- soulbound && /* @__PURE__ */ jsx("div", { className: "absolute top-2 left-2 z-10", children: /* @__PURE__ */ jsx(SoulboundBadge, {}) }),
39
38
  /* @__PURE__ */ jsxs(Link, { href, className: "block relative aspect-square bg-muted overflow-hidden", children: [
40
39
  /* @__PURE__ */ jsx(
41
40
  AnimatedTokenMedia,
@@ -63,6 +62,7 @@ function AssetCard({
63
62
  /* @__PURE__ */ jsx("p", { className: "text-base font-semibold tracking-tight line-clamp-2 break-words leading-snug", children: name }),
64
63
  subtitle && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground line-clamp-1 leading-snug", children: subtitle })
65
64
  ] }),
65
+ soulbound && /* @__PURE__ */ jsx(SoulboundBadge, {}),
66
66
  hasPrice && !indexing && /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1.5 text-sm font-bold tabular-nums pt-0.5", children: /* @__PURE__ */ jsx(
67
67
  PriceChipContent,
68
68
  {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/asset-card.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { Loader2 } from \"lucide-react\";\nimport { cn } from \"../utils/cn.js\";\nimport { PriceChipContent } from \"./dual-price.js\";\nimport { IpTypeBadge } from \"./ip-type-badge.js\";\nimport { SoulboundBadge } from \"./soulbound-card.js\";\nimport { AnimatedTokenMedia } from \"./animated-token-media.js\";\nimport { useImageUrl } from \"../utils/use-image-url.js\";\n\nexport interface AssetCardPrice {\n formatted?: string | null;\n currency?: string | null;\n\n usdValue?: string | null;\n}\n\nexport interface AssetCardProps {\n\n href: string;\n\n name: string;\n\n image?: string | null;\n\n animationUrl?: string | null;\n\n live?: boolean;\n\n subtitle?: string | null;\n\n ipType?: string | null;\n\n price?: AssetCardPrice | null;\n\n fallbackId?: string | null;\n\n indexing?: boolean;\n\n soulbound?: boolean;\n\n ipTypeBaseUrl?: string;\n className?: string;\n}\n\nexport function AssetCard({\n href,\n name,\n image,\n animationUrl,\n live = false,\n subtitle,\n ipType,\n price,\n fallbackId,\n indexing = false,\n soulbound = false,\n ipTypeBaseUrl = \"\",\n className,\n}: AssetCardProps) {\n const resolveImage = useImageUrl();\n const resolved = resolveImage(image, { width: 480 });\n const hasPrice = !!price?.formatted;\n\n return (\n <div\n className={cn(\n \"group relative flex flex-col w-full overflow-hidden rounded-xl bg-card\",\n className\n )}\n >\n\n {ipType && (\n <div className=\"absolute top-2 right-2 z-10\">\n <IpTypeBadge ipType={ipType} size=\"sm\" baseUrl={ipTypeBaseUrl} />\n </div>\n )}\n\n {soulbound && (\n <div className=\"absolute top-2 left-2 z-10\">\n <SoulboundBadge />\n </div>\n )}\n\n <Link href={href} className=\"block relative aspect-square bg-muted overflow-hidden\">\n <AnimatedTokenMedia\n image={resolved}\n animationUrl={animationUrl}\n live={live}\n alt={name}\n mode=\"fill\"\n sizes=\"(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 22vw\"\n className=\"object-cover transition-transform duration-700 ease-out group-hover:scale-[1.03]\"\n fallback={\n <div className=\"absolute inset-0 flex items-center justify-center bg-gradient-to-br from-brand-blue/25 via-brand-purple/25 to-brand-rose/25\">\n <span className=\"text-sm font-semibold text-muted-foreground tabular-nums\">\n #{fallbackId ?? \"?\"}\n </span>\n </div>\n }\n />\n\n {indexing && (\n <div className=\"absolute bottom-0 inset-x-0 flex items-center justify-center gap-1.5 bg-black/50 backdrop-blur-sm py-1.5\">\n <Loader2 className=\"h-3 w-3 animate-spin text-white/70\" />\n <span className=\"text-2xs text-white/70\">Indexing…</span>\n </div>\n )}\n </Link>\n\n <div className=\"px-3 py-3 space-y-1\">\n <Link href={href} className=\"block min-w-0\">\n <p className=\"text-base font-semibold tracking-tight line-clamp-2 break-words leading-snug\">\n {name}\n </p>\n {subtitle && (\n <p className=\"text-xs text-muted-foreground line-clamp-1 leading-snug\">\n {subtitle}\n </p>\n )}\n </Link>\n\n {hasPrice && !indexing && (\n <div className=\"flex items-center gap-1.5 text-sm font-bold tabular-nums pt-0.5\">\n <PriceChipContent\n amountFormatted={price!.formatted}\n currency={price!.currency}\n usdValue={price!.usdValue}\n tone=\"solid\"\n />\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport function AssetCardSkeleton() {\n return (\n <div className=\"flex flex-col w-full overflow-hidden rounded-xl bg-card\">\n <div className=\"aspect-square w-full animate-pulse bg-muted\" />\n <div className=\"px-3 py-3 space-y-1.5\">\n <div className=\"h-4 w-3/4 rounded-md animate-pulse bg-muted\" />\n <div className=\"h-3.5 w-2/5 rounded-md animate-pulse bg-muted\" />\n </div>\n </div>\n );\n}\n"],"mappings":";AA2EU,cAqBI,YArBJ;AAzEV,OAAO,UAAU;AACjB,SAAS,eAAe;AACxB,SAAS,UAAU;AACnB,SAAS,wBAAwB;AACjC,SAAS,mBAAmB;AAC5B,SAAS,sBAAsB;AAC/B,SAAS,0BAA0B;AACnC,SAAS,mBAAmB;AAqCrB,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB;AACF,GAAmB;AACjB,QAAM,eAAe,YAAY;AACjC,QAAM,WAAW,aAAa,OAAO,EAAE,OAAO,IAAI,CAAC;AACnD,QAAM,WAAW,CAAC,CAAC,OAAO;AAE1B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAGC;AAAA,kBACC,oBAAC,SAAI,WAAU,+BACb,8BAAC,eAAY,QAAgB,MAAK,MAAK,SAAS,eAAe,GACjE;AAAA,QAGD,aACC,oBAAC,SAAI,WAAU,8BACb,8BAAC,kBAAe,GAClB;AAAA,QAGF,qBAAC,QAAK,MAAY,WAAU,yDAC1B;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA,KAAK;AAAA,cACL,MAAK;AAAA,cACL,OAAM;AAAA,cACN,WAAU;AAAA,cACV,UACE,oBAAC,SAAI,WAAU,+HACb,+BAAC,UAAK,WAAU,4DAA2D;AAAA;AAAA,gBACvE,cAAc;AAAA,iBAClB,GACF;AAAA;AAAA,UAEJ;AAAA,UAEC,YACC,qBAAC,SAAI,WAAU,4GACb;AAAA,gCAAC,WAAQ,WAAU,sCAAqC;AAAA,YACxD,oBAAC,UAAK,WAAU,0BAAyB,4BAAS;AAAA,aACpD;AAAA,WAEJ;AAAA,QAEA,qBAAC,SAAI,WAAU,uBACb;AAAA,+BAAC,QAAK,MAAY,WAAU,iBAC1B;AAAA,gCAAC,OAAE,WAAU,gFACV,gBACH;AAAA,YACC,YACC,oBAAC,OAAE,WAAU,2DACV,oBACH;AAAA,aAEJ;AAAA,UAEC,YAAY,CAAC,YACZ,oBAAC,SAAI,WAAU,mEACb;AAAA,YAAC;AAAA;AAAA,cACC,iBAAiB,MAAO;AAAA,cACxB,UAAU,MAAO;AAAA,cACjB,UAAU,MAAO;AAAA,cACjB,MAAK;AAAA;AAAA,UACP,GACF;AAAA,WAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,oBAAoB;AAClC,SACE,qBAAC,SAAI,WAAU,2DACb;AAAA,wBAAC,SAAI,WAAU,+CAA8C;AAAA,IAC7D,qBAAC,SAAI,WAAU,yBACb;AAAA,0BAAC,SAAI,WAAU,+CAA8C;AAAA,MAC7D,oBAAC,SAAI,WAAU,iDAAgD;AAAA,OACjE;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/asset-card.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { Loader2 } from \"lucide-react\";\nimport { cn } from \"../utils/cn.js\";\nimport { PriceChipContent } from \"./dual-price.js\";\nimport { IpTypeBadge } from \"./ip-type-badge.js\";\nimport { SoulboundBadge } from \"./soulbound-card.js\";\nimport { AnimatedTokenMedia } from \"./animated-token-media.js\";\nimport { useImageUrl } from \"../utils/use-image-url.js\";\n\nexport interface AssetCardPrice {\n formatted?: string | null;\n currency?: string | null;\n\n usdValue?: string | null;\n}\n\nexport interface AssetCardProps {\n\n href: string;\n\n name: string;\n\n image?: string | null;\n\n animationUrl?: string | null;\n\n live?: boolean;\n\n subtitle?: string | null;\n\n ipType?: string | null;\n\n price?: AssetCardPrice | null;\n\n fallbackId?: string | null;\n\n indexing?: boolean;\n\n soulbound?: boolean;\n\n ipTypeBaseUrl?: string;\n className?: string;\n}\n\nexport function AssetCard({\n href,\n name,\n image,\n animationUrl,\n live = false,\n subtitle,\n ipType,\n price,\n fallbackId,\n indexing = false,\n soulbound = false,\n ipTypeBaseUrl = \"\",\n className,\n}: AssetCardProps) {\n const resolveImage = useImageUrl();\n const resolved = resolveImage(image, { width: 480 });\n const hasPrice = !!price?.formatted;\n\n return (\n <div\n className={cn(\n \"group relative flex flex-col w-full overflow-hidden rounded-xl bg-card\",\n className\n )}\n >\n\n {ipType && (\n <div className=\"absolute top-2 right-2 z-10\">\n <IpTypeBadge ipType={ipType} size=\"sm\" baseUrl={ipTypeBaseUrl} />\n </div>\n )}\n\n <Link href={href} className=\"block relative aspect-square bg-muted overflow-hidden\">\n <AnimatedTokenMedia\n image={resolved}\n animationUrl={animationUrl}\n live={live}\n alt={name}\n mode=\"fill\"\n sizes=\"(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 22vw\"\n className=\"object-cover transition-transform duration-700 ease-out group-hover:scale-[1.03]\"\n fallback={\n <div className=\"absolute inset-0 flex items-center justify-center bg-gradient-to-br from-brand-blue/25 via-brand-purple/25 to-brand-rose/25\">\n <span className=\"text-sm font-semibold text-muted-foreground tabular-nums\">\n #{fallbackId ?? \"?\"}\n </span>\n </div>\n }\n />\n\n {indexing && (\n <div className=\"absolute bottom-0 inset-x-0 flex items-center justify-center gap-1.5 bg-black/50 backdrop-blur-sm py-1.5\">\n <Loader2 className=\"h-3 w-3 animate-spin text-white/70\" />\n <span className=\"text-2xs text-white/70\">Indexing…</span>\n </div>\n )}\n </Link>\n\n <div className=\"px-3 py-3 space-y-1\">\n <Link href={href} className=\"block min-w-0\">\n <p className=\"text-base font-semibold tracking-tight line-clamp-2 break-words leading-snug\">\n {name}\n </p>\n {subtitle && (\n <p className=\"text-xs text-muted-foreground line-clamp-1 leading-snug\">\n {subtitle}\n </p>\n )}\n </Link>\n\n {soulbound && <SoulboundBadge />}\n\n {hasPrice && !indexing && (\n <div className=\"flex items-center gap-1.5 text-sm font-bold tabular-nums pt-0.5\">\n <PriceChipContent\n amountFormatted={price!.formatted}\n currency={price!.currency}\n usdValue={price!.usdValue}\n tone=\"solid\"\n />\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport function AssetCardSkeleton() {\n return (\n <div className=\"flex flex-col w-full overflow-hidden rounded-xl bg-card\">\n <div className=\"aspect-square w-full animate-pulse bg-muted\" />\n <div className=\"px-3 py-3 space-y-1.5\">\n <div className=\"h-4 w-3/4 rounded-md animate-pulse bg-muted\" />\n <div className=\"h-3.5 w-2/5 rounded-md animate-pulse bg-muted\" />\n </div>\n </div>\n );\n}\n"],"mappings":";AA2EU,cAeI,YAfJ;AAzEV,OAAO,UAAU;AACjB,SAAS,eAAe;AACxB,SAAS,UAAU;AACnB,SAAS,wBAAwB;AACjC,SAAS,mBAAmB;AAC5B,SAAS,sBAAsB;AAC/B,SAAS,0BAA0B;AACnC,SAAS,mBAAmB;AAqCrB,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB;AACF,GAAmB;AACjB,QAAM,eAAe,YAAY;AACjC,QAAM,WAAW,aAAa,OAAO,EAAE,OAAO,IAAI,CAAC;AACnD,QAAM,WAAW,CAAC,CAAC,OAAO;AAE1B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAGC;AAAA,kBACC,oBAAC,SAAI,WAAU,+BACb,8BAAC,eAAY,QAAgB,MAAK,MAAK,SAAS,eAAe,GACjE;AAAA,QAGF,qBAAC,QAAK,MAAY,WAAU,yDAC1B;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA,KAAK;AAAA,cACL,MAAK;AAAA,cACL,OAAM;AAAA,cACN,WAAU;AAAA,cACV,UACE,oBAAC,SAAI,WAAU,+HACb,+BAAC,UAAK,WAAU,4DAA2D;AAAA;AAAA,gBACvE,cAAc;AAAA,iBAClB,GACF;AAAA;AAAA,UAEJ;AAAA,UAEC,YACC,qBAAC,SAAI,WAAU,4GACb;AAAA,gCAAC,WAAQ,WAAU,sCAAqC;AAAA,YACxD,oBAAC,UAAK,WAAU,0BAAyB,4BAAS;AAAA,aACpD;AAAA,WAEJ;AAAA,QAEA,qBAAC,SAAI,WAAU,uBACb;AAAA,+BAAC,QAAK,MAAY,WAAU,iBAC1B;AAAA,gCAAC,OAAE,WAAU,gFACV,gBACH;AAAA,YACC,YACC,oBAAC,OAAE,WAAU,2DACV,oBACH;AAAA,aAEJ;AAAA,UAEC,aAAa,oBAAC,kBAAe;AAAA,UAE7B,YAAY,CAAC,YACZ,oBAAC,SAAI,WAAU,mEACb;AAAA,YAAC;AAAA;AAAA,cACC,iBAAiB,MAAO;AAAA,cACxB,UAAU,MAAO;AAAA,cACjB,UAAU,MAAO;AAAA,cACjB,MAAK;AAAA;AAAA,UACP,GACF;AAAA,WAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,oBAAoB;AAClC,SACE,qBAAC,SAAI,WAAU,2DACb;AAAA,wBAAC,SAAI,WAAU,+CAA8C;AAAA,IAC7D,qBAAC,SAAI,WAAU,yBACb;AAAA,0BAAC,SAAI,WAAU,+CAA8C;AAAA,MAC7D,oBAAC,SAAI,WAAU,iDAAgD;AAAA,OACjE;AAAA,KACF;AAEJ;","names":[]}
@@ -3,8 +3,8 @@ import * as React from 'react';
3
3
  import { VariantProps } from 'class-variance-authority';
4
4
 
5
5
  declare const buttonVariants: (props?: ({
6
- variant?: "default" | "link" | "destructive" | "outline" | "secondary" | "ghost" | "premium" | "tonal" | "gradient-border" | "gradient-fill" | null | undefined;
7
- size?: "default" | "icon" | "sm" | "lg" | null | undefined;
6
+ variant?: "ghost" | "link" | "default" | "destructive" | "outline" | "secondary" | "premium" | "tonal" | "gradient-border" | "gradient-fill" | null | undefined;
7
+ size?: "icon" | "default" | "sm" | "lg" | null | undefined;
8
8
  } & class_variance_authority_types.ClassProp) | undefined) => string;
9
9
  interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
10
10
  asChild?: boolean;
@@ -3,8 +3,8 @@ import * as React from 'react';
3
3
  import { VariantProps } from 'class-variance-authority';
4
4
 
5
5
  declare const buttonVariants: (props?: ({
6
- variant?: "default" | "link" | "destructive" | "outline" | "secondary" | "ghost" | "premium" | "tonal" | "gradient-border" | "gradient-fill" | null | undefined;
7
- size?: "default" | "icon" | "sm" | "lg" | null | undefined;
6
+ variant?: "ghost" | "link" | "default" | "destructive" | "outline" | "secondary" | "premium" | "tonal" | "gradient-border" | "gradient-fill" | null | undefined;
7
+ size?: "icon" | "default" | "sm" | "lg" | null | undefined;
8
8
  } & class_variance_authority_types.ClassProp) | undefined) => string;
9
9
  interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
10
10
  asChild?: boolean;
@@ -1,10 +1,10 @@
1
- import * as React from 'react';
2
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
3
  import { FastMintProps } from './types.cjs';
4
4
  import 'starknet';
5
5
  import '@medialane/sdk';
6
6
  import '@medialane/sdk/starknet';
7
7
 
8
- declare function FastMint(props: FastMintProps): string | number | bigint | boolean | react_jsx_runtime.JSX.Element | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | null | undefined;
8
+ declare function FastMint(props: FastMintProps): string | number | bigint | boolean | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | react_jsx_runtime.JSX.Element | null | undefined;
9
9
 
10
10
  export { FastMint };
@@ -1,10 +1,10 @@
1
- import * as React from 'react';
2
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
3
  import { FastMintProps } from './types.js';
4
4
  import 'starknet';
5
5
  import '@medialane/sdk';
6
6
  import '@medialane/sdk/starknet';
7
7
 
8
- declare function FastMint(props: FastMintProps): string | number | bigint | boolean | react_jsx_runtime.JSX.Element | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | null | undefined;
8
+ declare function FastMint(props: FastMintProps): string | number | bigint | boolean | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | react_jsx_runtime.JSX.Element | null | undefined;
9
9
 
10
10
  export { FastMint };
@@ -16,6 +16,7 @@ declare const editionMintSchema: zod.ZodObject<{
16
16
  royalty: zod.ZodNumber;
17
17
  }, "strip", zod.ZodTypeAny, {
18
18
  name: string;
19
+ value: string;
19
20
  ipType: "Audio" | "Video" | "Art" | "Photography" | "NFT" | "Software" | "RWA" | "Patents" | "Posts" | "Publications" | "Documents" | "Custom";
20
21
  licenseType: string;
21
22
  commercialUse: "Yes" | "No";
@@ -24,12 +25,12 @@ declare const editionMintSchema: zod.ZodObject<{
24
25
  geographicScope: string;
25
26
  aiPolicy: "Allowed" | "Not Allowed" | "Training Only";
26
27
  royalty: number;
27
- value: string;
28
28
  recipient: string;
29
29
  description?: string | undefined;
30
30
  external_url?: string | undefined;
31
31
  }, {
32
32
  name: string;
33
+ value: string;
33
34
  ipType: "Audio" | "Video" | "Art" | "Photography" | "NFT" | "Software" | "RWA" | "Patents" | "Posts" | "Publications" | "Documents" | "Custom";
34
35
  licenseType: string;
35
36
  commercialUse: "Yes" | "No";
@@ -38,7 +39,6 @@ declare const editionMintSchema: zod.ZodObject<{
38
39
  geographicScope: string;
39
40
  aiPolicy: "Allowed" | "Not Allowed" | "Training Only";
40
41
  royalty: number;
41
- value: string;
42
42
  recipient: string;
43
43
  description?: string | undefined;
44
44
  external_url?: string | undefined;
@@ -16,6 +16,7 @@ declare const editionMintSchema: zod.ZodObject<{
16
16
  royalty: zod.ZodNumber;
17
17
  }, "strip", zod.ZodTypeAny, {
18
18
  name: string;
19
+ value: string;
19
20
  ipType: "Audio" | "Video" | "Art" | "Photography" | "NFT" | "Software" | "RWA" | "Patents" | "Posts" | "Publications" | "Documents" | "Custom";
20
21
  licenseType: string;
21
22
  commercialUse: "Yes" | "No";
@@ -24,12 +25,12 @@ declare const editionMintSchema: zod.ZodObject<{
24
25
  geographicScope: string;
25
26
  aiPolicy: "Allowed" | "Not Allowed" | "Training Only";
26
27
  royalty: number;
27
- value: string;
28
28
  recipient: string;
29
29
  description?: string | undefined;
30
30
  external_url?: string | undefined;
31
31
  }, {
32
32
  name: string;
33
+ value: string;
33
34
  ipType: "Audio" | "Video" | "Art" | "Photography" | "NFT" | "Software" | "RWA" | "Patents" | "Posts" | "Publications" | "Documents" | "Custom";
34
35
  licenseType: string;
35
36
  commercialUse: "Yes" | "No";
@@ -38,7 +39,6 @@ declare const editionMintSchema: zod.ZodObject<{
38
39
  geographicScope: string;
39
40
  aiPolicy: "Allowed" | "Not Allowed" | "Training Only";
40
41
  royalty: number;
41
- value: string;
42
42
  recipient: string;
43
43
  description?: string | undefined;
44
44
  external_url?: string | undefined;
@@ -10,7 +10,7 @@ declare const SheetClose: React.ForwardRefExoticComponent<SheetPrimitive.DialogC
10
10
  declare const SheetPortal: React.FC<SheetPrimitive.DialogPortalProps>;
11
11
  declare const SheetOverlay: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
12
12
  declare const sheetVariants: (props?: ({
13
- side?: "bottom" | "left" | "right" | "top" | null | undefined;
13
+ side?: "left" | "right" | "bottom" | "top" | null | undefined;
14
14
  } & class_variance_authority_types.ClassProp) | undefined) => string;
15
15
  interface SheetContentProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>, VariantProps<typeof sheetVariants> {
16
16
  overlayClassName?: string;
@@ -10,7 +10,7 @@ declare const SheetClose: React.ForwardRefExoticComponent<SheetPrimitive.DialogC
10
10
  declare const SheetPortal: React.FC<SheetPrimitive.DialogPortalProps>;
11
11
  declare const SheetOverlay: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
12
12
  declare const sheetVariants: (props?: ({
13
- side?: "bottom" | "left" | "right" | "top" | null | undefined;
13
+ side?: "left" | "right" | "bottom" | "top" | null | undefined;
14
14
  } & class_variance_authority_types.ClassProp) | undefined) => string;
15
15
  interface SheetContentProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>, VariantProps<typeof sheetVariants> {
16
16
  overlayClassName?: string;
@@ -45,8 +45,8 @@ function issuedAt(history) {
45
45
  return new Date(Math.min(...times)).toLocaleDateString("en-US", { day: "numeric", month: "short", year: "numeric" });
46
46
  }
47
47
  function SoulboundBadge() {
48
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "inline-flex items-center gap-1 rounded-full bg-background/70 px-2 py-1 text-2xs font-semibold text-brand-purple backdrop-blur-md", children: [
49
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Fingerprint, { className: "h-3 w-3", "aria-hidden": true }),
48
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "inline-flex items-center gap-1 text-xs font-semibold text-brand-purple", children: [
49
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Fingerprint, { className: "h-3.5 w-3.5", "aria-hidden": true }),
50
50
  "Soulbound"
51
51
  ] });
52
52
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/soulbound-card.tsx"],"sourcesContent":["\"use client\";\n\nimport { Fingerprint } from \"lucide-react\";\nimport { profileHref, type ApiActivity } from \"@medialane/sdk\";\nimport Link from \"./link.js\";\nimport { shortenAddress } from \"../utils/address.js\";\n\nexport function issuedAt(history: readonly ApiActivity[]): string | null {\n const times = history\n .filter((event) => event.type === \"mint\")\n .map((event) => new Date(event.timestamp).getTime())\n .filter((time) => Number.isFinite(time));\n if (times.length === 0) return null;\n return new Date(Math.min(...times)).toLocaleDateString(\"en-US\", { day: \"numeric\", month: \"short\", year: \"numeric\" });\n}\n\nexport function SoulboundBadge() {\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-background/70 px-2 py-1 text-2xs font-semibold text-brand-purple backdrop-blur-md\">\n <Fingerprint className=\"h-3 w-3\" aria-hidden />\n Soulbound\n </span>\n );\n}\n\nexport interface SoulboundCardProps {\n history?: readonly ApiActivity[];\n ownerAddress?: string | null;\n}\n\nexport function SoulboundCard({ history = [], ownerAddress }: SoulboundCardProps) {\n const issued = issuedAt(history);\n return (\n <section aria-label=\"Soulbound asset\" className=\"flex items-center gap-4 overflow-hidden rounded-2xl bg-gradient-to-br from-muted/40 to-transparent p-4\">\n <Fingerprint className=\"h-7 w-7 shrink-0 text-brand-purple\" strokeWidth={1.5} aria-hidden />\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"font-display text-base font-bold leading-tight text-foreground\">Soulbound</h3>\n <p className=\"mt-0.5 truncate text-xs text-muted-foreground\">\n {ownerAddress ? (\n <>\n Permanently bound to{\" \"}\n <Link href={profileHref({ address: ownerAddress })} title={ownerAddress} className=\"font-mono font-medium text-foreground transition-colors hover:text-primary\">\n {shortenAddress(ownerAddress)}\n </Link>\n </>\n ) : (\n \"Permanently bound to the wallet it was issued to.\"\n )}\n </p>\n </div>\n {issued ? (\n <div className=\"shrink-0 text-right\">\n <p className=\"text-xs text-muted-foreground\">Issued</p>\n <p className=\"mt-0.5 text-sm font-semibold tabular-nums text-foreground\">{issued}</p>\n </div>\n ) : null}\n </section>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBI;AAhBJ,0BAA4B;AAC5B,iBAA8C;AAC9C,kBAAiB;AACjB,qBAA+B;AAExB,SAAS,SAAS,SAAgD;AACvE,QAAM,QAAQ,QACX,OAAO,CAAC,UAAU,MAAM,SAAS,MAAM,EACvC,IAAI,CAAC,UAAU,IAAI,KAAK,MAAM,SAAS,EAAE,QAAQ,CAAC,EAClD,OAAO,CAAC,SAAS,OAAO,SAAS,IAAI,CAAC;AACzC,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,SAAO,IAAI,KAAK,KAAK,IAAI,GAAG,KAAK,CAAC,EAAE,mBAAmB,SAAS,EAAE,KAAK,WAAW,OAAO,SAAS,MAAM,UAAU,CAAC;AACrH;AAEO,SAAS,iBAAiB;AAC/B,SACE,6CAAC,UAAK,WAAU,oIACd;AAAA,gDAAC,mCAAY,WAAU,WAAU,eAAW,MAAC;AAAA,IAAE;AAAA,KAEjD;AAEJ;AAOO,SAAS,cAAc,EAAE,UAAU,CAAC,GAAG,aAAa,GAAuB;AAChF,QAAM,SAAS,SAAS,OAAO;AAC/B,SACE,6CAAC,aAAQ,cAAW,mBAAkB,WAAU,0GAC9C;AAAA,gDAAC,mCAAY,WAAU,sCAAqC,aAAa,KAAK,eAAW,MAAC;AAAA,IAC1F,6CAAC,SAAI,WAAU,kBACb;AAAA,kDAAC,QAAG,WAAU,kEAAiE,uBAAS;AAAA,MACxF,4CAAC,OAAE,WAAU,iDACV,yBACC,4EAAE;AAAA;AAAA,QACqB;AAAA,QACrB,4CAAC,YAAAA,SAAA,EAAK,UAAM,wBAAY,EAAE,SAAS,aAAa,CAAC,GAAG,OAAO,cAAc,WAAU,8EAChF,6CAAe,YAAY,GAC9B;AAAA,SACF,IAEA,qDAEJ;AAAA,OACF;AAAA,IACC,SACC,6CAAC,SAAI,WAAU,uBACb;AAAA,kDAAC,OAAE,WAAU,iCAAgC,oBAAM;AAAA,MACnD,4CAAC,OAAE,WAAU,6DAA6D,kBAAO;AAAA,OACnF,IACE;AAAA,KACN;AAEJ;","names":["Link"]}
1
+ {"version":3,"sources":["../../src/components/soulbound-card.tsx"],"sourcesContent":["\"use client\";\n\nimport { Fingerprint } from \"lucide-react\";\nimport { profileHref, type ApiActivity } from \"@medialane/sdk\";\nimport Link from \"./link.js\";\nimport { shortenAddress } from \"../utils/address.js\";\n\nexport function issuedAt(history: readonly ApiActivity[]): string | null {\n const times = history\n .filter((event) => event.type === \"mint\")\n .map((event) => new Date(event.timestamp).getTime())\n .filter((time) => Number.isFinite(time));\n if (times.length === 0) return null;\n return new Date(Math.min(...times)).toLocaleDateString(\"en-US\", { day: \"numeric\", month: \"short\", year: \"numeric\" });\n}\n\nexport function SoulboundBadge() {\n return (\n <span className=\"inline-flex items-center gap-1 text-xs font-semibold text-brand-purple\">\n <Fingerprint className=\"h-3.5 w-3.5\" aria-hidden />\n Soulbound\n </span>\n );\n}\n\nexport interface SoulboundCardProps {\n history?: readonly ApiActivity[];\n ownerAddress?: string | null;\n}\n\nexport function SoulboundCard({ history = [], ownerAddress }: SoulboundCardProps) {\n const issued = issuedAt(history);\n return (\n <section aria-label=\"Soulbound asset\" className=\"flex items-center gap-4 overflow-hidden rounded-2xl bg-gradient-to-br from-muted/40 to-transparent p-4\">\n <Fingerprint className=\"h-7 w-7 shrink-0 text-brand-purple\" strokeWidth={1.5} aria-hidden />\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"font-display text-base font-bold leading-tight text-foreground\">Soulbound</h3>\n <p className=\"mt-0.5 truncate text-xs text-muted-foreground\">\n {ownerAddress ? (\n <>\n Permanently bound to{\" \"}\n <Link href={profileHref({ address: ownerAddress })} title={ownerAddress} className=\"font-mono font-medium text-foreground transition-colors hover:text-primary\">\n {shortenAddress(ownerAddress)}\n </Link>\n </>\n ) : (\n \"Permanently bound to the wallet it was issued to.\"\n )}\n </p>\n </div>\n {issued ? (\n <div className=\"shrink-0 text-right\">\n <p className=\"text-xs text-muted-foreground\">Issued</p>\n <p className=\"mt-0.5 text-sm font-semibold tabular-nums text-foreground\">{issued}</p>\n </div>\n ) : null}\n </section>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBI;AAhBJ,0BAA4B;AAC5B,iBAA8C;AAC9C,kBAAiB;AACjB,qBAA+B;AAExB,SAAS,SAAS,SAAgD;AACvE,QAAM,QAAQ,QACX,OAAO,CAAC,UAAU,MAAM,SAAS,MAAM,EACvC,IAAI,CAAC,UAAU,IAAI,KAAK,MAAM,SAAS,EAAE,QAAQ,CAAC,EAClD,OAAO,CAAC,SAAS,OAAO,SAAS,IAAI,CAAC;AACzC,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,SAAO,IAAI,KAAK,KAAK,IAAI,GAAG,KAAK,CAAC,EAAE,mBAAmB,SAAS,EAAE,KAAK,WAAW,OAAO,SAAS,MAAM,UAAU,CAAC;AACrH;AAEO,SAAS,iBAAiB;AAC/B,SACE,6CAAC,UAAK,WAAU,0EACd;AAAA,gDAAC,mCAAY,WAAU,eAAc,eAAW,MAAC;AAAA,IAAE;AAAA,KAErD;AAEJ;AAOO,SAAS,cAAc,EAAE,UAAU,CAAC,GAAG,aAAa,GAAuB;AAChF,QAAM,SAAS,SAAS,OAAO;AAC/B,SACE,6CAAC,aAAQ,cAAW,mBAAkB,WAAU,0GAC9C;AAAA,gDAAC,mCAAY,WAAU,sCAAqC,aAAa,KAAK,eAAW,MAAC;AAAA,IAC1F,6CAAC,SAAI,WAAU,kBACb;AAAA,kDAAC,QAAG,WAAU,kEAAiE,uBAAS;AAAA,MACxF,4CAAC,OAAE,WAAU,iDACV,yBACC,4EAAE;AAAA;AAAA,QACqB;AAAA,QACrB,4CAAC,YAAAA,SAAA,EAAK,UAAM,wBAAY,EAAE,SAAS,aAAa,CAAC,GAAG,OAAO,cAAc,WAAU,8EAChF,6CAAe,YAAY,GAC9B;AAAA,SACF,IAEA,qDAEJ;AAAA,OACF;AAAA,IACC,SACC,6CAAC,SAAI,WAAU,uBACb;AAAA,kDAAC,OAAE,WAAU,iCAAgC,oBAAM;AAAA,MACnD,4CAAC,OAAE,WAAU,6DAA6D,kBAAO;AAAA,OACnF,IACE;AAAA,KACN;AAEJ;","names":["Link"]}
@@ -10,8 +10,8 @@ function issuedAt(history) {
10
10
  return new Date(Math.min(...times)).toLocaleDateString("en-US", { day: "numeric", month: "short", year: "numeric" });
11
11
  }
12
12
  function SoulboundBadge() {
13
- return /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1 rounded-full bg-background/70 px-2 py-1 text-2xs font-semibold text-brand-purple backdrop-blur-md", children: [
14
- /* @__PURE__ */ jsx(Fingerprint, { className: "h-3 w-3", "aria-hidden": true }),
13
+ return /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1 text-xs font-semibold text-brand-purple", children: [
14
+ /* @__PURE__ */ jsx(Fingerprint, { className: "h-3.5 w-3.5", "aria-hidden": true }),
15
15
  "Soulbound"
16
16
  ] });
17
17
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/soulbound-card.tsx"],"sourcesContent":["\"use client\";\n\nimport { Fingerprint } from \"lucide-react\";\nimport { profileHref, type ApiActivity } from \"@medialane/sdk\";\nimport Link from \"./link.js\";\nimport { shortenAddress } from \"../utils/address.js\";\n\nexport function issuedAt(history: readonly ApiActivity[]): string | null {\n const times = history\n .filter((event) => event.type === \"mint\")\n .map((event) => new Date(event.timestamp).getTime())\n .filter((time) => Number.isFinite(time));\n if (times.length === 0) return null;\n return new Date(Math.min(...times)).toLocaleDateString(\"en-US\", { day: \"numeric\", month: \"short\", year: \"numeric\" });\n}\n\nexport function SoulboundBadge() {\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-background/70 px-2 py-1 text-2xs font-semibold text-brand-purple backdrop-blur-md\">\n <Fingerprint className=\"h-3 w-3\" aria-hidden />\n Soulbound\n </span>\n );\n}\n\nexport interface SoulboundCardProps {\n history?: readonly ApiActivity[];\n ownerAddress?: string | null;\n}\n\nexport function SoulboundCard({ history = [], ownerAddress }: SoulboundCardProps) {\n const issued = issuedAt(history);\n return (\n <section aria-label=\"Soulbound asset\" className=\"flex items-center gap-4 overflow-hidden rounded-2xl bg-gradient-to-br from-muted/40 to-transparent p-4\">\n <Fingerprint className=\"h-7 w-7 shrink-0 text-brand-purple\" strokeWidth={1.5} aria-hidden />\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"font-display text-base font-bold leading-tight text-foreground\">Soulbound</h3>\n <p className=\"mt-0.5 truncate text-xs text-muted-foreground\">\n {ownerAddress ? (\n <>\n Permanently bound to{\" \"}\n <Link href={profileHref({ address: ownerAddress })} title={ownerAddress} className=\"font-mono font-medium text-foreground transition-colors hover:text-primary\">\n {shortenAddress(ownerAddress)}\n </Link>\n </>\n ) : (\n \"Permanently bound to the wallet it was issued to.\"\n )}\n </p>\n </div>\n {issued ? (\n <div className=\"shrink-0 text-right\">\n <p className=\"text-xs text-muted-foreground\">Issued</p>\n <p className=\"mt-0.5 text-sm font-semibold tabular-nums text-foreground\">{issued}</p>\n </div>\n ) : null}\n </section>\n );\n}\n"],"mappings":";AAkBI,SAqBQ,UApBN,KADF;AAhBJ,SAAS,mBAAmB;AAC5B,SAAS,mBAAqC;AAC9C,OAAO,UAAU;AACjB,SAAS,sBAAsB;AAExB,SAAS,SAAS,SAAgD;AACvE,QAAM,QAAQ,QACX,OAAO,CAAC,UAAU,MAAM,SAAS,MAAM,EACvC,IAAI,CAAC,UAAU,IAAI,KAAK,MAAM,SAAS,EAAE,QAAQ,CAAC,EAClD,OAAO,CAAC,SAAS,OAAO,SAAS,IAAI,CAAC;AACzC,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,SAAO,IAAI,KAAK,KAAK,IAAI,GAAG,KAAK,CAAC,EAAE,mBAAmB,SAAS,EAAE,KAAK,WAAW,OAAO,SAAS,MAAM,UAAU,CAAC;AACrH;AAEO,SAAS,iBAAiB;AAC/B,SACE,qBAAC,UAAK,WAAU,oIACd;AAAA,wBAAC,eAAY,WAAU,WAAU,eAAW,MAAC;AAAA,IAAE;AAAA,KAEjD;AAEJ;AAOO,SAAS,cAAc,EAAE,UAAU,CAAC,GAAG,aAAa,GAAuB;AAChF,QAAM,SAAS,SAAS,OAAO;AAC/B,SACE,qBAAC,aAAQ,cAAW,mBAAkB,WAAU,0GAC9C;AAAA,wBAAC,eAAY,WAAU,sCAAqC,aAAa,KAAK,eAAW,MAAC;AAAA,IAC1F,qBAAC,SAAI,WAAU,kBACb;AAAA,0BAAC,QAAG,WAAU,kEAAiE,uBAAS;AAAA,MACxF,oBAAC,OAAE,WAAU,iDACV,yBACC,iCAAE;AAAA;AAAA,QACqB;AAAA,QACrB,oBAAC,QAAK,MAAM,YAAY,EAAE,SAAS,aAAa,CAAC,GAAG,OAAO,cAAc,WAAU,8EAChF,yBAAe,YAAY,GAC9B;AAAA,SACF,IAEA,qDAEJ;AAAA,OACF;AAAA,IACC,SACC,qBAAC,SAAI,WAAU,uBACb;AAAA,0BAAC,OAAE,WAAU,iCAAgC,oBAAM;AAAA,MACnD,oBAAC,OAAE,WAAU,6DAA6D,kBAAO;AAAA,OACnF,IACE;AAAA,KACN;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/soulbound-card.tsx"],"sourcesContent":["\"use client\";\n\nimport { Fingerprint } from \"lucide-react\";\nimport { profileHref, type ApiActivity } from \"@medialane/sdk\";\nimport Link from \"./link.js\";\nimport { shortenAddress } from \"../utils/address.js\";\n\nexport function issuedAt(history: readonly ApiActivity[]): string | null {\n const times = history\n .filter((event) => event.type === \"mint\")\n .map((event) => new Date(event.timestamp).getTime())\n .filter((time) => Number.isFinite(time));\n if (times.length === 0) return null;\n return new Date(Math.min(...times)).toLocaleDateString(\"en-US\", { day: \"numeric\", month: \"short\", year: \"numeric\" });\n}\n\nexport function SoulboundBadge() {\n return (\n <span className=\"inline-flex items-center gap-1 text-xs font-semibold text-brand-purple\">\n <Fingerprint className=\"h-3.5 w-3.5\" aria-hidden />\n Soulbound\n </span>\n );\n}\n\nexport interface SoulboundCardProps {\n history?: readonly ApiActivity[];\n ownerAddress?: string | null;\n}\n\nexport function SoulboundCard({ history = [], ownerAddress }: SoulboundCardProps) {\n const issued = issuedAt(history);\n return (\n <section aria-label=\"Soulbound asset\" className=\"flex items-center gap-4 overflow-hidden rounded-2xl bg-gradient-to-br from-muted/40 to-transparent p-4\">\n <Fingerprint className=\"h-7 w-7 shrink-0 text-brand-purple\" strokeWidth={1.5} aria-hidden />\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"font-display text-base font-bold leading-tight text-foreground\">Soulbound</h3>\n <p className=\"mt-0.5 truncate text-xs text-muted-foreground\">\n {ownerAddress ? (\n <>\n Permanently bound to{\" \"}\n <Link href={profileHref({ address: ownerAddress })} title={ownerAddress} className=\"font-mono font-medium text-foreground transition-colors hover:text-primary\">\n {shortenAddress(ownerAddress)}\n </Link>\n </>\n ) : (\n \"Permanently bound to the wallet it was issued to.\"\n )}\n </p>\n </div>\n {issued ? (\n <div className=\"shrink-0 text-right\">\n <p className=\"text-xs text-muted-foreground\">Issued</p>\n <p className=\"mt-0.5 text-sm font-semibold tabular-nums text-foreground\">{issued}</p>\n </div>\n ) : null}\n </section>\n );\n}\n"],"mappings":";AAkBI,SAqBQ,UApBN,KADF;AAhBJ,SAAS,mBAAmB;AAC5B,SAAS,mBAAqC;AAC9C,OAAO,UAAU;AACjB,SAAS,sBAAsB;AAExB,SAAS,SAAS,SAAgD;AACvE,QAAM,QAAQ,QACX,OAAO,CAAC,UAAU,MAAM,SAAS,MAAM,EACvC,IAAI,CAAC,UAAU,IAAI,KAAK,MAAM,SAAS,EAAE,QAAQ,CAAC,EAClD,OAAO,CAAC,SAAS,OAAO,SAAS,IAAI,CAAC;AACzC,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,SAAO,IAAI,KAAK,KAAK,IAAI,GAAG,KAAK,CAAC,EAAE,mBAAmB,SAAS,EAAE,KAAK,WAAW,OAAO,SAAS,MAAM,UAAU,CAAC;AACrH;AAEO,SAAS,iBAAiB;AAC/B,SACE,qBAAC,UAAK,WAAU,0EACd;AAAA,wBAAC,eAAY,WAAU,eAAc,eAAW,MAAC;AAAA,IAAE;AAAA,KAErD;AAEJ;AAOO,SAAS,cAAc,EAAE,UAAU,CAAC,GAAG,aAAa,GAAuB;AAChF,QAAM,SAAS,SAAS,OAAO;AAC/B,SACE,qBAAC,aAAQ,cAAW,mBAAkB,WAAU,0GAC9C;AAAA,wBAAC,eAAY,WAAU,sCAAqC,aAAa,KAAK,eAAW,MAAC;AAAA,IAC1F,qBAAC,SAAI,WAAU,kBACb;AAAA,0BAAC,QAAG,WAAU,kEAAiE,uBAAS;AAAA,MACxF,oBAAC,OAAE,WAAU,iDACV,yBACC,iCAAE;AAAA;AAAA,QACqB;AAAA,QACrB,oBAAC,QAAK,MAAM,YAAY,EAAE,SAAS,aAAa,CAAC,GAAG,OAAO,cAAc,WAAU,8EAChF,yBAAe,YAAY,GAC9B;AAAA,SACF,IAEA,qDAEJ;AAAA,OACF;AAAA,IACC,SACC,qBAAC,SAAI,WAAU,uBACb;AAAA,0BAAC,OAAE,WAAU,iCAAgC,oBAAM;AAAA,MACnD,oBAAC,OAAE,WAAU,6DAA6D,kBAAO;AAAA,OACnF,IACE;AAAA,KACN;AAEJ;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@medialane/ui",
3
- "version": "0.308.0",
3
+ "version": "0.309.0",
4
4
  "description": "Shared UI components for Medialane apps",
5
5
  "type": "module",
6
6
  "sideEffects": false,