@codeworker.br/govbr-tw-react
Version:
Biblioteca de componentes React usando Tailwind CSS que implementa o Padrão Digital de Governo.
100 lines (99 loc) • 4.28 kB
TypeScript
import React, { ReactNode } from "react";
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
import { VariantProps } from "class-variance-authority";
import { treeVariants } from "./variants";
type TreeDensity = NonNullable<VariantProps<typeof treeVariants>["density"]>;
type TreeVariant = NonNullable<VariantProps<typeof treeVariants>["variant"]>;
type IconRenderer = (params: {
expanded: boolean;
iconClassName: string;
}) => ReactNode;
type TreeIconProp = IconDefinition | ReactNode | ((iconClassName: string) => ReactNode);
interface TreeBranchRenderParams {
type: "branch";
level: number;
label: ReactNode;
icon?: TreeIconProp;
collapsedIcon?: TreeIconProp;
expandedIcon?: TreeIconProp;
iconClassName: string;
defaultNode: ReactNode;
expanded: boolean;
hasChildren: boolean;
disabled: boolean;
toggle: (event?: React.MouseEvent<HTMLButtonElement>) => void;
onSelect?: (event: React.MouseEvent<HTMLButtonElement>) => void;
density: TreeDensity;
variant: TreeVariant;
iconNode: ReactNode;
collapsedIconNode: ReactNode;
expandedIconNode: ReactNode;
toggleIconNode: ReactNode;
content: ReactNode;
group: ReactNode | null;
containerProps: React.LiHTMLAttributes<HTMLLIElement>;
}
interface TreeLeafRenderParams {
type: "leaf";
level: number;
label: ReactNode;
icon?: TreeIconProp;
iconClassName: string;
defaultNode: ReactNode;
disabled: boolean;
onSelect?: (event: React.MouseEvent<HTMLButtonElement>) => void;
density: TreeDensity;
variant: TreeVariant;
iconNode: ReactNode;
content: ReactNode;
containerProps: React.LiHTMLAttributes<HTMLLIElement>;
}
type TreeRenderItem = (params: TreeBranchRenderParams | TreeLeafRenderParams) => ReactNode;
export interface TreeProps extends React.HTMLAttributes<HTMLUListElement>, VariantProps<typeof treeVariants> {
iconClassName?: string;
indent?: number;
renderToggleIcon?: IconRenderer;
renderItem?: TreeRenderItem;
branchCollapsedIcon?: TreeIconProp;
branchExpandedIcon?: TreeIconProp;
}
interface TreeBranchProps extends Omit<React.LiHTMLAttributes<HTMLLIElement>, "children" | "onSelect"> {
label: ReactNode;
children?: ReactNode;
defaultExpanded?: boolean;
expanded?: boolean;
onExpandedChange?: (expanded: boolean) => void;
onToggle?: (expanded: boolean) => void;
toggleIconClassName?: string;
icon?: TreeIconProp;
iconCollapsed?: TreeIconProp;
iconExpanded?: TreeIconProp;
iconClassName?: string;
labelClassName?: string;
toggleIcon?: IconRenderer;
onSelect?: (event: React.MouseEvent<HTMLButtonElement>) => void;
disabled?: boolean;
expandOnLabelClick?: boolean;
renderItem?: (params: TreeBranchRenderParams) => ReactNode;
}
interface TreeLeafProps extends Omit<React.LiHTMLAttributes<HTMLLIElement>, "children" | "onSelect"> {
label: ReactNode;
icon?: TreeIconProp;
iconClassName?: string;
labelClassName?: string;
onSelect?: (event: React.MouseEvent<HTMLButtonElement>) => void;
disabled?: boolean;
renderItem?: (params: TreeLeafRenderParams) => ReactNode;
}
declare const TreeNamespace: (({ density, variant, iconClassName, indent, renderToggleIcon, renderItem, branchCollapsedIcon, branchExpandedIcon, className, children, ...props }: TreeProps) => import("react/jsx-runtime").JSX.Element) & {
Branch: {
({ label, children, defaultExpanded, expanded, onExpandedChange, onToggle, toggleIconClassName, icon, iconCollapsed, iconExpanded, iconClassName, labelClassName, toggleIcon, onSelect, disabled, expandOnLabelClick, renderItem, className, ...props }: TreeBranchProps): string | number | boolean | Iterable<React.ReactNode> | import("react/jsx-runtime").JSX.Element;
displayName: string;
};
Leaf: {
({ label, icon, iconClassName, labelClassName, onSelect, disabled, renderItem, className, ...props }: TreeLeafProps): string | number | boolean | Iterable<React.ReactNode> | import("react/jsx-runtime").JSX.Element;
displayName: string;
};
};
export { TreeNamespace as Tree };
export type { TreeBranchProps, TreeLeafProps, TreeBranchRenderParams, TreeLeafRenderParams, TreeRenderItem, };