{"version":3,"sources":["../src/lib/utils.ts","../src/bridges/index.tsx","../src/components/index.tsx","../src/pages/index.tsx"],"names":["twMerge","clsx","jsxs","jsx","Loader2","Component","TriangleAlert","Info","CheckCircle2","AlertCircle","useState","useId","useRef","useEffect","X","ReferenceAdapterCard","ReferenceAdapterConfigForm","ReferenceAdapterList","ReferenceAdapterStatusBadge","ReferenceAdapterDetailPage","ReferenceAdaptersPage"],"mappings":";;;;;;;;;;AAWO,SAAS,MAAM,MAAA,EAA8B;AAClD,EAAA,OAAOA,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACoBA,IAAM,kBAAA,GAAiD;AAAA,EACrD,EAAA,EAAI,eAAA;AAAA,EACJ,EAAA,EAAI,eAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAEA,IAAM,kBAAA,GAAiD;AAAA,EACrD,EAAA,EAAI,SAAA;AAAA,EACJ,EAAA,EAAI,SAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAYO,SAAS,aAAA,CAAc;AAAA,EAC5B,SAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA,GAAQ,kBAAA;AAAA,EACR,IAAA,GAAO,IAAA;AAAA,EACP,GAAG;AACL,CAAA,EAAuB;AACrB,EAAA,uBACEC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,QAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,qGAAA;AAAA,QACA,mBAAmB,IAAI,CAAA;AAAA,QACvB;AAAA,OACF;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MACJ,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAC,cAAA;AAAA,UAACC,mBAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAW,EAAA,CAAG,uBAAA,EAAyB,kBAAA,CAAmB,IAAI,CAAC;AAAA;AAAA,SACjE;AAAA,wBACAF,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oBAAA,EACd,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0BAAA,EAA4B,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UACjD,8BACCA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4CAAA,EACb,uBACH,CAAA,GACE;AAAA,SAAA,EACN;AAAA;AAAA;AAAA,GACF;AAEJ;AA6BO,IAAM,mBAAA,GAAN,cAAkCE,iBAAA,CAGvC;AAAA,EACA,KAAA,GAAkC,EAAE,KAAA,EAAO,IAAA,EAAK;AAAA,EAEhD,OAAO,yBAAyB,KAAA,EAAwC;AACtE,IAAA,OAAO,EAAE,KAAA,EAAM;AAAA,EACjB;AAAA,EAEA,iBAAA,CAAkB,OAAc,SAAA,EAAsB;AACpD,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,KAAA,EAAO,SAAS,CAAA;AAAA,EACvC;AAAA,EAEQ,QAAQ,MAAM;AACpB,IAAA,IAAA,CAAK,MAAM,OAAA,IAAU;AACrB,IAAA,IAAA,CAAK,QAAA,CAAS,EAAE,KAAA,EAAO,IAAA,EAAM,CAAA;AAAA,EAC/B,CAAA;AAAA,EAEA,MAAA,GAAS;AACP,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,IAAA,CAAK,KAAA;AACvB,IAAA,MAAM;AAAA,MACJ,QAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA,GAAc,yDAAA;AAAA,MACd,QAAA;AAAA,MACA,UAAA,GAAa,WAAA;AAAA,MACb,KAAA,GAAQ;AAAA,QACN,IAAA,CAAK,KAAA;AAET,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,QAAA;AAAA,IACT;AAEA,IAAA,IAAI,OAAO,aAAa,UAAA,EAAY;AAClC,MAAA,OAAO,QAAA,CAAS,KAAA,EAAO,IAAA,CAAK,KAAK,CAAA;AAAA,IACnC;AAEA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO,QAAA;AAAA,IACT;AAEA,IAAA,uBACEF,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,0FAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAK,OAAA;AAAA,QAEL,QAAA,kBAAAD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAACG,yBAAA,EAAA,EAAc,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,gBAAA,EAAiB,CAAA;AAAA,0BAC7DJ,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACb,QAAA,EAAA;AAAA,4BAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EAA4B,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,4BACjDA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0CAAA,EACV,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,4BACAA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,yCAAA,EACV,gBAAM,OAAA,EACT,CAAA;AAAA,4BACAA,cAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,qSAAA;AAAA,gBACV,SAAS,IAAA,CAAK,KAAA;AAAA,gBACd,IAAA,EAAK,QAAA;AAAA,gBAEJ,QAAA,EAAA;AAAA;AAAA;AACH,WAAA,EACF;AAAA,SAAA,EACF;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AAgCA,IAAM,mBAAA,GAA0D;AAAA,EAC9D,OAAA,EAAS,6CAAA;AAAA,EACT,OAAA,EAAS,0DAAA;AAAA,EACT,OAAA,EAAS,oDAAA;AAAA,EACT,WAAA,EACE;AACJ,CAAA;AAEA,IAAM,UAAA,GAAa;AAAA,EACjB,OAAA,EAASI,gBAAA;AAAA,EACT,OAAA,EAASC,wBAAA;AAAA,EACT,OAAA,EAASC,uBAAA;AAAA,EACT,WAAA,EAAaH;AACf,CAAA;AAGO,SAAS,WAAA,CAAY;AAAA,EAC1B,WAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA,GAAW,CAAA;AAAA,EACX,MAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,KAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,GAAG;AACL,CAAA,EAAqB;AACnB,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAII,iBAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,UAAUC,aAAA,EAAM;AACtB,EAAA,MAAM,cAAA,GAAiBC,eAAsB,IAAI,CAAA;AACjD,EAAA,MAAM,IAAA,GAAO,WAAW,OAAO,CAAA;AAE/B,EAAAC,iBAAA,CAAU,MAAM;AACd,IAAA,UAAA,CAAW,IAAI,CAAA;AAAA,EACjB,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAAA,iBAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AACzB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GACJ,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,sBAAA;AACtC,IAAA,MAAM,eAAA,GACJ,OAAO,WAAA,KAAgB,QAAA,GAAW,WAAA,GAAc,MAAA;AAClD,IAAA,MAAM,WAAW,CAAA,EAAG,OAAO,IAAI,SAAS,CAAA,CAAA,EAAI,mBAAmB,EAAE,CAAA,CAAA;AAEjE,IAAA,IAAI,cAAA,CAAe,YAAY,QAAA,EAAU;AACvC,MAAA;AAAA,IACF;AAEA,IAAA,cAAA,CAAe,OAAA,GAAU,QAAA;AACzB,IAAA,MAAM,OAAA,GAAmB;AAAA,MACvB,MAAA,EAAQ,cAAA;AAAA,MACR,OAAA;AAAA,MACA,GAAG;AAAA,KACL;AAEA,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,OAAA,CAAQ,WAAA,GAAc,eAAA;AAAA,IACxB;AAEA,IAAA,IAAI,YAAY,aAAA,EAAe;AAC7B,MAAA,KAAK,MAAA,CAAO,KAAA,CAAM,SAAA,EAAW,OAAO,CAAA;AACpC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,YAAY,SAAA,EAAW;AACzB,MAAA,KAAK,MAAA,CAAO,IAAA,CAAK,SAAA,EAAW,OAAO,CAAA;AACnC,MAAA;AAAA,IACF;AAEA,IAAA,KAAK,MAAA,CAAO,IAAA,CAAK,SAAA,EAAW,OAAO,CAAA;AAAA,EACrC,CAAA,EAAG,CAAC,WAAA,EAAa,MAAA,EAAQ,MAAM,KAAA,EAAO,OAAA,EAAS,OAAO,CAAC,CAAA;AAEvD,EAAAA,iBAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,IAAW,QAAA,IAAY,CAAA,EAAG;AAC7B,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,UAAA,CAAW,UAAA,CAAW,MAAM;AAC1C,MAAA,UAAA,CAAW,KAAK,CAAA;AAChB,MAAA,SAAA,IAAY;AAAA,IACd,GAAG,QAAQ,CAAA;AAEX,IAAA,OAAO,MAAM,UAAA,CAAW,YAAA,CAAa,OAAO,CAAA;AAAA,EAC9C,CAAA,EAAG,CAAC,QAAA,EAAU,SAAA,EAAW,OAAO,CAAC,CAAA;AAEjC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAU,MAAM;AACpB,IAAA,UAAA,CAAW,KAAK,CAAA;AAChB,IAAA,SAAA,IAAY;AAAA,EACd,CAAA;AAEA,EAAA,uBACEX,eAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,iBAAA,EAAiB,OAAA;AAAA,MACjB,SAAA,EAAW,EAAA;AAAA,QACT,4FAAA;AAAA,QACA,oBAAoB,OAAO,CAAA;AAAA,QAC3B;AAAA,OACF;AAAA,MACA,IAAA,EAAM,OAAA,KAAY,aAAA,GAAgB,OAAA,GAAU,QAAA;AAAA,MAC3C,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAAC,IAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,yBAAA,EAA0B,CAAA;AAAA,wBAC7DD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACb,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EAAqC,EAAA,EAAI,SACrD,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,UACC,8BACCA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EAAmC,uBAAY,CAAA,GAC5D,IAAA;AAAA,UACH,WAAA,mBACCA,cAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,wQAAA;AAAA,cACV,OAAA,EAAS,QAAA;AAAA,cACT,IAAA,EAAK,QAAA;AAAA,cAEJ,QAAA,EAAA;AAAA;AAAA,WACH,GACE;AAAA,SAAA,EACN,CAAA;AAAA,wBACAA,cAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,YAAA,EAAW,sBAAA;AAAA,YACX,SAAA,EAAU,yNAAA;AAAA,YACV,OAAA,EAAS,OAAA;AAAA,YACT,IAAA,EAAK,QAAA;AAAA,YAEL,QAAA,kBAAAA,cAAA,CAACW,aAAA,EAAA,EAAE,aAAA,EAAY,MAAA,EAAO,WAAU,SAAA,EAAU;AAAA;AAAA;AAC5C;AAAA;AAAA,GACF;AAEJ;ACjVO,SAAS,YAAY,KAAA,EAAyB;AACnD,EAAA,uBAAOX,cAAAA,CAACY,iBAAA,EAAA,EAAsB,GAAG,KAAA,EAAO,CAAA;AAC1C;AAEO,SAAS,kBAAkB,KAAA,EAA+B;AAC/D,EAAA,uBAAOZ,cAAAA,CAACa,uBAAA,EAAA,EAA4B,GAAG,KAAA,EAAO,CAAA;AAChD;AAEO,SAAS,YAAY,KAAA,EAAyB;AACnD,EAAA,uBAAOb,cAAAA,CAACc,iBAAA,EAAA,EAAsB,GAAG,KAAA,EAAO,CAAA;AAC1C;AAEO,SAAS,mBAAmB,KAAA,EAAgC;AACjE,EAAA,uBAAOd,cAAAA,CAACe,wBAAA,EAAA,EAA6B,GAAG,KAAA,EAAO,CAAA;AACjD;ACvBO,SAAS,kBAAkB,KAAA,EAA+B;AAC/D,EAAA,uBAAOf,cAAAA,CAACgB,uBAAA,EAAA,EAA4B,GAAG,KAAA,EAAO,CAAA;AAChD;AAEO,SAAS,aAAa,KAAA,EAA0B;AACrD,EAAA,uBAAOhB,cAAAA,CAACiB,kBAAA,EAAA,EAAuB,GAAG,KAAA,EAAO,CAAA;AAC3C","file":"index.cjs","sourcesContent":["/**\n * @module utils\n * @package @geenius/adapters/react-shadcn\n * @description Small shadcn-compatible class name helper used by the bridge\n * components without depending on unpublished UI package internals.\n */\n\nimport { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/** Merges conditional classes with Tailwind conflict resolution. */\nexport function cn(...inputs: ClassValue[]): string {\n  return twMerge(clsx(inputs));\n}\n","/**\n * @module bridges\n * @package @geenius/adapters/react-shadcn\n * @description shadcn/Radix-style UI bridges for async adapter loading,\n * adapter errors, and toast notifications. Adapter contracts stay delegated to\n * the React reference variant; this module only owns library-native affordances.\n */\n\n\"use client\";\n\nimport type { LoggerAdapter, LogMeta } from \"@geenius/adapters\";\nimport {\n  AlertCircle,\n  CheckCircle2,\n  Info,\n  Loader2,\n  TriangleAlert,\n  X,\n} from \"lucide-react\";\nimport {\n  Component,\n  type ErrorInfo,\n  type HTMLAttributes,\n  type ReactNode,\n  useEffect,\n  useId,\n  useRef,\n  useState,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\n\ntype BridgeSize = \"sm\" | \"md\" | \"lg\";\n\nconst loadingSizeClasses: Record<BridgeSize, string> = {\n  sm: \"gap-2 text-xs\",\n  md: \"gap-3 text-sm\",\n  lg: \"gap-4 text-base\",\n};\n\nconst spinnerSizeClasses: Record<BridgeSize, string> = {\n  sm: \"h-4 w-4\",\n  md: \"h-5 w-5\",\n  lg: \"h-6 w-6\",\n};\n\nexport interface LoadingBridgeProps extends HTMLAttributes<HTMLDivElement> {\n  /** Main loading label announced to assistive technology. */\n  label?: ReactNode;\n  /** Optional supporting copy rendered below the label. */\n  description?: ReactNode;\n  /** Visual density of the loading indicator. */\n  size?: BridgeSize;\n}\n\n/** shadcn-style loading affordance for async adapter work. */\nexport function LoadingBridge({\n  className,\n  description,\n  label = \"Loading adapters\",\n  size = \"md\",\n  ...props\n}: LoadingBridgeProps) {\n  return (\n    <div\n      aria-live=\"polite\"\n      className={cn(\n        \"flex items-center rounded-md border border-border bg-background px-4 py-3 text-foreground shadow-sm\",\n        loadingSizeClasses[size],\n        className,\n      )}\n      role=\"status\"\n      {...props}\n    >\n      <Loader2\n        aria-hidden=\"true\"\n        className={cn(\"shrink-0 animate-spin\", spinnerSizeClasses[size])}\n      />\n      <span className=\"grid min-w-0 gap-1\">\n        <span className=\"font-medium leading-none\">{label}</span>\n        {description ? (\n          <span className=\"text-xs leading-snug text-muted-foreground\">\n            {description}\n          </span>\n        ) : null}\n      </span>\n    </div>\n  );\n}\n\ntype ErrorBoundaryFallback =\n  | ReactNode\n  | ((error: Error, reset: () => void) => ReactNode);\n\nexport interface ErrorBoundaryBridgeProps {\n  children: ReactNode;\n  /** Optional custom fallback node or renderer. */\n  fallback?: ErrorBoundaryFallback;\n  /** Heading used by the default shadcn-style fallback. */\n  title?: ReactNode;\n  /** Supporting copy used by the default fallback. */\n  description?: ReactNode;\n  /** Label for the default reset action. */\n  resetLabel?: ReactNode;\n  /** Additional class names for the default fallback container. */\n  className?: string;\n  /** Called when a descendant throws. */\n  onError?: (error: Error, errorInfo: ErrorInfo) => void;\n  /** Called before local error state is reset. */\n  onReset?: () => void;\n}\n\ninterface ErrorBoundaryBridgeState {\n  error: Error | null;\n}\n\n/** Error boundary rendered with shadcn-compatible alert and button classes. */\nexport class ErrorBoundaryBridge extends Component<\n  ErrorBoundaryBridgeProps,\n  ErrorBoundaryBridgeState\n> {\n  state: ErrorBoundaryBridgeState = { error: null };\n\n  static getDerivedStateFromError(error: Error): ErrorBoundaryBridgeState {\n    return { error };\n  }\n\n  componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n    this.props.onError?.(error, errorInfo);\n  }\n\n  private reset = () => {\n    this.props.onReset?.();\n    this.setState({ error: null });\n  };\n\n  render() {\n    const { error } = this.state;\n    const {\n      children,\n      className,\n      description = \"The adapter bridge could not finish the requested work.\",\n      fallback,\n      resetLabel = \"Try again\",\n      title = \"Adapter error\",\n    } = this.props;\n\n    if (!error) {\n      return children;\n    }\n\n    if (typeof fallback === \"function\") {\n      return fallback(error, this.reset);\n    }\n\n    if (fallback) {\n      return fallback;\n    }\n\n    return (\n      <div\n        className={cn(\n          \"rounded-md border border-destructive/50 bg-destructive/10 p-4 text-destructive shadow-sm\",\n          className,\n        )}\n        role=\"alert\"\n      >\n        <div className=\"flex gap-3\">\n          <TriangleAlert aria-hidden=\"true\" className=\"mt-0.5 h-5 w-5\" />\n          <div className=\"min-w-0 flex-1 space-y-2\">\n            <div className=\"font-medium leading-none\">{title}</div>\n            <p className=\"text-sm leading-snug text-destructive/90\">\n              {description}\n            </p>\n            <p className=\"break-words text-xs text-destructive/80\">\n              {error.message}\n            </p>\n            <button\n              className=\"inline-flex h-8 items-center justify-center rounded-md border border-destructive/30 bg-background px-3 text-xs font-medium text-destructive shadow-sm transition-colors hover:bg-destructive/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n              onClick={this.reset}\n              type=\"button\"\n            >\n              {resetLabel}\n            </button>\n          </div>\n        </div>\n      </div>\n    );\n  }\n}\n\nexport type ToastBridgeVariant =\n  | \"default\"\n  | \"success\"\n  | \"warning\"\n  | \"destructive\";\n\nexport interface ToastBridgeProps\n  extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n  /** Controls whether the toast is currently visible. */\n  open?: boolean;\n  /** Visual treatment matching common shadcn toast variants. */\n  variant?: ToastBridgeVariant;\n  /** Toast title. */\n  title: ReactNode;\n  /** Optional supporting message. */\n  description?: ReactNode;\n  /** Optional action label rendered as a shadcn-style button. */\n  actionLabel?: ReactNode;\n  /** Called when the optional action is pressed. */\n  onAction?: () => void;\n  /** Called when the dismiss button is pressed or auto-dismiss fires. */\n  onDismiss?: () => void;\n  /** Auto-dismiss timeout in milliseconds; `0` disables auto-dismiss. */\n  duration?: number;\n  /** Optional logger adapter that receives one structured event per visible toast. */\n  logger?: LoggerAdapter;\n  /** Optional structured metadata merged into the logger event. */\n  meta?: LogMeta;\n}\n\nconst toastVariantClasses: Record<ToastBridgeVariant, string> = {\n  default: \"border-border bg-background text-foreground\",\n  success: \"border-emerald-500/40 bg-emerald-500/10 text-emerald-950\",\n  warning: \"border-amber-500/40 bg-amber-500/10 text-amber-950\",\n  destructive:\n    \"border-destructive/50 bg-destructive text-destructive-foreground\",\n};\n\nconst toastIcons = {\n  default: Info,\n  success: CheckCircle2,\n  warning: AlertCircle,\n  destructive: TriangleAlert,\n} satisfies Record<ToastBridgeVariant, typeof Info>;\n\n/** shadcn-style toast bridge for adapter telemetry and notifications. */\nexport function ToastBridge({\n  actionLabel,\n  className,\n  description,\n  duration = 0,\n  logger,\n  meta,\n  onAction,\n  onDismiss,\n  open = true,\n  title,\n  variant = \"default\",\n  ...props\n}: ToastBridgeProps) {\n  const [visible, setVisible] = useState(open);\n  const titleId = useId();\n  const loggedToastKey = useRef<string | null>(null);\n  const Icon = toastIcons[variant];\n\n  useEffect(() => {\n    setVisible(open);\n  }, [open]);\n\n  useEffect(() => {\n    if (!visible) {\n      loggedToastKey.current = null;\n      return;\n    }\n\n    if (!logger) {\n      return;\n    }\n\n    const titleText =\n      typeof title === \"string\" ? title : \"Adapter notification\";\n    const descriptionText =\n      typeof description === \"string\" ? description : undefined;\n    const toastKey = `${variant}:${titleText}:${descriptionText ?? \"\"}`;\n\n    if (loggedToastKey.current === toastKey) {\n      return;\n    }\n\n    loggedToastKey.current = toastKey;\n    const payload: LogMeta = {\n      bridge: \"react-shadcn\",\n      variant,\n      ...meta,\n    };\n\n    if (descriptionText) {\n      payload.description = descriptionText;\n    }\n\n    if (variant === \"destructive\") {\n      void logger.error(titleText, payload);\n      return;\n    }\n\n    if (variant === \"warning\") {\n      void logger.warn(titleText, payload);\n      return;\n    }\n\n    void logger.info(titleText, payload);\n  }, [description, logger, meta, title, variant, visible]);\n\n  useEffect(() => {\n    if (!visible || duration <= 0) {\n      return;\n    }\n\n    const timeout = globalThis.setTimeout(() => {\n      setVisible(false);\n      onDismiss?.();\n    }, duration);\n\n    return () => globalThis.clearTimeout(timeout);\n  }, [duration, onDismiss, visible]);\n\n  if (!visible) {\n    return null;\n  }\n\n  const dismiss = () => {\n    setVisible(false);\n    onDismiss?.();\n  };\n\n  return (\n    <section\n      aria-labelledby={titleId}\n      className={cn(\n        \"pointer-events-auto flex w-full max-w-sm items-start gap-3 rounded-md border p-4 shadow-lg\",\n        toastVariantClasses[variant],\n        className,\n      )}\n      role={variant === \"destructive\" ? \"alert\" : \"status\"}\n      {...props}\n    >\n      <Icon aria-hidden=\"true\" className=\"mt-0.5 h-5 w-5 shrink-0\" />\n      <div className=\"min-w-0 flex-1 space-y-1\">\n        <div className=\"text-sm font-semibold leading-none\" id={titleId}>\n          {title}\n        </div>\n        {description ? (\n          <div className=\"text-sm leading-snug opacity-90\">{description}</div>\n        ) : null}\n        {actionLabel ? (\n          <button\n            className=\"mt-2 inline-flex h-8 items-center justify-center rounded-md border border-current/20 bg-transparent px-3 text-xs font-medium transition-colors hover:bg-current/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n            onClick={onAction}\n            type=\"button\"\n          >\n            {actionLabel}\n          </button>\n        ) : null}\n      </div>\n      <button\n        aria-label=\"Dismiss notification\"\n        className=\"inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-md opacity-70 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n        onClick={dismiss}\n        type=\"button\"\n      >\n        <X aria-hidden=\"true\" className=\"h-4 w-4\" />\n      </button>\n    </section>\n  );\n}\n","/**\n * @module components\n * @package @geenius/adapters/react-shadcn\n * @description Public shadcn/Radix component wrappers for the React adapter\n * reference surface.\n */\n\n\"use client\";\n\nimport {\n  type AdapterCardProps,\n  type AdapterConfigFormProps,\n  type AdapterListProps,\n  type AdapterStatusBadgeProps,\n  AdapterCard as ReferenceAdapterCard,\n  AdapterConfigForm as ReferenceAdapterConfigForm,\n  AdapterList as ReferenceAdapterList,\n  AdapterStatusBadge as ReferenceAdapterStatusBadge,\n} from \"@geenius/adapters/react\";\n\nexport type {\n  AdapterCardProps,\n  AdapterConfigFormProps,\n  AdapterListProps,\n  AdapterStatusBadgeProps,\n};\n\nexport function AdapterCard(props: AdapterCardProps) {\n  return <ReferenceAdapterCard {...props} />;\n}\n\nexport function AdapterConfigForm(props: AdapterConfigFormProps) {\n  return <ReferenceAdapterConfigForm {...props} />;\n}\n\nexport function AdapterList(props: AdapterListProps) {\n  return <ReferenceAdapterList {...props} />;\n}\n\nexport function AdapterStatusBadge(props: AdapterStatusBadgeProps) {\n  return <ReferenceAdapterStatusBadge {...props} />;\n}\n","/**\n * @module pages\n * @package @geenius/adapters/react-shadcn\n * @description Public shadcn/Radix page wrappers for the React adapter\n * reference surface.\n */\n\n\"use client\";\n\nimport {\n  type AdapterDetailPageProps,\n  type AdaptersPageProps,\n  AdapterDetailPage as ReferenceAdapterDetailPage,\n  AdaptersPage as ReferenceAdaptersPage,\n} from \"@geenius/adapters/react\";\n\nexport type { AdapterDetailPageProps, AdaptersPageProps };\n\nexport function AdapterDetailPage(props: AdapterDetailPageProps) {\n  return <ReferenceAdapterDetailPage {...props} />;\n}\n\nexport function AdaptersPage(props: AdaptersPageProps) {\n  return <ReferenceAdaptersPage {...props} />;\n}\n"]}