@sbkbs/ui 1.0.5 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"oficios-ui.umd.cjs","sources":["../src/utils/cn.ts","../src/components/Accordion/Accordion.tsx","../src/components/Breadcrumb/Breadcrumb.tsx","../src/components/Combobox/Combobox.tsx","../src/components/FileUpload/FileUpload.tsx","../src/components/NumberInput/NumberInput.tsx","../src/components/Stepper/Stepper.tsx","../src/components/Button/Button.tsx","../src/components/Alert/Alert.tsx","../src/components/Badge/Badge.tsx","../src/components/Card/Card.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Chip/Chip.tsx","../src/components/Divider/Divider.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/Footer/Footer.tsx","../src/components/Header/Header.tsx","../src/components/Input/Input.tsx","../src/components/Layout/Layout.tsx","../src/components/Modal/Modal.tsx","../src/components/Navigation/Navigation.tsx","../src/components/Pagination/Pagination.tsx","../src/components/Paragraph/Paragraph.tsx","../src/components/PageHeader/PageHeader.tsx","../src/components/Popover/Popover.tsx","../src/components/Radio/Radio.tsx","../src/components/SectionHeader/SectionHeader.tsx","../src/components/Select/Select.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Subtitle/Subtitle.tsx","../src/components/Switch/Switch.tsx","../src/components/Tag/Tag.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Table/Table.tsx","../src/components/Textarea/Textarea.tsx","../src/components/Toast/Toast.tsx","../src/components/Title/Title.tsx","../src/components/Tooltip/Tooltip.tsx","../src/theme/ThemeProvider.tsx"],"sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Utilitário de composição de classes Tailwind.\n * Usa clsx para lógica condicional e tailwind-merge para resolver\n * conflitos de classes (ex.: bg-red-500 + bg-blue-500 → bg-blue-500).\n */\nexport const cn = (...inputs: ClassValue[]) => twMerge(clsx(inputs));\n","import type React from 'react';\nimport { useRef, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface AccordionItem {\n content: React.ReactNode;\n id: string;\n title: React.ReactNode;\n}\n\nexport interface AccordionProps {\n defaultOpenId?: string;\n items: AccordionItem[];\n}\n\nexport const Accordion: React.FC<AccordionProps> = ({ items, defaultOpenId }) => {\n const [openId, setOpenId] = useState<string | null>(defaultOpenId ?? null);\n const rootRef = useRef<HTMLDivElement | null>(null);\n\n return (\n <div className=\"grid gap-2\" ref={rootRef}>\n {items.map((item) => {\n const isOpen = openId === item.id;\n const triggerId = `accordion-trigger-${item.id}`;\n const panelId = `accordion-panel-${item.id}`;\n return (\n <div\n className=\"overflow-hidden rounded-[var(--border-radius-md)] border border-[var(--border-color)]\"\n key={item.id}\n >\n <button\n aria-controls={panelId}\n aria-expanded={isOpen}\n className=\"flex w-full items-center justify-between bg-[var(--bg-secondary)] px-4 py-3 text-left text-sm font-medium text-[var(--text-primary)] hover:bg-[var(--bg-hover)]\"\n id={triggerId}\n onKeyDown={(event) => {\n if (!rootRef.current) {\n return;\n }\n const buttons = Array.from(\n rootRef.current.querySelectorAll<HTMLButtonElement>('[id^=\"accordion-trigger-\"]'),\n );\n const currentIndex = buttons.findIndex((btn) => btn.id === triggerId);\n if (currentIndex === -1 || buttons.length === 0) {\n return;\n }\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n buttons[(currentIndex + 1) % buttons.length]?.focus();\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n buttons[(currentIndex - 1 + buttons.length) % buttons.length]?.focus();\n } else if (event.key === 'Home') {\n event.preventDefault();\n buttons[0]?.focus();\n } else if (event.key === 'End') {\n event.preventDefault();\n buttons[buttons.length - 1]?.focus();\n }\n }}\n onClick={() => setOpenId((prev) => (prev === item.id ? null : item.id))}\n type=\"button\"\n >\n {item.title}\n <span className={cn('transition', isOpen ? 'rotate-180' : '')}>⌄</span>\n </button>\n {isOpen && (\n <div\n aria-labelledby={triggerId}\n className=\"bg-[var(--bg-tertiary)] px-4 py-3 text-sm text-[var(--text-secondary)]\"\n id={panelId}\n role=\"region\"\n >\n {item.content}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n};\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface BreadcrumbItem {\n href?: string;\n label: React.ReactNode;\n}\n\nexport interface BreadcrumbProps extends React.HTMLAttributes<HTMLElement> {\n items: BreadcrumbItem[];\n separator?: React.ReactNode;\n}\n\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({\n items,\n separator = '/',\n className,\n ...props\n}) => {\n return (\n <nav aria-label=\"Breadcrumb\" className={cn('flex items-center', className)} {...props}>\n <ol className=\"flex flex-wrap items-center gap-1 text-sm\">\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n return (\n <li key={index} className=\"flex items-center gap-1\">\n {index > 0 && (\n <span aria-hidden=\"true\" className=\"select-none text-[var(--text-muted)]\">\n {separator}\n </span>\n )}\n {isLast ? (\n <span aria-current=\"page\" className=\"font-medium text-[var(--text-primary)]\">\n {item.label}\n </span>\n ) : item.href ? (\n <a\n className=\"text-[var(--md-primary)] transition hover:underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--border-color-focus)]\"\n href={item.href}\n >\n {item.label}\n </a>\n ) : (\n <span className=\"text-[var(--text-secondary)]\">{item.label}</span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n};\n\nBreadcrumb.displayName = 'Breadcrumb';\n","import React, { useEffect, useRef, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ComboboxOption {\n label: string;\n value: string;\n}\n\nexport interface ComboboxProps {\n className?: string;\n disabled?: boolean;\n error?: string;\n helperText?: string;\n label?: string;\n onChange?: (value: string) => void;\n options: ComboboxOption[];\n placeholder?: string;\n value?: string;\n}\n\nexport const Combobox: React.FC<ComboboxProps> = ({\n label,\n helperText,\n error,\n options,\n value,\n onChange,\n placeholder = 'Selecione ou pesquise...',\n disabled = false,\n className,\n}) => {\n const [query, setQuery] = useState('');\n const [isOpen, setIsOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLUListElement>(null);\n\n const selectedOption = options.find((o) => o.value === value);\n\n const filtered = query\n ? options.filter((o) => o.label.toLowerCase().includes(query.toLowerCase()))\n : options;\n\n const displayValue = isOpen ? query : (selectedOption?.label ?? '');\n\n // Fechar ao clicar fora\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setIsOpen(false);\n setQuery('');\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const handleSelect = (option: ComboboxOption) => {\n onChange?.(option.value);\n setQuery('');\n setIsOpen(false);\n inputRef.current?.blur();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!isOpen) {\n if (e.key === 'ArrowDown' || e.key === 'Enter') {\n setIsOpen(true);\n setActiveIndex(0);\n e.preventDefault();\n }\n return;\n }\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setActiveIndex((i) => Math.min(i + 1, filtered.length - 1));\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n setActiveIndex((i) => Math.max(i - 1, 0));\n } else if (e.key === 'Enter') {\n e.preventDefault();\n if (activeIndex >= 0 && filtered[activeIndex]) {\n handleSelect(filtered[activeIndex]);\n }\n } else if (e.key === 'Escape') {\n setIsOpen(false);\n setQuery('');\n }\n };\n\n const inputId = `combobox-${Math.random().toString(36).slice(2, 9)}`;\n const listId = `${inputId}-list`;\n\n return (\n <div className={cn('flex flex-col gap-[var(--spacing-xs)]', className)} ref={containerRef}>\n {label && (\n <label\n className=\"text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]\"\n htmlFor={inputId}\n >\n {label}\n </label>\n )}\n <div className=\"relative\">\n <input\n ref={inputRef}\n aria-activedescendant={activeIndex >= 0 ? `${inputId}-option-${activeIndex}` : undefined}\n aria-autocomplete=\"list\"\n aria-controls={listId}\n aria-describedby={\n error ? `${inputId}-error` : helperText ? `${inputId}-helper` : undefined\n }\n aria-expanded={isOpen}\n aria-invalid={error ? true : undefined}\n autoComplete=\"off\"\n className={cn(\n 'w-full rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] px-3.5 py-2 text-[var(--font-size-base)] text-[var(--md-on-surface)] outline-none transition placeholder:text-[var(--md-on-surface-variant)] placeholder:opacity-70 focus:border-[var(--border-color-focus)] focus:[box-shadow:0_0_0_0.1875rem_rgba(47,93,140,0.15)] disabled:cursor-not-allowed disabled:opacity-60',\n error && 'border-[var(--md-error)]',\n )}\n disabled={disabled}\n id={inputId}\n placeholder={placeholder}\n role=\"combobox\"\n type=\"text\"\n value={displayValue}\n onChange={(e) => {\n setQuery(e.target.value);\n setIsOpen(true);\n setActiveIndex(0);\n }}\n onFocus={() => setIsOpen(true)}\n onKeyDown={handleKeyDown}\n />\n {/* Chevron */}\n <span\n aria-hidden=\"true\"\n className={cn(\n 'pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 text-[var(--text-muted)] transition',\n isOpen && 'rotate-180',\n )}\n >\n <svg\n className=\"h-4 w-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"m6 9 6 6 6-6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </span>\n\n {/* Dropdown */}\n {isOpen && filtered.length > 0 && (\n <ul\n ref={listRef}\n className=\"absolute z-[var(--z-index-dropdown)] mt-1 max-h-60 w-full overflow-auto rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] py-1 shadow-[var(--shadow-md)]\"\n id={listId}\n role=\"listbox\"\n >\n {filtered.map((option, index) => (\n <li\n aria-selected={option.value === value}\n className={cn(\n 'cursor-pointer px-3.5 py-2 text-sm transition',\n index === activeIndex\n ? 'bg-[var(--md-primary)] text-[var(--md-on-primary)]'\n : option.value === value\n ? 'bg-[var(--bg-tertiary)] text-[var(--text-primary)]'\n : 'text-[var(--text-primary)] hover:bg-[var(--bg-hover)]',\n )}\n id={`${inputId}-option-${index}`}\n key={option.value}\n role=\"option\"\n onMouseDown={(e) => {\n e.preventDefault();\n handleSelect(option);\n }}\n onMouseEnter={() => setActiveIndex(index)}\n >\n {option.label}\n </li>\n ))}\n </ul>\n )}\n {isOpen && filtered.length === 0 && (\n <div className=\"absolute z-[var(--z-index-dropdown)] mt-1 w-full rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] px-3.5 py-3 text-sm text-[var(--text-muted)] shadow-[var(--shadow-md)]\">\n Nenhum resultado encontrado.\n </div>\n )}\n </div>\n {error && (\n <span\n className=\"text-[var(--font-size-xs)] text-[var(--md-error)]\"\n id={`${inputId}-error`}\n role=\"alert\"\n >\n {error}\n </span>\n )}\n {helperText && !error && (\n <span\n className=\"text-[var(--font-size-xs)] text-[var(--md-on-surface-variant)]\"\n id={`${inputId}-helper`}\n >\n {helperText}\n </span>\n )}\n </div>\n );\n};\n\nCombobox.displayName = 'Combobox';\n","import React, { useRef, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface FileUploadProps {\n accept?: string;\n className?: string;\n disabled?: boolean;\n error?: string;\n helperText?: string;\n label?: string;\n maxSizeBytes?: number;\n multiple?: boolean;\n onChange?: (files: File[]) => void;\n}\n\nexport const FileUpload: React.FC<FileUploadProps> = ({\n label,\n helperText,\n error,\n accept,\n multiple = false,\n maxSizeBytes,\n disabled = false,\n onChange,\n className,\n}) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [isDragging, setIsDragging] = useState(false);\n const [sizeError, setSizeError] = useState<string | null>(null);\n\n const handleFiles = (fileList: FileList | null) => {\n if (!fileList) return;\n const files = Array.from(fileList);\n\n if (maxSizeBytes) {\n const oversized = files.find((f) => f.size > maxSizeBytes);\n if (oversized) {\n const mb = (maxSizeBytes / 1024 / 1024).toFixed(0);\n setSizeError(`Arquivo \"${oversized.name}\" excede o tamanho máximo de ${mb} MB.`);\n return;\n }\n }\n\n setSizeError(null);\n onChange?.(files);\n };\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n if (!disabled) setIsDragging(true);\n };\n\n const handleDragLeave = () => setIsDragging(false);\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n setIsDragging(false);\n if (!disabled) handleFiles(e.dataTransfer.files);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n inputRef.current?.click();\n }\n };\n\n const displayError = error ?? sizeError;\n\n return (\n <div className={cn('flex flex-col gap-[var(--spacing-xs)]', className)}>\n {label && (\n <span className=\"text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]\">\n {label}\n </span>\n )}\n <div\n aria-disabled={disabled}\n className={cn(\n 'flex cursor-pointer flex-col items-center justify-center gap-2 rounded-[var(--border-radius-lg)] border-2 border-dashed p-8 text-center transition',\n isDragging\n ? 'border-[var(--md-primary)] bg-[var(--md-primary-container)]'\n : 'border-[var(--md-outline-variant)] hover:border-[var(--md-primary)] hover:bg-[var(--bg-tertiary)]',\n displayError && 'border-[var(--md-error)]',\n disabled && 'pointer-events-none cursor-not-allowed opacity-60',\n )}\n onClick={() => !disabled && inputRef.current?.click()}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n >\n {/* Upload icon */}\n <svg\n className=\"h-8 w-8 text-[var(--md-primary)]\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5m-13.5-9L12 3m0 0 4.5 4.5M12 3v13.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <div>\n <p className=\"text-sm font-medium text-[var(--text-primary)]\">\n Arraste arquivos aqui ou{' '}\n <span className=\"text-[var(--md-primary)] underline\">clique para selecionar</span>\n </p>\n {accept && (\n <p className=\"mt-0.5 text-xs text-[var(--text-muted)]\">Formatos aceitos: {accept}</p>\n )}\n {maxSizeBytes && (\n <p className=\"text-xs text-[var(--text-muted)]\">\n Tamanho máximo: {(maxSizeBytes / 1024 / 1024).toFixed(0)} MB\n </p>\n )}\n </div>\n </div>\n <input\n ref={inputRef}\n accept={accept}\n className=\"sr-only\"\n disabled={disabled}\n multiple={multiple}\n tabIndex={-1}\n type=\"file\"\n onChange={(e) => handleFiles(e.target.files)}\n />\n {displayError && (\n <span className=\"text-[var(--font-size-xs)] text-[var(--md-error)]\" role=\"alert\">\n {displayError}\n </span>\n )}\n {helperText && !displayError && (\n <span className=\"text-[var(--font-size-xs)] text-[var(--md-on-surface-variant)]\">\n {helperText}\n </span>\n )}\n </div>\n );\n};\n\nFileUpload.displayName = 'FileUpload';\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface NumberInputProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'size' | 'onChange'\n> {\n error?: string;\n helperText?: string;\n label?: string;\n max?: number;\n min?: number;\n onChange?: (value: number | null) => void;\n size?: 'sm' | 'md' | 'lg';\n step?: number;\n}\n\nexport const NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n label,\n error,\n helperText,\n size = 'md',\n min,\n max,\n step = 1,\n onChange,\n className,\n id,\n value,\n defaultValue,\n disabled,\n ...props\n },\n ref,\n ) => {\n const inputId = id || `number-input-${Math.random().toString(36).slice(2, 9)}`;\n const hasError = !!error;\n\n const sizeClassMap = {\n sm: 'min-h-8 text-[var(--font-size-sm)]',\n md: 'min-h-10 text-[var(--font-size-base)]',\n lg: 'min-h-12 text-[var(--font-size-lg)]',\n };\n\n const buttonSizeMap = {\n sm: 'h-8 w-7 text-sm',\n md: 'h-10 w-8 text-base',\n lg: 'h-12 w-9 text-lg',\n };\n\n const numValue = value !== undefined ? Number(value) : undefined;\n\n const handleDecrement = () => {\n const current = numValue ?? (defaultValue !== undefined ? Number(defaultValue) : 0);\n const next = current - step;\n if (min === undefined || next >= min) {\n onChange?.(next);\n }\n };\n\n const handleIncrement = () => {\n const current = numValue ?? (defaultValue !== undefined ? Number(defaultValue) : 0);\n const next = current + step;\n if (max === undefined || next <= max) {\n onChange?.(next);\n }\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value;\n onChange?.(raw === '' ? null : Number(raw));\n };\n\n return (\n <div className=\"flex flex-col gap-[var(--spacing-xs)]\">\n {label && (\n <label\n className=\"text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]\"\n htmlFor={inputId}\n >\n {label}\n </label>\n )}\n <div\n className={cn(\n 'inline-flex overflow-hidden rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] transition focus-within:border-[var(--border-color-focus)] focus-within:[box-shadow:0_0_0_0.1875rem_rgba(47,93,140,0.15)]',\n hasError && 'border-[var(--md-error)] focus-within:border-[var(--md-error)]',\n disabled && 'cursor-not-allowed opacity-60',\n )}\n >\n <button\n aria-label=\"Diminuir\"\n className={cn(\n 'flex shrink-0 items-center justify-center border-r border-[var(--md-outline-variant)] bg-[var(--bg-tertiary)] text-[var(--text-secondary)] transition hover:bg-[var(--bg-hover)] hover:text-[var(--text-primary)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--border-color-focus)]',\n buttonSizeMap[size],\n )}\n disabled={disabled || (min !== undefined && (numValue ?? 0) <= min)}\n onClick={handleDecrement}\n type=\"button\"\n >\n −\n </button>\n <input\n ref={ref}\n aria-describedby={\n error ? `${inputId}-error` : helperText ? `${inputId}-helper` : undefined\n }\n aria-invalid={hasError ? true : undefined}\n className={cn(\n 'w-full min-w-0 bg-transparent px-3 text-center text-[var(--md-on-surface)] outline-none',\n sizeClassMap[size],\n className,\n )}\n defaultValue={defaultValue}\n disabled={disabled}\n id={inputId}\n max={max}\n min={min}\n step={step}\n type=\"number\"\n value={value}\n onChange={handleChange}\n {...props}\n />\n <button\n aria-label=\"Aumentar\"\n className={cn(\n 'flex shrink-0 items-center justify-center border-l border-[var(--md-outline-variant)] bg-[var(--bg-tertiary)] text-[var(--text-secondary)] transition hover:bg-[var(--bg-hover)] hover:text-[var(--text-primary)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--border-color-focus)]',\n buttonSizeMap[size],\n )}\n disabled={disabled || (max !== undefined && (numValue ?? 0) >= max)}\n onClick={handleIncrement}\n type=\"button\"\n >\n +\n </button>\n </div>\n {error && (\n <span\n className=\"text-[var(--font-size-xs)] text-[var(--md-error)]\"\n id={`${inputId}-error`}\n role=\"alert\"\n >\n {error}\n </span>\n )}\n {helperText && !error && (\n <span\n className=\"text-[var(--font-size-xs)] text-[var(--md-on-surface-variant)]\"\n id={`${inputId}-helper`}\n >\n {helperText}\n </span>\n )}\n </div>\n );\n },\n);\n\nNumberInput.displayName = 'NumberInput';\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface StepperItem {\n description?: string;\n id: string;\n label: string;\n}\n\nexport type StepStatus = 'completed' | 'active' | 'pending';\n\nexport interface StepperProps extends React.HTMLAttributes<HTMLDivElement> {\n currentStep: string;\n items: StepperItem[];\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport const Stepper: React.FC<StepperProps> = ({\n items,\n currentStep,\n orientation = 'horizontal',\n className,\n ...props\n}) => {\n const currentIndex = items.findIndex((item) => item.id === currentStep);\n\n const getStatus = (index: number): StepStatus => {\n if (index < currentIndex) return 'completed';\n if (index === currentIndex) return 'active';\n return 'pending';\n };\n\n const isHorizontal = orientation === 'horizontal';\n\n return (\n <div\n aria-label=\"Progresso\"\n className={cn(isHorizontal ? 'flex items-start' : 'flex flex-col', className)}\n role=\"list\"\n {...props}\n >\n {items.map((item, index) => {\n const status = getStatus(index);\n const isLast = index === items.length - 1;\n\n return (\n <div\n key={item.id}\n className={cn('flex', isHorizontal ? 'flex-1 flex-col items-center' : 'gap-4')}\n role=\"listitem\"\n >\n {/* Step indicator + connector */}\n <div\n className={cn(\n isHorizontal ? 'flex w-full items-center' : 'flex flex-col items-center',\n )}\n >\n {/* Circle */}\n <div\n aria-current={status === 'active' ? 'step' : undefined}\n className={cn(\n 'relative z-10 flex h-9 w-9 shrink-0 items-center justify-center rounded-full border-2 text-sm font-semibold transition',\n status === 'completed' &&\n 'border-[var(--md-primary)] bg-[var(--md-primary)] text-[var(--md-on-primary)]',\n status === 'active' &&\n 'border-[var(--md-primary)] bg-[var(--md-surface)] text-[var(--md-primary)]',\n status === 'pending' &&\n 'border-[var(--md-outline-variant)] bg-[var(--md-surface)] text-[var(--text-muted)]',\n )}\n >\n {status === 'completed' ? (\n <svg\n className=\"h-4 w-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M20 6 9 17l-5-5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n ) : (\n index + 1\n )}\n </div>\n\n {/* Connector line */}\n {!isLast && (\n <div\n className={cn(\n 'transition',\n isHorizontal ? 'h-0.5 flex-1' : 'my-1 ml-[1.0625rem] w-0.5 flex-1',\n index < currentIndex\n ? 'bg-[var(--md-primary)]'\n : 'bg-[var(--md-outline-variant)]',\n )}\n aria-hidden=\"true\"\n />\n )}\n </div>\n\n {/* Label + description */}\n <div className={cn('mt-2 text-center', isHorizontal ? '' : 'mt-0 pb-6 text-left')}>\n <p\n className={cn(\n 'text-sm font-medium leading-tight',\n status === 'active' && 'text-[var(--md-primary)]',\n status === 'completed' && 'text-[var(--text-primary)]',\n status === 'pending' && 'text-[var(--text-muted)]',\n )}\n >\n {item.label}\n </p>\n {item.description && (\n <p className=\"mt-0.5 text-xs text-[var(--text-muted)]\">{item.description}</p>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n\nStepper.displayName = 'Stepper';\n","import type React from 'react';\nimport type { CSSProperties } from 'react';\nimport { cn } from '../../utils/cn';\n\n/** Paletas do guia de marca (só afeta variant primary). Use para escolher o modelo de cor do botão. */\nexport type ButtonPalette =\n | 'verde-vibrante'\n | 'verde-profundo'\n | 'grafite-azulado'\n | 'azul-acinzentado'\n | 'cinza-medio'\n | 'cinza-escuro'\n | 'off-white';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n children: React.ReactNode;\n compact?: boolean;\n fullWidth?: boolean;\n isLoading?: boolean;\n leftIcon?: React.ReactNode;\n /** Paleta de cor do guia de marca (aplica-se ao primary). Ignorado em outros variants. */\n palette?: ButtonPalette;\n rightIcon?: React.ReactNode;\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n variant?:\n | 'primary'\n | 'secondary'\n | 'success'\n | 'error'\n | 'warning'\n | 'info'\n | 'neutral'\n | 'ghost';\n}\n\nexport const Button: React.FC<ButtonProps> = ({\n variant = 'primary',\n size = 'md',\n compact = false,\n fullWidth = false,\n isLoading = false,\n leftIcon,\n rightIcon,\n children,\n className = '',\n disabled,\n palette,\n style,\n ...props\n}) => {\n const baseClass =\n 'relative inline-flex select-none items-center justify-center overflow-hidden whitespace-nowrap rounded-[var(--border-radius-md)] border border-transparent font-semibold leading-none tracking-[0.01em] transition-[all_var(--transition-base)]';\n const focusClass =\n 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--md-primary)]';\n const disabledClass =\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-60';\n const fullWidthClass = fullWidth ? 'w-full' : '';\n const offWhiteBorderClass =\n palette === 'off-white' && variant === 'primary' ? 'border-[var(--border-color)]' : '';\n\n const sizeClassMap: Record<NonNullable<ButtonProps['size']>, string> = {\n xs: compact\n ? 'min-h-[1.75rem] min-w-[1.75rem] gap-1 px-2 py-1 text-[var(--font-size-xs)]'\n : 'min-h-8 min-w-8 gap-1.5 px-3 py-1.5 text-[var(--font-size-xs)]',\n sm: compact\n ? 'min-h-8 min-w-8 gap-[0.3125rem] px-2.5 py-1.5 text-[var(--font-size-sm)]'\n : 'min-h-9 min-w-9 gap-[0.4375rem] px-3.5 py-2 text-[var(--font-size-sm)]',\n md: compact\n ? 'min-h-[2.375rem] min-w-[2.375rem] gap-1.5 px-3 py-2 text-[var(--font-size-base)]'\n : 'min-h-11 min-w-11 gap-2 px-4 py-2.5 text-[var(--font-size-base)]',\n lg: compact\n ? 'min-h-[2.625rem] min-w-[2.625rem] gap-[0.4375rem] px-3.5 py-[0.5625rem] text-[var(--font-size-lg)]'\n : 'min-h-12 min-w-12 gap-[0.5625rem] px-6 py-4 text-[var(--font-size-lg)]',\n xl: compact\n ? 'min-h-12 min-w-12 gap-2 px-4 py-3 text-[var(--font-size-xl)]'\n : 'min-h-14 min-w-14 gap-2.5 px-8 py-6 text-[var(--font-size-xl)]',\n };\n\n const variantClassMap: Record<NonNullable<ButtonProps['variant']>, string> = {\n primary:\n 'bg-[var(--md-primary)] text-[var(--md-on-primary)] shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--primary-color-hover)] hover:shadow-[var(--shadow-md)]',\n secondary:\n 'bg-[var(--md-secondary)] text-[var(--md-on-secondary)] shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--secondary-color-light)] hover:shadow-[var(--shadow-md)]',\n success:\n 'bg-[var(--success-color)] text-white shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--success-color-light)] hover:shadow-[var(--shadow-md)]',\n error:\n 'bg-[var(--md-error)] text-[var(--md-on-error)] shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--error-color-light)] hover:shadow-[var(--shadow-md)]',\n warning:\n 'bg-[var(--warning-color)] text-white shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--warning-color-light)] hover:shadow-[var(--shadow-md)]',\n info: 'bg-[var(--info-color)] text-white shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--info-color-light)] hover:shadow-[var(--shadow-md)]',\n neutral:\n 'bg-[var(--neutral-color)] text-white shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--neutral-color-light)] hover:shadow-[var(--shadow-md)]',\n ghost:\n 'border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--md-on-surface)] shadow-[var(--shadow-xs)] hover:bg-[var(--bg-hover)] hover:text-[var(--md-primary)] hover:border-[var(--border-color-hover)]',\n };\n\n const iconSizeClassMap: Record<NonNullable<ButtonProps['size']>, string> = {\n xs: compact ? 'h-3 w-3' : 'h-3.5 w-3.5',\n sm: compact ? 'h-3.5 w-3.5' : 'h-4 w-4',\n md: 'h-[1.125rem] w-[1.125rem]',\n lg: 'h-5 w-5',\n xl: 'h-5 w-5',\n };\n\n const paletteVars: Record<ButtonPalette, { primary: string; hover: string; onPrimary?: string }> =\n {\n 'verde-vibrante': {\n primary: 'var(--brand-verde-vibrante)',\n hover: 'var(--brand-verde-profundo)',\n },\n 'verde-profundo': {\n primary: 'var(--brand-verde-profundo)',\n hover: 'var(--brand-grafite-azulado)',\n },\n 'grafite-azulado': {\n primary: 'var(--brand-grafite-azulado)',\n hover: 'var(--brand-cinza-escuro)',\n },\n 'azul-acinzentado': {\n primary: 'var(--brand-azul-acinzentado)',\n hover: 'var(--brand-grafite-azulado)',\n },\n 'cinza-medio': {\n primary: 'var(--brand-cinza-medio)',\n hover: 'var(--brand-cinza-escuro)',\n },\n 'cinza-escuro': {\n primary: 'var(--brand-cinza-escuro)',\n hover: 'var(--brand-preto)',\n },\n 'off-white': {\n primary: 'var(--brand-off-white)',\n hover: 'var(--brand-branco)',\n onPrimary: 'var(--brand-grafite-azulado)',\n },\n };\n\n type ButtonCssVars = CSSProperties & {\n '--md-primary'?: string;\n '--primary-color-hover'?: string;\n '--md-on-primary'?: string;\n };\n const paletteStyle: ButtonCssVars = {};\n if (palette && variant === 'primary') {\n paletteStyle['--md-primary'] = paletteVars[palette].primary;\n paletteStyle['--primary-color-hover'] = paletteVars[palette].hover;\n if (paletteVars[palette].onPrimary) {\n paletteStyle['--md-on-primary'] = paletteVars[palette].onPrimary;\n }\n }\n\n const combinedClass = cn(\n baseClass,\n focusClass,\n disabledClass,\n sizeClassMap[size],\n variantClassMap[variant],\n offWhiteBorderClass,\n fullWidthClass,\n className,\n );\n\n return (\n <button\n className={combinedClass}\n disabled={disabled || isLoading}\n style={{ ...paletteStyle, ...style }}\n {...props}\n >\n {isLoading && (\n <span\n aria-hidden=\"true\"\n className=\"absolute inline-flex h-[1em] w-[1em] animate-spin items-center justify-center\"\n >\n <svg fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" strokeOpacity=\"0.25\" />\n <path d=\"M12 2 A10 10 0 0 1 22 12\" strokeLinecap=\"round\" />\n </svg>\n </span>\n )}\n {!isLoading && leftIcon && (\n <span\n className={`mr-1 inline-flex shrink-0 items-center justify-center leading-none ${iconSizeClassMap[size]}`}\n >\n {leftIcon}\n </span>\n )}\n {!isLoading && (\n <span className=\"btn__content inline-flex items-center justify-center\">{children}</span>\n )}\n {!isLoading && rightIcon && (\n <span\n className={`ml-1 inline-flex shrink-0 items-center justify-center leading-none ${iconSizeClassMap[size]}`}\n >\n {rightIcon}\n </span>\n )}\n </button>\n );\n};\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {\n title?: string;\n tone?: 'info' | 'success' | 'warning' | 'error';\n}\n\nexport const Alert: React.FC<AlertProps> = ({\n title,\n tone = 'info',\n children,\n className,\n ...props\n}) => {\n const toneClass = {\n info: 'border-[var(--info-color)]/40 bg-[var(--info-color)]/10 text-[var(--text-primary)]',\n success:\n 'border-[var(--success-color)]/40 bg-[var(--success-color)]/10 text-[var(--text-primary)]',\n warning:\n 'border-[var(--warning-color)]/40 bg-[var(--warning-color)]/10 text-[var(--text-primary)]',\n error: 'border-[var(--md-error)]/40 bg-[var(--md-error)]/10 text-[var(--text-primary)]',\n }[tone];\n\n return (\n <div\n className={cn('rounded-[var(--border-radius-md)] border p-4', toneClass, className)}\n role=\"alert\"\n {...props}\n >\n {title && <p className=\"mb-1 text-sm font-semibold\">{title}</p>}\n <div className=\"text-sm leading-relaxed\">{children}</div>\n </div>\n );\n};\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n size?: 'sm' | 'md';\n tone?: 'neutral' | 'primary' | 'success' | 'warning' | 'error' | 'info';\n}\n\nexport const Badge: React.FC<BadgeProps> = ({\n size = 'md',\n tone = 'neutral',\n className,\n children,\n ...props\n}) => {\n const toneClass = {\n neutral: 'bg-[var(--bg-tertiary)] text-[var(--text-secondary)]',\n primary: 'bg-[var(--md-primary)] text-[var(--md-on-primary)]',\n success: 'bg-[var(--success-color)] text-white',\n warning: 'bg-[var(--warning-color)] text-white',\n error: 'bg-[var(--md-error)] text-[var(--md-on-error)]',\n info: 'bg-[var(--info-color)] text-white',\n }[tone];\n\n const sizeClass = size === 'sm' ? 'px-2 py-0.5 text-[0.6875rem]' : 'px-2.5 py-1 text-xs';\n\n return (\n <span\n className={cn(\n 'inline-flex items-center rounded-full font-medium leading-none',\n toneClass,\n sizeClass,\n className,\n )}\n {...props}\n >\n {children}\n </span>\n );\n};\n","import type React from 'react';\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n hoverable?: boolean;\n padding?: 'none' | 'sm' | 'md' | 'lg' | 'xl';\n variant?: 'default' | 'elevated' | 'outlined' | 'flat';\n}\n\nexport const Card: React.FC<CardProps> = ({\n variant = 'default',\n padding = 'md',\n hoverable = false,\n children,\n className = '',\n ...props\n}) => {\n const baseClass =\n 'relative overflow-hidden rounded-[var(--border-radius-lg)] transition-[var(--transition-all)]';\n const variantClassMap: Record<NonNullable<CardProps['variant']>, string> = {\n default:\n 'bg-[var(--md-surface)] border border-[var(--md-outline-variant)] shadow-[var(--shadow-sm)]',\n elevated:\n 'bg-[var(--md-surface)] border border-[var(--md-outline-variant)] shadow-[var(--shadow-lg)]',\n outlined: 'bg-transparent border border-[var(--md-outline-variant)] shadow-none',\n flat: 'bg-[var(--md-surface)] border-0 shadow-none',\n };\n const paddingClassMap: Record<NonNullable<CardProps['padding']>, string> = {\n none: 'p-0',\n sm: 'p-[var(--spacing-md)]',\n md: 'p-[var(--spacing-lg)]',\n lg: 'p-[var(--spacing-xl)]',\n xl: 'p-[var(--spacing-2xl)]',\n };\n const hoverableClass = hoverable ? 'hover:shadow-[var(--shadow-md)]' : '';\n const combinedClass = [\n baseClass,\n variantClassMap[variant],\n paddingClassMap[padding],\n hoverableClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={combinedClass} {...props}>\n {children}\n </div>\n );\n};\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n helperText?: string;\n label?: string;\n}\n\nexport const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n ({ label, helperText, className, id, ...props }, ref) => {\n const inputId = id || `checkbox-${Math.random().toString(36).slice(2, 9)}`;\n\n return (\n <label\n className={cn('inline-flex cursor-pointer items-start gap-2', className)}\n htmlFor={inputId}\n >\n <input\n ref={ref}\n className=\"mt-0.5 h-4 w-4 rounded border-[var(--md-outline-variant)] bg-[var(--md-surface)] text-[var(--md-primary)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--border-color-focus)]\"\n id={inputId}\n type=\"checkbox\"\n {...props}\n />\n <span className=\"grid gap-0.5\">\n {label && <span className=\"text-sm text-[var(--text-primary)]\">{label}</span>}\n {helperText && <span className=\"text-xs text-[var(--text-muted)]\">{helperText}</span>}\n </span>\n </label>\n );\n },\n);\n\nCheckbox.displayName = 'Checkbox';\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ChipProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n selected?: boolean;\n}\n\nexport const Chip: React.FC<ChipProps> = ({ selected = false, className, children, ...props }) => {\n return (\n <button\n className={cn(\n 'inline-flex items-center rounded-full border px-3 py-1.5 text-sm transition',\n selected\n ? 'border-[var(--md-primary)] bg-[color:color-mix(in_srgb,var(--md-primary)_16%,transparent)] text-[var(--md-on-surface)]'\n : 'border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]',\n className,\n )}\n type=\"button\"\n {...props}\n >\n {children}\n </button>\n );\n};\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface DividerProps extends React.HTMLAttributes<HTMLDivElement> {\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport const Divider: React.FC<DividerProps> = ({\n orientation = 'horizontal',\n className,\n ...props\n}) => {\n return (\n <div\n className={cn(\n 'bg-[var(--border-color)]',\n orientation === 'horizontal' ? 'h-px w-full' : 'h-full w-px',\n className,\n )}\n role=\"separator\"\n {...props}\n />\n );\n};\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface EmptyStateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n action?: React.ReactNode;\n description?: React.ReactNode;\n icon?: React.ReactNode;\n title: React.ReactNode;\n}\n\nexport const EmptyState: React.FC<EmptyStateProps> = ({\n icon,\n title,\n description,\n action,\n className,\n ...props\n}) => {\n return (\n <div\n className={cn(\n 'grid justify-items-center gap-3 rounded-[var(--border-radius-lg)] border border-dashed border-[var(--border-color)] bg-[var(--bg-secondary)] p-6 text-center',\n className,\n )}\n {...props}\n >\n {icon && <div className=\"text-[var(--text-muted)]\">{icon}</div>}\n <h3 className=\"m-0 text-lg font-semibold text-[var(--text-primary)]\">{title}</h3>\n {description && (\n <p className=\"m-0 max-w-[30rem] text-sm text-[var(--text-secondary)]\">{description}</p>\n )}\n {action && <div className=\"mt-1\">{action}</div>}\n </div>\n );\n};\n","import type React from 'react';\nimport { useState } from 'react';\n\nexport interface FooterProps {\n /** Classe CSS adicional */\n className?: string;\n /** Texto alternativo do logo */\n logoAlt?: string;\n /** Texto exibido se a imagem do logo falhar (ex.: \"SBK\") */\n logoFallbackText?: string;\n /** URL da imagem do logo */\n logoSrc?: string;\n /** Texto antes do logo (ex.: \"Powered by\") */\n poweredByText?: string;\n}\n\nexport const Footer: React.FC<FooterProps> = ({\n poweredByText = 'Powered by',\n logoSrc,\n logoAlt = 'Logo',\n logoFallbackText,\n className = '',\n}) => {\n const [logoVisible, setLogoVisible] = useState(true);\n return (\n <footer\n className={[\n 'relative z-[1] flex w-full shrink-0 items-center justify-center border-t border-[var(--border-color)] bg-[var(--bg-secondary)] px-[var(--spacing-2xl)] py-[var(--spacing-lg)]',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <div className=\"flex items-center gap-[var(--spacing-md)]\">\n {poweredByText && (\n <span className=\"text-[0.95rem] font-normal text-[var(--text-secondary)]\">\n {poweredByText}\n </span>\n )}\n {(logoSrc || logoFallbackText) && (\n <div className=\"flex items-center\">\n {logoSrc && logoVisible && (\n <img\n alt={logoAlt}\n className=\"h-6 w-auto object-contain\"\n onError={(_e) => {\n setLogoVisible(false);\n }}\n src={logoSrc}\n style={{\n filter: 'brightness(0)',\n }}\n />\n )}\n {logoFallbackText && (\n <span\n className=\"flex items-center text-base font-bold tracking-[0.1em] text-[var(--md-primary)]\"\n style={{\n display: logoSrc && logoVisible ? 'none' : 'flex',\n fontFamily: '\"Orbitron\", sans-serif',\n }}\n >\n {logoFallbackText}\n </span>\n )}\n </div>\n )}\n </div>\n </footer>\n );\n};\n","import type React from 'react';\nimport { useEffect, useState } from 'react';\nimport type { Theme } from '../../theme/ThemeProvider';\n\nexport interface HeaderProps {\n /** Classe CSS adicional */\n className?: string;\n /** Texto alternativo do logo */\n logoAlt?: string;\n /** URL da imagem do logo (tema escuro). Se não informado, usa logoSrc. */\n logoDarkSrc?: string;\n /** URL da imagem do logo (tema claro) */\n logoSrc?: string;\n /** Callback ao clicar na área do logo/título */\n onLogoClick?: () => void;\n /** Conteúdo da área direita (ex.: seletor de idioma, toggle tema, menu usuário) */\n rightContent?: React.ReactNode;\n /** Subtítulo abaixo do título */\n subtitle?: React.ReactNode;\n /** Tema opcional para escolher o logo correto sem depender do ThemeProvider do UI */\n theme?: Theme;\n /** Título exibido ao lado do logo (ex.: \"OFÍCIO.IA\") */\n title?: React.ReactNode;\n}\n\nconst detectTheme = (): Theme => {\n if (typeof document === 'undefined') {\n return 'light';\n }\n\n return document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light';\n};\n\nexport const Header: React.FC<HeaderProps> = ({\n logoSrc,\n logoDarkSrc,\n logoAlt = 'Logo',\n title,\n subtitle,\n theme,\n onLogoClick,\n rightContent,\n className = '',\n}) => {\n const [isScrolled, setIsScrolled] = useState(false);\n const [resolvedTheme, setResolvedTheme] = useState<Theme>(() => theme ?? detectTheme());\n\n const logoSrcResolved = resolvedTheme === 'dark' && logoDarkSrc ? logoDarkSrc : logoSrc;\n\n useEffect(() => {\n const handleScroll = () => setIsScrolled(window.scrollY > 10);\n window.addEventListener('scroll', handleScroll, { passive: true });\n return () => window.removeEventListener('scroll', handleScroll);\n }, []);\n\n useEffect(() => {\n if (theme) {\n setResolvedTheme(theme);\n return;\n }\n\n const syncTheme = () => setResolvedTheme(detectTheme());\n syncTheme();\n\n if (typeof MutationObserver === 'undefined') {\n return;\n }\n\n const observer = new MutationObserver(syncTheme);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['data-theme'],\n });\n\n return () => observer.disconnect();\n }, [theme]);\n\n const handleClick = () => onLogoClick?.();\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n onLogoClick?.();\n }\n };\n\n return (\n <header\n className={['fixed inset-x-0 top-0 z-[1000] w-full backdrop-blur-[12px]', className]\n .filter(Boolean)\n .join(' ')}\n >\n <div className=\"h-0.5 w-full bg-[var(--md-primary)]\" />\n <div\n className=\"flex items-center justify-between px-6 py-2 shadow-[var(--shadow-sm)] max-md:flex-col max-md:gap-3 max-md:px-4 max-md:py-3\"\n style={{\n color: 'var(--md-on-surface)',\n background: `color-mix(in srgb, var(--md-surface) ${\n isScrolled ? '14%' : '18%'\n }, transparent)`,\n borderBottom: `1px solid color-mix(in srgb, var(--md-outline-variant) ${\n isScrolled ? '22%' : '30%'\n }, transparent)`,\n }}\n >\n <div\n className=\"flex cursor-pointer items-center gap-3 transition-opacity duration-200 ease-in-out hover:opacity-80\"\n onClick={onLogoClick ? handleClick : undefined}\n onKeyDown={onLogoClick ? handleKeyDown : undefined}\n role={onLogoClick ? 'button' : undefined}\n tabIndex={onLogoClick ? 0 : undefined}\n >\n {logoSrcResolved && (\n <div className=\"flex h-16 w-16 shrink-0 items-center justify-center\">\n <img\n alt={logoAlt}\n className=\"h-full w-full object-contain\"\n onError={(e) => {\n (e.target as HTMLImageElement).style.display = 'none';\n const next = (e.target as HTMLElement).nextElementSibling as HTMLElement;\n if (next) {\n next.style.display = 'block';\n }\n }}\n src={logoSrcResolved}\n />\n <svg\n className=\"hidden h-full w-full\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M12 2L2 7l10 5 10-5-10-5z\" />\n <path d=\"M2 17l10 5 10-5M2 12l10 5 10-5\" />\n </svg>\n </div>\n )}\n {(title || subtitle) && (\n <div className=\"flex flex-col gap-1\">\n {title && (\n <h1\n className=\"m-0 inline-flex items-baseline text-[1.375rem] font-bold leading-[1.2] tracking-[0.05em] text-[var(--md-on-surface)] max-md:text-xl\"\n style={{ fontFamily: 'var(--font-logo)' }}\n >\n {title}\n </h1>\n )}\n {subtitle && (\n <p className=\"m-0 text-[0.8125rem] font-normal text-[var(--md-on-surface-variant)] max-md:text-xs\">\n {subtitle}\n </p>\n )}\n </div>\n )}\n </div>\n {rightContent && (\n <div className=\"flex shrink-0 items-center gap-3 max-md:w-full max-md:flex-wrap max-md:justify-between\">\n {rightContent}\n </div>\n )}\n </div>\n </header>\n );\n};\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\n error?: string;\n fullWidth?: boolean;\n helperText?: string;\n label?: string;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n label,\n error,\n helperText,\n leftIcon,\n rightIcon,\n fullWidth = false,\n size = 'md',\n className,\n id,\n ...props\n },\n ref,\n ) => {\n const inputId = id || `input-${Math.random().toString(36).substring(2, 9)}`;\n const hasError = !!error;\n\n const sizeClassMap: Record<NonNullable<InputProps['size']>, string> = {\n sm: 'min-h-8 px-[var(--spacing-md)] py-[var(--spacing-sm)] text-[var(--font-size-sm)]',\n md: 'min-h-10 px-[var(--spacing-lg)] py-[var(--spacing-md)] text-[var(--font-size-base)]',\n lg: 'min-h-12 px-[var(--spacing-xl)] py-[var(--spacing-lg)] text-[var(--font-size-lg)]',\n };\n\n const combinedClass = cn(\n 'w-full rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] font-inherit text-[var(--md-on-surface)] outline-none transition-[var(--transition-all)] placeholder:text-[var(--md-on-surface-variant)] placeholder:opacity-70 hover:not-disabled:not-focus:border-[var(--border-color-hover)] focus:border-[var(--border-color-focus)] focus:[box-shadow:0_0_0_0.1875rem_rgba(47,93,140,0.15)] disabled:cursor-not-allowed disabled:bg-[var(--md-surface-container-high)] disabled:opacity-60',\n hasError &&\n 'border-[var(--md-error)] focus:border-[var(--md-error)] focus:[box-shadow:0_0_0_0.1875rem_rgba(186,26,26,0.2)]',\n sizeClassMap[size],\n // icon padding vem depois do sizeClassMap para não ser sobrescrito pelo px-* do tamanho\n leftIcon && 'pl-10',\n rightIcon && 'pr-10',\n className,\n );\n\n return (\n <div className={cn('flex flex-col gap-[var(--spacing-xs)]', fullWidth && 'w-full')}>\n {label && (\n <label\n className=\"text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]\"\n htmlFor={inputId}\n >\n {label}\n </label>\n )}\n <div className=\"group relative flex w-full items-center\">\n {leftIcon && (\n <span className=\"pointer-events-none absolute left-[var(--spacing-md)] z-[1] flex items-center justify-center text-[var(--md-on-surface-variant)] group-focus-within:text-[var(--md-primary)] [&_svg]:h-[1.125rem] [&_svg]:w-[1.125rem]\">\n {leftIcon}\n </span>\n )}\n <input\n ref={ref}\n aria-describedby={\n error ? `${inputId}-error` : helperText ? `${inputId}-helper` : undefined\n }\n aria-invalid={hasError ? true : undefined}\n className={combinedClass}\n id={inputId}\n {...props}\n />\n {rightIcon && (\n <span className=\"pointer-events-none absolute right-[var(--spacing-md)] z-[1] flex items-center justify-center text-[var(--md-on-surface-variant)] group-focus-within:text-[var(--md-primary)] [&_svg]:h-[1.125rem] [&_svg]:w-[1.125rem]\">\n {rightIcon}\n </span>\n )}\n </div>\n {error && (\n <span\n className=\"mt-[var(--spacing-xs)] block text-[var(--font-size-xs)] text-[var(--md-error)]\"\n id={`${inputId}-error`}\n role=\"alert\"\n >\n {error}\n </span>\n )}\n {helperText && !error && (\n <span\n className=\"mt-[var(--spacing-xs)] block text-[var(--font-size-xs)] text-[var(--md-on-surface-variant)]\"\n id={`${inputId}-helper`}\n >\n {helperText}\n </span>\n )}\n </div>\n );\n },\n);\n\nInput.displayName = 'Input';\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n}\n\nexport const Container: React.FC<ContainerProps> = ({ size = 'lg', className, ...props }) => {\n const sizeClass = {\n sm: 'max-w-2xl',\n md: 'max-w-4xl',\n lg: 'max-w-6xl',\n xl: 'max-w-7xl',\n full: 'max-w-none',\n }[size];\n return <div className={cn('mx-auto w-full px-4', sizeClass, className)} {...props} />;\n};\n\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n gap?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n}\n\nexport const Stack: React.FC<StackProps> = ({ gap = 'md', className, ...props }) => {\n const gapClass = {\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-3',\n lg: 'gap-4',\n xl: 'gap-6',\n }[gap];\n return <div className={cn('flex flex-col', gapClass, className)} {...props} />;\n};\n\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\n cols?: 1 | 2 | 3 | 4;\n gap?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n}\n\nexport const Grid: React.FC<GridProps> = ({ cols = 2, gap = 'md', className, ...props }) => {\n const colsClass = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-4',\n }[cols];\n const gapClass = {\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-3',\n lg: 'gap-4',\n xl: 'gap-6',\n }[gap];\n return <div className={cn('grid', colsClass, gapClass, className)} {...props} />;\n};\n","import type React from 'react';\nimport { useEffect, useRef } from 'react';\n\nexport interface ModalProps {\n children: React.ReactNode;\n className?: string;\n closeOnOverlayClick?: boolean;\n isOpen: boolean;\n onClose: () => void;\n showCloseButton?: boolean;\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n subtitle?: string;\n title?: string | React.ReactNode;\n}\n\nexport const Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n title,\n subtitle,\n children,\n size = 'md',\n showCloseButton = true,\n closeOnOverlayClick = true,\n className = '',\n}) => {\n const dialogRef = useRef<HTMLDivElement | null>(null);\n const lastFocusedElementRef = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n if (isOpen) {\n lastFocusedElementRef.current = document.activeElement as HTMLElement | null;\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n return () => {\n document.body.style.overflow = '';\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus();\n }\n };\n }, [isOpen]);\n\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n const handleTabTrap = (e: KeyboardEvent) => {\n if (e.key !== 'Tab' || !dialogRef.current || !isOpen) {\n return;\n }\n\n const focusable = dialogRef.current.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n\n if (focusable.length === 0) {\n e.preventDefault();\n return;\n }\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const active = document.activeElement as HTMLElement | null;\n\n if (e.shiftKey && active === first) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && active === last) {\n e.preventDefault();\n first.focus();\n }\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n document.addEventListener('keydown', handleTabTrap);\n requestAnimationFrame(() => {\n const initialTarget =\n dialogRef.current?.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n ) ?? dialogRef.current;\n initialTarget?.focus();\n });\n }\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.removeEventListener('keydown', handleTabTrap);\n };\n }, [isOpen, onClose]);\n\n if (!isOpen) {\n return null;\n }\n\n const handleOverlayClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (closeOnOverlayClick && e.target === e.currentTarget) {\n onClose();\n }\n };\n\n const handleOverlayKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (\n closeOnOverlayClick &&\n (e.key === 'Enter' || e.key === ' ') &&\n e.target === e.currentTarget\n ) {\n onClose();\n }\n };\n\n const sizeClassMap: Record<NonNullable<ModalProps['size']>, string> = {\n sm: 'max-w-[25rem]',\n md: 'max-w-[31.25rem]',\n lg: 'max-w-[43.75rem]',\n xl: 'max-w-[56.25rem]',\n full: 'max-h-[90vh] max-w-[90vw]',\n };\n const combinedClass = [\n 'relative z-[var(--z-index-modal)] m-auto flex w-full max-h-[90vh] max-w-full flex-col overflow-hidden rounded-[var(--border-radius-2xl)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] shadow-[var(--shadow-2xl)]',\n sizeClassMap[size],\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n aria-labelledby={title ? 'modal-title' : undefined}\n aria-modal=\"true\"\n className=\"fixed inset-0 z-[var(--z-index-modal-backdrop)] flex min-h-[100dvh] items-center justify-center overflow-y-auto bg-black/50 p-[var(--spacing-lg)] backdrop-blur-[8px]\"\n onClick={handleOverlayClick}\n onKeyDown={handleOverlayKeyDown}\n role=\"dialog\"\n >\n <div className={combinedClass} ref={dialogRef} tabIndex={-1}>\n {(title || subtitle || showCloseButton) && (\n <div className=\"flex shrink-0 items-start justify-between gap-[var(--spacing-lg)] border-b border-[var(--md-outline-variant)] p-[var(--spacing-2xl)]\">\n {(title || subtitle) && (\n <div className=\"flex-1\">\n {title && (\n <h2\n className=\"mb-[var(--spacing-xs)] mt-0 text-[var(--font-size-2xl)] font-[var(--font-weight-semibold)] leading-[var(--line-height-tight)] text-[var(--md-on-surface)]\"\n id=\"modal-title\"\n >\n {title}\n </h2>\n )}\n {subtitle && (\n <p className=\"m-0 text-[var(--font-size-base)] leading-[var(--line-height-normal)] text-[var(--md-on-surface-variant)]\">\n {subtitle}\n </p>\n )}\n </div>\n )}\n {showCloseButton && (\n <button\n aria-label=\"Fechar modal\"\n className=\"flex h-9 w-9 shrink-0 items-center justify-center rounded-[var(--border-radius-md)] border-0 bg-[var(--md-surface-container-high)] text-[var(--md-on-surface)] transition-[var(--transition-all)] hover:bg-[color:color-mix(in_srgb,var(--md-error)_15%,var(--md-surface))] hover:text-[var(--md-error)]\"\n onClick={onClose}\n type=\"button\"\n >\n <svg\n fill=\"none\"\n className=\"h-5 w-5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n >\n <line x1=\"18\" x2=\"6\" y1=\"6\" y2=\"18\" />\n <line x1=\"6\" x2=\"18\" y1=\"6\" y2=\"18\" />\n </svg>\n </button>\n )}\n </div>\n )}\n <div className=\"flex min-h-0 flex-1 flex-col overflow-x-hidden overflow-y-auto p-[var(--spacing-2xl)]\">\n {children}\n </div>\n </div>\n </div>\n );\n};\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface SidebarProps extends React.HTMLAttributes<HTMLElement> {}\nexport const Sidebar: React.FC<SidebarProps> = ({ className, ...props }) => (\n <aside\n className={cn(\n 'h-full rounded-[var(--border-radius-lg)] border border-[var(--border-color)] bg-[var(--bg-secondary)] p-4',\n className,\n )}\n {...props}\n />\n);\n\nexport interface TopbarProps extends React.HTMLAttributes<HTMLElement> {}\nexport const Topbar: React.FC<TopbarProps> = ({ className, ...props }) => (\n <header\n className={cn(\n 'flex min-h-14 items-center justify-between border-b border-[var(--border-color)] bg-[var(--bg-secondary)] px-4',\n className,\n )}\n {...props}\n />\n);\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface PaginationProps {\n currentPage: number;\n onPageChange: (page: number) => void;\n totalPages: number;\n}\n\nexport const Pagination: React.FC<PaginationProps> = ({\n currentPage,\n totalPages,\n onPageChange,\n}) => {\n if (totalPages <= 1) {\n return null;\n }\n\n const pages = Array.from({ length: totalPages }, (_, i) => i + 1);\n\n return (\n <nav aria-label=\"Paginação\" className=\"flex flex-wrap items-center gap-1\">\n <button\n className=\"rounded-[var(--border-radius-sm)] border border-[var(--border-color)] px-2 py-1 text-sm disabled:opacity-50\"\n disabled={currentPage === 1}\n onClick={() => onPageChange(Math.max(currentPage - 1, 1))}\n type=\"button\"\n >\n Anterior\n </button>\n {pages.map((page) => (\n <button\n className={cn(\n 'rounded-[var(--border-radius-sm)] border px-2.5 py-1 text-sm',\n page === currentPage\n ? 'border-[var(--md-primary)] bg-[var(--md-primary)] text-[var(--md-on-primary)]'\n : 'border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]',\n )}\n key={page}\n onClick={() => onPageChange(page)}\n type=\"button\"\n >\n {page}\n </button>\n ))}\n <button\n className=\"rounded-[var(--border-radius-sm)] border border-[var(--border-color)] px-2 py-1 text-sm disabled:opacity-50\"\n disabled={currentPage === totalPages}\n onClick={() => onPageChange(Math.min(currentPage + 1, totalPages))}\n type=\"button\"\n >\n Próxima\n </button>\n </nav>\n );\n};\n","import type React from 'react';\n\nexport interface ParagraphProps extends React.HTMLAttributes<HTMLParagraphElement> {\n align?: 'left' | 'center' | 'right' | 'justify';\n as?: 'p' | 'span' | 'div';\n children: React.ReactNode;\n italic?: boolean;\n muted?: boolean;\n size?: 'xs' | 'sm' | 'md' | 'lg';\n weight?: 'light' | 'normal' | 'medium';\n}\n\nexport const Paragraph: React.FC<ParagraphProps> = ({\n as = 'p',\n size = 'md',\n weight = 'normal',\n align = 'left',\n muted = false,\n italic = false,\n children,\n className = '',\n ...props\n}) => {\n const Component = as;\n const sizeClassMap: Record<NonNullable<ParagraphProps['size']>, string> = {\n xs: 'text-[var(--font-size-xs)] leading-[var(--line-height-normal)]',\n sm: 'text-[var(--font-size-sm)] leading-[var(--line-height-normal)]',\n md: 'text-[var(--font-size-base)] leading-[var(--line-height-relaxed)]',\n lg: 'text-[var(--font-size-lg)] leading-[var(--line-height-loose)]',\n };\n const weightClassMap: Record<NonNullable<ParagraphProps['weight']>, string> = {\n light: 'font-[var(--font-weight-light)]',\n normal: 'font-[var(--font-weight-normal)]',\n medium: 'font-[var(--font-weight-medium)]',\n };\n const alignClassMap: Record<NonNullable<ParagraphProps['align']>, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n justify: 'text-justify',\n };\n const combinedClass = [\n 'm-0 text-[var(--text-primary)] transition-[var(--transition-colors)]',\n sizeClassMap[size],\n weightClassMap[weight],\n alignClassMap[align],\n italic ? 'italic' : 'not-italic',\n muted ? 'text-[var(--text-muted)]' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <Component className={combinedClass} {...props}>\n {children}\n </Component>\n );\n};\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface PageHeaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n actions?: React.ReactNode;\n subtitle?: React.ReactNode;\n title: React.ReactNode;\n}\n\nexport const PageHeader: React.FC<PageHeaderProps> = ({\n title,\n subtitle,\n actions,\n className,\n ...props\n}) => {\n return (\n <header\n className={cn(\n 'grid gap-3 rounded-[var(--border-radius-lg)] border border-[var(--border-color)] bg-[var(--bg-secondary)] p-5 shadow-[var(--shadow-sm)]',\n className,\n )}\n {...props}\n >\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"grid gap-1\">\n <h1 className=\"m-0 text-2xl font-bold text-[var(--text-primary)]\">{title}</h1>\n {subtitle && <p className=\"m-0 text-sm text-[var(--text-secondary)]\">{subtitle}</p>}\n </div>\n {actions && <div className=\"flex items-center gap-2\">{actions}</div>}\n </div>\n </header>\n );\n};\n","import type React from 'react';\nimport { useEffect, useId, useRef, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface PopoverProps {\n children: React.ReactNode;\n content: React.ReactNode;\n defaultOpen?: boolean;\n}\n\nexport const Popover: React.FC<PopoverProps> = ({ children, content, defaultOpen = false }) => {\n const [open, setOpen] = useState(defaultOpen);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const panelRef = useRef<HTMLDivElement | null>(null);\n const popoverId = useId();\n\n useEffect(() => {\n const onClickOutside = (event: MouseEvent) => {\n if (!containerRef.current?.contains(event.target as Node)) {\n setOpen(false);\n }\n };\n document.addEventListener('mousedown', onClickOutside);\n return () => document.removeEventListener('mousedown', onClickOutside);\n }, []);\n\n useEffect(() => {\n if (!open || !panelRef.current) {\n return;\n }\n\n const focusable = panelRef.current.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n focusable?.focus();\n }, [open]);\n\n useEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setOpen(false);\n triggerRef.current?.focus();\n }\n };\n if (open) {\n document.addEventListener('keydown', onKeyDown);\n }\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [open]);\n\n return (\n <div className=\"relative inline-flex\" ref={containerRef}>\n <button\n aria-controls={open ? popoverId : undefined}\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n className=\"inline-flex\"\n onClick={() => setOpen((prev) => !prev)}\n ref={triggerRef}\n type=\"button\"\n >\n {children}\n </button>\n {open && (\n <div\n className={cn(\n 'absolute left-1/2 top-full z-30 mt-2 w-max -translate-x-1/2 rounded-[var(--border-radius-md)] border border-[var(--border-color)] bg-[var(--bg-secondary)] p-3 shadow-[var(--shadow-md)]',\n )}\n id={popoverId}\n ref={panelRef}\n role=\"dialog\"\n tabIndex={-1}\n >\n {content}\n </div>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface RadioProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n helperText?: string;\n label?: string;\n}\n\nexport const Radio = React.forwardRef<HTMLInputElement, RadioProps>(\n ({ label, helperText, className, id, ...props }, ref) => {\n const inputId = id || `radio-${Math.random().toString(36).slice(2, 9)}`;\n\n return (\n <label\n className={cn('inline-flex cursor-pointer items-start gap-2', className)}\n htmlFor={inputId}\n >\n <input\n ref={ref}\n className=\"mt-0.5 h-4 w-4 border-[var(--md-outline-variant)] bg-[var(--md-surface)] text-[var(--md-primary)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--border-color-focus)]\"\n id={inputId}\n type=\"radio\"\n {...props}\n />\n <span className=\"grid gap-0.5\">\n {label && <span className=\"text-sm text-[var(--text-primary)]\">{label}</span>}\n {helperText && <span className=\"text-xs text-[var(--text-muted)]\">{helperText}</span>}\n </span>\n </label>\n );\n },\n);\n\nRadio.displayName = 'Radio';\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface SectionHeaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n actions?: React.ReactNode;\n subtitle?: React.ReactNode;\n title: React.ReactNode;\n}\n\nexport const SectionHeader: React.FC<SectionHeaderProps> = ({\n title,\n subtitle,\n actions,\n className,\n ...props\n}) => {\n return (\n <div className={cn('flex items-start justify-between gap-4', className)} {...props}>\n <div className=\"grid gap-1\">\n <h2 className=\"m-0 text-xl font-semibold text-[var(--text-primary)]\">{title}</h2>\n {subtitle && <p className=\"m-0 text-sm text-[var(--text-secondary)]\">{subtitle}</p>}\n </div>\n {actions && <div className=\"flex shrink-0 items-center gap-2\">{actions}</div>}\n </div>\n );\n};\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface SelectOption {\n label: string;\n value: string;\n}\n\nexport interface SelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'size'> {\n error?: string;\n helperText?: string;\n label?: string;\n options: SelectOption[];\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const Select = React.forwardRef<HTMLSelectElement, SelectProps>(\n ({ label, helperText, error, options, size = 'md', className, id, ...props }, ref) => {\n const selectId = id || `select-${Math.random().toString(36).slice(2, 9)}`;\n\n const sizeClass = {\n sm: 'min-h-8 px-3 py-1.5 text-sm',\n md: 'min-h-10 px-3.5 py-2 text-base',\n lg: 'min-h-12 px-4 py-3 text-lg',\n }[size];\n\n return (\n <div className=\"grid gap-1\">\n {label && (\n <label\n className=\"text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]\"\n htmlFor={selectId}\n >\n {label}\n </label>\n )}\n <select\n ref={ref}\n aria-describedby={\n error ? `${selectId}-error` : helperText ? `${selectId}-helper` : undefined\n }\n aria-invalid={error ? true : undefined}\n className={cn(\n 'w-full rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] text-[var(--md-on-surface)] outline-none transition focus:border-[var(--border-color-focus)] focus:[box-shadow:0_0_0_0.1875rem_rgba(47,93,140,0.15)] disabled:cursor-not-allowed disabled:opacity-60',\n error && 'border-[var(--md-error)]',\n sizeClass,\n className,\n )}\n id={selectId}\n {...props}\n >\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n {error ? (\n <span className=\"text-xs text-[var(--md-error)]\" id={`${selectId}-error`} role=\"alert\">\n {error}\n </span>\n ) : (\n helperText && (\n <span className=\"text-xs text-[var(--md-on-surface-variant)]\" id={`${selectId}-helper`}>\n {helperText}\n </span>\n )\n )}\n </div>\n );\n },\n);\n\nSelect.displayName = 'Select';\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n circle?: boolean;\n height?: string;\n width?: string;\n}\n\nexport const Skeleton: React.FC<SkeletonProps> = ({\n circle = false,\n width,\n height,\n className,\n style,\n ...props\n}) => {\n return (\n <div\n className={cn(\n 'animate-pulse bg-[var(--md-surface-container-high)]',\n circle ? 'rounded-full' : 'rounded-[var(--border-radius-sm)]',\n className,\n )}\n style={{ width, height, ...style }}\n {...props}\n />\n );\n};\n","import type React from 'react';\n\nexport interface SubtitleProps extends React.HTMLAttributes<HTMLParagraphElement> {\n align?: 'left' | 'center' | 'right';\n as?: 'p' | 'span' | 'div';\n children: React.ReactNode;\n italic?: boolean;\n muted?: boolean;\n size?: 'xs' | 'sm' | 'md' | 'lg';\n weight?: 'normal' | 'medium' | 'semibold';\n}\n\nexport const Subtitle: React.FC<SubtitleProps> = ({\n as = 'p',\n size = 'md',\n weight = 'normal',\n align = 'left',\n muted = false,\n italic = false,\n children,\n className = '',\n ...props\n}) => {\n const Component = as;\n const sizeClassMap: Record<NonNullable<SubtitleProps['size']>, string> = {\n xs: 'text-[var(--font-size-xs)]',\n sm: 'text-[var(--font-size-sm)]',\n md: 'text-[var(--font-size-base)]',\n lg: 'text-[var(--font-size-lg)]',\n };\n const weightClassMap: Record<NonNullable<SubtitleProps['weight']>, string> = {\n normal: 'font-[var(--font-weight-normal)]',\n medium: 'font-[var(--font-weight-medium)]',\n semibold: 'font-[var(--font-weight-semibold)]',\n };\n const alignClassMap: Record<NonNullable<SubtitleProps['align']>, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n };\n const combinedClass = [\n 'm-0 leading-[var(--line-height-normal)] text-[var(--text-secondary)] transition-[var(--transition-colors)]',\n sizeClassMap[size],\n weightClassMap[weight],\n alignClassMap[align],\n italic ? 'italic' : 'not-italic',\n muted ? 'text-[var(--text-muted)] opacity-80' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <Component className={combinedClass} {...props}>\n {children}\n </Component>\n );\n};\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface SwitchProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'onChange'\n> {\n checked?: boolean;\n label?: string;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nexport const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(\n ({ checked = false, onCheckedChange, label, className, ...props }, ref) => {\n return (\n <div className={cn('inline-flex items-center gap-2', className)}>\n <button\n ref={ref}\n aria-checked={checked}\n className={cn(\n 'relative inline-flex h-6 w-11 items-center rounded-full border transition focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--border-color-focus)]',\n checked\n ? 'border-[var(--md-primary)] bg-[var(--md-primary)]'\n : 'border-[var(--md-outline)] bg-[var(--md-surface-container-high)]',\n )}\n onClick={() => onCheckedChange?.(!checked)}\n role=\"switch\"\n type=\"button\"\n {...props}\n >\n <span\n className={cn(\n 'inline-block h-5 w-5 rounded-full bg-[var(--md-surface)] shadow transition',\n checked ? 'translate-x-5' : 'translate-x-0.5',\n )}\n />\n </button>\n {label && <span className=\"text-sm text-[var(--text-primary)]\">{label}</span>}\n </div>\n );\n },\n);\n\nSwitch.displayName = 'Switch';\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TagProps extends React.HTMLAttributes<HTMLSpanElement> {\n onRemove?: () => void;\n}\n\nexport const Tag: React.FC<TagProps> = ({ className, children, onRemove, ...props }) => {\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-[var(--border-radius-sm)] border border-[var(--border-color)] bg-[var(--bg-secondary)] px-2.5 py-1 text-xs text-[var(--text-secondary)]',\n className,\n )}\n {...props}\n >\n {children}\n {onRemove && (\n <button\n aria-label=\"Remover tag\"\n className=\"inline-flex h-4 w-4 items-center justify-center rounded-full text-[var(--text-muted)] transition hover:bg-[var(--bg-hover)] hover:text-[var(--text-primary)]\"\n onClick={onRemove}\n type=\"button\"\n >\n ×\n </button>\n )}\n </span>\n );\n};\n","import type React from 'react';\nimport { useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TabItem {\n content: React.ReactNode;\n id: string;\n label: string;\n}\n\nexport interface TabsProps {\n defaultTabId?: string;\n items: TabItem[];\n}\n\nexport const Tabs: React.FC<TabsProps> = ({ items, defaultTabId }) => {\n const [activeTab, setActiveTab] = useState(defaultTabId ?? items[0]?.id);\n const selected = items.find((item) => item.id === activeTab) ?? items[0];\n const selectedIndex = Math.max(\n 0,\n items.findIndex((item) => item.id === selected?.id),\n );\n\n const moveFocus = (nextIndex: number) => {\n const item = items[nextIndex];\n if (!item) {\n return;\n }\n setActiveTab(item.id);\n const tab = document.getElementById(`tab-${item.id}`);\n tab?.focus();\n };\n\n return (\n <div className=\"grid gap-3\">\n <div\n aria-orientation=\"horizontal\"\n className=\"inline-flex flex-wrap gap-1 rounded-[var(--border-radius-md)] bg-[var(--bg-tertiary)] p-1\"\n role=\"tablist\"\n >\n {items.map((item, index) => (\n <button\n aria-controls={`panel-${item.id}`}\n aria-selected={activeTab === item.id}\n className={cn(\n 'rounded-[var(--border-radius-sm)] px-3 py-1.5 text-sm transition',\n activeTab === item.id\n ? 'bg-[var(--bg-secondary)] text-[var(--text-primary)] shadow-[var(--shadow-xs)]'\n : 'text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]',\n )}\n id={`tab-${item.id}`}\n key={item.id}\n onClick={() => setActiveTab(item.id)}\n onKeyDown={(e) => {\n if (e.key === 'ArrowRight') {\n e.preventDefault();\n moveFocus((index + 1) % items.length);\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n moveFocus((index - 1 + items.length) % items.length);\n } else if (e.key === 'Home') {\n e.preventDefault();\n moveFocus(0);\n } else if (e.key === 'End') {\n e.preventDefault();\n moveFocus(items.length - 1);\n }\n }}\n role=\"tab\"\n tabIndex={index === selectedIndex ? 0 : -1}\n type=\"button\"\n >\n {item.label}\n </button>\n ))}\n </div>\n <div\n aria-labelledby={`tab-${selected?.id ?? ''}`}\n className=\"rounded-[var(--border-radius-md)] border border-[var(--border-color)] bg-[var(--bg-secondary)] p-4\"\n id={`panel-${selected?.id ?? ''}`}\n role=\"tabpanel\"\n >\n {selected?.content}\n </div>\n </div>\n );\n};\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TableProps extends React.TableHTMLAttributes<HTMLTableElement> {}\n\nexport const Table: React.FC<TableProps> = ({ className, children, ...props }) => {\n return (\n <div className=\"overflow-x-auto rounded-[var(--border-radius-md)] border border-[var(--border-color)]\">\n <table\n className={cn(\n 'w-full min-w-[36rem] border-collapse bg-[var(--bg-secondary)] text-left',\n className,\n )}\n {...props}\n >\n {children}\n </table>\n </div>\n );\n};\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n error?: string;\n helperText?: string;\n label?: string;\n}\n\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ label, helperText, error, className, id, ...props }, ref) => {\n const textareaId = id || `textarea-${Math.random().toString(36).slice(2, 9)}`;\n\n return (\n <div className=\"grid gap-1\">\n {label && (\n <label\n className=\"text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]\"\n htmlFor={textareaId}\n >\n {label}\n </label>\n )}\n <textarea\n ref={ref}\n aria-describedby={\n error ? `${textareaId}-error` : helperText ? `${textareaId}-helper` : undefined\n }\n aria-invalid={error ? true : undefined}\n className={cn(\n 'min-h-24 w-full rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] px-3.5 py-2 text-[var(--md-on-surface)] outline-none transition placeholder:text-[var(--md-on-surface-variant)] focus:border-[var(--border-color-focus)] focus:[box-shadow:0_0_0_0.1875rem_rgba(47,93,140,0.15)] disabled:cursor-not-allowed disabled:opacity-60',\n error &&\n 'border-[var(--md-error)] focus:border-[var(--md-error)] focus:[box-shadow:0_0_0_0.1875rem_rgba(186,26,26,0.2)]',\n className,\n )}\n id={textareaId}\n {...props}\n />\n {error ? (\n <span className=\"text-xs text-[var(--md-error)]\" id={`${textareaId}-error`} role=\"alert\">\n {error}\n </span>\n ) : (\n helperText && (\n <span\n className=\"text-xs text-[var(--md-on-surface-variant)]\"\n id={`${textareaId}-helper`}\n >\n {helperText}\n </span>\n )\n )}\n </div>\n );\n },\n);\n\nTextarea.displayName = 'Textarea';\n","import type React from 'react';\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ToastProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n id?: string;\n description?: React.ReactNode;\n onDismiss?: () => void;\n title: React.ReactNode;\n tone?: 'info' | 'success' | 'warning' | 'error';\n}\n\nexport const Toast: React.FC<ToastProps> = ({\n tone = 'info',\n title,\n description,\n onDismiss,\n className,\n ...props\n}) => {\n const toneClass = {\n info: 'border-[var(--info-color)]/40',\n success: 'border-[var(--success-color)]/40',\n warning: 'border-[var(--warning-color)]/40',\n error: 'border-[var(--md-error)]/40',\n }[tone];\n const liveMode = tone === 'error' || tone === 'warning' ? 'assertive' : 'polite';\n const role = tone === 'error' || tone === 'warning' ? 'alert' : 'status';\n\n return (\n <div\n className={cn(\n 'w-[22rem] rounded-[var(--border-radius-md)] border bg-[var(--bg-secondary)] p-3 shadow-[var(--shadow-lg)]',\n toneClass,\n className,\n )}\n aria-atomic=\"true\"\n aria-live={liveMode}\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n onDismiss?.();\n }\n }}\n role={role}\n tabIndex={0}\n {...props}\n >\n <div className=\"flex items-start justify-between gap-2\">\n <p className=\"m-0 text-sm font-semibold text-[var(--text-primary)]\">{title}</p>\n {onDismiss && (\n <button\n aria-label=\"Fechar notificação\"\n className=\"inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-[var(--border-radius-sm)] text-[var(--text-secondary)] transition hover:bg-[var(--bg-hover)] hover:text-[var(--text-primary)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--border-color-focus)]\"\n onClick={onDismiss}\n type=\"button\"\n >\n <span aria-hidden>×</span>\n </button>\n )}\n </div>\n {description && <p className=\"mt-1 text-sm text-[var(--text-secondary)]\">{description}</p>}\n </div>\n );\n};\n\ninterface ToastContextValue {\n dismissToast: (id: string) => void;\n pushToast: (toast: Omit<ToastProps, 'id'> & { id?: string }) => void;\n toasts: Array<ToastProps & { id: string }>;\n}\n\nconst ToastContext = createContext<ToastContextValue | undefined>(undefined);\n\nexport interface ToastProviderProps {\n children: React.ReactNode;\n durationMs?: number;\n}\n\nexport const ToastProvider: React.FC<ToastProviderProps> = ({ children, durationMs = 4000 }) => {\n const [toasts, setToasts] = useState<Array<ToastProps & { id: string }>>([]);\n const timeoutIdsRef = useRef<Map<string, number>>(new Map());\n\n const dismissToast = useCallback((id: string) => {\n const timeoutId = timeoutIdsRef.current.get(id);\n if (timeoutId) {\n window.clearTimeout(timeoutId);\n timeoutIdsRef.current.delete(id);\n }\n setToasts((prev) => prev.filter((toast) => toast.id !== id));\n }, []);\n\n const pushToast = useCallback(\n (toast: Omit<ToastProps, 'id'> & { id?: string }) => {\n const id = toast.id ?? `toast-${Math.random().toString(36).slice(2, 9)}`;\n setToasts((prev) => [...prev, { ...toast, id }]);\n const timeoutId = window.setTimeout(() => dismissToast(id), durationMs);\n timeoutIdsRef.current.set(id, timeoutId);\n },\n [dismissToast, durationMs],\n );\n\n useEffect(() => {\n const ids = timeoutIdsRef.current;\n return () => {\n ids.forEach((timeoutId) => window.clearTimeout(timeoutId));\n ids.clear();\n };\n }, []);\n\n const value = useMemo(\n () => ({ toasts, pushToast, dismissToast }),\n [toasts, pushToast, dismissToast],\n );\n\n return (\n <ToastContext.Provider value={value}>\n {children}\n <ToastViewport />\n </ToastContext.Provider>\n );\n};\n\nexport const useToast = (): ToastContextValue => {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error('useToast must be used inside ToastProvider');\n }\n return context;\n};\n\nexport const ToastViewport: React.FC = () => {\n const context = useContext(ToastContext);\n if (!context || context.toasts.length === 0) {\n return null;\n }\n return (\n <div\n aria-label=\"Notificações\"\n className=\"pointer-events-none fixed bottom-4 right-4 z-[1200] grid gap-2\"\n role=\"region\"\n >\n {context.toasts.map((toast) => (\n <Toast\n key={toast.id}\n {...toast}\n className=\"pointer-events-auto\"\n onDismiss={() => context.dismissToast(toast.id)}\n />\n ))}\n </div>\n );\n};\n","import type React from 'react';\n\nexport interface TitleProps extends React.HTMLAttributes<HTMLHeadingElement> {\n align?: 'left' | 'center' | 'right';\n as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n children: React.ReactNode;\n gradient?: boolean;\n italic?: boolean;\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl';\n weight?: 'light' | 'normal' | 'medium' | 'semibold' | 'bold' | 'extrabold';\n}\n\nexport const Title: React.FC<TitleProps> = ({\n as = 'h1',\n size = '2xl',\n weight = 'bold',\n align = 'left',\n gradient = false,\n italic = false,\n children,\n className = '',\n ...props\n}) => {\n const Component = as;\n const sizeClassMap: Record<NonNullable<TitleProps['size']>, string> = {\n xs: 'text-[var(--font-size-sm)]',\n sm: 'text-[var(--font-size-base)]',\n md: 'text-[var(--font-size-lg)]',\n lg: 'text-[var(--font-size-xl)]',\n xl: 'text-[var(--font-size-2xl)]',\n '2xl': 'text-[var(--font-size-3xl)]',\n '3xl': 'text-[var(--font-size-4xl)]',\n '4xl': 'text-[3rem]',\n };\n const weightClassMap: Record<NonNullable<TitleProps['weight']>, string> = {\n light: 'font-[var(--font-weight-light)]',\n normal: 'font-[var(--font-weight-normal)]',\n medium: 'font-[var(--font-weight-medium)]',\n semibold: 'font-[var(--font-weight-semibold)]',\n bold: 'font-[var(--font-weight-bold)]',\n extrabold: 'font-extrabold',\n };\n const alignClassMap: Record<NonNullable<TitleProps['align']>, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n };\n const gradientClass = gradient\n ? 'bg-[linear-gradient(135deg,var(--text-primary)_0%,var(--primary-color)_50%,var(--secondary-color)_100%)] bg-clip-text text-transparent'\n : '';\n const combinedClass = [\n 'm-0 leading-[var(--line-height-tight)] text-[var(--text-primary)] transition-[var(--transition-colors)]',\n sizeClassMap[size],\n weightClassMap[weight],\n alignClassMap[align],\n italic ? 'italic' : 'not-italic',\n gradientClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <Component className={combinedClass} {...props}>\n {children}\n </Component>\n );\n};\n","import type React from 'react';\nimport { isValidElement, useId, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TooltipProps {\n children: React.ReactNode;\n content: React.ReactNode;\n side?: 'top' | 'bottom';\n}\n\nexport const Tooltip: React.FC<TooltipProps> = ({ children, content, side = 'top' }) => {\n const [open, setOpen] = useState(false);\n const tooltipId = useId();\n const sideClass =\n side === 'top'\n ? 'bottom-full mb-2 left-1/2 -translate-x-1/2'\n : 'top-full mt-2 left-1/2 -translate-x-1/2';\n\n const triggerProps = {\n 'aria-describedby': tooltipId,\n onBlur: () => setOpen(false),\n onFocus: () => setOpen(true),\n onKeyDown: (event: React.KeyboardEvent) => {\n if (event.key === 'Escape') {\n setOpen(false);\n }\n },\n onMouseEnter: () => setOpen(true),\n onMouseLeave: () => setOpen(false),\n };\n\n const trigger = isValidElement(children) ? (\n <span className=\"inline-flex\" {...triggerProps}>\n {children}\n </span>\n ) : (\n <span className=\"inline-flex\" tabIndex={0} {...triggerProps}>\n {children}\n </span>\n );\n\n return (\n <span className=\"relative inline-flex\">\n {trigger}\n <span\n aria-hidden={!open}\n className={cn(\n 'pointer-events-none absolute z-20 whitespace-nowrap rounded bg-[var(--brand-cinza-escuro)] px-2 py-1 text-xs text-white shadow-[var(--shadow-sm)] transition',\n open ? 'opacity-100' : 'opacity-0',\n sideClass,\n )}\n id={tooltipId}\n role=\"tooltip\"\n >\n {content}\n </span>\n </span>\n );\n};\n","import { createContext, type ReactNode, useContext, useEffect, useState } from 'react';\n\nexport type Theme = 'light' | 'dark';\n\ninterface ThemeContextType {\n theme: Theme;\n toggleTheme: () => void;\n}\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\n\nexport const useTheme = (): ThemeContextType => {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n};\n\ninterface ThemeProviderProps {\n children: ReactNode;\n defaultTheme?: Theme;\n}\n\nexport const ThemeProvider = ({ children, defaultTheme = 'light' }: ThemeProviderProps) => {\n const [theme, setTheme] = useState<Theme>(() => {\n if (typeof window === 'undefined') {\n return defaultTheme;\n }\n const saved = window.localStorage.getItem('theme');\n return (saved as Theme) || defaultTheme;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return;\n }\n window.localStorage.setItem('theme', theme);\n document.documentElement.setAttribute('data-theme', theme);\n }, [theme]);\n\n const toggleTheme = (): void => {\n setTheme((prev) => (prev === 'dark' ? 'light' : 'dark'));\n };\n\n return <ThemeContext.Provider value={{ theme, toggleTheme }}>{children}</ThemeContext.Provider>;\n};\n"],"names":["cn","inputs","twMerge","clsx","Accordion","items","defaultOpenId","openId","setOpenId","useState","rootRef","useRef","jsx","item","isOpen","triggerId","panelId","jsxs","event","buttons","currentIndex","btn","_a","_b","_c","_d","prev","Breadcrumb","separator","className","props","index","isLast","Combobox","label","helperText","error","options","value","onChange","placeholder","disabled","query","setQuery","setIsOpen","activeIndex","setActiveIndex","containerRef","inputRef","listRef","selectedOption","o","filtered","displayValue","useEffect","handleClickOutside","e","handleSelect","option","handleKeyDown","i","inputId","listId","FileUpload","accept","multiple","maxSizeBytes","isDragging","setIsDragging","sizeError","setSizeError","handleFiles","fileList","files","oversized","f","mb","handleDragOver","handleDragLeave","handleDrop","displayError","NumberInput","React","size","min","max","step","id","defaultValue","ref","hasError","sizeClassMap","buttonSizeMap","numValue","handleDecrement","next","handleIncrement","handleChange","raw","Stepper","currentStep","orientation","getStatus","isHorizontal","status","Button","variant","compact","fullWidth","isLoading","leftIcon","rightIcon","children","palette","style","baseClass","focusClass","disabledClass","fullWidthClass","offWhiteBorderClass","variantClassMap","iconSizeClassMap","paletteVars","paletteStyle","combinedClass","Alert","title","tone","toneClass","Badge","sizeClass","Card","padding","hoverable","paddingClassMap","hoverableClass","Checkbox","Chip","selected","Divider","EmptyState","icon","description","action","Footer","poweredByText","logoSrc","logoAlt","logoFallbackText","logoVisible","setLogoVisible","_e","detectTheme","Header","logoDarkSrc","subtitle","theme","onLogoClick","rightContent","isScrolled","setIsScrolled","resolvedTheme","setResolvedTheme","logoSrcResolved","handleScroll","syncTheme","observer","handleClick","Input","Container","Stack","gap","gapClass","Grid","cols","colsClass","Modal","onClose","showCloseButton","closeOnOverlayClick","dialogRef","lastFocusedElementRef","handleEscape","handleTabTrap","focusable","first","last","active","initialTarget","handleOverlayClick","handleOverlayKeyDown","Sidebar","Topbar","Pagination","currentPage","totalPages","onPageChange","pages","_","page","Paragraph","as","weight","align","muted","italic","Component","weightClassMap","alignClassMap","PageHeader","actions","Popover","content","defaultOpen","open","setOpen","triggerRef","panelRef","popoverId","useId","onClickOutside","onKeyDown","Radio","SectionHeader","Select","selectId","Skeleton","circle","width","height","Subtitle","Switch","checked","onCheckedChange","Tag","onRemove","Tabs","defaultTabId","activeTab","setActiveTab","selectedIndex","moveFocus","nextIndex","tab","Table","Textarea","textareaId","Toast","onDismiss","liveMode","role","ToastContext","createContext","ToastProvider","durationMs","toasts","setToasts","timeoutIdsRef","dismissToast","useCallback","timeoutId","toast","pushToast","ids","useMemo","ToastViewport","useToast","context","useContext","Title","gradient","gradientClass","Tooltip","side","tooltipId","sideClass","triggerProps","trigger","isValidElement","ThemeContext","useTheme","ThemeProvider","defaultTheme","setTheme","toggleTheme"],"mappings":"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"}
1
+ {"version":3,"file":"oficios-ui.umd.cjs","sources":["../src/utils/cn.ts","../src/components/Accordion/Accordion.tsx","../src/components/Breadcrumb/Breadcrumb.tsx","../src/components/Combobox/Combobox.tsx","../src/components/FileUpload/FileUpload.tsx","../src/components/NumberInput/NumberInput.tsx","../src/components/Stepper/Stepper.tsx","../src/components/Button/Button.tsx","../src/components/Alert/Alert.tsx","../src/components/Badge/Badge.tsx","../src/components/Card/Card.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Chip/Chip.tsx","../src/components/Divider/Divider.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/Footer/Footer.tsx","../src/components/Header/Header.tsx","../src/components/Input/Input.tsx","../src/components/Layout/Layout.tsx","../src/components/Modal/Modal.tsx","../src/components/Navigation/Navigation.tsx","../src/components/Pagination/Pagination.tsx","../src/components/Paragraph/Paragraph.tsx","../src/components/PageHeader/PageHeader.tsx","../src/components/Popover/Popover.tsx","../src/components/Radio/Radio.tsx","../src/components/SectionHeader/SectionHeader.tsx","../src/components/Select/Select.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Subtitle/Subtitle.tsx","../src/components/Switch/Switch.tsx","../src/components/Tag/Tag.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Table/Table.tsx","../src/components/Textarea/Textarea.tsx","../src/components/Toast/Toast.tsx","../src/components/Title/Title.tsx","../src/components/Tooltip/Tooltip.tsx","../src/theme/ThemeProvider.tsx"],"sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Utilitário de composição de classes Tailwind.\n * Usa clsx para lógica condicional e tailwind-merge para resolver\n * conflitos de classes (ex.: bg-red-500 + bg-blue-500 → bg-blue-500).\n */\nexport const cn = (...inputs: ClassValue[]) => twMerge(clsx(inputs));\n","import type React from 'react';\nimport { useRef, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface AccordionItem {\n content: React.ReactNode;\n id: string;\n title: React.ReactNode;\n}\n\nexport interface AccordionProps {\n defaultOpenId?: string;\n items: AccordionItem[];\n}\n\nexport const Accordion: React.FC<AccordionProps> = ({ items, defaultOpenId }) => {\n const [openId, setOpenId] = useState<string | null>(defaultOpenId ?? null);\n const rootRef = useRef<HTMLDivElement | null>(null);\n\n return (\n <div className=\"grid gap-2\" ref={rootRef}>\n {items.map((item) => {\n const isOpen = openId === item.id;\n const triggerId = `accordion-trigger-${item.id}`;\n const panelId = `accordion-panel-${item.id}`;\n return (\n <div\n className=\"overflow-hidden rounded-[var(--border-radius-md)] border border-[var(--border-color)]\"\n key={item.id}\n >\n <button\n aria-controls={panelId}\n aria-expanded={isOpen}\n className=\"flex w-full items-center justify-between bg-[var(--bg-secondary)] px-4 py-3 text-left text-sm font-medium text-[var(--text-primary)] hover:bg-[var(--bg-hover)]\"\n id={triggerId}\n onKeyDown={(event) => {\n if (!rootRef.current) {\n return;\n }\n const buttons = Array.from(\n rootRef.current.querySelectorAll<HTMLButtonElement>('[id^=\"accordion-trigger-\"]'),\n );\n const currentIndex = buttons.findIndex((btn) => btn.id === triggerId);\n if (currentIndex === -1 || buttons.length === 0) {\n return;\n }\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n buttons[(currentIndex + 1) % buttons.length]?.focus();\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n buttons[(currentIndex - 1 + buttons.length) % buttons.length]?.focus();\n } else if (event.key === 'Home') {\n event.preventDefault();\n buttons[0]?.focus();\n } else if (event.key === 'End') {\n event.preventDefault();\n buttons[buttons.length - 1]?.focus();\n }\n }}\n onClick={() => setOpenId((prev) => (prev === item.id ? null : item.id))}\n type=\"button\"\n >\n {item.title}\n <span className={cn('transition', isOpen ? 'rotate-180' : '')}>⌄</span>\n </button>\n {isOpen && (\n <div\n aria-labelledby={triggerId}\n className=\"bg-[var(--bg-tertiary)] px-4 py-3 text-sm text-[var(--text-secondary)]\"\n id={panelId}\n role=\"region\"\n >\n {item.content}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n};\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface BreadcrumbItem {\n href?: string;\n label: React.ReactNode;\n}\n\nexport interface BreadcrumbProps extends React.HTMLAttributes<HTMLElement> {\n items: BreadcrumbItem[];\n separator?: React.ReactNode;\n}\n\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({\n items,\n separator = '/',\n className,\n ...props\n}) => {\n return (\n <nav aria-label=\"Breadcrumb\" className={cn('flex items-center', className)} {...props}>\n <ol className=\"flex flex-wrap items-center gap-1 text-sm\">\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n return (\n <li key={index} className=\"flex items-center gap-1\">\n {index > 0 && (\n <span aria-hidden=\"true\" className=\"select-none text-[var(--text-muted)]\">\n {separator}\n </span>\n )}\n {isLast ? (\n <span aria-current=\"page\" className=\"font-medium text-[var(--text-primary)]\">\n {item.label}\n </span>\n ) : item.href ? (\n <a\n className=\"text-[var(--md-primary)] transition hover:underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--border-color-focus)]\"\n href={item.href}\n >\n {item.label}\n </a>\n ) : (\n <span className=\"text-[var(--text-secondary)]\">{item.label}</span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n};\n\nBreadcrumb.displayName = 'Breadcrumb';\n","import React, { useEffect, useRef, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ComboboxOption {\n label: string;\n value: string;\n}\n\nexport interface ComboboxProps {\n className?: string;\n disabled?: boolean;\n error?: string;\n helperText?: string;\n label?: string;\n onChange?: (value: string) => void;\n options: ComboboxOption[];\n placeholder?: string;\n value?: string;\n}\n\nexport const Combobox: React.FC<ComboboxProps> = ({\n label,\n helperText,\n error,\n options,\n value,\n onChange,\n placeholder = 'Selecione ou pesquise...',\n disabled = false,\n className,\n}) => {\n const [query, setQuery] = useState('');\n const [isOpen, setIsOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<HTMLUListElement>(null);\n\n const selectedOption = options.find((o) => o.value === value);\n\n const filtered = query\n ? options.filter((o) => o.label.toLowerCase().includes(query.toLowerCase()))\n : options;\n\n const displayValue = isOpen ? query : (selectedOption?.label ?? '');\n\n // Fechar ao clicar fora\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setIsOpen(false);\n setQuery('');\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const handleSelect = (option: ComboboxOption) => {\n onChange?.(option.value);\n setQuery('');\n setIsOpen(false);\n inputRef.current?.blur();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!isOpen) {\n if (e.key === 'ArrowDown' || e.key === 'Enter') {\n setIsOpen(true);\n setActiveIndex(0);\n e.preventDefault();\n }\n return;\n }\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setActiveIndex((i) => Math.min(i + 1, filtered.length - 1));\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n setActiveIndex((i) => Math.max(i - 1, 0));\n } else if (e.key === 'Enter') {\n e.preventDefault();\n if (activeIndex >= 0 && filtered[activeIndex]) {\n handleSelect(filtered[activeIndex]);\n }\n } else if (e.key === 'Escape') {\n setIsOpen(false);\n setQuery('');\n }\n };\n\n const inputId = `combobox-${Math.random().toString(36).slice(2, 9)}`;\n const listId = `${inputId}-list`;\n\n return (\n <div className={cn('flex flex-col gap-[var(--spacing-xs)]', className)} ref={containerRef}>\n {label && (\n <label\n className=\"text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]\"\n htmlFor={inputId}\n >\n {label}\n </label>\n )}\n <div className=\"relative\">\n <input\n ref={inputRef}\n aria-activedescendant={activeIndex >= 0 ? `${inputId}-option-${activeIndex}` : undefined}\n aria-autocomplete=\"list\"\n aria-controls={listId}\n aria-describedby={\n error ? `${inputId}-error` : helperText ? `${inputId}-helper` : undefined\n }\n aria-expanded={isOpen}\n aria-invalid={error ? true : undefined}\n autoComplete=\"off\"\n className={cn(\n 'w-full rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] px-3.5 py-2 text-[var(--font-size-base)] text-[var(--md-on-surface)] outline-none transition placeholder:text-[var(--md-on-surface-variant)] placeholder:opacity-70 focus:border-[var(--border-color-focus)] focus:[box-shadow:0_0_0_0.1875rem_rgba(47,93,140,0.15)] disabled:cursor-not-allowed disabled:opacity-60',\n error && 'border-[var(--md-error)]',\n )}\n disabled={disabled}\n id={inputId}\n placeholder={placeholder}\n role=\"combobox\"\n type=\"text\"\n value={displayValue}\n onChange={(e) => {\n setQuery(e.target.value);\n setIsOpen(true);\n setActiveIndex(0);\n }}\n onFocus={() => setIsOpen(true)}\n onKeyDown={handleKeyDown}\n />\n {/* Chevron */}\n <span\n aria-hidden=\"true\"\n className={cn(\n 'pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 text-[var(--text-muted)] transition',\n isOpen && 'rotate-180',\n )}\n >\n <svg\n className=\"h-4 w-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"m6 9 6 6 6-6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </span>\n\n {/* Dropdown */}\n {isOpen && filtered.length > 0 && (\n <ul\n ref={listRef}\n className=\"absolute z-[var(--z-index-dropdown)] mt-1 max-h-60 w-full overflow-auto rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] py-1 shadow-[var(--shadow-md)]\"\n id={listId}\n role=\"listbox\"\n >\n {filtered.map((option, index) => (\n <li\n aria-selected={option.value === value}\n className={cn(\n 'cursor-pointer px-3.5 py-2 text-sm transition',\n index === activeIndex\n ? 'bg-[var(--md-primary)] text-[var(--md-on-primary)]'\n : option.value === value\n ? 'bg-[var(--bg-tertiary)] text-[var(--text-primary)]'\n : 'text-[var(--text-primary)] hover:bg-[var(--bg-hover)]',\n )}\n id={`${inputId}-option-${index}`}\n key={option.value}\n role=\"option\"\n onMouseDown={(e) => {\n e.preventDefault();\n handleSelect(option);\n }}\n onMouseEnter={() => setActiveIndex(index)}\n >\n {option.label}\n </li>\n ))}\n </ul>\n )}\n {isOpen && filtered.length === 0 && (\n <div className=\"absolute z-[var(--z-index-dropdown)] mt-1 w-full rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] px-3.5 py-3 text-sm text-[var(--text-muted)] shadow-[var(--shadow-md)]\">\n Nenhum resultado encontrado.\n </div>\n )}\n </div>\n {error && (\n <span\n className=\"text-[var(--font-size-xs)] text-[var(--md-error)]\"\n id={`${inputId}-error`}\n role=\"alert\"\n >\n {error}\n </span>\n )}\n {helperText && !error && (\n <span\n className=\"text-[var(--font-size-xs)] text-[var(--md-on-surface-variant)]\"\n id={`${inputId}-helper`}\n >\n {helperText}\n </span>\n )}\n </div>\n );\n};\n\nCombobox.displayName = 'Combobox';\n","import React, { useRef, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface FileUploadProps {\n accept?: string;\n className?: string;\n disabled?: boolean;\n error?: string;\n helperText?: string;\n label?: string;\n maxSizeBytes?: number;\n multiple?: boolean;\n onChange?: (files: File[]) => void;\n}\n\nexport const FileUpload: React.FC<FileUploadProps> = ({\n label,\n helperText,\n error,\n accept,\n multiple = false,\n maxSizeBytes,\n disabled = false,\n onChange,\n className,\n}) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [isDragging, setIsDragging] = useState(false);\n const [sizeError, setSizeError] = useState<string | null>(null);\n\n const handleFiles = (fileList: FileList | null) => {\n if (!fileList) return;\n const files = Array.from(fileList);\n\n if (maxSizeBytes) {\n const oversized = files.find((f) => f.size > maxSizeBytes);\n if (oversized) {\n const mb = (maxSizeBytes / 1024 / 1024).toFixed(0);\n setSizeError(`Arquivo \"${oversized.name}\" excede o tamanho máximo de ${mb} MB.`);\n return;\n }\n }\n\n setSizeError(null);\n onChange?.(files);\n };\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n if (!disabled) setIsDragging(true);\n };\n\n const handleDragLeave = () => setIsDragging(false);\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n setIsDragging(false);\n if (!disabled) handleFiles(e.dataTransfer.files);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n inputRef.current?.click();\n }\n };\n\n const displayError = error ?? sizeError;\n\n return (\n <div className={cn('flex flex-col gap-[var(--spacing-xs)]', className)}>\n {label && (\n <span className=\"text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]\">\n {label}\n </span>\n )}\n <div\n aria-disabled={disabled}\n className={cn(\n 'flex cursor-pointer flex-col items-center justify-center gap-2 rounded-[var(--border-radius-lg)] border-2 border-dashed p-8 text-center transition',\n isDragging\n ? 'border-[var(--md-primary)] bg-[var(--md-primary-container)]'\n : 'border-[var(--md-outline-variant)] hover:border-[var(--md-primary)] hover:bg-[var(--bg-tertiary)]',\n displayError && 'border-[var(--md-error)]',\n disabled && 'pointer-events-none cursor-not-allowed opacity-60',\n )}\n onClick={() => !disabled && inputRef.current?.click()}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n >\n {/* Upload icon */}\n <svg\n className=\"h-8 w-8 text-[var(--md-primary)]\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5m-13.5-9L12 3m0 0 4.5 4.5M12 3v13.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <div>\n <p className=\"text-sm font-medium text-[var(--text-primary)]\">\n Arraste arquivos aqui ou{' '}\n <span className=\"text-[var(--md-primary)] underline\">clique para selecionar</span>\n </p>\n {accept && (\n <p className=\"mt-0.5 text-xs text-[var(--text-muted)]\">Formatos aceitos: {accept}</p>\n )}\n {maxSizeBytes && (\n <p className=\"text-xs text-[var(--text-muted)]\">\n Tamanho máximo: {(maxSizeBytes / 1024 / 1024).toFixed(0)} MB\n </p>\n )}\n </div>\n </div>\n <input\n ref={inputRef}\n accept={accept}\n className=\"sr-only\"\n disabled={disabled}\n multiple={multiple}\n tabIndex={-1}\n type=\"file\"\n onChange={(e) => handleFiles(e.target.files)}\n />\n {displayError && (\n <span className=\"text-[var(--font-size-xs)] text-[var(--md-error)]\" role=\"alert\">\n {displayError}\n </span>\n )}\n {helperText && !displayError && (\n <span className=\"text-[var(--font-size-xs)] text-[var(--md-on-surface-variant)]\">\n {helperText}\n </span>\n )}\n </div>\n );\n};\n\nFileUpload.displayName = 'FileUpload';\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface NumberInputProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'size' | 'onChange'\n> {\n error?: string;\n helperText?: string;\n label?: string;\n max?: number;\n min?: number;\n onChange?: (value: number | null) => void;\n size?: 'sm' | 'md' | 'lg';\n step?: number;\n}\n\nexport const NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n label,\n error,\n helperText,\n size = 'md',\n min,\n max,\n step = 1,\n onChange,\n className,\n id,\n value,\n defaultValue,\n disabled,\n ...props\n },\n ref,\n ) => {\n const inputId = id || `number-input-${Math.random().toString(36).slice(2, 9)}`;\n const hasError = !!error;\n\n const sizeClassMap = {\n sm: 'min-h-8 text-[var(--font-size-sm)]',\n md: 'min-h-10 text-[var(--font-size-base)]',\n lg: 'min-h-12 text-[var(--font-size-lg)]',\n };\n\n const buttonSizeMap = {\n sm: 'h-8 w-7 text-sm',\n md: 'h-10 w-8 text-base',\n lg: 'h-12 w-9 text-lg',\n };\n\n const numValue = value !== undefined ? Number(value) : undefined;\n\n const handleDecrement = () => {\n const current = numValue ?? (defaultValue !== undefined ? Number(defaultValue) : 0);\n const next = current - step;\n if (min === undefined || next >= min) {\n onChange?.(next);\n }\n };\n\n const handleIncrement = () => {\n const current = numValue ?? (defaultValue !== undefined ? Number(defaultValue) : 0);\n const next = current + step;\n if (max === undefined || next <= max) {\n onChange?.(next);\n }\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value;\n onChange?.(raw === '' ? null : Number(raw));\n };\n\n return (\n <div className=\"flex flex-col gap-[var(--spacing-xs)]\">\n {label && (\n <label\n className=\"text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]\"\n htmlFor={inputId}\n >\n {label}\n </label>\n )}\n <div\n className={cn(\n 'inline-flex overflow-hidden rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] transition focus-within:border-[var(--border-color-focus)] focus-within:[box-shadow:0_0_0_0.1875rem_rgba(47,93,140,0.15)]',\n hasError && 'border-[var(--md-error)] focus-within:border-[var(--md-error)]',\n disabled && 'cursor-not-allowed opacity-60',\n )}\n >\n <button\n aria-label=\"Diminuir\"\n className={cn(\n 'flex shrink-0 items-center justify-center border-r border-[var(--md-outline-variant)] bg-[var(--bg-tertiary)] text-[var(--text-secondary)] transition hover:bg-[var(--bg-hover)] hover:text-[var(--text-primary)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--border-color-focus)]',\n buttonSizeMap[size],\n )}\n disabled={disabled || (min !== undefined && (numValue ?? 0) <= min)}\n onClick={handleDecrement}\n type=\"button\"\n >\n −\n </button>\n <input\n ref={ref}\n aria-describedby={\n error ? `${inputId}-error` : helperText ? `${inputId}-helper` : undefined\n }\n aria-invalid={hasError ? true : undefined}\n className={cn(\n 'w-full min-w-0 bg-transparent px-3 text-center text-[var(--md-on-surface)] outline-none',\n sizeClassMap[size],\n className,\n )}\n defaultValue={defaultValue}\n disabled={disabled}\n id={inputId}\n max={max}\n min={min}\n step={step}\n type=\"number\"\n value={value}\n onChange={handleChange}\n {...props}\n />\n <button\n aria-label=\"Aumentar\"\n className={cn(\n 'flex shrink-0 items-center justify-center border-l border-[var(--md-outline-variant)] bg-[var(--bg-tertiary)] text-[var(--text-secondary)] transition hover:bg-[var(--bg-hover)] hover:text-[var(--text-primary)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--border-color-focus)]',\n buttonSizeMap[size],\n )}\n disabled={disabled || (max !== undefined && (numValue ?? 0) >= max)}\n onClick={handleIncrement}\n type=\"button\"\n >\n +\n </button>\n </div>\n {error && (\n <span\n className=\"text-[var(--font-size-xs)] text-[var(--md-error)]\"\n id={`${inputId}-error`}\n role=\"alert\"\n >\n {error}\n </span>\n )}\n {helperText && !error && (\n <span\n className=\"text-[var(--font-size-xs)] text-[var(--md-on-surface-variant)]\"\n id={`${inputId}-helper`}\n >\n {helperText}\n </span>\n )}\n </div>\n );\n },\n);\n\nNumberInput.displayName = 'NumberInput';\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface StepperItem {\n description?: string;\n id: string;\n label: string;\n}\n\nexport type StepStatus = 'completed' | 'active' | 'pending';\n\nexport interface StepperProps extends React.HTMLAttributes<HTMLDivElement> {\n currentStep: string;\n items: StepperItem[];\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport const Stepper: React.FC<StepperProps> = ({\n items,\n currentStep,\n orientation = 'horizontal',\n className,\n ...props\n}) => {\n const currentIndex = items.findIndex((item) => item.id === currentStep);\n const isHorizontal = orientation === 'horizontal';\n\n const getStatus = (index: number): StepStatus => {\n if (index < currentIndex) return 'completed';\n if (index === currentIndex) return 'active';\n return 'pending';\n };\n\n const connectorColor = (isActive: boolean) =>\n isActive ? 'bg-[var(--md-primary)]' : 'bg-[var(--md-outline-variant)]';\n\n return (\n <div\n aria-label=\"Progresso\"\n className={cn(isHorizontal ? 'flex items-start' : 'flex flex-col', className)}\n role=\"list\"\n {...props}\n >\n {items.map((item, index) => {\n const status = getStatus(index);\n const isLast = index === items.length - 1;\n\n return (\n <div\n key={item.id}\n className={cn('flex', isHorizontal ? 'flex-1 flex-col items-center' : 'gap-4')}\n role=\"listitem\"\n >\n {/* ── Indicador + conectores ─────────────────── */}\n <div\n className={cn(\n isHorizontal ? 'flex w-full items-center' : 'flex flex-col items-center',\n )}\n >\n {isHorizontal && (\n /* Conector esquerdo: espaçador no 1º item, linha colorida nos demais */\n index === 0 ? (\n <div className=\"flex-1\" aria-hidden=\"true\" />\n ) : (\n <div\n aria-hidden=\"true\"\n className={cn(\n 'h-0.5 flex-1 transition',\n connectorColor(index <= currentIndex),\n )}\n />\n )\n )}\n\n {/* Círculo */}\n <div\n aria-current={status === 'active' ? 'step' : undefined}\n className={cn(\n 'relative z-10 flex h-9 w-9 shrink-0 items-center justify-center rounded-full border-2 text-sm font-semibold transition',\n status === 'completed' &&\n 'border-[var(--md-primary)] bg-[var(--md-primary)] text-[var(--md-on-primary)]',\n status === 'active' &&\n 'border-[var(--md-primary)] bg-[var(--md-surface)] text-[var(--md-primary)]',\n status === 'pending' &&\n 'border-[var(--md-outline-variant)] bg-[var(--md-surface)] text-[var(--text-muted)]',\n )}\n >\n {status === 'completed' ? (\n <svg\n className=\"h-4 w-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M20 6 9 17l-5-5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n ) : (\n index + 1\n )}\n </div>\n\n {isHorizontal ? (\n /* Conector direito: linha colorida se não for último, espaçador se for */\n isLast ? (\n <div className=\"flex-1\" aria-hidden=\"true\" />\n ) : (\n <div\n aria-hidden=\"true\"\n className={cn(\n 'h-0.5 flex-1 transition',\n connectorColor(index < currentIndex),\n )}\n />\n )\n ) : (\n /* Conector vertical (para orientação vertical) */\n !isLast && (\n <div\n aria-hidden=\"true\"\n className={cn(\n 'my-1 ml-[1.0625rem] w-0.5 flex-1 transition',\n connectorColor(index < currentIndex),\n )}\n />\n )\n )}\n </div>\n\n {/* ── Label + descrição ──────────────────────── */}\n <div className={cn('mt-2 text-center', !isHorizontal && 'mt-0 pb-6 text-left')}>\n <p\n className={cn(\n 'text-sm font-medium leading-tight',\n status === 'active' && 'text-[var(--md-primary)]',\n status === 'completed' && 'text-[var(--text-primary)]',\n status === 'pending' && 'text-[var(--text-muted)]',\n )}\n >\n {item.label}\n </p>\n {item.description && (\n <p className=\"mt-0.5 text-xs text-[var(--text-muted)]\">{item.description}</p>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n\nStepper.displayName = 'Stepper';\n","import type React from 'react';\nimport type { CSSProperties } from 'react';\nimport { cn } from '../../utils/cn';\n\n/** Paletas do guia de marca (só afeta variant primary). Use para escolher o modelo de cor do botão. */\nexport type ButtonPalette =\n | 'verde-vibrante'\n | 'verde-profundo'\n | 'grafite-azulado'\n | 'azul-acinzentado'\n | 'cinza-medio'\n | 'cinza-escuro'\n | 'off-white';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n children: React.ReactNode;\n compact?: boolean;\n fullWidth?: boolean;\n isLoading?: boolean;\n leftIcon?: React.ReactNode;\n /** Paleta de cor do guia de marca (aplica-se ao primary). Ignorado em outros variants. */\n palette?: ButtonPalette;\n rightIcon?: React.ReactNode;\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n variant?:\n | 'primary'\n | 'secondary'\n | 'success'\n | 'error'\n | 'warning'\n | 'info'\n | 'neutral'\n | 'ghost';\n}\n\nexport const Button: React.FC<ButtonProps> = ({\n variant = 'primary',\n size = 'md',\n compact = false,\n fullWidth = false,\n isLoading = false,\n leftIcon,\n rightIcon,\n children,\n className = '',\n disabled,\n palette,\n style,\n ...props\n}) => {\n const baseClass =\n 'relative inline-flex select-none items-center justify-center overflow-hidden whitespace-nowrap rounded-[var(--border-radius-md)] border border-transparent font-semibold leading-none tracking-[0.01em] transition-[all_var(--transition-base)]';\n const focusClass =\n 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--md-primary)]';\n const disabledClass =\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-60';\n const fullWidthClass = fullWidth ? 'w-full' : '';\n const offWhiteBorderClass =\n palette === 'off-white' && variant === 'primary' ? 'border-[var(--border-color)]' : '';\n\n const sizeClassMap: Record<NonNullable<ButtonProps['size']>, string> = {\n xs: compact\n ? 'min-h-[1.75rem] min-w-[1.75rem] gap-1 px-2 py-1 text-[var(--font-size-xs)]'\n : 'min-h-8 min-w-8 gap-1.5 px-3 py-1.5 text-[var(--font-size-xs)]',\n sm: compact\n ? 'min-h-8 min-w-8 gap-[0.3125rem] px-2.5 py-1.5 text-[var(--font-size-sm)]'\n : 'min-h-9 min-w-9 gap-[0.4375rem] px-3.5 py-2 text-[var(--font-size-sm)]',\n md: compact\n ? 'min-h-[2.375rem] min-w-[2.375rem] gap-1.5 px-3 py-2 text-[var(--font-size-base)]'\n : 'min-h-11 min-w-11 gap-2 px-4 py-2.5 text-[var(--font-size-base)]',\n lg: compact\n ? 'min-h-[2.625rem] min-w-[2.625rem] gap-[0.4375rem] px-3.5 py-[0.5625rem] text-[var(--font-size-lg)]'\n : 'min-h-12 min-w-12 gap-[0.5625rem] px-6 py-4 text-[var(--font-size-lg)]',\n xl: compact\n ? 'min-h-12 min-w-12 gap-2 px-4 py-3 text-[var(--font-size-xl)]'\n : 'min-h-14 min-w-14 gap-2.5 px-8 py-6 text-[var(--font-size-xl)]',\n };\n\n const variantClassMap: Record<NonNullable<ButtonProps['variant']>, string> = {\n primary:\n 'bg-[var(--md-primary)] text-[var(--md-on-primary)] shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--primary-color-hover)] hover:shadow-[var(--shadow-md)]',\n secondary:\n 'bg-[var(--md-secondary)] text-[var(--md-on-secondary)] shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--secondary-color-light)] hover:shadow-[var(--shadow-md)]',\n success:\n 'bg-[var(--success-color)] text-white shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--success-color-light)] hover:shadow-[var(--shadow-md)]',\n error:\n 'bg-[var(--md-error)] text-[var(--md-on-error)] shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--error-color-light)] hover:shadow-[var(--shadow-md)]',\n warning:\n 'bg-[var(--warning-color)] text-white shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--warning-color-light)] hover:shadow-[var(--shadow-md)]',\n info: 'bg-[var(--info-color)] text-white shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--info-color-light)] hover:shadow-[var(--shadow-md)]',\n neutral:\n 'bg-[var(--neutral-color)] text-white shadow-[var(--shadow-sm)] hover:translate-y-[-0.125rem] hover:bg-[var(--neutral-color-light)] hover:shadow-[var(--shadow-md)]',\n ghost:\n 'border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--md-on-surface)] shadow-[var(--shadow-xs)] hover:bg-[var(--bg-hover)] hover:text-[var(--md-primary)] hover:border-[var(--border-color-hover)]',\n };\n\n const iconSizeClassMap: Record<NonNullable<ButtonProps['size']>, string> = {\n xs: compact ? 'h-3 w-3' : 'h-3.5 w-3.5',\n sm: compact ? 'h-3.5 w-3.5' : 'h-4 w-4',\n md: 'h-[1.125rem] w-[1.125rem]',\n lg: 'h-5 w-5',\n xl: 'h-5 w-5',\n };\n\n const paletteVars: Record<ButtonPalette, { primary: string; hover: string; onPrimary?: string }> =\n {\n 'verde-vibrante': {\n primary: 'var(--brand-verde-vibrante)',\n hover: 'var(--brand-verde-profundo)',\n },\n 'verde-profundo': {\n primary: 'var(--brand-verde-profundo)',\n hover: 'var(--brand-grafite-azulado)',\n },\n 'grafite-azulado': {\n primary: 'var(--brand-grafite-azulado)',\n hover: 'var(--brand-cinza-escuro)',\n },\n 'azul-acinzentado': {\n primary: 'var(--brand-azul-acinzentado)',\n hover: 'var(--brand-grafite-azulado)',\n },\n 'cinza-medio': {\n primary: 'var(--brand-cinza-medio)',\n hover: 'var(--brand-cinza-escuro)',\n },\n 'cinza-escuro': {\n primary: 'var(--brand-cinza-escuro)',\n hover: 'var(--brand-preto)',\n },\n 'off-white': {\n primary: 'var(--brand-off-white)',\n hover: 'var(--brand-branco)',\n onPrimary: 'var(--brand-grafite-azulado)',\n },\n };\n\n type ButtonCssVars = CSSProperties & {\n '--md-primary'?: string;\n '--primary-color-hover'?: string;\n '--md-on-primary'?: string;\n };\n const paletteStyle: ButtonCssVars = {};\n if (palette && variant === 'primary') {\n paletteStyle['--md-primary'] = paletteVars[palette].primary;\n paletteStyle['--primary-color-hover'] = paletteVars[palette].hover;\n if (paletteVars[palette].onPrimary) {\n paletteStyle['--md-on-primary'] = paletteVars[palette].onPrimary;\n }\n }\n\n const combinedClass = cn(\n baseClass,\n focusClass,\n disabledClass,\n sizeClassMap[size],\n variantClassMap[variant],\n offWhiteBorderClass,\n fullWidthClass,\n className,\n );\n\n return (\n <button\n className={combinedClass}\n disabled={disabled || isLoading}\n style={{ ...paletteStyle, ...style }}\n {...props}\n >\n {isLoading && (\n <span\n aria-hidden=\"true\"\n className=\"absolute inline-flex h-[1em] w-[1em] animate-spin items-center justify-center\"\n >\n <svg fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" strokeOpacity=\"0.25\" />\n <path d=\"M12 2 A10 10 0 0 1 22 12\" strokeLinecap=\"round\" />\n </svg>\n </span>\n )}\n {!isLoading && leftIcon && (\n <span\n className={`mr-1 inline-flex shrink-0 items-center justify-center leading-none ${iconSizeClassMap[size]}`}\n >\n {leftIcon}\n </span>\n )}\n {!isLoading && (\n <span className=\"btn__content inline-flex items-center justify-center\">{children}</span>\n )}\n {!isLoading && rightIcon && (\n <span\n className={`ml-1 inline-flex shrink-0 items-center justify-center leading-none ${iconSizeClassMap[size]}`}\n >\n {rightIcon}\n </span>\n )}\n </button>\n );\n};\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {\n title?: string;\n tone?: 'info' | 'success' | 'warning' | 'error';\n}\n\nexport const Alert: React.FC<AlertProps> = ({\n title,\n tone = 'info',\n children,\n className,\n ...props\n}) => {\n const toneClass = {\n info: 'border-[var(--info-color)]/40 bg-[var(--info-color)]/10 text-[var(--text-primary)]',\n success:\n 'border-[var(--success-color)]/40 bg-[var(--success-color)]/10 text-[var(--text-primary)]',\n warning:\n 'border-[var(--warning-color)]/40 bg-[var(--warning-color)]/10 text-[var(--text-primary)]',\n error: 'border-[var(--md-error)]/40 bg-[var(--md-error)]/10 text-[var(--text-primary)]',\n }[tone];\n\n return (\n <div\n className={cn('rounded-[var(--border-radius-md)] border p-4', toneClass, className)}\n role=\"alert\"\n {...props}\n >\n {title && <p className=\"mb-1 text-sm font-semibold\">{title}</p>}\n <div className=\"text-sm leading-relaxed\">{children}</div>\n </div>\n );\n};\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n size?: 'sm' | 'md';\n tone?: 'neutral' | 'primary' | 'success' | 'warning' | 'error' | 'info';\n}\n\nexport const Badge: React.FC<BadgeProps> = ({\n size = 'md',\n tone = 'neutral',\n className,\n children,\n ...props\n}) => {\n const toneClass = {\n neutral: 'bg-[var(--bg-tertiary)] text-[var(--text-secondary)]',\n primary: 'bg-[var(--md-primary)] text-[var(--md-on-primary)]',\n success: 'bg-[var(--success-color)] text-white',\n warning: 'bg-[var(--warning-color)] text-white',\n error: 'bg-[var(--md-error)] text-[var(--md-on-error)]',\n info: 'bg-[var(--info-color)] text-white',\n }[tone];\n\n const sizeClass = size === 'sm' ? 'px-2 py-0.5 text-[0.6875rem]' : 'px-2.5 py-1 text-xs';\n\n return (\n <span\n className={cn(\n 'inline-flex items-center rounded-full font-medium leading-none',\n toneClass,\n sizeClass,\n className,\n )}\n {...props}\n >\n {children}\n </span>\n );\n};\n","import type React from 'react';\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n hoverable?: boolean;\n padding?: 'none' | 'sm' | 'md' | 'lg' | 'xl';\n variant?: 'default' | 'elevated' | 'outlined' | 'flat';\n}\n\nexport const Card: React.FC<CardProps> = ({\n variant = 'default',\n padding = 'md',\n hoverable = false,\n children,\n className = '',\n ...props\n}) => {\n const baseClass =\n 'relative overflow-hidden rounded-[var(--border-radius-lg)] transition-[var(--transition-all)]';\n const variantClassMap: Record<NonNullable<CardProps['variant']>, string> = {\n default:\n 'bg-[var(--md-surface)] border border-[var(--md-outline-variant)] shadow-[var(--shadow-sm)]',\n elevated:\n 'bg-[var(--md-surface)] border border-[var(--md-outline-variant)] shadow-[var(--shadow-lg)]',\n outlined: 'bg-transparent border border-[var(--md-outline-variant)] shadow-none',\n flat: 'bg-[var(--md-surface)] border-0 shadow-none',\n };\n const paddingClassMap: Record<NonNullable<CardProps['padding']>, string> = {\n none: 'p-0',\n sm: 'p-[var(--spacing-md)]',\n md: 'p-[var(--spacing-lg)]',\n lg: 'p-[var(--spacing-xl)]',\n xl: 'p-[var(--spacing-2xl)]',\n };\n const hoverableClass = hoverable ? 'hover:shadow-[var(--shadow-md)]' : '';\n const combinedClass = [\n baseClass,\n variantClassMap[variant],\n paddingClassMap[padding],\n hoverableClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={combinedClass} {...props}>\n {children}\n </div>\n );\n};\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n helperText?: string;\n label?: string;\n}\n\nexport const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n ({ label, helperText, className, id, ...props }, ref) => {\n const inputId = id || `checkbox-${Math.random().toString(36).slice(2, 9)}`;\n\n return (\n <label\n className={cn('inline-flex cursor-pointer items-start gap-2', className)}\n htmlFor={inputId}\n >\n <input\n ref={ref}\n className=\"mt-0.5 h-4 w-4 rounded border-[var(--md-outline-variant)] bg-[var(--md-surface)] text-[var(--md-primary)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--border-color-focus)]\"\n id={inputId}\n type=\"checkbox\"\n {...props}\n />\n <span className=\"grid gap-0.5\">\n {label && <span className=\"text-sm text-[var(--text-primary)]\">{label}</span>}\n {helperText && <span className=\"text-xs text-[var(--text-muted)]\">{helperText}</span>}\n </span>\n </label>\n );\n },\n);\n\nCheckbox.displayName = 'Checkbox';\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ChipProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n selected?: boolean;\n}\n\nexport const Chip: React.FC<ChipProps> = ({ selected = false, className, children, ...props }) => {\n return (\n <button\n className={cn(\n 'inline-flex items-center rounded-full border px-3 py-1.5 text-sm transition',\n selected\n ? 'border-[var(--md-primary)] bg-[color:color-mix(in_srgb,var(--md-primary)_16%,transparent)] text-[var(--md-on-surface)]'\n : 'border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]',\n className,\n )}\n type=\"button\"\n {...props}\n >\n {children}\n </button>\n );\n};\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface DividerProps extends React.HTMLAttributes<HTMLDivElement> {\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport const Divider: React.FC<DividerProps> = ({\n orientation = 'horizontal',\n className,\n ...props\n}) => {\n return (\n <div\n className={cn(\n 'bg-[var(--border-color)]',\n orientation === 'horizontal' ? 'h-px w-full' : 'h-full w-px',\n className,\n )}\n role=\"separator\"\n {...props}\n />\n );\n};\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface EmptyStateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n action?: React.ReactNode;\n description?: React.ReactNode;\n icon?: React.ReactNode;\n title: React.ReactNode;\n}\n\nexport const EmptyState: React.FC<EmptyStateProps> = ({\n icon,\n title,\n description,\n action,\n className,\n ...props\n}) => {\n return (\n <div\n className={cn(\n 'grid justify-items-center gap-3 rounded-[var(--border-radius-lg)] border border-dashed border-[var(--border-color)] bg-[var(--bg-secondary)] p-6 text-center',\n className,\n )}\n {...props}\n >\n {icon && <div className=\"text-[var(--text-muted)]\">{icon}</div>}\n <h3 className=\"m-0 text-lg font-semibold text-[var(--text-primary)]\">{title}</h3>\n {description && (\n <p className=\"m-0 max-w-[30rem] text-sm text-[var(--text-secondary)]\">{description}</p>\n )}\n {action && <div className=\"mt-1\">{action}</div>}\n </div>\n );\n};\n","import type React from 'react';\nimport { useEffect, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface FooterProps {\n /** Classe CSS adicional */\n className?: string;\n /** Texto alternativo do logo */\n logoAlt?: string;\n /** Fallback textual — não utilizado no design padrão, mantido por compatibilidade */\n logoFallbackText?: string;\n /** URL de imagem para substituir o logo SVG padrão */\n logoSrc?: string;\n /** Texto antes do logo (ex.: \"Powered by\") */\n poweredByText?: string;\n}\n\nconst detectTheme = () => {\n if (typeof document === 'undefined') return 'light';\n return document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light';\n};\n\ninterface SbkLogoProps {\n color: string;\n height?: number;\n opacity?: number;\n}\n\nconst SbkLogo: React.FC<SbkLogoProps> = ({ color, height = 28, opacity = 1 }) => {\n const aspect = 541.7 / 258.08;\n const width = Math.round(height * aspect);\n return (\n <svg\n aria-label=\"SBK\"\n height={height}\n style={{ opacity }}\n viewBox=\"39.15 180.84 541.7 258.08\"\n width={width}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g transform=\"translate(-49, 122)\">\n <g>\n <g>\n {/* S */}\n <path\n d=\"m225.13 266.26c-27.48 0-47.67-12.07-50.38-41.01h14.16c0.62 21.44 17.69 29.56 36.85 29.56 18.11 0 39.14-7.91 39.14-29.14 0-16.24-13.12-23.74-32.48-29.99l-11.03-3.53c-24.36-7.71-42.27-16.66-42.27-40.19 0-28.1 24.78-39.97 49.76-39.97 22.9 0 46.64 8.54 47.05 35.18h-13.95c-1.87-18.32-15.82-23.94-32.47-23.94-17.29 0-36.65 7.71-36.65 27.69 0 14.78 11.04 22.28 34.36 29.77l12.49 3.96c24.36 7.7 38.3 15.82 38.93 38.73 0 30.18-26.65 42.88-53.51 42.88z\"\n fill={color}\n stroke={color}\n strokeMiterlimit={10}\n strokeWidth={2}\n />\n {/* B */}\n <path\n d=\"m351.42 264.39h-41.43v-150.53h41.43c8.53 0 17.9-0.2 26.23 2.09 16.24 4.58 27.48 17.9 27.48 35.18 0 18.74-10.41 29.98-27.9 34.56 20.82 2.71 34.15 15.2 34.15 36.85 0 34.56-31.86 41.85-59.96 41.85zm8.12-138.45h-36.02v56.49h32.06c19.16 0 34.98-8.81 34.98-30.26 0-18.74-14.16-26.23-31.02-26.23zm-1.46 63.19h-34.56v63.18h26.65c21.86 0 46.84-1.45 46.84-29.98 0-24.77-18.11-33.2-38.93-33.2z\"\n fill={color}\n fillRule=\"evenodd\"\n stroke={color}\n strokeMiterlimit={10}\n strokeWidth={2}\n />\n {/* K */}\n <path\n d=\"m443.77 264.39v-150.53h13.53v150.53zm88.07 0l-73.7-81.61 67.03-68.92h18.12l-68.91 67.88 75.99 82.65z\"\n fill={color}\n stroke={color}\n strokeMiterlimit={10}\n strokeWidth={2}\n />\n </g>\n <g>\n {/* Arco superior */}\n <path\n d=\"m99.09 118.17l-0.21 57.98-9.73 0.24 0.56-62.81c0.26-29.03 26.91-53.16 56.3-53.26l151.74-0.48c0.62 3.58 0.63 6.35 0.05 9.92l-150.35 0.22c-26.28 0.04-48.26 21.9-48.36 48.19z\"\n fill={color}\n />\n {/* Arco inferior */}\n <path\n d=\"m419.9 315.79l0.22-9.33 149.3-0.15c25.73-0.02 48.97-20.27 49.14-45.96l0.4-60.49q4.64-0.28 9.57-0.07l0.32 52.61c0.21 33.16-23.62 63.29-57.93 63.33l-135.88 0.19z\"\n fill={color}\n />\n </g>\n </g>\n </g>\n </svg>\n );\n};\n\nexport const Footer: React.FC<FooterProps> = ({\n poweredByText = 'Powered by',\n logoSrc,\n logoAlt = 'SBK',\n className = '',\n}) => {\n const [theme, setTheme] = useState<'light' | 'dark'>(() => detectTheme() as 'light' | 'dark');\n\n useEffect(() => {\n const sync = () => setTheme(detectTheme() as 'light' | 'dark');\n sync();\n if (typeof MutationObserver === 'undefined') return;\n const observer = new MutationObserver(sync);\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme'] });\n return () => observer.disconnect();\n }, []);\n\n const isDark = theme === 'dark';\n\n return (\n <footer\n className={cn(\n 'relative z-[1] w-full shrink-0 box-border',\n 'flex items-center justify-center',\n 'py-5 px-14',\n 'border-t border-[var(--border-color)]',\n 'bg-[var(--bg-secondary)]',\n className,\n )}\n >\n <div className=\"flex items-center gap-2.5\">\n {poweredByText && (\n <span className=\"font-primary text-xs font-normal text-[var(--text-muted)]\">\n {poweredByText}\n </span>\n )}\n\n {logoSrc ? (\n <img\n alt={logoAlt}\n src={logoSrc}\n className=\"h-7 w-auto object-contain\"\n style={{ opacity: isDark ? 0.65 : 0.75 }}\n />\n ) : (\n <SbkLogo\n color={isDark ? '#ffffff' : '#1F3A3A'}\n height={28}\n opacity={isDark ? 0.65 : 0.75}\n />\n )}\n </div>\n </footer>\n );\n};\n\nFooter.displayName = 'Footer';\n","import type React from 'react';\nimport { useEffect, useState } from 'react';\nimport { cn } from '../../utils/cn';\nimport type { Theme } from '../../theme/ThemeProvider';\n\nexport interface HeaderProps {\n /** Classe CSS adicional */\n className?: string;\n /** Texto alternativo do logo */\n logoAlt?: string;\n /** URL de imagem para substituir o logo SVG padrão (tema escuro) */\n logoDarkSrc?: string;\n /** URL de imagem para substituir o logo SVG padrão (tema claro) */\n logoSrc?: string;\n /** Callback ao clicar no ícone de menu (hamburger) */\n onMenuClick?: () => void;\n /** Callback ao clicar na área do logo/título */\n onLogoClick?: () => void;\n /** Conteúdo da área direita (pills de idioma/tema, etc.) */\n rightContent?: React.ReactNode;\n /** Exibe o ícone hamburger à esquerda — padrão: true */\n showMenuIcon?: boolean;\n /** Subtítulo abaixo do título */\n subtitle?: React.ReactNode;\n /** Tema opcional para escolher o logo correto sem depender do ThemeProvider */\n theme?: Theme;\n /** Título exibido ao lado do logo */\n title?: React.ReactNode;\n /** Iniciais do usuário no avatar circular turquesa (ex.: \"CF\") */\n userInitials?: string;\n}\n\nconst detectTheme = (): Theme => {\n if (typeof document === 'undefined') return 'light';\n return document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light';\n};\n\nconst SbkLogoWhite: React.FC<{ height?: number }> = ({ height = 36 }) => {\n const aspect = 541.7 / 258.08;\n const width = Math.round(height * aspect);\n return (\n <svg\n aria-label=\"SBK\"\n height={height}\n viewBox=\"39.15 180.84 541.7 258.08\"\n width={width}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g transform=\"translate(-49, 122)\">\n <g>\n <g>\n {/* S */}\n <path\n d=\"m225.13 266.26c-27.48 0-47.67-12.07-50.38-41.01h14.16c0.62 21.44 17.69 29.56 36.85 29.56 18.11 0 39.14-7.91 39.14-29.14 0-16.24-13.12-23.74-32.48-29.99l-11.03-3.53c-24.36-7.71-42.27-16.66-42.27-40.19 0-28.1 24.78-39.97 49.76-39.97 22.9 0 46.64 8.54 47.05 35.18h-13.95c-1.87-18.32-15.82-23.94-32.47-23.94-17.29 0-36.65 7.71-36.65 27.69 0 14.78 11.04 22.28 34.36 29.77l12.49 3.96c24.36 7.7 38.3 15.82 38.93 38.73 0 30.18-26.65 42.88-53.51 42.88z\"\n fill=\"#ffffff\"\n stroke=\"#ffffff\"\n strokeMiterlimit={10}\n strokeWidth={2}\n />\n {/* B */}\n <path\n d=\"m351.42 264.39h-41.43v-150.53h41.43c8.53 0 17.9-0.2 26.23 2.09 16.24 4.58 27.48 17.9 27.48 35.18 0 18.74-10.41 29.98-27.9 34.56 20.82 2.71 34.15 15.2 34.15 36.85 0 34.56-31.86 41.85-59.96 41.85zm8.12-138.45h-36.02v56.49h32.06c19.16 0 34.98-8.81 34.98-30.26 0-18.74-14.16-26.23-31.02-26.23zm-1.46 63.19h-34.56v63.18h26.65c21.86 0 46.84-1.45 46.84-29.98 0-24.77-18.11-33.2-38.93-33.2z\"\n fill=\"#ffffff\"\n fillRule=\"evenodd\"\n stroke=\"#ffffff\"\n strokeMiterlimit={10}\n strokeWidth={2}\n />\n {/* K */}\n <path\n d=\"m443.77 264.39v-150.53h13.53v150.53zm88.07 0l-73.7-81.61 67.03-68.92h18.12l-68.91 67.88 75.99 82.65z\"\n fill=\"#ffffff\"\n stroke=\"#ffffff\"\n strokeMiterlimit={10}\n strokeWidth={2}\n />\n </g>\n <g>\n {/* Arco superior */}\n <path\n d=\"m99.09 118.17l-0.21 57.98-9.73 0.24 0.56-62.81c0.26-29.03 26.91-53.16 56.3-53.26l151.74-0.48c0.62 3.58 0.63 6.35 0.05 9.92l-150.35 0.22c-26.28 0.04-48.26 21.9-48.36 48.19z\"\n fill=\"#ffffff\"\n />\n {/* Arco inferior */}\n <path\n d=\"m419.9 315.79l0.22-9.33 149.3-0.15c25.73-0.02 48.97-20.27 49.14-45.96l0.4-60.49q4.64-0.28 9.57-0.07l0.32 52.61c0.21 33.16-23.62 63.29-57.93 63.33l-135.88 0.19z\"\n fill=\"#ffffff\"\n />\n </g>\n </g>\n </g>\n </svg>\n );\n};\n\nconst HamburgerIcon: React.FC<{ onClick?: () => void }> = ({ onClick }) => (\n <button\n aria-label=\"Abrir menu\"\n onClick={onClick}\n type=\"button\"\n className={cn(\n 'flex flex-col gap-1 shrink-0 bg-transparent border-none p-1.5',\n onClick ? 'cursor-pointer' : 'cursor-default',\n )}\n >\n <span className=\"block w-5 h-0.5 bg-sbk-verde-vibrante rounded-[2px]\" />\n <span className=\"block w-5 h-0.5 bg-sbk-verde-vibrante rounded-[2px]\" />\n <span className=\"block w-5 h-0.5 bg-sbk-verde-vibrante rounded-[2px]\" />\n </button>\n);\n\nexport const Header: React.FC<HeaderProps> = ({\n logoSrc,\n logoDarkSrc,\n logoAlt = 'SBK',\n title,\n subtitle,\n theme,\n onLogoClick,\n onMenuClick,\n rightContent,\n showMenuIcon = true,\n userInitials,\n className = '',\n}) => {\n const [resolvedTheme, setResolvedTheme] = useState<Theme>(() => theme ?? detectTheme());\n\n const logoSrcResolved = resolvedTheme === 'dark' && logoDarkSrc ? logoDarkSrc : logoSrc;\n\n useEffect(() => {\n if (theme) {\n setResolvedTheme(theme);\n return;\n }\n const syncTheme = () => setResolvedTheme(detectTheme());\n syncTheme();\n if (typeof MutationObserver === 'undefined') return;\n const observer = new MutationObserver(syncTheme);\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme'] });\n return () => observer.disconnect();\n }, [theme]);\n\n const handleLogoKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') onLogoClick?.();\n };\n\n return (\n <header\n className={cn(\n 'sticky top-0 z-[1000] w-full h-16 shrink-0 box-border',\n 'bg-sbk-verde-profundo',\n 'flex items-center justify-between',\n 'px-14',\n className,\n )}\n >\n {/* ── Esquerda: hamburger + logo ── */}\n <div className=\"flex items-center gap-3 min-w-0\">\n {showMenuIcon && <HamburgerIcon onClick={onMenuClick} />}\n\n <div\n onClick={onLogoClick}\n onKeyDown={onLogoClick ? handleLogoKeyDown : undefined}\n role={onLogoClick ? 'button' : undefined}\n className={cn(\n 'flex items-center gap-2.5 select-none',\n onLogoClick ? 'cursor-pointer' : 'cursor-default',\n )}\n tabIndex={onLogoClick ? 0 : undefined}\n >\n {logoSrcResolved ? (\n <img\n alt={logoAlt}\n onError={(e) => {\n (e.target as HTMLImageElement).style.display = 'none';\n }}\n src={logoSrcResolved}\n className=\"h-9 w-auto object-contain shrink-0\"\n />\n ) : (\n <SbkLogoWhite height={36} />\n )}\n\n {(title || subtitle) && (\n <div className=\"flex flex-col gap-[1px]\">\n {title && (\n <span className=\"font-logo text-[1.125rem] font-semibold text-white leading-[1.2] tracking-[0.02em]\">\n {title}\n </span>\n )}\n {subtitle && (\n <span className=\"font-primary text-[11px] font-normal text-white/45 leading-[1.3]\">\n {subtitle}\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* ── Direita: pills + avatar ── */}\n <div className=\"flex items-center gap-2 shrink-0\">\n {rightContent}\n {userInitials && (\n <div\n aria-label={`Usuário: ${userInitials}`}\n className=\"w-9 h-9 rounded-full bg-sbk-verde-vibrante flex items-center justify-center text-white font-primary font-semibold text-[13px] shrink-0 select-none\"\n >\n {userInitials}\n </div>\n )}\n </div>\n </header>\n );\n};\n\nHeader.displayName = 'Header';\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\n error?: string;\n fullWidth?: boolean;\n helperText?: string;\n label?: string;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n label,\n error,\n helperText,\n leftIcon,\n rightIcon,\n fullWidth = false,\n size = 'md',\n className,\n id,\n ...props\n },\n ref,\n ) => {\n const inputId = id || `input-${Math.random().toString(36).substring(2, 9)}`;\n const hasError = !!error;\n\n const sizeClassMap: Record<NonNullable<InputProps['size']>, string> = {\n sm: 'min-h-8 px-[var(--spacing-md)] py-[var(--spacing-sm)] text-[var(--font-size-sm)]',\n md: 'min-h-10 px-[var(--spacing-lg)] py-[var(--spacing-md)] text-[var(--font-size-base)]',\n lg: 'min-h-12 px-[var(--spacing-xl)] py-[var(--spacing-lg)] text-[var(--font-size-lg)]',\n };\n\n const combinedClass = cn(\n 'w-full rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] font-inherit text-[var(--md-on-surface)] outline-none transition-[var(--transition-all)] placeholder:text-[var(--md-on-surface-variant)] placeholder:opacity-70 hover:not-disabled:not-focus:border-[var(--border-color-hover)] focus:border-[var(--border-color-focus)] focus:[box-shadow:0_0_0_0.1875rem_rgba(47,93,140,0.15)] disabled:cursor-not-allowed disabled:bg-[var(--md-surface-container-high)] disabled:opacity-60',\n hasError &&\n 'border-[var(--md-error)] focus:border-[var(--md-error)] focus:[box-shadow:0_0_0_0.1875rem_rgba(186,26,26,0.2)]',\n sizeClassMap[size],\n // icon padding vem depois do sizeClassMap para não ser sobrescrito pelo px-* do tamanho\n leftIcon && 'pl-10',\n rightIcon && 'pr-10',\n className,\n );\n\n return (\n <div className={cn('flex flex-col gap-[var(--spacing-xs)]', fullWidth && 'w-full')}>\n {label && (\n <label\n className=\"text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]\"\n htmlFor={inputId}\n >\n {label}\n </label>\n )}\n <div className=\"group relative flex w-full items-center\">\n {leftIcon && (\n <span className=\"pointer-events-none absolute left-[var(--spacing-md)] z-[1] flex items-center justify-center text-[var(--md-on-surface-variant)] group-focus-within:text-[var(--md-primary)] [&_svg]:h-[1.125rem] [&_svg]:w-[1.125rem]\">\n {leftIcon}\n </span>\n )}\n <input\n ref={ref}\n aria-describedby={\n error ? `${inputId}-error` : helperText ? `${inputId}-helper` : undefined\n }\n aria-invalid={hasError ? true : undefined}\n className={combinedClass}\n id={inputId}\n {...props}\n />\n {rightIcon && (\n <span className=\"pointer-events-none absolute right-[var(--spacing-md)] z-[1] flex items-center justify-center text-[var(--md-on-surface-variant)] group-focus-within:text-[var(--md-primary)] [&_svg]:h-[1.125rem] [&_svg]:w-[1.125rem]\">\n {rightIcon}\n </span>\n )}\n </div>\n {error && (\n <span\n className=\"mt-[var(--spacing-xs)] block text-[var(--font-size-xs)] text-[var(--md-error)]\"\n id={`${inputId}-error`}\n role=\"alert\"\n >\n {error}\n </span>\n )}\n {helperText && !error && (\n <span\n className=\"mt-[var(--spacing-xs)] block text-[var(--font-size-xs)] text-[var(--md-on-surface-variant)]\"\n id={`${inputId}-helper`}\n >\n {helperText}\n </span>\n )}\n </div>\n );\n },\n);\n\nInput.displayName = 'Input';\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n}\n\nexport const Container: React.FC<ContainerProps> = ({ size = 'lg', className, ...props }) => {\n const sizeClass = {\n sm: 'max-w-2xl',\n md: 'max-w-4xl',\n lg: 'max-w-6xl',\n xl: 'max-w-7xl',\n full: 'max-w-none',\n }[size];\n return <div className={cn('mx-auto w-full px-4', sizeClass, className)} {...props} />;\n};\n\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n gap?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n}\n\nexport const Stack: React.FC<StackProps> = ({ gap = 'md', className, ...props }) => {\n const gapClass = {\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-3',\n lg: 'gap-4',\n xl: 'gap-6',\n }[gap];\n return <div className={cn('flex flex-col', gapClass, className)} {...props} />;\n};\n\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\n cols?: 1 | 2 | 3 | 4;\n gap?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n}\n\nexport const Grid: React.FC<GridProps> = ({ cols = 2, gap = 'md', className, ...props }) => {\n const colsClass = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-4',\n }[cols];\n const gapClass = {\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-3',\n lg: 'gap-4',\n xl: 'gap-6',\n }[gap];\n return <div className={cn('grid', colsClass, gapClass, className)} {...props} />;\n};\n","import type React from 'react';\nimport { useEffect, useRef } from 'react';\n\nexport interface ModalProps {\n children: React.ReactNode;\n className?: string;\n closeOnOverlayClick?: boolean;\n isOpen: boolean;\n onClose: () => void;\n showCloseButton?: boolean;\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n subtitle?: string;\n title?: string | React.ReactNode;\n}\n\nexport const Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n title,\n subtitle,\n children,\n size = 'md',\n showCloseButton = true,\n closeOnOverlayClick = true,\n className = '',\n}) => {\n const dialogRef = useRef<HTMLDivElement | null>(null);\n const lastFocusedElementRef = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n if (isOpen) {\n lastFocusedElementRef.current = document.activeElement as HTMLElement | null;\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n return () => {\n document.body.style.overflow = '';\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus();\n }\n };\n }, [isOpen]);\n\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n const handleTabTrap = (e: KeyboardEvent) => {\n if (e.key !== 'Tab' || !dialogRef.current || !isOpen) {\n return;\n }\n\n const focusable = dialogRef.current.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n\n if (focusable.length === 0) {\n e.preventDefault();\n return;\n }\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const active = document.activeElement as HTMLElement | null;\n\n if (e.shiftKey && active === first) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && active === last) {\n e.preventDefault();\n first.focus();\n }\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n document.addEventListener('keydown', handleTabTrap);\n requestAnimationFrame(() => {\n const initialTarget =\n dialogRef.current?.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n ) ?? dialogRef.current;\n initialTarget?.focus();\n });\n }\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.removeEventListener('keydown', handleTabTrap);\n };\n }, [isOpen, onClose]);\n\n if (!isOpen) {\n return null;\n }\n\n const handleOverlayClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (closeOnOverlayClick && e.target === e.currentTarget) {\n onClose();\n }\n };\n\n const handleOverlayKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (\n closeOnOverlayClick &&\n (e.key === 'Enter' || e.key === ' ') &&\n e.target === e.currentTarget\n ) {\n onClose();\n }\n };\n\n const sizeClassMap: Record<NonNullable<ModalProps['size']>, string> = {\n sm: 'max-w-[25rem]',\n md: 'max-w-[31.25rem]',\n lg: 'max-w-[43.75rem]',\n xl: 'max-w-[56.25rem]',\n full: 'max-h-[90vh] max-w-[90vw]',\n };\n const combinedClass = [\n 'relative z-[var(--z-index-modal)] m-auto flex w-full max-h-[90vh] max-w-full flex-col overflow-hidden rounded-[var(--border-radius-2xl)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] shadow-[var(--shadow-2xl)]',\n sizeClassMap[size],\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n aria-labelledby={title ? 'modal-title' : undefined}\n aria-modal=\"true\"\n className=\"fixed inset-0 z-[var(--z-index-modal-backdrop)] flex min-h-[100dvh] items-center justify-center overflow-y-auto bg-black/50 p-[var(--spacing-lg)] backdrop-blur-[8px]\"\n onClick={handleOverlayClick}\n onKeyDown={handleOverlayKeyDown}\n role=\"dialog\"\n >\n <div className={combinedClass} ref={dialogRef} tabIndex={-1}>\n {(title || subtitle || showCloseButton) && (\n <div className=\"flex shrink-0 items-start justify-between gap-[var(--spacing-lg)] border-b border-[var(--md-outline-variant)] p-[var(--spacing-2xl)]\">\n {(title || subtitle) && (\n <div className=\"flex-1\">\n {title && (\n <h2\n className=\"mb-[var(--spacing-xs)] mt-0 text-[var(--font-size-2xl)] font-[var(--font-weight-semibold)] leading-[var(--line-height-tight)] text-[var(--md-on-surface)]\"\n id=\"modal-title\"\n >\n {title}\n </h2>\n )}\n {subtitle && (\n <p className=\"m-0 text-[var(--font-size-base)] leading-[var(--line-height-normal)] text-[var(--md-on-surface-variant)]\">\n {subtitle}\n </p>\n )}\n </div>\n )}\n {showCloseButton && (\n <button\n aria-label=\"Fechar modal\"\n className=\"flex h-9 w-9 shrink-0 items-center justify-center rounded-[var(--border-radius-md)] border-0 bg-[var(--md-surface-container-high)] text-[var(--md-on-surface)] transition-[var(--transition-all)] hover:bg-[color:color-mix(in_srgb,var(--md-error)_15%,var(--md-surface))] hover:text-[var(--md-error)]\"\n onClick={onClose}\n type=\"button\"\n >\n <svg\n fill=\"none\"\n className=\"h-5 w-5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n >\n <line x1=\"18\" x2=\"6\" y1=\"6\" y2=\"18\" />\n <line x1=\"6\" x2=\"18\" y1=\"6\" y2=\"18\" />\n </svg>\n </button>\n )}\n </div>\n )}\n <div className=\"flex min-h-0 flex-1 flex-col overflow-x-hidden overflow-y-auto p-[var(--spacing-2xl)]\">\n {children}\n </div>\n </div>\n </div>\n );\n};\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface SidebarProps extends React.HTMLAttributes<HTMLElement> {}\nexport const Sidebar: React.FC<SidebarProps> = ({ className, ...props }) => (\n <aside\n className={cn(\n 'h-full rounded-[var(--border-radius-lg)] border border-[var(--border-color)] bg-[var(--bg-secondary)] p-4',\n className,\n )}\n {...props}\n />\n);\n\nexport interface TopbarProps extends React.HTMLAttributes<HTMLElement> {}\nexport const Topbar: React.FC<TopbarProps> = ({ className, ...props }) => (\n <header\n className={cn(\n 'flex min-h-14 items-center justify-between border-b border-[var(--border-color)] bg-[var(--bg-secondary)] px-4',\n className,\n )}\n {...props}\n />\n);\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface PaginationProps {\n currentPage: number;\n onPageChange: (page: number) => void;\n totalPages: number;\n}\n\nexport const Pagination: React.FC<PaginationProps> = ({\n currentPage,\n totalPages,\n onPageChange,\n}) => {\n if (totalPages <= 1) {\n return null;\n }\n\n const pages = Array.from({ length: totalPages }, (_, i) => i + 1);\n\n return (\n <nav aria-label=\"Paginação\" className=\"flex flex-wrap items-center gap-1\">\n <button\n className=\"rounded-[var(--border-radius-sm)] border border-[var(--border-color)] px-2 py-1 text-sm disabled:opacity-50\"\n disabled={currentPage === 1}\n onClick={() => onPageChange(Math.max(currentPage - 1, 1))}\n type=\"button\"\n >\n Anterior\n </button>\n {pages.map((page) => (\n <button\n className={cn(\n 'rounded-[var(--border-radius-sm)] border px-2.5 py-1 text-sm',\n page === currentPage\n ? 'border-[var(--md-primary)] bg-[var(--md-primary)] text-[var(--md-on-primary)]'\n : 'border-[var(--border-color)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]',\n )}\n key={page}\n onClick={() => onPageChange(page)}\n type=\"button\"\n >\n {page}\n </button>\n ))}\n <button\n className=\"rounded-[var(--border-radius-sm)] border border-[var(--border-color)] px-2 py-1 text-sm disabled:opacity-50\"\n disabled={currentPage === totalPages}\n onClick={() => onPageChange(Math.min(currentPage + 1, totalPages))}\n type=\"button\"\n >\n Próxima\n </button>\n </nav>\n );\n};\n","import type React from 'react';\n\nexport interface ParagraphProps extends React.HTMLAttributes<HTMLParagraphElement> {\n align?: 'left' | 'center' | 'right' | 'justify';\n as?: 'p' | 'span' | 'div';\n children: React.ReactNode;\n italic?: boolean;\n muted?: boolean;\n size?: 'xs' | 'sm' | 'md' | 'lg';\n weight?: 'light' | 'normal' | 'medium';\n}\n\nexport const Paragraph: React.FC<ParagraphProps> = ({\n as = 'p',\n size = 'md',\n weight = 'normal',\n align = 'left',\n muted = false,\n italic = false,\n children,\n className = '',\n ...props\n}) => {\n const Component = as;\n const sizeClassMap: Record<NonNullable<ParagraphProps['size']>, string> = {\n xs: 'text-[var(--font-size-xs)] leading-[var(--line-height-normal)]',\n sm: 'text-[var(--font-size-sm)] leading-[var(--line-height-normal)]',\n md: 'text-[var(--font-size-base)] leading-[var(--line-height-relaxed)]',\n lg: 'text-[var(--font-size-lg)] leading-[var(--line-height-loose)]',\n };\n const weightClassMap: Record<NonNullable<ParagraphProps['weight']>, string> = {\n light: 'font-[var(--font-weight-light)]',\n normal: 'font-[var(--font-weight-normal)]',\n medium: 'font-[var(--font-weight-medium)]',\n };\n const alignClassMap: Record<NonNullable<ParagraphProps['align']>, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n justify: 'text-justify',\n };\n const combinedClass = [\n 'm-0 text-[var(--text-primary)] transition-[var(--transition-colors)]',\n sizeClassMap[size],\n weightClassMap[weight],\n alignClassMap[align],\n italic ? 'italic' : 'not-italic',\n muted ? 'text-[var(--text-muted)]' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <Component className={combinedClass} {...props}>\n {children}\n </Component>\n );\n};\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface PageHeaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n actions?: React.ReactNode;\n subtitle?: React.ReactNode;\n title: React.ReactNode;\n}\n\nexport const PageHeader: React.FC<PageHeaderProps> = ({\n title,\n subtitle,\n actions,\n className,\n ...props\n}) => {\n return (\n <header\n className={cn(\n 'grid gap-3 rounded-[var(--border-radius-lg)] border border-[var(--border-color)] bg-[var(--bg-secondary)] p-5 shadow-[var(--shadow-sm)]',\n className,\n )}\n {...props}\n >\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"grid gap-1\">\n <h1 className=\"m-0 text-2xl font-bold text-[var(--text-primary)]\">{title}</h1>\n {subtitle && <p className=\"m-0 text-sm text-[var(--text-secondary)]\">{subtitle}</p>}\n </div>\n {actions && <div className=\"flex items-center gap-2\">{actions}</div>}\n </div>\n </header>\n );\n};\n","import type React from 'react';\nimport { useEffect, useId, useRef, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface PopoverProps {\n children: React.ReactNode;\n content: React.ReactNode;\n defaultOpen?: boolean;\n}\n\nexport const Popover: React.FC<PopoverProps> = ({ children, content, defaultOpen = false }) => {\n const [open, setOpen] = useState(defaultOpen);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const panelRef = useRef<HTMLDivElement | null>(null);\n const popoverId = useId();\n\n useEffect(() => {\n const onClickOutside = (event: MouseEvent) => {\n if (!containerRef.current?.contains(event.target as Node)) {\n setOpen(false);\n }\n };\n document.addEventListener('mousedown', onClickOutside);\n return () => document.removeEventListener('mousedown', onClickOutside);\n }, []);\n\n useEffect(() => {\n if (!open || !panelRef.current) {\n return;\n }\n\n const focusable = panelRef.current.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n focusable?.focus();\n }, [open]);\n\n useEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setOpen(false);\n triggerRef.current?.focus();\n }\n };\n if (open) {\n document.addEventListener('keydown', onKeyDown);\n }\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [open]);\n\n return (\n <div className=\"relative inline-flex\" ref={containerRef}>\n <button\n aria-controls={open ? popoverId : undefined}\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n className=\"inline-flex\"\n onClick={() => setOpen((prev) => !prev)}\n ref={triggerRef}\n type=\"button\"\n >\n {children}\n </button>\n {open && (\n <div\n className={cn(\n 'absolute left-1/2 top-full z-30 mt-2 w-max -translate-x-1/2 rounded-[var(--border-radius-md)] border border-[var(--border-color)] bg-[var(--bg-secondary)] p-3 shadow-[var(--shadow-md)]',\n )}\n id={popoverId}\n ref={panelRef}\n role=\"dialog\"\n tabIndex={-1}\n >\n {content}\n </div>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface RadioProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n helperText?: string;\n label?: string;\n}\n\nexport const Radio = React.forwardRef<HTMLInputElement, RadioProps>(\n ({ label, helperText, className, id, ...props }, ref) => {\n const inputId = id || `radio-${Math.random().toString(36).slice(2, 9)}`;\n\n return (\n <label\n className={cn('inline-flex cursor-pointer items-start gap-2', className)}\n htmlFor={inputId}\n >\n <input\n ref={ref}\n className=\"mt-0.5 h-4 w-4 border-[var(--md-outline-variant)] bg-[var(--md-surface)] text-[var(--md-primary)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--border-color-focus)]\"\n id={inputId}\n type=\"radio\"\n {...props}\n />\n <span className=\"grid gap-0.5\">\n {label && <span className=\"text-sm text-[var(--text-primary)]\">{label}</span>}\n {helperText && <span className=\"text-xs text-[var(--text-muted)]\">{helperText}</span>}\n </span>\n </label>\n );\n },\n);\n\nRadio.displayName = 'Radio';\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface SectionHeaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n actions?: React.ReactNode;\n subtitle?: React.ReactNode;\n title: React.ReactNode;\n}\n\nexport const SectionHeader: React.FC<SectionHeaderProps> = ({\n title,\n subtitle,\n actions,\n className,\n ...props\n}) => {\n return (\n <div className={cn('flex items-start justify-between gap-4', className)} {...props}>\n <div className=\"grid gap-1\">\n <h2 className=\"m-0 text-xl font-semibold text-[var(--text-primary)]\">{title}</h2>\n {subtitle && <p className=\"m-0 text-sm text-[var(--text-secondary)]\">{subtitle}</p>}\n </div>\n {actions && <div className=\"flex shrink-0 items-center gap-2\">{actions}</div>}\n </div>\n );\n};\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface SelectOption {\n label: string;\n value: string;\n}\n\nexport interface SelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'size'> {\n error?: string;\n helperText?: string;\n label?: string;\n options: SelectOption[];\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const Select = React.forwardRef<HTMLSelectElement, SelectProps>(\n ({ label, helperText, error, options, size = 'md', className, id, ...props }, ref) => {\n const selectId = id || `select-${Math.random().toString(36).slice(2, 9)}`;\n\n const sizeClass = {\n sm: 'min-h-8 px-3 py-1.5 text-sm',\n md: 'min-h-10 px-3.5 py-2 text-base',\n lg: 'min-h-12 px-4 py-3 text-lg',\n }[size];\n\n return (\n <div className=\"grid gap-1\">\n {label && (\n <label\n className=\"text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]\"\n htmlFor={selectId}\n >\n {label}\n </label>\n )}\n <select\n ref={ref}\n aria-describedby={\n error ? `${selectId}-error` : helperText ? `${selectId}-helper` : undefined\n }\n aria-invalid={error ? true : undefined}\n className={cn(\n 'w-full rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] text-[var(--md-on-surface)] outline-none transition focus:border-[var(--border-color-focus)] focus:[box-shadow:0_0_0_0.1875rem_rgba(47,93,140,0.15)] disabled:cursor-not-allowed disabled:opacity-60',\n error && 'border-[var(--md-error)]',\n sizeClass,\n className,\n )}\n id={selectId}\n {...props}\n >\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n {error ? (\n <span className=\"text-xs text-[var(--md-error)]\" id={`${selectId}-error`} role=\"alert\">\n {error}\n </span>\n ) : (\n helperText && (\n <span className=\"text-xs text-[var(--md-on-surface-variant)]\" id={`${selectId}-helper`}>\n {helperText}\n </span>\n )\n )}\n </div>\n );\n },\n);\n\nSelect.displayName = 'Select';\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n circle?: boolean;\n height?: string;\n width?: string;\n}\n\nexport const Skeleton: React.FC<SkeletonProps> = ({\n circle = false,\n width,\n height,\n className,\n style,\n ...props\n}) => {\n return (\n <div\n className={cn(\n 'animate-pulse bg-[var(--md-surface-container-high)]',\n circle ? 'rounded-full' : 'rounded-[var(--border-radius-sm)]',\n className,\n )}\n style={{ width, height, ...style }}\n {...props}\n />\n );\n};\n","import type React from 'react';\n\nexport interface SubtitleProps extends React.HTMLAttributes<HTMLParagraphElement> {\n align?: 'left' | 'center' | 'right';\n as?: 'p' | 'span' | 'div';\n children: React.ReactNode;\n italic?: boolean;\n muted?: boolean;\n size?: 'xs' | 'sm' | 'md' | 'lg';\n weight?: 'normal' | 'medium' | 'semibold';\n}\n\nexport const Subtitle: React.FC<SubtitleProps> = ({\n as = 'p',\n size = 'md',\n weight = 'normal',\n align = 'left',\n muted = false,\n italic = false,\n children,\n className = '',\n ...props\n}) => {\n const Component = as;\n const sizeClassMap: Record<NonNullable<SubtitleProps['size']>, string> = {\n xs: 'text-[var(--font-size-xs)]',\n sm: 'text-[var(--font-size-sm)]',\n md: 'text-[var(--font-size-base)]',\n lg: 'text-[var(--font-size-lg)]',\n };\n const weightClassMap: Record<NonNullable<SubtitleProps['weight']>, string> = {\n normal: 'font-[var(--font-weight-normal)]',\n medium: 'font-[var(--font-weight-medium)]',\n semibold: 'font-[var(--font-weight-semibold)]',\n };\n const alignClassMap: Record<NonNullable<SubtitleProps['align']>, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n };\n const combinedClass = [\n 'm-0 leading-[var(--line-height-normal)] text-[var(--text-secondary)] transition-[var(--transition-colors)]',\n sizeClassMap[size],\n weightClassMap[weight],\n alignClassMap[align],\n italic ? 'italic' : 'not-italic',\n muted ? 'text-[var(--text-muted)] opacity-80' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <Component className={combinedClass} {...props}>\n {children}\n </Component>\n );\n};\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface SwitchProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'onChange'\n> {\n checked?: boolean;\n label?: string;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nexport const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(\n ({ checked = false, onCheckedChange, label, className, ...props }, ref) => {\n return (\n <div className={cn('inline-flex items-center gap-2', className)}>\n <button\n ref={ref}\n aria-checked={checked}\n className={cn(\n 'relative inline-flex h-6 w-11 items-center rounded-full border transition focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--border-color-focus)]',\n checked\n ? 'border-[var(--md-primary)] bg-[var(--md-primary)]'\n : 'border-[var(--md-outline)] bg-[var(--md-surface-container-high)]',\n )}\n onClick={() => onCheckedChange?.(!checked)}\n role=\"switch\"\n type=\"button\"\n {...props}\n >\n <span\n className={cn(\n 'inline-block h-5 w-5 rounded-full bg-[var(--md-surface)] shadow transition',\n checked ? 'translate-x-5' : 'translate-x-0.5',\n )}\n />\n </button>\n {label && <span className=\"text-sm text-[var(--text-primary)]\">{label}</span>}\n </div>\n );\n },\n);\n\nSwitch.displayName = 'Switch';\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TagProps extends React.HTMLAttributes<HTMLSpanElement> {\n onRemove?: () => void;\n}\n\nexport const Tag: React.FC<TagProps> = ({ className, children, onRemove, ...props }) => {\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-[var(--border-radius-sm)] border border-[var(--border-color)] bg-[var(--bg-secondary)] px-2.5 py-1 text-xs text-[var(--text-secondary)]',\n className,\n )}\n {...props}\n >\n {children}\n {onRemove && (\n <button\n aria-label=\"Remover tag\"\n className=\"inline-flex h-4 w-4 items-center justify-center rounded-full text-[var(--text-muted)] transition hover:bg-[var(--bg-hover)] hover:text-[var(--text-primary)]\"\n onClick={onRemove}\n type=\"button\"\n >\n ×\n </button>\n )}\n </span>\n );\n};\n","import type React from 'react';\nimport { useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TabItem {\n content: React.ReactNode;\n id: string;\n label: string;\n}\n\nexport interface TabsProps {\n defaultTabId?: string;\n items: TabItem[];\n}\n\nexport const Tabs: React.FC<TabsProps> = ({ items, defaultTabId }) => {\n const [activeTab, setActiveTab] = useState(defaultTabId ?? items[0]?.id);\n const selected = items.find((item) => item.id === activeTab) ?? items[0];\n const selectedIndex = Math.max(\n 0,\n items.findIndex((item) => item.id === selected?.id),\n );\n\n const moveFocus = (nextIndex: number) => {\n const item = items[nextIndex];\n if (!item) {\n return;\n }\n setActiveTab(item.id);\n const tab = document.getElementById(`tab-${item.id}`);\n tab?.focus();\n };\n\n return (\n <div className=\"grid gap-3\">\n <div\n aria-orientation=\"horizontal\"\n className=\"inline-flex flex-wrap gap-1 rounded-[var(--border-radius-md)] bg-[var(--bg-tertiary)] p-1\"\n role=\"tablist\"\n >\n {items.map((item, index) => (\n <button\n aria-controls={`panel-${item.id}`}\n aria-selected={activeTab === item.id}\n className={cn(\n 'rounded-[var(--border-radius-sm)] px-3 py-1.5 text-sm transition',\n activeTab === item.id\n ? 'bg-[var(--bg-secondary)] text-[var(--text-primary)] shadow-[var(--shadow-xs)]'\n : 'text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]',\n )}\n id={`tab-${item.id}`}\n key={item.id}\n onClick={() => setActiveTab(item.id)}\n onKeyDown={(e) => {\n if (e.key === 'ArrowRight') {\n e.preventDefault();\n moveFocus((index + 1) % items.length);\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n moveFocus((index - 1 + items.length) % items.length);\n } else if (e.key === 'Home') {\n e.preventDefault();\n moveFocus(0);\n } else if (e.key === 'End') {\n e.preventDefault();\n moveFocus(items.length - 1);\n }\n }}\n role=\"tab\"\n tabIndex={index === selectedIndex ? 0 : -1}\n type=\"button\"\n >\n {item.label}\n </button>\n ))}\n </div>\n <div\n aria-labelledby={`tab-${selected?.id ?? ''}`}\n className=\"rounded-[var(--border-radius-md)] border border-[var(--border-color)] bg-[var(--bg-secondary)] p-4\"\n id={`panel-${selected?.id ?? ''}`}\n role=\"tabpanel\"\n >\n {selected?.content}\n </div>\n </div>\n );\n};\n","import type React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TableProps extends React.TableHTMLAttributes<HTMLTableElement> {}\n\nexport const Table: React.FC<TableProps> = ({ className, children, ...props }) => {\n return (\n <div className=\"overflow-x-auto rounded-[var(--border-radius-md)] border border-[var(--border-color)]\">\n <table\n className={cn(\n 'w-full min-w-[36rem] border-collapse bg-[var(--bg-secondary)] text-left',\n className,\n )}\n {...props}\n >\n {children}\n </table>\n </div>\n );\n};\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n error?: string;\n helperText?: string;\n label?: string;\n}\n\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ label, helperText, error, className, id, ...props }, ref) => {\n const textareaId = id || `textarea-${Math.random().toString(36).slice(2, 9)}`;\n\n return (\n <div className=\"grid gap-1\">\n {label && (\n <label\n className=\"text-[var(--font-size-sm)] font-[var(--font-weight-semibold)] text-[var(--md-on-surface)]\"\n htmlFor={textareaId}\n >\n {label}\n </label>\n )}\n <textarea\n ref={ref}\n aria-describedby={\n error ? `${textareaId}-error` : helperText ? `${textareaId}-helper` : undefined\n }\n aria-invalid={error ? true : undefined}\n className={cn(\n 'min-h-24 w-full rounded-[var(--border-radius-md)] border border-[var(--md-outline-variant)] bg-[var(--md-surface)] px-3.5 py-2 text-[var(--md-on-surface)] outline-none transition placeholder:text-[var(--md-on-surface-variant)] focus:border-[var(--border-color-focus)] focus:[box-shadow:0_0_0_0.1875rem_rgba(47,93,140,0.15)] disabled:cursor-not-allowed disabled:opacity-60',\n error &&\n 'border-[var(--md-error)] focus:border-[var(--md-error)] focus:[box-shadow:0_0_0_0.1875rem_rgba(186,26,26,0.2)]',\n className,\n )}\n id={textareaId}\n {...props}\n />\n {error ? (\n <span className=\"text-xs text-[var(--md-error)]\" id={`${textareaId}-error`} role=\"alert\">\n {error}\n </span>\n ) : (\n helperText && (\n <span\n className=\"text-xs text-[var(--md-on-surface-variant)]\"\n id={`${textareaId}-helper`}\n >\n {helperText}\n </span>\n )\n )}\n </div>\n );\n },\n);\n\nTextarea.displayName = 'Textarea';\n","import type React from 'react';\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ToastProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n id?: string;\n description?: React.ReactNode;\n onDismiss?: () => void;\n title: React.ReactNode;\n tone?: 'info' | 'success' | 'warning' | 'error';\n}\n\nexport const Toast: React.FC<ToastProps> = ({\n tone = 'info',\n title,\n description,\n onDismiss,\n className,\n ...props\n}) => {\n const toneClass = {\n info: 'border-[var(--info-color)]/40',\n success: 'border-[var(--success-color)]/40',\n warning: 'border-[var(--warning-color)]/40',\n error: 'border-[var(--md-error)]/40',\n }[tone];\n const liveMode = tone === 'error' || tone === 'warning' ? 'assertive' : 'polite';\n const role = tone === 'error' || tone === 'warning' ? 'alert' : 'status';\n\n return (\n <div\n className={cn(\n 'w-[22rem] rounded-[var(--border-radius-md)] border bg-[var(--bg-secondary)] p-3 shadow-[var(--shadow-lg)]',\n toneClass,\n className,\n )}\n aria-atomic=\"true\"\n aria-live={liveMode}\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n onDismiss?.();\n }\n }}\n role={role}\n tabIndex={0}\n {...props}\n >\n <div className=\"flex items-start justify-between gap-2\">\n <p className=\"m-0 text-sm font-semibold text-[var(--text-primary)]\">{title}</p>\n {onDismiss && (\n <button\n aria-label=\"Fechar notificação\"\n className=\"inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-[var(--border-radius-sm)] text-[var(--text-secondary)] transition hover:bg-[var(--bg-hover)] hover:text-[var(--text-primary)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--border-color-focus)]\"\n onClick={onDismiss}\n type=\"button\"\n >\n <span aria-hidden>×</span>\n </button>\n )}\n </div>\n {description && <p className=\"mt-1 text-sm text-[var(--text-secondary)]\">{description}</p>}\n </div>\n );\n};\n\ninterface ToastContextValue {\n dismissToast: (id: string) => void;\n pushToast: (toast: Omit<ToastProps, 'id'> & { id?: string }) => void;\n toasts: Array<ToastProps & { id: string }>;\n}\n\nconst ToastContext = createContext<ToastContextValue | undefined>(undefined);\n\nexport interface ToastProviderProps {\n children: React.ReactNode;\n durationMs?: number;\n}\n\nexport const ToastProvider: React.FC<ToastProviderProps> = ({ children, durationMs = 4000 }) => {\n const [toasts, setToasts] = useState<Array<ToastProps & { id: string }>>([]);\n const timeoutIdsRef = useRef<Map<string, number>>(new Map());\n\n const dismissToast = useCallback((id: string) => {\n const timeoutId = timeoutIdsRef.current.get(id);\n if (timeoutId) {\n window.clearTimeout(timeoutId);\n timeoutIdsRef.current.delete(id);\n }\n setToasts((prev) => prev.filter((toast) => toast.id !== id));\n }, []);\n\n const pushToast = useCallback(\n (toast: Omit<ToastProps, 'id'> & { id?: string }) => {\n const id = toast.id ?? `toast-${Math.random().toString(36).slice(2, 9)}`;\n setToasts((prev) => [...prev, { ...toast, id }]);\n const timeoutId = window.setTimeout(() => dismissToast(id), durationMs);\n timeoutIdsRef.current.set(id, timeoutId);\n },\n [dismissToast, durationMs],\n );\n\n useEffect(() => {\n const ids = timeoutIdsRef.current;\n return () => {\n ids.forEach((timeoutId) => window.clearTimeout(timeoutId));\n ids.clear();\n };\n }, []);\n\n const value = useMemo(\n () => ({ toasts, pushToast, dismissToast }),\n [toasts, pushToast, dismissToast],\n );\n\n return (\n <ToastContext.Provider value={value}>\n {children}\n <ToastViewport />\n </ToastContext.Provider>\n );\n};\n\nexport const useToast = (): ToastContextValue => {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error('useToast must be used inside ToastProvider');\n }\n return context;\n};\n\nexport const ToastViewport: React.FC = () => {\n const context = useContext(ToastContext);\n if (!context || context.toasts.length === 0) {\n return null;\n }\n return (\n <div\n aria-label=\"Notificações\"\n className=\"pointer-events-none fixed bottom-4 right-4 z-[1200] grid gap-2\"\n role=\"region\"\n >\n {context.toasts.map((toast) => (\n <Toast\n key={toast.id}\n {...toast}\n className=\"pointer-events-auto\"\n onDismiss={() => context.dismissToast(toast.id)}\n />\n ))}\n </div>\n );\n};\n","import type React from 'react';\n\nexport interface TitleProps extends React.HTMLAttributes<HTMLHeadingElement> {\n align?: 'left' | 'center' | 'right';\n as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n children: React.ReactNode;\n gradient?: boolean;\n italic?: boolean;\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl';\n weight?: 'light' | 'normal' | 'medium' | 'semibold' | 'bold' | 'extrabold';\n}\n\nexport const Title: React.FC<TitleProps> = ({\n as = 'h1',\n size = '2xl',\n weight = 'bold',\n align = 'left',\n gradient = false,\n italic = false,\n children,\n className = '',\n ...props\n}) => {\n const Component = as;\n const sizeClassMap: Record<NonNullable<TitleProps['size']>, string> = {\n xs: 'text-[var(--font-size-sm)]',\n sm: 'text-[var(--font-size-base)]',\n md: 'text-[var(--font-size-lg)]',\n lg: 'text-[var(--font-size-xl)]',\n xl: 'text-[var(--font-size-2xl)]',\n '2xl': 'text-[var(--font-size-3xl)]',\n '3xl': 'text-[var(--font-size-4xl)]',\n '4xl': 'text-[3rem]',\n };\n const weightClassMap: Record<NonNullable<TitleProps['weight']>, string> = {\n light: 'font-[var(--font-weight-light)]',\n normal: 'font-[var(--font-weight-normal)]',\n medium: 'font-[var(--font-weight-medium)]',\n semibold: 'font-[var(--font-weight-semibold)]',\n bold: 'font-[var(--font-weight-bold)]',\n extrabold: 'font-extrabold',\n };\n const alignClassMap: Record<NonNullable<TitleProps['align']>, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n };\n const gradientClass = gradient\n ? 'bg-[linear-gradient(135deg,var(--text-primary)_0%,var(--primary-color)_50%,var(--secondary-color)_100%)] bg-clip-text text-transparent'\n : '';\n const combinedClass = [\n 'm-0 leading-[var(--line-height-tight)] text-[var(--text-primary)] transition-[var(--transition-colors)]',\n sizeClassMap[size],\n weightClassMap[weight],\n alignClassMap[align],\n italic ? 'italic' : 'not-italic',\n gradientClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <Component className={combinedClass} {...props}>\n {children}\n </Component>\n );\n};\n","import type React from 'react';\nimport { isValidElement, useId, useState } from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface TooltipProps {\n children: React.ReactNode;\n content: React.ReactNode;\n side?: 'top' | 'bottom';\n}\n\nexport const Tooltip: React.FC<TooltipProps> = ({ children, content, side = 'top' }) => {\n const [open, setOpen] = useState(false);\n const tooltipId = useId();\n const sideClass =\n side === 'top'\n ? 'bottom-full mb-2 left-1/2 -translate-x-1/2'\n : 'top-full mt-2 left-1/2 -translate-x-1/2';\n\n const triggerProps = {\n 'aria-describedby': tooltipId,\n onBlur: () => setOpen(false),\n onFocus: () => setOpen(true),\n onKeyDown: (event: React.KeyboardEvent) => {\n if (event.key === 'Escape') {\n setOpen(false);\n }\n },\n onMouseEnter: () => setOpen(true),\n onMouseLeave: () => setOpen(false),\n };\n\n const trigger = isValidElement(children) ? (\n <span className=\"inline-flex\" {...triggerProps}>\n {children}\n </span>\n ) : (\n <span className=\"inline-flex\" tabIndex={0} {...triggerProps}>\n {children}\n </span>\n );\n\n return (\n <span className=\"relative inline-flex\">\n {trigger}\n <span\n aria-hidden={!open}\n className={cn(\n 'pointer-events-none absolute z-20 whitespace-nowrap rounded bg-[var(--brand-cinza-escuro)] px-2 py-1 text-xs text-white shadow-[var(--shadow-sm)] transition',\n open ? 'opacity-100' : 'opacity-0',\n sideClass,\n )}\n id={tooltipId}\n role=\"tooltip\"\n >\n {content}\n </span>\n </span>\n );\n};\n","import { createContext, type ReactNode, useContext, useEffect, useState } from 'react';\n\nexport type Theme = 'light' | 'dark';\n\ninterface ThemeContextType {\n theme: Theme;\n toggleTheme: () => void;\n}\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\n\nexport const useTheme = (): ThemeContextType => {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n};\n\ninterface ThemeProviderProps {\n children: ReactNode;\n defaultTheme?: Theme;\n}\n\nexport const ThemeProvider = ({ children, defaultTheme = 'light' }: ThemeProviderProps) => {\n const [theme, setTheme] = useState<Theme>(() => {\n if (typeof window === 'undefined') {\n return defaultTheme;\n }\n const saved = window.localStorage.getItem('theme');\n return (saved as Theme) || defaultTheme;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return;\n }\n window.localStorage.setItem('theme', theme);\n document.documentElement.setAttribute('data-theme', theme);\n }, [theme]);\n\n const toggleTheme = (): void => {\n setTheme((prev) => (prev === 'dark' ? 'light' : 'dark'));\n };\n\n return <ThemeContext.Provider value={{ theme, toggleTheme }}>{children}</ThemeContext.Provider>;\n};\n"],"names":["cn","inputs","twMerge","clsx","Accordion","items","defaultOpenId","openId","setOpenId","useState","rootRef","useRef","jsx","item","isOpen","triggerId","panelId","jsxs","event","buttons","currentIndex","btn","_a","_b","_c","_d","prev","Breadcrumb","separator","className","props","index","isLast","Combobox","label","helperText","error","options","value","onChange","placeholder","disabled","query","setQuery","setIsOpen","activeIndex","setActiveIndex","containerRef","inputRef","listRef","selectedOption","o","filtered","displayValue","useEffect","handleClickOutside","e","handleSelect","option","handleKeyDown","i","inputId","listId","FileUpload","accept","multiple","maxSizeBytes","isDragging","setIsDragging","sizeError","setSizeError","handleFiles","fileList","files","oversized","f","mb","handleDragOver","handleDragLeave","handleDrop","displayError","NumberInput","React","size","min","max","step","id","defaultValue","ref","hasError","sizeClassMap","buttonSizeMap","numValue","handleDecrement","next","handleIncrement","handleChange","raw","Stepper","currentStep","orientation","isHorizontal","getStatus","connectorColor","isActive","status","Button","variant","compact","fullWidth","isLoading","leftIcon","rightIcon","children","palette","style","baseClass","focusClass","disabledClass","fullWidthClass","offWhiteBorderClass","variantClassMap","iconSizeClassMap","paletteVars","paletteStyle","combinedClass","Alert","title","tone","toneClass","Badge","sizeClass","Card","padding","hoverable","paddingClassMap","hoverableClass","Checkbox","Chip","selected","Divider","EmptyState","icon","description","action","detectTheme","SbkLogo","color","height","opacity","width","Footer","poweredByText","logoSrc","logoAlt","theme","setTheme","sync","observer","isDark","SbkLogoWhite","HamburgerIcon","onClick","Header","logoDarkSrc","subtitle","onLogoClick","onMenuClick","rightContent","showMenuIcon","userInitials","resolvedTheme","setResolvedTheme","logoSrcResolved","syncTheme","handleLogoKeyDown","Input","Container","Stack","gap","gapClass","Grid","cols","colsClass","Modal","onClose","showCloseButton","closeOnOverlayClick","dialogRef","lastFocusedElementRef","handleEscape","handleTabTrap","focusable","first","last","active","initialTarget","handleOverlayClick","handleOverlayKeyDown","Sidebar","Topbar","Pagination","currentPage","totalPages","onPageChange","pages","_","page","Paragraph","as","weight","align","muted","italic","Component","weightClassMap","alignClassMap","PageHeader","actions","Popover","content","defaultOpen","open","setOpen","triggerRef","panelRef","popoverId","useId","onClickOutside","onKeyDown","Radio","SectionHeader","Select","selectId","Skeleton","circle","Subtitle","Switch","checked","onCheckedChange","Tag","onRemove","Tabs","defaultTabId","activeTab","setActiveTab","selectedIndex","moveFocus","nextIndex","tab","Table","Textarea","textareaId","Toast","onDismiss","liveMode","role","ToastContext","createContext","ToastProvider","durationMs","toasts","setToasts","timeoutIdsRef","dismissToast","useCallback","timeoutId","toast","pushToast","ids","useMemo","ToastViewport","useToast","context","useContext","Title","gradient","gradientClass","Tooltip","side","tooltipId","sideClass","triggerProps","trigger","isValidElement","ThemeContext","useTheme","ThemeProvider","defaultTheme","toggleTheme"],"mappings":"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"}