UNPKG

ivt

Version:

Ivt Components Library

1 lines 60.1 kB
{"version":3,"file":"index.mjs","sources":["../../src/components/default/base/AutoComplete.tsx","../../src/components/default/base/BadgeListLimited.tsx","../../node_modules/date-fns/isWeekend.js","../../src/components/default/base/CalendarPopover.tsx","../../src/components/default/base/CollapsibleHelp.tsx","../../src/components/default/base/ConfirmSave.tsx","../../src/components/default/base/GenericHeadingMenubar.tsx","../../src/components/default/base/GenericTable.tsx","../../src/components/default/base/GenericTabs.tsx","../../src/components/default/base/Header.tsx","../../src/components/default/base/HoverBadge.tsx","../../src/components/default/base/RuleFiltersBuilder.tsx","../../src/components/default/base/StepNavigator.tsx","../../src/components/default/base/TextWrap.tsx"],"sourcesContent":["\"use client\";\n\nimport { CheckIcon, ChevronsUpDown } from \"lucide-react\";\nimport React from \"react\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n\tCommand,\n\tCommandEmpty,\n\tCommandGroup,\n\tCommandInput,\n\tCommandItem,\n\tCommandList,\n} from \"@/components/ui/command\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/components/ui/popover\";\nimport { cn } from \"@/lib/utils\";\n\ninterface AutoCompleteProps<T> {\n\tvalue: T | null;\n\tonChange: (value: T | null) => void;\n\tplaceholder?: string;\n\tsearchPlaceholder?: string;\n\topen: boolean;\n\tonOpenChange: (open: boolean) => void;\n\tdisabled?: boolean;\n\tmessageEmpty?: string;\n\tfetchOptions: (term: string) => Promise<T[]>;\n\tgetOptionLabel: (option: T) => string;\n\tgetOptionKey: (option: T) => string | number;\n\tonSelect?: (option: T) => void;\n\tclassName?: string;\n}\n\nexport function AutoComplete<T>({\n\tvalue,\n\tonChange,\n\tplaceholder,\n\tsearchPlaceholder,\n\topen,\n\tonOpenChange,\n\tdisabled,\n\tmessageEmpty = \"Nenhum item encontrado.\",\n\tfetchOptions,\n\tgetOptionLabel,\n\tgetOptionKey,\n\tonSelect,\n\tclassName,\n}: AutoCompleteProps<T>) {\n\tconst [options, setOptions] = React.useState<T[]>([]);\n\tconst [loading, setLoading] = React.useState(false);\n\tconst [searchTerm, setSearchTerm] = React.useState(\"\");\n\n\tconst sortedOptions = React.useMemo(() => {\n\t\tif (!value) return options;\n\t\treturn [...options].sort((a, b) => {\n\t\t\tif (getOptionLabel(a) === getOptionLabel(value)) return -1;\n\t\t\tif (getOptionLabel(b) === getOptionLabel(value)) return 1;\n\t\t\treturn getOptionLabel(a).localeCompare(getOptionLabel(b));\n\t\t});\n\t}, [options, value, getOptionLabel]);\n\n\tconst debouncedFetch = useDebouncedCallback(async (term: string) => {\n\t\ttry {\n\t\t\tconst result = await fetchOptions(term);\n\t\t\tsetOptions(result);\n\t\t} catch (err) {\n\t\t\tconsole.error(\"Erro ao buscar opções:\", err);\n\t\t\tsetOptions([]);\n\t\t} finally {\n\t\t\tsetLoading(false);\n\t\t}\n\t}, 500);\n\n\tconst handleInputChange = (val: string) => {\n\t\tsetSearchTerm(val);\n\n\t\tif (val.trim() === \"\") {\n\t\t\tsetOptions([]);\n\t\t\tsetLoading(false);\n\t\t\treturn;\n\t\t}\n\n\t\tsetLoading(true);\n\t\tdebouncedFetch(val);\n\t};\n\n\tconst handleSelect = (option: T) => {\n\t\tif (onSelect) {\n\t\t\tonSelect(option);\n\t\t} else {\n\t\t\tonChange(option);\n\t\t\tonOpenChange(false);\n\t\t}\n\t};\n\n\treturn (\n\t\t<Popover open={open} onOpenChange={onOpenChange}>\n\t\t\t<PopoverTrigger asChild>\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tclassName={cn(\"flex h-10 w-full items-center justify-between truncate\", className)}\n\t\t\t\t\taria-expanded={open}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t>\n\t\t\t\t\t<span className={cn(\"text-muted-foreground\", value && \"text-foreground\")}>\n\t\t\t\t\t\t{value ? getOptionLabel(value) : placeholder}\n\t\t\t\t\t</span>\n\t\t\t\t\t<ChevronsUpDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\n\t\t\t\t</Button>\n\t\t\t</PopoverTrigger>\n\t\t\t<PopoverContent\n\t\t\t\tclassName=\"max-h-[300px] w-[--radix-popover-trigger-width] overflow-auto p-0\"\n\t\t\t\tside=\"bottom\"\n\t\t\t\talign=\"start\"\n\t\t\t>\n\t\t\t\t<Command>\n\t\t\t\t\t<CommandInput\n\t\t\t\t\t\tplaceholder={searchPlaceholder}\n\t\t\t\t\t\tclassName=\"h-9\"\n\t\t\t\t\t\tonValueChange={handleInputChange}\n\t\t\t\t\t/>\n\t\t\t\t\t<CommandEmpty>\n\t\t\t\t\t\t{loading\n\t\t\t\t\t\t\t? \"Carregando...\"\n\t\t\t\t\t\t\t: searchTerm.trim() === \"\"\n\t\t\t\t\t\t\t\t? \"Digite algo para buscar...\"\n\t\t\t\t\t\t\t\t: messageEmpty}\n\t\t\t\t\t</CommandEmpty>\n\t\t\t\t\t<CommandList className=\"max-h-60 overflow-y-auto\">\n\t\t\t\t\t\t<CommandGroup>\n\t\t\t\t\t\t\t{sortedOptions.map((item) => {\n\t\t\t\t\t\t\t\tconst label = getOptionLabel(item);\n\t\t\t\t\t\t\t\tconst key = getOptionKey(item);\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<CommandItem key={key} value={label} onSelect={() => handleSelect(item)}>\n\t\t\t\t\t\t\t\t\t\t{value && getOptionLabel(value) === label && (\n\t\t\t\t\t\t\t\t\t\t\t<CheckIcon className=\"h-4 w-4 opacity-100\" />\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t<span>{label}</span>\n\t\t\t\t\t\t\t\t\t</CommandItem>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</CommandGroup>\n\t\t\t\t\t</CommandList>\n\t\t\t\t</Command>\n\t\t\t</PopoverContent>\n\t\t</Popover>\n\t);\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { Badge, type BadgeVariants } from \"@/components/ui/badge\";\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"@/components/ui/tooltip\";\n\ninterface BadgeListLimitedProps {\n\titems: string[];\n\tmaxVisible?: number;\n\tvariant?: BadgeVariants;\n\tsubtle?: boolean;\n\ttooltipItems?: string[];\n}\n\n/**\n * Componente que exibe uma lista de Badges com limite de itens visíveis.\n * Se houver mais itens do que o limite, exibe um Badge adicional com \"+N\".\n *\n * @param items - Array de strings para exibir como Badges\n * @param maxVisible - Número máximo de Badges visíveis (padrão: 3)\n * @param variant - Variante do Badge (padrão: \"default\")\n * @param subtle - Se o Badge deve ter estilo sutil (padrão: true)\n * @param tooltipItems - Array de strings para exibir no tooltip (opcional). Se fornecido, exibe todos os itens no tooltip, cada um em uma linha.\n */\nexport const BadgeListLimited: React.FC<BadgeListLimitedProps> = ({\n\titems,\n\tmaxVisible = 3,\n\tvariant = \"default\",\n\tsubtle = true,\n\ttooltipItems,\n}) => {\n\tconst visibleItems = items.slice(0, maxVisible);\n\tconst remainingCount = items.length - maxVisible;\n\tconst hasMore = remainingCount > 0;\n\n\tconst hiddenItems = items.slice(maxVisible);\n\tconst itemsToShowInTooltip = tooltipItems || hiddenItems;\n\n\treturn (\n\t\t<div className=\"flex flex-wrap items-center gap-2.5\">\n\t\t\t{visibleItems.map((item) => (\n\t\t\t\t<Badge key={item} variant={variant} subtle={subtle}>\n\t\t\t\t\t{item}\n\t\t\t\t</Badge>\n\t\t\t))}\n\t\t\t{hasMore &&\n\t\t\t\t(itemsToShowInTooltip.length > 0 ? (\n\t\t\t\t\t<TooltipProvider>\n\t\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t\t\t\t<Badge variant={variant} subtle={subtle}>\n\t\t\t\t\t\t\t\t\t+{remainingCount}\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t\t<TooltipContent>\n\t\t\t\t\t\t\t\t<div className=\"flex flex-col gap-1 max-h-[200px] overflow-y-auto text-xs\">\n\t\t\t\t\t\t\t\t\t{itemsToShowInTooltip.map((tooltipItem) => (\n\t\t\t\t\t\t\t\t\t\t<div key={tooltipItem}>{tooltipItem}</div>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</TooltipContent>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t</TooltipProvider>\n\t\t\t\t) : (\n\t\t\t\t\t<Badge variant={variant} subtle={subtle}>\n\t\t\t\t\t\t+{remainingCount}\n\t\t\t\t\t</Badge>\n\t\t\t\t))}\n\t\t</div>\n\t);\n};\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link isWeekend} function options.\n */\n\n/**\n * @name isWeekend\n * @category Weekday Helpers\n * @summary Does the given date fall on a weekend?\n *\n * @description\n * Does the given date fall on a weekend? A weekend is either Saturday (`6`) or Sunday (`0`).\n *\n * @param date - The date to check\n * @param options - An object with options\n *\n * @returns The date falls on a weekend\n *\n * @example\n * // Does 5 October 2014 fall on a weekend?\n * const result = isWeekend(new Date(2014, 9, 5))\n * //=> true\n */\nexport function isWeekend(date, options) {\n const day = toDate(date, options?.in).getDay();\n return day === 0 || day === 6;\n}\n\n// Fallback for modularized imports:\nexport default isWeekend;\n","\"use client\";\n\nimport { format, isWeekend } from \"date-fns\";\nimport { ptBR } from \"date-fns/locale\";\nimport { CalendarDaysIcon, LoaderCircleIcon } from \"lucide-react\";\nimport React from \"react\";\nimport { Button, type ButtonProps } from \"@/components/ui/button\";\nimport { Calendar } from \"@/components/ui/calendar\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/components/ui/popover\";\nimport { cn } from \"@/lib/utils\";\nimport { tryParseDate } from \"@/utils/date\";\n\nexport function normalizeDate(date: Date): string {\n\treturn format(date, \"yyyy-MM-dd\");\n}\n\nexport interface CalendarPopoverProps\n\textends Omit<React.ComponentProps<typeof Calendar>, \"mode\" | \"selected\" | \"onSelect\"> {\n\t/** Data selecionada (pode ser Date ou string parseável) */\n\tdate: Date | string | undefined;\n\n\t/** Função chamada ao selecionar uma data */\n\tsetDate: (date: Date | undefined) => void;\n\n\t/** Texto exibido quando não há data selecionada */\n\tplaceholder?: string;\n\n\t/** ID opcional do botão */\n\tid?: string;\n\n\t/** Props extras para o botão */\n\tbuttonProps?: ButtonProps;\n\n\t/** Props extras para o popover */\n\tpopoverProps?: React.ComponentProps<typeof Popover>;\n\n\t/** Classe extra para o conteúdo do popover */\n\tpopoverContentClassName?: string;\n\n\t/** Classe extra para o botão */\n\tclassName?: string;\n\n\t/**\n\t * Permite desabilitar datas específicas (igual ao Calendar do shadcn)\n\t * Pode ser um boolean, ou uma função que recebe a data e retorna boolean\n\t */\n\tdisabled?: boolean | ((date: Date) => boolean);\n\n\t/**\n\t * Exibe o estado de carregamento geral do componente\n\t * Quando true, mostra o ícone de loading e desabilita a interação\n\t */\n\tisLoading?: boolean;\n\n\t/**\n\t * Exibe o estado de carregamento específico da tabela (caso exista)\n\t * Quando true, impede a seleção de datas no calendário\n\t */\n\tisLoadingTable?: boolean;\n\n\t/**\n\t * Define um conjunto de datas desabilitadas (formato 'yyyy-MM-dd')\n\t * Cada data presente neste Set será bloqueada na seleção do calendário\n\t */\n\tdisabledDates?: Set<string>;\n\n\t/**\n\t * Mês padrão a ser mostrado (caso nenhuma data esteja selecionada)\n\t * Por padrão, será o mês atual.\n\t */\n\tdefaultMonth?: Date;\n}\n\nexport const CalendarPopover: React.FC<CalendarPopoverProps> = ({\n\tdate,\n\tsetDate,\n\tplaceholder = \"Selecione uma data\",\n\tid = \"calendar-popover\",\n\tbuttonProps,\n\tpopoverProps,\n\tpopoverContentClassName,\n\tclassName,\n\tdisabled,\n\tisLoading,\n\tdisabledDates,\n\tisLoadingTable,\n\t...props\n}) => {\n\tconst validDate = tryParseDate(date);\n\n\treturn (\n\t\t<Popover {...popoverProps}>\n\t\t\t<PopoverTrigger asChild>\n\t\t\t\t<Button\n\t\t\t\t\tid={id}\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"hover:text-foreground justify-start text-left font-normal\",\n\t\t\t\t\t\t!validDate && \"text-muted-foreground hover:text-muted-foreground\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tdisabled={typeof disabled === \"boolean\" ? disabled : undefined}\n\t\t\t\t\t{...buttonProps}\n\t\t\t\t>\n\t\t\t\t\t{isLoading ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<LoaderCircleIcon className=\"size-4 animate-spin\" />\n\t\t\t\t\t\t\t<span>carregando...</span>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<CalendarDaysIcon className=\"size-4\" />\n\t\t\t\t\t\t\t{validDate ? format(validDate, \"P\", { locale: ptBR }) : <span>{placeholder}</span>}\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</Button>\n\t\t\t</PopoverTrigger>\n\n\t\t\t<PopoverContent className={cn(\"w-auto p-0\", popoverContentClassName)} align=\"start\">\n\t\t\t\t<Calendar\n\t\t\t\t\tautoFocus\n\t\t\t\t\tcaptionLayout=\"dropdown\"\n\t\t\t\t\tselected={validDate}\n\t\t\t\t\tonSelect={setDate}\n\t\t\t\t\tlocale={ptBR}\n\t\t\t\t\tnumberOfMonths={1}\n\t\t\t\t\tfromYear={2010}\n\t\t\t\t\ttoYear={2040}\n\t\t\t\t\tdisabled={(currentDate) => {\n\t\t\t\t\t\tif (isLoading || isLoadingTable) return true;\n\n\t\t\t\t\t\tconst normalizedCurrentDate = normalizeDate(currentDate);\n\n\t\t\t\t\t\tconst isHoliday = disabledDates?.has(normalizedCurrentDate);\n\t\t\t\t\t\tconst isWeekendDay = isWeekend(currentDate);\n\t\t\t\t\t\tconst isFutureDate = currentDate > new Date();\n\n\t\t\t\t\t\treturn isHoliday || isWeekendDay || isFutureDate;\n\t\t\t\t\t}}\n\t\t\t\t\tdefaultMonth={validDate ?? props.defaultMonth ?? new Date()}\n\t\t\t\t\t{...props}\n\t\t\t\t\tmode=\"single\"\n\t\t\t\t/>\n\t\t\t</PopoverContent>\n\t\t</Popover>\n\t);\n};\n","\"use client\";\n\nimport { Info, X } from \"lucide-react\";\nimport React from \"react\";\nimport { Alert, AlertDescription, AlertTitle } from \"@/components/ui/alert\";\nimport { Button } from \"@/components/ui/button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/components/ui/popover\";\nimport { cn } from \"@/lib/utils\";\n\ninterface CollapsibleHelpProps {\n\tchildren?: React.ReactNode;\n\tcontent: React.ReactNode;\n\ttitle?: string;\n\tclassName?: string;\n\tlabel?: React.ReactNode;\n}\n\n/**\n * A simpler CollapsibleHelp component that uses a Popover for the help content.\n * It manages its own open state internally.\n * The trigger is provided as 'children', and the content to show is passed as the 'content' prop.\n *\n * Usage:\n * <CollapsibleHelp\n * content={<p>Help text goes here...</p>}\n * title=\"Help Section\"\n * >\n * <button>Toggle Help</button> // This is your custom trigger\n * </CollapsibleHelp>\n */\nexport function CollapsibleHelp({\n\tchildren,\n\tcontent,\n\ttitle = \"Ajuda\",\n\tclassName,\n\tlabel,\n}: CollapsibleHelpProps) {\n\tconst [open, setOpen] = React.useState(false);\n\n\treturn (\n\t\t<div className={cn(\"flex items-start justify-between gap-2\", className)}>\n\t\t\t{label && <div className=\"flex-1\">{label}</div>}\n\n\t\t\t<Popover open={open} onOpenChange={setOpen}>\n\t\t\t\t<PopoverTrigger asChild>{children}</PopoverTrigger>\n\t\t\t\t<PopoverContent\n\t\t\t\t\tclassName=\"w-100 p-0 border-none bg-transparent shadow-none\"\n\t\t\t\t\talign=\"end\"\n\t\t\t\t\tside=\"bottom\"\n\t\t\t\t>\n\t\t\t\t\t<Alert className=\"relative border-primary/20 shadow-md bg-popover\">\n\t\t\t\t\t\t<Info className=\"h-4 w-4 text-primary\" />\n\t\t\t\t\t\t<AlertTitle className=\"text-primary font-medium\">{title}</AlertTitle>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName=\"absolute top-4 right-4 h-6 w-6 p-0 text-muted-foreground hover:text-foreground\"\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\tsetOpen(false);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<X className=\"h-4 w-4\" />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<AlertDescription className=\"mt-2 text-sm space-y-3 text-foreground\">\n\t\t\t\t\t\t\t{content}\n\t\t\t\t\t\t</AlertDescription>\n\t\t\t\t\t</Alert>\n\t\t\t\t</PopoverContent>\n\t\t\t</Popover>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { BadgeListLimited } from \"@/components/default/base/BadgeListLimited\";\nimport { ListItem } from \"@/components/default/layout\";\nimport type { BadgeVariants } from \"@/components/ui/badge\";\nimport { Button, type ButtonProps } from \"@/components/ui/button\";\nimport {\n\tDialog,\n\tDialogContent,\n\tDialogDescription,\n\tDialogFooter,\n\tDialogHeader,\n\tDialogTitle,\n\tDialogTrigger,\n} from \"@/components/ui/dialog\";\n\nexport interface ConfirmSaveRowConfig {\n\ttitle: string;\n\t// biome-ignore lint/suspicious/noExplicitAny: <Generic value>\n\tvalue: any;\n\ttype: \"text\" | \"badge-limited\" | \"custom\";\n\tbadge?: {\n\t\tvariant?: BadgeVariants;\n\t\tsubtle?: boolean;\n\t\tmaxVisible?: number;\n\t};\n}\n\ninterface ConfirmSaveProps {\n\tonSave: () => void;\n\tdisabled?: boolean;\n\tdialogTitle?: string;\n\tdialogDescription?: string;\n\tactionTitle?: string;\n\tactionVariant?: ButtonProps[\"variant\"];\n\tchildren?: React.ReactNode;\n\trows?: ConfirmSaveRowConfig[];\n}\n\nexport function ConfirmSave({\n\tonSave,\n\tdisabled,\n\tdialogTitle = \"Confirme os dados da predefinição\",\n\tdialogDescription = \"Verifique se os dados estão corretos antes de salvar. Você pode alterá-los a qualquer momento na lista de predefinições.\",\n\tactionTitle = \"Salvar predefinição\",\n\tchildren,\n\trows = [],\n\tactionVariant = \"default\",\n}: ConfirmSaveProps) {\n\tconst [open, setOpen] = React.useState(false);\n\n\treturn (\n\t\t<Dialog open={open} onOpenChange={setOpen}>\n\t\t\t<DialogTrigger asChild>{children}</DialogTrigger>\n\t\t\t<DialogContent className=\"flex max-h-[90vh] max-w-116 flex-col\">\n\t\t\t\t<DialogHeader className=\"text-left\">\n\t\t\t\t\t<DialogTitle className=\"text-xl font-semibold\">{dialogTitle}</DialogTitle>\n\t\t\t\t\t<DialogDescription>{dialogDescription}</DialogDescription>\n\t\t\t\t</DialogHeader>\n\t\t\t\t<div\n\t\t\t\t\tdata-confirm-save-scrollable\n\t\t\t\t\tclassName=\"flex min-h-0 max-w-full flex-1 flex-col overflow-y-auto py-2\"\n\t\t\t\t>\n\t\t\t\t\t{rows.map((row, index) => {\n\t\t\t\t\t\tif (!row.value || (Array.isArray(row.value) && row.value.length === 0)) {\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet content: React.ReactNode;\n\n\t\t\t\t\t\tif (row.type === \"badge-limited\") {\n\t\t\t\t\t\t\tconst items = Array.isArray(row.value) ? row.value : [];\n\t\t\t\t\t\t\tcontent = (\n\t\t\t\t\t\t\t\t<BadgeListLimited\n\t\t\t\t\t\t\t\t\titems={items}\n\t\t\t\t\t\t\t\t\tvariant={row.badge?.variant || \"default\"}\n\t\t\t\t\t\t\t\t\tsubtle={row.badge?.subtle ?? true}\n\t\t\t\t\t\t\t\t\tmaxVisible={row.badge?.maxVisible}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (row.type === \"custom\") {\n\t\t\t\t\t\t\tcontent = row.value;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontent = row.value || \"-\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<ListItem\n\t\t\t\t\t\t\t\tkey={`${row.title}-${index}`}\n\t\t\t\t\t\t\t\ttitle={row.title}\n\t\t\t\t\t\t\t\tvalue={content}\n\t\t\t\t\t\t\t\tclassName=\"*:text-sm!\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t\t<DialogFooter>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tonSave();\n\t\t\t\t\t\t\tsetOpen(false);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tvariant={actionVariant}\n\t\t\t\t\t\tisAction\n\t\t\t\t\t>\n\t\t\t\t\t\t{actionTitle}\n\t\t\t\t\t</Button>\n\t\t\t\t</DialogFooter>\n\t\t\t</DialogContent>\n\t\t</Dialog>\n\t);\n}\n","\"use client\";\n\nimport React from \"react\";\nimport {\n\tMenubar,\n\tMenubarContent,\n\tMenubarItem,\n\tMenubarMenu,\n\tMenubarTrigger,\n} from \"@/components/ui/menubar\";\n\nimport { cn } from \"@/lib/utils\";\n\nexport type MenuItemConfig = {\n\tvalue: string;\n\tlabel: string;\n\tpath: string;\n\tonClick?: () => void;\n\tsubItems?: { label: string; onClick: () => void }[];\n\t/** Função customizada para determinar se o item está ativo */\n\tisActive?: (pathname: string) => boolean;\n};\n\nexport interface GenericHeadingMenubarProps {\n\t/** Configuração dos itens do menu */\n\tmenuItems: MenuItemConfig[];\n\t/** Classes CSS adicionais para o container */\n\tclassName?: string;\n\t/** Conteúdo adicional a ser renderizado ao lado do menu */\n\tchildren?: React.ReactNode;\n\t/** Desabilita todos os itens do menu */\n\tdisabled?: boolean;\n\t/** Função customizada para determinar se um item está ativo (fallback) */\n\tdefaultIsActive?: (menuValue: string, pathname: string) => boolean;\n\t/** Caminho atual da rota (para highlight do ativo). Compatível com Next.js e React Router. */\n\tcurrentPath?: string;\n\t/** Função executada ao solicitar navegação (ex: router.push ou navigate). */\n\tonNavigate?: (path: string) => void;\n}\n\n/**\n * Componente genérico de menubar para navegação entre páginas.\n * Ajustado para ser agnóstico de framework (Next.js ou React puro).\n *\n * @example\n * ```tsx\n * // Exemplo com Next.js\n * const router = useRouter();\n * const pathname = usePathname();\n *\n * <GenericHeadingMenubar\n * menuItems={menuItems}\n * currentPath={pathname}\n * onNavigate={(path) => router.push(path)}\n * />\n * ```\n */\nexport const GenericHeadingMenubar: React.FC<GenericHeadingMenubarProps> = ({\n\tmenuItems,\n\tclassName,\n\tchildren,\n\tdisabled,\n\tdefaultIsActive,\n\tcurrentPath = \"\",\n\tonNavigate,\n}) => {\n\t/**\n\t * Determina se um item do menu está ativo\n\t */\n\tconst isMenuItemActive = (menu: MenuItemConfig): boolean => {\n\t\t// Se o item tem uma função customizada, usa ela\n\t\tif (menu.isActive) {\n\t\t\treturn menu.isActive(currentPath);\n\t\t}\n\n\t\t// Se foi passada uma função padrão, usa ela\n\t\tif (defaultIsActive) {\n\t\t\treturn defaultIsActive(menu.value, currentPath);\n\t\t}\n\n\t\t// Fallback: compara o pathname com o path do menu\n\t\treturn currentPath === menu.path;\n\t};\n\n\t/**\n\t * Handler padrão de clique (navega para o path)\n\t */\n\tconst handleMenuClick = (menu: MenuItemConfig) => {\n\t\tif (menu.onClick) {\n\t\t\tmenu.onClick();\n\t\t} else if (onNavigate) {\n\t\t\tonNavigate(menu.path);\n\t\t}\n\t};\n\n\treturn (\n\t\t<div className={cn(\"flex flex-wrap items-center justify-between\", className)}>\n\t\t\t<Menubar>\n\t\t\t\t{menuItems.map((menu) => (\n\t\t\t\t\t<MenubarMenu key={menu.value}>\n\t\t\t\t\t\t<MenubarTrigger\n\t\t\t\t\t\t\tonClick={() => handleMenuClick(menu)}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex items-center gap-1 disabled:opacity-50 aria-disabled:opacity-50\",\n\t\t\t\t\t\t\t\tisMenuItemActive(menu) && \"bg-accent text-accent-foreground\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\taria-disabled={disabled}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{menu.label}\n\t\t\t\t\t\t</MenubarTrigger>\n\n\t\t\t\t\t\t{menu.subItems && (\n\t\t\t\t\t\t\t<MenubarContent>\n\t\t\t\t\t\t\t\t{menu.subItems.map((item) => (\n\t\t\t\t\t\t\t\t\t<MenubarItem key={item.label} onClick={item.onClick}>\n\t\t\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t\t\t</MenubarItem>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</MenubarContent>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</MenubarMenu>\n\t\t\t\t))}\n\t\t\t</Menubar>\n\t\t\t{children}\n\t\t</div>\n\t);\n};\n","\"use client\";\n\nimport React from \"react\";\nimport {\n\tTable,\n\tTableBody,\n\tTableCell,\n\tTableHead,\n\tTableHeader,\n\tTableRow,\n} from \"@/components/ui/table\";\n\nexport interface ColumnConfig<T> {\n\theader: string;\n\tcell: (item: T) => React.ReactNode;\n\tclassName?: string;\n}\n\nexport interface GenericTableProps<T> {\n\tdata: T[];\n\tcolumns: ColumnConfig<T>[];\n\trenderSeparator?: (index: number) => React.ReactNode;\n\temptyMessage?: string;\n\tclassName?: string;\n\tkeyExtractor?: (item: T, index: number) => string | number;\n}\n\nexport function GenericTable<T>({\n\tdata,\n\tcolumns,\n\trenderSeparator,\n\temptyMessage = \"Nenhum dado encontrado.\",\n\tclassName,\n\tkeyExtractor,\n}: GenericTableProps<T>) {\n\tif (!data || data.length === 0) {\n\t\treturn <div className=\"text-muted-foreground\">{emptyMessage}</div>;\n\t}\n\n\treturn (\n\t\t<div className={`rounded-md border ${className ?? \"\"}`}>\n\t\t\t<Table>\n\t\t\t\t<TableHeader>\n\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t{columns.map((col, index) => (\n\t\t\t\t\t\t\t<TableHead key={index.toString()}>{col.header}</TableHead>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</TableRow>\n\t\t\t\t</TableHeader>\n\t\t\t\t<TableBody>\n\t\t\t\t\t{data.map((item, index) => {\n\t\t\t\t\t\tconst rowKey = keyExtractor ? keyExtractor(item, index) : index;\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<React.Fragment key={rowKey}>\n\t\t\t\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t\t\t\t{columns.map((col, colIndex) => (\n\t\t\t\t\t\t\t\t\t\t<TableCell key={colIndex.toString()} className={col.className}>\n\t\t\t\t\t\t\t\t\t\t\t{col.cell(item)}\n\t\t\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t\t\t{renderSeparator?.(index)}\n\t\t\t\t\t\t\t</React.Fragment>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</TableBody>\n\t\t\t</Table>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { ScrollArea, ScrollBar } from \"@/components/ui/scroll-area\";\nimport { Tabs, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport { cn } from \"@/lib/utils\";\n\nexport type TabConfig = {\n\tvalue: string;\n\tlabel: string;\n\tpath?: string;\n\tmatch?: string;\n\tdisabled?: boolean;\n\tclassName?: string;\n};\n\nexport interface GenericTabsProps {\n\t/**\n\t * Array of tab configurations.\n\t */\n\ttabs: TabConfig[];\n\t/**\n\t * Disables all tabs if true.\n\t */\n\tisLoading?: boolean;\n\t/**\n\t * Custom class name for the container.\n\t */\n\tclassName?: string;\n\t/**\n\t * Current path string used for matching active tab.\n\t * Pass browser URL or current router path here to enable auto-highlighting.\n\t * Makes the component compatible with any router (Next.js, React Router, etc).\n\t */\n\tcurrentPath?: string;\n\t/**\n\t * Callback handler for navigation.\n\t * Called with the tab's path when a tab is clicked.\n\t * Use this to trigger your router's navigation (e.g. router.push, navigate(), etc).\n\t */\n\tonNavigate?: (path: string) => void;\n\t/**\n\t * Optional override for active tab value.\n\t * If provided, the component acts as controlled for the active state display.\n\t */\n\tvalue?: string;\n\t/**\n\t * Custom class name for all tab triggers.\n\t */\n\ttriggerClassName?: string;\n\t/**\n\t * If true, sets the tab width to fit content on small screens (sm:min-w-fit),\n\t * overriding the default fixed width.\n\t */\n\twidthCurrent?: boolean;\n}\n\nexport const GenericTabs: React.FC<GenericTabsProps> = ({\n\ttabs,\n\tisLoading = false,\n\tclassName,\n\tcurrentPath = \"\",\n\tonNavigate,\n\tvalue: controlledValue,\n\ttriggerClassName,\n\twidthCurrent,\n}) => {\n\tconst activeTab =\n\t\tcontrolledValue ??\n\t\ttabs\n\t\t\t.filter((t) => {\n\t\t\t\tconst matchString = t.match ?? t.path;\n\t\t\t\treturn matchString && currentPath.includes(matchString);\n\t\t\t})\n\t\t\t.sort((a, b) => {\n\t\t\t\tconst lenA = (a.match ?? a.path ?? \"\").length;\n\t\t\t\tconst lenB = (b.match ?? b.path ?? \"\").length;\n\t\t\t\treturn lenB - lenA;\n\t\t\t})[0]?.value ??\n\t\ttabs[0]?.value;\n\n\tconst handleNavigate = (tab: TabConfig) => {\n\t\tif (tab.disabled || isLoading) return;\n\n\t\tif (onNavigate && tab.path) {\n\t\t\tonNavigate(tab.path);\n\t\t}\n\t};\n\n\treturn (\n\t\t<Tabs value={activeTab} className={className}>\n\t\t\t<ScrollArea className=\"w-full\">\n\t\t\t\t<TabsList className=\"flex h-full w-full justify-start gap-2\">\n\t\t\t\t\t{tabs.map((tab) => (\n\t\t\t\t\t\t<TabsTrigger\n\t\t\t\t\t\t\tkey={tab.value}\n\t\t\t\t\t\t\tvalue={tab.value}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"min-w-fit sm:min-w-[180px] w-fit\",\n\t\t\t\t\t\t\t\ttriggerClassName,\n\t\t\t\t\t\t\t\twidthCurrent && \"sm:min-w-fit\",\n\t\t\t\t\t\t\t\ttab.className,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tdisabled={isLoading || tab.disabled}\n\t\t\t\t\t\t\tonClick={() => handleNavigate(tab)}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{tab.label}\n\t\t\t\t\t\t</TabsTrigger>\n\t\t\t\t\t))}\n\t\t\t\t</TabsList>\n\t\t\t\t<ScrollBar orientation=\"horizontal\" />\n\t\t\t</ScrollArea>\n\t\t</Tabs>\n\t);\n};\n","\"use client\";\n\nimport React from \"react\";\nimport {\n\tAccordion,\n\tAccordionContent,\n\tAccordionItem,\n\tAccordionTrigger,\n} from \"@/components/ui/accordion\";\nimport { cn } from \"@/lib/utils\";\n\ninterface HeaderProps {\n\ttitle: string;\n\tdescription: string;\n\tclassName?: string;\n\tclassNameDescription?: string;\n\tchildren?: React.ReactNode;\n\tdefaultValue?: string;\n\tdefaultOpen?: boolean;\n\tmenu?: React.ReactNode;\n}\n\nexport const Header: React.FC<HeaderProps> = ({\n\ttitle,\n\tdescription,\n\tclassName,\n\tclassNameDescription,\n\tchildren,\n\tdefaultValue = \"item-1\",\n\tdefaultOpen = false,\n\tmenu,\n}) => {\n\tconst [value, setValue] = React.useState<string>(defaultOpen ? defaultValue : \"\");\n\n\tconst isOpen = value === defaultValue;\n\n\treturn (\n\t\t<header className={cn(\"text-content-high max-w-5xl px-4 py-1 text-xl\", className)}>\n\t\t\t<Accordion\n\t\t\t\ttype=\"single\"\n\t\t\t\tcollapsible\n\t\t\t\tclassName=\"w-full\"\n\t\t\t\tvalue={value}\n\t\t\t\tonValueChange={setValue}\n\t\t\t>\n\t\t\t\t<AccordionItem className=\"border-b-0\" value={defaultValue}>\n\t\t\t\t\t<AccordionTrigger\n\t\t\t\t\t\ticonPosition=\"left\"\n\t\t\t\t\t\tclassName=\"justify-start gap-2 py-2 text-xl font-bold\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</AccordionTrigger>\n\t\t\t\t\t<AccordionContent className=\"text-content-medium text-base\">\n\t\t\t\t\t\t<p className={cn(\"text-content-medium text-base\", classNameDescription)}>\n\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t{isOpen && menu && <div className=\"my-4 text-foreground\">{menu}</div>}\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</AccordionContent>\n\t\t\t\t</AccordionItem>\n\t\t\t</Accordion>\n\t\t\t{!isOpen && menu && <div className=\"my-4\">{menu}</div>}\n\t\t</header>\n\t);\n};\n","\"use client\";\n\nimport React from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { Badge, type BadgeProps } from \"@/components/ui/badge\";\nimport { HoverCard, HoverCardContent, HoverCardTrigger } from \"@/components/ui/hover-card\";\n\ninterface HoverBadgeProps {\n\ttitle: string;\n\tdescription?: string;\n\tvariant: BadgeProps[\"variant\"];\n\tclassName?: string;\n\tshowTitleInDescription?: boolean;\n\tsubtle?: boolean;\n}\n\nexport const HoverBadge: React.FC<HoverBadgeProps> = ({\n\ttitle,\n\tdescription,\n\tvariant,\n\tclassName,\n\tshowTitleInDescription = true,\n\tsubtle = false,\n}) => {\n\treturn (\n\t\t<HoverCard>\n\t\t\t<HoverCardTrigger>\n\t\t\t\t<Badge variant={variant} subtle={subtle}>\n\t\t\t\t\t{title}\n\t\t\t\t</Badge>\n\t\t\t</HoverCardTrigger>\n\t\t\t{description && (\n\t\t\t\t<HoverCardContent className={`${twMerge(\"w-72 space-y-1\", className)}`}>\n\t\t\t\t\t{showTitleInDescription && <span className=\"text-sm font-semibold\">{title}</span>}\n\t\t\t\t\t<p className=\"w-full text-sm text-wrap break-words whitespace-pre-line\">{description}</p>\n\t\t\t\t</HoverCardContent>\n\t\t\t)}\n\t\t</HoverCard>\n\t);\n};\n","\"use client\";\n\nimport { X } from \"lucide-react\";\nimport React from \"react\";\nimport { Button } from \"@/components/ui/button\";\n\ninterface RuleFilterBuilderProps {\n\t// biome-ignore lint/suspicious/noExplicitAny: <any>\n\tfields: any[];\n\tonRemove: (index: number) => void;\n\tonAdd: () => void;\n\tmaxBlocks?: number;\n\tisPending?: boolean;\n\tinstructionContent?: React.ReactNode;\n\trenderConnector?: (index: number) => React.ReactNode;\n\trenderItem: (index: number) => React.ReactNode;\n}\n\nexport function RuleFilterBuilder({\n\tfields,\n\tonRemove,\n\tonAdd,\n\tmaxBlocks = 3,\n\tisPending = false,\n\tinstructionContent,\n\trenderConnector,\n\trenderItem,\n}: RuleFilterBuilderProps) {\n\t// Ensure at least one block exists\n\tReact.useEffect(() => {\n\t\tif (fields.length === 0) {\n\t\t\tonAdd();\n\t\t}\n\t}, [fields.length, onAdd]);\n\n\treturn (\n\t\t<div className=\"space-y-6\">\n\t\t\t{instructionContent && (\n\t\t\t\t<div className=\"bg-muted/50 p-4 rounded-md border text-sm text-muted-foreground mb-4\">\n\t\t\t\t\t{instructionContent}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{fields.map((fieldItem, index) => (\n\t\t\t\t<div key={fieldItem.id} className=\"relative\">\n\t\t\t\t\t{/* Operator Between Blocks */}\n\t\t\t\t\t{index > 0 && (\n\t\t\t\t\t\t<div className=\"relative py-4 flex items-center justify-center\">\n\t\t\t\t\t\t\t<div className=\"absolute inset-0 flex items-center\">\n\t\t\t\t\t\t\t\t<span className=\"w-full border-t border-border\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div className=\"relative bg-background px-4\">\n\t\t\t\t\t\t\t\t{renderConnector ? renderConnector(index) : null}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Filter Block */}\n\t\t\t\t\t<div className=\"border rounded-lg bg-card text-card-foreground shadow-sm overflow-hidden\">\n\t\t\t\t\t\t<div className=\"bg-muted/30 px-4 py-3 border-b flex items-center justify-between\">\n\t\t\t\t\t\t\t<div className=\"font-semibold text-sm flex items-center gap-2\">\n\t\t\t\t\t\t\t\t<span className=\"bg-primary/10 text-primary w-6 h-6 flex items-center justify-center rounded-full text-xs\">\n\t\t\t\t\t\t\t\t\t{index + 1}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\tBloco de Seleção {index + 1}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{index > 0 && (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\tonClick={() => onRemove(index)}\n\t\t\t\t\t\t\t\t\tclassName=\"hover:bg-destructive hover:text-destructive-foreground h-8 w-8 p-0\"\n\t\t\t\t\t\t\t\t\tdisabled={isPending}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<X className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div className=\"p-4 grid grid-cols-1 md:grid-cols-2 gap-4\">{renderItem(index)}</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t))}\n\n\t\t\t{fields.length < maxBlocks && (\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tclassName=\"w-full border-dashed\"\n\t\t\t\t\tonClick={onAdd}\n\t\t\t\t\tdisabled={isPending}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t<span className=\"font-semibold text-lg\">+</span>\n\t\t\t\t\t\tAdicionar Bloco de Seleção (Restam {maxBlocks - fields.length})\n\t\t\t\t\t</div>\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\";\nimport React from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { cn } from \"@/lib/utils\";\n\ninterface StepNavigatorProps {\n\t/** Índice atual do passo */\n\tcurrentIndex: number;\n\t/** Total de passos */\n\ttotalSteps: number;\n\t/** Ação ao clicar em \"Anterior\" */\n\tonPrev: () => void;\n\t/** Ação ao clicar em \"Próximo\" */\n\tonNext: () => void;\n\t/** Desabilita os botões (ex: loading) */\n\tdisabled?: boolean;\n\t/** Personalização opcional dos rótulos */\n\tprevLabel?: string;\n\tnextLabel?: string;\n\t/** Controla se deve ocultar os botões ao chegar nas extremidades */\n\thideEdgeButtons?: boolean;\n\tclassName?: string;\n}\n\nexport const StepNavigator: React.FC<StepNavigatorProps> = ({\n\tcurrentIndex,\n\ttotalSteps,\n\tonPrev,\n\tonNext,\n\tdisabled = false,\n\tprevLabel = \"Anterior\",\n\tnextLabel = \"Próximo\",\n\thideEdgeButtons = true,\n\tclassName,\n}) => {\n\tconst isFirst = currentIndex === 0;\n\tconst isLast = currentIndex === totalSteps - 1;\n\n\treturn (\n\t\t<div className={cn(\"flex items-center gap-2\", className)}>\n\t\t\t{(!hideEdgeButtons || !isFirst) && (\n\t\t\t\t<Button type=\"button\" variant=\"secondary\" onClick={onPrev} disabled={disabled || isFirst}>\n\t\t\t\t\t<ChevronLeftIcon className=\"size-4\" />\n\t\t\t\t\t{prevLabel}\n\t\t\t\t</Button>\n\t\t\t)}\n\n\t\t\t{(!hideEdgeButtons || !isLast) && (\n\t\t\t\t<Button type=\"button\" variant=\"secondary\" onClick={onNext} disabled={disabled || isLast}>\n\t\t\t\t\t{nextLabel}\n\t\t\t\t\t<ChevronRightIcon className=\"size-4\" />\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n","import React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\ninterface TextWrapProps extends React.HTMLAttributes<HTMLDivElement> {\n\tchildren: React.ReactNode;\n}\n\nexport const TextWrap: React.FC<TextWrapProps> = ({ children, className, ...props }) => {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"line-clamp-4 w-full max-w-60 min-w-60 text-wrap break-words 2xl:max-w-[80%]\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n};\n"],"names":["AutoComplete","value","onChange","placeholder","searchPlaceholder","open","onOpenChange","disabled","messageEmpty","fetchOptions","getOptionLabel","getOptionKey","onSelect","className","options","setOptions","React","useState","loading","setLoading","searchTerm","setSearchTerm","sortedOptions","useMemo","sort","a","b","localeCompare","debouncedFetch","useDebouncedCallback","term","result","err","console","error","handleInputChange","val","trim","handleSelect","option","Popover","PopoverTrigger","asChild","Button","variant","cn","aria-expanded","span","ChevronsUpDown","PopoverContent","side","align","Command","CommandInput","onValueChange","CommandEmpty","CommandList","CommandGroup","map","item","label","key","CommandItem","CheckIcon","BadgeListLimited","items","maxVisible","subtle","tooltipItems","visibleItems","slice","remainingCount","length","hasMore","hiddenItems","itemsToShowInTooltip","div","Badge","TooltipProvider","Tooltip","TooltipTrigger","TooltipContent","tooltipItem","isWeekend","date","day","toDate","in","getDay","normalizeDate","format","CalendarPopover","setDate","id","buttonProps","popoverProps","popoverContentClassName","isLoading","disabledDates","isLoadingTable","props","validDate","tryParseDate","undefined","LoaderCircleIcon","CalendarDaysIcon","locale","ptBR","Calendar","autoFocus","captionLayout","selected","numberOfMonths","fromYear","toYear","currentDate","normalizedCurrentDate","isHoliday","has","isWeekendDay","isFutureDate","Date","defaultMonth","mode","CollapsibleHelp","children","content","title","setOpen","Alert","Info","AlertTitle","size","type","onClick","e","stopPropagation","X","AlertDescription","ConfirmSave","onSave","dialogTitle","dialogDescription","actionTitle","rows","actionVariant","Dialog","DialogTrigger","DialogContent","DialogHeader","DialogTitle","DialogDescription","data-confirm-save-scrollable","row","index","Array","isArray","badge","ListItem","DialogFooter","isAction","GenericHeadingMenubar","menuItems","defaultIsActive","currentPath","onNavigate","isMenuItemActive","menu","isActive","path","handleMenuClick","Menubar","MenubarMenu","MenubarTrigger","aria-disabled","subItems","MenubarContent","MenubarItem","GenericTable","data","columns","renderSeparator","emptyMessage","keyExtractor","Table","TableHeader","TableRow","col","TableHead","toString","header","TableBody","rowKey","Fragment","colIndex","TableCell","cell","GenericTabs","tabs","controlledValue","triggerClassName","widthCurrent","activeTab","filter","t","matchString","match","includes","lenA","lenB","handleNavigate","tab","Tabs","ScrollArea","TabsList","TabsTrigger","ScrollBar","orientation","Header","description","classNameDescription","defaultValue","defaultOpen","setValue","isOpen","Accordion","collapsible","AccordionItem","AccordionTrigger","iconPosition","AccordionContent","p","HoverBadge","showTitleInDescription","HoverCard","HoverCardTrigger","HoverCardContent","twMerge","RuleFilterBuilder","fields","onRemove","onAdd","maxBlocks","isPending","instructionContent","renderConnector","renderItem","useEffect","fieldItem","StepNavigator","currentIndex","totalSteps","onPrev","onNext","prevLabel","nextLabel","hideEdgeButtons","isFirst","isLast","ChevronLeftIcon","ChevronRightIcon","TextWrap"],"mappings":"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