@asteby/metacore-auth 4.1.0 → 6.0.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/dist/showcases/blocks/feature-list.d.ts +18 -0
- package/dist/showcases/blocks/feature-list.d.ts.map +1 -0
- package/dist/showcases/blocks/feature-list.js +19 -0
- package/dist/showcases/blocks/feature-list.js.map +1 -0
- package/dist/showcases/blocks/hero-panel.d.ts +16 -0
- package/dist/showcases/blocks/hero-panel.d.ts.map +1 -0
- package/dist/showcases/blocks/hero-panel.js +18 -0
- package/dist/showcases/blocks/hero-panel.js.map +1 -0
- package/dist/showcases/blocks/index.d.ts +5 -0
- package/dist/showcases/blocks/index.d.ts.map +1 -0
- package/dist/showcases/blocks/index.js +12 -0
- package/dist/showcases/blocks/index.js.map +1 -0
- package/dist/showcases/blocks/stat-row.d.ts +15 -0
- package/dist/showcases/blocks/stat-row.d.ts.map +1 -0
- package/dist/showcases/blocks/stat-row.js +19 -0
- package/dist/showcases/blocks/stat-row.js.map +1 -0
- package/dist/showcases/blocks/tile-grid.d.ts +31 -0
- package/dist/showcases/blocks/tile-grid.d.ts.map +1 -0
- package/dist/showcases/blocks/tile-grid.js +27 -0
- package/dist/showcases/blocks/tile-grid.js.map +1 -0
- package/dist/showcases/index.d.ts +1 -2
- package/dist/showcases/index.d.ts.map +1 -1
- package/dist/showcases/index.js +4 -6
- package/dist/showcases/index.js.map +1 -1
- package/package.json +8 -12
- package/dist/showcases/marketplace.d.ts +0 -10
- package/dist/showcases/marketplace.d.ts.map +0 -1
- package/dist/showcases/marketplace.js +0 -26
- package/dist/showcases/marketplace.js.map +0 -1
- package/dist/showcases/whatsapp.d.ts +0 -10
- package/dist/showcases/whatsapp.d.ts.map +0 -1
- package/dist/showcases/whatsapp.js +0 -61
- package/dist/showcases/whatsapp.js.map +0 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ComponentType, ReactNode } from 'react';
|
|
2
|
+
export interface Feature {
|
|
3
|
+
key: string;
|
|
4
|
+
Icon?: ComponentType<{
|
|
5
|
+
className?: string;
|
|
6
|
+
}>;
|
|
7
|
+
title: ReactNode;
|
|
8
|
+
description?: ReactNode;
|
|
9
|
+
}
|
|
10
|
+
export interface FeatureListProps {
|
|
11
|
+
features: Feature[];
|
|
12
|
+
noAnimate?: boolean;
|
|
13
|
+
/** Stagger between rows, ms. Default 70. */
|
|
14
|
+
stagger?: number;
|
|
15
|
+
className?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function FeatureList({ features, noAnimate, stagger, className, }: FeatureListProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
//# sourceMappingURL=feature-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-list.d.ts","sourceRoot":"","sources":["../../../src/showcases/blocks/feature-list.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGrD,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC5C,KAAK,EAAE,SAAS,CAAA;IAChB,WAAW,CAAC,EAAE,SAAS,CAAA;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,SAAS,EACT,OAAY,EACZ,SAAS,GACV,EAAE,gBAAgB,2CAmClB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Vertical list of icon + title + description rows. Generic explainer block
|
|
3
|
+
// — auth showcases ("what you get"), settings dashboards, onboarding tours,
|
|
4
|
+
// pricing-tier breakdowns. No product assumptions.
|
|
5
|
+
import { motion } from 'framer-motion';
|
|
6
|
+
import { cn } from '@asteby/metacore-ui/lib';
|
|
7
|
+
export function FeatureList({ features, noAnimate, stagger = 70, className, }) {
|
|
8
|
+
return (_jsx("div", { className: cn('space-y-4', className), children: features.map((feature, i) => {
|
|
9
|
+
const animProps = noAnimate
|
|
10
|
+
? {}
|
|
11
|
+
: {
|
|
12
|
+
initial: { opacity: 0, x: -8 },
|
|
13
|
+
animate: { opacity: 1, x: 0 },
|
|
14
|
+
transition: { delay: 0.1 + i * (stagger / 1000), duration: 0.35 },
|
|
15
|
+
};
|
|
16
|
+
return (_jsxs(motion.div, { ...animProps, className: "flex items-start gap-3", children: [feature.Icon && (_jsx("div", { className: "size-9 rounded-lg bg-primary/10 flex items-center justify-center flex-shrink-0 mt-0.5", children: _jsx(feature.Icon, { className: "size-4 text-primary" }) })), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("div", { className: "text-sm font-semibold", children: feature.title }), feature.description && (_jsx("div", { className: "text-xs text-muted-foreground mt-0.5 leading-relaxed", children: feature.description }))] })] }, feature.key));
|
|
17
|
+
}) }));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=feature-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-list.js","sourceRoot":"","sources":["../../../src/showcases/blocks/feature-list.tsx"],"names":[],"mappings":";AAAA,4EAA4E;AAC5E,4EAA4E;AAC5E,mDAAmD;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEtC,OAAO,EAAE,EAAE,EAAE,MAAM,yBAAyB,CAAA;AAiB5C,MAAM,UAAU,WAAW,CAAC,EAC1B,QAAQ,EACR,SAAS,EACT,OAAO,GAAG,EAAE,EACZ,SAAS,GACQ;IACjB,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,YACvC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;YAC3B,MAAM,SAAS,GAAG,SAAS;gBACzB,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC;oBACE,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;oBAC9B,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;oBAC7B,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;iBAClE,CAAA;YACL,OAAO,CACL,MAAC,MAAM,CAAC,GAAG,OAEJ,SAAoB,EACzB,SAAS,EAAC,wBAAwB,aAEjC,OAAO,CAAC,IAAI,IAAI,CACf,cAAK,SAAS,EAAC,uFAAuF,YACpG,KAAC,OAAO,CAAC,IAAI,IAAC,SAAS,EAAC,qBAAqB,GAAG,GAC5C,CACP,EACD,eAAK,SAAS,EAAC,gBAAgB,aAC7B,cAAK,SAAS,EAAC,uBAAuB,YAAE,OAAO,CAAC,KAAK,GAAO,EAC3D,OAAO,CAAC,WAAW,IAAI,CACtB,cAAK,SAAS,EAAC,sDAAsD,YAClE,OAAO,CAAC,WAAW,GAChB,CACP,IACG,KAhBD,OAAO,CAAC,GAAG,CAiBL,CACd,CAAA;QACH,CAAC,CAAC,GACE,CACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface HeroPanelProps {
|
|
3
|
+
title: ReactNode;
|
|
4
|
+
subtitle?: ReactNode;
|
|
5
|
+
/** Optional eyebrow rendered above the title (badge, pill, etc). */
|
|
6
|
+
eyebrow?: ReactNode;
|
|
7
|
+
/** Optional content rendered below the subtitle (CTAs, badges). */
|
|
8
|
+
footer?: ReactNode;
|
|
9
|
+
/** Default `'center'`. */
|
|
10
|
+
align?: 'left' | 'center';
|
|
11
|
+
/** Skip the entry animation. */
|
|
12
|
+
noAnimate?: boolean;
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function HeroPanel({ title, subtitle, eyebrow, footer, align, noAnimate, className, }: HeroPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
//# sourceMappingURL=hero-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hero-panel.d.ts","sourceRoot":"","sources":["../../../src/showcases/blocks/hero-panel.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,SAAS,CAAA;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,oEAAoE;IACpE,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,mEAAmE;IACnE,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;IACzB,gCAAgC;IAChC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,OAAO,EACP,MAAM,EACN,KAAgB,EAChB,SAAS,EACT,SAAS,GACV,EAAE,cAAc,2CA0BhB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Title + subtitle stacked block. Use it as the top of any auth showcase
|
|
3
|
+
// (or any hero zone in the app — module dashboards, settings empty states,
|
|
4
|
+
// marketing surfaces). No brand or product assumptions.
|
|
5
|
+
import { motion } from 'framer-motion';
|
|
6
|
+
import { cn } from '@asteby/metacore-ui/lib';
|
|
7
|
+
export function HeroPanel({ title, subtitle, eyebrow, footer, align = 'center', noAnimate, className, }) {
|
|
8
|
+
const Wrap = noAnimate ? 'div' : motion.div;
|
|
9
|
+
const animProps = noAnimate
|
|
10
|
+
? {}
|
|
11
|
+
: {
|
|
12
|
+
initial: { opacity: 0, y: 16 },
|
|
13
|
+
animate: { opacity: 1, y: 0 },
|
|
14
|
+
transition: { duration: 0.5 },
|
|
15
|
+
};
|
|
16
|
+
return (_jsxs(Wrap, { ...animProps, className: cn('max-w-md', align === 'center' ? 'text-center mx-auto' : 'text-left', className), children: [eyebrow && _jsx("div", { className: "mb-3", children: eyebrow }), _jsx("h2", { className: "text-3xl font-bold tracking-tight", children: title }), subtitle && (_jsx("p", { className: "text-muted-foreground text-sm leading-relaxed mt-3", children: subtitle })), footer && _jsx("div", { className: "mt-6", children: footer })] }));
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=hero-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hero-panel.js","sourceRoot":"","sources":["../../../src/showcases/blocks/hero-panel.tsx"],"names":[],"mappings":";AAAA,yEAAyE;AACzE,2EAA2E;AAC3E,wDAAwD;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEtC,OAAO,EAAE,EAAE,EAAE,MAAM,yBAAyB,CAAA;AAgB5C,MAAM,UAAU,SAAS,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,OAAO,EACP,MAAM,EACN,KAAK,GAAG,QAAQ,EAChB,SAAS,EACT,SAAS,GACM;IACf,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAA;IAC3C,MAAM,SAAS,GAAG,SAAS;QACzB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC;YACE,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;YAC9B,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YAC7B,UAAU,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;SAC9B,CAAA;IACL,OAAO,CACL,MAAC,IAAI,OACE,SAAoB,EACzB,SAAS,EAAE,EAAE,CACX,UAAU,EACV,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,WAAW,EACxD,SAAS,CACV,aAEA,OAAO,IAAI,cAAK,SAAS,EAAC,MAAM,YAAE,OAAO,GAAO,EACjD,aAAI,SAAS,EAAC,mCAAmC,YAAE,KAAK,GAAM,EAC7D,QAAQ,IAAI,CACX,YAAG,SAAS,EAAC,oDAAoD,YAAE,QAAQ,GAAK,CACjF,EACA,MAAM,IAAI,cAAK,SAAS,EAAC,MAAM,YAAE,MAAM,GAAO,IAC1C,CACR,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { HeroPanel, type HeroPanelProps } from './hero-panel';
|
|
2
|
+
export { TileGrid, type Tile, type TileGridProps } from './tile-grid';
|
|
3
|
+
export { FeatureList, type Feature, type FeatureListProps, } from './feature-list';
|
|
4
|
+
export { StatRow, type Stat, type StatRowProps } from './stat-row';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/showcases/blocks/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7D,OAAO,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AACrE,OAAO,EACL,WAAW,EACX,KAAK,OAAO,EACZ,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Composable, brand-agnostic blocks for building auth showcases — and any
|
|
2
|
+
// other hero zone in an app (dashboards, empty states, marketing surfaces).
|
|
3
|
+
//
|
|
4
|
+
// Apps build their own showcase by composing these. The SDK does not ship
|
|
5
|
+
// product-specific showcases (chat mockups, marketplace tiles, etc) — those
|
|
6
|
+
// live in each app's `features/auth/showcase/`, since they encode the app's
|
|
7
|
+
// narrative and copy.
|
|
8
|
+
export { HeroPanel } from './hero-panel';
|
|
9
|
+
export { TileGrid } from './tile-grid';
|
|
10
|
+
export { FeatureList, } from './feature-list';
|
|
11
|
+
export { StatRow } from './stat-row';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/showcases/blocks/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,4EAA4E;AAC5E,EAAE;AACF,0EAA0E;AAC1E,4EAA4E;AAC5E,4EAA4E;AAC5E,sBAAsB;AACtB,OAAO,EAAE,SAAS,EAAuB,MAAM,cAAc,CAAA;AAC7D,OAAO,EAAE,QAAQ,EAAiC,MAAM,aAAa,CAAA;AACrE,OAAO,EACL,WAAW,GAGZ,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,OAAO,EAAgC,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface Stat {
|
|
3
|
+
key: string;
|
|
4
|
+
/** The big number (or any node). */
|
|
5
|
+
value: ReactNode;
|
|
6
|
+
/** The label under the number. */
|
|
7
|
+
label: ReactNode;
|
|
8
|
+
}
|
|
9
|
+
export interface StatRowProps {
|
|
10
|
+
stats: Stat[];
|
|
11
|
+
noAnimate?: boolean;
|
|
12
|
+
className?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function StatRow({ stats, noAnimate, className }: StatRowProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
//# sourceMappingURL=stat-row.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stat-row.d.ts","sourceRoot":"","sources":["../../../src/showcases/blocks/stat-row.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,MAAM,WAAW,IAAI;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,oCAAoC;IACpC,KAAK,EAAE,SAAS,CAAA;IAChB,kCAAkC;IAClC,KAAK,EAAE,SAAS,CAAA;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,IAAI,EAAE,CAAA;IACb,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,YAAY,2CAwBpE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Horizontal row of headline metrics. "1.2M+ messages", "+2k orgs",
|
|
3
|
+
// "99.9% uptime" — anywhere a quick credibility band makes sense (auth
|
|
4
|
+
// showcase footer, dashboard summary, marketing strip).
|
|
5
|
+
import { motion } from 'framer-motion';
|
|
6
|
+
import { cn } from '@asteby/metacore-ui/lib';
|
|
7
|
+
export function StatRow({ stats, noAnimate, className }) {
|
|
8
|
+
return (_jsx("div", { className: cn('flex items-center justify-center gap-8 flex-wrap', className), children: stats.map((stat, i) => {
|
|
9
|
+
const animProps = noAnimate
|
|
10
|
+
? {}
|
|
11
|
+
: {
|
|
12
|
+
initial: { opacity: 0, y: 8 },
|
|
13
|
+
animate: { opacity: 1, y: 0 },
|
|
14
|
+
transition: { delay: 0.1 + i * 0.06, duration: 0.35 },
|
|
15
|
+
};
|
|
16
|
+
return (_jsxs(motion.div, { ...animProps, className: "text-center", children: [_jsx("div", { className: "text-2xl font-bold tracking-tight", children: stat.value }), _jsx("div", { className: "text-xs text-muted-foreground mt-0.5", children: stat.label })] }, stat.key));
|
|
17
|
+
}) }));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=stat-row.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stat-row.js","sourceRoot":"","sources":["../../../src/showcases/blocks/stat-row.tsx"],"names":[],"mappings":";AAAA,oEAAoE;AACpE,uEAAuE;AACvE,wDAAwD;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEtC,OAAO,EAAE,EAAE,EAAE,MAAM,yBAAyB,CAAA;AAgB5C,MAAM,UAAU,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAgB;IACnE,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,kDAAkD,EAAE,SAAS,CAAC,YAC9E,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACrB,MAAM,SAAS,GAAG,SAAS;gBACzB,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC;oBACE,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;oBAC7B,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;oBAC7B,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;iBACtD,CAAA;YACL,OAAO,CACL,MAAC,MAAM,CAAC,GAAG,OAEJ,SAAoB,EACzB,SAAS,EAAC,aAAa,aAEvB,cAAK,SAAS,EAAC,mCAAmC,YAAE,IAAI,CAAC,KAAK,GAAO,EACrE,cAAK,SAAS,EAAC,sCAAsC,YAAE,IAAI,CAAC,KAAK,GAAO,KALnE,IAAI,CAAC,GAAG,CAMF,CACd,CAAA;QACH,CAAC,CAAC,GACE,CACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ComponentType, ReactNode } from 'react';
|
|
2
|
+
export interface Tile {
|
|
3
|
+
/** Stable key. */
|
|
4
|
+
key: string;
|
|
5
|
+
/** Primary text under the icon. */
|
|
6
|
+
label: ReactNode;
|
|
7
|
+
/** Optional secondary text (category, tag, count). */
|
|
8
|
+
tag?: ReactNode;
|
|
9
|
+
/** Lucide-style icon component (or anything that renders SVG). Optional. */
|
|
10
|
+
Icon?: ComponentType<{
|
|
11
|
+
className?: string;
|
|
12
|
+
}>;
|
|
13
|
+
/** Image source — used instead of `Icon` if provided. */
|
|
14
|
+
imageSrc?: string;
|
|
15
|
+
/** Click handler. Tile becomes a button when set. */
|
|
16
|
+
onClick?: () => void;
|
|
17
|
+
}
|
|
18
|
+
export interface TileGridProps {
|
|
19
|
+
tiles: Tile[];
|
|
20
|
+
/** Columns at lg+ (default 3). Mobile is always 2. */
|
|
21
|
+
columns?: 2 | 3 | 4;
|
|
22
|
+
/** Skip the staggered entry animation. */
|
|
23
|
+
noAnimate?: boolean;
|
|
24
|
+
/** Time between tile entries when animating, ms. Default 50. */
|
|
25
|
+
stagger?: number;
|
|
26
|
+
className?: string;
|
|
27
|
+
/** Per-tile className (use to tweak padding/border without subclassing). */
|
|
28
|
+
tileClassName?: string;
|
|
29
|
+
}
|
|
30
|
+
export declare function TileGrid({ tiles, columns, noAnimate, stagger, className, tileClassName, }: TileGridProps): import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
//# sourceMappingURL=tile-grid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tile-grid.d.ts","sourceRoot":"","sources":["../../../src/showcases/blocks/tile-grid.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGrD,MAAM,WAAW,IAAI;IACnB,kBAAkB;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,mCAAmC;IACnC,KAAK,EAAE,SAAS,CAAA;IAChB,sDAAsD;IACtD,GAAG,CAAC,EAAE,SAAS,CAAA;IACf,4EAA4E;IAC5E,IAAI,CAAC,EAAE,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC5C,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,IAAI,EAAE,CAAA;IACb,sDAAsD;IACtD,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACnB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,OAAW,EACX,SAAS,EACT,OAAY,EACZ,SAAS,EACT,aAAa,GACd,EAAE,aAAa,2CA8Df"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Grid of icon + label tiles. Generic enough to back: marketplace addon
|
|
3
|
+
// previews, ERP module pickers, settings dashboards, "what's included" auth
|
|
4
|
+
// showcases, integration galleries. Apps pass `tiles` and choose layout.
|
|
5
|
+
import { motion } from 'framer-motion';
|
|
6
|
+
import { cn } from '@asteby/metacore-ui/lib';
|
|
7
|
+
export function TileGrid({ tiles, columns = 3, noAnimate, stagger = 50, className, tileClassName, }) {
|
|
8
|
+
const colsClass = columns === 2 ? 'lg:grid-cols-2' : columns === 4 ? 'lg:grid-cols-4' : 'lg:grid-cols-3';
|
|
9
|
+
return (_jsx("div", { className: cn('grid grid-cols-2 gap-3', colsClass, className), children: tiles.map((tile, i) => {
|
|
10
|
+
const content = (_jsxs("div", { className: "flex flex-col items-center text-center gap-2", children: [_jsx("div", { className: "size-10 rounded-lg bg-primary/10 flex items-center justify-center group-hover:bg-primary/20 transition-colors overflow-hidden", children: tile.imageSrc ? (_jsx("img", { src: tile.imageSrc, alt: "", className: "size-full object-cover" })) : tile.Icon ? (_jsx(tile.Icon, { className: "size-5 text-primary" })) : null }), _jsxs("div", { children: [_jsx("div", { className: "text-xs font-semibold leading-tight", children: tile.label }), tile.tag && (_jsx("div", { className: "text-[10px] text-muted-foreground mt-0.5", children: tile.tag }))] })] }));
|
|
11
|
+
const innerProps = {
|
|
12
|
+
className: cn('group relative rounded-xl border bg-card p-3 shadow-sm', 'hover:shadow-md hover:border-primary/30 transition-all', tile.onClick && 'cursor-pointer', tileClassName),
|
|
13
|
+
};
|
|
14
|
+
const animProps = noAnimate
|
|
15
|
+
? {}
|
|
16
|
+
: {
|
|
17
|
+
initial: { opacity: 0, scale: 0.92 },
|
|
18
|
+
animate: { opacity: 1, scale: 1 },
|
|
19
|
+
transition: { delay: 0.1 + i * (stagger / 1000), duration: 0.35 },
|
|
20
|
+
};
|
|
21
|
+
if (tile.onClick) {
|
|
22
|
+
return (_jsx(motion.button, { type: "button", onClick: tile.onClick, ...animProps, ...innerProps, children: content }, tile.key));
|
|
23
|
+
}
|
|
24
|
+
return (_jsx(motion.div, { ...animProps, ...innerProps, children: content }, tile.key));
|
|
25
|
+
}) }));
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=tile-grid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tile-grid.js","sourceRoot":"","sources":["../../../src/showcases/blocks/tile-grid.tsx"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,4EAA4E;AAC5E,yEAAyE;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEtC,OAAO,EAAE,EAAE,EAAE,MAAM,yBAAyB,CAAA;AA8B5C,MAAM,UAAU,QAAQ,CAAC,EACvB,KAAK,EACL,OAAO,GAAG,CAAC,EACX,SAAS,EACT,OAAO,GAAG,EAAE,EACZ,SAAS,EACT,aAAa,GACC;IACd,MAAM,SAAS,GACb,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAA;IACxF,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,wBAAwB,EAAE,SAAS,EAAE,SAAS,CAAC,YAC/D,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACrB,MAAM,OAAO,GAAG,CACd,eAAK,SAAS,EAAC,8CAA8C,aAC3D,cAAK,SAAS,EAAC,+HAA+H,YAC3I,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CACf,cAAK,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAC,EAAE,EAAC,SAAS,EAAC,wBAAwB,GAAG,CACtE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CACd,KAAC,IAAI,CAAC,IAAI,IAAC,SAAS,EAAC,qBAAqB,GAAG,CAC9C,CAAC,CAAC,CAAC,IAAI,GACJ,EACN,0BACE,cAAK,SAAS,EAAC,qCAAqC,YAAE,IAAI,CAAC,KAAK,GAAO,EACtE,IAAI,CAAC,GAAG,IAAI,CACX,cAAK,SAAS,EAAC,0CAA0C,YAAE,IAAI,CAAC,GAAG,GAAO,CAC3E,IACG,IACF,CACP,CAAA;YAED,MAAM,UAAU,GAAG;gBACjB,SAAS,EAAE,EAAE,CACX,wDAAwD,EACxD,wDAAwD,EACxD,IAAI,CAAC,OAAO,IAAI,gBAAgB,EAChC,aAAa,CACd;aACF,CAAA;YAED,MAAM,SAAS,GAAG,SAAS;gBACzB,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC;oBACE,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;oBACpC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;oBACjC,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;iBAClE,CAAA;YAEL,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,CACL,KAAC,MAAM,CAAC,MAAM,IAEZ,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,IAAI,CAAC,OAAO,KAChB,SAAoB,KACrB,UAAU,YAEb,OAAO,IANH,IAAI,CAAC,GAAG,CAOC,CACjB,CAAA;YACH,CAAC;YACD,OAAO,CACL,KAAC,MAAM,CAAC,GAAG,OAAqB,SAAoB,KAAM,UAAU,YACjE,OAAO,IADO,IAAI,CAAC,GAAG,CAEZ,CACd,CAAA;QACH,CAAC,CAAC,GACE,CACP,CAAA;AACH,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export { WhatsAppShowcase, ChatMockup, type WhatsAppShowcaseProps } from './whatsapp';
|
|
2
|
-
export { MarketplaceShowcase, type MarketplaceShowcaseProps } from './marketplace';
|
|
3
1
|
export { GenericShowcase, type GenericShowcaseProps } from './generic';
|
|
2
|
+
export { HeroPanel, TileGrid, FeatureList, StatRow, type HeroPanelProps, type TileGridProps, type Tile, type FeatureListProps, type Feature, type StatRowProps, type Stat, } from './blocks';
|
|
4
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/showcases/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/showcases/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,WAAW,CAAA;AACtE,OAAO,EACL,SAAS,EACT,QAAQ,EACR,WAAW,EACX,OAAO,EACP,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,IAAI,EACT,KAAK,gBAAgB,EACrB,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,IAAI,GACV,MAAM,UAAU,CAAA"}
|
package/dist/showcases/index.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
// imports, prefer the deep paths (`/showcases/whatsapp` etc).
|
|
5
|
-
export { WhatsAppShowcase, ChatMockup } from './whatsapp';
|
|
6
|
-
export { MarketplaceShowcase } from './marketplace';
|
|
1
|
+
// Brand-neutral fallback showcase + composable building blocks.
|
|
2
|
+
// Apps that want a custom showcase compose the blocks (HeroPanel, TileGrid,
|
|
3
|
+
// FeatureList, StatRow) from `@asteby/metacore-auth/showcases/blocks`.
|
|
7
4
|
export { GenericShowcase } from './generic';
|
|
5
|
+
export { HeroPanel, TileGrid, FeatureList, StatRow, } from './blocks';
|
|
8
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/showcases/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/showcases/index.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,4EAA4E;AAC5E,uEAAuE;AACvE,OAAO,EAAE,eAAe,EAA6B,MAAM,WAAW,CAAA;AACtE,OAAO,EACL,SAAS,EACT,QAAQ,EACR,WAAW,EACX,OAAO,GAQR,MAAM,UAAU,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@asteby/metacore-auth",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.0",
|
|
4
4
|
"description": "Metacore auth kit — Zustand store, API client factory, login/signup/forgot pages, guards for TanStack Router",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -48,17 +48,13 @@
|
|
|
48
48
|
"types": "./dist/showcases/index.d.ts",
|
|
49
49
|
"import": "./dist/showcases/index.js"
|
|
50
50
|
},
|
|
51
|
-
"./showcases/whatsapp": {
|
|
52
|
-
"types": "./dist/showcases/whatsapp.d.ts",
|
|
53
|
-
"import": "./dist/showcases/whatsapp.js"
|
|
54
|
-
},
|
|
55
|
-
"./showcases/marketplace": {
|
|
56
|
-
"types": "./dist/showcases/marketplace.d.ts",
|
|
57
|
-
"import": "./dist/showcases/marketplace.js"
|
|
58
|
-
},
|
|
59
51
|
"./showcases/generic": {
|
|
60
52
|
"types": "./dist/showcases/generic.d.ts",
|
|
61
53
|
"import": "./dist/showcases/generic.js"
|
|
54
|
+
},
|
|
55
|
+
"./showcases/blocks": {
|
|
56
|
+
"types": "./dist/showcases/blocks/index.d.ts",
|
|
57
|
+
"import": "./dist/showcases/blocks/index.js"
|
|
62
58
|
}
|
|
63
59
|
},
|
|
64
60
|
"peerDependencies": {
|
|
@@ -67,7 +63,7 @@
|
|
|
67
63
|
"@tanstack/react-router": ">=1.100",
|
|
68
64
|
"framer-motion": ">=10",
|
|
69
65
|
"zustand": ">=5",
|
|
70
|
-
"@asteby/metacore-ui": "^0.
|
|
66
|
+
"@asteby/metacore-ui": "^0.7.0"
|
|
71
67
|
},
|
|
72
68
|
"peerDependenciesMeta": {
|
|
73
69
|
"framer-motion": {
|
|
@@ -85,12 +81,12 @@
|
|
|
85
81
|
"@types/react": "^19.0.0",
|
|
86
82
|
"@types/react-dom": "^19.0.0",
|
|
87
83
|
"@tanstack/react-router": "^1.168.0",
|
|
88
|
-
"framer-motion": "^
|
|
84
|
+
"framer-motion": "^12.0.0",
|
|
89
85
|
"react": "^19.2.4",
|
|
90
86
|
"react-dom": "^19.2.4",
|
|
91
87
|
"typescript": "^5.6.0",
|
|
92
88
|
"zustand": "^5.0.0",
|
|
93
|
-
"@asteby/metacore-ui": "0.
|
|
89
|
+
"@asteby/metacore-ui": "0.7.0"
|
|
94
90
|
},
|
|
95
91
|
"publishConfig": {
|
|
96
92
|
"access": "public"
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export type MarketplaceShowcaseProps = {
|
|
2
|
-
/** Headline displayed above the addon grid. */
|
|
3
|
-
title?: string;
|
|
4
|
-
/** Subheadline explaining what the marketplace is. */
|
|
5
|
-
subtitle?: string;
|
|
6
|
-
/** Override the bottom-bar tagline. */
|
|
7
|
-
tagline?: string;
|
|
8
|
-
};
|
|
9
|
-
export declare function MarketplaceShowcase({ title, subtitle, tagline, }?: MarketplaceShowcaseProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
-
//# sourceMappingURL=marketplace.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"marketplace.d.ts","sourceRoot":"","sources":["../../src/showcases/marketplace.tsx"],"names":[],"mappings":"AAiBA,MAAM,MAAM,wBAAwB,GAAG;IACrC,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAcD,wBAAgB,mBAAmB,CAAC,EAClC,KAAkC,EAClC,QAA6G,EAC7G,OAA0D,GAC3D,GAAE,wBAA6B,2CAoD/B"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
// Developer-marketplace showcase. Pitch: "build, sign, ship addons that any
|
|
3
|
-
// metacore host can install in one click." Renders a hero card with a
|
|
4
|
-
// rotating set of addon tiles to convey breadth of the catalog without
|
|
5
|
-
// hardcoding any specific addon names.
|
|
6
|
-
import { motion } from 'framer-motion';
|
|
7
|
-
import { Boxes, Plug, ShieldCheck, Zap, Bot, Rocket, Sparkles, Globe, } from 'lucide-react';
|
|
8
|
-
import { cn } from '@asteby/metacore-ui/lib';
|
|
9
|
-
const addons = [
|
|
10
|
-
{ name: 'Fiscal MX', tag: 'Compliance', Icon: ShieldCheck },
|
|
11
|
-
{ name: 'WhatsApp', tag: 'Messaging', Icon: Bot },
|
|
12
|
-
{ name: 'Stripe', tag: 'Payments', Icon: Zap },
|
|
13
|
-
{ name: 'Shopify', tag: 'Ecommerce', Icon: Boxes },
|
|
14
|
-
{ name: 'Notion', tag: 'Productivity', Icon: Sparkles },
|
|
15
|
-
{ name: 'Webhook', tag: 'Integrations', Icon: Plug },
|
|
16
|
-
{ name: 'Telegram', tag: 'Messaging', Icon: Globe },
|
|
17
|
-
{ name: 'GitHub', tag: 'DevTools', Icon: Rocket },
|
|
18
|
-
{ name: 'Resend', tag: 'Email', Icon: Bot },
|
|
19
|
-
];
|
|
20
|
-
export function MarketplaceShowcase({ title = 'El marketplace de addons', subtitle = 'Construye, firma y publica integraciones que cualquier host metacore puede instalar en un click.', tagline = 'Bundles firmados · Sandbox WASM · Multi-tenant', } = {}) {
|
|
21
|
-
return (_jsxs("div", { className: "relative w-full max-w-md px-8", children: [_jsxs(motion.div, { initial: { opacity: 0, y: 20 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.5 }, className: "text-center mb-8", children: [_jsx("h1", { className: "text-3xl font-bold tracking-tight mb-3", children: title }), _jsx("p", { className: "text-muted-foreground text-sm leading-relaxed", children: subtitle })] }), _jsx("div", { className: "grid grid-cols-3 gap-3", children: addons.map((addon, i) => {
|
|
22
|
-
const { Icon } = addon;
|
|
23
|
-
return (_jsx(motion.div, { initial: { opacity: 0, scale: 0.92 }, animate: { opacity: 1, scale: 1 }, transition: { delay: 0.1 + i * 0.05, duration: 0.35 }, className: cn('group relative rounded-xl border bg-card p-3 shadow-sm', 'hover:shadow-md hover:border-primary/30 transition-all'), children: _jsxs("div", { className: "flex flex-col items-center text-center gap-2", children: [_jsx("div", { className: "size-10 rounded-lg bg-primary/10 flex items-center justify-center group-hover:bg-primary/20 transition-colors", children: _jsx(Icon, { className: "size-5 text-primary" }) }), _jsxs("div", { children: [_jsx("div", { className: "text-xs font-semibold leading-tight", children: addon.name }), _jsx("div", { className: "text-[10px] text-muted-foreground mt-0.5", children: addon.tag })] })] }) }, addon.name));
|
|
24
|
-
}) }), _jsxs(motion.div, { initial: { opacity: 0 }, animate: { opacity: 1 }, transition: { delay: 0.6, duration: 0.4 }, className: "mt-8 flex items-center justify-center gap-2 text-xs text-muted-foreground", children: [_jsx(ShieldCheck, { className: "size-3.5" }), _jsx("span", { children: tagline })] })] }));
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=marketplace.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../../src/showcases/marketplace.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export type WhatsAppShowcaseProps = {
|
|
2
|
-
/** Brand shown in the chat header. Defaults to a neutral "Tu Negocio". */
|
|
3
|
-
organizationName?: string;
|
|
4
|
-
/** Optional logo URL shown as the chat avatar; defaults to a Store icon. */
|
|
5
|
-
organizationLogo?: string;
|
|
6
|
-
};
|
|
7
|
-
export declare function WhatsAppShowcase({ organizationName, organizationLogo }?: WhatsAppShowcaseProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
-
/** Backwards-compat alias for callers that copied the original ChatMockup. */
|
|
9
|
-
export declare const ChatMockup: typeof WhatsAppShowcase;
|
|
10
|
-
//# sourceMappingURL=whatsapp.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"whatsapp.d.ts","sourceRoot":"","sources":["../../src/showcases/whatsapp.tsx"],"names":[],"mappings":"AAUA,MAAM,MAAM,qBAAqB,GAAG;IAClC,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AA8BD,wBAAgB,gBAAgB,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,GAAE,qBAA0B,2CAwIlG;AAED,8EAA8E;AAC9E,eAAO,MAAM,UAAU,yBAAmB,CAAA"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
// WhatsApp-style iPhone chat mockup. Suitable for any app whose pitch is
|
|
3
|
-
// conversational AI / customer messaging. The conversation loop is generic
|
|
4
|
-
// Spanish customer-service chatter — apps that want a completely different
|
|
5
|
-
// vibe should pick a different showcase or pass their own as the `showcase`
|
|
6
|
-
// slot of `<SignUpPage />`.
|
|
7
|
-
import { useState, useEffect } from 'react';
|
|
8
|
-
import { motion, AnimatePresence } from 'framer-motion';
|
|
9
|
-
import { cn } from '@asteby/metacore-ui/lib';
|
|
10
|
-
import { Bot, User, Store } from 'lucide-react';
|
|
11
|
-
const conversations = [
|
|
12
|
-
[
|
|
13
|
-
{ id: 1, type: 'user', text: '¿Tienen el iPhone 15?', delay: 0 },
|
|
14
|
-
{ id: 2, type: 'bot', text: '¡Hola! 👋 Sí, disponible en todos los colores.', delay: 1200 },
|
|
15
|
-
{ id: 3, type: 'user', text: 'Sí, el de 256GB', delay: 2800 },
|
|
16
|
-
{ id: 4, type: 'bot', text: '$18,999 MXN con 12 MSI 🚚', delay: 4000 },
|
|
17
|
-
],
|
|
18
|
-
[
|
|
19
|
-
{ id: 1, type: 'user', text: 'Mesa para 4 personas', delay: 0 },
|
|
20
|
-
{ id: 2, type: 'bot', text: '¡Perfecto! 🍽️ ¿Qué día y hora?', delay: 1200 },
|
|
21
|
-
{ id: 3, type: 'user', text: 'Sábado 8pm', delay: 2500 },
|
|
22
|
-
{ id: 4, type: 'bot', text: '¡Reservado sábado 8PM! 🎉', delay: 3800 },
|
|
23
|
-
],
|
|
24
|
-
[
|
|
25
|
-
{ id: 1, type: 'user', text: 'Mi pedido no llega 😤', delay: 0 },
|
|
26
|
-
{ id: 2, type: 'bot', text: '¿Me das tu # de orden?', delay: 1200 },
|
|
27
|
-
{ id: 3, type: 'user', text: '#45892', delay: 2400 },
|
|
28
|
-
{ id: 4, type: 'bot', text: 'Llega hoy antes de 6PM 📦', delay: 3600 },
|
|
29
|
-
],
|
|
30
|
-
];
|
|
31
|
-
export function WhatsAppShowcase({ organizationName, organizationLogo } = {}) {
|
|
32
|
-
const [currentConversation, setCurrentConversation] = useState(0);
|
|
33
|
-
const [visibleMessages, setVisibleMessages] = useState([]);
|
|
34
|
-
const [isTyping, setIsTyping] = useState(false);
|
|
35
|
-
useEffect(() => {
|
|
36
|
-
const conversation = conversations[currentConversation];
|
|
37
|
-
if (!conversation)
|
|
38
|
-
return;
|
|
39
|
-
setVisibleMessages([]);
|
|
40
|
-
const timeouts = [];
|
|
41
|
-
conversation.forEach((message) => {
|
|
42
|
-
if (message.type === 'bot') {
|
|
43
|
-
timeouts.push(setTimeout(() => setIsTyping(true), message.delay - 600));
|
|
44
|
-
}
|
|
45
|
-
timeouts.push(setTimeout(() => {
|
|
46
|
-
setIsTyping(false);
|
|
47
|
-
setVisibleMessages((prev) => [...prev, message]);
|
|
48
|
-
}, message.delay));
|
|
49
|
-
});
|
|
50
|
-
timeouts.push(setTimeout(() => {
|
|
51
|
-
setCurrentConversation((prev) => (prev + 1) % conversations.length);
|
|
52
|
-
}, 6500));
|
|
53
|
-
return () => { timeouts.forEach(clearTimeout); setIsTyping(false); };
|
|
54
|
-
}, [currentConversation]);
|
|
55
|
-
return (_jsx("div", { className: "relative", children: _jsx(motion.div, { initial: { opacity: 0, y: 40 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.6 }, className: "relative w-[340px]", children: _jsxs("div", { className: "bg-[#1a1a1a] rounded-[50px] p-3 shadow-2xl", children: [_jsx("div", { className: "absolute top-3 left-1/2 -translate-x-1/2 w-[140px] h-[22px] bg-[#1a1a1a] rounded-b-2xl z-20" }), _jsxs("div", { className: "bg-white dark:bg-zinc-900 rounded-[40px] overflow-hidden", children: [_jsxs("div", { className: "bg-primary px-4 py-3 pt-8 flex items-center gap-3", children: [_jsx("div", { className: "size-11 rounded-full bg-white/20 flex items-center justify-center overflow-hidden", children: organizationLogo ? (_jsx("img", { src: organizationLogo, alt: "Logo", className: "size-full object-cover" })) : (_jsx(Store, { className: "size-6 text-white" })) }), _jsxs("div", { className: "flex-1", children: [_jsx("h3", { className: "text-white font-semibold text-[15px]", children: organizationName || 'Tu Negocio' }), _jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx("span", { className: "size-2 rounded-full bg-green-400 animate-pulse" }), _jsx("span", { className: "text-white/80 text-xs", children: "En l\u00EDnea" })] })] })] }), _jsxs("div", { className: "min-h-[400px] bg-gray-50 dark:bg-[#0b141a] p-4 space-y-3", children: [_jsx(AnimatePresence, { mode: "popLayout", children: visibleMessages.map((message) => (_jsxs(motion.div, { initial: { opacity: 0, y: 15, scale: 0.9 }, animate: { opacity: 1, y: 0, scale: 1 }, exit: { opacity: 0, scale: 0.9 }, transition: { type: 'spring', stiffness: 300, damping: 25 }, className: cn('flex gap-2', message.type === 'user' ? 'justify-end' : 'justify-start'), children: [message.type === 'bot' && (_jsx("div", { className: "size-8 rounded-full bg-primary/10 flex items-center justify-center flex-shrink-0", children: _jsx(Bot, { className: "size-4 text-primary" }) })), _jsx("div", { className: cn('max-w-[75%] rounded-2xl px-4 py-2.5 text-[14px] leading-snug shadow-sm', message.type === 'user'
|
|
56
|
-
? 'bg-primary text-white rounded-tr-md'
|
|
57
|
-
: 'bg-white dark:bg-[#202c33] text-gray-800 dark:text-white rounded-tl-md'), children: message.text }), message.type === 'user' && (_jsx("div", { className: "size-8 rounded-full bg-gray-200 dark:bg-zinc-700 flex items-center justify-center flex-shrink-0", children: _jsx(User, { className: "size-4 text-gray-500 dark:text-zinc-300" }) }))] }, `${currentConversation}-${message.id}`))) }), _jsx(AnimatePresence, { children: isTyping && (_jsxs(motion.div, { initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0 }, className: "flex gap-2", children: [_jsx("div", { className: "size-8 rounded-full bg-primary/10 flex items-center justify-center", children: _jsx(Bot, { className: "size-4 text-primary" }) }), _jsx("div", { className: "bg-white dark:bg-[#202c33] rounded-2xl rounded-tl-md px-4 py-3 shadow-sm", children: _jsx("div", { className: "flex gap-1", children: [0, 0.15, 0.3].map((d, i) => (_jsx(motion.span, { animate: { opacity: [0.4, 1, 0.4] }, transition: { duration: 0.8, repeat: Infinity, delay: d }, className: "size-2 rounded-full bg-gray-400" }, i))) }) })] })) })] }), _jsxs("div", { className: "bg-white dark:bg-[#0b141a] px-4 py-3 flex items-center gap-3", children: [_jsx("div", { className: "flex-1 bg-gray-100 dark:bg-[#202c33] rounded-full px-4 py-2.5 text-sm text-gray-400", children: "Mensaje..." }), _jsx("div", { className: "size-10 rounded-full bg-primary flex items-center justify-center", children: _jsx("svg", { className: "size-5 text-white ml-0.5", fill: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { d: "M2.01 21L23 12 2.01 3 2 10l15 2-15 2z" }) }) })] }), _jsx("div", { className: "bg-white dark:bg-[#0b141a] h-7 flex items-center justify-center pb-1", children: _jsx("div", { className: "w-28 h-1 bg-gray-300 dark:bg-zinc-600 rounded-full" }) })] })] }) }) }));
|
|
58
|
-
}
|
|
59
|
-
/** Backwards-compat alias for callers that copied the original ChatMockup. */
|
|
60
|
-
export const ChatMockup = WhatsAppShowcase;
|
|
61
|
-
//# sourceMappingURL=whatsapp.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"whatsapp.js","sourceRoot":"","sources":["../../src/showcases/whatsapp.tsx"],"names":[],"mappings":"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"}
|