@geenius/adapters 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +79 -42
- package/package.json +23 -4
- package/packages/convex/README.md +1 -1
- package/packages/convex/dist/index.cjs +300 -0
- package/packages/convex/dist/index.cjs.map +1 -0
- package/packages/convex/dist/index.d.cts +231 -0
- package/packages/convex/dist/index.d.ts +231 -0
- package/packages/convex/dist/index.js +263 -0
- package/packages/convex/dist/index.js.map +1 -0
- package/packages/react/README.md +1 -1
- package/packages/react/dist/index.d.mts +106 -0
- package/packages/react/dist/index.d.ts +106 -0
- package/packages/react/dist/index.js +611 -0
- package/packages/react/dist/index.js.map +1 -0
- package/packages/react/dist/index.mjs +570 -0
- package/packages/react/dist/index.mjs.map +1 -0
- package/packages/react-css/README.md +1 -1
- package/packages/react-css/dist/index.cjs +515 -0
- package/packages/react-css/dist/index.cjs.map +1 -0
- package/packages/react-css/dist/index.d.cts +105 -0
- package/packages/react-css/dist/index.d.ts +105 -0
- package/packages/react-css/dist/index.js +467 -0
- package/packages/react-css/dist/index.js.map +1 -0
- package/packages/shared/README.md +1 -1
- package/packages/shared/dist/index.d.mts +625 -0
- package/packages/shared/dist/index.d.ts +625 -0
- package/packages/shared/dist/index.js +1567 -0
- package/packages/shared/dist/index.js.map +1 -0
- package/packages/shared/dist/index.mjs +1489 -0
- package/packages/shared/dist/index.mjs.map +1 -0
- package/packages/solidjs/README.md +1 -1
- package/packages/solidjs/dist/index.d.mts +97 -0
- package/packages/solidjs/dist/index.d.ts +97 -0
- package/packages/solidjs/dist/index.js +250 -0
- package/packages/solidjs/dist/index.js.map +1 -0
- package/packages/solidjs/dist/index.mjs +202 -0
- package/packages/solidjs/dist/index.mjs.map +1 -0
- package/packages/solidjs-css/README.md +1 -1
- package/packages/solidjs-css/dist/index.cjs +343 -0
- package/packages/solidjs-css/dist/index.cjs.map +1 -0
- package/packages/solidjs-css/dist/index.d.cts +67 -0
- package/packages/solidjs-css/dist/index.d.ts +67 -0
- package/packages/solidjs-css/dist/index.js +326 -0
- package/packages/solidjs-css/dist/index.js.map +1 -0
- package/.changeset/config.json +0 -11
- package/.github/CODEOWNERS +0 -1
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -16
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -11
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -10
- package/.github/dependabot.yml +0 -11
- package/.github/workflows/ci.yml +0 -23
- package/.github/workflows/release.yml +0 -29
- package/.nvmrc +0 -1
- package/.project/ACCOUNT.yaml +0 -4
- package/.project/IDEAS.yaml +0 -7
- package/.project/PROJECT.yaml +0 -11
- package/.project/ROADMAP.yaml +0 -15
- package/CODE_OF_CONDUCT.md +0 -16
- package/CONTRIBUTING.md +0 -26
- package/SECURITY.md +0 -15
- package/SUPPORT.md +0 -8
- package/packages/convex/package.json +0 -42
- package/packages/convex/src/adapter.ts +0 -39
- package/packages/convex/src/index.ts +0 -19
- package/packages/convex/src/mutations.ts +0 -142
- package/packages/convex/src/queries.ts +0 -106
- package/packages/convex/src/schema.ts +0 -54
- package/packages/convex/src/types.ts +0 -20
- package/packages/convex/tsconfig.json +0 -11
- package/packages/convex/tsup.config.ts +0 -10
- package/packages/react/package.json +0 -45
- package/packages/react/src/components/AdapterCard.tsx +0 -49
- package/packages/react/src/components/AdapterConfigForm.tsx +0 -118
- package/packages/react/src/components/AdapterList.tsx +0 -84
- package/packages/react/src/components/AdapterStatusBadge.tsx +0 -30
- package/packages/react/src/components/index.ts +0 -4
- package/packages/react/src/hooks/index.ts +0 -75
- package/packages/react/src/index.tsx +0 -44
- package/packages/react/src/pages/AdapterDetailPage.tsx +0 -133
- package/packages/react/src/pages/AdaptersPage.tsx +0 -111
- package/packages/react/src/pages/index.ts +0 -2
- package/packages/react/src/provider/AdapterProvider.tsx +0 -115
- package/packages/react/src/provider/index.ts +0 -2
- package/packages/react/tsconfig.json +0 -18
- package/packages/react/tsup.config.ts +0 -10
- package/packages/react-css/package.json +0 -44
- package/packages/react-css/src/adapters.css +0 -1576
- package/packages/react-css/src/components/AdapterCard.tsx +0 -34
- package/packages/react-css/src/components/AdapterConfigForm.tsx +0 -63
- package/packages/react-css/src/components/AdapterList.tsx +0 -40
- package/packages/react-css/src/components/AdapterStatusBadge.tsx +0 -21
- package/packages/react-css/src/components/index.ts +0 -4
- package/packages/react-css/src/hooks/index.ts +0 -75
- package/packages/react-css/src/index.tsx +0 -25
- package/packages/react-css/src/pages/AdapterDetailPage.tsx +0 -133
- package/packages/react-css/src/pages/AdaptersPage.tsx +0 -111
- package/packages/react-css/src/pages/index.ts +0 -2
- package/packages/react-css/src/provider/AdapterProvider.tsx +0 -115
- package/packages/react-css/src/provider/index.ts +0 -2
- package/packages/react-css/src/styles.css +0 -494
- package/packages/react-css/tsconfig.json +0 -19
- package/packages/react-css/tsup.config.ts +0 -2
- package/packages/shared/package.json +0 -39
- package/packages/shared/src/__tests__/adapters.test.ts +0 -545
- package/packages/shared/src/admin/index.ts +0 -2
- package/packages/shared/src/admin/interface.ts +0 -34
- package/packages/shared/src/admin/localStorage.ts +0 -109
- package/packages/shared/src/ai/anthropic.ts +0 -123
- package/packages/shared/src/ai/cloudflare-gateway.ts +0 -130
- package/packages/shared/src/ai/gemini.ts +0 -181
- package/packages/shared/src/ai/index.ts +0 -14
- package/packages/shared/src/ai/interface.ts +0 -11
- package/packages/shared/src/ai/localStorage.ts +0 -78
- package/packages/shared/src/ai/ollama.ts +0 -143
- package/packages/shared/src/ai/openai.ts +0 -120
- package/packages/shared/src/ai/vercel-ai.ts +0 -101
- package/packages/shared/src/auth/better-auth.ts +0 -118
- package/packages/shared/src/auth/clerk.ts +0 -151
- package/packages/shared/src/auth/convex-auth.ts +0 -125
- package/packages/shared/src/auth/index.ts +0 -10
- package/packages/shared/src/auth/interface.ts +0 -17
- package/packages/shared/src/auth/localStorage.ts +0 -125
- package/packages/shared/src/auth/supabase-auth.ts +0 -136
- package/packages/shared/src/config.ts +0 -57
- package/packages/shared/src/constants.ts +0 -122
- package/packages/shared/src/db/convex.ts +0 -146
- package/packages/shared/src/db/index.ts +0 -10
- package/packages/shared/src/db/interface.ts +0 -13
- package/packages/shared/src/db/localStorage.ts +0 -91
- package/packages/shared/src/db/mongodb.ts +0 -125
- package/packages/shared/src/db/neon.ts +0 -171
- package/packages/shared/src/db/supabase.ts +0 -158
- package/packages/shared/src/index.ts +0 -117
- package/packages/shared/src/payments/index.ts +0 -4
- package/packages/shared/src/payments/interface.ts +0 -11
- package/packages/shared/src/payments/localStorage.ts +0 -81
- package/packages/shared/src/payments/stripe.ts +0 -177
- package/packages/shared/src/storage/convex.ts +0 -113
- package/packages/shared/src/storage/index.ts +0 -14
- package/packages/shared/src/storage/interface.ts +0 -11
- package/packages/shared/src/storage/localStorage.ts +0 -95
- package/packages/shared/src/storage/minio.ts +0 -47
- package/packages/shared/src/storage/r2.ts +0 -123
- package/packages/shared/src/storage/s3.ts +0 -128
- package/packages/shared/src/storage/supabase-storage.ts +0 -116
- package/packages/shared/src/storage/uploadthing.ts +0 -126
- package/packages/shared/src/styles/adapters.css +0 -494
- package/packages/shared/src/tier-gate.ts +0 -119
- package/packages/shared/src/types.ts +0 -162
- package/packages/shared/tsconfig.json +0 -18
- package/packages/shared/tsup.config.ts +0 -9
- package/packages/shared/vitest.config.ts +0 -14
- package/packages/solidjs/package.json +0 -44
- package/packages/solidjs/src/components/AdapterCard.tsx +0 -24
- package/packages/solidjs/src/components/AdapterConfigForm.tsx +0 -54
- package/packages/solidjs/src/components/AdapterList.tsx +0 -28
- package/packages/solidjs/src/components/AdapterStatusBadge.tsx +0 -20
- package/packages/solidjs/src/components/index.ts +0 -4
- package/packages/solidjs/src/index.tsx +0 -17
- package/packages/solidjs/src/pages/AdapterDetailPage.tsx +0 -38
- package/packages/solidjs/src/pages/AdaptersPage.tsx +0 -39
- package/packages/solidjs/src/pages/index.ts +0 -2
- package/packages/solidjs/src/primitives/index.ts +0 -78
- package/packages/solidjs/src/provider/AdapterProvider.tsx +0 -62
- package/packages/solidjs/src/provider/index.ts +0 -2
- package/packages/solidjs/tsconfig.json +0 -20
- package/packages/solidjs/tsup.config.ts +0 -10
- package/packages/solidjs-css/package.json +0 -43
- package/packages/solidjs-css/src/adapters.css +0 -1576
- package/packages/solidjs-css/src/components/AdapterCard.tsx +0 -43
- package/packages/solidjs-css/src/components/AdapterConfigForm.tsx +0 -119
- package/packages/solidjs-css/src/components/AdapterList.tsx +0 -68
- package/packages/solidjs-css/src/components/AdapterStatusBadge.tsx +0 -24
- package/packages/solidjs-css/src/components/index.ts +0 -8
- package/packages/solidjs-css/src/index.tsx +0 -30
- package/packages/solidjs-css/src/pages/AdapterDetailPage.tsx +0 -107
- package/packages/solidjs-css/src/pages/AdaptersPage.tsx +0 -94
- package/packages/solidjs-css/src/pages/index.ts +0 -4
- package/packages/solidjs-css/src/primitives/index.ts +0 -1
- package/packages/solidjs-css/src/provider/AdapterProvider.tsx +0 -61
- package/packages/solidjs-css/src/provider/index.ts +0 -2
- package/packages/solidjs-css/tsconfig.json +0 -20
- package/packages/solidjs-css/tsup.config.ts +0 -2
- package/pnpm-workspace.yaml +0 -2
- package/tsconfig.json +0 -17
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx","../src/provider/AdapterProvider.tsx","../src/hooks/index.ts","../src/components/AdapterStatusBadge.tsx","../src/components/AdapterCard.tsx","../src/components/AdapterList.tsx","../src/components/AdapterConfigForm.tsx","../src/pages/AdaptersPage.tsx","../src/pages/AdapterDetailPage.tsx"],"sourcesContent":["// @geenius/adapters-react — Barrel export\n\n/**\n * @geenius/adapters-react\n *\n * React hooks, components, and pages for the Geenius adapter ecosystem.\n * Wraps all 6 adapter domains (DB, Auth, AI, Storage, Payments, Admin)\n * behind a unified provider/hook API.\n */\n\n// Re-export shared types for convenience\nexport type {\n AuthUser, AuthSession, OAuthProvider, ListOptions, QueryFilter,\n Plan, Subscription, CheckoutParams, CheckoutResult,\n ChatMessage, AiOptions, ChatResponse, StoredFile,\n AdapterDomain, DomainAdapterConfig, AdapterConfig,\n AdapterStatusType, AdapterStatusInfo, AdapterRegistryEntry,\n AuthAdapter, DbAdapter, PaymentsAdapter, AiAdapter, FileStorageAdapter,\n AdminAdapter, AdminMetrics, ManagedUser,\n} from '@geenius/adapters-shared'\n\nexport {\n ADAPTER_DOMAINS, DOMAIN_LABELS, DOMAIN_ICONS, DOMAIN_DESCRIPTIONS,\n getProvidersForDomain, getProviderMeta,\n configureAdapters, getAdapterConfig, isAdaptersConfigured,\n} from '@geenius/adapters-shared'\n\n// Provider\nexport { AdapterProvider, useAdapterContext } from './provider'\nexport type { AdapterProviderProps, AdapterSet, AdapterContextValue } from './provider'\n\n// Hooks\nexport {\n useDb, useAuth, usePayments, useAi, useStorage, useAdmin,\n useAdapters, useAdapterStatuses, useAdapterStatus, useIsAdapterReady,\n} from './hooks'\n\n// Components\nexport { AdapterStatusBadge, AdapterCard, AdapterList, AdapterConfigForm } from './components'\nexport type { AdapterStatusBadgeProps, AdapterCardProps, AdapterListProps, AdapterConfigFormProps } from './components'\n\n// Pages\nexport { AdaptersPage, AdapterDetailPage } from './pages'\nexport type { AdaptersPageProps, AdapterDetailPageProps } from './pages'\n","// @geenius/adapters-react — Provider\n\n'use client'\n\nimport { createContext, useContext, useState, useCallback, useEffect, useMemo, type ReactNode } from 'react'\nimport type {\n AuthAdapter, DbAdapter, PaymentsAdapter, AiAdapter, FileStorageAdapter, AdminAdapter,\n AdapterDomain, AdapterStatusType, AdapterStatusInfo,\n} from '@geenius/adapters-shared'\nimport { ADAPTER_DOMAINS, DOMAIN_LABELS } from '@geenius/adapters-shared'\n\n// ─── Adapter Set ─────────────────────────────────────────────────────────────\n\nexport interface AdapterSet {\n db?: DbAdapter\n auth?: AuthAdapter\n payments?: PaymentsAdapter\n ai?: AiAdapter\n storage?: FileStorageAdapter\n admin?: AdminAdapter\n}\n\n// ─── Context ─────────────────────────────────────────────────────────────────\n\nexport interface AdapterContextValue {\n adapters: AdapterSet\n statuses: Record<AdapterDomain, AdapterStatusInfo>\n getAdapter: <K extends keyof AdapterSet>(domain: K) => NonNullable<AdapterSet[K]>\n isReady: (domain: AdapterDomain) => boolean\n isLoading: boolean\n}\n\nconst AdapterContext = createContext<AdapterContextValue | null>(null)\n\n// ─── Provider ────────────────────────────────────────────────────────────────\n\nexport interface AdapterProviderProps {\n adapters: AdapterSet\n children: ReactNode\n /** Check adapter health on mount */\n healthCheck?: boolean\n}\n\nexport function AdapterProvider({ adapters, children, healthCheck = false }: AdapterProviderProps) {\n const [isLoading, setIsLoading] = useState(healthCheck)\n const [statuses, setStatuses] = useState<Record<AdapterDomain, AdapterStatusInfo>>(() => {\n const initial = {} as Record<AdapterDomain, AdapterStatusInfo>\n for (const domain of ADAPTER_DOMAINS) {\n const adapter = adapters[domain as keyof AdapterSet]\n initial[domain] = {\n domain,\n provider: adapter ? 'configured' : 'none',\n status: adapter ? 'connected' : 'disconnected',\n lastCheckedAt: Date.now(),\n }\n }\n return initial\n })\n\n useEffect(() => {\n if (!healthCheck) return\n setIsLoading(true)\n // Simple health check — verify adapters are callable\n const checks = ADAPTER_DOMAINS.map(async (domain) => {\n const adapter = adapters[domain as keyof AdapterSet]\n if (!adapter) return\n try {\n setStatuses(prev => ({ ...prev, [domain]: { ...prev[domain], status: 'initializing' } }))\n // Basic connectivity test for each domain\n if (domain === 'auth' && (adapter as AuthAdapter).getSession) {\n await (adapter as AuthAdapter).getSession()\n }\n setStatuses(prev => ({\n ...prev,\n [domain]: { ...prev[domain], status: 'connected' as AdapterStatusType, lastCheckedAt: Date.now() },\n }))\n } catch (e) {\n setStatuses(prev => ({\n ...prev,\n [domain]: {\n ...prev[domain],\n status: 'error' as AdapterStatusType,\n error: e instanceof Error ? e.message : 'Health check failed',\n lastCheckedAt: Date.now(),\n },\n }))\n }\n })\n Promise.allSettled(checks).finally(() => setIsLoading(false))\n }, [adapters, healthCheck])\n\n const getAdapter = useCallback(<K extends keyof AdapterSet>(domain: K): NonNullable<AdapterSet[K]> => {\n const adapter = adapters[domain]\n if (!adapter) throw new Error(`${DOMAIN_LABELS[domain as AdapterDomain] ?? domain} adapter not configured in <AdapterProvider>`)\n return adapter as NonNullable<AdapterSet[K]>\n }, [adapters])\n\n const isReady = useCallback((domain: AdapterDomain) => {\n return !!adapters[domain as keyof AdapterSet] && statuses[domain]?.status === 'connected'\n }, [adapters, statuses])\n\n const value = useMemo<AdapterContextValue>(() => ({\n adapters, statuses, getAdapter, isReady, isLoading,\n }), [adapters, statuses, getAdapter, isReady, isLoading])\n\n return <AdapterContext.Provider value={value}>{children}</AdapterContext.Provider>\n}\n\n// ─── Context Hook ────────────────────────────────────────────────────────────\n\nexport function useAdapterContext(): AdapterContextValue {\n const ctx = useContext(AdapterContext)\n if (!ctx) throw new Error('useAdapterContext must be used within <AdapterProvider>')\n return ctx\n}\n","// @geenius/adapters-react — Hooks\n\nimport { useMemo } from 'react'\nimport { useAdapterContext } from '../provider/AdapterProvider'\nimport type {\n AuthAdapter, DbAdapter, PaymentsAdapter, AiAdapter, FileStorageAdapter, AdminAdapter,\n AdapterDomain, AdapterStatusInfo,\n} from '@geenius/adapters-shared'\n\n// ─── Domain-specific hooks ───────────────────────────────────────────────────\n\n/** Access the database adapter */\nexport function useDb(): DbAdapter {\n return useAdapterContext().getAdapter('db')\n}\n\n/** Access the auth adapter */\nexport function useAuth(): AuthAdapter {\n return useAdapterContext().getAdapter('auth')\n}\n\n/** Access the payments adapter */\nexport function usePayments(): PaymentsAdapter {\n return useAdapterContext().getAdapter('payments')\n}\n\n/** Access the AI adapter */\nexport function useAi(): AiAdapter {\n return useAdapterContext().getAdapter('ai')\n}\n\n/** Access the file storage adapter */\nexport function useStorage(): FileStorageAdapter {\n return useAdapterContext().getAdapter('storage')\n}\n\n/** Access the admin adapter */\nexport function useAdmin(): AdminAdapter {\n return useAdapterContext().getAdapter('admin')\n}\n\n// ─── Status hooks ────────────────────────────────────────────────────────────\n\n/** Get all adapter statuses */\nexport function useAdapterStatuses(): Record<AdapterDomain, AdapterStatusInfo> {\n return useAdapterContext().statuses\n}\n\n/** Get status for a specific adapter domain */\nexport function useAdapterStatus(domain: AdapterDomain): AdapterStatusInfo {\n return useAdapterContext().statuses[domain]\n}\n\n/** Check if adapter is ready */\nexport function useIsAdapterReady(domain: AdapterDomain): boolean {\n return useAdapterContext().isReady(domain)\n}\n\n// ─── Full adapters hook ──────────────────────────────────────────────────────\n\n/** Access all adapters at once */\nexport function useAdapters() {\n const ctx = useAdapterContext()\n return useMemo(() => ({\n db: ctx.adapters.db,\n auth: ctx.adapters.auth,\n payments: ctx.adapters.payments,\n ai: ctx.adapters.ai,\n storage: ctx.adapters.storage,\n admin: ctx.adapters.admin,\n statuses: ctx.statuses,\n isLoading: ctx.isLoading,\n isReady: ctx.isReady,\n }), [ctx])\n}\n","// @geenius/adapters-react — AdapterStatusBadge\n\nimport type { AdapterStatusType } from '@geenius/adapters-shared'\n\nconst STATUS_STYLES: Record<AdapterStatusType, { bg: string; text: string; dot: string; label: string }> = {\n connected: { bg: 'bg-emerald-500/10', text: 'text-emerald-400', dot: 'bg-emerald-400', label: 'Connected' },\n disconnected: { bg: 'bg-white/5', text: 'text-white/40', dot: 'bg-white/30', label: 'Disconnected' },\n error: { bg: 'bg-red-500/10', text: 'text-red-400', dot: 'bg-red-400', label: 'Error' },\n initializing: { bg: 'bg-amber-500/10', text: 'text-amber-400', dot: 'bg-amber-400', label: 'Initializing' },\n}\n\nexport interface AdapterStatusBadgeProps {\n status: AdapterStatusType\n showLabel?: boolean\n size?: 'sm' | 'md'\n className?: string\n}\n\nexport function AdapterStatusBadge({ status, showLabel = true, size = 'sm', className = '' }: AdapterStatusBadgeProps) {\n const s = STATUS_STYLES[status]\n const dotSize = size === 'sm' ? 'h-1.5 w-1.5' : 'h-2 w-2'\n const textSize = size === 'sm' ? 'text-[0.625rem]' : 'text-xs'\n\n return (\n <span className={`inline-flex items-center gap-1.5 rounded-full px-2 py-0.5 ${s.bg} ${className}`}>\n <span className={`${dotSize} rounded-full ${s.dot} ${status === 'initializing' ? 'animate-pulse' : ''}`} />\n {showLabel && <span className={`${textSize} font-semibold uppercase tracking-wider ${s.text}`}>{s.label}</span>}\n </span>\n )\n}\n","// @geenius/adapters-react — AdapterCard\n\nimport type { AdapterDomain, AdapterStatusInfo } from '@geenius/adapters-shared'\nimport { DOMAIN_LABELS, DOMAIN_ICONS, DOMAIN_DESCRIPTIONS } from '@geenius/adapters-shared'\nimport { AdapterStatusBadge } from './AdapterStatusBadge'\n\nexport interface AdapterCardProps {\n domain: AdapterDomain\n status: AdapterStatusInfo\n onClick?: () => void\n className?: string\n}\n\nexport function AdapterCard({ domain, status, onClick, className = '' }: AdapterCardProps) {\n const label = DOMAIN_LABELS[domain]\n const icon = DOMAIN_ICONS[domain]\n const desc = DOMAIN_DESCRIPTIONS[domain]\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={`group flex w-full items-start gap-4 rounded-2xl border border-white/10 bg-white/[0.03] p-5 text-left backdrop-blur-sm transition-all hover:border-white/15 hover:bg-white/[0.05] ${className}`}\n aria-label={`${label} adapter — ${status.status}`}\n >\n <div className=\"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-xl bg-white/5 text-2xl transition-transform group-hover:scale-105\">\n {icon}\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center justify-between gap-2\">\n <h3 className=\"truncate text-sm font-bold text-white/90\">{label}</h3>\n <AdapterStatusBadge status={status.status} />\n </div>\n <p className=\"mt-0.5 text-xs text-white/40 line-clamp-2\">{desc}</p>\n {status.provider && status.provider !== 'none' && (\n <div className=\"mt-2 flex items-center gap-2\">\n <span className=\"rounded-md bg-white/5 px-2 py-0.5 text-[0.625rem] font-semibold text-white/50\">{status.provider}</span>\n {status.latency && (\n <span className=\"text-[0.625rem] text-white/30\">{status.latency}ms</span>\n )}\n </div>\n )}\n {status.error && (\n <p className=\"mt-1.5 truncate text-[0.625rem] text-red-400/80\">{status.error}</p>\n )}\n </div>\n </button>\n )\n}\n","// @geenius/adapters-react — AdapterList\n\nimport { useState, useMemo } from 'react'\nimport { useAdapters } from '../hooks'\nimport { AdapterCard } from './AdapterCard'\nimport { ADAPTER_DOMAINS, DOMAIN_LABELS } from '@geenius/adapters-shared'\nimport type { AdapterDomain, AdapterStatusType } from '@geenius/adapters-shared'\n\nexport interface AdapterListProps {\n onSelect?: (domain: AdapterDomain) => void\n filterStatus?: AdapterStatusType\n className?: string\n}\n\nexport function AdapterList({ onSelect, filterStatus, className = '' }: AdapterListProps) {\n const { statuses, isLoading } = useAdapters()\n const [search, setSearch] = useState('')\n\n const filteredDomains = useMemo(() => {\n let domains = [...ADAPTER_DOMAINS]\n if (search) {\n const q = search.toLowerCase()\n domains = domains.filter((d) => {\n const label = DOMAIN_LABELS[d].toLowerCase()\n const provider = statuses[d]?.provider?.toLowerCase() ?? ''\n return label.includes(q) || provider.includes(q) || d.includes(q)\n })\n }\n if (filterStatus) {\n domains = domains.filter((d) => statuses[d]?.status === filterStatus)\n }\n return domains\n }, [search, filterStatus, statuses])\n\n if (isLoading) {\n return (\n <div className={`space-y-3 ${className}`} role=\"status\" aria-label=\"Loading adapters\">\n {[1, 2, 3, 4].map((i) => (\n <div key={i} className=\"animate-pulse rounded-2xl border border-white/5 bg-white/[0.02] p-5\">\n <div className=\"flex items-start gap-4\">\n <div className=\"h-12 w-12 rounded-xl bg-white/10\" />\n <div className=\"flex-1 space-y-2\">\n <div className=\"h-3 w-24 rounded bg-white/10\" />\n <div className=\"h-2 w-48 rounded bg-white/5\" />\n </div>\n </div>\n </div>\n ))}\n </div>\n )\n }\n\n return (\n <div className={className}>\n <div className=\"mb-4\">\n <input\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Search adapters...\"\n aria-label=\"Search adapters\"\n className=\"w-full rounded-xl border border-white/10 bg-white/[0.02] px-4 py-2.5 text-sm text-white/90 placeholder:text-white/20 focus:border-indigo-500/50 focus:outline-none focus:ring-2 focus:ring-indigo-500/20\"\n />\n </div>\n\n {filteredDomains.length === 0 ? (\n <div className=\"rounded-xl border border-white/5 bg-white/[0.01] p-8 text-center\">\n <p className=\"text-sm text-white/40\">{search ? 'No adapters match your search' : 'No adapters configured'}</p>\n </div>\n ) : (\n <div className=\"grid gap-3 sm:grid-cols-2\" role=\"list\" aria-label=\"Adapter list\">\n {filteredDomains.map((domain) => (\n <AdapterCard\n key={domain}\n domain={domain}\n status={statuses[domain]}\n onClick={() => onSelect?.(domain)}\n />\n ))}\n </div>\n )}\n </div>\n )\n}\n","// @geenius/adapters-react — AdapterConfigForm\n\nimport { useState } from 'react'\nimport type { AdapterDomain, DomainAdapterConfig } from '@geenius/adapters-shared'\nimport { DOMAIN_LABELS, getProvidersForDomain } from '@geenius/adapters-shared'\n\nexport interface AdapterConfigFormProps {\n domain: AdapterDomain\n initialConfig?: DomainAdapterConfig\n onSave: (config: DomainAdapterConfig) => Promise<void> | void\n onCancel?: () => void\n className?: string\n}\n\nexport function AdapterConfigForm({ domain, initialConfig, onSave, onCancel, className = '' }: AdapterConfigFormProps) {\n const providers = getProvidersForDomain(domain)\n const [provider, setProvider] = useState(initialConfig?.provider ?? providers[0]?.id ?? '')\n const [apiKey, setApiKey] = useState(initialConfig?.apiKey ?? '')\n const [baseUrl, setBaseUrl] = useState(initialConfig?.baseUrl ?? '')\n const [isSaving, setIsSaving] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n const selectedMeta = providers.find((p) => p.id === provider)\n const needsApiKey = !['localStorage', 'noop'].includes(provider)\n const needsBaseUrl = ['ollama', 'minio', 'neon', 'supabase'].includes(provider)\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n setError(null)\n if (!provider) { setError('Select a provider'); return }\n if (needsApiKey && !apiKey.trim()) { setError('API key is required'); return }\n setIsSaving(true)\n try {\n await onSave({ provider, apiKey: apiKey || undefined, baseUrl: baseUrl || undefined })\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Failed to save')\n } finally {\n setIsSaving(false)\n }\n }\n\n return (\n <form onSubmit={handleSubmit} className={`space-y-5 rounded-2xl border border-white/10 bg-white/[0.03] p-6 backdrop-blur-sm ${className}`} noValidate>\n <div>\n <h3 className=\"text-lg font-bold text-white/90\">Configure {DOMAIN_LABELS[domain]}</h3>\n <p className=\"mt-1 text-xs text-white/40\">Select and configure your preferred provider.</p>\n </div>\n\n {error && <div className=\"rounded-lg border border-red-500/20 bg-red-500/10 px-4 py-3 text-sm text-red-400\" role=\"alert\">{error}</div>}\n\n <div>\n <label htmlFor={`adapter-${domain}-provider`} className=\"mb-1.5 block text-xs font-semibold uppercase tracking-wider text-white/40\">Provider</label>\n <div className=\"grid gap-2 sm:grid-cols-2\">\n {providers.map((p) => (\n <button\n key={p.id}\n type=\"button\"\n onClick={() => setProvider(p.id)}\n className={`flex flex-col rounded-xl border p-3 text-left transition-all ${\n provider === p.id\n ? 'border-indigo-500/30 bg-indigo-500/10'\n : 'border-white/10 bg-white/[0.02] hover:bg-white/[0.04]'\n }`}\n >\n <span className=\"text-xs font-semibold text-white/80\">{p.name}</span>\n <span className=\"mt-0.5 text-[0.625rem] text-white/40\">{p.description}</span>\n <span className={`mt-1 self-start rounded px-1.5 py-0.5 text-[0.5625rem] font-bold uppercase ${\n p.tier === 'pronto' ? 'bg-emerald-500/10 text-emerald-400' : p.tier === 'lancio' ? 'bg-blue-500/10 text-blue-400' : 'bg-purple-500/10 text-purple-400'\n }`}>{p.tier}</span>\n </button>\n ))}\n </div>\n </div>\n\n {needsApiKey && (\n <div>\n <label htmlFor={`adapter-${domain}-apiKey`} className=\"mb-1.5 block text-xs font-semibold uppercase tracking-wider text-white/40\">API Key</label>\n <input\n id={`adapter-${domain}-apiKey`}\n type=\"password\"\n value={apiKey}\n onChange={(e) => setApiKey(e.target.value)}\n placeholder={`Enter ${selectedMeta?.name ?? provider} API key`}\n autoComplete=\"off\"\n className=\"w-full rounded-xl border border-white/10 bg-white/[0.02] px-4 py-3 text-sm text-white/90 placeholder:text-white/20 focus:border-indigo-500/50 focus:outline-none focus:ring-2 focus:ring-indigo-500/20\"\n />\n </div>\n )}\n\n {needsBaseUrl && (\n <div>\n <label htmlFor={`adapter-${domain}-url`} className=\"mb-1.5 block text-xs font-semibold uppercase tracking-wider text-white/40\">Base URL</label>\n <input\n id={`adapter-${domain}-url`}\n type=\"url\"\n value={baseUrl}\n onChange={(e) => setBaseUrl(e.target.value)}\n placeholder={`https://...`}\n className=\"w-full rounded-xl border border-white/10 bg-white/[0.02] px-4 py-3 text-sm text-white/90 placeholder:text-white/20 focus:border-indigo-500/50 focus:outline-none focus:ring-2 focus:ring-indigo-500/20\"\n />\n </div>\n )}\n\n <div className=\"flex items-center justify-end gap-3 pt-2\">\n {onCancel && (\n <button type=\"button\" onClick={onCancel} className=\"rounded-xl px-5 py-2.5 text-sm font-semibold text-white/50 hover:text-white/70\">Cancel</button>\n )}\n <button\n type=\"submit\"\n disabled={isSaving || !provider}\n className=\"flex items-center gap-2 rounded-xl bg-indigo-500 px-6 py-2.5 text-sm font-semibold text-white hover:bg-indigo-400 disabled:opacity-50\"\n >\n {isSaving ? 'Saving…' : 'Save Configuration'}\n </button>\n </div>\n </form>\n )\n}\n","// @geenius/adapters-react — AdaptersPage\n\nimport { useState } from 'react'\nimport { useAdapters } from '../hooks'\nimport { AdapterList } from '../components/AdapterList'\nimport { AdapterConfigForm } from '../components/AdapterConfigForm'\nimport { AdapterStatusBadge } from '../components/AdapterStatusBadge'\nimport { ADAPTER_DOMAINS, ADAPTER_STATUSES, DOMAIN_LABELS } from '@geenius/adapters-shared'\nimport type { AdapterDomain, AdapterStatusType } from '@geenius/adapters-shared'\n\nexport interface AdaptersPageProps {\n onNavigateDetail?: (domain: AdapterDomain) => void\n className?: string\n}\n\nexport function AdaptersPage({ onNavigateDetail, className = '' }: AdaptersPageProps) {\n const { statuses, isLoading } = useAdapters()\n const [selectedDomain, setSelectedDomain] = useState<AdapterDomain | null>(null)\n const [filterStatus, setFilterStatus] = useState<AdapterStatusType | undefined>()\n\n // Status summary counts\n const counts = {\n connected: ADAPTER_DOMAINS.filter(d => statuses[d]?.status === 'connected').length,\n error: ADAPTER_DOMAINS.filter(d => statuses[d]?.status === 'error').length,\n total: ADAPTER_DOMAINS.length,\n }\n\n if (isLoading) {\n return (\n <div className={`max-w-4xl mx-auto space-y-6 ${className}`}>\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-8 w-48 rounded bg-white/10\" />\n <div className=\"h-4 w-72 rounded bg-white/5\" />\n <div className=\"grid gap-3 sm:grid-cols-3\">{[1,2,3].map(i => <div key={i} className=\"h-20 rounded-2xl bg-white/[0.03]\" />)}</div>\n <div className=\"grid gap-3 sm:grid-cols-2\">{[1,2,3,4].map(i => <div key={i} className=\"h-28 rounded-2xl bg-white/[0.03]\" />)}</div>\n </div>\n </div>\n )\n }\n\n return (\n <div className={`max-w-4xl mx-auto space-y-8 ${className}`}>\n {/* Header */}\n <div>\n <h1 className=\"text-2xl font-extrabold text-white/95 tracking-tight\">Adapters</h1>\n <p className=\"mt-1 text-sm text-white/40\">Manage your infrastructure adapters — database, auth, AI, storage, payments, and admin.</p>\n </div>\n\n {/* Status Summary */}\n <div className=\"grid gap-3 sm:grid-cols-3\">\n <div className=\"rounded-2xl border border-white/10 bg-white/[0.03] p-4 backdrop-blur-sm\">\n <p className=\"text-xs font-semibold uppercase tracking-wider text-white/30\">Total</p>\n <p className=\"mt-1 text-2xl font-extrabold text-white/90\">{counts.total}</p>\n <p className=\"text-[0.625rem] text-white/30\">adapter domains</p>\n </div>\n <div className=\"rounded-2xl border border-emerald-500/10 bg-emerald-500/[0.03] p-4 backdrop-blur-sm\">\n <p className=\"text-xs font-semibold uppercase tracking-wider text-emerald-400/60\">Connected</p>\n <p className=\"mt-1 text-2xl font-extrabold text-emerald-400\">{counts.connected}</p>\n <p className=\"text-[0.625rem] text-emerald-400/40\">active adapters</p>\n </div>\n {counts.error > 0 && (\n <div className=\"rounded-2xl border border-red-500/10 bg-red-500/[0.03] p-4 backdrop-blur-sm\">\n <p className=\"text-xs font-semibold uppercase tracking-wider text-red-400/60\">Errors</p>\n <p className=\"mt-1 text-2xl font-extrabold text-red-400\">{counts.error}</p>\n <p className=\"text-[0.625rem] text-red-400/40\">need attention</p>\n </div>\n )}\n </div>\n\n {/* Filters */}\n <div className=\"flex items-center gap-2\">\n <button\n onClick={() => setFilterStatus(undefined)}\n className={`rounded-lg px-3 py-1.5 text-xs font-semibold transition-all ${!filterStatus ? 'bg-white/10 text-white/80' : 'text-white/30 hover:text-white/50'}`}\n >All</button>\n {ADAPTER_STATUSES.map(s => (\n <button\n key={s}\n onClick={() => setFilterStatus(s)}\n className={`flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs font-semibold transition-all ${filterStatus === s ? 'bg-white/10 text-white/80' : 'text-white/30 hover:text-white/50'}`}\n >\n <AdapterStatusBadge status={s} showLabel={false} size=\"sm\" />\n {s}\n </button>\n ))}\n </div>\n\n {/* Adapter Grid */}\n <AdapterList\n onSelect={(domain) => {\n if (onNavigateDetail) { onNavigateDetail(domain) }\n else { setSelectedDomain(domain) }\n }}\n filterStatus={filterStatus}\n />\n\n {/* Inline Config Modal */}\n {selectedDomain && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm\" onClick={() => setSelectedDomain(null)}>\n <div className=\"max-w-lg w-full mx-4\" onClick={e => e.stopPropagation()}>\n <AdapterConfigForm\n domain={selectedDomain}\n onSave={async () => { setSelectedDomain(null) }}\n onCancel={() => setSelectedDomain(null)}\n />\n </div>\n </div>\n )}\n </div>\n )\n}\n","// @geenius/adapters-react — AdapterDetailPage\n\nimport { useState } from 'react'\nimport { useAdapters, useAdapterStatus } from '../hooks'\nimport { AdapterStatusBadge } from '../components/AdapterStatusBadge'\nimport { AdapterConfigForm } from '../components/AdapterConfigForm'\nimport type { AdapterDomain } from '@geenius/adapters-shared'\nimport { DOMAIN_LABELS, DOMAIN_ICONS, DOMAIN_DESCRIPTIONS, getProvidersForDomain } from '@geenius/adapters-shared'\n\nexport interface AdapterDetailPageProps {\n domain: AdapterDomain\n onBack?: () => void\n className?: string\n}\n\nexport function AdapterDetailPage({ domain, onBack, className = '' }: AdapterDetailPageProps) {\n const { isLoading } = useAdapters()\n const status = useAdapterStatus(domain)\n const [isEditing, setIsEditing] = useState(false)\n const providers = getProvidersForDomain(domain)\n\n const label = DOMAIN_LABELS[domain]\n const icon = DOMAIN_ICONS[domain]\n const desc = DOMAIN_DESCRIPTIONS[domain]\n\n if (isLoading) {\n return (\n <div className={`max-w-3xl mx-auto space-y-6 ${className}`}>\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-6 w-32 rounded bg-white/10\" />\n <div className=\"h-40 rounded-2xl bg-white/[0.03]\" />\n <div className=\"h-60 rounded-2xl bg-white/[0.03]\" />\n </div>\n </div>\n )\n }\n\n return (\n <div className={`max-w-3xl mx-auto space-y-8 ${className}`}>\n {/* Back navigation */}\n {onBack && (\n <button onClick={onBack} className=\"flex items-center gap-1.5 text-sm text-white/30 hover:text-white/60 transition-colors\">\n <span>←</span> Back to Adapters\n </button>\n )}\n\n {/* Header */}\n <div className=\"flex items-start gap-5\">\n <div className=\"flex h-16 w-16 items-center justify-center rounded-2xl bg-white/5 text-3xl\">{icon}</div>\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-3\">\n <h1 className=\"text-2xl font-extrabold text-white/95 tracking-tight\">{label}</h1>\n <AdapterStatusBadge status={status.status} size=\"md\" />\n </div>\n <p className=\"mt-1 text-sm text-white/40\">{desc}</p>\n </div>\n </div>\n\n {/* Status Card */}\n <div className=\"rounded-2xl border border-white/10 bg-white/[0.03] p-6 backdrop-blur-sm\">\n <h2 className=\"text-xs font-semibold uppercase tracking-wider text-white/30 mb-4\">Current Status</h2>\n <div className=\"grid gap-4 sm:grid-cols-3\">\n <div>\n <p className=\"text-[0.625rem] text-white/30 uppercase\">Provider</p>\n <p className=\"mt-0.5 text-sm font-semibold text-white/80\">{status.provider !== 'none' ? status.provider : '—'}</p>\n </div>\n <div>\n <p className=\"text-[0.625rem] text-white/30 uppercase\">Status</p>\n <p className=\"mt-0.5\"><AdapterStatusBadge status={status.status} /></p>\n </div>\n <div>\n <p className=\"text-[0.625rem] text-white/30 uppercase\">Last Checked</p>\n <p className=\"mt-0.5 text-sm text-white/60\">{status.lastCheckedAt ? new Date(status.lastCheckedAt).toLocaleTimeString() : '—'}</p>\n </div>\n </div>\n {status.error && (\n <div className=\"mt-4 rounded-lg border border-red-500/20 bg-red-500/10 px-4 py-3 text-sm text-red-400\">\n <span className=\"font-semibold\">Error:</span> {status.error}\n </div>\n )}\n {status.latency && (\n <div className=\"mt-4\">\n <p className=\"text-[0.625rem] text-white/30 uppercase mb-1\">Latency</p>\n <div className=\"h-2 w-full rounded-full bg-white/5 overflow-hidden\">\n <div className={`h-full rounded-full transition-all ${status.latency < 100 ? 'bg-emerald-400' : status.latency < 500 ? 'bg-amber-400' : 'bg-red-400'}`}\n style={{ width: `${Math.min(100, (status.latency / 1000) * 100)}%` }} />\n </div>\n <p className=\"mt-1 text-xs text-white/40\">{status.latency}ms</p>\n </div>\n )}\n </div>\n\n {/* Available Providers */}\n <div className=\"rounded-2xl border border-white/10 bg-white/[0.03] p-6 backdrop-blur-sm\">\n <div className=\"flex items-center justify-between mb-4\">\n <h2 className=\"text-xs font-semibold uppercase tracking-wider text-white/30\">Available Providers</h2>\n <span className=\"text-xs text-white/20\">{providers.length} providers</span>\n </div>\n <div className=\"divide-y divide-white/5\">\n {providers.map(p => (\n <div key={p.id} className=\"flex items-center justify-between py-3 first:pt-0 last:pb-0\">\n <div>\n <p className=\"text-sm font-semibold text-white/80\">{p.name}</p>\n <p className=\"text-xs text-white/30\">{p.description}</p>\n </div>\n <span className={`self-start rounded px-2 py-0.5 text-[0.625rem] font-bold uppercase ${\n p.tier === 'pronto' ? 'bg-emerald-500/10 text-emerald-400' : p.tier === 'lancio' ? 'bg-blue-500/10 text-blue-400' : 'bg-purple-500/10 text-purple-400'\n }`}>{p.tier}</span>\n </div>\n ))}\n </div>\n </div>\n\n {/* Configuration */}\n <div>\n {isEditing ? (\n <AdapterConfigForm\n domain={domain}\n onSave={async () => setIsEditing(false)}\n onCancel={() => setIsEditing(false)}\n />\n ) : (\n <button\n onClick={() => setIsEditing(true)}\n className=\"w-full rounded-2xl border border-dashed border-white/10 bg-white/[0.01] p-6 text-center text-sm text-white/30 hover:border-white/20 hover:text-white/50 transition-all\"\n >\n ⚙️ Configure {label} Adapter\n </button>\n )}\n </div>\n </div>\n )\n}\n"],"mappings":"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","names":["import_adapters_shared","import_react","import_jsx_runtime","import_adapters_shared","import_jsx_runtime","import_react","import_adapters_shared","import_jsx_runtime","import_react","import_adapters_shared","import_jsx_runtime","e","import_react","import_adapters_shared","import_jsx_runtime","import_react","import_adapters_shared","import_jsx_runtime"]}
|