@proappstore/sdk 1.10.0 → 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @proappstore/sdk
2
2
 
3
- Unified SDK for paid apps on **proappstore.online**. Includes everything from `@freeappstore/sdk` (auth, kv, counters, rooms, proxy) plus subscription management, license keys, and a per-app SQL database.
3
+ Unified SDK for paid apps on **proappstore.online**. Includes everything from `@freeappstore/sdk` (auth, kv, counters, rooms, proxy) plus per-app SQL database, file storage, maps & routing, subscriptions, license keys, push notifications, SMS, server-side AI, and multi-tenant helpers.
4
4
 
5
5
  ## Installation
6
6
 
@@ -133,9 +133,9 @@ const license = await app.license.current()
133
133
  const valid = await app.license.validate('LIC-ABC-123')
134
134
  ```
135
135
 
136
- ### Maps (Geocoding + Embeds)
136
+ ### Maps (Geocoding, Routing + Embeds)
137
137
 
138
- Address-to-coordinates and map embeds. Powered by OpenStreetMap/Nominatim. No Google API keys needed.
138
+ Address-to-coordinates, driving directions, and map embeds. Powered by OpenStreetMap/Nominatim/OSRM. No Google API keys needed.
139
139
 
140
140
  ```ts
141
141
  // Geocode an address
@@ -145,6 +145,15 @@ const results = await app.maps.geocode('Times Square, New York')
145
145
  // Reverse geocode
146
146
  const place = await app.maps.reverseGeocode(40.758, -73.985)
147
147
 
148
+ // Driving route between two points
149
+ const route = await app.maps.route(
150
+ { lat: 40.758, lng: -73.985 }, // from
151
+ { lat: 40.748, lng: -73.986 }, // to
152
+ )
153
+ // route.geometry — GeoJSON LineString ([lng, lat] pairs)
154
+ // route.distanceMeters
155
+ // route.durationSeconds
156
+
148
157
  // Embed map in iframe
149
158
  <iframe src={app.maps.embedUrl(40.758, -73.985)} />
150
159
 
@@ -192,6 +201,112 @@ app.usage.flush() // final ping (called automatically on pagehide)
192
201
 
193
202
  What we record (also documented at <https://proappstore.online/privacy#usage-analytics>): per `(app, user, day)` rollups of session-seconds and API calls. No event-by-event logs, no IP, nothing while the tab is hidden or the user is signed out.
194
203
 
204
+ ### Notifications (Web Push)
205
+
206
+ Push notifications to your users. Subscribe from the browser, send targeted or broadcast pushes from your app (creator-only).
207
+
208
+ ```ts
209
+ // User side — subscribe to push notifications
210
+ await app.notifications.subscribe() // requests permission + registers SW
211
+ await app.notifications.unsubscribe()
212
+ const subscribed = await app.notifications.isSubscribed()
213
+ const permission = app.notifications.getPermission() // 'granted' | 'denied' | 'default'
214
+
215
+ // Creator side — send notifications
216
+ await app.notifications.send('user-123', {
217
+ title: 'Event starting!',
218
+ body: 'The meetup begins in 10 minutes.',
219
+ url: '/events/evt-1', // opens on click
220
+ })
221
+
222
+ // Broadcast to all subscribers
223
+ await app.notifications.broadcast({
224
+ title: 'New feature!',
225
+ body: 'Check out the new map view.',
226
+ })
227
+ ```
228
+
229
+ Your app needs a service worker for push. Save `Notifications.getServiceWorkerScript()` as `/sw.js`, or append it to an existing one:
230
+
231
+ ```ts
232
+ import { Notifications } from '@proappstore/sdk'
233
+
234
+ // Generate sw.js content
235
+ const swCode = Notifications.getServiceWorkerScript()
236
+ ```
237
+
238
+ ### SMS
239
+
240
+ Send text messages via the platform (Twilio-backed server-side). The platform owns the Twilio credentials — your app never sees them. Creator-only. Numbers must be E.164 format (`+15551234567`).
241
+
242
+ ```ts
243
+ // Send to one recipient
244
+ await app.sms.send('+15551234567', 'Your reservation is confirmed!')
245
+
246
+ // Broadcast to many
247
+ await app.sms.broadcast(
248
+ ['+15551234567', '+15559876543'],
249
+ 'Meetup starts in 30 minutes!',
250
+ )
251
+ ```
252
+
253
+ ### AI (Server-side LLM + Embeddings)
254
+
255
+ Workers AI — text generation, chat, and embeddings included in the platform subscription. No per-app key management; the platform handles billing.
256
+
257
+ ```ts
258
+ // Text generation
259
+ const { text } = await app.ai.generate('Write a haiku about coding')
260
+
261
+ // With model selection: 'fast' (Llama-3.1-8B) or 'smart' (Llama-3.3-70B)
262
+ const { text } = await app.ai.generate('Summarize this article...', {
263
+ model: 'smart',
264
+ maxTokens: 512,
265
+ temperature: 0.7,
266
+ })
267
+
268
+ // Multi-turn chat
269
+ const { text } = await app.ai.chat([
270
+ { role: 'system', content: 'You are a helpful event planner.' },
271
+ { role: 'user', content: 'Suggest a venue for 50 people in SF.' },
272
+ ])
273
+
274
+ // Embeddings — for search, recommendations, clustering
275
+ const { vectors } = await app.ai.embed('vinyasa flow')
276
+ // vectors[0] is a 1024-dim float array
277
+
278
+ // Batch embeddings with model selection: 'm3' (multilingual, 1024-dim) or 'base' (English, 768-dim)
279
+ const { vectors, dimensions } = await app.ai.embed(
280
+ ['yoga', 'pilates', 'meditation'],
281
+ { model: 'base' },
282
+ )
283
+ ```
284
+
285
+ ### Tenant Scope (Multi-tenant helpers)
286
+
287
+ Safe-by-default CRUD helpers for multi-tenant tables. Auto-injects `tenant_id` on inserts and auto-scopes all reads/writes — prevents accidental cross-tenant data leaks.
288
+
289
+ ```ts
290
+ // Create a scoped handle for a specific tenant
291
+ const tx = app.db.tenant('studio-123')
292
+
293
+ // All operations are automatically scoped to tenant_id = 'studio-123'
294
+ await tx.insert('clients', { id: 'c-1', name: 'Alice' })
295
+ const alice = await tx.find('clients', { id: 'c-1' })
296
+ const all = await tx.findMany('clients')
297
+ const count = await tx.count('clients')
298
+ await tx.update('clients', { id: 'c-1' }, { name: 'Alicia' })
299
+ await tx.delete('clients', { id: 'c-1' })
300
+
301
+ // Escape hatch — raw SQL with tenant_id available
302
+ const { rows } = await tx.db.query(
303
+ 'SELECT * FROM clients WHERE name LIKE ? AND tenant_id = ?',
304
+ ['A%', tx.tenantId],
305
+ )
306
+ ```
307
+
308
+ Your multi-tenant tables must have a `tenant_id TEXT` column. TenantScope doesn't replace `app.db.query` / `app.db.execute` — use those for joins, aggregates, or cross-tenant admin queries.
309
+
195
310
  ## React Hooks (recommended)
196
311
 
197
312
  Hooks give you full control over your UI while the platform handles auth, subscriptions, and gating. Import from `@proappstore/sdk/hooks`.
package/dist/hooks.d.ts CHANGED
@@ -2,6 +2,17 @@ import type { ProAppStore } from './index.js';
2
2
  import type { Subscription } from './types.js';
3
3
  export type { User } from '@freeappstore/sdk';
4
4
  export type { NotificationPayload, SendResult } from './notifications.js';
5
+ type ThemePreference = 'light' | 'dark' | 'system';
6
+ type ResolvedTheme = 'light' | 'dark';
7
+ /**
8
+ * Theme hook — zero-provider. Reads/writes localStorage, applies data-theme on <html>.
9
+ * Shared with FAS SDK (vendored, same localStorage key).
10
+ */
11
+ export declare function useTheme(): {
12
+ theme: ResolvedTheme;
13
+ preference: ThemePreference;
14
+ setPreference: (pref: ThemePreference) => void;
15
+ };
5
16
  /**
6
17
  * Auth state + actions. The primary way apps interact with platform identity.
7
18
  *
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,YAAY,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE1E;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,WAAW;;;;;;EAuB1C;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,WAAW;;;;wBAiBJ,MAAM;;EAapD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,WAAW;;;;;;EAoCnD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE;;;;;;;;wBAhF5B,MAAM;;EA+GpD"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,YAAY,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAO1E,KAAK,eAAe,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AACnD,KAAK,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;AAwDtC;;;GAGG;AACH,wBAAgB,QAAQ;;;0BAGmB,eAAe;EASzD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,WAAW;;;;;;EAuB1C;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,WAAW;;;;wBAiBJ,MAAM;;EAapD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,WAAW;;;;;;EAoCnD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE;;;;;;;;wBAhF5B,MAAM;;EA+GpD"}
package/dist/hooks.js CHANGED
@@ -1,4 +1,72 @@
1
- import { useState, useEffect, useCallback } from 'react';
1
+ import { useState, useEffect, useCallback, useSyncExternalStore } from 'react';
2
+ // ---------------------------------------------------------------------------
3
+ // useTheme — vendored from @freeappstore/sdk/hooks
4
+ // ---------------------------------------------------------------------------
5
+ const THEME_KEY = 'fas:theme';
6
+ const themeListeners = new Set();
7
+ function getSystemTheme() {
8
+ if (typeof window === 'undefined')
9
+ return 'light';
10
+ return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
11
+ }
12
+ function getStoredPreference() {
13
+ if (typeof window === 'undefined')
14
+ return 'system';
15
+ const stored = window.localStorage.getItem(THEME_KEY);
16
+ if (stored === 'light' || stored === 'dark' || stored === 'system')
17
+ return stored;
18
+ return 'system';
19
+ }
20
+ function resolveTheme(pref) {
21
+ return pref === 'system' ? getSystemTheme() : pref;
22
+ }
23
+ function applyTheme(theme) {
24
+ if (typeof document === 'undefined')
25
+ return;
26
+ document.documentElement.setAttribute('data-theme', theme);
27
+ document.documentElement.classList.toggle('dark', theme === 'dark');
28
+ }
29
+ function notifyThemeListeners() {
30
+ for (const fn of themeListeners)
31
+ fn();
32
+ }
33
+ if (typeof window !== 'undefined') {
34
+ applyTheme(resolveTheme(getStoredPreference()));
35
+ window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
36
+ if (getStoredPreference() === 'system') {
37
+ applyTheme(getSystemTheme());
38
+ notifyThemeListeners();
39
+ }
40
+ });
41
+ }
42
+ function subscribeTheme(cb) {
43
+ themeListeners.add(cb);
44
+ return () => themeListeners.delete(cb);
45
+ }
46
+ function getThemeSnapshot() {
47
+ const preference = getStoredPreference();
48
+ return { theme: resolveTheme(preference), preference };
49
+ }
50
+ let cachedSnapshot = getThemeSnapshot();
51
+ function getSnapshot() {
52
+ return cachedSnapshot;
53
+ }
54
+ /**
55
+ * Theme hook — zero-provider. Reads/writes localStorage, applies data-theme on <html>.
56
+ * Shared with FAS SDK (vendored, same localStorage key).
57
+ */
58
+ export function useTheme() {
59
+ const snapshot = useSyncExternalStore(subscribeTheme, getSnapshot, getSnapshot);
60
+ const setPreference = useCallback((pref) => {
61
+ if (typeof window === 'undefined')
62
+ return;
63
+ window.localStorage.setItem(THEME_KEY, pref);
64
+ applyTheme(resolveTheme(pref));
65
+ cachedSnapshot = getThemeSnapshot();
66
+ notifyThemeListeners();
67
+ }, []);
68
+ return { theme: snapshot.theme, preference: snapshot.preference, setPreference };
69
+ }
2
70
  /**
3
71
  * Auth state + actions. The primary way apps interact with platform identity.
4
72
  *
package/dist/hooks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
package/dist/shell.d.ts CHANGED
@@ -14,6 +14,8 @@ export interface ProShellProps {
14
14
  * is free to use. Flip the default back to false once Stripe billing is live.
15
15
  */
16
16
  allowFree?: boolean;
17
+ /** Show theme toggle in the profile menu. Default: true. */
18
+ showThemeToggle?: boolean;
17
19
  }
18
20
  /**
19
21
  * ProShell — platform-level Shell for all ProAppStore apps.
@@ -22,6 +24,7 @@ export interface ProShellProps {
22
24
  * - Auth initialization + sign-in gate
23
25
  * - Subscription check + upgrade wall (unless allowFree=true)
24
26
  * - Topbar with avatar, app name, menu (sign out, delete account, manage billing)
27
+ * - Theme support via CSS custom properties
25
28
  * - Only renders children when all gates pass
26
29
  *
27
30
  * Usage:
@@ -40,5 +43,5 @@ export interface ProShellProps {
40
43
  * }
41
44
  * ```
42
45
  */
43
- export declare function ProShell({ app, children, appName, allowFree }: ProShellProps): import("react/jsx-runtime").JSX.Element;
46
+ export declare function ProShell({ app, children, appName, allowFree, showThemeToggle }: ProShellProps): import("react/jsx-runtime").JSX.Element;
44
47
  //# sourceMappingURL=shell.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../src/shell.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,GAAG,EAAE,WAAW,CAAC;IACjB,6EAA6E;IAC7E,QAAQ,EAAE,SAAS,CAAC;IACpB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAID;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,QAAQ,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAgB,EAAE,EAAE,aAAa,2CAsJnF"}
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../src/shell.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,GAAG,EAAE,WAAW,CAAC;IACjB,6EAA6E;IAC7E,QAAQ,EAAE,SAAS,CAAC;IACpB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4DAA4D;IAC5D,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAID;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,QAAQ,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAgB,EAAE,eAAsB,EAAE,EAAE,aAAa,2CA6D3G"}
package/dist/shell.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState, useEffect, useCallback } from 'react';
3
+ import { ProfileMenu, SignInButton, ProBadge, GateScreen } from './ui.js';
3
4
  /**
4
5
  * ProShell — platform-level Shell for all ProAppStore apps.
5
6
  *
@@ -7,6 +8,7 @@ import { useState, useEffect, useCallback } from 'react';
7
8
  * - Auth initialization + sign-in gate
8
9
  * - Subscription check + upgrade wall (unless allowFree=true)
9
10
  * - Topbar with avatar, app name, menu (sign out, delete account, manage billing)
11
+ * - Theme support via CSS custom properties
10
12
  * - Only renders children when all gates pass
11
13
  *
12
14
  * Usage:
@@ -25,11 +27,10 @@ import { useState, useEffect, useCallback } from 'react';
25
27
  * }
26
28
  * ```
27
29
  */
28
- export function ProShell({ app, children, appName, allowFree = true }) {
30
+ export function ProShell({ app, children, appName, allowFree = true, showThemeToggle = true }) {
29
31
  const [user, setUser] = useState(app.auth.user);
30
32
  const [subscription, setSubscription] = useState(null);
31
33
  const [gate, setGate] = useState('loading');
32
- const [menuOpen, setMenuOpen] = useState(false);
33
34
  useEffect(() => {
34
35
  app.auth.init();
35
36
  return app.auth.onChange((u) => {
@@ -39,9 +40,6 @@ export function ProShell({ app, children, appName, allowFree = true }) {
39
40
  });
40
41
  }, [app]);
41
42
  // Check subscription after auth.
42
- // We always fetch — even when allowFree is true — so the topbar can show the
43
- // PRO badge / billing link to users who do happen to be subscribed. allowFree
44
- // only controls whether non-active subs get blocked at the gate.
45
43
  useEffect(() => {
46
44
  if (!user)
47
45
  return;
@@ -58,74 +56,30 @@ export function ProShell({ app, children, appName, allowFree = true }) {
58
56
  setGate(allowFree ? 'ready' : 'no-subscription');
59
57
  });
60
58
  }, [user, app, allowFree]);
61
- const handleSignOut = useCallback(() => {
62
- app.auth.signOut();
63
- setMenuOpen(false);
64
- }, [app]);
65
- const handleDeleteAccount = useCallback(async () => {
66
- const subClause = subscription?.status === 'active' ? ' and cancels your subscription' : '';
67
- if (!confirm(`Delete your account? This permanently removes ALL your data across ALL apps${subClause}. This cannot be undone.`))
68
- return;
69
- if (!confirm('Are you absolutely sure? Last chance.'))
70
- return;
71
- // Delete all KV data
72
- try {
73
- const keys = await app.kv.list();
74
- for (const key of keys) {
75
- await app.kv.delete(key);
76
- }
77
- }
78
- catch { }
79
- app.auth.signOut();
80
- setMenuOpen(false);
81
- }, [app]);
82
- const handleManageBilling = useCallback(async () => {
83
- try {
84
- await app.subscription.openPortal(window.location.href);
85
- }
86
- catch { }
87
- setMenuOpen(false);
88
- }, [app]);
89
- const handleUpgrade = useCallback(async () => {
90
- await app.subscription.openCheckout({
91
- priceId: 'price_pro_monthly',
92
- successUrl: window.location.href + '?upgraded=1',
93
- cancelUrl: window.location.href,
94
- });
95
- }, [app]);
96
59
  // --- Gates ---
97
- if (gate === 'loading') {
98
- return _jsx("div", { style: styles.center, children: _jsx("p", { style: styles.muted, children: "Loading..." }) });
99
- }
100
- if (gate === 'signed-out') {
101
- return (_jsx("div", { style: styles.center, children: _jsxs("div", { style: styles.card, children: [_jsx("h1", { style: styles.heading, children: appName || 'ProAppStore' }), _jsx("p", { style: styles.muted, children: "Sign in to your ProAppStore account to continue." }), _jsx("button", { onClick: () => app.auth.signIn(), style: styles.primaryBtn, children: "Sign in with GitHub" }), _jsx("p", { style: { ...styles.muted, fontSize: '0.75rem', marginTop: '0.75rem' }, children: "One account for all Pro apps." })] }) }));
102
- }
103
- if (gate === 'no-subscription') {
104
- return (_jsx("div", { style: styles.center, children: _jsxs("div", { style: styles.card, children: [_jsx("h1", { style: styles.heading, children: "Pro subscription required" }), _jsxs("p", { style: styles.muted, children: [appName || 'This app', " requires an active ProAppStore subscription ($9/month)."] }), _jsx("button", { onClick: handleUpgrade, style: styles.primaryBtn, children: "Subscribe to Pro" }), _jsx("button", { onClick: handleSignOut, style: styles.ghostBtn, children: "Sign out" })] }) }));
60
+ if (gate !== 'ready') {
61
+ return _jsx(GateScreen, { gate: gate, app: app, appName: appName });
105
62
  }
106
63
  // --- Ready: render app with topbar ---
107
- return (_jsxs("div", { style: styles.shell, children: [_jsxs("header", { style: styles.topbar, children: [_jsxs("div", { style: styles.topbarLeft, children: [_jsx("a", { href: "https://proappstore.online", style: styles.logoLink, children: "Pro" }), appName && _jsx("span", { style: styles.appName, children: appName })] }), _jsxs("div", { style: styles.topbarRight, children: [_jsx("button", { onClick: () => setMenuOpen(!menuOpen), style: styles.avatarBtn, children: _jsx("img", { src: user?.avatarUrl || '', alt: "", style: styles.avatar }) }), menuOpen && (_jsxs("div", { style: styles.menu, children: [_jsxs("div", { style: styles.menuHeader, children: [_jsx("strong", { children: user?.login }), subscription?.status === 'active' && _jsx("span", { style: styles.proBadge, children: "PRO" })] }), subscription?.status === 'active' && (_jsx("button", { onClick: handleManageBilling, style: styles.menuItem, children: "Manage billing" })), _jsx("button", { onClick: handleSignOut, style: styles.menuItem, children: "Sign out" }), _jsx("button", { onClick: handleDeleteAccount, style: { ...styles.menuItem, color: '#dc2626' }, children: "Delete account" })] }))] })] }), _jsx("main", { style: styles.main, children: children })] }));
64
+ return (_jsxs("div", { style: styles.shell, children: [_jsxs("header", { style: styles.topbar, children: [_jsxs("div", { style: styles.topbarLeft, children: [_jsx("a", { href: "https://proappstore.online", style: styles.logoLink, children: "Pro" }), appName && _jsx("span", { style: styles.appName, children: appName }), subscription?.status === 'active' && _jsx(ProBadge, {})] }), _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '0.5rem' }, children: [!user && _jsx(SignInButton, { app: app, label: "Sign in" }), user && _jsx(ProfileMenu, { app: app, showThemeToggle: showThemeToggle })] })] }), _jsx("main", { style: styles.main, children: children }), _jsxs("footer", { style: styles.footer, children: ["Part of", ' ', _jsx("a", { href: "https://proappstore.online", style: { color: 'var(--accent, #7c3aed)', fontWeight: 600, textDecoration: 'none' }, children: "ProAppStore" })] })] }));
108
65
  }
109
- // --- Inline styles (no Tailwind dependency — works in any app) ---
110
66
  const styles = {
111
67
  shell: { minHeight: '100dvh', display: 'flex', flexDirection: 'column' },
112
- topbar: { display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '0.5rem 1rem', borderBottom: '1px solid #e5e5e5', background: '#fff', position: 'sticky', top: 0, zIndex: 50 },
68
+ topbar: {
69
+ display: 'flex', alignItems: 'center', justifyContent: 'space-between',
70
+ padding: '0.5rem 1rem',
71
+ borderBottom: '1px solid var(--border, #e2e8f0)',
72
+ background: 'var(--surface, #ffffff)',
73
+ position: 'sticky', top: 0, zIndex: 50,
74
+ },
113
75
  topbarLeft: { display: 'flex', alignItems: 'center', gap: '0.75rem' },
114
- topbarRight: { position: 'relative' },
115
- logoLink: { fontWeight: 800, fontSize: '1rem', color: '#7c3aed', textDecoration: 'none' },
116
- appName: { fontSize: '0.85rem', fontWeight: 600, color: '#444' },
117
- avatarBtn: { background: 'none', border: '2px solid #e5e5e5', borderRadius: '50%', padding: 0, cursor: 'pointer', width: 32, height: 32, overflow: 'hidden' },
118
- avatar: { width: '100%', height: '100%', borderRadius: '50%' },
119
- menu: { position: 'absolute', top: 40, right: 0, background: '#fff', border: '1px solid #e5e5e5', borderRadius: '0.75rem', boxShadow: '0 4px 20px rgba(0,0,0,0.1)', minWidth: 180, padding: '0.5rem 0', zIndex: 100 },
120
- menuHeader: { padding: '0.5rem 1rem', borderBottom: '1px solid #f0f0f0', display: 'flex', alignItems: 'center', gap: '0.5rem', fontSize: '0.85rem' },
121
- menuItem: { display: 'block', width: '100%', padding: '0.5rem 1rem', background: 'none', border: 'none', textAlign: 'left', fontSize: '0.85rem', cursor: 'pointer', color: '#333' },
122
- proBadge: { fontSize: '0.6rem', fontWeight: 700, background: '#7c3aed', color: '#fff', padding: '0.1rem 0.4rem', borderRadius: '0.25rem' },
123
- center: { minHeight: '100dvh', display: 'flex', alignItems: 'center', justifyContent: 'center', padding: '2rem' },
124
- card: { maxWidth: 400, textAlign: 'center' },
125
- heading: { fontSize: '1.5rem', fontWeight: 800, marginBottom: '0.5rem', color: '#111' },
126
- muted: { color: '#666', fontSize: '0.9rem', marginBottom: '1rem' },
127
- primaryBtn: { background: '#7c3aed', color: '#fff', border: 'none', padding: '0.75rem 2rem', borderRadius: '0.75rem', fontSize: '0.9rem', fontWeight: 700, cursor: 'pointer', marginTop: '0.5rem' },
128
- ghostBtn: { background: 'none', color: '#666', border: 'none', padding: '0.5rem 1rem', fontSize: '0.8rem', cursor: 'pointer', marginTop: '0.5rem' },
76
+ logoLink: { fontWeight: 800, fontSize: '1rem', color: 'var(--accent, #7c3aed)', textDecoration: 'none' },
77
+ appName: { fontSize: '0.85rem', fontWeight: 600, color: 'var(--muted, #64748b)' },
129
78
  main: { flex: 1, display: 'flex', flexDirection: 'column' },
79
+ footer: {
80
+ padding: '1rem', textAlign: 'center', fontSize: '0.75rem',
81
+ color: 'var(--muted, #64748b)',
82
+ borderTop: '1px solid var(--border, #e2e8f0)',
83
+ },
130
84
  };
131
85
  //# sourceMappingURL=shell.js.map
package/dist/shell.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"shell.js","sourceRoot":"","sources":["../src/shell.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAkB,MAAM,OAAO,CAAC;AAsBzE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI,EAAiB;IAClF,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAsB,IAAI,CAAC,CAAC;IAC5E,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAO,SAAS,CAAC,CAAC;IAClD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEhD,SAAS,CAAC,GAAG,EAAE;QACb,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE;YAC7B,OAAO,CAAC,CAAC,CAAC,CAAC;YACX,IAAI,CAAC,CAAC;gBAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,iCAAiC;IACjC,6EAA6E;IAC7E,8EAA8E;IAC9E,iEAAiE;IACjE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACrC,eAAe,CAAC,GAAG,CAAC,CAAC;YACrB,IAAI,SAAS,IAAI,GAAG,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC1C,OAAO,CAAC,OAAO,CAAC,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,iBAAiB,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACZ,eAAe,CAAC,IAAI,CAAC,CAAC;YACtB,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;IAE3B,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;QACrC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,MAAM,mBAAmB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACjD,MAAM,SAAS,GAAG,YAAY,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5F,IAAI,CAAC,OAAO,CAAC,8EAA8E,SAAS,0BAA0B,CAAC;YAAE,OAAO;QACxI,IAAI,CAAC,OAAO,CAAC,uCAAuC,CAAC;YAAE,OAAO;QAC9D,qBAAqB;QACrB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YACjC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,MAAM,mBAAmB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACjD,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1D,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC3C,MAAM,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC;YAClC,OAAO,EAAE,mBAAmB;YAC5B,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,aAAa;YAChD,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;SAChC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,gBAAgB;IAEhB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,cAAK,KAAK,EAAE,MAAM,CAAC,MAAM,YAAE,YAAG,KAAK,EAAE,MAAM,CAAC,KAAK,2BAAgB,GAAM,CAAC;IACjF,CAAC;IAED,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,OAAO,CACL,cAAK,KAAK,EAAE,MAAM,CAAC,MAAM,YACvB,eAAK,KAAK,EAAE,MAAM,CAAC,IAAI,aACrB,aAAI,KAAK,EAAE,MAAM,CAAC,OAAO,YAAG,OAAO,IAAI,aAAa,GAAM,EAC1D,YAAG,KAAK,EAAE,MAAM,CAAC,KAAK,iEAAsD,EAC5E,iBAAQ,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,oCAEzD,EACT,YAAG,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,8CAEpE,IACA,GACF,CACP,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAC/B,OAAO,CACL,cAAK,KAAK,EAAE,MAAM,CAAC,MAAM,YACvB,eAAK,KAAK,EAAE,MAAM,CAAC,IAAI,aACrB,aAAI,KAAK,EAAE,MAAM,CAAC,OAAO,0CAAgC,EACzD,aAAG,KAAK,EAAE,MAAM,CAAC,KAAK,aACnB,OAAO,IAAI,UAAU,gEACpB,EACJ,iBAAQ,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,iCAE/C,EACT,iBAAQ,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,yBAE7C,IACL,GACF,CACP,CAAC;IACJ,CAAC;IAED,wCAAwC;IAExC,OAAO,CACL,eAAK,KAAK,EAAE,MAAM,CAAC,KAAK,aAEtB,kBAAQ,KAAK,EAAE,MAAM,CAAC,MAAM,aAC1B,eAAK,KAAK,EAAE,MAAM,CAAC,UAAU,aAC3B,YAAG,IAAI,EAAC,4BAA4B,EAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,oBAAS,EACnE,OAAO,IAAI,eAAM,KAAK,EAAE,MAAM,CAAC,OAAO,YAAG,OAAO,GAAQ,IACrD,EACN,eAAK,KAAK,EAAE,MAAM,CAAC,WAAW,aAC5B,iBAAQ,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,YACpE,cACE,GAAG,EAAE,IAAI,EAAE,SAAS,IAAI,EAAE,EAC1B,GAAG,EAAC,EAAE,EACN,KAAK,EAAE,MAAM,CAAC,MAAM,GACpB,GACK,EACR,QAAQ,IAAI,CACX,eAAK,KAAK,EAAE,MAAM,CAAC,IAAI,aACrB,eAAK,KAAK,EAAE,MAAM,CAAC,UAAU,aAC3B,2BAAS,IAAI,EAAE,KAAK,GAAU,EAC7B,YAAY,EAAE,MAAM,KAAK,QAAQ,IAAI,eAAM,KAAK,EAAE,MAAM,CAAC,QAAQ,oBAAY,IAC1E,EACL,YAAY,EAAE,MAAM,KAAK,QAAQ,IAAI,CACpC,iBAAQ,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,+BAAyB,CACtF,EACD,iBAAQ,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,yBAAmB,EACzE,iBAAQ,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,+BAAyB,IAC1G,CACP,IACG,IACC,EAGT,eAAM,KAAK,EAAE,MAAM,CAAC,IAAI,YACrB,QAAQ,GACJ,IACH,CACP,CAAC;AACJ,CAAC;AAED,oEAAoE;AAEpE,MAAM,MAAM,GAAwC;IAClD,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE;IACxE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;IACzM,UAAU,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE;IACrE,WAAW,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE;IACrC,QAAQ,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE;IACzF,OAAO,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE;IAChE,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAC7J,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE;IAC9D,IAAI,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,4BAA4B,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE;IACrN,UAAU,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE;IACpJ,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE;IACnL,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE;IAC1I,MAAM,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE;IACjH,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,QAAiB,EAAE;IACrD,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE;IACvF,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE;IAClE,UAAU,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE;IACnM,QAAQ,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE;IACnJ,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE;CAC5D,CAAC"}
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../src/shell.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * UI primitives vendored from @freeappstore/sdk/ui.
3
+ * PAS-specific: accent defaults to purple (#7c3aed) instead of blue.
4
+ *
5
+ * Vendor convention: copied from FAS, not imported cross-store.
6
+ * Bug fixes propagate via manual port.
7
+ */
8
+ import { type ReactNode } from 'react';
9
+ import type { ProAppStore } from './index.js';
10
+ import type { User } from '@freeappstore/sdk';
11
+ export interface AvatarProps {
12
+ user: User | null;
13
+ size?: number;
14
+ }
15
+ export declare function Avatar({ user, size }: AvatarProps): import("react/jsx-runtime").JSX.Element;
16
+ export interface SignInButtonProps {
17
+ app: ProAppStore;
18
+ label?: string;
19
+ }
20
+ export declare function SignInButton({ app, label }: SignInButtonProps): import("react/jsx-runtime").JSX.Element;
21
+ export declare function ThemeToggle(): import("react/jsx-runtime").JSX.Element;
22
+ export interface ProfileMenuProps {
23
+ app: ProAppStore;
24
+ showThemeToggle?: boolean;
25
+ children?: ReactNode;
26
+ }
27
+ export declare function ProfileMenu({ app, showThemeToggle, children }: ProfileMenuProps): import("react/jsx-runtime").JSX.Element | null;
28
+ export interface ProfilePageProps {
29
+ app: ProAppStore;
30
+ showThemeToggle?: boolean;
31
+ }
32
+ export declare function ProfilePage({ app, showThemeToggle }: ProfilePageProps): import("react/jsx-runtime").JSX.Element;
33
+ //# sourceMappingURL=ui-primitives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-primitives.d.ts","sourceRoot":"","sources":["../src/ui-primitives.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAA4C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAQ9C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,MAAM,CAAC,EAAE,IAAI,EAAE,IAAS,EAAE,EAAE,WAAW,2CAuBtD;AAMD,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,2CAerF;AAMD,wBAAgB,WAAW,4CAwC1B;AAMD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,WAAW,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,WAAW,CAAC,EAAE,GAAG,EAAE,eAAsB,EAAE,QAAQ,EAAE,EAAE,gBAAgB,kDAkEtF;AAaD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,WAAW,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,WAAW,CAAC,EAAE,GAAG,EAAE,eAAsB,EAAE,EAAE,gBAAgB,2CAwG5E"}
@@ -0,0 +1,153 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * UI primitives vendored from @freeappstore/sdk/ui.
4
+ * PAS-specific: accent defaults to purple (#7c3aed) instead of blue.
5
+ *
6
+ * Vendor convention: copied from FAS, not imported cross-store.
7
+ * Bug fixes propagate via manual port.
8
+ */
9
+ import { useState, useEffect, useCallback, useRef } from 'react';
10
+ import { useProAuth } from './hooks.js';
11
+ import { useTheme } from './hooks.js';
12
+ export function Avatar({ user, size = 32 }) {
13
+ if (user?.avatarUrl) {
14
+ return (_jsx("img", { src: user.avatarUrl, alt: user.login, width: size, height: size, style: { borderRadius: '50%', display: 'block' } }));
15
+ }
16
+ const initial = user?.login?.charAt(0).toUpperCase() ?? '?';
17
+ return (_jsx("div", { style: {
18
+ width: size, height: size, borderRadius: '50%',
19
+ background: 'var(--accent, #7c3aed)', color: '#fff',
20
+ display: 'flex', alignItems: 'center', justifyContent: 'center',
21
+ fontSize: size * 0.45, fontWeight: 700,
22
+ }, children: initial }));
23
+ }
24
+ export function SignInButton({ app, label = 'Sign in with GitHub' }) {
25
+ return (_jsx("button", { onClick: () => app.auth.signIn(), style: {
26
+ background: 'var(--accent, #7c3aed)', color: '#fff',
27
+ border: 'none', padding: '0.6rem 1.5rem',
28
+ borderRadius: 'var(--radius, 0.75rem)',
29
+ fontSize: '0.9rem', fontWeight: 700,
30
+ cursor: 'pointer', fontFamily: 'inherit',
31
+ }, children: label }));
32
+ }
33
+ // ---------------------------------------------------------------------------
34
+ // ThemeToggle
35
+ // ---------------------------------------------------------------------------
36
+ export function ThemeToggle() {
37
+ const { theme, preference, setPreference } = useTheme();
38
+ const cycle = useCallback(() => {
39
+ const order = ['system', 'light', 'dark'];
40
+ const idx = order.indexOf(preference);
41
+ setPreference(order[(idx + 1) % order.length]);
42
+ }, [preference, setPreference]);
43
+ const icon = theme === 'dark' ? (_jsxs("svg", { width: "18", height: "18", 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: "18", height: "18", 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" }) }));
44
+ return (_jsx("button", { onClick: cycle, "aria-label": `Theme: ${preference}`, title: `Theme: ${preference}`, style: {
45
+ width: 36, height: 36,
46
+ borderRadius: 'var(--radius, 0.75rem)',
47
+ border: '1px solid var(--border, #e2e8f0)',
48
+ background: 'var(--surface, #ffffff)',
49
+ color: 'var(--ink, #1e293b)',
50
+ display: 'inline-flex', alignItems: 'center', justifyContent: 'center',
51
+ cursor: 'pointer', padding: 0, fontFamily: 'inherit',
52
+ }, children: icon }));
53
+ }
54
+ export function ProfileMenu({ app, showThemeToggle = true, children }) {
55
+ const { user, signOut, deleteAccount } = useProAuth(app);
56
+ const [open, setOpen] = useState(false);
57
+ const ref = useRef(null);
58
+ useEffect(() => {
59
+ if (!open)
60
+ return;
61
+ const handler = (e) => {
62
+ if (ref.current && !ref.current.contains(e.target))
63
+ setOpen(false);
64
+ };
65
+ document.addEventListener('mousedown', handler);
66
+ return () => document.removeEventListener('mousedown', handler);
67
+ }, [open]);
68
+ if (!user)
69
+ return null;
70
+ const handleSignOut = () => { signOut(); setOpen(false); };
71
+ const handleDelete = async () => {
72
+ if (!confirm('Delete your account? This permanently removes ALL your data across ALL apps. This cannot be undone.'))
73
+ return;
74
+ if (!confirm('Are you absolutely sure? Last chance.'))
75
+ return;
76
+ await deleteAccount();
77
+ setOpen(false);
78
+ };
79
+ return (_jsxs("div", { ref: ref, style: { position: 'relative' }, children: [_jsx("button", { onClick: () => setOpen(!open), style: {
80
+ background: 'none', border: '2px solid var(--border, #e2e8f0)',
81
+ borderRadius: '50%', padding: 0, cursor: 'pointer',
82
+ width: 32, height: 32, overflow: 'hidden', display: 'block',
83
+ }, children: _jsx(Avatar, { user: user, size: 28 }) }), open && (_jsxs("div", { style: {
84
+ position: 'absolute', top: 40, right: 0,
85
+ background: 'var(--surface, #ffffff)',
86
+ border: '1px solid var(--border, #e2e8f0)',
87
+ borderRadius: 'var(--radius, 0.75rem)',
88
+ boxShadow: '0 4px 20px rgba(0,0,0,0.1)',
89
+ minWidth: 200, padding: '0.5rem 0', zIndex: 100,
90
+ }, children: [_jsx("div", { style: {
91
+ padding: '0.5rem 1rem',
92
+ borderBottom: '1px solid var(--border, #e2e8f0)',
93
+ fontSize: '0.85rem', fontWeight: 700,
94
+ color: 'var(--ink, #1e293b)',
95
+ }, children: user.login }), 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(ThemeToggle, {})] })), children, _jsx("button", { onClick: handleSignOut, style: menuItemStyle, children: "Sign out" }), _jsx("button", { onClick: handleDelete, style: { ...menuItemStyle, color: '#dc2626' }, children: "Delete account" })] }))] }));
96
+ }
97
+ const menuItemStyle = {
98
+ display: 'block', width: '100%', padding: '0.5rem 1rem',
99
+ background: 'none', border: 'none', textAlign: 'left',
100
+ fontSize: '0.85rem', cursor: 'pointer',
101
+ color: 'var(--ink, #1e293b)', fontFamily: 'inherit',
102
+ };
103
+ export function ProfilePage({ app, showThemeToggle = true }) {
104
+ const { user, loading, signIn, signOut, deleteAccount } = useProAuth(app);
105
+ const { preference, setPreference } = useTheme();
106
+ if (loading) {
107
+ return _jsx("div", { style: { padding: '2rem', textAlign: 'center', color: 'var(--muted, #64748b)' }, children: "Loading..." });
108
+ }
109
+ if (!user) {
110
+ 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 })] }));
111
+ }
112
+ const handleDelete = async () => {
113
+ if (!confirm('Delete your account? This permanently removes ALL your data across ALL apps. This cannot be undone.'))
114
+ return;
115
+ if (!confirm('Are you absolutely sure? Last chance.'))
116
+ return;
117
+ await deleteAccount();
118
+ };
119
+ const themeOptions = [
120
+ { value: 'system', label: 'System' },
121
+ { value: 'light', label: 'Light' },
122
+ { value: 'dark', label: 'Dark' },
123
+ ];
124
+ return (_jsxs("div", { style: { maxWidth: 480, margin: '0 auto', padding: '2rem 1rem' }, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '1rem', marginBottom: '2rem' }, children: [_jsx(Avatar, { user: user, size: 64 }), _jsxs("div", { children: [_jsx("div", { style: { fontSize: '1.25rem', fontWeight: 700, color: 'var(--ink-strong, var(--ink, #0f172a))' }, children: user.login }), _jsx("div", { style: { fontSize: '0.85rem', color: 'var(--muted, #64748b)' }, children: "ProAppStore account" })] })] }), showThemeToggle && (_jsxs("div", { style: {
125
+ background: 'var(--surface, #ffffff)',
126
+ border: '1px solid var(--border, #e2e8f0)',
127
+ borderRadius: 'var(--radius, 0.75rem)',
128
+ padding: '1.25rem', marginBottom: '1rem',
129
+ }, children: [_jsx("div", { style: { fontSize: '0.9rem', fontWeight: 700, marginBottom: '0.75rem', color: 'var(--ink, #1e293b)' }, children: "Appearance" }), _jsx("div", { style: { display: 'flex', gap: '0.5rem' }, children: themeOptions.map((opt) => (_jsx("button", { onClick: () => setPreference(opt.value), style: {
130
+ flex: 1, padding: '0.5rem',
131
+ borderRadius: 'var(--radius-sm, 0.5rem)',
132
+ border: preference === opt.value ? '2px solid var(--accent, #7c3aed)' : '1px solid var(--border, #e2e8f0)',
133
+ background: preference === opt.value ? 'var(--accent-soft, #f5f3ff)' : 'transparent',
134
+ color: preference === opt.value ? 'var(--accent, #7c3aed)' : 'var(--muted, #64748b)',
135
+ fontWeight: preference === opt.value ? 700 : 500,
136
+ fontSize: '0.85rem', cursor: 'pointer', fontFamily: 'inherit',
137
+ }, children: opt.label }, opt.value))) })] })), _jsx("button", { onClick: signOut, style: {
138
+ width: '100%', padding: '0.75rem',
139
+ borderRadius: 'var(--radius, 0.75rem)',
140
+ border: '1px solid var(--border, #e2e8f0)',
141
+ background: 'var(--surface, #ffffff)',
142
+ color: 'var(--ink, #1e293b)',
143
+ fontSize: '0.9rem', fontWeight: 600,
144
+ cursor: 'pointer', marginBottom: '1.5rem', fontFamily: 'inherit',
145
+ }, 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" }), _jsx("p", { style: { fontSize: '0.85rem', color: 'var(--muted, #64748b)', marginBottom: '0.75rem' }, children: "Permanently delete your account and all data across all apps." }), _jsx("button", { onClick: handleDelete, style: {
146
+ padding: '0.5rem 1rem',
147
+ borderRadius: 'var(--radius-sm, 0.5rem)',
148
+ border: '1px solid #dc2626', background: 'transparent',
149
+ color: '#dc2626', fontSize: '0.85rem', fontWeight: 600,
150
+ cursor: 'pointer', fontFamily: 'inherit',
151
+ }, children: "Delete account" })] })] }));
152
+ }
153
+ //# sourceMappingURL=ui-primitives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-primitives.js","sourceRoot":"","sources":["../src/ui-primitives.tsx"],"names":[],"mappings":"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"}
package/dist/ui.d.ts ADDED
@@ -0,0 +1,65 @@
1
+ /**
2
+ * @proappstore/sdk/ui — Full UI component library for Pro apps.
3
+ *
4
+ * Re-exports base primitives (Avatar, SignInButton, ThemeToggle, ProfileMenu)
5
+ * plus Pro-specific components: ProBadge, UpgradeCard, BillingButton,
6
+ * SubscriptionStatus, ProProfilePage.
7
+ */
8
+ import { type ReactNode } from 'react';
9
+ import type { ProAppStore } from './index.js';
10
+ export { Avatar, ThemeToggle } from './ui-primitives.js';
11
+ export type { AvatarProps } from './ui-primitives.js';
12
+ export interface SignInButtonProps {
13
+ app: ProAppStore;
14
+ label?: string;
15
+ }
16
+ export declare function SignInButton({ app, label }: SignInButtonProps): import("react/jsx-runtime").JSX.Element;
17
+ export interface ProBadgeProps {
18
+ size?: 'sm' | 'md' | 'lg';
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;
65
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAA4C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAM9C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAMtD,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;AAMD,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;AA+CD,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;AAMD,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.js ADDED
@@ -0,0 +1,275 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * @proappstore/sdk/ui — Full UI component library for Pro apps.
4
+ *
5
+ * Re-exports base primitives (Avatar, SignInButton, ThemeToggle, ProfileMenu)
6
+ * plus Pro-specific components: ProBadge, UpgradeCard, BillingButton,
7
+ * SubscriptionStatus, ProProfilePage.
8
+ */
9
+ import { useState, useEffect, useCallback, useRef } from 'react';
10
+ import { useProAuth, useProSubscription, useTheme } from './hooks.js';
11
+ // Re-export base primitives
12
+ export { Avatar, ThemeToggle } from './ui-primitives.js';
13
+ export function SignInButton({ app, label = 'Sign in with GitHub' }) {
14
+ return (_jsx("button", { onClick: () => app.auth.signIn(), style: {
15
+ background: 'var(--accent, #7c3aed)',
16
+ color: '#fff',
17
+ border: 'none',
18
+ padding: '0.6rem 1.5rem',
19
+ borderRadius: 'var(--radius, 0.75rem)',
20
+ fontSize: '0.9rem',
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
+ }
275
+ //# sourceMappingURL=ui.js.map
package/dist/ui.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proappstore/sdk",
3
- "version": "1.10.0",
3
+ "version": "1.13.0",
4
4
  "description": "Browser SDK for paid apps on proappstore.online — subscriptions, license keys, premium modules.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -18,6 +18,10 @@
18
18
  "./hooks": {
19
19
  "types": "./dist/hooks.d.ts",
20
20
  "import": "./dist/hooks.js"
21
+ },
22
+ "./ui": {
23
+ "types": "./dist/ui.d.ts",
24
+ "import": "./dist/ui.js"
21
25
  }
22
26
  },
23
27
  "repository": {
@@ -30,7 +34,7 @@
30
34
  "README.md"
31
35
  ],
32
36
  "dependencies": {
33
- "@freeappstore/sdk": "^0.7.1"
37
+ "@freeappstore/sdk": "^0.8.0"
34
38
  },
35
39
  "peerDependencies": {
36
40
  "react": "^18.0.0 || ^19.0.0"