@medialane/ui 0.1.5 → 0.2.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.
Files changed (41) hide show
  1. package/dist/components/brand-icon.cjs +0 -9
  2. package/dist/components/brand-icon.cjs.map +1 -1
  3. package/dist/components/brand-icon.js +0 -9
  4. package/dist/components/brand-icon.js.map +1 -1
  5. package/dist/components/collection-card.cjs +124 -0
  6. package/dist/components/collection-card.cjs.map +1 -0
  7. package/dist/components/collection-card.d.cts +13 -0
  8. package/dist/components/collection-card.d.ts +13 -0
  9. package/dist/components/collection-card.js +89 -0
  10. package/dist/components/collection-card.js.map +1 -0
  11. package/dist/components/motion-primitives.cjs +126 -0
  12. package/dist/components/motion-primitives.cjs.map +1 -0
  13. package/dist/components/motion-primitives.d.cts +36 -0
  14. package/dist/components/motion-primitives.d.ts +36 -0
  15. package/dist/components/motion-primitives.js +96 -0
  16. package/dist/components/motion-primitives.js.map +1 -0
  17. package/dist/components/scroll-section.cjs +72 -0
  18. package/dist/components/scroll-section.cjs.map +1 -0
  19. package/dist/components/scroll-section.d.cts +18 -0
  20. package/dist/components/scroll-section.d.ts +18 -0
  21. package/dist/components/scroll-section.js +38 -0
  22. package/dist/components/scroll-section.js.map +1 -0
  23. package/dist/components/share-button.cjs +86 -0
  24. package/dist/components/share-button.cjs.map +1 -0
  25. package/dist/components/share-button.d.cts +12 -0
  26. package/dist/components/share-button.d.ts +12 -0
  27. package/dist/components/share-button.js +62 -0
  28. package/dist/components/share-button.js.map +1 -0
  29. package/dist/components/token-card.cjs +281 -0
  30. package/dist/components/token-card.cjs.map +1 -0
  31. package/dist/components/token-card.d.cts +31 -0
  32. package/dist/components/token-card.d.ts +31 -0
  33. package/dist/components/token-card.js +256 -0
  34. package/dist/components/token-card.js.map +1 -0
  35. package/dist/index.cjs +31 -0
  36. package/dist/index.cjs.map +1 -1
  37. package/dist/index.d.cts +7 -0
  38. package/dist/index.d.ts +7 -0
  39. package/dist/index.js +18 -0
  40. package/dist/index.js.map +1 -1
  41. package/package.json +15 -9
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/token-card.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState } from \"react\";\nimport Link from \"next/link\";\nimport Image from \"next/image\";\nimport {\n ShoppingCart, Tag, ArrowRightLeft, X, Loader2, HandCoins,\n Check, ArrowUpRight, Zap,\n} from \"lucide-react\";\nimport { cn } from \"../utils/cn.js\";\nimport { ipfsToHttp } from \"../utils/ipfs.js\";\nimport { formatDisplayPrice } from \"../utils/format.js\";\nimport { CurrencyIcon } from \"./currency-icon.js\";\nimport { IpTypeBadge } from \"./ip-type-badge.js\";\nimport { MotionCard } from \"./motion-primitives.js\";\nimport type { ApiToken } from \"@medialane/sdk\";\n\nexport type RarityTier = \"legendary\" | \"epic\" | \"rare\" | \"uncommon\" | \"common\";\n\nconst RARITY_STYLE: Record<RarityTier, { label: string; className: string } | null> = {\n legendary: { label: \"Legendary\", className: \"bg-yellow-400/90 text-yellow-900\" },\n epic: { label: \"Epic\", className: \"bg-purple-500/85 text-white\" },\n rare: { label: \"Rare\", className: \"bg-blue-500/85 text-white\" },\n uncommon: { label: \"Uncommon\", className: \"bg-emerald-500/85 text-white\" },\n common: null,\n};\n\nconst BTN_BASE = \"h-8 rounded-[11px] flex items-center justify-center gap-1.5 text-xs font-semibold transition-all active:scale-[0.98] shadow-none border-0\";\nconst BTN_SOLID = cn(BTN_BASE, \"text-white hover:brightness-110\");\nconst BTN_OUTLINE = cn(BTN_BASE, \"border border-border/60 text-foreground hover:bg-muted/60\");\n\nexport interface TokenCardProps {\n token: ApiToken;\n /** Whether the current user owns this token. Default: false */\n isOwner?: boolean;\n /** Whether this token's listing is already in the cart. Default: false */\n inCart?: boolean;\n /** Show the Buy button for listed tokens. Default: true */\n showBuyButton?: boolean;\n /** Optional rarity label shown as an overlay badge */\n rarityTier?: RarityTier;\n className?: string;\n /** Callbacks — omit any to hide that button */\n onBuy?: (token: ApiToken) => void;\n onCart?: (token: ApiToken) => void;\n onOffer?: (token: ApiToken) => void;\n onList?: (token: ApiToken) => void;\n onCancel?: (token: ApiToken) => void;\n onTransfer?: (token: ApiToken) => void;\n onRemix?: (token: ApiToken) => void;\n onReport?: (token: ApiToken) => void;\n /** Slot for a DropdownMenu trigger — rendered after primary buttons */\n overflowMenu?: React.ReactNode;\n}\n\nexport function TokenCard({\n token,\n isOwner = false,\n inCart = false,\n showBuyButton = true,\n rarityTier,\n className,\n onBuy,\n onCart,\n onOffer,\n onList,\n onCancel,\n onTransfer,\n overflowMenu,\n}: TokenCardProps) {\n const [imgError, setImgError] = useState(false);\n\n const name = token.metadata?.name || `Token #${token.tokenId}`;\n const image = ipfsToHttp(token.metadata?.image);\n const activeOrder = token.activeOrders?.[0];\n const assetHref = `/asset/${token.contractAddress}/${token.tokenId}`;\n\n const renderActions = () => {\n // Non-owner + listed + showBuyButton\n if (!isOwner && activeOrder && showBuyButton) {\n return (\n <>\n {onBuy && (\n <button\n className={cn(BTN_SOLID, \"flex-1 bg-brand-purple\")}\n onClick={(e) => { e.preventDefault(); e.stopPropagation(); onBuy(token); }}\n >\n <Zap className=\"h-3.5 w-3.5 shrink-0\" />\n Buy\n </button>\n )}\n {onCart && (\n <button\n className={cn(\n BTN_OUTLINE, \"w-8 shrink-0\",\n inCart && \"border-brand-orange/50 bg-brand-orange/10 text-brand-orange\"\n )}\n onClick={(e) => { e.preventDefault(); e.stopPropagation(); onCart(token); }}\n disabled={inCart}\n aria-label={inCart ? \"In cart\" : \"Add to cart\"}\n >\n {inCart ? <Check className=\"h-3.5 w-3.5\" /> : <ShoppingCart className=\"h-3.5 w-3.5\" />}\n </button>\n )}\n {onOffer && (\n <button\n className={cn(BTN_OUTLINE, \"w-8 shrink-0 text-brand-orange border-brand-orange/40 hover:bg-brand-orange/10\")}\n onClick={(e) => { e.preventDefault(); e.stopPropagation(); onOffer(token); }}\n aria-label=\"Make an offer\"\n >\n <HandCoins className=\"h-3.5 w-3.5\" />\n </button>\n )}\n </>\n );\n }\n\n // Non-owner + no listing (or showBuyButton=false)\n if (!isOwner) {\n if (!onOffer) return null;\n return (\n <>\n <Link href={assetHref} className={cn(BTN_OUTLINE, \"flex-1\")}>\n <ArrowUpRight className=\"h-3.5 w-3.5 shrink-0\" />\n View\n </Link>\n <button\n className={cn(BTN_OUTLINE, \"w-8 shrink-0 text-brand-orange border-brand-orange/40 hover:bg-brand-orange/10\")}\n onClick={(e) => { e.preventDefault(); e.stopPropagation(); onOffer(token); }}\n aria-label=\"Make an offer\"\n >\n <HandCoins className=\"h-3.5 w-3.5\" />\n </button>\n </>\n );\n }\n\n // Owner + listed\n if (isOwner && activeOrder) {\n if (!onCancel) return null;\n return (\n <>\n <button\n className={cn(BTN_SOLID, \"flex-1 bg-brand-rose\")}\n onClick={(e) => { e.preventDefault(); e.stopPropagation(); onCancel(token); }}\n >\n <X className=\"h-3.5 w-3.5 shrink-0\" />\n Cancel listing\n </button>\n {onTransfer && (\n <button\n className={cn(BTN_OUTLINE, \"w-8 shrink-0\")}\n onClick={(e) => { e.preventDefault(); e.stopPropagation(); onTransfer(token); }}\n aria-label=\"Transfer\"\n >\n <ArrowRightLeft className=\"h-3.5 w-3.5\" />\n </button>\n )}\n </>\n );\n }\n\n // Owner + unlisted\n if (isOwner && !activeOrder) {\n if (!onList) return null;\n return (\n <>\n <button\n className={cn(BTN_SOLID, \"flex-1 bg-brand-blue\")}\n onClick={(e) => { e.preventDefault(); e.stopPropagation(); onList(token); }}\n >\n <Tag className=\"h-3.5 w-3.5 shrink-0\" />\n List for sale\n </button>\n {onTransfer && (\n <button\n className={cn(BTN_OUTLINE, \"w-8 shrink-0\")}\n onClick={(e) => { e.preventDefault(); e.stopPropagation(); onTransfer(token); }}\n aria-label=\"Transfer\"\n >\n <ArrowRightLeft className=\"h-3.5 w-3.5\" />\n </button>\n )}\n </>\n );\n }\n\n return null;\n };\n\n const actionContent = renderActions();\n const showActionBar = actionContent != null || !!overflowMenu;\n\n return (\n <MotionCard className={cn(\"card-base group relative overflow-hidden flex flex-col\", className)}>\n <Link href={assetHref} className=\"block relative shrink-0\">\n <div className=\"relative aspect-square bg-muted overflow-hidden\">\n {!imgError ? (\n <Image\n src={image}\n alt={name}\n fill\n unoptimized\n sizes=\"(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 22vw\"\n className=\"object-cover transition-transform duration-500 group-hover:scale-105\"\n onError={() => setImgError(true)}\n />\n ) : (\n <div className=\"absolute inset-0 flex items-center justify-center bg-gradient-to-br from-brand-purple/15 to-brand-blue/15\">\n <span className=\"text-2xl font-mono text-muted-foreground\">#{token.tokenId}</span>\n </div>\n )}\n\n {token.metadata?.ipType && (\n <div className=\"absolute top-2 left-2\">\n <IpTypeBadge ipType={token.metadata.ipType as any} size=\"sm\" />\n </div>\n )}\n\n {rarityTier && RARITY_STYLE[rarityTier] && (\n <div className=\"absolute top-2 right-2 z-10\">\n <span className={cn(\n \"inline-flex items-center px-1.5 py-0.5 rounded-md backdrop-blur-sm text-[10px] font-bold leading-none\",\n RARITY_STYLE[rarityTier]!.className\n )}>\n {RARITY_STYLE[rarityTier]!.label}\n </span>\n </div>\n )}\n\n {(token.metadataStatus === \"PENDING\" || token.metadataStatus === \"FETCHING\") && (\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-[10px] text-white/70\">Indexing…</span>\n </div>\n )}\n </div>\n </Link>\n\n <div className=\"px-3 pt-2.5 pb-1 flex-1\">\n <Link href={assetHref} className=\"block space-y-0.5 mb-2\">\n <p className=\"text-xl font-bold line-clamp-2 leading-tight\">{name}</p>\n {activeOrder && (\n <p className=\"flex items-center gap-1 text-[11px] font-semibold text-foreground/80\">\n <CurrencyIcon symbol={activeOrder.price.currency} size={11} />\n {formatDisplayPrice(activeOrder.price.formatted)}\n <span className=\"font-normal text-muted-foreground\">{activeOrder.price.currency}</span>\n </p>\n )}\n {token.metadata?.description ? (\n <p className=\"text-[10px] text-muted-foreground truncate leading-snug\">\n {token.metadata.description}\n </p>\n ) : token.metadata?.ipType ? (\n <p className=\"text-[10px] text-muted-foreground opacity-70\">{token.metadata.ipType}</p>\n ) : null}\n </Link>\n </div>\n\n {showActionBar && (\n <div className=\"flex items-center gap-1.5 px-2 pb-2\">\n {actionContent}\n {overflowMenu}\n </div>\n )}\n </MotionCard>\n );\n}\n\nexport function TokenCardSkeleton() {\n return (\n <div className=\"card-base overflow-hidden\">\n <div className=\"aspect-square w-full animate-pulse bg-muted\" />\n <div className=\"px-3 pt-2.5 pb-2 space-y-1.5\">\n <div className=\"h-5 w-3/4 rounded-md animate-pulse bg-muted\" />\n <div className=\"h-2.5 w-2/5 rounded-md animate-pulse bg-muted\" />\n </div>\n <div className=\"px-2 pb-2 flex gap-1.5\">\n <div className=\"h-8 flex-1 rounded-[11px] animate-pulse bg-muted\" />\n <div className=\"h-8 w-8 rounded-[11px] animate-pulse bg-muted shrink-0\" />\n <div className=\"h-8 w-8 rounded-[11px] animate-pulse bg-muted shrink-0\" />\n </div>\n </div>\n );\n}\n"],"mappings":"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","names":[]}
package/dist/index.cjs CHANGED
@@ -20,15 +20,28 @@ var index_exports = {};
20
20
  __export(index_exports, {
21
21
  AddressDisplay: () => import_address_display.AddressDisplay,
22
22
  BRAND: () => import_brand.BRAND,
23
+ CollectionCard: () => import_collection_card.CollectionCard,
24
+ CollectionCardSkeleton: () => import_collection_card.CollectionCardSkeleton,
23
25
  CurrencyAmount: () => import_currency_icon.CurrencyAmount,
24
26
  CurrencyIcon: () => import_currency_icon.CurrencyIcon,
27
+ EASE_OUT: () => import_motion_primitives.EASE_OUT,
28
+ FadeIn: () => import_motion_primitives.FadeIn,
25
29
  IP_TYPE_CONFIG: () => import_ip_type_badge.IP_TYPE_CONFIG,
26
30
  IP_TYPE_DATA: () => import_ip_types.IP_TYPE_DATA,
27
31
  IP_TYPE_DATA_MAP: () => import_ip_types.IP_TYPE_DATA_MAP,
28
32
  IP_TYPE_MAP: () => import_ip_type_badge.IP_TYPE_MAP,
29
33
  IpTypeBadge: () => import_ip_type_badge.IpTypeBadge,
34
+ KineticWords: () => import_motion_primitives.KineticWords,
30
35
  MedialaneIcon: () => import_brand_icon.MedialaneIcon,
31
36
  MedialaneLogoFull: () => import_brand_logo.MedialaneLogoFull,
37
+ MotionCard: () => import_motion_primitives.MotionCard,
38
+ SPRING: () => import_motion_primitives.SPRING,
39
+ ScrollSection: () => import_scroll_section.ScrollSection,
40
+ ShareButton: () => import_share_button.ShareButton,
41
+ Stagger: () => import_motion_primitives.Stagger,
42
+ StaggerItem: () => import_motion_primitives.StaggerItem,
43
+ TokenCard: () => import_token_card.TokenCard,
44
+ TokenCardSkeleton: () => import_token_card.TokenCardSkeleton,
32
45
  cn: () => import_cn.cn,
33
46
  formatDisplayPrice: () => import_format.formatDisplayPrice,
34
47
  ipfsToHttp: () => import_ipfs.ipfsToHttp,
@@ -46,19 +59,37 @@ var import_ip_type_badge = require("./components/ip-type-badge.js");
46
59
  var import_address_display = require("./components/address-display.js");
47
60
  var import_brand_icon = require("./components/brand-icon.js");
48
61
  var import_brand_logo = require("./components/brand-logo.js");
62
+ var import_motion_primitives = require("./components/motion-primitives.js");
63
+ var import_scroll_section = require("./components/scroll-section.js");
64
+ var import_share_button = require("./components/share-button.js");
65
+ var import_collection_card = require("./components/collection-card.js");
66
+ var import_token_card = require("./components/token-card.js");
49
67
  // Annotate the CommonJS export names for ESM import in node:
50
68
  0 && (module.exports = {
51
69
  AddressDisplay,
52
70
  BRAND,
71
+ CollectionCard,
72
+ CollectionCardSkeleton,
53
73
  CurrencyAmount,
54
74
  CurrencyIcon,
75
+ EASE_OUT,
76
+ FadeIn,
55
77
  IP_TYPE_CONFIG,
56
78
  IP_TYPE_DATA,
57
79
  IP_TYPE_DATA_MAP,
58
80
  IP_TYPE_MAP,
59
81
  IpTypeBadge,
82
+ KineticWords,
60
83
  MedialaneIcon,
61
84
  MedialaneLogoFull,
85
+ MotionCard,
86
+ SPRING,
87
+ ScrollSection,
88
+ ShareButton,
89
+ Stagger,
90
+ StaggerItem,
91
+ TokenCard,
92
+ TokenCardSkeleton,
62
93
  cn,
63
94
  formatDisplayPrice,
64
95
  ipfsToHttp,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// ── Utils ─────────────────────────────────────────────────────────────────────\nexport { cn } from \"./utils/cn.js\";\nexport { formatDisplayPrice } from \"./utils/format.js\";\nexport { shortenAddress } from \"./utils/address.js\";\nexport { ipfsToHttp } from \"./utils/ipfs.js\";\n\n// ── Data (server-safe — no React, safe in Server Components) ──────────────────\nexport { IP_TYPE_DATA, IP_TYPE_DATA_MAP } from \"./data/ip-types.js\";\nexport type { IpTypeData } from \"./data/ip-types.js\";\nexport { BRAND } from \"./data/brand.js\";\n\n// ── Components (client-only — all have \"use client\") ─────────────────────────\nexport { CurrencyIcon, CurrencyAmount } from \"./components/currency-icon.js\";\nexport type { CurrencyIconProps, CurrencyAmountProps } from \"./components/currency-icon.js\";\n\nexport { IpTypeBadge, IP_TYPE_CONFIG, IP_TYPE_MAP } from \"./components/ip-type-badge.js\";\nexport type { IpTypeBadgeProps, IpTypeConfig } from \"./components/ip-type-badge.js\";\n\nexport { AddressDisplay } from \"./components/address-display.js\";\nexport type { AddressDisplayProps } from \"./components/address-display.js\";\n\nexport { MedialaneIcon } from \"./components/brand-icon.js\";\nexport type { MedialaneIconProps } from \"./components/brand-icon.js\";\nexport { MedialaneLogoFull } from \"./components/brand-logo.js\";\nexport type { MedialaneLogoFullProps } from \"./components/brand-logo.js\";\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,gBAAmB;AACnB,oBAAmC;AACnC,qBAA+B;AAC/B,kBAA2B;AAG3B,sBAA+C;AAE/C,mBAAsB;AAGtB,2BAA6C;AAG7C,2BAAyD;AAGzD,6BAA+B;AAG/B,wBAA8B;AAE9B,wBAAkC;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// ── Utils ─────────────────────────────────────────────────────────────────────\nexport { cn } from \"./utils/cn.js\";\nexport { formatDisplayPrice } from \"./utils/format.js\";\nexport { shortenAddress } from \"./utils/address.js\";\nexport { ipfsToHttp } from \"./utils/ipfs.js\";\n\n// ── Data (server-safe — no React, safe in Server Components) ──────────────────\nexport { IP_TYPE_DATA, IP_TYPE_DATA_MAP } from \"./data/ip-types.js\";\nexport type { IpTypeData } from \"./data/ip-types.js\";\nexport { BRAND } from \"./data/brand.js\";\n\n// ── Components (client-only — all have \"use client\") ─────────────────────────\nexport { CurrencyIcon, CurrencyAmount } from \"./components/currency-icon.js\";\nexport type { CurrencyIconProps, CurrencyAmountProps } from \"./components/currency-icon.js\";\n\nexport { IpTypeBadge, IP_TYPE_CONFIG, IP_TYPE_MAP } from \"./components/ip-type-badge.js\";\nexport type { IpTypeBadgeProps, IpTypeConfig } from \"./components/ip-type-badge.js\";\n\nexport { AddressDisplay } from \"./components/address-display.js\";\nexport type { AddressDisplayProps } from \"./components/address-display.js\";\n\nexport { MedialaneIcon } from \"./components/brand-icon.js\";\nexport type { MedialaneIconProps } from \"./components/brand-icon.js\";\nexport { MedialaneLogoFull } from \"./components/brand-logo.js\";\nexport type { MedialaneLogoFullProps } from \"./components/brand-logo.js\";\n\n// ── v0.2 additions ────────────────────────────────────────────────────────────\nexport { MotionCard, FadeIn, Stagger, StaggerItem, KineticWords, SPRING, EASE_OUT } from \"./components/motion-primitives.js\";\nexport { ScrollSection } from \"./components/scroll-section.js\";\nexport type { ScrollSectionProps } from \"./components/scroll-section.js\";\nexport { ShareButton } from \"./components/share-button.js\";\nexport type { ShareButtonProps } from \"./components/share-button.js\";\nexport { CollectionCard, CollectionCardSkeleton } from \"./components/collection-card.js\";\nexport type { CollectionCardProps } from \"./components/collection-card.js\";\nexport { TokenCard, TokenCardSkeleton } from \"./components/token-card.js\";\nexport type { TokenCardProps, RarityTier } from \"./components/token-card.js\";\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,gBAAmB;AACnB,oBAAmC;AACnC,qBAA+B;AAC/B,kBAA2B;AAG3B,sBAA+C;AAE/C,mBAAsB;AAGtB,2BAA6C;AAG7C,2BAAyD;AAGzD,6BAA+B;AAG/B,wBAA8B;AAE9B,wBAAkC;AAIlC,+BAAyF;AACzF,4BAA8B;AAE9B,0BAA4B;AAE5B,6BAAuD;AAEvD,wBAA6C;","names":[]}
package/dist/index.d.cts CHANGED
@@ -9,5 +9,12 @@ export { IP_TYPE_CONFIG, IP_TYPE_MAP, IpTypeBadge, IpTypeBadgeProps, IpTypeConfi
9
9
  export { AddressDisplay, AddressDisplayProps } from './components/address-display.cjs';
10
10
  export { MedialaneIcon, MedialaneIconProps } from './components/brand-icon.cjs';
11
11
  export { MedialaneLogoFull, MedialaneLogoFullProps } from './components/brand-logo.cjs';
12
+ export { EASE_OUT, FadeIn, KineticWords, MotionCard, SPRING, Stagger, StaggerItem } from './components/motion-primitives.cjs';
13
+ export { ScrollSection, ScrollSectionProps } from './components/scroll-section.cjs';
14
+ export { ShareButton, ShareButtonProps } from './components/share-button.cjs';
15
+ export { CollectionCard, CollectionCardProps, CollectionCardSkeleton } from './components/collection-card.cjs';
16
+ export { RarityTier, TokenCard, TokenCardProps, TokenCardSkeleton } from './components/token-card.cjs';
12
17
  import 'clsx';
13
18
  import 'react/jsx-runtime';
19
+ import 'framer-motion';
20
+ import '@medialane/sdk';
package/dist/index.d.ts CHANGED
@@ -9,5 +9,12 @@ export { IP_TYPE_CONFIG, IP_TYPE_MAP, IpTypeBadge, IpTypeBadgeProps, IpTypeConfi
9
9
  export { AddressDisplay, AddressDisplayProps } from './components/address-display.js';
10
10
  export { MedialaneIcon, MedialaneIconProps } from './components/brand-icon.js';
11
11
  export { MedialaneLogoFull, MedialaneLogoFullProps } from './components/brand-logo.js';
12
+ export { EASE_OUT, FadeIn, KineticWords, MotionCard, SPRING, Stagger, StaggerItem } from './components/motion-primitives.js';
13
+ export { ScrollSection, ScrollSectionProps } from './components/scroll-section.js';
14
+ export { ShareButton, ShareButtonProps } from './components/share-button.js';
15
+ export { CollectionCard, CollectionCardProps, CollectionCardSkeleton } from './components/collection-card.js';
16
+ export { RarityTier, TokenCard, TokenCardProps, TokenCardSkeleton } from './components/token-card.js';
12
17
  import 'clsx';
13
18
  import 'react/jsx-runtime';
19
+ import 'framer-motion';
20
+ import '@medialane/sdk';
package/dist/index.js CHANGED
@@ -9,18 +9,36 @@ import { IpTypeBadge, IP_TYPE_CONFIG, IP_TYPE_MAP } from "./components/ip-type-b
9
9
  import { AddressDisplay } from "./components/address-display.js";
10
10
  import { MedialaneIcon } from "./components/brand-icon.js";
11
11
  import { MedialaneLogoFull } from "./components/brand-logo.js";
12
+ import { MotionCard, FadeIn, Stagger, StaggerItem, KineticWords, SPRING, EASE_OUT } from "./components/motion-primitives.js";
13
+ import { ScrollSection } from "./components/scroll-section.js";
14
+ import { ShareButton } from "./components/share-button.js";
15
+ import { CollectionCard, CollectionCardSkeleton } from "./components/collection-card.js";
16
+ import { TokenCard, TokenCardSkeleton } from "./components/token-card.js";
12
17
  export {
13
18
  AddressDisplay,
14
19
  BRAND,
20
+ CollectionCard,
21
+ CollectionCardSkeleton,
15
22
  CurrencyAmount,
16
23
  CurrencyIcon,
24
+ EASE_OUT,
25
+ FadeIn,
17
26
  IP_TYPE_CONFIG,
18
27
  IP_TYPE_DATA,
19
28
  IP_TYPE_DATA_MAP,
20
29
  IP_TYPE_MAP,
21
30
  IpTypeBadge,
31
+ KineticWords,
22
32
  MedialaneIcon,
23
33
  MedialaneLogoFull,
34
+ MotionCard,
35
+ SPRING,
36
+ ScrollSection,
37
+ ShareButton,
38
+ Stagger,
39
+ StaggerItem,
40
+ TokenCard,
41
+ TokenCardSkeleton,
24
42
  cn,
25
43
  formatDisplayPrice,
26
44
  ipfsToHttp,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// ── Utils ─────────────────────────────────────────────────────────────────────\nexport { cn } from \"./utils/cn.js\";\nexport { formatDisplayPrice } from \"./utils/format.js\";\nexport { shortenAddress } from \"./utils/address.js\";\nexport { ipfsToHttp } from \"./utils/ipfs.js\";\n\n// ── Data (server-safe — no React, safe in Server Components) ──────────────────\nexport { IP_TYPE_DATA, IP_TYPE_DATA_MAP } from \"./data/ip-types.js\";\nexport type { IpTypeData } from \"./data/ip-types.js\";\nexport { BRAND } from \"./data/brand.js\";\n\n// ── Components (client-only — all have \"use client\") ─────────────────────────\nexport { CurrencyIcon, CurrencyAmount } from \"./components/currency-icon.js\";\nexport type { CurrencyIconProps, CurrencyAmountProps } from \"./components/currency-icon.js\";\n\nexport { IpTypeBadge, IP_TYPE_CONFIG, IP_TYPE_MAP } from \"./components/ip-type-badge.js\";\nexport type { IpTypeBadgeProps, IpTypeConfig } from \"./components/ip-type-badge.js\";\n\nexport { AddressDisplay } from \"./components/address-display.js\";\nexport type { AddressDisplayProps } from \"./components/address-display.js\";\n\nexport { MedialaneIcon } from \"./components/brand-icon.js\";\nexport type { MedialaneIconProps } from \"./components/brand-icon.js\";\nexport { MedialaneLogoFull } from \"./components/brand-logo.js\";\nexport type { MedialaneLogoFullProps } from \"./components/brand-logo.js\";\n"],"mappings":"AACA,SAAS,UAAU;AACnB,SAAS,0BAA0B;AACnC,SAAS,sBAAsB;AAC/B,SAAS,kBAAkB;AAG3B,SAAS,cAAc,wBAAwB;AAE/C,SAAS,aAAa;AAGtB,SAAS,cAAc,sBAAsB;AAG7C,SAAS,aAAa,gBAAgB,mBAAmB;AAGzD,SAAS,sBAAsB;AAG/B,SAAS,qBAAqB;AAE9B,SAAS,yBAAyB;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// ── Utils ─────────────────────────────────────────────────────────────────────\nexport { cn } from \"./utils/cn.js\";\nexport { formatDisplayPrice } from \"./utils/format.js\";\nexport { shortenAddress } from \"./utils/address.js\";\nexport { ipfsToHttp } from \"./utils/ipfs.js\";\n\n// ── Data (server-safe — no React, safe in Server Components) ──────────────────\nexport { IP_TYPE_DATA, IP_TYPE_DATA_MAP } from \"./data/ip-types.js\";\nexport type { IpTypeData } from \"./data/ip-types.js\";\nexport { BRAND } from \"./data/brand.js\";\n\n// ── Components (client-only — all have \"use client\") ─────────────────────────\nexport { CurrencyIcon, CurrencyAmount } from \"./components/currency-icon.js\";\nexport type { CurrencyIconProps, CurrencyAmountProps } from \"./components/currency-icon.js\";\n\nexport { IpTypeBadge, IP_TYPE_CONFIG, IP_TYPE_MAP } from \"./components/ip-type-badge.js\";\nexport type { IpTypeBadgeProps, IpTypeConfig } from \"./components/ip-type-badge.js\";\n\nexport { AddressDisplay } from \"./components/address-display.js\";\nexport type { AddressDisplayProps } from \"./components/address-display.js\";\n\nexport { MedialaneIcon } from \"./components/brand-icon.js\";\nexport type { MedialaneIconProps } from \"./components/brand-icon.js\";\nexport { MedialaneLogoFull } from \"./components/brand-logo.js\";\nexport type { MedialaneLogoFullProps } from \"./components/brand-logo.js\";\n\n// ── v0.2 additions ────────────────────────────────────────────────────────────\nexport { MotionCard, FadeIn, Stagger, StaggerItem, KineticWords, SPRING, EASE_OUT } from \"./components/motion-primitives.js\";\nexport { ScrollSection } from \"./components/scroll-section.js\";\nexport type { ScrollSectionProps } from \"./components/scroll-section.js\";\nexport { ShareButton } from \"./components/share-button.js\";\nexport type { ShareButtonProps } from \"./components/share-button.js\";\nexport { CollectionCard, CollectionCardSkeleton } from \"./components/collection-card.js\";\nexport type { CollectionCardProps } from \"./components/collection-card.js\";\nexport { TokenCard, TokenCardSkeleton } from \"./components/token-card.js\";\nexport type { TokenCardProps, RarityTier } from \"./components/token-card.js\";\n"],"mappings":"AACA,SAAS,UAAU;AACnB,SAAS,0BAA0B;AACnC,SAAS,sBAAsB;AAC/B,SAAS,kBAAkB;AAG3B,SAAS,cAAc,wBAAwB;AAE/C,SAAS,aAAa;AAGtB,SAAS,cAAc,sBAAsB;AAG7C,SAAS,aAAa,gBAAgB,mBAAmB;AAGzD,SAAS,sBAAsB;AAG/B,SAAS,qBAAqB;AAE9B,SAAS,yBAAyB;AAIlC,SAAS,YAAY,QAAQ,SAAS,aAAa,cAAc,QAAQ,gBAAgB;AACzF,SAAS,qBAAqB;AAE9B,SAAS,mBAAmB;AAE5B,SAAS,gBAAgB,8BAA8B;AAEvD,SAAS,WAAW,yBAAyB;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@medialane/ui",
3
- "version": "0.1.5",
3
+ "version": "0.2.0",
4
4
  "description": "Shared UI components for Medialane apps",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -35,20 +35,26 @@
35
35
  "next-themes": ">=0.3.0",
36
36
  "lucide-react": ">=0.400.0",
37
37
  "tailwind-merge": ">=2.0.0",
38
- "clsx": ">=2.0.0"
38
+ "clsx": ">=2.0.0",
39
+ "framer-motion": ">=10.0.0",
40
+ "sonner": ">=1.0.0",
41
+ "@medialane/sdk": ">=0.6.0"
39
42
  },
40
43
  "devDependencies": {
41
- "react": "^19.0.0",
42
- "react-dom": "^19.0.0",
44
+ "@medialane/sdk": "^0.6.7",
45
+ "@types/react": "^19.0.0",
46
+ "@types/react-dom": "^19.0.0",
47
+ "clsx": "^2.0.0",
48
+ "framer-motion": "^11.0.0",
49
+ "lucide-react": "^0.400.0",
43
50
  "next": "^15.0.0",
44
51
  "next-themes": "^0.4.0",
45
- "lucide-react": "^0.400.0",
52
+ "react": "^19.0.0",
53
+ "react-dom": "^19.0.0",
54
+ "sonner": "^1.5.0",
46
55
  "tailwind-merge": "^2.0.0",
47
- "clsx": "^2.0.0",
48
56
  "tailwindcss": "^3.0.0",
49
57
  "tsup": "^8.0.0",
50
- "typescript": "^5.6.0",
51
- "@types/react": "^19.0.0",
52
- "@types/react-dom": "^19.0.0"
58
+ "typescript": "^5.6.0"
53
59
  }
54
60
  }