UNPKG

@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
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, };