@medialane/ui 0.27.0 → 0.29.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.
- package/README.md +1 -0
- package/dist/components/asset-collection-bar.cjs +135 -0
- package/dist/components/asset-collection-bar.cjs.map +1 -0
- package/dist/components/asset-collection-bar.d.cts +28 -0
- package/dist/components/asset-collection-bar.d.ts +28 -0
- package/dist/components/asset-collection-bar.js +101 -0
- package/dist/components/asset-collection-bar.js.map +1 -0
- package/dist/components/asset-marketplace-panel.cjs +284 -0
- package/dist/components/asset-marketplace-panel.cjs.map +1 -0
- package/dist/components/asset-marketplace-panel.d.cts +44 -0
- package/dist/components/asset-marketplace-panel.d.ts +44 -0
- package/dist/components/asset-marketplace-panel.js +270 -0
- package/dist/components/asset-marketplace-panel.js.map +1 -0
- package/dist/components/asset-top-sections.cjs +4 -9
- package/dist/components/asset-top-sections.cjs.map +1 -1
- package/dist/components/asset-top-sections.d.cts +1 -3
- package/dist/components/asset-top-sections.d.ts +1 -3
- package/dist/components/asset-top-sections.js +4 -9
- package/dist/components/asset-top-sections.js.map +1 -1
- package/dist/components/service-form-shell.cjs +3 -2
- package/dist/components/service-form-shell.cjs.map +1 -1
- package/dist/components/service-form-shell.d.cts +4 -1
- package/dist/components/service-form-shell.d.ts +4 -1
- package/dist/components/service-form-shell.js +3 -2
- package/dist/components/service-form-shell.js.map +1 -1
- package/dist/components/step-nav.cjs +82 -0
- package/dist/components/step-nav.cjs.map +1 -0
- package/dist/components/step-nav.d.cts +28 -0
- package/dist/components/step-nav.d.ts +28 -0
- package/dist/components/step-nav.js +58 -0
- package/dist/components/step-nav.js.map +1 -0
- package/dist/index.cjs +11 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -2
- package/dist/index.d.ts +5 -2
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/format.cjs +17 -2
- package/dist/utils/format.cjs.map +1 -1
- package/dist/utils/format.d.cts +9 -1
- package/dist/utils/format.d.ts +9 -1
- package/dist/utils/format.js +15 -1
- package/dist/utils/format.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/asset-top-sections.tsx"],"sourcesContent":["\"use client\";\n\nimport Image from \"next/image\";\nimport Link from \"next/link\";\nimport { motion } from \"framer-motion\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/components/asset-top-sections.tsx"],"sourcesContent":["\"use client\";\n\nimport Image from \"next/image\";\nimport Link from \"next/link\";\nimport { motion } from \"framer-motion\";\nimport { AddressDisplay } from \"./address-display.js\";\nimport { ParentAttributionBanner } from \"./parent-attribution-banner.js\";\nimport { Layers, Users } from \"lucide-react\";\n\ninterface AssetMediaColumnProps {\n shouldReduce: boolean;\n image: string;\n imageAlt: string;\n imgError: boolean;\n onImageError: () => void;\n fallback: React.ReactNode;\n stats?: Array<{\n value: string;\n label: string;\n icon: React.ReactNode;\n }>;\n}\n\nexport function AssetMediaColumn({\n shouldReduce,\n image,\n imageAlt,\n imgError,\n onImageError,\n fallback,\n stats,\n}: AssetMediaColumnProps) {\n return (\n <motion.div\n initial={shouldReduce ? false : { scale: 1.0, opacity: 0 }}\n animate={{ scale: 1.02, opacity: 1 }}\n transition={{ duration: 0.6, ease: \"easeOut\" }}\n className=\"overflow-hidden rounded-xl lg:sticky lg:top-16\"\n >\n <div className=\"rounded-2xl overflow-hidden border border-border bg-muted\">\n {image && !imgError ? (\n <Image\n src={image}\n alt={imageAlt}\n width={0}\n height={0}\n sizes=\"(max-width: 1024px) 100vw, 66vw\"\n className=\"w-full h-auto\"\n onError={onImageError}\n crossOrigin=\"anonymous\"\n priority\n />\n ) : (\n fallback\n )}\n </div>\n\n {stats && stats.length > 0 ? (\n <div className={`grid gap-3 mt-4 ${stats.length === 2 ? \"grid-cols-2\" : \"grid-cols-1\"}`}>\n {stats.map((stat) => (\n <div key={stat.label} className=\"rounded-xl border border-border bg-muted/20 p-4 text-center\">\n <p className=\"text-2xl font-black\">{stat.value}</p>\n <div className=\"flex items-center justify-center gap-1 text-xs text-muted-foreground mt-1\">\n {stat.icon}\n {stat.label}\n </div>\n </div>\n ))}\n </div>\n ) : null}\n </motion.div>\n );\n}\n\ninterface AssetHeaderBlockProps {\n name: string;\n description?: string | null;\n showMultiEditionBadge?: boolean;\n parentContract?: string | null;\n parentTokenId?: string | null;\n ownerAddress?: string | null;\n}\n\nexport function AssetHeaderBlock({\n name,\n description,\n showMultiEditionBadge = false,\n parentContract,\n parentTokenId,\n ownerAddress,\n}: AssetHeaderBlockProps) {\n return (\n <div>\n {parentContract && parentTokenId ? (\n <div className=\"mb-3\">\n <ParentAttributionBanner\n parentContract={parentContract}\n parentTokenId={parentTokenId}\n parentName={`Token #${parentTokenId}`}\n />\n </div>\n ) : null}\n {showMultiEditionBadge ? (\n <div className=\"flex items-center gap-2 flex-wrap mb-2\">\n <span className=\"inline-flex items-center gap-1 text-[11px] font-semibold px-2.5 py-1 rounded-full border border-violet-500/30 bg-violet-500/10 text-violet-500\">\n <Layers className=\"h-3 w-3\" />\n Multi-edition\n </span>\n </div>\n ) : null}\n {ownerAddress ? (\n <div className=\"mb-1 flex items-center gap-1.5 text-xs text-muted-foreground\">\n <span className=\"font-semibold uppercase tracking-wider\">Owner</span>\n <Link\n href={`/creator/${ownerAddress}`}\n className=\"hover:text-primary transition-colors font-medium\"\n >\n <AddressDisplay address={ownerAddress} />\n </Link>\n </div>\n ) : null}\n <h1 className=\"text-3xl lg:text-5xl font-bold\">{name}</h1>\n {description ? (\n <p className=\"text-sm text-muted-foreground leading-relaxed mt-1\">{description}</p>\n ) : null}\n </div>\n );\n}\n\nexport function buildEditionStats(totalEditions: number, uniqueOwners: number) {\n return [\n {\n value: totalEditions.toLocaleString(),\n label: \"editions minted\",\n icon: <Layers className=\"h-3 w-3\" />,\n },\n {\n value: uniqueOwners.toLocaleString(),\n label: \"unique owners\",\n icon: <Users className=\"h-3 w-3\" />,\n },\n ];\n}\n"],"mappings":";AAyCU,cAqBI,YArBJ;AAvCV,OAAO,WAAW;AAClB,OAAO,UAAU;AACjB,SAAS,cAAc;AACvB,SAAS,sBAAsB;AAC/B,SAAS,+BAA+B;AACxC,SAAS,QAAQ,aAAa;AAgBvB,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,SACE;AAAA,IAAC,OAAO;AAAA,IAAP;AAAA,MACC,SAAS,eAAe,QAAQ,EAAE,OAAO,GAAK,SAAS,EAAE;AAAA,MACzD,SAAS,EAAE,OAAO,MAAM,SAAS,EAAE;AAAA,MACnC,YAAY,EAAE,UAAU,KAAK,MAAM,UAAU;AAAA,MAC7C,WAAU;AAAA,MAEV;AAAA,4BAAC,SAAI,WAAU,6DACZ,mBAAS,CAAC,WACT;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,KAAK;AAAA,YACL,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,OAAM;AAAA,YACN,WAAU;AAAA,YACV,SAAS;AAAA,YACT,aAAY;AAAA,YACZ,UAAQ;AAAA;AAAA,QACV,IAEA,UAEJ;AAAA,QAEC,SAAS,MAAM,SAAS,IACvB,oBAAC,SAAI,WAAW,mBAAmB,MAAM,WAAW,IAAI,gBAAgB,aAAa,IAClF,gBAAM,IAAI,CAAC,SACV,qBAAC,SAAqB,WAAU,+DAC9B;AAAA,8BAAC,OAAE,WAAU,uBAAuB,eAAK,OAAM;AAAA,UAC/C,qBAAC,SAAI,WAAU,6EACZ;AAAA,iBAAK;AAAA,YACL,KAAK;AAAA,aACR;AAAA,aALQ,KAAK,KAMf,CACD,GACH,IACE;AAAA;AAAA;AAAA,EACN;AAEJ;AAWO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA,wBAAwB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,SACE,qBAAC,SACE;AAAA,sBAAkB,gBACjB,oBAAC,SAAI,WAAU,QACb;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,YAAY,UAAU,aAAa;AAAA;AAAA,IACrC,GACF,IACE;AAAA,IACH,wBACC,oBAAC,SAAI,WAAU,0CACb,+BAAC,UAAK,WAAU,kJACd;AAAA,0BAAC,UAAO,WAAU,WAAU;AAAA,MAAE;AAAA,OAEhC,GACF,IACE;AAAA,IACH,eACC,qBAAC,SAAI,WAAU,gEACb;AAAA,0BAAC,UAAK,WAAU,0CAAyC,mBAAK;AAAA,MAC9D;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,YAAY,YAAY;AAAA,UAC9B,WAAU;AAAA,UAEV,8BAAC,kBAAe,SAAS,cAAc;AAAA;AAAA,MACzC;AAAA,OACF,IACE;AAAA,IACJ,oBAAC,QAAG,WAAU,kCAAkC,gBAAK;AAAA,IACpD,cACC,oBAAC,OAAE,WAAU,sDAAsD,uBAAY,IAC7E;AAAA,KACN;AAEJ;AAEO,SAAS,kBAAkB,eAAuB,cAAsB;AAC7E,SAAO;AAAA,IACL;AAAA,MACE,OAAO,cAAc,eAAe;AAAA,MACpC,OAAO;AAAA,MACP,MAAM,oBAAC,UAAO,WAAU,WAAU;AAAA,IACpC;AAAA,IACA;AAAA,MACE,OAAO,aAAa,eAAe;AAAA,MACnC,OAAO;AAAA,MACP,MAAM,oBAAC,SAAM,WAAU,WAAU;AAAA,IACnC;AAAA,EACF;AACF;","names":[]}
|
|
@@ -24,7 +24,7 @@ module.exports = __toCommonJS(service_form_shell_exports);
|
|
|
24
24
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
25
25
|
var import_cn = require("../utils/cn.js");
|
|
26
26
|
var import_service_header = require("./service-header.js");
|
|
27
|
-
function ServiceFormShell({ icon, title, subtitle, headerAccessory, backSlot, aside, children }) {
|
|
27
|
+
function ServiceFormShell({ icon, title, subtitle, headerAccessory, backSlot, aside, aboveForm, children }) {
|
|
28
28
|
const header = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_service_header.ServiceHeader, { plain: true, icon, title, subtitle, headerAccessory });
|
|
29
29
|
const form = aside ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "btn-border-animated p-[1.5px] rounded-2xl", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "rounded-[15px] bg-card p-5 sm:p-6", children }) }) : children;
|
|
30
30
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: (0, import_cn.cn)("container mx-auto px-4 sm:px-6 py-10 space-y-6 pb-20", aside ? "max-w-5xl" : "max-w-3xl"), children: [
|
|
@@ -32,9 +32,10 @@ function ServiceFormShell({ icon, title, subtitle, headerAccessory, backSlot, as
|
|
|
32
32
|
aside ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "grid gap-4 lg:grid-cols-12 lg:items-start", children: [
|
|
33
33
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-4 lg:col-span-8", children: [
|
|
34
34
|
header,
|
|
35
|
+
aboveForm,
|
|
35
36
|
form
|
|
36
37
|
] }),
|
|
37
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "space-y-4 lg:col-span-4", children: aside })
|
|
38
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "space-y-4 lg:col-span-4 lg:sticky lg:top-24", children: aside })
|
|
38
39
|
] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-6", children: [
|
|
39
40
|
header,
|
|
40
41
|
form
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/service-form-shell.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../utils/cn.js\";\nimport { ServiceHeader } from \"./service-header.js\";\n\nexport interface ServiceFormShellProps {\n /** Rendered icon element for the header, e.g. <Coins className=\"h-4 w-4 text-white\" />. */\n icon: ReactNode;\n title: string;\n subtitle: string;\n /** Optional element under the header subtitle (e.g. a URL pill). */\n headerAccessory?: ReactNode;\n /** Rendered above the header — the app's own back button (router-specific). */\n backSlot?: ReactNode;\n /** Right-rail panels (e.g. <ClaimRail/>). When present, lays out an 8/4 bento. */\n aside?: ReactNode;\n /** The form. **Already gated by the app** — wrap it in your own auth/wallet\n * gate before passing. This component stays presentation-only (no auth,\n * no router) so both apps can share it. */\n children: ReactNode;\n}\n\n/** Shared launchpad/claim form layout: back slot + gradient header, then the\n * form inside the animated full-spectrum border (`.btn-border-animated`, from\n * @medialane/ui/styles). With an `aside` it lays out an 8/4 bento (form left,\n * rail right); without, a single centered column. */\nexport function ServiceFormShell({ icon, title, subtitle, headerAccessory, backSlot, aside, children }: ServiceFormShellProps) {\n // Plain header: the form below already carries the animated gradient border,\n // so the header drops its gradient frame to keep a single focal accent.\n const header = <ServiceHeader plain icon={icon} title={title} subtitle={subtitle} headerAccessory={headerAccessory} />;\n\n // The form is the focus: animated gradient border around the dark card.\n const form = aside ? (\n <div className=\"btn-border-animated p-[1.5px] rounded-2xl\">\n <div className=\"rounded-[15px] bg-card p-5 sm:p-6\">{children}</div>\n </div>\n ) : (\n children\n );\n\n return (\n <div className={cn(\"container mx-auto px-4 sm:px-6 py-10 space-y-6 pb-20\", aside ? \"max-w-5xl\" : \"max-w-3xl\")}>\n {backSlot}\n {aside ? (\n <div className=\"grid gap-4 lg:grid-cols-12 lg:items-start\">\n <div className=\"space-y-4 lg:col-span-8\">\n {header}\n {form}\n </div>\n <div className=\"space-y-4 lg:col-span-4\">{aside}</div>\n </div>\n ) : (\n <div className=\"space-y-6\">\n {header}\n {form}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
1
|
+
{"version":3,"sources":["../../src/components/service-form-shell.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../utils/cn.js\";\nimport { ServiceHeader } from \"./service-header.js\";\n\nexport interface ServiceFormShellProps {\n /** Rendered icon element for the header, e.g. <Coins className=\"h-4 w-4 text-white\" />. */\n icon: ReactNode;\n title: string;\n subtitle: string;\n /** Optional element under the header subtitle (e.g. a URL pill). */\n headerAccessory?: ReactNode;\n /** Rendered above the header — the app's own back button (router-specific). */\n backSlot?: ReactNode;\n /** Right-rail panels (e.g. <ClaimRail/>). When present, lays out an 8/4 bento. */\n aside?: ReactNode;\n /** Rendered in the left column between the header and the form — e.g. a\n * <StepNav/> for multi-step flows. Only used in the aside (8/4) layout. */\n aboveForm?: ReactNode;\n /** The form. **Already gated by the app** — wrap it in your own auth/wallet\n * gate before passing. This component stays presentation-only (no auth,\n * no router) so both apps can share it. */\n children: ReactNode;\n}\n\n/** Shared launchpad/claim form layout: back slot + gradient header, then the\n * form inside the animated full-spectrum border (`.btn-border-animated`, from\n * @medialane/ui/styles). With an `aside` it lays out an 8/4 bento (form left,\n * rail right); without, a single centered column. */\nexport function ServiceFormShell({ icon, title, subtitle, headerAccessory, backSlot, aside, aboveForm, children }: ServiceFormShellProps) {\n // Plain header: the form below already carries the animated gradient border,\n // so the header drops its gradient frame to keep a single focal accent.\n const header = <ServiceHeader plain icon={icon} title={title} subtitle={subtitle} headerAccessory={headerAccessory} />;\n\n // The form is the focus: animated gradient border around the dark card.\n const form = aside ? (\n <div className=\"btn-border-animated p-[1.5px] rounded-2xl\">\n <div className=\"rounded-[15px] bg-card p-5 sm:p-6\">{children}</div>\n </div>\n ) : (\n children\n );\n\n return (\n <div className={cn(\"container mx-auto px-4 sm:px-6 py-10 space-y-6 pb-20\", aside ? \"max-w-5xl\" : \"max-w-3xl\")}>\n {backSlot}\n {aside ? (\n <div className=\"grid gap-4 lg:grid-cols-12 lg:items-start\">\n <div className=\"space-y-4 lg:col-span-8\">\n {header}\n {aboveForm}\n {form}\n </div>\n <div className=\"space-y-4 lg:col-span-4 lg:sticky lg:top-24\">{aside}</div>\n </div>\n ) : (\n <div className=\"space-y-6\">\n {header}\n {form}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA+BiB;AA9BjB,gBAAmB;AACnB,4BAA8B;AA0BvB,SAAS,iBAAiB,EAAE,MAAM,OAAO,UAAU,iBAAiB,UAAU,OAAO,WAAW,SAAS,GAA0B;AAGxI,QAAM,SAAS,4CAAC,uCAAc,OAAK,MAAC,MAAY,OAAc,UAAoB,iBAAkC;AAGpH,QAAM,OAAO,QACX,4CAAC,SAAI,WAAU,6CACb,sDAAC,SAAI,WAAU,qCAAqC,UAAS,GAC/D,IAEA;AAGF,SACE,6CAAC,SAAI,eAAW,cAAG,wDAAwD,QAAQ,cAAc,WAAW,GACzG;AAAA;AAAA,IACA,QACC,6CAAC,SAAI,WAAU,6CACb;AAAA,mDAAC,SAAI,WAAU,2BACZ;AAAA;AAAA,QACA;AAAA,QACA;AAAA,SACH;AAAA,MACA,4CAAC,SAAI,WAAU,+CAA+C,iBAAM;AAAA,OACtE,IAEA,6CAAC,SAAI,WAAU,aACZ;AAAA;AAAA,MACA;AAAA,OACH;AAAA,KAEJ;AAEJ;","names":[]}
|
|
@@ -12,6 +12,9 @@ interface ServiceFormShellProps {
|
|
|
12
12
|
backSlot?: ReactNode;
|
|
13
13
|
/** Right-rail panels (e.g. <ClaimRail/>). When present, lays out an 8/4 bento. */
|
|
14
14
|
aside?: ReactNode;
|
|
15
|
+
/** Rendered in the left column between the header and the form — e.g. a
|
|
16
|
+
* <StepNav/> for multi-step flows. Only used in the aside (8/4) layout. */
|
|
17
|
+
aboveForm?: ReactNode;
|
|
15
18
|
/** The form. **Already gated by the app** — wrap it in your own auth/wallet
|
|
16
19
|
* gate before passing. This component stays presentation-only (no auth,
|
|
17
20
|
* no router) so both apps can share it. */
|
|
@@ -21,6 +24,6 @@ interface ServiceFormShellProps {
|
|
|
21
24
|
* form inside the animated full-spectrum border (`.btn-border-animated`, from
|
|
22
25
|
* @medialane/ui/styles). With an `aside` it lays out an 8/4 bento (form left,
|
|
23
26
|
* rail right); without, a single centered column. */
|
|
24
|
-
declare function ServiceFormShell({ icon, title, subtitle, headerAccessory, backSlot, aside, children }: ServiceFormShellProps): react_jsx_runtime.JSX.Element;
|
|
27
|
+
declare function ServiceFormShell({ icon, title, subtitle, headerAccessory, backSlot, aside, aboveForm, children }: ServiceFormShellProps): react_jsx_runtime.JSX.Element;
|
|
25
28
|
|
|
26
29
|
export { ServiceFormShell, type ServiceFormShellProps };
|
|
@@ -12,6 +12,9 @@ interface ServiceFormShellProps {
|
|
|
12
12
|
backSlot?: ReactNode;
|
|
13
13
|
/** Right-rail panels (e.g. <ClaimRail/>). When present, lays out an 8/4 bento. */
|
|
14
14
|
aside?: ReactNode;
|
|
15
|
+
/** Rendered in the left column between the header and the form — e.g. a
|
|
16
|
+
* <StepNav/> for multi-step flows. Only used in the aside (8/4) layout. */
|
|
17
|
+
aboveForm?: ReactNode;
|
|
15
18
|
/** The form. **Already gated by the app** — wrap it in your own auth/wallet
|
|
16
19
|
* gate before passing. This component stays presentation-only (no auth,
|
|
17
20
|
* no router) so both apps can share it. */
|
|
@@ -21,6 +24,6 @@ interface ServiceFormShellProps {
|
|
|
21
24
|
* form inside the animated full-spectrum border (`.btn-border-animated`, from
|
|
22
25
|
* @medialane/ui/styles). With an `aside` it lays out an 8/4 bento (form left,
|
|
23
26
|
* rail right); without, a single centered column. */
|
|
24
|
-
declare function ServiceFormShell({ icon, title, subtitle, headerAccessory, backSlot, aside, children }: ServiceFormShellProps): react_jsx_runtime.JSX.Element;
|
|
27
|
+
declare function ServiceFormShell({ icon, title, subtitle, headerAccessory, backSlot, aside, aboveForm, children }: ServiceFormShellProps): react_jsx_runtime.JSX.Element;
|
|
25
28
|
|
|
26
29
|
export { ServiceFormShell, type ServiceFormShellProps };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from "../utils/cn.js";
|
|
3
3
|
import { ServiceHeader } from "./service-header.js";
|
|
4
|
-
function ServiceFormShell({ icon, title, subtitle, headerAccessory, backSlot, aside, children }) {
|
|
4
|
+
function ServiceFormShell({ icon, title, subtitle, headerAccessory, backSlot, aside, aboveForm, children }) {
|
|
5
5
|
const header = /* @__PURE__ */ jsx(ServiceHeader, { plain: true, icon, title, subtitle, headerAccessory });
|
|
6
6
|
const form = aside ? /* @__PURE__ */ jsx("div", { className: "btn-border-animated p-[1.5px] rounded-2xl", children: /* @__PURE__ */ jsx("div", { className: "rounded-[15px] bg-card p-5 sm:p-6", children }) }) : children;
|
|
7
7
|
return /* @__PURE__ */ jsxs("div", { className: cn("container mx-auto px-4 sm:px-6 py-10 space-y-6 pb-20", aside ? "max-w-5xl" : "max-w-3xl"), children: [
|
|
@@ -9,9 +9,10 @@ function ServiceFormShell({ icon, title, subtitle, headerAccessory, backSlot, as
|
|
|
9
9
|
aside ? /* @__PURE__ */ jsxs("div", { className: "grid gap-4 lg:grid-cols-12 lg:items-start", children: [
|
|
10
10
|
/* @__PURE__ */ jsxs("div", { className: "space-y-4 lg:col-span-8", children: [
|
|
11
11
|
header,
|
|
12
|
+
aboveForm,
|
|
12
13
|
form
|
|
13
14
|
] }),
|
|
14
|
-
/* @__PURE__ */ jsx("div", { className: "space-y-4 lg:col-span-4", children: aside })
|
|
15
|
+
/* @__PURE__ */ jsx("div", { className: "space-y-4 lg:col-span-4 lg:sticky lg:top-24", children: aside })
|
|
15
16
|
] }) : /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
|
|
16
17
|
header,
|
|
17
18
|
form
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/service-form-shell.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../utils/cn.js\";\nimport { ServiceHeader } from \"./service-header.js\";\n\nexport interface ServiceFormShellProps {\n /** Rendered icon element for the header, e.g. <Coins className=\"h-4 w-4 text-white\" />. */\n icon: ReactNode;\n title: string;\n subtitle: string;\n /** Optional element under the header subtitle (e.g. a URL pill). */\n headerAccessory?: ReactNode;\n /** Rendered above the header — the app's own back button (router-specific). */\n backSlot?: ReactNode;\n /** Right-rail panels (e.g. <ClaimRail/>). When present, lays out an 8/4 bento. */\n aside?: ReactNode;\n /** The form. **Already gated by the app** — wrap it in your own auth/wallet\n * gate before passing. This component stays presentation-only (no auth,\n * no router) so both apps can share it. */\n children: ReactNode;\n}\n\n/** Shared launchpad/claim form layout: back slot + gradient header, then the\n * form inside the animated full-spectrum border (`.btn-border-animated`, from\n * @medialane/ui/styles). With an `aside` it lays out an 8/4 bento (form left,\n * rail right); without, a single centered column. */\nexport function ServiceFormShell({ icon, title, subtitle, headerAccessory, backSlot, aside, children }: ServiceFormShellProps) {\n // Plain header: the form below already carries the animated gradient border,\n // so the header drops its gradient frame to keep a single focal accent.\n const header = <ServiceHeader plain icon={icon} title={title} subtitle={subtitle} headerAccessory={headerAccessory} />;\n\n // The form is the focus: animated gradient border around the dark card.\n const form = aside ? (\n <div className=\"btn-border-animated p-[1.5px] rounded-2xl\">\n <div className=\"rounded-[15px] bg-card p-5 sm:p-6\">{children}</div>\n </div>\n ) : (\n children\n );\n\n return (\n <div className={cn(\"container mx-auto px-4 sm:px-6 py-10 space-y-6 pb-20\", aside ? \"max-w-5xl\" : \"max-w-3xl\")}>\n {backSlot}\n {aside ? (\n <div className=\"grid gap-4 lg:grid-cols-12 lg:items-start\">\n <div className=\"space-y-4 lg:col-span-8\">\n {header}\n {form}\n </div>\n <div className=\"space-y-4 lg:col-span-4\">{aside}</div>\n </div>\n ) : (\n <div className=\"space-y-6\">\n {header}\n {form}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/components/service-form-shell.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../utils/cn.js\";\nimport { ServiceHeader } from \"./service-header.js\";\n\nexport interface ServiceFormShellProps {\n /** Rendered icon element for the header, e.g. <Coins className=\"h-4 w-4 text-white\" />. */\n icon: ReactNode;\n title: string;\n subtitle: string;\n /** Optional element under the header subtitle (e.g. a URL pill). */\n headerAccessory?: ReactNode;\n /** Rendered above the header — the app's own back button (router-specific). */\n backSlot?: ReactNode;\n /** Right-rail panels (e.g. <ClaimRail/>). When present, lays out an 8/4 bento. */\n aside?: ReactNode;\n /** Rendered in the left column between the header and the form — e.g. a\n * <StepNav/> for multi-step flows. Only used in the aside (8/4) layout. */\n aboveForm?: ReactNode;\n /** The form. **Already gated by the app** — wrap it in your own auth/wallet\n * gate before passing. This component stays presentation-only (no auth,\n * no router) so both apps can share it. */\n children: ReactNode;\n}\n\n/** Shared launchpad/claim form layout: back slot + gradient header, then the\n * form inside the animated full-spectrum border (`.btn-border-animated`, from\n * @medialane/ui/styles). With an `aside` it lays out an 8/4 bento (form left,\n * rail right); without, a single centered column. */\nexport function ServiceFormShell({ icon, title, subtitle, headerAccessory, backSlot, aside, aboveForm, children }: ServiceFormShellProps) {\n // Plain header: the form below already carries the animated gradient border,\n // so the header drops its gradient frame to keep a single focal accent.\n const header = <ServiceHeader plain icon={icon} title={title} subtitle={subtitle} headerAccessory={headerAccessory} />;\n\n // The form is the focus: animated gradient border around the dark card.\n const form = aside ? (\n <div className=\"btn-border-animated p-[1.5px] rounded-2xl\">\n <div className=\"rounded-[15px] bg-card p-5 sm:p-6\">{children}</div>\n </div>\n ) : (\n children\n );\n\n return (\n <div className={cn(\"container mx-auto px-4 sm:px-6 py-10 space-y-6 pb-20\", aside ? \"max-w-5xl\" : \"max-w-3xl\")}>\n {backSlot}\n {aside ? (\n <div className=\"grid gap-4 lg:grid-cols-12 lg:items-start\">\n <div className=\"space-y-4 lg:col-span-8\">\n {header}\n {aboveForm}\n {form}\n </div>\n <div className=\"space-y-4 lg:col-span-4 lg:sticky lg:top-24\">{aside}</div>\n </div>\n ) : (\n <div className=\"space-y-6\">\n {header}\n {form}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"AA+BiB,cAgBP,YAhBO;AA9BjB,SAAS,UAAU;AACnB,SAAS,qBAAqB;AA0BvB,SAAS,iBAAiB,EAAE,MAAM,OAAO,UAAU,iBAAiB,UAAU,OAAO,WAAW,SAAS,GAA0B;AAGxI,QAAM,SAAS,oBAAC,iBAAc,OAAK,MAAC,MAAY,OAAc,UAAoB,iBAAkC;AAGpH,QAAM,OAAO,QACX,oBAAC,SAAI,WAAU,6CACb,8BAAC,SAAI,WAAU,qCAAqC,UAAS,GAC/D,IAEA;AAGF,SACE,qBAAC,SAAI,WAAW,GAAG,wDAAwD,QAAQ,cAAc,WAAW,GACzG;AAAA;AAAA,IACA,QACC,qBAAC,SAAI,WAAU,6CACb;AAAA,2BAAC,SAAI,WAAU,2BACZ;AAAA;AAAA,QACA;AAAA,QACA;AAAA,SACH;AAAA,MACA,oBAAC,SAAI,WAAU,+CAA+C,iBAAM;AAAA,OACtE,IAEA,qBAAC,SAAI,WAAU,aACZ;AAAA;AAAA,MACA;AAAA,OACH;AAAA,KAEJ;AAEJ;","names":[]}
|
|
@@ -0,0 +1,82 @@
|
|
|
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 step_nav_exports = {};
|
|
20
|
+
__export(step_nav_exports, {
|
|
21
|
+
StepNav: () => StepNav
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(step_nav_exports);
|
|
24
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
25
|
+
var import_react = require("react");
|
|
26
|
+
var import_lucide_react = require("lucide-react");
|
|
27
|
+
var import_cn = require("../utils/cn.js");
|
|
28
|
+
function StepNav({
|
|
29
|
+
steps,
|
|
30
|
+
current,
|
|
31
|
+
onStep,
|
|
32
|
+
accentText = "text-primary",
|
|
33
|
+
accentBg = "bg-primary",
|
|
34
|
+
className
|
|
35
|
+
}) {
|
|
36
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: (0, import_cn.cn)("flex items-center", className), children: steps.map((s, idx) => {
|
|
37
|
+
const n = idx + 1;
|
|
38
|
+
const done = n < current;
|
|
39
|
+
const active = n === current;
|
|
40
|
+
const reachable = s.reachable ?? n <= current;
|
|
41
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_react.Fragment, { children: [
|
|
42
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
43
|
+
"button",
|
|
44
|
+
{
|
|
45
|
+
type: "button",
|
|
46
|
+
disabled: !reachable,
|
|
47
|
+
onClick: () => reachable && onStep?.(n),
|
|
48
|
+
"aria-current": active ? "step" : void 0,
|
|
49
|
+
className: (0, import_cn.cn)("flex items-center gap-2 shrink-0", reachable ? "cursor-pointer" : "cursor-default"),
|
|
50
|
+
children: [
|
|
51
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
52
|
+
"span",
|
|
53
|
+
{
|
|
54
|
+
className: (0, import_cn.cn)(
|
|
55
|
+
"flex h-7 w-7 items-center justify-center rounded-full text-xs font-bold transition-colors",
|
|
56
|
+
active ? (0, import_cn.cn)(accentBg, "text-white") : done ? (0, import_cn.cn)("border-2 border-current bg-transparent", accentText) : "bg-muted/40 text-muted-foreground"
|
|
57
|
+
),
|
|
58
|
+
children: done ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Check, { className: "h-3.5 w-3.5" }) : n
|
|
59
|
+
}
|
|
60
|
+
),
|
|
61
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
62
|
+
"span",
|
|
63
|
+
{
|
|
64
|
+
className: (0, import_cn.cn)(
|
|
65
|
+
"hidden sm:inline text-xs sm:text-sm font-semibold transition-colors",
|
|
66
|
+
active ? "text-foreground" : done ? accentText : "text-muted-foreground"
|
|
67
|
+
),
|
|
68
|
+
children: s.label
|
|
69
|
+
}
|
|
70
|
+
)
|
|
71
|
+
]
|
|
72
|
+
}
|
|
73
|
+
),
|
|
74
|
+
idx < steps.length - 1 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: (0, import_cn.cn)("mx-2 sm:mx-3 h-px flex-1 min-w-3 transition-colors", done ? accentBg : "bg-border") })
|
|
75
|
+
] }, s.label);
|
|
76
|
+
}) });
|
|
77
|
+
}
|
|
78
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
79
|
+
0 && (module.exports = {
|
|
80
|
+
StepNav
|
|
81
|
+
});
|
|
82
|
+
//# sourceMappingURL=step-nav.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/step-nav.tsx"],"sourcesContent":["import { Fragment } from \"react\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"../utils/cn.js\";\n\nexport interface StepNavStep {\n label: string;\n /** Whether the step can be navigated to. Defaults to \"any step up to the\n * current one\" when omitted. */\n reachable?: boolean;\n}\n\nexport interface StepNavProps {\n /** Ordered steps. */\n steps: StepNavStep[];\n /** 1-based index of the active step. */\n current: number;\n /** Called with the 1-based step index when a reachable step is clicked. */\n onStep?: (step: number) => void;\n /** Tailwind text-color class for the active/completed accent (e.g. \"text-brand-rose\"). */\n accentText?: string;\n /** Tailwind bg-color class for the active dot + completed connector (e.g. \"bg-brand-rose\"). */\n accentBg?: string;\n className?: string;\n}\n\n/** Presentation-only step indicator: a connected row of numbered dots —\n * solid accent for the active step, an outlined check for completed steps,\n * muted for upcoming ones, with the connector filling as you progress.\n * Touch-first (no hover-only affordance); labels collapse on mobile. */\nexport function StepNav({\n steps,\n current,\n onStep,\n accentText = \"text-primary\",\n accentBg = \"bg-primary\",\n className,\n}: StepNavProps) {\n return (\n <div className={cn(\"flex items-center\", className)}>\n {steps.map((s, idx) => {\n const n = idx + 1;\n const done = n < current;\n const active = n === current;\n const reachable = s.reachable ?? n <= current;\n return (\n <Fragment key={s.label}>\n <button\n type=\"button\"\n disabled={!reachable}\n onClick={() => reachable && onStep?.(n)}\n aria-current={active ? \"step\" : undefined}\n className={cn(\"flex items-center gap-2 shrink-0\", reachable ? \"cursor-pointer\" : \"cursor-default\")}\n >\n <span\n className={cn(\n \"flex h-7 w-7 items-center justify-center rounded-full text-xs font-bold transition-colors\",\n active\n ? cn(accentBg, \"text-white\")\n : done\n ? cn(\"border-2 border-current bg-transparent\", accentText)\n : \"bg-muted/40 text-muted-foreground\",\n )}\n >\n {done ? <Check className=\"h-3.5 w-3.5\" /> : n}\n </span>\n <span\n className={cn(\n \"hidden sm:inline text-xs sm:text-sm font-semibold transition-colors\",\n active ? \"text-foreground\" : done ? accentText : \"text-muted-foreground\",\n )}\n >\n {s.label}\n </span>\n </button>\n {idx < steps.length - 1 && (\n <span className={cn(\"mx-2 sm:mx-3 h-px flex-1 min-w-3 transition-colors\", done ? accentBg : \"bg-border\")} />\n )}\n </Fragment>\n );\n })}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA8CY;AA9CZ,mBAAyB;AACzB,0BAAsB;AACtB,gBAAmB;AA2BZ,SAAS,QAAQ;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,WAAW;AAAA,EACX;AACF,GAAiB;AACf,SACE,4CAAC,SAAI,eAAW,cAAG,qBAAqB,SAAS,GAC9C,gBAAM,IAAI,CAAC,GAAG,QAAQ;AACrB,UAAM,IAAI,MAAM;AAChB,UAAM,OAAO,IAAI;AACjB,UAAM,SAAS,MAAM;AACrB,UAAM,YAAY,EAAE,aAAa,KAAK;AACtC,WACE,6CAAC,yBACC;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,UAAU,CAAC;AAAA,UACX,SAAS,MAAM,aAAa,SAAS,CAAC;AAAA,UACtC,gBAAc,SAAS,SAAS;AAAA,UAChC,eAAW,cAAG,oCAAoC,YAAY,mBAAmB,gBAAgB;AAAA,UAEjG;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,eAAW;AAAA,kBACT;AAAA,kBACA,aACI,cAAG,UAAU,YAAY,IACzB,WACE,cAAG,0CAA0C,UAAU,IACvD;AAAA,gBACR;AAAA,gBAEC,iBAAO,4CAAC,6BAAM,WAAU,eAAc,IAAK;AAAA;AAAA,YAC9C;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,eAAW;AAAA,kBACT;AAAA,kBACA,SAAS,oBAAoB,OAAO,aAAa;AAAA,gBACnD;AAAA,gBAEC,YAAE;AAAA;AAAA,YACL;AAAA;AAAA;AAAA,MACF;AAAA,MACC,MAAM,MAAM,SAAS,KACpB,4CAAC,UAAK,eAAW,cAAG,sDAAsD,OAAO,WAAW,WAAW,GAAG;AAAA,SA9B/F,EAAE,KAgCjB;AAAA,EAEJ,CAAC,GACH;AAEJ;","names":[]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
interface StepNavStep {
|
|
4
|
+
label: string;
|
|
5
|
+
/** Whether the step can be navigated to. Defaults to "any step up to the
|
|
6
|
+
* current one" when omitted. */
|
|
7
|
+
reachable?: boolean;
|
|
8
|
+
}
|
|
9
|
+
interface StepNavProps {
|
|
10
|
+
/** Ordered steps. */
|
|
11
|
+
steps: StepNavStep[];
|
|
12
|
+
/** 1-based index of the active step. */
|
|
13
|
+
current: number;
|
|
14
|
+
/** Called with the 1-based step index when a reachable step is clicked. */
|
|
15
|
+
onStep?: (step: number) => void;
|
|
16
|
+
/** Tailwind text-color class for the active/completed accent (e.g. "text-brand-rose"). */
|
|
17
|
+
accentText?: string;
|
|
18
|
+
/** Tailwind bg-color class for the active dot + completed connector (e.g. "bg-brand-rose"). */
|
|
19
|
+
accentBg?: string;
|
|
20
|
+
className?: string;
|
|
21
|
+
}
|
|
22
|
+
/** Presentation-only step indicator: a connected row of numbered dots —
|
|
23
|
+
* solid accent for the active step, an outlined check for completed steps,
|
|
24
|
+
* muted for upcoming ones, with the connector filling as you progress.
|
|
25
|
+
* Touch-first (no hover-only affordance); labels collapse on mobile. */
|
|
26
|
+
declare function StepNav({ steps, current, onStep, accentText, accentBg, className, }: StepNavProps): react_jsx_runtime.JSX.Element;
|
|
27
|
+
|
|
28
|
+
export { StepNav, type StepNavProps, type StepNavStep };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
interface StepNavStep {
|
|
4
|
+
label: string;
|
|
5
|
+
/** Whether the step can be navigated to. Defaults to "any step up to the
|
|
6
|
+
* current one" when omitted. */
|
|
7
|
+
reachable?: boolean;
|
|
8
|
+
}
|
|
9
|
+
interface StepNavProps {
|
|
10
|
+
/** Ordered steps. */
|
|
11
|
+
steps: StepNavStep[];
|
|
12
|
+
/** 1-based index of the active step. */
|
|
13
|
+
current: number;
|
|
14
|
+
/** Called with the 1-based step index when a reachable step is clicked. */
|
|
15
|
+
onStep?: (step: number) => void;
|
|
16
|
+
/** Tailwind text-color class for the active/completed accent (e.g. "text-brand-rose"). */
|
|
17
|
+
accentText?: string;
|
|
18
|
+
/** Tailwind bg-color class for the active dot + completed connector (e.g. "bg-brand-rose"). */
|
|
19
|
+
accentBg?: string;
|
|
20
|
+
className?: string;
|
|
21
|
+
}
|
|
22
|
+
/** Presentation-only step indicator: a connected row of numbered dots —
|
|
23
|
+
* solid accent for the active step, an outlined check for completed steps,
|
|
24
|
+
* muted for upcoming ones, with the connector filling as you progress.
|
|
25
|
+
* Touch-first (no hover-only affordance); labels collapse on mobile. */
|
|
26
|
+
declare function StepNav({ steps, current, onStep, accentText, accentBg, className, }: StepNavProps): react_jsx_runtime.JSX.Element;
|
|
27
|
+
|
|
28
|
+
export { StepNav, type StepNavProps, type StepNavStep };
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Fragment } from "react";
|
|
3
|
+
import { Check } from "lucide-react";
|
|
4
|
+
import { cn } from "../utils/cn.js";
|
|
5
|
+
function StepNav({
|
|
6
|
+
steps,
|
|
7
|
+
current,
|
|
8
|
+
onStep,
|
|
9
|
+
accentText = "text-primary",
|
|
10
|
+
accentBg = "bg-primary",
|
|
11
|
+
className
|
|
12
|
+
}) {
|
|
13
|
+
return /* @__PURE__ */ jsx("div", { className: cn("flex items-center", className), children: steps.map((s, idx) => {
|
|
14
|
+
const n = idx + 1;
|
|
15
|
+
const done = n < current;
|
|
16
|
+
const active = n === current;
|
|
17
|
+
const reachable = s.reachable ?? n <= current;
|
|
18
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
19
|
+
/* @__PURE__ */ jsxs(
|
|
20
|
+
"button",
|
|
21
|
+
{
|
|
22
|
+
type: "button",
|
|
23
|
+
disabled: !reachable,
|
|
24
|
+
onClick: () => reachable && onStep?.(n),
|
|
25
|
+
"aria-current": active ? "step" : void 0,
|
|
26
|
+
className: cn("flex items-center gap-2 shrink-0", reachable ? "cursor-pointer" : "cursor-default"),
|
|
27
|
+
children: [
|
|
28
|
+
/* @__PURE__ */ jsx(
|
|
29
|
+
"span",
|
|
30
|
+
{
|
|
31
|
+
className: cn(
|
|
32
|
+
"flex h-7 w-7 items-center justify-center rounded-full text-xs font-bold transition-colors",
|
|
33
|
+
active ? cn(accentBg, "text-white") : done ? cn("border-2 border-current bg-transparent", accentText) : "bg-muted/40 text-muted-foreground"
|
|
34
|
+
),
|
|
35
|
+
children: done ? /* @__PURE__ */ jsx(Check, { className: "h-3.5 w-3.5" }) : n
|
|
36
|
+
}
|
|
37
|
+
),
|
|
38
|
+
/* @__PURE__ */ jsx(
|
|
39
|
+
"span",
|
|
40
|
+
{
|
|
41
|
+
className: cn(
|
|
42
|
+
"hidden sm:inline text-xs sm:text-sm font-semibold transition-colors",
|
|
43
|
+
active ? "text-foreground" : done ? accentText : "text-muted-foreground"
|
|
44
|
+
),
|
|
45
|
+
children: s.label
|
|
46
|
+
}
|
|
47
|
+
)
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
),
|
|
51
|
+
idx < steps.length - 1 && /* @__PURE__ */ jsx("span", { className: cn("mx-2 sm:mx-3 h-px flex-1 min-w-3 transition-colors", done ? accentBg : "bg-border") })
|
|
52
|
+
] }, s.label);
|
|
53
|
+
}) });
|
|
54
|
+
}
|
|
55
|
+
export {
|
|
56
|
+
StepNav
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=step-nav.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/step-nav.tsx"],"sourcesContent":["import { Fragment } from \"react\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"../utils/cn.js\";\n\nexport interface StepNavStep {\n label: string;\n /** Whether the step can be navigated to. Defaults to \"any step up to the\n * current one\" when omitted. */\n reachable?: boolean;\n}\n\nexport interface StepNavProps {\n /** Ordered steps. */\n steps: StepNavStep[];\n /** 1-based index of the active step. */\n current: number;\n /** Called with the 1-based step index when a reachable step is clicked. */\n onStep?: (step: number) => void;\n /** Tailwind text-color class for the active/completed accent (e.g. \"text-brand-rose\"). */\n accentText?: string;\n /** Tailwind bg-color class for the active dot + completed connector (e.g. \"bg-brand-rose\"). */\n accentBg?: string;\n className?: string;\n}\n\n/** Presentation-only step indicator: a connected row of numbered dots —\n * solid accent for the active step, an outlined check for completed steps,\n * muted for upcoming ones, with the connector filling as you progress.\n * Touch-first (no hover-only affordance); labels collapse on mobile. */\nexport function StepNav({\n steps,\n current,\n onStep,\n accentText = \"text-primary\",\n accentBg = \"bg-primary\",\n className,\n}: StepNavProps) {\n return (\n <div className={cn(\"flex items-center\", className)}>\n {steps.map((s, idx) => {\n const n = idx + 1;\n const done = n < current;\n const active = n === current;\n const reachable = s.reachable ?? n <= current;\n return (\n <Fragment key={s.label}>\n <button\n type=\"button\"\n disabled={!reachable}\n onClick={() => reachable && onStep?.(n)}\n aria-current={active ? \"step\" : undefined}\n className={cn(\"flex items-center gap-2 shrink-0\", reachable ? \"cursor-pointer\" : \"cursor-default\")}\n >\n <span\n className={cn(\n \"flex h-7 w-7 items-center justify-center rounded-full text-xs font-bold transition-colors\",\n active\n ? cn(accentBg, \"text-white\")\n : done\n ? cn(\"border-2 border-current bg-transparent\", accentText)\n : \"bg-muted/40 text-muted-foreground\",\n )}\n >\n {done ? <Check className=\"h-3.5 w-3.5\" /> : n}\n </span>\n <span\n className={cn(\n \"hidden sm:inline text-xs sm:text-sm font-semibold transition-colors\",\n active ? \"text-foreground\" : done ? accentText : \"text-muted-foreground\",\n )}\n >\n {s.label}\n </span>\n </button>\n {idx < steps.length - 1 && (\n <span className={cn(\"mx-2 sm:mx-3 h-px flex-1 min-w-3 transition-colors\", done ? accentBg : \"bg-border\")} />\n )}\n </Fragment>\n );\n })}\n </div>\n );\n}\n"],"mappings":"AA8CY,SAiBY,KAjBZ;AA9CZ,SAAS,gBAAgB;AACzB,SAAS,aAAa;AACtB,SAAS,UAAU;AA2BZ,SAAS,QAAQ;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,WAAW;AAAA,EACX;AACF,GAAiB;AACf,SACE,oBAAC,SAAI,WAAW,GAAG,qBAAqB,SAAS,GAC9C,gBAAM,IAAI,CAAC,GAAG,QAAQ;AACrB,UAAM,IAAI,MAAM;AAChB,UAAM,OAAO,IAAI;AACjB,UAAM,SAAS,MAAM;AACrB,UAAM,YAAY,EAAE,aAAa,KAAK;AACtC,WACE,qBAAC,YACC;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,UAAU,CAAC;AAAA,UACX,SAAS,MAAM,aAAa,SAAS,CAAC;AAAA,UACtC,gBAAc,SAAS,SAAS;AAAA,UAChC,WAAW,GAAG,oCAAoC,YAAY,mBAAmB,gBAAgB;AAAA,UAEjG;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW;AAAA,kBACT;AAAA,kBACA,SACI,GAAG,UAAU,YAAY,IACzB,OACE,GAAG,0CAA0C,UAAU,IACvD;AAAA,gBACR;AAAA,gBAEC,iBAAO,oBAAC,SAAM,WAAU,eAAc,IAAK;AAAA;AAAA,YAC9C;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW;AAAA,kBACT;AAAA,kBACA,SAAS,oBAAoB,OAAO,aAAa;AAAA,gBACnD;AAAA,gBAEC,YAAE;AAAA;AAAA,YACL;AAAA;AAAA;AAAA,MACF;AAAA,MACC,MAAM,MAAM,SAAS,KACpB,oBAAC,UAAK,WAAW,GAAG,sDAAsD,OAAO,WAAW,WAAW,GAAG;AAAA,SA9B/F,EAAE,KAgCjB;AAAA,EAEJ,CAAC,GACH;AAEJ;","names":[]}
|
package/dist/index.cjs
CHANGED
|
@@ -29,8 +29,10 @@ __export(index_exports, {
|
|
|
29
29
|
AddressDisplay: () => import_address_display.AddressDisplay,
|
|
30
30
|
AssetCard: () => import_asset_card.AssetCard,
|
|
31
31
|
AssetCardSkeleton: () => import_asset_card.AssetCardSkeleton,
|
|
32
|
+
AssetCollectionBar: () => import_asset_collection_bar.AssetCollectionBar,
|
|
32
33
|
AssetHeaderBlock: () => import_asset_top_sections.AssetHeaderBlock,
|
|
33
34
|
AssetLicenseSummary: () => import_asset_license_summary.AssetLicenseSummary,
|
|
35
|
+
AssetMarketplacePanel: () => import_asset_marketplace_panel.AssetMarketplacePanel,
|
|
34
36
|
AssetMarketsTab: () => import_asset_markets_tab.AssetMarketsTab,
|
|
35
37
|
AssetMediaColumn: () => import_asset_top_sections.AssetMediaColumn,
|
|
36
38
|
AssetOverviewContent: () => import_asset_overview_content.AssetOverviewContent,
|
|
@@ -93,6 +95,7 @@ __export(index_exports, {
|
|
|
93
95
|
ShareButton: () => import_share_button.ShareButton,
|
|
94
96
|
Stagger: () => import_motion_primitives.Stagger,
|
|
95
97
|
StaggerItem: () => import_motion_primitives.StaggerItem,
|
|
98
|
+
StepNav: () => import_step_nav.StepNav,
|
|
96
99
|
TEMPLATE_TRAIT_TYPES: () => import_ip_templates.TEMPLATE_TRAIT_TYPES,
|
|
97
100
|
TYPE_FILTERS: () => import_activity.TYPE_FILTERS,
|
|
98
101
|
TokenCard: () => import_token_card.TokenCard,
|
|
@@ -106,6 +109,7 @@ __export(index_exports, {
|
|
|
106
109
|
formatFdv: () => import_coins.formatFdv,
|
|
107
110
|
ipfsToHttp: () => import_ipfs.ipfsToHttp,
|
|
108
111
|
licenseSummary: () => import_license_summary.licenseSummary,
|
|
112
|
+
parsePriceDisplay: () => import_format.parsePriceDisplay,
|
|
109
113
|
shortenAddress: () => import_address.shortenAddress,
|
|
110
114
|
timeAgo: () => import_time.timeAgo,
|
|
111
115
|
timeUntil: () => import_time.timeUntil,
|
|
@@ -126,6 +130,8 @@ var import_asset_license_summary = require("./components/asset-license-summary.j
|
|
|
126
130
|
var import_asset_markets_tab = require("./components/asset-markets-tab.js");
|
|
127
131
|
var import_parent_attribution_banner = require("./components/parent-attribution-banner.js");
|
|
128
132
|
var import_asset_top_sections = require("./components/asset-top-sections.js");
|
|
133
|
+
var import_asset_collection_bar = require("./components/asset-collection-bar.js");
|
|
134
|
+
var import_asset_marketplace_panel = require("./components/asset-marketplace-panel.js");
|
|
129
135
|
var import_brand = require("./data/brand.js");
|
|
130
136
|
var import_currency_icon = require("./components/currency-icon.js");
|
|
131
137
|
var import_ip_type_badge = require("./components/ip-type-badge.js");
|
|
@@ -165,6 +171,7 @@ var import_portfolio_counts = require("./utils/portfolio-counts.js");
|
|
|
165
171
|
var import_service_header = require("./components/service-header.js");
|
|
166
172
|
var import_claim_rail = require("./components/claim-rail.js");
|
|
167
173
|
var import_service_form_shell = require("./components/service-form-shell.js");
|
|
174
|
+
var import_step_nav = require("./components/step-nav.js");
|
|
168
175
|
// Annotate the CommonJS export names for ESM import in node:
|
|
169
176
|
0 && (module.exports = {
|
|
170
177
|
ACTIVITY_MESSAGES,
|
|
@@ -178,8 +185,10 @@ var import_service_form_shell = require("./components/service-form-shell.js");
|
|
|
178
185
|
AddressDisplay,
|
|
179
186
|
AssetCard,
|
|
180
187
|
AssetCardSkeleton,
|
|
188
|
+
AssetCollectionBar,
|
|
181
189
|
AssetHeaderBlock,
|
|
182
190
|
AssetLicenseSummary,
|
|
191
|
+
AssetMarketplacePanel,
|
|
183
192
|
AssetMarketsTab,
|
|
184
193
|
AssetMediaColumn,
|
|
185
194
|
AssetOverviewContent,
|
|
@@ -242,6 +251,7 @@ var import_service_form_shell = require("./components/service-form-shell.js");
|
|
|
242
251
|
ShareButton,
|
|
243
252
|
Stagger,
|
|
244
253
|
StaggerItem,
|
|
254
|
+
StepNav,
|
|
245
255
|
TEMPLATE_TRAIT_TYPES,
|
|
246
256
|
TYPE_FILTERS,
|
|
247
257
|
TokenCard,
|
|
@@ -255,6 +265,7 @@ var import_service_form_shell = require("./components/service-form-shell.js");
|
|
|
255
265
|
formatFdv,
|
|
256
266
|
ipfsToHttp,
|
|
257
267
|
licenseSummary,
|
|
268
|
+
parsePriceDisplay,
|
|
258
269
|
shortenAddress,
|
|
259
270
|
timeAgo,
|
|
260
271
|
timeUntil,
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["// ── Utils ─────────────────────────────────────────────────────────────────────\nexport { cn } from \"./utils/cn.js\";\nexport { formatDisplayPrice } from \"./utils/format.js\";\nexport { shortenAddress } from \"./utils/address.js\";\nexport { ipfsToHttp } from \"./utils/ipfs.js\";\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 { 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 { 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\";\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;AACA,gBAAmB;AACnB,oBAAmC;AACnC,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,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,6BAA+B;AAG/B,IAAAA,6BAAwE;AAIxE,8BAAkD;AAIlD,8BAAgC;AAOhC,8BAAsC;AAOtC,4BAA8B;AAE9B,wBAA0B;AAM1B,gCAAiC;","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 { 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 { 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"],"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;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,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,6BAA+B;AAG/B,IAAAA,6BAAwE;AAIxE,8BAAkD;AAIlD,8BAAgC;AAOhC,8BAAsC;AAOtC,4BAA8B;AAE9B,wBAA0B;AAM1B,gCAAiC;AAEjC,sBAAwB;","names":["import_launchpad_services"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { cn } from './utils/cn.cjs';
|
|
2
|
-
export { formatDisplayPrice } from './utils/format.cjs';
|
|
2
|
+
export { formatDisplayPrice, parsePriceDisplay } from './utils/format.cjs';
|
|
3
3
|
export { shortenAddress } from './utils/address.cjs';
|
|
4
4
|
export { ipfsToHttp } from './utils/ipfs.cjs';
|
|
5
5
|
export { licenseSummary } from './utils/license-summary.cjs';
|
|
@@ -12,6 +12,8 @@ export { AssetLicenseSummary } from './components/asset-license-summary.cjs';
|
|
|
12
12
|
export { AssetMarketsTab } from './components/asset-markets-tab.cjs';
|
|
13
13
|
export { ParentAttributionBanner, ParentBannerProps } from './components/parent-attribution-banner.cjs';
|
|
14
14
|
export { AssetHeaderBlock, AssetMediaColumn, buildEditionStats } from './components/asset-top-sections.cjs';
|
|
15
|
+
export { AssetCollectionBar, AssetCollectionBarProps, AssetCollectionBarSibling } from './components/asset-collection-bar.cjs';
|
|
16
|
+
export { ApiOrderLike, AssetMarketplacePanel, AssetMarketplacePanelProps } from './components/asset-marketplace-panel.cjs';
|
|
15
17
|
export { BRAND } from './data/brand.cjs';
|
|
16
18
|
export { CurrencyAmount, CurrencyAmountProps, CurrencyIcon, CurrencyIconProps } from './components/currency-icon.cjs';
|
|
17
19
|
export { IP_TYPE_CONFIG, IP_TYPE_MAP, IpTypeBadge, IpTypeBadgeProps, IpTypeConfig } from './components/ip-type-badge.cjs';
|
|
@@ -51,9 +53,10 @@ export { CountableOrder, PortfolioCounts, derivePortfolioCounts } from './utils/
|
|
|
51
53
|
export { ServiceHeader, ServiceHeaderProps } from './components/service-header.cjs';
|
|
52
54
|
export { ClaimRail, ClaimRailProps } from './components/claim-rail.cjs';
|
|
53
55
|
export { ServiceFormShell, ServiceFormShellProps } from './components/service-form-shell.cjs';
|
|
56
|
+
export { StepNav, StepNavProps, StepNavStep } from './components/step-nav.cjs';
|
|
54
57
|
import 'clsx';
|
|
55
58
|
import 'lucide-react';
|
|
56
59
|
import 'react/jsx-runtime';
|
|
57
60
|
import '@medialane/sdk';
|
|
58
|
-
import 'framer-motion';
|
|
59
61
|
import 'react';
|
|
62
|
+
import 'framer-motion';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { cn } from './utils/cn.js';
|
|
2
|
-
export { formatDisplayPrice } from './utils/format.js';
|
|
2
|
+
export { formatDisplayPrice, parsePriceDisplay } from './utils/format.js';
|
|
3
3
|
export { shortenAddress } from './utils/address.js';
|
|
4
4
|
export { ipfsToHttp } from './utils/ipfs.js';
|
|
5
5
|
export { licenseSummary } from './utils/license-summary.js';
|
|
@@ -12,6 +12,8 @@ export { AssetLicenseSummary } from './components/asset-license-summary.js';
|
|
|
12
12
|
export { AssetMarketsTab } from './components/asset-markets-tab.js';
|
|
13
13
|
export { ParentAttributionBanner, ParentBannerProps } from './components/parent-attribution-banner.js';
|
|
14
14
|
export { AssetHeaderBlock, AssetMediaColumn, buildEditionStats } from './components/asset-top-sections.js';
|
|
15
|
+
export { AssetCollectionBar, AssetCollectionBarProps, AssetCollectionBarSibling } from './components/asset-collection-bar.js';
|
|
16
|
+
export { ApiOrderLike, AssetMarketplacePanel, AssetMarketplacePanelProps } from './components/asset-marketplace-panel.js';
|
|
15
17
|
export { BRAND } from './data/brand.js';
|
|
16
18
|
export { CurrencyAmount, CurrencyAmountProps, CurrencyIcon, CurrencyIconProps } from './components/currency-icon.js';
|
|
17
19
|
export { IP_TYPE_CONFIG, IP_TYPE_MAP, IpTypeBadge, IpTypeBadgeProps, IpTypeConfig } from './components/ip-type-badge.js';
|
|
@@ -51,9 +53,10 @@ export { CountableOrder, PortfolioCounts, derivePortfolioCounts } from './utils/
|
|
|
51
53
|
export { ServiceHeader, ServiceHeaderProps } from './components/service-header.js';
|
|
52
54
|
export { ClaimRail, ClaimRailProps } from './components/claim-rail.js';
|
|
53
55
|
export { ServiceFormShell, ServiceFormShellProps } from './components/service-form-shell.js';
|
|
56
|
+
export { StepNav, StepNavProps, StepNavStep } from './components/step-nav.js';
|
|
54
57
|
import 'clsx';
|
|
55
58
|
import 'lucide-react';
|
|
56
59
|
import 'react/jsx-runtime';
|
|
57
60
|
import '@medialane/sdk';
|
|
58
|
-
import 'framer-motion';
|
|
59
61
|
import 'react';
|
|
62
|
+
import 'framer-motion';
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { cn } from "./utils/cn.js";
|
|
2
|
-
import { formatDisplayPrice } from "./utils/format.js";
|
|
2
|
+
import { formatDisplayPrice, parsePriceDisplay } from "./utils/format.js";
|
|
3
3
|
import { shortenAddress } from "./utils/address.js";
|
|
4
4
|
import { ipfsToHttp } from "./utils/ipfs.js";
|
|
5
5
|
import { licenseSummary } from "./utils/license-summary.js";
|
|
@@ -25,6 +25,8 @@ import { AssetLicenseSummary } from "./components/asset-license-summary.js";
|
|
|
25
25
|
import { AssetMarketsTab } from "./components/asset-markets-tab.js";
|
|
26
26
|
import { ParentAttributionBanner } from "./components/parent-attribution-banner.js";
|
|
27
27
|
import { AssetMediaColumn, AssetHeaderBlock, buildEditionStats } from "./components/asset-top-sections.js";
|
|
28
|
+
import { AssetCollectionBar } from "./components/asset-collection-bar.js";
|
|
29
|
+
import { AssetMarketplacePanel } from "./components/asset-marketplace-panel.js";
|
|
28
30
|
import { BRAND } from "./data/brand.js";
|
|
29
31
|
import { CurrencyIcon, CurrencyAmount } from "./components/currency-icon.js";
|
|
30
32
|
import { IpTypeBadge, IP_TYPE_CONFIG, IP_TYPE_MAP } from "./components/ip-type-badge.js";
|
|
@@ -70,6 +72,7 @@ import { derivePortfolioCounts } from "./utils/portfolio-counts.js";
|
|
|
70
72
|
import { ServiceHeader } from "./components/service-header.js";
|
|
71
73
|
import { ClaimRail } from "./components/claim-rail.js";
|
|
72
74
|
import { ServiceFormShell } from "./components/service-form-shell.js";
|
|
75
|
+
import { StepNav } from "./components/step-nav.js";
|
|
73
76
|
export {
|
|
74
77
|
ACTIVITY_MESSAGES,
|
|
75
78
|
ACTIVITY_TYPE_CONFIG,
|
|
@@ -82,8 +85,10 @@ export {
|
|
|
82
85
|
AddressDisplay,
|
|
83
86
|
AssetCard,
|
|
84
87
|
AssetCardSkeleton,
|
|
88
|
+
AssetCollectionBar,
|
|
85
89
|
AssetHeaderBlock,
|
|
86
90
|
AssetLicenseSummary,
|
|
91
|
+
AssetMarketplacePanel,
|
|
87
92
|
AssetMarketsTab,
|
|
88
93
|
AssetMediaColumn,
|
|
89
94
|
AssetOverviewContent,
|
|
@@ -146,6 +151,7 @@ export {
|
|
|
146
151
|
ShareButton,
|
|
147
152
|
Stagger,
|
|
148
153
|
StaggerItem,
|
|
154
|
+
StepNav,
|
|
149
155
|
TEMPLATE_TRAIT_TYPES,
|
|
150
156
|
TYPE_FILTERS,
|
|
151
157
|
TokenCard,
|
|
@@ -159,6 +165,7 @@ export {
|
|
|
159
165
|
formatFdv,
|
|
160
166
|
ipfsToHttp,
|
|
161
167
|
licenseSummary,
|
|
168
|
+
parsePriceDisplay,
|
|
162
169
|
shortenAddress,
|
|
163
170
|
timeAgo,
|
|
164
171
|
timeUntil,
|