@proappstore/sdk 1.16.3 → 1.16.5
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/ui-gate.d.ts +12 -0
- package/dist/ui-gate.d.ts.map +1 -0
- package/dist/ui-gate.js +14 -0
- package/dist/ui-gate.js.map +1 -0
- package/dist/ui-pro-components.d.ts +34 -0
- package/dist/ui-pro-components.d.ts.map +1 -0
- package/dist/ui-pro-components.js +127 -0
- package/dist/ui-pro-components.js.map +1 -0
- package/dist/ui-profile-menu.d.ts +14 -0
- package/dist/ui-profile-menu.d.ts.map +1 -0
- package/dist/ui-profile-menu.js +78 -0
- package/dist/ui-profile-menu.js.map +1 -0
- package/dist/ui-profile-page.d.ts +8 -0
- package/dist/ui-profile-page.d.ts.map +1 -0
- package/dist/ui-profile-page.js +71 -0
- package/dist/ui-profile-page.js.map +1 -0
- package/dist/ui.d.ts +8 -55
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +8 -265
- package/dist/ui.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @proappstore/sdk/ui — GateScreen reusable gate UI.
|
|
3
|
+
*/
|
|
4
|
+
import type { ProAppStore } from './index.js';
|
|
5
|
+
export interface GateScreenProps {
|
|
6
|
+
gate: 'loading' | 'signed-out' | 'no-subscription';
|
|
7
|
+
app: ProAppStore;
|
|
8
|
+
appName?: string | undefined;
|
|
9
|
+
}
|
|
10
|
+
/** Renders the appropriate gate screen (loading, sign-in, or upgrade). */
|
|
11
|
+
export declare function GateScreen({ gate, app, appName }: GateScreenProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=ui-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-gate.d.ts","sourceRoot":"","sources":["../src/ui-gate.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAO9C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,iBAAiB,CAAC;IACnD,GAAG,EAAE,WAAW,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,eAAe,2CAsCjE"}
|
package/dist/ui-gate.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { SignInButton, UpgradeCard } from './ui-pro-components.js';
|
|
3
|
+
/** Renders the appropriate gate screen (loading, sign-in, or upgrade). */
|
|
4
|
+
export function GateScreen({ gate, app, appName }) {
|
|
5
|
+
if (gate === 'loading') {
|
|
6
|
+
return (_jsx("div", { style: { minHeight: '100dvh', display: 'flex', alignItems: 'center', justifyContent: 'center' }, children: _jsx("p", { style: { color: 'var(--muted, #64748b)' }, children: "Loading..." }) }));
|
|
7
|
+
}
|
|
8
|
+
if (gate === 'signed-out') {
|
|
9
|
+
return (_jsx("div", { style: { minHeight: '100dvh', display: 'flex', alignItems: 'center', justifyContent: 'center', padding: '2rem' }, children: _jsxs("div", { style: { maxWidth: 400, textAlign: 'center' }, children: [_jsx("h1", { style: { fontSize: '1.5rem', fontWeight: 800, marginBottom: '0.5rem', color: 'var(--ink, #1e293b)' }, children: appName || 'ProAppStore' }), _jsx("p", { style: { color: 'var(--muted, #64748b)', fontSize: '0.9rem', marginBottom: '1rem' }, children: "Sign in to your ProAppStore account to continue." }), _jsx(SignInButton, { app: app }), _jsx("p", { style: { color: 'var(--muted, #64748b)', fontSize: '0.75rem', marginTop: '0.75rem' }, children: "One account for all Pro apps." })] }) }));
|
|
10
|
+
}
|
|
11
|
+
// no-subscription
|
|
12
|
+
return (_jsx("div", { style: { minHeight: '100dvh', display: 'flex', alignItems: 'center', justifyContent: 'center', padding: '2rem' }, children: _jsx(UpgradeCard, { app: app, title: "Pro subscription required", description: `${appName || 'This app'} requires an active ProAppStore subscription.` }) }));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=ui-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-gate.js","sourceRoot":"","sources":["../src/ui-gate.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAYnE,0EAA0E;AAC1E,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAmB;IAChE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,CACL,cAAK,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,YAClG,YAAG,KAAK,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,2BAAgB,GACxD,CACP,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,OAAO,CACL,cAAK,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,YACnH,eAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,aAChD,aAAI,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,qBAAqB,EAAE,YACrG,OAAO,IAAI,aAAa,GACtB,EACL,YAAG,KAAK,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,iEAElF,EACJ,KAAC,YAAY,IAAC,GAAG,EAAE,GAAG,GAAI,EAC1B,YAAG,KAAK,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,8CAEnF,IACA,GACF,CACP,CAAC;IACJ,CAAC;IAED,kBAAkB;IAClB,OAAO,CACL,cAAK,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,YACnH,KAAC,WAAW,IACV,GAAG,EAAE,GAAG,EACR,KAAK,EAAC,2BAA2B,EACjC,WAAW,EAAE,GAAG,OAAO,IAAI,UAAU,+CAA+C,GACpF,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ProAppStore } from './index.js';
|
|
2
|
+
export interface SignInButtonProps {
|
|
3
|
+
app: ProAppStore;
|
|
4
|
+
label?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function SignInButton({ app, label }: SignInButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export interface ProBadgeProps {
|
|
8
|
+
size?: 'sm' | 'md' | 'lg';
|
|
9
|
+
}
|
|
10
|
+
/** Purple "PRO" badge. Shows subscription tier. */
|
|
11
|
+
export declare function ProBadge({ size }: ProBadgeProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export interface SubscriptionStatusProps {
|
|
13
|
+
app: ProAppStore;
|
|
14
|
+
showUpgrade?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/** Inline subscription status: PRO badge or "Free" with optional upgrade link. */
|
|
17
|
+
export declare function SubscriptionStatus({ app, showUpgrade }: SubscriptionStatusProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export interface UpgradeCardProps {
|
|
19
|
+
app: ProAppStore;
|
|
20
|
+
title?: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
priceLabel?: string;
|
|
23
|
+
features?: string[];
|
|
24
|
+
}
|
|
25
|
+
/** Styled card prompting the user to upgrade to Pro. */
|
|
26
|
+
export declare function UpgradeCard({ app, title, description, priceLabel, features, }: UpgradeCardProps): import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
export interface BillingButtonProps {
|
|
28
|
+
app: ProAppStore;
|
|
29
|
+
label?: string;
|
|
30
|
+
variant?: 'primary' | 'secondary' | 'ghost';
|
|
31
|
+
}
|
|
32
|
+
/** Button that opens the Stripe billing portal. */
|
|
33
|
+
export declare function BillingButton({ app, label, variant }: BillingButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
34
|
+
//# sourceMappingURL=ui-pro-components.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-pro-components.d.ts","sourceRoot":"","sources":["../src/ui-pro-components.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAO9C,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,WAAW,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,EAAE,GAAG,EAAE,KAA6B,EAAE,EAAE,iBAAiB,2CAmBrF;AAMD,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CAC3B;AAED,mDAAmD;AACnD,wBAAgB,QAAQ,CAAC,EAAE,IAAW,EAAE,EAAE,aAAa,2CAsBtD;AAMD,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,WAAW,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,EAAE,GAAG,EAAE,WAAkB,EAAE,EAAE,uBAAuB,2CA4CtF;AAMD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,WAAW,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wDAAwD;AACxD,wBAAgB,WAAW,CAAC,EAC1B,GAAG,EACH,KAAwB,EACxB,WAAoE,EACpE,UAAuB,EACvB,QAAwG,GACzG,EAAE,gBAAgB,2CAuDlB;AAMD,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,WAAW,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;CAC7C;AAED,mDAAmD;AACnD,wBAAgB,aAAa,CAAC,EAAE,GAAG,EAAE,KAAwB,EAAE,OAAqB,EAAE,EAAE,kBAAkB,2CAiCzG"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* @proappstore/sdk/ui — Pro-branded primitives and subscription components.
|
|
4
|
+
*
|
|
5
|
+
* SignInButton, ProBadge, SubscriptionStatus, UpgradeCard, BillingButton.
|
|
6
|
+
*/
|
|
7
|
+
import { useState, useCallback } from 'react';
|
|
8
|
+
import { useProSubscription } from './hooks.js';
|
|
9
|
+
export function SignInButton({ app, label = 'Sign in with GitHub' }) {
|
|
10
|
+
return (_jsx("button", { onClick: () => app.auth.signIn(), style: {
|
|
11
|
+
background: 'var(--accent, #7c3aed)',
|
|
12
|
+
color: '#fff',
|
|
13
|
+
border: 'none',
|
|
14
|
+
padding: '0.6rem 1.5rem',
|
|
15
|
+
borderRadius: 'var(--radius, 0.75rem)',
|
|
16
|
+
fontSize: '0.9rem',
|
|
17
|
+
fontWeight: 700,
|
|
18
|
+
cursor: 'pointer',
|
|
19
|
+
fontFamily: 'inherit',
|
|
20
|
+
}, children: label }));
|
|
21
|
+
}
|
|
22
|
+
/** Purple "PRO" badge. Shows subscription tier. */
|
|
23
|
+
export function ProBadge({ size = 'sm' }) {
|
|
24
|
+
const sizes = {
|
|
25
|
+
sm: { fontSize: '0.6rem', padding: '0.1rem 0.4rem' },
|
|
26
|
+
md: { fontSize: '0.7rem', padding: '0.2rem 0.5rem' },
|
|
27
|
+
lg: { fontSize: '0.8rem', padding: '0.25rem 0.6rem' },
|
|
28
|
+
};
|
|
29
|
+
return (_jsx("span", { style: {
|
|
30
|
+
...sizes[size],
|
|
31
|
+
fontWeight: 700,
|
|
32
|
+
background: 'var(--accent, #7c3aed)',
|
|
33
|
+
color: '#fff',
|
|
34
|
+
borderRadius: '0.25rem',
|
|
35
|
+
textTransform: 'uppercase',
|
|
36
|
+
letterSpacing: '0.03em',
|
|
37
|
+
whiteSpace: 'nowrap',
|
|
38
|
+
display: 'inline-flex',
|
|
39
|
+
alignItems: 'center',
|
|
40
|
+
}, children: "PRO" }));
|
|
41
|
+
}
|
|
42
|
+
/** Inline subscription status: PRO badge or "Free" with optional upgrade link. */
|
|
43
|
+
export function SubscriptionStatus({ app, showUpgrade = true }) {
|
|
44
|
+
const { subscription, isPro, loading, upgrade } = useProSubscription(app);
|
|
45
|
+
if (loading) {
|
|
46
|
+
return _jsx("span", { style: { fontSize: '0.85rem', color: 'var(--muted, #64748b)' }, children: "..." });
|
|
47
|
+
}
|
|
48
|
+
if (isPro) {
|
|
49
|
+
const renewal = subscription?.cancelAtPeriodEnd
|
|
50
|
+
? 'Cancels at period end'
|
|
51
|
+
: subscription?.currentPeriodEnd
|
|
52
|
+
? `Renews ${new Date(subscription.currentPeriodEnd).toLocaleDateString()}`
|
|
53
|
+
: '';
|
|
54
|
+
return (_jsxs("span", { style: { display: 'inline-flex', alignItems: 'center', gap: '0.4rem' }, children: [_jsx(ProBadge, { size: "md" }), renewal && _jsx("span", { style: { fontSize: '0.75rem', color: 'var(--muted, #64748b)' }, children: renewal })] }));
|
|
55
|
+
}
|
|
56
|
+
return (_jsxs("span", { style: { display: 'inline-flex', alignItems: 'center', gap: '0.5rem' }, children: [_jsx("span", { style: { fontSize: '0.85rem', color: 'var(--muted, #64748b)' }, children: "Free plan" }), showUpgrade && (_jsx("button", { onClick: () => upgrade(), style: {
|
|
57
|
+
background: 'none',
|
|
58
|
+
border: '1px solid var(--accent, #7c3aed)',
|
|
59
|
+
color: 'var(--accent, #7c3aed)',
|
|
60
|
+
padding: '0.2rem 0.6rem',
|
|
61
|
+
borderRadius: 'var(--radius-sm, 0.5rem)',
|
|
62
|
+
fontSize: '0.75rem',
|
|
63
|
+
fontWeight: 600,
|
|
64
|
+
cursor: 'pointer',
|
|
65
|
+
fontFamily: 'inherit',
|
|
66
|
+
}, children: "Upgrade" }))] }));
|
|
67
|
+
}
|
|
68
|
+
/** Styled card prompting the user to upgrade to Pro. */
|
|
69
|
+
export function UpgradeCard({ app, title = 'Upgrade to Pro', description = 'Unlock all premium features with a Pro subscription.', priceLabel = '$9/month', features = ['Cloud sync across devices', 'AI-powered features', 'Unlimited storage', 'Priority support'], }) {
|
|
70
|
+
const { upgrade } = useProSubscription(app);
|
|
71
|
+
return (_jsxs("div", { style: {
|
|
72
|
+
background: 'var(--surface, #ffffff)',
|
|
73
|
+
border: '1px solid var(--accent, #7c3aed)',
|
|
74
|
+
borderRadius: 'var(--radius, 0.75rem)',
|
|
75
|
+
padding: '1.75rem',
|
|
76
|
+
maxWidth: 400,
|
|
77
|
+
}, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '0.5rem', marginBottom: '0.5rem' }, children: [_jsx("h3", { style: { fontSize: '1.25rem', fontWeight: 800, color: 'var(--ink-strong, var(--ink, #0f172a))', margin: 0 }, children: title }), _jsx(ProBadge, { size: "md" })] }), _jsx("p", { style: { fontSize: '0.9rem', color: 'var(--muted, #64748b)', marginBottom: '1rem' }, children: description }), features.length > 0 && (_jsx("ul", { style: { listStyle: 'none', padding: 0, margin: '0 0 1.25rem' }, children: features.map((f, i) => (_jsxs("li", { style: {
|
|
78
|
+
padding: '0.35rem 0',
|
|
79
|
+
fontSize: '0.85rem',
|
|
80
|
+
color: 'var(--ink, #1e293b)',
|
|
81
|
+
borderBottom: '1px solid var(--border, #e2e8f0)',
|
|
82
|
+
display: 'flex',
|
|
83
|
+
alignItems: 'center',
|
|
84
|
+
gap: '0.5rem',
|
|
85
|
+
}, children: [_jsx("span", { style: { color: 'var(--accent, #7c3aed)', fontWeight: 700 }, children: "+" }), f] }, i))) })), _jsxs("button", { onClick: () => upgrade(), style: {
|
|
86
|
+
width: '100%',
|
|
87
|
+
background: 'var(--accent, #7c3aed)',
|
|
88
|
+
color: '#fff',
|
|
89
|
+
border: 'none',
|
|
90
|
+
padding: '0.75rem',
|
|
91
|
+
borderRadius: 'var(--radius, 0.75rem)',
|
|
92
|
+
fontSize: '0.9rem',
|
|
93
|
+
fontWeight: 700,
|
|
94
|
+
cursor: 'pointer',
|
|
95
|
+
fontFamily: 'inherit',
|
|
96
|
+
}, children: ["Subscribe \u2014 ", priceLabel] })] }));
|
|
97
|
+
}
|
|
98
|
+
/** Button that opens the Stripe billing portal. */
|
|
99
|
+
export function BillingButton({ app, label = 'Manage billing', variant = 'secondary' }) {
|
|
100
|
+
const [loading, setLoading] = useState(false);
|
|
101
|
+
const handleClick = useCallback(async () => {
|
|
102
|
+
setLoading(true);
|
|
103
|
+
try {
|
|
104
|
+
await app.subscription.openPortal(window.location.href);
|
|
105
|
+
}
|
|
106
|
+
catch { }
|
|
107
|
+
finally {
|
|
108
|
+
setLoading(false);
|
|
109
|
+
}
|
|
110
|
+
}, [app]);
|
|
111
|
+
const baseStyle = {
|
|
112
|
+
padding: '0.6rem 1.25rem',
|
|
113
|
+
borderRadius: 'var(--radius, 0.75rem)',
|
|
114
|
+
fontSize: '0.85rem',
|
|
115
|
+
fontWeight: 600,
|
|
116
|
+
cursor: loading ? 'wait' : 'pointer',
|
|
117
|
+
fontFamily: 'inherit',
|
|
118
|
+
opacity: loading ? 0.7 : 1,
|
|
119
|
+
};
|
|
120
|
+
const variants = {
|
|
121
|
+
primary: { ...baseStyle, background: 'var(--accent, #7c3aed)', color: '#fff', border: 'none' },
|
|
122
|
+
secondary: { ...baseStyle, background: 'transparent', color: 'var(--ink, #1e293b)', border: '1px solid var(--border, #e2e8f0)' },
|
|
123
|
+
ghost: { ...baseStyle, background: 'none', color: 'var(--accent, #7c3aed)', border: 'none', padding: '0.4rem 0.75rem' },
|
|
124
|
+
};
|
|
125
|
+
return (_jsx("button", { onClick: handleClick, disabled: loading, style: variants[variant], children: loading ? 'Opening...' : label }));
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=ui-pro-components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-pro-components.js","sourceRoot":"","sources":["../src/ui-pro-components.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @proappstore/sdk/ui — ProfileMenu (Pro-enhanced) avatar dropdown.
|
|
3
|
+
*/
|
|
4
|
+
import { type ReactNode } from 'react';
|
|
5
|
+
import type { ProAppStore } from './index.js';
|
|
6
|
+
export interface ProfileMenuProps {
|
|
7
|
+
app: ProAppStore;
|
|
8
|
+
showThemeToggle?: boolean;
|
|
9
|
+
showBilling?: boolean;
|
|
10
|
+
children?: ReactNode;
|
|
11
|
+
}
|
|
12
|
+
/** Avatar button that opens dropdown with Pro features: badge, billing, theme, sign out. */
|
|
13
|
+
export declare function ProfileMenu({ app, showThemeToggle, showBilling, children }: ProfileMenuProps): import("react/jsx-runtime").JSX.Element | null;
|
|
14
|
+
//# sourceMappingURL=ui-profile-menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-profile-menu.d.ts","sourceRoot":"","sources":["../src/ui-profile-menu.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAA4C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAQ9C,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,WAAW,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,4FAA4F;AAC5F,wBAAgB,WAAW,CAAC,EAAE,GAAG,EAAE,eAAsB,EAAE,WAAkB,EAAE,QAAQ,EAAE,EAAE,gBAAgB,kDAoF1G"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* @proappstore/sdk/ui — ProfileMenu (Pro-enhanced) avatar dropdown.
|
|
4
|
+
*/
|
|
5
|
+
import { useState, useEffect, useCallback, useRef } from 'react';
|
|
6
|
+
import { useProAuth, useProSubscription, useTheme } from './hooks.js';
|
|
7
|
+
import { ProBadge } from './ui-pro-components.js';
|
|
8
|
+
/** Avatar button that opens dropdown with Pro features: badge, billing, theme, sign out. */
|
|
9
|
+
export function ProfileMenu({ app, showThemeToggle = true, showBilling = true, children }) {
|
|
10
|
+
const { user, signOut, deleteAccount } = useProAuth(app);
|
|
11
|
+
const { subscription, isPro, manageBilling } = useProSubscription(app);
|
|
12
|
+
const [open, setOpen] = useState(false);
|
|
13
|
+
const ref = useRef(null);
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
if (!open)
|
|
16
|
+
return;
|
|
17
|
+
const handler = (e) => {
|
|
18
|
+
if (ref.current && !ref.current.contains(e.target))
|
|
19
|
+
setOpen(false);
|
|
20
|
+
};
|
|
21
|
+
document.addEventListener('mousedown', handler);
|
|
22
|
+
return () => document.removeEventListener('mousedown', handler);
|
|
23
|
+
}, [open]);
|
|
24
|
+
if (!user)
|
|
25
|
+
return null;
|
|
26
|
+
const handleSignOut = () => { signOut(); setOpen(false); };
|
|
27
|
+
const handleBilling = async () => { await manageBilling(); setOpen(false); };
|
|
28
|
+
const handleDelete = async () => {
|
|
29
|
+
const subClause = subscription?.status === 'active' ? ' and cancels your subscription' : '';
|
|
30
|
+
if (!confirm(`Delete your account? This permanently removes ALL your data across ALL apps${subClause}. This cannot be undone.`))
|
|
31
|
+
return;
|
|
32
|
+
if (!confirm('Are you absolutely sure? Last chance.'))
|
|
33
|
+
return;
|
|
34
|
+
await deleteAccount();
|
|
35
|
+
setOpen(false);
|
|
36
|
+
};
|
|
37
|
+
return (_jsxs("div", { ref: ref, style: { position: 'relative' }, children: [_jsx("button", { onClick: () => setOpen(!open), style: {
|
|
38
|
+
background: 'none',
|
|
39
|
+
border: '2px solid var(--border, #e2e8f0)',
|
|
40
|
+
borderRadius: '50%',
|
|
41
|
+
padding: 0,
|
|
42
|
+
cursor: 'pointer',
|
|
43
|
+
width: 32,
|
|
44
|
+
height: 32,
|
|
45
|
+
overflow: 'hidden',
|
|
46
|
+
display: 'block',
|
|
47
|
+
}, children: user.avatarUrl ? (_jsx("img", { src: user.avatarUrl, alt: user.login, width: 28, height: 28, style: { borderRadius: '50%', display: 'block' } })) : (_jsx("div", { style: { width: 28, height: 28, borderRadius: '50%', background: 'var(--accent, #7c3aed)', color: '#fff', display: 'flex', alignItems: 'center', justifyContent: 'center', fontSize: 13, fontWeight: 700 }, children: user.login.charAt(0).toUpperCase() })) }), open && (_jsxs("div", { style: {
|
|
48
|
+
position: 'absolute', top: 40, right: 0,
|
|
49
|
+
background: 'var(--surface, #ffffff)',
|
|
50
|
+
border: '1px solid var(--border, #e2e8f0)',
|
|
51
|
+
borderRadius: 'var(--radius, 0.75rem)',
|
|
52
|
+
boxShadow: '0 4px 20px rgba(0,0,0,0.1)',
|
|
53
|
+
minWidth: 220, padding: '0.5rem 0', zIndex: 100,
|
|
54
|
+
}, children: [_jsxs("div", { style: { padding: '0.5rem 1rem', borderBottom: '1px solid var(--border, #e2e8f0)', display: 'flex', alignItems: 'center', gap: '0.5rem' }, children: [_jsx("strong", { style: { fontSize: '0.85rem', color: 'var(--ink, #1e293b)' }, children: user.login }), isPro && _jsx(ProBadge, {})] }), showThemeToggle && (_jsxs("div", { style: { padding: '0.5rem 1rem', borderBottom: '1px solid var(--border, #e2e8f0)', display: 'flex', alignItems: 'center', justifyContent: 'space-between' }, children: [_jsx("span", { style: { fontSize: '0.85rem', color: 'var(--muted, #64748b)' }, children: "Theme" }), _jsx(ThemeToggleInline, {})] })), showBilling && isPro && (_jsx("button", { onClick: handleBilling, style: menuItemStyle, children: "Manage billing" })), children, _jsx("button", { onClick: handleSignOut, style: menuItemStyle, children: "Sign out" }), _jsx("button", { onClick: handleDelete, style: { ...menuItemStyle, color: '#dc2626' }, children: "Delete account" })] }))] }));
|
|
55
|
+
}
|
|
56
|
+
/** Inline theme toggle for menu (imports from same file to avoid circular) */
|
|
57
|
+
function ThemeToggleInline() {
|
|
58
|
+
const { theme, preference, setPreference } = useTheme();
|
|
59
|
+
const cycle = useCallback(() => {
|
|
60
|
+
const order = ['system', 'light', 'dark'];
|
|
61
|
+
const idx = order.indexOf(preference);
|
|
62
|
+
setPreference(order[(idx + 1) % order.length]);
|
|
63
|
+
}, [preference, setPreference]);
|
|
64
|
+
const icon = theme === 'dark' ? (_jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("circle", { cx: "12", cy: "12", r: "5" }), _jsx("line", { x1: "12", y1: "1", x2: "12", y2: "3" }), _jsx("line", { x1: "12", y1: "21", x2: "12", y2: "23" }), _jsx("line", { x1: "4.22", y1: "4.22", x2: "5.64", y2: "5.64" }), _jsx("line", { x1: "18.36", y1: "18.36", x2: "19.78", y2: "19.78" }), _jsx("line", { x1: "1", y1: "12", x2: "3", y2: "12" }), _jsx("line", { x1: "21", y1: "12", x2: "23", y2: "12" }), _jsx("line", { x1: "4.22", y1: "19.78", x2: "5.64", y2: "18.36" }), _jsx("line", { x1: "18.36", y1: "5.64", x2: "19.78", y2: "4.22" })] })) : (_jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: _jsx("path", { d: "M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" }) }));
|
|
65
|
+
return (_jsx("button", { onClick: cycle, "aria-label": `Theme: ${preference}`, style: {
|
|
66
|
+
width: 32, height: 32, borderRadius: 'var(--radius-sm, 0.5rem)',
|
|
67
|
+
border: '1px solid var(--border, #e2e8f0)', background: 'var(--surface, #ffffff)',
|
|
68
|
+
color: 'var(--ink, #1e293b)', display: 'inline-flex', alignItems: 'center',
|
|
69
|
+
justifyContent: 'center', cursor: 'pointer', padding: 0, fontFamily: 'inherit',
|
|
70
|
+
}, children: icon }));
|
|
71
|
+
}
|
|
72
|
+
const menuItemStyle = {
|
|
73
|
+
display: 'block', width: '100%', padding: '0.5rem 1rem',
|
|
74
|
+
background: 'none', border: 'none', textAlign: 'left',
|
|
75
|
+
fontSize: '0.85rem', cursor: 'pointer',
|
|
76
|
+
color: 'var(--ink, #1e293b)', fontFamily: 'inherit',
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=ui-profile-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-profile-menu.js","sourceRoot":"","sources":["../src/ui-profile-menu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ProAppStore } from './index.js';
|
|
2
|
+
export interface ProProfilePageProps {
|
|
3
|
+
app: ProAppStore;
|
|
4
|
+
showThemeToggle?: boolean;
|
|
5
|
+
}
|
|
6
|
+
/** Full-page profile/settings with subscription info, billing, theme, danger zone. */
|
|
7
|
+
export declare function ProProfilePage({ app, showThemeToggle }: ProProfilePageProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=ui-profile-page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-profile-page.d.ts","sourceRoot":"","sources":["../src/ui-profile-page.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAQ9C,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,WAAW,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,EAAE,GAAG,EAAE,eAAsB,EAAE,EAAE,mBAAmB,2CAqJlF"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* @proappstore/sdk/ui — ProProfilePage full-page profile/settings.
|
|
4
|
+
*/
|
|
5
|
+
import {} from 'react';
|
|
6
|
+
import { useProAuth, useProSubscription, useTheme } from './hooks.js';
|
|
7
|
+
import { SignInButton, ProBadge, BillingButton } from './ui-pro-components.js';
|
|
8
|
+
/** Full-page profile/settings with subscription info, billing, theme, danger zone. */
|
|
9
|
+
export function ProProfilePage({ app, showThemeToggle = true }) {
|
|
10
|
+
const { user, loading, signOut, deleteAccount } = useProAuth(app);
|
|
11
|
+
const { subscription, isPro, loading: subLoading, upgrade, manageBilling } = useProSubscription(app);
|
|
12
|
+
const { preference, setPreference } = useTheme();
|
|
13
|
+
if (loading) {
|
|
14
|
+
return _jsx("div", { style: { padding: '2rem', textAlign: 'center', color: 'var(--muted, #64748b)' }, children: "Loading..." });
|
|
15
|
+
}
|
|
16
|
+
if (!user) {
|
|
17
|
+
return (_jsxs("div", { style: { padding: '2rem', textAlign: 'center' }, children: [_jsx("p", { style: { color: 'var(--muted, #64748b)', marginBottom: '1rem' }, children: "Sign in to view your profile." }), _jsx(SignInButton, { app: app })] }));
|
|
18
|
+
}
|
|
19
|
+
const handleDelete = async () => {
|
|
20
|
+
const subClause = subscription?.status === 'active' ? ' and cancels your subscription' : '';
|
|
21
|
+
if (!confirm(`Delete your account? This permanently removes ALL your data across ALL apps${subClause}. This cannot be undone.`))
|
|
22
|
+
return;
|
|
23
|
+
if (!confirm('Are you absolutely sure? Last chance.'))
|
|
24
|
+
return;
|
|
25
|
+
await deleteAccount();
|
|
26
|
+
};
|
|
27
|
+
const themeOptions = [
|
|
28
|
+
{ value: 'system', label: 'System' },
|
|
29
|
+
{ value: 'light', label: 'Light' },
|
|
30
|
+
{ value: 'dark', label: 'Dark' },
|
|
31
|
+
];
|
|
32
|
+
return (_jsxs("div", { style: { maxWidth: 520, margin: '0 auto', padding: '2rem 1rem' }, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '1rem', marginBottom: '2rem' }, children: [user.avatarUrl ? (_jsx("img", { src: user.avatarUrl, alt: user.login, width: 64, height: 64, style: { borderRadius: '50%' } })) : (_jsx("div", { style: { width: 64, height: 64, borderRadius: '50%', background: 'var(--accent, #7c3aed)', color: '#fff', display: 'flex', alignItems: 'center', justifyContent: 'center', fontSize: 28, fontWeight: 700 }, children: user.login.charAt(0).toUpperCase() })), _jsxs("div", { children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '0.5rem' }, children: [_jsx("span", { style: { fontSize: '1.25rem', fontWeight: 700, color: 'var(--ink-strong, var(--ink, #0f172a))' }, children: user.login }), isPro && _jsx(ProBadge, { size: "md" })] }), _jsx("div", { style: { fontSize: '0.85rem', color: 'var(--muted, #64748b)' }, children: "ProAppStore account" })] })] }), _jsx(Section, { title: "Subscription", children: subLoading ? (_jsx("p", { style: { fontSize: '0.85rem', color: 'var(--muted, #64748b)' }, children: "Loading..." })) : isPro ? (_jsxs("div", { children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '0.5rem', marginBottom: '0.75rem' }, children: [_jsx(ProBadge, { size: "lg" }), _jsx("span", { style: { fontSize: '0.9rem', fontWeight: 600, color: 'var(--ink, #1e293b)' }, children: "Active" })] }), subscription?.currentPeriodEnd && (_jsxs("p", { style: { fontSize: '0.82rem', color: 'var(--muted, #64748b)', marginBottom: '0.75rem' }, children: [subscription.cancelAtPeriodEnd ? 'Cancels' : 'Renews', " on ", new Date(subscription.currentPeriodEnd).toLocaleDateString()] })), _jsx(BillingButton, { app: app, variant: "secondary" })] })) : (_jsxs("div", { children: [_jsx("p", { style: { fontSize: '0.85rem', color: 'var(--muted, #64748b)', marginBottom: '0.75rem' }, children: "You're on the free plan. Upgrade to unlock all premium features." }), _jsx("button", { onClick: () => upgrade(), style: {
|
|
33
|
+
background: 'var(--accent, #7c3aed)', color: '#fff', border: 'none',
|
|
34
|
+
padding: '0.6rem 1.25rem', borderRadius: 'var(--radius, 0.75rem)',
|
|
35
|
+
fontSize: '0.85rem', fontWeight: 700, cursor: 'pointer', fontFamily: 'inherit',
|
|
36
|
+
}, children: "Upgrade to Pro \u2014 $9/mo" })] })) }), showThemeToggle && (_jsx(Section, { title: "Appearance", children: _jsx("div", { style: { display: 'flex', gap: '0.5rem' }, children: themeOptions.map((opt) => (_jsx("button", { onClick: () => setPreference(opt.value), style: {
|
|
37
|
+
flex: 1, padding: '0.5rem',
|
|
38
|
+
borderRadius: 'var(--radius-sm, 0.5rem)',
|
|
39
|
+
border: preference === opt.value ? '2px solid var(--accent, #7c3aed)' : '1px solid var(--border, #e2e8f0)',
|
|
40
|
+
background: preference === opt.value ? 'var(--accent-soft, #f5f3ff)' : 'transparent',
|
|
41
|
+
color: preference === opt.value ? 'var(--accent, #7c3aed)' : 'var(--muted, #64748b)',
|
|
42
|
+
fontWeight: preference === opt.value ? 700 : 500,
|
|
43
|
+
fontSize: '0.85rem', cursor: 'pointer', fontFamily: 'inherit',
|
|
44
|
+
}, children: opt.label }, opt.value))) }) })), _jsx("button", { onClick: signOut, style: {
|
|
45
|
+
width: '100%', padding: '0.75rem',
|
|
46
|
+
borderRadius: 'var(--radius, 0.75rem)',
|
|
47
|
+
border: '1px solid var(--border, #e2e8f0)',
|
|
48
|
+
background: 'var(--surface, #ffffff)',
|
|
49
|
+
color: 'var(--ink, #1e293b)',
|
|
50
|
+
fontSize: '0.9rem', fontWeight: 600,
|
|
51
|
+
cursor: 'pointer', marginBottom: '1.5rem', fontFamily: 'inherit',
|
|
52
|
+
}, children: "Sign out" }), _jsxs("div", { style: { border: '1px solid #fecaca', borderRadius: 'var(--radius, 0.75rem)', padding: '1.25rem' }, children: [_jsx("div", { style: { fontSize: '0.9rem', fontWeight: 700, color: '#dc2626', marginBottom: '0.5rem' }, children: "Danger zone" }), _jsxs("p", { style: { fontSize: '0.85rem', color: 'var(--muted, #64748b)', marginBottom: '0.75rem' }, children: ["Permanently delete your account and all data across all apps.", isPro && ' Your subscription will be cancelled.'] }), _jsx("button", { onClick: handleDelete, style: {
|
|
53
|
+
padding: '0.5rem 1rem', borderRadius: 'var(--radius-sm, 0.5rem)',
|
|
54
|
+
border: '1px solid #dc2626', background: 'transparent',
|
|
55
|
+
color: '#dc2626', fontSize: '0.85rem', fontWeight: 600,
|
|
56
|
+
cursor: 'pointer', fontFamily: 'inherit',
|
|
57
|
+
}, children: "Delete account" })] })] }));
|
|
58
|
+
}
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
// Section helper (internal)
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
function Section({ title, children }) {
|
|
63
|
+
return (_jsxs("div", { style: {
|
|
64
|
+
background: 'var(--surface, #ffffff)',
|
|
65
|
+
border: '1px solid var(--border, #e2e8f0)',
|
|
66
|
+
borderRadius: 'var(--radius, 0.75rem)',
|
|
67
|
+
padding: '1.25rem',
|
|
68
|
+
marginBottom: '1rem',
|
|
69
|
+
}, children: [_jsx("div", { style: { fontSize: '0.9rem', fontWeight: 700, marginBottom: '0.75rem', color: 'var(--ink, #1e293b)' }, children: title }), children] }));
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=ui-profile-page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-profile-page.js","sourceRoot":"","sources":["../src/ui-profile-page.tsx"],"names":[],"mappings":"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"}
|
package/dist/ui.d.ts
CHANGED
|
@@ -5,61 +5,14 @@
|
|
|
5
5
|
* plus Pro-specific components: ProBadge, UpgradeCard, BillingButton,
|
|
6
6
|
* SubscriptionStatus, ProProfilePage.
|
|
7
7
|
*/
|
|
8
|
-
import { type ReactNode } from 'react';
|
|
9
|
-
import type { ProAppStore } from './index.js';
|
|
10
8
|
export { Avatar, ThemeToggle, TextSizeToggle } from './ui-primitives.js';
|
|
11
9
|
export type { AvatarProps } from './ui-primitives.js';
|
|
12
|
-
export
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
export
|
|
17
|
-
export
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
/** Purple "PRO" badge. Shows subscription tier. */
|
|
21
|
-
export declare function ProBadge({ size }: ProBadgeProps): import("react/jsx-runtime").JSX.Element;
|
|
22
|
-
export interface SubscriptionStatusProps {
|
|
23
|
-
app: ProAppStore;
|
|
24
|
-
showUpgrade?: boolean;
|
|
25
|
-
}
|
|
26
|
-
/** Inline subscription status: PRO badge or "Free" with optional upgrade link. */
|
|
27
|
-
export declare function SubscriptionStatus({ app, showUpgrade }: SubscriptionStatusProps): import("react/jsx-runtime").JSX.Element;
|
|
28
|
-
export interface UpgradeCardProps {
|
|
29
|
-
app: ProAppStore;
|
|
30
|
-
title?: string;
|
|
31
|
-
description?: string;
|
|
32
|
-
priceLabel?: string;
|
|
33
|
-
features?: string[];
|
|
34
|
-
}
|
|
35
|
-
/** Styled card prompting the user to upgrade to Pro. */
|
|
36
|
-
export declare function UpgradeCard({ app, title, description, priceLabel, features, }: UpgradeCardProps): import("react/jsx-runtime").JSX.Element;
|
|
37
|
-
export interface BillingButtonProps {
|
|
38
|
-
app: ProAppStore;
|
|
39
|
-
label?: string;
|
|
40
|
-
variant?: 'primary' | 'secondary' | 'ghost';
|
|
41
|
-
}
|
|
42
|
-
/** Button that opens the Stripe billing portal. */
|
|
43
|
-
export declare function BillingButton({ app, label, variant }: BillingButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
44
|
-
export interface ProfileMenuProps {
|
|
45
|
-
app: ProAppStore;
|
|
46
|
-
showThemeToggle?: boolean;
|
|
47
|
-
showBilling?: boolean;
|
|
48
|
-
children?: ReactNode;
|
|
49
|
-
}
|
|
50
|
-
/** Avatar button that opens dropdown with Pro features: badge, billing, theme, sign out. */
|
|
51
|
-
export declare function ProfileMenu({ app, showThemeToggle, showBilling, children }: ProfileMenuProps): import("react/jsx-runtime").JSX.Element | null;
|
|
52
|
-
export interface ProProfilePageProps {
|
|
53
|
-
app: ProAppStore;
|
|
54
|
-
showThemeToggle?: boolean;
|
|
55
|
-
}
|
|
56
|
-
/** Full-page profile/settings with subscription info, billing, theme, danger zone. */
|
|
57
|
-
export declare function ProProfilePage({ app, showThemeToggle }: ProProfilePageProps): import("react/jsx-runtime").JSX.Element;
|
|
58
|
-
export interface GateScreenProps {
|
|
59
|
-
gate: 'loading' | 'signed-out' | 'no-subscription';
|
|
60
|
-
app: ProAppStore;
|
|
61
|
-
appName?: string | undefined;
|
|
62
|
-
}
|
|
63
|
-
/** Renders the appropriate gate screen (loading, sign-in, or upgrade). */
|
|
64
|
-
export declare function GateScreen({ gate, app, appName }: GateScreenProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export { SignInButton, ProBadge, SubscriptionStatus, UpgradeCard, BillingButton } from './ui-pro-components.js';
|
|
11
|
+
export type { SignInButtonProps, ProBadgeProps, SubscriptionStatusProps, UpgradeCardProps, BillingButtonProps, } from './ui-pro-components.js';
|
|
12
|
+
export { ProfileMenu } from './ui-profile-menu.js';
|
|
13
|
+
export type { ProfileMenuProps } from './ui-profile-menu.js';
|
|
14
|
+
export { ProProfilePage } from './ui-profile-page.js';
|
|
15
|
+
export type { ProProfilePageProps } from './ui-profile-page.js';
|
|
16
|
+
export { GateScreen } from './ui-gate.js';
|
|
17
|
+
export type { GateScreenProps } from './ui-gate.js';
|
|
65
18
|
//# sourceMappingURL=ui.d.ts.map
|
package/dist/ui.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,kBAAkB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAChH,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAGhE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/ui.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
1
|
/**
|
|
3
2
|
* @proappstore/sdk/ui — Full UI component library for Pro apps.
|
|
4
3
|
*
|
|
@@ -6,270 +5,14 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
6
5
|
* plus Pro-specific components: ProBadge, UpgradeCard, BillingButton,
|
|
7
6
|
* SubscriptionStatus, ProProfilePage.
|
|
8
7
|
*/
|
|
9
|
-
import { useState, useEffect, useCallback, useRef } from 'react';
|
|
10
|
-
import { useProAuth, useProSubscription, useTheme } from './hooks.js';
|
|
11
8
|
// Re-export base primitives
|
|
12
9
|
export { Avatar, ThemeToggle, TextSizeToggle } from './ui-primitives.js';
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
fontWeight: 700,
|
|
22
|
-
cursor: 'pointer',
|
|
23
|
-
fontFamily: 'inherit',
|
|
24
|
-
}, children: label }));
|
|
25
|
-
}
|
|
26
|
-
/** Purple "PRO" badge. Shows subscription tier. */
|
|
27
|
-
export function ProBadge({ size = 'sm' }) {
|
|
28
|
-
const sizes = {
|
|
29
|
-
sm: { fontSize: '0.6rem', padding: '0.1rem 0.4rem' },
|
|
30
|
-
md: { fontSize: '0.7rem', padding: '0.2rem 0.5rem' },
|
|
31
|
-
lg: { fontSize: '0.8rem', padding: '0.25rem 0.6rem' },
|
|
32
|
-
};
|
|
33
|
-
return (_jsx("span", { style: {
|
|
34
|
-
...sizes[size],
|
|
35
|
-
fontWeight: 700,
|
|
36
|
-
background: 'var(--accent, #7c3aed)',
|
|
37
|
-
color: '#fff',
|
|
38
|
-
borderRadius: '0.25rem',
|
|
39
|
-
textTransform: 'uppercase',
|
|
40
|
-
letterSpacing: '0.03em',
|
|
41
|
-
whiteSpace: 'nowrap',
|
|
42
|
-
display: 'inline-flex',
|
|
43
|
-
alignItems: 'center',
|
|
44
|
-
}, children: "PRO" }));
|
|
45
|
-
}
|
|
46
|
-
/** Inline subscription status: PRO badge or "Free" with optional upgrade link. */
|
|
47
|
-
export function SubscriptionStatus({ app, showUpgrade = true }) {
|
|
48
|
-
const { subscription, isPro, loading, upgrade } = useProSubscription(app);
|
|
49
|
-
if (loading) {
|
|
50
|
-
return _jsx("span", { style: { fontSize: '0.85rem', color: 'var(--muted, #64748b)' }, children: "..." });
|
|
51
|
-
}
|
|
52
|
-
if (isPro) {
|
|
53
|
-
const renewal = subscription?.cancelAtPeriodEnd
|
|
54
|
-
? 'Cancels at period end'
|
|
55
|
-
: subscription?.currentPeriodEnd
|
|
56
|
-
? `Renews ${new Date(subscription.currentPeriodEnd).toLocaleDateString()}`
|
|
57
|
-
: '';
|
|
58
|
-
return (_jsxs("span", { style: { display: 'inline-flex', alignItems: 'center', gap: '0.4rem' }, children: [_jsx(ProBadge, { size: "md" }), renewal && _jsx("span", { style: { fontSize: '0.75rem', color: 'var(--muted, #64748b)' }, children: renewal })] }));
|
|
59
|
-
}
|
|
60
|
-
return (_jsxs("span", { style: { display: 'inline-flex', alignItems: 'center', gap: '0.5rem' }, children: [_jsx("span", { style: { fontSize: '0.85rem', color: 'var(--muted, #64748b)' }, children: "Free plan" }), showUpgrade && (_jsx("button", { onClick: () => upgrade(), style: {
|
|
61
|
-
background: 'none',
|
|
62
|
-
border: '1px solid var(--accent, #7c3aed)',
|
|
63
|
-
color: 'var(--accent, #7c3aed)',
|
|
64
|
-
padding: '0.2rem 0.6rem',
|
|
65
|
-
borderRadius: 'var(--radius-sm, 0.5rem)',
|
|
66
|
-
fontSize: '0.75rem',
|
|
67
|
-
fontWeight: 600,
|
|
68
|
-
cursor: 'pointer',
|
|
69
|
-
fontFamily: 'inherit',
|
|
70
|
-
}, children: "Upgrade" }))] }));
|
|
71
|
-
}
|
|
72
|
-
/** Styled card prompting the user to upgrade to Pro. */
|
|
73
|
-
export function UpgradeCard({ app, title = 'Upgrade to Pro', description = 'Unlock all premium features with a Pro subscription.', priceLabel = '$9/month', features = ['Cloud sync across devices', 'AI-powered features', 'Unlimited storage', 'Priority support'], }) {
|
|
74
|
-
const { upgrade } = useProSubscription(app);
|
|
75
|
-
return (_jsxs("div", { style: {
|
|
76
|
-
background: 'var(--surface, #ffffff)',
|
|
77
|
-
border: '1px solid var(--accent, #7c3aed)',
|
|
78
|
-
borderRadius: 'var(--radius, 0.75rem)',
|
|
79
|
-
padding: '1.75rem',
|
|
80
|
-
maxWidth: 400,
|
|
81
|
-
}, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '0.5rem', marginBottom: '0.5rem' }, children: [_jsx("h3", { style: { fontSize: '1.25rem', fontWeight: 800, color: 'var(--ink-strong, var(--ink, #0f172a))', margin: 0 }, children: title }), _jsx(ProBadge, { size: "md" })] }), _jsx("p", { style: { fontSize: '0.9rem', color: 'var(--muted, #64748b)', marginBottom: '1rem' }, children: description }), features.length > 0 && (_jsx("ul", { style: { listStyle: 'none', padding: 0, margin: '0 0 1.25rem' }, children: features.map((f, i) => (_jsxs("li", { style: {
|
|
82
|
-
padding: '0.35rem 0',
|
|
83
|
-
fontSize: '0.85rem',
|
|
84
|
-
color: 'var(--ink, #1e293b)',
|
|
85
|
-
borderBottom: '1px solid var(--border, #e2e8f0)',
|
|
86
|
-
display: 'flex',
|
|
87
|
-
alignItems: 'center',
|
|
88
|
-
gap: '0.5rem',
|
|
89
|
-
}, children: [_jsx("span", { style: { color: 'var(--accent, #7c3aed)', fontWeight: 700 }, children: "+" }), f] }, i))) })), _jsxs("button", { onClick: () => upgrade(), style: {
|
|
90
|
-
width: '100%',
|
|
91
|
-
background: 'var(--accent, #7c3aed)',
|
|
92
|
-
color: '#fff',
|
|
93
|
-
border: 'none',
|
|
94
|
-
padding: '0.75rem',
|
|
95
|
-
borderRadius: 'var(--radius, 0.75rem)',
|
|
96
|
-
fontSize: '0.9rem',
|
|
97
|
-
fontWeight: 700,
|
|
98
|
-
cursor: 'pointer',
|
|
99
|
-
fontFamily: 'inherit',
|
|
100
|
-
}, children: ["Subscribe \u2014 ", priceLabel] })] }));
|
|
101
|
-
}
|
|
102
|
-
/** Button that opens the Stripe billing portal. */
|
|
103
|
-
export function BillingButton({ app, label = 'Manage billing', variant = 'secondary' }) {
|
|
104
|
-
const [loading, setLoading] = useState(false);
|
|
105
|
-
const handleClick = useCallback(async () => {
|
|
106
|
-
setLoading(true);
|
|
107
|
-
try {
|
|
108
|
-
await app.subscription.openPortal(window.location.href);
|
|
109
|
-
}
|
|
110
|
-
catch { }
|
|
111
|
-
finally {
|
|
112
|
-
setLoading(false);
|
|
113
|
-
}
|
|
114
|
-
}, [app]);
|
|
115
|
-
const baseStyle = {
|
|
116
|
-
padding: '0.6rem 1.25rem',
|
|
117
|
-
borderRadius: 'var(--radius, 0.75rem)',
|
|
118
|
-
fontSize: '0.85rem',
|
|
119
|
-
fontWeight: 600,
|
|
120
|
-
cursor: loading ? 'wait' : 'pointer',
|
|
121
|
-
fontFamily: 'inherit',
|
|
122
|
-
opacity: loading ? 0.7 : 1,
|
|
123
|
-
};
|
|
124
|
-
const variants = {
|
|
125
|
-
primary: { ...baseStyle, background: 'var(--accent, #7c3aed)', color: '#fff', border: 'none' },
|
|
126
|
-
secondary: { ...baseStyle, background: 'transparent', color: 'var(--ink, #1e293b)', border: '1px solid var(--border, #e2e8f0)' },
|
|
127
|
-
ghost: { ...baseStyle, background: 'none', color: 'var(--accent, #7c3aed)', border: 'none', padding: '0.4rem 0.75rem' },
|
|
128
|
-
};
|
|
129
|
-
return (_jsx("button", { onClick: handleClick, disabled: loading, style: variants[variant], children: loading ? 'Opening...' : label }));
|
|
130
|
-
}
|
|
131
|
-
/** Avatar button that opens dropdown with Pro features: badge, billing, theme, sign out. */
|
|
132
|
-
export function ProfileMenu({ app, showThemeToggle = true, showBilling = true, children }) {
|
|
133
|
-
const { user, signOut, deleteAccount } = useProAuth(app);
|
|
134
|
-
const { subscription, isPro, manageBilling } = useProSubscription(app);
|
|
135
|
-
const [open, setOpen] = useState(false);
|
|
136
|
-
const ref = useRef(null);
|
|
137
|
-
useEffect(() => {
|
|
138
|
-
if (!open)
|
|
139
|
-
return;
|
|
140
|
-
const handler = (e) => {
|
|
141
|
-
if (ref.current && !ref.current.contains(e.target))
|
|
142
|
-
setOpen(false);
|
|
143
|
-
};
|
|
144
|
-
document.addEventListener('mousedown', handler);
|
|
145
|
-
return () => document.removeEventListener('mousedown', handler);
|
|
146
|
-
}, [open]);
|
|
147
|
-
if (!user)
|
|
148
|
-
return null;
|
|
149
|
-
const handleSignOut = () => { signOut(); setOpen(false); };
|
|
150
|
-
const handleBilling = async () => { await manageBilling(); setOpen(false); };
|
|
151
|
-
const handleDelete = async () => {
|
|
152
|
-
const subClause = subscription?.status === 'active' ? ' and cancels your subscription' : '';
|
|
153
|
-
if (!confirm(`Delete your account? This permanently removes ALL your data across ALL apps${subClause}. This cannot be undone.`))
|
|
154
|
-
return;
|
|
155
|
-
if (!confirm('Are you absolutely sure? Last chance.'))
|
|
156
|
-
return;
|
|
157
|
-
await deleteAccount();
|
|
158
|
-
setOpen(false);
|
|
159
|
-
};
|
|
160
|
-
return (_jsxs("div", { ref: ref, style: { position: 'relative' }, children: [_jsx("button", { onClick: () => setOpen(!open), style: {
|
|
161
|
-
background: 'none',
|
|
162
|
-
border: '2px solid var(--border, #e2e8f0)',
|
|
163
|
-
borderRadius: '50%',
|
|
164
|
-
padding: 0,
|
|
165
|
-
cursor: 'pointer',
|
|
166
|
-
width: 32,
|
|
167
|
-
height: 32,
|
|
168
|
-
overflow: 'hidden',
|
|
169
|
-
display: 'block',
|
|
170
|
-
}, children: user.avatarUrl ? (_jsx("img", { src: user.avatarUrl, alt: user.login, width: 28, height: 28, style: { borderRadius: '50%', display: 'block' } })) : (_jsx("div", { style: { width: 28, height: 28, borderRadius: '50%', background: 'var(--accent, #7c3aed)', color: '#fff', display: 'flex', alignItems: 'center', justifyContent: 'center', fontSize: 13, fontWeight: 700 }, children: user.login.charAt(0).toUpperCase() })) }), open && (_jsxs("div", { style: {
|
|
171
|
-
position: 'absolute', top: 40, right: 0,
|
|
172
|
-
background: 'var(--surface, #ffffff)',
|
|
173
|
-
border: '1px solid var(--border, #e2e8f0)',
|
|
174
|
-
borderRadius: 'var(--radius, 0.75rem)',
|
|
175
|
-
boxShadow: '0 4px 20px rgba(0,0,0,0.1)',
|
|
176
|
-
minWidth: 220, padding: '0.5rem 0', zIndex: 100,
|
|
177
|
-
}, children: [_jsxs("div", { style: { padding: '0.5rem 1rem', borderBottom: '1px solid var(--border, #e2e8f0)', display: 'flex', alignItems: 'center', gap: '0.5rem' }, children: [_jsx("strong", { style: { fontSize: '0.85rem', color: 'var(--ink, #1e293b)' }, children: user.login }), isPro && _jsx(ProBadge, {})] }), showThemeToggle && (_jsxs("div", { style: { padding: '0.5rem 1rem', borderBottom: '1px solid var(--border, #e2e8f0)', display: 'flex', alignItems: 'center', justifyContent: 'space-between' }, children: [_jsx("span", { style: { fontSize: '0.85rem', color: 'var(--muted, #64748b)' }, children: "Theme" }), _jsx(ThemeToggleInline, {})] })), showBilling && isPro && (_jsx("button", { onClick: handleBilling, style: menuItemStyle, children: "Manage billing" })), children, _jsx("button", { onClick: handleSignOut, style: menuItemStyle, children: "Sign out" }), _jsx("button", { onClick: handleDelete, style: { ...menuItemStyle, color: '#dc2626' }, children: "Delete account" })] }))] }));
|
|
178
|
-
}
|
|
179
|
-
/** Inline theme toggle for menu (imports from same file to avoid circular) */
|
|
180
|
-
function ThemeToggleInline() {
|
|
181
|
-
const { theme, preference, setPreference } = useTheme();
|
|
182
|
-
const cycle = useCallback(() => {
|
|
183
|
-
const order = ['system', 'light', 'dark'];
|
|
184
|
-
const idx = order.indexOf(preference);
|
|
185
|
-
setPreference(order[(idx + 1) % order.length]);
|
|
186
|
-
}, [preference, setPreference]);
|
|
187
|
-
const icon = theme === 'dark' ? (_jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("circle", { cx: "12", cy: "12", r: "5" }), _jsx("line", { x1: "12", y1: "1", x2: "12", y2: "3" }), _jsx("line", { x1: "12", y1: "21", x2: "12", y2: "23" }), _jsx("line", { x1: "4.22", y1: "4.22", x2: "5.64", y2: "5.64" }), _jsx("line", { x1: "18.36", y1: "18.36", x2: "19.78", y2: "19.78" }), _jsx("line", { x1: "1", y1: "12", x2: "3", y2: "12" }), _jsx("line", { x1: "21", y1: "12", x2: "23", y2: "12" }), _jsx("line", { x1: "4.22", y1: "19.78", x2: "5.64", y2: "18.36" }), _jsx("line", { x1: "18.36", y1: "5.64", x2: "19.78", y2: "4.22" })] })) : (_jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: _jsx("path", { d: "M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" }) }));
|
|
188
|
-
return (_jsx("button", { onClick: cycle, "aria-label": `Theme: ${preference}`, style: {
|
|
189
|
-
width: 32, height: 32, borderRadius: 'var(--radius-sm, 0.5rem)',
|
|
190
|
-
border: '1px solid var(--border, #e2e8f0)', background: 'var(--surface, #ffffff)',
|
|
191
|
-
color: 'var(--ink, #1e293b)', display: 'inline-flex', alignItems: 'center',
|
|
192
|
-
justifyContent: 'center', cursor: 'pointer', padding: 0, fontFamily: 'inherit',
|
|
193
|
-
}, children: icon }));
|
|
194
|
-
}
|
|
195
|
-
const menuItemStyle = {
|
|
196
|
-
display: 'block', width: '100%', padding: '0.5rem 1rem',
|
|
197
|
-
background: 'none', border: 'none', textAlign: 'left',
|
|
198
|
-
fontSize: '0.85rem', cursor: 'pointer',
|
|
199
|
-
color: 'var(--ink, #1e293b)', fontFamily: 'inherit',
|
|
200
|
-
};
|
|
201
|
-
/** Full-page profile/settings with subscription info, billing, theme, danger zone. */
|
|
202
|
-
export function ProProfilePage({ app, showThemeToggle = true }) {
|
|
203
|
-
const { user, loading, signOut, deleteAccount } = useProAuth(app);
|
|
204
|
-
const { subscription, isPro, loading: subLoading, upgrade, manageBilling } = useProSubscription(app);
|
|
205
|
-
const { preference, setPreference } = useTheme();
|
|
206
|
-
if (loading) {
|
|
207
|
-
return _jsx("div", { style: { padding: '2rem', textAlign: 'center', color: 'var(--muted, #64748b)' }, children: "Loading..." });
|
|
208
|
-
}
|
|
209
|
-
if (!user) {
|
|
210
|
-
return (_jsxs("div", { style: { padding: '2rem', textAlign: 'center' }, children: [_jsx("p", { style: { color: 'var(--muted, #64748b)', marginBottom: '1rem' }, children: "Sign in to view your profile." }), _jsx(SignInButton, { app: app })] }));
|
|
211
|
-
}
|
|
212
|
-
const handleDelete = async () => {
|
|
213
|
-
const subClause = subscription?.status === 'active' ? ' and cancels your subscription' : '';
|
|
214
|
-
if (!confirm(`Delete your account? This permanently removes ALL your data across ALL apps${subClause}. This cannot be undone.`))
|
|
215
|
-
return;
|
|
216
|
-
if (!confirm('Are you absolutely sure? Last chance.'))
|
|
217
|
-
return;
|
|
218
|
-
await deleteAccount();
|
|
219
|
-
};
|
|
220
|
-
const themeOptions = [
|
|
221
|
-
{ value: 'system', label: 'System' },
|
|
222
|
-
{ value: 'light', label: 'Light' },
|
|
223
|
-
{ value: 'dark', label: 'Dark' },
|
|
224
|
-
];
|
|
225
|
-
return (_jsxs("div", { style: { maxWidth: 520, margin: '0 auto', padding: '2rem 1rem' }, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '1rem', marginBottom: '2rem' }, children: [user.avatarUrl ? (_jsx("img", { src: user.avatarUrl, alt: user.login, width: 64, height: 64, style: { borderRadius: '50%' } })) : (_jsx("div", { style: { width: 64, height: 64, borderRadius: '50%', background: 'var(--accent, #7c3aed)', color: '#fff', display: 'flex', alignItems: 'center', justifyContent: 'center', fontSize: 28, fontWeight: 700 }, children: user.login.charAt(0).toUpperCase() })), _jsxs("div", { children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '0.5rem' }, children: [_jsx("span", { style: { fontSize: '1.25rem', fontWeight: 700, color: 'var(--ink-strong, var(--ink, #0f172a))' }, children: user.login }), isPro && _jsx(ProBadge, { size: "md" })] }), _jsx("div", { style: { fontSize: '0.85rem', color: 'var(--muted, #64748b)' }, children: "ProAppStore account" })] })] }), _jsx(Section, { title: "Subscription", children: subLoading ? (_jsx("p", { style: { fontSize: '0.85rem', color: 'var(--muted, #64748b)' }, children: "Loading..." })) : isPro ? (_jsxs("div", { children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '0.5rem', marginBottom: '0.75rem' }, children: [_jsx(ProBadge, { size: "lg" }), _jsx("span", { style: { fontSize: '0.9rem', fontWeight: 600, color: 'var(--ink, #1e293b)' }, children: "Active" })] }), subscription?.currentPeriodEnd && (_jsxs("p", { style: { fontSize: '0.82rem', color: 'var(--muted, #64748b)', marginBottom: '0.75rem' }, children: [subscription.cancelAtPeriodEnd ? 'Cancels' : 'Renews', " on ", new Date(subscription.currentPeriodEnd).toLocaleDateString()] })), _jsx(BillingButton, { app: app, variant: "secondary" })] })) : (_jsxs("div", { children: [_jsx("p", { style: { fontSize: '0.85rem', color: 'var(--muted, #64748b)', marginBottom: '0.75rem' }, children: "You're on the free plan. Upgrade to unlock all premium features." }), _jsx("button", { onClick: () => upgrade(), style: {
|
|
226
|
-
background: 'var(--accent, #7c3aed)', color: '#fff', border: 'none',
|
|
227
|
-
padding: '0.6rem 1.25rem', borderRadius: 'var(--radius, 0.75rem)',
|
|
228
|
-
fontSize: '0.85rem', fontWeight: 700, cursor: 'pointer', fontFamily: 'inherit',
|
|
229
|
-
}, children: "Upgrade to Pro \u2014 $9/mo" })] })) }), showThemeToggle && (_jsx(Section, { title: "Appearance", children: _jsx("div", { style: { display: 'flex', gap: '0.5rem' }, children: themeOptions.map((opt) => (_jsx("button", { onClick: () => setPreference(opt.value), style: {
|
|
230
|
-
flex: 1, padding: '0.5rem',
|
|
231
|
-
borderRadius: 'var(--radius-sm, 0.5rem)',
|
|
232
|
-
border: preference === opt.value ? '2px solid var(--accent, #7c3aed)' : '1px solid var(--border, #e2e8f0)',
|
|
233
|
-
background: preference === opt.value ? 'var(--accent-soft, #f5f3ff)' : 'transparent',
|
|
234
|
-
color: preference === opt.value ? 'var(--accent, #7c3aed)' : 'var(--muted, #64748b)',
|
|
235
|
-
fontWeight: preference === opt.value ? 700 : 500,
|
|
236
|
-
fontSize: '0.85rem', cursor: 'pointer', fontFamily: 'inherit',
|
|
237
|
-
}, children: opt.label }, opt.value))) }) })), _jsx("button", { onClick: signOut, style: {
|
|
238
|
-
width: '100%', padding: '0.75rem',
|
|
239
|
-
borderRadius: 'var(--radius, 0.75rem)',
|
|
240
|
-
border: '1px solid var(--border, #e2e8f0)',
|
|
241
|
-
background: 'var(--surface, #ffffff)',
|
|
242
|
-
color: 'var(--ink, #1e293b)',
|
|
243
|
-
fontSize: '0.9rem', fontWeight: 600,
|
|
244
|
-
cursor: 'pointer', marginBottom: '1.5rem', fontFamily: 'inherit',
|
|
245
|
-
}, children: "Sign out" }), _jsxs("div", { style: { border: '1px solid #fecaca', borderRadius: 'var(--radius, 0.75rem)', padding: '1.25rem' }, children: [_jsx("div", { style: { fontSize: '0.9rem', fontWeight: 700, color: '#dc2626', marginBottom: '0.5rem' }, children: "Danger zone" }), _jsxs("p", { style: { fontSize: '0.85rem', color: 'var(--muted, #64748b)', marginBottom: '0.75rem' }, children: ["Permanently delete your account and all data across all apps.", isPro && ' Your subscription will be cancelled.'] }), _jsx("button", { onClick: handleDelete, style: {
|
|
246
|
-
padding: '0.5rem 1rem', borderRadius: 'var(--radius-sm, 0.5rem)',
|
|
247
|
-
border: '1px solid #dc2626', background: 'transparent',
|
|
248
|
-
color: '#dc2626', fontSize: '0.85rem', fontWeight: 600,
|
|
249
|
-
cursor: 'pointer', fontFamily: 'inherit',
|
|
250
|
-
}, children: "Delete account" })] })] }));
|
|
251
|
-
}
|
|
252
|
-
/** Renders the appropriate gate screen (loading, sign-in, or upgrade). */
|
|
253
|
-
export function GateScreen({ gate, app, appName }) {
|
|
254
|
-
if (gate === 'loading') {
|
|
255
|
-
return (_jsx("div", { style: { minHeight: '100dvh', display: 'flex', alignItems: 'center', justifyContent: 'center' }, children: _jsx("p", { style: { color: 'var(--muted, #64748b)' }, children: "Loading..." }) }));
|
|
256
|
-
}
|
|
257
|
-
if (gate === 'signed-out') {
|
|
258
|
-
return (_jsx("div", { style: { minHeight: '100dvh', display: 'flex', alignItems: 'center', justifyContent: 'center', padding: '2rem' }, children: _jsxs("div", { style: { maxWidth: 400, textAlign: 'center' }, children: [_jsx("h1", { style: { fontSize: '1.5rem', fontWeight: 800, marginBottom: '0.5rem', color: 'var(--ink, #1e293b)' }, children: appName || 'ProAppStore' }), _jsx("p", { style: { color: 'var(--muted, #64748b)', fontSize: '0.9rem', marginBottom: '1rem' }, children: "Sign in to your ProAppStore account to continue." }), _jsx(SignInButton, { app: app }), _jsx("p", { style: { color: 'var(--muted, #64748b)', fontSize: '0.75rem', marginTop: '0.75rem' }, children: "One account for all Pro apps." })] }) }));
|
|
259
|
-
}
|
|
260
|
-
// no-subscription
|
|
261
|
-
return (_jsx("div", { style: { minHeight: '100dvh', display: 'flex', alignItems: 'center', justifyContent: 'center', padding: '2rem' }, children: _jsx(UpgradeCard, { app: app, title: "Pro subscription required", description: `${appName || 'This app'} requires an active ProAppStore subscription.` }) }));
|
|
262
|
-
}
|
|
263
|
-
// ---------------------------------------------------------------------------
|
|
264
|
-
// Section helper (internal)
|
|
265
|
-
// ---------------------------------------------------------------------------
|
|
266
|
-
function Section({ title, children }) {
|
|
267
|
-
return (_jsxs("div", { style: {
|
|
268
|
-
background: 'var(--surface, #ffffff)',
|
|
269
|
-
border: '1px solid var(--border, #e2e8f0)',
|
|
270
|
-
borderRadius: 'var(--radius, 0.75rem)',
|
|
271
|
-
padding: '1.25rem',
|
|
272
|
-
marginBottom: '1rem',
|
|
273
|
-
}, children: [_jsx("div", { style: { fontSize: '0.9rem', fontWeight: 700, marginBottom: '0.75rem', color: 'var(--ink, #1e293b)' }, children: title }), children] }));
|
|
274
|
-
}
|
|
10
|
+
// Pro-branded primitives + subscription components
|
|
11
|
+
export { SignInButton, ProBadge, SubscriptionStatus, UpgradeCard, BillingButton } from './ui-pro-components.js';
|
|
12
|
+
// ProfileMenu (Pro-enhanced)
|
|
13
|
+
export { ProfileMenu } from './ui-profile-menu.js';
|
|
14
|
+
// ProProfilePage
|
|
15
|
+
export { ProProfilePage } from './ui-profile-page.js';
|
|
16
|
+
// GateScreen
|
|
17
|
+
export { GateScreen } from './ui-gate.js';
|
|
275
18
|
//# sourceMappingURL=ui.js.map
|
package/dist/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,4BAA4B;AAC5B,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzE,mDAAmD;AACnD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,kBAAkB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAShH,6BAA6B;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGnD,iBAAiB;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,aAAa;AACb,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
|