import * as react3 from "react";
import { RefCallback } from "react";

//#region src/hooks/use-descendants/index.d.ts
type DescendantProps<Y extends HTMLElement = HTMLElement, M = {}> = M & {
  disabled?: ((node: Y) => boolean) | boolean;
};
type Descendant<Y extends HTMLElement = HTMLElement, M = {}> = DescendantProps<Y, M> & {
  index: number;
  node: Y;
  recurred?: boolean;
};
declare const descendantManager: <Y extends HTMLElement = HTMLElement, M = {}>() => {
  active: (target?: Descendant<Y, M> | null | Y, options?: FocusOptions) => void;
  count: () => number;
  destroy: () => void;
  enabledCount: () => number;
  enabledFirstValue: () => Descendant<Y, M> | undefined;
  enabledIndexOf: (target?: Descendant<Y, M> | null | Y) => number;
  enabledLastValue: () => Descendant<Y, M> | undefined;
  enabledNextValue: (indexOrNode: Descendant<Y, M> | null | number | Y, loop?: boolean) => Descendant<Y, M> | undefined;
  enabledPrevValue: (indexOrNode: Descendant<Y, M> | null | number | Y, loop?: boolean) => Descendant<Y, M> | undefined;
  enabledValue: (index: number) => Descendant<Y, M> | undefined;
  enabledValues: () => Descendant<Y, M>[];
  firstValue: () => Descendant<Y, M> | undefined;
  indexOf: (target?: Descendant<Y, M> | null | Y) => number;
  lastValue: () => Descendant<Y, M> | undefined;
  nextValue: (indexOrNode: Descendant<Y, M> | null | number | Y, loop?: boolean) => Descendant<Y, M> | undefined;
  prevValue: (indexOrNode: Descendant<Y, M> | null | number | Y, loop?: boolean) => Descendant<Y, M> | undefined;
  register: (props?: DescendantProps<Y, M>) => RefCallback<Y>;
  unregister: (node?: null | Y) => void;
  value: (indexOrNode: null | number | Y) => Descendant<Y, M> | undefined;
  values: () => Descendant<Y, M>[];
};
type Descendants<Y extends HTMLElement, M = {}> = ReturnType<typeof descendantManager<Y, M>>;
type CreateDescendantRegister<Y extends HTMLElement, M = {}> = (props?: DescendantProps<Y, M>) => RefCallback<Y>;
/**
 * `useDescendants` is a custom hook that manages descendants.
 *
 * @see https://yamada-ui.com/docs/hooks/use-descendants
 */
declare const createDescendants: <Y extends HTMLElement = HTMLElement, M = {}>() => {
  DescendantsContext: react3.Context<{
    active: (target?: Y | Descendant<Y, M> | null | undefined, options?: FocusOptions) => void;
    count: () => number;
    destroy: () => void;
    enabledCount: () => number;
    enabledFirstValue: () => Descendant<Y, M> | undefined;
    enabledIndexOf: (target?: Y | Descendant<Y, M> | null | undefined) => number;
    enabledLastValue: () => Descendant<Y, M> | undefined;
    enabledNextValue: (indexOrNode: number | Y | Descendant<Y, M> | null, loop?: boolean) => Descendant<Y, M> | undefined;
    enabledPrevValue: (indexOrNode: number | Y | Descendant<Y, M> | null, loop?: boolean) => Descendant<Y, M> | undefined;
    enabledValue: (index: number) => Descendant<Y, M> | undefined;
    enabledValues: () => Descendant<Y, M>[];
    firstValue: () => Descendant<Y, M> | undefined;
    indexOf: (target?: Y | Descendant<Y, M> | null | undefined) => number;
    lastValue: () => Descendant<Y, M> | undefined;
    nextValue: (indexOrNode: number | Y | Descendant<Y, M> | null, loop?: boolean) => Descendant<Y, M> | undefined;
    prevValue: (indexOrNode: number | Y | Descendant<Y, M> | null, loop?: boolean) => Descendant<Y, M> | undefined;
    register: (props?: DescendantProps<Y, M> | undefined) => RefCallback<Y>;
    unregister: (node?: Y | null | undefined) => void;
    value: (indexOrNode: number | Y | null) => Descendant<Y, M> | undefined;
    values: () => Descendant<Y, M>[];
  }>;
  useDescendant: (props?: DescendantProps<Y, M>) => {
    descendants: {
      active: (target?: Y | Descendant<Y, M> | null | undefined, options?: FocusOptions) => void;
      count: () => number;
      destroy: () => void;
      enabledCount: () => number;
      enabledFirstValue: () => Descendant<Y, M> | undefined;
      enabledIndexOf: (target?: Y | Descendant<Y, M> | null | undefined) => number;
      enabledLastValue: () => Descendant<Y, M> | undefined;
      enabledNextValue: (indexOrNode: number | Y | Descendant<Y, M> | null, loop?: boolean) => Descendant<Y, M> | undefined;
      enabledPrevValue: (indexOrNode: number | Y | Descendant<Y, M> | null, loop?: boolean) => Descendant<Y, M> | undefined;
      enabledValue: (index: number) => Descendant<Y, M> | undefined;
      enabledValues: () => Descendant<Y, M>[];
      firstValue: () => Descendant<Y, M> | undefined;
      indexOf: (target?: Y | Descendant<Y, M> | null | undefined) => number;
      lastValue: () => Descendant<Y, M> | undefined;
      nextValue: (indexOrNode: number | Y | Descendant<Y, M> | null, loop?: boolean) => Descendant<Y, M> | undefined;
      prevValue: (indexOrNode: number | Y | Descendant<Y, M> | null, loop?: boolean) => Descendant<Y, M> | undefined;
      register: (props?: DescendantProps<Y, M> | undefined) => RefCallback<Y>;
      unregister: (node?: Y | null | undefined) => void;
      value: (indexOrNode: number | Y | null) => Descendant<Y, M> | undefined;
      values: () => Descendant<Y, M>[];
    };
    register: RefCallback<Y>;
  };
  useDescendantRegister: (descendants?: Descendants<Y, M>) => (props?: DescendantProps<Y, M>) => RefCallback<Y>;
  useDescendants: () => {
    active: (target?: Y | Descendant<Y, M> | null | undefined, options?: FocusOptions) => void;
    count: () => number;
    destroy: () => void;
    enabledCount: () => number;
    enabledFirstValue: () => Descendant<Y, M> | undefined;
    enabledIndexOf: (target?: Y | Descendant<Y, M> | null | undefined) => number;
    enabledLastValue: () => Descendant<Y, M> | undefined;
    enabledNextValue: (indexOrNode: number | Y | Descendant<Y, M> | null, loop?: boolean) => Descendant<Y, M> | undefined;
    enabledPrevValue: (indexOrNode: number | Y | Descendant<Y, M> | null, loop?: boolean) => Descendant<Y, M> | undefined;
    enabledValue: (index: number) => Descendant<Y, M> | undefined;
    enabledValues: () => Descendant<Y, M>[];
    firstValue: () => Descendant<Y, M> | undefined;
    indexOf: (target?: Y | Descendant<Y, M> | null | undefined) => number;
    lastValue: () => Descendant<Y, M> | undefined;
    nextValue: (indexOrNode: number | Y | Descendant<Y, M> | null, loop?: boolean) => Descendant<Y, M> | undefined;
    prevValue: (indexOrNode: number | Y | Descendant<Y, M> | null, loop?: boolean) => Descendant<Y, M> | undefined;
    register: (props?: DescendantProps<Y, M> | undefined) => RefCallback<Y>;
    unregister: (node?: Y | null | undefined) => void;
    value: (indexOrNode: number | Y | null) => Descendant<Y, M> | undefined;
    values: () => Descendant<Y, M>[];
  };
  useDescendantsContext: () => {
    active: (target?: Y | Descendant<Y, M> | null | undefined, options?: FocusOptions) => void;
    count: () => number;
    destroy: () => void;
    enabledCount: () => number;
    enabledFirstValue: () => Descendant<Y, M> | undefined;
    enabledIndexOf: (target?: Y | Descendant<Y, M> | null | undefined) => number;
    enabledLastValue: () => Descendant<Y, M> | undefined;
    enabledNextValue: (indexOrNode: number | Y | Descendant<Y, M> | null, loop?: boolean) => Descendant<Y, M> | undefined;
    enabledPrevValue: (indexOrNode: number | Y | Descendant<Y, M> | null, loop?: boolean) => Descendant<Y, M> | undefined;
    enabledValue: (index: number) => Descendant<Y, M> | undefined;
    enabledValues: () => Descendant<Y, M>[];
    firstValue: () => Descendant<Y, M> | undefined;
    indexOf: (target?: Y | Descendant<Y, M> | null | undefined) => number;
    lastValue: () => Descendant<Y, M> | undefined;
    nextValue: (indexOrNode: number | Y | Descendant<Y, M> | null, loop?: boolean) => Descendant<Y, M> | undefined;
    prevValue: (indexOrNode: number | Y | Descendant<Y, M> | null, loop?: boolean) => Descendant<Y, M> | undefined;
    register: (props?: DescendantProps<Y, M> | undefined) => RefCallback<Y>;
    unregister: (node?: Y | null | undefined) => void;
    value: (indexOrNode: number | Y | null) => Descendant<Y, M> | undefined;
    values: () => Descendant<Y, M>[];
  };
};
//#endregion
export { CreateDescendantRegister, Descendant, DescendantProps, Descendants, createDescendants };
//# sourceMappingURL=index.d.ts.map