@manyrows/appkit-react 0.1.4 → 0.1.6
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/index.cjs +435 -53
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -3
- package/dist/index.d.ts +10 -3
- package/dist/index.js +436 -55
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/runtime.ts","../src/AppKit.tsx"],"names":["createContext","useContext","jsx","Fragment","jsxs","useId","React","useMemo","useRef","useState","useEffect"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { AppKitRuntime } from \"./types\";\n\nexport function getManyRowsAppKitRuntime(): AppKitRuntime | null {\n const w = window as any;\n\n // Preferred: namespaced\n if (w.ManyRows?.AppKit?.init) return w.ManyRows.AppKit;\n\n // Back-compat: function globals\n if (w.initManyRowsAppKit) {\n return {\n init: w.initManyRowsAppKit,\n destroy: w.destroyManyRowsAppKit,\n info: w.getManyRowsAppKitInfo,\n };\n }\n\n return null;\n}\n\nexport function ensureScriptLoaded(src: string, timeoutMs: number): Promise<void> {\n return new Promise((resolve, reject) => {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n resolve(); // SSR: noop\n return;\n }\n\n // Already present?\n if (document.querySelector(`script[data-manyrows-appkit=\"true\"][src=\"${src}\"]`)) {\n resolve();\n return;\n }\n\n // If runtime already exists, we’re good.\n if (getManyRowsAppKitRuntime()) {\n resolve();\n return;\n }\n\n const s = document.createElement(\"script\");\n s.src = src;\n s.async = true;\n s.crossOrigin = \"anonymous\";\n s.setAttribute(\"data-manyrows-appkit\", \"true\");\n\n const timer = window.setTimeout(() => {\n cleanup();\n reject(new Error(`Timed out loading AppKit script after ${timeoutMs}ms: ${src}`));\n }, timeoutMs);\n\n function cleanup() {\n window.clearTimeout(timer);\n s.onload = null;\n s.onerror = null;\n }\n\n s.onload = () => {\n cleanup();\n resolve();\n };\n\n s.onerror = (e) => {\n cleanup();\n reject(e);\n };\n\n document.head.appendChild(s);\n });\n}\n","// appkit-react/AppKit.tsx\nimport React, {\n createContext,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type {\n ManyRowsAppKitError,\n ManyRowsAppKitReady,\n ManyRowsAppKitHandle,\n ManyRowsAppKitSnapshot,\n} from \"./types\";\nimport { ensureScriptLoaded, getManyRowsAppKitRuntime } from \"./runtime\";\n\n// -----------------------------\n// Tiny semver helpers (no deps)\n// -----------------------------\n\ntype Semver = { major: number; minor: number; patch: number };\n\nfunction parseSemver(v: unknown): Semver | null {\n if (typeof v !== \"string\") return null;\n const s = v.trim();\n const m = /^v?(\\d+)\\.(\\d+)\\.(\\d+)/.exec(s);\n if (!m) return null;\n const major = Number(m[1]);\n const minor = Number(m[2]);\n const patch = Number(m[3]);\n if (!Number.isFinite(major) || !Number.isFinite(minor) || !Number.isFinite(patch)) return null;\n return { major, minor, patch };\n}\n\nfunction cmpSemver(a: Semver, b: Semver): number {\n if (a.major !== b.major) return a.major - b.major;\n if (a.minor !== b.minor) return a.minor - b.minor;\n return a.patch - b.patch;\n}\n\nfunction semverGte(runtimeVersion: unknown, minVersion: string): boolean {\n const r = parseSemver(runtimeVersion);\n const m = parseSemver(minVersion);\n if (!r || !m) return false;\n return cmpSemver(r, m) >= 0;\n}\n\n// -----------------------------\n// Prod/dev safety helpers\n// -----------------------------\n\nfunction isProbablyProdBuild(): boolean {\n const p = (globalThis as any)?.process;\n const env = p?.env?.NODE_ENV;\n return env === \"production\";\n}\n\nfunction looksLikeLocalhost(url: string): boolean {\n const s = (url || \"\").trim().toLowerCase();\n return (\n s.startsWith(\"http://localhost\") ||\n s.startsWith(\"https://localhost\") ||\n s.startsWith(\"http://127.0.0.1\") ||\n s.startsWith(\"https://127.0.0.1\") ||\n s.startsWith(\"http://0.0.0.0\") ||\n s.startsWith(\"https://0.0.0.0\")\n );\n}\n\n// -----------------------------\n// Auth predicate (snapshot is loose)\n// -----------------------------\n\nfunction isAuthedSnapshot(s: ManyRowsAppKitSnapshot | null | undefined): boolean {\n if (!s || typeof s !== \"object\") return false;\n const status = (s as any).status;\n if (status !== \"authenticated\") return false;\n\n const appData = (s as any).appData;\n if (!appData || typeof appData !== \"object\") return false;\n\n // don’t over-constrain v0\n return true;\n}\n\n// -----------------------------\n// AppKit context + hook\n// -----------------------------\n\nexport type AppKitContextValue = {\n status: \"idle\" | \"loading\" | \"mounted\" | \"error\";\n error: ManyRowsAppKitError | null;\n\n readyInfo: ManyRowsAppKitReady | null;\n snapshot: ManyRowsAppKitSnapshot | null;\n\n // convenience derived flag\n isAuthenticated: boolean;\n\n // present when runtime supports handle API\n handle: ManyRowsAppKitHandle | null;\n\n // convenience methods (safe no-ops if handle missing)\n refresh: () => void;\n logout: () => Promise<void>;\n setToken: (tok: string | null) => void;\n destroy: () => void;\n info: () => ManyRowsAppKitReady | null;\n};\n\nconst Ctx = createContext<AppKitContextValue | null>(null);\n\nexport function useAppKit(): AppKitContextValue {\n const v = useContext(Ctx);\n if (!v) throw new Error(\"useAppKit() must be used under <AppKit />\");\n return v;\n}\n\n/**\n * Render children only when the AppKit runtime is authenticated and appData exists.\n * Use this to mount your customer app \"behind\" the AppKit login screen.\n */\nexport function AppKitAuthed(props: {\n children: React.ReactNode;\n /**\n * Optional: shown when not authenticated (or still checking).\n * Default: null (render nothing).\n */\n fallback?: React.ReactNode;\n}) {\n const { isAuthenticated } = useAppKit();\n if (!isAuthenticated) return <>{props.fallback ?? null}</>;\n return <>{props.children}</>;\n}\n\n// -----------------------------\n// Props\n// -----------------------------\n\nexport type AppKitProps = {\n workspace: string;\n\n // ✅ replaces project+env\n appId: string;\n\n baseURL?: string;\n\n src?: string;\n timeoutMs?: number;\n\n silent?: boolean;\n throwOnError?: boolean;\n\n onReady?: (info: ManyRowsAppKitReady) => void;\n onError?: (err: ManyRowsAppKitError) => void;\n\n /**\n * Fired for every snapshot update from the runtime (checking/unauth/authed/etc).\n */\n onState?: (snapshot: ManyRowsAppKitSnapshot | null) => void;\n\n /**\n * Fired when AppKit is authenticated and appData is available.\n * This is the correct place to render the customer app (imperative style).\n */\n onReadyState?: (snapshot: ManyRowsAppKitSnapshot) => void;\n\n className?: string;\n style?: React.CSSProperties;\n containerId?: string;\n\n runtimeMinVersion?: string;\n runtimeExactVersion?: string;\n\n loading?: React.ReactNode;\n errorUI?: (err: ManyRowsAppKitError) => React.ReactNode;\n hideLoadingUI?: boolean;\n hideErrorUI?: boolean;\n\n // kept for future (no longer used now that env is arbitrary)\n allowDevEnvInProd?: boolean;\n blockLocalhostBaseURLInProd?: boolean;\n\n // ✅ allow <AppKit>children</AppKit>\n children?: React.ReactNode;\n};\n\n// -----------------------------\n// Errors / UI\n// -----------------------------\n\nfunction mkErr(\n code: ManyRowsAppKitError[\"code\"],\n message: string,\n details?: unknown\n): ManyRowsAppKitError {\n return { code, message, details };\n}\n\nfunction DefaultSkeleton() {\n return (\n <div\n aria-busy=\"true\"\n aria-live=\"polite\"\n style={{\n width: \"100%\",\n borderRadius: 10,\n border: \"1px solid rgba(0,0,0,0.08)\",\n padding: 12,\n }}\n >\n <div\n style={{\n height: 12,\n width: 140,\n borderRadius: 6,\n background: \"rgba(0,0,0,0.06)\",\n marginBottom: 10,\n }}\n />\n <div\n style={{\n height: 10,\n width: \"65%\",\n borderRadius: 6,\n background: \"rgba(0,0,0,0.06)\",\n marginBottom: 8,\n }}\n />\n <div\n style={{\n height: 10,\n width: \"40%\",\n borderRadius: 6,\n background: \"rgba(0,0,0,0.06)\",\n }}\n />\n </div>\n );\n}\n\nfunction DefaultError({ err }: { err: ManyRowsAppKitError }) {\n return (\n <div\n role=\"alert\"\n style={{\n width: \"100%\",\n borderRadius: 10,\n border: \"1px solid rgba(220, 38, 38, 0.35)\",\n background: \"rgba(220, 38, 38, 0.06)\",\n padding: 12,\n fontFamily:\n 'ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, \"Apple Color Emoji\", \"Segoe UI Emoji\"',\n }}\n >\n <div style={{ fontWeight: 700, marginBottom: 6 }}>ManyRows AppKit failed to load</div>\n <div style={{ fontSize: 13, marginBottom: 8 }}>\n <span style={{ fontWeight: 600 }}>{err.code}</span>: {err.message}\n </div>\n {err.details !== undefined ? (\n <pre\n style={{\n fontSize: 12,\n margin: 0,\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n opacity: 0.8,\n }}\n >\n {typeof err.details === \"string\" ? err.details : JSON.stringify(err.details, null, 2)}\n </pre>\n ) : null}\n </div>\n );\n}\n\n// -----------------------------\n// Component\n// -----------------------------\n\nexport function AppKit(props: AppKitProps) {\n const autoId = useId();\n const containerId = props.containerId ?? `manyrows-appkit-${autoId.replace(/[:]/g, \"\")}`;\n\n // If host supplies children, we assume host wants to own the authed UI.\n // In that case, suppress the runtime's *default* authed screen by passing renderAuthed={() => null}.\n const hasChildren = React.Children.count(props.children) > 0;\n\n const initKey = useMemo(\n () =>\n [\n containerId,\n props.workspace,\n props.appId,\n props.baseURL ?? \"\",\n props.src ?? \"\",\n props.runtimeMinVersion ?? \"\",\n props.runtimeExactVersion ?? \"\",\n props.allowDevEnvInProd ? \"1\" : \"0\",\n props.blockLocalhostBaseURLInProd === false ? \"0\" : \"1\",\n hasChildren ? \"children:1\" : \"children:0\",\n ].join(\"|\"),\n [\n containerId,\n props.workspace,\n props.appId,\n props.baseURL,\n props.src,\n props.runtimeMinVersion,\n props.runtimeExactVersion,\n props.allowDevEnvInProd,\n props.blockLocalhostBaseURLInProd,\n hasChildren,\n ]\n );\n\n const handleRef = useRef<ManyRowsAppKitHandle | null>(null);\n\n const [status, setStatus] = useState<\"idle\" | \"loading\" | \"mounted\" | \"error\">(\"idle\");\n const [lastError, setLastError] = useState<ManyRowsAppKitError | null>(null);\n\n const [readyInfo, setReadyInfo] = useState<ManyRowsAppKitReady | null>(null);\n const [snapshot, setSnapshot] = useState<ManyRowsAppKitSnapshot | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n\n setStatus(\"loading\");\n setLastError(null);\n setReadyInfo(null);\n setSnapshot(null);\n handleRef.current = null;\n\n const report = (err: ManyRowsAppKitError) => {\n setLastError(err);\n setStatus(\"error\");\n\n if (!props.silent) {\n // eslint-disable-next-line no-console\n console.warn(\"[@manyrows/appkit-react]\", err.code, err.message, err.details ?? \"\");\n }\n props.onError?.(err);\n };\n\n const init = async () => {\n if (!props.workspace?.trim() || !props.appId?.trim()) {\n report(\n mkErr(\"INVALID_PROPS\", \"workspace and appId are required.\", {\n workspace: props.workspace,\n appId: props.appId,\n })\n );\n return;\n }\n\n const prod = isProbablyProdBuild();\n\n if (\n prod &&\n props.blockLocalhostBaseURLInProd !== false &&\n props.baseURL &&\n looksLikeLocalhost(props.baseURL)\n ) {\n report(\n mkErr(\n \"BASE_URL_NOT_ALLOWED_IN_PROD\",\n \"localhost baseURL is not allowed in production builds.\",\n { baseURL: props.baseURL }\n )\n );\n return;\n }\n\n try {\n const timeoutMs = props.timeoutMs ?? (props.src ? 4000 : 2500);\n\n if (props.src) {\n await ensureScriptLoaded(props.src, timeoutMs);\n }\n\n const start = Date.now();\n while (!getManyRowsAppKitRuntime() && Date.now() - start < timeoutMs) {\n if (cancelled) return;\n await new Promise((r) => setTimeout(r, 25));\n }\n\n const api = getManyRowsAppKitRuntime();\n if (!api) {\n report(\n mkErr(\n props.src ? \"SCRIPT_TIMEOUT\" : \"RUNTIME_NOT_FOUND\",\n props.src\n ? `AppKit runtime not found after loading script: ${props.src}`\n : \"AppKit runtime not found.\",\n { src: props.src }\n )\n );\n return;\n }\n\n const runtimeVersion: unknown = (api as any)?.version;\n\n if (props.runtimeExactVersion) {\n const expected = props.runtimeExactVersion.trim();\n if (!expected) {\n report(mkErr(\"INVALID_PROPS\", \"runtimeExactVersion must be a non-empty string.\"));\n return;\n }\n const found = typeof runtimeVersion === \"string\" ? runtimeVersion.trim() : \"\";\n if (found !== expected) {\n report(\n mkErr(\"RUNTIME_VERSION_MISMATCH\", \"AppKit runtime version mismatch.\", {\n expected,\n found: runtimeVersion,\n })\n );\n return;\n }\n } else if (props.runtimeMinVersion) {\n const min = props.runtimeMinVersion.trim();\n if (!min) {\n report(mkErr(\"INVALID_PROPS\", \"runtimeMinVersion must be a non-empty string.\"));\n return;\n }\n const ok = semverGte(runtimeVersion, min);\n if (!ok) {\n report(\n mkErr(\"RUNTIME_VERSION_TOO_OLD\", \"AppKit runtime is too old.\", {\n requiredMin: min,\n found: runtimeVersion,\n parsedFound: parseSemver(runtimeVersion),\n })\n );\n return;\n }\n }\n\n const handle = (api as any).init({\n containerId,\n workspace: props.workspace.trim(),\n appId: props.appId.trim(),\n baseURL: props.baseURL,\n silent: props.silent,\n throwOnError: props.throwOnError,\n\n // ✅ If host provides children, hide runtime default authed UI.\n // Runtime will still render login / errors / forbidden screens as normal.\n renderAuthed: hasChildren ? (() => null) : undefined,\n\n onReady: (info: ManyRowsAppKitReady) => {\n if (cancelled) return;\n setStatus(\"mounted\");\n setLastError(null);\n setReadyInfo(info);\n props.onReady?.(info);\n },\n\n onState: (s: ManyRowsAppKitSnapshot | null) => {\n if (cancelled) return;\n setSnapshot(s);\n props.onState?.(s);\n },\n\n onReadyState: (s: ManyRowsAppKitSnapshot) => {\n if (cancelled) return;\n props.onReadyState?.(s);\n },\n\n onError: (e: any) => {\n report(mkErr(\"RUNTIME_ERROR\", \"AppKit runtime error.\", e));\n },\n });\n\n handleRef.current = handle ?? null;\n } catch (e) {\n report(mkErr(\"SCRIPT_LOAD_FAILED\", \"Failed to load AppKit script.\", { error: e }));\n }\n };\n\n void init();\n\n return () => {\n cancelled = true;\n\n try {\n handleRef.current?.destroy?.();\n } catch {\n // ignore\n }\n\n try {\n const api = getManyRowsAppKitRuntime();\n api?.destroy?.(containerId);\n } catch {\n // ignore\n }\n\n handleRef.current = null;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initKey]);\n\n const showLoading = status === \"loading\" && !props.hideLoadingUI;\n const showError = status === \"error\" && !!lastError && !props.hideErrorUI;\n\n const ctx: AppKitContextValue = useMemo(() => {\n const h = handleRef.current;\n\n return {\n status,\n error: lastError,\n readyInfo,\n snapshot,\n isAuthenticated: isAuthedSnapshot(snapshot),\n handle: h,\n\n refresh: () => {\n try {\n h?.refresh?.();\n } catch {\n // ignore\n }\n },\n logout: async () => {\n try {\n await h?.logout?.();\n } catch {\n // ignore\n }\n },\n setToken: (tok: string | null) => {\n try {\n h?.setToken?.(tok);\n } catch {\n // ignore\n }\n },\n destroy: () => {\n try {\n h?.destroy?.();\n } catch {\n // ignore\n }\n },\n info: () => {\n try {\n return h?.info?.() ?? null;\n } catch {\n return null;\n }\n },\n };\n }, [status, lastError, readyInfo, snapshot]);\n\n return (\n <Ctx.Provider value={ctx}>\n <div className={props.className} style={props.style}>\n {showLoading ? props.loading ?? <DefaultSkeleton /> : null}\n {showError && lastError\n ? props.errorUI\n ? props.errorUI(lastError)\n : <DefaultError err={lastError} />\n : null}\n\n {/* Host-side children (can use AppKitAuthed/useAppKit) */}\n {props.children}\n\n {/* Runtime owns all UI inside this container */}\n <div id={containerId} />\n </div>\n </Ctx.Provider>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/runtime.ts","../src/AppKit.tsx","../src/UserButton.tsx"],"names":["createContext","useContext","jsx","Fragment","jsxs","useId","React","useMemo","useRef","useState","useEffect","useCallback"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { AppKitRuntime } from \"./types\";\n\nexport function getManyRowsAppKitRuntime(): AppKitRuntime | null {\n const w = window as any;\n\n // Preferred: namespaced\n if (w.ManyRows?.AppKit?.init) return w.ManyRows.AppKit;\n\n // Back-compat: function globals\n if (w.initManyRowsAppKit) {\n return {\n init: w.initManyRowsAppKit,\n destroy: w.destroyManyRowsAppKit,\n info: w.getManyRowsAppKitInfo,\n };\n }\n\n return null;\n}\n\nexport function ensureScriptLoaded(src: string, timeoutMs: number): Promise<void> {\n return new Promise((resolve, reject) => {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n resolve(); // SSR: noop\n return;\n }\n\n // Already present?\n if (document.querySelector(`script[data-manyrows-appkit=\"true\"][src=\"${src}\"]`)) {\n resolve();\n return;\n }\n\n // If runtime already exists, we’re good.\n if (getManyRowsAppKitRuntime()) {\n resolve();\n return;\n }\n\n const s = document.createElement(\"script\");\n s.src = src;\n s.async = true;\n s.crossOrigin = \"anonymous\";\n s.setAttribute(\"data-manyrows-appkit\", \"true\");\n\n const timer = window.setTimeout(() => {\n cleanup();\n reject(new Error(`Timed out loading AppKit script after ${timeoutMs}ms: ${src}`));\n }, timeoutMs);\n\n function cleanup() {\n window.clearTimeout(timer);\n s.onload = null;\n s.onerror = null;\n }\n\n s.onload = () => {\n cleanup();\n resolve();\n };\n\n s.onerror = (e) => {\n cleanup();\n reject(e);\n };\n\n document.head.appendChild(s);\n });\n}\n","// appkit-react/AppKit.tsx\nimport React, {\n createContext,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type {\n ManyRowsAppKitError,\n ManyRowsAppKitReady,\n ManyRowsAppKitHandle,\n ManyRowsAppKitSnapshot,\n} from \"./types\";\nimport { ensureScriptLoaded, getManyRowsAppKitRuntime } from \"./runtime\";\n\n// -----------------------------\n// Tiny semver helpers (no deps)\n// -----------------------------\n\ntype Semver = { major: number; minor: number; patch: number };\n\nfunction parseSemver(v: unknown): Semver | null {\n if (typeof v !== \"string\") return null;\n const s = v.trim();\n const m = /^v?(\\d+)\\.(\\d+)\\.(\\d+)/.exec(s);\n if (!m) return null;\n const major = Number(m[1]);\n const minor = Number(m[2]);\n const patch = Number(m[3]);\n if (!Number.isFinite(major) || !Number.isFinite(minor) || !Number.isFinite(patch)) return null;\n return { major, minor, patch };\n}\n\nfunction cmpSemver(a: Semver, b: Semver): number {\n if (a.major !== b.major) return a.major - b.major;\n if (a.minor !== b.minor) return a.minor - b.minor;\n return a.patch - b.patch;\n}\n\nfunction semverGte(runtimeVersion: unknown, minVersion: string): boolean {\n const r = parseSemver(runtimeVersion);\n const m = parseSemver(minVersion);\n if (!r || !m) return false;\n return cmpSemver(r, m) >= 0;\n}\n\n// -----------------------------\n// Prod/dev safety helpers\n// -----------------------------\n\nfunction isProbablyProdBuild(): boolean {\n const p = (globalThis as any)?.process;\n const env = p?.env?.NODE_ENV;\n return env === \"production\";\n}\n\nfunction looksLikeLocalhost(url: string): boolean {\n const s = (url || \"\").trim().toLowerCase();\n return (\n s.startsWith(\"http://localhost\") ||\n s.startsWith(\"https://localhost\") ||\n s.startsWith(\"http://127.0.0.1\") ||\n s.startsWith(\"https://127.0.0.1\") ||\n s.startsWith(\"http://0.0.0.0\") ||\n s.startsWith(\"https://0.0.0.0\")\n );\n}\n\n// -----------------------------\n// Auth predicate (snapshot is loose)\n// -----------------------------\n\nfunction isAuthedSnapshot(s: ManyRowsAppKitSnapshot | null | undefined): boolean {\n if (!s || typeof s !== \"object\") return false;\n const status = (s as any).status;\n if (status !== \"authenticated\") return false;\n\n const appData = (s as any).appData;\n if (!appData || typeof appData !== \"object\") return false;\n\n // don’t over-constrain v0\n return true;\n}\n\n// -----------------------------\n// AppKit context + hook\n// -----------------------------\n\nexport type AppKitContextValue = {\n status: \"idle\" | \"loading\" | \"mounted\" | \"error\";\n error: ManyRowsAppKitError | null;\n\n readyInfo: ManyRowsAppKitReady | null;\n snapshot: ManyRowsAppKitSnapshot | null;\n\n // convenience derived flag\n isAuthenticated: boolean;\n\n // present when runtime supports handle API\n handle: ManyRowsAppKitHandle | null;\n\n // convenience methods (safe no-ops if handle missing)\n refresh: () => void;\n logout: () => Promise<void>;\n setToken: (tok: string | null) => void;\n destroy: () => void;\n info: () => ManyRowsAppKitReady | null;\n};\n\nconst Ctx = createContext<AppKitContextValue | null>(null);\n\nexport function useAppKit(): AppKitContextValue {\n const v = useContext(Ctx);\n if (!v) throw new Error(\"useAppKit() must be used under <AppKit />\");\n return v;\n}\n\n/**\n * Render children only when the AppKit runtime is authenticated and appData exists.\n * Use this to mount your customer app \"behind\" the AppKit login screen.\n */\nexport function AppKitAuthed(props: {\n children: React.ReactNode;\n /**\n * Optional: shown when not authenticated (or still checking).\n * Default: null (render nothing).\n */\n fallback?: React.ReactNode;\n}) {\n const { isAuthenticated } = useAppKit();\n if (!isAuthenticated) return <>{props.fallback ?? null}</>;\n return <>{props.children}</>;\n}\n\n// -----------------------------\n// Props\n// -----------------------------\n\nexport type AppKitTheme = {\n primaryColor?: string;\n};\n\nexport type AppKitProps = {\n workspace: string;\n\n // ✅ replaces project+env\n appId: string;\n\n baseURL?: string;\n\n // ✅ Theme customization\n theme?: AppKitTheme;\n\n src?: string;\n timeoutMs?: number;\n\n silent?: boolean;\n throwOnError?: boolean;\n\n onReady?: (info: ManyRowsAppKitReady) => void;\n onError?: (err: ManyRowsAppKitError) => void;\n\n /**\n * Fired for every snapshot update from the runtime (checking/unauth/authed/etc).\n */\n onState?: (snapshot: ManyRowsAppKitSnapshot | null) => void;\n\n /**\n * Fired when AppKit is authenticated and appData is available.\n * This is the correct place to render the customer app (imperative style).\n */\n onReadyState?: (snapshot: ManyRowsAppKitSnapshot) => void;\n\n className?: string;\n style?: React.CSSProperties;\n containerId?: string;\n\n runtimeMinVersion?: string;\n runtimeExactVersion?: string;\n\n loading?: React.ReactNode;\n errorUI?: (err: ManyRowsAppKitError) => React.ReactNode;\n hideLoadingUI?: boolean;\n hideErrorUI?: boolean;\n\n // kept for future (no longer used now that env is arbitrary)\n allowDevEnvInProd?: boolean;\n blockLocalhostBaseURLInProd?: boolean;\n\n // ✅ allow <AppKit>children</AppKit>\n children?: React.ReactNode;\n};\n\n// -----------------------------\n// Errors / UI\n// -----------------------------\n\nfunction mkErr(\n code: ManyRowsAppKitError[\"code\"],\n message: string,\n details?: unknown\n): ManyRowsAppKitError {\n return { code, message, details };\n}\n\nfunction DefaultError({ err }: { err: ManyRowsAppKitError }) {\n return (\n <div\n role=\"alert\"\n style={{\n width: \"100%\",\n borderRadius: 10,\n border: \"1px solid rgba(220, 38, 38, 0.35)\",\n background: \"rgba(220, 38, 38, 0.06)\",\n padding: 12,\n fontFamily:\n 'ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, \"Apple Color Emoji\", \"Segoe UI Emoji\"',\n }}\n >\n <div style={{ fontWeight: 700, marginBottom: 6 }}>ManyRows AppKit failed to load</div>\n <div style={{ fontSize: 13, marginBottom: 8 }}>\n <span style={{ fontWeight: 600 }}>{err.code}</span>: {err.message}\n </div>\n {err.details !== undefined ? (\n <pre\n style={{\n fontSize: 12,\n margin: 0,\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n opacity: 0.8,\n }}\n >\n {typeof err.details === \"string\" ? err.details : JSON.stringify(err.details, null, 2)}\n </pre>\n ) : null}\n </div>\n );\n}\n\n// -----------------------------\n// Component\n// -----------------------------\n\nexport function AppKit(props: AppKitProps) {\n const autoId = useId();\n const containerId = props.containerId ?? `manyrows-appkit-${autoId.replace(/[:]/g, \"\")}`;\n\n // If host supplies children, we assume host wants to own the authed UI.\n // In that case, suppress the runtime's *default* authed screen by passing renderAuthed={() => null}.\n const hasChildren = React.Children.count(props.children) > 0;\n\n const initKey = useMemo(\n () =>\n [\n containerId,\n props.workspace,\n props.appId,\n props.baseURL ?? \"\",\n props.src ?? \"\",\n props.runtimeMinVersion ?? \"\",\n props.runtimeExactVersion ?? \"\",\n props.allowDevEnvInProd ? \"1\" : \"0\",\n props.blockLocalhostBaseURLInProd === false ? \"0\" : \"1\",\n hasChildren ? \"children:1\" : \"children:0\",\n ].join(\"|\"),\n [\n containerId,\n props.workspace,\n props.appId,\n props.baseURL,\n props.src,\n props.runtimeMinVersion,\n props.runtimeExactVersion,\n props.allowDevEnvInProd,\n props.blockLocalhostBaseURLInProd,\n hasChildren,\n ]\n );\n\n const handleRef = useRef<ManyRowsAppKitHandle | null>(null);\n\n const [status, setStatus] = useState<\"idle\" | \"loading\" | \"mounted\" | \"error\">(\"idle\");\n const [lastError, setLastError] = useState<ManyRowsAppKitError | null>(null);\n\n const [readyInfo, setReadyInfo] = useState<ManyRowsAppKitReady | null>(null);\n const [snapshot, setSnapshot] = useState<ManyRowsAppKitSnapshot | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n\n setStatus(\"loading\");\n setLastError(null);\n setReadyInfo(null);\n setSnapshot(null);\n handleRef.current = null;\n\n const report = (err: ManyRowsAppKitError) => {\n setLastError(err);\n setStatus(\"error\");\n\n if (!props.silent) {\n // eslint-disable-next-line no-console\n console.warn(\"[@manyrows/appkit-react]\", err.code, err.message, err.details ?? \"\");\n }\n props.onError?.(err);\n };\n\n const init = async () => {\n if (!props.workspace?.trim() || !props.appId?.trim()) {\n report(\n mkErr(\"INVALID_PROPS\", \"workspace and appId are required.\", {\n workspace: props.workspace,\n appId: props.appId,\n })\n );\n return;\n }\n\n const prod = isProbablyProdBuild();\n\n if (\n prod &&\n props.blockLocalhostBaseURLInProd !== false &&\n props.baseURL &&\n looksLikeLocalhost(props.baseURL)\n ) {\n report(\n mkErr(\n \"BASE_URL_NOT_ALLOWED_IN_PROD\",\n \"localhost baseURL is not allowed in production builds.\",\n { baseURL: props.baseURL }\n )\n );\n return;\n }\n\n try {\n const timeoutMs = props.timeoutMs ?? (props.src ? 4000 : 2500);\n\n if (props.src) {\n await ensureScriptLoaded(props.src, timeoutMs);\n }\n\n const start = Date.now();\n while (!getManyRowsAppKitRuntime() && Date.now() - start < timeoutMs) {\n if (cancelled) return;\n await new Promise((r) => setTimeout(r, 25));\n }\n\n const api = getManyRowsAppKitRuntime();\n if (!api) {\n report(\n mkErr(\n props.src ? \"SCRIPT_TIMEOUT\" : \"RUNTIME_NOT_FOUND\",\n props.src\n ? `AppKit runtime not found after loading script: ${props.src}`\n : \"AppKit runtime not found.\",\n { src: props.src }\n )\n );\n return;\n }\n\n const runtimeVersion: unknown = (api as any)?.version;\n\n if (props.runtimeExactVersion) {\n const expected = props.runtimeExactVersion.trim();\n if (!expected) {\n report(mkErr(\"INVALID_PROPS\", \"runtimeExactVersion must be a non-empty string.\"));\n return;\n }\n const found = typeof runtimeVersion === \"string\" ? runtimeVersion.trim() : \"\";\n if (found !== expected) {\n report(\n mkErr(\"RUNTIME_VERSION_MISMATCH\", \"AppKit runtime version mismatch.\", {\n expected,\n found: runtimeVersion,\n })\n );\n return;\n }\n } else if (props.runtimeMinVersion) {\n const min = props.runtimeMinVersion.trim();\n if (!min) {\n report(mkErr(\"INVALID_PROPS\", \"runtimeMinVersion must be a non-empty string.\"));\n return;\n }\n const ok = semverGte(runtimeVersion, min);\n if (!ok) {\n report(\n mkErr(\"RUNTIME_VERSION_TOO_OLD\", \"AppKit runtime is too old.\", {\n requiredMin: min,\n found: runtimeVersion,\n parsedFound: parseSemver(runtimeVersion),\n })\n );\n return;\n }\n }\n\n const handle = (api as any).init({\n containerId,\n workspace: props.workspace.trim(),\n appId: props.appId.trim(),\n baseURL: props.baseURL,\n theme: props.theme,\n silent: props.silent,\n throwOnError: props.throwOnError,\n\n // ✅ If host provides children, hide runtime default authed UI.\n // Runtime will still render login / errors / forbidden screens as normal.\n renderAuthed: hasChildren ? (() => null) : undefined,\n\n onReady: (info: ManyRowsAppKitReady) => {\n if (cancelled) return;\n setStatus(\"mounted\");\n setLastError(null);\n setReadyInfo(info);\n props.onReady?.(info);\n },\n\n onState: (s: ManyRowsAppKitSnapshot | null) => {\n if (cancelled) return;\n setSnapshot(s);\n props.onState?.(s);\n },\n\n onReadyState: (s: ManyRowsAppKitSnapshot) => {\n if (cancelled) return;\n props.onReadyState?.(s);\n },\n\n onError: (e: any) => {\n report(mkErr(\"RUNTIME_ERROR\", \"AppKit runtime error.\", e));\n },\n });\n\n handleRef.current = handle ?? null;\n } catch (e) {\n report(mkErr(\"SCRIPT_LOAD_FAILED\", \"Failed to load AppKit script.\", { error: e }));\n }\n };\n\n void init();\n\n return () => {\n cancelled = true;\n\n try {\n handleRef.current?.destroy?.();\n } catch {\n // ignore\n }\n\n try {\n const api = getManyRowsAppKitRuntime();\n api?.destroy?.(containerId);\n } catch {\n // ignore\n }\n\n handleRef.current = null;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initKey]);\n\n const showLoading = status === \"loading\" && !props.hideLoadingUI;\n const showError = status === \"error\" && !!lastError && !props.hideErrorUI;\n\n const ctx: AppKitContextValue = useMemo(() => {\n const h = handleRef.current;\n\n return {\n status,\n error: lastError,\n readyInfo,\n snapshot,\n isAuthenticated: isAuthedSnapshot(snapshot),\n handle: h,\n\n refresh: () => {\n try {\n h?.refresh?.();\n } catch {\n // ignore\n }\n },\n logout: async () => {\n try {\n await h?.logout?.();\n } catch {\n // ignore\n }\n },\n setToken: (tok: string | null) => {\n try {\n h?.setToken?.(tok);\n } catch {\n // ignore\n }\n },\n destroy: () => {\n try {\n h?.destroy?.();\n } catch {\n // ignore\n }\n },\n info: () => {\n try {\n return h?.info?.() ?? null;\n } catch {\n return null;\n }\n },\n };\n }, [status, lastError, readyInfo, snapshot]);\n\n return (\n <Ctx.Provider value={ctx}>\n <div className={props.className} style={props.style}>\n {showLoading && props.loading ? props.loading : null}\n {showError && lastError\n ? props.errorUI\n ? props.errorUI(lastError)\n : <DefaultError err={lastError} />\n : null}\n\n {/* Host-side children (can use AppKitAuthed/useAppKit) */}\n {props.children}\n\n {/* Runtime owns all UI inside this container */}\n <div id={containerId} />\n </div>\n </Ctx.Provider>\n );\n}\n","import React, { useState, useEffect, useCallback } from \"react\";\nimport { useAppKit } from \"./AppKit\";\n\ntype ToastType = { message: string; type: \"success\" | \"error\" } | null;\n\nfunction Toast({ toast, onClose }: { toast: ToastType; onClose: () => void }) {\n useEffect(() => {\n if (toast) {\n const timer = setTimeout(onClose, 4000);\n return () => clearTimeout(timer);\n }\n }, [toast, onClose]);\n\n if (!toast) return null;\n\n return (\n <div\n style={{\n position: \"fixed\",\n bottom: 24,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n padding: \"12px 20px\",\n borderRadius: 8,\n backgroundColor: toast.type === \"success\" ? \"#2e7d32\" : \"#d32f2f\",\n color: \"#fff\",\n fontSize: 14,\n fontWeight: 500,\n boxShadow: \"0 4px 12px rgba(0,0,0,0.2)\",\n zIndex: 10000,\n display: \"flex\",\n alignItems: \"center\",\n gap: 12,\n }}\n >\n {toast.message}\n <button\n onClick={onClose}\n style={{\n background: \"none\",\n border: \"none\",\n color: \"#fff\",\n cursor: \"pointer\",\n fontSize: 18,\n lineHeight: 1,\n padding: 0,\n opacity: 0.8,\n }}\n >\n ×\n </button>\n </div>\n );\n}\n\nfunction getInitials(name?: string, email?: string): string {\n if (name) {\n const parts = name.trim().split(/\\s+/);\n if (parts.length >= 2) {\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n }\n return name.slice(0, 2).toUpperCase();\n }\n if (email) {\n return email.slice(0, 2).toUpperCase();\n }\n return \"?\";\n}\n\nfunction stringToColor(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\n }\n const colors = [\n \"#1976d2\", \"#388e3c\", \"#d32f2f\", \"#7b1fa2\",\n \"#c2185b\", \"#0288d1\", \"#00796b\", \"#f57c00\",\n ];\n return colors[Math.abs(hash) % colors.length];\n}\n\nexport interface UserButtonProps {\n size?: \"small\" | \"medium\" | \"large\";\n}\n\nexport function UserButton({ size = \"medium\" }: UserButtonProps) {\n const { snapshot, logout, refresh, readyInfo } = useAppKit();\n const [open, setOpen] = useState(false);\n const [loggingOut, setLoggingOut] = useState(false);\n\n const account = snapshot?.appData?.account;\n const initials = getInitials(account?.name, account?.email);\n const avatarColor = stringToColor(account?.email || \"user\");\n\n const sizeMap = { small: 32, medium: 40, large: 48 };\n const fontSizeMap = { small: 14, medium: 16, large: 20 };\n const avatarSize = sizeMap[size];\n\n const handleLogout = async () => {\n setLoggingOut(true);\n try {\n await logout();\n } finally {\n setLoggingOut(false);\n setOpen(false);\n }\n };\n\n return (\n <>\n <button\n onClick={() => setOpen(true)}\n aria-label=\"Open profile\"\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: avatarSize,\n height: avatarSize,\n borderRadius: \"50%\",\n backgroundColor: avatarColor,\n color: \"#fff\",\n border: \"none\",\n cursor: \"pointer\",\n fontSize: fontSizeMap[size],\n fontWeight: 600,\n fontFamily: \"inherit\",\n padding: 0,\n }}\n >\n {initials}\n </button>\n\n {open && (\n <ProfileModal\n account={account}\n onClose={() => setOpen(false)}\n onLogout={handleLogout}\n loggingOut={loggingOut}\n avatarColor={avatarColor}\n initials={initials}\n baseURL={readyInfo?.baseURL}\n jwtToken={snapshot?.jwtToken}\n onNameUpdated={refresh}\n />\n )}\n </>\n );\n}\n\ninterface ProfileModalProps {\n account?: { email?: string; name?: string };\n onClose: () => void;\n onLogout: () => void;\n loggingOut: boolean;\n avatarColor: string;\n initials: string;\n baseURL?: string;\n jwtToken?: string | null;\n onNameUpdated: () => void;\n}\n\nfunction ProfileModal({\n account,\n onClose,\n onLogout,\n loggingOut,\n avatarColor,\n initials,\n baseURL,\n jwtToken,\n onNameUpdated,\n}: ProfileModalProps) {\n const [editing, setEditing] = useState(false);\n const [editName, setEditName] = useState(account?.name || \"\");\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [toast, setToast] = useState<ToastType>(null);\n\n const clearToast = useCallback(() => setToast(null), []);\n\n useEffect(() => {\n setEditName(account?.name || \"\");\n setEditing(false);\n setError(null);\n }, [account?.name]);\n\n const handleSave = async () => {\n const trimmed = editName.trim();\n if (!trimmed) {\n setError(\"Display name is required\");\n return;\n }\n if (trimmed.length > 200) {\n setError(\"Display name is too long\");\n return;\n }\n if (trimmed === account?.name) {\n setEditing(false);\n return;\n }\n\n setSaving(true);\n setError(null);\n\n try {\n const res = await fetch(`${baseURL}/a/profile/display-name`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${jwtToken}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ displayName: trimmed }),\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(text || \"Failed to update name\");\n }\n setEditing(false);\n onNameUpdated();\n setToast({ message: \"Display name updated\", type: \"success\" });\n } catch (err: any) {\n const msg = err.message || \"Failed to update name\";\n setError(msg);\n setToast({ message: msg, type: \"error\" });\n } finally {\n setSaving(false);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n handleSave();\n } else if (e.key === \"Escape\") {\n setEditing(false);\n setEditName(account?.name || \"\");\n setError(null);\n }\n };\n\n return (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 9999,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {/* Backdrop */}\n <div\n onClick={onClose}\n style={{\n position: \"absolute\",\n inset: 0,\n backgroundColor: \"rgba(0, 0, 0, 0.5)\",\n }}\n />\n\n {/* Modal */}\n <div\n style={{\n position: \"relative\",\n backgroundColor: \"#fff\",\n borderRadius: 12,\n boxShadow: \"0 8px 32px rgba(0,0,0,0.2)\",\n width: \"100%\",\n maxWidth: 360,\n margin: 16,\n overflow: \"hidden\",\n }}\n >\n {/* Header */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"16px 20px\",\n borderBottom: \"1px solid #eee\",\n }}\n >\n <h2 style={{ margin: 0, fontSize: 18, fontWeight: 600 }}>Profile</h2>\n <button\n onClick={onClose}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 4,\n fontSize: 20,\n lineHeight: 1,\n color: \"#666\",\n }}\n >\n ×\n </button>\n </div>\n\n {/* Content */}\n <div style={{ padding: 20 }}>\n {/* Avatar and name */}\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 16, marginBottom: 20 }}>\n <div\n style={{\n width: 64,\n height: 64,\n borderRadius: \"50%\",\n backgroundColor: avatarColor,\n color: \"#fff\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 24,\n fontWeight: 600,\n flexShrink: 0,\n }}\n >\n {initials}\n </div>\n <div style={{ minWidth: 0, flex: 1 }}>\n <div style={{ fontSize: 18, fontWeight: 600, marginBottom: 2 }}>\n {account?.name || \"User\"}\n </div>\n <div\n style={{\n fontSize: 14,\n color: \"#666\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {account?.email}\n </div>\n </div>\n </div>\n\n <hr style={{ border: \"none\", borderTop: \"1px solid #eee\", margin: \"16px 0\" }} />\n\n {/* Error */}\n {error && (\n <div\n style={{\n padding: \"10px 14px\",\n marginBottom: 16,\n backgroundColor: \"#ffebee\",\n color: \"#c62828\",\n borderRadius: 6,\n fontSize: 14,\n }}\n >\n {error}\n </div>\n )}\n\n {/* Account details */}\n <div style={{ marginBottom: 16 }}>\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: 4 }}>\n <div style={{ fontSize: 12, color: \"#888\", fontWeight: 600 }}>\n Display Name\n </div>\n {!editing && (\n <button\n onClick={() => setEditing(true)}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 2,\n fontSize: 12,\n color: \"#1976d2\",\n }}\n >\n Edit\n </button>\n )}\n </div>\n {editing ? (\n <div style={{ display: \"flex\", gap: 8 }}>\n <input\n type=\"text\"\n value={editName}\n onChange={(e) => setEditName(e.target.value)}\n onKeyDown={handleKeyDown}\n disabled={saving}\n autoFocus\n placeholder=\"Enter display name\"\n style={{\n flex: 1,\n padding: \"8px 12px\",\n fontSize: 14,\n border: `1px solid ${error ? \"#d32f2f\" : \"#ddd\"}`,\n borderRadius: 6,\n outline: \"none\",\n }}\n />\n <button\n onClick={handleSave}\n disabled={saving}\n style={{\n padding: \"8px 14px\",\n fontSize: 14,\n backgroundColor: \"#1976d2\",\n color: \"#fff\",\n border: \"none\",\n borderRadius: 6,\n cursor: saving ? \"not-allowed\" : \"pointer\",\n opacity: saving ? 0.6 : 1,\n }}\n >\n {saving ? \"…\" : \"Save\"}\n </button>\n </div>\n ) : (\n <div style={{ fontSize: 15 }}>{account?.name || \"—\"}</div>\n )}\n </div>\n <div style={{ marginBottom: 20 }}>\n <div style={{ fontSize: 12, color: \"#888\", fontWeight: 600, marginBottom: 4 }}>\n Email\n </div>\n <div style={{ fontSize: 15 }}>{account?.email || \"—\"}</div>\n </div>\n\n <hr style={{ border: \"none\", borderTop: \"1px solid #eee\", margin: \"16px 0\" }} />\n\n {/* Logout button */}\n <button\n onClick={onLogout}\n disabled={loggingOut}\n style={{\n width: \"100%\",\n padding: \"10px 16px\",\n fontSize: 15,\n fontWeight: 500,\n color: \"#d32f2f\",\n backgroundColor: \"#fff\",\n border: \"1px solid #d32f2f\",\n borderRadius: 8,\n cursor: loggingOut ? \"not-allowed\" : \"pointer\",\n opacity: loggingOut ? 0.6 : 1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n }}\n >\n {loggingOut ? \"Logging out…\" : \"Log out\"}\n </button>\n </div>\n </div>\n\n <Toast toast={toast} onClose={clearToast} />\n </div>\n );\n}\n\nexport default UserButton;\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -12,8 +12,6 @@ type ManyRowsAppKitReady = {
|
|
|
12
12
|
containerId?: string;
|
|
13
13
|
workspace: string;
|
|
14
14
|
appId: string;
|
|
15
|
-
project: string;
|
|
16
|
-
env: string;
|
|
17
15
|
baseURL: string;
|
|
18
16
|
version: string;
|
|
19
17
|
};
|
|
@@ -55,10 +53,14 @@ declare function AppKitAuthed(props: {
|
|
|
55
53
|
*/
|
|
56
54
|
fallback?: React.ReactNode;
|
|
57
55
|
}): react_jsx_runtime.JSX.Element;
|
|
56
|
+
type AppKitTheme = {
|
|
57
|
+
primaryColor?: string;
|
|
58
|
+
};
|
|
58
59
|
type AppKitProps = {
|
|
59
60
|
workspace: string;
|
|
60
61
|
appId: string;
|
|
61
62
|
baseURL?: string;
|
|
63
|
+
theme?: AppKitTheme;
|
|
62
64
|
src?: string;
|
|
63
65
|
timeoutMs?: number;
|
|
64
66
|
silent?: boolean;
|
|
@@ -89,4 +91,9 @@ type AppKitProps = {
|
|
|
89
91
|
};
|
|
90
92
|
declare function AppKit(props: AppKitProps): react_jsx_runtime.JSX.Element;
|
|
91
93
|
|
|
92
|
-
|
|
94
|
+
interface UserButtonProps {
|
|
95
|
+
size?: "small" | "medium" | "large";
|
|
96
|
+
}
|
|
97
|
+
declare function UserButton({ size }: UserButtonProps): react_jsx_runtime.JSX.Element;
|
|
98
|
+
|
|
99
|
+
export { AppKit, AppKitAuthed, type AppKitTheme, type ManyRowsAppKitError, type ManyRowsAppKitErrorCode, type ManyRowsAppKitHandle, type ManyRowsAppKitReady, type ManyRowsAppKitSnapshot, UserButton, type UserButtonProps, useAppKit };
|
package/dist/index.d.ts
CHANGED
|
@@ -12,8 +12,6 @@ type ManyRowsAppKitReady = {
|
|
|
12
12
|
containerId?: string;
|
|
13
13
|
workspace: string;
|
|
14
14
|
appId: string;
|
|
15
|
-
project: string;
|
|
16
|
-
env: string;
|
|
17
15
|
baseURL: string;
|
|
18
16
|
version: string;
|
|
19
17
|
};
|
|
@@ -55,10 +53,14 @@ declare function AppKitAuthed(props: {
|
|
|
55
53
|
*/
|
|
56
54
|
fallback?: React.ReactNode;
|
|
57
55
|
}): react_jsx_runtime.JSX.Element;
|
|
56
|
+
type AppKitTheme = {
|
|
57
|
+
primaryColor?: string;
|
|
58
|
+
};
|
|
58
59
|
type AppKitProps = {
|
|
59
60
|
workspace: string;
|
|
60
61
|
appId: string;
|
|
61
62
|
baseURL?: string;
|
|
63
|
+
theme?: AppKitTheme;
|
|
62
64
|
src?: string;
|
|
63
65
|
timeoutMs?: number;
|
|
64
66
|
silent?: boolean;
|
|
@@ -89,4 +91,9 @@ type AppKitProps = {
|
|
|
89
91
|
};
|
|
90
92
|
declare function AppKit(props: AppKitProps): react_jsx_runtime.JSX.Element;
|
|
91
93
|
|
|
92
|
-
|
|
94
|
+
interface UserButtonProps {
|
|
95
|
+
size?: "small" | "medium" | "large";
|
|
96
|
+
}
|
|
97
|
+
declare function UserButton({ size }: UserButtonProps): react_jsx_runtime.JSX.Element;
|
|
98
|
+
|
|
99
|
+
export { AppKit, AppKitAuthed, type AppKitTheme, type ManyRowsAppKitError, type ManyRowsAppKitErrorCode, type ManyRowsAppKitHandle, type ManyRowsAppKitReady, type ManyRowsAppKitSnapshot, UserButton, type UserButtonProps, useAppKit };
|