{"version":3,"sources":["../src/lib/utils.ts","../src/components/AdapterStatusBadge.tsx","../src/components/AdapterCard.tsx","../src/components/AdapterConfigForm.tsx","../src/provider/index.tsx","../src/primitives/index.ts","../src/components/AdapterList.tsx","../src/pages/PageBoundaryFallback.tsx","../src/pages/AdapterDetailPage.tsx","../src/pages/AdaptersPage.tsx"],"names":["twMerge","clsx","cva","jsx","jsxs","Fragment","DOMAIN_ICONS","DOMAIN_LABELS","DOMAIN_DESCRIPTIONS","Show","getProvidersForDomain","createMemo","createSignal","createEffect","For","createContext","ADAPTER_DOMAINS","createLocalStoragePaymentsAdapter","createNoopPaymentsAdapter","createLocalStorageDbAdapter","createLocalStorageAuthAdapter","createLocalStorageAiAdapter","createLocalStorageFileAdapter","createLocalStorageAdminAdapter","createConsoleLoggerAdapter","adapters","isAdaptersConfigured","getDomainConfig","AdapterError","createStore","onCleanup","AdapterContextError","useContext","ErrorBoundary","createUniqueId","ADAPTER_STATUSES"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @module utils\n * @package @geenius/adapters/solidjs\n * @description Provides SolidJS-specific utility helpers for composing\n * Tailwind class names. The module wraps `clsx` and `tailwind-merge` to keep\n * SolidJS component styling deterministic and ergonomic.\n */\n\nimport { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Merge CSS class names with Tailwind support.\n * Combines clsx (for conditional classes) with tailwind-merge (to resolve conflicts).\n *\n * This utility ensures that Tailwind classes override each other correctly:\n * cn('px-2', 'px-4') → 'px-4' (not both)\n * Also handles conditional classes:\n * cn('p-2', isActive() && 'bg-blue-500')\n *\n * @param inputs - Class names, arrays, objects, or conditional values\n * @returns Merged and deduplicated class string\n *\n * @example\n * ```ts\n * cn('px-2 py-1', 'px-4') // 'py-1 px-4'\n * cn('p-2', isActive() && 'bg-blue') // 'p-2 bg-blue' or 'p-2'\n * cn({ 'text-red': isError(), 'text-green': isSuccess() }) // conditional classes\n * ```\n */\nexport function cn(...inputs: ClassValue[]): string {\n  return twMerge(clsx(inputs));\n}\n","/**\n * @module AdapterStatusBadge\n * @package @geenius/adapters/solidjs\n * @description Renders the Tailwind-based adapter status badge for the SolidJS\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 { cva } from \"class-variance-authority\";\nimport type { JSX } from \"solid-js\";\nimport { cn } from \"../lib/utils\";\n\nconst LABELS: Record<AdapterStatusType, string> = {\n  connected: \"Connected\",\n  disconnected: \"Disconnected\",\n  error: \"Error\",\n  initializing: \"Initializing\",\n};\n\nconst badgeVariants = cva(\n  \"inline-flex items-center gap-1.5 rounded-full border px-2.5 py-0.5 font-semibold uppercase transition-colors motion-reduce:transition-none\",\n  {\n    variants: {\n      status: {\n        connected: \"border-primary/20 bg-primary/10 text-primary\",\n        disconnected: \"border-border bg-muted text-muted-foreground\",\n        error: \"border-destructive/20 bg-destructive/10 text-destructive\",\n        initializing: \"border-accent/20 bg-accent/10 text-accent\",\n      },\n      size: {\n        sm: \"text-[0.625rem]\",\n        md: \"text-xs\",\n      },\n    },\n    defaultVariants: {\n      status: \"disconnected\",\n      size: \"sm\",\n    },\n  },\n);\n\nconst dotVariants = cva(\"h-1.5 w-1.5 rounded-full\", {\n  variants: {\n    status: {\n      connected: \"bg-primary\",\n      disconnected: \"bg-muted-foreground\",\n      error: \"bg-destructive\",\n      initializing: \"bg-accent animate-pulse motion-reduce:animate-none\",\n    },\n    size: {\n      sm: \"\",\n      md: \"h-2 w-2\",\n    },\n  },\n  defaultVariants: {\n    status: \"disconnected\",\n    size: \"sm\",\n  },\n});\n\n/**\n * Props for rendering the SolidJS 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 class Optional class name merged into the badge wrapper.\n */\nexport interface AdapterStatusBadgeProps {\n  status: AdapterStatusType;\n  showLabel?: boolean;\n  size?: \"sm\" | \"md\";\n  class?: string;\n}\n\n/**\n * Renders a compact SolidJS 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  props: AdapterStatusBadgeProps,\n): JSX.Element {\n  // Icon-only branch: matches the React reference's role=\"img\" + aria-label\n  // contract so assistive tech announces the badge as an image with a label\n  // rather than seeing an unlabeled decorative span.\n  if (props.showLabel === false) {\n    return (\n      <span\n        aria-label={`${LABELS[props.status]} adapter status`}\n        role=\"img\"\n        class={cn(\n          badgeVariants({ status: props.status, size: props.size ?? \"sm\" }),\n          props.class,\n        )}\n      >\n        <span\n          aria-hidden=\"true\"\n          class={dotVariants({\n            status: props.status,\n            size: props.size ?? \"sm\",\n          })}\n        />\n      </span>\n    );\n  }\n\n  return (\n    <span\n      class={cn(\n        badgeVariants({ status: props.status, size: props.size ?? \"sm\" }),\n        props.class,\n      )}\n    >\n      <span\n        aria-hidden=\"true\"\n        class={dotVariants({ status: props.status, size: props.size ?? \"sm\" })}\n      />\n      <span>{LABELS[props.status]}</span>\n    </span>\n  );\n}\n","/**\n * @module AdapterCard\n * @package @geenius/adapters/solidjs\n * @description Renders the Tailwind-based adapter summary card for the SolidJS\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 type { JSX } from \"solid-js\";\nimport { Show } from \"solid-js\";\nimport { cn } from \"../lib/utils\";\nimport { AdapterStatusBadge } from \"./AdapterStatusBadge\";\n\n/**\n * Props for rendering a single adapter summary card in the SolidJS 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 onErrorAction Optional recovery callback shown when the status has an error.\n * @property errorActionLabel Optional label for the error recovery action.\n * @property class Optional class name merged into the card container.\n */\nexport interface AdapterCardProps {\n  domain: AdapterDomain;\n  status: AdapterStatusInfo;\n  onClick?: () => void;\n  onErrorAction?: () => void;\n  errorActionLabel?: string;\n  class?: string;\n}\n\n/**\n * Renders a clickable SolidJS summary card for one adapter domain.\n *\n * @param props Card props including the adapter domain, status payload, and click handler.\n * @returns An interactive button when selection is enabled, otherwise a static summary card.\n */\nexport function AdapterCard(props: AdapterCardProps): JSX.Element {\n  const content = (\n    <>\n      <div class=\"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-md border border-border bg-muted text-2xl shadow-sm transition-transform duration-300 group-hover:scale-105 motion-reduce:transition-none motion-reduce:group-hover:scale-100\">\n        {DOMAIN_ICONS[props.domain]}\n      </div>\n      <div class=\"min-w-0 flex-1\">\n        <div class=\"flex items-center justify-between gap-2\">\n          <h3 class=\"truncate text-sm font-bold text-foreground\">\n            {DOMAIN_LABELS[props.domain]}\n          </h3>\n          <AdapterStatusBadge status={props.status.status} />\n        </div>\n        <p class=\"mt-0.5 line-clamp-2 text-xs text-muted-foreground\">\n          {DOMAIN_DESCRIPTIONS[props.domain]}\n        </p>\n        <Show when={props.status.provider && props.status.provider !== \"none\"}>\n          <div class=\"mt-2 flex items-center gap-2\">\n            <span class=\"rounded-md border border-border bg-muted px-2 py-0.5 text-[0.625rem] font-semibold text-muted-foreground\">\n              {props.status.provider}\n            </span>\n            <Show when={props.status.latency}>\n              <span class=\"text-[0.625rem] text-muted-foreground\">\n                {props.status.latency}ms\n              </span>\n            </Show>\n          </div>\n        </Show>\n        <Show when={props.status.error}>\n          {(error) => (\n            <div class=\"mt-1.5 space-y-2\">\n              <p\n                aria-live=\"polite\"\n                class=\"text-[0.625rem] text-destructive\"\n                role=\"alert\"\n              >\n                {error()}\n              </p>\n              <Show when={props.onErrorAction}>\n                <button\n                  class=\"rounded-md border border-destructive/20 px-2 py-1 text-[0.625rem] font-semibold text-destructive transition-colors hover:bg-destructive/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-destructive/20 motion-reduce:transition-none\"\n                  onClick={(event) => {\n                    event.stopPropagation();\n                    props.onErrorAction?.();\n                  }}\n                  type=\"button\"\n                >\n                  {props.errorActionLabel ?? \"Review adapter\"}\n                </button>\n              </Show>\n            </div>\n          )}\n        </Show>\n      </div>\n    </>\n  );\n\n  const className = cn(\n    \"group relative flex w-full items-start gap-4 overflow-hidden rounded-lg border border-border bg-card p-5 text-left text-card-foreground shadow-sm transition-colors duration-200 motion-reduce:transition-none\",\n    props.onClick\n      ? \"hover:border-primary/20 hover:bg-accent/5 hover:shadow-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/30\"\n      : \"cursor-default\",\n    props.class,\n  );\n\n  if (!props.onClick || props.onErrorAction) {\n    return (\n      <article\n        aria-label={`${DOMAIN_LABELS[props.domain]} adapter - ${props.status.status}`}\n        class={className}\n        onClick={props.onClick}\n        onKeyDown={(event) => {\n          if (!props.onClick || event.target !== event.currentTarget) {\n            return;\n          }\n\n          if (event.key === \"Enter\" || event.key === \" \") {\n            event.preventDefault();\n            props.onClick();\n          }\n        }}\n        role={props.onClick ? \"button\" : undefined}\n        tabIndex={props.onClick ? 0 : undefined}\n      >\n        {content}\n      </article>\n    );\n  }\n\n  return (\n    <button\n      type=\"button\"\n      onClick={props.onClick}\n      class={className}\n      aria-label={`${DOMAIN_LABELS[props.domain]} adapter - ${props.status.status}`}\n    >\n      {content}\n    </button>\n  );\n}\n","/**\n * @module AdapterConfigForm\n * @package @geenius/adapters/solidjs\n * @description Renders the Tailwind-based SolidJS adapter configuration form.\n * It provides a variant-parity counterpart to the React form while preserving\n * Solid primitives and reactivity semantics.\n */\n\nimport type { AdapterDomain, DomainAdapterConfig } from \"@geenius/adapters\";\nimport { DOMAIN_LABELS, getProvidersForDomain } from \"@geenius/adapters\";\nimport { cva } from \"class-variance-authority\";\nimport type { JSX } from \"solid-js\";\nimport { createEffect, createMemo, createSignal, For, Show } from \"solid-js\";\nimport { cn } from \"../lib/utils\";\n\n/**\n * Props accepted by the SolidJS 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 class Optional class 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  class?: string;\n  titleId?: string;\n}\n\n// Launch DB axis ids (matches React reference). For the db domain we filter\n// the provider chooser to localStorage (dev/mock) + these four production\n// backends, so library variants don't surface deferred or BYOD-only entries.\nconst LAUNCH_DB_PROVIDER_IDS = new Set([\n  \"convex\",\n  \"neon\",\n  \"cloudflareKV\",\n  \"memory\",\n]);\n\ninterface ProviderOptionField {\n  key: string;\n  label: string;\n  description: string;\n  placeholder?: string;\n  inputMode?: \"text\" | \"numeric\";\n}\n\n// Provider-specific option fields (parity with React reference). Surfaced as\n// extra inputs under the provider chooser; values flow into `config.options`.\nconst PROVIDER_OPTION_FIELDS: Partial<\n  Record<AdapterDomain, Record<string, ProviderOptionField[]>>\n> = {\n  db: {\n    convex: [\n      {\n        key: \"deployment\",\n        label: \"Deployment\",\n        description: \"Convex deployment or project slug.\",\n        placeholder: \"team:project\",\n      },\n    ],\n    neon: [\n      {\n        key: \"database\",\n        label: \"Database\",\n        description: \"Database name or branch label for downstream wiring.\",\n        placeholder: \"main\",\n      },\n    ],\n    cloudflareKV: [\n      {\n        key: \"namespace\",\n        label: \"KV Namespace\",\n        description: \"Worker binding name used by the downstream KV adapter.\",\n        placeholder: \"ADAPTERS_KV\",\n      },\n      {\n        key: \"defaultTtlSeconds\",\n        label: \"Default TTL Seconds\",\n        description: \"Optional TTL for cache/session style records.\",\n        placeholder: \"300\",\n        inputMode: \"numeric\",\n      },\n    ],\n    memory: [\n      {\n        key: \"seed\",\n        label: \"Fixture Seed\",\n        description: \"Optional deterministic seed for local test data.\",\n        placeholder: \"demo\",\n      },\n    ],\n  },\n};\n\nfunction getSelectableProviders(domain: AdapterDomain) {\n  const providers = getProvidersForDomain(domain);\n  if (domain !== \"db\") return providers;\n  return providers.filter(\n    (entry) =>\n      entry.id === \"localStorage\" || LAUNCH_DB_PROVIDER_IDS.has(entry.id),\n  );\n}\n\nfunction getOptionFields(\n  domain: AdapterDomain,\n  provider: string,\n): ProviderOptionField[] {\n  return PROVIDER_OPTION_FIELDS[domain]?.[provider] ?? [];\n}\n\nfunction stringifyOptionValue(value: unknown): string {\n  if (value === undefined || value === null) return \"\";\n  return String(value);\n}\n\nfunction coerceOptionValue(field: ProviderOptionField, value: string): unknown {\n  const trimmed = value.trim();\n  if (trimmed === \"\") return \"\";\n  if (field.inputMode !== \"numeric\") return trimmed;\n  const numeric = Number(trimmed);\n  return Number.isFinite(numeric) ? numeric : trimmed;\n}\n\nfunction validateOptionValues(\n  domain: AdapterDomain,\n  provider: string,\n  optionValues: Record<string, string>,\n): string | null {\n  if (domain !== \"db\" || provider !== \"cloudflareKV\") return null;\n  if (!optionValues.namespace?.trim()) {\n    return \"KV namespace is required\";\n  }\n  const ttlValue = optionValues.defaultTtlSeconds?.trim();\n  if (ttlValue) {\n    const ttlSeconds = Number(ttlValue);\n    if (!Number.isInteger(ttlSeconds) || ttlSeconds <= 0) {\n      return \"Default TTL seconds must be a positive integer\";\n    }\n  }\n  return null;\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 SolidJS variant\n * @example\n * ```tsx\n * <AdapterConfigForm\n *   domain=\"storage\"\n *   onSave={async (config) => saveConfig('storage', config)}\n *   onCancel={() => setOpen(false)}\n * />\n * ```\n */\nexport function AdapterConfigForm(props: AdapterConfigFormProps): JSX.Element {\n  const providers = createMemo(() => getSelectableProviders(props.domain));\n  const initialProviderId = (): string =>\n    providers().find((entry) => entry.id === props.initialConfig?.provider)\n      ?.id ??\n    providers()[0]?.id ??\n    \"\";\n\n  const [provider, setProvider] = createSignal(initialProviderId());\n  const [apiKey, setApiKey] = createSignal(props.initialConfig?.apiKey ?? \"\");\n  const [baseUrl, setBaseUrl] = createSignal(\n    props.initialConfig?.baseUrl ?? \"\",\n  );\n  const [optionValues, setOptionValues] = createSignal<Record<string, string>>(\n    Object.fromEntries(\n      Object.entries(props.initialConfig?.options ?? {}).map(([key, value]) => [\n        key,\n        stringifyOptionValue(value),\n      ]),\n    ),\n  );\n  const [isSaving, setIsSaving] = createSignal(false);\n  const [error, setError] = createSignal<string | null>(null);\n  const selectedMeta = () =>\n    providers().find((entry) => entry.id === provider());\n\n  const needsApiKey = () => selectedMeta()?.requiresApiKey ?? false;\n  const needsBaseUrl = () => selectedMeta()?.requiresBaseUrl ?? false;\n  const optionFields = createMemo(() =>\n    getOptionFields(props.domain, provider()),\n  );\n\n  createEffect(() => {\n    const domainKey = props.domain;\n    const config = props.initialConfig;\n    void domainKey;\n    void config;\n    const selectableProviders = providers();\n    const initialProvider =\n      selectableProviders.find((entry) => entry.id === config?.provider)?.id ??\n      selectableProviders[0]?.id ??\n      \"\";\n\n    setProvider(initialProvider);\n    setApiKey(config?.apiKey ?? \"\");\n    setBaseUrl(config?.baseUrl ?? \"\");\n    setOptionValues(\n      Object.fromEntries(\n        Object.entries(config?.options ?? {}).map(([key, value]) => [\n          key,\n          stringifyOptionValue(value),\n        ]),\n      ),\n    );\n    setError(null);\n  });\n\n  createEffect(() => {\n    if (!needsApiKey() && apiKey()) {\n      setApiKey(\"\");\n    }\n    if (!needsBaseUrl() && baseUrl()) {\n      setBaseUrl(\"\");\n    }\n  });\n\n  const handleProviderChange = (nextProvider: string): void => {\n    if (nextProvider === provider()) return;\n    setProvider(nextProvider);\n    setApiKey(\"\");\n    setBaseUrl(\"\");\n    setOptionValues({});\n  };\n\n  const providerOptionVariants = cva(\n    \"flex items-start gap-4 rounded-lg border p-4 text-left transition-colors motion-reduce:transition-none duration-200\",\n    {\n      variants: {\n        selected: {\n          true: \"border-primary/30 bg-primary/10 shadow-sm\",\n          false:\n            \"border-border bg-muted/20 hover:border-primary/20 hover:bg-accent/5\",\n        },\n      },\n      defaultVariants: { selected: false },\n    },\n  );\n\n  const tierVariants = cva(\n    \"mt-2 inline-flex rounded px-2 py-0.5 text-[0.5rem] font-bold uppercase\",\n    {\n      variants: {\n        tier: {\n          pronto: \"bg-primary/10 text-primary\",\n          lancio: \"bg-accent/10 text-accent\",\n          studio: \"bg-muted text-muted-foreground\",\n        },\n      },\n      defaultVariants: { tier: \"studio\" },\n    },\n  );\n\n  const handleSubmit = async (event: Event): 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    if (needsBaseUrl() && !baseUrl().trim()) {\n      setError(\"Base URL is required\");\n      return;\n    }\n\n    const optionError = validateOptionValues(\n      props.domain,\n      provider(),\n      optionValues(),\n    );\n    if (optionError) {\n      setError(optionError);\n      return;\n    }\n\n    setIsSaving(true);\n    try {\n      const config: DomainAdapterConfig = { provider: provider() };\n      if (needsApiKey() && apiKey().trim()) {\n        config.apiKey = apiKey().trim();\n      }\n      if (needsBaseUrl() && baseUrl().trim()) {\n        config.baseUrl = baseUrl().trim();\n      }\n      const currentOptions = optionValues();\n      const options = Object.fromEntries(\n        optionFields()\n          .map((field) => [\n            field.key,\n            coerceOptionValue(field, currentOptions[field.key] ?? \"\"),\n          ])\n          .filter(([, value]) => value !== \"\"),\n      );\n      if (Object.keys(options).length > 0) {\n        config.options = options;\n      }\n      await props.onSave(config);\n    } catch (err) {\n      setError(err instanceof Error ? err.message : \"Failed to save\");\n    } finally {\n      setIsSaving(false);\n    }\n  };\n\n  return (\n    <form\n      onSubmit={handleSubmit}\n      class={cn(\n        \"space-y-6 rounded-lg border border-border bg-card p-6 shadow-sm\",\n        props.class,\n      )}\n      noValidate\n    >\n      <div>\n        <h3 id={props.titleId} class=\"text-lg font-bold text-foreground\">\n          Configure {DOMAIN_LABELS[props.domain]}\n        </h3>\n        <p class=\"mt-1 text-sm text-muted-foreground\">\n          Select and configure your preferred provider.\n        </p>\n      </div>\n\n      <Show when={error()}>\n        <div\n          class=\"rounded-md border border-destructive/20 bg-destructive/10 px-4 py-3 text-sm text-destructive\"\n          role=\"alert\"\n        >\n          {error()}\n        </div>\n      </Show>\n\n      <fieldset class=\"space-y-3\">\n        {/* Radio group with fieldset/legend matches the React reference's\n            a11y contract for a mutually exclusive choice. */}\n        <legend class=\"block text-xs font-semibold uppercase text-muted-foreground\">\n          Provider\n        </legend>\n        <div role=\"radiogroup\" class=\"grid gap-2 sm:grid-cols-2\">\n          <For each={providers()}>\n            {(providerMeta) => {\n              const inputId = `adapter-${props.domain}-provider-${providerMeta.id}`;\n              const checked = () => provider() === providerMeta.id;\n              return (\n                <label\n                  for={inputId}\n                  class={providerOptionVariants({ selected: checked() })}\n                >\n                  <input\n                    type=\"radio\"\n                    id={inputId}\n                    name={`adapter-${props.domain}-provider`}\n                    value={providerMeta.id}\n                    checked={checked()}\n                    onChange={() => handleProviderChange(providerMeta.id)}\n                    class=\"sr-only\"\n                  />\n                  <div class=\"flex-1\">\n                    <span class=\"block text-sm font-bold text-foreground\">\n                      {providerMeta.name}\n                    </span>\n                    <span class=\"mt-1 block text-xs leading-relaxed text-muted-foreground\">\n                      {providerMeta.description}\n                    </span>\n                    <span class={tierVariants({ tier: providerMeta.tier })}>\n                      {providerMeta.tier}\n                    </span>\n                  </div>\n                </label>\n              );\n            }}\n          </For>\n        </div>\n      </fieldset>\n\n      <Show when={needsApiKey()}>\n        <div class=\"space-y-1.5\">\n          <label\n            class=\"block text-xs font-semibold uppercase text-muted-foreground\"\n            for={`adapter-${props.domain}-apiKey`}\n          >\n            API Key\n          </label>\n          <input\n            id={`adapter-${props.domain}-apiKey`}\n            type=\"password\"\n            value={apiKey()}\n            onInput={(event) => setApiKey(event.currentTarget.value)}\n            placeholder={`Enter ${selectedMeta()?.name ?? provider() ?? \"provider\"} API key`}\n            autocomplete=\"off\"\n            class=\"w-full rounded-md border border-input bg-background px-4 py-3 text-sm text-foreground shadow-sm outline-none transition-colors motion-reduce:transition-none placeholder:text-muted-foreground focus:border-primary focus:ring-2 focus:ring-primary/20\"\n          />\n        </div>\n      </Show>\n\n      <Show when={needsBaseUrl()}>\n        <div class=\"space-y-1.5\">\n          <label\n            class=\"block text-xs font-semibold uppercase text-muted-foreground\"\n            for={`adapter-${props.domain}-url`}\n          >\n            Base URL\n          </label>\n          <input\n            id={`adapter-${props.domain}-url`}\n            type=\"url\"\n            value={baseUrl()}\n            onInput={(event) => setBaseUrl(event.currentTarget.value)}\n            placeholder=\"https://...\"\n            class=\"w-full rounded-md border border-input bg-background px-4 py-3 text-sm text-foreground shadow-sm outline-none transition-colors motion-reduce:transition-none placeholder:text-muted-foreground focus:border-primary focus:ring-2 focus:ring-primary/20\"\n          />\n        </div>\n      </Show>\n\n      <Show when={optionFields().length > 0}>\n        <div class=\"grid gap-3 sm:grid-cols-2\">\n          <For each={optionFields()}>\n            {(field) => {\n              const inputId = `adapter-${props.domain}-${field.key}`;\n              const hintId = `${inputId}-hint`;\n              return (\n                <div class=\"space-y-1.5\">\n                  <label\n                    for={inputId}\n                    class=\"block text-xs font-semibold uppercase text-muted-foreground\"\n                  >\n                    {field.label}\n                  </label>\n                  <input\n                    id={inputId}\n                    type=\"text\"\n                    inputMode={field.inputMode}\n                    value={optionValues()[field.key] ?? \"\"}\n                    onInput={(event) => {\n                      const next = event.currentTarget.value;\n                      setOptionValues((current) => ({\n                        ...current,\n                        [field.key]: next,\n                      }));\n                    }}\n                    placeholder={field.placeholder}\n                    aria-describedby={hintId}\n                    class=\"w-full rounded-md border border-input bg-background px-4 py-3 text-sm text-foreground shadow-sm outline-none transition-colors motion-reduce:transition-none placeholder:text-muted-foreground focus:border-primary focus:ring-2 focus:ring-primary/20\"\n                  />\n                  <p id={hintId} class=\"text-xs text-muted-foreground\">\n                    {field.description}\n                  </p>\n                </div>\n              );\n            }}\n          </For>\n        </div>\n      </Show>\n\n      <div class=\"flex justify-end gap-3 pt-2\">\n        <Show when={props.onCancel}>\n          <button\n            type=\"button\"\n            onClick={() => props.onCancel?.()}\n            class=\"rounded-md px-5 py-2.5 text-sm font-semibold text-muted-foreground transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 motion-reduce:transition-none hover:text-foreground\"\n          >\n            Cancel\n          </button>\n        </Show>\n        <button\n          type=\"submit\"\n          disabled={isSaving() || !provider()}\n          class=\"inline-flex items-center justify-center rounded-md border border-primary/30 bg-primary px-8 py-3 text-sm font-bold text-primary-foreground shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 motion-reduce:transition-none hover:bg-primary/90 disabled:pointer-events-none disabled:opacity-50\"\n        >\n          {isSaving() ? \"Saving...\" : \"Save Configuration\"}\n        </button>\n      </div>\n    </form>\n  );\n}\n","/**\n * @module index\n * @package @geenius/adapters/solidjs\n * @description Implements the SolidJS adapter provider and context access\n * helpers. This module owns adapter status initialization for the SolidJS\n * runtime package while keeping the shared package framework-agnostic.\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 {\n  ADAPTER_DOMAINS,\n  AdapterContextError,\n  AdapterError,\n  createConsoleLoggerAdapter,\n  createLocalStorageAdminAdapter,\n  createLocalStorageAiAdapter,\n  createLocalStorageAuthAdapter,\n  createLocalStorageDbAdapter,\n  createLocalStorageFileAdapter,\n  createLocalStoragePaymentsAdapter,\n  createNoopPaymentsAdapter,\n  DOMAIN_LABELS,\n  getDomainConfig,\n  isAdaptersConfigured,\n} from \"@geenius/adapters\";\nimport type { Context, JSX } from \"solid-js\";\nimport {\n  createContext,\n  createEffect,\n  createMemo,\n  createSignal,\n  onCleanup,\n  useContext,\n} from \"solid-js\";\nimport { createStore } from \"solid-js/store\";\n\n/**\n * Complete adapter implementation map accepted by the SolidJS provider.\n *\n * @property db Database adapter implementation.\n * @property auth Authentication adapter implementation.\n * @property payments Payments adapter implementation.\n * @property ai AI adapter implementation.\n * @property storage File-storage adapter implementation.\n * @property admin Admin adapter implementation.\n * @property logger Logger adapter implementation.\n */\nexport interface AdapterDomainMap {\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 * Public SolidJS provider domain key alias derived from the adapter map.\n *\n * Use this when a consumer needs a key constrained to configured provider slots\n * rather than the wider shared adapter-domain vocabulary.\n */\nexport type AdapterDomainKey = keyof AdapterDomainMap;\n\n/**\n * SolidJS 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 fileStorage Alias for the file-storage adapter accepted by the slot API.\n * @property admin Admin adapter implementation when configured.\n * @property logger Logger adapter implementation when configured.\n */\nexport interface AdapterSet extends Partial<AdapterDomainMap> {\n  fileStorage?: FileStorageAdapter;\n}\n\n/** Registry shape accepted by the public SolidJS provider. */\nexport type AdapterRegistry = AdapterSet;\n\n/**\n * SolidJS adapter context value exposed to primitives 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 AdapterDomainKey>(domain: K) => AdapterDomainMap[K];\n  isReady: (domain: AdapterDomain) => boolean;\n  isLoading: boolean;\n}\n\nconst AdapterContext: Context<AdapterContextValue | undefined> =\n  createContext<AdapterContextValue>();\ntype ProviderChildren = Parameters<\n  typeof AdapterContext.Provider\n>[0][\"children\"];\n\n/**\n * Map of domain-specific health probes supplied by the host app.\n *\n * When a domain has a custom probe, the provider calls it instead of the\n * built-in probe during the health-check lifecycle. The probe receives the\n * adapter instance for its domain and the full adapter bag.\n */\nexport type AdapterHealthProbeMap = Partial<{\n  [D in AdapterDomainKey]: (\n    adapter: AdapterDomainMap[D],\n    adapters: AdapterSet,\n  ) => Promise<void> | void;\n}>;\n\n/**\n * Props accepted by the SolidJS adapter provider.\n *\n * @property adapters Adapter bag made available to descendant primitives and components.\n * @property registry Optional registry alias for adapter overrides.\n * @property db Optional direct database adapter override.\n * @property auth Optional direct authentication adapter override.\n * @property payments Optional direct payments adapter override.\n * @property ai Optional direct AI adapter override.\n * @property storage Optional direct file-storage adapter override.\n * @property fileStorage Optional slot-API alias for the file-storage adapter.\n * @property admin Optional direct admin adapter override.\n * @property logger Optional direct logger adapter override.\n * @property children Solid subtree that should receive adapter context.\n * @property healthCheck Whether the provider should probe configured adapters on mount.\n * @property healthProbes Optional domain-specific health probes supplied by the host app.\n * @property statusOverrides Optional deterministic status overrides for tests and previews.\n * @property onError Optional typed error callback invoked when provider lifecycle checks fail.\n */\nexport interface AdapterProviderProps extends Partial<AdapterDomainMap> {\n  adapters?: AdapterSet;\n  registry?: Partial<AdapterRegistry>;\n  fileStorage?: FileStorageAdapter;\n  children: ProviderChildren;\n  healthCheck?: boolean;\n  healthProbes?: AdapterHealthProbeMap;\n  statusOverrides?: Partial<Record<AdapterDomain, Partial<AdapterStatusInfo>>>;\n  onError?: (error: AdapterError) => void;\n}\n\n/**\n * Public compatibility alias for the SolidJS adapter provider props.\n *\n * The plural name mirrors the public `AdaptersProvider` component alias while\n * preserving the exact same prop contract as `AdapterProviderProps`.\n */\nexport type AdaptersProviderProps = AdapterProviderProps;\n\ninterface ResolvedAdapterSet {\n  adapters: AdapterSet;\n  fallbackDomains: ReadonlySet<AdapterDomainKey>;\n}\n\nconst ADAPTER_DOMAIN_KEYS = ADAPTER_DOMAINS as readonly AdapterDomainKey[];\n\nconst DEFAULT_PROVIDER_BY_DOMAIN: Record<AdapterDomainKey, string> = {\n  db: \"localStorage\",\n  auth: \"localStorage\",\n  payments: \"localStorage\",\n  ai: \"localStorage\",\n  storage: \"localStorage\",\n  admin: \"localStorage\",\n  logger: \"console\",\n};\n\nfunction createDefaultPaymentsAdapter(): PaymentsAdapter {\n  try {\n    return createLocalStoragePaymentsAdapter();\n  } catch {\n    return createNoopPaymentsAdapter();\n  }\n}\n\nfunction createDefaultAdapter(\n  domain: AdapterDomainKey,\n): AdapterDomainMap[AdapterDomainKey] {\n  switch (domain) {\n    case \"db\":\n      return createLocalStorageDbAdapter();\n    case \"auth\":\n      return createLocalStorageAuthAdapter();\n    case \"payments\":\n      return createDefaultPaymentsAdapter();\n    case \"ai\":\n      return createLocalStorageAiAdapter();\n    case \"storage\":\n      return createLocalStorageFileAdapter();\n    case \"admin\":\n      return createLocalStorageAdminAdapter();\n    case \"logger\":\n      return createConsoleLoggerAdapter();\n  }\n}\n\nfunction setResolvedAdapter(\n  adapters: AdapterSet,\n  fallbackDomains: Set<AdapterDomainKey>,\n  domain: AdapterDomainKey,\n  adapter: AdapterDomainMap[AdapterDomainKey] | undefined,\n): void {\n  if (adapter === undefined) {\n    return;\n  }\n\n  const writableAdapters = adapters as Partial<\n    Record<AdapterDomainKey, AdapterDomainMap[AdapterDomainKey]>\n  >;\n  writableAdapters[domain] = adapter;\n  fallbackDomains.delete(domain);\n}\n\nfunction setDefaultAdapter(\n  adapters: AdapterSet,\n  domain: AdapterDomainKey,\n): void {\n  if (adapters[domain] !== undefined) {\n    return;\n  }\n\n  const writableAdapters = adapters as Partial<\n    Record<AdapterDomainKey, AdapterDomainMap[AdapterDomainKey]>\n  >;\n  writableAdapters[domain] = createDefaultAdapter(domain);\n}\n\nfunction resolveAdapterSet(props: AdapterProviderProps): ResolvedAdapterSet {\n  const fallbackDomains = new Set<AdapterDomainKey>(ADAPTER_DOMAIN_KEYS);\n  const provided: AdapterSet = {\n    ...(props.registry ?? {}),\n    ...(props.adapters ?? {}),\n  };\n  const adapters: AdapterSet = {};\n\n  for (const domain of ADAPTER_DOMAIN_KEYS) {\n    setResolvedAdapter(adapters, fallbackDomains, domain, provided[domain]);\n  }\n\n  setResolvedAdapter(\n    adapters,\n    fallbackDomains,\n    \"storage\",\n    provided.fileStorage,\n  );\n  setResolvedAdapter(adapters, fallbackDomains, \"db\", props.db);\n  setResolvedAdapter(adapters, fallbackDomains, \"auth\", props.auth);\n  setResolvedAdapter(adapters, fallbackDomains, \"payments\", props.payments);\n  setResolvedAdapter(adapters, fallbackDomains, \"ai\", props.ai);\n  setResolvedAdapter(adapters, fallbackDomains, \"storage\", props.storage);\n  setResolvedAdapter(adapters, fallbackDomains, \"storage\", props.fileStorage);\n  setResolvedAdapter(adapters, fallbackDomains, \"admin\", props.admin);\n  setResolvedAdapter(adapters, fallbackDomains, \"logger\", props.logger);\n\n  for (const domain of ADAPTER_DOMAIN_KEYS) {\n    setDefaultAdapter(adapters, domain);\n  }\n\n  adapters.fileStorage = adapters.storage;\n  return { adapters, fallbackDomains };\n}\n\nfunction getInitialProviderName(\n  domain: AdapterDomainKey,\n  adapters: AdapterSet,\n  fallbackDomains: ReadonlySet<AdapterDomainKey>,\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 (fallbackDomains.has(domain)) {\n    return DEFAULT_PROVIDER_BY_DOMAIN[domain];\n  }\n\n  if (!isAdaptersConfigured()) {\n    return \"configured\";\n  }\n\n  return getDomainConfig(domain)?.provider ?? \"configured\";\n}\n\nfunction createInitialStatus(\n  domain: AdapterDomainKey,\n  adapters: AdapterSet,\n  fallbackDomains: ReadonlySet<AdapterDomainKey>,\n  healthCheck: boolean,\n  statusOverrides?: Partial<Record<AdapterDomain, Partial<AdapterStatusInfo>>>,\n): AdapterStatusInfo {\n  const adapter = adapters[domain];\n  return {\n    domain,\n    provider: getInitialProviderName(\n      domain,\n      adapters,\n      fallbackDomains,\n      statusOverrides,\n    ),\n    status: adapter\n      ? healthCheck\n        ? \"initializing\"\n        : \"connected\"\n      : \"disconnected\",\n    lastCheckedAt: Date.now(),\n    ...statusOverrides?.[domain],\n  };\n}\n\nfunction createInitialStatuses(\n  resolved: ResolvedAdapterSet,\n  healthCheck: boolean,\n  statusOverrides?: Partial<Record<AdapterDomain, Partial<AdapterStatusInfo>>>,\n): Record<AdapterDomain, AdapterStatusInfo> {\n  return {\n    db: createInitialStatus(\n      \"db\",\n      resolved.adapters,\n      resolved.fallbackDomains,\n      healthCheck,\n      statusOverrides,\n    ),\n    auth: createInitialStatus(\n      \"auth\",\n      resolved.adapters,\n      resolved.fallbackDomains,\n      healthCheck,\n      statusOverrides,\n    ),\n    payments: createInitialStatus(\n      \"payments\",\n      resolved.adapters,\n      resolved.fallbackDomains,\n      healthCheck,\n      statusOverrides,\n    ),\n    ai: createInitialStatus(\n      \"ai\",\n      resolved.adapters,\n      resolved.fallbackDomains,\n      healthCheck,\n      statusOverrides,\n    ),\n    storage: createInitialStatus(\n      \"storage\",\n      resolved.adapters,\n      resolved.fallbackDomains,\n      healthCheck,\n      statusOverrides,\n    ),\n    admin: createInitialStatus(\n      \"admin\",\n      resolved.adapters,\n      resolved.fallbackDomains,\n      healthCheck,\n      statusOverrides,\n    ),\n    logger: createInitialStatus(\n      \"logger\",\n      resolved.adapters,\n      resolved.fallbackDomains,\n      healthCheck,\n      statusOverrides,\n    ),\n  };\n}\n\nfunction toAdapterError(domain: AdapterDomain, error: unknown): AdapterError {\n  if (error instanceof AdapterError) {\n    return error;\n  }\n\n  const message =\n    error instanceof Error ? error.message : \"Health check failed\";\n  return new AdapterError(message, domain, \"SERVICE_ERROR\", error);\n}\n\nasync function probeAdapterDomain(\n  domain: AdapterDomainKey,\n  adapters: AdapterSet,\n  healthProbes?: AdapterHealthProbeMap,\n): Promise<{ connected: true } | { connected: false; error: string }> {\n  const customProbe = healthProbes?.[domain];\n  if (customProbe) {\n    await customProbe(adapters[domain] as never, adapters);\n    return { connected: true };\n  }\n\n  switch (domain) {\n    case \"db\":\n      await adapters.db?.count(\"__geenius_adapter_healthcheck\");\n      return adapters.db\n        ? { connected: true }\n        : { connected: false, error: \"DB adapter is not configured.\" };\n    case \"auth\":\n      await adapters.auth?.getSession();\n      return adapters.auth\n        ? { connected: true }\n        : { connected: false, error: \"Auth adapter is not configured.\" };\n    case \"payments\":\n      await adapters.payments?.getPlans();\n      return adapters.payments\n        ? { connected: true }\n        : { connected: false, error: \"Payments adapter is not configured.\" };\n    case \"storage\":\n      await adapters.storage?.list(\"__geenius_adapter_healthcheck\");\n      return adapters.storage\n        ? { connected: true }\n        : { connected: false, error: \"Storage adapter is not configured.\" };\n    case \"admin\":\n      await adapters.admin?.getMetrics();\n      return adapters.admin\n        ? { connected: true }\n        : { connected: false, error: \"Admin adapter is not configured.\" };\n    case \"logger\":\n      await adapters.logger?.child({ healthCheck: true });\n      return adapters.logger\n        ? { connected: true }\n        : { connected: false, error: \"Logger adapter is not configured.\" };\n    case \"ai\":\n      await adapters.ai?.complete(\"__geenius_adapter_healthcheck\", {\n        maxTokens: 1,\n        temperature: 0,\n      });\n      return adapters.ai\n        ? { connected: true }\n        : { connected: false, error: \"AI adapter is not configured.\" };\n  }\n}\n\n/**\n * Provides the SolidJS 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 SolidJS context provider that exposes adapters and derived status metadata.\n */\n// @doc\nexport function AdapterProvider(props: AdapterProviderProps): JSX.Element {\n  const resolved = createMemo(() => resolveAdapterSet(props));\n  const adapters = createMemo(() => resolved().adapters);\n  const healthCheckEnabled = createMemo(() => props.healthCheck ?? false);\n  const buildInitialStatuses = (): Record<AdapterDomain, AdapterStatusInfo> =>\n    createInitialStatuses(\n      resolved(),\n      healthCheckEnabled(),\n      props.statusOverrides,\n    );\n\n  const [statuses, setStatuses] = createStore(buildInitialStatuses());\n  const [isLoading, setIsLoading] = createSignal(healthCheckEnabled());\n\n  createEffect(() => {\n    const nextStatuses = buildInitialStatuses();\n    setStatuses(nextStatuses);\n    setIsLoading(healthCheckEnabled());\n  });\n\n  // Reactive probe loop — re-runs whenever the relevant props change so\n  // statusOverrides / healthCheck / healthProbes / adapter swaps are\n  // honored after the initial mount, matching the React reference's\n  // useEffect-driven recomputation.\n  createEffect(() => {\n    // Tracked dependencies (accessed inside the reactive scope):\n    const isEnabled = healthCheckEnabled();\n    const currentAdapters = adapters();\n    const healthProbes = props.healthProbes;\n    if (!isEnabled) {\n      return;\n    }\n\n    let cancelled = false;\n    setIsLoading(true);\n    onCleanup(() => {\n      cancelled = true;\n    });\n    void (async () => {\n      const checks = ADAPTER_DOMAIN_KEYS.map(async (domain) => {\n        const adapter = currentAdapters[domain];\n        if (!adapter) {\n          return;\n        }\n\n        try {\n          if (cancelled) {\n            return;\n          }\n\n          setStatuses(domain, \"status\", \"initializing\");\n\n          const result = await probeAdapterDomain(\n            domain,\n            currentAdapters,\n            healthProbes,\n          );\n          if (cancelled) {\n            return;\n          }\n\n          if (!result.connected) {\n            setStatuses(domain, \"status\", \"disconnected\");\n            setStatuses(domain, \"error\", result.error);\n            setStatuses(domain, \"lastCheckedAt\", Date.now());\n            return;\n          }\n\n          setStatuses(domain, \"status\", \"connected\");\n          setStatuses(domain, \"error\", undefined);\n          setStatuses(domain, \"lastCheckedAt\", Date.now());\n        } catch (error) {\n          const adapterError = toAdapterError(domain, error);\n          props.onError?.(adapterError);\n\n          if (cancelled) {\n            return;\n          }\n\n          setStatuses(domain, \"status\", \"error\");\n          setStatuses(domain, \"error\", adapterError.message);\n          setStatuses(domain, \"lastCheckedAt\", Date.now());\n        }\n      });\n\n      await Promise.allSettled(checks);\n      if (!cancelled) {\n        setIsLoading(false);\n      }\n    })();\n  });\n\n  const getAdapter = <K extends AdapterDomainKey>(\n    domain: K,\n  ): AdapterDomainMap[K] => {\n    const adapter = adapters()[domain] as AdapterDomainMap[K] | undefined;\n    if (adapter === undefined) {\n      throw new AdapterContextError(\n        `${DOMAIN_LABELS[domain]} adapter not configured in <AdapterProvider>`,\n        \"ADAPTER_NOT_CONFIGURED\",\n      );\n    }\n\n    return adapter;\n  };\n\n  const isReady = (domain: AdapterDomain): boolean => {\n    const domainKey = domain as AdapterDomainKey;\n    return !!adapters()[domainKey] && statuses[domain]?.status === \"connected\";\n  };\n\n  const value: AdapterContextValue = {\n    get adapters() {\n      return adapters();\n    },\n    get statuses() {\n      return statuses;\n    },\n    getAdapter,\n    isReady,\n    get isLoading() {\n      return isLoading();\n    },\n  };\n\n  return (\n    <AdapterContext.Provider value={value}>\n      {props.children}\n    </AdapterContext.Provider>\n  );\n}\n\n/**\n * Public compatibility alias matching the plural provider naming convention.\n *\n * Consumers can use either `AdapterProvider` or `AdaptersProvider`; both mount\n * the same SolidJS context and accept `AdapterProviderProps`.\n */\nexport const AdaptersProvider = AdapterProvider;\n\n/**\n * Reads the SolidJS 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 */\n// @doc\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\n  return context;\n}\n","/**\n * @module index\n * @package @geenius/adapters/solidjs\n * @description Defines the SolidJS adapter primitives for reading adapter\n * instances and adapter status state from the SolidJS provider context. These\n * primitives are part of the public SolidJS runtime package and avoid\n * unpublished shared 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 { createMemo } from \"solid-js\";\nimport { useAdapterContext } from \"../provider\";\n\n/**\n * Reads the configured database adapter from the current SolidJS adapter context.\n *\n * @returns The active database adapter implementation for the provider tree.\n * @throws {AdapterContextError} When the provider or adapter is unavailable.\n */\n// @doc\nexport function createDb(): DbAdapter {\n  const context = useAdapterContext();\n  return context.getAdapter(\"db\");\n}\n\n/**\n * Reads the configured authentication adapter from the current SolidJS context.\n *\n * @returns The active authentication adapter implementation.\n * @throws {AdapterContextError} When the provider or adapter is unavailable.\n */\n// @doc\nexport function createAuth(): AuthAdapter {\n  const context = useAdapterContext();\n  return context.getAdapter(\"auth\");\n}\n\n/**\n * Reads the configured authentication adapter from the current SolidJS context.\n * Alias for {@link createAuth} matching the React `useAuthAdapter` convention.\n *\n * @returns The active authentication adapter implementation.\n * @throws {AdapterContextError} When the provider or adapter is unavailable.\n */\n// @doc\nexport function createAuthAdapter(): AuthAdapter {\n  return createAuth();\n}\n\n/**\n * Reads the configured payments adapter from the current SolidJS context.\n *\n * @returns The active payments adapter implementation.\n * @throws {AdapterContextError} When the provider or adapter is unavailable.\n */\n// @doc\nexport function createPayments(): PaymentsAdapter {\n  const context = useAdapterContext();\n  return context.getAdapter(\"payments\");\n}\n\n/**\n * Reads the configured AI adapter from the current SolidJS context.\n *\n * @returns The active AI adapter implementation.\n * @throws {AdapterContextError} When the provider or adapter is unavailable.\n */\n// @doc\nexport function createAi(): AiAdapter {\n  const context = useAdapterContext();\n  return context.getAdapter(\"ai\");\n}\n\n/**\n * Reads the configured file-storage adapter from the current SolidJS context.\n *\n * @returns The active file-storage adapter implementation.\n * @throws {AdapterContextError} When the provider or adapter is unavailable.\n */\n// @doc\nexport function createFileStorage(): FileStorageAdapter {\n  const context = useAdapterContext();\n  return context.getAdapter(\"storage\");\n}\n\n/**\n * Reads the configured file-storage adapter using the PRD's storage primitive name.\n *\n * @returns The active file-storage adapter implementation.\n * @throws {AdapterContextError} When the provider or adapter is unavailable.\n */\n// @doc\nexport function createStorage(): FileStorageAdapter {\n  return createFileStorage();\n}\n\n/**\n * Reads the configured admin adapter from the current SolidJS context.\n *\n * @returns The active admin adapter implementation.\n * @throws {AdapterContextError} When the provider or adapter is unavailable.\n */\n// @doc\nexport function createAdmin(): AdminAdapter {\n  const context = useAdapterContext();\n  return context.getAdapter(\"admin\");\n}\n\n/**\n * Reads the configured logger adapter from the current SolidJS context.\n *\n * @returns The active logger adapter implementation.\n * @throws {AdapterContextError} When the provider or adapter is unavailable.\n */\n// @doc\nexport function createLogger(): LoggerAdapter {\n  const context = useAdapterContext();\n  return context.getAdapter(\"logger\");\n}\n\n/**\n * Returns the full adapter status record from the current SolidJS context.\n *\n * @returns A status object keyed by adapter domain.\n */\n// @doc\nexport function createAdapterStatuses(): Record<\n  AdapterDomain,\n  AdapterStatusInfo\n> {\n  const context = useAdapterContext();\n  return context.statuses;\n}\n\n/**\n * Creates a memoized reader for a single adapter domain status.\n *\n * @param domain Adapter domain whose status should be observed.\n * @returns A getter that always reflects the latest status for that domain.\n */\n// @doc\nexport function createAdapterStatus(\n  domain: AdapterDomain,\n): () => AdapterStatusInfo {\n  const context = useAdapterContext();\n  return createMemo(() => context.statuses[domain]);\n}\n\n/**\n * Creates a memoized readiness reader for a single adapter domain.\n *\n * @param domain Adapter domain to inspect.\n * @returns A getter that reports whether the domain is ready for use.\n */\n// @doc\nexport function createIsAdapterReady(domain: AdapterDomain): () => boolean {\n  const context = useAdapterContext();\n  return createMemo(() => context.isReady(domain));\n}\n\n/**\n * Accesses every adapter and status helper from the current provider context.\n *\n * @returns A stable object exposing adapters, statuses, and loading helpers.\n */\n// @doc\nexport function createAdapters(): {\n  db: DbAdapter | undefined;\n  auth: AuthAdapter | undefined;\n  payments: PaymentsAdapter | undefined;\n  ai: AiAdapter | undefined;\n  storage: FileStorageAdapter | undefined;\n  fileStorage: 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 {\n    get db() {\n      return context.adapters.db;\n    },\n    get auth() {\n      return context.adapters.auth;\n    },\n    get payments() {\n      return context.adapters.payments;\n    },\n    get ai() {\n      return context.adapters.ai;\n    },\n    get storage() {\n      return context.adapters.storage;\n    },\n    get fileStorage() {\n      return context.adapters.storage;\n    },\n    get admin() {\n      return context.adapters.admin;\n    },\n    get logger() {\n      return context.adapters.logger;\n    },\n    get statuses() {\n      return context.statuses;\n    },\n    get isLoading() {\n      return context.isLoading;\n    },\n    isReady: context.isReady,\n  };\n}\n","/**\n * @module AdapterList\n * @package @geenius/adapters/solidjs\n * @description Renders the searchable adapter grid for the SolidJS variant.\n * The list consumes provider status from context and delegates selection\n * events to the hosting page or dashboard shell.\n */\n\nimport type { AdapterDomain, AdapterStatusType } from \"@geenius/adapters\";\nimport { ADAPTER_DOMAINS, DOMAIN_LABELS } from \"@geenius/adapters\";\nimport type { JSX } from \"solid-js\";\nimport { createMemo, createSignal, For, Show } from \"solid-js\";\nimport { cn } from \"../lib/utils\";\nimport { createAdapters } from \"../primitives\";\nimport { AdapterCard } from \"./AdapterCard\";\n\n/**\n * Props for rendering the SolidJS 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 class Optional class name merged into the outer wrapper.\n */\nexport interface AdapterListProps {\n  onSelect?: (domain: AdapterDomain) => void;\n  filterStatus?: AdapterStatusType;\n  class?: string;\n}\n\n/**\n * Renders the searchable SolidJS 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 state when no entries are available.\n */\nexport function AdapterList(props: AdapterListProps): JSX.Element {\n  const ctx = createAdapters();\n  const [search, setSearch] = createSignal(\"\");\n\n  const filtered = createMemo(() => {\n    let domains = [...ADAPTER_DOMAINS];\n    const query = search().toLowerCase();\n\n    if (query) {\n      domains = domains.filter((domain) => {\n        return (\n          (DOMAIN_LABELS[domain] ?? domain).toLowerCase().includes(query) ||\n          domain.includes(query) ||\n          (ctx.statuses[domain]?.provider?.toLowerCase().includes(query) ??\n            false)\n        );\n      });\n    }\n\n    if (props.filterStatus) {\n      domains = domains.filter(\n        (domain) => ctx.statuses[domain]?.status === props.filterStatus,\n      );\n    }\n\n    return domains;\n  });\n\n  return (\n    <Show\n      when={!ctx.isLoading}\n      fallback={\n        <div\n          class={cn(\"grid gap-3\", props.class)}\n          role=\"status\"\n          aria-label=\"Loading adapters\"\n        >\n          <For each={[1, 2, 3, 4]}>\n            {() => (\n              <div class=\"rounded-lg border border-border bg-card p-5 shadow-sm\">\n                <div class=\"flex items-start gap-4\">\n                  <div class=\"h-12 w-12 rounded-md border border-border bg-muted\" />\n                  <div class=\"flex-1 space-y-3 pt-1\">\n                    <div class=\"h-3 w-24 rounded-md bg-muted\" />\n                    <div class=\"h-2 w-48 rounded-md bg-muted/70\" />\n                  </div>\n                </div>\n              </div>\n            )}\n          </For>\n        </div>\n      }\n    >\n      <div class={props.class}>\n        <div class=\"mb-4\">\n          <input\n            type=\"text\"\n            value={search()}\n            onInput={(event) => setSearch(event.currentTarget.value)}\n            placeholder=\"Search adapters...\"\n            aria-label=\"Search adapters\"\n            class=\"w-full rounded-md border border-input bg-background px-4 py-3 text-sm text-foreground shadow-sm outline-none transition-colors motion-reduce:transition-none placeholder:text-muted-foreground focus:border-primary focus:ring-2 focus:ring-primary/20\"\n          />\n        </div>\n\n        <Show\n          when={filtered().length > 0}\n          fallback={\n            <div class=\"rounded-lg border border-border bg-muted/40 p-8 text-center\">\n              <p class=\"text-sm font-medium text-muted-foreground\">\n                {search()\n                  ? \"No adapters match your search\"\n                  : \"No adapters configured\"}\n              </p>\n              <p class=\"mx-auto mt-2 max-w-sm text-xs text-muted-foreground\">\n                {search()\n                  ? \"Clear the search to return to the full adapter list.\"\n                  : \"Check the current filters or configure an adapter from the overview page.\"}\n              </p>\n              <Show when={search()}>\n                <button\n                  class=\"mt-4 rounded-md border border-border bg-background px-4 py-2 text-sm font-semibold text-foreground transition-colors hover:border-primary/30 hover:text-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 motion-reduce:transition-none\"\n                  onClick={() => setSearch(\"\")}\n                  type=\"button\"\n                >\n                  Clear search\n                </button>\n              </Show>\n            </div>\n          }\n        >\n          <ul\n            class=\"m-0 grid list-none gap-3 p-0 sm:grid-cols-2\"\n            aria-label=\"Adapter list\"\n          >\n            <For each={filtered()}>\n              {(domain) => (\n                <li>\n                  <AdapterCard\n                    domain={domain}\n                    status={ctx.statuses[domain]}\n                    onClick={\n                      props.onSelect\n                        ? () => props.onSelect?.(domain)\n                        : undefined\n                    }\n                  />\n                </li>\n              )}\n            </For>\n          </ul>\n        </Show>\n      </div>\n    </Show>\n  );\n}\n","/**\n * @module PageBoundaryFallback\n * @package @geenius/adapters/solidjs\n * @description Shared page-level error recovery UI for SolidJS adapter pages.\n * Mirrors the React `PageErrorBoundary` and solidjs-css `PageBoundaryFallback`\n * to satisfy UI_PROTOCOL.md §2 page-boundary recovery requirements.\n */\n\nimport type { JSX } from \"solid-js\";\nimport { cn } from \"../lib/utils\";\n\ninterface PageBoundaryFallbackProps {\n  class?: string;\n  error: unknown;\n  onRetry: () => void;\n  title: string;\n}\n\nfunction getErrorMessage(error: unknown): string {\n  if (error instanceof Error && error.message.trim().length > 0) {\n    return error.message;\n  }\n\n  if (typeof error === \"string\" && error.trim().length > 0) {\n    return error;\n  }\n\n  return \"The adapter page could not finish rendering.\";\n}\n\nexport function PageBoundaryFallback(\n  props: PageBoundaryFallbackProps,\n): JSX.Element {\n  return (\n    <div class={cn(\"mx-auto max-w-3xl space-y-4\", props.class)}>\n      <div\n        class=\"rounded-lg border border-destructive/20 bg-destructive/10 p-5 text-sm text-destructive shadow-sm\"\n        role=\"alert\"\n        aria-live=\"assertive\"\n      >\n        <p class=\"font-semibold\">{props.title}</p>\n        <p class=\"mt-1\">{getErrorMessage(props.error)}</p>\n        <button\n          type=\"button\"\n          onClick={() => props.onRetry()}\n          class=\"mt-4 rounded-md border border-destructive/30 bg-background px-4 py-2 text-sm font-semibold text-destructive transition-colors hover:bg-destructive/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 motion-reduce:transition-none\"\n        >\n          Retry\n        </button>\n      </div>\n    </div>\n  );\n}\n","/**\n * @module AdapterDetailPage\n * @package @geenius/adapters/solidjs\n * @description Renders the single-domain adapter detail view for the SolidJS\n * variant. The page surfaces current provider health, available providers, and\n * inline configuration for one adapter domain.\n */\n\nimport type { AdapterDomain, DomainAdapterConfig } from \"@geenius/adapters\";\nimport {\n  DOMAIN_DESCRIPTIONS,\n  DOMAIN_ICONS,\n  DOMAIN_LABELS,\n  getProvidersForDomain,\n} from \"@geenius/adapters\";\nimport type { Accessor, JSX } from \"solid-js\";\nimport {\n  createMemo,\n  createSignal,\n  createUniqueId,\n  ErrorBoundary,\n  For,\n  Show,\n} from \"solid-js\";\nimport { AdapterConfigForm } from \"../components/AdapterConfigForm\";\nimport { AdapterStatusBadge } from \"../components/AdapterStatusBadge\";\nimport { cn } from \"../lib/utils\";\nimport { createAdapterStatuses, createAdapters } from \"../primitives\";\nimport { PageBoundaryFallback } from \"./PageBoundaryFallback\";\n\n/**\n * Props for rendering the SolidJS 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 onConfigure Optional callback invoked with submitted adapter configuration.\n * @property class Optional class name merged into the page container.\n */\nexport interface AdapterDetailPageProps {\n  domain: AdapterDomain;\n  onBack?: () => void;\n  onConfigure?: (\n    domain: AdapterDomain,\n    config: DomainAdapterConfig,\n  ) => Promise<void> | void;\n  class?: string;\n}\n\n/**\n * Renders the SolidJS 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(props: AdapterDetailPageProps): JSX.Element {\n  return (\n    <ErrorBoundary\n      fallback={(error, reset) => (\n        <PageBoundaryFallback\n          class={props.class}\n          error={error}\n          onRetry={reset}\n          title={`${DOMAIN_LABELS[props.domain]} adapter failed to load`}\n        />\n      )}\n    >\n      <AdapterDetailPageInner {...props} />\n    </ErrorBoundary>\n  );\n}\n\nfunction AdapterDetailPageInner(props: AdapterDetailPageProps): JSX.Element {\n  const adapters = createAdapters();\n  const statuses = createAdapterStatuses();\n  const status = createMemo(() => statuses[props.domain]);\n  const providers = createMemo(() => getProvidersForDomain(props.domain));\n  const [isEditing, setIsEditing] = createSignal(false);\n  const latency = () => status().latency ?? 0;\n  // Mirror the React reference's selectable filter so the detail page surfaces\n  // which DB providers are actually wirable today vs. deferred/BYOD. The config\n  // form hides them; the detail page shows them with an \"Unavailable\" tag so\n  // consumers learn the launch axis without losing discovery.\n  const launchSelectableIds = createMemo(\n    () =>\n      new Set(\n        props.domain === \"db\"\n          ? [\"localStorage\", \"convex\", \"neon\", \"cloudflareKV\", \"memory\"]\n          : providers().map((p) => p.id),\n      ),\n  );\n  // Stable ids for label/meter pairing so screen readers announce the latency\n  // meter with its label rather than reading the visual bar in isolation.\n  const latencyLabelId = createUniqueId();\n\n  // Loading skeleton: matches the React reference and gives assistive tech a\n  // role=\"status\" announcement instead of flashing the page through provider\n  // boot. motion-reduce disables the pulse for users who opt out.\n  return (\n    <Show\n      when={!adapters.isLoading}\n      fallback={\n        <div class={cn(\"mx-auto max-w-3xl space-y-6\", props.class)}>\n          <div\n            class=\"animate-pulse motion-reduce:animate-none space-y-4\"\n            role=\"status\"\n            aria-label={`Loading ${DOMAIN_LABELS[props.domain]} adapter`}\n          >\n            <div class=\"h-6 w-32 rounded bg-muted\" />\n            <div class=\"flex items-start gap-5\">\n              <div class=\"h-16 w-16 rounded-lg bg-muted\" />\n              <div class=\"flex-1 space-y-2\">\n                <div class=\"h-7 w-48 rounded bg-muted\" />\n                <div class=\"h-4 w-72 rounded bg-muted/70\" />\n              </div>\n            </div>\n            <div class=\"h-32 rounded-lg bg-muted/60\" />\n            <div class=\"h-48 rounded-lg bg-muted/60\" />\n          </div>\n        </div>\n      }\n    >\n      <DetailPageContent\n        adapters={adapters}\n        domain={props.domain}\n        status={status}\n        providers={providers}\n        launchSelectableIds={launchSelectableIds}\n        isEditing={isEditing}\n        setIsEditing={setIsEditing}\n        latency={latency}\n        latencyLabelId={latencyLabelId}\n        onBack={props.onBack}\n        onConfigure={props.onConfigure}\n        class={props.class}\n      />\n    </Show>\n  );\n}\n\ninterface DetailContentProps {\n  adapters: ReturnType<typeof createAdapters>;\n  domain: AdapterDomain;\n  status: Accessor<ReturnType<typeof createAdapterStatuses>[AdapterDomain]>;\n  providers: Accessor<ReturnType<typeof getProvidersForDomain>>;\n  launchSelectableIds: Accessor<Set<string>>;\n  isEditing: () => boolean;\n  setIsEditing: (next: boolean) => void;\n  latency: () => number;\n  latencyLabelId: string;\n  onBack?: () => void;\n  onConfigure?: (\n    domain: AdapterDomain,\n    config: DomainAdapterConfig,\n  ) => Promise<void> | void;\n  class?: string;\n}\n\nfunction DetailPageContent(props: DetailContentProps): JSX.Element {\n  return (\n    <div class={cn(\"mx-auto max-w-3xl space-y-8 text-foreground\", props.class)}>\n      <Show when={props.onBack}>\n        <button\n          type=\"button\"\n          onClick={props.onBack}\n          class=\"inline-flex items-center gap-1.5 text-sm text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 motion-reduce:transition-none\"\n        >\n          ← Back to Adapters\n        </button>\n      </Show>\n\n      <div class=\"flex items-start gap-5\">\n        <div class=\"flex h-16 w-16 items-center justify-center rounded-lg border border-border bg-card text-3xl shadow-sm\">\n          {DOMAIN_ICONS[props.domain]}\n        </div>\n        <div class=\"flex-1\">\n          <div class=\"flex items-center gap-3\">\n            <h1 class=\"text-2xl font-extrabold text-foreground\">\n              {DOMAIN_LABELS[props.domain]}\n            </h1>\n            <AdapterStatusBadge status={props.status().status} />\n          </div>\n          <p class=\"mt-1 text-sm text-muted-foreground\">\n            {DOMAIN_DESCRIPTIONS[props.domain]}\n          </p>\n        </div>\n      </div>\n\n      <div class=\"rounded-lg border border-border bg-card p-6 shadow-sm\">\n        <h2 class=\"mb-4 text-xs font-semibold uppercase text-muted-foreground\">\n          Current Status\n        </h2>\n        <div class=\"grid gap-4 sm:grid-cols-3\">\n          <div>\n            <p class=\"text-[0.625rem] uppercase text-muted-foreground\">\n              Provider\n            </p>\n            <p class=\"mt-0.5 text-sm font-semibold text-foreground\">\n              {props.status().provider !== \"none\"\n                ? props.status().provider\n                : \"None\"}\n            </p>\n          </div>\n          <div>\n            <p class=\"text-[0.625rem] uppercase text-muted-foreground\">\n              Status\n            </p>\n            <p class=\"mt-0.5\">\n              <AdapterStatusBadge status={props.status().status} />\n            </p>\n          </div>\n          <div>\n            <p class=\"text-[0.625rem] uppercase text-muted-foreground\">\n              Last Checked\n            </p>\n            <p class=\"mt-0.5 text-sm text-muted-foreground\">\n              <Show\n                when={props.status().lastCheckedAt}\n                fallback={\"Not checked\"}\n              >\n                {(lastCheckedAt) =>\n                  new Date(lastCheckedAt()).toLocaleTimeString()\n                }\n              </Show>\n            </p>\n          </div>\n        </div>\n\n        <Show when={props.status().error}>\n          {/* role=\"alert\" matches React reference so screen readers announce\n              the error when status flips, instead of treating it as inert text. */}\n          <div\n            class=\"mt-4 rounded-md border border-destructive/20 bg-destructive/10 px-4 py-3 text-sm text-destructive\"\n            role=\"alert\"\n          >\n            <p>\n              <span class=\"font-semibold\">Error:</span> {props.status().error}\n            </p>\n            <button\n              type=\"button\"\n              onClick={() => props.setIsEditing(true)}\n              class=\"mt-3 rounded-md border border-destructive/30 bg-background px-3 py-1.5 text-xs font-semibold text-destructive transition-colors hover:bg-destructive/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 motion-reduce:transition-none\"\n            >\n              Review configuration\n            </button>\n          </div>\n        </Show>\n\n        <Show when={props.status().latency}>\n          <div class=\"mt-4\">\n            <p\n              id={props.latencyLabelId}\n              class=\"mb-1 text-[0.625rem] uppercase text-muted-foreground\"\n            >\n              Latency\n            </p>\n            {/* Semantic <meter>: assistive tech reads the meter as a labelled\n                gauge with min/max/value rather than as decorative geometry.\n                The visual styled bar below is aria-hidden because the meter\n                already exposes the value to AT. */}\n            <meter\n              aria-labelledby={props.latencyLabelId}\n              aria-valuetext={`${props.latency()} milliseconds`}\n              class=\"sr-only\"\n              min=\"0\"\n              max=\"1000\"\n              low=\"100\"\n              high=\"500\"\n              value={props.latency()}\n            >\n              {props.latency()}ms\n            </meter>\n            <div\n              aria-hidden=\"true\"\n              class=\"h-2 w-full overflow-hidden rounded-full bg-muted\"\n            >\n              <div\n                class={cn(\n                  \"h-full rounded-full transition-all motion-reduce:transition-none\",\n                  props.latency() < 100\n                    ? \"bg-primary\"\n                    : props.latency() < 500\n                      ? \"bg-accent\"\n                      : \"bg-destructive\",\n                )}\n                style={{\n                  width: `${Math.min(100, (props.latency() / 1000) * 100)}%`,\n                }}\n              />\n            </div>\n            <p class=\"mt-1 text-xs text-muted-foreground\">\n              {props.latency()}ms\n            </p>\n          </div>\n        </Show>\n      </div>\n\n      <div class=\"rounded-lg border border-border bg-card p-6 shadow-sm\">\n        <div class=\"mb-4 flex items-center justify-between\">\n          <h2 class=\"text-xs font-semibold uppercase text-muted-foreground\">\n            Available Providers\n          </h2>\n          <span class=\"text-xs text-muted-foreground\">\n            {props.providers().length} providers\n          </span>\n        </div>\n        <div class=\"divide-y divide-border\">\n          <For each={props.providers()}>\n            {(provider) => {\n              const isAvailable = () =>\n                props.launchSelectableIds().has(provider.id);\n              return (\n                <div\n                  class=\"flex items-center justify-between py-3 first:pt-0 last:pb-0\"\n                  data-available={isAvailable() ? \"true\" : \"false\"}\n                >\n                  <div>\n                    <p class=\"text-sm font-semibold text-foreground\">\n                      {provider.name}\n                    </p>\n                    <p class=\"text-xs text-muted-foreground\">\n                      {provider.description}\n                    </p>\n                  </div>\n                  <div class=\"flex flex-col items-end gap-1\">\n                    <span\n                      class={cn(\n                        \"self-start rounded px-2 py-0.5 text-[0.625rem] font-bold uppercase\",\n                        provider.tier === \"pronto\"\n                          ? \"bg-primary/10 text-primary\"\n                          : provider.tier === \"lancio\"\n                            ? \"bg-accent/10 text-accent\"\n                            : \"bg-muted text-muted-foreground\",\n                      )}\n                    >\n                      {provider.tier}\n                    </span>\n                    <Show when={!isAvailable()}>\n                      <span class=\"self-start rounded border border-border bg-muted px-2 py-0.5 text-[0.625rem] font-semibold uppercase text-muted-foreground\">\n                        Unavailable\n                      </span>\n                    </Show>\n                  </div>\n                </div>\n              );\n            }}\n          </For>\n        </div>\n      </div>\n\n      <Show\n        when={props.isEditing()}\n        fallback={\n          <button\n            type=\"button\"\n            onClick={() => props.setIsEditing(true)}\n            class=\"w-full rounded-lg border border-dashed border-border bg-card/40 p-6 text-center text-sm text-muted-foreground transition-colors hover:border-primary/30 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 motion-reduce:transition-none\"\n          >\n            Configure {DOMAIN_LABELS[props.domain]} Adapter\n          </button>\n        }\n      >\n        <AdapterConfigForm\n          domain={props.domain}\n          onSave={async (config) => {\n            // Forward the submitted config to the consumer before closing the\n            // form. The React reference relies on this to persist domain\n            // configuration; prior SolidJS implementation dropped the payload.\n            await props.onConfigure?.(props.domain, config);\n            props.setIsEditing(false);\n          }}\n          onCancel={() => props.setIsEditing(false)}\n        />\n      </Show>\n    </div>\n  );\n}\n","/**\n * @module AdaptersPage\n * @package @geenius/adapters/solidjs\n * @description Renders the Tailwind-based adapters overview for the SolidJS\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 {\n  AdapterDomain,\n  AdapterStatusType,\n  DomainAdapterConfig,\n} from \"@geenius/adapters\";\nimport {\n  ADAPTER_DOMAINS,\n  ADAPTER_STATUSES,\n  DOMAIN_LABELS,\n  getDomainConfig,\n  getProvidersForDomain,\n  isAdaptersConfigured,\n} from \"@geenius/adapters\";\nimport type { JSX } from \"solid-js\";\nimport {\n  createEffect,\n  createSignal,\n  createUniqueId,\n  ErrorBoundary,\n  For,\n  onCleanup,\n  Show,\n} from \"solid-js\";\nimport { AdapterConfigForm } from \"../components/AdapterConfigForm\";\nimport { AdapterList } from \"../components/AdapterList\";\nimport { AdapterStatusBadge } from \"../components/AdapterStatusBadge\";\nimport { cn } from \"../lib/utils\";\nimport { createAdapters } from \"../primitives\";\nimport { PageBoundaryFallback } from \"./PageBoundaryFallback\";\n\nconst DIALOG_FOCUSABLE_SELECTORS =\n  'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\ntype RegistryEntry = {\n  domain: AdapterDomain;\n  provider: string;\n  status: AdapterStatusType;\n};\n\n/**\n * Props accepted by the SolidJS adapters overview page.\n *\n * @property onNavigateDetail Optional callback used instead of opening the inline modal\n * @property onConfigure Optional callback invoked with submitted adapter configuration\n * @property class Optional class merged onto the page root\n * @property configByDomain Optional configuration snapshot used to hydrate modal forms\n * @property registryEntries Optional adapter registry snapshot rendered above the grid\n */\nexport interface AdaptersPageProps {\n  onNavigateDetail?: (domain: AdapterDomain) => void;\n  onConfigure?: (\n    domain: AdapterDomain,\n    config: DomainAdapterConfig,\n  ) => Promise<void> | void;\n  class?: string;\n  configByDomain?: Partial<Record<AdapterDomain, DomainAdapterConfig>>;\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 SolidJS 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 * @example\n * ```tsx\n * <AdaptersPage onNavigateDetail={(domain) => navigate(`/adapters/${domain}`)} />\n * ```\n */\nexport function AdaptersPage(props: AdaptersPageProps): JSX.Element {\n  return (\n    <ErrorBoundary\n      fallback={(error, reset) => (\n        <PageBoundaryFallback\n          class={props.class}\n          error={error}\n          onRetry={reset}\n          title=\"Adapters failed to load\"\n        />\n      )}\n    >\n      <AdaptersPageContent {...props} />\n    </ErrorBoundary>\n  );\n}\n\nfunction AdaptersPageContent(props: AdaptersPageProps): JSX.Element {\n  const ctx = createAdapters();\n  const [selectedDomain, setSelectedDomain] =\n    createSignal<AdapterDomain | null>(null);\n  const [filterStatus, setFilterStatus] = createSignal<\n    AdapterStatusType | undefined\n  >();\n  const modalTitleId = createUniqueId();\n  let modalRef: HTMLDivElement | undefined;\n  const registryEntries = () => props.registryEntries ?? [];\n\n  const connected = () =>\n    ADAPTER_DOMAINS.filter(\n      (domain) => ctx.statuses[domain]?.status === \"connected\",\n    ).length;\n  const errors = () =>\n    ADAPTER_DOMAINS.filter((domain) => ctx.statuses[domain]?.status === \"error\")\n      .length;\n  const initialConfigFor = (domain: AdapterDomain) =>\n    props.configByDomain?.[domain] ??\n    (isAdaptersConfigured() ? getDomainConfig(domain) : undefined) ??\n    undefined;\n\n  createEffect(() => {\n    if (!selectedDomain() || !modalRef) {\n      return;\n    }\n\n    const dialog = modalRef;\n    const ownerDocument = dialog.ownerDocument;\n    const ownerWindow = ownerDocument.defaultView;\n    const HTMLElementCtor = ownerWindow?.HTMLElement;\n    const previousActiveElement =\n      HTMLElementCtor && ownerDocument.activeElement instanceof HTMLElementCtor\n        ? ownerDocument.activeElement\n        : null;\n    const initialFocusables = getDialogFocusableElements(dialog);\n    (initialFocusables[0] ?? 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      // Re-query the focusable list on every Tab so the trap reflects the\n      // current dialog content (forms can mount inputs/buttons after the\n      // initial focus snapshot, e.g. when provider state hydrates async).\n      const currentFocusables = getDialogFocusableElements(dialog);\n      const firstFocusableElement = currentFocusables[0];\n      const lastFocusableElement = currentFocusables.at(-1);\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    onCleanup(() => {\n      ownerDocument.removeEventListener(\"keydown\", handleKeyDown);\n      previousActiveElement?.focus();\n    });\n  });\n\n  return (\n    <Show\n      when={!ctx.isLoading}\n      fallback={\n        <div class={cn(\"mx-auto max-w-4xl space-y-6\", props.class)}>\n          <div\n            class=\"animate-pulse motion-reduce:animate-none space-y-4\"\n            role=\"status\"\n            aria-label=\"Loading adapters\"\n          >\n            <div class=\"h-8 w-48 rounded bg-muted\" />\n            <div class=\"h-4 w-72 rounded bg-muted/70\" />\n            <div class=\"grid gap-3 sm:grid-cols-3\">\n              <For each={[1, 2, 3]}>\n                {() => (\n                  <div class=\"h-20 rounded-lg border border-border bg-card\" />\n                )}\n              </For>\n            </div>\n            <div class=\"grid gap-3 sm:grid-cols-2\">\n              <For each={[1, 2, 3, 4]}>\n                {() => (\n                  <div class=\"h-28 rounded-lg border border-border bg-card\" />\n                )}\n              </For>\n            </div>\n          </div>\n        </div>\n      }\n    >\n      <div\n        class={cn(\"mx-auto max-w-4xl space-y-8 text-foreground\", props.class)}\n      >\n        <header class=\"space-y-1\">\n          <h1 class=\"text-2xl font-extrabold text-foreground\">Adapters</h1>\n          <p class=\"text-sm text-muted-foreground\">\n            Manage your infrastructure adapters - database, auth, AI, storage,\n            payments, and admin.\n          </p>\n        </header>\n\n        <section class=\"grid gap-3 sm:grid-cols-3\">\n          <div class=\"rounded-lg border border-border bg-card p-4 shadow-sm\">\n            <p class=\"text-xs font-semibold uppercase text-muted-foreground\">\n              Total\n            </p>\n            <p class=\"mt-1 text-2xl font-extrabold text-foreground\">\n              {ADAPTER_DOMAINS.length}\n            </p>\n            <p class=\"text-[0.625rem] text-muted-foreground\">adapter domains</p>\n          </div>\n          <div class=\"rounded-lg border border-primary/20 bg-primary/10 p-4 shadow-sm\">\n            <p class=\"text-xs font-semibold uppercase text-primary\">\n              Connected\n            </p>\n            <p class=\"mt-1 text-2xl font-extrabold text-primary\">\n              {connected()}\n            </p>\n            <p class=\"text-[0.625rem] text-primary/70\">active adapters</p>\n          </div>\n          <Show when={errors() > 0}>\n            <div class=\"rounded-lg border border-destructive/20 bg-destructive/10 p-4 shadow-sm\">\n              <p class=\"text-xs font-semibold uppercase text-destructive\">\n                Errors\n              </p>\n              <p class=\"mt-1 text-2xl font-extrabold text-destructive\">\n                {errors()}\n              </p>\n              <p class=\"text-[0.625rem] text-destructive/70\">need attention</p>\n            </div>\n          </Show>\n        </section>\n\n        <Show when={registryEntries().length > 0}>\n          <section class=\"rounded-lg border border-border bg-card p-4 shadow-sm\">\n            <div class=\"flex flex-wrap items-center justify-between gap-3\">\n              <div>\n                <p class=\"text-xs font-semibold uppercase text-muted-foreground\">\n                  Adapter Registry\n                </p>\n                <p class=\"text-sm text-muted-foreground\">\n                  Live adapter registry entries.\n                </p>\n              </div>\n              <div class=\"flex gap-3 text-xs text-muted-foreground\">\n                <span>{registryEntries().length} entries</span>\n              </div>\n            </div>\n            <div class=\"mt-4 grid gap-2 sm:grid-cols-2\">\n              <For each={registryEntries()}>\n                {(entry) => {\n                  const providerMeta = getProvidersForDomain(entry.domain).find(\n                    (provider) => provider.id === entry.provider,\n                  );\n                  const domainLabel =\n                    DOMAIN_LABELS[entry.domain] ?? entry.domain;\n\n                  return (\n                    <div class=\"rounded-md border border-border bg-background px-4 py-3\">\n                      <div class=\"flex items-center justify-between gap-3\">\n                        <div>\n                          <p class=\"text-sm font-semibold text-foreground\">\n                            {domainLabel}\n                          </p>\n                          <p class=\"text-xs text-muted-foreground\">\n                            {providerMeta?.name ?? entry.provider}\n                          </p>\n                        </div>\n                        <AdapterStatusBadge status={entry.status} />\n                      </div>\n                    </div>\n                  );\n                }}\n              </For>\n            </div>\n          </section>\n        </Show>\n\n        <section class=\"flex flex-wrap items-center gap-2\">\n          <button\n            type=\"button\"\n            onClick={() => setFilterStatus(undefined)}\n            aria-pressed={!filterStatus()}\n            class={cn(\n              \"rounded-lg border px-3 py-1.5 text-xs font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 motion-reduce:transition-none\",\n              !filterStatus()\n                ? \"border-primary bg-primary/10 text-primary\"\n                : \"border-border bg-background text-muted-foreground hover:text-foreground\",\n            )}\n          >\n            All\n          </button>\n          <For each={[...ADAPTER_STATUSES]}>\n            {(status) => (\n              <button\n                type=\"button\"\n                onClick={() => setFilterStatus(status)}\n                aria-pressed={filterStatus() === status}\n                class={cn(\n                  \"flex items-center gap-1.5 rounded-lg border px-3 py-1.5 text-xs font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 motion-reduce:transition-none\",\n                  filterStatus() === status\n                    ? \"border-primary bg-primary/10 text-primary\"\n                    : \"border-border bg-background text-muted-foreground hover:text-foreground\",\n                )}\n              >\n                <AdapterStatusBadge status={status} showLabel={false} />\n                {status}\n              </button>\n            )}\n          </For>\n        </section>\n\n        <AdapterList\n          onSelect={(domain) => {\n            if (props.onNavigateDetail) {\n              props.onNavigateDetail(domain);\n            } else {\n              setSelectedDomain(domain);\n            }\n          }}\n          filterStatus={filterStatus()}\n        />\n\n        <Show when={selectedDomain()}>\n          {(domain) => (\n            <div class=\"fixed inset-0 z-50 flex items-center justify-center bg-background/80 px-4 backdrop-blur-sm\">\n              <button\n                type=\"button\"\n                aria-label=\"Close adapter configuration\"\n                class=\"absolute inset-0 cursor-default border-0 bg-transparent p-0\"\n                onClick={() => setSelectedDomain(null)}\n              />\n              <div\n                ref={(element) => {\n                  modalRef = element;\n                }}\n                class=\"relative z-10 w-full max-w-lg\"\n                role=\"dialog\"\n                aria-modal=\"true\"\n                aria-labelledby={modalTitleId}\n                tabIndex={-1}\n              >\n                <AdapterConfigForm\n                  domain={domain()}\n                  titleId={modalTitleId}\n                  initialConfig={initialConfigFor(domain())}\n                  onSave={async (config) => {\n                    await props.onConfigure?.(domain(), config);\n                    setSelectedDomain(null);\n                  }}\n                  onCancel={() => setSelectedDomain(null)}\n                />\n              </div>\n            </div>\n          )}\n        </Show>\n      </div>\n    </Show>\n  );\n}\n"]}