@manyrows/appkit-react 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -114,58 +114,6 @@ function AppKitAuthed(props) {
114
114
  function mkErr(code, message, details) {
115
115
  return { code, message, details };
116
116
  }
117
- function DefaultSkeleton() {
118
- return /* @__PURE__ */ jsxRuntime.jsxs(
119
- "div",
120
- {
121
- "aria-busy": "true",
122
- "aria-live": "polite",
123
- style: {
124
- width: "100%",
125
- borderRadius: 10,
126
- border: "1px solid rgba(0,0,0,0.08)",
127
- padding: 12
128
- },
129
- children: [
130
- /* @__PURE__ */ jsxRuntime.jsx(
131
- "div",
132
- {
133
- style: {
134
- height: 12,
135
- width: 140,
136
- borderRadius: 6,
137
- background: "rgba(0,0,0,0.06)",
138
- marginBottom: 10
139
- }
140
- }
141
- ),
142
- /* @__PURE__ */ jsxRuntime.jsx(
143
- "div",
144
- {
145
- style: {
146
- height: 10,
147
- width: "65%",
148
- borderRadius: 6,
149
- background: "rgba(0,0,0,0.06)",
150
- marginBottom: 8
151
- }
152
- }
153
- ),
154
- /* @__PURE__ */ jsxRuntime.jsx(
155
- "div",
156
- {
157
- style: {
158
- height: 10,
159
- width: "40%",
160
- borderRadius: 6,
161
- background: "rgba(0,0,0,0.06)"
162
- }
163
- }
164
- )
165
- ]
166
- }
167
- );
168
- }
169
117
  function DefaultError({ err }) {
170
118
  return /* @__PURE__ */ jsxRuntime.jsxs(
171
119
  "div",
@@ -425,7 +373,7 @@ function AppKit(props) {
425
373
  };
426
374
  }, [status, lastError, readyInfo, snapshot]);
427
375
  return /* @__PURE__ */ jsxRuntime.jsx(Ctx.Provider, { value: ctx, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: props.className, style: props.style, children: [
428
- showLoading ? props.loading ?? /* @__PURE__ */ jsxRuntime.jsx(DefaultSkeleton, {}) : null,
376
+ showLoading && props.loading ? props.loading : null,
429
377
  showError && lastError ? props.errorUI ? props.errorUI(lastError) : /* @__PURE__ */ jsxRuntime.jsx(DefaultError, { err: lastError }) : null,
430
378
  props.children,
431
379
  /* @__PURE__ */ jsxRuntime.jsx("div", { id: containerId })
@@ -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"],"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 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 ? 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"]}
package/dist/index.js CHANGED
@@ -108,58 +108,6 @@ function AppKitAuthed(props) {
108
108
  function mkErr(code, message, details) {
109
109
  return { code, message, details };
110
110
  }
111
- function DefaultSkeleton() {
112
- return /* @__PURE__ */ jsxs(
113
- "div",
114
- {
115
- "aria-busy": "true",
116
- "aria-live": "polite",
117
- style: {
118
- width: "100%",
119
- borderRadius: 10,
120
- border: "1px solid rgba(0,0,0,0.08)",
121
- padding: 12
122
- },
123
- children: [
124
- /* @__PURE__ */ jsx(
125
- "div",
126
- {
127
- style: {
128
- height: 12,
129
- width: 140,
130
- borderRadius: 6,
131
- background: "rgba(0,0,0,0.06)",
132
- marginBottom: 10
133
- }
134
- }
135
- ),
136
- /* @__PURE__ */ jsx(
137
- "div",
138
- {
139
- style: {
140
- height: 10,
141
- width: "65%",
142
- borderRadius: 6,
143
- background: "rgba(0,0,0,0.06)",
144
- marginBottom: 8
145
- }
146
- }
147
- ),
148
- /* @__PURE__ */ jsx(
149
- "div",
150
- {
151
- style: {
152
- height: 10,
153
- width: "40%",
154
- borderRadius: 6,
155
- background: "rgba(0,0,0,0.06)"
156
- }
157
- }
158
- )
159
- ]
160
- }
161
- );
162
- }
163
111
  function DefaultError({ err }) {
164
112
  return /* @__PURE__ */ jsxs(
165
113
  "div",
@@ -419,7 +367,7 @@ function AppKit(props) {
419
367
  };
420
368
  }, [status, lastError, readyInfo, snapshot]);
421
369
  return /* @__PURE__ */ jsx(Ctx.Provider, { value: ctx, children: /* @__PURE__ */ jsxs("div", { className: props.className, style: props.style, children: [
422
- showLoading ? props.loading ?? /* @__PURE__ */ jsx(DefaultSkeleton, {}) : null,
370
+ showLoading && props.loading ? props.loading : null,
423
371
  showError && lastError ? props.errorUI ? props.errorUI(lastError) : /* @__PURE__ */ jsx(DefaultError, { err: lastError }) : null,
424
372
  props.children,
425
373
  /* @__PURE__ */ jsx("div", { id: containerId })
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/runtime.ts","../src/AppKit.tsx"],"names":[],"mappings":"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","file":"index.js","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"],"names":[],"mappings":"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","file":"index.js","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 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 ? 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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@manyrows/appkit-react",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "sideEffects": false,
5
5
  "private": false,
6
6
  "type": "module",