/**
 * Type stubs for optional shadcn/ui components whose underlying packages
 * are not installed. These provide just enough types for TypeScript to
 * compile — the actual runtime code lives in the ui/ component files.
 */

declare module '@radix-ui/react-aspect-ratio' {
  import * as React from 'react';
  interface RootProps extends React.HTMLAttributes<HTMLDivElement> {
    ratio?: number;
  }
  const Root: React.FC<RootProps>;
  export { Root };
}

declare module '@radix-ui/react-context-menu' {
  import * as React from 'react';
  const Root: React.FC<{ children?: React.ReactNode }>;
  const Trigger: React.FC<
    React.HTMLAttributes<HTMLElement> & { asChild?: boolean; children?: React.ReactNode }
  >;
  const Group: React.FC<{ children?: React.ReactNode }>;
  const Portal: React.FC<{ children?: React.ReactNode }>;
  const Sub: React.FC<{ children?: React.ReactNode }>;
  const RadioGroup: React.FC<{
    children?: React.ReactNode;
    value?: string;
    onValueChange?: (v: string) => void;
  }>;
  interface ContentProps extends React.HTMLAttributes<HTMLDivElement> {
    asChild?: boolean;
  }
  const Content: React.ForwardRefExoticComponent<
    ContentProps & React.RefAttributes<HTMLDivElement>
  >;
  const SubContent: React.ForwardRefExoticComponent<
    ContentProps & React.RefAttributes<HTMLDivElement>
  >;
  const SubTrigger: React.ForwardRefExoticComponent<
    ContentProps & React.RefAttributes<HTMLDivElement> & { inset?: boolean }
  >;
  interface ItemProps extends React.HTMLAttributes<HTMLDivElement> {
    asChild?: boolean;
    disabled?: boolean;
    inset?: boolean;
  }
  const Item: React.ForwardRefExoticComponent<ItemProps & React.RefAttributes<HTMLDivElement>>;
  const CheckboxItem: React.ForwardRefExoticComponent<
    ItemProps &
      React.RefAttributes<HTMLDivElement> & {
        checked?: boolean;
        onCheckedChange?: (v: boolean) => void;
      }
  >;
  const RadioItem: React.ForwardRefExoticComponent<
    ItemProps & React.RefAttributes<HTMLDivElement> & { value: string }
  >;
  const Label: React.ForwardRefExoticComponent<ItemProps & React.RefAttributes<HTMLDivElement>>;
  const Separator: React.ForwardRefExoticComponent<
    React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>
  >;
  const ItemIndicator: React.FC<{ children?: React.ReactNode }>;
  export {
    Root,
    Trigger,
    Group,
    Portal,
    Sub,
    RadioGroup,
    Content,
    SubContent,
    SubTrigger,
    Item,
    CheckboxItem,
    RadioItem,
    Label,
    Separator,
    ItemIndicator,
  };
}

declare module '@radix-ui/react-hover-card' {
  import * as React from 'react';
  interface RootProps {
    children?: React.ReactNode;
    open?: boolean;
    onOpenChange?: (open: boolean) => void;
    openDelay?: number;
    closeDelay?: number;
  }
  const Root: React.FC<RootProps>;
  const Trigger: React.ForwardRefExoticComponent<
    React.HTMLAttributes<HTMLAnchorElement> & {
      asChild?: boolean;
    } & React.RefAttributes<HTMLAnchorElement>
  >;
  const Portal: React.FC<{ children?: React.ReactNode }>;
  interface ContentProps extends React.HTMLAttributes<HTMLDivElement> {
    align?: 'start' | 'center' | 'end';
    sideOffset?: number;
    alignOffset?: number;
  }
  const Content: React.ForwardRefExoticComponent<
    ContentProps & React.RefAttributes<HTMLDivElement>
  >;
  const Arrow: React.ForwardRefExoticComponent<
    React.SVGAttributes<SVGElement> & React.RefAttributes<SVGSVGElement>
  >;
  export { Root, Trigger, Portal, Content, Arrow };
}

declare module '@radix-ui/react-menubar' {
  import * as React from 'react';
  interface RootProps {
    children?: React.ReactNode;
    value?: string;
    onValueChange?: (v: string) => void;
  }
  const Root: React.ForwardRefExoticComponent<RootProps & React.RefAttributes<HTMLDivElement>>;
  interface MenuProps {
    children?: React.ReactNode;
    value: string;
  }
  const Menu: React.FC<MenuProps>;
  const Trigger: React.ForwardRefExoticComponent<
    React.HTMLAttributes<HTMLButtonElement> & React.RefAttributes<HTMLButtonElement>
  >;
  const Group: React.FC<{ children?: React.ReactNode }>;
  const Portal: React.FC<{ children?: React.ReactNode }>;
  const Sub: React.FC<{ children?: React.ReactNode }>;
  const RadioGroup: React.FC<{
    children?: React.ReactNode;
    value?: string;
    onValueChange?: (v: string) => void;
  }>;
  interface ContentProps extends React.HTMLAttributes<HTMLDivElement> {
    align?: 'start' | 'center' | 'end';
    alignOffset?: number;
    sideOffset?: number;
  }
  const Content: React.ForwardRefExoticComponent<
    ContentProps & React.RefAttributes<HTMLDivElement>
  >;
  const SubContent: React.ForwardRefExoticComponent<
    ContentProps & React.RefAttributes<HTMLDivElement>
  >;
  const SubTrigger: React.ForwardRefExoticComponent<
    React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement> & { inset?: boolean }
  >;
  interface ItemProps extends React.HTMLAttributes<HTMLDivElement> {
    disabled?: boolean;
    inset?: boolean;
  }
  const Item: React.ForwardRefExoticComponent<ItemProps & React.RefAttributes<HTMLDivElement>>;
  const CheckboxItem: React.ForwardRefExoticComponent<
    ItemProps &
      React.RefAttributes<HTMLDivElement> & {
        checked?: boolean;
        onCheckedChange?: (v: boolean) => void;
      }
  >;
  const RadioItem: React.ForwardRefExoticComponent<
    ItemProps & React.RefAttributes<HTMLDivElement> & { value: string }
  >;
  const Label: React.ForwardRefExoticComponent<ItemProps & React.RefAttributes<HTMLDivElement>>;
  const Separator: React.ForwardRefExoticComponent<
    React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>
  >;
  const ItemIndicator: React.FC<{ children?: React.ReactNode }>;
  const Arrow: React.ForwardRefExoticComponent<
    React.SVGAttributes<SVGElement> & React.RefAttributes<SVGSVGElement>
  >;
  export {
    Root,
    Menu,
    Trigger,
    Group,
    Portal,
    Sub,
    RadioGroup,
    Content,
    SubContent,
    SubTrigger,
    Item,
    CheckboxItem,
    RadioItem,
    Label,
    Separator,
    ItemIndicator,
    Arrow,
  };
}

declare module '@radix-ui/react-navigation-menu' {
  import * as React from 'react';
  interface RootProps extends React.HTMLAttributes<HTMLElement> {
    value?: string;
    onValueChange?: (v: string) => void;
    delayDuration?: number;
    skipDelayDuration?: number;
    dir?: 'ltr' | 'rtl';
    orientation?: 'horizontal' | 'vertical';
  }
  const Root: React.ForwardRefExoticComponent<RootProps & React.RefAttributes<HTMLElement>>;
  interface ListProps extends React.HTMLAttributes<HTMLUListElement> {}
  const List: React.ForwardRefExoticComponent<ListProps & React.RefAttributes<HTMLUListElement>>;
  const Item: React.ForwardRefExoticComponent<
    React.HTMLAttributes<HTMLLIElement> & { value?: string } & React.RefAttributes<HTMLLIElement>
  >;
  interface TriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {}
  const Trigger: React.ForwardRefExoticComponent<
    TriggerProps & React.RefAttributes<HTMLButtonElement>
  >;
  interface ContentProps extends React.HTMLAttributes<HTMLDivElement> {
    forceMount?: boolean;
  }
  const Content: React.ForwardRefExoticComponent<
    ContentProps & React.RefAttributes<HTMLDivElement>
  >;
  const Link: React.ForwardRefExoticComponent<
    React.AnchorHTMLAttributes<HTMLAnchorElement> & {
      active?: boolean;
      asChild?: boolean;
    } & React.RefAttributes<HTMLAnchorElement>
  >;
  interface ViewportProps extends React.HTMLAttributes<HTMLDivElement> {
    forceMount?: boolean;
  }
  const Viewport: React.ForwardRefExoticComponent<
    ViewportProps & React.RefAttributes<HTMLDivElement>
  >;
  const Indicator: React.ForwardRefExoticComponent<
    React.HTMLAttributes<HTMLDivElement> & {
      forceMount?: boolean;
    } & React.RefAttributes<HTMLDivElement>
  >;
  export { Root, List, Item, Trigger, Content, Link, Viewport, Indicator };
}

declare module 'react-resizable-panels' {
  import * as React from 'react';
  interface PanelGroupProps extends React.HTMLAttributes<HTMLDivElement> {
    direction: 'horizontal' | 'vertical';
    autoSaveId?: string;
    onLayout?: (sizes: number[]) => void;
  }
  const PanelGroup: React.ForwardRefExoticComponent<
    PanelGroupProps & React.RefAttributes<HTMLDivElement>
  >;
  interface PanelProps extends React.HTMLAttributes<HTMLDivElement> {
    defaultSize?: number;
    minSize?: number;
    maxSize?: number;
    collapsible?: boolean;
    collapsedSize?: number;
    onCollapse?: () => void;
    onExpand?: () => void;
    onResize?: (size: number) => void;
  }
  const Panel: React.ForwardRefExoticComponent<PanelProps & React.RefAttributes<HTMLDivElement>>;
  interface PanelResizeHandleProps extends React.HTMLAttributes<HTMLDivElement> {
    disabled?: boolean;
    id?: string;
    onDragging?: (isDragging: boolean) => void;
    tagName?: string;
  }
  const PanelResizeHandle: React.ForwardRefExoticComponent<
    PanelResizeHandleProps & React.RefAttributes<HTMLDivElement>
  >;
  export { PanelGroup, Panel, PanelResizeHandle };
}
