@odla-ai/chapter 0.51.0 → 0.52.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/admin.tsx","../src/ui/chrome.tsx","../src/ui/admin-layout.tsx","../src/ui/admin-brand.tsx","../src/ui/admin-route-merge.ts","../src/ui/admin-route.ts","../src/ui/admin-workspaces.tsx","../src/ui/admin-billing.tsx","../src/ui/payment-recovery-queue.tsx","../src/ui/admin-api.ts","../src/ui/admin-dashboard.tsx","../src/ui/admin-people-workspace.tsx","../src/ui/admin-lifecycle-adapter.ts","../src/ui/admin-named-seat.tsx","../src/ui/admin-candidate-stage.tsx","../src/ui/admin-record-admission.tsx","../src/ui/admin-application-repair.tsx","../src/ui/admin-application-stage.tsx","../src/ui/operational-profile-form.tsx","../src/ui/admin-person-profile.tsx","../src/ui/admin-account-sync.tsx","../src/ui/admin-record-actions.tsx","../src/ui/admin-network.tsx","../src/ui/admin-record-activity.tsx","../src/ui/admin-record-comms.tsx","../src/ui/admin-record-scheduling.tsx","../src/ui/admin-people.tsx","../src/ui/admin-network-records.tsx","../src/ui/admin-network-notes.tsx","../src/ui/admin-portfolio.tsx","../src/network-edge.ts","../src/ui/admin-admission.tsx","../src/ui/admin-settings-workspace.tsx","../src/ui/admin-availability.tsx","../src/ui/admin-builder-library.tsx","../src/ui/admin-email.tsx","../src/ui/admin-email-resolution.tsx","../src/ui/admin-member-content.tsx","../src/ui/admin-frame.tsx","../src/ui/admin-appearance.ts","../src/ui/admin-auth.ts","../src/ui/admin-defaults.ts","../src/ui/admin-meetings.tsx","../src/ui/admin-network-record-editor.tsx","../src/ui/network-seat-billing.tsx","../src/ui/membership-policy-versions.tsx"],"sourcesContent":["// ChapterAdmin owns auth and operational wiring; sites choose or replace chrome\n// and workspaces without reimplementing the boundary.\nimport type { ComponentChildren } from \"preact\";\nimport { useEffect, useMemo, useRef, useState } from \"preact/hooks\";\nimport { ClerkGate, SignedIn, SignedOut, SignIn, useClerkAuth } from \"@odla-ai/auth-clerk\";\nimport { CrmClient } from \"@odla-ai/crm\";\nimport { S, Gate, AdminShell } from \"./chrome.js\";\nimport { defaultAdminWorkspaces } from \"./admin-workspaces.js\";\nimport { AdminTheme, signInRedirect } from \"./admin-frame.js\";\nimport { useScopedClerkAppearance } from \"./admin-appearance.js\";\nimport {\n DEFAULT_ADMIN_AUTH,\n loadChapterAdminConfig,\n loadChapterAdminUser,\n type ChapterAdminAuthAdapter,\n type ChapterAdminUser,\n} from \"./admin-auth.js\";\nimport type {\n AdminAccountMenuProps,\n AdminChrome,\n AdminRouting,\n AdminSection,\n AdminShellProps,\n AdminWorkspace,\n AdminWorkspaceNavProps,\n Brand,\n} from \"./chrome.js\";\nimport type { Chapter } from \"../types\";\nimport { DEFAULT_CHAPTER_COPY, formatChapterCopy } from \"../copy.js\";\nimport { useChapterCopy } from \"./copy-context.js\";\n\nexport type {\n AdminSection,\n AdminSectionContext,\n AdminWorkspace,\n AdminRouteState,\n AdminRouteTarget,\n} from \"./chrome.js\";\nexport { loadChapterAdminConfig, loadChapterAdminUser } from \"./admin-auth.js\";\nexport type {\n ChapterAdminAuthAdapter,\n ChapterAdminAuthConfig,\n ChapterAdminAuthLoadContext,\n ChapterAdminUser,\n} from \"./admin-auth.js\";\n\n/** Configuration for the Clerk-gated, brand-scoped Chapter admin console. */\nexport interface ChapterAdminProps {\n chapter?: Chapter;\n /**\n * Replace or transform the standard workspace set. During existing-site\n * adoption, use the transform to preserve a validated host workspace until\n * feature-level parity is proven; matching ids or labels are not parity.\n */\n workspaces?:\n | AdminWorkspace[]\n | ((defaults: readonly AdminWorkspace[]) => AdminWorkspace[]);\n /** @deprecated Use workspaces. */\n sections?: AdminSection[];\n basePath?: string;\n brand?: Brand;\n crmBasePath?: string;\n apiBase?: string;\n /** Default fragment: `/admin/#people/person/record-id/profile`. */\n routing?: AdminRouting;\n /** Default embedded. Standalone adds packaged global chrome. */\n chrome?: AdminChrome;\n renderHeader?: AdminShellProps[\"renderHeader\"];\n renderAccountMenu?: (props: AdminAccountMenuProps) => ComponentChildren;\n renderWorkspaceNav?: (props: AdminWorkspaceNavProps) => ComponentChildren;\n /** Host geometry with the active workspace, account and navigation context. */\n renderWorkspaceFrame?: AdminShellProps[\"renderWorkspaceFrame\"];\n /** Adapt existing config/current-user endpoints without rewriting auth. */\n auth?: ChapterAdminAuthAdapter;\n}\n\nfunction Authed(props: {\n workspaces: AdminWorkspace[];\n basePath: string;\n brand: Brand;\n crmBasePath: string;\n apiBase: string;\n routing: AdminRouting;\n chrome: AdminChrome;\n auth: ChapterAdminAuthAdapter;\n renderHeader?: AdminShellProps[\"renderHeader\"];\n renderAccountMenu?: AdminShellProps[\"renderAccountMenu\"];\n renderWorkspaceNav?: AdminShellProps[\"renderWorkspaceNav\"];\n renderWorkspaceFrame?: AdminShellProps[\"renderWorkspaceFrame\"];\n}) {\n const copy = useChapterCopy().admin;\n const {\n workspaces,\n basePath,\n brand,\n crmBasePath,\n apiBase,\n routing,\n chrome,\n auth,\n renderHeader,\n renderAccountMenu,\n renderWorkspaceNav,\n renderWorkspaceFrame,\n } = props;\n const { getToken, signOut } = useClerkAuth();\n const client = useMemo(\n () =>\n new CrmClient({\n basePath: crmBasePath,\n headers: async (): Promise<Record<string, string>> => {\n const token = await getToken();\n return token ? { authorization: `Bearer ${token}` } : {};\n },\n }),\n [getToken, crmBasePath],\n );\n const [state, setState] = useState<{\n status: \"checking\" | \"ok\" | \"denied\";\n email?: string | null;\n user?: ChapterAdminUser;\n }>({ status: \"checking\" });\n\n useEffect(() => {\n let live = true;\n void (async () => {\n try {\n const body = await loadChapterAdminUser(auth, apiBase, getToken);\n const authorized = auth.isAuthorized\n ? auth.isAuthorized(body)\n : body.authorized === true;\n if (live) setState({\n status: authorized ? \"ok\" : \"denied\",\n email: typeof body.email === \"string\" ? body.email : null,\n user: body,\n });\n } catch {\n if (live) setState({ status: \"denied\" });\n }\n })();\n return () => {\n live = false;\n };\n }, [getToken, apiBase, auth]);\n\n if (state.status === \"checking\") return <Gate brand={brand}><p style={S.muted}>{copy.auth.checking}</p></Gate>;\n if (state.status === \"denied\") {\n return (\n <Gate brand={brand}>\n <div className=\"card\" style={S.card}>\n <h2 style={{ marginTop: 0 }}>{copy.auth.notAuthorized}</h2>\n <p style={S.muted}>\n {formatChapterCopy(copy.auth.accountNotAuthorized, {\n account: state.email ?? copy.auth.thisAccount,\n })}\n </p>\n <button className=\"btn secondary\" onClick={() => signOut()}>{copy.auth.signOut}</button>\n </div>\n </Gate>\n );\n }\n return (\n <AdminShell\n workspaces={workspaces}\n basePath={basePath}\n brand={brand}\n client={client}\n getToken={getToken}\n signOut={signOut}\n email={state.email ?? null}\n currentUser={state.user}\n routing={routing}\n chrome={chrome}\n renderHeader={renderHeader}\n renderAccountMenu={renderAccountMenu}\n renderWorkspaceNav={renderWorkspaceNav}\n renderWorkspaceFrame={renderWorkspaceFrame}\n />\n );\n}\n\n/** Render the complete authenticated admin application from one Chapter config. */\nexport function ChapterAdmin(props: ChapterAdminProps) {\n const copy = props.chapter?.copy ?? DEFAULT_CHAPTER_COPY;\n const defaults = useMemo(\n () => (props.chapter ? defaultAdminWorkspaces(props.chapter) : []),\n [props.chapter],\n );\n const workspaces = useMemo(() => {\n if (typeof props.workspaces === \"function\") return props.workspaces(defaults);\n return props.workspaces ?? props.sections ?? defaults;\n }, [props.workspaces, props.sections, defaults]);\n const basePath = props.basePath ?? \"/admin\";\n const brand = props.brand ?? {\n name: props.chapter?.name ?? copy.admin.shell.adminName,\n badge: props.chapter?.brand.badge,\n wordmark: props.chapter?.brand.wordmark,\n };\n const crmBasePath = props.crmBasePath ?? \"/api/crm\";\n const apiBase = props.apiBase ?? \"\";\n const routing = props.routing ?? \"fragment\";\n const chrome = props.chrome ?? \"embedded\";\n const auth = props.auth ?? DEFAULT_ADMIN_AUTH;\n const redirect = signInRedirect(basePath, workspaces);\n const [publishableKey, setPublishableKey] = useState<string | null | undefined>(undefined);\n\n const scopeRef = useRef<HTMLDivElement>(null);\n const appearance = useScopedClerkAppearance(scopeRef);\n\n useEffect(() => {\n let live = true;\n void loadChapterAdminConfig(auth, apiBase)\n .then((config) =>\n live && setPublishableKey(config.publishableKey ?? null))\n .catch(() => live && setPublishableKey(null));\n return () => {\n live = false;\n };\n }, [apiBase, auth]);\n\n let content: ComponentChildren;\n // A mounted Clerk widget keeps its startup palette, so wait for the scope\n // rather than mounting it against the defaults and re-theming after.\n if (publishableKey === undefined || (publishableKey && !appearance)) {\n content = <Gate brand={brand}><p style={S.muted}>{copy.admin.auth.loading}</p></Gate>;\n } else if (!publishableKey) {\n content = (\n <Gate brand={brand}>\n <div className=\"card\" style={S.card}>\n <h2 style={{ marginTop: 0 }}>{copy.admin.auth.signInNotConfigured}</h2>\n <p style={S.muted}>{copy.admin.auth.missingPublishableKey}</p>\n </div>\n </Gate>\n );\n } else if (workspaces.length === 0) {\n content = <Gate brand={brand}><p style={S.muted}>{copy.admin.auth.noWorkspaces}</p></Gate>;\n } else {\n content = (\n <ClerkGate\n publishableKey={publishableKey}\n appearance={appearance}\n afterSignOutUrl=\"/\"\n >\n <SignedOut>\n <Gate brand={brand} tagline={copy.admin.auth.signInTagline}>\n <SignIn\n routing=\"hash\"\n forceRedirectUrl={redirect}\n signUpForceRedirectUrl={redirect}\n />\n </Gate>\n </SignedOut>\n <SignedIn>\n <Authed\n workspaces={workspaces}\n basePath={basePath}\n brand={brand}\n crmBasePath={crmBasePath}\n apiBase={apiBase}\n routing={routing}\n chrome={chrome}\n auth={auth}\n renderHeader={props.renderHeader}\n renderAccountMenu={props.renderAccountMenu}\n renderWorkspaceNav={props.renderWorkspaceNav}\n renderWorkspaceFrame={props.renderWorkspaceFrame}\n />\n </SignedIn>\n </ClerkGate>\n );\n }\n return <AdminTheme chapter={props.chapter} scopeRef={scopeRef}>{content}</AdminTheme>;\n}\n","// Shared workspace contracts, auth gates, and signed-in Chapter admin shell.\nimport type { ComponentChildren } from \"preact\";\nimport { useCallback, useEffect, useState } from \"preact/hooks\";\nimport { Tabs, ThemeScope, TopBar, TopBarLink } from \"@odla-ai/ui/components\";\nimport type { CrmClient } from \"@odla-ai/crm\";\nimport { ThemeWarning } from \"./admin-layout.js\";\nimport { badgeText, brandDisplay, S, type Brand } from \"./admin-brand.js\";\nimport { useChapterCopy } from \"./copy-context.js\";\nimport { mergeAdminRoute as mergeRoute } from \"./admin-route-merge.js\";\nimport {\n adminRouteFromUrl,\n adminRouteHref,\n adminSectionFromUrl,\n adminSectionHref,\n type AdminRouteState,\n type AdminRouting,\n} from \"./admin-route.js\";\n\nexport {\n adminRouteFromUrl,\n adminRouteHref,\n adminSectionFromUrl,\n adminSectionHref,\n};\nexport type { AdminRouteState, AdminRouting };\nexport { Gate, S } from \"./admin-brand.js\";\nexport type { Brand } from \"./admin-brand.js\";\n\n/** A workspace id or partial nested route passed to navigation helpers. */\nexport type AdminRouteTarget =\n | string\n | {\n workspaceId?: string;\n viewId?: string | null;\n recordId?: string | null;\n detailTab?: string | null;\n };\n\n/** Context shared by every admin workspace and its nested views. */\nexport interface AdminSectionContext {\n client: CrmClient;\n getToken: () => Promise<string | null>;\n currentUser?: Record<string, unknown>;\n route: AdminRouteState;\n navigate: (target: AdminRouteTarget) => void;\n href: (target: AdminRouteTarget) => string;\n}\n\n/** One top-level admin workspace rendered inside the signed-in shell. */\nexport interface AdminWorkspace {\n id: string;\n label: string;\n /** Optional host-rendered navigation icon; the workspace list is the registry. */\n icon?: ComponentChildren;\n /** Canonical nested view used when a workspace is opened without one. */\n defaultViewId?: string;\n /** Optional named @odla-ai/ui accent scoped to this workspace's content. */\n accent?: string;\n render: (ctx: AdminSectionContext) => ComponentChildren;\n}\n\n/** Legacy name for a top-level workspace. @deprecated Use AdminWorkspace. */\nexport type AdminSection = AdminWorkspace;\n/** Built-in shell presentation; embedded preserves site-owned chrome. */\nexport type AdminChrome = \"embedded\" | \"standalone\" | \"editorial\" | \"topbar\" | \"none\";\n\n/** Identity and sign-out services supplied to host-owned account controls. */\nexport interface AdminAccountMenuProps {\n brand: Brand; email: string | null;\n currentUser?: Record<string, unknown>;\n signOut: () => void;\n}\n\n/** Workspace route and navigation services supplied to host-owned navigation. */\nexport interface AdminWorkspaceNavProps {\n workspaces: readonly AdminWorkspace[]; route: AdminRouteState;\n navigate: (target: AdminRouteTarget) => void; href: (target: AdminRouteTarget) => string;\n}\n\n/** Host-owned geometry around the already-composed active workspace. Chapter\n * retains authentication, routing, accent scope and active-only rendering. */\nexport interface AdminWorkspaceFrameProps extends AdminWorkspaceNavProps, AdminAccountMenuProps {\n activeWorkspace: AdminWorkspace | undefined;\n context: AdminSectionContext;\n children: ComponentChildren;\n}\n\nexport interface AdminShellProps {\n workspaces: AdminWorkspace[]; basePath: string; brand: Brand; client: CrmClient;\n getToken: () => Promise<string | null>;\n signOut: () => void; email: string | null;\n currentUser?: Record<string, unknown>;\n routing?: AdminRouting;\n chrome?: AdminChrome;\n renderHeader?: (props: AdminAccountMenuProps) => ComponentChildren;\n renderAccountMenu?: (props: AdminAccountMenuProps) => ComponentChildren;\n renderWorkspaceNav?: (props: AdminWorkspaceNavProps) => ComponentChildren;\n /** Replaces packaged navigation/main geometry; a custom header stays outside. */\n renderWorkspaceFrame?: (props: AdminWorkspaceFrameProps) => ComponentChildren;\n}\n\nexport function AdminShell({\n workspaces,\n basePath,\n brand,\n client,\n getToken,\n signOut,\n email,\n currentUser,\n routing = \"fragment\",\n chrome = \"embedded\",\n renderHeader,\n renderAccountMenu,\n renderWorkspaceNav,\n renderWorkspaceFrame,\n}: AdminShellProps) {\n const copy = useChapterCopy().admin;\n const normalizeRoute = useCallback((candidate: AdminRouteState): AdminRouteState => {\n if (candidate.viewId) return candidate;\n const workspace = workspaces.find((item) => item.id === candidate.workspaceId);\n return workspace?.defaultViewId\n ? { ...candidate, viewId: workspace.defaultViewId }\n : candidate;\n }, [workspaces]);\n const routeFromLocation = useCallback(() => {\n if (typeof window === \"undefined\") {\n return normalizeRoute({ workspaceId: workspaces[0]?.id ?? \"\" });\n }\n return normalizeRoute(\n adminRouteFromUrl(new URL(window.location.href), basePath, workspaces.map((workspace) => workspace.id)),\n );\n }, [workspaces, basePath, normalizeRoute]);\n const [route, setRoute] = useState<AdminRouteState>(routeFromLocation);\n const href = useCallback(\n (target: AdminRouteTarget) => {\n const next = normalizeRoute(mergeRoute(route, target));\n if (typeof window === \"undefined\") {\n return `#${[\n next.workspaceId,\n next.viewId,\n next.recordId,\n next.detailTab,\n ].filter((part): part is string => Boolean(part)).map(encodeURIComponent).join(\"/\")}`;\n }\n return adminRouteHref(new URL(window.location.href), basePath, next, routing);\n },\n [route, basePath, routing, normalizeRoute],\n );\n const navigate = useCallback(\n (target: AdminRouteTarget) => {\n const next = normalizeRoute(mergeRoute(route, target));\n if (typeof window !== \"undefined\") {\n window.history.pushState(null, \"\", adminRouteHref(new URL(window.location.href), basePath, next, routing));\n }\n setRoute(next);\n },\n [route, basePath, routing, normalizeRoute],\n );\n\n useEffect(() => {\n const sync = () => setRoute(routeFromLocation());\n window.addEventListener(\"popstate\", sync);\n window.addEventListener(\"hashchange\", sync);\n return () => {\n window.removeEventListener(\"popstate\", sync);\n window.removeEventListener(\"hashchange\", sync);\n };\n }, [routeFromLocation]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const canonical = adminRouteHref(new URL(window.location.href), basePath, route, routing);\n const actual = `${window.location.pathname}${window.location.search}${window.location.hash}`;\n if (canonical !== actual) window.history.replaceState(null, \"\", canonical);\n // Canonicalize only initial/inbound state; route changes already own history.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const context: AdminSectionContext = {\n client,\n getToken,\n ...(currentUser ? { currentUser } : {}),\n route,\n navigate,\n href,\n };\n const active = workspaces.find((workspace) => workspace.id === route.workspaceId) ?? workspaces[0];\n const accountProps: AdminAccountMenuProps = {\n brand,\n email,\n ...(currentUser ? { currentUser } : {}),\n signOut,\n };\n const identity = renderAccountMenu?.(accountProps) ?? (\n <>\n <span style={{ ...S.role, color: \"inherit\", borderColor: \"currentColor\", background: \"transparent\" }}>{copy.shell.adminRole}</span>\n {email ? <span style={{ opacity: 0.72, fontSize: 12 }}>{email}</span> : null}\n <button className=\"btn secondary mini\" onClick={signOut}>{copy.auth.signOut}</button>\n </>\n );\n const activeContent = active?.render(context);\n const workspaceContent = active?.accent\n ? <ThemeScope accent={active.accent}>{activeContent}</ThemeScope>\n : activeContent;\n\n if (chrome === \"topbar\" && !renderWorkspaceFrame) {\n return (\n <>\n <TopBar>\n <a className=\"topbar-brand\" href=\"/\"><span style={S.badgeSm}>{badgeText(brand)}</span>{brandDisplay(brand)}</a>\n <nav className=\"topbar-nav\" aria-label={copy.shell.navigationLabel}>\n {workspaces.map((workspace) => (\n <TopBarLink key={workspace.id} active={workspace.id === route.workspaceId} onClick={() => navigate(workspace.id)}>\n {workspace.label}\n </TopBarLink>\n ))}\n </nav>\n <span className=\"topbar-spacer\" />\n <div className=\"topbar-actions\">{identity}</div>\n </TopBar>\n <main className=\"shell-main\" style={S.main}><ThemeWarning />{workspaceContent}</main>\n </>\n );\n }\n\n const header = renderHeader\n ? renderHeader(accountProps)\n : chrome === \"standalone\" || chrome === \"editorial\" ? (\n <header style={S.masthead}>\n <a href=\"/\" style={S.mastheadBrand}><span style={S.badgeSm}>{badgeText(brand)}</span>{brandDisplay(brand)}</a>\n <span style={{ opacity: 0.68 }}>{copy.shell.adminConsole}</span>\n <span style={{ flex: 1 }} />\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10 }}>{identity}</div>\n </header>\n ) : null;\n if (renderWorkspaceFrame) return <>{header}<ThemeWarning />{renderWorkspaceFrame({\n ...accountProps, workspaces, route, navigate, href, activeWorkspace: active,\n context, children: workspaceContent,\n })}</>;\n return (\n <>\n {header}\n <main className=\"shell-main\" style={S.main}>\n <ThemeWarning />\n {renderWorkspaceNav ? (\n <>\n <div style={S.workspaceTabs}>\n {renderWorkspaceNav({ workspaces, route, navigate, href })}\n </div>\n {workspaceContent}\n </>\n ) : (\n <Tabs\n style={S.workspaceTabs}\n ariaLabel={copy.shell.navigationLabel}\n value={route.workspaceId}\n mount=\"active\"\n onValueChange={(workspaceId) =>\n setRoute(normalizeRoute({ workspaceId }))}\n items={workspaces.map((workspace) => ({\n value: workspace.id,\n label: workspace.label,\n href: href(workspace.id),\n panel: workspace.id === route.workspaceId ? workspaceContent : null,\n }))}\n />\n )}\n </main>\n </>\n );\n}\n","// Shared layout for the admin sections, so every section is a centered column of\n// odla-ui `.panel` cards with consistent width and spacing — the container the\n// chrome expects sections to own. No invented classes: `.panel`/`.muted` are\n// odla-ui's, and the width/gap is inline so it works without a per-site stylesheet.\nimport type { ComponentChildren, JSX } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\n\nconst PAGE: JSX.CSSProperties = {\n maxWidth: \"var(--ui-content-width, 1120px)\",\n margin: \"0 auto\",\n padding: \"var(--chapter-admin-page-padding, 28px 20px 64px)\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 20,\n};\nconst HEAD: JSX.CSSProperties = { display: \"flex\", alignItems: \"baseline\", justifyContent: \"space-between\", gap: 16, flexWrap: \"wrap\" };\n\n/** The centered content column every admin section renders into. */\nexport function AdminPage({ children }: { children: ComponentChildren }) {\n return <div style={PAGE}>{children}</div>;\n}\n\n/** An odla-ui `.panel` card with an optional heading + trailing actions. */\nexport function Panel({ title, actions, children }: { title?: ComponentChildren; actions?: ComponentChildren; children: ComponentChildren }) {\n return (\n <section className=\"panel\" style={{ display: \"flex\", flexDirection: \"column\", gap: 14 }}>\n {title || actions ? (\n <header style={HEAD}>\n {title ? <h2 style={{ margin: 0, fontSize: 18 }}>{title}</h2> : <span />}\n {actions ? <div style={{ display: \"flex\", gap: 8, alignItems: \"center\" }}>{actions}</div> : null}\n </header>\n ) : null}\n {children}\n </section>\n );\n}\n\n// odla-ui components read their colors from `--ui-*` design tokens whose VALUES\n// come from the theme layer (e.g. @odla-ai/ui/themes/paper/tokens.css + ui.css),\n// NOT from @odla-ai/ui/index.css. Loading only index.css (or a theme whose remap\n// has no primitives behind it) leaves tokens like `--ui-surface` undefined, and\n// the whole console renders transparent/broken — silently. This probes a real\n// `.panel` background and, if it's transparent, says so LOUDLY instead.\nfunction themeLooksMissing(): boolean {\n if (typeof document === \"undefined\") return false;\n const probe = document.createElement(\"div\");\n probe.className = \"panel\";\n probe.style.cssText = \"position:absolute;visibility:hidden;pointer-events:none\";\n document.body.appendChild(probe);\n const bg = getComputedStyle(probe).backgroundColor;\n probe.remove();\n return !bg || bg === \"transparent\" || bg === \"rgba(0, 0, 0, 0)\";\n}\n\n/** A loud banner when the odla-ui theme token layer is missing. */\nexport function ThemeWarning() {\n const [missing, setMissing] = useState(false);\n useEffect(() => setMissing(themeLooksMissing()), []);\n if (!missing) return null;\n return (\n <div\n role=\"alert\"\n style={{ background: \"#7f1d1d\", color: \"#fff\", padding: \"12px 20px\", fontSize: 14, lineHeight: 1.5, textAlign: \"center\" }}\n >\n <strong>odla-ui theme tokens are missing.</strong> The console reads colors from a theme layer, not{\" \"}\n <code>@odla-ai/ui/index.css</code> alone. Import a theme before it — e.g.{\" \"}\n <code>@odla-ai/ui/themes/paper/tokens.css</code> and <code>@odla-ai/ui/themes/paper/ui.css</code> — then{\" \"}\n <code>@odla-ai/ui/index.css</code>. See the @odla-ai/chapter README (“Theme tokens”).\n </div>\n );\n}\n\n/** A centered status line for loading / empty / error states. */\nexport function AdminNote({ children }: { children: ComponentChildren }) {\n return (\n <AdminPage>\n <section className=\"panel\">\n <p className=\"muted\" style={{ margin: 0 }}>{children}</p>\n </section>\n </AdminPage>\n );\n}\n","import type { ComponentChildren, JSX } from \"preact\";\n\nexport type Brand = { name: string; badge?: string; wordmark?: ComponentChildren };\n\nexport const badgeText = (brand: Brand): string =>\n brand.badge ?? brand.name.slice(0, 3).toUpperCase();\n\nexport const brandDisplay = (brand: Brand): ComponentChildren => {\n const display = brand.wordmark ?? brand.name;\n if (typeof display !== \"string\" || !display.includes(\"&\")) return display;\n return (\n <span>\n {display.split(\"&\").map((part, index, all) => (\n <span key={`${part}:${index}`}>\n {part}\n {index < all.length - 1 ? <span className=\"mk-amp\">&amp;</span> : null}\n </span>\n ))}\n </span>\n );\n};\n\nexport const S: Record<string, JSX.CSSProperties> = {\n gate: {\n minHeight: \"100vh\",\n display: \"grid\",\n placeItems: \"center\",\n padding: 24,\n background:\n \"radial-gradient(900px 480px at 50% -8%, var(--ui-accent-soft), transparent 70%),\" +\n \" radial-gradient(700px 500px at 110% 10%, var(--ui-good-soft), transparent 60%)\",\n },\n gateInner: { width: \"100%\", maxWidth: 400, display: \"flex\", flexDirection: \"column\", alignItems: \"center\" },\n brandBox: { textAlign: \"center\", marginBottom: 22 },\n badge: {\n width: 52, height: 52, margin: \"0 auto 14px\", display: \"grid\", placeItems: \"center\",\n fontSize: 15, fontWeight: 700, color: \"var(--ui-on-accent)\",\n background: \"linear-gradient(135deg, var(--ui-accent), var(--ui-accent-strong))\",\n borderRadius: 14, boxShadow: \"0 10px 28px var(--ui-accent-soft)\",\n },\n badgeSm: {\n width: 30, height: 30, display: \"grid\", placeItems: \"center\", fontSize: 10,\n fontWeight: 700, color: \"var(--ui-on-accent)\", background: \"var(--ui-accent)\",\n borderRadius: 8, marginRight: 10,\n },\n h1: { margin: 0, fontSize: 28, letterSpacing: \"-0.02em\", fontWeight: 700 },\n muted: { color: \"var(--ui-text-muted)\" },\n role: {\n fontFamily: \"var(--ui-font-mono)\", fontSize: 11, textTransform: \"uppercase\",\n letterSpacing: \"0.04em\", padding: \"2px 8px\", borderRadius: 999,\n background: \"var(--ui-accent-soft)\", border: \"1px solid var(--ui-accent)\",\n color: \"var(--ui-accent-strong)\",\n },\n main: { minHeight: \"calc(100vh - 61px)\", background: \"var(--ui-bg)\" },\n card: { width: \"100%\", textAlign: \"center\" },\n masthead: {\n display: \"flex\", alignItems: \"center\", gap: 16, flexWrap: \"wrap\",\n padding: \"18px max(20px, calc((100% - 1120px) / 2))\",\n color: \"var(--ui-bg)\", background: \"var(--ui-text)\",\n },\n mastheadBrand: {\n display: \"inline-flex\", alignItems: \"center\", color: \"inherit\",\n fontFamily: \"var(--ui-font-display)\", fontSize: 22, textDecoration: \"none\",\n },\n workspaceTabs: {\n maxWidth: \"var(--ui-content-width, 1160px)\",\n margin: \"0 auto\",\n padding: \"var(--chapter-admin-workspace-padding, 18px 20px 0)\",\n },\n};\n\nexport function Gate(props: { brand: Brand; tagline?: string; children: ComponentChildren }) {\n const { brand, tagline, children } = props;\n return (\n <div style={S.gate}>\n <div style={S.gateInner}>\n <div style={S.brandBox}>\n <div style={S.badge}>{badgeText(brand)}</div>\n <h1 style={S.h1}>{brandDisplay(brand)}</h1>\n {tagline ? <p style={{ ...S.muted, margin: \"8px 0 0\", fontSize: 14 }}>{tagline}</p> : null}\n </div>\n {children}\n </div>\n </div>\n );\n}\n","import type { AdminRouteState, AdminRouteTarget } from \"./chrome.js\";\n\n/** Fold an in-workspace navigation update without retaining stale child state. */\nexport function mergeAdminRoute(current: AdminRouteState, target: AdminRouteTarget): AdminRouteState {\n if (typeof target === \"string\") return { workspaceId: target };\n const changingWorkspace = target.workspaceId != null && target.workspaceId !== current.workspaceId;\n const next: AdminRouteState = changingWorkspace\n ? { workspaceId: target.workspaceId! }\n : { ...current, ...(target.workspaceId ? { workspaceId: target.workspaceId } : {}) };\n for (const key of [\"viewId\", \"recordId\", \"detailTab\"] as const) {\n const value = target[key];\n if (value === null) delete next[key];\n else if (value !== undefined) next[key] = value;\n }\n if (target.viewId !== undefined && target.recordId === undefined) {\n delete next.recordId;\n delete next.detailTab;\n }\n if (target.recordId === null) delete next.detailTab;\n return next;\n}\n","import { parseCrmDiscussionReference } from \"@odla-ai/crm\";\n\n/** Typed URL state for the admin's nested in-page workspaces. */\nexport interface AdminRouteState {\n workspaceId: string;\n viewId?: string;\n recordId?: string;\n detailTab?: string;\n}\n\n/** URL encoding used for admin workspace state. */\nexport type AdminRouting = \"fragment\" | \"query\" | \"path\";\nexport type AdminRouteAliases = Readonly<Record<string, AdminRouteState>>;\n\nconst DEFAULT_ALIASES: AdminRouteAliases = {\n billing: { workspaceId: \"dashboard\", viewId: \"billing\" },\n meetings: { workspaceId: \"dashboard\" },\n calls: { workspaceId: \"dashboard\" },\n availability: { workspaceId: \"settings\", viewId: \"calendar\" },\n calendar: { workspaceId: \"settings\", viewId: \"calendar\" },\n email: { workspaceId: \"settings\", viewId: \"email\" },\n};\n\nconst cleanBase = (basePath: string): string =>\n basePath.length > 1 ? basePath.replace(/\\/+$/, \"\") : basePath;\n\nconst decode = (segment: string | undefined): string | undefined => {\n if (!segment) return undefined;\n try {\n return decodeURIComponent(segment);\n } catch {\n return undefined;\n }\n};\n\nconst fromParts = (parts: readonly string[]): AdminRouteState | null => {\n const workspaceId = decode(parts[0]);\n if (!workspaceId) return null;\n const viewId = decode(parts[1]);\n const recordId = decode(parts[2]);\n const detailTab = decode(parts[3]);\n return {\n workspaceId,\n ...(viewId ? { viewId } : {}),\n ...(recordId ? { recordId } : {}),\n ...(detailTab ? { detailTab } : {}),\n };\n};\n\nconst resolve = (\n candidate: AdminRouteState | null,\n workspaceIds: readonly string[],\n aliases: AdminRouteAliases,\n): AdminRouteState | null => {\n if (!candidate) return null;\n if (workspaceIds.includes(candidate.workspaceId)) return candidate;\n const alias = aliases[candidate.workspaceId] ?? DEFAULT_ALIASES[candidate.workspaceId];\n return alias && workspaceIds.includes(alias.workspaceId) ? alias : null;\n};\n\n/** Read canonical fragments first, then inbound query and legacy path links. */\nexport function adminRouteFromUrl(\n url: URL,\n basePath: string,\n workspaceIds: readonly string[],\n aliases: AdminRouteAliases = {},\n): AdminRouteState {\n const fallback = { workspaceId: workspaceIds[0] ?? \"\" };\n const hashParts = url.hash.replace(/^#\\/?/, \"\").split(\"/\").filter(Boolean);\n const fromHash = resolve(fromParts(hashParts), workspaceIds, aliases);\n if (fromHash) return fromHash;\n\n const reference = parseCrmDiscussionReference(url);\n const fromReference = reference\n ? resolve({\n workspaceId: \"people\",\n viewId: reference.type,\n recordId: reference.recordId,\n detailTab: reference.kind === \"crm:activity\" ? \"notes\" : \"profile\",\n }, workspaceIds, aliases)\n : null;\n if (fromReference) return fromReference;\n\n const tab = url.searchParams.get(\"tab\");\n const fromQuery = resolve(\n tab\n ? {\n workspaceId: tab,\n ...(url.searchParams.get(\"view\") ? { viewId: url.searchParams.get(\"view\")! } : {}),\n ...(url.searchParams.get(\"record\") ? { recordId: url.searchParams.get(\"record\")! } : {}),\n ...(url.searchParams.get(\"detail\") ? { detailTab: url.searchParams.get(\"detail\")! } : {}),\n }\n : null,\n workspaceIds,\n aliases,\n );\n if (fromQuery) return fromQuery;\n\n const base = cleanBase(basePath);\n const rest = url.pathname.startsWith(base) ? url.pathname.slice(base.length).replace(/^\\//, \"\") : \"\";\n return resolve(fromParts(rest.split(\"/\").filter(Boolean)), workspaceIds, aliases) ?? fallback;\n}\n\nconst encodedParts = (route: AdminRouteState): string[] =>\n [route.workspaceId, route.viewId, route.recordId, route.detailTab]\n .filter((part): part is string => Boolean(part))\n .map(encodeURIComponent);\n\n/** Build a stable URL for one admin state. Fragment routing is the default. */\nexport function adminRouteHref(\n current: URL,\n basePath: string,\n route: AdminRouteState,\n routing: AdminRouting = \"fragment\",\n): string {\n const next = new URL(current);\n const base = cleanBase(basePath);\n const mountPaths = new Set([base, `${base}/`, `${base}/index.html`]);\n if (!mountPaths.has(next.pathname)) next.pathname = `${base}/`;\n for (const key of [\"tab\", \"view\", \"record\", \"detail\"]) next.searchParams.delete(key);\n\n if (routing === \"fragment\") {\n next.hash = encodedParts(route).join(\"/\");\n } else if (routing === \"query\") {\n next.hash = \"\";\n next.searchParams.set(\"tab\", route.workspaceId);\n if (route.viewId) next.searchParams.set(\"view\", route.viewId);\n if (route.recordId) next.searchParams.set(\"record\", route.recordId);\n if (route.detailTab) next.searchParams.set(\"detail\", route.detailTab);\n } else {\n next.hash = \"\";\n next.pathname = `${base}/${encodeURIComponent(route.workspaceId)}`;\n if (route.viewId) next.searchParams.set(\"view\", route.viewId);\n if (route.recordId) next.searchParams.set(\"record\", route.recordId);\n if (route.detailTab) next.searchParams.set(\"detail\", route.detailTab);\n }\n return `${next.pathname}${next.search}${next.hash}`;\n}\n\n/** Backwards-compatible section helpers over the workspace router. */\nexport function adminSectionFromUrl(url: URL, basePath: string, sectionIds: readonly string[]): string {\n return adminRouteFromUrl(url, basePath, sectionIds).workspaceId;\n}\n\n/** Build a compatibility URL for a top-level admin section. */\nexport function adminSectionHref(\n current: URL,\n basePath: string,\n id: string,\n routing: AdminRouting = \"fragment\",\n): string {\n return adminRouteHref(current, basePath, { workspaceId: id }, routing);\n}\n","import { Tabs } from \"@odla-ai/ui/components\";\nimport type { Chapter } from \"../types.js\";\nimport { billingSection } from \"./admin-billing.js\";\nimport { dashboardSection } from \"./admin-dashboard.js\";\nimport { collectionSection } from \"./admin-people.js\";\nimport { networkRecordsWorkspace } from \"./admin-network-records.js\";\nimport type { AdminSectionContext, AdminWorkspace } from \"./chrome.js\";\nimport { LeaderNetworkOverview } from \"./admin-portfolio.js\";\nimport { admissionGrantsWorkspace } from \"./admin-admission.js\";\nimport { LeaderSettingsWorkspace, SettingsWorkspace } from \"./admin-settings-workspace.js\";\n\nexport const adminViewContext = (\n ctx: AdminSectionContext,\n viewId: string,\n active: boolean,\n): AdminSectionContext => {\n const route = {\n workspaceId: ctx.route.workspaceId,\n viewId,\n ...(active && ctx.route.recordId ? { recordId: ctx.route.recordId } : {}),\n ...(active && ctx.route.detailTab ? { detailTab: ctx.route.detailTab } : {}),\n };\n const targetFromView = (target: Parameters<AdminSectionContext[\"navigate\"]>[0]) => {\n if (typeof target === \"string\") return target;\n if (target.workspaceId && target.workspaceId !== route.workspaceId) return target;\n if (target.viewId && target.viewId !== route.viewId) return target;\n return { ...route, ...target };\n };\n return {\n ...ctx,\n route,\n navigate: (target) => ctx.navigate(targetFromView(target)),\n href: (target) => ctx.href(targetFromView(target)),\n };\n};\n\nfunction DashboardWorkspace({ chapter, ctx }: { chapter: Chapter; ctx: AdminSectionContext }) {\n const copy = chapter.copy.admin;\n const active = ctx.route.viewId === \"billing\" ? \"billing\" : \"overview\";\n const overview = dashboardSection({ id: \"overview\", label: copy.workspaces.overview });\n const billing = billingSection({ label: copy.workspaces.billing });\n return (\n <Tabs\n ariaLabel={copy.workspaces.dashboardViewsLabel}\n value={active}\n mount=\"active\"\n items={[\n {\n value: \"overview\",\n label: copy.workspaces.overview,\n href: ctx.href({ viewId: \"overview\", recordId: null, detailTab: null }),\n panel: overview.render(adminViewContext(ctx, \"overview\", active === \"overview\")),\n },\n {\n value: \"billing\",\n label: copy.workspaces.billing,\n href: ctx.href({ viewId: \"billing\", recordId: null, detailTab: null }),\n panel: billing.render(adminViewContext(ctx, \"billing\", active === \"billing\")),\n },\n ]}\n />\n );\n}\n\nfunction PeopleWorkspace({ chapter, ctx }: { chapter: Chapter; ctx: AdminSectionContext }) {\n const types = Object.entries(chapter.crm.config.types)\n .filter(([, def]) => (def.workspace ?? \"people\") === \"people\");\n const fallback = types[0]?.[0] ?? \"person\";\n const active = types.some(([type]) => type === ctx.route.viewId) ? ctx.route.viewId! : fallback;\n const networkSharing = chapter.network.targets.length > 0;\n return (\n <Tabs\n ariaLabel={chapter.copy.admin.workspaces.collectionsLabel}\n value={active}\n variant=\"pill\"\n mount=\"active\"\n items={types.map(([type, def]) => {\n const section = collectionSection({\n crm: chapter.crm,\n type,\n lifecycle: chapter.mode === \"chapter\" && type === \"person\",\n roles: chapter.auth.ladder,\n networkSharing,\n applicationStages: chapter.pipeline.stages,\n });\n return {\n value: type,\n label: def.labelPlural ?? def.label,\n href: ctx.href({ viewId: type, recordId: null, detailTab: null }),\n panel: section.render(adminViewContext(ctx, type, active === type)),\n };\n })}\n />\n );\n}\n\nfunction PortfolioWorkspace({ chapter, ctx }: { chapter: Chapter; ctx: AdminSectionContext }) {\n const copy = chapter.copy.admin;\n const types = Object.entries(chapter.crm.config.types)\n .filter(([, def]) => def.workspace === \"portfolio\");\n const fallback = types[0]?.[0] ?? \"\";\n const active = types.some(([type]) => type === ctx.route.viewId) ? ctx.route.viewId! : fallback;\n if (!active) return <LeaderNetworkOverview ctx={ctx} />;\n return (\n <Tabs\n ariaLabel={copy.workspaces.portfolioViewsLabel}\n value={active}\n variant=\"pill\"\n mount=\"active\"\n items={types.map(([type, def]) => {\n const section = collectionSection({\n crm: chapter.crm,\n type,\n networkSharing: chapter.network.targets.length > 0,\n });\n return {\n value: type,\n label: def.labelPlural ?? def.label,\n href: ctx.href({ viewId: type, recordId: null, detailTab: null }),\n panel: section.render(adminViewContext(ctx, type, active === type)),\n };\n })}\n />\n );\n}\n\nfunction LeaderDashboardWorkspace({ chapter, ctx }: { chapter: Chapter; ctx: AdminSectionContext }) {\n return (\n <Tabs\n ariaLabel={chapter.copy.admin.workspaces.dashboardViewsLabel}\n value=\"overview\"\n mount=\"active\"\n items={[{\n value: \"overview\",\n label: chapter.copy.admin.workspaces.overview,\n href: ctx.href({ viewId: \"overview\", recordId: null, detailTab: null }),\n panel: <LeaderNetworkOverview ctx={adminViewContext(ctx, \"overview\", true)} />,\n }]}\n />\n );\n}\n\n/** Default follower grammar: three workspaces with nested operational views. */\nexport function defaultAdminWorkspaces(chapter: Chapter): AdminWorkspace[] {\n const copy = chapter.copy.admin;\n const people: AdminWorkspace = {\n id: \"people\",\n label: copy.workspaces.people,\n defaultViewId: Object.keys(chapter.crm.config.types)[0] ?? \"person\",\n render: (ctx) => <PeopleWorkspace chapter={chapter} ctx={ctx} />,\n };\n if (chapter.mode === \"hub\" && chapter.network.targets.length === 0) return [people];\n if (chapter.mode === \"hub\") {\n const portfolioTypes = Object.entries(chapter.crm.config.types)\n .filter(([, def]) => def.workspace === \"portfolio\");\n return [\n {\n id: \"dashboard\",\n label: copy.workspaces.dashboard,\n defaultViewId: \"overview\",\n render: (ctx) => <LeaderDashboardWorkspace chapter={chapter} ctx={ctx} />,\n },\n networkRecordsWorkspace(chapter),\n people,\n {\n id: \"portfolio\",\n label: copy.workspaces.portfolio,\n defaultViewId: portfolioTypes[0]?.[0],\n render: (ctx) => <PortfolioWorkspace chapter={chapter} ctx={ctx} />,\n },\n {\n id: \"settings\",\n label: copy.workspaces.settings,\n defaultViewId: \"email\",\n render: (ctx) => <LeaderSettingsWorkspace chapter={chapter} ctx={ctx} />,\n },\n ];\n }\n return [\n {\n id: \"dashboard\",\n label: copy.workspaces.dashboard,\n defaultViewId: \"overview\",\n render: (ctx) => <DashboardWorkspace chapter={chapter} ctx={ctx} />,\n },\n people,\n admissionGrantsWorkspace(copy.workspaces.admission),\n {\n id: \"settings\",\n label: copy.workspaces.settings,\n defaultViewId: \"calendar\",\n render: (ctx) => <SettingsWorkspace chapter={chapter} ctx={ctx} />,\n },\n ];\n}\n","import { useState } from \"preact/hooks\";\nimport { Button } from \"@odla-ai/ui/components\";\nimport { PaymentRecoveryQueue } from \"./payment-recovery-queue\";\n// Billing section: applications joined with live Stripe subscription state from\n// GET /api/admin/billing, rendered with odla-ui StatBand + DataTable. Degrades to\n// a note when billingReady:false, and surfaces the route's `truncated` flag.\nimport { DataTable, StatBand } from \"@odla-ai/ui/components\";\nimport type { DataTableColumn, StatCell } from \"@odla-ai/ui/components\";\nimport { adminFetch, useAdminResource } from \"./admin-api.js\";\nimport { AdminPage, AdminNote, Panel } from \"./admin-layout.js\";\nimport type { AdminSection, AdminSectionContext } from \"./chrome.js\";\nimport { useChapterCopy } from \"./copy-context.js\";\nimport type { ChapterCopy } from \"../copy.js\";\n\ninterface BillingRow {\n id: string;\n name: string;\n email: string;\n applicationStatus: string;\n subscriptionStatus: string | null;\n cancelAtPeriodEnd: boolean;\n amountCents: number | null;\n listAmountCents?: number | null;\n interval: string;\n renewalAt: number | null;\n}\ninterface BillingData {\n billingReady: boolean;\n testMode?: boolean;\n truncated?: boolean;\n rows: BillingRow[];\n summary: { activeCount: number; annualizedCents: number | null; renewingSoonCount: number; pastDueCount: number; canceledCount: number; refundedCount: number } | null;\n}\n\nconst money = (cents: number | null): string => cents === null ? \"Unknown\" : `$${(cents / 100).toLocaleString()}`;\nconst date = (t: number | null): string => (t ? new Date(t).toLocaleDateString([], { dateStyle: \"medium\" }) : \"—\");\n\nconst columns = (\n copy: ChapterCopy[\"admin\"][\"billing\"], cancel: (id: string) => void, busy: string,\n): readonly DataTableColumn<BillingRow>[] => [\n { key: \"name\", header: copy.name, cell: (r) => r.name, sortAs: \"string\" },\n { key: \"email\", header: copy.email, cell: (r) => r.email },\n { key: \"applicationStatus\", header: copy.application, cell: (r) => r.applicationStatus },\n { key: \"subscriptionStatus\", header: copy.subscription, cell: (r) => (r.subscriptionStatus ? `${r.subscriptionStatus}${r.cancelAtPeriodEnd ? ` · ${copy.cancelling}` : \"\"}` : \"—\") },\n { key: \"amountCents\", header: \"Next-term forecast\", cell: (r) => r.amountCents === null ? \"Unknown\" : <span>\n {r.listAmountCents != null && r.listAmountCents !== r.amountCents ? <><s>{money(r.listAmountCents)}</s>{\" \"}</> : null}\n {money(r.amountCents)}/{r.interval === \"month\" ? \"mo\" : \"yr\"}</span>, sortAs: \"number\", sortValue: (r) => r.amountCents ?? -1 },\n { key: \"cancelRenewal\", header: \"Renewal\", cell: (row) => row.subscriptionStatus &&\n [\"active\", \"trialing\", \"past_due\", \"unpaid\"].includes(row.subscriptionStatus) && !row.cancelAtPeriodEnd\n ? <Button mini disabled={Boolean(busy)} onClick={() => cancel(row.id)}>{busy === row.id ? \"Canceling…\" : \"Cancel renewal\"}</Button>\n : row.cancelAtPeriodEnd ? \"Ends after paid term\" : \"—\" },\n { key: \"renewalAt\", header: copy.renews, cell: (r) => date(r.renewalAt), sortAs: \"number\", sortValue: (r) => r.renewalAt ?? 0 },\n];\n\nfunction BillingBody({ ctx }: { ctx: AdminSectionContext }) {\n const copy = useChapterCopy().admin.billing;\n const [busy, setBusy] = useState(\"\");\n const [note, setNote] = useState(\"\");\n const { data, loading, error, refresh } = useAdminResource<BillingData>(ctx.getToken, \"/api/admin/billing\");\n if (loading) return <AdminNote>{copy.loading}</AdminNote>;\n if (error || !data) return <AdminNote>{copy.loadFailed}{error ? `: ${error}` : \"\"}.</AdminNote>;\n if (!data.billingReady) return <AdminNote>{copy.notConfigured}</AdminNote>;\n\n const cancel = async (id: string) => {\n if (!globalThis.confirm?.(\"Cancel future renewals? Paid access continues through the current term. No refund will be issued.\")) return;\n setBusy(id); setNote(\"\");\n try {\n await adminFetch(ctx.getToken, `/api/admin/applications/${id}/cancel-renewal`, { method: \"POST\" });\n setNote(\"Renewal canceled. Access continues through the paid term.\"); refresh();\n } catch (cause) { setNote(cause instanceof Error ? cause.message : \"Cancellation could not be confirmed. Please retry.\"); }\n finally { setBusy(\"\"); }\n };\n const s = data.summary;\n const stats: StatCell[] = s\n ? [\n { value: s.activeCount, label: copy.active },\n { value: money(s.annualizedCents), label: copy.annualized },\n { value: s.renewingSoonCount, label: copy.renewingSoon },\n { value: s.pastDueCount, label: copy.pastDue },\n ]\n : [];\n\n return (\n <AdminPage>\n {note ? <p role=\"status\">{note}</p> : null}\n <PaymentRecoveryQueue getToken={ctx.getToken} />\n {s ? <StatBand stats={stats} /> : null}\n <Panel title={copy.subscriptions} actions={data.testMode ? <span className=\"badge\">{copy.testMode}</span> : undefined}>\n {data.truncated ? <p className=\"badge\">{copy.truncated}</p> : null}\n <DataTable rows={data.rows} columns={columns(copy, id => void cancel(id), busy)} rowKey={(r) => r.id} />\n </Panel>\n </AdminPage>\n );\n}\n\n/** Options for {@link billingSection}. */\nexport interface BillingSectionOptions {\n id?: string;\n label?: string;\n}\n\n/** Build the Billing admin section over `GET /api/admin/billing`. Renders a\n * \"not configured\" note when the group has no Stripe key vaulted. */\nexport function billingSection(options: BillingSectionOptions = {}): AdminSection {\n const { id = \"billing\", label = \"Billing\" } = options;\n return { id, label, render: (ctx) => <BillingBody ctx={ctx} /> };\n}\n","import { useState } from \"preact/hooks\";\nimport { Button } from \"@odla-ai/ui/components\";\nimport { adminFetch, useAdminResource } from \"./admin-api\";\nimport { Panel } from \"./admin-layout\";\n\ntype RecoveryRow = { eventId?: string; kind: string; disposition?: string; retryReady?: boolean };\n/** Content-free reconciliation alerts and provider-verified retry controls for Chapter or network operators. */\nexport function PaymentRecoveryQueue(props: { getToken: () => Promise<string | null>; scope?: \"chapter\" | \"network\" }) {\n const network = props.scope === \"network\";\n const path = network ? \"/api/admin/network-commercial-read-model\" : \"/api/admin/payment-recovery\";\n const { data, loading, error, refresh } = useAdminResource<{ rows?: RecoveryRow[]; exceptions?: RecoveryRow[]; truncated?: boolean }>(props.getToken, path);\n const [busy, setBusy] = useState(\"\");\n const [message, setMessage] = useState(\"\");\n const recover = async (eventId: string) => {\n setBusy(eventId); setMessage(\"\");\n try {\n const result = await adminFetch<{ disposition?: string; matched?: boolean }>(props.getToken, path, { method: \"POST\",\n body: JSON.stringify({ eventId, ...(network ? { command: \"recover-event\" } : {}) }) });\n setMessage(result.disposition?.startsWith(\"quarantine_\") || result.matched === false\n ? \"This event still needs its application or payment linkage repaired. Its evidence is saved for another retry.\"\n : \"Stripe evidence verified and reconciliation retried.\");\n refresh();\n } catch (cause) { setMessage(cause instanceof Error ? cause.message : \"Recovery could not finish. Please retry.\"); }\n finally { setBusy(\"\"); }\n };\n const rows = network ? data?.exceptions ?? [] : data?.rows ?? [];\n return <Panel title=\"Payment events needing attention\">\n {loading ? <p>Checking payment reconciliation…</p> : error ? <p role=\"alert\">Payment recovery is unavailable: {error}</p> : <>\n {rows.length ? <p role=\"alert\">{rows.length} payment event{rows.length === 1 ? \" needs\" : \"s need\"} review.</p> : <p>All loaded payment events are reconciled.</p>}\n {data?.truncated ? <p role=\"alert\">This queue is incomplete. Review the remaining events before declaring reconciliation complete.</p> : null}\n <ul>{rows.map(row => <li key={`${row.eventId}:${row.kind}`}>\n {row.eventId ? <code>{row.eventId}</code> : null} <span>{row.disposition ?? row.kind}</span>{\" \"}\n {row.eventId?.startsWith(\"evt_\") ? <Button mini disabled={Boolean(busy)} onClick={() => void recover(row.eventId!)}>\n {busy === row.eventId ? \"Verifying…\" : \"Verify with Stripe and retry\"}\n </Button> : <span>Repair the missing payment linkage before retrying.</span>}\n </li>)}</ul>\n </>}\n {message ? <p role=\"status\">{message}</p> : null}\n </Panel>;\n}\n","// Token-bound access to the /api/admin/* routes for the console sections. Every\n// section fetches with the signed-in admin's bearer token (from ChapterAdmin's\n// getToken) — the worker gates each route with verifyUser + isAdmin, so the UI\n// carries no privilege of its own.\nimport { useCallback, useEffect, useState } from \"preact/hooks\";\n\n/** Fetch a JSON `/api/admin/*` route with the admin bearer token. Throws on a\n * non-2xx (the body's `error`, else the status). */\nexport async function adminFetch<T = unknown>(\n getToken: () => Promise<string | null>,\n path: string,\n init?: RequestInit,\n): Promise<T> {\n const token = await getToken();\n const headers = new Headers(init?.headers);\n if (token) headers.set(\"authorization\", `Bearer ${token}`);\n if (init?.body) headers.set(\"content-type\", \"application/json\");\n const res = await fetch(path, { ...init, headers });\n const body = (await res.json().catch(() => ({}))) as Record<string, unknown>;\n if (!res.ok) {\n const error = new Error(typeof body.error === \"string\" ? body.error : `request failed (${res.status})`) as Error & { errors?: string[] };\n if (Array.isArray(body.errors) && body.errors.every((item) => typeof item === \"string\")) {\n error.errors = body.errors as string[];\n }\n throw error;\n }\n return body as T;\n}\n\n/** The state of one admin resource load. */\nexport interface AdminResource<T> {\n data: T | null;\n loading: boolean;\n error: string | null;\n /** Re-fetch (e.g. after a mutation). */\n refresh: () => void;\n}\n\n/** Load a `/api/admin/*` GET route into Preact state, re-fetching on `refresh()`\n * or when `path` changes. */\nexport function useAdminResource<T = unknown>(getToken: () => Promise<string | null>, path: string): AdminResource<T> {\n const [data, setData] = useState<T | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [nonce, setNonce] = useState(0);\n\n useEffect(() => {\n let live = true;\n setLoading(true);\n setError(null);\n adminFetch<T>(getToken, path)\n .then((d) => live && setData(d))\n .catch((e: unknown) => live && setError(e instanceof Error ? e.message : String(e)))\n .finally(() => live && setLoading(false));\n return () => {\n live = false;\n };\n }, [getToken, path, nonce]);\n\n const refresh = useCallback(() => setNonce((n) => n + 1), []);\n return { data, loading, error, refresh };\n}\n","// Operational overview powered by the MetricWidget and StepPipeline primitives.\nimport { MetricWidget, StepPipeline } from \"@odla-ai/ui/components\";\nimport type { MetricData, PipelineStep } from \"@odla-ai/ui/components\";\nimport { useAdminResource } from \"./admin-api.js\";\nimport { AdminPage, AdminNote, Panel } from \"./admin-layout.js\";\nimport type { AdminSection, AdminSectionContext } from \"./chrome.js\";\nimport { useChapterCopy } from \"./copy-context.js\";\nimport { formatChapterCopy } from \"../copy.js\";\n\ninterface DashboardData {\n incomplete?: boolean;\n applications: { total: number; last7: number; last30: number };\n applicationsSeries: MetricData;\n pipeline: Record<string, number>;\n pipelineDelta: Record<string, number>;\n calls: { upcoming: number; needsAttention: number };\n agenda: Array<{\n id: string;\n startAt: number;\n name: string;\n email: string | null;\n drift: string;\n meetUrl: string | null;\n htmlLink?: string | null;\n }>;\n timezone: string;\n revenue: {\n billingReady: boolean;\n activeCount?: number;\n annualRunRateCents?: number | null;\n testMode?: boolean;\n };\n revenueSeries: MetricData | null;\n membersSeries: MetricData | null;\n}\n\nconst number = (value: number): string => Math.round(value).toLocaleString();\nconst money = (cents: number): string => `$${Math.round(cents / 100).toLocaleString()}`;\nconst when = (time: number): string =>\n new Date(time).toLocaleString([], { dateStyle: \"medium\", timeStyle: \"short\" });\n\nfunction DashboardBody({ ctx }: { ctx: AdminSectionContext }) {\n const copy = useChapterCopy().admin.dashboard;\n const { data, loading, error } = useAdminResource<DashboardData>(\n ctx.getToken,\n \"/api/admin/dashboard\",\n );\n if (loading) return <AdminNote>{copy.loading}</AdminNote>;\n if (error || !data) return <AdminNote>{copy.loadFailed}{error ? `: ${error}` : \"\"}.</AdminNote>;\n\n const pipelineSteps: PipelineStep[] = Object.entries(data.pipeline)\n .filter(([stage]) => ![\"declined\", \"refunded\"].includes(stage))\n .map(([stage, count]) => ({\n icon: <span style={{ fontSize: 22, fontWeight: 700 }}>{count}</span>,\n title: stage.replaceAll(\"_\", \" \"),\n description: data.pipelineDelta[stage]\n ? formatChapterCopy(copy.thisWeek, { count: data.pipelineDelta[stage] })\n : copy.noChange,\n }));\n const exceptions = [\"declined\", \"refunded\"]\n .filter((stage) => stage in data.pipeline)\n .map((stage) => `${stage} ${data.pipeline[stage]}`)\n .join(\" · \");\n\n return (\n <AdminPage>\n {data.incomplete ? <AdminNote>This dashboard snapshot is incomplete. Counts and trends below cover only the loaded records, not the full chapter.</AdminNote> : null}\n <Panel\n title={\n <>\n {copy.upcomingCalls}{\" \"}\n <span className=\"muted\" style={{ fontWeight: 400 }}>· {data.timezone}</span>\n </>\n }\n actions={\n data.calls.needsAttention\n ? <span className=\"badge\">{formatChapterCopy(copy.callsNeedAttention, { count: data.calls.needsAttention })}</span>\n : undefined\n }\n >\n {data.agenda.length === 0 ? (\n <p className=\"muted\" style={{ margin: 0 }}>{copy.noUpcomingCalls}</p>\n ) : (\n <ul style={{ listStyle: \"none\", margin: 0, padding: 0, display: \"grid\", gap: 10 }}>\n {data.agenda.map((meeting) => (\n <li key={meeting.id} style={{ display: \"flex\", alignItems: \"center\", gap: 12, flexWrap: \"wrap\" }}>\n <strong style={{ minWidth: 170 }}>{when(meeting.startAt)}</strong>\n <span style={{ flex: 1 }}>{meeting.name}{meeting.email ? ` · ${meeting.email}` : \"\"}</span>\n {meeting.drift && meeting.drift !== \"none\" ? <span className=\"badge\">{copy.drift}</span> : null}\n {meeting.htmlLink ? <a href={meeting.htmlLink} target=\"_blank\" rel=\"noreferrer\">{copy.open}</a> : null}\n {meeting.meetUrl ? <a href={meeting.meetUrl} target=\"_blank\" rel=\"noreferrer\">{copy.meet}</a> : null}\n </li>\n ))}\n </ul>\n )}\n </Panel>\n\n <div style={{ display: \"grid\", gridTemplateColumns: \"repeat(auto-fit, minmax(280px, 1fr))\", gap: 18 }}>\n <MetricWidget label={copy.applications} data={data.applicationsSeries} format={number} />\n {data.membersSeries ? (\n <MetricWidget label={copy.newMembers} data={data.membersSeries} format={number} />\n ) : (\n <Panel title={copy.newMembers}><p className=\"muted\">{copy.newMembersUnavailable}</p></Panel>\n )}\n </div>\n\n {data.revenueSeries && data.revenue.billingReady ? (\n <div>\n <MetricWidget\n label={copy.revenueAdded}\n data={data.revenueSeries}\n format={money}\n size=\"large\"\n />\n <p className=\"muted\">\n {copy.activeMemberships}: {data.revenue.activeCount ?? 0} · {copy.annualRunRate}:{\" \"}\n {data.revenue.annualRunRateCents == null ? \"Unknown\" : money(data.revenue.annualRunRateCents)}\n {data.revenue.testMode ? ` · ${copy.testMode}` : \"\"}\n </p>\n </div>\n ) : (\n <Panel title={copy.revenue}><p className=\"muted\">{copy.revenueUnavailable}</p></Panel>\n )}\n\n <Panel title={copy.pipeline}>\n <StepPipeline ariaLabel={copy.pipelineLabel} steps={pipelineSteps} />\n {exceptions ? <p className=\"muted\" style={{ margin: 0 }}>{exceptions}</p> : null}\n </Panel>\n </AdminPage>\n );\n}\n\n/** Labels and ids for a composed dashboard workspace entry. */\nexport interface DashboardSectionOptions {\n id?: string;\n label?: string;\n}\n\n/** Build the operational dashboard workspace over `/api/admin/dashboard`. */\nexport function dashboardSection(options: DashboardSectionOptions = {}): AdminSection {\n const { id = \"dashboard\", label = \"Dashboard\" } = options;\n return { id, label, render: (ctx) => <DashboardBody ctx={ctx} /> };\n}\n","import { BillingCard, CrmWorkspace } from \"@odla-ai/crm/ui\";\nimport type {\n CrmLifecycleAdapter,\n CrmWorkspaceMasterContext,\n CrmWorkspaceRecordContext,\n RecordPanelTab,\n} from \"@odla-ai/crm/ui\";\nimport type { Crm, CrmClient, CrmRecord } from \"@odla-ai/crm\";\nimport type { ComponentChildren } from \"preact\";\nimport type { AdminSectionContext } from \"./chrome.js\";\nimport { applicationLifecycleAdapter } from \"./admin-lifecycle-adapter.js\";\nimport { NamedSeatRecordPanel } from \"./admin-named-seat.js\";\nimport { APPLICATION_STAGES, CandidateStagePanel } from \"./admin-candidate-stage.js\";\nimport { RecordAdmissionPanel } from \"./admin-record-admission.js\";\nimport { ApplicationLinkRepair } from \"./admin-application-repair.js\";\nimport { ApplicationStagePanel } from \"./admin-application-stage.js\";\nimport { ChapterPersonProfile } from \"./admin-person-profile.js\";\nimport { AccountPeopleSync } from \"./admin-account-sync.js\";\nimport { RecordActions } from \"./admin-record-actions.js\";\nimport { NetworkShareActions } from \"./admin-network.js\";\nimport { RecordActivityPanel } from \"./admin-record-activity.js\";\nimport { RecordCommsHistory, RecordCommsPanel } from \"./admin-record-comms.js\";\nimport { RecordSchedulingPanel } from \"./admin-record-scheduling.js\";\nimport { AdminPage } from \"./admin-layout.js\";\nimport { useChapterCopy } from \"./copy-context.js\";\n\nexport { applicationLifecycleAdapter } from \"./admin-lifecycle-adapter.js\";\n\nexport interface PeopleBodyProps {\n crm: Crm;\n client: CrmClient;\n type: string;\n ctx: AdminSectionContext;\n roles: readonly string[];\n lifecycle: boolean;\n networkSharing: boolean;\n /** Stages owned by the application workflow; the rest of the person pipeline is admin-settable for unlinked people. */\n applicationStages?: readonly string[];\n collapseClosedDetail: boolean;\n lifecycleAdapter?:\n | CrmLifecycleAdapter\n | ((ctx: AdminSectionContext) => CrmLifecycleAdapter);\n requireLifecycleAdapter?: boolean;\n renderSummary?: (\n context: CrmWorkspaceMasterContext,\n ctx: AdminSectionContext,\n ) => ComponentChildren;\n renderMaster?: (\n context: CrmWorkspaceMasterContext,\n ctx: AdminSectionContext,\n ) => ComponentChildren;\n renderDetailHeader?: (\n context: CrmWorkspaceRecordContext,\n ctx: AdminSectionContext,\n ) => ComponentChildren;\n renderDetail?: (\n context: CrmWorkspaceRecordContext,\n defaultDetail: ComponentChildren,\n ctx: AdminSectionContext,\n ) => ComponentChildren;\n defaultDetailTab?: string;\n renderEmptyDetail?: (\n context: CrmWorkspaceMasterContext,\n ctx: AdminSectionContext,\n ) => ComponentChildren;\n hrefForRecord?: (record: CrmRecord, ctx: AdminSectionContext) => string;\n extendRecordTabs?: (\n tabs: readonly RecordPanelTab[],\n context: CrmWorkspaceRecordContext,\n ) => readonly RecordPanelTab[];\n}\n\nexport function PeopleBody(props: PeopleBodyProps) {\n const copy = useChapterCopy().admin.records;\n const {\n crm, client, type, ctx, roles, lifecycle, networkSharing, applicationStages = APPLICATION_STAGES,\n collapseClosedDetail, lifecycleAdapter, requireLifecycleAdapter, renderSummary, renderMaster,\n renderDetailHeader, renderDetail, defaultDetailTab = \"profile\", renderEmptyDetail,\n hrefForRecord, extendRecordTabs,\n } = props;\n const def = crm.type(type);\n const recordId = ctx.route?.recordId ?? null;\n const builtInLifecycle = lifecycle\n ? applicationLifecycleAdapter(ctx, copy)\n : undefined;\n const resolvedLifecycle =\n typeof lifecycleAdapter === \"function\"\n ? lifecycleAdapter(ctx)\n : lifecycleAdapter ?? builtInLifecycle;\n // Both imports are the same runtime class, but their declarations contain a\n // private field that makes TypeScript treat the public UI copy nominally.\n const workspaceClient = client as unknown as Parameters<typeof CrmWorkspace>[0][\"client\"];\n return (\n <AdminPage>\n <CrmWorkspace\n crm={crm}\n client={workspaceClient}\n type={type}\n recordId={recordId}\n detailTab={ctx.route?.detailTab}\n defaultDetailTab={defaultDetailTab}\n onRecordIdChange={(id) => ctx.navigate({ recordId: id, detailTab: id ? defaultDetailTab : null })}\n hrefForRecord={(record) =>\n hrefForRecord?.(record, ctx) ??\n ctx.href({ recordId: record.id, detailTab: defaultDetailTab })}\n hrefForList={ctx.href({ recordId: null, detailTab: null })}\n hrefForDetailTab={(detailTab) => ctx.href({ detailTab })}\n collapseClosedDetail={collapseClosedDetail}\n lifecycle={resolvedLifecycle}\n requireLifecycleAdapter={requireLifecycleAdapter ?? lifecycle}\n renderSummary={(context) => <>\n {renderSummary?.(context, ctx)}\n {type === \"person\" ? <AccountPeopleSync getToken={ctx.getToken} refresh={context.query.refresh} /> : null}\n </>}\n renderMaster={renderMaster\n ? (context) => renderMaster(context, ctx)\n : undefined}\n renderDetailHeader={renderDetailHeader\n ? (context) => renderDetailHeader(context, ctx)\n : undefined}\n renderDetail={renderDetail\n ? (context, defaultDetail) => renderDetail(context, defaultDetail, ctx)\n : undefined}\n renderEmptyDetail={renderEmptyDetail\n ? (context) => renderEmptyDetail(context, ctx)\n : undefined}\n extendRecordTabs={(base, context): readonly RecordPanelTab[] => {\n const record = context.detail.record;\n const applicationId =\n typeof record.fields?.applicationId === \"string\"\n ? String(record.fields.applicationId)\n : null;\n const byId = new Map(base.map((tab) => [tab.id, tab]));\n const tabs: RecordPanelTab[] = [];\n const add = (id: string) => {\n const tab = byId.get(id);\n if (tab && lifecycle && type === \"person\" && id === \"profile\" && !lifecycleAdapter) {\n tabs.push({ ...tab, panel: <ChapterPersonProfile key={record.id} recordId={record.id} getToken={ctx.getToken}\n onChanged={() => { context.refreshRecord(); context.refreshList(); }} /> });\n return;\n }\n if (tab && lifecycle && applicationId && id === \"stage\" && !lifecycleAdapter) {\n tabs.push({ ...tab, panel: <ApplicationStagePanel key={record.id + record.updatedAt}\n applicationId={applicationId} getToken={ctx.getToken} onMove={context.moveStage} /> });\n return;\n }\n if (tab) tabs.push(lifecycle && !applicationId && id === \"stage\" ? {\n ...tab,\n panel: record.stage == null || !applicationStages.includes(record.stage)\n ? <CandidateStagePanel key={record.id + record.updatedAt} stages={def.pipeline?.stages ?? []} current={record.stage ?? null}\n applicationStages={applicationStages} onMove={context.moveStage} />\n : <><ApplicationLinkRepair key={record.id} recordId={record.id} getToken={ctx.getToken} onChanged={() => {\n context.refreshRecord(); context.refreshList();\n }} />{tab.panel}</>,\n } : tab);\n };\n add(\"stage\");\n add(\"profile\");\n if (def.facets?.email !== false) {\n tabs.push({\n id: \"comms\",\n label: copy.comms,\n panel: <RecordCommsPanel client={client} recordId={record.id} getToken={ctx.getToken} />,\n });\n tabs.push({\n id: \"history\",\n label: copy.commsHistory,\n panel: <RecordCommsHistory client={client} recordId={record.id} />,\n });\n }\n if (lifecycle) {\n tabs.push({\n id: \"scheduling\",\n label: copy.scheduling,\n panel: <RecordSchedulingPanel getToken={ctx.getToken} applicationId={applicationId} />,\n });\n tabs.push({ id: \"invitation\", label: copy.invitation, panel: <RecordAdmissionPanel getToken={ctx.getToken}\n email={record.primaryEmail ?? (typeof record.fields?.email === \"string\" ? record.fields.email : null)}\n onChanged={() => { context.refreshRecord(); context.refreshList(); }} /> });\n tabs.push({ id: \"billing\", label: copy.billing, panel: <><BillingCard record={record} />\n {applicationId ? <NamedSeatRecordPanel getToken={ctx.getToken} applicationId={applicationId} superAdmin={ctx.currentUser?.superAdmin === true}\n onChanged={() => { context.refreshRecord(); context.refreshList(); }} /> : null}</> });\n } else {\n add(\"billing\");\n }\n tabs.push({\n id: \"notes\",\n label: copy.notes,\n panel: <RecordActivityPanel client={client} recordId={record.id} />,\n });\n add(\"connections\");\n if (lifecycle) {\n tabs.push({\n id: \"access\",\n label: copy.access,\n panel: (\n <RecordActions\n getToken={ctx.getToken}\n record={record}\n roles={roles}\n onChanged={() => {\n context.refreshRecord();\n context.refreshList();\n }}\n />\n ),\n visible: () => ctx.currentUser?.superAdmin === true,\n });\n }\n if (networkSharing) {\n tabs.push({\n id: \"sharing\",\n label: copy.sharing,\n panel: <NetworkShareActions recordId={record.id} recordType={record.type} getToken={ctx.getToken} />,\n });\n }\n return extendRecordTabs?.(tabs, context) ?? tabs;\n }}\n />\n </AdminPage>\n );\n}\n","import type { CrmLifecycleAdapter } from \"@odla-ai/crm/ui\";\nimport type { CrmClient } from \"@odla-ai/crm\";\nimport type { AdminSectionContext } from \"./chrome.js\";\nimport { adminFetch } from \"./admin-api.js\";\nimport { DEFAULT_CHAPTER_COPY, type ChapterCopy } from \"../copy.js\";\n\n/** Application-authoritative stage transitions used by Chapter collections. A\n * person with no application may still move between the CRM's own pre-application\n * stages; the server refuses any application status that is not earned. */\nexport function applicationLifecycleAdapter(\n ctx: Pick<AdminSectionContext, \"getToken\"> & { client?: CrmClient },\n copy: ChapterCopy[\"admin\"][\"records\"] = DEFAULT_CHAPTER_COPY.admin.records,\n): CrmLifecycleAdapter {\n return {\n transitionStage: async ({ record, to, client }) => {\n const applicationId =\n typeof record.fields?.applicationId === \"string\"\n ? record.fields.applicationId\n : null;\n if (!applicationId) {\n const crmClient = (ctx.client ?? client) as { setStage(id: string, to: string): Promise<unknown> } | undefined;\n if (!crmClient) throw new Error(copy.workflowMissing);\n await crmClient.setStage(record.id, to);\n return;\n }\n const path = `/api/admin/applications/${encodeURIComponent(applicationId)}`;\n if (to === \"approved\") {\n await adminFetch(ctx.getToken, `${path}/approve`, { method: \"POST\" });\n } else if (to === \"refunded\") {\n await adminFetch(ctx.getToken, `${path}/refund`, { method: \"POST\" });\n } else {\n await adminFetch(ctx.getToken, path, {\n method: \"PATCH\",\n body: JSON.stringify({ status: to }),\n });\n }\n },\n };\n}\n","import { useState } from \"preact/hooks\";\nimport { Button } from \"@odla-ai/ui/components\";\nimport { adminFetch, useAdminResource } from \"./admin-api.js\";\n\ninterface SeatView {\n seat: { seatId: string; status: string; recipientName: string; recipientEmail: string } | null;\n amountCents: number; currency: string; termEndsAt: number; purchaseEndsAt: number; refundable: boolean;\n}\n\n/** Props for {@link NamedSeatRecordPanel}. */\nexport interface NamedSeatRecordPanelProps {\n getToken: () => Promise<string | null>;\n /** The purchaser's application; a recipient's own application has no seat panel. */\n applicationId: string;\n /** Only a super admin may see or refund a gifted seat; others see nothing. */\n superAdmin: boolean;\n onChanged?: () => void;\n}\n\n/** The purchaser's additional seat beside their billing: who it is for, where it stands, and the one manual refund. */\nexport function NamedSeatRecordPanel(props: NamedSeatRecordPanelProps) {\n return props.superAdmin ? <SeatPanel {...props} /> : null;\n}\n\nfunction SeatPanel(props: NamedSeatRecordPanelProps) {\n const resource = useAdminResource<SeatView>(props.getToken, `/api/admin/applications/${encodeURIComponent(props.applicationId)}/named-seat`);\n const [busy, setBusy] = useState(false);\n const [note, setNote] = useState<string | null>(null);\n if (resource.loading) return <p role=\"status\">Loading additional seat…</p>;\n if (resource.error || !resource.data) return null;\n const { data } = resource, seat = data.seat;\n const money = new Intl.NumberFormat(\"en-US\", { style: \"currency\", currency: data.currency }).format(data.amountCents / 100);\n const refund = async () => {\n setBusy(true); setNote(null);\n try {\n const receipt = await adminFetch<{ refundedCents?: number; replayed?: boolean }>(props.getToken,\n `/api/admin/applications/${encodeURIComponent(props.applicationId)}/named-seat/refund`, { method: \"POST\" });\n setNote(receipt.replayed ? \"This seat was already refunded.\" : `Refunded ${new Intl.NumberFormat(\"en-US\", {\n style: \"currency\", currency: data.currency }).format((receipt.refundedCents ?? data.amountCents) / 100)}.`);\n props.onChanged?.(); resource.refresh();\n } catch (failure) { setNote(failure instanceof Error ? failure.message : \"Refund could not be completed.\"); }\n finally { setBusy(false); }\n };\n return <section className=\"panel\" aria-label=\"Additional seat\" style={{ display: \"grid\", gap: 8, marginTop: 16 }}>\n <h3 style={{ margin: 0, fontSize: 16 }}>Additional seat</h3>\n {!seat ? <p className=\"muted\" style={{ margin: 0 }}>No additional seat has been purchased.</p> : <>\n <p style={{ margin: 0 }}>{seat.recipientName} · {seat.recipientEmail} · {seat.status.replaceAll(\"_\", \" \")}</p>\n <p className=\"muted\" style={{ margin: 0 }}>{money} paid in full. The seat waits for its recipient and is never refunded automatically.</p>\n {data.refundable ? <div><Button variant=\"danger\" mini disabled={busy} onClick={() => void refund()}>{busy ? \"Refunding…\" : \"Refund seat\"}</Button></div> : null}\n </>}\n {note ? <p className=\"muted\" role=\"status\" style={{ margin: 0 }}>{note}</p> : null}\n </section>;\n}\n","import { useState } from \"preact/hooks\";\nimport { Button, Field, Select } from \"@odla-ai/ui/components\";\n\n/** The membership workflow's own statuses. A person reaches them only through an application, never by hand. */\nexport const APPLICATION_STAGES: readonly string[] = [\n \"submitted\", \"paid_pending_vetting\", \"call_scheduled\", \"interviewed\", \"approved\", \"declined\", \"refunded\",\n];\n\n/** Props for {@link CandidateStagePanel}. */\nexport interface CandidateStagePanelProps {\n /** The CRM person pipeline as configured by the host. */\n stages: readonly { id: string; label?: string }[];\n current: string | null;\n /** Stages owned by the application workflow; everything else is a pre-application stage an admin may set. */\n applicationStages: readonly string[];\n onMove: (to: string) => Promise<unknown>;\n}\n\n/** Stage control for a person with no linked application: invited people and candidates move only through the\n * CRM's pre-application stages, on a chapter exactly as on the network owner. */\nexport function CandidateStagePanel(props: CandidateStagePanelProps) {\n const [selected, setSelected] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const options = props.stages.filter(stage => !props.applicationStages.includes(stage.id) && stage.id !== props.current);\n const label = (id: string) => props.stages.find(stage => stage.id === id)?.label ?? id.replaceAll(\"_\", \" \");\n if (!options.length && props.current == null) {\n return <p>Journey stage: Not applicable. No membership application is linked. Administrative access is separate.</p>;\n }\n const target = options.some(stage => stage.id === selected) ? selected : \"\";\n return <Field label=\"Stage\" error={error}>\n <p>{props.current == null ? \"No stage yet. Membership statuses begin when this person applies.\" : label(props.current)}</p>\n {options.length ? <>\n <Select aria-label=\"Move to stage\" value={target} disabled={busy} onChange={event => setSelected(event.currentTarget.value)}\n options={[{ value: \"\", label: \"Move to…\" }, ...options.map(stage => ({ value: stage.id, label: label(stage.id) }))]} />\n <Button mini disabled={busy || !target} onClick={async () => {\n setBusy(true); setError(null);\n try { await props.onMove(target); setSelected(\"\"); }\n catch (failure) { setError(failure instanceof Error ? failure.message : \"Stage change failed\"); }\n finally { setBusy(false); }\n }}>Move</Button>\n </> : <p>No pre-application stages are configured for this chapter’s CRM.</p>}\n </Field>;\n}\n","import { useState } from \"preact/hooks\";\nimport { Button, Field, Select } from \"@odla-ai/ui/components\";\nimport { adminFetch, useAdminResource } from \"./admin-api.js\";\nimport { useChapterCopy } from \"./copy-context.js\";\n\ninterface Grant {\n id: string; sourceScope: \"local\" | \"parent\"; email: string; decision: \"waive_interview\" | \"require_interview\";\n note?: string; active: boolean; expiresAt?: number; revokedAt?: number; consumedAt?: number;\n}\n\n/** Props for {@link RecordAdmissionPanel}. */\nexport interface RecordAdmissionPanelProps {\n getToken: () => Promise<string | null>;\n /** The record's email; the admission ledger is keyed by exact email. */\n email: string | null;\n onChanged?: () => void;\n}\n\n/** The invitation setting for one person, on the chapter itself: what their next signup will require, who set it,\n * and a way for any admin to set or revoke it without leaving the record. Mirrors the leader's \"Next invitation\". */\nexport function RecordAdmissionPanel(props: RecordAdmissionPanelProps) {\n const copy = useChapterCopy().admin.admission;\n const resource = useAdminResource<{ grants: Grant[] }>(props.getToken, \"/api/admin/admission-grants\");\n const [decision, setDecision] = useState<Grant[\"decision\"]>(\"waive_interview\");\n const [note, setNote] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n if (!props.email) return <p className=\"muted\">This record has no email yet. Add one before setting an invitation.</p>;\n const email = props.email.trim().toLowerCase();\n const grants = (resource.data?.grants ?? []).filter(grant => grant.email.trim().toLowerCase() === email);\n const effective = grants.find(grant => grant.active && !grant.consumedAt && !grant.revokedAt && (!grant.expiresAt || grant.expiresAt > Date.now()));\n const run = async (work: () => Promise<unknown>) => {\n setBusy(true); setError(null);\n try { await work(); setNote(\"\"); resource.refresh(); props.onChanged?.(); }\n catch (failure) { setError(failure instanceof Error ? failure.message : String(failure)); }\n finally { setBusy(false); }\n };\n const save = () => run(() => adminFetch(props.getToken, \"/api/admin/admission-grants\", { method: \"POST\",\n body: JSON.stringify({ email: props.email, decision, ...(note.trim() ? { note: note.trim() } : {}) }) }));\n const revoke = (grant: Grant) => run(() => adminFetch(props.getToken, `/api/admin/admission-grants/${encodeURIComponent(grant.id)}`, { method: \"DELETE\" }));\n return <section aria-label=\"Invitation\" style={{ display: \"grid\", gap: 12 }}>\n {resource.loading ? <p role=\"status\">{copy.loading}</p> : resource.error ? <p role=\"alert\">{resource.error}</p> :\n effective ? <p style={{ margin: 0 }} data-testid=\"effective-invitation\">\n <strong>{effective.decision === \"waive_interview\" ? copy.waive : copy.require}</strong> · {effective.sourceScope === \"local\" ? copy.local : copy.parent}\n {effective.note ? ` · ${effective.note}` : \"\"}\n {effective.sourceScope === \"local\" ? <> <Button variant=\"secondary\" mini disabled={busy} onClick={() => void revoke(effective)}>{copy.revoke}</Button></> : null}\n </p> : <p className=\"muted\" style={{ margin: 0 }}>No invitation setting for {email}. The next signup follows the chapter’s ordinary interview rule.</p>}\n <Field label={copy.decision}>\n <Select value={decision} disabled={busy} onChange={event => setDecision(event.currentTarget.value as Grant[\"decision\"])}\n options={[{ value: \"waive_interview\", label: copy.waive }, { value: \"require_interview\", label: copy.require }]} />\n </Field>\n <Field label={copy.note}><input value={note} maxLength={2000} disabled={busy} onInput={event => setNote(event.currentTarget.value)} /></Field>\n <div><Button variant=\"secondary\" mini disabled={busy} onClick={() => void save()}>{copy.add}</Button></div>\n {error ? <p role=\"alert\">{error}</p> : null}\n </section>;\n}\n","import { useState } from \"preact/hooks\";\nimport { Button } from \"@odla-ai/ui/components\";\nimport { adminFetch } from \"./admin-api.js\";\n\nexport function ApplicationLinkRepair({ recordId, getToken, onChanged }: {\n recordId: string;\n getToken: () => Promise<string | null>;\n onChanged: () => void;\n}) {\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n return <section className=\"panel\">\n <p>This person is missing an application link. Repair checks for one matching chapter application; it does not change membership or profile details.</p>\n <Button variant=\"secondary\" disabled={busy} onClick={async () => {\n setBusy(true); setError(null);\n try {\n await adminFetch(getToken, \"/api/admin/crm/sync\", { method: \"POST\", body: JSON.stringify({ recordId }) });\n onChanged();\n } catch (cause) { setError(cause instanceof Error ? cause.message : String(cause)); }\n finally { setBusy(false); }\n }}>{busy ? \"Checking application link…\" : \"Repair application link\"}</Button>\n {error ? <p role=\"alert\">{error}</p> : null}\n </section>;\n}\n","import { useState } from \"preact/hooks\";\nimport { Button, Field, Select } from \"@odla-ai/ui/components\";\nimport { useAdminResource } from \"./admin-api.js\";\nimport type { AdminSectionContext } from \"./chrome.js\";\n\n/** Read action availability from the application, never from the CRM ladder. */\nexport function ApplicationStagePanel(props: {\n applicationId: string;\n getToken: AdminSectionContext[\"getToken\"];\n onMove: (to: string) => Promise<unknown>;\n}) {\n const actions = useAdminResource<{ status: string; allowedStages: string[] }>(props.getToken,\n `/api/admin/applications/${encodeURIComponent(props.applicationId)}/actions`);\n const [selected, setSelected] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n if (actions.loading) return <p role=\"status\">Loading available actions…</p>;\n if (actions.error) return <p role=\"alert\">Could not load application actions: {actions.error}</p>;\n const allowed = actions.data?.allowedStages ?? [];\n const target = allowed.includes(selected) ? selected : \"\";\n return <Field label=\"Stage\" error={error}>\n <p>{actions.data?.status?.replaceAll(\"_\", \" \")}</p>\n {allowed.length ? <>\n <Select aria-label=\"Move to stage\" value={target} disabled={busy}\n onChange={event => setSelected(event.currentTarget.value)}\n options={[{ value: \"\", label: \"Move to…\" }, ...allowed.map(value => ({ value, label: value.replaceAll(\"_\", \" \") }))]} />\n <Button mini disabled={busy || !target} onClick={async () => {\n setBusy(true); setError(null);\n try { await props.onMove(target); setSelected(\"\"); }\n catch (failure) { setError(failure instanceof Error ? failure.message : \"Action failed\"); }\n finally { setBusy(false); actions.refresh(); }\n }}>Move</Button>\n </> : <p>No stage changes are available under this chapter’s current membership policy.</p>}\n </Field>;\n}\n","import { Button, Field, Input, Select, Textarea } from \"@odla-ai/ui/components\";\nimport { useRef, useState } from \"preact/hooks\";\nimport type { NetworkEditableField } from \"../network-contract.js\";\n\nconst valueText = (value: unknown) => value == null ? \"\" : typeof value === \"object\" ? JSON.stringify(value) : String(value);\n\n/** A schema-driven operational editor. Retries retain the same mutation id. */\nexport function OperationalProfileForm(props: {\n fields: NetworkEditableField[];\n values: Record<string, unknown>;\n onSave: (input: Record<string, unknown>, mutationId: string) => Promise<void>;\n}) {\n const [draft, setDraft] = useState<Record<string, string>>(() => Object.fromEntries(props.fields.map(field => [field.id, valueText(props.values[field.id])])));\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const pending = useRef<{ fingerprint: string; id: string } | null>(null);\n const changed = props.fields.filter(field => draft[field.id] !== valueText(props.values[field.id]));\n const save = async () => {\n setBusy(true); setError(null);\n try {\n const input = Object.fromEntries(changed.map(field => {\n const text = draft[field.id] ?? \"\";\n let value: unknown = text || null;\n if (text && (field.type === \"number\" || field.type === \"date\")) {\n value = Number(text);\n if (!Number.isFinite(value)) throw new Error(`${field.label} must be a number${field.type === \"date\" ? \" (milliseconds since epoch)\" : \"\"}.`);\n }\n if (text && field.type === \"boolean\") value = text === \"true\";\n if (text && field.type === \"json\") value = JSON.parse(text);\n return [field.id, value];\n }));\n const fingerprint = JSON.stringify(input);\n if (pending.current?.fingerprint !== fingerprint) pending.current = { fingerprint, id: crypto.randomUUID() };\n await props.onSave(input, pending.current.id);\n pending.current = null;\n } catch (cause) { setError(cause instanceof Error ? cause.message : \"Could not save profile.\"); }\n finally { setBusy(false); }\n };\n return <section style={{ display: \"grid\", gap: 16 }}>\n {props.fields.map(field => <Field key={field.id} label={field.label}>\n {field.options || field.type === \"boolean\" ? <Select aria-label={field.label} value={draft[field.id]} disabled={busy}\n onChange={event => setDraft({ ...draft, [field.id]: event.currentTarget.value })}>\n <option value=\"\">Not set</option>\n {(field.options ?? [\"true\", \"false\"]).map(option => <option key={option} value={option}>{option}</option>)}\n </Select> : field.type === \"json\" ? <Textarea aria-label={field.label} value={draft[field.id]} disabled={busy}\n onInput={event => setDraft({ ...draft, [field.id]: event.currentTarget.value })} /> :\n <Input aria-label={field.label} value={draft[field.id]} disabled={busy} required={field.required}\n onInput={event => setDraft({ ...draft, [field.id]: event.currentTarget.value })} />}\n </Field>)}\n {error ? <p role=\"alert\">{error}</p> : null}\n <div><Button disabled={busy || !changed.length} onClick={() => void save()}>{busy ? \"Saving…\" : \"Save profile\"}</Button></div>\n </section>;\n}\n","import type { NetworkRecord } from \"../network-contract.js\";\nimport { adminFetch, useAdminResource } from \"./admin-api.js\";\nimport { OperationalProfileForm } from \"./operational-profile-form.js\";\n\nexport function ChapterPersonProfile(props: { recordId: string; getToken: () => Promise<string | null>; onChanged: () => void }) {\n const path = `/api/admin/people/profile?${new URLSearchParams({ recordId: props.recordId })}`;\n const resource = useAdminResource<{ record: NetworkRecord }>(props.getToken, path);\n if (resource.loading) return <p>Loading profile…</p>;\n if (resource.error) return <p role=\"alert\">{resource.error}</p>;\n const record = resource.data?.record;\n if (!record?.edit) return <p>Profile editing is unavailable.</p>;\n return <>\n <p>{String(record.fields.email ?? \"\")} — login email changes use the verified account workflow.</p>\n <OperationalProfileForm key={`${record.id}:${record.revision}`} fields={record.edit.fields} values={record.fields}\n onSave={async (input, mutationId) => {\n await adminFetch(props.getToken, path, { method: \"PATCH\", body: JSON.stringify({ input, mutationId, expectedRevision: record.revision }) });\n resource.refresh(); props.onChanged();\n }} />\n </>;\n}\n","import { useState } from \"preact/hooks\";\nimport { Button } from \"@odla-ai/ui/components\";\nimport { adminFetch } from \"./admin-api.js\";\n\n/** Explicit operator repair for pre-existing accounts; normal sign-in projects\n * automatically. Pages keep the repair below Worker subrequest/time limits. */\nexport function AccountPeopleSync({ getToken, refresh }: { getToken: () => Promise<string | null>; refresh: () => unknown }) {\n const [busy, setBusy] = useState(false);\n const [message, setMessage] = useState(\"\");\n return <div><Button mini variant=\"secondary\" disabled={busy} onClick={async () => {\n setBusy(true); setMessage(\"\");\n let after: string | null = null, count = 0, errors = 0;\n try {\n do {\n const page: { synced: number; errors: unknown[]; next: string | null } = await adminFetch(getToken,\n \"/api/admin/crm/accounts/sync\", { method: \"POST\", body: JSON.stringify(after ? { after } : {}) });\n count += page.synced; errors += page.errors.length;\n if (page.next && after && page.next <= after) throw new Error(\"Account repair cursor did not advance\");\n after = page.next;\n setMessage(`Checked ${count} accounts${errors ? `; ${errors} need identity review` : \"\"}.`);\n } while (after);\n await refresh();\n } catch { setMessage(\"Account repair could not finish. Retry is safe; membership and billing are unchanged.\"); }\n finally { setBusy(false); }\n }}>{busy ? \"Syncing accounts…\" : \"Sync accounts\"}</Button>{message ? <p role=\"status\">{message}</p> : null}</div>;\n}\n","// The lifecycle action panel shown beside an open person record: role change\n// (POST /api/admin/people/role), approve (POST /api/admin/applications/:id/\n// approve) and refund (POST .../refund). Each control appears only when the\n// record carries what it needs — a linked Clerk account for role, an\n// applicationId for approve/refund. Built from odla-ui Field/Select/Button.\nimport { useEffect, useState } from \"preact/hooks\";\nimport { Button, Field, Select } from \"@odla-ai/ui/components\";\nimport { adminFetch } from \"./admin-api.js\";\nimport type { CrmRecord } from \"@odla-ai/crm\";\nimport { formatChapterCopy } from \"../copy.js\";\nimport { useChapterCopy } from \"./copy-context.js\";\n\ninterface Access {\n role: string;\n superAdmin: boolean;\n}\n\n/** Props for {@link RecordActions}. */\nexport interface RecordActionsProps {\n getToken: () => Promise<string | null>;\n record: CrmRecord;\n /** The role ladder offered by the role selector. Default provisional→admin. */\n roles: readonly string[];\n /** Called after any action mutates state, so the caller can refresh. */\n onChanged: () => void;\n}\n\n/** The role/approve/refund controls for one person record. Renders only the\n * actions the record supports. */\nexport function RecordActions({ getToken, record, roles, onChanged }: RecordActionsProps) {\n const copy = useChapterCopy().admin.records;\n const userId = typeof record.clerkUserId === \"string\" ? record.clerkUserId : null;\n const applicationId = typeof record.fields?.applicationId === \"string\" ? (record.fields.applicationId as string) : null;\n const [access, setAccess] = useState<Access | null>(null);\n const [busy, setBusy] = useState<string | null>(null);\n const [note, setNote] = useState<string | null>(null);\n\n useEffect(() => {\n if (!userId) {\n setAccess(null);\n return;\n }\n let live = true;\n adminFetch<Access>(getToken, `/api/admin/people/access?userId=${encodeURIComponent(userId)}`)\n .then((a) => live && setAccess(a))\n .catch(() => live && setAccess(null));\n return () => {\n live = false;\n };\n }, [getToken, userId]);\n\n const act = async (key: string, run: () => Promise<unknown>, ok: string) => {\n setBusy(key);\n setNote(null);\n try {\n await run();\n setNote(ok);\n onChanged();\n } catch (e) {\n setNote(e instanceof Error ? e.message : String(e));\n } finally {\n setBusy(null);\n }\n };\n const setRole = (role: string) =>\n act(\"role\", () => adminFetch(getToken, \"/api/admin/people/role\", { method: \"POST\", body: JSON.stringify({ userId, role }) }), formatChapterCopy(copy.roleSet, { role }));\n const approve = () =>\n act(\"approve\", () => adminFetch(getToken, `/api/admin/applications/${applicationId}/approve`, { method: \"POST\" }), copy.approved);\n const refund = () =>\n act(\"refund\", () => adminFetch(getToken, `/api/admin/applications/${applicationId}/refund`, { method: \"POST\" }), copy.refunded);\n\n if (!userId && !applicationId) return null;\n return (\n <section className=\"panel\" style={{ display: \"flex\", flexDirection: \"column\", gap: 14, marginTop: 16 }}>\n <h3 style={{ margin: 0, fontSize: 16 }}>{copy.lifecycle}</h3>\n {userId ? (\n <Field label={copy.role} hint={access?.superAdmin ? copy.superAdminHint : undefined}>\n <Select\n value={access?.role ?? \"\"}\n disabled={busy === \"role\" || access?.superAdmin}\n options={roles.map((r) => ({ value: r, label: r }))}\n onChange={(e) => void setRole((e.target as HTMLSelectElement).value)}\n />\n </Field>\n ) : (\n <p className=\"muted\" style={{ margin: 0 }}>{copy.noAccount}</p>\n )}\n {applicationId ? (\n <div style={{ display: \"flex\", gap: 8 }}>\n <Button variant=\"secondary\" mini disabled={busy === \"approve\"} onClick={() => void approve()}>{copy.approve}</Button>\n <Button variant=\"danger\" mini disabled={busy === \"refund\"} onClick={() => void refund()}>{copy.refund}</Button>\n </div>\n ) : null}\n {note ? <p className=\"muted\" style={{ margin: 0 }}>{note}</p> : null}\n </section>\n );\n}\n","// Leader-side \"share to follower\" action. It is intentionally record-local:\n// the operator opens the record they already reviewed, chooses a configured\n// follower, and sees an explicit delivery result.\nimport { useState } from \"preact/hooks\";\nimport { adminFetch, useAdminResource } from \"./admin-api.js\";\nimport { formatChapterCopy } from \"../copy.js\";\nimport { useChapterCopy } from \"./copy-context.js\";\n\ninterface Target {\n id: string;\n name: string;\n url: string;\n types: string[];\n}\n\ninterface TargetResponse {\n targets: Target[];\n}\n\ninterface PushResponse {\n ok: boolean;\n results: Array<{ id: string; name: string; ok: boolean; error?: string }>;\n}\n\n/** Props for {@link NetworkShareActions}. */\nexport interface NetworkShareActionsProps {\n recordId: string;\n recordType: string;\n getToken: () => Promise<string | null>;\n}\n\n/** Render follower delivery buttons when this chapter configured network\n * targets. Targets with an explicit type allowlist hide incompatible records. */\nexport function NetworkShareActions(props: NetworkShareActionsProps) {\n const copy = useChapterCopy().admin.network;\n const { recordId, recordType, getToken } = props;\n const targets = useAdminResource<TargetResponse>(getToken, \"/api/admin/network/targets\");\n const [busy, setBusy] = useState<string | null>(null);\n const [message, setMessage] = useState<string | null>(null);\n const compatible = (targets.data?.targets ?? []).filter((target) => target.types.includes(recordType));\n\n if (targets.loading || targets.error || compatible.length === 0) return null;\n\n const push = async (target: Target) => {\n setBusy(target.id);\n setMessage(null);\n try {\n const result = await adminFetch<PushResponse>(getToken, \"/api/admin/network/push\", {\n method: \"POST\",\n body: JSON.stringify({ recordId, targetIds: [target.id] }),\n });\n const delivery = result.results[0];\n setMessage(delivery?.ok\n ? formatChapterCopy(copy.shared, { target: target.name })\n : delivery?.error ?? formatChapterCopy(copy.shareFailed, { target: target.name }));\n } catch (err) {\n setMessage(err instanceof Error ? err.message : copy.deliveryFailed);\n } finally {\n setBusy(null);\n }\n };\n\n return (\n <section className=\"panel\" style={{ marginTop: 14, display: \"flex\", flexDirection: \"column\", gap: 10 }}>\n <div>\n <h3 style={{ margin: 0, fontSize: 16 }}>{copy.title}</h3>\n <p className=\"muted\" style={{ margin: \"4px 0 0\", fontSize: 13 }}>{copy.allowlistDescription}</p>\n </div>\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 8 }}>\n {compatible.map((target) => (\n <button className=\"btn secondary mini\" disabled={busy !== null} onClick={() => void push(target)} key={target.id}>\n {busy === target.id ? copy.sharing : formatChapterCopy(copy.shareWith, { target: target.name })}\n </button>\n ))}\n </div>\n {message ? <p role=\"status\" style={{ margin: 0, fontSize: 13 }}>{message}</p> : null}\n </section>\n );\n}\n","import { useCallback, useEffect, useState } from \"preact/hooks\";\nimport { ActivityFeed } from \"@odla-ai/crm/ui\";\nimport type { CrmActivity, CrmClient } from \"@odla-ai/crm\";\nimport { parseCrmDiscussionReference } from \"@odla-ai/crm\";\n\n/** Notes and follow-ups for one CRM record. */\nexport function RecordActivityPanel(props: {\n client: CrmClient;\n recordId: string;\n}) {\n const { client, recordId } = props;\n const [activities, setActivities] = useState<CrmActivity[]>([]);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const reference = typeof window === \"undefined\"\n ? null\n : parseCrmDiscussionReference(new URL(window.location.href));\n const focusedActivityId =\n reference?.kind === \"crm:activity\" &&\n reference.recordId === recordId\n ? reference.activityId\n : undefined;\n const load = useCallback(async () => {\n try {\n const result = await client.listActivities(recordId, { limit: 100 });\n setActivities(result.activities);\n setError(null);\n } catch (failure) {\n setError(failure instanceof Error ? failure.message : String(failure));\n }\n }, [client, recordId]);\n useEffect(() => void load(), [load]);\n const run = async (action: () => Promise<unknown>) => {\n setBusy(true);\n try {\n await action();\n await load();\n } finally {\n setBusy(false);\n }\n };\n if (error) return <p role=\"alert\" className=\"muted\">{error}</p>;\n return (\n <ActivityFeed\n activities={activities}\n focusedActivityId={focusedActivityId}\n busy={busy}\n onAddNote={(body) => void run(() => client.addActivity(recordId, { kind: \"note\", body }))}\n onAddTask={(task) => void run(() => client.addActivity(recordId, { kind: \"task\", ...task }))}\n onToggleTask={(activity, done) =>\n void run(() => client.updateTask(activity.id, { status: done ? \"done\" : \"open\" }))}\n />\n );\n}\n","import { useCallback, useEffect, useState } from \"preact/hooks\";\nimport { Button, Field, Select } from \"@odla-ai/ui/components\";\nimport type { CrmClient } from \"@odla-ai/crm\";\nimport { useAdminResource } from \"./admin-api.js\";\nimport { useChapterCopy } from \"./copy-context.js\";\n\ninterface EmailConfig {\n emailTemplates: Record<string, { enabled: boolean; subject: string }>;\n}\n\n/** Template send action for one record. */\nexport function RecordCommsPanel(props: {\n client: CrmClient;\n recordId: string;\n getToken: () => Promise<string | null>;\n}) {\n const copy = useChapterCopy().admin.records;\n const { client, recordId, getToken } = props;\n const config = useAdminResource<EmailConfig>(getToken, \"/api/admin/group/email\");\n const templates = Object.entries(config.data?.emailTemplates ?? {}).filter(([, value]) => value.enabled);\n const [template, setTemplate] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const [note, setNote] = useState<string | null>(null);\n const send = async () => {\n if (!template) return;\n setBusy(true);\n setNote(null);\n try {\n const result = await client.sendEmail(recordId, { templateId: template });\n setNote(result.sent ? copy.messageSent : result.reason ?? copy.messageNotSent);\n } catch (failure) {\n setNote(failure instanceof Error ? failure.message : String(failure));\n } finally {\n setBusy(false);\n }\n };\n if (config.loading) return <p className=\"muted\">{copy.loadingTemplates}</p>;\n if (config.error) return <p role=\"alert\" className=\"muted\">{config.error}</p>;\n return (\n <div style={{ display: \"grid\", gap: 14, maxWidth: 560 }}>\n <Field label={copy.template}>\n <Select\n value={template}\n onChange={(event) => setTemplate(event.currentTarget.value)}\n options={[\n { value: \"\", label: copy.chooseTemplate },\n ...templates.map(([id, value]) => ({ value: id, label: value.subject || id })),\n ]}\n />\n </Field>\n <div><Button disabled={!template || busy} onClick={() => void send()}>{busy ? copy.sending : copy.send}</Button></div>\n {note ? <p role=\"status\" className=\"muted\">{note}</p> : null}\n </div>\n );\n}\n\n/** Audited send history for one record. */\nexport function RecordCommsHistory(props: { client: CrmClient; recordId: string }) {\n const copy = useChapterCopy().admin.records;\n const { client, recordId } = props;\n const [rows, setRows] = useState<Record<string, unknown>[]>([]);\n const [error, setError] = useState<string | null>(null);\n const load = useCallback(async () => {\n try {\n const result = await client.emailLog({ recordId, limit: 100 });\n setRows(result.log);\n setError(null);\n } catch (failure) {\n setError(failure instanceof Error ? failure.message : String(failure));\n }\n }, [client, recordId]);\n useEffect(() => void load(), [load]);\n if (error) return <p role=\"alert\" className=\"muted\">{error}</p>;\n if (rows.length === 0) return <p className=\"muted\">{copy.noMessages}</p>;\n return (\n <ul style={{ listStyle: \"none\", padding: 0, margin: 0, display: \"grid\", gap: 10 }}>\n {rows.map((row, index) => (\n <li className=\"panel\" key={String(row[\"id\"] ?? index)}>\n <strong>{String(row[\"templateId\"] ?? row[\"template\"] ?? copy.message)}</strong>\n <div className=\"muted\">\n {row[\"to\"] ? String(row[\"to\"]) : \"\"}\n {row[\"sentAt\"] ? ` · ${new Date(Number(row[\"sentAt\"])).toLocaleString()}` : \"\"}\n </div>\n </li>\n ))}\n </ul>\n );\n}\n","import { useState } from \"preact/hooks\";\nimport { Button } from \"@odla-ai/ui/components\";\nimport { adminFetch, useAdminResource } from \"./admin-api.js\";\nimport { useChapterCopy } from \"./copy-context.js\";\n\ninterface Meeting {\n id: string;\n applicationId: string;\n startAt: number;\n status: string;\n meetUrl?: string | null;\n htmlLink?: string | null;\n}\n\n/** Meetings and reschedule/cancel actions for one application-backed record. */\nexport function RecordSchedulingPanel(props: {\n getToken: () => Promise<string | null>;\n applicationId: string | null;\n}) {\n const copy = useChapterCopy().admin.records;\n const { getToken, applicationId } = props;\n const resource = useAdminResource<{ meetings: Meeting[]; timezone: string }>(\n getToken,\n \"/api/admin/meetings?all=1\",\n );\n const [busy, setBusy] = useState<string | null>(null);\n const [note, setNote] = useState<string | null>(null);\n const meetings = (resource.data?.meetings ?? []).filter((meeting) => meeting.applicationId === applicationId);\n const run = async (meeting: Meeting, action: \"cancel\" | \"reschedule\") => {\n let body: string | undefined;\n if (action === \"reschedule\") {\n const input = globalThis.prompt?.(copy.newStartPrompt);\n if (!input) return;\n const startAt = Date.parse(input);\n if (!Number.isFinite(startAt)) {\n setNote(copy.parseFailed);\n return;\n }\n body = JSON.stringify({ startAt });\n } else if (!globalThis.confirm?.(copy.cancelConfirm)) {\n return;\n }\n setBusy(meeting.id);\n try {\n await adminFetch(getToken, `/api/admin/meetings/${meeting.id}/${action}`, { method: \"POST\", body });\n resource.refresh();\n setNote(action === \"cancel\" ? copy.callCancelled : copy.callRescheduled);\n } catch (failure) {\n setNote(failure instanceof Error ? failure.message : String(failure));\n } finally {\n setBusy(null);\n }\n };\n if (!applicationId) return <p className=\"muted\">{copy.noApplication}</p>;\n if (resource.loading) return <p className=\"muted\">{copy.loadingMeetings}</p>;\n if (resource.error) return <p role=\"alert\" className=\"muted\">{resource.error}</p>;\n if (meetings.length === 0) return <p className=\"muted\">{copy.noMeetings}</p>;\n return (\n <div style={{ display: \"grid\", gap: 12 }}>\n {meetings.map((meeting) => (\n <section className=\"panel\" key={meeting.id}>\n <strong>{new Date(meeting.startAt).toLocaleString()}</strong>\n <p className=\"muted\">{meeting.status} · {resource.data?.timezone}</p>\n <div style={{ display: \"flex\", gap: 8, flexWrap: \"wrap\" }}>\n {meeting.meetUrl ? <a href={meeting.meetUrl} target=\"_blank\" rel=\"noreferrer\">{copy.joinMeeting}</a> : null}\n {meeting.htmlLink ? <a href={meeting.htmlLink} target=\"_blank\" rel=\"noreferrer\">{copy.openCalendar}</a> : null}\n {meeting.status === \"scheduled\" ? (\n <>\n <Button variant=\"secondary\" mini disabled={busy === meeting.id} onClick={() => void run(meeting, \"reschedule\")}>{copy.reschedule}</Button>\n <Button variant=\"danger\" mini disabled={busy === meeting.id} onClick={() => void run(meeting, \"cancel\")}>{copy.cancel}</Button>\n </>\n ) : null}\n </div>\n </section>\n ))}\n {note ? <p role=\"status\" className=\"muted\">{note}</p> : null}\n </div>\n );\n}\n","// Config-driven CRM workspace with record-local operational tabs.\nimport type {\n CrmLifecycleAdapter,\n CrmWorkspaceMasterContext,\n CrmWorkspaceRecordContext,\n RecordPanelTab,\n} from \"@odla-ai/crm/ui\";\nimport type { Crm, CrmRecord } from \"@odla-ai/crm\";\nimport type { ComponentChildren } from \"preact\";\nimport type { AdminSection, AdminSectionContext } from \"./chrome.js\";\nimport { PeopleBody } from \"./admin-people-workspace.js\";\n\nexport { applicationLifecycleAdapter } from \"./admin-people-workspace.js\";\n\nconst DEFAULT_ROLES = [\"provisional\", \"member\", \"admin\"] as const;\n\n/** Configuration for the person-collection compatibility preset. */\nexport interface PeopleSectionOptions {\n crm: Crm;\n id?: string;\n label?: string;\n type?: string;\n}\n\n/** Configuration for one CRM collection and its application-specific tabs. */\nexport interface CollectionSectionOptions {\n crm: Crm;\n type: string;\n id?: string;\n label?: string;\n lifecycle?: boolean;\n roles?: readonly string[];\n networkSharing?: boolean;\n /** Stages owned by the application workflow. Defaults to Chapter's standard application statuses. */\n applicationStages?: readonly string[];\n /** Give the collection list the full workspace width until a record opens. */\n collapseClosedDetail?: boolean;\n lifecycleAdapter?: (\n | CrmLifecycleAdapter\n | ((ctx: AdminSectionContext) => CrmLifecycleAdapter)\n );\n requireLifecycleAdapter?: boolean;\n renderSummary?: (\n context: CrmWorkspaceMasterContext,\n ctx: AdminSectionContext,\n ) => ComponentChildren;\n renderMaster?: (\n context: CrmWorkspaceMasterContext,\n ctx: AdminSectionContext,\n ) => ComponentChildren;\n renderDetailHeader?: (\n context: CrmWorkspaceRecordContext,\n ctx: AdminSectionContext,\n ) => ComponentChildren;\n renderDetail?: (\n context: CrmWorkspaceRecordContext,\n defaultDetail: ComponentChildren,\n ctx: AdminSectionContext,\n ) => ComponentChildren;\n /** Detail tab selected for newly opened records. Defaults to `profile`. */\n defaultDetailTab?: string;\n renderEmptyDetail?: (\n context: CrmWorkspaceMasterContext,\n ctx: AdminSectionContext,\n ) => ComponentChildren;\n hrefForRecord?: (record: CrmRecord, ctx: AdminSectionContext) => string;\n extendRecordTabs?: (\n tabs: readonly RecordPanelTab[],\n context: CrmWorkspaceRecordContext,\n ) => readonly RecordPanelTab[];\n}\n\n/** Build one CRM collection as an admin workspace. */\nexport function collectionSection(options: CollectionSectionOptions): AdminSection {\n const { crm, type } = options;\n let fallbackLabel = type;\n try {\n fallbackLabel = crm.type(type).labelPlural ?? crm.type(type).label ?? type;\n } catch {\n // The route will surface an unknown configured type.\n }\n const {\n id = type,\n label = fallbackLabel,\n lifecycle = type === \"person\",\n roles = DEFAULT_ROLES,\n networkSharing = false,\n applicationStages,\n collapseClosedDetail = true,\n lifecycleAdapter,\n requireLifecycleAdapter,\n renderSummary,\n renderMaster,\n renderDetailHeader,\n renderDetail,\n defaultDetailTab,\n renderEmptyDetail,\n hrefForRecord,\n extendRecordTabs,\n } = options;\n return {\n id,\n label,\n render: (ctx) => (\n <PeopleBody\n crm={crm}\n client={ctx.client}\n type={type}\n ctx={ctx}\n roles={roles}\n lifecycle={lifecycle}\n networkSharing={networkSharing}\n applicationStages={applicationStages}\n collapseClosedDetail={collapseClosedDetail}\n lifecycleAdapter={lifecycleAdapter}\n requireLifecycleAdapter={requireLifecycleAdapter}\n renderSummary={renderSummary}\n renderMaster={renderMaster}\n renderDetailHeader={renderDetailHeader}\n renderDetail={renderDetail}\n defaultDetailTab={defaultDetailTab}\n renderEmptyDetail={renderEmptyDetail}\n hrefForRecord={hrefForRecord}\n extendRecordTabs={extendRecordTabs}\n />\n ),\n };\n}\n\n/** Person-collection preset. */\nexport function peopleSection(options: PeopleSectionOptions & {\n roles?: readonly string[];\n networkSharing?: boolean;\n collapseClosedDetail?: boolean;\n lifecycleAdapter?: CollectionSectionOptions[\"lifecycleAdapter\"];\n requireLifecycleAdapter?: boolean;\n renderSummary?: CollectionSectionOptions[\"renderSummary\"];\n renderMaster?: CollectionSectionOptions[\"renderMaster\"];\n renderDetailHeader?: CollectionSectionOptions[\"renderDetailHeader\"];\n renderDetail?: CollectionSectionOptions[\"renderDetail\"];\n defaultDetailTab?: string;\n renderEmptyDetail?: CollectionSectionOptions[\"renderEmptyDetail\"];\n hrefForRecord?: CollectionSectionOptions[\"hrefForRecord\"];\n extendRecordTabs?: CollectionSectionOptions[\"extendRecordTabs\"];\n}): AdminSection {\n const {\n crm,\n id = \"people\",\n label = \"People\",\n type = \"person\",\n roles,\n networkSharing,\n collapseClosedDetail,\n lifecycleAdapter,\n requireLifecycleAdapter,\n renderSummary,\n renderMaster,\n renderDetailHeader,\n renderDetail,\n defaultDetailTab,\n renderEmptyDetail,\n hrefForRecord,\n extendRecordTabs,\n } = options;\n return collectionSection({\n crm,\n type,\n id,\n label,\n ...(roles ? { roles } : {}),\n ...(networkSharing != null ? { networkSharing } : {}),\n ...(collapseClosedDetail != null ? { collapseClosedDetail } : {}),\n ...(lifecycleAdapter ? { lifecycleAdapter } : {}),\n ...(requireLifecycleAdapter != null ? { requireLifecycleAdapter } : {}),\n ...(renderSummary ? { renderSummary } : {}),\n ...(renderMaster ? { renderMaster } : {}),\n ...(renderDetailHeader ? { renderDetailHeader } : {}),\n ...(renderDetail ? { renderDetail } : {}),\n ...(defaultDetailTab ? { defaultDetailTab } : {}),\n ...(renderEmptyDetail ? { renderEmptyDetail } : {}),\n ...(hrefForRecord ? { hrefForRecord } : {}),\n ...(extendRecordTabs ? { extendRecordTabs } : {}),\n });\n}\n","// Leader record browsing and private annotation workspace.\nimport {\n DataTable,\n Field,\n MasterDetail,\n Pagination,\n Select,\n} from \"@odla-ai/ui/components\";\nimport type { DataTableColumn } from \"@odla-ai/ui/components\";\nimport { useEffect, useMemo, useState } from \"preact/hooks\";\nimport type {\n NetworkRecord,\n NetworkRecordPage,\n} from \"../network-contract.js\";\nimport type { Chapter } from \"../types.js\";\nimport { useAdminResource } from \"./admin-api.js\";\nimport { AdminNote, AdminPage, Panel } from \"./admin-layout.js\";\nimport type { AdminSectionContext, AdminWorkspace } from \"./chrome.js\";\nimport { NetworkRecordDetail } from \"./admin-network-notes.js\";\n\ninterface Target {\n id: string;\n name: string;\n url: string;\n types: string[];\n sharedNotes: string[];\n}\n\ninterface TargetResponse {\n targets: Target[];\n}\n\n\nfunction RecordsExplorer(props: {\n ctx: AdminSectionContext;\n target: Target;\n type: string;\n leaderName: string;\n}) {\n const { ctx, target, type, leaderName } = props;\n const [offset, setOffset] = useState(0);\n const [search, setSearch] = useState(\"\");\n const query = new URLSearchParams({\n targetId: target.id,\n type,\n limit: \"25\",\n offset: String(offset),\n });\n if (search.trim()) query.set(\"search\", search.trim());\n const page = useAdminResource<NetworkRecordPage>(\n ctx.getToken,\n `/api/admin/network/records?${query}`,\n );\n const selected = page.data?.records.find((record) => record.id === ctx.route.recordId);\n const columns = useMemo<readonly DataTableColumn<NetworkRecord>[]>(() => [\n {\n key: \"name\",\n header: \"Name\",\n cell: (record) => (\n <a href={ctx.href({ recordId: record.id, detailTab: null })}>{record.name}</a>\n ),\n },\n {\n key: \"stage\",\n header: \"Stage\",\n cell: (record) => record.stage\n ? <span className=\"badge\">{record.stage.replaceAll(\"_\", \" \")}</span>\n : \"—\",\n },\n {\n key: \"updatedAt\",\n header: \"Updated\",\n cell: (record) => new Date(record.updatedAt).toLocaleDateString(),\n },\n ], [ctx]);\n\n return (\n <MasterDetail\n collapseClosedDetail\n masterLabel={`${target.name} records`}\n detailLabel=\"Follower record details, private notes, and shared notes\"\n detailOpen={Boolean(selected)}\n closeHref={ctx.href({ recordId: null, detailTab: null })}\n master={(\n <div style={{ display: \"grid\", gap: 14, padding: \"var(--ui-space-4)\" }}>\n <h2 style={{ margin: 0, fontSize: 18 }}>\n {target.name} · {type.replaceAll(\"_\", \" \")}\n </h2>\n <DataTable\n manual\n filterable\n filter={search}\n filterPlaceholder=\"Search records…\"\n onFilterChange={(value) => {\n setSearch(value);\n setOffset(0);\n ctx.navigate({ recordId: null, detailTab: null });\n }}\n rows={page.data?.records ?? []}\n columns={columns}\n rowKey={(record) => record.id}\n loading={page.loading}\n emptyState={page.error ? `Could not load records: ${page.error}` : \"No records found.\"}\n ariaLabel={`${target.name} ${type} records`}\n />\n <Pagination\n offset={page.data?.offset ?? offset}\n limit={page.data?.limit ?? 25}\n total={page.data?.total}\n count={page.data?.records.length ?? 0}\n disabled={page.loading}\n onOffsetChange={(next) => {\n setOffset(next);\n ctx.navigate({ recordId: null, detailTab: null });\n }}\n />\n </div>\n )}\n detail={selected ? (\n <NetworkRecordDetail\n ctx={ctx}\n targetId={target.id}\n targetName={target.name}\n leaderName={leaderName}\n sharedEnabled={target.sharedNotes.includes(type)}\n record={selected}\n />\n ) : undefined}\n />\n );\n}\n\n/** Leader workspace for browsing follower-owned records and attaching local,\n * leader-private notes without importing or mutating the follower record. */\nexport function NetworkRecordsWorkspace(props: {\n chapter: Chapter;\n ctx: AdminSectionContext;\n}) {\n const { chapter, ctx } = props;\n const targets = useAdminResource<TargetResponse>(ctx.getToken, \"/api/admin/network/targets\");\n const [targetId, setTargetId] = useState(\"\");\n const [type, setType] = useState(\"\");\n const target = targets.data?.targets.find((candidate) => candidate.id === targetId)\n ?? targets.data?.targets[0];\n\n useEffect(() => {\n if (target && target.id !== targetId) setTargetId(target.id);\n }, [target, targetId]);\n useEffect(() => {\n const first = target?.types[0] ?? \"\";\n if (target && !target.types.includes(type)) setType(first);\n }, [target, type]);\n\n if (targets.loading) return <AdminNote>Loading follower records…</AdminNote>;\n if (targets.error || !targets.data) return <AdminNote>Could not load followers{targets.error ? `: ${targets.error}` : \"\"}.</AdminNote>;\n if (!target) return <AdminPage><Panel title=\"Follower records\"><p className=\"muted\">No followers are configured.</p></Panel></AdminPage>;\n\n return (\n <AdminPage>\n <div style={{ display: \"flex\", gap: 12, flexWrap: \"wrap\", alignItems: \"end\" }}>\n <Field label=\"Chapter\" style={{ minWidth: 240 }}>\n <Select\n value={target.id}\n options={targets.data.targets.map((item) => ({ value: item.id, label: item.name }))}\n onChange={(event) => {\n setTargetId(event.currentTarget.value);\n setType(\"\");\n ctx.navigate({ recordId: null, detailTab: null });\n }}\n />\n </Field>\n <Field label=\"Record type\" style={{ minWidth: 180 }}>\n <Select\n value={type}\n options={target.types.map((item) => ({ value: item, label: item.replaceAll(\"_\", \" \") }))}\n onChange={(event) => {\n setType(event.currentTarget.value);\n ctx.navigate({ recordId: null, detailTab: null });\n }}\n />\n </Field>\n </div>\n {type ? (\n <RecordsExplorer\n key={`${target.id}:${type}`}\n ctx={ctx}\n target={target}\n type={type}\n leaderName={chapter.name}\n />\n ) : (\n <Panel><p className=\"muted\">This follower has no browsable record types configured.</p></Panel>\n )}\n </AdminPage>\n );\n}\n\n/** Reusable default-workspace factory for a leader ChapterAdmin. */\nexport function networkRecordsWorkspace(chapter: Chapter): AdminWorkspace {\n return {\n id: \"network\",\n label: chapter.copy.admin.workspaces.network,\n defaultViewId: \"records\",\n render: (ctx) => <NetworkRecordsWorkspace chapter={chapter} ctx={ctx} />,\n };\n}\n","import { Button, Field, Textarea } from \"@odla-ai/ui/components\";\nimport { useState } from \"preact/hooks\";\nimport type {\n NetworkRecord,\n NetworkRecordNote,\n NetworkSharedNote,\n} from \"../network-contract.js\";\nimport { adminFetch, useAdminResource } from \"./admin-api.js\";\nimport type { AdminSectionContext } from \"./chrome.js\";\n\ninterface NotesResponse {\n notes: NetworkRecordNote[];\n}\n\nfunction displayValue(value: unknown): string {\n if (Array.isArray(value)) return value.join(\", \");\n if (value && typeof value === \"object\") return JSON.stringify(value);\n return value == null ? \"—\" : String(value);\n}\n\nfunction PrivateNotes(props: {\n ctx: AdminSectionContext;\n targetId: string;\n record: NetworkRecord;\n leaderName: string;\n}) {\n const { ctx, targetId, record, leaderName } = props;\n const query = new URLSearchParams({\n targetId,\n type: record.type,\n recordId: record.id,\n });\n const path = `/api/admin/network/notes?${query}`;\n const notes = useAdminResource<NotesResponse>(ctx.getToken, path);\n const [body, setBody] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const submit = async () => {\n const trimmed = body.trim();\n if (!trimmed) return;\n setBusy(true);\n setError(null);\n try {\n await adminFetch(ctx.getToken, path, {\n method: \"POST\",\n body: JSON.stringify({ body: trimmed }),\n });\n setBody(\"\");\n notes.refresh();\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : \"Could not save note.\");\n } finally {\n setBusy(false);\n }\n };\n\n return (\n <section style={{ display: \"grid\", gap: 12 }}>\n <h3 style={{ margin: \"8px 0 0\" }}>Private to {leaderName}</h3>\n <Field\n label=\"Add a note\"\n hint={`Visible only to ${leaderName} admins. Nothing is written back to the follower.`}\n error={error}\n >\n <Textarea\n rows={4}\n value={body}\n maxLength={4_000}\n onInput={(event) => setBody(event.currentTarget.value)}\n />\n </Field>\n <div>\n <Button disabled={busy || !body.trim()} onClick={() => void submit()}>\n {busy ? \"Saving…\" : \"Save note\"}\n </Button>\n </div>\n {notes.loading ? <p className=\"muted\">Loading notes…</p> : null}\n {notes.error ? <p role=\"alert\">{notes.error}</p> : null}\n {!notes.loading && !notes.error && (notes.data?.notes.length ?? 0) === 0\n ? <p className=\"muted\">No notes yet.</p>\n : null}\n {(notes.data?.notes ?? []).map((note) => (\n <article className=\"panel\" key={note.id} style={{ padding: 14 }}>\n <p style={{ margin: 0, whiteSpace: \"pre-wrap\" }}>{note.body}</p>\n <p className=\"muted\" style={{ margin: \"8px 0 0\", fontSize: 12 }}>\n {note.authorEmail ?? note.authorId} · {new Date(note.createdAt).toLocaleString()}\n </p>\n </article>\n ))}\n </section>\n );\n}\n\ninterface SharedNotesResponse {\n notes: NetworkSharedNote[];\n}\n\nfunction SharedNotes(props: {\n ctx: AdminSectionContext;\n targetId: string;\n targetName: string;\n record: NetworkRecord;\n}) {\n const { ctx, targetId, targetName, record } = props;\n const query = new URLSearchParams({\n targetId,\n type: record.type,\n recordId: record.id,\n });\n const path = `/api/admin/network/shared-notes?${query}`;\n const notes = useAdminResource<SharedNotesResponse>(ctx.getToken, path);\n const [body, setBody] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const submit = async () => {\n const trimmed = body.trim();\n if (!trimmed) return;\n setBusy(true);\n setError(null);\n try {\n await adminFetch(ctx.getToken, path, {\n method: \"POST\",\n body: JSON.stringify({ body: trimmed }),\n });\n setBody(\"\");\n notes.refresh();\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : \"Could not share note.\");\n } finally {\n setBusy(false);\n }\n };\n\n return (\n <section style={{ display: \"grid\", gap: 12 }}>\n <h3 style={{ margin: \"8px 0 0\" }}>Shared with {targetName}</h3>\n <Field\n label=\"Add a shared note\"\n hint={`This is written to the record's Notes feed for ${targetName} admins.`}\n error={error}\n >\n <Textarea\n rows={4}\n value={body}\n maxLength={4_000}\n onInput={(event) => setBody(event.currentTarget.value)}\n />\n </Field>\n <div>\n <Button disabled={busy || !body.trim()} onClick={() => void submit()}>\n {busy ? \"Sharing…\" : `Share with ${targetName}`}\n </Button>\n </div>\n {notes.loading ? <p className=\"muted\">Loading shared notes…</p> : null}\n {notes.error ? <p role=\"alert\">{notes.error}</p> : null}\n {!notes.loading && !notes.error && (notes.data?.notes.length ?? 0) === 0\n ? <p className=\"muted\">No shared notes yet.</p>\n : null}\n {(notes.data?.notes ?? []).map((note) => (\n <article className=\"panel\" key={note.id} style={{ padding: 14 }}>\n <p style={{ margin: 0, whiteSpace: \"pre-wrap\" }}>{note.body}</p>\n <p className=\"muted\" style={{ margin: \"8px 0 0\", fontSize: 12 }}>\n Shared with {targetName} · {new Date(note.createdAt).toLocaleString()}\n </p>\n </article>\n ))}\n </section>\n );\n}\n\nexport function NetworkRecordDetail(props: {\n ctx: AdminSectionContext;\n targetId: string;\n targetName: string;\n leaderName: string;\n sharedEnabled: boolean;\n record: NetworkRecord;\n}) {\n const { ctx, targetId, targetName, leaderName, sharedEnabled, record } = props;\n return (\n <div style={{ display: \"grid\", gap: 14 }}>\n <header>\n <h2 style={{ margin: 0 }}>{record.name}</h2>\n {record.stage\n ? <span className=\"badge\" style={{ marginTop: 8 }}>{record.stage.replaceAll(\"_\", \" \")}</span>\n : null}\n </header>\n <dl style={{ display: \"grid\", gridTemplateColumns: \"minmax(8rem, auto) 1fr\", gap: \"8px 16px\", margin: 0 }}>\n {Object.entries(record.fields).map(([name, value]) => (\n <div key={name} style={{ display: \"contents\" }}>\n <dt className=\"muted\">{name.replaceAll(\"_\", \" \")}</dt>\n <dd style={{ margin: 0, overflowWrap: \"anywhere\" }}>{displayValue(value)}</dd>\n </div>\n ))}\n <div style={{ display: \"contents\" }}>\n <dt className=\"muted\">Updated</dt>\n <dd style={{ margin: 0 }}>{new Date(record.updatedAt).toLocaleString()}</dd>\n </div>\n </dl>\n <div style={{ display: \"grid\", gap: 22 }}>\n <PrivateNotes\n ctx={ctx}\n targetId={targetId}\n record={record}\n leaderName={leaderName}\n />\n {sharedEnabled ? (\n <SharedNotes\n ctx={ctx}\n targetId={targetId}\n targetName={targetName}\n record={record}\n />\n ) : null}\n </div>\n </div>\n );\n}\n","import { StatBand, StepPipeline } from \"@odla-ai/ui/components\";\nimport type { PipelineStep, StatCell } from \"@odla-ai/ui/components\";\nimport type { NetworkRollup, NetworkRollupTarget } from \"../network.js\";\nimport { EDGE_UNPAIRED, type EdgeUnpaired } from \"../network-edge.js\";\nimport { AdminNote, AdminPage, Panel } from \"./admin-layout.js\";\nimport { useAdminResource } from \"./admin-api.js\";\nimport type { AdminSectionContext } from \"./chrome.js\";\nimport { useChapterCopy } from \"./copy-context.js\";\nimport { formatChapterCopy } from \"../copy.js\";\n\n/** Aggregate-only leader overview over signed follower snapshots. */\nexport function LeaderNetworkOverview({ ctx }: { ctx: AdminSectionContext }) {\n const copy = useChapterCopy().admin.network;\n const { data, loading, error } = useAdminResource<NetworkRollup>(\n ctx.getToken,\n \"/api/admin/network/rollup\",\n );\n if (loading) return <AdminNote>{copy.loadingRollup}</AdminNote>;\n if (error || !data) return <AdminNote>{copy.loadRollupFailed}{error ? `: ${error}` : \"\"}.</AdminNote>;\n return <LeaderNetworkOverviewView data={data} />;\n}\n\n/** The unpaired state of one target, or null when its edge holds a secret.\n * Reads the structured `edge_unpaired` code the rollup route returns, never\n * the prose beside it. */\nexport function unpairedEdge(target: NetworkRollupTarget): EdgeUnpaired | null {\n const error = target.transport.error;\n return error && error.code === EDGE_UNPAIRED ? error : null;\n}\n\n/** Render one loaded rollup. Pure, so the network state a leader admin sees\n * can be pinned without the fetch that produces it. */\nexport function LeaderNetworkOverviewView({ data }: { data: NetworkRollup }) {\n const copy = useChapterCopy().admin.network;\n if (data.configured === 0) return <AdminPage><Panel title={copy.overview}><p className=\"muted\">{copy.noFollowers}</p></Panel></AdminPage>;\n\n const stats: StatCell[] = [\n { value: data.configured.toLocaleString(), label: copy.configuredFollowers },\n { value: data.available.toLocaleString(), label: copy.reachableFollowers },\n { value: data.totalRecords.toLocaleString(), label: copy.recordsAcrossFollowers },\n ];\n const steps: PipelineStep[] = data.types.map((type) => ({\n icon: <span style={{ fontSize: 22, fontWeight: 700 }}>{type.total}</span>,\n title: type.type.replaceAll(\"_\", \" \"),\n description: Object.entries(type.stages)\n .filter(([, count]) => count > 0)\n .map(([stage, count]) => `${stage.replaceAll(\"_\", \" \")} ${count}`)\n .join(\" · \") || copy.noRecordTotals,\n }));\n\n return (\n <AdminPage>\n <StatBand stats={stats} />\n <Panel title={copy.followers}>\n <ul style={{ listStyle: \"none\", margin: 0, padding: 0, display: \"grid\", gap: 10 }}>\n {data.targets.map((target) => <FollowerRow key={target.id} target={target} />)}\n </ul>\n </Panel>\n <Panel title={copy.recordTotals}>\n {steps.length ? <StepPipeline ariaLabel={copy.recordTotals} steps={steps} /> : <p className=\"muted\">{copy.noRecordTotals}</p>}\n </Panel>\n </AdminPage>\n );\n}\n\nfunction FollowerRow({ target }: { target: NetworkRollupTarget }) {\n const copy = useChapterCopy().admin.network;\n const unpaired = unpairedEdge(target);\n return (\n <li data-network-target={target.id} data-edge-state={unpaired ? \"unpaired\" : \"paired\"}\n style={{ display: \"flex\", gap: 12, alignItems: \"baseline\", flexWrap: \"wrap\" }}>\n <strong style={{ minWidth: 180 }}>{target.name}</strong>\n <span className=\"badge\">{unpaired\n ? copy.edgeUnpaired\n : target.transport.reachable === null\n ? copy.transportNotChecked\n : target.transport.reachable\n ? copy.transportReachable\n : copy.transportUnavailable}</span>\n <span className=\"muted\">{target.transport.kind === \"binding\"\n ? formatChapterCopy(copy.bindingTransport, { binding: target.transport.binding ?? \"\" })\n : copy.urlTransport}</span>\n <span className=\"muted\">{target.configuration.activeRevision === null\n ? copy.noActiveConfiguration\n : formatChapterCopy(copy.activeConfiguration, { revision: target.configuration.activeRevision })}</span>\n <span className=\"muted\">{target.publicSite.available === null\n ? copy.publicSiteNotChecked\n : target.publicSite.available\n ? copy.publicSiteAvailable\n : copy.publicSiteUnavailable}</span>\n {unpaired\n ? <span className=\"muted\" style={{ flexBasis: \"100%\" }}>{copy.edgeUnpairedHint} <code>{unpaired.hint}</code></span>\n : target.error ? <span className=\"muted\">{target.error}</span> : null}\n <a href={target.url} target=\"_blank\" rel=\"noreferrer\" style={{ marginLeft: \"auto\" }}>{target.url}</a>\n </li>\n );\n}\n","// The one structured \"this edge is not paired\" state, shared by every\n// leader-side surface that reads a follower's vaulted share secret. Before\n// this module each route composed its own prose (\"edge secret is missing\",\n// \"vault secret … is missing\"), so the admin UI and the CLI had to match\n// English to know that a follower was unreachable for a reason no retry can\n// fix. A code names the state; the hint names the command that ends it.\nimport type { ResolvedNetworkTarget } from \"./types-network\";\n\n/** Health code carried by every unpaired-edge response. */\nexport const EDGE_UNPAIRED = \"edge_unpaired\" as const;\n\n/** A declared federation edge whose secret slot is empty on this side. */\nexport interface EdgeUnpaired {\n code: typeof EDGE_UNPAIRED;\n /** The follower app id the edge points at. */\n target: string;\n /** The leader-vault slot that should hold the shared value. */\n secretName: string;\n /** Human sentence; the code is the contract, this is not. */\n message: string;\n /** The exact CLI invocation that pairs both vaults from an enrolled machine. */\n hint: string;\n}\n\n/**\n * The `odla-ai chapter edge pair` invocation for one leader → follower edge.\n *\n * Rendered by the leader admin UI next to the unpaired state and echoed in\n * route errors, so an operator never has to reconstruct the command from the\n * runbook. `env` is the wire value (`dev` or `prod`); omitted when the Worker\n * does not know which database it serves.\n */\nexport function pairingCommand(leaderId: string, targetId: string, env?: string): string {\n const scope = env ? ` --env ${env}` : \"\";\n return `odla-ai chapter edge pair --leader ${leaderId} --follower ${targetId}${scope}`;\n}\n\n/** Build the structured unpaired state for one configured target. */\nexport function edgeUnpaired(\n leaderId: string,\n target: Pick<ResolvedNetworkTarget, \"id\" | \"secretName\">,\n env?: string,\n): EdgeUnpaired {\n return {\n code: EDGE_UNPAIRED,\n target: target.id,\n secretName: target.secretName,\n message: `edge to \"${target.id}\" is unpaired: leader vault slot \"${target.secretName}\" is empty`,\n hint: pairingCommand(leaderId, target.id, env),\n };\n}\n\n/** The 502 a leader-side write route returns when its edge is unpaired: the\n * same structured body every other unpaired surface carries, so the admin UI\n * needs one branch, not one per route. */\nexport function unpairedResponse(unpaired: EdgeUnpaired): Response {\n return new Response(JSON.stringify({ error: unpaired.message, ...unpaired }), {\n status: 502,\n headers: { \"content-type\": \"application/json\" },\n });\n}\n","import { useEffect, useId, useRef, useState } from \"preact/hooks\";\nimport type { JSX } from \"preact\";\nimport { Field, Input, Select } from \"@odla-ai/ui/components\";\nimport { adminFetch, useAdminResource } from \"./admin-api.js\";\nimport { AdminPage, Panel } from \"./admin-layout.js\";\nimport type { AdminWorkspace } from \"./chrome.js\";\nimport { useChapterCopy } from \"./copy-context.js\";\n\ninterface Grant {\n id: string;\n sourceScope: \"local\" | \"parent\";\n email: string;\n decision: \"waive_interview\" | \"require_interview\";\n note?: string;\n active: boolean;\n expiresAt?: number;\n revokedAt?: number;\n consumedAt?: number;\n}\n\n/** Audited Chapter-admin surface for local decisions and effective Parent rows. */\nexport function AdmissionGrantsWorkspace(props: { getToken: () => Promise<string | null> }) {\n const copy = useChapterCopy().admin.admission;\n const uid = useId();\n const resource = useAdminResource<{ grants: Grant[] }>(props.getToken, \"/api/admin/admission-grants\");\n const [email, setEmail] = useState(\"\");\n const [decision, setDecision] = useState<Grant[\"decision\"]>(\"waive_interview\");\n const [note, setNote] = useState(\"\");\n const [expires, setExpires] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const submit = async (event: JSX.TargetedSubmitEvent<HTMLFormElement>) => {\n event.preventDefault();\n setBusy(true);\n setError(null);\n try {\n await adminFetch(props.getToken, \"/api/admin/admission-grants\", {\n method: \"POST\",\n body: JSON.stringify({\n email,\n decision,\n ...(note.trim() ? { note } : {}),\n ...(expires ? { expiresAt: new Date(`${expires}T23:59:59Z`).getTime() } : {}),\n }),\n });\n setEmail(\"\");\n setNote(\"\");\n setExpires(\"\");\n resource.refresh();\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : String(cause));\n } finally {\n setBusy(false);\n }\n };\n\n const revoke = async (grant: Grant) => {\n setBusy(true);\n setError(null);\n try {\n await adminFetch(props.getToken, `/api/admin/admission-grants/${encodeURIComponent(grant.id)}`, { method: \"DELETE\" });\n resource.refresh();\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : String(cause));\n } finally {\n setBusy(false);\n }\n };\n\n return (\n <AdminPage>\n <Panel title={copy.title}>\n <p className=\"muted\" style={{ margin: 0 }}>\n {copy.description}\n </p>\n <form onSubmit={(event) => void submit(event)} style={{ display: \"grid\", gap: 12, gridTemplateColumns: \"minmax(220px,2fr) minmax(180px,1fr) minmax(160px,1fr)\" }}>\n <Field label={copy.email} htmlFor={`${uid}-email`}><Input id={`${uid}-email`} required type=\"email\" value={email} onInput={(event) => setEmail(event.currentTarget.value)} /></Field>\n <Field label={copy.decision} htmlFor={`${uid}-decision`}>\n <Select id={`${uid}-decision`} value={decision} onChange={(event) => setDecision(event.currentTarget.value as Grant[\"decision\"])}>\n <option value=\"waive_interview\">{copy.waive}</option>\n <option value=\"require_interview\">{copy.require}</option>\n </Select>\n </Field>\n <Field label={copy.expires} htmlFor={`${uid}-expires`}><Input id={`${uid}-expires`} type=\"date\" value={expires} onInput={(event) => setExpires(event.currentTarget.value)} /></Field>\n <Field label={copy.note} htmlFor={`${uid}-note`} style={{ gridColumn: \"1 / -1\" }}><Input id={`${uid}-note`} value={note} maxLength={2000} onInput={(event) => setNote(event.currentTarget.value)} /></Field>\n <button className=\"btn secondary\" type=\"submit\" disabled={busy}>{copy.add}</button>\n </form>\n {error ? <p role=\"alert\">{error}</p> : null}\n </Panel>\n <Panel title={copy.ledger}>\n {resource.loading ? <p className=\"muted\">{copy.loading}</p> : resource.error ? <p role=\"alert\">{resource.error}</p> : null}\n <div style={{ display: \"grid\", gap: 10 }}>\n {(resource.data?.grants ?? []).map((grant) => {\n const state = grant.consumedAt ? copy.consumed : grant.revokedAt || !grant.active ? copy.revoked : grant.expiresAt && grant.expiresAt <= Date.now() ? copy.expired : copy.active;\n return (\n <article className=\"card\" key={grant.id} style={{ padding: 14 }}>\n <strong>{grant.email}</strong> · {grant.decision === \"waive_interview\" ? copy.waive : copy.require}\n <p className=\"muted\" style={{ margin: \"6px 0\" }}>{grant.sourceScope === \"local\" ? copy.local : copy.parent} · {state}{grant.note ? ` · ${grant.note}` : \"\"}</p>\n {grant.sourceScope === \"local\" && state === copy.active ? <button className=\"btn secondary mini\" disabled={busy} onClick={() => void revoke(grant)}>{copy.revoke}</button> : null}\n </article>\n );\n })}\n </div>\n </Panel>\n </AdminPage>\n );\n}\n\n/** Create the standard Chapter admission workspace definition. */\nexport function admissionGrantsWorkspace(label = \"Admission\"): AdminWorkspace {\n return {\n id: \"admission\",\n label,\n defaultViewId: \"grants\",\n render: (ctx) => <AdmissionGrantsWorkspace getToken={ctx.getToken} />,\n };\n}\n\n/** Inputs for the bounded leader admission decision and delivery control. */\nexport interface LeaderAdmissionActionProps {\n getToken: () => Promise<string | null>;\n targetId: string;\n personId?: string;\n /** Exact follower-owned record, without importing it into the leader CRM. */\n sourceRecordId?: string;\n onSaved?: (result: unknown) => void;\n}\n\n/** Bounded leader-side composition seam for assigning an existing CRM person\n * to one configured Chapter target. The browser supplies only record identity\n * and operator intent; the Worker resolves the authoritative email. */\nexport function LeaderAdmissionAction(props: LeaderAdmissionActionProps) {\n return <LeaderAdmissionForm key={JSON.stringify([props.targetId, props.personId, props.sourceRecordId])} {...props} />;\n}\n\nfunction LeaderAdmissionForm(props: LeaderAdmissionActionProps) {\n const uid = useId();\n const [decision, setDecision] = useState<Grant[\"decision\"] | \"\">(\"\");\n const [note, setNote] = useState(\"\");\n const [loaded, setLoaded] = useState(false);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [status, setStatus] = useState<string | null>(null);\n const attempt = useRef<{ fingerprint: string; id: string } | null>(null);\n useEffect(() => {\n let live = true;\n const personId = props.sourceRecordId ? `chapter-person:${props.targetId}:${props.sourceRecordId}` : props.personId;\n void adminFetch<{ assignments: Array<{ personId: string; active: boolean; decision: Grant[\"decision\"]; note?: string; expiresAt?: number }>;\n delivery: { status: string } | null }>(props.getToken, `/api/admin/network/admissions?targetId=${encodeURIComponent(props.targetId)}`)\n .then(result => {\n if (!live) return;\n const saved = result.assignments.find(row => row.personId === personId && row.active && (!row.expiresAt || row.expiresAt > Date.now()));\n setDecision(saved?.decision ?? \"\"); setNote(saved?.note ?? \"\"); setLoaded(true);\n if (saved && result.delivery?.status !== \"acknowledged\") setStatus(\"Saved; delivery is pending. Retry to reconcile the same setting.\");\n })\n .catch(cause => { if (live) setError(cause instanceof Error ? cause.message : \"Invitation setting could not be loaded.\"); });\n return () => { live = false; };\n }, [props.getToken, props.targetId, props.personId, props.sourceRecordId]);\n const submit = async () => {\n if (!loaded || !decision || busy) return;\n setBusy(true);\n setError(null);\n try {\n const fingerprint = JSON.stringify([props.targetId, props.personId, props.sourceRecordId, decision, note.trim()]);\n if (attempt.current?.fingerprint !== fingerprint) attempt.current = { fingerprint, id: crypto.randomUUID() };\n const result = await adminFetch<{ delivery: { status: string } }>(props.getToken, \"/api/admin/network/admissions\", {\n method: \"POST\",\n body: JSON.stringify({\n targetId: props.targetId,\n ...(props.sourceRecordId ? { sourceRecordId: props.sourceRecordId } : { personId: props.personId }),\n decision,\n ...(note.trim() ? { note: note.trim() } : {}),\n mutationId: attempt.current.id,\n }),\n });\n setStatus(result.delivery.status === \"acknowledged\" ? \"Invitation setting saved at the chapter.\" : \"Saved; delivery is pending. Retry to reconcile the same setting.\");\n if (result.delivery.status === \"acknowledged\") attempt.current = null;\n props.onSaved?.(result);\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : String(cause));\n } finally {\n setBusy(false);\n }\n };\n return (\n <div style={{ display: \"grid\", gap: 8 }}>\n <Field label=\"Interview\" htmlFor={`${uid}-decision`}>\n <Select id={`${uid}-decision`} disabled={!loaded || busy} value={decision} onChange={(event) => setDecision(event.currentTarget.value as Grant[\"decision\"])}>\n <option value=\"\">{loaded ? \"Choose an invitation setting\" : \"Loading saved setting…\"}</option>\n <option value=\"waive_interview\">Already completed</option>\n <option value=\"require_interview\">Required</option>\n </Select>\n </Field>\n <Field label=\"Internal note\" htmlFor={`${uid}-note`}><Input id={`${uid}-note`} disabled={!loaded || busy} maxLength={2000} value={note} onInput={(event) => setNote(event.currentTarget.value)} /></Field>\n <button className=\"btn secondary\" type=\"button\" disabled={busy || !loaded || !decision} onClick={() => void submit()}>\n {busy ? \"Saving…\" : \"Save invitation setting\"}\n </button>\n {error ? <p role=\"alert\">{error}</p> : null}\n {status ? <p role=\"status\">{status}</p> : null}\n </div>\n );\n}\n","import { Tabs } from \"@odla-ai/ui/components\";\nimport type { Chapter } from \"../types.js\";\nimport { availabilitySection } from \"./admin-availability.js\";\nimport { builderLibrarySection } from \"./admin-builder-library.js\";\nimport { emailSection } from \"./admin-email.js\";\nimport { memberContentSection } from \"./admin-member-content.js\";\nimport type { AdminSectionContext } from \"./chrome.js\";\n\nconst viewContext = (ctx: AdminSectionContext, viewId: string, active: boolean): AdminSectionContext => {\n const route = { workspaceId: ctx.route.workspaceId, viewId, ...(active && ctx.route.recordId ? { recordId: ctx.route.recordId } : {}), ...(active && ctx.route.detailTab ? { detailTab: ctx.route.detailTab } : {}) };\n const targetFromView = (target: Parameters<AdminSectionContext[\"navigate\"]>[0]) => {\n if (typeof target === \"string\") return target;\n if (target.workspaceId && target.workspaceId !== route.workspaceId) return target;\n if (target.viewId && target.viewId !== route.viewId) return target;\n return { ...route, ...target };\n };\n return { ...ctx, route, navigate: (target) => ctx.navigate(targetFromView(target)), href: (target) => ctx.href(targetFromView(target)) };\n};\n\nexport function SettingsWorkspace({ chapter, ctx }: { chapter: Chapter; ctx: AdminSectionContext }) {\n const copy = chapter.copy.admin;\n const active = ctx.route.viewId === \"email\" ? \"email\"\n : ctx.route.viewId === \"builder-library\" && chapter.builderLibrary ? \"builder-library\"\n : ctx.route.viewId === \"member-content\" && chapter.memberContent ? \"member-content\" : \"calendar\";\n const calendar = availabilitySection({ id: \"calendar\", label: copy.workspaces.calendar });\n const email = emailSection({ label: copy.workspaces.email });\n const content = memberContentSection();\n const library = builderLibrarySection();\n return <Tabs ariaLabel={copy.workspaces.settingsViewsLabel} value={active} mount=\"active\" items={[\n { value: \"calendar\", label: copy.workspaces.calendar, href: ctx.href({ viewId: \"calendar\", recordId: null, detailTab: null }), panel: calendar.render(viewContext(ctx, \"calendar\", active === \"calendar\")) },\n { value: \"email\", label: copy.workspaces.email, href: ctx.href({ viewId: \"email\", recordId: null, detailTab: null }), panel: email.render(viewContext(ctx, \"email\", active === \"email\")) },\n ...(chapter.memberContent ? [{ value: \"member-content\", label: \"Member content\", href: ctx.href({ viewId: \"member-content\", recordId: null, detailTab: null }), panel: content.render(viewContext(ctx, \"member-content\", active === \"member-content\")) }] : []),\n ...(chapter.builderLibrary ? [{ value: \"builder-library\", label: \"Builder Library\", href: ctx.href({ viewId: \"builder-library\", recordId: null, detailTab: null }), panel: library.render(viewContext(ctx, \"builder-library\", active === \"builder-library\")) }] : []),\n ]} />;\n}\n\nexport function LeaderSettingsWorkspace({ chapter, ctx }: { chapter: Chapter; ctx: AdminSectionContext }) {\n const email = emailSection({ label: chapter.copy.admin.workspaces.email });\n const library = builderLibrarySection();\n const active = ctx.route.viewId === \"builder-library\" && chapter.builderLibrary ? \"builder-library\" : \"email\";\n return <Tabs ariaLabel={chapter.copy.admin.workspaces.settingsViewsLabel} value={active} mount=\"active\" items={[\n { value: \"email\", label: chapter.copy.admin.workspaces.email, href: ctx.href({ viewId: \"email\", recordId: null, detailTab: null }), panel: email.render(viewContext(ctx, \"email\", active === \"email\")) },\n ...(chapter.builderLibrary ? [{ value: \"builder-library\", label: \"Builder Library\", href: ctx.href({ viewId: \"builder-library\", recordId: null, detailTab: null }), panel: library.render(viewContext(ctx, \"builder-library\", active === \"builder-library\")) }] : []),\n ]} />;\n}\n","// Availability section: the owner-editable booking rules from GET/PUT\n// /api/admin/scheduling, as an odla-ui form. The PUT returns field-keyed\n// validation messages, surfaced inline on each Field.\nimport { useState } from \"preact/hooks\";\nimport { Button, Checkbox, Field, Input } from \"@odla-ai/ui/components\";\nimport { useAdminResource } from \"./admin-api.js\";\nimport { AdminPage, AdminNote, Panel } from \"./admin-layout.js\";\nimport type { AdminSection, AdminSectionContext } from \"./chrome.js\";\nimport { useChapterCopy } from \"./copy-context.js\";\n\ninterface Scheduling {\n slotMinutes: number;\n days: number[];\n startHour: number;\n endHour: number;\n timezone: string;\n minNoticeHours: number;\n windowDays: number;\n summaryTemplate: string;\n}\nfunction AvailabilityBody({ ctx }: { ctx: AdminSectionContext }) {\n const copy = useChapterCopy().admin.availability;\n const { data, loading, error, refresh } = useAdminResource<{ scheduling: Scheduling }>(ctx.getToken, \"/api/admin/scheduling\");\n const [draft, setDraft] = useState<Scheduling | null>(null);\n const [busy, setBusy] = useState(false);\n const [note, setNote] = useState<string | null>(null);\n const [errors, setErrors] = useState<Record<string, string>>({});\n\n const cfg = draft ?? data?.scheduling ?? null;\n if (loading) return <AdminNote>{copy.loading}</AdminNote>;\n if (error || !cfg) return <AdminNote>{copy.loadFailed}{error ? `: ${error}` : \"\"}.</AdminNote>;\n\n const edit = (patch: Partial<Scheduling>) => setDraft({ ...cfg, ...patch });\n const toggleDay = (d: number) => edit({ days: cfg.days.includes(d) ? cfg.days.filter((x) => x !== d) : [...cfg.days, d].sort() });\n const num = (v: string, fallback: number) => (Number.isFinite(Number(v)) ? Number(v) : fallback);\n\n const save = async () => {\n setBusy(true);\n setNote(null);\n setErrors({});\n const token = await ctx.getToken();\n try {\n const r = await fetch(\"/api/admin/scheduling\", { method: \"PUT\", headers: { authorization: `Bearer ${token ?? \"\"}`, \"content-type\": \"application/json\" }, body: JSON.stringify(cfg) });\n const body = (await r.json().catch(() => ({}))) as { error?: string; errors?: Record<string, string> };\n if (!r.ok) {\n setErrors(body.errors ?? {});\n setNote(body.error ?? `save failed (${r.status})`);\n return;\n }\n setDraft(null);\n refresh();\n setNote(copy.saved);\n } catch (e) {\n setNote(e instanceof Error ? e.message : String(e));\n } finally {\n setBusy(false);\n }\n };\n\n const numField = (key: keyof Scheduling, label: string) => (\n <Field label={label} error={errors[key]}>\n <Input type=\"number\" value={cfg[key] as number} onInput={(e) => edit({ [key]: num((e.target as HTMLInputElement).value, cfg[key] as number) } as Partial<Scheduling>)} />\n </Field>\n );\n\n return (\n <AdminPage>\n <Panel title={copy.title} actions={note ? <span className=\"muted\">{note}</span> : undefined}>\n <Field label={copy.days} error={errors.days}>\n <div style={{ display: \"flex\", gap: 14, flexWrap: \"wrap\" }}>\n {copy.dayLabels.map((d, i) => (\n <Checkbox key={d} label={d} checked={cfg.days.includes(i)} onChange={() => toggleDay(i)} />\n ))}\n </div>\n </Field>\n <div style={{ display: \"grid\", gridTemplateColumns: \"repeat(auto-fit, minmax(180px, 1fr))\", gap: 14 }}>\n {numField(\"startHour\", copy.startHour)}\n {numField(\"endHour\", copy.endHour)}\n {numField(\"slotMinutes\", copy.slotMinutes)}\n {numField(\"minNoticeHours\", copy.minNoticeHours)}\n {numField(\"windowDays\", copy.windowDays)}\n <Field label={copy.timezone} error={errors.timezone}>\n <Input value={cfg.timezone} onInput={(e) => edit({ timezone: (e.target as HTMLInputElement).value })} />\n </Field>\n </div>\n <Field label={copy.summaryTemplate} error={errors.summaryTemplate}>\n <Input value={cfg.summaryTemplate} onInput={(e) => edit({ summaryTemplate: (e.target as HTMLInputElement).value })} />\n </Field>\n <div><Button disabled={!draft || busy} onClick={() => void save()}>{copy.save}</Button></div>\n </Panel>\n </AdminPage>\n );\n}\n\n/** Options for {@link availabilitySection}. */\nexport interface AvailabilitySectionOptions {\n id?: string;\n label?: string;\n}\n\n/** Build the Availability admin section: the booking-rules editor over\n * `GET/PUT /api/admin/scheduling`, with field-keyed validation surfaced inline. */\nexport function availabilitySection(options: AvailabilitySectionOptions = {}): AdminSection {\n const { id = \"availability\", label = \"Availability\" } = options;\n return { id, label, render: (ctx) => <AvailabilityBody ctx={ctx} /> };\n}\n","import type { JSX } from \"preact\";\nimport { useEffect, useId, useMemo, useState } from \"preact/hooks\";\nimport { Field, Input, Select, Textarea } from \"@odla-ai/ui/components\";\nimport type { BuilderLibraryDocument, BuilderLibraryResource, BuilderLibraryResourceKind, BuilderLibraryResourceStatus, BuilderLibraryScope } from \"../builder-library.js\";\nimport type { AdminSection, AdminSectionContext } from \"./chrome.js\";\nimport { adminFetch, useAdminResource } from \"./admin-api.js\";\nimport { AdminNote, AdminPage, Panel } from \"./admin-layout.js\";\n\n/** Admin-safe inventory of local and signed source layers. */\nexport interface AdminBuilderLibraryData {\n mode: \"chapter\" | \"hub\";\n local: { revision: number; document: BuilderLibraryDocument } | null;\n sources: { sourceId: string; revision: number; digest: string; document: BuilderLibraryDocument; receivedAt: number }[];\n localAuthoring: boolean;\n /** Closed set of Chapter destinations the server will accept. */\n chapterTargets: { chapterId: string }[];\n visibility: { builtNotFoundSeesChapterSources: boolean; chaptersSeeSiblingSources: false };\n}\n\ntype LibraryEntry = { key: string; resource: BuilderLibraryResource; local: boolean; sourceId: string; sourceRevision: number };\nconst KINDS: readonly BuilderLibraryResourceKind[] = [\"document\", \"note\", \"link\", \"inspiration\", \"image\", \"file\"];\nconst KIND_LABEL: Record<BuilderLibraryResourceKind, string> = { document: \"Document\", note: \"Note\", link: \"Link\", inspiration: \"Inspiration\", image: \"Image\", file: \"File\" };\nconst STATUS_LABEL: Record<BuilderLibraryResourceStatus, string> = { draft: \"Draft\", published: \"Published\", archived: \"Archived\" };\nconst GRID: JSX.CSSProperties = { display: \"grid\", gridTemplateColumns: \"repeat(auto-fit, minmax(min(100%, 360px), 1fr))\", gap: 16, alignItems: \"start\" };\nconst STACK: JSX.CSSProperties = { display: \"flex\", flexDirection: \"column\", gap: 10 };\nconst ROW: JSX.CSSProperties = { display: \"flex\", gap: 8, alignItems: \"center\", flexWrap: \"wrap\" };\nconst META: JSX.CSSProperties = { display: \"flex\", gap: 6, alignItems: \"center\", flexWrap: \"wrap\", color: \"var(--ui-text-faint)\", fontSize: 13 };\nconst ITEM: JSX.CSSProperties = { width: \"100%\", textAlign: \"left\", padding: 12, borderRadius: 10, border: \"1px solid var(--ui-border)\", background: \"var(--ui-surface)\", color: \"inherit\", cursor: \"pointer\" };\nconst emptyDocument = () => ({ resources: [] });\nconst localKey = (id: string) => `local:${id}`;\nconst sourceKey = (sourceId: string, id: string) => `source:${sourceId}:${id}`;\nconst cleanId = (value: string) => value.toLowerCase().trim().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\").slice(0, 80);\nconst scopeLabel = (scope: BuilderLibraryScope) => scope.kind === \"chapter\" ? `Only ${scope.chapterId}` : scope.kind === \"built_not_found\" ? \"Built Not Found only\" : \"All chapters\";\nconst contentSummary = (item: BuilderLibraryResource) => item.summary || item.bodyMarkdown?.replace(/[#*_>`-]/g, \"\").trim().slice(0, 140) || item.url || item.brandAsset?.filename || item.brandAsset?.assetId || \"No description yet\";\n\nfunction localResource(kind: BuilderLibraryResourceKind, chapterId: string, mode: AdminBuilderLibraryData[\"mode\"]): BuilderLibraryResource {\n const suffix = Date.now().toString(36);\n return {\n id: `untitled-${kind}-${suffix}`, kind, title: `Untitled ${KIND_LABEL[kind].toLowerCase()}`, tags: [],\n scope: mode === \"hub\" ? { kind: \"built_not_found\" } : { kind: \"chapter\", chapterId }, status: \"draft\", revision: 1,\n ...(kind === \"document\" || kind === \"note\" ? { bodyMarkdown: \"Start writing…\" } : {}),\n ...(kind === \"link\" || kind === \"inspiration\" ? { url: \"https://example.com\" } : {}),\n ...(kind === \"image\" || kind === \"file\" ? { brandAsset: { bookId: \"brand-book\", assetId: `replace-${suffix}` } } : {}),\n provenance: { createdBy: \"server\", createdAt: 0, updatedBy: \"server\", updatedAt: 0 },\n };\n}\n\nfunction ResourcePreview({ item }: { item: BuilderLibraryResource }) {\n return <div className=\"card\" style={{ padding: 14 }}><div className=\"card-label\">Preview</div>\n <h3 style={{ margin: \"6px 0\" }}>{item.title || \"Untitled\"}</h3>\n {item.summary ? <p style={{ margin: \"0 0 10px\" }}>{item.summary}</p> : null}\n {item.bodyMarkdown ? <pre style={{ margin: 0, whiteSpace: \"pre-wrap\", font: \"inherit\", lineHeight: 1.55 }}>{item.bodyMarkdown}</pre> : null}\n {item.url ? <a href={item.url} target=\"_blank\" rel=\"noreferrer\">{item.url}</a> : null}\n {item.brandAsset ? <div style={META}>Brand asset · {item.brandAsset.bookId} / {item.brandAsset.assetId}{item.brandAsset.filename ? ` · ${item.brandAsset.filename}` : \"\"}</div> : null}\n </div>;\n}\n\n/** CMS-style private source-material list and editor. */\nexport function BuilderLibraryAdmin({ ctx, initialData }: { ctx: AdminSectionContext; initialData?: AdminBuilderLibraryData }) {\n const remote = useAdminResource<AdminBuilderLibraryData>(ctx.getToken, \"/api/admin/builder-library\");\n const seed = initialData ?? remote.data;\n const [resources, setResources] = useState<BuilderLibraryResource[]>(() => [...(seed?.local?.document.resources ?? [])]);\n const [selectedKey, setSelectedKey] = useState<string | null>(() => seed?.local?.document.resources[0]?.id ? localKey(seed.local.document.resources[0].id) : null);\n const [query, setQuery] = useState(\"\");\n const [kindFilter, setKindFilter] = useState<\"all\" | BuilderLibraryResourceKind>(\"all\");\n const [statusFilter, setStatusFilter] = useState<\"all\" | BuilderLibraryResourceStatus>(\"all\");\n const [newKind, setNewKind] = useState<BuilderLibraryResourceKind>(\"document\");\n const [saveError, setSaveError] = useState<string[] | null>(null);\n const [saving, setSaving] = useState(false);\n useEffect(() => {\n if (!remote.data) return;\n const next = [...(remote.data.local?.document.resources ?? [])];\n setResources(next);\n setSelectedKey((current) => current && next.some((item) => localKey(item.id) === current) ? current : (next[0] ? localKey(next[0].id) : null));\n }, [remote.data]);\n const data = initialData ?? remote.data;\n const entries = useMemo<LibraryEntry[]>(() => data ? [\n ...resources.map((item) => ({ key: localKey(item.id), resource: item, local: true, sourceId: data.mode === \"hub\" ? \"Built Not Found\" : \"This chapter\", sourceRevision: data.local?.revision ?? 0 })),\n ...data.sources.flatMap((source) => source.document.resources.map((item) => ({ key: sourceKey(source.sourceId, item.id), resource: item, local: false, sourceId: source.sourceId, sourceRevision: source.revision }))),\n ] : [], [data, resources]);\n const visible = entries.filter(({ resource, sourceId }) => {\n const haystack = `${resource.title} ${resource.summary ?? \"\"} ${resource.tags.join(\" \")} ${sourceId}`.toLowerCase();\n return (!query.trim() || haystack.includes(query.toLowerCase().trim())) && (kindFilter === \"all\" || resource.kind === kindFilter) && (statusFilter === \"all\" || resource.status === statusFilter);\n });\n const selected = entries.find((entry) => entry.key === selectedKey) ?? visible[0] ?? null;\n if (!data && remote.loading) return <AdminPage><AdminNote>Loading Builder Library…</AdminNote></AdminPage>;\n if (remote.error || !data) return <AdminPage><AdminNote>Builder Library could not be loaded: {remote.error ?? \"unknown error\"}</AdminNote></AdminPage>;\n\n const update = (change: Partial<BuilderLibraryResource>) => {\n if (!selected?.local) return;\n setResources((items) => items.map((item) => item.id === selected.resource.id ? { ...item, ...change } : item));\n };\n const add = () => {\n const item = localResource(newKind, data.chapterTargets[0]?.chapterId ?? \"chapter\", data.mode);\n setResources((items) => [...items, item]); setSelectedKey(localKey(item.id));\n };\n const save = async () => {\n setSaveError(null); setSaving(true);\n try {\n await adminFetch(ctx.getToken, \"/api/admin/builder-library\", { method: \"PUT\", body: JSON.stringify({ expectedRevision: data.local?.revision ?? 0, document: { ...(data.local?.document ?? emptyDocument()), resources } }) });\n remote.refresh();\n } catch (error) {\n const structured = error as Error & { errors?: string[] };\n setSaveError(structured.errors ?? [error instanceof Error ? error.message : String(error)]);\n } finally { setSaving(false); }\n };\n const promote = async (entry: LibraryEntry) => {\n setSaveError(null);\n try {\n await adminFetch(ctx.getToken, \"/api/admin/builder-library/promote\", { method: \"POST\", body: JSON.stringify({ chapterId: entry.sourceId, resourceId: entry.resource.id, expectedRevision: data.local?.revision ?? 0 }) });\n remote.refresh();\n } catch (error) { setSaveError([error instanceof Error ? error.message : String(error)]); }\n };\n const scopeValue = selected?.resource.scope.kind === \"chapter\" ? `chapter:${selected.resource.scope.chapterId}` : selected?.resource.scope.kind ?? \"built_not_found\";\n\n return <AdminPage>\n <Panel title={<span>Builder Library <span className=\"muted\">· private</span></span>} actions={<div style={ROW}>\n <Select aria-label=\"New resource type\" value={newKind} onChange={(event) => setNewKind(event.currentTarget.value as BuilderLibraryResourceKind)}>{KINDS.map((kind) => <option value={kind} key={kind}>{KIND_LABEL[kind]}</option>)}</Select>\n <button className=\"btn primary\" type=\"button\" disabled={!data.localAuthoring} onClick={add}>Add resource</button>\n </div>}>\n <p className=\"muted\" style={{ margin: 0 }}>Documents, links, and Brand assets used by site-building agents. Nothing here appears on a member page.</p>\n <div style={ROW}>\n <Input aria-label=\"Search resources\" placeholder=\"Search resources\" value={query} onInput={(event) => setQuery(event.currentTarget.value)} style={{ flex: \"1 1 220px\" }} />\n <Select aria-label=\"Filter by type\" value={kindFilter} onChange={(event) => setKindFilter(event.currentTarget.value as typeof kindFilter)}><option value=\"all\">All types</option>{KINDS.map((kind) => <option value={kind} key={kind}>{KIND_LABEL[kind]}</option>)}</Select>\n <Select aria-label=\"Filter by status\" value={statusFilter} onChange={(event) => setStatusFilter(event.currentTarget.value as typeof statusFilter)}><option value=\"all\">All statuses</option><option value=\"draft\">Draft</option><option value=\"published\">Published</option><option value=\"archived\">Archived</option></Select>\n </div>\n </Panel>\n <div style={GRID} data-builder-library-cms>\n <Panel title={`${visible.length} resource${visible.length === 1 ? \"\" : \"s\"}`}>\n <div style={{ ...STACK, maxHeight: \"70vh\", overflow: \"auto\" }}>\n {visible.length === 0 ? <p className=\"muted\">No resources match these filters.</p> : visible.map((entry) => <button key={entry.key} type=\"button\" style={{ ...ITEM, ...(selected?.key === entry.key ? { borderColor: \"var(--ui-accent)\", boxShadow: \"0 0 0 1px var(--ui-accent)\" } : {}) }} onClick={() => setSelectedKey(entry.key)}>\n <div style={{ ...ROW, justifyContent: \"space-between\" }}><strong>{entry.resource.title}</strong><span className=\"badge\">{KIND_LABEL[entry.resource.kind]}</span></div>\n <p className=\"muted\" style={{ margin: \"6px 0\", lineHeight: 1.4 }}>{contentSummary(entry.resource)}</p>\n <div style={META}><span>{STATUS_LABEL[entry.resource.status]}</span><span>·</span><span>{scopeLabel(entry.resource.scope)}</span><span>·</span><span>{entry.sourceId}</span></div>\n </button>)}\n </div>\n </Panel>\n <Panel title={selected ? selected.resource.title : \"Select a resource\"} actions={selected?.local ? <div style={ROW}>\n <button className=\"btn secondary\" type=\"button\" disabled={saving} onClick={() => update({ status: selected.resource.status === \"archived\" ? \"draft\" : \"archived\" })}>{selected.resource.status === \"archived\" ? \"Restore draft\" : \"Archive\"}</button>\n <button className=\"btn primary\" type=\"button\" disabled={!data.localAuthoring || saving} onClick={() => void save()}>{saving ? \"Saving…\" : \"Save changes\"}</button>\n </div> : null}>\n {!selected ? <p className=\"muted\">Add a resource or choose one from the list.</p> : selected.local ? <LocalEditor selected={selected.resource} data={data} scopeValue={scopeValue} saving={saving} update={update} setResources={setResources} setSelectedKey={setSelectedKey} /> : <div style={STACK}>\n <div style={META}>Read only · supplied by {selected.sourceId} · source revision {selected.sourceRevision}</div>\n <div><span className=\"badge\">{STATUS_LABEL[selected.resource.status]}</span> <span className=\"badge\">{scopeLabel(selected.resource.scope)}</span></div>\n <ResourcePreview item={selected.resource} />\n {data.mode === \"hub\" && selected.resource.scope.kind === \"chapter\" ? <button className=\"btn secondary\" type=\"button\" onClick={() => void promote(selected)}>Copy to all chapters</button> : null}\n </div>}\n {saveError ? <div className=\"notice danger\" role=\"alert\"><strong>Fix these items before saving:</strong><ul>{saveError.map((error) => <li key={error}>{error}</li>)}</ul></div> : null}\n </Panel>\n </div>\n </AdminPage>;\n}\n\nfunction LocalEditor({ selected, data, scopeValue, update, setResources, setSelectedKey }: {\n selected: BuilderLibraryResource; data: AdminBuilderLibraryData; scopeValue: string; saving: boolean;\n update: (change: Partial<BuilderLibraryResource>) => void;\n setResources: (value: (items: BuilderLibraryResource[]) => BuilderLibraryResource[]) => void;\n setSelectedKey: (value: string) => void;\n}) {\n const uid = useId();\n return <div style={STACK}>\n <div style={META}>Local · resource revision {selected.revision} · library revision {data.local?.revision ?? 0}</div>\n <div style={{ display: \"grid\", gridTemplateColumns: \"1fr 1fr\", gap: 12 }}>\n <Field label=\"Title\" htmlFor={`${uid}-title`}><Input id={`${uid}-title`} value={selected.title} onInput={(event) => update({ title: event.currentTarget.value })} /></Field>\n <Field label=\"ID\" htmlFor={`${uid}-id`}><Input id={`${uid}-id`} value={selected.id} onInput={(event) => { const id = cleanId(event.currentTarget.value); setResources((items) => items.map((item) => item.id === selected.id ? { ...item, id } : item)); setSelectedKey(localKey(id)); }} /></Field>\n <Field label=\"Type\" htmlFor={`${uid}-kind`}><Select id={`${uid}-kind`} value={selected.kind} onChange={(event) => { const kind = event.currentTarget.value as BuilderLibraryResourceKind; update({ kind, bodyMarkdown: kind === \"document\" || kind === \"note\" ? (selected.bodyMarkdown ?? \"Start writing…\") : undefined, url: kind === \"link\" || kind === \"inspiration\" ? (selected.url ?? \"https://example.com\") : undefined, brandAsset: kind === \"image\" || kind === \"file\" ? (selected.brandAsset ?? { bookId: \"brand-book\", assetId: \"replace-me\" }) : undefined }); }}>{KINDS.map((kind) => <option value={kind} key={kind}>{KIND_LABEL[kind]}</option>)}</Select></Field>\n <Field label=\"Status\" htmlFor={`${uid}-status`}><Select id={`${uid}-status`} value={selected.status} onChange={(event) => update({ status: event.currentTarget.value as BuilderLibraryResourceStatus })}><option value=\"draft\">Draft</option><option value=\"published\">Published</option><option value=\"archived\">Archived</option></Select></Field>\n <Field label=\"Visible to\" htmlFor={`${uid}-scope`}><Select id={`${uid}-scope`} value={scopeValue} onChange={(event) => { const value = event.currentTarget.value; update({ scope: value === \"global\" ? { kind: \"global\" } : value === \"built_not_found\" ? { kind: \"built_not_found\" } : { kind: \"chapter\", chapterId: value.slice(\"chapter:\".length) } }); }}>\n {data.mode === \"hub\" ? <option value=\"built_not_found\">Built Not Found only</option> : null}\n {data.mode === \"hub\" ? <option value=\"global\">All chapters</option> : null}\n {data.chapterTargets.map(({ chapterId }) => <option value={`chapter:${chapterId}`} key={chapterId}>Only {chapterId}</option>)}\n </Select></Field>\n <Field label=\"Tags\" htmlFor={`${uid}-tags`}><Input id={`${uid}-tags`} value={selected.tags.join(\", \")} placeholder=\"brand, membership\" onInput={(event) => update({ tags: event.currentTarget.value.split(\",\").map((tag) => tag.trim()).filter(Boolean) })} /></Field>\n </div>\n <Field label=\"Summary\" htmlFor={`${uid}-summary`}><Textarea id={`${uid}-summary`} rows={2} value={selected.summary ?? \"\"} onInput={(event) => update({ summary: event.currentTarget.value || undefined })} /></Field>\n {selected.kind === \"document\" || selected.kind === \"note\" ? <Field label=\"Markdown\" htmlFor={`${uid}-markdown`}><Textarea id={`${uid}-markdown`} rows={12} value={selected.bodyMarkdown ?? \"\"} onInput={(event) => update({ bodyMarkdown: event.currentTarget.value })} /></Field> : null}\n {selected.kind === \"link\" || selected.kind === \"inspiration\" ? <Field label=\"HTTPS URL\" htmlFor={`${uid}-url`}><Input id={`${uid}-url`} type=\"url\" value={selected.url ?? \"\"} onInput={(event) => update({ url: event.currentTarget.value })} /></Field> : null}\n {selected.kind === \"image\" || selected.kind === \"file\" ? <div style={{ display: \"grid\", gridTemplateColumns: \"1fr 1fr\", gap: 12 }}>\n <Field label=\"Brand book ID\" htmlFor={`${uid}-book`}><Input id={`${uid}-book`} value={selected.brandAsset?.bookId ?? \"\"} onInput={(event) => update({ brandAsset: { bookId: event.currentTarget.value, assetId: selected.brandAsset?.assetId ?? \"\", ...(selected.brandAsset?.filename ? { filename: selected.brandAsset.filename } : {}) } })} /></Field>\n <Field label=\"Asset ID\" htmlFor={`${uid}-asset`}><Input id={`${uid}-asset`} value={selected.brandAsset?.assetId ?? \"\"} onInput={(event) => update({ brandAsset: { bookId: selected.brandAsset?.bookId ?? \"\", assetId: event.currentTarget.value, ...(selected.brandAsset?.filename ? { filename: selected.brandAsset.filename } : {}) } })} /></Field>\n <Field label=\"Filename (optional)\" htmlFor={`${uid}-filename`}><Input id={`${uid}-filename`} value={selected.brandAsset?.filename ?? \"\"} onInput={(event) => update({ brandAsset: { bookId: selected.brandAsset?.bookId ?? \"\", assetId: selected.brandAsset?.assetId ?? \"\", ...(event.currentTarget.value ? { filename: event.currentTarget.value } : {}) } })} /></Field>\n </div> : null}\n <ResourcePreview item={selected} />\n </div>;\n}\n\n/** Reusable private Builder Library section for the standard Settings workspace. */\nexport function builderLibrarySection(): AdminSection { return { id: \"builder-library\", label: \"Builder Library\", render: (ctx) => <BuilderLibraryAdmin ctx={ctx} /> }; }\n","// Email section: the owner-editable email config (templates + addresses) from\n// GET/PUT /api/admin/group/email, the send audit from GET /api/admin/email/log,\n// and a POST /api/admin/email/test button. Built from odla-ui form primitives.\nimport { useState } from \"preact/hooks\";\nimport { Button, Checkbox, DataTable, Field, Input, Textarea } from \"@odla-ai/ui/components\";\nimport type { DataTableColumn } from \"@odla-ai/ui/components\";\nimport { adminFetch, useAdminResource } from \"./admin-api.js\";\nimport { AdminPage, AdminNote, Panel } from \"./admin-layout.js\";\nimport type { AdminSection, AdminSectionContext } from \"./chrome.js\";\nimport { useChapterCopy } from \"./copy-context.js\";\nimport { formatChapterCopy, type ChapterCopy } from \"../copy.js\";\nimport { EmailDeliveryResolution, type DeliveryLogRow as LogRow } from \"./admin-email-resolution.js\";\n\ninterface Template { subject: string; text: string; enabled: boolean }\ninterface EmailConfig {\n emailTemplates: Record<string, Template>;\n replyTo: string;\n fromName: string;\n notificationEmail: string;\n debugEmail: string;\n commitmentText: string;\n normsText: string;\n transport: string;\n fromEmail: string | null;\n envName: string;\n}\nconst logColumns = (\n copy: ChapterCopy[\"admin\"][\"email\"],\n ctx: AdminSectionContext, refresh: () => void,\n): readonly DataTableColumn<LogRow>[] => [\n { key: \"sentAt\", header: copy.sentColumn, cell: (r) => new Date(r.sentAt).toLocaleString(), sortAs: \"number\", sortValue: (r) => r.sentAt },\n { key: \"template\", header: copy.templateColumn, cell: (r) => r.template },\n { key: \"to\", header: copy.toColumn, cell: (r) => r.to },\n { key: \"status\", header: copy.statusColumn, cell: (r) => <div>{r.deliveryState && r.deliveryState !== \"sent\"\n ? <span className=\"badge\">{r.deliveryState === \"retry_ready\" ? \"Original workflow may retry\" : r.deliveryState === \"sending\" ? \"Sending — unconfirmed\" : \"Delivery uncertain\"}</span>\n : r.error ? <span className=\"badge\">{copy.failed}</span> : r.transport === \"log-only\" ? \"Logged only — not sent\" : r.redirected ? <span className=\"badge\">{copy.redirected}</span> : copy.delivered}\n <EmailDeliveryResolution row={r} ctx={ctx} onResolved={refresh} /></div> },\n];\n\nfunction EmailBody({ ctx }: { ctx: AdminSectionContext }) {\n const copy = useChapterCopy().admin.email;\n const cfg = useAdminResource<EmailConfig>(ctx.getToken, \"/api/admin/group/email\");\n const log = useAdminResource<{ sends: LogRow[] }>(ctx.getToken, \"/api/admin/email/log\");\n const [draft, setDraft] = useState<EmailConfig | null>(null);\n const [busy, setBusy] = useState<string | null>(null);\n const [note, setNote] = useState<string | null>(null);\n\n const data = draft ?? cfg.data;\n if (cfg.loading) return <AdminNote>{copy.loading}</AdminNote>;\n if (cfg.error || !data) return <AdminNote>{copy.loadFailed}{cfg.error ? `: ${cfg.error}` : \"\"}.</AdminNote>;\n\n const edit = (patch: Partial<EmailConfig>) => setDraft({ ...data, ...patch });\n const editTemplate = (key: string, patch: Partial<Template>) =>\n edit({ emailTemplates: { ...data.emailTemplates, [key]: { ...data.emailTemplates[key], ...patch } as Template } });\n\n const run = async (key: string, fn: () => Promise<void>) => {\n setBusy(key);\n setNote(null);\n try {\n await fn();\n } catch (e) {\n setNote(e instanceof Error ? e.message : String(e));\n } finally {\n setBusy(null);\n }\n };\n const save = () =>\n run(\"save\", async () => {\n await adminFetch(ctx.getToken, \"/api/admin/group/email\", { method: \"PUT\", body: JSON.stringify(data) });\n setDraft(null);\n cfg.refresh();\n setNote(copy.saved);\n });\n const test = (template: string) =>\n run(`test:${template}`, async () => {\n const r = await adminFetch<{ ok: boolean; to: string; redirected: boolean }>(ctx.getToken, \"/api/admin/email/test\", { method: \"POST\", body: JSON.stringify({ template }) });\n setNote(r.ok\n ? formatChapterCopy(copy.sent, {\n template,\n address: r.to,\n redirected: r.redirected ? ` (${copy.redirected})` : \"\",\n })\n : copy.testFailed);\n log.refresh();\n });\n\n return (\n <AdminPage>\n <Panel\n title={copy.delivery}\n actions={<span className=\"muted\">{data.envName} · {data.transport}{data.fromEmail ? ` · ${data.fromEmail}` : \"\"}</span>}\n >\n <Field label={copy.notificationAddress}><Input value={data.notificationEmail} onInput={(e) => edit({ notificationEmail: (e.target as HTMLInputElement).value })} /></Field>\n <Field label={copy.replyTo}><Input value={data.replyTo} onInput={(e) => edit({ replyTo: (e.target as HTMLInputElement).value })} /></Field>\n <Field label={copy.fromName} hint={copy.fromNameHint}><Input value={data.fromName ?? \"\"} onInput={(e) => edit({ fromName: (e.target as HTMLInputElement).value })} /></Field>\n <Field label={copy.debugInbox} hint={copy.debugInboxHint}><Input value={data.debugEmail} onInput={(e) => edit({ debugEmail: (e.target as HTMLInputElement).value })} /></Field>\n </Panel>\n\n {Object.entries(data.emailTemplates).map(([key, t]) => (\n <Panel key={key} title={key} actions={<Button variant=\"secondary\" mini disabled={busy === `test:${key}`} onClick={() => void test(key)}>{copy.sendTest}</Button>}>\n <Checkbox label={copy.enabled} checked={t.enabled} onChange={(e) => editTemplate(key, { enabled: (e.target as HTMLInputElement).checked })} />\n <Field label={copy.subject}><Input value={t.subject} onInput={(e) => editTemplate(key, { subject: (e.target as HTMLInputElement).value })} /></Field>\n <Field label={copy.body}><Textarea prose rows={5} value={t.text} onInput={(e) => editTemplate(key, { text: (e.target as HTMLTextAreaElement).value })} /></Field>\n </Panel>\n ))}\n\n <div style={{ display: \"flex\", gap: 12, alignItems: \"center\" }}>\n <Button disabled={!draft || busy === \"save\"} onClick={() => void save()}>{copy.save}</Button>\n {note ? <span className=\"muted\">{note}</span> : null}\n </div>\n\n <Panel title={copy.sendLog}>\n <DataTable rows={log.data?.sends ?? []} columns={logColumns(copy, ctx, log.refresh)} rowKey={(r) => r.id} />\n </Panel>\n </AdminPage>\n );\n}\n\n/** Options for {@link emailSection}. */\nexport interface EmailSectionOptions {\n id?: string;\n label?: string;\n}\n\n/** Build the Email admin section: template + address editor over\n * `GET/PUT /api/admin/group/email`, the send log, and per-template test sends. */\nexport function emailSection(options: EmailSectionOptions = {}): AdminSection {\n const { id = \"email\", label = \"Email\" } = options;\n return { id, label, render: (ctx) => <EmailBody ctx={ctx} /> };\n}\n","import { useState } from \"preact/hooks\";\nimport { Button, Field, Input, Textarea } from \"@odla-ai/ui/components\";\nimport { adminFetch } from \"./admin-api.js\";\nimport type { AdminSectionContext } from \"./chrome.js\";\n\nexport interface DeliveryLogRow {\n id: string; template: string; to: string; subject: string; transport: string; redirected: boolean;\n error: string | null; sentAt: number; deliveryState?: string | null; deliveryAttempt?: number | null;\n}\n\n/** Evidence review is deliberately separate from sending. Non-delivery unlocks only the original workflow. */\nexport function EmailDeliveryResolution({ row, ctx, onResolved }: {\n row: DeliveryLogRow; ctx: AdminSectionContext; onResolved: () => void;\n}) {\n const [open, setOpen] = useState(false), [reason, setReason] = useState(\"\"), [messageId, setMessageId] = useState(\"\");\n const [busy, setBusy] = useState(false), [note, setNote] = useState(\"\");\n if (![\"sending\", \"uncertain\"].includes(row.deliveryState ?? \"\") || !row.deliveryAttempt) return null;\n const resolve = async (decision: string) => {\n setBusy(true); setNote(\"\");\n try {\n await adminFetch(ctx.getToken, `/api/admin/email/log/${encodeURIComponent(row.id)}/resolve`, {\n method: \"POST\", body: JSON.stringify({ expectedAttempt: row.deliveryAttempt, expectedState: row.deliveryState,\n decision, reason, ...(messageId.trim() ? { messageId: messageId.trim() } : {}) }),\n });\n setOpen(false); onResolved();\n } catch (error) { setNote(error instanceof Error ? error.message : \"Unable to record evidence\"); }\n finally { setBusy(false); }\n };\n if (!open) return <Button mini variant=\"secondary\" onClick={() => setOpen(true)}>Review delivery</Button>;\n return <div>\n <p>Attempt {row.deliveryAttempt}: {row.subject}. Check provider evidence, not just whether the message is in an inbox. This action does not send mail.</p>\n <Field label=\"Provider evidence\"><Textarea value={reason} onInput={e => setReason((e.target as HTMLTextAreaElement).value)} /></Field>\n <Field label=\"Provider message ID (optional)\"><Input value={messageId} onInput={e => setMessageId((e.target as HTMLInputElement).value)} /></Field>\n <Button mini disabled={busy || reason.trim().length < 10} onClick={() => void resolve(\"confirmed_delivered\")}>Confirm delivered</Button>\n <Button mini variant=\"secondary\" disabled={busy || reason.trim().length < 10} onClick={() => void resolve(\"confirmed_not_delivered\")}>Confirm not delivered</Button>\n <Button mini variant=\"secondary\" disabled={busy} onClick={() => setOpen(false)}>Cancel</Button>\n {note ? <p role=\"alert\">{note}</p> : null}\n </div>;\n}\n","import { useEffect, useState } from \"preact/hooks\";\nimport type {\n EffectiveMemberContent,\n MemberContentDocument,\n MemberContentPage,\n MemberContentTierAuthority,\n} from \"../member-content.js\";\nimport type { AdminSection, AdminSectionContext } from \"./chrome.js\";\nimport { adminFetch, useAdminResource } from \"./admin-api.js\";\nimport { AdminNote, AdminPage, Panel } from \"./admin-layout.js\";\n\n/** Admin-safe inventory of inherited content, local content, tiers, and composition state. */\nexport interface AdminMemberContentData {\n parent: { revision: number; digest: string; document: MemberContentDocument } | null;\n chapter: { revision: number; document: MemberContentDocument } | null;\n effective: EffectiveMemberContent;\n tiers: MemberContentTierAuthority[];\n localAuthoring: boolean;\n}\n\nconst emptyDraft = () => ({ pages: [], upsellOverrides: [] });\n\nfunction accessLabel(page: MemberContentPage): string {\n return page.audience.kind === \"all-members\"\n ? \"All members\"\n : `Tiers: ${page.audience.tierIds.join(\", \")}`;\n}\n\n/** Agent-friendly editor with read-only inherited inventory and one local JSON contract. */\nexport function MemberContentAdmin({\n ctx,\n initialData,\n}: {\n ctx: AdminSectionContext;\n /** Exact preloaded state for package-identical previews and SSR tests. */\n initialData?: AdminMemberContentData;\n}) {\n const resource = useAdminResource<AdminMemberContentData>(ctx.getToken, \"/api/admin/member-content\");\n const [draft, setDraft] = useState(JSON.stringify(initialData?.chapter?.document ?? emptyDraft(), null, 2));\n const [saveError, setSaveError] = useState<string[] | null>(null);\n const [saving, setSaving] = useState(false);\n\n useEffect(() => {\n if (!resource.data) return;\n setDraft(JSON.stringify(resource.data.chapter?.document ?? emptyDraft(), null, 2));\n }, [resource.data]);\n\n const loaded = initialData ?? resource.data;\n if (!loaded && resource.loading) return <AdminPage><AdminNote>Loading member content…</AdminNote></AdminPage>;\n if (resource.error || !loaded) {\n return <AdminPage><AdminNote>Member content could not be loaded: {resource.error ?? \"unknown error\"}</AdminNote></AdminPage>;\n }\n const data = loaded;\n const inherited = data.parent?.document.pages ?? [];\n const local = data.chapter?.document.pages ?? [];\n\n const save = async () => {\n setSaveError(null);\n let document: unknown;\n try {\n document = JSON.parse(draft);\n } catch (error) {\n setSaveError([`JSON is invalid: ${error instanceof Error ? error.message : String(error)}`]);\n return;\n }\n setSaving(true);\n try {\n await adminFetch(ctx.getToken, \"/api/admin/member-content\", {\n method: \"PUT\",\n body: JSON.stringify({ expectedRevision: data.chapter?.revision ?? 0, document }),\n });\n resource.refresh();\n } catch (error) {\n const structured = error as Error & { errors?: string[] };\n setSaveError(structured.errors ?? [error instanceof Error ? error.message : String(error)]);\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <AdminPage>\n <Panel>\n <div className=\"card-label\">Member content</div>\n <h2>One catalog, two clear owners</h2>\n <p>\n Parent pages are inherited and read-only here. Chapter pages and delegated\n upsells are edited in the local document. Access uses exact tier IDs; no tier order is assumed.\n </p>\n <div className=\"stat-band\">\n <div><strong>{inherited.length}</strong><span>Inherited pages</span></div>\n <div><strong>{local.length}</strong><span>Chapter pages</span></div>\n <div><strong>{data.tiers.length}</strong><span>Declared tiers</span></div>\n </div>\n </Panel>\n\n <Panel>\n <div className=\"card-label\">Inherited · read only</div>\n <h2>Parent pages {data.parent ? `· revision ${data.parent.revision}` : \"\"}</h2>\n {inherited.length === 0 ? <AdminNote>No Parent pages have been delivered.</AdminNote> : (\n <div className=\"data-list\" data-member-content-inherited>\n {inherited.map((page) => (\n <article className=\"card\" key={page.id}>\n <strong>{page.title}</strong>\n <div className=\"meeting-note\">/{page.slug} · {page.navigation.section} · {accessLabel(page)}</div>\n <div className=\"meeting-note\">\n Upsell: {page.upsell ? `${page.upsell.owner} controlled` : \"none\"}\n </div>\n </article>\n ))}\n </div>\n )}\n </Panel>\n\n <Panel>\n <div className=\"card-label\">Chapter · editable</div>\n <h2>Local document · revision {data.chapter?.revision ?? 0}</h2>\n <p className=\"meeting-note\">\n Use the published MemberContentDocument fields. The server supplies schemaVersion,\n revision, timestamp, and chapter source; unknown fields and undeclared tiers are rejected.\n </p>\n <label className=\"field\">\n <span>Pages and delegated upsells (JSON)</span>\n <textarea\n rows={24}\n value={draft}\n disabled={!data.localAuthoring || saving}\n onInput={(event) => setDraft(event.currentTarget.value)}\n spellcheck={false}\n />\n </label>\n {saveError ? (\n <div className=\"notice danger\" role=\"alert\">\n <strong>Fix these items before saving:</strong>\n <ul>{saveError.map((error) => <li key={error}>{error}</li>)}</ul>\n </div>\n ) : null}\n <button className=\"btn primary\" type=\"button\" disabled={!data.localAuthoring || saving} onClick={() => void save()}>\n {saving ? \"Saving…\" : \"Save chapter content\"}\n </button>\n {!data.localAuthoring ? <AdminNote>Local authoring is disabled in the checked-in Chapter config.</AdminNote> : null}\n </Panel>\n </AdminPage>\n );\n}\n\n/** Reusable nested admin section for the standard Settings workspace. */\nexport function memberContentSection(): AdminSection {\n return {\n id: \"member-content\",\n label: \"Member content\",\n render: (ctx) => <MemberContentAdmin ctx={ctx} />,\n };\n}\n","import { ThemeScope } from \"@odla-ai/ui/components\";\nimport type { ComponentChildren, Ref } from \"preact\";\nimport type { Chapter } from \"../types.js\";\nimport { adminRouteFromUrl, adminRouteHref } from \"./admin-route.js\";\nimport type { AdminWorkspace } from \"./chrome.js\";\nimport { BrandStyle } from \"./brand-style.js\";\nimport { ChapterCopyProvider } from \"./copy-context.js\";\n\nexport function AdminTheme(props: {\n chapter?: Chapter;\n children: ComponentChildren;\n /** The theme scope element. Vendor widgets that read `--ui-*` off a live\n * element (Clerk's appearance bridge) must read THIS one, not the document\n * root, or an admin brand silently falls back to the host page's palette. */\n scopeRef?: Ref<HTMLDivElement>;\n}) {\n const brand = props.chapter?.brand;\n return (\n <ChapterCopyProvider copy={props.chapter?.copy}>\n <ThemeScope\n ref={props.scopeRef}\n data-chapter-admin=\"\"\n theme={brand?.theme}\n accent={brand?.accent}\n colorScheme={brand?.colorScheme ?? \"light\"}\n >\n <BrandStyle brand={brand} selector=\"[data-chapter-admin]\" />\n {props.children}\n </ThemeScope>\n </ChapterCopyProvider>\n );\n}\n\nexport function signInRedirect(\n basePath: string,\n workspaces: readonly AdminWorkspace[],\n): string {\n if (typeof window === \"undefined\") return basePath;\n const current = new URL(window.location.href);\n const inbound = adminRouteFromUrl(\n current,\n basePath,\n workspaces.map((workspace) => workspace.id),\n );\n const workspace = workspaces.find((item) => item.id === inbound.workspaceId);\n const route = inbound.viewId || !workspace?.defaultViewId\n ? inbound\n : { ...inbound, viewId: workspace.defaultViewId };\n // Clerk owns the hash while signed out. Preserve requested admin state in\n // its return query, then let AdminShell canonicalize after authentication.\n return adminRouteHref(current, basePath, route, \"query\");\n}\n","// Bridging the admin theme's tokens into Clerk's appearance contract.\nimport type { RefObject } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { clerkAppearanceFromTokens } from \"@odla-ai/auth-clerk\";\n\ntype ClerkAppearance = ReturnType<typeof clerkAppearanceFromTokens>;\n\n/**\n * Read the Clerk appearance from the admin theme scope rather than the document\n * root.\n *\n * `clerkAppearanceFromTokens()` defaults to `document.documentElement`, but the\n * brand tokens are written scoped to `[data-chapter-admin]` so an admin brand\n * cannot recolor the host page or vendor sign-in UI. Reading the root would\n * therefore theme the widget from whatever the HOST page happens to define —\n * on a page with no `--ui-*` at root, @odla-ai/ui's dark-mode defaults win and\n * the sign-in card renders dark while the console beneath it is light.\n *\n * The scope is an ancestor rendered in the same pass, so it can only be\n * measured after mount. Returns `undefined` until then; callers should hold the\n * widget back rather than mount it against the defaults, because a mounted\n * Clerk widget keeps its startup palette.\n */\nexport function useScopedClerkAppearance(\n scope: RefObject<HTMLElement | null>,\n): ClerkAppearance | undefined {\n const [appearance, setAppearance] = useState<ClerkAppearance>();\n useEffect(() => {\n setAppearance(clerkAppearanceFromTokens(scope.current ?? undefined));\n }, [scope]);\n return appearance;\n}\n","/** Normalized public auth configuration consumed by the Clerk gate. */\nexport interface ChapterAdminAuthConfig {\n publishableKey: string | null;\n}\n\n/** Normalized current-user data retained for workspace visibility decisions. */\nexport interface ChapterAdminUser extends Record<string, unknown> {\n authorized?: boolean;\n email?: string | null;\n}\n\n/** Inputs supplied to custom admin configuration and current-user loaders. */\nexport interface ChapterAdminAuthLoadContext {\n apiBase: string;\n getToken?: () => Promise<string | null>;\n}\n\n/** Existing-site adapter for auth endpoint names and response shapes. */\nexport interface ChapterAdminAuthAdapter {\n configPath?: string;\n currentUserPath?: string;\n loadConfig?: (\n context: ChapterAdminAuthLoadContext,\n ) => Promise<ChapterAdminAuthConfig>;\n loadCurrentUser?: (\n context: Required<ChapterAdminAuthLoadContext>,\n ) => Promise<ChapterAdminUser>;\n mapConfig?: (body: Record<string, unknown>) => ChapterAdminAuthConfig;\n mapCurrentUser?: (body: Record<string, unknown>) => ChapterAdminUser;\n isAuthorized?: (user: ChapterAdminUser) => boolean;\n}\n\nconst apiUrl = (apiBase: string, path: string): string =>\n `${apiBase.replace(/\\/+$/, \"\")}/${path.replace(/^\\/+/, \"\")}`;\n\nexport const DEFAULT_ADMIN_AUTH: ChapterAdminAuthAdapter = {};\n\n/** Load and normalize the public authentication configuration. */\nexport async function loadChapterAdminConfig(\n adapter: ChapterAdminAuthAdapter,\n apiBase: string,\n): Promise<ChapterAdminAuthConfig> {\n if (adapter.loadConfig) return adapter.loadConfig({ apiBase });\n const response = await fetch(apiUrl(apiBase, adapter.configPath ?? \"/api/config\"));\n const body = (await response.json()) as Record<string, unknown>;\n if (adapter.mapConfig) return adapter.mapConfig(body);\n return {\n publishableKey:\n typeof body.clerkPublishableKey === \"string\"\n ? body.clerkPublishableKey\n : null,\n };\n}\n\n/** Load and normalize the authenticated user used by admin workspaces. */\nexport async function loadChapterAdminUser(\n adapter: ChapterAdminAuthAdapter,\n apiBase: string,\n getToken: () => Promise<string | null>,\n): Promise<ChapterAdminUser> {\n if (adapter.loadCurrentUser) {\n return adapter.loadCurrentUser({ apiBase, getToken });\n }\n const token = await getToken();\n const response = await fetch(apiUrl(apiBase, adapter.currentUserPath ?? \"/api/me\"), {\n headers: token ? { authorization: `Bearer ${token}` } : {},\n });\n const body = (await response.json().catch(() => ({}))) as Record<string, unknown>;\n return adapter.mapCurrentUser?.(body) ?? body;\n}\n","// Compatibility entry for the workspace-based default console.\nimport type { Chapter } from \"../types\";\nimport type { AdminSection } from \"./chrome.js\";\nimport { defaultAdminWorkspaces } from \"./admin-workspaces.js\";\n\n/** Legacy default catalog. @deprecated Use defaultAdminWorkspaces. */\nexport function defaultAdminSections(chapter: Chapter): AdminSection[] {\n return defaultAdminWorkspaces(chapter);\n}\n\nexport { defaultAdminWorkspaces };\n","// Meetings section: the reconciled agenda from GET /api/admin/meetings, with the\n// reschedule and cancel actions wired to POST /api/admin/meetings/:id/{...}.\n// Built from odla-ui .panel + Button; drift against live Google state is flagged.\nimport { useState } from \"preact/hooks\";\nimport { Button } from \"@odla-ai/ui/components\";\nimport { adminFetch, useAdminResource } from \"./admin-api.js\";\nimport { AdminPage, AdminNote, Panel } from \"./admin-layout.js\";\nimport type { AdminSection, AdminSectionContext } from \"./chrome.js\";\nimport { useChapterCopy } from \"./copy-context.js\";\n\ninterface MeetingRow {\n id: string;\n startAt: number;\n endAt: number;\n status: string;\n drift: string;\n meetUrl: string | null;\n applicant: { name: string; email: string; status: string } | null;\n}\n\nconst when = (t: number): string => new Date(t).toLocaleString([], { dateStyle: \"medium\", timeStyle: \"short\" });\n\nfunction MeetingsBody({ ctx }: { ctx: AdminSectionContext }) {\n const copy = useChapterCopy().admin.meetings;\n const { data, loading, error, refresh } = useAdminResource<{ meetings: MeetingRow[]; timezone: string }>(ctx.getToken, \"/api/admin/meetings?all=1\");\n const [busy, setBusy] = useState<string | null>(null);\n const [note, setNote] = useState<string | null>(null);\n if (loading) return <AdminNote>{copy.loading}</AdminNote>;\n if (error || !data) return <AdminNote>{copy.loadFailed}{error ? `: ${error}` : \"\"}.</AdminNote>;\n\n const run = async (id: string, fn: () => Promise<void>) => {\n setBusy(id);\n setNote(null);\n try {\n await fn();\n refresh();\n } catch (e) {\n setNote(e instanceof Error ? e.message : String(e));\n } finally {\n setBusy(null);\n }\n };\n const cancel = (id: string) => {\n if (!globalThis.confirm?.(copy.cancelConfirm)) return;\n void run(id, () => adminFetch(ctx.getToken, `/api/admin/meetings/${id}/cancel`, { method: \"POST\" }));\n };\n const reschedule = (id: string) => {\n const input = globalThis.prompt?.(copy.newStartPrompt);\n if (!input) return;\n const startAt = Date.parse(input);\n if (!Number.isFinite(startAt)) {\n setNote(copy.parseFailed);\n return;\n }\n void run(id, () => adminFetch(ctx.getToken, `/api/admin/meetings/${id}/reschedule`, { method: \"POST\", body: JSON.stringify({ startAt }) }));\n };\n\n return (\n <AdminPage>\n <Panel title={<>{copy.agenda} <span className=\"muted\" style={{ fontWeight: 400 }}>· {data.timezone}</span></>} actions={note ? <span className=\"muted\">{note}</span> : undefined}>\n {data.meetings.length === 0 ? (\n <p className=\"muted\" style={{ margin: 0 }}>{copy.empty}</p>\n ) : (\n <ul style={{ listStyle: \"none\", margin: 0, padding: 0, display: \"flex\", flexDirection: \"column\", gap: 12 }}>\n {data.meetings.map((m) => (\n <li key={m.id} style={{ display: \"flex\", alignItems: \"center\", gap: 12, flexWrap: \"wrap\", opacity: m.status === \"cancelled\" ? 0.55 : 1 }}>\n <strong style={{ minWidth: 170 }}>{when(m.startAt)}</strong>\n <span style={{ flex: 1 }}>{m.applicant ? `${m.applicant.name} · ${m.applicant.email}` : copy.unknown}</span>\n <span className=\"badge\">{m.status}</span>\n {m.drift && m.drift !== \"none\" ? <span className=\"badge\">{copy.drift}: {m.drift}</span> : null}\n {m.meetUrl ? <a href={m.meetUrl} target=\"_blank\" rel=\"noreferrer\">{copy.meet}</a> : null}\n {m.status === \"scheduled\" ? (\n <>\n <Button variant=\"secondary\" mini disabled={busy === m.id} onClick={() => reschedule(m.id)}>{copy.reschedule}</Button>\n <Button variant=\"danger\" mini disabled={busy === m.id} onClick={() => cancel(m.id)}>{copy.cancel}</Button>\n </>\n ) : null}\n </li>\n ))}\n </ul>\n )}\n </Panel>\n </AdminPage>\n );\n}\n\n/** Options for {@link meetingsSection}. */\nexport interface MeetingsSectionOptions {\n id?: string;\n label?: string;\n}\n\n/** Build the Meetings admin section: the reconciled agenda over\n * `GET /api/admin/meetings`, with reschedule/cancel actions. */\nexport function meetingsSection(options: MeetingsSectionOptions = {}): AdminSection {\n const { id = \"meetings\", label = \"Meetings\" } = options;\n return { id, label, render: (ctx) => <MeetingsBody ctx={ctx} /> };\n}\n","import { Button, Field, Select } from \"@odla-ai/ui/components\";\nimport { useRef, useState } from \"preact/hooks\";\nimport type { NetworkRecord, NetworkRecordMutationResult } from \"../network-contract.js\";\nimport type { AdminSectionContext } from \"./chrome.js\";\nimport { adminFetch } from \"./admin-api.js\";\nimport { OperationalProfileForm } from \"./operational-profile-form.js\";\nimport { NetworkRecordDetail } from \"./admin-network-notes.js\";\nimport { LeaderAdmissionAction } from \"./admin-admission.js\";\n\n/** Follower-authored fields and actions; no client-side membership policy. */\nexport function NetworkRecordEditor(props: {\n ctx: AdminSectionContext; targetId: string; targetName: string; leaderName: string;\n record: NetworkRecord; sharedNotes?: boolean; admissionGrants?: boolean; onChanged: () => void;\n}) {\n const { ctx, record } = props;\n const [stage, setStage] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const attempt = useRef<{ stage: string; id: string } | null>(null);\n const pending = record.edit?.pendingAction;\n const superAdmin = ctx.currentUser?.superAdmin === true;\n const ownPending = !pending || pending.actorId === ctx.currentUser?.userId || pending.actorId === ctx.currentUser?.id ||\n Boolean(pending.actorEmail && pending.actorEmail === ctx.currentUser?.email);\n const mutate = async (change: { fields?: Record<string, unknown>; stage?: string }, mutationId: string, retry = false) => {\n await adminFetch<NetworkRecordMutationResult>(ctx.getToken, \"/api/admin/network/records\", { method: \"PATCH\", body: JSON.stringify({\n targetId: props.targetId, type: record.type, recordId: record.id,\n expectedRevision: retry && pending ? pending.expectedRevision : record.revision,\n expectedStage: retry && pending ? pending.expectedStage : record.stage ?? null, mutationId, ...change,\n }) });\n props.onChanged();\n };\n const move = async () => {\n setBusy(true); setError(null);\n try {\n const destination = pending?.stage ?? stage;\n if (attempt.current?.stage !== destination) attempt.current = { stage: destination, id: crypto.randomUUID() };\n await mutate({ stage: destination }, pending?.mutationId ?? attempt.current.id, Boolean(pending));\n attempt.current = null; setStage(\"\");\n } catch (cause) { setError(cause instanceof Error ? cause.message : \"Action could not be completed.\"); props.onChanged(); }\n finally { setBusy(false); }\n };\n return <div style={{ display: \"grid\", gap: 24 }}>\n {superAdmin && record.edit ? <>\n <section><h3>Chapter profile</h3>\n <OperationalProfileForm key={`${record.id}:${record.revision}`} fields={record.edit.fields} values={record.fields}\n onSave={(fields, id) => mutate({ fields }, id)} />\n </section>\n <section style={{ display: \"grid\", gap: 12 }}><h3>Membership actions</h3>\n {pending ? <p>An application action is pending: {pending.stage.replaceAll(\"_\", \" \")}. {ownPending ? \"Retry reconciles the same operation.\" : \"The original operator must reconcile it.\"}</p> :\n record.edit.allowedStages.length ? <Field label=\"Action\"><Select aria-label=\"Action\" value={stage} disabled={busy} onChange={event => setStage(event.currentTarget.value)}>\n <option value=\"\">Choose an action</option>{record.edit.allowedStages.map(action => <option key={action.id} value={action.id}>{action.label}</option>)}\n </Select></Field> : <p>No membership action is currently allowed.</p>}\n {pending || record.edit.allowedStages.length ? <div><Button disabled={busy || !ownPending || (!pending && !stage)} onClick={() => void move()}>\n {busy ? \"Applying…\" : pending ? \"Retry pending action\" : \"Apply action\"}\n </Button></div> : null}\n {error ? <p role=\"alert\">{error}</p> : null}\n </section>\n </> : null}\n {superAdmin && props.admissionGrants ? <section><h3>Next invitation</h3><p>This setting applies to the next eligible signup; it does not replace approval of an existing application.</p>\n <LeaderAdmissionAction getToken={ctx.getToken} targetId={props.targetId} sourceRecordId={record.id} /></section> : null}\n <NetworkRecordDetail ctx={ctx} targetId={props.targetId} targetName={props.targetName} leaderName={props.leaderName}\n record={record} sharedEnabled={superAdmin && props.sharedNotes === true} />\n </div>;\n}\n","import { useState } from \"preact/hooks\";\nimport { Button, DataTable, type DataTableColumn } from \"@odla-ai/ui/components\";\nimport { adminFetch, useAdminResource } from \"./admin-api\";\nimport { Panel } from \"./admin-layout\";\n\ninterface SeatRow {\n seatId: string; sourceKey: string; membershipId: string; status: string | null; currency: string | null;\n amountReceivedCents: number; refundedCents: number; paymentIntentId: string;\n subscriptionId: string | null; subscriptionItemId: string | null; currentPeriodEnd: number | null;\n}\nconst money = (row: SeatRow, cents: number) => row.currency ? new Intl.NumberFormat(\"en-US\", {\n style: \"currency\", currency: row.currency,\n}).format(cents / 100) : \"Unknown\";\nconst columns = (refund: (row: SeatRow) => void, busy: string | null): DataTableColumn<SeatRow>[] => [\n { key: \"seatId\", header: \"Seat\", cell: row => <code>{row.seatId}</code> },\n { key: \"sourceKey\", header: \"Chapter / runtime\", cell: row => row.sourceKey },\n { key: \"status\", header: \"Payment\", cell: row => row.status ?? \"Unknown\" },\n { key: \"amountReceivedCents\", header: \"Collected\", cell: row => money(row, row.amountReceivedCents) },\n { key: \"refundedCents\", header: \"Refunded\", cell: row => money(row, row.refundedCents) },\n { key: \"membershipId\", header: \"Primary membership\", cell: row => <code>{row.membershipId}</code> },\n { key: \"paymentIntentId\", header: \"Stripe payment\", cell: row => <code>{row.paymentIntentId}</code> },\n { key: \"subscriptionItemId\", header: \"Renewal item\", cell: row => row.subscriptionItemId ? <code>{row.subscriptionItemId}</code> : \"Awaiting provider linkage\" },\n { key: \"currentPeriodEnd\", header: \"Paid through\", cell: row => row.currentPeriodEnd\n ? new Date(row.currentPeriodEnd * 1000).toLocaleDateString() : \"Awaiting provider linkage\" },\n { key: \"refund\", header: \"Refund\", cell: row => row.refundedCents < row.amountReceivedCents\n ? <Button variant=\"danger\" mini disabled={busy !== null} onClick={() => refund(row)}>{busy === row.seatId ? \"Refunding…\" : \"Refund seat\"}</Button>\n : \"Refunded\" },\n];\n\n/** Named-seat commercial objects, already included once in network financial totals, with the super admin's manual refund.\n * Seats are never refunded automatically; the button asks the membership authority to return one seat's payment. */\nexport function NetworkSeatBilling(props: { getToken: () => Promise<string | null> }) {\n const { data, loading, error, refresh } = useAdminResource<{ seats?: SeatRow[] }>(props.getToken, \"/api/admin/network-commercial-read-model\");\n const [busy, setBusy] = useState<string | null>(null);\n const [note, setNote] = useState<string | null>(null);\n const refund = async (row: SeatRow) => {\n setBusy(row.seatId); setNote(null);\n try {\n const receipt = await adminFetch<{ refundedCents?: number; replayed?: boolean }>(props.getToken,\n `/api/admin/membership-seats/${encodeURIComponent(row.seatId)}/refund`, { method: \"POST\" });\n setNote(receipt.replayed ? `Seat ${row.seatId} was already refunded.` : `Refunded ${money(row, receipt.refundedCents ?? row.amountReceivedCents)} for seat ${row.seatId}.`);\n refresh();\n } catch (failure) { setNote(failure instanceof Error ? failure.message : \"Refund could not be completed.\"); }\n finally { setBusy(null); }\n };\n return <Panel title=\"Additional membership seats\">\n <p>Seat payments are included in the network totals. Renewal items share the primary subscription’s term. An unaccepted seat is never refunded automatically.</p>\n {loading ? <p>Loading seats…</p> : error ? <p role=\"alert\">Seats could not be loaded: {error}</p> :\n <DataTable rows={data?.seats ?? []} columns={columns(row => void refund(row), busy)} rowKey={row => `${row.sourceKey}:${row.seatId}`} />}\n {note ? <p role=\"status\">{note}</p> : null}\n </Panel>;\n}\n","import { DataTable, type DataTableColumn } from \"@odla-ai/ui/components\";\nimport type {\n MembershipDiscountPolicyVersionView, MembershipOfferingVersionView, MembershipPolicyVersionState, MembershipPolicyVersionsView,\n} from \"../membership-policy-versions.js\";\nimport { useAdminResource } from \"./admin-api.js\";\nimport { Panel } from \"./admin-layout.js\";\n\nconst PATH = \"/api/admin/membership-policy-versions\";\n/** Effective dates are instants the host set at a UTC boundary; rendering them in UTC keeps a midnight edge on its own day. */\nconst day = (ms: number): string => new Date(ms).toLocaleDateString(\"en-US\", { month: \"short\", day: \"numeric\", year: \"numeric\", timeZone: \"UTC\" });\nconst money = (cents: number, currency: string): string => new Intl.NumberFormat(\"en-US\", { style: \"currency\", currency }).format(cents / 100);\nconst STATE: Record<MembershipPolicyVersionState, string> = { active: \"Active\", scheduled: \"Scheduled\", superseded: \"Superseded\", draft: \"Draft\", retired: \"Retired\" };\nconst MECHANISM: Record<MembershipDiscountPolicyVersionView[\"mechanism\"], string> = {\n none: \"None: cohort status only, no provider discount\",\n stripe_coupon_once: \"Stripe coupon, applied once\",\n stripe_coupon_forever: \"Stripe coupon, applied while active\",\n stripe_coupon_term_bound: \"Stripe coupon, applied once; issuance refuses unless the offering's fixed term ends on the same date\",\n};\ntype Versioned = { version: number; state: MembershipPolicyVersionState; supersededAt?: number; source?: string; actor?: string; recordedAt?: number };\nconst State = ({ row }: { row: Versioned }) => <span className={row.state === \"active\" ? \"badge\" : \"muted\"}>{STATE[row.state]}</span>;\nconst superseded = (row: Versioned): string => row.supersededAt === undefined ? \"—\" : day(row.supersededAt);\nconst Source = ({ row }: { row: Versioned }) => <span>\n {row.source ?? <span className=\"muted\">Unrecorded</span>}\n {row.actor ? <> · <code>{row.actor}</code></> : null}\n {row.recordedAt !== undefined ? <> · {day(row.recordedAt)}</> : null}\n</span>;\n\nconst offeringColumns: DataTableColumn<MembershipOfferingVersionView>[] = [\n { key: \"version\", header: \"Version\", cell: row => <><code>v{row.version}</code> <State row={row} /></>, sortAs: \"number\", sortValue: row => row.version },\n { key: \"sku\", header: \"SKU\", cell: row => <code>{row.baseSkuId}</code> },\n { key: \"list\", header: \"List price\", cell: row => `${money(row.basePriceCents, row.currency)} / ${row.interval}` },\n { key: \"term\", header: \"Term\", cell: row => row.term.kind === \"fixed_end\" ? `Ends ${day(row.term.endsAt)}` : `Rolling ${row.term.months} months` },\n { key: \"seat\", header: \"Seat\", cell: row => `${money(row.seatPriceCents, row.currency)} · ${row.seatPurchaseWindowCalendarMonths === undefined\n ? \"no window\" : `${row.seatPurchaseWindowCalendarMonths}-month window`}` },\n { key: \"effectiveFrom\", header: \"Effective from\", cell: row => day(row.effectiveFrom), sortAs: \"number\", sortValue: row => row.effectiveFrom },\n { key: \"effectiveUntil\", header: \"Effective until\", cell: row => row.effectiveUntil === undefined ? \"Open\" : day(row.effectiveUntil) },\n { key: \"supersededAt\", header: \"Superseded\", cell: superseded },\n { key: \"source\", header: \"Source\", cell: row => <Source row={row} /> },\n];\nconst policyColumns: DataTableColumn<MembershipDiscountPolicyVersionView>[] = [\n { key: \"version\", header: \"Version\", cell: row => <><code>v{row.version}</code> <State row={row} /></>, sortAs: \"number\", sortValue: row => row.version },\n { key: \"cohort\", header: \"Cohort\", cell: row => <>{row.cohortLabel} <span className=\"muted\">· soft target {row.softTarget}</span></> },\n { key: \"percentOff\", header: \"Percent off\", cell: row => `${row.percentOffBps / 100}%` },\n { key: \"skus\", header: \"Discounted SKUs\", cell: row => row.discountEligibleSkuIds.length ? row.discountEligibleSkuIds.join(\", \") : \"None\" },\n { key: \"qualifying\", header: \"Qualifying window\", cell: row => `${day(row.qualifyingStartsAt)} → ${day(row.qualifyingEndsAt)}` },\n { key: \"benefit\", header: \"Benefit duration\", cell: row => row.benefitDuration.kind === \"fixed_end\" ? `Until ${day(row.benefitDuration.endsAt)}`\n : row.benefitDuration.kind === \"first_term\" ? \"First term\" : \"While active\" },\n { key: \"mechanism\", header: \"Provider mechanism\", cell: row => MECHANISM[row.mechanism] },\n { key: \"supersededAt\", header: \"Superseded\", cell: superseded },\n { key: \"source\", header: \"Source\", cell: row => <Source row={row} /> },\n];\n\n/** Props for {@link MembershipPolicyVersions}. */\nexport interface MembershipPolicyVersionsProps {\n getToken: () => Promise<string | null>;\n /** Narrow the readout to one chapter; omit to list every chapter the authority serves. */\n chapterId?: string;\n}\n\n/** Read-only readout of the membership offering and discount policy versions the network owner's authority holds,\n * mounted beside billing so an operator can see why a card shows a list price and a payable price. Every row is\n * the authority's own record with the state issuance would give it now; nothing here edits a version. */\nexport function MembershipPolicyVersions(props: MembershipPolicyVersionsProps) {\n const path = props.chapterId ? `${PATH}?chapterId=${encodeURIComponent(props.chapterId)}` : PATH;\n const { data, loading, error } = useAdminResource<MembershipPolicyVersionsView>(props.getToken, path);\n const scope = props.chapterId ? `chapter ${props.chapterId}` : \"any chapter\";\n if (loading) return <Panel title=\"Membership offering versions\"><p role=\"status\">Loading offering versions…</p></Panel>;\n if (error || !data) return <Panel title=\"Membership offering versions\"><p role=\"alert\">Offering versions could not be loaded: {error ?? \"empty response\"}</p></Panel>;\n return <>\n <Panel title=\"Membership offering versions\" actions={data.truncated ? <span className=\"badge\">Truncated</span> : undefined}>\n <p className=\"muted\">The list price a card shows comes from the active offering; the payable price applies the active discount policy.\n State is judged as of {day(data.now)}, exactly as checkout issuance judges it.</p>\n <DataTable rows={data.offerings} columns={offeringColumns} rowKey={row => row.id} ariaLabel=\"Membership offering versions\"\n emptyState={`No offering versions are recorded for ${scope}.`} />\n </Panel>\n <Panel title=\"Discount policy versions\">\n <DataTable rows={data.discountPolicies} columns={policyColumns} rowKey={row => row.id} ariaLabel=\"Discount policy versions\"\n emptyState={`No discount policy versions are recorded for ${scope}.`} />\n {data.invalid.length ? <p role=\"alert\">{data.invalid.length} recorded version{data.invalid.length === 1 ? \" no longer normalizes and blocks\" : \"s no longer normalize and block\"}\n {\" \"}issuance: {data.invalid.map(item => `${item.collection} ${item.id} (${item.error})`).join(\"; \")}.</p> : null}\n </Panel>\n </>;\n}\n"],"mappings":"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","names":["useEffect","useMemo","useRef","useState","useEffect","useState","jsx","jsxs","jsx","jsxs","useState","useEffect","jsxs","jsx","Tabs","useState","Button","useState","useCallback","useEffect","useState","Fragment","jsx","jsxs","useState","Fragment","jsx","jsxs","Button","useState","Fragment","jsx","jsxs","money","useState","Button","Fragment","jsx","jsxs","useState","money","Button","useState","Button","Fragment","jsx","jsxs","useState","Button","Field","Select","Fragment","jsx","jsxs","useState","Button","Field","Select","useState","Button","jsx","jsxs","useState","Button","useState","Button","Field","Select","Fragment","jsx","jsxs","useState","Field","Select","Button","Button","Field","Select","useState","jsx","jsxs","Fragment","jsx","jsxs","useState","Button","jsx","jsxs","useState","Button","useEffect","useState","Button","Field","Select","jsx","jsxs","useState","useEffect","Field","Select","Button","useState","jsx","jsxs","useState","useCallback","useEffect","useState","parseCrmDiscussionReference","jsx","useCallback","useEffect","useState","Button","Field","Select","jsx","jsxs","useState","Field","Select","Button","useCallback","useEffect","useState","Button","Fragment","jsx","jsxs","useState","Button","Fragment","jsx","jsxs","jsx","DataTable","Field","Select","useEffect","useState","Button","Field","Textarea","useState","jsx","jsxs","useState","Field","Textarea","Button","jsx","jsxs","useState","columns","DataTable","useEffect","Field","Select","StatBand","StepPipeline","jsx","jsxs","StatBand","StepPipeline","useEffect","useRef","useState","Field","Input","Select","jsx","jsxs","useState","Field","Input","Select","useRef","useEffect","Tabs","useState","Button","Field","Input","jsx","jsxs","useState","Field","Input","Button","useEffect","useId","useMemo","useState","Field","Input","Select","Textarea","jsx","jsxs","useState","useEffect","useMemo","Select","Input","useId","Field","Textarea","useState","Button","Checkbox","DataTable","Field","Input","Textarea","useState","Button","Field","Input","Textarea","jsx","jsxs","useState","resolve","Button","Field","Textarea","Input","jsx","jsxs","useState","Field","Input","Button","Checkbox","Textarea","DataTable","useEffect","useState","jsx","jsxs","useState","useEffect","document","jsx","Tabs","jsx","Tabs","ThemeScope","jsx","jsxs","ThemeScope","workspace","useEffect","useState","jsx","jsxs","useMemo","useState","useEffect","useRef","useState","Button","Fragment","jsx","jsxs","when","useState","Button","Button","Field","Select","useRef","useState","Fragment","jsx","jsxs","useState","useRef","Field","Select","Button","useState","Button","DataTable","jsx","jsxs","money","columns","Button","useState","DataTable","DataTable","Fragment","jsx","jsxs","money","DataTable"]}