@medialane/ui 0.293.0 → 0.295.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 (71) hide show
  1. package/dist/components/account/input-otp.d.cts +2 -2
  2. package/dist/components/account/input-otp.d.ts +2 -2
  3. package/dist/components/button.d.cts +2 -2
  4. package/dist/components/button.d.ts +2 -2
  5. package/dist/components/create-sponsorship-aside.cjs +52 -0
  6. package/dist/components/create-sponsorship-aside.cjs.map +1 -0
  7. package/dist/components/create-sponsorship-aside.d.cts +5 -0
  8. package/dist/components/create-sponsorship-aside.d.ts +5 -0
  9. package/dist/components/create-sponsorship-aside.js +28 -0
  10. package/dist/components/create-sponsorship-aside.js.map +1 -0
  11. package/dist/components/fast-mint/fast-mint.d.cts +2 -2
  12. package/dist/components/fast-mint/fast-mint.d.ts +2 -2
  13. package/dist/components/journey-content.cjs +156 -0
  14. package/dist/components/journey-content.cjs.map +1 -0
  15. package/dist/components/journey-content.d.cts +7 -0
  16. package/dist/components/journey-content.d.ts +7 -0
  17. package/dist/components/journey-content.js +122 -0
  18. package/dist/components/journey-content.js.map +1 -0
  19. package/dist/components/launchpad/edition-mint-schema.d.cts +2 -2
  20. package/dist/components/launchpad/edition-mint-schema.d.ts +2 -2
  21. package/dist/components/page-skeletons.cjs +152 -0
  22. package/dist/components/page-skeletons.cjs.map +1 -0
  23. package/dist/components/page-skeletons.d.cts +10 -0
  24. package/dist/components/page-skeletons.d.ts +10 -0
  25. package/dist/components/page-skeletons.js +123 -0
  26. package/dist/components/page-skeletons.js.map +1 -0
  27. package/dist/components/rewards-page.cjs +41 -0
  28. package/dist/components/rewards-page.cjs.map +1 -0
  29. package/dist/components/rewards-page.d.cts +5 -0
  30. package/dist/components/rewards-page.d.ts +5 -0
  31. package/dist/components/rewards-page.js +17 -0
  32. package/dist/components/rewards-page.js.map +1 -0
  33. package/dist/components/route-error.cjs +65 -0
  34. package/dist/components/route-error.cjs.map +1 -0
  35. package/dist/components/route-error.d.cts +10 -0
  36. package/dist/components/route-error.d.ts +10 -0
  37. package/dist/components/route-error.js +41 -0
  38. package/dist/components/route-error.js.map +1 -0
  39. package/dist/components/settings-snapshots.cjs +124 -0
  40. package/dist/components/settings-snapshots.cjs.map +1 -0
  41. package/dist/components/settings-snapshots.d.cts +12 -0
  42. package/dist/components/settings-snapshots.d.ts +12 -0
  43. package/dist/components/settings-snapshots.js +89 -0
  44. package/dist/components/settings-snapshots.js.map +1 -0
  45. package/dist/components/sheet.d.cts +1 -1
  46. package/dist/components/sheet.d.ts +1 -1
  47. package/dist/index.cjs +39 -0
  48. package/dist/index.cjs.map +1 -1
  49. package/dist/index.d.cts +10 -1
  50. package/dist/index.d.ts +10 -1
  51. package/dist/index.js +24 -0
  52. package/dist/index.js.map +1 -1
  53. package/dist/utils/use-coin-guarantees.cjs +50 -0
  54. package/dist/utils/use-coin-guarantees.cjs.map +1 -0
  55. package/dist/utils/use-coin-guarantees.d.cts +9 -0
  56. package/dist/utils/use-coin-guarantees.d.ts +9 -0
  57. package/dist/utils/use-coin-guarantees.js +16 -0
  58. package/dist/utils/use-coin-guarantees.js.map +1 -0
  59. package/dist/utils/use-coin-supply.cjs +55 -0
  60. package/dist/utils/use-coin-supply.cjs.map +1 -0
  61. package/dist/utils/use-coin-supply.d.cts +7 -0
  62. package/dist/utils/use-coin-supply.d.ts +7 -0
  63. package/dist/utils/use-coin-supply.js +21 -0
  64. package/dist/utils/use-coin-supply.js.map +1 -0
  65. package/dist/utils/use-on-open.cjs +39 -0
  66. package/dist/utils/use-on-open.cjs.map +1 -0
  67. package/dist/utils/use-on-open.d.cts +3 -0
  68. package/dist/utils/use-on-open.d.ts +3 -0
  69. package/dist/utils/use-on-open.js +15 -0
  70. package/dist/utils/use-on-open.js.map +1 -0
  71. package/package.json +1 -1
@@ -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;
@@ -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;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ "use client";
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+ var create_sponsorship_aside_exports = {};
21
+ __export(create_sponsorship_aside_exports, {
22
+ CreateSponsorshipAside: () => CreateSponsorshipAside
23
+ });
24
+ module.exports = __toCommonJS(create_sponsorship_aside_exports);
25
+ var import_jsx_runtime = require("react/jsx-runtime");
26
+ var import_lucide_react = require("lucide-react");
27
+ var import_claim_rail = require("./claim-rail.js");
28
+ function CreateSponsorshipAside() {
29
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
30
+ import_claim_rail.ClaimRail,
31
+ {
32
+ included: [
33
+ { icon: import_lucide_react.Handshake, title: "Direct settlement", desc: "Sponsor pays you directly \u2014 no escrow, no middleman." },
34
+ { icon: import_lucide_react.ShieldCheck, title: "Owner-verified", desc: "You must own the asset, checked on-chain when you create and when you accept." },
35
+ { icon: import_lucide_react.Coins, title: "Open bidding", desc: "Any sponsor can bid, or invite one specific sponsor." }
36
+ ],
37
+ steps: [
38
+ "Choose your terms \u2014 an asset you own, or one you'd like to sponsor",
39
+ "The other side responds \u2014 bids come in, or a proposal is accepted",
40
+ "Settle instantly: they receive a license, you receive payment"
41
+ ],
42
+ trustIcon: import_lucide_react.Gift,
43
+ trustLead: "No escrow, ever.",
44
+ trust: "The contract never holds funds \u2014 settlement is direct, sponsor to author."
45
+ }
46
+ );
47
+ }
48
+ // Annotate the CommonJS export names for ESM import in node:
49
+ 0 && (module.exports = {
50
+ CreateSponsorshipAside
51
+ });
52
+ //# sourceMappingURL=create-sponsorship-aside.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/create-sponsorship-aside.tsx"],"sourcesContent":["\"use client\";\n\nimport { Handshake, ShieldCheck, Coins, Gift } from \"lucide-react\";\nimport { ClaimRail } from \"./claim-rail.js\";\n\nexport function CreateSponsorshipAside() {\n return (\n <ClaimRail\n included={[\n { icon: Handshake, title: \"Direct settlement\", desc: \"Sponsor pays you directly — no escrow, no middleman.\" },\n { icon: ShieldCheck, title: \"Owner-verified\", desc: \"You must own the asset, checked on-chain when you create and when you accept.\" },\n { icon: Coins, title: \"Open bidding\", desc: \"Any sponsor can bid, or invite one specific sponsor.\" },\n ]}\n steps={[\n \"Choose your terms — an asset you own, or one you'd like to sponsor\",\n \"The other side responds — bids come in, or a proposal is accepted\",\n \"Settle instantly: they receive a license, you receive payment\",\n ]}\n trustIcon={Gift}\n trustLead=\"No escrow, ever.\"\n trust=\"The contract never holds funds — settlement is direct, sponsor to author.\"\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOI;AALJ,0BAAoD;AACpD,wBAA0B;AAEnB,SAAS,yBAAyB;AACvC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU;AAAA,QACR,EAAE,MAAM,+BAAW,OAAO,qBAAqB,MAAM,4DAAuD;AAAA,QAC5G,EAAE,MAAM,iCAAa,OAAO,kBAAkB,MAAM,gFAAgF;AAAA,QACpI,EAAE,MAAM,2BAAO,OAAO,gBAAgB,MAAM,uDAAuD;AAAA,MACrG;AAAA,MACA,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,WAAW;AAAA,MACX,WAAU;AAAA,MACV,OAAM;AAAA;AAAA,EACR;AAEJ;","names":[]}
@@ -0,0 +1,5 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ declare function CreateSponsorshipAside(): react_jsx_runtime.JSX.Element;
4
+
5
+ export { CreateSponsorshipAside };
@@ -0,0 +1,5 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ declare function CreateSponsorshipAside(): react_jsx_runtime.JSX.Element;
4
+
5
+ export { CreateSponsorshipAside };
@@ -0,0 +1,28 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { Handshake, ShieldCheck, Coins, Gift } from "lucide-react";
4
+ import { ClaimRail } from "./claim-rail.js";
5
+ function CreateSponsorshipAside() {
6
+ return /* @__PURE__ */ jsx(
7
+ ClaimRail,
8
+ {
9
+ included: [
10
+ { icon: Handshake, title: "Direct settlement", desc: "Sponsor pays you directly \u2014 no escrow, no middleman." },
11
+ { icon: ShieldCheck, title: "Owner-verified", desc: "You must own the asset, checked on-chain when you create and when you accept." },
12
+ { icon: Coins, title: "Open bidding", desc: "Any sponsor can bid, or invite one specific sponsor." }
13
+ ],
14
+ steps: [
15
+ "Choose your terms \u2014 an asset you own, or one you'd like to sponsor",
16
+ "The other side responds \u2014 bids come in, or a proposal is accepted",
17
+ "Settle instantly: they receive a license, you receive payment"
18
+ ],
19
+ trustIcon: Gift,
20
+ trustLead: "No escrow, ever.",
21
+ trust: "The contract never holds funds \u2014 settlement is direct, sponsor to author."
22
+ }
23
+ );
24
+ }
25
+ export {
26
+ CreateSponsorshipAside
27
+ };
28
+ //# sourceMappingURL=create-sponsorship-aside.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/create-sponsorship-aside.tsx"],"sourcesContent":["\"use client\";\n\nimport { Handshake, ShieldCheck, Coins, Gift } from \"lucide-react\";\nimport { ClaimRail } from \"./claim-rail.js\";\n\nexport function CreateSponsorshipAside() {\n return (\n <ClaimRail\n included={[\n { icon: Handshake, title: \"Direct settlement\", desc: \"Sponsor pays you directly — no escrow, no middleman.\" },\n { icon: ShieldCheck, title: \"Owner-verified\", desc: \"You must own the asset, checked on-chain when you create and when you accept.\" },\n { icon: Coins, title: \"Open bidding\", desc: \"Any sponsor can bid, or invite one specific sponsor.\" },\n ]}\n steps={[\n \"Choose your terms — an asset you own, or one you'd like to sponsor\",\n \"The other side responds — bids come in, or a proposal is accepted\",\n \"Settle instantly: they receive a license, you receive payment\",\n ]}\n trustIcon={Gift}\n trustLead=\"No escrow, ever.\"\n trust=\"The contract never holds funds — settlement is direct, sponsor to author.\"\n />\n );\n}\n"],"mappings":";AAOI;AALJ,SAAS,WAAW,aAAa,OAAO,YAAY;AACpD,SAAS,iBAAiB;AAEnB,SAAS,yBAAyB;AACvC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU;AAAA,QACR,EAAE,MAAM,WAAW,OAAO,qBAAqB,MAAM,4DAAuD;AAAA,QAC5G,EAAE,MAAM,aAAa,OAAO,kBAAkB,MAAM,gFAAgF;AAAA,QACpI,EAAE,MAAM,OAAO,OAAO,gBAAgB,MAAM,uDAAuD;AAAA,MACrG;AAAA,MACA,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,WAAW;AAAA,MACX,WAAU;AAAA,MACV,OAAM;AAAA;AAAA,EACR;AAEJ;","names":[]}
@@ -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 };
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ "use client";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+ var journey_content_exports = {};
31
+ __export(journey_content_exports, {
32
+ JourneyContent: () => JourneyContent
33
+ });
34
+ module.exports = __toCommonJS(journey_content_exports);
35
+ var import_jsx_runtime = require("react/jsx-runtime");
36
+ var import_link = __toESM(require("./link.js"), 1);
37
+ var import_lucide_react = require("lucide-react");
38
+ var import_medialane_app = require("./medialane-app.js");
39
+ var import_level_journey_list = require("./rewards/level-journey-list.js");
40
+ var import_badge_catalog = require("./rewards/badge-catalog.js");
41
+ var import_skeleton = require("./skeleton.js");
42
+ var import_use_rewards = require("../utils/use-rewards.js");
43
+ const EXAMPLE_ACTION_TYPES = [
44
+ "mint_asset",
45
+ "buy_asset",
46
+ "create_collection",
47
+ "comment",
48
+ "launch_launchpad",
49
+ "make_offer",
50
+ "join_club",
51
+ "list_asset"
52
+ ];
53
+ function Hero() {
54
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "py-14 space-y-5", children: [
55
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-3", children: [
56
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-brand-orange to-brand-maeve text-white shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Sparkles, { className: "h-5 w-5" }) }),
57
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("h1", { className: "text-5xl sm:text-6xl font-black tracking-tight leading-[1.02]", children: [
58
+ "Your",
59
+ " ",
60
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "bg-gradient-to-r from-brand-orange to-brand-maeve bg-clip-text text-transparent", children: "Journey" })
61
+ ] })
62
+ ] }),
63
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", { className: "text-lg text-foreground/70 max-w-xl leading-relaxed font-medium", children: [
64
+ "Every level, every badge, every way to earn \u2014 the whole system, in one place. Check",
65
+ " ",
66
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_link.default, { href: "/rewards", className: "text-foreground underline underline-offset-2 hover:text-brand-orange transition-colors", children: "your own score" }),
67
+ " ",
68
+ "on Rewards."
69
+ ] })
70
+ ] });
71
+ }
72
+ function LevelsSection() {
73
+ const { data: config, isLoading } = (0, import_use_rewards.useRewardsConfig)();
74
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "py-14 space-y-6", children: [
75
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
76
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { className: "text-2xl font-black tracking-tight", children: "The Level Ladder" }),
77
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-base text-foreground/60 mt-1.5 font-medium", children: "50 levels, from Starter to Genesis." })
78
+ ] }),
79
+ isLoading || !config ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_skeleton.Skeleton, { className: "h-96 w-full rounded-2xl" }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_level_journey_list.LevelJourneyList, { levels: config.levels })
80
+ ] });
81
+ }
82
+ function HowXpWorksSection() {
83
+ const { data: config, isLoading } = (0, import_use_rewards.useRewardsConfig)();
84
+ const examples = config?.actions.filter((a) => EXAMPLE_ACTION_TYPES.includes(a.type)) ?? [];
85
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "py-14 space-y-6", children: [
86
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "max-w-2xl", children: [
87
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { className: "text-2xl font-black tracking-tight", children: "How XP works" }),
88
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-base text-foreground/60 mt-1.5 font-medium leading-relaxed", children: "Every action earns real XP, automatically \u2014 no buying points, no gaming the system. Some early actions and loyalty count extra. Scores and badges are recalculated weekly." })
89
+ ] }),
90
+ isLoading || !config ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_skeleton.Skeleton, { className: "h-40 w-full rounded-2xl" }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "grid grid-cols-2 sm:grid-cols-4 gap-3", children: examples.map((a) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "rounded-2xl bg-foreground/[0.04] p-4", children: [
91
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", { className: "text-lg font-black text-brand-orange", children: [
92
+ "+",
93
+ a.xp
94
+ ] }),
95
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-xs font-semibold text-foreground/60 mt-1 leading-snug", children: a.label })
96
+ ] }, a.type)) })
97
+ ] });
98
+ }
99
+ function BadgesSection() {
100
+ const { data: config, isLoading } = (0, import_use_rewards.useRewardsConfig)();
101
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "py-14 space-y-6", children: [
102
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
103
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { className: "text-2xl font-black tracking-tight", children: "Badges" }),
104
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-base text-foreground/60 mt-1.5 font-medium", children: "What's achievable, not just what you've done." })
105
+ ] }),
106
+ isLoading || !config ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_skeleton.Skeleton, { className: "h-64 w-full rounded-2xl" }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_badge_catalog.BadgeCatalog, { badges: config.badges })
107
+ ] });
108
+ }
109
+ function CtaSection({ startHint }) {
110
+ const { onRequireWallet } = (0, import_medialane_app.useMedialaneApp)();
111
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "py-14 pb-20 grid grid-cols-1 sm:grid-cols-2 gap-4", children: [
112
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
113
+ "button",
114
+ {
115
+ type: "button",
116
+ onClick: onRequireWallet,
117
+ className: "flex items-center justify-between rounded-2xl bg-gradient-to-br from-brand-orange to-brand-maeve p-6 text-left text-white",
118
+ children: [
119
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
120
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "font-black text-lg", children: "New here?" }),
121
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-sm font-medium text-white/80", children: startHint })
122
+ ] }),
123
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ArrowRight, { className: "h-5 w-5 shrink-0" })
124
+ ]
125
+ }
126
+ ),
127
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
128
+ import_link.default,
129
+ {
130
+ href: "/rewards",
131
+ className: "flex items-center justify-between rounded-2xl bg-foreground/[0.04] hover:bg-foreground/[0.07] p-6 transition-colors",
132
+ children: [
133
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
134
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "font-black text-lg", children: "Already earning?" }),
135
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-sm font-medium text-foreground/60", children: "Check your score." })
136
+ ] }),
137
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ArrowRight, { className: "h-5 w-5 shrink-0" })
138
+ ]
139
+ }
140
+ )
141
+ ] });
142
+ }
143
+ function JourneyContent({ startHint }) {
144
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
145
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Hero, {}),
146
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LevelsSection, {}),
147
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(HowXpWorksSection, {}),
148
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BadgesSection, {}),
149
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CtaSection, { startHint })
150
+ ] });
151
+ }
152
+ // Annotate the CommonJS export names for ESM import in node:
153
+ 0 && (module.exports = {
154
+ JourneyContent
155
+ });
156
+ //# sourceMappingURL=journey-content.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/journey-content.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { Sparkles, ArrowRight } from \"lucide-react\";\nimport { useMedialaneApp } from \"./medialane-app.js\";\nimport { LevelJourneyList } from \"./rewards/level-journey-list.js\";\nimport { BadgeCatalog } from \"./rewards/badge-catalog.js\";\nimport { Skeleton } from \"./skeleton.js\";\nimport { useRewardsConfig } from \"../utils/use-rewards.js\";\n\nconst EXAMPLE_ACTION_TYPES = [\n \"mint_asset\", \"buy_asset\", \"create_collection\", \"comment\",\n \"launch_launchpad\", \"make_offer\", \"join_club\", \"list_asset\",\n];\n\nfunction Hero() {\n return (\n <section className=\"py-14 space-y-5\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-brand-orange to-brand-maeve text-white shrink-0\">\n <Sparkles className=\"h-5 w-5\" />\n </div>\n <h1 className=\"text-5xl sm:text-6xl font-black tracking-tight leading-[1.02]\">\n Your{\" \"}\n <span className=\"bg-gradient-to-r from-brand-orange to-brand-maeve bg-clip-text text-transparent\">\n Journey\n </span>\n </h1>\n </div>\n <p className=\"text-lg text-foreground/70 max-w-xl leading-relaxed font-medium\">\n Every level, every badge, every way to earn — the whole system, in one place. Check{\" \"}\n <Link href=\"/rewards\" className=\"text-foreground underline underline-offset-2 hover:text-brand-orange transition-colors\">\n your own score\n </Link>{\" \"}\n on Rewards.\n </p>\n </section>\n );\n}\n\nfunction LevelsSection() {\n const { data: config, isLoading } = useRewardsConfig();\n return (\n <section className=\"py-14 space-y-6\">\n <div>\n <h2 className=\"text-2xl font-black tracking-tight\">The Level Ladder</h2>\n <p className=\"text-base text-foreground/60 mt-1.5 font-medium\">50 levels, from Starter to Genesis.</p>\n </div>\n {isLoading || !config ? (\n <Skeleton className=\"h-96 w-full rounded-2xl\" />\n ) : (\n <LevelJourneyList levels={config.levels} />\n )}\n </section>\n );\n}\n\nfunction HowXpWorksSection() {\n const { data: config, isLoading } = useRewardsConfig();\n const examples = config?.actions.filter((a) => EXAMPLE_ACTION_TYPES.includes(a.type)) ?? [];\n\n return (\n <section className=\"py-14 space-y-6\">\n <div className=\"max-w-2xl\">\n <h2 className=\"text-2xl font-black tracking-tight\">How XP works</h2>\n <p className=\"text-base text-foreground/60 mt-1.5 font-medium leading-relaxed\">\n Every action earns real XP, automatically — no buying points, no gaming the system.\n Some early actions and loyalty count extra. Scores and badges are\n recalculated weekly.\n </p>\n </div>\n {isLoading || !config ? (\n <Skeleton className=\"h-40 w-full rounded-2xl\" />\n ) : (\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-3\">\n {examples.map((a) => (\n <div key={a.type} className=\"rounded-2xl bg-foreground/[0.04] p-4\">\n <p className=\"text-lg font-black text-brand-orange\">+{a.xp}</p>\n <p className=\"text-xs font-semibold text-foreground/60 mt-1 leading-snug\">{a.label}</p>\n </div>\n ))}\n </div>\n )}\n </section>\n );\n}\n\nfunction BadgesSection() {\n const { data: config, isLoading } = useRewardsConfig();\n return (\n <section className=\"py-14 space-y-6\">\n <div>\n <h2 className=\"text-2xl font-black tracking-tight\">Badges</h2>\n <p className=\"text-base text-foreground/60 mt-1.5 font-medium\">What&apos;s achievable, not just what you&apos;ve done.</p>\n </div>\n {isLoading || !config ? (\n <Skeleton className=\"h-64 w-full rounded-2xl\" />\n ) : (\n <BadgeCatalog badges={config.badges} />\n )}\n </section>\n );\n}\n\nfunction CtaSection({ startHint }: { startHint: string }) {\n const { onRequireWallet } = useMedialaneApp();\n return (\n <section className=\"py-14 pb-20 grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <button\n type=\"button\"\n onClick={onRequireWallet}\n className=\"flex items-center justify-between rounded-2xl bg-gradient-to-br from-brand-orange to-brand-maeve p-6 text-left text-white\"\n >\n <div>\n <p className=\"font-black text-lg\">New here?</p>\n <p className=\"text-sm font-medium text-white/80\">{startHint}</p>\n </div>\n <ArrowRight className=\"h-5 w-5 shrink-0\" />\n </button>\n <Link\n href=\"/rewards\"\n className=\"flex items-center justify-between rounded-2xl bg-foreground/[0.04] hover:bg-foreground/[0.07] p-6 transition-colors\"\n >\n <div>\n <p className=\"font-black text-lg\">Already earning?</p>\n <p className=\"text-sm font-medium text-foreground/60\">Check your score.</p>\n </div>\n <ArrowRight className=\"h-5 w-5 shrink-0\" />\n </Link>\n </section>\n );\n}\n\nexport function JourneyContent({ startHint }: { startHint: string }) {\n return (\n <>\n <Hero />\n <LevelsSection />\n <HowXpWorksSection />\n <BadgesSection />\n <CtaSection startHint={startHint} />\n </>\n );\n}\n"],"mappings":"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","names":["Link"]}
@@ -0,0 +1,7 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ declare function JourneyContent({ startHint }: {
4
+ startHint: string;
5
+ }): react_jsx_runtime.JSX.Element;
6
+
7
+ export { JourneyContent };
@@ -0,0 +1,7 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ declare function JourneyContent({ startHint }: {
4
+ startHint: string;
5
+ }): react_jsx_runtime.JSX.Element;
6
+
7
+ export { JourneyContent };
@@ -0,0 +1,122 @@
1
+ "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import Link from "./link.js";
4
+ import { Sparkles, ArrowRight } from "lucide-react";
5
+ import { useMedialaneApp } from "./medialane-app.js";
6
+ import { LevelJourneyList } from "./rewards/level-journey-list.js";
7
+ import { BadgeCatalog } from "./rewards/badge-catalog.js";
8
+ import { Skeleton } from "./skeleton.js";
9
+ import { useRewardsConfig } from "../utils/use-rewards.js";
10
+ const EXAMPLE_ACTION_TYPES = [
11
+ "mint_asset",
12
+ "buy_asset",
13
+ "create_collection",
14
+ "comment",
15
+ "launch_launchpad",
16
+ "make_offer",
17
+ "join_club",
18
+ "list_asset"
19
+ ];
20
+ function Hero() {
21
+ return /* @__PURE__ */ jsxs("section", { className: "py-14 space-y-5", children: [
22
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
23
+ /* @__PURE__ */ jsx("div", { className: "flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-brand-orange to-brand-maeve text-white shrink-0", children: /* @__PURE__ */ jsx(Sparkles, { className: "h-5 w-5" }) }),
24
+ /* @__PURE__ */ jsxs("h1", { className: "text-5xl sm:text-6xl font-black tracking-tight leading-[1.02]", children: [
25
+ "Your",
26
+ " ",
27
+ /* @__PURE__ */ jsx("span", { className: "bg-gradient-to-r from-brand-orange to-brand-maeve bg-clip-text text-transparent", children: "Journey" })
28
+ ] })
29
+ ] }),
30
+ /* @__PURE__ */ jsxs("p", { className: "text-lg text-foreground/70 max-w-xl leading-relaxed font-medium", children: [
31
+ "Every level, every badge, every way to earn \u2014 the whole system, in one place. Check",
32
+ " ",
33
+ /* @__PURE__ */ jsx(Link, { href: "/rewards", className: "text-foreground underline underline-offset-2 hover:text-brand-orange transition-colors", children: "your own score" }),
34
+ " ",
35
+ "on Rewards."
36
+ ] })
37
+ ] });
38
+ }
39
+ function LevelsSection() {
40
+ const { data: config, isLoading } = useRewardsConfig();
41
+ return /* @__PURE__ */ jsxs("section", { className: "py-14 space-y-6", children: [
42
+ /* @__PURE__ */ jsxs("div", { children: [
43
+ /* @__PURE__ */ jsx("h2", { className: "text-2xl font-black tracking-tight", children: "The Level Ladder" }),
44
+ /* @__PURE__ */ jsx("p", { className: "text-base text-foreground/60 mt-1.5 font-medium", children: "50 levels, from Starter to Genesis." })
45
+ ] }),
46
+ isLoading || !config ? /* @__PURE__ */ jsx(Skeleton, { className: "h-96 w-full rounded-2xl" }) : /* @__PURE__ */ jsx(LevelJourneyList, { levels: config.levels })
47
+ ] });
48
+ }
49
+ function HowXpWorksSection() {
50
+ const { data: config, isLoading } = useRewardsConfig();
51
+ const examples = config?.actions.filter((a) => EXAMPLE_ACTION_TYPES.includes(a.type)) ?? [];
52
+ return /* @__PURE__ */ jsxs("section", { className: "py-14 space-y-6", children: [
53
+ /* @__PURE__ */ jsxs("div", { className: "max-w-2xl", children: [
54
+ /* @__PURE__ */ jsx("h2", { className: "text-2xl font-black tracking-tight", children: "How XP works" }),
55
+ /* @__PURE__ */ jsx("p", { className: "text-base text-foreground/60 mt-1.5 font-medium leading-relaxed", children: "Every action earns real XP, automatically \u2014 no buying points, no gaming the system. Some early actions and loyalty count extra. Scores and badges are recalculated weekly." })
56
+ ] }),
57
+ isLoading || !config ? /* @__PURE__ */ jsx(Skeleton, { className: "h-40 w-full rounded-2xl" }) : /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 sm:grid-cols-4 gap-3", children: examples.map((a) => /* @__PURE__ */ jsxs("div", { className: "rounded-2xl bg-foreground/[0.04] p-4", children: [
58
+ /* @__PURE__ */ jsxs("p", { className: "text-lg font-black text-brand-orange", children: [
59
+ "+",
60
+ a.xp
61
+ ] }),
62
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-semibold text-foreground/60 mt-1 leading-snug", children: a.label })
63
+ ] }, a.type)) })
64
+ ] });
65
+ }
66
+ function BadgesSection() {
67
+ const { data: config, isLoading } = useRewardsConfig();
68
+ return /* @__PURE__ */ jsxs("section", { className: "py-14 space-y-6", children: [
69
+ /* @__PURE__ */ jsxs("div", { children: [
70
+ /* @__PURE__ */ jsx("h2", { className: "text-2xl font-black tracking-tight", children: "Badges" }),
71
+ /* @__PURE__ */ jsx("p", { className: "text-base text-foreground/60 mt-1.5 font-medium", children: "What's achievable, not just what you've done." })
72
+ ] }),
73
+ isLoading || !config ? /* @__PURE__ */ jsx(Skeleton, { className: "h-64 w-full rounded-2xl" }) : /* @__PURE__ */ jsx(BadgeCatalog, { badges: config.badges })
74
+ ] });
75
+ }
76
+ function CtaSection({ startHint }) {
77
+ const { onRequireWallet } = useMedialaneApp();
78
+ return /* @__PURE__ */ jsxs("section", { className: "py-14 pb-20 grid grid-cols-1 sm:grid-cols-2 gap-4", children: [
79
+ /* @__PURE__ */ jsxs(
80
+ "button",
81
+ {
82
+ type: "button",
83
+ onClick: onRequireWallet,
84
+ className: "flex items-center justify-between rounded-2xl bg-gradient-to-br from-brand-orange to-brand-maeve p-6 text-left text-white",
85
+ children: [
86
+ /* @__PURE__ */ jsxs("div", { children: [
87
+ /* @__PURE__ */ jsx("p", { className: "font-black text-lg", children: "New here?" }),
88
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-white/80", children: startHint })
89
+ ] }),
90
+ /* @__PURE__ */ jsx(ArrowRight, { className: "h-5 w-5 shrink-0" })
91
+ ]
92
+ }
93
+ ),
94
+ /* @__PURE__ */ jsxs(
95
+ Link,
96
+ {
97
+ href: "/rewards",
98
+ className: "flex items-center justify-between rounded-2xl bg-foreground/[0.04] hover:bg-foreground/[0.07] p-6 transition-colors",
99
+ children: [
100
+ /* @__PURE__ */ jsxs("div", { children: [
101
+ /* @__PURE__ */ jsx("p", { className: "font-black text-lg", children: "Already earning?" }),
102
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-foreground/60", children: "Check your score." })
103
+ ] }),
104
+ /* @__PURE__ */ jsx(ArrowRight, { className: "h-5 w-5 shrink-0" })
105
+ ]
106
+ }
107
+ )
108
+ ] });
109
+ }
110
+ function JourneyContent({ startHint }) {
111
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
112
+ /* @__PURE__ */ jsx(Hero, {}),
113
+ /* @__PURE__ */ jsx(LevelsSection, {}),
114
+ /* @__PURE__ */ jsx(HowXpWorksSection, {}),
115
+ /* @__PURE__ */ jsx(BadgesSection, {}),
116
+ /* @__PURE__ */ jsx(CtaSection, { startHint })
117
+ ] });
118
+ }
119
+ export {
120
+ JourneyContent
121
+ };
122
+ //# sourceMappingURL=journey-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/journey-content.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { Sparkles, ArrowRight } from \"lucide-react\";\nimport { useMedialaneApp } from \"./medialane-app.js\";\nimport { LevelJourneyList } from \"./rewards/level-journey-list.js\";\nimport { BadgeCatalog } from \"./rewards/badge-catalog.js\";\nimport { Skeleton } from \"./skeleton.js\";\nimport { useRewardsConfig } from \"../utils/use-rewards.js\";\n\nconst EXAMPLE_ACTION_TYPES = [\n \"mint_asset\", \"buy_asset\", \"create_collection\", \"comment\",\n \"launch_launchpad\", \"make_offer\", \"join_club\", \"list_asset\",\n];\n\nfunction Hero() {\n return (\n <section className=\"py-14 space-y-5\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-brand-orange to-brand-maeve text-white shrink-0\">\n <Sparkles className=\"h-5 w-5\" />\n </div>\n <h1 className=\"text-5xl sm:text-6xl font-black tracking-tight leading-[1.02]\">\n Your{\" \"}\n <span className=\"bg-gradient-to-r from-brand-orange to-brand-maeve bg-clip-text text-transparent\">\n Journey\n </span>\n </h1>\n </div>\n <p className=\"text-lg text-foreground/70 max-w-xl leading-relaxed font-medium\">\n Every level, every badge, every way to earn — the whole system, in one place. Check{\" \"}\n <Link href=\"/rewards\" className=\"text-foreground underline underline-offset-2 hover:text-brand-orange transition-colors\">\n your own score\n </Link>{\" \"}\n on Rewards.\n </p>\n </section>\n );\n}\n\nfunction LevelsSection() {\n const { data: config, isLoading } = useRewardsConfig();\n return (\n <section className=\"py-14 space-y-6\">\n <div>\n <h2 className=\"text-2xl font-black tracking-tight\">The Level Ladder</h2>\n <p className=\"text-base text-foreground/60 mt-1.5 font-medium\">50 levels, from Starter to Genesis.</p>\n </div>\n {isLoading || !config ? (\n <Skeleton className=\"h-96 w-full rounded-2xl\" />\n ) : (\n <LevelJourneyList levels={config.levels} />\n )}\n </section>\n );\n}\n\nfunction HowXpWorksSection() {\n const { data: config, isLoading } = useRewardsConfig();\n const examples = config?.actions.filter((a) => EXAMPLE_ACTION_TYPES.includes(a.type)) ?? [];\n\n return (\n <section className=\"py-14 space-y-6\">\n <div className=\"max-w-2xl\">\n <h2 className=\"text-2xl font-black tracking-tight\">How XP works</h2>\n <p className=\"text-base text-foreground/60 mt-1.5 font-medium leading-relaxed\">\n Every action earns real XP, automatically — no buying points, no gaming the system.\n Some early actions and loyalty count extra. Scores and badges are\n recalculated weekly.\n </p>\n </div>\n {isLoading || !config ? (\n <Skeleton className=\"h-40 w-full rounded-2xl\" />\n ) : (\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-3\">\n {examples.map((a) => (\n <div key={a.type} className=\"rounded-2xl bg-foreground/[0.04] p-4\">\n <p className=\"text-lg font-black text-brand-orange\">+{a.xp}</p>\n <p className=\"text-xs font-semibold text-foreground/60 mt-1 leading-snug\">{a.label}</p>\n </div>\n ))}\n </div>\n )}\n </section>\n );\n}\n\nfunction BadgesSection() {\n const { data: config, isLoading } = useRewardsConfig();\n return (\n <section className=\"py-14 space-y-6\">\n <div>\n <h2 className=\"text-2xl font-black tracking-tight\">Badges</h2>\n <p className=\"text-base text-foreground/60 mt-1.5 font-medium\">What&apos;s achievable, not just what you&apos;ve done.</p>\n </div>\n {isLoading || !config ? (\n <Skeleton className=\"h-64 w-full rounded-2xl\" />\n ) : (\n <BadgeCatalog badges={config.badges} />\n )}\n </section>\n );\n}\n\nfunction CtaSection({ startHint }: { startHint: string }) {\n const { onRequireWallet } = useMedialaneApp();\n return (\n <section className=\"py-14 pb-20 grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <button\n type=\"button\"\n onClick={onRequireWallet}\n className=\"flex items-center justify-between rounded-2xl bg-gradient-to-br from-brand-orange to-brand-maeve p-6 text-left text-white\"\n >\n <div>\n <p className=\"font-black text-lg\">New here?</p>\n <p className=\"text-sm font-medium text-white/80\">{startHint}</p>\n </div>\n <ArrowRight className=\"h-5 w-5 shrink-0\" />\n </button>\n <Link\n href=\"/rewards\"\n className=\"flex items-center justify-between rounded-2xl bg-foreground/[0.04] hover:bg-foreground/[0.07] p-6 transition-colors\"\n >\n <div>\n <p className=\"font-black text-lg\">Already earning?</p>\n <p className=\"text-sm font-medium text-foreground/60\">Check your score.</p>\n </div>\n <ArrowRight className=\"h-5 w-5 shrink-0\" />\n </Link>\n </section>\n );\n}\n\nexport function JourneyContent({ startHint }: { startHint: string }) {\n return (\n <>\n <Hero />\n <LevelsSection />\n <HowXpWorksSection />\n <BadgesSection />\n <CtaSection startHint={startHint} />\n </>\n );\n}\n"],"mappings":"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","names":[]}
@@ -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;