{"version":3,"sources":["../src/bridges/index.tsx","../src/components/AdapterStatusBadge.tsx","../src/components/AdapterCard.tsx","../src/components/AdapterConfigForm.tsx","../src/provider/index.tsx","../src/hooks/index.ts","../src/components/AdapterList.tsx","../src/pages/AdapterDetailPage.tsx","../src/pages/AdaptersPage.tsx"],"names":["jsxs","Space","jsx","Progress","Spin","Typography","Component","Alert","Button","notification","useRef","useMemo","useEffect","Fragment","theme","DOMAIN_LABELS","getProvidersForDomain","useState","createContext","useContext","AdapterContextError","ADAPTER_DOMAINS","DOMAIN_ICONS","DOMAIN_DESCRIPTIONS","useId","ADAPTER_STATUSES"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @module bridges\n * @package @geenius/adapters/react-ant\n * @description Ant Design bridge components for adapter loading, error, and\n * notification surfaces. Adapter contracts stay delegated to the React\n * reference variant; this module only owns Ant rendering affordances.\n */\n\n\"use client\";\n\nimport Alert from \"antd/lib/alert/index.js\";\nimport Button from \"antd/lib/button/index.js\";\nimport notification, {\n  type ArgsProps as NotificationArgsProps,\n} from \"antd/lib/notification/index.js\";\nimport Progress, {\n  type ProgressProps,\n} from \"antd/lib/progress/index.js\";\nimport Space from \"antd/lib/space/index.js\";\nimport Spin, { type SpinProps } from \"antd/lib/spin/index.js\";\nimport Typography from \"antd/lib/typography/index.js\";\nimport {\n  Component,\n  type ErrorInfo,\n  type JSX,\n  type ReactNode,\n  useEffect,\n  useMemo,\n  useRef,\n} from \"react\";\n\ntype LoadingBridgeVariant = \"spin\" | \"progress\";\ntype ToastBridgePlacement = NonNullable<NotificationArgsProps[\"placement\"]>;\n\nfunction normalizePercent(progress: number | undefined): number | undefined {\n  if (progress === undefined) {\n    return undefined;\n  }\n\n  return Math.min(100, Math.max(0, progress));\n}\n\nexport interface LoadingBridgeProps {\n  loading?: boolean;\n  isLoading?: boolean;\n  label?: ReactNode;\n  description?: ReactNode;\n  progress?: number;\n  variant?: LoadingBridgeVariant;\n  children?: ReactNode;\n  className?: string;\n  spinProps?: SpinProps;\n  progressProps?: ProgressProps;\n}\n\n/**\n * Renders an Ant Design loading affordance for async adapter operations.\n */\nexport function LoadingBridge({\n  loading,\n  isLoading,\n  label = \"Loading adapters\",\n  description,\n  progress,\n  variant = \"spin\",\n  children = null,\n  className,\n  spinProps,\n  progressProps,\n}: LoadingBridgeProps): JSX.Element {\n  const active = isLoading ?? loading ?? true;\n\n  if (!active) {\n    return <>{children}</>;\n  }\n\n  const percent = normalizePercent(progress);\n  const ariaLabel = typeof label === \"string\" ? label : \"Loading adapters\";\n\n  return (\n    <Space\n      aria-label={ariaLabel}\n      aria-busy=\"true\"\n      aria-live=\"polite\"\n      className={className}\n      direction=\"vertical\"\n      role=\"status\"\n      size={8}\n    >\n      {variant === \"progress\" ? (\n        <Progress\n          {...progressProps}\n          aria-label={ariaLabel}\n          percent={percent ?? 100}\n          status={percent === undefined ? \"active\" : progressProps?.status}\n        />\n      ) : (\n        <Spin {...spinProps} />\n      )}\n      {label ? <Typography.Text>{label}</Typography.Text> : null}\n      {description ? (\n        <Typography.Text type=\"secondary\">{description}</Typography.Text>\n      ) : null}\n    </Space>\n  );\n}\n\ntype ErrorBoundaryFallback =\n  | ReactNode\n  | ((error: Error, reset: () => void) => ReactNode);\n\nfunction normalizeError(error: unknown): Error {\n  if (error instanceof Error) {\n    return error;\n  }\n\n  return new Error(typeof error === \"string\" ? error : \"Adapter bridge error\");\n}\n\nexport interface ErrorBoundaryBridgeProps {\n  children?: ReactNode;\n  error?: unknown;\n  fallback?: ErrorBoundaryFallback;\n  onError?: (error: Error, info: ErrorInfo) => void;\n  onReset?: () => void;\n  title?: ReactNode;\n  description?: ReactNode;\n  resetLabel?: ReactNode;\n  className?: string;\n}\n\ninterface ErrorBoundaryBridgeState {\n  caughtError: Error | null;\n}\n\n/**\n * Catches React render failures and displays them with Ant alert primitives.\n */\nexport class ErrorBoundaryBridge extends Component<\n  ErrorBoundaryBridgeProps,\n  ErrorBoundaryBridgeState\n> {\n  state: ErrorBoundaryBridgeState = { caughtError: null };\n\n  static getDerivedStateFromError(error: Error): ErrorBoundaryBridgeState {\n    return { caughtError: normalizeError(error) };\n  }\n\n  componentDidCatch(error: Error, info: ErrorInfo): void {\n    this.props.onError?.(normalizeError(error), info);\n  }\n\n  private reset = (): void => {\n    this.props.onReset?.();\n    this.setState({ caughtError: null });\n  };\n\n  render(): ReactNode {\n    const error =\n      this.props.error !== undefined\n        ? normalizeError(this.props.error)\n        : this.state.caughtError;\n\n    if (!error) {\n      return this.props.children;\n    }\n\n    if (typeof this.props.fallback === \"function\") {\n      return this.props.fallback(error, this.reset);\n    }\n\n    if (this.props.fallback) {\n      return this.props.fallback;\n    }\n\n    return (\n      <Alert\n        action={\n          <Button onClick={this.reset} size=\"small\" type=\"primary\">\n            {this.props.resetLabel ?? \"Retry\"}\n          </Button>\n        }\n        className={this.props.className}\n        description={\n          <Space direction=\"vertical\" size={4}>\n            {this.props.description ? (\n              <Typography.Text>{this.props.description}</Typography.Text>\n            ) : null}\n            <Typography.Text>{error.message}</Typography.Text>\n          </Space>\n        }\n        message={this.props.title ?? \"Adapter error\"}\n        role=\"alert\"\n        showIcon\n        type=\"error\"\n      />\n    );\n  }\n}\n\nexport type ToastBridgeStatus =\n  | \"default\"\n  | \"info\"\n  | \"success\"\n  | \"warning\"\n  | \"error\";\n\nexport interface ToastBridgeProps {\n  children?: ReactNode;\n  open?: boolean;\n  message?: ReactNode;\n  description?: ReactNode;\n  status?: ToastBridgeStatus;\n  toastKey?: string;\n  duration?: number;\n  placement?: ToastBridgePlacement;\n  onClose?: () => void;\n  onShown?: () => void;\n  notificationProps?: Omit<\n    NotificationArgsProps,\n    | \"description\"\n    | \"duration\"\n    | \"key\"\n    | \"message\"\n    | \"onClose\"\n    | \"placement\"\n    | \"type\"\n  >;\n}\n\nfunction toastNodeKey(value: ReactNode): string {\n  if (value === null || value === undefined || typeof value === \"boolean\") {\n    return \"\";\n  }\n\n  if (typeof value === \"string\" || typeof value === \"number\") {\n    return String(value);\n  }\n\n  return \"react-node\";\n}\n\n/**\n * Emits Ant Design notifications declaratively while rendering optional\n * children and the required notification context holder.\n */\nexport function ToastBridge({\n  children,\n  open = false,\n  message,\n  description,\n  status = \"default\",\n  toastKey,\n  duration,\n  placement = \"bottomRight\",\n  onClose,\n  onShown,\n  notificationProps,\n}: ToastBridgeProps): JSX.Element {\n  const [api, contextHolder] = notification.useNotification();\n  const emittedKeyRef = useRef<string | null>(null);\n  const dedupeKey = useMemo(\n    () =>\n      toastKey ??\n      [status, toastNodeKey(message), toastNodeKey(description)].join(\":\"),\n    [description, message, status, toastKey],\n  );\n\n  useEffect(() => {\n    if (!open) {\n      emittedKeyRef.current = null;\n      return;\n    }\n\n    if (message === undefined || message === null) {\n      return;\n    }\n\n    if (emittedKeyRef.current === dedupeKey) {\n      return;\n    }\n\n    emittedKeyRef.current = dedupeKey;\n    api.open({\n      ...notificationProps,\n      description,\n      duration,\n      key: dedupeKey,\n      message,\n      onClose,\n      placement,\n      type: status === \"default\" ? undefined : status,\n    });\n    onShown?.();\n  }, [\n    api,\n    dedupeKey,\n    description,\n    duration,\n    message,\n    notificationProps,\n    onClose,\n    onShown,\n    open,\n    placement,\n    status,\n  ]);\n\n  return (\n    <>\n      {contextHolder}\n      {children}\n    </>\n  );\n}\n","/**\n * @module AdapterStatusBadge\n * @package @geenius/adapters/react-ant\n * @description Renders the Ant Design tokenized adapter status badge for the React\n * variant. The badge exposes the shared adapter status vocabulary in a compact,\n * themeable visual treatment.\n */\n\nimport type { AdapterStatusType } from \"@geenius/adapters\";\nimport theme from \"antd/lib/theme/index.js\";\nimport type { JSX } from \"react\";\n\nconst statusLabels: Record<AdapterStatusType, string> = {\n  connected: \"Connected\",\n  disconnected: \"Disconnected\",\n  error: \"Error\",\n  initializing: \"Initializing\",\n};\n\n/**\n * Props for rendering the React adapter status badge.\n *\n * @property status Shared adapter status vocabulary value to display.\n * @property showLabel Whether the human-readable label should be rendered.\n * @property size Visual size variant for the badge and status dot.\n * @property className Optional class name merged into the badge wrapper.\n * @property style Optional inline styles merged into the badge wrapper.\n */\nexport interface AdapterStatusBadgeProps {\n  status: AdapterStatusType;\n  showLabel?: boolean;\n  size?: \"sm\" | \"md\";\n  className?: string;\n  style?: React.CSSProperties;\n}\n\n/**\n * Renders a compact React badge for the current adapter lifecycle state.\n *\n * @param props Badge props including the status token, optional label visibility, and size variant.\n * @returns A styled badge element that mirrors the shared adapter status taxonomy.\n */\nexport function AdapterStatusBadge({\n  status,\n  showLabel = true,\n  size = \"sm\",\n  className,\n  style,\n}: AdapterStatusBadgeProps): JSX.Element {\n  const { token } = theme.useToken();\n\n  const getStatusTokens = () => {\n    switch (status) {\n      case \"connected\":\n        return {\n          borderColor: token.colorSuccessBorder,\n          backgroundColor: token.colorSuccessBg,\n          dotColor: token.colorSuccess,\n        };\n      case \"disconnected\":\n        return {\n          borderColor: token.colorBorder,\n          backgroundColor: token.colorBgContainerDisabled,\n          dotColor: token.colorTextSecondary,\n        };\n      case \"error\":\n        return {\n          borderColor: token.colorErrorBorder,\n          backgroundColor: token.colorErrorBg,\n          dotColor: token.colorError,\n        };\n      default:\n        return {\n          borderColor: token.colorPrimaryBorder,\n          backgroundColor: token.colorPrimaryBg,\n          dotColor: token.colorPrimary,\n        };\n    }\n  };\n\n  const statusTokens = getStatusTokens();\n\n  return (\n    <span\n      className={className}\n      style={{\n        display: \"inline-flex\",\n        alignItems: \"center\",\n        gap: size === \"md\" ? \"6px\" : \"4px\",\n        borderRadius: token.borderRadiusLG,\n        border: `1px solid ${statusTokens.borderColor}`,\n        padding: size === \"md\" ? \"2px 8px\" : \"0px 6px\",\n        backgroundColor: statusTokens.backgroundColor,\n        color: token.colorText,\n        fontWeight: 600,\n        textTransform: \"uppercase\",\n        fontSize: size === \"md\" ? token.fontSizeSM : token.fontSize / 1.15,\n        transition: \"all 0.2s\",\n        ...style,\n      }}\n    >\n      <span\n        style={{\n          height: size === \"md\" ? \"8px\" : \"6px\",\n          width: size === \"md\" ? \"8px\" : \"6px\",\n          borderRadius: \"50%\",\n          backgroundColor: statusTokens.dotColor,\n          animation:\n            status === \"initializing\"\n              ? \"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite\"\n              : undefined,\n        }}\n      />\n      {showLabel && <span>{statusLabels[status]}</span>}\n    </span>\n  );\n}\n","/**\n * @module AdapterCard\n * @package @geenius/adapters/react-ant\n * @description Renders the Ant Design tokenized adapter summary card for the React\n * variant. The card surfaces provider status, latency, and domain metadata for\n * one adapter domain in the dashboard views.\n */\n\nimport type { AdapterDomain, AdapterStatusInfo } from \"@geenius/adapters\";\nimport {\n  DOMAIN_DESCRIPTIONS,\n  DOMAIN_ICONS,\n  DOMAIN_LABELS,\n} from \"@geenius/adapters\";\nimport theme from \"antd/lib/theme/index.js\";\nimport type { JSX } from \"react\";\nimport { AdapterStatusBadge } from \"./AdapterStatusBadge\";\n\n/**\n * Props for rendering a single adapter summary card in the React dashboard grid.\n *\n * @property domain Adapter domain represented by the card.\n * @property status Current provider health and metadata for the domain.\n * @property onClick Optional callback fired when the card is activated.\n * @property className Optional class name merged into the card container.\n * @property style Optional inline styles merged into the card container.\n */\nexport interface AdapterCardProps {\n  domain: AdapterDomain;\n  status: AdapterStatusInfo;\n  onClick?: () => void;\n  className?: string;\n  style?: React.CSSProperties;\n}\n\n/**\n * Renders a clickable React summary card for one adapter domain.\n *\n * @param props Card props including the adapter domain, status payload, and click handler.\n * @returns A button element that summarizes provider state for the selected domain.\n */\nexport function AdapterCard({\n  domain,\n  status,\n  onClick,\n  className,\n  style,\n}: AdapterCardProps): JSX.Element {\n  const { token } = theme.useToken();\n\n  return (\n    <button\n      type=\"button\"\n      onClick={onClick}\n      className={className}\n      style={{\n        position: \"relative\",\n        display: \"flex\",\n        width: \"100%\",\n        alignItems: \"flex-start\",\n        gap: token.margin,\n        overflow: \"hidden\",\n        borderRadius: token.borderRadiusLG,\n        border: `1px solid ${token.colorBorder}`,\n        backgroundColor: token.colorBgContainer,\n        padding: token.paddingLG,\n        textAlign: \"left\",\n        color: token.colorText,\n        boxShadow: token.boxShadowTertiary,\n        transition: \"all 0.2s\",\n        cursor: \"pointer\",\n        ...style,\n      }}\n      aria-label={`${DOMAIN_LABELS[domain]} adapter - ${status.status}`}\n      onMouseEnter={(e) => {\n        e.currentTarget.style.borderColor = token.colorPrimaryBorder;\n        e.currentTarget.style.backgroundColor = token.colorBgLayout;\n        e.currentTarget.style.boxShadow = token.boxShadowSecondary;\n      }}\n      onMouseLeave={(e) => {\n        e.currentTarget.style.borderColor = token.colorBorder;\n        e.currentTarget.style.backgroundColor = token.colorBgContainer;\n        e.currentTarget.style.boxShadow = token.boxShadowTertiary;\n      }}\n    >\n      <div\n        style={{\n          display: \"flex\",\n          height: 48,\n          width: 48,\n          flexShrink: 0,\n          alignItems: \"center\",\n          justifyContent: \"center\",\n          borderRadius: token.borderRadius,\n          border: `1px solid ${token.colorBorder}`,\n          backgroundColor: token.colorBgLayout,\n          fontSize: 24,\n          boxShadow: token.boxShadowTertiary,\n        }}\n      >\n        {DOMAIN_ICONS[domain]}\n      </div>\n\n      <div style={{ minWidth: 0, flex: 1 }}>\n        <div\n          style={{\n            display: \"flex\",\n            alignItems: \"center\",\n            justifyContent: \"space-between\",\n            gap: token.marginXS,\n          }}\n        >\n          <span\n            style={{\n              display: \"block\",\n              overflow: \"hidden\",\n              textOverflow: \"ellipsis\",\n              whiteSpace: \"nowrap\",\n              fontSize: token.fontSizeSM,\n              fontWeight: \"bold\",\n              color: token.colorTextHeading,\n              margin: 0,\n            }}\n          >\n            {DOMAIN_LABELS[domain]}\n          </span>\n          <AdapterStatusBadge status={status.status} />\n        </div>\n\n        <p\n          style={{\n            marginTop: 2,\n            fontSize: 12,\n            color: token.colorTextSecondary,\n            display: \"-webkit-box\",\n            WebkitLineClamp: 2,\n            WebkitBoxOrient: \"vertical\",\n            overflow: \"hidden\",\n            margin: 0,\n          }}\n        >\n          {DOMAIN_DESCRIPTIONS[domain]}\n        </p>\n\n        {status.provider && status.provider !== \"none\" && (\n          <div\n            style={{\n              marginTop: token.marginXS,\n              display: \"flex\",\n              alignItems: \"center\",\n              gap: token.marginXS,\n            }}\n          >\n            <span\n              style={{\n                borderRadius: token.borderRadiusSM,\n                border: `1px solid ${token.colorBorder}`,\n                backgroundColor: token.colorBgLayout,\n                padding: \"2px 8px\",\n                fontSize: 10,\n                fontWeight: 600,\n                color: token.colorTextSecondary,\n              }}\n            >\n              {status.provider}\n            </span>\n            {status.latency && (\n              <span style={{ fontSize: 10, color: token.colorTextSecondary }}>\n                {status.latency}ms\n              </span>\n            )}\n          </div>\n        )}\n\n        {status.error && (\n          <p\n            style={{\n              marginTop: 6,\n              overflow: \"hidden\",\n              textOverflow: \"ellipsis\",\n              whiteSpace: \"nowrap\",\n              fontSize: 10,\n              color: token.colorText,\n              margin: \"6px 0 0 0\",\n            }}\n          >\n            {status.error}\n          </p>\n        )}\n      </div>\n    </button>\n  );\n}\n","/**\n * @module AdapterConfigForm\n * @package @geenius/adapters/react-ant\n * @description Renders the Ant Design-based React adapter configuration form.\n * This component is used inside adapter pages and dialogs to collect the\n * provider-specific credentials required for each infrastructure domain.\n */\n\nimport type { AdapterDomain, DomainAdapterConfig } from \"@geenius/adapters\";\nimport { DOMAIN_LABELS, getProvidersForDomain } from \"@geenius/adapters\";\nimport theme from \"antd/lib/theme/index.js\";\nimport type { FormEvent, JSX } from \"react\";\nimport { useState } from \"react\";\n\n/**\n * Props accepted by the React adapter configuration form.\n *\n * @property domain Adapter domain being configured in the current dialog\n * @property initialConfig Existing configuration values used to hydrate the form\n * @property onSave Async or sync handler that persists the submitted configuration\n * @property onCancel Optional callback invoked when the user dismisses the form\n * @property className Optional class name merged onto the form root\n * @property style Optional inline styles merged onto the form root\n * @property titleId Optional identifier applied to the form title for dialog labelling\n */\nexport interface AdapterConfigFormProps {\n  domain: AdapterDomain;\n  initialConfig?: DomainAdapterConfig;\n  onSave: (config: DomainAdapterConfig) => Promise<void> | void;\n  onCancel?: () => void;\n  className?: string;\n  style?: React.CSSProperties;\n  titleId?: string;\n}\n\n/**\n * Renders the adapter configuration workflow for a single adapter domain.\n *\n * @param props Component props controlling the selected domain and form callbacks\n * @returns A provider chooser and credential form styled with the React variant\n */\nexport function AdapterConfigForm({\n  domain,\n  initialConfig,\n  onSave,\n  onCancel,\n  className,\n  style,\n  titleId,\n}: AdapterConfigFormProps): JSX.Element {\n  const providers = getProvidersForDomain(domain);\n  const [provider, setProvider] = useState(\n    initialConfig?.provider ?? providers[0]?.id ?? \"\",\n  );\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 { token } = theme.useToken();\n\n  const selectedMeta = providers.find((entry) => entry.id === provider);\n  const needsApiKey = selectedMeta?.requiresApiKey ?? false;\n  const needsBaseUrl = selectedMeta?.requiresBaseUrl ?? false;\n\n  const handleSubmit = async (\n    event: FormEvent<HTMLFormElement>,\n  ): Promise<void> => {\n    event.preventDefault();\n    setError(null);\n\n    if (!provider) {\n      setError(\"Select a provider\");\n      return;\n    }\n\n    if (needsApiKey && !apiKey.trim()) {\n      setError(\"API key is required\");\n      return;\n    }\n\n    setIsSaving(true);\n    try {\n      await onSave({\n        provider,\n        apiKey: apiKey || undefined,\n        baseUrl: baseUrl || undefined,\n      });\n    } catch (saveError) {\n      setError(\n        saveError instanceof Error ? saveError.message : \"Failed to save\",\n      );\n    } finally {\n      setIsSaving(false);\n    }\n  };\n\n  const getTierTokens = (tier: string) => {\n    switch (tier) {\n      case \"pronto\":\n        return { bg: token.colorPrimaryBg, text: token.colorText };\n      case \"lancio\":\n        return { bg: token.colorWarningBg, text: token.colorText };\n      default:\n        return { bg: token.colorBgLayout, text: token.colorTextSecondary };\n    }\n  };\n\n  return (\n    <form\n      onSubmit={handleSubmit}\n      className={className}\n      style={{\n        display: \"flex\",\n        flexDirection: \"column\",\n        gap: token.marginLG,\n        borderRadius: token.borderRadiusLG,\n        border: `1px solid ${token.colorBorder}`,\n        backgroundColor: token.colorBgContainer,\n        padding: token.paddingLG,\n        boxShadow: token.boxShadowTertiary,\n        ...style,\n      }}\n      noValidate\n    >\n      <div>\n        <h3\n          id={titleId}\n          style={{\n            fontSize: token.fontSizeLG,\n            fontWeight: \"bold\",\n            color: token.colorTextHeading,\n            margin: 0,\n          }}\n        >\n          Configure {DOMAIN_LABELS[domain]}\n        </h3>\n        <p\n          style={{\n            marginTop: token.marginXS,\n            fontSize: token.fontSizeSM,\n            color: token.colorTextSecondary,\n            margin: 0,\n          }}\n        >\n          Select and configure your preferred provider.\n        </p>\n      </div>\n\n      {error && (\n        <div\n          role=\"alert\"\n          style={{\n            borderRadius: token.borderRadiusSM,\n            border: `1px solid ${token.colorErrorBorder}`,\n            backgroundColor: token.colorErrorBg,\n            padding: `${token.paddingSM}px ${token.padding}px`,\n            fontSize: token.fontSizeSM,\n            color: token.colorText,\n          }}\n        >\n          {error}\n        </div>\n      )}\n\n      <div\n        style={{\n          display: \"flex\",\n          flexDirection: \"column\",\n          gap: token.marginSM,\n        }}\n      >\n        <span\n          style={{\n            display: \"block\",\n            fontSize: 12,\n            fontWeight: 600,\n            textTransform: \"uppercase\",\n            color: token.colorTextSecondary,\n          }}\n        >\n          Provider\n        </span>\n        <div\n          style={{\n            display: \"grid\",\n            gap: token.marginSM,\n            gridTemplateColumns: \"repeat(auto-fit, minmax(200px, 1fr))\",\n          }}\n        >\n          {providers.map((entry) => {\n            const isSelected = provider === entry.id;\n            const tierTokens = getTierTokens(entry.tier);\n\n            return (\n              <button\n                key={entry.id}\n                type=\"button\"\n                onClick={() => setProvider(entry.id)}\n                aria-pressed={isSelected}\n                style={{\n                  display: \"flex\",\n                  alignItems: \"flex-start\",\n                  gap: token.margin,\n                  borderRadius: token.borderRadiusLG,\n                  border: `1px solid ${isSelected ? token.colorPrimaryBorderHover : token.colorBorder}`,\n                  backgroundColor: isSelected\n                    ? token.colorPrimaryBg\n                    : token.colorBgLayout,\n                  padding: token.padding,\n                  textAlign: \"left\",\n                  transition: \"all 0.2s\",\n                  cursor: \"pointer\",\n                  boxShadow: isSelected ? token.boxShadowSecondary : \"none\",\n                }}\n                onMouseEnter={(e) => {\n                  if (!isSelected) {\n                    e.currentTarget.style.borderColor =\n                      token.colorPrimaryBorder;\n                    e.currentTarget.style.backgroundColor =\n                      token.colorBgContainer;\n                  }\n                }}\n                onMouseLeave={(e) => {\n                  if (!isSelected) {\n                    e.currentTarget.style.borderColor = token.colorBorder;\n                    e.currentTarget.style.backgroundColor = token.colorBgLayout;\n                  }\n                }}\n              >\n                <div style={{ flex: 1 }}>\n                  <span\n                    style={{\n                      display: \"block\",\n                      fontSize: token.fontSizeSM,\n                      fontWeight: \"bold\",\n                      color: token.colorText,\n                    }}\n                  >\n                    {entry.name}\n                  </span>\n                  <span\n                    style={{\n                      marginTop: token.marginXXS,\n                      display: \"block\",\n                      fontSize: 12,\n                      lineHeight: 1.5,\n                      color: token.colorTextSecondary,\n                    }}\n                  >\n                    {entry.description}\n                  </span>\n                  <span\n                    style={{\n                      marginTop: token.marginSM,\n                      display: \"inline-flex\",\n                      borderRadius: token.borderRadiusSM,\n                      padding: \"2px 8px\",\n                      fontSize: 10,\n                      fontWeight: \"bold\",\n                      textTransform: \"uppercase\",\n                      backgroundColor: tierTokens.bg,\n                      color: tierTokens.text,\n                    }}\n                  >\n                    {entry.tier}\n                  </span>\n                </div>\n              </button>\n            );\n          })}\n        </div>\n      </div>\n\n      {needsApiKey && (\n        <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n          <label\n            htmlFor={`adapter-${domain}-apiKey`}\n            style={{\n              display: \"block\",\n              fontSize: 12,\n              fontWeight: 600,\n              textTransform: \"uppercase\",\n              color: token.colorTextSecondary,\n            }}\n          >\n            API Key\n          </label>\n          <input\n            id={`adapter-${domain}-apiKey`}\n            type=\"password\"\n            value={apiKey}\n            onChange={(event) => setApiKey(event.target.value)}\n            placeholder={`Enter ${selectedMeta?.name ?? provider} API key`}\n            autoComplete=\"off\"\n            style={{\n              width: \"100%\",\n              borderRadius: token.borderRadiusSM,\n              border: `1px solid ${token.colorBorder}`,\n              backgroundColor: token.colorBgContainer,\n              padding: \"10px 16px\",\n              fontSize: token.fontSizeSM,\n              color: token.colorText,\n              outline: \"none\",\n              transition: \"all 0.2s\",\n              boxShadow: token.boxShadowTertiary,\n            }}\n            onFocus={(e) => {\n              e.currentTarget.style.borderColor = token.colorPrimary;\n              e.currentTarget.style.boxShadow = `0 0 0 2px ${token.colorPrimaryBg}`;\n            }}\n            onBlur={(e) => {\n              e.currentTarget.style.borderColor = token.colorBorder;\n              e.currentTarget.style.boxShadow = token.boxShadowTertiary;\n            }}\n          />\n        </div>\n      )}\n\n      {needsBaseUrl && (\n        <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n          <label\n            htmlFor={`adapter-${domain}-url`}\n            style={{\n              display: \"block\",\n              fontSize: 12,\n              fontWeight: 600,\n              textTransform: \"uppercase\",\n              color: token.colorTextSecondary,\n            }}\n          >\n            Base URL\n          </label>\n          <input\n            id={`adapter-${domain}-url`}\n            type=\"url\"\n            value={baseUrl}\n            onChange={(event) => setBaseUrl(event.target.value)}\n            placeholder=\"https://...\"\n            style={{\n              width: \"100%\",\n              borderRadius: token.borderRadiusSM,\n              border: `1px solid ${token.colorBorder}`,\n              backgroundColor: token.colorBgContainer,\n              padding: \"10px 16px\",\n              fontSize: token.fontSizeSM,\n              color: token.colorText,\n              outline: \"none\",\n              transition: \"all 0.2s\",\n              boxShadow: token.boxShadowTertiary,\n            }}\n            onFocus={(e) => {\n              e.currentTarget.style.borderColor = token.colorPrimary;\n              e.currentTarget.style.boxShadow = `0 0 0 2px ${token.colorPrimaryBg}`;\n            }}\n            onBlur={(e) => {\n              e.currentTarget.style.borderColor = token.colorBorder;\n              e.currentTarget.style.boxShadow = token.boxShadowTertiary;\n            }}\n          />\n        </div>\n      )}\n\n      <div\n        style={{\n          display: \"flex\",\n          justifyContent: \"flex-end\",\n          gap: token.marginSM,\n          paddingTop: token.marginXS,\n        }}\n      >\n        {onCancel && (\n          <button\n            type=\"button\"\n            onClick={onCancel}\n            style={{\n              borderRadius: token.borderRadiusSM,\n              padding: \"10px 20px\",\n              fontSize: token.fontSizeSM,\n              fontWeight: 600,\n              color: token.colorTextSecondary,\n              backgroundColor: \"transparent\",\n              border: \"none\",\n              cursor: \"pointer\",\n              transition: \"color 0.2s\",\n            }}\n            onMouseEnter={(e) =>\n              (e.currentTarget.style.color = token.colorText)\n            }\n            onMouseLeave={(e) =>\n              (e.currentTarget.style.color = token.colorTextSecondary)\n            }\n          >\n            Cancel\n          </button>\n        )}\n        <button\n          type=\"submit\"\n          disabled={isSaving || !provider}\n          style={{\n            display: \"inline-flex\",\n            alignItems: \"center\",\n            justifyContent: \"center\",\n            borderRadius: token.borderRadiusSM,\n            border: `1px solid ${token.colorPrimaryBorder}`,\n            backgroundColor: token.colorPrimary,\n            padding: \"10px 32px\",\n            fontSize: token.fontSizeSM,\n            fontWeight: \"bold\",\n            color: token.colorTextLightSolid,\n            boxShadow: token.boxShadowTertiary,\n            cursor: isSaving || !provider ? \"not-allowed\" : \"pointer\",\n            opacity: isSaving || !provider ? 0.5 : 1,\n            transition: \"all 0.2s\",\n          }}\n          onMouseEnter={(e) => {\n            if (!isSaving && provider) e.currentTarget.style.opacity = \"0.9\";\n          }}\n          onMouseLeave={(e) => {\n            if (!isSaving && provider) e.currentTarget.style.opacity = \"1\";\n          }}\n        >\n          {isSaving ? \"Saving...\" : \"Save Configuration\"}\n        </button>\n      </div>\n    </form>\n  );\n}\n","/**\n * @module index\n * @package @geenius/adapters/react\n * @description Implements the React adapter provider and context access\n * helpers. This module owns adapter status initialization for the React\n * runtime package while keeping the shared package framework-agnostic.\n */\n\n\"use client\";\n\nimport {\n  ADAPTER_DOMAINS,\n  AdapterContextError,\n  type AdapterDomain,\n  type AdapterStatusInfo,\n  type AdminAdapter,\n  type AiAdapter,\n  type AuthAdapter,\n  type DbAdapter,\n  DOMAIN_LABELS,\n  type FileStorageAdapter,\n  getDomainConfig,\n  isAdaptersConfigured,\n  type LoggerAdapter,\n  type PaymentsAdapter,\n} from \"@geenius/adapters\";\nimport {\n  createContext,\n  type JSX,\n  type ReactNode,\n  useCallback,\n  useContext,\n  useEffect,\n  useMemo,\n  useState,\n} from \"react\";\n\ntype AnyAdapter =\n  | DbAdapter\n  | AuthAdapter\n  | PaymentsAdapter\n  | AiAdapter\n  | FileStorageAdapter\n  | AdminAdapter\n  | LoggerAdapter;\n\n/**\n * React adapter bag keyed by domain.\n *\n * @property db Database adapter implementation when configured.\n * @property auth Authentication adapter implementation when configured.\n * @property payments Payments adapter implementation when configured.\n * @property ai AI adapter implementation when configured.\n * @property storage File-storage adapter implementation when configured.\n * @property admin Admin adapter implementation when configured.\n * @property logger Logger adapter implementation when configured.\n */\nexport interface AdapterSet extends Partial<Record<AdapterDomain, AnyAdapter>> {\n  db?: DbAdapter;\n  auth?: AuthAdapter;\n  payments?: PaymentsAdapter;\n  ai?: AiAdapter;\n  storage?: FileStorageAdapter;\n  admin?: AdminAdapter;\n  logger?: LoggerAdapter;\n}\n\n/**\n * React adapter context value exposed to hooks and provider consumers.\n *\n * @property adapters Adapter bag passed into the provider.\n * @property statuses Current status record for each adapter domain.\n * @property getAdapter Returns a configured adapter for a specific domain or throws when missing.\n * @property isReady Reports whether a domain is configured and connected.\n * @property isLoading Indicates whether initial health checks are still running.\n */\nexport interface AdapterContextValue {\n  adapters: AdapterSet;\n  statuses: Record<AdapterDomain, AdapterStatusInfo>;\n  getAdapter: <K extends keyof AdapterSet>(\n    domain: K,\n  ) => NonNullable<AdapterSet[K]>;\n  isReady: (domain: AdapterDomain) => boolean;\n  isLoading: boolean;\n}\n\nconst AdapterContext = createContext<AdapterContextValue | null>(null);\n\n/**\n * Props accepted by the React adapter provider.\n *\n * @property adapters Adapter bag made available to descendant hooks and components.\n * @property children React subtree that should receive adapter context.\n * @property healthCheck Whether the provider should probe configured adapters on mount.\n * @property statusOverrides Optional deterministic status overrides for tests and previews.\n */\nexport interface AdapterProviderProps {\n  adapters: AdapterSet;\n  children: ReactNode;\n  healthCheck?: boolean;\n  statusOverrides?: Partial<Record<AdapterDomain, Partial<AdapterStatusInfo>>>;\n}\n\nfunction getInitialProviderName(\n  domain: AdapterDomain,\n  adapters: AdapterSet,\n  statusOverrides?: Partial<Record<AdapterDomain, Partial<AdapterStatusInfo>>>,\n): string {\n  const overrideProvider = statusOverrides?.[domain]?.provider;\n  if (overrideProvider !== undefined) {\n    return overrideProvider;\n  }\n\n  if (!adapters[domain]) {\n    return \"none\";\n  }\n\n  if (!isAdaptersConfigured()) {\n    return \"configured\";\n  }\n\n  return getDomainConfig(domain)?.provider ?? \"configured\";\n}\n\nfunction createInitialStatuses(\n  adapters: AdapterSet,\n  healthCheck: boolean,\n  statusOverrides?: Partial<Record<AdapterDomain, Partial<AdapterStatusInfo>>>,\n): Record<AdapterDomain, AdapterStatusInfo> {\n  const initial: Record<AdapterDomain, AdapterStatusInfo> = {\n    db: {\n      domain: \"db\",\n      provider: \"none\",\n      status: \"disconnected\",\n      lastCheckedAt: Date.now(),\n    },\n    auth: {\n      domain: \"auth\",\n      provider: \"none\",\n      status: \"disconnected\",\n      lastCheckedAt: Date.now(),\n    },\n    payments: {\n      domain: \"payments\",\n      provider: \"none\",\n      status: \"disconnected\",\n      lastCheckedAt: Date.now(),\n    },\n    ai: {\n      domain: \"ai\",\n      provider: \"none\",\n      status: \"disconnected\",\n      lastCheckedAt: Date.now(),\n    },\n    storage: {\n      domain: \"storage\",\n      provider: \"none\",\n      status: \"disconnected\",\n      lastCheckedAt: Date.now(),\n    },\n    admin: {\n      domain: \"admin\",\n      provider: \"none\",\n      status: \"disconnected\",\n      lastCheckedAt: Date.now(),\n    },\n    logger: {\n      domain: \"logger\",\n      provider: \"none\",\n      status: \"disconnected\",\n      lastCheckedAt: Date.now(),\n    },\n  };\n\n  for (const domain of ADAPTER_DOMAINS) {\n    const adapter = adapters[domain];\n    initial[domain] = {\n      domain,\n      provider: getInitialProviderName(domain, adapters, statusOverrides),\n      status: adapter\n        ? healthCheck\n          ? \"initializing\"\n          : \"connected\"\n        : \"disconnected\",\n      lastCheckedAt: Date.now(),\n      ...statusOverrides?.[domain],\n    };\n  }\n\n  return initial;\n}\n\n/**\n * Provides the React adapter context and optional health-check lifecycle.\n *\n * @param props Provider props including the adapter bag, child tree, and optional health-check settings.\n * @returns A React context provider that exposes adapters and derived status metadata.\n */\nexport function AdapterProvider({\n  adapters,\n  children,\n  healthCheck = false,\n  statusOverrides,\n}: AdapterProviderProps): JSX.Element {\n  const [isLoading, setIsLoading] = useState(healthCheck);\n  const [statuses, setStatuses] = useState<\n    Record<AdapterDomain, AdapterStatusInfo>\n  >(() => createInitialStatuses(adapters, healthCheck, statusOverrides));\n\n  useEffect(() => {\n    if (!healthCheck) {\n      return;\n    }\n\n    setIsLoading(true);\n\n    const checks = ADAPTER_DOMAINS.map(async (domain) => {\n      const adapter = adapters[domain];\n      if (!adapter) {\n        return;\n      }\n\n      try {\n        setStatuses((previous) => ({\n          ...previous,\n          [domain]: { ...previous[domain], status: \"initializing\" },\n        }));\n\n        if (domain === \"auth\") {\n          await adapters.auth?.getSession();\n        }\n\n        setStatuses((previous) => ({\n          ...previous,\n          [domain]: {\n            ...previous[domain],\n            status: \"connected\",\n            lastCheckedAt: Date.now(),\n          },\n        }));\n      } catch (error) {\n        setStatuses((previous) => ({\n          ...previous,\n          [domain]: {\n            ...previous[domain],\n            status: \"error\",\n            error:\n              error instanceof Error ? error.message : \"Health check failed\",\n            lastCheckedAt: Date.now(),\n          },\n        }));\n      }\n    });\n\n    Promise.allSettled(checks).finally(() => setIsLoading(false));\n  }, [adapters, healthCheck]);\n\n  const getAdapter = useCallback(\n    <K extends keyof AdapterSet>(domain: K): NonNullable<AdapterSet[K]> => {\n      const adapter = adapters[domain];\n      if (!adapter) {\n        throw new AdapterContextError(\n          `${DOMAIN_LABELS[domain] ?? domain} adapter not configured in <AdapterProvider>`,\n          \"ADAPTER_NOT_CONFIGURED\",\n        );\n      }\n      return adapter;\n    },\n    [adapters],\n  );\n\n  const isReady = useCallback(\n    (domain: AdapterDomain) =>\n      !!adapters[domain] && statuses[domain]?.status === \"connected\",\n    [adapters, statuses],\n  );\n\n  const value = useMemo<AdapterContextValue>(\n    () => ({\n      adapters,\n      statuses,\n      getAdapter,\n      isReady,\n      isLoading,\n    }),\n    [adapters, statuses, getAdapter, isReady, isLoading],\n  );\n\n  return (\n    <AdapterContext.Provider value={value}>{children}</AdapterContext.Provider>\n  );\n}\n\n/** Alias matching the React reference variant provider export. */\nexport const AdaptersProvider = AdapterProvider;\n\n/**\n * Reads the React adapter context from the nearest provider.\n *\n * @returns The active adapter context value with adapters, statuses, and readiness helpers.\n * @throws {AdapterContextError} When called outside of an `<AdapterProvider>` tree.\n */\nexport function useAdapterContext(): AdapterContextValue {\n  const context = useContext(AdapterContext);\n  if (!context) {\n    throw new AdapterContextError(\n      \"useAdapterContext must be used within <AdapterProvider>\",\n      \"MISSING_CONTEXT\",\n    );\n  }\n  return context;\n}\n","/**\n * @module index\n * @package @geenius/adapters/react\n * @description Defines the React adapter hooks for reading adapter instances\n * and adapter status state from the React provider context. These hooks are\n * part of the public React runtime package and avoid unpublished shared\n * framework subpaths.\n */\n\nimport type {\n  AdapterDomain,\n  AdapterStatusInfo,\n  AdminAdapter,\n  AiAdapter,\n  AuthAdapter,\n  DbAdapter,\n  FileStorageAdapter,\n  LoggerAdapter,\n  PaymentsAdapter,\n} from \"@geenius/adapters\";\nimport { useMemo } from \"react\";\nimport { useAdapterContext } from \"../provider\";\n\n/**\n * Reads the configured database adapter from the current React adapter context.\n *\n * @returns The active database adapter implementation for the provider tree.\n * @throws {AdapterContextError} When no React adapter provider is mounted.\n *\n * @example\n * ```tsx\n * function Users() {\n *   const db = useDb()\n *   return null\n * }\n * ```\n */\nexport function useDb(): DbAdapter {\n  return useAdapterContext().getAdapter(\"db\");\n}\n\n/**\n * Reads the configured authentication adapter from the current React context.\n *\n * @returns The active authentication adapter implementation.\n * @throws {AdapterContextError} When the auth adapter is unavailable.\n */\nexport function useAuthAdapter(): AuthAdapter {\n  return useAdapterContext().getAdapter(\"auth\");\n}\n\n/** Alias matching the React reference variant auth hook. */\nexport function useAuth(): AuthAdapter {\n  return useAuthAdapter();\n}\n\n/**\n * Reads the configured payments adapter from the current React context.\n *\n * @returns The active payments adapter implementation.\n * @throws {AdapterContextError} When the payments adapter is unavailable.\n */\nexport function usePayments(): PaymentsAdapter {\n  return useAdapterContext().getAdapter(\"payments\");\n}\n\n/**\n * Reads the configured AI adapter from the current React context.\n *\n * @returns The active AI adapter implementation.\n * @throws {AdapterContextError} When the AI adapter is unavailable.\n */\nexport function useAi(): AiAdapter {\n  return useAdapterContext().getAdapter(\"ai\");\n}\n\n/**\n * Reads the configured file-storage adapter from the current React context.\n *\n * @returns The active file-storage adapter implementation.\n * @throws {AdapterContextError} When the storage adapter is unavailable.\n */\nexport function useStorage(): FileStorageAdapter {\n  return useAdapterContext().getAdapter(\"storage\");\n}\n\n/** Alias matching the React reference variant file-storage hook. */\nexport function useFileStorage(): FileStorageAdapter {\n  return useStorage();\n}\n\n/**\n * Reads the configured admin adapter from the current React context.\n *\n * @returns The active admin adapter implementation.\n * @throws {AdapterContextError} When the admin adapter is unavailable.\n */\nexport function useAdmin(): AdminAdapter {\n  return useAdapterContext().getAdapter(\"admin\");\n}\n\n/**\n * Reads the configured logger adapter from the current React context.\n *\n * @returns The active logger adapter implementation.\n * @throws {AdapterContextError} When the logger adapter is unavailable.\n */\nexport function useLogger(): LoggerAdapter {\n  return useAdapterContext().getAdapter(\"logger\");\n}\n\n/**\n * Returns the full adapter status record from the current React context.\n *\n * @returns A status object keyed by adapter domain.\n */\nexport function useAdapterStatuses(): Record<AdapterDomain, AdapterStatusInfo> {\n  return useAdapterContext().statuses;\n}\n\n/**\n * Returns the current status for a single adapter domain.\n *\n * @param domain Adapter domain whose status should be returned.\n * @returns The latest status snapshot for the requested domain.\n */\nexport function useAdapterStatus(domain: AdapterDomain): AdapterStatusInfo {\n  return useAdapterContext().statuses[domain];\n}\n\n/**\n * Reports whether a specific adapter domain is configured and connected.\n *\n * @param domain Adapter domain to inspect.\n * @returns `true` when the domain is ready for consumer use.\n */\nexport function useIsAdapterReady(domain: AdapterDomain): boolean {\n  return useAdapterContext().isReady(domain);\n}\n\n/**\n * Accesses every adapter and status helper from the current provider context.\n *\n * @returns A memoized snapshot of adapters, statuses, and loading helpers.\n */\nexport function useAdapters(): {\n  db: DbAdapter | undefined;\n  auth: AuthAdapter | undefined;\n  payments: PaymentsAdapter | undefined;\n  ai: AiAdapter | undefined;\n  storage: FileStorageAdapter | undefined;\n  admin: AdminAdapter | undefined;\n  logger: LoggerAdapter | undefined;\n  statuses: Record<AdapterDomain, AdapterStatusInfo>;\n  isLoading: boolean;\n  isReady: (domain: AdapterDomain) => boolean;\n} {\n  const context = useAdapterContext();\n\n  return useMemo(\n    () => ({\n      db: context.adapters.db,\n      auth: context.adapters.auth,\n      payments: context.adapters.payments,\n      ai: context.adapters.ai,\n      storage: context.adapters.storage,\n      admin: context.adapters.admin,\n      logger: context.adapters.logger,\n      statuses: context.statuses,\n      isLoading: context.isLoading,\n      isReady: context.isReady,\n    }),\n    [context],\n  );\n}\n","/**\n * @module AdapterList\n * @package @geenius/adapters/react-ant\n * @description Renders the searchable tokenized Ant Design adapter grid for the React variant. The\n * list consumes provider status from context and delegates selection events to\n * the hosting page or dashboard shell.\n */\n\nimport type { AdapterDomain, AdapterStatusType } from \"@geenius/adapters\";\nimport { ADAPTER_DOMAINS, DOMAIN_LABELS } from \"@geenius/adapters\";\nimport theme from \"antd/lib/theme/index.js\";\nimport type { JSX } from \"react\";\nimport { useMemo, useState } from \"react\";\nimport { useAdapters } from \"../hooks\";\nimport { AdapterCard } from \"./AdapterCard\";\n\n/**\n * Props for rendering the React adapter list and optional status filter controls.\n *\n * @property onSelect Optional callback invoked when a domain card is selected.\n * @property filterStatus Optional status filter applied before rendering the grid.\n * @property className Optional class name merged into the outer wrapper.\n * @property style Optional inline styles merged into the outer wrapper.\n */\nexport interface AdapterListProps {\n  onSelect?: (domain: AdapterDomain) => void;\n  filterStatus?: AdapterStatusType;\n  className?: string;\n  style?: React.CSSProperties;\n}\n\n/**\n * Renders the searchable React adapter list backed by shared provider state.\n *\n * @param props List props including selection callback, status filtering, and wrapper class names.\n * @returns The adapter grid or an empty/loading state when no entries are available.\n */\nexport function AdapterList({\n  onSelect,\n  filterStatus,\n  className,\n  style,\n}: AdapterListProps): JSX.Element {\n  const { statuses, isLoading } = useAdapters();\n  const [search, setSearch] = useState(\"\");\n  const { token } = theme.useToken();\n\n  const filteredDomains = useMemo(() => {\n    let domains = [...ADAPTER_DOMAINS];\n\n    if (search) {\n      const query = search.toLowerCase();\n      domains = domains.filter((domain) => {\n        const label = (DOMAIN_LABELS[domain] ?? domain).toLowerCase();\n        const provider = statuses[domain]?.provider?.toLowerCase() ?? \"\";\n        return (\n          label.includes(query) ||\n          provider.includes(query) ||\n          domain.includes(query)\n        );\n      });\n    }\n\n    if (filterStatus) {\n      domains = domains.filter(\n        (domain) => statuses[domain]?.status === filterStatus,\n      );\n    }\n\n    return domains;\n  }, [search, filterStatus, statuses]);\n\n  if (isLoading) {\n    return (\n      <div\n        className={className}\n        style={{\n          display: \"grid\",\n          gap: token.marginMD,\n          ...style,\n        }}\n        role=\"status\"\n        aria-label=\"Loading adapters\"\n      >\n        {[1, 2, 3, 4].map((index) => (\n          <div\n            key={index}\n            style={{\n              borderRadius: token.borderRadiusLG,\n              border: `1px solid ${token.colorBorderSecondary}`,\n              backgroundColor: token.colorBgContainer,\n              padding: token.paddingLG,\n              boxShadow: token.boxShadowTertiary,\n            }}\n          >\n            <div\n              style={{\n                display: \"flex\",\n                alignItems: \"flex-start\",\n                gap: token.margin,\n              }}\n            >\n              <div\n                style={{\n                  height: 48,\n                  width: 48,\n                  borderRadius: token.borderRadius,\n                  border: `1px solid ${token.colorBorderSecondary}`,\n                  backgroundColor: token.colorFillAlter,\n                }}\n              />\n              <div\n                style={{\n                  flex: 1,\n                  paddingTop: 4,\n                  display: \"flex\",\n                  flexDirection: \"column\",\n                  gap: token.marginSM,\n                }}\n              >\n                <div\n                  style={{\n                    height: 12,\n                    width: 96,\n                    borderRadius: token.borderRadiusSM,\n                    backgroundColor: token.colorFillAlter,\n                  }}\n                />\n                <div\n                  style={{\n                    height: 8,\n                    width: 192,\n                    borderRadius: token.borderRadiusSM,\n                    backgroundColor: token.colorFillQuaternary,\n                  }}\n                />\n              </div>\n            </div>\n          </div>\n        ))}\n      </div>\n    );\n  }\n\n  return (\n    <div className={className} style={style}>\n      <div style={{ marginBottom: token.marginMD }}>\n        <input\n          type=\"text\"\n          value={search}\n          onChange={(event) => setSearch(event.target.value)}\n          placeholder=\"Search adapters...\"\n          aria-label=\"Search adapters\"\n          style={{\n            width: \"100%\",\n            borderRadius: token.borderRadiusSM,\n            border: `1px solid ${token.colorBorder}`,\n            backgroundColor: token.colorBgContainer,\n            padding: \"10px 16px\",\n            fontSize: token.fontSizeSM,\n            color: token.colorText,\n            outline: \"none\",\n            transition: \"all 0.2s\",\n            boxShadow: token.boxShadowTertiary,\n          }}\n          onFocus={(e) => {\n            e.currentTarget.style.borderColor = token.colorPrimary;\n            e.currentTarget.style.boxShadow = `0 0 0 2px ${token.colorPrimaryBg}`;\n          }}\n          onBlur={(e) => {\n            e.currentTarget.style.borderColor = token.colorBorder;\n            e.currentTarget.style.boxShadow = token.boxShadowTertiary;\n          }}\n        />\n      </div>\n\n      {filteredDomains.length === 0 ? (\n        <div\n          style={{\n            borderRadius: token.borderRadiusLG,\n            border: `1px solid ${token.colorBorderSecondary}`,\n            backgroundColor: token.colorFillQuaternary,\n            padding: 32,\n            textAlign: \"center\",\n          }}\n        >\n          <p\n            style={{\n              fontSize: token.fontSizeSM,\n              fontWeight: 500,\n              color: token.colorTextSecondary,\n              margin: 0,\n            }}\n          >\n            {search\n              ? \"No adapters match your search\"\n              : \"No adapters configured\"}\n          </p>\n        </div>\n      ) : (\n        <ul\n          style={{\n            display: \"grid\",\n            gap: token.marginMD,\n            gridTemplateColumns: \"repeat(auto-fit, minmax(300px, 1fr))\",\n            listStyle: \"none\",\n            margin: 0,\n            padding: 0,\n          }}\n          aria-label=\"Adapter list\"\n        >\n          {filteredDomains.map((domain) => (\n            <li key={domain}>\n              <AdapterCard\n                domain={domain}\n                status={statuses[domain]}\n                onClick={() => onSelect?.(domain)}\n              />\n            </li>\n          ))}\n        </ul>\n      )}\n    </div>\n  );\n}\n","/**\n * @module AdapterDetailPage\n * @package @geenius/adapters/react-ant\n * @description Renders the single-domain adapter detail view for the React\n * variant. The page surfaces current provider health, available providers, and\n * inline configuration for one adapter domain using Ant Design tokens.\n */\n\nimport type { AdapterDomain } from \"@geenius/adapters\";\nimport {\n  DOMAIN_DESCRIPTIONS,\n  DOMAIN_ICONS,\n  DOMAIN_LABELS,\n  getProvidersForDomain,\n} from \"@geenius/adapters\";\nimport theme from \"antd/lib/theme/index.js\";\nimport type { JSX } from \"react\";\nimport { useState } from \"react\";\nimport { AdapterConfigForm } from \"../components/AdapterConfigForm\";\nimport { AdapterStatusBadge } from \"../components/AdapterStatusBadge\";\nimport { useAdapterStatus, useAdapters } from \"../hooks\";\n\n/**\n * Props for rendering the React single-domain adapter detail page.\n *\n * @property domain Adapter domain whose provider details should be displayed.\n * @property onBack Optional callback for returning to the dashboard view.\n * @property className Optional class name merged into the page container.\n * @property style Optional inline styles merged into the page container.\n */\nexport interface AdapterDetailPageProps {\n  domain: AdapterDomain;\n  onBack?: () => void;\n  className?: string;\n  style?: React.CSSProperties;\n}\n\n/**\n * Renders the React adapter detail page for one adapter domain.\n *\n * @param props Page props including the selected domain and optional back-navigation handler.\n * @returns The detail view with provider health, available providers, and configuration affordances.\n */\nexport function AdapterDetailPage({\n  domain,\n  onBack,\n  className,\n  style,\n}: AdapterDetailPageProps): JSX.Element {\n  const { isLoading } = useAdapters();\n  const status = useAdapterStatus(domain);\n  const [isEditing, setIsEditing] = useState(false);\n  const providers = getProvidersForDomain(domain);\n  const { token } = theme.useToken();\n\n  if (isLoading) {\n    return (\n      <div\n        className={className}\n        style={{\n          margin: \"0 auto\",\n          maxWidth: 768,\n          display: \"flex\",\n          flexDirection: \"column\",\n          gap: token.marginLG,\n          ...style,\n        }}\n      >\n        <div\n          style={{\n            display: \"flex\",\n            flexDirection: \"column\",\n            gap: token.marginMD,\n          }}\n        >\n          <div\n            style={{\n              height: 24,\n              width: 128,\n              borderRadius: token.borderRadiusSM,\n              backgroundColor: token.colorFillAlter,\n            }}\n          />\n          <div\n            style={{\n              height: 160,\n              borderRadius: token.borderRadiusLG,\n              border: `1px solid ${token.colorBorderSecondary}`,\n              backgroundColor: token.colorBgContainer,\n            }}\n          />\n          <div\n            style={{\n              height: 240,\n              borderRadius: token.borderRadiusLG,\n              border: `1px solid ${token.colorBorderSecondary}`,\n              backgroundColor: token.colorBgContainer,\n            }}\n          />\n        </div>\n      </div>\n    );\n  }\n\n  const getTierTokens = (tier: string) => {\n    switch (tier) {\n      case \"pronto\":\n        return { bg: token.colorPrimaryBg, text: token.colorText };\n      case \"lancio\":\n        return { bg: token.colorWarningBg, text: token.colorText };\n      default:\n        return { bg: token.colorBgLayout, text: token.colorTextSecondary };\n    }\n  };\n\n  return (\n    <div\n      className={className}\n      style={{\n        margin: \"0 auto\",\n        maxWidth: 768,\n        display: \"flex\",\n        flexDirection: \"column\",\n        gap: token.marginXXL,\n        color: token.colorText,\n        ...style,\n      }}\n    >\n      {onBack && (\n        <button\n          type=\"button\"\n          onClick={onBack}\n          style={{\n            display: \"inline-flex\",\n            alignItems: \"center\",\n            gap: 6,\n            fontSize: token.fontSizeSM,\n            color: token.colorTextSecondary,\n            background: \"none\",\n            border: \"none\",\n            padding: 0,\n            cursor: \"pointer\",\n            transition: \"color 0.2s\",\n            alignSelf: \"flex-start\",\n          }}\n          onMouseEnter={(e) => (e.currentTarget.style.color = token.colorText)}\n          onMouseLeave={(e) =>\n            (e.currentTarget.style.color = token.colorTextSecondary)\n          }\n        >\n          <span>←</span> Back to Adapters\n        </button>\n      )}\n\n      <div\n        style={{\n          display: \"flex\",\n          alignItems: \"flex-start\",\n          gap: token.marginLG,\n        }}\n      >\n        <div\n          style={{\n            display: \"flex\",\n            height: 64,\n            width: 64,\n            alignItems: \"center\",\n            justifyContent: \"center\",\n            borderRadius: token.borderRadiusLG,\n            border: `1px solid ${token.colorBorder}`,\n            backgroundColor: token.colorBgContainer,\n            fontSize: 32,\n            boxShadow: token.boxShadowTertiary,\n          }}\n        >\n          {DOMAIN_ICONS[domain]}\n        </div>\n        <div style={{ flex: 1 }}>\n          <div\n            style={{\n              display: \"flex\",\n              alignItems: \"center\",\n              gap: token.marginSM,\n            }}\n          >\n            <h1\n              style={{\n                fontSize: token.fontSizeHeading2,\n                fontWeight: 800,\n                color: token.colorTextHeading,\n                margin: 0,\n              }}\n            >\n              {DOMAIN_LABELS[domain]}\n            </h1>\n            <AdapterStatusBadge status={status.status} />\n          </div>\n          <p\n            style={{\n              marginTop: 4,\n              fontSize: token.fontSizeSM,\n              color: token.colorTextSecondary,\n              margin: 0,\n            }}\n          >\n            {DOMAIN_DESCRIPTIONS[domain]}\n          </p>\n        </div>\n      </div>\n\n      <div\n        style={{\n          borderRadius: token.borderRadiusLG,\n          border: `1px solid ${token.colorBorder}`,\n          backgroundColor: token.colorBgContainer,\n          padding: token.paddingLG,\n          boxShadow: token.boxShadowTertiary,\n        }}\n      >\n        <h2\n          style={{\n            marginBottom: token.marginMD,\n            fontSize: 12,\n            fontWeight: 600,\n            textTransform: \"uppercase\",\n            color: token.colorTextSecondary,\n            margin: \"0 0 16px 0\",\n          }}\n        >\n          Current Status\n        </h2>\n        <div\n          style={{\n            display: \"grid\",\n            gap: token.marginMD,\n            gridTemplateColumns: \"repeat(auto-fit, minmax(150px, 1fr))\",\n          }}\n        >\n          <div>\n            <p\n              style={{\n                fontSize: 10,\n                textTransform: \"uppercase\",\n                color: token.colorTextSecondary,\n                margin: 0,\n              }}\n            >\n              Provider\n            </p>\n            <p\n              style={{\n                marginTop: 2,\n                fontSize: token.fontSizeSM,\n                fontWeight: 600,\n                color: token.colorText,\n                margin: 0,\n              }}\n            >\n              {status.provider !== \"none\" ? status.provider : \"None\"}\n            </p>\n          </div>\n          <div>\n            <p\n              style={{\n                fontSize: 10,\n                textTransform: \"uppercase\",\n                color: token.colorTextSecondary,\n                margin: 0,\n              }}\n            >\n              Status\n            </p>\n            <div style={{ marginTop: 2 }}>\n              <AdapterStatusBadge status={status.status} />\n            </div>\n          </div>\n          <div>\n            <p\n              style={{\n                fontSize: 10,\n                textTransform: \"uppercase\",\n                color: token.colorTextSecondary,\n                margin: 0,\n              }}\n            >\n              Last Checked\n            </p>\n            <p\n              style={{\n                marginTop: 2,\n                fontSize: token.fontSizeSM,\n                color: token.colorTextSecondary,\n                margin: 0,\n              }}\n            >\n              {status.lastCheckedAt\n                ? new Date(status.lastCheckedAt).toLocaleTimeString()\n                : \"Not checked\"}\n            </p>\n          </div>\n        </div>\n\n        {status.error && (\n          <div\n            style={{\n              marginTop: token.marginMD,\n              borderRadius: token.borderRadiusSM,\n              border: `1px solid ${token.colorErrorBorder}`,\n              backgroundColor: token.colorErrorBg,\n              padding: \"12px 16px\",\n              fontSize: token.fontSizeSM,\n              color: token.colorText,\n            }}\n          >\n            <span style={{ fontWeight: 600 }}>Error:</span> {status.error}\n          </div>\n        )}\n\n        {status.latency && (\n          <div style={{ marginTop: token.marginMD }}>\n            <p\n              style={{\n                marginBottom: 4,\n                fontSize: 10,\n                textTransform: \"uppercase\",\n                color: token.colorTextSecondary,\n                margin: \"0 0 4px 0\",\n              }}\n            >\n              Latency\n            </p>\n            <div\n              style={{\n                height: 8,\n                width: \"100%\",\n                overflow: \"hidden\",\n                borderRadius: 4,\n                backgroundColor: token.colorFillAlter,\n              }}\n            >\n              <div\n                style={{\n                  height: \"100%\",\n                  borderRadius: 4,\n                  transition: \"all 0.2s\",\n                  backgroundColor:\n                    status.latency < 100\n                      ? token.colorSuccess\n                      : status.latency < 500\n                        ? token.colorWarning\n                        : token.colorError,\n                  width: `${Math.min(100, (status.latency / 1000) * 100)}%`,\n                }}\n              />\n            </div>\n            <p\n              style={{\n                marginTop: 4,\n                fontSize: 12,\n                color: token.colorTextSecondary,\n                margin: 0,\n              }}\n            >\n              {status.latency}ms\n            </p>\n          </div>\n        )}\n      </div>\n\n      <div\n        style={{\n          borderRadius: token.borderRadiusLG,\n          border: `1px solid ${token.colorBorder}`,\n          backgroundColor: token.colorBgContainer,\n          padding: token.paddingLG,\n          boxShadow: token.boxShadowTertiary,\n        }}\n      >\n        <div\n          style={{\n            marginBottom: token.marginMD,\n            display: \"flex\",\n            alignItems: \"center\",\n            justifyContent: \"space-between\",\n          }}\n        >\n          <h2\n            style={{\n              fontSize: 12,\n              fontWeight: 600,\n              textTransform: \"uppercase\",\n              color: token.colorTextSecondary,\n              margin: 0,\n            }}\n          >\n            Available Providers\n          </h2>\n          <span style={{ fontSize: 12, color: token.colorTextSecondary }}>\n            {providers.length} providers\n          </span>\n        </div>\n        <div style={{ display: \"flex\", flexDirection: \"column\" }}>\n          {providers.map((provider, idx) => {\n            const tierTokens = getTierTokens(provider.tier);\n            return (\n              <div\n                key={provider.id}\n                style={{\n                  display: \"flex\",\n                  alignItems: \"center\",\n                  justifyContent: \"space-between\",\n                  padding: \"12px 0\",\n                  borderTop:\n                    idx === 0\n                      ? \"none\"\n                      : `1px solid ${token.colorBorderSecondary}`,\n                }}\n              >\n                <div>\n                  <p\n                    style={{\n                      fontSize: token.fontSizeSM,\n                      fontWeight: 600,\n                      color: token.colorText,\n                      margin: 0,\n                    }}\n                  >\n                    {provider.name}\n                  </p>\n                  <p\n                    style={{\n                      fontSize: 12,\n                      color: token.colorTextSecondary,\n                      margin: 0,\n                    }}\n                  >\n                    {provider.description}\n                  </p>\n                </div>\n                <span\n                  style={{\n                    alignSelf: \"flex-start\",\n                    borderRadius: token.borderRadiusSM,\n                    padding: \"2px 8px\",\n                    fontSize: 10,\n                    fontWeight: \"bold\",\n                    textTransform: \"uppercase\",\n                    backgroundColor: tierTokens.bg,\n                    color: tierTokens.text,\n                  }}\n                >\n                  {provider.tier}\n                </span>\n              </div>\n            );\n          })}\n        </div>\n      </div>\n\n      <div>\n        {isEditing ? (\n          <AdapterConfigForm\n            domain={domain}\n            onSave={async () => setIsEditing(false)}\n            onCancel={() => setIsEditing(false)}\n          />\n        ) : (\n          <button\n            type=\"button\"\n            onClick={() => setIsEditing(true)}\n            style={{\n              width: \"100%\",\n              borderRadius: token.borderRadiusLG,\n              border: `1px dashed ${token.colorBorder}`,\n              backgroundColor: token.colorFillQuaternary,\n              padding: 24,\n              textAlign: \"center\",\n              fontSize: token.fontSizeSM,\n              color: token.colorTextSecondary,\n              transition: \"all 0.2s\",\n              cursor: \"pointer\",\n            }}\n            onMouseEnter={(e) => {\n              e.currentTarget.style.borderColor = token.colorPrimaryHover;\n              e.currentTarget.style.color = token.colorText;\n            }}\n            onMouseLeave={(e) => {\n              e.currentTarget.style.borderColor = token.colorBorder;\n              e.currentTarget.style.color = token.colorTextSecondary;\n            }}\n          >\n            Configure {DOMAIN_LABELS[domain]} Adapter\n          </button>\n        )}\n      </div>\n    </div>\n  );\n}\n","/**\n * @module AdaptersPage\n * @package @geenius/adapters/react-ant\n * @description Renders the tokenized Ant Design-based adapters overview for the React\n * package. The page summarizes adapter health, supports status filtering, and\n * provides an accessible modal workflow for configuring each adapter domain.\n */\n\nimport type { AdapterDomain, AdapterStatusType } from \"@geenius/adapters\";\nimport { ADAPTER_DOMAINS, ADAPTER_STATUSES } from \"@geenius/adapters\";\nimport theme from \"antd/lib/theme/index.js\";\nimport type { JSX } from \"react\";\nimport { useEffect, useId, useRef, useState } from \"react\";\nimport { AdapterConfigForm } from \"../components/AdapterConfigForm\";\nimport { AdapterList } from \"../components/AdapterList\";\nimport { AdapterStatusBadge } from \"../components/AdapterStatusBadge\";\nimport { useAdapters } from \"../hooks\";\n\nconst DIALOG_FOCUSABLE_SELECTORS =\n  'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\nconst MODAL_OVERLAY_BACKGROUND =\n  \"var(--gn-surface-overlay, oklch(0% 0 0 / 40%))\";\n\ntype RegistryEntry = {\n  domain: AdapterDomain;\n  provider: string;\n  status: AdapterStatusType;\n};\n\n/**\n * Props accepted by the React adapters overview page.\n *\n * @property onNavigateDetail Optional callback used instead of opening the inline modal\n * @property className Optional class name merged onto the page root\n * @property style Optional inline styles merged onto the page root\n * @property registryEntries Optional adapter registry snapshot rendered above the grid\n */\nexport interface AdaptersPageProps {\n  onNavigateDetail?: (domain: AdapterDomain) => void;\n  className?: string;\n  style?: React.CSSProperties;\n  registryEntries?: RegistryEntry[];\n}\n\n/**\n * Returns focusable descendants for an active dialog container.\n *\n * @param container Dialog container used to scope the focus trap\n * @returns Interactive descendants that should participate in tab order\n */\nfunction getDialogFocusableElements(container: HTMLElement): HTMLElement[] {\n  return Array.from(\n    container.querySelectorAll<HTMLElement>(DIALOG_FOCUSABLE_SELECTORS),\n  );\n}\n\n/**\n * Renders the adapter management dashboard for the React variant.\n *\n * @param props Page props controlling navigation overrides and registry data\n * @returns A dashboard with status filters, adapter cards, and a modal editor\n */\nexport function AdaptersPage({\n  onNavigateDetail,\n  className,\n  style,\n  registryEntries,\n}: AdaptersPageProps): JSX.Element {\n  const { statuses, isLoading } = useAdapters();\n  const [selectedDomain, setSelectedDomain] = useState<AdapterDomain | null>(\n    null,\n  );\n  const [filterStatus, setFilterStatus] = useState<\n    AdapterStatusType | undefined\n  >();\n  const modalRef = useRef<HTMLDivElement | null>(null);\n  const modalTitleId = useId();\n  const { token } = theme.useToken();\n\n  const counts = {\n    connected: ADAPTER_DOMAINS.filter(\n      (domain) => statuses[domain]?.status === \"connected\",\n    ).length,\n    error: ADAPTER_DOMAINS.filter(\n      (domain) => statuses[domain]?.status === \"error\",\n    ).length,\n    total: ADAPTER_DOMAINS.length,\n  };\n\n  useEffect(() => {\n    if (!selectedDomain) {\n      return;\n    }\n\n    const dialog = modalRef.current;\n    if (!dialog) {\n      return;\n    }\n\n    const ownerDocument = dialog.ownerDocument;\n    const ownerWindow = ownerDocument.defaultView;\n    const previousActiveElement =\n      ownerWindow &&\n      ownerDocument.activeElement instanceof ownerWindow.HTMLElement\n        ? ownerDocument.activeElement\n        : null;\n    const focusableElements = getDialogFocusableElements(dialog);\n    const firstFocusableElement = focusableElements[0];\n    const lastFocusableElement = focusableElements.at(-1);\n\n    (firstFocusableElement ?? dialog).focus();\n\n    const handleKeyDown = (event: KeyboardEvent): void => {\n      if (event.key === \"Escape\") {\n        event.preventDefault();\n        setSelectedDomain(null);\n        return;\n      }\n\n      if (event.key !== \"Tab\") {\n        return;\n      }\n\n      const activeElement = ownerDocument.activeElement;\n\n      if (!firstFocusableElement || !lastFocusableElement) {\n        event.preventDefault();\n        dialog.focus();\n        return;\n      }\n\n      if (event.shiftKey && activeElement === firstFocusableElement) {\n        event.preventDefault();\n        lastFocusableElement.focus();\n        return;\n      }\n\n      if (!event.shiftKey && activeElement === lastFocusableElement) {\n        event.preventDefault();\n        firstFocusableElement.focus();\n      }\n    };\n\n    ownerDocument.addEventListener(\"keydown\", handleKeyDown);\n\n    return () => {\n      ownerDocument.removeEventListener(\"keydown\", handleKeyDown);\n      previousActiveElement?.focus();\n    };\n  }, [selectedDomain]);\n\n  if (isLoading) {\n    return (\n      <div\n        className={className}\n        style={{\n          margin: \"0 auto\",\n          maxWidth: 896,\n          display: \"flex\",\n          flexDirection: \"column\",\n          gap: token.marginLG,\n          ...style,\n        }}\n      >\n        <div\n          style={{\n            display: \"flex\",\n            flexDirection: \"column\",\n            gap: token.marginMD,\n          }}\n        >\n          <div\n            style={{\n              height: 32,\n              width: 192,\n              borderRadius: token.borderRadiusSM,\n              backgroundColor: token.colorFillAlter,\n            }}\n          />\n          <div\n            style={{\n              height: 16,\n              width: 288,\n              borderRadius: token.borderRadiusSM,\n              backgroundColor: token.colorFillQuaternary,\n            }}\n          />\n\n          <div\n            style={{\n              display: \"grid\",\n              gap: token.marginSM,\n              gridTemplateColumns: \"repeat(auto-fit, minmax(250px, 1fr))\",\n            }}\n          >\n            {[1, 2, 3].map((index) => (\n              <div\n                key={index}\n                style={{\n                  height: 80,\n                  borderRadius: token.borderRadiusLG,\n                  border: `1px solid ${token.colorBorderSecondary}`,\n                  backgroundColor: token.colorBgContainer,\n                }}\n              />\n            ))}\n          </div>\n\n          <div\n            style={{\n              display: \"grid\",\n              gap: token.marginSM,\n              gridTemplateColumns: \"repeat(auto-fit, minmax(300px, 1fr))\",\n            }}\n          >\n            {[1, 2, 3, 4].map((index) => (\n              <div\n                key={index}\n                style={{\n                  height: 112,\n                  borderRadius: token.borderRadiusLG,\n                  border: `1px solid ${token.colorBorderSecondary}`,\n                  backgroundColor: token.colorBgContainer,\n                }}\n              />\n            ))}\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div\n      className={className}\n      style={{\n        margin: \"0 auto\",\n        maxWidth: 896,\n        display: \"flex\",\n        flexDirection: \"column\",\n        gap: token.marginXXL,\n        color: token.colorText,\n        ...style,\n      }}\n    >\n      <header style={{ display: \"flex\", flexDirection: \"column\", gap: 4 }}>\n        <h1\n          style={{\n            fontSize: token.fontSizeHeading2,\n            fontWeight: 800,\n            color: token.colorTextHeading,\n            margin: 0,\n          }}\n        >\n          Adapters\n        </h1>\n        <p\n          style={{\n            fontSize: token.fontSizeSM,\n            color: token.colorTextSecondary,\n            margin: 0,\n          }}\n        >\n          Manage your infrastructure adapters - database, auth, AI, storage,\n          payments, and admin.\n        </p>\n      </header>\n\n      <section\n        style={{\n          display: \"grid\",\n          gap: token.marginSM,\n          gridTemplateColumns: \"repeat(auto-fit, minmax(200px, 1fr))\",\n        }}\n      >\n        <div\n          style={{\n            borderRadius: token.borderRadiusLG,\n            border: `1px solid ${token.colorBorder}`,\n            backgroundColor: token.colorBgContainer,\n            padding: token.padding,\n            boxShadow: token.boxShadowTertiary,\n          }}\n        >\n          <p\n            style={{\n              fontSize: 12,\n              fontWeight: 600,\n              textTransform: \"uppercase\",\n              color: token.colorTextSecondary,\n              margin: 0,\n            }}\n          >\n            Total\n          </p>\n          <p\n            style={{\n              marginTop: 4,\n              fontSize: token.fontSizeHeading2,\n              fontWeight: 800,\n              color: token.colorTextHeading,\n              margin: 0,\n            }}\n          >\n            {counts.total}\n          </p>\n          <p\n            style={{\n              fontSize: 10,\n              color: token.colorTextSecondary,\n              margin: 0,\n            }}\n          >\n            adapter domains\n          </p>\n        </div>\n\n        <div\n          style={{\n            borderRadius: token.borderRadiusLG,\n            border: `1px solid ${token.colorSuccessBorder}`,\n            backgroundColor: token.colorSuccessBg,\n            padding: token.padding,\n            boxShadow: token.boxShadowTertiary,\n          }}\n        >\n          <p\n            style={{\n              fontSize: 12,\n              fontWeight: 600,\n              textTransform: \"uppercase\",\n              color: token.colorText,\n              margin: 0,\n            }}\n          >\n            Connected\n          </p>\n          <p\n            style={{\n              marginTop: 4,\n              fontSize: token.fontSizeHeading2,\n              fontWeight: 800,\n              color: token.colorTextHeading,\n              margin: 0,\n            }}\n          >\n            {counts.connected}\n          </p>\n          <p\n            style={{\n              fontSize: 10,\n              color: token.colorTextSecondary,\n              margin: 0,\n            }}\n          >\n            active adapters\n          </p>\n        </div>\n\n        {counts.error > 0 && (\n          <div\n            style={{\n              borderRadius: token.borderRadiusLG,\n              border: `1px solid ${token.colorErrorBorder}`,\n              backgroundColor: token.colorErrorBg,\n              padding: token.padding,\n              boxShadow: token.boxShadowTertiary,\n            }}\n          >\n            <p\n              style={{\n                fontSize: 12,\n                fontWeight: 600,\n                textTransform: \"uppercase\",\n                color: token.colorText,\n                margin: 0,\n              }}\n            >\n              Errors\n            </p>\n            <p\n              style={{\n                marginTop: 4,\n                fontSize: token.fontSizeHeading2,\n                fontWeight: 800,\n                color: token.colorTextHeading,\n                margin: 0,\n              }}\n            >\n              {counts.error}\n            </p>\n            <p\n              style={{\n                fontSize: 10,\n                color: token.colorTextSecondary,\n                margin: 0,\n              }}\n            >\n              need attention\n            </p>\n          </div>\n        )}\n      </section>\n\n      {registryEntries && registryEntries.length > 0 && (\n        <section\n          style={{\n            borderRadius: token.borderRadiusLG,\n            border: `1px solid ${token.colorBorder}`,\n            backgroundColor: token.colorBgContainer,\n            padding: token.padding,\n            boxShadow: token.boxShadowTertiary,\n          }}\n        >\n          <div\n            style={{\n              display: \"flex\",\n              flexWrap: \"wrap\",\n              alignItems: \"center\",\n              justifyContent: \"space-between\",\n              gap: token.marginSM,\n            }}\n          >\n            <div>\n              <p\n                style={{\n                  fontSize: 12,\n                  fontWeight: 600,\n                  textTransform: \"uppercase\",\n                  color: token.colorTextSecondary,\n                  margin: 0,\n                }}\n              >\n                Adapter Registry\n              </p>\n              <p\n                style={{\n                  fontSize: token.fontSizeSM,\n                  color: token.colorTextSecondary,\n                  margin: 0,\n                }}\n              >\n                Live adapter registry entries.\n              </p>\n            </div>\n            <div\n              style={{\n                display: \"flex\",\n                gap: token.marginSM,\n                fontSize: 12,\n                color: token.colorTextSecondary,\n              }}\n            >\n              <span>{registryEntries.length} entries</span>\n            </div>\n          </div>\n          <div\n            style={{\n              marginTop: token.margin,\n              display: \"grid\",\n              gap: token.marginXS,\n              gridTemplateColumns: \"repeat(auto-fit, minmax(250px, 1fr))\",\n            }}\n          >\n            {registryEntries.map((entry) => (\n              <div\n                key={`${entry.domain}-${entry.provider}`}\n                style={{\n                  borderRadius: token.borderRadiusSM,\n                  border: `1px solid ${token.colorBorder}`,\n                  backgroundColor: token.colorBgLayout,\n                  padding: \"12px 16px\",\n                }}\n              >\n                <div\n                  style={{\n                    display: \"flex\",\n                    alignItems: \"center\",\n                    justifyContent: \"space-between\",\n                    gap: token.marginSM,\n                  }}\n                >\n                  <div>\n                    <p\n                      style={{\n                        fontSize: token.fontSizeSM,\n                        fontWeight: 600,\n                        color: token.colorText,\n                        margin: 0,\n                      }}\n                    >\n                      {entry.domain}\n                    </p>\n                    <p\n                      style={{\n                        fontSize: 12,\n                        color: token.colorTextSecondary,\n                        margin: 0,\n                      }}\n                    >\n                      {entry.provider}\n                    </p>\n                  </div>\n                  <AdapterStatusBadge status={entry.status} />\n                </div>\n              </div>\n            ))}\n          </div>\n        </section>\n      )}\n\n      <section\n        style={{\n          display: \"flex\",\n          flexWrap: \"wrap\",\n          alignItems: \"center\",\n          gap: 8,\n        }}\n      >\n        <button\n          type=\"button\"\n          onClick={() => setFilterStatus(undefined)}\n          aria-pressed={!filterStatus}\n          style={{\n            borderRadius: token.borderRadiusLG,\n            border: `1px solid ${!filterStatus ? token.colorPrimaryBorder : token.colorBorder}`,\n            padding: \"6px 12px\",\n            fontSize: 12,\n            fontWeight: 600,\n            transition: \"all 0.2s\",\n            backgroundColor: !filterStatus\n              ? token.colorPrimaryBg\n              : token.colorBgContainer,\n            color: !filterStatus ? token.colorText : token.colorTextSecondary,\n            cursor: \"pointer\",\n          }}\n          onMouseEnter={(e) => {\n            if (filterStatus) e.currentTarget.style.color = token.colorText;\n          }}\n          onMouseLeave={(e) => {\n            if (filterStatus)\n              e.currentTarget.style.color = token.colorTextSecondary;\n          }}\n        >\n          All\n        </button>\n        {ADAPTER_STATUSES.map((status) => (\n          <button\n            key={status}\n            type=\"button\"\n            onClick={() => setFilterStatus(status)}\n            aria-pressed={filterStatus === status}\n            style={{\n              display: \"flex\",\n              alignItems: \"center\",\n              gap: 6,\n              borderRadius: token.borderRadiusLG,\n              border: `1px solid ${filterStatus === status ? token.colorPrimaryBorder : token.colorBorder}`,\n              padding: \"6px 12px\",\n              fontSize: 12,\n              fontWeight: 600,\n              transition: \"all 0.2s\",\n              backgroundColor:\n                filterStatus === status\n                  ? token.colorPrimaryBg\n                  : token.colorBgContainer,\n              color:\n                filterStatus === status\n                  ? token.colorText\n                  : token.colorTextSecondary,\n              cursor: \"pointer\",\n            }}\n            onMouseEnter={(e) => {\n              if (filterStatus !== status)\n                e.currentTarget.style.color = token.colorText;\n            }}\n            onMouseLeave={(e) => {\n              if (filterStatus !== status)\n                e.currentTarget.style.color = token.colorTextSecondary;\n            }}\n          >\n            <AdapterStatusBadge status={status} showLabel={false} />\n            {status}\n          </button>\n        ))}\n      </section>\n\n      <AdapterList\n        filterStatus={filterStatus}\n        onSelect={(domain) => {\n          if (onNavigateDetail) {\n            onNavigateDetail(domain);\n          } else {\n            setSelectedDomain(domain);\n          }\n        }}\n      />\n\n      {selectedDomain && (\n        <div\n          style={{\n            position: \"fixed\",\n            inset: 0,\n            zIndex: 50,\n            display: \"flex\",\n            alignItems: \"center\",\n            justifyContent: \"center\",\n            backgroundColor: MODAL_OVERLAY_BACKGROUND,\n            backdropFilter: \"blur(4px)\",\n            padding: \"0 16px\",\n          }}\n        >\n          <button\n            type=\"button\"\n            aria-label=\"Close adapter configuration\"\n            style={{\n              position: \"absolute\",\n              inset: 0,\n              border: 0,\n              background: \"transparent\",\n              cursor: \"default\",\n            }}\n            onClick={() => setSelectedDomain(null)}\n          />\n          <div\n            ref={modalRef}\n            style={{\n              position: \"relative\",\n              width: \"100%\",\n              maxWidth: 512,\n              zIndex: 1,\n            }}\n            role=\"dialog\"\n            aria-modal=\"true\"\n            aria-labelledby={modalTitleId}\n            tabIndex={-1}\n          >\n            <AdapterConfigForm\n              domain={selectedDomain}\n              titleId={modalTitleId}\n              onSave={async () => {\n                setSelectedDomain(null);\n              }}\n              onCancel={() => setSelectedDomain(null)}\n            />\n          </div>\n        </div>\n      )}\n    </div>\n  );\n}\n"]}