@medialane/ui 0.36.0 → 0.37.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 (55) hide show
  1. package/dist/components/load-more-sentinel.cjs +54 -0
  2. package/dist/components/load-more-sentinel.cjs.map +1 -0
  3. package/dist/components/load-more-sentinel.d.cts +17 -0
  4. package/dist/components/load-more-sentinel.d.ts +17 -0
  5. package/dist/components/load-more-sentinel.js +30 -0
  6. package/dist/components/load-more-sentinel.js.map +1 -0
  7. package/dist/components/rewards/badge-shelf.cjs +90 -0
  8. package/dist/components/rewards/badge-shelf.cjs.map +1 -0
  9. package/dist/components/rewards/badge-shelf.d.cts +24 -0
  10. package/dist/components/rewards/badge-shelf.d.ts +24 -0
  11. package/dist/components/rewards/badge-shelf.js +56 -0
  12. package/dist/components/rewards/badge-shelf.js.map +1 -0
  13. package/dist/components/rewards/leaderboard-table.cjs +96 -0
  14. package/dist/components/rewards/leaderboard-table.cjs.map +1 -0
  15. package/dist/components/rewards/leaderboard-table.d.cts +34 -0
  16. package/dist/components/rewards/leaderboard-table.d.ts +34 -0
  17. package/dist/components/rewards/leaderboard-table.js +71 -0
  18. package/dist/components/rewards/leaderboard-table.js.map +1 -0
  19. package/dist/components/rewards/level-badge.cjs +60 -0
  20. package/dist/components/rewards/level-badge.cjs.map +1 -0
  21. package/dist/components/rewards/level-badge.d.cts +14 -0
  22. package/dist/components/rewards/level-badge.d.ts +14 -0
  23. package/dist/components/rewards/level-badge.js +36 -0
  24. package/dist/components/rewards/level-badge.js.map +1 -0
  25. package/dist/components/rewards/level-ladder.cjs +54 -0
  26. package/dist/components/rewards/level-ladder.cjs.map +1 -0
  27. package/dist/components/rewards/level-ladder.d.cts +17 -0
  28. package/dist/components/rewards/level-ladder.d.ts +17 -0
  29. package/dist/components/rewards/level-ladder.js +30 -0
  30. package/dist/components/rewards/level-ladder.js.map +1 -0
  31. package/dist/components/rewards/score-summary-card.cjs +83 -0
  32. package/dist/components/rewards/score-summary-card.cjs.map +1 -0
  33. package/dist/components/rewards/score-summary-card.d.cts +26 -0
  34. package/dist/components/rewards/score-summary-card.d.ts +26 -0
  35. package/dist/components/rewards/score-summary-card.js +59 -0
  36. package/dist/components/rewards/score-summary-card.js.map +1 -0
  37. package/dist/components/rewards/xp-progress.cjs +81 -0
  38. package/dist/components/rewards/xp-progress.cjs.map +1 -0
  39. package/dist/components/rewards/xp-progress.d.cts +18 -0
  40. package/dist/components/rewards/xp-progress.d.ts +18 -0
  41. package/dist/components/rewards/xp-progress.js +57 -0
  42. package/dist/components/rewards/xp-progress.js.map +1 -0
  43. package/dist/components/rewards/xp-toast-content.cjs +49 -0
  44. package/dist/components/rewards/xp-toast-content.cjs.map +1 -0
  45. package/dist/components/rewards/xp-toast-content.d.cts +14 -0
  46. package/dist/components/rewards/xp-toast-content.d.ts +14 -0
  47. package/dist/components/rewards/xp-toast-content.js +25 -0
  48. package/dist/components/rewards/xp-toast-content.js.map +1 -0
  49. package/dist/index.cjs +3 -0
  50. package/dist/index.cjs.map +1 -1
  51. package/dist/index.d.cts +10 -128
  52. package/dist/index.d.ts +10 -128
  53. package/dist/index.js +2 -0
  54. package/dist/index.js.map +1 -1
  55. package/package.json +1 -1
@@ -0,0 +1,57 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../../utils/cn.js";
3
+ function progressPct({ totalXp, levelXp, nextLevelXp }) {
4
+ if (nextLevelXp === null || nextLevelXp <= levelXp) return 100;
5
+ return Math.min(100, Math.max(0, Math.round((totalXp - levelXp) / (nextLevelXp - levelXp) * 100)));
6
+ }
7
+ function XpProgress({ totalXp, levelXp, nextLevelXp, badgeColor, variant = "bar", size = 40, className }) {
8
+ const pct = progressPct({ totalXp, levelXp, nextLevelXp });
9
+ if (variant === "ring") {
10
+ const stroke = Math.max(2.5, size / 12);
11
+ const radius = (size - stroke) / 2;
12
+ const circumference = 2 * Math.PI * radius;
13
+ return /* @__PURE__ */ jsxs(
14
+ "svg",
15
+ {
16
+ width: size,
17
+ height: size,
18
+ viewBox: `0 0 ${size} ${size}`,
19
+ className: cn("shrink-0 -rotate-90", className),
20
+ role: "img",
21
+ "aria-label": `${pct}% toward the next level`,
22
+ children: [
23
+ /* @__PURE__ */ jsx("circle", { cx: size / 2, cy: size / 2, r: radius, fill: "none", strokeWidth: stroke, className: "stroke-border" }),
24
+ /* @__PURE__ */ jsx(
25
+ "circle",
26
+ {
27
+ cx: size / 2,
28
+ cy: size / 2,
29
+ r: radius,
30
+ fill: "none",
31
+ strokeWidth: stroke,
32
+ strokeLinecap: "round",
33
+ stroke: badgeColor,
34
+ strokeDasharray: circumference,
35
+ strokeDashoffset: circumference * (1 - pct / 100)
36
+ }
37
+ )
38
+ ]
39
+ }
40
+ );
41
+ }
42
+ return /* @__PURE__ */ jsx(
43
+ "div",
44
+ {
45
+ className: cn("h-2 w-full overflow-hidden rounded-full bg-border/60", className),
46
+ role: "progressbar",
47
+ "aria-valuenow": pct,
48
+ "aria-valuemin": 0,
49
+ "aria-valuemax": 100,
50
+ children: /* @__PURE__ */ jsx("div", { className: "h-full rounded-full transition-[width]", style: { width: `${pct}%`, backgroundColor: badgeColor } })
51
+ }
52
+ );
53
+ }
54
+ export {
55
+ XpProgress
56
+ };
57
+ //# sourceMappingURL=xp-progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/rewards/xp-progress.tsx"],"sourcesContent":["import { cn } from \"../../utils/cn.js\";\n\nexport interface XpProgressProps {\n totalXp: number;\n /** XP required to reach the current level. */\n levelXp: number;\n /** XP required for the next level; null at max level (renders full). */\n nextLevelXp: number | null;\n badgeColor: string;\n variant?: \"bar\" | \"ring\";\n /** Ring diameter in px (ring variant only). */\n size?: number;\n className?: string;\n}\n\nfunction progressPct({ totalXp, levelXp, nextLevelXp }: Pick<XpProgressProps, \"totalXp\" | \"levelXp\" | \"nextLevelXp\">): number {\n if (nextLevelXp === null || nextLevelXp <= levelXp) return 100;\n return Math.min(100, Math.max(0, Math.round(((totalXp - levelXp) / (nextLevelXp - levelXp)) * 100)));\n}\n\n/** XP progress toward the next level, as a rounded bar or an SVG ring. */\nexport function XpProgress({ totalXp, levelXp, nextLevelXp, badgeColor, variant = \"bar\", size = 40, className }: XpProgressProps) {\n const pct = progressPct({ totalXp, levelXp, nextLevelXp });\n\n if (variant === \"ring\") {\n const stroke = Math.max(2.5, size / 12);\n const radius = (size - stroke) / 2;\n const circumference = 2 * Math.PI * radius;\n return (\n <svg\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n className={cn(\"shrink-0 -rotate-90\", className)}\n role=\"img\"\n aria-label={`${pct}% toward the next level`}\n >\n <circle cx={size / 2} cy={size / 2} r={radius} fill=\"none\" strokeWidth={stroke} className=\"stroke-border\" />\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={stroke}\n strokeLinecap=\"round\"\n stroke={badgeColor}\n strokeDasharray={circumference}\n strokeDashoffset={circumference * (1 - pct / 100)}\n />\n </svg>\n );\n }\n\n return (\n <div\n className={cn(\"h-2 w-full overflow-hidden rounded-full bg-border/60\", className)}\n role=\"progressbar\"\n aria-valuenow={pct}\n aria-valuemin={0}\n aria-valuemax={100}\n >\n <div className=\"h-full rounded-full transition-[width]\" style={{ width: `${pct}%`, backgroundColor: badgeColor }} />\n </div>\n );\n}\n"],"mappings":"AA6BM,SAQE,KARF;AA7BN,SAAS,UAAU;AAenB,SAAS,YAAY,EAAE,SAAS,SAAS,YAAY,GAAyE;AAC5H,MAAI,gBAAgB,QAAQ,eAAe,QAAS,QAAO;AAC3D,SAAO,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,KAAK,OAAQ,UAAU,YAAY,cAAc,WAAY,GAAG,CAAC,CAAC;AACrG;AAGO,SAAS,WAAW,EAAE,SAAS,SAAS,aAAa,YAAY,UAAU,OAAO,OAAO,IAAI,UAAU,GAAoB;AAChI,QAAM,MAAM,YAAY,EAAE,SAAS,SAAS,YAAY,CAAC;AAEzD,MAAI,YAAY,QAAQ;AACtB,UAAM,SAAS,KAAK,IAAI,KAAK,OAAO,EAAE;AACtC,UAAM,UAAU,OAAO,UAAU;AACjC,UAAM,gBAAgB,IAAI,KAAK,KAAK;AACpC,WACE;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,SAAS,OAAO,IAAI,IAAI,IAAI;AAAA,QAC5B,WAAW,GAAG,uBAAuB,SAAS;AAAA,QAC9C,MAAK;AAAA,QACL,cAAY,GAAG,GAAG;AAAA,QAElB;AAAA,8BAAC,YAAO,IAAI,OAAO,GAAG,IAAI,OAAO,GAAG,GAAG,QAAQ,MAAK,QAAO,aAAa,QAAQ,WAAU,iBAAgB;AAAA,UAC1G;AAAA,YAAC;AAAA;AAAA,cACC,IAAI,OAAO;AAAA,cACX,IAAI,OAAO;AAAA,cACX,GAAG;AAAA,cACH,MAAK;AAAA,cACL,aAAa;AAAA,cACb,eAAc;AAAA,cACd,QAAQ;AAAA,cACR,iBAAiB;AAAA,cACjB,kBAAkB,iBAAiB,IAAI,MAAM;AAAA;AAAA,UAC/C;AAAA;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,wDAAwD,SAAS;AAAA,MAC/E,MAAK;AAAA,MACL,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,iBAAe;AAAA,MAEf,8BAAC,SAAI,WAAU,0CAAyC,OAAO,EAAE,OAAO,GAAG,GAAG,KAAK,iBAAiB,WAAW,GAAG;AAAA;AAAA,EACpH;AAEJ;","names":[]}
@@ -0,0 +1,49 @@
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 xp_toast_content_exports = {};
20
+ __export(xp_toast_content_exports, {
21
+ XpToastContent: () => XpToastContent
22
+ });
23
+ module.exports = __toCommonJS(xp_toast_content_exports);
24
+ var import_jsx_runtime = require("react/jsx-runtime");
25
+ function XpToastContent({ xp, label, color = "#8b5cf6" }) {
26
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-2.5", children: [
27
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
28
+ "span",
29
+ {
30
+ className: "flex h-8 shrink-0 items-center rounded-full border px-2.5 text-sm font-black tabular-nums",
31
+ style: { borderColor: `${color}60`, backgroundColor: `${color}18`, color },
32
+ children: [
33
+ "+",
34
+ xp,
35
+ " XP"
36
+ ]
37
+ }
38
+ ),
39
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "min-w-0", children: [
40
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "truncate text-sm font-semibold", children: label }),
41
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-xs text-muted-foreground", children: "Counts toward your score soon" })
42
+ ] })
43
+ ] });
44
+ }
45
+ // Annotate the CommonJS export names for ESM import in node:
46
+ 0 && (module.exports = {
47
+ XpToastContent
48
+ });
49
+ //# sourceMappingURL=xp-toast-content.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/rewards/xp-toast-content.tsx"],"sourcesContent":["export interface XpToastContentProps {\n xp: number;\n /** The action's configured label, e.g. \"Mint an IP asset\". */\n label: string;\n color?: string;\n}\n\n/** Toast body for optimistic XP feedback: \"+20 XP · Mint an IP asset\".\n * Scores recompute on a schedule, so this shows the action's configured\n * value — the caller must never present it as a live balance. */\nexport function XpToastContent({ xp, label, color = \"#8b5cf6\" }: XpToastContentProps) {\n return (\n <div className=\"flex items-center gap-2.5\">\n <span\n className=\"flex h-8 shrink-0 items-center rounded-full border px-2.5 text-sm font-black tabular-nums\"\n style={{ borderColor: `${color}60`, backgroundColor: `${color}18`, color }}\n >\n +{xp} XP\n </span>\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-semibold\">{label}</p>\n <p className=\"text-xs text-muted-foreground\">Counts toward your score soon</p>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAaM;AAHC,SAAS,eAAe,EAAE,IAAI,OAAO,QAAQ,UAAU,GAAwB;AACpF,SACE,6CAAC,SAAI,WAAU,6BACb;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,aAAa,GAAG,KAAK,MAAM,iBAAiB,GAAG,KAAK,MAAM,MAAM;AAAA,QAC1E;AAAA;AAAA,UACG;AAAA,UAAG;AAAA;AAAA;AAAA,IACP;AAAA,IACA,6CAAC,SAAI,WAAU,WACb;AAAA,kDAAC,OAAE,WAAU,kCAAkC,iBAAM;AAAA,MACrD,4CAAC,OAAE,WAAU,iCAAgC,2CAA6B;AAAA,OAC5E;AAAA,KACF;AAEJ;","names":[]}
@@ -0,0 +1,14 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface XpToastContentProps {
4
+ xp: number;
5
+ /** The action's configured label, e.g. "Mint an IP asset". */
6
+ label: string;
7
+ color?: string;
8
+ }
9
+ /** Toast body for optimistic XP feedback: "+20 XP · Mint an IP asset".
10
+ * Scores recompute on a schedule, so this shows the action's configured
11
+ * value — the caller must never present it as a live balance. */
12
+ declare function XpToastContent({ xp, label, color }: XpToastContentProps): react_jsx_runtime.JSX.Element;
13
+
14
+ export { XpToastContent, type XpToastContentProps };
@@ -0,0 +1,14 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface XpToastContentProps {
4
+ xp: number;
5
+ /** The action's configured label, e.g. "Mint an IP asset". */
6
+ label: string;
7
+ color?: string;
8
+ }
9
+ /** Toast body for optimistic XP feedback: "+20 XP · Mint an IP asset".
10
+ * Scores recompute on a schedule, so this shows the action's configured
11
+ * value — the caller must never present it as a live balance. */
12
+ declare function XpToastContent({ xp, label, color }: XpToastContentProps): react_jsx_runtime.JSX.Element;
13
+
14
+ export { XpToastContent, type XpToastContentProps };
@@ -0,0 +1,25 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ function XpToastContent({ xp, label, color = "#8b5cf6" }) {
3
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2.5", children: [
4
+ /* @__PURE__ */ jsxs(
5
+ "span",
6
+ {
7
+ className: "flex h-8 shrink-0 items-center rounded-full border px-2.5 text-sm font-black tabular-nums",
8
+ style: { borderColor: `${color}60`, backgroundColor: `${color}18`, color },
9
+ children: [
10
+ "+",
11
+ xp,
12
+ " XP"
13
+ ]
14
+ }
15
+ ),
16
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
17
+ /* @__PURE__ */ jsx("p", { className: "truncate text-sm font-semibold", children: label }),
18
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: "Counts toward your score soon" })
19
+ ] })
20
+ ] });
21
+ }
22
+ export {
23
+ XpToastContent
24
+ };
25
+ //# sourceMappingURL=xp-toast-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/rewards/xp-toast-content.tsx"],"sourcesContent":["export interface XpToastContentProps {\n xp: number;\n /** The action's configured label, e.g. \"Mint an IP asset\". */\n label: string;\n color?: string;\n}\n\n/** Toast body for optimistic XP feedback: \"+20 XP · Mint an IP asset\".\n * Scores recompute on a schedule, so this shows the action's configured\n * value — the caller must never present it as a live balance. */\nexport function XpToastContent({ xp, label, color = \"#8b5cf6\" }: XpToastContentProps) {\n return (\n <div className=\"flex items-center gap-2.5\">\n <span\n className=\"flex h-8 shrink-0 items-center rounded-full border px-2.5 text-sm font-black tabular-nums\"\n style={{ borderColor: `${color}60`, backgroundColor: `${color}18`, color }}\n >\n +{xp} XP\n </span>\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-semibold\">{label}</p>\n <p className=\"text-xs text-muted-foreground\">Counts toward your score soon</p>\n </div>\n </div>\n );\n}\n"],"mappings":"AAaM,SAOE,KAPF;AAHC,SAAS,eAAe,EAAE,IAAI,OAAO,QAAQ,UAAU,GAAwB;AACpF,SACE,qBAAC,SAAI,WAAU,6BACb;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,aAAa,GAAG,KAAK,MAAM,iBAAiB,GAAG,KAAK,MAAM,MAAM;AAAA,QAC1E;AAAA;AAAA,UACG;AAAA,UAAG;AAAA;AAAA;AAAA,IACP;AAAA,IACA,qBAAC,SAAI,WAAU,WACb;AAAA,0BAAC,OAAE,WAAU,kCAAkC,iBAAM;AAAA,MACrD,oBAAC,OAAE,WAAU,iCAAgC,2CAA6B;AAAA,OAC5E;AAAA,KACF;AAEJ;","names":[]}
package/dist/index.cjs CHANGED
@@ -86,6 +86,7 @@ __export(index_exports, {
86
86
  LevelLadder: () => import_level_ladder.LevelLadder,
87
87
  ListingCard: () => import_listing_card.ListingCard,
88
88
  ListingCardSkeleton: () => import_listing_card.ListingCardSkeleton,
89
+ LoadMoreSentinel: () => import_load_more_sentinel.LoadMoreSentinel,
89
90
  MedialaneIcon: () => import_brand_icon.MedialaneIcon,
90
91
  MedialaneLogoFull: () => import_brand_logo.MedialaneLogoFull,
91
92
  MotionCard: () => import_motion_primitives.MotionCard,
@@ -191,6 +192,7 @@ var import_score_summary_card = require("./components/rewards/score-summary-card
191
192
  var import_leaderboard_table = require("./components/rewards/leaderboard-table.js");
192
193
  var import_level_ladder = require("./components/rewards/level-ladder.js");
193
194
  var import_xp_toast_content = require("./components/rewards/xp-toast-content.js");
195
+ var import_load_more_sentinel = require("./components/load-more-sentinel.js");
194
196
  // Annotate the CommonJS export names for ESM import in node:
195
197
  0 && (module.exports = {
196
198
  ACTIVITY_MESSAGES,
@@ -261,6 +263,7 @@ var import_xp_toast_content = require("./components/rewards/xp-toast-content.js"
261
263
  LevelLadder,
262
264
  ListingCard,
263
265
  ListingCardSkeleton,
266
+ LoadMoreSentinel,
264
267
  MedialaneIcon,
265
268
  MedialaneLogoFull,
266
269
  MotionCard,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// ── Utils ─────────────────────────────────────────────────────────────────────\nexport { cn } from \"./utils/cn.js\";\nexport { formatDisplayPrice, parsePriceDisplay } from \"./utils/format.js\";\nexport { shortenAddress } from \"./utils/address.js\";\nexport { ipfsToHttp } from \"./utils/ipfs.js\";\nexport { licenseSummary } from \"./utils/license-summary.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 {\n IP_TYPES, LICENSE_TYPES, GEOGRAPHIC_SCOPES, AI_POLICIES,\n DERIVATIVES_OPTIONS, LICENSE_TRAIT_TYPES,\n} from \"./data/ip.js\";\nexport type { IPType, LicenseType } from \"./data/ip.js\";\nexport {\n IP_TEMPLATES, EMBED_PLATFORM_META, SOCIAL_PLATFORM_META, TEMPLATE_TRAIT_TYPES, DOC_UPLOAD,\n} from \"./data/ip-templates.js\";\nexport type { EmbedPlatform, SocialPlatform, TraitSuggestion, IPTemplate, DocUploadConfig } from \"./data/ip-templates.js\";\nexport { IPTypeDisplay } from \"./components/ip-type-display.js\";\nexport { AssetOverviewContent } from \"./components/asset-overview-content.js\";\nexport { AssetLicenseSummary } from \"./components/asset-license-summary.js\";\nexport { AssetMarketsTab } from \"./components/asset-markets-tab.js\";\nexport { ParentAttributionBanner } from \"./components/parent-attribution-banner.js\";\nexport type { ParentBannerProps } from \"./components/parent-attribution-banner.js\";\nexport { AssetMediaColumn, AssetHeaderBlock, buildEditionStats } from \"./components/asset-top-sections.js\";\nexport { AssetCollectionBar } from \"./components/asset-collection-bar.js\";\nexport type { AssetCollectionBarProps, AssetCollectionBarSibling } from \"./components/asset-collection-bar.js\";\nexport { AssetUtilityIcons } from \"./components/asset-utility-icons.js\";\nexport type { AssetUtilityIconsProps } from \"./components/asset-utility-icons.js\";\nexport { AssetMarketplacePanel } from \"./components/asset-marketplace-panel.js\";\nexport type { AssetMarketplacePanelProps, ApiOrderLike } from \"./components/asset-marketplace-panel.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 { PageContainer } from \"./components/page-container.js\";\nexport type { PageContainerProps } from \"./components/page-container.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\";\nexport { AssetCard, AssetCardSkeleton } from \"./components/asset-card.js\";\nexport type { AssetCardProps, AssetCardPrice } from \"./components/asset-card.js\";\n// ── Coin discovery (chain-agnostic; price/data/href injected by the app) ─────\nexport {\n coinKind, formatCoinPrice, formatFdv,\n type CoinKind, type CoinCollectionLike, type CoinPriceLike,\n} from \"./data/coins.js\";\nexport { CoinCard, CoinRow, CoinCardSkeleton, type UseCoinPrice, type CoinTileProps } from \"./components/coin-card.js\";\nexport {\n CoinsExplorer,\n type CoinsExplorerProps, type CoinFilter, type CoinSort, type UseCoins,\n} from \"./components/coins-explorer.js\";\n\n// ── v0.3 additions ────────────────────────────────────────────────────────────\nexport { timeAgo, timeUntil } from \"./utils/time.js\";\nexport { ACTIVITY_TYPE_CONFIG, TYPE_FILTERS } from \"./data/activity.js\";\nexport type { ActivityTypeConfig } from \"./data/activity.js\";\nexport { HeroSlider, HeroSliderSkeleton } from \"./components/hero-slider.js\";\nexport type { HeroSliderProps } from \"./components/hero-slider.js\";\nexport { ActivityTicker } from \"./components/activity-ticker.js\";\nexport type { ActivityTickerProps } from \"./components/activity-ticker.js\";\nexport { ListingCard, ListingCardSkeleton } from \"./components/listing-card.js\";\nexport type { ListingCardProps } from \"./components/listing-card.js\";\nexport { ActivityRow } from \"./components/activity-row.js\";\nexport type { ActivityRowProps } from \"./components/activity-row.js\";\nexport { ActivityFeedShell } from \"./components/activity-feed-shell.js\";\nexport type { ActivityFeedShellProps } from \"./components/activity-feed-shell.js\";\nexport { CtaCardGrid } from \"./components/cta-card-grid.js\";\nexport type { CtaCardGridProps, CtaCardItem } from \"./components/cta-card-grid.js\";\n\n// ── v0.3.2 additions ─────────────────────────────────────────────────────────\nexport { DiscoverHero } from \"./components/discover-hero.js\";\nexport type { DiscoverHeroProps } from \"./components/discover-hero.js\";\nexport { FeaturedCarousel, FeaturedCarouselSkeleton } from \"./components/featured-carousel.js\";\nexport type { FeaturedCarouselProps } from \"./components/featured-carousel.js\";\nexport { DiscoverCollectionsStrip } from \"./components/discover-collections-strip.js\";\nexport type { DiscoverCollectionsStripProps } from \"./components/discover-collections-strip.js\";\nexport { DiscoverCreatorsStrip } from \"./components/discover-creators-strip.js\";\nexport type { DiscoverCreatorsStripProps } from \"./components/discover-creators-strip.js\";\nexport { DiscoverFeedSection } from \"./components/discover-feed-section.js\";\nexport type { DiscoverFeedSectionProps } from \"./components/discover-feed-section.js\";\nexport { ActivityCard, ActivityCardSkeleton, ACTIVITY_MESSAGES } from \"./components/activity-card.js\";\nexport type { ActivityCardProps } from \"./components/activity-card.js\";\n\n// ── Launchpad (grouped sections — single page-UI source since 0.8.0) ─────────\nexport { LaunchpadGroupedSections, LaunchpadServiceCard, SERVICE_HUES } from \"./components/launchpad-services.js\";\nexport { LaunchpadFilterBar } from \"./components/launchpad-filter-bar.js\";\nexport type { LaunchpadFilterBarProps } from \"./components/launchpad-filter-bar.js\";\nexport { LaunchpadStrip } from \"./components/launchpad-strip.js\";\nexport type { LaunchpadStripProps } from \"./components/launchpad-strip.js\";\nexport type { LaunchpadGroupedSectionsProps, LaunchpadServiceCardProps, ServiceOverride, ServiceOverrides } from \"./components/launchpad-services.js\";\nexport { LAUNCHPAD_SERVICE_DEFINITIONS, LAUNCHPAD_SERVICE_GROUPS } from \"./data/launchpad-services.js\";\nexport type { ServiceDefinition, ServiceStatus, ServiceCategory, ServiceGroup, ServiceGroupDefinition } from \"./data/launchpad-services.js\";\n\n// ── v0.5.0 additions ─────────────────────────────────────────────────────────\nexport { NavCommandMenu, useNavCommandMenu } from \"./components/nav-command-menu.js\";\nexport type { NavCommand, NavCommandGroup, NavCommandMenuProps } from \"./components/nav-command-menu.js\";\n\n// ── v0.6.0 additions — portfolio subnav + counts ────────────────────────────\nexport { PortfolioSubnav } from \"./components/portfolio-subnav.js\";\nexport type {\n PortfolioSubnavProps,\n PortfolioNavItem,\n PortfolioNavGroup,\n PortfolioBadgeVariant,\n} from \"./components/portfolio-subnav.js\";\nexport { derivePortfolioCounts } from \"./utils/portfolio-counts.js\";\nexport type { PortfolioCounts, CountableOrder } from \"./utils/portfolio-counts.js\";\n\n// ── v0.22.0 additions — launchpad/claim form template primitives ─────────────\n// Pure-presentation header + rail shared by every launchpad/claim form. The\n// app supplies its own gate, back button, and form logic. Requires the\n// `.btn-border-animated` class (in @medialane/ui/styles) for the form shell.\nexport { ServiceHeader } from \"./components/service-header.js\";\nexport type { ServiceHeaderProps } from \"./components/service-header.js\";\nexport { ClaimRail } from \"./components/claim-rail.js\";\nexport type { ClaimRailProps } from \"./components/claim-rail.js\";\n\n// ── v0.23.0 additions — slot-based form shell ────────────────────────────────\n// Pure layout (back slot + header + animated-border compartment + 8/4 bento).\n// No auth/router — the app injects its own gate (around children) + back button.\nexport { ServiceFormShell } from \"./components/service-form-shell.js\";\nexport type { ServiceFormShellProps } from \"./components/service-form-shell.js\";\nexport { StepNav } from \"./components/step-nav.js\";\nexport type { StepNavProps, StepNavStep } from \"./components/step-nav.js\";\n\n// Rewards score kit (v0.36.0)\nexport { LevelBadge } from \"./components/rewards/level-badge.js\";\nexport type { LevelBadgeProps } from \"./components/rewards/level-badge.js\";\nexport { XpProgress } from \"./components/rewards/xp-progress.js\";\nexport type { XpProgressProps } from \"./components/rewards/xp-progress.js\";\nexport { BadgeShelf } from \"./components/rewards/badge-shelf.js\";\nexport type { BadgeShelfProps, BadgeShelfBadge } from \"./components/rewards/badge-shelf.js\";\nexport { ScoreSummaryCard } from \"./components/rewards/score-summary-card.js\";\nexport type { ScoreSummaryCardProps } from \"./components/rewards/score-summary-card.js\";\nexport { LeaderboardTable, LeaderboardWidget } from \"./components/rewards/leaderboard-table.js\";\nexport type { LeaderboardTableProps, LeaderboardWidgetProps, LeaderboardEntryLike } from \"./components/rewards/leaderboard-table.js\";\nexport { LevelLadder } from \"./components/rewards/level-ladder.js\";\nexport type { LevelLadderProps } from \"./components/rewards/level-ladder.js\";\nexport { XpToastContent } from \"./components/rewards/xp-toast-content.js\";\nexport type { XpToastContentProps } from \"./components/rewards/xp-toast-content.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;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;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,gBAAmB;AACnB,oBAAsD;AACtD,qBAA+B;AAC/B,kBAA2B;AAC3B,6BAA+B;AAG/B,sBAA+C;AAE/C,gBAGO;AAEP,0BAEO;AAEP,6BAA8B;AAC9B,oCAAqC;AACrC,mCAAoC;AACpC,+BAAgC;AAChC,uCAAwC;AAExC,gCAAsE;AACtE,kCAAmC;AAEnC,iCAAkC;AAElC,qCAAsC;AAEtC,mBAAsB;AAGtB,2BAA6C;AAG7C,2BAAyD;AAGzD,6BAA+B;AAG/B,wBAA8B;AAE9B,wBAAkC;AAIlC,+BAAyF;AACzF,4BAA8B;AAE9B,4BAA8B;AAE9B,0BAA4B;AAE5B,6BAAuD;AAEvD,wBAA6C;AAE7C,wBAA6C;AAG7C,mBAGO;AACP,uBAA2F;AAC3F,4BAGO;AAGP,kBAAmC;AACnC,sBAAmD;AAEnD,yBAA+C;AAE/C,6BAA+B;AAE/B,0BAAiD;AAEjD,0BAA4B;AAE5B,iCAAkC;AAElC,2BAA4B;AAI5B,2BAA6B;AAE7B,+BAA2D;AAE3D,wCAAyC;AAEzC,qCAAsC;AAEtC,mCAAoC;AAEpC,2BAAsE;AAItE,gCAA6E;AAC7E,kCAAmC;AAEnC,6BAA+B;AAG/B,IAAAA,6BAAwE;AAIxE,8BAAkD;AAIlD,8BAAgC;AAOhC,8BAAsC;AAOtC,4BAA8B;AAE9B,wBAA0B;AAM1B,gCAAiC;AAEjC,sBAAwB;AAIxB,yBAA2B;AAE3B,yBAA2B;AAE3B,yBAA2B;AAE3B,gCAAiC;AAEjC,+BAAoD;AAEpD,0BAA4B;AAE5B,8BAA+B;","names":["import_launchpad_services"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// ── Utils ─────────────────────────────────────────────────────────────────────\nexport { cn } from \"./utils/cn.js\";\nexport { formatDisplayPrice, parsePriceDisplay } from \"./utils/format.js\";\nexport { shortenAddress } from \"./utils/address.js\";\nexport { ipfsToHttp } from \"./utils/ipfs.js\";\nexport { licenseSummary } from \"./utils/license-summary.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 {\n IP_TYPES, LICENSE_TYPES, GEOGRAPHIC_SCOPES, AI_POLICIES,\n DERIVATIVES_OPTIONS, LICENSE_TRAIT_TYPES,\n} from \"./data/ip.js\";\nexport type { IPType, LicenseType } from \"./data/ip.js\";\nexport {\n IP_TEMPLATES, EMBED_PLATFORM_META, SOCIAL_PLATFORM_META, TEMPLATE_TRAIT_TYPES, DOC_UPLOAD,\n} from \"./data/ip-templates.js\";\nexport type { EmbedPlatform, SocialPlatform, TraitSuggestion, IPTemplate, DocUploadConfig } from \"./data/ip-templates.js\";\nexport { IPTypeDisplay } from \"./components/ip-type-display.js\";\nexport { AssetOverviewContent } from \"./components/asset-overview-content.js\";\nexport { AssetLicenseSummary } from \"./components/asset-license-summary.js\";\nexport { AssetMarketsTab } from \"./components/asset-markets-tab.js\";\nexport { ParentAttributionBanner } from \"./components/parent-attribution-banner.js\";\nexport type { ParentBannerProps } from \"./components/parent-attribution-banner.js\";\nexport { AssetMediaColumn, AssetHeaderBlock, buildEditionStats } from \"./components/asset-top-sections.js\";\nexport { AssetCollectionBar } from \"./components/asset-collection-bar.js\";\nexport type { AssetCollectionBarProps, AssetCollectionBarSibling } from \"./components/asset-collection-bar.js\";\nexport { AssetUtilityIcons } from \"./components/asset-utility-icons.js\";\nexport type { AssetUtilityIconsProps } from \"./components/asset-utility-icons.js\";\nexport { AssetMarketplacePanel } from \"./components/asset-marketplace-panel.js\";\nexport type { AssetMarketplacePanelProps, ApiOrderLike } from \"./components/asset-marketplace-panel.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 { PageContainer } from \"./components/page-container.js\";\nexport type { PageContainerProps } from \"./components/page-container.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\";\nexport { AssetCard, AssetCardSkeleton } from \"./components/asset-card.js\";\nexport type { AssetCardProps, AssetCardPrice } from \"./components/asset-card.js\";\n// ── Coin discovery (chain-agnostic; price/data/href injected by the app) ─────\nexport {\n coinKind, formatCoinPrice, formatFdv,\n type CoinKind, type CoinCollectionLike, type CoinPriceLike,\n} from \"./data/coins.js\";\nexport { CoinCard, CoinRow, CoinCardSkeleton, type UseCoinPrice, type CoinTileProps } from \"./components/coin-card.js\";\nexport {\n CoinsExplorer,\n type CoinsExplorerProps, type CoinFilter, type CoinSort, type UseCoins,\n} from \"./components/coins-explorer.js\";\n\n// ── v0.3 additions ────────────────────────────────────────────────────────────\nexport { timeAgo, timeUntil } from \"./utils/time.js\";\nexport { ACTIVITY_TYPE_CONFIG, TYPE_FILTERS } from \"./data/activity.js\";\nexport type { ActivityTypeConfig } from \"./data/activity.js\";\nexport { HeroSlider, HeroSliderSkeleton } from \"./components/hero-slider.js\";\nexport type { HeroSliderProps } from \"./components/hero-slider.js\";\nexport { ActivityTicker } from \"./components/activity-ticker.js\";\nexport type { ActivityTickerProps } from \"./components/activity-ticker.js\";\nexport { ListingCard, ListingCardSkeleton } from \"./components/listing-card.js\";\nexport type { ListingCardProps } from \"./components/listing-card.js\";\nexport { ActivityRow } from \"./components/activity-row.js\";\nexport type { ActivityRowProps } from \"./components/activity-row.js\";\nexport { ActivityFeedShell } from \"./components/activity-feed-shell.js\";\nexport type { ActivityFeedShellProps } from \"./components/activity-feed-shell.js\";\nexport { CtaCardGrid } from \"./components/cta-card-grid.js\";\nexport type { CtaCardGridProps, CtaCardItem } from \"./components/cta-card-grid.js\";\n\n// ── v0.3.2 additions ─────────────────────────────────────────────────────────\nexport { DiscoverHero } from \"./components/discover-hero.js\";\nexport type { DiscoverHeroProps } from \"./components/discover-hero.js\";\nexport { FeaturedCarousel, FeaturedCarouselSkeleton } from \"./components/featured-carousel.js\";\nexport type { FeaturedCarouselProps } from \"./components/featured-carousel.js\";\nexport { DiscoverCollectionsStrip } from \"./components/discover-collections-strip.js\";\nexport type { DiscoverCollectionsStripProps } from \"./components/discover-collections-strip.js\";\nexport { DiscoverCreatorsStrip } from \"./components/discover-creators-strip.js\";\nexport type { DiscoverCreatorsStripProps } from \"./components/discover-creators-strip.js\";\nexport { DiscoverFeedSection } from \"./components/discover-feed-section.js\";\nexport type { DiscoverFeedSectionProps } from \"./components/discover-feed-section.js\";\nexport { ActivityCard, ActivityCardSkeleton, ACTIVITY_MESSAGES } from \"./components/activity-card.js\";\nexport type { ActivityCardProps } from \"./components/activity-card.js\";\n\n// ── Launchpad (grouped sections — single page-UI source since 0.8.0) ─────────\nexport { LaunchpadGroupedSections, LaunchpadServiceCard, SERVICE_HUES } from \"./components/launchpad-services.js\";\nexport { LaunchpadFilterBar } from \"./components/launchpad-filter-bar.js\";\nexport type { LaunchpadFilterBarProps } from \"./components/launchpad-filter-bar.js\";\nexport { LaunchpadStrip } from \"./components/launchpad-strip.js\";\nexport type { LaunchpadStripProps } from \"./components/launchpad-strip.js\";\nexport type { LaunchpadGroupedSectionsProps, LaunchpadServiceCardProps, ServiceOverride, ServiceOverrides } from \"./components/launchpad-services.js\";\nexport { LAUNCHPAD_SERVICE_DEFINITIONS, LAUNCHPAD_SERVICE_GROUPS } from \"./data/launchpad-services.js\";\nexport type { ServiceDefinition, ServiceStatus, ServiceCategory, ServiceGroup, ServiceGroupDefinition } from \"./data/launchpad-services.js\";\n\n// ── v0.5.0 additions ─────────────────────────────────────────────────────────\nexport { NavCommandMenu, useNavCommandMenu } from \"./components/nav-command-menu.js\";\nexport type { NavCommand, NavCommandGroup, NavCommandMenuProps } from \"./components/nav-command-menu.js\";\n\n// ── v0.6.0 additions — portfolio subnav + counts ────────────────────────────\nexport { PortfolioSubnav } from \"./components/portfolio-subnav.js\";\nexport type {\n PortfolioSubnavProps,\n PortfolioNavItem,\n PortfolioNavGroup,\n PortfolioBadgeVariant,\n} from \"./components/portfolio-subnav.js\";\nexport { derivePortfolioCounts } from \"./utils/portfolio-counts.js\";\nexport type { PortfolioCounts, CountableOrder } from \"./utils/portfolio-counts.js\";\n\n// ── v0.22.0 additions — launchpad/claim form template primitives ─────────────\n// Pure-presentation header + rail shared by every launchpad/claim form. The\n// app supplies its own gate, back button, and form logic. Requires the\n// `.btn-border-animated` class (in @medialane/ui/styles) for the form shell.\nexport { ServiceHeader } from \"./components/service-header.js\";\nexport type { ServiceHeaderProps } from \"./components/service-header.js\";\nexport { ClaimRail } from \"./components/claim-rail.js\";\nexport type { ClaimRailProps } from \"./components/claim-rail.js\";\n\n// ── v0.23.0 additions — slot-based form shell ────────────────────────────────\n// Pure layout (back slot + header + animated-border compartment + 8/4 bento).\n// No auth/router — the app injects its own gate (around children) + back button.\nexport { ServiceFormShell } from \"./components/service-form-shell.js\";\nexport type { ServiceFormShellProps } from \"./components/service-form-shell.js\";\nexport { StepNav } from \"./components/step-nav.js\";\nexport type { StepNavProps, StepNavStep } from \"./components/step-nav.js\";\n\n// Rewards score kit (v0.36.0)\nexport { LevelBadge } from \"./components/rewards/level-badge.js\";\nexport type { LevelBadgeProps } from \"./components/rewards/level-badge.js\";\nexport { XpProgress } from \"./components/rewards/xp-progress.js\";\nexport type { XpProgressProps } from \"./components/rewards/xp-progress.js\";\nexport { BadgeShelf } from \"./components/rewards/badge-shelf.js\";\nexport type { BadgeShelfProps, BadgeShelfBadge } from \"./components/rewards/badge-shelf.js\";\nexport { ScoreSummaryCard } from \"./components/rewards/score-summary-card.js\";\nexport type { ScoreSummaryCardProps } from \"./components/rewards/score-summary-card.js\";\nexport { LeaderboardTable, LeaderboardWidget } from \"./components/rewards/leaderboard-table.js\";\nexport type { LeaderboardTableProps, LeaderboardWidgetProps, LeaderboardEntryLike } from \"./components/rewards/leaderboard-table.js\";\nexport { LevelLadder } from \"./components/rewards/level-ladder.js\";\nexport type { LevelLadderProps } from \"./components/rewards/level-ladder.js\";\nexport { XpToastContent } from \"./components/rewards/xp-toast-content.js\";\nexport type { XpToastContentProps } from \"./components/rewards/xp-toast-content.js\";\n\n// ── v0.37.0 additions — infinite-scroll trigger ──────────────────────────────\nexport { LoadMoreSentinel } from \"./components/load-more-sentinel.js\";\nexport type { LoadMoreSentinelProps } from \"./components/load-more-sentinel.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;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;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,gBAAmB;AACnB,oBAAsD;AACtD,qBAA+B;AAC/B,kBAA2B;AAC3B,6BAA+B;AAG/B,sBAA+C;AAE/C,gBAGO;AAEP,0BAEO;AAEP,6BAA8B;AAC9B,oCAAqC;AACrC,mCAAoC;AACpC,+BAAgC;AAChC,uCAAwC;AAExC,gCAAsE;AACtE,kCAAmC;AAEnC,iCAAkC;AAElC,qCAAsC;AAEtC,mBAAsB;AAGtB,2BAA6C;AAG7C,2BAAyD;AAGzD,6BAA+B;AAG/B,wBAA8B;AAE9B,wBAAkC;AAIlC,+BAAyF;AACzF,4BAA8B;AAE9B,4BAA8B;AAE9B,0BAA4B;AAE5B,6BAAuD;AAEvD,wBAA6C;AAE7C,wBAA6C;AAG7C,mBAGO;AACP,uBAA2F;AAC3F,4BAGO;AAGP,kBAAmC;AACnC,sBAAmD;AAEnD,yBAA+C;AAE/C,6BAA+B;AAE/B,0BAAiD;AAEjD,0BAA4B;AAE5B,iCAAkC;AAElC,2BAA4B;AAI5B,2BAA6B;AAE7B,+BAA2D;AAE3D,wCAAyC;AAEzC,qCAAsC;AAEtC,mCAAoC;AAEpC,2BAAsE;AAItE,gCAA6E;AAC7E,kCAAmC;AAEnC,6BAA+B;AAG/B,IAAAA,6BAAwE;AAIxE,8BAAkD;AAIlD,8BAAgC;AAOhC,8BAAsC;AAOtC,4BAA8B;AAE9B,wBAA0B;AAM1B,gCAAiC;AAEjC,sBAAwB;AAIxB,yBAA2B;AAE3B,yBAA2B;AAE3B,yBAA2B;AAE3B,gCAAiC;AAEjC,+BAAoD;AAEpD,0BAA4B;AAE5B,8BAA+B;AAI/B,gCAAiC;","names":["import_launchpad_services"]}
package/dist/index.d.cts CHANGED
@@ -56,135 +56,17 @@ export { ServiceHeader, ServiceHeaderProps } from './components/service-header.c
56
56
  export { ClaimRail, ClaimRailProps } from './components/claim-rail.cjs';
57
57
  export { ServiceFormShell, ServiceFormShellProps } from './components/service-form-shell.cjs';
58
58
  export { StepNav, StepNavProps, StepNavStep } from './components/step-nav.cjs';
59
- import * as react_jsx_runtime from 'react/jsx-runtime';
60
- import { ReactNode } from 'react';
59
+ export { LevelBadge, LevelBadgeProps } from './components/rewards/level-badge.cjs';
60
+ export { XpProgress, XpProgressProps } from './components/rewards/xp-progress.cjs';
61
+ export { BadgeShelf, BadgeShelfBadge, BadgeShelfProps } from './components/rewards/badge-shelf.cjs';
62
+ export { ScoreSummaryCard, ScoreSummaryCardProps } from './components/rewards/score-summary-card.cjs';
63
+ export { LeaderboardEntryLike, LeaderboardTable, LeaderboardTableProps, LeaderboardWidget, LeaderboardWidgetProps } from './components/rewards/leaderboard-table.cjs';
64
+ export { LevelLadder, LevelLadderProps } from './components/rewards/level-ladder.cjs';
65
+ export { XpToastContent, XpToastContentProps } from './components/rewards/xp-toast-content.cjs';
66
+ export { LoadMoreSentinel, LoadMoreSentinelProps } from './components/load-more-sentinel.cjs';
61
67
  import 'clsx';
62
68
  import 'lucide-react';
69
+ import 'react/jsx-runtime';
63
70
  import '@medialane/sdk';
71
+ import 'react';
64
72
  import 'framer-motion';
65
-
66
- interface LevelBadgeProps {
67
- level: number;
68
- name: string;
69
- badgeColor: string;
70
- size?: "sm" | "md" | "lg";
71
- className?: string;
72
- }
73
- /** Color-coded level chip ("Lv.6 Voyager"). Pure presentation — the consuming
74
- * app supplies level data from the rewards API. */
75
- declare function LevelBadge({ level, name, badgeColor, size, className }: LevelBadgeProps): react_jsx_runtime.JSX.Element;
76
-
77
- interface XpProgressProps {
78
- totalXp: number;
79
- /** XP required to reach the current level. */
80
- levelXp: number;
81
- /** XP required for the next level; null at max level (renders full). */
82
- nextLevelXp: number | null;
83
- badgeColor: string;
84
- variant?: "bar" | "ring";
85
- /** Ring diameter in px (ring variant only). */
86
- size?: number;
87
- className?: string;
88
- }
89
- /** XP progress toward the next level, as a rounded bar or an SVG ring. */
90
- declare function XpProgress({ totalXp, levelXp, nextLevelXp, badgeColor, variant, size, className }: XpProgressProps): react_jsx_runtime.JSX.Element;
91
-
92
- interface BadgeShelfBadge {
93
- key: string;
94
- name: string;
95
- description: string;
96
- icon: string;
97
- color: string;
98
- category: string;
99
- }
100
- interface BadgeShelfProps {
101
- /** The badges to render — the earned set, or the full catalog with `earnedKeys`. */
102
- badges: BadgeShelfBadge[];
103
- /** When set, badges outside this set render locked (grayscale, reduced opacity). */
104
- earnedKeys?: string[];
105
- /** Render locked badges too (requires `earnedKeys`); default hides them. */
106
- showLocked?: boolean;
107
- className?: string;
108
- }
109
- /** Badge chips with native tooltips. Earned badges render in their color;
110
- * locked ones (present in `badges` but not `earnedKeys`) render muted. */
111
- declare function BadgeShelf({ badges, earnedKeys, showLocked, className }: BadgeShelfProps): react_jsx_runtime.JSX.Element | null;
112
-
113
- interface ScoreSummaryCardProps {
114
- level: number;
115
- levelName: string;
116
- badgeColor: string;
117
- totalXp: number;
118
- /** XP required to reach the current level. */
119
- levelXp: number;
120
- nextLevel: {
121
- level: number;
122
- name: string;
123
- xpRequired: number;
124
- } | null;
125
- /** A few earned badges to preview (already limited by the caller). */
126
- topBadges?: BadgeShelfBadge[];
127
- /** Where the card links ("/rewards"); rendered as a plain anchor. */
128
- href?: string;
129
- className?: string;
130
- }
131
- /** Compact score overview for portfolio/profile surfaces: level ring, XP,
132
- * next-level progress, and a short badge preview. */
133
- declare function ScoreSummaryCard({ level, levelName, badgeColor, totalXp, levelXp, nextLevel, topBadges, href, className, }: ScoreSummaryCardProps): react_jsx_runtime.JSX.Element;
134
-
135
- interface LeaderboardEntryLike {
136
- rank: number;
137
- address: string;
138
- publicId?: string | null;
139
- totalXp: number;
140
- currentLevel: number;
141
- currentLevelName: string;
142
- badgeColor: string;
143
- }
144
- interface LeaderboardTableProps {
145
- entries: LeaderboardEntryLike[];
146
- /** The viewer's address — its row gets highlighted. */
147
- highlightAddress?: string | null;
148
- /** Render the address cell (e.g. a profile link). Defaults to a shortened address. */
149
- renderAddress?: (address: string) => ReactNode;
150
- className?: string;
151
- }
152
- /** Full leaderboard rows: rank, address, level chip, XP. */
153
- declare function LeaderboardTable({ entries, highlightAddress, renderAddress, className }: LeaderboardTableProps): react_jsx_runtime.JSX.Element;
154
- interface LeaderboardWidgetProps {
155
- entries: LeaderboardEntryLike[];
156
- title?: string;
157
- /** Link to the full leaderboard ("/rewards"). */
158
- href?: string;
159
- renderAddress?: (address: string) => ReactNode;
160
- className?: string;
161
- }
162
- /** Compact top-N card for homepage/discover rails. */
163
- declare function LeaderboardWidget({ entries, title, href, renderAddress, className }: LeaderboardWidgetProps): react_jsx_runtime.JSX.Element | null;
164
-
165
- interface LevelLadderProps {
166
- levels: {
167
- level: number;
168
- name: string;
169
- xpRequired: number;
170
- badgeColor: string;
171
- }[];
172
- currentLevel: number;
173
- className?: string;
174
- }
175
- /** The full level arc as a horizontally scrollable chip rail; the current
176
- * level is highlighted, passed levels render solid, future ones muted. */
177
- declare function LevelLadder({ levels, currentLevel, className }: LevelLadderProps): react_jsx_runtime.JSX.Element;
178
-
179
- interface XpToastContentProps {
180
- xp: number;
181
- /** The action's configured label, e.g. "Mint an IP asset". */
182
- label: string;
183
- color?: string;
184
- }
185
- /** Toast body for optimistic XP feedback: "+20 XP · Mint an IP asset".
186
- * Scores recompute on a schedule, so this shows the action's configured
187
- * value — the caller must never present it as a live balance. */
188
- declare function XpToastContent({ xp, label, color }: XpToastContentProps): react_jsx_runtime.JSX.Element;
189
-
190
- export { BadgeShelf, type BadgeShelfBadge, type BadgeShelfProps, type LeaderboardEntryLike, LeaderboardTable, type LeaderboardTableProps, LeaderboardWidget, type LeaderboardWidgetProps, LevelBadge, type LevelBadgeProps, LevelLadder, type LevelLadderProps, ScoreSummaryCard, type ScoreSummaryCardProps, XpProgress, type XpProgressProps, XpToastContent, type XpToastContentProps };
package/dist/index.d.ts CHANGED
@@ -56,135 +56,17 @@ export { ServiceHeader, ServiceHeaderProps } from './components/service-header.j
56
56
  export { ClaimRail, ClaimRailProps } from './components/claim-rail.js';
57
57
  export { ServiceFormShell, ServiceFormShellProps } from './components/service-form-shell.js';
58
58
  export { StepNav, StepNavProps, StepNavStep } from './components/step-nav.js';
59
- import * as react_jsx_runtime from 'react/jsx-runtime';
60
- import { ReactNode } from 'react';
59
+ export { LevelBadge, LevelBadgeProps } from './components/rewards/level-badge.js';
60
+ export { XpProgress, XpProgressProps } from './components/rewards/xp-progress.js';
61
+ export { BadgeShelf, BadgeShelfBadge, BadgeShelfProps } from './components/rewards/badge-shelf.js';
62
+ export { ScoreSummaryCard, ScoreSummaryCardProps } from './components/rewards/score-summary-card.js';
63
+ export { LeaderboardEntryLike, LeaderboardTable, LeaderboardTableProps, LeaderboardWidget, LeaderboardWidgetProps } from './components/rewards/leaderboard-table.js';
64
+ export { LevelLadder, LevelLadderProps } from './components/rewards/level-ladder.js';
65
+ export { XpToastContent, XpToastContentProps } from './components/rewards/xp-toast-content.js';
66
+ export { LoadMoreSentinel, LoadMoreSentinelProps } from './components/load-more-sentinel.js';
61
67
  import 'clsx';
62
68
  import 'lucide-react';
69
+ import 'react/jsx-runtime';
63
70
  import '@medialane/sdk';
71
+ import 'react';
64
72
  import 'framer-motion';
65
-
66
- interface LevelBadgeProps {
67
- level: number;
68
- name: string;
69
- badgeColor: string;
70
- size?: "sm" | "md" | "lg";
71
- className?: string;
72
- }
73
- /** Color-coded level chip ("Lv.6 Voyager"). Pure presentation — the consuming
74
- * app supplies level data from the rewards API. */
75
- declare function LevelBadge({ level, name, badgeColor, size, className }: LevelBadgeProps): react_jsx_runtime.JSX.Element;
76
-
77
- interface XpProgressProps {
78
- totalXp: number;
79
- /** XP required to reach the current level. */
80
- levelXp: number;
81
- /** XP required for the next level; null at max level (renders full). */
82
- nextLevelXp: number | null;
83
- badgeColor: string;
84
- variant?: "bar" | "ring";
85
- /** Ring diameter in px (ring variant only). */
86
- size?: number;
87
- className?: string;
88
- }
89
- /** XP progress toward the next level, as a rounded bar or an SVG ring. */
90
- declare function XpProgress({ totalXp, levelXp, nextLevelXp, badgeColor, variant, size, className }: XpProgressProps): react_jsx_runtime.JSX.Element;
91
-
92
- interface BadgeShelfBadge {
93
- key: string;
94
- name: string;
95
- description: string;
96
- icon: string;
97
- color: string;
98
- category: string;
99
- }
100
- interface BadgeShelfProps {
101
- /** The badges to render — the earned set, or the full catalog with `earnedKeys`. */
102
- badges: BadgeShelfBadge[];
103
- /** When set, badges outside this set render locked (grayscale, reduced opacity). */
104
- earnedKeys?: string[];
105
- /** Render locked badges too (requires `earnedKeys`); default hides them. */
106
- showLocked?: boolean;
107
- className?: string;
108
- }
109
- /** Badge chips with native tooltips. Earned badges render in their color;
110
- * locked ones (present in `badges` but not `earnedKeys`) render muted. */
111
- declare function BadgeShelf({ badges, earnedKeys, showLocked, className }: BadgeShelfProps): react_jsx_runtime.JSX.Element | null;
112
-
113
- interface ScoreSummaryCardProps {
114
- level: number;
115
- levelName: string;
116
- badgeColor: string;
117
- totalXp: number;
118
- /** XP required to reach the current level. */
119
- levelXp: number;
120
- nextLevel: {
121
- level: number;
122
- name: string;
123
- xpRequired: number;
124
- } | null;
125
- /** A few earned badges to preview (already limited by the caller). */
126
- topBadges?: BadgeShelfBadge[];
127
- /** Where the card links ("/rewards"); rendered as a plain anchor. */
128
- href?: string;
129
- className?: string;
130
- }
131
- /** Compact score overview for portfolio/profile surfaces: level ring, XP,
132
- * next-level progress, and a short badge preview. */
133
- declare function ScoreSummaryCard({ level, levelName, badgeColor, totalXp, levelXp, nextLevel, topBadges, href, className, }: ScoreSummaryCardProps): react_jsx_runtime.JSX.Element;
134
-
135
- interface LeaderboardEntryLike {
136
- rank: number;
137
- address: string;
138
- publicId?: string | null;
139
- totalXp: number;
140
- currentLevel: number;
141
- currentLevelName: string;
142
- badgeColor: string;
143
- }
144
- interface LeaderboardTableProps {
145
- entries: LeaderboardEntryLike[];
146
- /** The viewer's address — its row gets highlighted. */
147
- highlightAddress?: string | null;
148
- /** Render the address cell (e.g. a profile link). Defaults to a shortened address. */
149
- renderAddress?: (address: string) => ReactNode;
150
- className?: string;
151
- }
152
- /** Full leaderboard rows: rank, address, level chip, XP. */
153
- declare function LeaderboardTable({ entries, highlightAddress, renderAddress, className }: LeaderboardTableProps): react_jsx_runtime.JSX.Element;
154
- interface LeaderboardWidgetProps {
155
- entries: LeaderboardEntryLike[];
156
- title?: string;
157
- /** Link to the full leaderboard ("/rewards"). */
158
- href?: string;
159
- renderAddress?: (address: string) => ReactNode;
160
- className?: string;
161
- }
162
- /** Compact top-N card for homepage/discover rails. */
163
- declare function LeaderboardWidget({ entries, title, href, renderAddress, className }: LeaderboardWidgetProps): react_jsx_runtime.JSX.Element | null;
164
-
165
- interface LevelLadderProps {
166
- levels: {
167
- level: number;
168
- name: string;
169
- xpRequired: number;
170
- badgeColor: string;
171
- }[];
172
- currentLevel: number;
173
- className?: string;
174
- }
175
- /** The full level arc as a horizontally scrollable chip rail; the current
176
- * level is highlighted, passed levels render solid, future ones muted. */
177
- declare function LevelLadder({ levels, currentLevel, className }: LevelLadderProps): react_jsx_runtime.JSX.Element;
178
-
179
- interface XpToastContentProps {
180
- xp: number;
181
- /** The action's configured label, e.g. "Mint an IP asset". */
182
- label: string;
183
- color?: string;
184
- }
185
- /** Toast body for optimistic XP feedback: "+20 XP · Mint an IP asset".
186
- * Scores recompute on a schedule, so this shows the action's configured
187
- * value — the caller must never present it as a live balance. */
188
- declare function XpToastContent({ xp, label, color }: XpToastContentProps): react_jsx_runtime.JSX.Element;
189
-
190
- export { BadgeShelf, type BadgeShelfBadge, type BadgeShelfProps, type LeaderboardEntryLike, LeaderboardTable, type LeaderboardTableProps, LeaderboardWidget, type LeaderboardWidgetProps, LevelBadge, type LevelBadgeProps, LevelLadder, type LevelLadderProps, ScoreSummaryCard, type ScoreSummaryCardProps, XpProgress, type XpProgressProps, XpToastContent, type XpToastContentProps };
package/dist/index.js CHANGED
@@ -82,6 +82,7 @@ import { ScoreSummaryCard } from "./components/rewards/score-summary-card.js";
82
82
  import { LeaderboardTable, LeaderboardWidget } from "./components/rewards/leaderboard-table.js";
83
83
  import { LevelLadder } from "./components/rewards/level-ladder.js";
84
84
  import { XpToastContent } from "./components/rewards/xp-toast-content.js";
85
+ import { LoadMoreSentinel } from "./components/load-more-sentinel.js";
85
86
  export {
86
87
  ACTIVITY_MESSAGES,
87
88
  ACTIVITY_TYPE_CONFIG,
@@ -151,6 +152,7 @@ export {
151
152
  LevelLadder,
152
153
  ListingCard,
153
154
  ListingCardSkeleton,
155
+ LoadMoreSentinel,
154
156
  MedialaneIcon,
155
157
  MedialaneLogoFull,
156
158
  MotionCard,