@vector-business-services/cristal-ds-web 0.24.0 → 0.25.0
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.
- package/dist/index.cjs +60 -61
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +8 -0
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +7 -2
- package/dist/index.d.ts +7 -2
- package/dist/index.js +60 -61
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/core/Accordion/Accordion.tsx","../src/components/aria.ts","../src/components/popup.ts","../src/components/core/AutoComplete/AutoComplete.tsx","../src/components/core/Badge/Badge.tsx","../src/components/core/Button/Button.tsx","../src/components/core/Calendar/calendario.tsx","../src/components/core/Calendar/Calendar.tsx","../src/components/core/Card/Card.tsx","../src/components/core/Tooltip/Tooltip.tsx","../src/components/charts/Chart/Chart.tsx","../src/components/core/Checkbox/Checkbox.tsx","../src/components/core/Chip/Chip.tsx","../src/components/core/Menu/Menu.tsx","../src/components/core/ContextMenu/ContextMenu.tsx","../src/components/core/InputText/InputText.tsx","../src/components/core/RadioButton/RadioButton.tsx","../src/components/core/Calendar/periodos.ts","../src/components/core/Calendar/dataPicker.tsx","../src/components/core/DatePicker/DatePicker.tsx","../src/components/team/DateRangeButton/PainelDePeriodo.tsx","../src/components/team/DateRangeButton/DateRangeButton.tsx","../src/components/core/Divider/Divider.tsx","../src/components/core/IconButton/IconButton.tsx","../src/components/core/Drawer/Drawer.tsx","../src/components/core/Menubar/Menubar.tsx","../src/components/core/Tag/Tag.tsx","../src/components/core/MenuPrincipal/MenuPrincipal.tsx","../src/components/core/Message/Message.tsx","../src/components/core/Dialog/Dialog.tsx","../src/components/core/MultiSelect/MultiSelect.tsx","../src/components/core/PageHeader/PageHeader.tsx","../src/components/core/Select/Select.tsx","../src/components/core/Paginator/Paginator.tsx","../src/components/core/Panel/Panel.tsx","../src/components/core/ScrollPanel/ScrollPanel.tsx","../src/components/core/SelectButton/SelectButton.tsx","../src/components/core/Skeleton/Skeleton.tsx","../src/components/core/ToggleSwitch/ToggleSwitch.tsx","../src/components/core/Tabs/Tabs.tsx","../src/components/core/Table/Table.tsx","../src/components/core/Table/BotaoDeMenu.tsx","../src/components/core/Table/TableToolbar.tsx","../src/components/core/Table/TableRowActions.tsx","../src/components/core/Toast/Toast.tsx"],"names":["jsx","forwardRef","Accordion","useRef","useImperativeHandle","useState","abertos","Children","isValidElement","PrimeAccordion","CaretDown","CaretUp","PrimeAccordionTab","jsxs","AutoComplete","useId","classes","PrimeAutoComplete","WarningCircle","Info","Badge","PrimeBadge","Button","PrimeButton","addLocale","dia","CaretLeft","CaretRight","localeOption","PrimeCalendar","Card","PrimeCard","useEffect","PrimeTooltip","Chart","useLayoutEffect","useMemo","Fragment","Question","PrimeChart","Checkbox","useCallback","PrimeCheckbox","Check","Chip","X","PrimeChip","Menu","useContext","PrimeReactContext","CircleNotch","menu","PrimeMenu","PrimeReactProvider","ContextMenu","PrimeContextMenu","InputText","PrimeInputText","RadioButton","PrimeRadioButton","mesmoDia","CalendarDot","DateRangeButton","CalendarDots","OverlayPanel","Divider","PrimeDivider","IconButton","Drawer","Sidebar","ArrowLeft","Menubar","List","MagnifyingGlass","PrimeMenubar","Tag","PrimeTag","MenuPrincipal","DribbbleLogo","Warning","CheckCircle","XCircle","SealWarning","Message","PrimeMessage","Dialog","PrimeDialog","MultiSelect","options","PrimeMultiSelect","PageHeader","cloneElement","ArrowsInSimple","ArrowsOutSimple","TabMenu","Select","Dropdown","seta","CaretDoubleLeft","CaretDoubleRight","Paginator","PrimePaginator","Panel","PrimePanel","ScrollPanel","PrimeScrollPanel","SelectButton","PrimeSelectButton","Skeleton","PrimeSkeleton","ToggleSwitch","InputSwitch","Tabs","TabView","PrimeTabPanel","chave","PrimeColumn","Note","ArrowsInLineHorizontal","SortAscending","SortDescending","coluna","DataTable","DotsThreeVertical","setas","Trash","TableToolbar","Funnel","GearSix","SEVERITY","ICON","Toast","PrimeToast"],"mappings":"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","file":"index.cjs","sourcesContent":["import {\n Children,\n forwardRef,\n isValidElement,\n useImperativeHandle,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport {\n Accordion as PrimeAccordion,\n AccordionTab as PrimeAccordionTab,\n type AccordionPassThroughTransitionType,\n} from 'primereact/accordion';\nimport { CaretDown, CaretUp } from '@phosphor-icons/react';\nimport './Accordion.css';\n\n/** Um item (.Accordion Item no Figma) e o conteúdo dele. */\nexport interface AccordionTabProps {\n /** Título (Accordion Item Title no Figma). Com headerContent, não aparece. */\n header: string;\n /** Texto abaixo do título (Show Description no Figma). */\n description?: string;\n /** Cabeçalho livre no lugar do título e da descrição (Type=Custom no Figma). */\n headerContent?: ReactNode;\n disabled?: boolean;\n /** Conteúdo do item aberto (Accordion Item Body no Figma). */\n children?: ReactNode;\n}\n\n/** Só descreve o item: quem desenha é o Accordion. */\nexport function AccordionTab(_props: AccordionTabProps): null {\n return null;\n}\n\nexport interface AccordionProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Mais de um item aberto ao mesmo tempo. */\n multiple?: boolean;\n /**\n * Item(ns) aberto(s) (controlado): o índice, ou a lista com `multiple`; null fecha todos. Sem\n * ele, o Accordion controla sozinho e começa com o primeiro aberto, como nos exemplos do Figma.\n */\n activeIndex?: number | number[] | null;\n onTabChange?: (activeIndex: number | number[] | null) => void;\n /** Os itens, como `<AccordionTab>`. */\n children: ReactNode;\n id?: string;\n className?: string;\n}\n\n// Seta (Icon Button tertiary de 32px no Figma). É só visual: o botão é o cabeçalho inteiro.\nconst seta = (icon: ReactNode) => (\n <span className=\"cr-accordion__toggle\" aria-hidden=\"true\">\n {icon}\n </span>\n);\n\n// Base: Accordion do PrimeReact no modo unstyled (o p-accordion do PrimeNG da produção): abrir e\n// fechar (um ou vários, com multiple), o teclado (setas, Home e End entre os cabeçalhos; Enter e\n// Espaço abrem) e o cabeçalho como botão com aria-expanded ligado à região do conteúdo são do\n// Prime. Cada item vem de um <AccordionTab> do Cristal, com o título e a descrição do Figma (ou o\n// cabeçalho livre do Type=Custom) e a seta no fim. Abre e fecha pela altura, com a animação do tema do\n// Prime (o Figma não define).\n// A ref entrega a raiz.\nexport const Accordion = forwardRef<HTMLDivElement, AccordionProps>(function Accordion(\n { multiple = false, activeIndex, onTabChange, children, id, className, ...props },\n ref,\n) {\n const primeRef = useRef<PrimeAccordion>(null);\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLDivElement);\n\n // Com onTabChange o Prime trata os itens abertos como controlados: sem activeIndex, o Cristal\n // guarda.\n const [interno, setInterno] = useState<number | number[] | null>(multiple ? [0] : 0);\n const abertos = activeIndex === undefined ? interno : activeIndex;\n\n const tabs = Children.toArray(children).filter(\n (child): child is ReactElement<AccordionTabProps> => isValidElement(child),\n );\n\n return (\n <PrimeAccordion\n {...props}\n // O Accordion aceita unstyled como os outros, mas o d.ts do Prime 10 esqueceu de declarar.\n {...({ unstyled: true } as object)}\n ref={primeRef}\n id={id}\n multiple={multiple}\n activeIndex={abertos}\n onTabChange={(event) => {\n const index = event.index as number | number[] | null;\n setInterno(index);\n onTabChange?.(index);\n }}\n expandIcon={seta(<CaretDown />)}\n collapseIcon={seta(<CaretUp />)}\n pt={{ root: { className: ['cr-accordion', className].filter(Boolean).join(' ') } }}\n >\n {tabs.map((tab, index) => (\n <PrimeAccordionTab\n key={tab.key ?? index}\n header={tab.props.header}\n disabled={tab.props.disabled}\n headerTemplate={\n tab.props.headerContent ? (\n <span className=\"cr-accordion__custom\">{tab.props.headerContent}</span>\n ) : (\n <span className=\"cr-accordion__texts\">\n <span className=\"cr-accordion__title\">{tab.props.header}</span>\n {tab.props.description && (\n <span className=\"cr-accordion__description\">{tab.props.description}</span>\n )}\n </span>\n )\n }\n pt={{\n root: { className: 'cr-accordion__item' },\n header: { className: 'cr-accordion__header' },\n headerAction: { className: 'cr-accordion__action' },\n toggleableContent: { className: 'cr-accordion__region' },\n content: { className: 'cr-accordion__content' },\n // Abre e fecha pela altura, como o tema do Prime (p-toggleable-content, Accordion.css):\n // no unstyled o Prime só dá o tempo, sem classes.\n transition: {\n classNames: {\n enter: 'cr-accordion__region--entrar',\n enterActive: 'cr-accordion__region--entrando',\n exit: 'cr-accordion__region--sair',\n exitActive: 'cr-accordion__region--saindo',\n },\n } as AccordionPassThroughTransitionType,\n }}\n >\n {tab.props.children}\n </PrimeAccordionTab>\n ))}\n </PrimeAccordion>\n );\n});\n","/**\n * Junta ids para aria-describedby/aria-labelledby: a dica do Cristal soma com a de quem usa, em vez\n * de uma apagar a outra. Sem nenhum id, undefined (o atributo não aparece).\n */\nexport const juntarIds = (...ids: (string | false | null | undefined)[]) =>\n ids.filter(Boolean).join(' ') || undefined;\n","// Lado do popup (lista do Select, do AutoComplete e dos menus): o Prime decide se ele abre abaixo\n// ou acima do alvo, conforme o espaço na tela, e só deixa isso registrado no style inline que ele\n// grava. Em vez de ler esse texto no CSS, o Cristal mede onde o popup ficou de verdade e marca\n// data-cr-lado=\"acima\" quando ele está acima; o CSS dá os 4px de distância do lado certo. É um\n// atributo, não uma classe: o React reescreve o className a cada render do Prime. Chame no\n// onEnter da transição (pelo pt), que o Prime roda logo depois de posicionar, antes de pintar.\n// O Prime também pode reposicionar com o popup aberto (lista que muda de tamanho, rolagem): a\n// marcação acompanha cada mudança de posição até o popup sair da tela.\nexport function seguirLado(painel: Element | null | undefined, alvo: Element | null | undefined) {\n if (!(painel instanceof HTMLElement) || !alvo) return;\n const marcar = () => {\n const acima = painel.getBoundingClientRect().top < alvo.getBoundingClientRect().top;\n if (acima) painel.setAttribute('data-cr-lado', 'acima');\n else painel.removeAttribute('data-cr-lado');\n };\n marcar();\n // O observador some junto com o popup (o Prime o desmonta ao fechar).\n new MutationObserver(marcar).observe(painel, { attributes: true, attributeFilter: ['style'] });\n}\n\n/** O painel da lista controlada pelo campo (aria-controls do combobox). */\nexport const painelDoCampo = (campo: Element | null, seletorDoPainel: string) => {\n const lista = campo?.getAttribute('aria-controls');\n return lista ? document.getElementById(lista)?.closest(seletorDoPainel) : null;\n};\n\n/** As classes da entrada e da saída do popup (comum.css), no lugar das do tema do Prime. */\nconst CLASSES_DO_POPUP = {\n enter: 'cr-popup--entrar',\n enterActive: 'cr-popup--entrando',\n enterDone: 'cr-popup--entrou',\n exitActive: 'cr-popup--saindo',\n};\n\n/**\n * O `pt.transition` do popup: as classes da animação de entrada e saída do Prime (comum.css) e,\n * se houver, o onEnter que marca o lado. O tipo do Prime exige o addEndListener do\n * react-transition-group, que aqui não se usa: o cast fica só aqui.\n */\nexport const transicaoDoPopup = <T>(onEnter?: () => void) =>\n // Sem onEnter, a chave nem aparece: o Prime soma as funções do pt às dele, mas um undefined\n // substituiria o onEnter dele (que posiciona a lista).\n ({ classNames: CLASSES_DO_POPUP, ...(onEnter && { onEnter }) }) as unknown as T;\n","import { forwardRef, useId, useRef, type MouseEvent } from 'react';\nimport {\n AutoComplete as PrimeAutoComplete,\n type AutoCompletePassThroughTransitionType,\n type AutoCompleteProps as PrimeAutoCompleteProps,\n} from 'primereact/autocomplete';\nimport { CaretDown, Info, WarningCircle } from '@phosphor-icons/react';\nimport type { InputTextSize, InputTextVariant } from '../InputText';\nimport '../InputText/InputText.css';\nimport { juntarIds } from '../../aria';\nimport '../../lista.css';\nimport { transicaoDoPopup, painelDoCampo, seguirLado } from '../../popup';\nimport '../../comum.css';\nimport './AutoComplete.css';\n\nexport type AutoCompleteVariant = InputTextVariant;\nexport type AutoCompleteSize = InputTextSize;\n\nexport interface AutoCompleteProps extends Omit<\n PrimeAutoCompleteProps,\n // Fora do Figma (seleção múltipla, mensagem de vazio, carregando) ou controlados pelo Cristal\n // (visual, rótulo, erro, ícone da seta).\n | 'size'\n | 'variant'\n | 'invalid'\n | 'multiple'\n | 'selectionLimit'\n | 'selectedItemTemplate'\n | 'removeTokenIcon'\n | 'dropdownIcon'\n | 'showEmptyMessage'\n | 'emptyMessage'\n | 'loadingIcon'\n | 'inputClassName'\n | 'panelClassName'\n | 'scrollHeight'\n | 'inputRef'\n | 'pt'\n | 'ptOptions'\n | 'unstyled'\n | 'children'\n> {\n /** Type no Figma: Outline (com borda) e Filled (com fundo). */\n variant?: AutoCompleteVariant;\n /** Size no Figma: 32, 36, 42 e 48px de altura do campo. */\n size?: AutoCompleteSize;\n /** Rótulo acima do campo (Label no Figma). Sem rótulo, passe `aria-label`. */\n label?: string;\n /** Dica abaixo do campo (Hint no Figma). */\n hint?: string;\n /** Mensagem de erro: deixa o campo no estado Error e mostra a dica de erro no lugar da dica. */\n error?: string;\n /**\n * Seta à direita do campo (o botão de dropdown do Prime): abre a lista sem digitar, com todas as\n * sugestões (`dropdownMode=\"blank\"`, o padrão) ou filtrando pelo texto (`\"current\"`).\n * Padrão: false, como no Figma.\n */\n dropdown?: boolean;\n /** Nome da seta para o leitor de tela. Padrão: \"Mostrar opções\". */\n dropdownAriaLabel?: string;\n /**\n * O clique no campo abre a lista, com as sugestões do texto que já está nele (com o campo vazio,\n * todas). Padrão: true.\n */\n openOnClick?: boolean;\n}\n\n// Base: AutoComplete do PrimeReact no modo unstyled (busca, lista, teclado e ARIA de combobox do\n// Prime, espelhando o p-autoComplete do PrimeNG da produção). O rótulo e a dica são os do InputText\n// (.cr-field). O campo do AutoComplete no Figma não tem ícones, então o próprio <input> é a caixa\n// do campo: assim o painel, que o Prime alinha pelo <input>, fica na largura e na borda do campo.\n// Com `dropdown`, a seta do Prime fica por cima do fim do <input>, com o visual da do Select; ela\n// abre e fecha a lista, como no PrimeNG 19. O clique no campo também abre (`openOnClick`).\nexport const AutoComplete = forwardRef<HTMLInputElement, AutoCompleteProps>(function AutoComplete(\n {\n variant = 'outline',\n size = 'large',\n label,\n hint,\n error,\n dropdown = false,\n dropdownAriaLabel = 'Mostrar opções',\n openOnClick = true,\n inputId,\n required,\n disabled,\n className,\n style,\n ...props\n },\n ref,\n) {\n const autoId = useId();\n const id = inputId ?? autoId;\n const hintId = `${id}-hint`;\n const supportText = error ?? hint;\n const prime = useRef<PrimeAutoComplete>(null);\n const aberta = () => Boolean(prime.current?.getOverlay());\n\n const classes = [\n 'cr-field',\n 'cr-autocomplete',\n dropdown && 'cr-autocomplete--dropdown',\n `cr-field--${variant}`,\n `cr-field--${size}`,\n error && 'cr-field--error',\n disabled && 'cr-field--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={classes} style={style}>\n {label && (\n <label className=\"cr-field__label\" htmlFor={id}>\n {label}\n {required && (\n <span className=\"cr-field__required\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n <PrimeAutoComplete\n ref={prime}\n unstyled\n inputRef={ref}\n inputId={id}\n required={required}\n disabled={disabled}\n // 5 itens visíveis, como no Figma (5 × 37px).\n scrollHeight=\"185px\"\n dropdown={dropdown}\n dropdownAriaLabel={dropdownAriaLabel}\n // A seta do Select do Cristal (CaretDown de 16px); aberta, ela gira (AutoComplete.css).\n dropdownIcon={<CaretDown className=\"cr-autocomplete__dropdown-icon\" aria-hidden=\"true\" />}\n pt={{\n root: { className: 'cr-autocomplete__root' },\n input: {\n root: {\n className: 'cr-field__control cr-autocomplete__input',\n 'aria-describedby': juntarIds(supportText && hintId, props['aria-describedby']),\n 'aria-invalid': error ? true : undefined,\n // O clique no campo abre a lista (o Prime só abre ao digitar ou pela seta).\n ...(openOnClick && {\n onClick: (event: MouseEvent<HTMLInputElement>) => {\n if (!aberta() && !disabled) {\n prime.current?.search(event, event.currentTarget.value, 'dropdown');\n }\n },\n }),\n },\n },\n // A seta: o botão de dropdown do Prime, por cima do fim do <input> (que segue sendo a caixa,\n // para a lista continuar alinhada ao campo).\n dropdownButton: {\n root: {\n className: 'cr-autocomplete__dropdown',\n // Com a lista aberta, a seta fecha (como no p-autoComplete do PrimeNG 19); a do\n // PrimeReact só abre. Na captura, antes do clique do Prime, que buscaria de novo.\n onClickCapture: (event: MouseEvent<HTMLButtonElement>) => {\n if (!aberta()) return;\n event.stopPropagation();\n prime.current?.hide();\n },\n },\n },\n // O Prime mostra um spinner próprio enquanto busca; o Figma não define esse estado.\n loadingIcon: { className: 'cr-autocomplete__loader' },\n panel: { className: 'cr-lista cr-autocomplete__panel' },\n // Animação de entrada e saída (a do Prime) e o lado da lista, medido logo depois de o Prime\n // posicionar.\n transition: transicaoDoPopup<AutoCompletePassThroughTransitionType>(() => {\n const campo = document.getElementById(id);\n seguirLado(painelDoCampo(campo, '.cr-autocomplete__panel'), campo);\n }),\n // A área que rola (o Prime aceita listWrapper no pt, mas o d.ts não declara).\n ...({ listWrapper: { className: 'cr-lista__rolagem' } } as object),\n list: { className: 'cr-lista__itens' },\n item: ({ context }: { context: { selected: boolean } }) => ({\n className: `cr-lista__item cr-autocomplete__item${context.selected ? ' cr-lista__item--selecionado' : ''}`,\n }),\n }}\n {...props}\n />\n {supportText && (\n <p id={hintId} className={`cr-field__hint${error ? ' cr-field__hint--error' : ''}`}>\n <span className=\"cr-field__hint-icon\" aria-hidden=\"true\">\n {error ? <WarningCircle /> : <Info />}\n </span>\n {supportText}\n </p>\n )}\n </div>\n );\n});\n","import {\n forwardRef,\n useImperativeHandle,\n useRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { Badge as PrimeBadge } from 'primereact/badge';\nimport './Badge.css';\n\n/** State no Figma. */\nexport type BadgeVariant = 'default' | 'error' | 'warning' | 'success' | 'disabled';\n/** Size no Figma: large = 24px, medium = 16px, small = ponto de 8px sem número. */\nexport type BadgeSize = 'large' | 'medium' | 'small';\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: BadgeVariant;\n size?: BadgeSize;\n /** Valor do badge (Badge Value no Figma). Ignorado no `small`. */\n children?: ReactNode;\n}\n\n// Base: Badge do PrimeReact no modo unstyled; o visual vem todo do Badge.css. No small o\n// conteúdo é descartado: é um indicador sem número (para ele ser anunciado, passe role=\"img\" e\n// aria-label).\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n { variant = 'default', size = 'large', className, children, ...props },\n ref,\n) {\n const primeRef = useRef<PrimeBadge>(null);\n // O PrimeReact entrega na ref um objeto com getElement(); o Cristal repassa o <span>.\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLSpanElement);\n\n const classes = ['cr-badge', `cr-badge--${variant}`, `cr-badge--${size}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <PrimeBadge\n unstyled\n ref={primeRef}\n className={classes}\n value={size === 'small' ? null : children}\n {...props}\n />\n );\n});\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode, type Ref } from 'react';\nimport { Button as PrimeButton } from 'primereact/button';\nimport './Button.css';\n\n/** Hierarchy no Figma: Primary (Filled), Secondary (Tonal) e Tertiary (Outlined). */\nexport type ButtonVariant = 'primary' | 'secondary' | 'tertiary';\n/** Size no Figma: 32, 36, 42 e 48px de altura. */\nexport type ButtonSize = 'xsmall' | 'small' | 'medium' | 'large';\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n /** Ícone antes do texto (Leading Icon no Figma). Use um ícone de `@vector-business-services/cristal-ds-web/icons`. */\n leadingIcon?: ReactNode;\n /** Ícone depois do texto (Trailing Icon no Figma). */\n trailingIcon?: ReactNode;\n}\n\n// Base: Button do PrimeReact no modo unstyled. O comportamento é o do Prime (espelhando o PrimeNG\n// da produção) e o visual vem todo do Button.css. O Prime aceita um ícone só (`icon`); como o\n// Figma permite os dois juntos, os ícones vão como conteúdo do botão.\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = 'primary',\n size = 'large',\n leadingIcon,\n trailingIcon,\n type = 'button',\n className,\n children,\n ...props\n },\n ref,\n) {\n const classes = ['cr-button', `cr-button--${variant}`, `cr-button--${size}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <PrimeButton\n unstyled\n // O PrimeReact tipa a ref como a instância da classe, mas entrega o <button> nela.\n ref={ref as unknown as Ref<PrimeButton>}\n type={type}\n className={classes}\n {...props}\n >\n {leadingIcon && (\n <span className=\"cr-button__icon\" aria-hidden=\"true\">\n {leadingIcon}\n </span>\n )}\n {children}\n {trailingIcon && (\n <span className=\"cr-button__icon\" aria-hidden=\"true\">\n {trailingIcon}\n </span>\n )}\n </PrimeButton>\n );\n});\n","import { addLocale, localeOption } from 'primereact/api';\nimport type {\n CalendarPassThroughMethodOptions,\n CalendarPassThroughOptions,\n} from 'primereact/calendar';\nimport { CaretLeft, CaretRight } from '@phosphor-icons/react';\n\n// Partes comuns ao Calendar e ao DatePicker: os dois são o Calendar do PrimeReact (o p-datepicker\n// do PrimeNG 19 da produção), um embutido na página e o outro em popup, com o mesmo painel.\n\n/** Locale do Prime com os textos do Figma: meses, dias da semana (Dom a Sab) e os nomes em pt-BR. */\nexport const LOCALE = 'cr-pt-BR';\naddLocale(LOCALE, {\n firstDayOfWeek: 0,\n dayNames: [\n 'domingo',\n 'segunda-feira',\n 'terça-feira',\n 'quarta-feira',\n 'quinta-feira',\n 'sexta-feira',\n 'sábado',\n ],\n dayNamesShort: ['dom', 'seg', 'ter', 'qua', 'qui', 'sex', 'sáb'],\n dayNamesMin: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sab'],\n monthNames: [\n 'Janeiro',\n 'Fevereiro',\n 'Março',\n 'Abril',\n 'Maio',\n 'Junho',\n 'Julho',\n 'Agosto',\n 'Setembro',\n 'Outubro',\n 'Novembro',\n 'Dezembro',\n ],\n monthNamesShort: [\n 'Jan',\n 'Fev',\n 'Mar',\n 'Abr',\n 'Mai',\n 'Jun',\n 'Jul',\n 'Ago',\n 'Set',\n 'Out',\n 'Nov',\n 'Dez',\n ],\n dateFormat: 'dd/mm/yy',\n weekHeader: 'Sem',\n today: 'Hoje',\n clear: 'Limpar',\n chooseDate: 'Escolher data',\n chooseMonth: 'Escolher mês',\n chooseYear: 'Escolher ano',\n prevMonth: 'Mês anterior',\n nextMonth: 'Próximo mês',\n prevYear: 'Ano anterior',\n nextYear: 'Próximo ano',\n prevDecade: 'Década anterior',\n nextDecade: 'Próxima década',\n});\n\n// O Prime 10.9.9 recria a tabela do mês a cada render (a chave do contêiner é nova a cada vez): o\n// dia com foco some do DOM, e o foco cai no <body> — o teclado se perde no calendário. Quando isso\n// acontece, o foco vai para o mesmo dia (mesmo mês do painel e mesma data) na tabela nova. Um\n// ouvinte só, para todos os calendários do Cristal.\nfunction seguirFocoDoDia(event: FocusEvent) {\n const dia = event.target;\n if (!(dia instanceof HTMLElement) || !dia.classList.contains('cr-calendar__date')) return;\n const painel = dia.closest('.cr-calendar');\n const td = dia.closest('td');\n const mes = dia.closest('.cr-calendar__month');\n if (!painel || !td || !mes || event.relatedTarget) return;\n const indice = [...painel.querySelectorAll('.cr-calendar__month')].indexOf(mes);\n const { pDay, pMonth, pYear } = td.dataset;\n requestAnimationFrame(() => {\n if (dia.isConnected || document.activeElement !== document.body) return;\n const novo = painel\n .querySelectorAll('.cr-calendar__month')\n [indice]?.querySelector<HTMLElement>(\n `td[data-p-day=\"${pDay}\"][data-p-month=\"${pMonth}\"][data-p-year=\"${pYear}\"] .cr-calendar__date`,\n );\n if (novo) {\n novo.tabIndex = 0;\n novo.focus();\n }\n });\n}\nif (typeof document !== 'undefined') document.addEventListener('focusout', seguirFocoDoDia, true);\n\n/** Setas do cabeçalho: o Icon Button tertiary de 32px do Cristal, com o Caret de 16px do Figma. */\nexport const setas = {\n prevIcon: (\n <span className=\"cr-icon-button__icon\">\n <CaretLeft />\n </span>\n ),\n nextIcon: (\n <span className=\"cr-icon-button__icon\">\n <CaretRight />\n </span>\n ),\n};\n\ninterface Dia {\n day: number;\n month: number;\n year: number;\n}\n\nconst mesmoDia = (data: Date | null | undefined, dia: Dia) =>\n data instanceof Date &&\n data.getDate() === dia.day &&\n data.getMonth() === dia.month &&\n data.getFullYear() === dia.year;\n\nconst chave = (dia: Dia) => dia.year * 10000 + dia.month * 100 + dia.day;\nconst chaveDe = (data: Date) =>\n chave({ day: data.getDate(), month: data.getMonth(), year: data.getFullYear() });\n\n// Se o dia está escolhido (na data única, numa das várias ou dentro do período).\nfunction escolhido(props: CalendarPassThroughMethodOptions['props'], dia: Dia) {\n const { value } = props as { value?: Date | (Date | null)[] | null };\n if (value instanceof Date) return mesmoDia(value, dia);\n if (!Array.isArray(value)) return false;\n if ((props.selectionMode as string) === 'range') {\n const [inicio, fim] = value;\n if (!inicio) return false;\n return chave(dia) >= chaveDe(inicio) && chave(dia) <= chaveDe(fim ?? inicio);\n }\n return value.some((data) => mesmoDia(data, dia));\n}\n\n// No período, o Prime marca como selecionados todos os dias de início a fim; o Figma diferencia o\n// início e o fim (Start/End, círculo brand) do meio (Period Middle, brand/subtle).\nfunction noPeriodo(props: CalendarPassThroughMethodOptions['props'], dia: Dia) {\n if ((props.selectionMode as string) !== 'range' || !Array.isArray(props.value)) return undefined;\n const [inicio, fim] = props.value as (Date | null)[];\n if (mesmoDia(inicio, dia) || mesmoDia(fim, dia)) return 'cr-calendar__day--edge';\n if (inicio && fim) {\n const data = new Date(dia.year, dia.month, dia.day);\n if (data > inicio && data < fim) return 'cr-calendar__day--middle';\n }\n return undefined;\n}\n\nconst classes = (...lista: (string | false | undefined)[]) => lista.filter(Boolean).join(' ');\n\n/**\n * O pt do painel do Calendar do Prime com o visual do Figma (DatePicker: .Calendar, .Date e\n * .Month select). `offDays` são os dias de folga (Day Off: riscados).\n */\nexport function ptDoPainel(offDays: Date[] = []): CalendarPassThroughOptions {\n return {\n groupContainer: { className: 'cr-calendar__months' },\n group: { className: 'cr-calendar__month' },\n header: { className: 'cr-calendar__header' },\n previousButton: {\n className: 'cr-icon-button cr-icon-button--tertiary cr-icon-button--xsmall',\n },\n nextButton: { className: 'cr-icon-button cr-icon-button--tertiary cr-icon-button--xsmall' },\n title: { className: 'cr-calendar__title' },\n // O nome dos botões do título é o texto que aparece neles (o mês e o ano), não \"Escolher mês\".\n monthTitle: { className: 'cr-calendar__title-button', 'aria-label': undefined },\n yearTitle: { className: 'cr-calendar__title-button', 'aria-label': undefined },\n decadeTitle: { className: 'cr-calendar__title-text' },\n table: { className: 'cr-calendar__table' },\n tableHeaderCell: { className: 'cr-calendar__weekday' },\n day: ({ props, context }: CalendarPassThroughMethodOptions) => {\n const dia = context.date as unknown as Dia & { selectable: boolean };\n const meses = localeOption('monthNames', props.locale ?? LOCALE) as string[];\n return {\n // O Prime põe o escolhido e o desabilitado no <span> do dia, que não tem papel: eles vão\n // para a célula da grade (gridcell). O nome da célula inclui o número que aparece nela.\n 'aria-selected': escolhido(props, dia),\n 'aria-disabled': dia.selectable ? undefined : true,\n 'aria-label': `${dia.day} de ${meses[dia.month]?.toLowerCase()} de ${dia.year}`,\n className: classes(\n 'cr-calendar__day',\n context.today && 'cr-calendar__day--today',\n context.otherMonth && 'cr-calendar__day--other-month',\n offDays.some((data) => mesmoDia(data, dia)) && 'cr-calendar__day--off',\n noPeriodo(props, dia),\n ),\n };\n },\n dayLabel: ({ context }: CalendarPassThroughMethodOptions) => ({\n 'aria-selected': undefined,\n 'aria-disabled': undefined,\n className: classes(\n 'cr-calendar__date',\n context.selected && 'cr-calendar__date--selected',\n context.disabled && 'cr-calendar__date--disabled',\n ),\n }),\n monthPicker: { className: 'cr-calendar__picker cr-calendar__picker--months' },\n month: ({ context }: CalendarPassThroughMethodOptions) => ({\n className: classes(\n 'cr-calendar__option',\n context.selected && 'cr-calendar__option--selected',\n context.disabled && 'cr-calendar__option--disabled',\n ),\n }),\n yearPicker: { className: 'cr-calendar__picker cr-calendar__picker--years' },\n year: ({ context }: CalendarPassThroughMethodOptions) => ({\n className: classes(\n 'cr-calendar__option',\n context.selected && 'cr-calendar__option--selected',\n context.disabled && 'cr-calendar__option--disabled',\n ),\n }),\n } as CalendarPassThroughOptions;\n}\n","import { forwardRef, type ReactElement, type Ref } from 'react';\nimport {\n Calendar as PrimeCalendar,\n type CalendarProps as PrimeCalendarProps,\n type CalendarSelectionMode,\n} from 'primereact/calendar';\nimport { LOCALE, ptDoPainel, setas } from './calendario';\nimport '../IconButton/IconButton.css';\nimport './Calendar.css';\n\n/**\n * Props do Calendar do PrimeReact (`selectionMode` single, range ou multiple, `numberOfMonths`,\n * `view`, `minDate`, `maxDate`, `disabledDates`, `disabledDays`, `dateTemplate`...), mais os dias de\n * folga do Figma. O visual (pt e unstyled) e as setas são do Cristal.\n */\nexport interface CalendarProps<TMode extends CalendarSelectionMode = 'single'> extends Omit<\n PrimeCalendarProps<TMode>,\n 'pt' | 'ptOptions' | 'unstyled' | 'inline' | 'prevIcon' | 'nextIcon'\n> {\n /** Dias de folga (Day Off no Figma): aparecem riscados. Para não deixar escolher, use `disabledDates`. */\n offDays?: Date[];\n}\n\n/** A ref é a do Calendar do Prime: `getElement()`, `getCurrentDateTime()`, `getViewDate()`... */\nexport type CalendarHandle = PrimeCalendar;\n\n// Base: Calendar do PrimeReact no modo inline e unstyled (o p-datepicker do PrimeNG 19 da produção,\n// com [inline]): só o painel, sem o campo, para usar dentro de outros componentes. Seleção, visões de\n// mês e ano, teclado e ARIA são do Prime; o Cristal desenha o .Calendar do Figma e põe o pt-BR.\nfunction CalendarBase<TMode extends CalendarSelectionMode = 'single'>(\n { offDays, locale = LOCALE, className, ...props }: CalendarProps<TMode>,\n ref: Ref<CalendarHandle>,\n) {\n return (\n <PrimeCalendar\n {...setas}\n locale={locale}\n {...(props as PrimeCalendarProps<TMode>)}\n ref={ref as Ref<PrimeCalendar<TMode>>}\n inline\n unstyled\n className={className}\n pt={{\n root: { className: 'cr-calendar-inline' },\n panel: { className: 'cr-calendar' },\n ...ptDoPainel(offDays),\n }}\n />\n );\n}\n\n/** Calendar do Figma \"Cristal - Core Components | Web\" (DatePicker: .Calendar), sem o campo. */\nexport const Calendar = forwardRef(CalendarBase) as <\n TMode extends CalendarSelectionMode = 'single',\n>(\n props: CalendarProps<TMode> & { ref?: Ref<CalendarHandle> },\n) => ReactElement;\n","import { forwardRef, type HTMLAttributes, type Ref } from 'react';\nimport { Card as PrimeCard } from 'primereact/card';\nimport './Card.css';\n\n/** Padding no Figma: X-Small (8px), Small (12px), Medium (16px), Large (20px) e X-Large (24px). */\nexport type CardPadding = 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n padding?: CardPadding;\n /** Outline no Figma: borda de 1px em stroke/neutral/base. */\n outline?: boolean;\n}\n\n// Base: Card do PrimeReact no modo unstyled (o p-card do PrimeNG da produção). No Figma o Card é\n// só o contêiner, com o conteúdo num slot: o Cristal não repassa header, title, subTitle nem\n// footer do Prime, e o conteúdo vai em children. O visual vem do Card.css.\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n { padding = 'xsmall', outline = false, className, style, children, ...props },\n ref,\n) {\n const classes = ['cr-card', `cr-card--${padding}`, outline && 'cr-card--outline', className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <PrimeCard\n unstyled\n // O Card do Prime é um forwardRef que entrega o próprio <div>, mas o tipo o declara como classe.\n ref={ref as unknown as Ref<PrimeCard>}\n // className e style vão pelo pt, junto com as classes do Cristal (o Card do Prime também os\n // aceitaria direto; pelo pt fica igual aos outros componentes).\n pt={{\n root: { className: classes, style },\n body: { className: 'cr-card__body' },\n content: { className: 'cr-card__content' },\n }}\n {...props}\n >\n {children}\n </PrimeCard>\n );\n});\n","import { useEffect, useId, useRef, useState, type ReactNode, type RefObject } from 'react';\nimport { Tooltip as PrimeTooltip, type TooltipPassThroughOptions } from 'primereact/tooltip';\nimport './Tooltip.css';\n\n/** Type no Figma: Plain (rótulo curto, uma linha) e Rich (texto de até 300px, quebra linha). */\nexport type TooltipType = 'plain' | 'rich';\nexport type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';\n\nexport interface TooltipProps {\n /** Elemento que mostra o tooltip: ref, elemento ou seletor CSS. */\n target: RefObject<HTMLElement | null> | HTMLElement | string;\n /** Texto do tooltip (Label no Plain, Text no Rich). */\n content: ReactNode;\n type?: TooltipType;\n /** Lado do alvo. O Prime inverte o lado se faltar espaço na tela. */\n position?: TooltipPosition;\n /** O que abre o tooltip; o padrão abre no hover e no foco do teclado. */\n event?: 'hover' | 'focus' | 'both';\n showDelay?: number;\n hideDelay?: number;\n disabled?: boolean;\n /**\n * Liga o texto ao alvo como descrição (aria-describedby). Padrão: true. Use false quando o texto\n * já é o nome do alvo (como no IconButton), para o leitor de tela não ler duas vezes.\n */\n describe?: boolean;\n id?: string;\n className?: string;\n}\n\n// Última interação foi pelo teclado? No foco, o tooltip só abre nesse caso: um foco posto pelo\n// código (o X do Drawer ou do Dialog ao abrir) ou deixado por um clique não deve abrir o tooltip.\n// O Esc fecha os tooltips abertos (a WCAG 1.4.13 pede). Não é o closeOnEscape do Prime: com ele,\n// dois tooltips abrindo quase juntos (passar o mouse de um botão para outro) registram o Esc com a\n// mesma prioridade, e o Prime lança \"esc key listener ... already exists\". Um ouvinte só, para a\n// página toda, fecha os que estiverem abertos.\nlet usandoTeclado = false;\nconst abertos = new Set<() => void>();\nif (typeof document !== 'undefined') {\n document.addEventListener(\n 'keydown',\n (event) => {\n usandoTeclado = true;\n if (event.key === 'Escape') abertos.forEach((fechar) => fechar());\n },\n true,\n );\n document.addEventListener('pointerdown', () => (usandoTeclado = false), true);\n}\n\nconst resolveTargets = (target: TooltipProps['target']): HTMLElement[] => {\n if (typeof target === 'string') return Array.from(document.querySelectorAll<HTMLElement>(target));\n if (target instanceof HTMLElement) return [target];\n return target.current ? [target.current] : [];\n};\n\n// Base: Tooltip do PrimeReact no modo unstyled (abrir/fechar, atraso e posicionamento com troca de\n// lado do Prime, espelhando o pTooltip do PrimeNG da produção). O visual vem do Tooltip.css; o\n// Figma não tem seta. Ajustes de acessibilidade: o Esc fecha (a WCAG 1.4.13 pede; ver abertos,\n// acima); o Prime marca o tooltip aberto com aria-hidden=\"true\" e não liga\n// o alvo ao texto, então o alvo ganha o id do tooltip no aria-describedby, somado ao que ele já\n// tinha (a dica de um campo, por exemplo); e, no foco, ele só abre quando quem chegou ali foi o\n// teclado.\nexport function Tooltip({\n target,\n content,\n type = 'plain',\n position = 'bottom',\n event = 'both',\n showDelay,\n hideDelay,\n disabled,\n describe = true,\n id,\n className,\n}: TooltipProps) {\n const autoId = useId();\n const tooltipId = id ?? autoId;\n const primeRef = useRef<PrimeTooltip>(null);\n // Como o tooltip se registra para o Esc: a mesma função ao abrir e ao fechar.\n const [fechar] = useState(() => () => void primeRef.current?.hide());\n useEffect(() => () => void abertos.delete(fechar), [fechar]);\n\n useEffect(() => {\n if (!describe) return;\n const elements = resolveTargets(target);\n const ids = (element: HTMLElement) =>\n (element.getAttribute('aria-describedby') ?? '').split(/\\s+/).filter(Boolean);\n const gravar = (element: HTMLElement, lista: string[]) =>\n lista.length\n ? element.setAttribute('aria-describedby', lista.join(' '))\n : element.removeAttribute('aria-describedby');\n elements.forEach((element) => {\n if (!ids(element).includes(tooltipId)) gravar(element, [...ids(element), tooltipId]);\n });\n return () =>\n elements.forEach((element) =>\n gravar(\n element,\n ids(element).filter((idAtual) => idAtual !== tooltipId),\n ),\n );\n }, [target, tooltipId, describe]);\n\n const classes = ['cr-tooltip', `cr-tooltip--${type}`, className].filter(Boolean).join(' ');\n\n const pt: TooltipPassThroughOptions = {\n root: (options) => {\n const side = (options as { state?: { position?: string } })?.state?.position ?? position;\n return { className: `${classes} cr-tooltip--${side}`, 'aria-hidden': false };\n },\n arrow: { className: 'cr-tooltip__arrow' },\n text: { className: 'cr-tooltip__text' },\n };\n\n return (\n <PrimeTooltip\n unstyled\n id={tooltipId}\n target={target as never}\n position={position}\n event={event}\n showDelay={showDelay}\n hideDelay={hideDelay}\n ref={primeRef}\n disabled={disabled}\n onBeforeShow={(e) => {\n const abre = e.originalEvent?.type !== 'focus' || usandoTeclado;\n if (abre) abertos.add(fechar);\n return abre;\n }}\n onBeforeHide={() => {\n abertos.delete(fechar);\n return true;\n }}\n pt={pt}\n >\n {content}\n </PrimeTooltip>\n );\n}\n","import {\n forwardRef,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { Chart as PrimeChart } from 'primereact/chart';\nimport type { ChartData, ChartOptions, Plugin } from 'chart.js';\nimport { Question } from '@phosphor-icons/react';\nimport { Tooltip } from '../../core/Tooltip';\nimport '../../comum.css';\nimport './Chart.css';\n\n/**\n * Cor da série: os tokens de gráfico (color/chart/fill/<cor>/<tom>), na ordem fixa. Sem `color`,\n * cada série pega a da sua posição; a cor acompanha a série, nunca a ordem. A quinary (ciano) fica\n * de fora: clara demais sobre o fundo (1,75:1).\n */\nexport type ChartColor = 'primary' | 'secondary' | 'tertiary' | 'quaternary';\n\n/** Tom da cor (o passo do token). Padrão: 600 na linha e 500 na barra, como no Figma. */\nexport type ChartTone = 100 | 200 | 300 | 400 | 500 | 600;\n\n/** Uma série: uma linha ou um conjunto de barras. */\nexport interface ChartSeries {\n label: string;\n /** Um valor por rótulo do eixo X; null deixa o ponto em branco. */\n data: (number | null)[];\n color?: ChartColor;\n /** Tom da cor: nas barras empilhadas do Figma, partes de um total usam tons da mesma cor. */\n tone?: ChartTone;\n /** Eixo do valor: o da esquerda (padrão) ou o da direita (y2Axis). */\n axis?: 'left' | 'right';\n}\n\n/** Escala de um eixo Y. */\nexport interface ChartAxis {\n /** Texto de cada marca e do valor no tooltip (ex.: `(v) => \\`R$ ${v}\\``). */\n format?: (value: number) => string;\n min?: number;\n max?: number;\n /** Distância entre as marcas (ex.: 50). */\n stepSize?: number;\n}\n\nexport interface ChartProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title' | 'children'> {\n /** Linhas com área (Chart / Line) ou barras (Chart / Bar). Padrão: line. */\n type?: 'line' | 'bar';\n /** Barras empilhadas: as séries somam numa barra só por rótulo. */\n stacked?: boolean;\n /** Rótulos do eixo X, um por ponto. */\n labels: string[];\n /** As séries, até 4 cores (as de gráfico dos tokens). */\n series: ChartSeries[];\n /** Eixo da esquerda. */\n yAxis?: ChartAxis;\n /** Eixo da direita, para séries com `axis: 'right'`. */\n y2Axis?: ChartAxis;\n /** Título do card. Sem título nem ações, só o gráfico e a legenda, sem a caixa. */\n title?: string;\n /** Texto do ícone de ajuda (Question) ao lado do título, num Tooltip. */\n help?: string;\n helpLabel?: string;\n /** Botões à direita do título (IconButton tertiary xsmall no Figma). */\n actions?: ReactNode;\n /** Altura da área do gráfico, com os eixos. Padrão: 266px, a do Figma. */\n height?: number;\n id?: string;\n className?: string;\n}\n\nconst CORES: ChartColor[] = ['primary', 'secondary', 'tertiary', 'quaternary'];\nconst corDe = (serie: ChartSeries, indice: number) => serie.color ?? CORES[indice % CORES.length]!;\nconst tomDe = (serie: ChartSeries, tipo: 'line' | 'bar') =>\n serie.tone ?? (tipo === 'bar' ? 500 : 600);\n\n/** Valores dos tokens que o Chart.js (canvas) precisa: ele não lê variáveis CSS. */\ninterface Tema {\n cor: (cor: ChartColor, tom: ChartTone) => string;\n grade: string;\n texto: string;\n cruz: string;\n superficie: string;\n tooltipFundo: string;\n tooltipTexto: string;\n fonte: { family: string; size: number; weight: number; lineHeight: number };\n}\n\nconst lerTema = (el: HTMLElement): Tema => {\n const css = getComputedStyle(el);\n const v = (nome: string) => css.getPropertyValue(nome).trim();\n const px = (nome: string) => parseFloat(v(nome));\n return {\n cor: (cor, tom) => v(`--cr-color-chart-fill-${cor}-${tom}`),\n grade: v('--cr-color-chart-tertiary'),\n texto: v('--cr-color-chart-secondary'),\n cruz: v('--cr-color-stroke-neutral-bold'),\n superficie: v('--cr-color-fill-neutral-container'),\n tooltipFundo: v('--cr-color-fill-neutral-boldest'),\n tooltipTexto: v('--cr-color-text-inverse-base'),\n fonte: {\n family: v('--cr-typography-label-small-10-semibold-font-family'),\n size: px('--cr-typography-label-small-10-semibold-font-size'),\n weight: Number(v('--cr-typography-label-small-10-semibold-font-weight')),\n lineHeight:\n px('--cr-typography-label-small-10-semibold-line-height') /\n px('--cr-typography-label-small-10-semibold-font-size'),\n },\n };\n};\n\n// A cor do token com transparência, para o degradê da área. O canvas normaliza qualquer cor CSS\n// (hex, rgb(), nome) para #rrggbb ou rgba(); daí sai o r, g, b.\nconst comAlfa = (cor: string, alfa: number) => {\n const ctx = document.createElement('canvas').getContext('2d');\n if (!ctx) return cor;\n ctx.fillStyle = cor;\n const normal = String(ctx.fillStyle);\n if (normal.startsWith('#')) {\n const n = parseInt(normal.slice(1, 7), 16);\n return `rgba(${(n >> 16) & 255}, ${(n >> 8) & 255}, ${n & 255}, ${alfa})`;\n }\n const [r = 0, g = 0, b = 0] = normal.match(/[\\d.]+/g)?.map(Number) ?? [];\n return `rgba(${r}, ${g}, ${b}, ${alfa})`;\n};\n\n// Linha vertical (stroke/neutral/bold) no X do tooltip: o leitor mira o horário, não a linha.\nconst cruz = (cor: string): Plugin<'line'> => ({\n id: 'crCruz',\n afterDatasetsDraw(chart) {\n const ativo = chart.tooltip?.getActiveElements()[0];\n if (!ativo) return;\n const { ctx, chartArea } = chart;\n ctx.save();\n ctx.strokeStyle = cor;\n ctx.lineWidth = 1;\n ctx.beginPath();\n ctx.moveTo(ativo.element.x, chartArea.top);\n ctx.lineTo(ativo.element.x, chartArea.bottom);\n ctx.stroke();\n ctx.restore();\n },\n});\n\n// Curva do Figma: cada trecho entre dois pontos é um S regular, que sai e chega na horizontal (como\n// uma senoide), sem passar dos valores. O Chart.js não desenha essa curva (a tension dele usa os\n// vizinhos); por isso ele não desenha a linha nem a área (showLine: false) e o Cristal as desenha\n// aqui, só com a posição pública de cada ponto (x, y). O tooltip, o ponto em hover e a linha\n// vertical continuam com o Chart.js.\ntype Ponto = { x: number; y: number; skip?: boolean };\nconst tracar = (ctx: CanvasRenderingContext2D, pontos: Ponto[]) => {\n pontos.forEach((ponto, i) => {\n const antes = pontos[i - 1];\n if (!antes) return ctx.moveTo(ponto.x, ponto.y);\n const meio = (antes.x + ponto.x) / 2;\n ctx.bezierCurveTo(meio, antes.y, meio, ponto.y, ponto.x, ponto.y);\n });\n};\n// Os trechos contínuos (um ponto em branco, null, interrompe a linha).\nconst trechos = (pontos: Ponto[]) =>\n pontos\n .reduce<Ponto[][]>(\n (lista, ponto) => {\n if (ponto.skip) lista.push([]);\n else lista[lista.length - 1]!.push(ponto);\n return lista;\n },\n [[]],\n )\n .filter((trecho) => trecho.length > 0);\n\nconst curvaDoFigma: Plugin<'line'> = {\n id: 'crCurva',\n beforeDatasetsDraw(chart) {\n const { ctx, chartArea } = chart;\n const series = chart.data.datasets\n .map((dataset, indice) => ({ dataset, meta: chart.getDatasetMeta(indice), indice }))\n .filter(({ indice }) => chart.isDatasetVisible(indice))\n // Como no Chart.js: a primeira série fica por cima, desenhada por último.\n .reverse();\n ctx.save();\n ctx.beginPath();\n ctx.rect(chartArea.left, chartArea.top, chartArea.width, chartArea.height);\n ctx.clip();\n // Primeiro as áreas (degradê da cor da série, 10% em cima e 2% embaixo), depois as linhas.\n series.forEach(({ dataset, meta }) => {\n const cor = String(dataset.borderColor);\n const base = Math.min(meta.yScale?.getPixelForValue(0) ?? chartArea.bottom, chartArea.bottom);\n const degrade = ctx.createLinearGradient(0, chartArea.top, 0, chartArea.bottom);\n degrade.addColorStop(0, comAlfa(cor, 0.1));\n degrade.addColorStop(1, comAlfa(cor, 0.02));\n trechos(meta.data as unknown as Ponto[]).forEach((trecho) => {\n ctx.beginPath();\n tracar(ctx, trecho);\n ctx.lineTo(trecho[trecho.length - 1]!.x, base);\n ctx.lineTo(trecho[0]!.x, base);\n ctx.closePath();\n ctx.fillStyle = degrade;\n ctx.fill();\n });\n });\n series.forEach(({ dataset, meta }) => {\n ctx.strokeStyle = String(dataset.borderColor);\n ctx.lineWidth = 2;\n trechos(meta.data as unknown as Ponto[]).forEach((trecho) => {\n ctx.beginPath();\n tracar(ctx, trecho);\n ctx.stroke();\n });\n });\n ctx.restore();\n },\n};\n\nconst formatar = (eixo: ChartAxis | undefined, valor: number) =>\n eixo?.format ? eixo.format(valor) : String(valor);\n\n// Base: Chart do PrimeReact (o p-chart do PrimeNG da produção), que desenha com o Chart.js. O\n// Cristal monta os gráficos do Figma: linhas com área (Chart / Line), com curvas de 2px em S entre\n// os pontos (curvaDoFigma) e a área em degradê da cor da série (10% em cima, 2% embaixo); e barras\n// de 10px, empilhadas ou não, com 2px de raio no topo. Grade tracejada, eixos em\n// label/small-10/semibold e um segundo eixo Y opcional à direita. As cores são os tokens de\n// gráfico (color/chart/*) e as fontes, as do Cristal, lidos do CSS ao montar (o canvas não lê\n// variáveis). A legenda é HTML, com os tokens; o tooltip lista todas as séries no X (na linha, com\n// a linha vertical). Para o leitor de tela, o gráfico é uma imagem com o título como nome, e os\n// valores ficam numa tabela escondida. O card (título, ajuda e ações, na caixa com borda) é o\n// frame do Figma.\nexport const Chart = forwardRef<HTMLDivElement, ChartProps>(function Chart(\n {\n type = 'line',\n stacked = false,\n labels,\n series,\n yAxis,\n y2Axis,\n title,\n help,\n helpLabel = 'Ajuda',\n actions,\n height = 266,\n id,\n className,\n ...props\n },\n ref,\n) {\n const raiz = useRef<HTMLDivElement>(null);\n useImperativeHandle(ref, () => raiz.current as HTMLDivElement);\n const ajuda = useRef<HTMLButtonElement>(null);\n const [tema, setTema] = useState<Tema>();\n // Os tokens são lidos uma vez, ao montar: o Cristal ainda não troca de tema em tempo de execução.\n useLayoutEffect(() => {\n if (raiz.current) setTema(lerTema(raiz.current));\n }, []);\n\n const temDireita = series.some((s) => s.axis === 'right');\n\n const data = useMemo<ChartData<'line' | 'bar'> | undefined>(() => {\n if (!tema) return undefined;\n return {\n labels,\n datasets: series.map((s, i) => {\n const cor = tema.cor(corDe(s, i), tomDe(s, type));\n if (type === 'bar') {\n // Raio de 2px só no topo da barra (no empilhado, no topo da última série).\n const topo = !stacked || i === series.length - 1;\n return {\n type: 'bar' as const,\n label: s.label,\n data: s.data,\n yAxisID: s.axis === 'right' ? 'y2' : 'y',\n backgroundColor: cor,\n hoverBackgroundColor: cor,\n barThickness: 10,\n borderSkipped: false,\n borderRadius: topo ? { topLeft: 2, topRight: 2, bottomLeft: 0, bottomRight: 0 } : 0,\n };\n }\n return {\n type: 'line' as const,\n label: s.label,\n data: s.data,\n yAxisID: s.axis === 'right' ? 'y2' : 'y',\n borderColor: cor,\n // A linha e a área são desenhadas pelo plugin curvaDoFigma.\n showLine: false,\n pointRadius: 0,\n pointHoverRadius: 4,\n pointHoverBorderWidth: 2,\n pointHoverBorderColor: tema.superficie,\n pointHoverBackgroundColor: cor,\n };\n }),\n };\n }, [tema, labels, series, type, stacked]);\n\n const options = useMemo<ChartOptions<'line' | 'bar'> | undefined>(() => {\n if (!tema) return undefined;\n const fonte = { ...tema.fonte, weight: tema.fonte.weight as never };\n const eixoY = (eixo: ChartAxis | undefined, direita: boolean) => ({\n position: direita ? ('right' as const) : ('left' as const),\n stacked,\n min: eixo?.min ?? 0,\n max: eixo?.max,\n // A grade tracejada do Figma (2px e 2px): no Chart.js 4, o tracejado fica em border.dash.\n border: { display: false, dash: [2, 2] },\n grid: direita\n ? { drawOnChartArea: false, drawTicks: false }\n : { color: tema.grade, lineWidth: 1, drawTicks: false },\n ticks: {\n color: tema.texto,\n font: fonte,\n padding: 8,\n stepSize: eixo?.stepSize,\n callback: (valor: string | number) => formatar(eixo, Number(valor)),\n },\n });\n return {\n responsive: true,\n maintainAspectRatio: false,\n animation: false,\n interaction: { mode: 'index', intersect: false },\n layout: { padding: { top: 8 } },\n scales: {\n x: {\n stacked,\n border: { display: false },\n grid: { display: false },\n // Os rótulos só somem quando não cabem (como no Figma, as 24 horas cabem em 638px).\n ticks: { color: tema.texto, font: fonte, maxRotation: 0, padding: 8, autoSkipPadding: 2 },\n },\n y: eixoY(yAxis, false),\n ...(temDireita ? { y2: eixoY(y2Axis, true) } : {}),\n },\n plugins: {\n legend: { display: false },\n tooltip: {\n backgroundColor: tema.tooltipFundo,\n titleColor: tema.tooltipTexto,\n bodyColor: tema.tooltipTexto,\n titleFont: fonte,\n bodyFont: { ...fonte, weight: 400 as never },\n padding: { x: 12, y: 8 },\n cornerRadius: 8,\n usePointStyle: true,\n boxWidth: 8,\n boxHeight: type === 'bar' ? 8 : 2,\n callbacks: {\n label: (item) => {\n const s = series[item.datasetIndex]!;\n const eixo = s.axis === 'right' ? y2Axis : yAxis;\n return `${formatar(eixo, item.parsed.y ?? 0)} ${s.label}`;\n },\n labelPointStyle: () => ({ pointStyle: type === 'bar' ? 'rect' : 'line', rotation: 0 }),\n },\n },\n },\n };\n }, [tema, yAxis, y2Axis, temDireita, series, type, stacked]);\n\n const card = Boolean(title || actions);\n const classes = ['cr-chart', card && 'cr-chart--card', className].filter(Boolean).join(' ');\n\n return (\n <div {...props} ref={raiz} id={id} className={classes}>\n {card && (\n <div className=\"cr-chart__header\">\n <div className=\"cr-chart__title-row\">\n {title && <span className=\"cr-chart__title\">{title}</span>}\n {help && (\n <>\n <button ref={ajuda} type=\"button\" className=\"cr-chart__help\" aria-label={helpLabel}>\n <Question aria-hidden=\"true\" />\n </button>\n <Tooltip target={ajuda} content={help} type=\"rich\" />\n </>\n )}\n </div>\n {actions && <div className=\"cr-chart__actions\">{actions}</div>}\n </div>\n )}\n <div className=\"cr-chart__body\">\n <div className=\"cr-chart__plot\" style={{ height }}>\n {data && options && (\n <PrimeChart\n // Trocar o tipo monta um gráfico novo, sem reaproveitar o anterior.\n key={type}\n type={type}\n data={data}\n options={options}\n plugins={type === 'line' ? [curvaDoFigma as Plugin, cruz(tema!.cruz) as Plugin] : []}\n width=\"100%\"\n height=\"100%\"\n pt={{\n root: { className: 'cr-chart__canvas-wrap' },\n canvas: {\n role: 'img',\n 'aria-label': title ?? series.map((s) => s.label).join(', '),\n },\n }}\n />\n )}\n </div>\n {series.length > 1 && (\n <ul className=\"cr-chart__legend\">\n {series.map((s, i) => (\n <li key={`${i}-${s.label}`} className=\"cr-chart__legend-item\">\n {/* A legenda repete a cor da marca: o mesmo token (cor e tom) da série. */}\n <span\n className=\"cr-chart__swatch\"\n style={{\n backgroundColor: `var(--cr-color-chart-fill-${corDe(s, i)}-${tomDe(s, type)})`,\n }}\n aria-hidden=\"true\"\n />\n {s.label}\n </li>\n ))}\n </ul>\n )}\n </div>\n {/* Os valores para o leitor de tela (o canvas é só uma imagem). */}\n <table className=\"cr-so-leitor cr-chart__table\">\n {title && <caption>{title}</caption>}\n <thead>\n <tr>\n <td />\n {series.map((s, i) => (\n <th key={`${i}-${s.label}`} scope=\"col\">\n {s.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {labels.map((rotulo, linha) => (\n <tr key={`${linha}-${rotulo}`}>\n <th scope=\"row\">{rotulo}</th>\n {series.map((s, i) => {\n const valor = s.data[linha];\n const eixo = s.axis === 'right' ? y2Axis : yAxis;\n return (\n <td key={`${i}-${s.label}`}>{valor == null ? '' : formatar(eixo, valor)}</td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n});\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n type CSSProperties,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { Checkbox as PrimeCheckbox, type CheckboxChangeEvent } from 'primereact/checkbox';\nimport { Check } from '@phosphor-icons/react';\nimport '../../comum.css';\nimport './Checkbox.css';\n\n/** Label Position no Figma: lado da caixa em relação ao rótulo. */\nexport type CheckboxPosition = 'left' | 'right';\n/** Label Type no Figma: Default (uma linha, com reticências) e Full (quebra em várias linhas). */\nexport type CheckboxLabelSize = 'default' | 'full';\n\n/** As demais props vão no <input> (aria-describedby, onBlur, data-*...); className e style, na raiz. */\nexport interface CheckboxProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n | 'onChange'\n | 'value'\n | 'checked'\n | 'defaultChecked'\n | 'defaultValue'\n | 'size'\n | 'type'\n | 'children'\n> {\n /** Texto ao lado da caixa (Label no Figma). Sem rótulo visível, vira o nome acessível. */\n label: ReactNode;\n /** Mostra o rótulo. Padrão: true. */\n showLabel?: boolean;\n /** Lado da caixa. Padrão: left. */\n position?: CheckboxPosition;\n /** Padrão: default. */\n labelSize?: CheckboxLabelSize;\n checked?: boolean;\n /** Type=Indeterminate no Figma: traço no lugar do check; o leitor de tela anuncia \"misto\". */\n indeterminate?: boolean;\n onChange?: (event: CheckboxChangeEvent) => void;\n disabled?: boolean;\n required?: boolean;\n name?: string;\n value?: unknown;\n /** Vai no <input>. */\n id?: string;\n className?: string;\n style?: CSSProperties;\n}\n\n// Base: Checkbox do PrimeReact no modo unstyled (o p-checkbox do PrimeNG da produção), com o\n// <input type=\"checkbox\"> nativo por cima da caixa. O Prime não tem o estado indeterminado: o\n// Cristal liga a propriedade nativa do input e desenha o traço no CSS. O rótulo é um <label>\n// ligado ao input. A ref entrega o <input>.\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n {\n label,\n showLabel = true,\n position = 'left',\n labelSize = 'default',\n checked = false,\n indeterminate = false,\n onChange,\n disabled,\n required,\n name,\n value,\n id,\n className,\n style,\n ...props\n },\n ref,\n) {\n const autoId = useId();\n const inputId = id ?? autoId;\n // O Cristal também precisa do <input> (para o indeterminado): a ref de callback guarda os dois.\n const inputRef = useRef<HTMLInputElement | null>(null);\n const setInputRef = useCallback(\n (input: HTMLInputElement | null) => {\n inputRef.current = input;\n if (typeof ref === 'function') ref(input);\n else if (ref) ref.current = input;\n },\n [ref],\n );\n\n // Com o indeterminado ligado, o leitor de tela anuncia \"misto\" no lugar de marcado/desmarcado.\n useEffect(() => {\n if (inputRef.current) inputRef.current.indeterminate = indeterminate && !checked;\n }, [indeterminate, checked]);\n\n const classes = [\n 'cr-checkbox',\n `cr-checkbox--${position}`,\n `cr-checkbox--label-${labelSize}`,\n indeterminate && !checked && 'cr-checkbox--indeterminate',\n disabled && 'cr-checkbox--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={classes} style={style}>\n <PrimeCheckbox\n unstyled\n inputRef={setInputRef}\n inputId={inputId}\n checked={checked}\n onChange={onChange}\n disabled={disabled}\n required={required}\n name={name}\n value={value}\n icon={<Check size={16} />}\n pt={{\n // Marcado pela prop do Cristal, não pelo atributo interno do Prime (data-p-highlight).\n root: {\n className: `cr-checkbox__control${checked ? ' cr-checkbox__control--checked' : ''}`,\n },\n input: { ...props, className: 'cr-checkbox__input' },\n box: { className: 'cr-checkbox__box' },\n icon: { className: 'cr-checkbox__icon', 'aria-hidden': true },\n }}\n />\n {/* Sem rótulo visível, o <label> continua no DOM (escondido) e dá o nome ao input. */}\n <label\n className={`cr-checkbox__label${showLabel ? '' : ' cr-checkbox__label--hidden cr-so-leitor'}`}\n htmlFor={inputId}\n >\n {label}\n </label>\n </div>\n );\n});\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { X } from '@phosphor-icons/react';\nimport { Chip as PrimeChip, type ChipRemoveEvent } from 'primereact/chip';\nimport './Chip.css';\n\n/** Type no Figma. */\nexport type ChipVariant =\n | 'default'\n | 'success'\n | 'danger'\n | 'warning'\n | 'info'\n | 'highlight'\n | 'inverse'\n | 'outline'\n | 'neutral'\n | 'on-image';\n/** Size no Figma: small = 24px, medium = 28px, large = 32px, x-large = 36px de altura. */\nexport type ChipSize = 'small' | 'medium' | 'large' | 'x-large';\n\nexport interface ChipProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Texto do chip (Label no Figma). Aceita marcação, como o rótulo e o valor do filtro da Table. */\n label: ReactNode;\n variant?: ChipVariant;\n size?: ChipSize;\n /** Ícone antes do texto (Leading Icon no Figma). Use um ícone de `@vector-business-services/cristal-ds-web/icons`. */\n leadingIcon?: ReactNode;\n /** Ícone depois do texto (Trailing Icon no Figma). Com `onRemove`, o padrão é o X do Figma. */\n trailingIcon?: ReactNode;\n disabled?: boolean;\n /**\n * Torna o ícone da direita o botão de remover do PrimeReact (clique, Enter ou Backspace).\n * Como no Prime, o chip se esconde depois; retorne `false` para controlar a remoção por fora.\n */\n onRemove?: (event: ChipRemoveEvent) => boolean | void;\n /** Nome acessível do botão de remover. */\n removeLabel?: string;\n}\n\n// Base: Chip do PrimeReact no modo unstyled; o visual vem todo do Chip.css. O Prime aceita só um\n// ícone à esquerda e, à direita, só o de remover: os ícones vão como funções, que o Prime chama\n// com as props dele (role, tabIndex e teclado do remover). Sem onRemove (ou desabilitado), o ícone\n// da direita é só visual.\nexport const Chip = forwardRef<HTMLDivElement, ChipProps>(function Chip(\n {\n label,\n variant = 'default',\n size = 'small',\n leadingIcon,\n trailingIcon,\n disabled = false,\n onRemove,\n removeLabel = 'Remover',\n className,\n ...props\n },\n ref,\n) {\n const classes = [\n 'cr-chip',\n `cr-chip--${variant}`,\n `cr-chip--${size}`,\n disabled && 'cr-chip--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const removable = Boolean(onRemove) && !disabled;\n const trailing = trailingIcon ?? (onRemove ? <X /> : null);\n\n return (\n <PrimeChip\n unstyled\n // O Prime remonta o <div> a cada render interno (troca a key), então a ref vai pelo\n // pass-through da raiz, que acompanha cada montagem. O aria-label que o Prime põe na raiz\n // sai: num <div> sem role ele é proibido (axe), e o texto já está visível no chip.\n pt={{ root: { ref, 'aria-label': undefined } }}\n className={classes}\n // O Prime tipa o label como texto, mas só o desenha dentro de um <span>.\n label={label as string}\n aria-disabled={disabled || undefined}\n icon={\n leadingIcon\n ? () => (\n <span className=\"cr-chip__icon cr-chip__icon--leading\" aria-hidden=\"true\">\n {leadingIcon}\n </span>\n )\n : undefined\n }\n removable={Boolean(trailing)}\n removeIcon={(options) => {\n if (!removable) {\n return (\n <span className=\"cr-chip__icon cr-chip__icon--trailing\" aria-hidden=\"true\">\n {trailing}\n </span>\n );\n }\n const { role, tabIndex, onClick, onKeyDown } =\n options.iconProps as HTMLAttributes<HTMLSpanElement>;\n return (\n <span\n role={role}\n tabIndex={tabIndex}\n onClick={onClick}\n onKeyDown={onKeyDown}\n className=\"cr-chip__icon cr-chip__icon--trailing cr-chip__remove\"\n aria-label={removeLabel}\n >\n {trailing}\n </span>\n );\n }}\n onRemove={onRemove ? (event) => onRemove(event) !== false : undefined}\n {...props}\n />\n );\n});\n","import {\n forwardRef,\n useContext,\n useImperativeHandle,\n useRef,\n type HTMLAttributes,\n type ReactNode,\n type SyntheticEvent,\n} from 'react';\nimport { PrimeReactContext, PrimeReactProvider } from 'primereact/api';\nimport {\n Menu as PrimeMenu,\n type MenuPassThroughOptions,\n type MenuPassThroughTransitionType,\n} from 'primereact/menu';\nimport type { MenuItem as PrimeMenuItem, MenuItemCommandEvent } from 'primereact/menuitem';\nimport { CircleNotch } from '@phosphor-icons/react';\nimport '../../lista.css';\nimport { transicaoDoPopup, seguirLado } from '../../popup';\nimport '../../comum.css';\nimport './Menu.css';\n\n/** Density no Figma: Normal (itens de 37px) e Compacted (29px). */\nexport type MenuDensity = 'normal' | 'compact';\n\n/** Um item da lista (.Dropdown Item no Figma). */\nexport interface MenuItem {\n label: string;\n /** Ícone à esquerda (Leading Icon no Figma). Use um ícone de `@vector-business-services/cristal-ds-web/icons`. */\n icon?: ReactNode;\n /** Estado Selected do Figma: texto e ícone em brand, fundo selected/subtlest. */\n selected?: boolean;\n disabled?: boolean;\n /** Ação do item; o menu popup fecha depois dela. */\n command?: (event: MenuItemCommandEvent) => void;\n /** Link do item; sem ele o clique não navega. */\n url?: string;\n target?: string;\n id?: string;\n className?: string;\n}\n\nexport interface MenuProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n model: MenuItem[];\n density?: MenuDensity;\n /** Abre sobre a tela, posicionado no elemento que chamou `toggle`/`show` pela ref. */\n popup?: boolean;\n /** Alinhamento do popup com o elemento que o abriu. */\n popupAlignment?: 'left' | 'right';\n /** Estado Loading do Figma: troca os itens pelo indicador de carregamento. */\n loading?: boolean;\n /** O que o leitor de tela anuncia no carregamento. */\n loadingLabel?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n onShow?: (event: SyntheticEvent) => void;\n onHide?: (event: SyntheticEvent) => void;\n id?: string;\n className?: string;\n}\n\n/** Controle do menu popup, pela ref. */\nexport interface MenuHandle {\n toggle: (event: SyntheticEvent) => void;\n show: (event: SyntheticEvent) => void;\n hide: (event: SyntheticEvent) => void;\n /** O <div> raiz do menu (só existe com o popup aberto). */\n getElement: () => HTMLDivElement | null;\n}\n\n// Itens do Cristal no formato do Prime: o ícone com a classe do Menu e o Selected numa classe (e\n// no data, para o aria-current). Também usado pelo ContextMenu.\nexport const itensDoPrime = (model: MenuItem[]): PrimeMenuItem[] =>\n model.map((item) => ({\n id: item.id,\n label: item.label,\n icon: item.icon ? (\n <span className=\"cr-menu__icon\" aria-hidden=\"true\">\n {item.icon}\n </span>\n ) : undefined,\n disabled: item.disabled,\n command: item.command,\n url: item.url,\n target: item.target,\n className: [item.selected && 'cr-menu__item--selected', item.className]\n .filter(Boolean)\n .join(' '),\n data: { selected: item.selected },\n }));\n\n// Base: Menu do PrimeReact no modo unstyled (teclado, foco, popup e fechamento do Prime,\n// espelhando o p-menu do PrimeNG da produção). No Figma é o Dropdown List, usado nos menus do\n// Menubar; o visual vem do Menu.css. A ref expõe toggle/show/hide do Prime para abrir o popup.\nexport const Menu = forwardRef<MenuHandle, MenuProps>(function Menu(\n {\n model,\n density = 'normal',\n popup = false,\n popupAlignment = 'left',\n loading = false,\n loadingLabel = 'Carregando',\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n onShow,\n onHide,\n id,\n className,\n ...props\n },\n ref,\n) {\n const primeRef = useRef<PrimeMenu>(null);\n // Quem abriu o popup: o lado (acima ou abaixo) é medido em relação a ele.\n const alvo = useRef<Element | null>(null);\n const context = useContext(PrimeReactContext);\n\n useImperativeHandle(ref, () => ({\n toggle: (event) => {\n alvo.current = event.currentTarget as Element;\n primeRef.current?.toggle(event);\n },\n show: (event) => {\n alvo.current = event.currentTarget as Element;\n primeRef.current?.show(event);\n },\n hide: (event) => primeRef.current?.hide(event),\n getElement: () => primeRef.current?.getElement() ?? null,\n }));\n\n const items: PrimeMenuItem[] = loading\n ? [\n {\n label: loadingLabel,\n disabled: true,\n template: () => (\n <div className=\"cr-menu__loading\">\n <CircleNotch className=\"cr-menu__spinner\" aria-hidden=\"true\" />\n </div>\n ),\n },\n ]\n : itensDoPrime(model);\n\n const classes = ['cr-lista cr-menu', `cr-menu--${density}`, popup && 'cr-menu--popup', className]\n .filter(Boolean)\n .join(' ');\n\n const pt: MenuPassThroughOptions = {\n // O nome acessível vai na lista (role=menu); o Prime lê `ariaLabel`, mas não o declara no tipo.\n menu: {\n className: 'cr-menu__list',\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-busy': loading || undefined,\n },\n menuitem: (options) => {\n const item = (options as { context?: { item?: PrimeMenuItem } })?.context?.item;\n return {\n className: 'cr-menu__item',\n 'aria-current': item?.data?.selected ? 'true' : undefined,\n };\n },\n content: { className: 'cr-menu__content' },\n // Animação de entrada e saída (a do Prime) e o lado do popup, medido logo depois de o Prime\n // posicionar.\n // Numa microtarefa: no onEnter o Prime ainda está religando a ref (getElement vem vazio); ela\n // roda logo depois, antes de a tela ser pintada.\n transition: transicaoDoPopup<MenuPassThroughTransitionType>(() =>\n queueMicrotask(() => seguirLado(primeRef.current?.getElement(), alvo.current)),\n ),\n action: { className: 'cr-lista__item cr-menu__action' },\n label: { className: 'cr-menu__label' },\n };\n\n const menu = (\n <PrimeMenu\n {...props}\n unstyled\n ref={primeRef}\n id={id}\n className={classes}\n model={items}\n popup={popup}\n popupAlignment={popupAlignment}\n onShow={onShow}\n onHide={onHide}\n pt={pt}\n />\n );\n\n // O Menu do Prime lê o PrimeReactContext sem checar se ele existe: sem um PrimeReactProvider\n // na aplicação, o clique fora dá erro e o popup não fecha. Se a aplicação já tiver um, vale o\n // dela.\n return context ? menu : <PrimeReactProvider>{menu}</PrimeReactProvider>;\n});\n","import {\n forwardRef,\n useImperativeHandle,\n useRef,\n type HTMLAttributes,\n type SyntheticEvent,\n} from 'react';\nimport {\n ContextMenu as PrimeContextMenu,\n type ContextMenuPassThroughOptions,\n type ContextMenuPassThroughTransitionType,\n} from 'primereact/contextmenu';\nimport { itensDoPrime, type MenuDensity, type MenuItem } from '../Menu/Menu';\nimport '../../lista.css';\nimport '../../comum.css';\nimport '../Menu/Menu.css';\nimport './ContextMenu.css';\n\n/**\n * Um item do menu de contexto: o mesmo do Menu, sem o Selected (o Context Menu do Prime não diz\n * ao item qual está selecionado, então o estado não seria anunciado).\n */\nexport type ContextMenuItem = Omit<MenuItem, 'selected'>;\n\nexport interface ContextMenuProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n model: ContextMenuItem[];\n /** Density no Figma: Normal (itens de 37px) e Compacted (29px). Padrão: normal. */\n density?: MenuDensity;\n /** Abre com o botão direito em qualquer lugar da página, sem precisar chamar `show`. */\n global?: boolean;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n onShow?: (event: SyntheticEvent) => void;\n onHide?: (event: SyntheticEvent) => void;\n id?: string;\n className?: string;\n}\n\n/** Controle do menu de contexto, pela ref. */\nexport interface ContextMenuHandle {\n /** Abre no ponto do evento (o do botão direito, normalmente o onContextMenu). */\n show: (event: SyntheticEvent) => void;\n hide: (event: SyntheticEvent) => void;\n /** O <div> raiz do menu (só existe com ele aberto). */\n getElement: () => HTMLDivElement | null;\n}\n\n// Base: ContextMenu do PrimeReact no modo unstyled (o p-contextMenu do PrimeNG da produção): abre\n// onde o mouse clicou, com o teclado, o foco e o fechamento do Prime. O visual é o da Dropdown\n// List do Figma (as classes do Menu), com 260px, como no menu de contexto do cabeçalho da Table.\n// A animação é a do tema do Prime para o Context Menu: fade de 250ms na entrada e nenhuma na\n// saída. A ref expõe show/hide do Prime.\nexport const ContextMenu = forwardRef<ContextMenuHandle, ContextMenuProps>(function ContextMenu(\n {\n model,\n density = 'normal',\n global,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n onShow,\n onHide,\n id,\n className,\n ...props\n },\n ref,\n) {\n const primeRef = useRef<PrimeContextMenu>(null);\n useImperativeHandle(ref, () => ({\n show: (event) => primeRef.current?.show(event),\n hide: (event) => primeRef.current?.hide(event),\n getElement: () => primeRef.current?.getElement() ?? null,\n }));\n\n const classes = ['cr-lista cr-menu cr-context-menu', `cr-menu--${density}`, className]\n .filter(Boolean)\n .join(' ');\n\n const pt: ContextMenuPassThroughOptions = {\n root: { ...props, className: classes },\n // O nome vai na lista (o Prime dá a ela role=menubar, vertical).\n menu: {\n className: 'cr-menu__list',\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n },\n // O Prime põe aria-level nos itens, que role=menuitem não aceita (axe).\n menuitem: { className: 'cr-menu__item', 'aria-level': undefined },\n action: { className: 'cr-lista__item cr-menu__action' },\n label: { className: 'cr-menu__label' },\n // As classes da animação do Prime (ContextMenu.css). O tipo do Prime exige o addEndListener\n // do react-transition-group, que aqui não se usa.\n transition: {\n classNames: { enter: 'cr-context-menu--entrar', enterActive: 'cr-context-menu--entrando' },\n } as unknown as ContextMenuPassThroughTransitionType,\n // O Prime aplica o pt do content, mas não o declara no tipo.\n ...({ content: { className: 'cr-menu__content' } } as object),\n };\n\n return (\n <PrimeContextMenu\n unstyled\n ref={primeRef}\n id={id}\n model={itensDoPrime(model)}\n global={global}\n onShow={onShow}\n onHide={onHide}\n pt={pt}\n />\n );\n});\n","import { forwardRef, useId, type InputHTMLAttributes, type ReactNode, type Ref } from 'react';\nimport { InputText as PrimeInputText } from 'primereact/inputtext';\nimport { Info, WarningCircle } from '@phosphor-icons/react';\nimport { juntarIds } from '../../aria';\nimport './InputText.css';\n\n/** Type no Figma: Outline (com borda) e Filled (com fundo). */\nexport type InputTextVariant = 'outline' | 'filled';\n/** Size no Figma: 32, 36, 42 e 48px de altura do campo. */\nexport type InputTextSize = 'xsmall' | 'small' | 'medium' | 'large';\n\nexport interface InputTextProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'value' | 'children'\n> {\n variant?: InputTextVariant;\n size?: InputTextSize;\n /** Rótulo acima do campo (Label no Figma). Sem rótulo, passe `aria-label`. */\n label?: string;\n /** Valor do campo (controlado). */\n value?: string;\n /** Ícone antes do texto (Leading Icon no Figma). Use um ícone de `@vector-business-services/cristal-ds-web/icons`. */\n leadingIcon?: ReactNode;\n /** Ícone ou botão depois do texto (Trailing Icon no Figma), por exemplo mostrar a senha. */\n trailingIcon?: ReactNode;\n /** Dica abaixo do campo (Hint Info no Figma). */\n hint?: string;\n /** Mensagem de erro: deixa o campo no estado Error e mostra a dica de erro no lugar da dica. */\n error?: string;\n}\n\n// Base: InputText do PrimeReact no modo unstyled (o <input>, com o comportamento do Prime,\n// espelhando o pInputText do PrimeNG da produção). O rótulo, a caixa do campo, os ícones e a dica\n// são do Cristal, com as classes .cr-field reaproveitadas pelos outros campos (AutoComplete,\n// MultiSelect).\nexport const InputText = forwardRef<HTMLInputElement, InputTextProps>(function InputText(\n {\n variant = 'outline',\n size = 'large',\n label,\n leadingIcon,\n trailingIcon,\n hint,\n error,\n id,\n required,\n disabled,\n className,\n ...props\n },\n ref,\n) {\n const autoId = useId();\n const inputId = id ?? autoId;\n const hintId = `${inputId}-hint`;\n const supportText = error ?? hint;\n\n const classes = [\n 'cr-field',\n `cr-field--${variant}`,\n `cr-field--${size}`,\n error && 'cr-field--error',\n disabled && 'cr-field--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={classes}>\n {label && (\n <label className=\"cr-field__label\" htmlFor={inputId}>\n {label}\n {required && (\n <span className=\"cr-field__required\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n <div className=\"cr-field__control\">\n {leadingIcon && (\n <span className=\"cr-field__icon\" aria-hidden=\"true\">\n {leadingIcon}\n </span>\n )}\n <PrimeInputText\n unstyled\n // O PrimeReact tipa a ref como a instância da classe, mas entrega o <input> nela.\n ref={ref as unknown as Ref<HTMLInputElement>}\n id={inputId}\n className=\"cr-field__input\"\n required={required}\n disabled={disabled}\n invalid={Boolean(error)}\n aria-invalid={error ? true : undefined}\n {...props}\n aria-describedby={juntarIds(supportText && hintId, props['aria-describedby'])}\n />\n {trailingIcon && <span className=\"cr-field__icon\">{trailingIcon}</span>}\n </div>\n {supportText && (\n <p id={hintId} className={`cr-field__hint${error ? ' cr-field__hint--error' : ''}`}>\n <span className=\"cr-field__hint-icon\" aria-hidden=\"true\">\n {error ? <WarningCircle /> : <Info />}\n </span>\n {supportText}\n </p>\n )}\n </div>\n );\n});\n\n// Nomes antigos (do Figma), mantidos até a próxima versão: o nome do Cristal é o do PrimeNG 19.\n/** @deprecated Use `InputText` (o nome do PrimeNG 19). */\nexport const Input = InputText;\n/** @deprecated Use `InputTextProps`. */\nexport type InputProps = InputTextProps;\n/** @deprecated Use `InputTextSize`. */\nexport type InputSize = InputTextSize;\n/** @deprecated Use `InputTextVariant`. */\nexport type InputVariant = InputTextVariant;\n","import {\n forwardRef,\n useId,\n type CSSProperties,\n type InputHTMLAttributes,\n type ReactNode,\n type Ref,\n} from 'react';\nimport {\n RadioButton as PrimeRadioButton,\n type RadioButtonChangeEvent,\n} from 'primereact/radiobutton';\nimport '../../comum.css';\nimport './RadioButton.css';\n\n/** Label Size no Figma: Default (uma linha, com reticências) e Full (quebra em várias linhas). */\nexport type RadioButtonLabelSize = 'default' | 'full';\n\n/** As demais props vão no <input> (aria-describedby, onBlur, data-*...); className e style, na raiz. */\nexport interface RadioButtonProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n | 'onChange'\n | 'value'\n | 'checked'\n | 'defaultChecked'\n | 'defaultValue'\n | 'size'\n | 'type'\n | 'children'\n> {\n /** Texto ao lado do controle (Label no Figma). Sem rótulo visível, vira o nome acessível. */\n label: ReactNode;\n /** Mostra o rótulo. Padrão: true. */\n showLabel?: boolean;\n /** Padrão: default. */\n labelSize?: RadioButtonLabelSize;\n checked?: boolean;\n /** Valor da opção, devolvido no `onChange`. */\n value?: unknown;\n /** Nome do grupo: radios com o mesmo `name` se excluem e navegam pelas setas. */\n name?: string;\n onChange?: (event: RadioButtonChangeEvent) => void;\n disabled?: boolean;\n required?: boolean;\n /** Vai no <input>. */\n id?: string;\n className?: string;\n style?: CSSProperties;\n}\n\n// Base: RadioButton do PrimeReact no modo unstyled (o p-radioButton do PrimeNG da produção), com\n// o <input type=\"radio\"> nativo por cima do círculo: o grupo pelo `name` e as setas do teclado são\n// do navegador. O rótulo é um <label> ligado ao input. A ref entrega o <input>.\nexport const RadioButton = forwardRef<HTMLInputElement, RadioButtonProps>(function RadioButton(\n {\n label,\n showLabel = true,\n labelSize = 'default',\n checked = false,\n value,\n name,\n onChange,\n disabled,\n required,\n id,\n className,\n style,\n ...props\n },\n ref,\n) {\n const autoId = useId();\n const inputId = id ?? autoId;\n\n const classes = [\n 'cr-radio',\n `cr-radio--label-${labelSize}`,\n disabled && 'cr-radio--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={classes} style={style}>\n <PrimeRadioButton\n unstyled\n inputRef={ref as Ref<HTMLInputElement>}\n inputId={inputId}\n checked={checked}\n value={value}\n name={name}\n onChange={onChange}\n disabled={disabled}\n required={required}\n pt={{\n // Marcado pela prop do Cristal, não pelo atributo interno do Prime (data-p-checked).\n root: { className: `cr-radio__control${checked ? ' cr-radio__control--checked' : ''}` },\n input: { ...props, className: 'cr-radio__input' },\n box: { className: 'cr-radio__box' },\n icon: { className: 'cr-radio__icon' },\n }}\n />\n {/* Sem rótulo visível, o <label> continua no DOM (escondido) e dá o nome ao input. */}\n <label\n className={`cr-radio__label${showLabel ? '' : ' cr-radio__label--hidden cr-so-leitor'}`}\n htmlFor={inputId}\n >\n {label}\n </label>\n </div>\n );\n});\n\n// Nomes antigos (do Figma), mantidos até a próxima versão: o nome do Cristal é o do PrimeNG 19.\n/** @deprecated Use `RadioButton` (o nome do PrimeNG 19). */\nexport const Radio = RadioButton;\n/** @deprecated Use `RadioButtonLabelSize`. */\nexport type RadioLabelSize = RadioButtonLabelSize;\n/** @deprecated Use `RadioButtonProps`. */\nexport type RadioProps = RadioButtonProps;\n","/** Um período: [início, fim], com as duas datas no mesmo dia quando é um dia só. */\nexport type DateRange = [Date, Date];\n\n/** Item da lista de períodos do Data Picker (.Period no Figma). */\nexport interface DateRangePeriod {\n /** Texto do item e do botão (\"Este mês\"). */\n label: string;\n /** O período, a partir do dia de hoje. */\n range: (hoje: Date) => DateRange;\n}\n\nconst dia = (ano: number, mes: number, numero: number) => new Date(ano, mes, numero);\nconst semHora = (data: Date) => dia(data.getFullYear(), data.getMonth(), data.getDate());\nconst menos = (data: Date, dias: number) =>\n dia(data.getFullYear(), data.getMonth(), data.getDate() - dias);\n\n/**\n * Os períodos do Figma (DatePicker: .Period, de 6 a 9 itens). O `DateRangeButton` mostra os seis\n * primeiros; os outros entram pela prop `periods`.\n */\nexport const DATE_PERIODS = {\n today: { label: 'Hoje', range: (hoje) => [semHora(hoje), semHora(hoje)] },\n yesterday: { label: 'Ontem', range: (hoje) => [menos(hoje, 1), menos(hoje, 1)] },\n last7Days: { label: 'Últimos 7 dias', range: (hoje) => [menos(hoje, 6), semHora(hoje)] },\n last14Days: { label: 'Últimos 14 dias', range: (hoje) => [menos(hoje, 13), semHora(hoje)] },\n last30Days: { label: 'Últimos 30 dias', range: (hoje) => [menos(hoje, 29), semHora(hoje)] },\n thisMonth: {\n label: 'Este mês',\n range: (hoje) => [dia(hoje.getFullYear(), hoje.getMonth(), 1), semHora(hoje)],\n },\n // A semana começa no domingo, como no calendário.\n lastWeek: {\n label: 'Semana passada',\n range: (hoje) => {\n const domingo = menos(hoje, hoje.getDay() + 7);\n return [domingo, menos(domingo, -6)];\n },\n },\n lastMonth: {\n label: 'Mês passado',\n range: (hoje) => [\n dia(hoje.getFullYear(), hoje.getMonth() - 1, 1),\n dia(hoje.getFullYear(), hoje.getMonth(), 0),\n ],\n },\n thisYear: {\n label: 'Este ano',\n range: (hoje) => [dia(hoje.getFullYear(), 0, 1), semHora(hoje)],\n },\n} satisfies Record<string, DateRangePeriod>;\n\n/** Os seis períodos do Figma (Qtd. List=6). */\nexport const PERIODOS_PADRAO: DateRangePeriod[] = [\n DATE_PERIODS.today,\n DATE_PERIODS.yesterday,\n DATE_PERIODS.last7Days,\n DATE_PERIODS.last14Days,\n DATE_PERIODS.last30Days,\n DATE_PERIODS.thisMonth,\n];\n\nconst MESES = ['jan', 'fev', 'mar', 'abr', 'mai', 'jun', 'jul', 'ago', 'set', 'out', 'nov', 'dez'];\n\n/** \"1 de out de 2024\", como no Data Field do Figma. */\nexport const dataPorExtenso = (data: Date) =>\n `${data.getDate()} de ${MESES[data.getMonth()]} de ${data.getFullYear()}`;\n\n/** \"1 de out de 2024 a 16 de out de 2024\". */\nexport const periodoPorExtenso = ([inicio, fim]: DateRange) =>\n `${dataPorExtenso(inicio)} a ${dataPorExtenso(fim)}`;\n\nexport const mesmoDia = (a: Date | null | undefined, b: Date | null | undefined) =>\n !!a && !!b && semHora(a).getTime() === semHora(b).getTime();\n\n/** O período da lista que tem exatamente estas datas (para marcar o item ao abrir). */\nexport const periodoDe = (periods: DateRangePeriod[], range: DateRange | null, hoje: Date) =>\n range\n ? periods.find((period) => {\n const [inicio, fim] = period.range(hoje);\n return mesmoDia(inicio, range[0]) && mesmoDia(fim, range[1]);\n })\n : undefined;\n\n/** \"05/09/2024\" a partir da data, e de volta (aceita \"05 / 09 / 2024\"). */\nexport const dataCurta = (data: Date | null | undefined) =>\n data\n ? `${String(data.getDate()).padStart(2, '0')}/${String(data.getMonth() + 1).padStart(2, '0')}/${data.getFullYear()}`\n : '';\nexport function lerData(texto: string): Date | null {\n const partes = /^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/.exec(texto.replace(/\\s/g, ''));\n if (!partes) return null;\n const [d, m, a] = [Number(partes[1]), Number(partes[2]), Number(partes[3])];\n const data = dia(a, m - 1, d);\n return data.getMonth() === m - 1 && data.getDate() === d ? data : null;\n}\n","import { useId, useState } from 'react';\nimport { Button } from '../Button';\nimport { InputText } from '../InputText';\nimport { RadioButton } from '../RadioButton';\nimport { dataCurta, lerData, mesmoDia, type DateRangePeriod } from './periodos';\nimport '../../comum.css';\nimport './DataPicker.css';\n\n// As partes do Data Picker do Figma em volta do calendário, comuns ao DatePicker e ao\n// DateRangeButton: a lista de períodos (.Period), os campos de data (Date Range) e o rodapé\n// (.Footer Data Picker).\n\nexport type Rascunho = [Date | null, Date | null];\n\n/** .Period: um Radio por período; o item inteiro recebe o clique. */\nexport function ListaDePeriodos({\n periods,\n periodo,\n onEscolher,\n}: {\n periods: DateRangePeriod[];\n periodo: DateRangePeriod | null;\n onEscolher: (periodo: DateRangePeriod) => void;\n}) {\n const grupo = useId();\n return (\n <div\n className=\"cr-data-picker__periods cr-rolagem-fina\"\n role=\"radiogroup\"\n aria-label=\"Períodos\"\n >\n {periods.map((item) => (\n <RadioButton\n key={item.label}\n className=\"cr-data-picker__period\"\n name={grupo}\n label={item.label}\n value={item.label}\n checked={periodo === item}\n onChange={() => onEscolher(item)}\n />\n ))}\n </div>\n );\n}\n\nconst mesmoRascunho = (a: Rascunho, b: Rascunho) =>\n (a[0] === b[0] || mesmoDia(a[0], b[0])) && (a[1] === b[1] || mesmoDia(a[1], b[1]));\n\n/**\n * Date Range: os campos da data inicial e final (dd/mm/aaaa), com o \"-\" no meio. O texto segue o\n * período que chega de fora (lista ou calendário); a data digitada vale quando fica completa.\n */\nexport function CamposDoPeriodo({\n value,\n onChange,\n}: {\n value: Rascunho;\n onChange: (value: Rascunho) => void;\n}) {\n const [textos, setTextos] = useState<[string, string]>([\n dataCurta(value[0]),\n dataCurta(value[1]),\n ]);\n // O período mudou por fora: os campos mostram o novo (ajuste no render, sem efeito).\n const [base, setBase] = useState(value);\n if (!mesmoRascunho(base, value)) {\n setBase(value);\n setTextos([dataCurta(value[0]), dataCurta(value[1])]);\n }\n\n const digitar = (indice: 0 | 1, texto: string) => {\n const novosTextos: [string, string] = [...textos];\n novosTextos[indice] = texto;\n setTextos(novosTextos);\n const data = lerData(texto);\n if (!data) return;\n const novo: Rascunho = [...value];\n novo[indice] = data;\n // Fim antes do início: o outro lado fica em aberto.\n if (novo[0] && novo[1] && novo[0] > novo[1]) novo[indice === 0 ? 1 : 0] = null;\n setBase(novo);\n onChange(novo);\n };\n\n return (\n <div className=\"cr-data-picker__inputs\">\n <InputText\n size=\"medium\"\n aria-label=\"Data inicial\"\n placeholder=\"dd / mm / aaaa\"\n value={textos[0]}\n onChange={(event) => digitar(0, event.target.value)}\n />\n <span className=\"cr-data-picker__dash\" aria-hidden=\"true\">\n -\n </span>\n <InputText\n size=\"medium\"\n aria-label=\"Data final\"\n placeholder=\"dd / mm / aaaa\"\n value={textos[1]}\n onChange={(event) => digitar(1, event.target.value)}\n />\n </div>\n );\n}\n\n/** .Footer Data Picker: Fechar (tertiary) à esquerda e Selecionar (primary) à direita. */\nexport function RodapeDoPeriodo({\n podeSelecionar,\n onFechar,\n onSelecionar,\n}: {\n podeSelecionar: boolean;\n onFechar: () => void;\n onSelecionar: () => void;\n}) {\n return (\n <div className=\"cr-data-picker__footer\">\n <Button variant=\"tertiary\" size=\"medium\" onClick={onFechar}>\n Fechar\n </Button>\n <Button size=\"medium\" disabled={!podeSelecionar} onClick={onSelecionar}>\n Selecionar\n </Button>\n </div>\n );\n}\n","import {\n forwardRef,\n useId,\n useImperativeHandle,\n useRef,\n useState,\n type KeyboardEvent,\n type ReactElement,\n type Ref,\n} from 'react';\nimport {\n Calendar as PrimeCalendar,\n type CalendarPassThroughTransitionType,\n type CalendarProps as PrimeCalendarProps,\n type CalendarSelectionMode,\n} from 'primereact/calendar';\nimport { CalendarDot, Info, WarningCircle } from '@phosphor-icons/react';\nimport { LOCALE, ptDoPainel, setas } from '../Calendar/calendario';\nimport {\n CamposDoPeriodo,\n ListaDePeriodos,\n RodapeDoPeriodo,\n type Rascunho,\n} from '../Calendar/dataPicker';\nimport { periodoDe, type DateRange, type DateRangePeriod } from '../Calendar/periodos';\nimport type { FormEvent } from 'primereact/ts-helpers';\nimport type { InputTextSize, InputTextVariant } from '../InputText';\nimport { painelDoCampo, seguirLado, transicaoDoPopup } from '../../popup';\nimport '../InputText/InputText.css';\nimport '../IconButton/IconButton.css';\nimport '../Calendar/Calendar.css';\nimport '../../comum.css';\nimport './DatePicker.css';\n\nexport type DatePickerVariant = InputTextVariant;\nexport type DatePickerSize = InputTextSize;\n\n/**\n * Props do Calendar do PrimeReact (`selectionMode` single, range ou multiple, `numberOfMonths`,\n * `view`, `dateFormat`, `minDate`, `maxDate`, `disabledDates`, `showTime`...), mais o campo do InputText\n * do Cristal. O visual (pt e unstyled), o ícone e as setas são do Cristal.\n */\nexport interface DatePickerProps<TMode extends CalendarSelectionMode = 'single'> extends Omit<\n PrimeCalendarProps<TMode>,\n | 'pt'\n | 'ptOptions'\n | 'unstyled'\n | 'inline'\n | 'prevIcon'\n | 'nextIcon'\n | 'showIcon'\n | 'icon'\n | 'iconPos'\n | 'invalid'\n | 'variant'\n | 'inputClassName'\n | 'panelClassName'\n> {\n /** Type no Figma (Input Text): Outline (com borda) e Filled (com fundo). */\n variant?: DatePickerVariant;\n /** Size no Figma (Input Text): 32, 36, 42 e 48px de altura do campo. */\n size?: DatePickerSize;\n /** Rótulo acima do campo (Label no Figma). Sem rótulo, passe `aria-label`. */\n label?: string;\n /** Dica abaixo do campo (Hint no Figma). */\n hint?: string;\n /** Mensagem de erro: deixa o campo no estado Error e mostra a dica de erro no lugar da dica. */\n error?: string;\n /** Dias de folga (Day Off no Figma): aparecem riscados. Para não deixar escolher, use `disabledDates`. */\n offDays?: Date[];\n /**\n * Lista de períodos à esquerda do calendário, com os campos de data inicial e final em cima (o\n * Data Picker do Figma). Só com `selectionMode=\"range\"`; os do Figma estão em `DATE_PERIODS`.\n * Padrão: sem lista.\n */\n periods?: DateRangePeriod[];\n /**\n * Rodapé com Fechar e Selecionar (Data Picker do Figma): a escolha só vale no Selecionar; o\n * Fechar, o Esc e o clique fora descartam. Padrão: false.\n */\n footer?: boolean;\n /** O dia de hoje para os períodos (Hoje, Este mês...). Padrão: a data atual. */\n today?: Date;\n}\n\n/** A ref é a do Calendar do Prime: `show()`, `hide()`, `getInput()`, `getElement()`... */\nexport type DatePickerHandle = PrimeCalendar;\n\n// Base: Calendar do PrimeReact no modo unstyled (o p-datepicker do PrimeNG 19 da produção): o campo,\n// o popup, a digitação da data, o teclado e o ARIA são do Prime. O campo é o Input Text do Cristal\n// com o ícone de calendário no fim (o botão do Prime, que também abre o calendário); como no\n// AutoComplete, o próprio <input> é a caixa do campo, para o Prime alinhar o painel pela borda dele.\n// O painel é o mesmo do Calendar do Cristal (.Calendar do Figma), na caixa do Data Picker.\nfunction DatePickerBase<TMode extends CalendarSelectionMode = 'single'>(\n {\n variant = 'outline',\n size = 'large',\n label,\n hint,\n error,\n offDays,\n locale = LOCALE,\n placeholder = 'dd/mm/aaaa',\n inputId,\n required,\n disabled,\n className,\n style,\n onShow,\n onHide,\n periods = [],\n footer = false,\n today,\n value,\n onChange,\n footerTemplate,\n ...props\n }: DatePickerProps<TMode>,\n ref: Ref<DatePickerHandle>,\n) {\n const autoId = useId();\n const id = inputId ?? autoId;\n const hintId = `${id}-hint`;\n const supportText = error ?? hint;\n // Se o painel abriu pela seta para baixo no campo (o Prime leva o foco ao calendário).\n const pelaSeta = useRef(false);\n // Se o dia foi escolhido pelo teclado (Enter ou espaço no painel).\n const peloTeclado = useRef(false);\n const calendario = useRef<PrimeCalendar<TMode>>(null);\n useImperativeHandle(ref, () => calendario.current as unknown as DatePickerHandle, []);\n\n // Data Picker completo (lista de períodos ou rodapé): o Cristal controla a abertura do painel\n // (visible e onVisibleChange do Prime) e, com o rodapé, guarda a escolha num rascunho até o\n // Selecionar.\n const comPeriodos = props.selectionMode === 'range' && periods.length > 0;\n const dataPicker = footer || comPeriodos;\n const [aberto, setAberto] = useState(false);\n const [rascunho, setRascunho] = useState<unknown>(null);\n const [periodo, setPeriodo] = useState<DateRangePeriod | null>(null);\n // Se o painel fechou por um botão dele (o foco volta ao campo).\n const devolverFoco = useRef(false);\n // Enquanto o foco volta ao campo, o pedido de abertura que o foco faz é ignorado.\n const ignorarAbertura = useRef(false);\n const valorNaTela = footer && aberto ? rascunho : value;\n\n const emitir = (novo: unknown) =>\n onChange?.({\n value: novo,\n stopPropagation: () => {},\n preventDefault: () => {},\n target: { name: props.name, id, value: novo },\n } as unknown as FormEvent<never>);\n\n const fechar = (pelosBotoes: boolean) => {\n devolverFoco.current = pelosBotoes;\n setAberto(false);\n };\n\n // Muda a escolha: com o rodapé, só o rascunho; sem ele, já vale.\n const mudar = (novo: unknown, novoPeriodo: DateRangePeriod | null) => {\n setPeriodo(novoPeriodo);\n if (footer) setRascunho(novo);\n else emitir(novo);\n };\n\n const classes = [\n 'cr-field',\n 'cr-datepicker',\n `cr-field--${variant}`,\n `cr-field--${size}`,\n error && 'cr-field--error',\n disabled && 'cr-field--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={classes} style={style}>\n {label && (\n <label className=\"cr-field__label\" htmlFor={id}>\n {label}\n {required && (\n <span className=\"cr-field__required\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n <PrimeCalendar\n {...setas}\n locale={locale}\n placeholder={placeholder}\n {...(props as PrimeCalendarProps<TMode>)}\n value={valorNaTela as PrimeCalendarProps<TMode>['value']}\n onChange={\n footer\n ? (event) => mudar(event.value, null)\n : comPeriodos\n ? (event) => {\n setPeriodo(null);\n onChange?.(event);\n }\n : onChange\n }\n {...(dataPicker && {\n visible: aberto,\n onVisibleChange: (event) => {\n // O Prime 10.9.9 avisa visible: true também ao fechar pelo clique fora, pelo Esc ou pelo\n // Tab (só a escolha do dia avisa false). O fechamento é o aviso que traz o callback.\n if (!event.callback) {\n if (ignorarAbertura.current || aberto) return;\n const hoje = today ?? new Date();\n setRascunho(value);\n setPeriodo(periodoDe(periods, (value as DateRange | null) ?? null, hoje) ?? null);\n setAberto(true);\n return;\n }\n // Com o rodapé, escolher o dia não fecha o painel.\n if (footer && event.type === 'dateselect') return;\n fechar(false);\n event.callback?.();\n },\n footerTemplate: () => (\n <>\n {comPeriodos && (\n <ListaDePeriodos\n periods={periods}\n periodo={periodo}\n onEscolher={(item) => {\n mudar(item.range(today ?? new Date()), item);\n if (!footer) fechar(true);\n }}\n />\n )}\n {props.selectionMode === 'range' && (\n <CamposDoPeriodo\n value={((valorNaTela as Rascunho | null) ?? [null, null]) as Rascunho}\n onChange={(novo) => mudar(novo, null)}\n />\n )}\n {footer && (\n <RodapeDoPeriodo\n podeSelecionar={\n props.selectionMode === 'range'\n ? Boolean((rascunho as Rascunho | null)?.[0] && (rascunho as Rascunho)[1])\n : rascunho != null\n }\n onFechar={() => fechar(true)}\n onSelecionar={() => {\n emitir(rascunho);\n fechar(true);\n }}\n />\n )}\n </>\n ),\n })}\n {...(!dataPicker && { footerTemplate })}\n ref={calendario}\n unstyled\n inputId={id}\n required={required}\n disabled={disabled}\n showIcon\n // O CalendarDot da Cristal - Support Library.\n icon={<CalendarDot aria-hidden=\"true\" />}\n // Ao abrir, o Prime 10.9.9 leva o foco a um dia do painel. Pelo foco ou clique no campo, ele\n // volta ao campo, como no p-datepicker do PrimeNG, para digitar a data; pela seta para\n // baixo, fica no calendário.\n onShow={() => {\n if (!pelaSeta.current) document.getElementById(id)?.focus();\n pelaSeta.current = false;\n onShow?.();\n }}\n // Escolhido o dia pelo teclado (ou fechado pelos botões do Data Picker), o Prime fecha o\n // painel sem devolver o foco ao campo (só o Esc devolve): o foco fica no painel que sai e cai\n // no <body>. Aqui ele volta ao campo; o foco no campo reabriria o painel, então ele fecha no\n // mesmo render (ou, com a abertura controlada pelo Cristal, o pedido é ignorado).\n onHide={() => {\n const atual = calendario.current;\n const ativo = document.activeElement;\n const semFoco = ativo === document.body || atual?.getOverlay()?.contains(ativo);\n if ((peloTeclado.current || devolverFoco.current) && semFoco && atual) {\n if (dataPicker) {\n ignorarAbertura.current = true;\n atual.focus();\n ignorarAbertura.current = false;\n } else {\n atual.focus();\n atual.hide();\n }\n }\n peloTeclado.current = false;\n pelaSeta.current = false;\n devolverFoco.current = false;\n onHide?.();\n }}\n pt={{\n root: { className: 'cr-datepicker__root' },\n input: {\n root: {\n className: 'cr-field__control cr-datepicker__input',\n 'aria-describedby': supportText ? hintId : undefined,\n 'aria-invalid': error ? true : undefined,\n onKeyDown: (event: KeyboardEvent<HTMLInputElement>) => {\n // Só conta a seta que abre o painel (com ele aberto, ela só leva ao calendário).\n if (event.code === 'ArrowDown' && !calendario.current?.getOverlay()) {\n pelaSeta.current = true;\n }\n // Com a abertura controlada pelo Cristal, o Prime não vê o painel aberto e a seta não\n // leva ao calendário: o Cristal leva o foco ao dia escolhido (ou ao primeiro).\n const painel = calendario.current?.getOverlay();\n if (dataPicker && event.code === 'ArrowDown' && painel) {\n const dia =\n painel.querySelector<HTMLElement>('.cr-calendar__date--selected') ??\n painel.querySelector<HTMLElement>(\n '.cr-calendar__date:not(.cr-calendar__date--disabled)',\n );\n if (dia) {\n event.preventDefault();\n dia.tabIndex = 0;\n dia.focus();\n }\n }\n },\n },\n },\n dropdownButton: { root: { className: 'cr-datepicker__button' } },\n panel: {\n className: `cr-calendar cr-datepicker__panel${dataPicker ? ' cr-datepicker__panel--data-picker' : ''}`,\n onKeyDown: (event: KeyboardEvent<HTMLDivElement>) => {\n if (['Enter', 'NumpadEnter', 'Space'].includes(event.code))\n peloTeclado.current = true;\n // O Prime só fecha pelo Esc no campo e nos dias: no Data Picker, também na lista de\n // períodos, nos campos de data e no rodapé.\n if (dataPicker && event.code === 'Escape' && aberto) fechar(true);\n },\n },\n // Animação de entrada e saída (a do Prime) e o lado do painel, medido logo depois de o\n // Prime posicionar.\n transition: transicaoDoPopup<CalendarPassThroughTransitionType>(() => {\n const campo = document.getElementById(id);\n seguirLado(painelDoCampo(campo, '.cr-datepicker__panel'), campo);\n }),\n ...ptDoPainel(offDays),\n // As partes do Data Picker entram no rodapé do Prime, que some no layout: cada uma ocupa o\n // seu lugar na grade do painel (DatePicker.css). O Prime aplica o pt do footer, mas não o\n // declara no tipo.\n ...({ footer: { className: 'cr-datepicker__extras' } } as object),\n }}\n />\n {supportText && (\n <p id={hintId} className={`cr-field__hint${error ? ' cr-field__hint--error' : ''}`}>\n <span className=\"cr-field__hint-icon\" aria-hidden=\"true\">\n {error ? <WarningCircle /> : <Info />}\n </span>\n {supportText}\n </p>\n )}\n </div>\n );\n}\n\n/** DatePicker do Figma \"Cristal - Core Components | Web\": o campo com o calendário em popup. */\nexport const DatePicker = forwardRef(DatePickerBase) as <\n TMode extends CalendarSelectionMode = 'single',\n>(\n props: DatePickerProps<TMode> & { ref?: Ref<DatePickerHandle> },\n) => ReactElement;\n","import { useState } from 'react';\nimport { Calendar } from '../../core/Calendar';\nimport {\n CamposDoPeriodo,\n ListaDePeriodos,\n RodapeDoPeriodo,\n type Rascunho,\n} from '../../core/Calendar/dataPicker';\nimport { periodoDe, type DateRange, type DateRangePeriod } from '../../core/Calendar/periodos';\n\nexport interface PainelDePeriodoProps {\n value: DateRange | null;\n periods: DateRangePeriod[];\n footer: boolean;\n today: Date;\n numberOfMonths: number;\n minDate?: Date;\n maxDate?: Date;\n disabledDates?: Date[];\n offDays?: Date[];\n /** O período escolhido (no Selecionar, ou direto sem o rodapé). */\n onSelect: (range: DateRange, period: DateRangePeriod | null) => void;\n /** Fechar sem escolher. */\n onClose: () => void;\n}\n\n// O mês da esquerda: com dois ou mais meses, o anterior ao do fim do período (o fim fica à\n// direita, como nos períodos \"últimos dias\"); com um, o do início.\nfunction mesDaTela(range: Rascunho, meses: number, hoje: Date) {\n const base = (meses > 1 ? range[1] : range[0]) ?? range[0] ?? hoje;\n return new Date(base.getFullYear(), base.getMonth() - (meses > 1 ? 1 : 0), 1);\n}\n\n/**\n * O conteúdo do Data Picker do Figma: a lista de períodos, os campos de data, o Calendar do Cristal\n * em período e o rodapé. A escolha fica num rascunho até o Selecionar; o Fechar descarta.\n */\nexport function PainelDePeriodo({\n value,\n periods,\n footer,\n today,\n numberOfMonths,\n minDate,\n maxDate,\n disabledDates,\n offDays,\n onSelect,\n onClose,\n}: PainelDePeriodoProps) {\n const [rascunho, setRascunho] = useState<Rascunho>(value ?? [null, null]);\n const [periodo, setPeriodo] = useState(() => periodoDe(periods, value, today) ?? null);\n const [mes, setMes] = useState(() => mesDaTela(rascunho, numberOfMonths, today));\n\n // Muda o rascunho por um período, pelo calendário ou pelos campos.\n const mudar = (novo: Rascunho, novoPeriodo: DateRangePeriod | null) => {\n setRascunho(novo);\n setPeriodo(novoPeriodo);\n // Sem o rodapé, o período completo já vale.\n if (!footer && novo[0] && novo[1]) onSelect([novo[0], novo[1]], novoPeriodo);\n };\n\n const [inicio, fim] = rascunho;\n\n return (\n <div className=\"cr-date-range\">\n <div className=\"cr-date-range__body\">\n {periods.length > 0 && (\n <ListaDePeriodos\n periods={periods}\n periodo={periodo}\n onEscolher={(item) => {\n const range = item.range(today);\n setMes(mesDaTela(range, numberOfMonths, today));\n mudar(range, item);\n }}\n />\n )}\n <div className=\"cr-date-range__calendars\">\n <CamposDoPeriodo\n value={rascunho}\n onChange={(novo) => {\n setMes(mesDaTela(novo, numberOfMonths, today));\n mudar(novo, null);\n }}\n />\n <Calendar\n selectionMode=\"range\"\n numberOfMonths={numberOfMonths}\n value={rascunho}\n viewDate={mes}\n onViewDateChange={(event) => setMes(event.value)}\n onChange={(event) => {\n const [novoInicio = null, novoFim = null] = event.value ?? [];\n mudar([novoInicio, novoFim], null);\n }}\n minDate={minDate}\n maxDate={maxDate}\n disabledDates={disabledDates}\n offDays={offDays}\n />\n </div>\n </div>\n {footer && (\n <RodapeDoPeriodo\n podeSelecionar={Boolean(inicio && fim)}\n onFechar={onClose}\n onSelecionar={() => inicio && fim && onSelect([inicio, fim], periodo)}\n />\n )}\n </div>\n );\n}\n","import { forwardRef, useId, useRef, useState, type CSSProperties, type Ref } from 'react';\nimport { Button as PrimeButton } from 'primereact/button';\nimport { OverlayPanel, type OverlayPanelPassThroughTransitionType } from 'primereact/overlaypanel';\nimport { CalendarDots, CaretDown } from '@phosphor-icons/react';\nimport { seguirLado, transicaoDoPopup } from '../../popup';\nimport { PainelDePeriodo } from './PainelDePeriodo';\nimport {\n PERIODOS_PADRAO,\n periodoDe,\n periodoPorExtenso,\n type DateRange,\n type DateRangePeriod,\n} from '../../core/Calendar/periodos';\nimport '../../core/InputText/InputText.css';\nimport '../../comum.css';\nimport './DateRangeButton.css';\n\nexport interface DateRangeButtonChangeEvent {\n /** O período escolhido: [início, fim]. */\n value: DateRange;\n /** O item da lista de períodos, se veio dele (ou se as datas são as dele). */\n period: DateRangePeriod | null;\n}\n\nexport interface DateRangeButtonProps {\n /** O período mostrado no botão (controlado). */\n value?: DateRange | null;\n /** O Selecionar do painel (ou, sem o rodapé, o período completo). */\n onChange?: (event: DateRangeButtonChangeEvent) => void;\n /** Rótulo acima do botão (Label no Figma). Sem rótulo, o nome é o texto do botão. */\n label?: string;\n required?: boolean;\n /** Texto do botão sem período. Padrão: \"Selecione o período\". */\n placeholder?: string;\n /**\n * A lista de períodos do painel (.Period no Figma). Padrão: os seis do Figma (Hoje a Este mês);\n * os outros estão em `DATE_PERIODS`. Com `[]`, o painel fica sem a lista.\n */\n periods?: DateRangePeriod[];\n /** Rodapé com Fechar e Selecionar. Sem ele, o período vale assim que fica completo. Padrão: true. */\n footer?: boolean;\n /** Meses lado a lado no calendário. Padrão: 2. */\n numberOfMonths?: number;\n minDate?: Date;\n maxDate?: Date;\n disabledDates?: Date[];\n /** Dias de folga (Day Off no Figma): aparecem riscados. */\n offDays?: Date[];\n /** O dia de hoje para os períodos (Hoje, Este mês...). Padrão: a data atual. */\n today?: Date;\n disabled?: boolean;\n /** Vai no <button>. */\n id?: string;\n className?: string;\n style?: CSSProperties;\n}\n\n// Data Field do Figma \"Cristal - Team Components | Web\": um botão (o Button do PrimeReact, com os\n// estados de botão) que mostra o período e abre o Data Picker do Figma \"Cristal - Core Components |\n// Web\" no OverlayPanel do Prime (posição, clique fora e Esc do Prime). O Cristal põe o papel de\n// diálogo, leva o foco para dentro ao abrir e o devolve ao botão ao fechar.\nexport const DateRangeButton = forwardRef<HTMLButtonElement, DateRangeButtonProps>(\n function DateRangeButton(\n {\n value = null,\n onChange,\n label,\n required,\n placeholder = 'Selecione o período',\n periods = PERIODOS_PADRAO,\n footer = true,\n numberOfMonths = 2,\n minDate,\n maxDate,\n disabledDates,\n offDays,\n today,\n disabled,\n id,\n className,\n style,\n },\n ref,\n ) {\n const autoId = useId();\n const botaoId = id ?? autoId;\n const rotuloId = `${botaoId}-rotulo`;\n const textoId = `${botaoId}-texto`;\n const painelId = `${botaoId}-painel`;\n const painel = useRef<OverlayPanel>(null);\n const botao = useRef<HTMLButtonElement | null>(null);\n const [aberto, setAberto] = useState(false);\n // O dia de hoje fica fixo enquanto o painel está aberto.\n const [hoje, setHoje] = useState(() => today ?? new Date());\n\n const periodo = periodoDe(periods, value, today ?? hoje);\n const classes = ['cr-field', 'cr-date-range-field', disabled && 'cr-field--disabled', className]\n .filter(Boolean)\n .join(' ');\n\n const fechar = () => painel.current?.hide();\n\n return (\n <div className={classes} style={style}>\n {label && (\n <span id={rotuloId} className=\"cr-field__label\">\n {label}\n {required && (\n <span className=\"cr-field__required\" aria-hidden=\"true\">\n *\n </span>\n )}\n </span>\n )}\n <PrimeButton\n unstyled\n // O PrimeReact tipa a ref como a instância da classe, mas entrega o <button> nela.\n ref={(elemento) => {\n const el = elemento as unknown as HTMLButtonElement | null;\n botao.current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) ref.current = el;\n }}\n id={botaoId}\n type=\"button\"\n className=\"cr-date-range-button\"\n disabled={disabled}\n aria-haspopup=\"dialog\"\n aria-expanded={aberto}\n aria-controls={aberto ? painelId : undefined}\n // O nome é o rótulo seguido do texto do botão (\"Período Este mês: 1 de out...\").\n aria-labelledby={label ? `${rotuloId} ${textoId}` : undefined}\n onClick={(event) => {\n setHoje(today ?? new Date());\n painel.current?.toggle(event);\n }}\n >\n <span className=\"cr-date-range-button__icon\" aria-hidden=\"true\">\n <CalendarDots />\n </span>\n <span id={textoId} className=\"cr-date-range-button__text\">\n {value ? (\n <>\n {periodo && <span className=\"cr-date-range-button__period\">{periodo.label}:</span>}\n <span>{periodoPorExtenso(value)}</span>\n </>\n ) : (\n <span className=\"cr-date-range-button__placeholder\">{placeholder}</span>\n )}\n </span>\n <span className=\"cr-date-range-button__caret\" aria-hidden=\"true\">\n <CaretDown />\n </span>\n </PrimeButton>\n <OverlayPanel\n ref={painel as Ref<OverlayPanel>}\n unstyled\n id={painelId}\n onShow={() => {\n setAberto(true);\n // Ao abrir, o foco vai para o período marcado (ou o primeiro item do painel).\n const raiz = document.getElementById(painelId);\n const alvo =\n raiz?.querySelector<HTMLElement>('input[type=\"radio\"]:checked') ??\n raiz?.querySelector<HTMLElement>('input, button, [tabindex=\"0\"]');\n alvo?.focus();\n }}\n onHide={() => {\n setAberto(false);\n // Ao fechar (Fechar, Selecionar, Esc), o foco volta ao botão; num clique fora, fica onde\n // o clique o deixou.\n const ativo = document.activeElement;\n if (ativo === document.body || document.getElementById(painelId)?.contains(ativo)) {\n botao.current?.focus();\n }\n }}\n pt={{\n root: {\n className: 'cr-date-range__panel',\n role: 'dialog',\n 'aria-label': label ?? 'Escolher período',\n },\n // Animação de entrada e saída (a do Prime) e o lado do painel em relação ao botão.\n transition: transicaoDoPopup<OverlayPanelPassThroughTransitionType>(() =>\n seguirLado(document.getElementById(painelId), botao.current),\n ),\n }}\n >\n <PainelDePeriodo\n value={value}\n periods={periods}\n footer={footer}\n today={today ?? hoje}\n numberOfMonths={numberOfMonths}\n minDate={minDate}\n maxDate={maxDate}\n disabledDates={disabledDates}\n offDays={offDays}\n onClose={fechar}\n onSelect={(range, item) => {\n onChange?.({ value: range, period: item });\n fechar();\n }}\n />\n </OverlayPanel>\n </div>\n );\n },\n);\n","import { forwardRef, useImperativeHandle, useRef, type HTMLAttributes } from 'react';\nimport { Divider as PrimeDivider } from 'primereact/divider';\nimport './Divider.css';\n\n/** Horizontal Divider e Vertical Divider no Figma. */\nexport type DividerOrientation = 'horizontal' | 'vertical';\n/** Style no Figma: Solid (Default no vertical) e Dashed. */\nexport type DividerVariant = 'solid' | 'dashed';\n\nexport interface DividerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n orientation?: DividerOrientation;\n variant?: DividerVariant;\n}\n\n// Base: Divider do PrimeReact no modo unstyled (role=\"separator\" e aria-orientation do Prime).\n// O visual vem todo do Divider.css. O Figma não tem conteúdo no meio da linha, então o Cristal\n// não repassa children.\nexport const Divider = forwardRef<HTMLDivElement, DividerProps>(function Divider(\n { orientation = 'horizontal', variant = 'solid', className, style, ...props },\n ref,\n) {\n // A ref do Prime é um objeto com getElement(); a do Cristal entrega o próprio elemento.\n const primeRef = useRef<PrimeDivider>(null);\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLDivElement);\n\n const classes = ['cr-divider', `cr-divider--${orientation}`, `cr-divider--${variant}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <PrimeDivider\n unstyled\n ref={primeRef}\n layout={orientation}\n // No unstyled, className e style do Divider do Prime não chegam ao elemento; vão pelo pt.\n pt={{\n root: { className: classes, style },\n content: { className: 'cr-divider__content' },\n }}\n {...props}\n />\n );\n});\n","import {\n forwardRef,\n useCallback,\n useRef,\n type ButtonHTMLAttributes,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { Button as PrimeButton } from 'primereact/button';\nimport { Tooltip, type TooltipPosition } from '../Tooltip';\nimport './IconButton.css';\n\n/**\n * Hierarchy no Figma: Primary (Filled), Secondary (Tonal), Tertiary (Outlined) e Other (Icon),\n * que aqui é `ghost`: só o ícone, com fundo no hover.\n */\nexport type IconButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'ghost';\n/** Size no Figma: 32, 36, 42 e 48px. */\nexport type IconButtonSize = 'xsmall' | 'small' | 'medium' | 'large';\n\nexport interface IconButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n variant?: IconButtonVariant;\n size?: IconButtonSize;\n /** Ícone do botão (Leading Icon no Figma). Use um ícone de `@vector-business-services/cristal-ds-web/icons`. */\n icon: ReactNode;\n /** Obrigatório: o botão não tem texto, então é isso que o leitor de tela anuncia. */\n 'aria-label': string;\n /**\n * Tooltip do botão. Padrão: o próprio `aria-label`, para quem vê saber o que o ícone faz. Um\n * texto diferente vira também a descrição do botão; `false` tira o tooltip.\n */\n tooltip?: ReactNode | false;\n /** Lado do tooltip. Padrão: bottom. */\n tooltipPosition?: TooltipPosition;\n}\n\n// Base: Button do PrimeReact no modo unstyled, só com ícone (o `p-button-icon-only` do PrimeNG).\n// O comportamento é o do Prime e o visual vem todo do IconButton.css. Por padrão ganha o Tooltip\n// do Cristal com o próprio nome (no hover e no foco), já que o ícone sozinho não diz o que faz;\n// como o texto é o nome, ele não vira descrição (o leitor de tela não lê duas vezes).\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(function IconButton(\n {\n variant = 'primary',\n size = 'large',\n icon,\n type = 'button',\n tooltip,\n tooltipPosition,\n className,\n ...props\n },\n ref,\n) {\n // O <button> vai para a ref de quem usa e para a do Tooltip. O Prime preenche a ref num efeito,\n // então ela é uma função que repassa o botão quando ele chega.\n const botao = useRef<HTMLButtonElement | null>(null);\n const ligar = useCallback(\n (elemento: HTMLButtonElement | null) => {\n botao.current = elemento;\n if (typeof ref === 'function') ref(elemento);\n else if (ref) ref.current = elemento;\n },\n [ref],\n );\n const texto = tooltip ?? props['aria-label'];\n\n const classes = [\n 'cr-icon-button',\n `cr-icon-button--${variant}`,\n `cr-icon-button--${size}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <>\n <PrimeButton\n unstyled\n // O PrimeReact tipa a ref como a instância da classe, mas entrega o <button> nela.\n ref={ligar as unknown as Ref<PrimeButton>}\n type={type}\n className={classes}\n {...props}\n >\n <span className=\"cr-icon-button__icon\" aria-hidden=\"true\">\n {icon}\n </span>\n </PrimeButton>\n {texto !== false && (\n <Tooltip\n target={botao}\n content={texto}\n position={tooltipPosition}\n describe={texto !== props['aria-label']}\n />\n )}\n </>\n );\n});\n","import {\n forwardRef,\n useEffect,\n useId,\n useImperativeHandle,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { Sidebar, type SidebarPassThroughTransitionType } from 'primereact/sidebar';\nimport { ArrowLeft, X } from '@phosphor-icons/react';\nimport { IconButton } from '../IconButton';\nimport '../../comum.css';\nimport './Drawer.css';\n\n/** Side no Figma: de que lado da tela a gaveta abre. */\nexport type DrawerSide = 'right' | 'left';\n/**\n * Behavior no Figma: Full Body (tudo rola junto) ou Fixed Body (cabeçalho e rodapé fixos, só o\n * corpo rola).\n */\nexport type DrawerBehavior = 'full' | 'fixed';\n/**\n * Largura da gaveta. O Figma só tem a de 340px (small); medium (480px), large (720px) e full (a\n * tela toda) são do Cristal, nas faixas usuais de drawer.\n */\nexport type DrawerSize = 'small' | 'medium' | 'large' | 'full';\n\n/** Controle do Drawer pela ref: o elemento só existe com a gaveta aberta. */\nexport interface DrawerHandle {\n /** A raiz da gaveta, o role=dialog (null fechada). */\n getElement: () => HTMLDivElement | null;\n}\n\nexport interface DrawerProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'title' | 'children' | 'content'\n> {\n visible: boolean;\n /** Pedido para fechar (X, Esc ou clique no overlay). */\n onHide: () => void;\n /** Título do cabeçalho; também é o nome acessível da gaveta. */\n title: string;\n /** Subtítulo descritivo, até 2 linhas. */\n subtitle?: ReactNode;\n /** Padrão: right. */\n side?: DrawerSide;\n /** Padrão: full. */\n behavior?: DrawerBehavior;\n /** Padrão: small (340px, a do Figma). */\n size?: DrawerSize;\n /**\n * Com overlay (padrão): a gaveta é modal, a página atrás fica bloqueada e o clique no overlay\n * fecha. Sem overlay (`false`): a página continua rolando e clicável, e só o X e o Esc fecham.\n */\n modal?: boolean;\n /** Mostra o botão de voltar antes do título. */\n onBack?: () => void;\n backLabel?: string;\n closeLabel?: string;\n /** Botões do rodapé, alinhados à direita. */\n footer?: ReactNode;\n children?: ReactNode;\n id?: string;\n className?: string;\n}\n\nconst FOCAVEIS =\n 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\n// Base: Sidebar do PrimeReact no modo unstyled (o p-sidebar/p-drawer do PrimeNG da produção):\n// overlay, Esc, clique fora, bloqueio da rolagem da página, o foco no X ao abrir e a transição de\n// entrada e saída (300ms) são do Prime. O conteúdo vem do `content` do Prime, com o cabeçalho, o\n// corpo e o rodapé do Figma. O Sidebar do Prime marca a gaveta como role=complementary e não\n// segura o foco; com overlay ela é modal, então o Cristal a marca como dialog (aria-modal),\n// mantém o Tab dentro dela e devolve o foco a quem a abriu. Sem overlay (modal={false}) ela é um\n// dialog não modal: a página continua usável, o Tab sai dela e o clique fora não fecha.\nexport const Drawer = forwardRef<DrawerHandle, DrawerProps>(function Drawer(\n {\n visible,\n onHide,\n title,\n subtitle,\n side = 'right',\n behavior = 'full',\n size = 'small',\n modal = true,\n onBack,\n backLabel = 'Voltar',\n closeLabel = 'Fechar',\n footer,\n children,\n id,\n className,\n ...props\n },\n ref,\n) {\n const primeRef = useRef<Sidebar>(null);\n useImperativeHandle(ref, () => ({\n getElement: () => primeRef.current?.getElement() ?? null,\n }));\n const autoId = useId();\n const titleId = `${autoId}-title`;\n const subtitleId = `${autoId}-subtitle`;\n const panelRef = useRef<HTMLDivElement>(null);\n const retorno = useRef<HTMLElement | null>(null);\n\n // Ao abrir, guarda quem tinha o foco; ao fechar, devolve.\n useEffect(() => {\n if (visible) {\n retorno.current = document.activeElement as HTMLElement | null;\n return;\n }\n retorno.current?.focus();\n retorno.current = null;\n }, [visible]);\n\n // Quem rola (o corpo no fixed, a gaveta toda no full) entra no Tab só quando rola, para a\n // rolagem pelo teclado. O Prime só monta o conteúdo depois de abrir: a ref de callback começa a\n // medir quando ele existe.\n const [rolagem, setRolagem] = useState<HTMLDivElement | null>(null);\n const [rolavel, setRolavel] = useState(false);\n useEffect(() => {\n if (!rolagem) return;\n const medir = () => setRolavel(rolagem.scrollHeight > rolagem.clientHeight);\n medir();\n const observer = new ResizeObserver(medir);\n observer.observe(rolagem);\n [...rolagem.children].forEach((child) => observer.observe(child));\n return () => observer.disconnect();\n }, [rolagem, children]);\n\n // Com overlay, o Tab e o Shift+Tab ciclam dentro da gaveta.\n const prenderFoco = (event: KeyboardEvent) => {\n if (!modal || event.key !== 'Tab' || !panelRef.current) return;\n const focaveis = [...panelRef.current.querySelectorAll<HTMLElement>(FOCAVEIS)];\n const primeiro = focaveis[0];\n const ultimo = focaveis[focaveis.length - 1];\n if (!primeiro || !ultimo) return;\n if (event.shiftKey && document.activeElement === primeiro) {\n event.preventDefault();\n ultimo.focus();\n } else if (!event.shiftKey && document.activeElement === ultimo) {\n event.preventDefault();\n primeiro.focus();\n }\n };\n\n const classes = [\n 'cr-drawer',\n `cr-drawer--${side}`,\n `cr-drawer--${behavior}`,\n `cr-drawer--size-${size}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <Sidebar\n {...props}\n ref={primeRef}\n unstyled\n id={id}\n visible={visible}\n onHide={onHide}\n position={side}\n modal={modal}\n blockScroll={modal}\n // Sem overlay, o Prime fecharia com qualquer clique na página: só o X e o Esc fecham.\n dismissable={modal}\n pt={{\n mask: {\n className: `cr-drawer__mask cr-drawer__mask--${side}${modal ? '' : ' cr-drawer__mask--sem-overlay'}`,\n },\n root: {\n className: classes,\n role: 'dialog',\n 'aria-modal': modal || undefined,\n 'aria-labelledby': titleId,\n 'aria-describedby': subtitle ? subtitleId : undefined,\n onKeyDown: prenderFoco,\n },\n // No unstyled o Prime não põe classes na transição: o Cristal dá as dele (Drawer.css).\n // O tipo do Prime exige o addEndListener do react-transition-group, que aqui não se usa.\n transition: {\n classNames: {\n enter: 'cr-drawer--enter',\n enterActive: 'cr-drawer--enter-active',\n exitActive: 'cr-drawer--exit-active',\n },\n } as SidebarPassThroughTransitionType,\n }}\n content={({ closeIconRef, hide }) => (\n <div\n ref={(element) => {\n panelRef.current = element;\n if (behavior === 'full') setRolagem(element);\n }}\n className=\"cr-rolagem-fina cr-drawer__panel\"\n tabIndex={behavior === 'full' && rolavel ? 0 : undefined}\n >\n <div className=\"cr-drawer__header\">\n <div className=\"cr-drawer__title-row\">\n {onBack && (\n <IconButton\n variant=\"tertiary\"\n size=\"xsmall\"\n icon={<ArrowLeft />}\n aria-label={backLabel}\n onClick={onBack}\n />\n )}\n <h2 id={titleId} className=\"cr-drawer__title\">\n {title}\n </h2>\n </div>\n {subtitle && (\n <p id={subtitleId} className=\"cr-drawer__subtitle\">\n {subtitle}\n </p>\n )}\n </div>\n <div\n ref={behavior === 'fixed' ? setRolagem : undefined}\n className=\"cr-rolagem-fina cr-drawer__body\"\n tabIndex={behavior === 'fixed' && rolavel ? 0 : undefined}\n >\n {children}\n </div>\n {footer && <div className=\"cr-drawer__footer\">{footer}</div>}\n <IconButton\n ref={closeIconRef as unknown as Ref<HTMLButtonElement>}\n className=\"cr-drawer__close\"\n variant=\"tertiary\"\n size=\"xsmall\"\n icon={<X />}\n aria-label={closeLabel}\n onClick={(event) => hide(event)}\n />\n </div>\n )}\n />\n );\n});\n","import {\n forwardRef,\n useId,\n useRef,\n useState,\n type FormEvent,\n type HTMLAttributes,\n type MouseEvent,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { Menubar as PrimeMenubar, type MenubarPassThroughOptions } from 'primereact/menubar';\nimport { Button as PrimeButton } from 'primereact/button';\nimport { InputText } from 'primereact/inputtext';\nimport { List, MagnifyingGlass } from '@phosphor-icons/react';\nimport { Badge } from '../Badge';\nimport { Menu, type MenuHandle, type MenuItem } from '../Menu';\nimport { Tooltip } from '../Tooltip';\nimport logoSimbolo from './assets/vector-logo-simbolo.svg';\nimport logoTexto from './assets/vector-logo-texto.svg';\nimport './Menubar.css';\n\n/** Um botão de ferramenta (.Menubar Tools Button no Figma). */\nexport interface MenubarTool {\n /** Nome do botão: vira o aria-label e o texto do tooltip. */\n label: string;\n /** Use um ícone de `@vector-business-services/cristal-ds-web/icons`. */\n icon: ReactNode;\n /** Contador sobre o ícone (Show Badge no Figma). */\n badge?: ReactNode;\n /** Como o leitor de tela lê o contador (padrão: o próprio valor). */\n badgeLabel?: string;\n /** Itens do menu que o botão abre (Dropdown List no Figma). */\n menu?: MenuItem[];\n onClick?: (event: MouseEvent<HTMLButtonElement>) => void;\n /** Continua visível no tablet (768px), como o sino no Figma. */\n showOnTablet?: boolean;\n}\n\n/** Usuário logado (.Menubar Profile no Figma). */\nexport interface MenubarUser {\n name: string;\n /** Perfil de acesso, abaixo do nome. */\n role?: string;\n /** URL da foto. Sem foto, o avatar mostra a inicial do nome (Type=No Image). */\n avatar?: string;\n}\n\nexport interface MenubarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Logo à esquerda (.Nav Logo no Figma); o padrão é o logo da Vector. */\n logo?: ReactNode;\n /** Menu principal aberto: deixa o botão de menu no estado Active. */\n menuOpen?: boolean;\n /** Clique no botão de menu (abre o Menu Principal). */\n onMenuToggle?: (event: MouseEvent<HTMLButtonElement>) => void;\n /** Nome acessível do botão de menu. */\n menuLabel?: string;\n /** Mostra a busca no centro (só no desktop). */\n showSearch?: boolean;\n searchPlaceholder?: string;\n /** Valor da busca (controlado). Sem ele, a busca guarda o próprio valor. */\n searchValue?: string;\n onSearchChange?: (value: string) => void;\n /** Envio da busca (Enter ou lupa). */\n onSearch?: (value: string) => void;\n /** Nome acessível da lupa. */\n searchButtonLabel?: string;\n /** Botões de ferramenta à direita (.Nav Tools no Figma). */\n tools?: MenubarTool[];\n user?: MenubarUser;\n /** Itens do menu do perfil. Sem eles, o perfil não é clicável. */\n userMenu?: MenuItem[];\n id?: string;\n className?: string;\n}\n\nfunction VectorLogo() {\n return (\n <span className=\"cr-menubar__logo\" role=\"img\" aria-label=\"Vector\">\n <img className=\"cr-menubar__logo-texto\" src={logoTexto} alt=\"\" />\n <img className=\"cr-menubar__logo-simbolo\" src={logoSimbolo} alt=\"\" />\n </span>\n );\n}\n\nfunction ToolButton({ tool }: { tool: MenubarTool }) {\n const buttonRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<MenuHandle>(null);\n const menuId = useId();\n const [open, setOpen] = useState(false);\n const hasMenu = Boolean(tool.menu?.length);\n const hasBadge = tool.badge !== undefined && tool.badge !== null;\n const name = hasBadge ? `${tool.label}, ${tool.badgeLabel ?? String(tool.badge)}` : tool.label;\n\n const classes = [\n 'cr-menubar__tool',\n tool.showOnTablet && 'cr-menubar__tool--tablet',\n open && 'cr-menubar__tool--active',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <>\n <PrimeButton\n unstyled\n // O PrimeReact tipa a ref como a instância da classe, mas entrega o <button> nela.\n ref={buttonRef as unknown as Ref<PrimeButton>}\n type=\"button\"\n className={classes}\n aria-label={name}\n aria-haspopup={hasMenu ? 'menu' : undefined}\n aria-expanded={hasMenu ? open : undefined}\n aria-controls={hasMenu && open ? menuId : undefined}\n onClick={(event) => {\n tool.onClick?.(event);\n if (hasMenu) menuRef.current?.toggle(event);\n }}\n >\n <span className=\"cr-menubar__tool-icon\" aria-hidden=\"true\">\n {tool.icon}\n </span>\n {hasBadge && (\n <Badge className=\"cr-menubar__badge\" aria-hidden=\"true\">\n {tool.badge}\n </Badge>\n )}\n </PrimeButton>\n {/* No Figma o tooltip aparece no Hover e some com o menu aberto (Active). */}\n <Tooltip target={buttonRef} content={tool.label} disabled={open} />\n {hasMenu && (\n <Menu\n ref={menuRef}\n id={menuId}\n popup\n popupAlignment=\"right\"\n model={tool.menu ?? []}\n aria-label={tool.label}\n onShow={() => setOpen(true)}\n onHide={() => setOpen(false)}\n />\n )}\n </>\n );\n}\n\nfunction Profile({ user, menu }: { user: MenubarUser; menu?: MenuItem[] }) {\n const menuRef = useRef<MenuHandle>(null);\n const menuId = useId();\n const [open, setOpen] = useState(false);\n const hasMenu = Boolean(menu?.length);\n\n const content = (\n <>\n <span className=\"cr-menubar__profile-text\">\n <span className=\"cr-menubar__profile-name\">{user.name}</span>\n {user.role && <span className=\"cr-menubar__profile-role\">{user.role}</span>}\n </span>\n {/* O nome já está no texto ao lado: o avatar é só visual. Um <span> do Cristal, não o\n Avatar do Prime: ele renderiza um <div>, que não pode ficar dentro do <button> do perfil. */}\n <span\n aria-hidden=\"true\"\n className={`cr-menubar__avatar${user.avatar ? '' : ' cr-menubar__avatar--initial'}`}\n >\n {user.avatar ? (\n <img className=\"cr-menubar__avatar-image\" src={user.avatar} alt=\"\" />\n ) : (\n user.name.trim().charAt(0).toUpperCase()\n )}\n </span>\n </>\n );\n\n if (!hasMenu) return <div className=\"cr-menubar__profile\">{content}</div>;\n\n return (\n <>\n <PrimeButton\n unstyled\n type=\"button\"\n className=\"cr-menubar__profile cr-menubar__profile--button\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-controls={open ? menuId : undefined}\n onClick={(event) => menuRef.current?.toggle(event)}\n >\n {content}\n </PrimeButton>\n <Menu\n ref={menuRef}\n id={menuId}\n popup\n popupAlignment=\"right\"\n model={menu ?? []}\n aria-label={user.name}\n onShow={() => setOpen(true)}\n onHide={() => setOpen(false)}\n />\n </>\n );\n}\n\n// Base: Menubar do PrimeReact no modo unstyled, espelhando o p-menubar do PrimeNG da produção. A\n// navegação do Vector fica no Menu Principal (aberto pelo botão de menu), então o Menubar não\n// tem itens próprios: usa só as áreas start e end do Prime. Os botões são Buttons do Prime, a\n// busca é um InputText, o avatar é o Avatar e os menus e tooltips são o Menu e o Tooltip do\n// Cristal. O layout responsivo (1360, 768 e 360px no Figma) vem de container queries no\n// Menubar.css, pela largura do próprio Menubar.\nexport const Menubar = forwardRef<HTMLDivElement, MenubarProps>(function Menubar(\n {\n logo,\n menuOpen = false,\n onMenuToggle,\n menuLabel = 'Menu principal',\n showSearch = true,\n searchPlaceholder = 'Buscar no Vector',\n searchValue,\n onSearchChange,\n onSearch,\n searchButtonLabel = 'Buscar',\n tools = [],\n user,\n userMenu,\n id,\n className,\n ...props\n },\n ref,\n) {\n const [innerSearch, setInnerSearch] = useState('');\n const search = searchValue ?? innerSearch;\n\n const submitSearch = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n onSearch?.(search);\n };\n\n const classes = ['cr-menubar', !showSearch && 'cr-menubar--no-search', className]\n .filter(Boolean)\n .join(' ');\n\n const pt: MenubarPassThroughOptions = {\n // A área start some do layout (display: contents): o início e a busca viram colunas do grid.\n start: { className: 'cr-menubar__start' },\n end: { className: 'cr-menubar__end' },\n // Sem itens, a lista do Prime (role=menubar) ficaria vazia e focável: fica escondida.\n menu: { hidden: true },\n };\n\n const start = (\n <>\n <div className=\"cr-menubar__init\">\n <PrimeButton\n unstyled\n type=\"button\"\n className={`cr-menubar__menu-button${menuOpen ? ' cr-menubar__menu-button--active' : ''}`}\n aria-label={menuLabel}\n aria-expanded={menuOpen}\n onClick={onMenuToggle}\n >\n <span className=\"cr-menubar__menu-icon\" aria-hidden=\"true\">\n <List />\n </span>\n </PrimeButton>\n {logo ?? <VectorLogo />}\n </div>\n {showSearch && (\n <form role=\"search\" className=\"cr-menubar__search\" onSubmit={submitSearch}>\n <InputText\n unstyled\n className=\"cr-menubar__search-input\"\n placeholder={searchPlaceholder}\n aria-label={searchPlaceholder}\n value={search}\n onChange={(event) => {\n setInnerSearch(event.target.value);\n onSearchChange?.(event.target.value);\n }}\n />\n <PrimeButton\n unstyled\n type=\"submit\"\n className=\"cr-menubar__search-button\"\n aria-label={searchButtonLabel}\n >\n <span className=\"cr-menubar__search-icon\" aria-hidden=\"true\">\n <MagnifyingGlass />\n </span>\n </PrimeButton>\n </form>\n )}\n </>\n );\n\n const end =\n tools.length > 0 || user ? (\n <>\n {tools.length > 0 && (\n <div className=\"cr-menubar__tools\">\n {tools.map((tool) => (\n <ToolButton key={tool.label} tool={tool} />\n ))}\n </div>\n )}\n {user && <Profile user={user} menu={userMenu} />}\n </>\n ) : null;\n\n return (\n <div ref={ref} id={id} className={classes}>\n <PrimeMenubar\n {...props}\n unstyled\n className=\"cr-menubar__bar\"\n model={[]}\n start={start}\n end={end}\n pt={pt}\n />\n </div>\n );\n});\n","import {\n forwardRef,\n useImperativeHandle,\n useRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { Tag as PrimeTag } from 'primereact/tag';\nimport './Tag.css';\n\n/** Type no Figma. */\nexport type TagVariant =\n 'default' | 'success' | 'warning' | 'danger' | 'info' | 'purple' | 'gray' | 'inverse' | 'outline';\n/** Size no Figma: small = 24px, medium = 28px, large = 32px, x-large = 36px de altura. */\nexport type TagSize = 'small' | 'medium' | 'large' | 'x-large';\n\nexport interface TagProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: TagVariant;\n size?: TagSize;\n /** Ícone à esquerda (Leading Icon no Figma). Use um ícone de `@vector-business-services/cristal-ds-web/icons`. */\n icon?: ReactNode;\n /** Texto da tag (Label no Figma). */\n children: ReactNode;\n}\n\n// Base: Tag do PrimeReact no modo unstyled; o visual vem todo do Tag.css. Rótulo de status\n// estático (sem interação); para contador ou bolinha de notificação, use o Badge.\nexport const Tag = forwardRef<HTMLSpanElement, TagProps>(function Tag(\n { variant = 'default', size = 'small', icon, className, children, ...props },\n ref,\n) {\n const primeRef = useRef<PrimeTag>(null);\n // O PrimeReact entrega na ref um objeto com getElement(); o Cristal repassa o <span>.\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLSpanElement);\n\n const classes = ['cr-tag', `cr-tag--${variant}`, `cr-tag--${size}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <PrimeTag\n unstyled\n ref={primeRef}\n className={classes}\n // Como função, o ícone é renderizado pelo Cristal (o Prime só repassa props a funções).\n icon={\n icon\n ? () => (\n <span className=\"cr-tag__icon\" aria-hidden=\"true\">\n {icon}\n </span>\n )\n : undefined\n }\n value={children}\n {...props}\n />\n );\n});\n","import {\n forwardRef,\n useContext,\n useImperativeHandle,\n useRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n type SyntheticEvent,\n} from 'react';\nimport { PrimeReactContext, PrimeReactProvider } from 'primereact/api';\nimport {\n Menu as PrimeMenu,\n type MenuPassThroughOptions,\n type MenuPassThroughTransitionType,\n} from 'primereact/menu';\nimport type { MenuItem as PrimeMenuItem, MenuItemCommandEvent } from 'primereact/menuitem';\nimport { DribbbleLogo } from '@phosphor-icons/react';\nimport { Tag } from '../Tag';\nimport '../Divider/Divider.css';\nimport { transicaoDoPopup, seguirLado } from '../../popup';\nimport '../../comum.css';\nimport './MenuPrincipal.css';\n\n/** Um produto do menu (.Menu Principal / Item no Figma). */\nexport interface MenuPrincipalItem {\n /** Nome do produto (Item Label no Figma). */\n label: string;\n /** Texto de apoio abaixo do nome, até 2 linhas. */\n description?: string;\n /** Ícone no círculo à esquerda. Use um ícone de `@vector-business-services/cristal-ds-web/icons`. */\n icon: ReactNode;\n /** Texto da tag no canto (Show Tag no Figma, onde é \"Experimente\"). */\n tag?: string;\n /** Ícone da tag. Padrão: DribbbleLogo, o do Figma. */\n tagIcon?: ReactNode;\n /** Ação do item; o menu popup fecha depois dela. */\n command?: (event: MenuItemCommandEvent) => void;\n /** Link do item; sem ele o clique não navega. */\n url?: string;\n target?: string;\n id?: string;\n className?: string;\n}\n\n/** Um grupo de produtos com título (Product Group no Figma). */\nexport interface MenuPrincipalGroup {\n /** Título do grupo, acima dos itens. */\n label: string;\n items: MenuPrincipalItem[];\n id?: string;\n}\n\nexport type MenuPrincipalEntry = MenuPrincipalItem | MenuPrincipalGroup;\n\nexport interface MenuPrincipalProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Itens soltos e grupos, na ordem; o divisor tracejado entra antes e depois de cada grupo. */\n model: MenuPrincipalEntry[];\n /** Abre sobre a tela, posicionado no elemento que chamou `toggle`/`show` pela ref. */\n popup?: boolean;\n /** Nome acessível do menu. */\n 'aria-label'?: string;\n onShow?: (event: SyntheticEvent) => void;\n onHide?: (event: SyntheticEvent) => void;\n id?: string;\n className?: string;\n}\n\n/** Controle do menu popup, pela ref. */\nexport interface MenuPrincipalHandle {\n toggle: (event: SyntheticEvent) => void;\n show: (event: SyntheticEvent) => void;\n hide: (event: SyntheticEvent) => void;\n /** O <div> raiz do menu (só existe com o popup aberto). */\n getElement: () => HTMLDivElement | null;\n}\n\nconst isGroup = (entry: MenuPrincipalEntry): entry is MenuPrincipalGroup => 'items' in entry;\n\n// Base: Menu do PrimeReact no modo unstyled (teclado, foco, popup e fechamento do Prime,\n// espelhando o p-menu do PrimeNG da produção), como o Menu do Cristal; os grupos são os\n// submenus do Prime e os divisores, os separadores. No Figma é o Menu Principal (página Menu\n// Suspenso), aberto pelo botão de menu do Menubar. O item é um template do Prime, com o ícone,\n// o nome, a descrição e a tag; o visual vem do MenuPrincipal.css.\nexport const MenuPrincipal = forwardRef<MenuPrincipalHandle, MenuPrincipalProps>(\n function MenuPrincipal(\n {\n model,\n popup = false,\n 'aria-label': ariaLabel = 'Menu principal',\n 'aria-labelledby': ariaLabelledBy,\n onShow,\n onHide,\n id,\n className,\n ...props\n },\n ref,\n ) {\n const primeRef = useRef<PrimeMenu>(null);\n const context = useContext(PrimeReactContext);\n\n // Onde termina o botão que abriu o popup: o CSS limita a altura ao espaço da tela abaixo dele\n // (e acompanha a tela se ela diminuir com o menu aberto).\n const [baseDoAlvo, setBaseDoAlvo] = useState<number>();\n // Quem abriu o popup: também serve para medir o lado (acima ou abaixo) em que ele abriu.\n const alvo = useRef<Element | null>(null);\n const medirAlvo = (event: SyntheticEvent) => {\n const elemento = event.currentTarget as Element | null;\n if (!(elemento instanceof Element)) return;\n alvo.current = elemento;\n setBaseDoAlvo(elemento.getBoundingClientRect().bottom);\n };\n\n useImperativeHandle(ref, () => ({\n toggle: (event) => {\n medirAlvo(event);\n primeRef.current?.toggle(event);\n },\n show: (event) => {\n medirAlvo(event);\n primeRef.current?.show(event);\n },\n hide: (event) => primeRef.current?.hide(event),\n getElement: () => primeRef.current?.getElement() ?? null,\n }));\n\n const toPrime = (item: MenuPrincipalItem): PrimeMenuItem => ({\n id: item.id,\n // Sem label no Prime: ele viraria o aria-label do item, só com parte do texto visível. O\n // nome vem do conteúdo: o nome, a descrição e a tag. Os espaços entre eles não aparecem\n // (estão em flex), mas separam as palavras no nome (\"Início Tela inicial\", não colado).\n command: item.command,\n url: item.url,\n target: item.target,\n className: item.className,\n // O <a> leva o data-pc-section do Prime: o Enter do teclado clica nele (e segue o link).\n template: () => (\n <a\n className=\"cr-menu-principal__action\"\n data-pc-section=\"action\"\n href={item.url ?? '#'}\n target={item.target}\n tabIndex={-1}\n >\n <span className=\"cr-menu-principal__icon\" aria-hidden=\"true\">\n {item.icon}\n </span>\n <span className=\"cr-menu-principal__text\">\n <span className=\"cr-menu-principal__label\">{item.label}</span>{' '}\n {item.description && (\n <span className=\"cr-menu-principal__description\">{item.description}</span>\n )}\n </span>{' '}\n {item.tag && (\n <Tag\n className=\"cr-menu-principal__tag\"\n variant=\"warning\"\n icon={item.tagIcon ?? <DribbbleLogo />}\n >\n {item.tag}\n </Tag>\n )}\n </a>\n ),\n });\n\n // Divisor antes e depois de cada grupo (entre dois itens soltos, não).\n const items: PrimeMenuItem[] = [];\n let anterior: MenuPrincipalEntry | undefined;\n model.forEach((entry) => {\n if (anterior && (isGroup(entry) || isGroup(anterior))) items.push({ separator: true });\n items.push(\n isGroup(entry)\n ? { id: entry.id, label: entry.label, items: entry.items.map(toPrime) }\n : toPrime(entry),\n );\n anterior = entry;\n });\n\n const classes = ['cr-menu-principal', popup && 'cr-menu-principal--popup', className]\n .filter(Boolean)\n .join(' ');\n\n const pt: MenuPassThroughOptions = {\n // O nome acessível vai na lista (role=menu), como no Menu.\n menu: {\n className: 'cr-menu-principal__list',\n 'aria-label': ariaLabelledBy ? undefined : ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n },\n submenuHeader: { className: 'cr-menu-principal__group' },\n // O divisor tracejado é o Divider do Cristal (dashed).\n separator: {\n className:\n 'cr-divider cr-divider--horizontal cr-divider--dashed cr-menu-principal__separator',\n },\n menuitem: { className: 'cr-menu-principal__item' },\n // Lado do popup, medido logo depois de o Prime posicionar.\n // Numa microtarefa: no onEnter o Prime ainda está religando a ref (como no Menu).\n transition: transicaoDoPopup<MenuPassThroughTransitionType>(() =>\n queueMicrotask(() => seguirLado(primeRef.current?.getElement(), alvo.current)),\n ),\n };\n\n const menu = (\n <PrimeMenu\n {...props}\n unstyled\n ref={primeRef}\n id={id}\n className={classes}\n style={\n popup && baseDoAlvo !== undefined\n ? ({ '--cr-menu-principal-topo': `${baseDoAlvo}px` } as CSSProperties)\n : undefined\n }\n model={items}\n popup={popup}\n onShow={onShow}\n onHide={onHide}\n pt={pt}\n />\n );\n\n // Como no Menu: sem um PrimeReactProvider na aplicação, o clique fora dá erro no Prime.\n return context ? menu : <PrimeReactProvider>{menu}</PrimeReactProvider>;\n },\n);\n","import {\n forwardRef,\n useImperativeHandle,\n useRef,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport {\n Message as PrimeMessage,\n type MessageProps as PrimeMessageProps,\n} from 'primereact/message';\nimport {\n CheckCircle,\n Info,\n SealWarning,\n Warning,\n WarningCircle,\n XCircle,\n} from '@phosphor-icons/react';\nimport './Message.css';\n\n/** Type no Figma. */\nexport type MessageType = 'info' | 'warning' | 'success' | 'danger' | 'highlight' | 'neutral';\n\nexport interface MessageProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'content'> {\n /** Padrão: info. */\n type?: MessageType;\n /** Texto (Message no Figma). */\n children: ReactNode;\n /** Show Icon no Figma. Padrão: true. */\n showIcon?: boolean;\n id?: string;\n className?: string;\n}\n\n// Highlight e Neutral não têm severity próprio no Prime: usam os outros dois dele.\nconst SEVERITY: Record<MessageType, PrimeMessageProps['severity']> = {\n info: 'info',\n warning: 'warn',\n success: 'success',\n danger: 'error',\n highlight: 'contrast',\n neutral: 'secondary',\n};\n\nconst ICON: Record<MessageType, ReactElement> = {\n info: <Info />,\n warning: <Warning />,\n success: <CheckCircle />,\n danger: <XCircle />,\n highlight: <SealWarning />,\n neutral: <WarningCircle />,\n};\n\n// Base: Message do PrimeReact no modo unstyled (o p-message do PrimeNG da produção): a faixa com\n// ícone e texto e o role=\"alert\" (aria-live polite) são do Prime. O Cristal troca o severity pelo\n// Type do Figma, põe os ícones do Figma e desenha pelos tokens (Message.css). A ref entrega a raiz.\nexport const Message = forwardRef<HTMLDivElement, MessageProps>(function Message(\n { type = 'info', children, showIcon = true, id, className, ...props },\n ref,\n) {\n const primeRef = useRef<PrimeMessage>(null);\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLDivElement);\n\n return (\n <PrimeMessage\n {...props}\n unstyled\n ref={primeRef}\n id={id}\n severity={SEVERITY[type]}\n text={children}\n // Sem ícone, um fragmento vazio: com undefined o Prime põe o ícone dele.\n icon={\n showIcon ? (\n <span className=\"cr-message__icon\" aria-hidden=\"true\">\n {ICON[type]}\n </span>\n ) : (\n <></>\n )\n }\n pt={{\n root: {\n className: ['cr-message', `cr-message--${type}`, className].filter(Boolean).join(' '),\n },\n text: { className: 'cr-message__text' },\n }}\n />\n );\n});\n","import {\n forwardRef,\n useEffect,\n useId,\n useImperativeHandle,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { Dialog as PrimeDialog, type DialogPassThroughTransitionType } from 'primereact/dialog';\nimport { Question, X } from '@phosphor-icons/react';\nimport { IconButton } from '../IconButton';\nimport '../../comum.css';\nimport './Dialog.css';\n\n/**\n * Size no Figma: Small (520px), Medium (768px) e Large (1200 x 720px; abaixo de 768px de tela\n * vira tela cheia, como o Responsive=360 do Figma).\n */\nexport type DialogSize = 'small' | 'medium' | 'large';\n\n/** Controle do Dialog pela ref: o elemento só existe com o modal aberto. */\nexport interface DialogHandle {\n /** O role=dialog do modal (null fechado). */\n getElement: () => HTMLDivElement | null;\n}\n\nexport interface DialogProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n // onClick: o Dialog do Prime o declara com PointerEvent, incompatível com o do <div>.\n 'title' | 'children' | 'content' | 'onClick'\n> {\n visible: boolean;\n /** Pedido para fechar (X, Esc ou clique fora, com dismissableMask). */\n onHide: () => void;\n /**\n * Fecha com o clique no overlay, fora do modal. Padrão: true, como o Drawer. Desligue quando\n * fechar por engano faz perder algo (formulário preenchido, confirmação importante).\n */\n dismissableMask?: boolean;\n /** Título do cabeçalho; também é o nome acessível do modal. */\n title: string;\n /** Padrão: large. */\n size?: DialogSize;\n /** Mostra o botão de ajuda (QuestionMark) ao lado do X, no small e no medium. */\n onHelp?: () => void;\n helpLabel?: string;\n closeLabel?: string;\n /** Botões do rodapé, à direita. */\n footer?: ReactNode;\n /** Conteúdo do rodapé à esquerda (ex.: o botão secundário dos Two/Tree Buttons do Figma). */\n footerStart?: ReactNode;\n children?: ReactNode;\n id?: string;\n className?: string;\n}\n\n// Base: Dialog do PrimeReact no modo unstyled (o p-dialog do PrimeNG da produção): overlay,\n// role=dialog com aria-modal, Esc, fechar com o clique fora (dismissableMask, que o Cristal liga por\n// padrão, como no Drawer), foco preso no modal e devolvido a quem o abriu, e o bloqueio da rolagem\n// da página são do Prime. O conteúdo vem do `content` do Prime, com o cabeçalho, o\n// corpo e o rodapé do Figma. Quando o corpo rola, o rodapé ganha a sombra do Figma (\"Shadow (Up\n// content scrollable)\").\nexport const Dialog = forwardRef<DialogHandle, DialogProps>(function Dialog(\n {\n visible,\n onHide,\n dismissableMask = true,\n title,\n size = 'large',\n onHelp,\n helpLabel = 'Ajuda',\n closeLabel = 'Fechar',\n footer,\n footerStart,\n children,\n id,\n className,\n ...props\n },\n ref,\n) {\n const primeRef = useRef<PrimeDialog>(null);\n useImperativeHandle(ref, () => ({\n getElement: () => primeRef.current?.getElement() ?? null,\n }));\n const autoId = useId();\n const titleId = `${autoId}-title`;\n // O Prime só monta o conteúdo depois de abrir: a ref de callback começa a medir quando o corpo\n // existe. Quando ele rola (conteúdo maior que a altura), o rodapé ganha sombra.\n const [body, setBody] = useState<HTMLDivElement | null>(null);\n const [rolavel, setRolavel] = useState(false);\n useEffect(() => {\n if (!body) return;\n const medir = () => setRolavel(body.scrollHeight > body.clientHeight);\n medir();\n const observer = new ResizeObserver(medir);\n observer.observe(body);\n [...body.children].forEach((child) => observer.observe(child));\n return () => observer.disconnect();\n }, [body, children]);\n\n const classes = ['cr-modal', `cr-modal--${size}`, rolavel && 'cr-modal--scrollable', className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <PrimeDialog\n {...props}\n ref={primeRef}\n unstyled\n id={id}\n visible={visible}\n onHide={onHide}\n dismissableMask={dismissableMask}\n draggable={false}\n resizable={false}\n blockScroll\n pt={{\n mask: { className: 'cr-modal__mask' },\n root: {\n className: classes,\n 'aria-labelledby': titleId,\n 'aria-describedby': undefined,\n },\n // Entrada e saída do tema do Prime (p-dialog, Dialog.css). No unstyled o Prime não põe\n // classes na transição; o tipo exige o addEndListener do react-transition-group.\n transition: {\n classNames: {\n enter: 'cr-modal--entrar',\n enterActive: 'cr-modal--entrando',\n enterDone: 'cr-modal--entrou',\n exitActive: 'cr-modal--saindo',\n },\n } as DialogPassThroughTransitionType,\n }}\n content={({ hide, closeRef }) => (\n <>\n <div className=\"cr-modal__header\">\n <h2 id={titleId} className=\"cr-modal__title\">\n {title}\n </h2>\n <div className=\"cr-modal__tools\">\n {onHelp && size !== 'large' && (\n <IconButton\n variant=\"tertiary\"\n size=\"xsmall\"\n icon={<Question />}\n aria-label={helpLabel}\n onClick={onHelp}\n />\n )}\n <IconButton\n ref={closeRef as unknown as Ref<HTMLButtonElement>}\n variant=\"tertiary\"\n size=\"xsmall\"\n icon={<X />}\n aria-label={closeLabel}\n onClick={(event) => hide(event)}\n />\n </div>\n </div>\n <div\n ref={setBody}\n className=\"cr-rolagem-fina cr-modal__body\"\n // Quando rola, o corpo entra na ordem do Tab para a rolagem pelo teclado (o axe exige\n // que uma área com rolagem seja focável).\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n tabIndex={rolavel ? 0 : undefined}\n >\n {children}\n </div>\n {(footer || footerStart) && (\n <div className=\"cr-modal__footer\">\n <div className=\"cr-modal__footer-start\">{footerStart}</div>\n <div className=\"cr-modal__footer-end\">{footer}</div>\n </div>\n )}\n </>\n )}\n />\n );\n});\n\n// Nomes antigos (do Figma), mantidos até a próxima versão: o nome do Cristal é o do PrimeNG 19.\n/** @deprecated Use `Dialog` (o nome do PrimeNG 19). */\nexport const Modal = Dialog;\n/** @deprecated Use `DialogHandle`. */\nexport type ModalHandle = DialogHandle;\n/** @deprecated Use `DialogProps`. */\nexport type ModalProps = DialogProps;\n/** @deprecated Use `DialogSize`. */\nexport type ModalSize = DialogSize;\n","import { forwardRef, useId, type HTMLAttributes, type Ref } from 'react';\nimport {\n MultiSelect as PrimeMultiSelect,\n type MultiSelectPassThroughOptions,\n type MultiSelectPassThroughTransitionType,\n} from 'primereact/multiselect';\nimport type { ChipRemoveEvent } from 'primereact/chip';\nimport { CaretDown, Check, Info, MagnifyingGlass, WarningCircle } from '@phosphor-icons/react';\nimport { Chip } from '../Chip';\nimport '../InputText/InputText.css';\nimport { juntarIds } from '../../aria';\nimport { transicaoDoPopup } from '../../popup';\nimport '../Checkbox/Checkbox.css';\nimport '../../lista.css';\nimport '../../comum.css';\nimport './MultiSelect.css';\n\n/** Type no Figma: Outline (com borda) e Filled (com fundo). */\nexport type MultiSelectVariant = 'outline' | 'filled';\n/** Size no Figma: 32, 36, 42 e 48px de altura do campo. */\nexport type MultiSelectSize = 'xsmall' | 'small' | 'medium' | 'large';\n/** Density da lista no Figma: itens de 40px (normal) ou 32px (compact). */\nexport type MultiSelectDensity = 'normal' | 'compact';\n\n/**\n * As demais props vão para o MultiSelect do Prime: as aria-* no combobox (aria-describedby soma com\n * a dica) e o resto na caixa do campo.\n */\nexport interface MultiSelectProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'defaultValue' | 'children' | 'placeholder'\n> {\n variant?: MultiSelectVariant;\n size?: MultiSelectSize;\n density?: MultiSelectDensity;\n /** Rótulo acima do campo (Label no Figma). Sem rótulo, passe `aria-label`. */\n label?: string;\n 'aria-label'?: string;\n /** Opções da lista. */\n options: unknown[];\n /** Campo da opção usado como texto (padrão: `label`). */\n optionLabel?: string;\n /** Campo da opção usado como valor; sem ele, o valor é a própria opção. */\n optionValue?: string;\n /** Valores selecionados (controlado). */\n value?: unknown[];\n onChange?: (value: unknown[]) => void;\n /** Texto do campo vazio (Field Text no Figma). */\n placeholder?: string;\n /** Mostra a busca no topo da lista (Search Filter no Figma). */\n filter?: boolean;\n filterPlaceholder?: string;\n /**\n * Quantos chips aparecem no campo; acima disso, um chip só com o resumo (Chip Group\n * \"4 itens selecionados\" no Figma), cujo X limpa a seleção.\n */\n maxChips?: number;\n /** Texto do resumo; `{0}` vira a quantidade. */\n selectedItemsLabel?: string;\n /** Nome acessível do checkbox de selecionar todos. */\n selectAllLabel?: string;\n /** Texto da lista quando a busca não encontra nada. */\n emptyFilterMessage?: string;\n /** Nome acessível do X dos chips. */\n removeLabel?: string;\n /** Dica abaixo do campo (Hint Info no Figma). */\n hint?: string;\n /** Mensagem de erro: deixa o campo no estado Error e mostra a dica de erro no lugar da dica. */\n error?: string;\n required?: boolean;\n disabled?: boolean;\n id?: string;\n name?: string;\n className?: string;\n}\n\n// Base: MultiSelect do PrimeReact no modo unstyled (abrir/fechar, teclado, seleção, filtro e\n// \"selecionar todos\" do Prime, espelhando o p-multiSelect do PrimeNG da produção). O rótulo, a\n// caixa e a dica reaproveitam o campo do InputText (.cr-field); os selecionados viram Chips do Cristal\n// pelo selectedItemTemplate, porque o Prime mostra o resumo acima do limite só como texto, e o\n// Figma o mostra como chip. A ref vai para o <input> (combobox) do Prime, que recebe o foco.\nexport const MultiSelect = forwardRef<HTMLInputElement, MultiSelectProps>(function MultiSelect(\n {\n variant = 'outline',\n size = 'large',\n density = 'normal',\n label,\n options,\n optionLabel = 'label',\n optionValue,\n value,\n onChange,\n placeholder = 'Selecionar opção',\n filter = false,\n filterPlaceholder = 'Pesquisar',\n maxChips = 3,\n selectedItemsLabel = '{0} itens selecionados',\n removeLabel = 'Remover',\n selectAllLabel = 'Selecionar todos',\n emptyFilterMessage = 'Nenhum resultado encontrado',\n hint,\n error,\n required,\n disabled,\n id,\n className,\n ...props\n },\n ref,\n) {\n const autoId = useId();\n const inputId = id ?? autoId;\n const hintId = `${inputId}-hint`;\n const supportText = error ?? hint;\n const selected = value ?? [];\n const overflow = selected.length > maxChips;\n\n const classes = [\n 'cr-field',\n `cr-field--${variant}`,\n `cr-field--${size}`,\n 'cr-multiselect',\n error && 'cr-field--error',\n disabled && 'cr-field--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const valueOf = (option: unknown) =>\n optionValue ? (option as Record<string, unknown>)[optionValue] : option;\n const labelOf = (item: unknown) => {\n const option = options.find((o) => valueOf(o) === item) ?? item;\n const text = (option as Record<string, unknown> | null)?.[optionLabel];\n return String(text ?? item);\n };\n\n // O X do chip não pode abrir/fechar a lista (o clique subiria até o campo do Prime).\n const remove = (event: ChipRemoveEvent, next: unknown[]) => {\n event.originalEvent.stopPropagation();\n onChange?.(next);\n return false;\n };\n\n const renderSelected = (item?: unknown) => {\n if (item === undefined) {\n return <span className=\"cr-multiselect__placeholder\">{placeholder}</span>;\n }\n if (overflow) {\n if (selected.indexOf(item) !== 0) return null;\n return (\n <Chip\n className=\"cr-multiselect__chip\"\n label={selectedItemsLabel.replace('{0}', String(selected.length))}\n disabled={disabled}\n onRemove={disabled ? undefined : (event) => remove(event, [])}\n removeLabel={removeLabel}\n />\n );\n }\n return (\n <Chip\n className=\"cr-multiselect__chip\"\n label={labelOf(item)}\n disabled={disabled}\n onRemove={\n disabled\n ? undefined\n : (event) =>\n remove(\n event,\n selected.filter((v) => v !== item),\n )\n }\n removeLabel={`${removeLabel} ${labelOf(item)}`}\n />\n );\n };\n\n // O checkbox interno do Prime (sem template) usa a caixa do Checkbox do Cristal; o hover e o\n // marcado são do MultiSelect (MultiSelect.css).\n const checkbox = {\n root: { className: 'cr-checkbox__control cr-multiselect__checkbox' },\n box: { className: 'cr-checkbox__box cr-multiselect__checkbox-box' },\n input: { className: 'cr-checkbox__input cr-multiselect__checkbox-input' },\n };\n\n const pt: MultiSelectPassThroughOptions = {\n // Com a lista aberta o foco vai para a busca (no body), fora da caixa: o estado Focused do\n // Figma vem do estado do Prime.\n root: (options) => {\n const open = (options as { state?: { overlayVisible?: boolean } })?.state?.overlayVisible;\n return {\n className: `cr-field__control cr-multiselect__control${open ? ' cr-multiselect__control--open' : ''}`,\n };\n },\n hiddenInputWrapper: { className: 'cr-so-leitor cr-multiselect__hidden' },\n input: {\n 'aria-describedby': juntarIds(supportText && hintId, props['aria-describedby']),\n 'aria-invalid': error ? true : undefined,\n 'aria-required': required || undefined,\n },\n labelContainer: { className: 'cr-multiselect__value' },\n label: { className: 'cr-multiselect__chips' },\n trigger: { className: 'cr-field__icon cr-multiselect__trigger' },\n panel: { className: `cr-lista cr-multiselect__panel cr-multiselect__panel--${density}` },\n header: { className: 'cr-multiselect__header' },\n headerCheckboxContainer: { className: 'cr-multiselect__select-all' },\n // O Prime repete role=checkbox na <div> em volta do <input>: o leitor de tela veria dois.\n headerCheckbox: {\n ...checkbox,\n root: { ...checkbox.root, role: undefined, 'aria-checked': undefined },\n input: { ...checkbox.input, 'aria-label': selectAllLabel },\n },\n filterContainer: { className: 'cr-multiselect__search' },\n // O filtro é um InputText do Prime, que lê o pass-through da raiz (a tipagem do Prime diverge).\n filterInput: {\n root: { className: 'cr-multiselect__search-input', 'aria-label': filterPlaceholder },\n } as never,\n closeButton: { className: 'cr-multiselect__close' },\n wrapper: { className: 'cr-lista__rolagem' },\n list: { className: 'cr-lista__itens' },\n item: (options) => {\n const context = (options as { context?: { focusedIndex?: number; index?: number } })?.context;\n const focused = context !== undefined && context.focusedIndex === context.index;\n return {\n className: `cr-lista__item cr-multiselect__item${focused ? ' cr-multiselect__item--focused' : ''}`,\n };\n },\n checkboxContainer: { className: 'cr-multiselect__item-checkbox' },\n // O item (role=option) já diz se está selecionado; o checkbox é só visual para o leitor de tela.\n // O item (role=option) já diz se está selecionado. O checkbox do Prime fica só visual: inert\n // tira o <input> do foco e do leitor de tela (tabindex=-1 e aria-hidden não bastam dentro de\n // um option), e o clique cai no item.\n checkbox: {\n ...checkbox,\n root: { ...checkbox.root, role: undefined, 'aria-checked': undefined, inert: true },\n },\n emptyMessage: { className: 'cr-multiselect__empty' },\n // Animação de entrada e saída da lista, a do Prime (comum.css).\n transition: transicaoDoPopup<MultiSelectPassThroughTransitionType>(),\n };\n\n return (\n <div className={classes}>\n {label && (\n <label className=\"cr-field__label\" htmlFor={inputId}>\n {label}\n {required && (\n <span className=\"cr-field__required\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n <PrimeMultiSelect\n unstyled\n inputId={inputId}\n inputRef={ref as Ref<HTMLSelectElement>}\n value={selected}\n options={options}\n optionLabel={optionLabel}\n optionValue={optionValue}\n onChange={(event) => onChange?.(event.value as unknown[])}\n disabled={disabled}\n invalid={Boolean(error)}\n placeholder={placeholder}\n selectedItemTemplate={renderSelected}\n filter={filter}\n filterPlaceholder={filterPlaceholder}\n // 7 itens visíveis antes da rolagem, como no Figma (40px no normal, 32px no compact).\n scrollHeight={density === 'compact' ? '224px' : '280px'}\n emptyFilterMessage={emptyFilterMessage}\n filterIcon={\n <span className=\"cr-multiselect__search-icon\" aria-hidden=\"true\">\n <MagnifyingGlass />\n </span>\n }\n dropdownIcon={<CaretDown aria-hidden=\"true\" />}\n checkboxIcon={<Check aria-hidden=\"true\" />}\n itemCheckboxIcon={<Check aria-hidden=\"true\" />}\n pt={pt}\n {...props}\n />\n {supportText && (\n <p id={hintId} className={`cr-field__hint${error ? ' cr-field__hint--error' : ''}`}>\n <span className=\"cr-field__hint-icon\" aria-hidden=\"true\">\n {error ? <WarningCircle /> : <Info />}\n </span>\n {supportText}\n </p>\n )}\n </div>\n );\n});\n","import {\n cloneElement,\n forwardRef,\n useState,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { TabMenu } from 'primereact/tabmenu';\nimport type { MenuItem } from 'primereact/menuitem';\nimport { ArrowLeft, ArrowsInSimple, ArrowsOutSimple } from '@phosphor-icons/react';\nimport { IconButton } from '../IconButton';\nimport { Tag } from '../Tag';\nimport './PageHeader.css';\n\n/**\n * Type no Figma: o estilo das abas. Primary tem o ícone em círculo e o fundo azul na aba ativa;\n * Secondary é só o texto, com o sublinhado na ativa.\n */\nexport type PageHeaderVariant = 'primary' | 'secondary';\n\n/** Uma aba (.Page Header Tab Item ou .Page Header Tab Secondary Item no Figma). */\nexport interface PageHeaderTab {\n label: string;\n /** Ícone de 16px. No primary fica no círculo de 32px; no secondary é opcional. */\n icon?: ReactNode;\n disabled?: boolean;\n}\n\nexport interface PageHeaderProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Título da página (Page Title no Figma). */\n title: string;\n /** Padrão: primary. */\n variant?: PageHeaderVariant;\n /** Mostra o botão de voltar antes do título (Show Back Button no Figma). */\n onBack?: () => void;\n backLabel?: string;\n /** Texto da Tag depois do título (Show Tag no Figma). */\n tag?: ReactNode;\n /** Segment Control das ferramentas (Show Segment Control no Figma): um `<SelectButton>`. */\n segmentControl?: ReactNode;\n /** Botões das ferramentas (Show Buttons no Figma), 8px entre eles. */\n actions?: ReactNode;\n /**\n * Mostra o botão de expandir, o último das ferramentas. Recebe o novo estado: true ao expandir,\n * false ao recolher.\n */\n onExpand?: (expanded: boolean) => void;\n /** Expandido (controlado). Sem ele, o PageHeader alterna sozinho a cada clique. */\n expanded?: boolean;\n /** Nome do botão recolhido (ArrowsOutSimple). */\n expandLabel?: string;\n /** Nome do botão expandido (ArrowsInSimple). */\n collapseLabel?: string;\n /** Abas abaixo do título (Show Tabs no Figma). */\n tabs?: PageHeaderTab[];\n /** Aba ativa (controlado). Sem ela, o PageHeader controla sozinho. */\n activeTab?: number;\n onTabChange?: (index: number) => void;\n /** Nome das abas para o leitor de tela. Padrão: o título. */\n tabsLabel?: string;\n}\n\n// O PrimeReact (e o PrimeNG da produção) não tem cabeçalho de página: o Cristal monta\n// o do Figma com o IconButton (voltar e expandir), a Tag, o SelectButton recebido e, nas abas,\n// o TabMenu do PrimeReact no modo unstyled (o p-tabMenu do PrimeNG): menubar com as setas, Home e\n// End do Prime. O conteúdo de cada aba vem do template do Prime, com o ícone e o texto do Figma, e\n// a ativa ganha aria-current. Fluido e responsivo pela própria largura (PageHeader.css).\nexport const PageHeader = forwardRef<HTMLDivElement, PageHeaderProps>(function PageHeader(\n {\n title,\n variant = 'primary',\n onBack,\n backLabel = 'Voltar',\n tag,\n segmentControl,\n actions,\n onExpand,\n expanded,\n expandLabel = 'Expandir',\n collapseLabel = 'Recolher',\n tabs,\n activeTab,\n onTabChange,\n tabsLabel,\n className,\n ...props\n },\n ref,\n) {\n // Com onTabChange o Prime trata a aba ativa como controlada: sem activeTab, o PageHeader guarda.\n const [interna, setInterna] = useState(0);\n const ativa = activeTab ?? interna;\n // O expandir alterna o ícone: ArrowsOutSimple para expandir, ArrowsInSimple para recolher.\n const [expandidoInterno, setExpandidoInterno] = useState(false);\n const expandido = expanded ?? expandidoInterno;\n\n const tools = segmentControl || actions;\n\n const tabTemplate = (tab: PageHeaderTab) =>\n // O TabMenu também passa o index da aba nas opções, além do que o tipo do MenuItem declara.\n function TabContent(item: MenuItem, options: unknown) {\n const { element, index } = options as { element: ReactElement; index: number };\n const active = index === ativa;\n return cloneElement(\n element,\n { 'aria-current': active ? 'page' : undefined } as object,\n <>\n {(variant === 'primary' || tab.icon) && (\n <span className=\"cr-page-header__tab-icon\" aria-hidden=\"true\">\n {tab.icon}\n </span>\n )}\n <span className=\"cr-page-header__tab-label\">{item.label}</span>\n </>,\n );\n };\n\n const classes = ['cr-page-header', `cr-page-header--${variant}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div ref={ref} className={classes} {...props}>\n <div\n className={`cr-page-header__title-group${tools ? ' cr-page-header__title-group--tools' : ''}`}\n >\n <div className=\"cr-page-header__title-text\">\n {onBack && (\n <IconButton\n variant=\"tertiary\"\n size=\"small\"\n icon={<ArrowLeft />}\n aria-label={backLabel}\n onClick={onBack}\n />\n )}\n <h1 className=\"cr-page-header__title\">{title}</h1>\n {tag && <Tag className=\"cr-page-header__tag\">{tag}</Tag>}\n </div>\n {tools && (\n <div className=\"cr-page-header__tools\">\n {segmentControl && <div className=\"cr-page-header__segment\">{segmentControl}</div>}\n {actions && <div className=\"cr-page-header__actions\">{actions}</div>}\n </div>\n )}\n {onExpand && (\n <IconButton\n className=\"cr-page-header__expand\"\n variant=\"tertiary\"\n size=\"medium\"\n icon={expandido ? <ArrowsInSimple /> : <ArrowsOutSimple />}\n aria-label={expandido ? collapseLabel : expandLabel}\n onClick={() => {\n setExpandidoInterno(!expandido);\n onExpand(!expandido);\n }}\n />\n )}\n </div>\n {tabs && tabs.length > 0 && (\n <TabMenu\n unstyled\n model={tabs.map((tab) => ({\n label: tab.label,\n disabled: tab.disabled,\n template: tabTemplate(tab),\n }))}\n activeIndex={ativa}\n onTabChange={(event) => {\n setInterna(event.index);\n onTabChange?.(event.index);\n }}\n pt={{\n root: { className: 'cr-page-header__tabs' },\n menu: { className: 'cr-page-header__tab-list', 'aria-label': tabsLabel ?? title },\n menuitem: { className: 'cr-page-header__tab-item' },\n action: { className: 'cr-page-header__tab' },\n inkbar: { className: 'cr-page-header__inkbar' },\n }}\n />\n )}\n </div>\n );\n});\n","import { forwardRef, useCallback, useId, useState, type HTMLAttributes, type Ref } from 'react';\nimport {\n Dropdown,\n type DropdownPassThroughOptions,\n type DropdownPassThroughTransitionType,\n} from 'primereact/dropdown';\nimport { CaretDown, CaretUp, Info, WarningCircle } from '@phosphor-icons/react';\nimport '../InputText/InputText.css';\nimport { juntarIds } from '../../aria';\nimport '../../lista.css';\nimport { transicaoDoPopup, seguirLado } from '../../popup';\nimport '../../comum.css';\nimport './Select.css';\n\n/** Type no Figma: Outline (com borda) e Filled (com fundo). */\nexport type SelectVariant = 'outline' | 'filled';\n/** Size no Figma: 32, 36, 42 e 48px de altura do campo. */\nexport type SelectSize = 'xsmall' | 'small' | 'medium' | 'large';\n\n/**\n * As demais props vão para o Dropdown do Prime: as aria-* no combobox (aria-describedby soma com a\n * dica) e o resto na caixa do campo.\n */\nexport interface SelectProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'defaultValue' | 'children' | 'placeholder'\n> {\n variant?: SelectVariant;\n size?: SelectSize;\n /** Rótulo acima do campo (Label no Figma). Sem rótulo, passe `aria-label`. */\n label?: string;\n 'aria-label'?: string;\n /** Opções da lista. */\n options: unknown[];\n /** Campo da opção usado como texto (padrão: `label`). */\n optionLabel?: string;\n /** Campo da opção usado como valor; sem ele, o valor é a própria opção. */\n optionValue?: string;\n /** Valor selecionado (controlado). */\n value?: unknown;\n onChange?: (value: unknown) => void;\n /** Texto do campo vazio (Field Text no Figma). */\n placeholder?: string;\n /** Dica abaixo do campo (Hint Info no Figma). */\n hint?: string;\n /** Mensagem de erro: deixa o campo no estado Error e mostra a dica de erro no lugar da dica. */\n error?: string;\n required?: boolean;\n disabled?: boolean;\n /** Vai no campo (combobox). */\n id?: string;\n name?: string;\n className?: string;\n}\n\n// Base: Dropdown do PrimeReact no modo unstyled (abrir/fechar, teclado, seleção e posição da\n// lista do Prime, espelhando o p-dropdown do PrimeNG da produção). O rótulo, a caixa e a dica\n// reaproveitam o campo do InputText (.cr-field) e a lista segue a Dropdown List do Menu. O Dropdown do\n// Prime não marca o campo como combobox: o Cristal completa (role, aria-expanded e aria-controls).\n// Pelo teclado, o Prime leva o foco para o item (role=option), que o leitor de tela anuncia. A\n// ref vai para o campo, que recebe o foco.\nexport const Select = forwardRef<HTMLInputElement, SelectProps>(function Select(\n {\n variant = 'outline',\n size = 'large',\n label,\n 'aria-label': ariaLabel,\n options,\n optionLabel = 'label',\n optionValue,\n value,\n onChange,\n placeholder = 'Selecione uma opção',\n hint,\n error,\n required,\n disabled,\n id,\n name,\n className,\n ...props\n },\n ref,\n) {\n const autoId = useId();\n const inputId = id ?? autoId;\n const hintId = `${inputId}-hint`;\n const listId = `${inputId}-list`;\n const supportText = error ?? hint;\n const [open, setOpen] = useState(false);\n\n const setInputRef = useCallback(\n (input: HTMLInputElement | null) => {\n input?.setAttribute('role', 'combobox');\n if (typeof ref === 'function') ref(input);\n else if (ref) ref.current = input;\n },\n [ref],\n );\n\n const classes = [\n 'cr-field',\n `cr-field--${variant}`,\n `cr-field--${size}`,\n 'cr-select',\n error && 'cr-field--error',\n disabled && 'cr-field--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const pt: DropdownPassThroughOptions = {\n root: {\n className: `cr-field__control cr-select__control${open ? ' cr-select__control--open' : ''}`,\n // O Prime aponta para um item mesmo sem destaque (dropdownItem_-1); o foco vai no item.\n 'aria-activedescendant': undefined,\n },\n // O <select> escondido do Prime só existe para formulários: fora da árvore de acessibilidade.\n select: { 'aria-hidden': true },\n hiddenSelectedMessage: { className: 'cr-so-leitor cr-select__hidden' },\n // O Prime usa a mesma chave no texto do campo e no combobox escondido.\n input: { className: 'cr-select__value' },\n trigger: { className: 'cr-field__icon cr-select__trigger', 'aria-hidden': true },\n panel: { className: 'cr-lista cr-select__panel' },\n // Animação de entrada e saída (a do Prime) e o lado da lista, medido logo depois de o Prime\n // posicionar.\n transition: transicaoDoPopup<DropdownPassThroughTransitionType>(() =>\n seguirLado(\n document.getElementById(listId)?.closest('.cr-select__panel'),\n document.getElementById(inputId)?.closest('.cr-select__control'),\n ),\n ),\n wrapper: { className: 'cr-lista__rolagem cr-select__wrapper' },\n list: { className: 'cr-lista__itens cr-select__list', id: listId },\n // Selecionado e em foco (teclado) pelo contexto do pt, a API pública do Prime (não data-p-*).\n item: ({ context }: { context: { selected: boolean; focused: boolean } }) => ({\n className: [\n 'cr-lista__item cr-select__item',\n context.selected && 'cr-lista__item--selecionado',\n context.focused && 'cr-lista__item--focado',\n ]\n .filter(Boolean)\n .join(' '),\n }),\n emptyMessage: { className: 'cr-lista__item cr-select__item cr-select__empty' },\n };\n\n return (\n <div className={classes}>\n {label && (\n <label className=\"cr-field__label\" htmlFor={inputId}>\n {label}\n {required && (\n <span className=\"cr-field__required\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n <Dropdown\n {...props}\n unstyled\n inputId={inputId}\n focusInputRef={setInputRef as unknown as Ref<HTMLInputElement>}\n value={value}\n options={options}\n optionLabel={optionLabel}\n optionValue={optionValue}\n onChange={(event) => onChange?.(event.value)}\n onShow={() => setOpen(true)}\n onHide={() => setOpen(false)}\n disabled={disabled}\n required={required}\n name={name}\n invalid={Boolean(error)}\n placeholder={placeholder}\n valueTemplate={(option: unknown) =>\n option == null ? (\n <span className=\"cr-select__placeholder\">{placeholder}</span>\n ) : (\n String((option as Record<string, unknown>)[optionLabel] ?? option)\n )\n }\n // 5 itens visíveis antes da rolagem, como no Figma (itens de 37px).\n scrollHeight=\"185px\"\n dropdownIcon={<CaretDown />}\n collapseIcon={<CaretUp />}\n aria-label={label ? undefined : ariaLabel}\n aria-expanded={open}\n aria-controls={open ? listId : undefined}\n aria-describedby={juntarIds(supportText && hintId, props['aria-describedby'])}\n aria-invalid={error ? true : undefined}\n aria-required={required || undefined}\n pt={pt}\n />\n {supportText && (\n <p id={hintId} className={`cr-field__hint${error ? ' cr-field__hint--error' : ''}`}>\n <span className=\"cr-field__hint-icon\" aria-hidden=\"true\">\n {error ? <WarningCircle /> : <Info />}\n </span>\n {supportText}\n </p>\n )}\n </div>\n );\n});\n","import {\n forwardRef,\n useImperativeHandle,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n type SyntheticEvent,\n} from 'react';\nimport {\n Paginator as PrimePaginator,\n type PaginatorChangeEvent,\n type PaginatorPageLinksOptions,\n type PaginatorTemplateOptions,\n type PaginatorRowsPerPageDropdownOptions,\n} from 'primereact/paginator';\nimport { CaretDoubleLeft, CaretDoubleRight, CaretLeft, CaretRight } from '@phosphor-icons/react';\nimport { Select } from '../Select';\nimport './Paginator.css';\n\n/** O que o onPageChange recebe (o mesmo evento do Prime). */\nexport interface PaginatorPageChangeEvent {\n /** Índice do primeiro item da página. */\n first: number;\n /** Itens por página. */\n rows: number;\n /** Página, a partir de 0. */\n page: number;\n pageCount: number;\n}\n\nexport interface PaginatorProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n totalRecords: number;\n /** Índice do primeiro item da página (controlado). Sem ele, o Paginator controla sozinho. */\n first?: number;\n /** Itens por página (controlado). Padrão: o primeiro de rowsPerPageOptions, ou 10. */\n rows?: number;\n /** Opções do Select de itens por página; sem elas, o Select não aparece. */\n rowsPerPageOptions?: number[];\n /** Quantos números de página aparecem. Padrão: 5, como no Figma. */\n pageLinkSize?: number;\n onPageChange?: (event: PaginatorPageChangeEvent) => void;\n /** Nome do Select para o leitor de tela. */\n rowsPerPageLabel?: string;\n id?: string;\n className?: string;\n}\n\n// Seta (.Paginator Arrows no Figma), no lugar do botão do Prime: o Prime entrega o clique e se\n// ela está desabilitada (nas pontas).\nconst seta =\n (label: string, icon: ReactNode) =>\n (options: { onClick: (event: SyntheticEvent) => void; disabled: boolean }) => (\n <button\n type=\"button\"\n className=\"cr-paginator__arrow\"\n aria-label={label}\n disabled={options.disabled}\n onClick={options.onClick}\n >\n {icon}\n </button>\n );\n\n// Template dos botões e do Select, também usado pelo paginador da Table (o paginator do DataTable\n// do Prime aceita o mesmo template).\nexport const paginatorTemplate = (rowsPerPageLabel: string): PaginatorTemplateOptions => ({\n layout: 'FirstPageLink PrevPageLink PageLinks NextPageLink LastPageLink RowsPerPageDropdown',\n FirstPageLink: seta('Primeira página', <CaretDoubleLeft aria-hidden=\"true\" />),\n PrevPageLink: seta('Página anterior', <CaretLeft aria-hidden=\"true\" />),\n NextPageLink: seta('Próxima página', <CaretRight aria-hidden=\"true\" />),\n LastPageLink: seta('Última página', <CaretDoubleRight aria-hidden=\"true\" />),\n PageLinks: (options: PaginatorPageLinksOptions) => {\n const ativa = options.page === options.currentPage;\n return (\n <button\n type=\"button\"\n className=\"cr-paginator__page\"\n aria-label={`Página ${options.page + 1}`}\n aria-current={ativa ? 'page' : undefined}\n onClick={options.onClick}\n >\n {options.page + 1}\n </button>\n );\n },\n // O Prime chama o template mesmo sem rowsPerPageOptions.\n RowsPerPageDropdown: (options: PaginatorRowsPerPageDropdownOptions) =>\n options.options.length > 0 && (\n <Select\n className=\"cr-paginator__rows\"\n size=\"medium\"\n aria-label={rowsPerPageLabel}\n options={options.options}\n optionValue=\"value\"\n value={options.value}\n // O Prime lê o número de itens no value (o tipo dele diz string).\n onChange={(value) => options.onChange({ value } as unknown as PaginatorChangeEvent)}\n />\n ),\n});\n\n// Base: Paginator do PrimeReact no modo unstyled (o p-paginator do PrimeNG da produção): a conta\n// das páginas, a janela de números, as setas desabilitadas nas pontas e a volta à primeira página\n// ao trocar os itens por página são do Prime. Pelo template do Prime, o Cristal desenha os botões\n// do Figma (setas com os Carets e os números em círculo), com nomes em português, e troca o\n// Dropdown do Prime pelo Select do Cristal, como no Figma. A ref entrega a raiz.\nexport const Paginator = forwardRef<HTMLDivElement, PaginatorProps>(function Paginator(\n {\n totalRecords,\n first,\n rows,\n rowsPerPageOptions,\n pageLinkSize = 5,\n onPageChange,\n rowsPerPageLabel = 'Itens por página',\n id,\n className,\n ...props\n },\n ref,\n) {\n const primeRef = useRef<PrimePaginator>(null);\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLDivElement);\n\n // O Paginator do Prime só muda de página pelas props: sem first e rows, o Cristal guarda.\n const [interno, setInterno] = useState({\n first: 0,\n rows: rowsPerPageOptions?.[0] ?? 10,\n });\n const atual = { first: first ?? interno.first, rows: rows ?? interno.rows };\n\n return (\n <PrimePaginator\n {...props}\n unstyled\n ref={primeRef}\n id={id}\n totalRecords={totalRecords}\n first={atual.first}\n rows={atual.rows}\n rowsPerPageOptions={rowsPerPageOptions}\n pageLinkSize={pageLinkSize}\n onPageChange={(event) => {\n setInterno({ first: event.first, rows: event.rows });\n onPageChange?.(event);\n }}\n template={paginatorTemplate(rowsPerPageLabel)}\n pt={{\n root: { className: ['cr-paginator', className].filter(Boolean).join(' ') },\n pages: { className: 'cr-paginator__pages' },\n }}\n />\n );\n});\n","import { forwardRef, useImperativeHandle, useRef, type HTMLAttributes } from 'react';\nimport { Panel as PrimePanel } from 'primereact/panel';\nimport './Panel.css';\n\n// O onToggle nativo da <div> colide com o do Panel do Prime, que o Figma não usa.\nexport type PanelProps = Omit<HTMLAttributes<HTMLDivElement>, 'onToggle'>;\n\n// Base: Panel do PrimeReact no modo unstyled (o p-panel do PrimeNG da produção). No Figma o Panel é\n// só o contêiner da seção da página, com o conteúdo num slot e sem cabeçalho: o Cristal não repassa\n// header, toggleable nem footer do Prime, e o conteúdo vai em children. Sem cabeçalho, o Prime\n// deixaria a região de conteúdo apontando para um título que não existe: o Cristal tira o role e o\n// aria-labelledby (para nomear o Panel como região, passe role=\"region\" e aria-label).\nexport const Panel = forwardRef<HTMLDivElement, PanelProps>(function Panel(\n { className, style, children, ...props },\n ref,\n) {\n // A ref do Prime é um objeto com getElement(); a do Cristal entrega o próprio elemento.\n const primeRef = useRef<PrimePanel>(null);\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLDivElement);\n\n return (\n <PrimePanel\n unstyled\n ref={primeRef}\n // No unstyled, className e style do Panel do Prime não chegam ao elemento; vão pelo pt.\n pt={{\n root: { className: ['cr-panel', className].filter(Boolean).join(' '), style },\n toggleableContent: {\n className: 'cr-panel__body',\n role: undefined,\n 'aria-labelledby': undefined,\n },\n content: { className: 'cr-panel__content' },\n }}\n {...props}\n >\n {children}\n </PrimePanel>\n );\n});\n","import {\n forwardRef,\n useId,\n useImperativeHandle,\n useRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n type UIEvent,\n} from 'react';\nimport { ScrollPanel as PrimeScrollPanel } from 'primereact/scrollpanel';\nimport './ScrollPanel.css';\n\nexport interface ScrollPanelProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n children?: ReactNode;\n /** O que a área mostra, para o leitor de tela (ex.: \"Histórico da carga\"). */\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n /** Dê uma altura (ou max-height) para a área rolar. */\n style?: CSSProperties;\n id?: string;\n className?: string;\n}\n\nconst porcentagem = (posicao: number, total: number, visivel: number) =>\n total > visivel ? Math.round((posicao / (total - visivel)) * 100) : 0;\n\n// Base: ScrollPanel do PrimeReact no modo unstyled (o p-scrollPanel do PrimeNG da produção): o\n// Prime esconde a barra nativa e desenha as dele, que acompanham a rolagem e podem ser arrastadas.\n// Visual da Scrollbar do Figma: 8px, polegar fill/neutral/subtle, trilho transparente. O Prime\n// deixa as barras apontando (aria-controls) para um id que o conteúdo não tem, com os valores\n// trocados e em pixels, e o conteúdo que rola fora do Tab: o Cristal dá o foco ao conteúdo (que\n// rola pelo teclado como qualquer área nativa) e deixa as barras só para o mouse, com os valores\n// em porcentagem. A ref entrega a raiz.\nexport const ScrollPanel = forwardRef<HTMLDivElement, ScrollPanelProps>(function ScrollPanel(\n {\n children,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n style,\n id,\n className,\n ...props\n },\n ref,\n) {\n const primeRef = useRef<PrimeScrollPanel>(null);\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLDivElement);\n const contentId = `${useId()}-content`;\n const [posicao, setPosicao] = useState({ x: 0, y: 0 });\n\n const aoRolar = (event: UIEvent<HTMLDivElement>) => {\n const el = event.currentTarget;\n setPosicao({\n x: porcentagem(el.scrollLeft, el.scrollWidth, el.clientWidth),\n y: porcentagem(el.scrollTop, el.scrollHeight, el.clientHeight),\n });\n };\n\n const barra = (orientacao: 'horizontal' | 'vertical', valor: number) => ({\n className: `cr-scrollpanel__bar cr-scrollpanel__bar--${orientacao}`,\n tabIndex: -1,\n 'aria-controls': contentId,\n 'aria-valuenow': valor,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n });\n\n // No unstyled, className e style do ScrollPanel do Prime não chegam ao elemento; vão pelo pt.\n // O Prime lê as barras como `barx` e `bary`, mas a tipagem dele as chama de barX e barY: o objeto\n // fica numa constante para o TypeScript aceitar as chaves que o Prime de fato usa.\n const pt = {\n root: { className: ['cr-scrollpanel', className].filter(Boolean).join(' '), style },\n wrapper: { className: 'cr-scrollpanel__wrapper' },\n content: {\n id: contentId,\n className: 'cr-scrollpanel__content',\n tabIndex: 0,\n role: 'region',\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n onScroll: aoRolar,\n },\n barx: barra('horizontal', posicao.x),\n bary: barra('vertical', posicao.y),\n };\n\n return (\n <PrimeScrollPanel {...props} unstyled ref={primeRef} id={id} pt={pt}>\n {children}\n </PrimeScrollPanel>\n );\n});\n","import {\n forwardRef,\n useImperativeHandle,\n useRef,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { SelectButton as PrimeSelectButton } from 'primereact/selectbutton';\nimport './SelectButton.css';\n\n/**\n * No Figma: Primary é o Header Segment Control (pílula em fill/brand/subtlest) e Secondary é o\n * Segment Control (cinza, com ícones).\n */\nexport type SelectButtonVariant = 'primary' | 'secondary';\n\nexport interface SelectButtonOption {\n label: string;\n value: string | number;\n /** Ícone de 16px antes do texto (o Secondary do Figma usa). */\n icon?: ReactNode;\n disabled?: boolean;\n}\n\nexport interface SelectButtonProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n // unselectable: no Prime é o \"pode desmarcar\" (boolean), não o atributo HTML.\n 'children' | 'onChange' | 'defaultValue' | 'unselectable'\n> {\n options: SelectButtonOption[];\n /** Valor do segmento ativo (controlado). */\n value?: string | number;\n onChange?: (value: string | number) => void;\n variant?: SelectButtonVariant;\n /** O que o grupo controla, para o leitor de tela (ex.: \"Visualização\"). */\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n disabled?: boolean;\n id?: string;\n className?: string;\n}\n\n// Base: SelectButton do PrimeReact no modo unstyled (o p-selectButton do PrimeNG da produção):\n// grupo de botões com aria-pressed e as setas do teclado do Prime; o Cristal soma o Enter à barra\n// de espaço. Sempre há um segmento ativo (allowEmpty desligado). O visual vem do\n// SelectButton.css. A ref entrega o grupo.\nexport const SelectButton = forwardRef<HTMLDivElement, SelectButtonProps>(function SelectButton(\n {\n options,\n value,\n onChange,\n variant = 'primary',\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n disabled,\n id,\n className,\n ...props\n },\n ref,\n) {\n const primeRef = useRef<PrimeSelectButton>(null);\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLDivElement);\n\n const classes = ['cr-segment', `cr-segment--${variant}`, className].filter(Boolean).join(' ');\n\n return (\n <PrimeSelectButton\n {...props}\n unstyled\n ref={primeRef}\n id={id}\n options={options}\n optionLabel=\"label\"\n optionValue=\"value\"\n optionDisabled=\"disabled\"\n value={value}\n onChange={(event) => {\n if (event.value != null) onChange?.(event.value as string | number);\n }}\n allowEmpty={false}\n disabled={disabled}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n itemTemplate={(option: SelectButtonOption) => (\n <>\n {option.icon && (\n <span className=\"cr-segment__icon\" aria-hidden=\"true\">\n {option.icon}\n </span>\n )}\n <span className=\"cr-segment__label\">{option.label}</span>\n </>\n )}\n pt={{\n root: { className: classes },\n button: {\n className: 'cr-segment__item',\n // O Prime só ativa com a barra de espaço; um role=button responde também ao Enter.\n onKeyDown: (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Enter') event.currentTarget.click();\n },\n },\n }}\n />\n );\n});\n\n// Nomes antigos (do Figma), mantidos até a próxima versão: o nome do Cristal é o do PrimeNG 19.\n/** @deprecated Use `SelectButton` (o nome do PrimeNG 19). */\nexport const SegmentControl = SelectButton;\n/** @deprecated Use `SelectButtonOption`. */\nexport type SegmentControlOption = SelectButtonOption;\n/** @deprecated Use `SelectButtonProps`. */\nexport type SegmentControlProps = SelectButtonProps;\n/** @deprecated Use `SelectButtonVariant`. */\nexport type SegmentControlVariant = SelectButtonVariant;\n","import { forwardRef, useImperativeHandle, useRef, type HTMLAttributes } from 'react';\nimport { Skeleton as PrimeSkeleton } from 'primereact/skeleton';\nimport './Skeleton.css';\n\n/** Formato do bloco. */\nexport type SkeletonShape = 'rectangle' | 'circle';\n\nexport interface SkeletonProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Padrão: rectangle. */\n shape?: SkeletonShape;\n /** Largura (CSS). Padrão: 100%. */\n width?: string;\n /** Altura (CSS). Padrão: 16px. */\n height?: string;\n /** Largura e altura iguais (para o círculo ou um quadrado). */\n size?: string;\n /** Brilho que passa pelo bloco. Padrão: true (parado com prefers-reduced-motion). */\n animated?: boolean;\n}\n\n// Base: Skeleton do PrimeReact no modo unstyled (o p-skeleton do PrimeNG da produção): o bloco,\n// as medidas e o aria-hidden são do Prime. Provisório: a página Skeleton do Figma \"Cristal - Core\n// Components | Web\" ainda não tem o componente, então o visual segue o tema do Prime com tokens\n// (fundo fill/neutral/subtlest, raio x-small e o brilho de 1,2s). A ref entrega o bloco.\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(function Skeleton(\n {\n shape = 'rectangle',\n width = '100%',\n height = '16px',\n size,\n animated = true,\n className,\n ...props\n },\n ref,\n) {\n const primeRef = useRef<PrimeSkeleton>(null);\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLDivElement);\n\n const classes = [\n 'cr-skeleton',\n `cr-skeleton--${shape}`,\n animated && 'cr-skeleton--animated',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <PrimeSkeleton\n unstyled\n ref={primeRef}\n shape={shape}\n width={width}\n height={height}\n size={size}\n animation={animated ? 'wave' : 'none'}\n pt={{ root: { ...props, className: classes } }}\n />\n );\n});\n","import {\n forwardRef,\n useId,\n type CSSProperties,\n type InputHTMLAttributes,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { InputSwitch, type InputSwitchChangeEvent } from 'primereact/inputswitch';\nimport '../../comum.css';\nimport './ToggleSwitch.css';\n\n/** Size no Figma: Medium (48x28) e Small (32x20). */\nexport type ToggleSwitchSize = 'medium' | 'small';\n/** Label Position no Figma: lado do rótulo em relação ao switch. */\nexport type ToggleSwitchLabelPosition = 'right' | 'left';\n\n/** As demais props vão no <input> (aria-describedby, onBlur, data-*...); className e style, na raiz. */\nexport interface ToggleSwitchProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n | 'onChange'\n | 'value'\n | 'checked'\n | 'defaultChecked'\n | 'defaultValue'\n | 'size'\n | 'type'\n | 'children'\n> {\n /** Texto ao lado do switch (Label no Figma). Sem rótulo visível, vira o nome acessível. */\n label: ReactNode;\n /** Mostra o rótulo. Padrão: true. */\n showLabel?: boolean;\n /** Padrão: right. */\n labelPosition?: ToggleSwitchLabelPosition;\n /** Padrão: medium. */\n size?: ToggleSwitchSize;\n checked?: boolean;\n onChange?: (event: InputSwitchChangeEvent) => void;\n disabled?: boolean;\n name?: string;\n /** Vai no <input>. */\n id?: string;\n className?: string;\n style?: CSSProperties;\n}\n\n// Base: InputSwitch do PrimeReact no modo unstyled (o p-inputSwitch do PrimeNG da produção), com o\n// <input role=\"switch\"> nativo por cima do trilho. O Prime também põe role=\"checkbox\" na div de\n// fora, o que aninha dois controles: o Cristal tira esse role. O rótulo é um <label> ligado ao\n// input. A ref entrega o <input>.\nexport const ToggleSwitch = forwardRef<HTMLInputElement, ToggleSwitchProps>(function ToggleSwitch(\n {\n label,\n showLabel = true,\n labelPosition = 'right',\n size = 'medium',\n checked = false,\n onChange,\n disabled,\n name,\n id,\n className,\n style,\n ...props\n },\n ref,\n) {\n const autoId = useId();\n const inputId = id ?? autoId;\n\n const classes = [\n 'cr-switch',\n `cr-switch--${size}`,\n `cr-switch--label-${labelPosition}`,\n disabled && 'cr-switch--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={classes} style={style}>\n <InputSwitch\n unstyled\n inputRef={ref as Ref<HTMLInputElement>}\n inputId={inputId}\n checked={checked}\n onChange={onChange}\n disabled={disabled}\n name={name}\n pt={{\n // Ligado pela prop do Cristal, não pelo atributo interno do Prime (data-p-highlight).\n root: {\n className: `cr-switch__control${checked ? ' cr-switch__control--checked' : ''}`,\n role: undefined,\n 'aria-checked': undefined,\n },\n input: { ...props, className: 'cr-switch__input' },\n slider: { className: 'cr-switch__track' },\n }}\n />\n {/* Sem rótulo visível, o <label> continua no DOM (escondido) e dá o nome ao input. */}\n <label\n className={`cr-switch__label${showLabel ? '' : ' cr-switch__label--hidden cr-so-leitor'}`}\n htmlFor={inputId}\n >\n {label}\n </label>\n </div>\n );\n});\n\n// Nomes antigos (do Figma), mantidos até a próxima versão: o nome do Cristal é o do PrimeNG 19.\n/** @deprecated Use `ToggleSwitch` (o nome do PrimeNG 19). */\nexport const Switch = ToggleSwitch;\n/** @deprecated Use `ToggleSwitchLabelPosition`. */\nexport type SwitchLabelPosition = ToggleSwitchLabelPosition;\n/** @deprecated Use `ToggleSwitchProps`. */\nexport type SwitchProps = ToggleSwitchProps;\n/** @deprecated Use `ToggleSwitchSize`. */\nexport type SwitchSize = ToggleSwitchSize;\n","import {\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n useImperativeHandle,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport {\n TabView,\n TabPanel as PrimeTabPanel,\n type TabPanelHeaderTemplateOptions,\n} from 'primereact/tabview';\nimport { X } from '@phosphor-icons/react';\nimport { Badge } from '../Badge';\nimport './Tabs.css';\n\n/** Uma aba (.Tab Item no Figma) e o conteúdo dela. */\nexport interface TabPanelProps {\n /** Texto da aba (Label no Figma). */\n header: string;\n /** Ícone antes do texto (Leading Icon no Figma). */\n leftIcon?: ReactNode;\n /** Contador depois do texto (Badge no Figma). */\n badge?: ReactNode;\n /** Mostra o X (Tab Btn no Figma) e é chamado ao fechar a aba (clique no X ou Delete na aba). */\n onClose?: () => void;\n disabled?: boolean;\n children?: ReactNode;\n}\n\n/** Só descreve a aba: quem desenha é o Tabs. */\nexport function TabPanel(_props: TabPanelProps): null {\n return null;\n}\n\nexport interface TabsProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Aba ativa (controlado). Sem ela, o Tabs controla sozinho. */\n activeIndex?: number;\n onTabChange?: (index: number) => void;\n /** As abas, como `<TabPanel>`. */\n children: ReactNode;\n id?: string;\n className?: string;\n}\n\n// Base: TabView do PrimeReact no modo unstyled (o p-tabView do PrimeNG da produção): tablist, abas,\n// painéis e o teclado (setas, Home e End) do Prime. Cada aba vem de um <TabPanel> do Cristal, que\n// vira o TabPanel do Prime com o desenho do Figma (ícone, texto, Badge e X) pelo headerTemplate. O\n// X do Prime fica dentro do role=tab como um segundo controle; o do Cristal é só visual (clique) e,\n// pelo teclado, a aba fecha com Delete (anunciado pelo aria-keyshortcuts). A ref entrega a raiz.\nexport const Tabs = forwardRef<HTMLDivElement, TabsProps>(function Tabs(\n { activeIndex, onTabChange, children, id, className, ...props },\n ref,\n) {\n const primeRef = useRef<TabView>(null);\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLDivElement);\n // Com onTabChange o Prime trata a aba ativa como controlada: sem activeIndex, o Tabs guarda.\n const [interno, setInterno] = useState(0);\n const ativa = activeIndex ?? interno;\n\n const panels = Children.toArray(children).filter((child): child is ReactElement<TabPanelProps> =>\n isValidElement(child),\n );\n\n const header = (panel: TabPanelProps) =>\n function TabHeader(options: TabPanelHeaderTemplateOptions) {\n const element = options.element as ReactElement<{\n onKeyDown?: (event: KeyboardEvent) => void;\n }>;\n const close = panel.onClose;\n return cloneElement(\n element,\n {\n 'aria-keyshortcuts': close ? 'Delete' : undefined,\n onKeyDown: (event: KeyboardEvent) => {\n if (close && event.key === 'Delete') close();\n else element.props.onKeyDown?.(event);\n },\n } as object,\n <>\n {panel.leftIcon && (\n <span className=\"cr-tabs__icon\" aria-hidden=\"true\">\n {panel.leftIcon}\n </span>\n )}\n <span className=\"cr-tabs__label\">{panel.header}</span>\n {panel.badge !== undefined && <Badge className=\"cr-tabs__badge\">{panel.badge}</Badge>}\n {close && (\n // O X é só para o mouse: pelo teclado a aba fecha com Delete (aria-keyshortcuts).\n <span\n className=\"cr-tabs__close\"\n aria-hidden=\"true\"\n onClick={(event: MouseEvent) => {\n event.stopPropagation();\n close();\n }}\n >\n <X />\n </span>\n )}\n </>,\n );\n };\n\n return (\n <TabView\n {...props}\n unstyled\n ref={primeRef}\n id={id}\n activeIndex={ativa}\n onTabChange={(event) => {\n setInterno(event.index);\n onTabChange?.(event.index);\n }}\n pt={{\n root: { className: ['cr-tabs', className].filter(Boolean).join(' ') },\n navContainer: { className: 'cr-tabs__nav-container' },\n navContent: { className: 'cr-tabs__nav-content' },\n nav: { className: 'cr-tabs__nav' },\n inkbar: { className: 'cr-tabs__inkbar' },\n panelContainer: { className: 'cr-tabs__panels' },\n }}\n >\n {panels.map((panel, index) => (\n <PrimeTabPanel\n key={panel.key ?? index}\n header={panel.props.header}\n disabled={panel.props.disabled}\n headerTemplate={header(panel.props)}\n pt={{\n header: { className: 'cr-tabs__item' },\n headerAction: { className: 'cr-tabs__tab' },\n content: { className: 'cr-tabs__panel' },\n }}\n >\n {panel.props.children}\n </PrimeTabPanel>\n ))}\n </TabView>\n );\n});\n","import {\n Children,\n forwardRef,\n isValidElement,\n useEffect,\n useRef,\n useState,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n type Ref,\n type RefObject,\n} from 'react';\nimport {\n DataTable,\n type DataTableProps,\n type DataTableSelectionMultipleChangeEvent,\n type DataTableSelectionSingleChangeEvent,\n type DataTableSortEvent,\n type DataTableValue,\n} from 'primereact/datatable';\nimport { Column as PrimeColumn, type ColumnProps as PrimeColumnProps } from 'primereact/column';\nimport type { CheckboxPassThroughOptions } from 'primereact/checkbox';\nimport type { PaginatorCurrentPageReportOptions } from 'primereact/paginator';\nimport {\n ArrowsInLineHorizontal,\n Check,\n Note,\n Question,\n SortAscending,\n SortDescending,\n} from '@phosphor-icons/react';\nimport { ContextMenu, type ContextMenuHandle, type ContextMenuItem } from '../ContextMenu';\nimport { Message } from '../Message';\nimport { paginatorTemplate } from '../Paginator/Paginator';\nimport { Skeleton } from '../Skeleton';\nimport { Tooltip } from '../Tooltip';\nimport '../../comum.css';\nimport '../Checkbox/Checkbox.css';\nimport '../Paginator/Paginator.css';\nimport './Table.css';\n\n/**\n * Props da Column do PrimeReact (filtros, edição, `body`, `sortable`, `frozen`, `align`, `style`...),\n * mais a ajuda do Figma. O visual (pt e unstyled) é do Cristal.\n */\nexport interface ColumnProps extends Omit<PrimeColumnProps, 'pt' | 'ptOptions' | 'unstyled'> {\n /** Texto do tooltip no ícone de ajuda antes do título (Show Help no Figma). */\n help?: ReactNode;\n}\n\n/**\n * Uma coluna da Table. Não desenha nada sozinha: a Table lê as props de cada `<Column>` e monta a\n * Column do Prime com o visual do Cristal.\n */\nexport function Column(_props: ColumnProps): null {\n return null;\n}\n\n// O DataTable do Prime tipa as props como uma união pelo modo de seleção; o Omit fica com o que é\n// comum a todas. A seleção volta abaixo, aceitando os quatro modos.\ntype PrimeTableProps<T extends DataTableValue> = Omit<\n DataTableProps<T[]>,\n | 'pt'\n | 'ptOptions'\n | 'unstyled'\n | 'value'\n | 'children'\n | 'selection'\n | 'selectionMode'\n | 'onSelectionChange'\n | 'cellSelection'\n | 'onContextMenuSelectionChange'\n>;\n\n/** Props do DataTable do PrimeReact, mais o que o Cristal acrescenta. */\nexport interface TableProps<T extends DataTableValue> extends PrimeTableProps<T> {\n /** Linhas da tabela. */\n value: T[];\n /** As colunas (`<Column>`). */\n children: ReactNode;\n /**\n * Como no Prime. Com uma `<Column selectionMode=\"multiple\" />` e sem este, o Cristal usa\n * `checkbox`: só a caixa seleciona (o clique na linha, não).\n */\n selectionMode?: 'single' | 'radiobutton' | 'multiple' | 'checkbox' | null;\n selection?: T | T[] | null;\n onSelectionChange?: (\n event: DataTableSelectionSingleChangeEvent<T[]> | DataTableSelectionMultipleChangeEvent<T[]>,\n ) => void;\n /** Texto do rodapé. Padrão: \"Mostrando 10 de 123 registros\". */\n report?: (info: { shown: number; totalRecords: number }) => ReactNode;\n /** Nome do Select de itens por página para o leitor de tela. Padrão: \"Itens por página\". */\n rowsPerPageLabel?: string;\n /**\n * Menu de contexto do cabeçalho (a Dropdown List do Figma): o botão direito numa coluna abre\n * Fixar coluna, Ajustar ao conteúdo e, nas ordenáveis, Ordenar ascendente e descendente.\n * Padrão: true.\n */\n columnMenu?: boolean;\n /**\n * Cabeçalho das colunas fixo na página: enquanto a página (ou o contêiner que rola em volta)\n * passa pela Table, o cabeçalho fica no topo da tela, até a última linha. Soma com o\n * `scrollHeight` do Prime, que fixa o cabeçalho dentro da Table. Padrão: false.\n */\n stickyHeader?: boolean;\n /** Distância do topo da tela em que o cabeçalho para, em px (uma barra fixa da página). Padrão: 0. */\n stickyHeaderOffset?: number;\n}\n\n// Cabeçalho fixo na página. O sticky do CSS para no wrapper, que rola na horizontal: o cabeçalho\n// desce com transform, a cada rolagem (de qualquer ancestral) e mudança de tamanho, até no máximo\n// o fim do corpo. Assim a rolagem horizontal e as colunas fixas continuam do Prime.\nfunction useCabecalhoNaPagina(\n raiz: RefObject<HTMLDivElement | null>,\n ligado: boolean,\n offset: number,\n) {\n useEffect(() => {\n const wrapper = raiz.current?.querySelector<HTMLElement>('.cr-table__wrapper');\n if (!ligado || !wrapper) return;\n const posicionar = () => {\n const thead = wrapper.querySelector<HTMLElement>('.cr-table__thead');\n if (!thead) return;\n const limite = Math.max(0, wrapper.clientHeight - thead.offsetHeight);\n const desce = Math.min(limite, Math.max(0, offset - wrapper.getBoundingClientRect().top));\n thead.style.transform = desce ? `translateY(${desce}px)` : '';\n };\n posicionar();\n const observador = new ResizeObserver(posicionar);\n observador.observe(wrapper);\n document.addEventListener('scroll', posicionar, { capture: true, passive: true });\n window.addEventListener('resize', posicionar, { passive: true });\n return () => {\n observador.disconnect();\n document.removeEventListener('scroll', posicionar, { capture: true });\n window.removeEventListener('resize', posicionar);\n const thead = wrapper.querySelector<HTMLElement>('.cr-table__thead');\n if (thead) thead.style.transform = '';\n };\n }, [raiz, ligado, offset]);\n}\n\n/** A ref da Table é a do DataTable do Prime: `getElement()`, `exportCSV()`, `reset()`... */\nexport type TableHandle<T extends DataTableValue = DataTableValue> = DataTable<T[]>;\n\n// Caixa de seleção do DataTable do Prime com as classes do Checkbox do Cristal (o Prime desenha a\n// do cabeçalho e a de cada linha; a seleção, o Shift e o \"todos\" são dele). Os nomes do Prime são\n// estados em inglês (\"All items unselected\"): o Cristal troca pela ação, em português. O Prime\n// também põe role=\"checkbox\", o nome e o tabIndex na raiz, em volta do <input>: saem dali, que o\n// <input> nativo já é a caixa (senão são dois controles, um dentro do outro).\nconst caixa = (label: string): CheckboxPassThroughOptions => ({\n root: (options) => ({\n className: `cr-checkbox cr-checkbox__control${options?.props.checked ? ' cr-checkbox__control--checked' : ''}`,\n role: undefined,\n 'aria-label': undefined,\n tabIndex: undefined,\n }),\n input: { className: 'cr-checkbox__input', 'aria-label': label },\n box: { className: 'cr-checkbox__box' },\n icon: { className: 'cr-checkbox__icon', 'aria-hidden': true },\n});\n\n// Ícone de ajuda (Question no Figma) com o texto no Tooltip do Cristal. É um botão, para o teclado\n// chegar ao tooltip; o clique nele não chega ao cabeçalho, para não ordenar a coluna.\nfunction Ajuda({ content }: { content: ReactNode }) {\n const ref = useRef<HTMLButtonElement>(null);\n return (\n <>\n <button\n ref={ref}\n type=\"button\"\n className=\"cr-table__help\"\n aria-label=\"Ajuda\"\n onClick={(event) => event.stopPropagation()}\n onKeyDown={(event) => event.stopPropagation()}\n >\n <Question aria-hidden=\"true\" />\n </button>\n <Tooltip target={ref} content={content} describe />\n </>\n );\n}\n\n// O que o menu de contexto do cabeçalho precisa saber da coluna em que abriu.\ninterface ColunaDoMenu {\n chave: string;\n titulo: string;\n sortField?: string;\n sortable: boolean;\n fixada: boolean;\n}\n\ninterface OpcoesDaColuna {\n carregando: boolean;\n /** Fixada ou solta pelo menu de contexto (vence o frozen da coluna). */\n fixada?: boolean;\n /** Ajustada ao conteúdo pelo menu de contexto. */\n ajustada: boolean;\n abrirMenu?: (event: MouseEvent<HTMLElement>, coluna: ColunaDoMenu) => void;\n}\n\nconst chaveDaColuna = (props: ColumnProps, index: number) =>\n props.columnKey ?? props.field ?? String(index);\n\n// Monta a Column do Prime com todas as props de quem usa e o visual do Cristal por cima.\n// Carregando, as células viram Skeleton (na seleção, um quadrado do tamanho da caixa).\nfunction coluna(element: ReactElement<ColumnProps>, index: number, opcoes: OpcoesDaColuna) {\n const { help, header, align, selectionMode, ...props } = element.props;\n const { carregando, ajustada, abrirMenu } = opcoes;\n const frozen = opcoes.fixada ?? props.frozen;\n const chave = chaveDaColuna(element.props, index);\n const celula = [\n 'cr-table__cell',\n `cr-table__cell--${align ?? 'left'}`,\n selectionMode && 'cr-table__cell--selection',\n // O Prime calcula a posição das colunas fixas procurando esta classe, mesmo no unstyled.\n frozen && 'cr-table__cell--frozen p-frozen-column',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <PrimeColumn\n key={element.key ?? chave}\n {...props}\n align={align}\n frozen={frozen}\n // Ajustar ao conteúdo: a coluna encolhe até o texto mais largo (as células não quebram).\n style={ajustada ? { ...props.style, width: '1px' } : props.style}\n {...(carregando\n ? { body: <Skeleton size={selectionMode ? '24px' : undefined} /> }\n : { selectionMode })}\n header={\n // Carregando, a seleção perde o checkbox do cabeçalho: o nome da coluna fica só para o\n // leitor de tela (um Skeleton ali sumiria, da mesma cor do fundo do cabeçalho).\n carregando && selectionMode ? (\n <span className=\"cr-so-leitor\">Seleção</span>\n ) : help && typeof header !== 'function' ? (\n <span className=\"cr-table__title\">\n <Ajuda content={help} />\n <span className=\"cr-table__title-text\">{header}</span>\n </span>\n ) : (\n header\n )\n }\n pt={{\n headerCell: {\n className: `cr-table__head ${celula}`,\n // Botão direito (ou a tecla de menu) no cabeçalho: o menu de contexto da coluna.\n ...(abrirMenu &&\n !selectionMode &&\n !carregando && {\n onContextMenu: (event: MouseEvent<HTMLElement>) =>\n abrirMenu(event, {\n chave,\n titulo: typeof header === 'string' ? header : (props.field ?? ''),\n sortField: props.sortField ?? props.field,\n sortable: Boolean(props.sortable),\n fixada: Boolean(frozen),\n }),\n }),\n },\n headerContent: { className: 'cr-table__head-content' },\n headerTitle: { className: 'cr-table__head-title' },\n sort: { className: 'cr-table__sort' },\n columnResizer: { className: 'cr-table__resizer' },\n bodyCell: { className: celula },\n headerCheckbox: caixa('Selecionar todas as linhas'),\n rowCheckbox: caixa('Selecionar linha'),\n }}\n />\n );\n}\n\n// Base: DataTable do PrimeReact no modo unstyled (o p-table do PrimeNG da produção). Todas as\n// props, eventos e métodos são do Prime: ordenação, seleção, paginação, filtros (inclusive o\n// globalFilter), lazy, loading, colunas fixas, redimensionar, cabeçalho fixo na rolagem... O\n// Cristal desenha o Figma: o header do Prime recebe a Topbar (TableToolbar), as células e o\n// cabeçalho seguem o .Table Main Cell e o .Table Main Head Cell, e o rodapé usa o template do\n// Paginator do Cristal no paginator do Prime. Sem linhas, mostra a Message do Type=Empty no lugar\n// do cabeçalho; carregando (loading), linhas de Skeleton no lugar do overlay do Prime, como na\n// documentação do DataTable. O botão direito no cabeçalho abre o menu de contexto da coluna (a\n// Dropdown List do Figma). Padrões do Cristal, que quem usa pode trocar: paginator ligado (o rodapé do Figma), 10 linhas por página, scrollable,\n// redimensionar em \"expand\", o template do rodapé e os ícones do Figma. O stickyHeader (do\n// Cristal) fixa o cabeçalho na página. A ref é a do DataTable.\nfunction TableBase<T extends DataTableValue>(\n {\n value,\n children,\n selectionMode,\n paginator = true,\n rows,\n rowsPerPageOptions,\n report = ({ shown, totalRecords: total }) => `Mostrando ${shown} de ${total} registros`,\n rowsPerPageLabel = 'Itens por página',\n emptyMessage = 'Não há registros para mostrar.',\n loading,\n columnMenu = true,\n stickyHeader = false,\n stickyHeaderOffset = 0,\n ...props\n }: TableProps<T>,\n ref: Ref<TableHandle<T>>,\n) {\n const elementos = Children.toArray(children).filter(isValidElement<ColumnProps>);\n const colunaDeSelecao = elementos.some((element) => element.props.selectionMode === 'multiple');\n const template = paginatorTemplate(rowsPerPageLabel);\n const carregando = Boolean(loading);\n const raiz = useRef<HTMLDivElement>(null);\n useCabecalhoNaPagina(raiz, stickyHeader, stickyHeaderOffset);\n\n // Sem onPage e sem onSort, o Prime guarda a página e a ordem sozinho, mas o menu de contexto\n // também ordena: aí quem guarda é a Table, do mesmo jeito que o Prime (ordenar volta para a\n // primeira página). Com onPage ou onSort, quem usa controla, como no Prime.\n const paginaPropria = !props.onPage;\n const ordemPropria = !props.onSort;\n const [pagina, setPagina] = useState({\n first: props.first ?? 0,\n rows: rows ?? rowsPerPageOptions?.[0] ?? 10,\n });\n const [ordem, setOrdem] = useState<Pick<DataTableSortEvent, 'sortField' | 'sortOrder'>>({\n sortField: props.sortField ?? '',\n sortOrder: props.sortOrder,\n });\n const linhas = paginaPropria ? pagina.rows : (rows ?? rowsPerPageOptions?.[0] ?? 10);\n\n // Menu de contexto do cabeçalho: as colunas fixadas e ajustadas por ele, e em qual abriu.\n const menuRef = useRef<ContextMenuHandle>(null);\n const [fixadas, setFixadas] = useState<Record<string, boolean>>({});\n const [ajustadas, setAjustadas] = useState<Record<string, boolean>>({});\n const [alvo, setAlvo] = useState<ColunaDoMenu | null>(null);\n\n const ordenar = (sortField: string, sortOrder: 1 | -1) => {\n if (props.onSort) {\n props.onSort({\n first: props.first ?? 0,\n rows: linhas,\n sortField,\n sortOrder,\n multiSortMeta: null,\n filters: props.filters ?? {},\n } as Parameters<NonNullable<typeof props.onSort>>[0]);\n return;\n }\n setOrdem({ sortField, sortOrder });\n if (paginaPropria) setPagina((atual) => ({ ...atual, first: 0 }));\n };\n\n const modeloDoMenu: ContextMenuItem[] = alvo\n ? [\n {\n label: alvo.fixada ? 'Desafixar coluna' : 'Fixar coluna',\n icon: <Note />,\n command: () => setFixadas((atuais) => ({ ...atuais, [alvo.chave]: !alvo.fixada })),\n },\n {\n label: 'Ajustar ao conteúdo',\n icon: <ArrowsInLineHorizontal />,\n command: () => setAjustadas((atuais) => ({ ...atuais, [alvo.chave]: true })),\n },\n ...(alvo.sortable && alvo.sortField\n ? [\n {\n label: 'Ordenar ascendente',\n icon: <SortAscending />,\n command: () => ordenar(alvo.sortField as string, 1),\n },\n {\n label: 'Ordenar descendente',\n icon: <SortDescending />,\n command: () => ordenar(alvo.sortField as string, -1),\n },\n ]\n : []),\n ]\n : [];\n\n // O clique direito só registra o pedido; o efeito abre o menu, no clique, pela ref do Prime.\n const [pedido, setPedido] = useState<MouseEvent<HTMLElement> | null>(null);\n useEffect(() => {\n if (pedido) menuRef.current?.show(pedido);\n }, [pedido]);\n const abrirMenu = (event: MouseEvent<HTMLElement>, coluna: ColunaDoMenu) => {\n event.preventDefault();\n setAlvo(coluna);\n setPedido(event);\n };\n\n // O DataTable do Prime tipa as props como uma união pelo modo de seleção: o Cristal junta os\n // padrões dele com as props de quem usa (que vencem) e entrega de uma vez.\n const tableProps = {\n scrollable: true,\n columnResizeMode: 'expand',\n paginatorTemplate: {\n ...template,\n layout: `CurrentPageReport ${template.layout}`,\n CurrentPageReport: (options: PaginatorCurrentPageReportOptions) => (\n <span className=\"cr-table__report\">\n {report({\n shown: options.totalRecords === 0 ? 0 : options.last - options.first + 1,\n totalRecords: options.totalRecords,\n })}\n </span>\n ),\n },\n sortIcon: ({ sorted, sortOrder }: { sorted?: boolean; sortOrder?: number | null }) =>\n sorted && sortOrder === -1 ? (\n <SortDescending aria-hidden=\"true\" />\n ) : (\n <SortAscending aria-hidden=\"true\" />\n ),\n checkIcon: <Check size={16} />,\n ...props,\n ...(paginaPropria && {\n first: pagina.first,\n onPage: (event: { first: number; rows: number }) =>\n setPagina({ first: event.first, rows: event.rows }),\n }),\n ...(ordemPropria && {\n sortField: ordem.sortField,\n sortOrder: ordem.sortOrder,\n onSort: (event: DataTableSortEvent) => {\n setOrdem({ sortField: event.sortField, sortOrder: event.sortOrder });\n if (paginaPropria) setPagina((atual) => ({ ...atual, first: 0 }));\n },\n }),\n value,\n selectionMode: selectionMode ?? (colunaDeSelecao ? 'checkbox' : undefined),\n paginator,\n rows: linhas,\n rowsPerPageOptions,\n // Carregando: uma linha de Skeleton por linha da página, sem filtrar nem ordenar (lazy), com o\n // total que já se conhece no rodapé.\n ...(carregando && {\n value: Array.from({ length: linhas }, (_, indice) => ({ crSkeleton: indice })),\n dataKey: 'crSkeleton',\n lazy: true,\n totalRecords: props.totalRecords ?? value.length,\n selectionMode: undefined,\n }),\n emptyMessage:\n typeof emptyMessage === 'function' ? (\n emptyMessage\n ) : (\n <Message type=\"info\" className=\"cr-table__empty\">\n {emptyMessage}\n </Message>\n ),\n } as unknown as DataTableProps<T[]>;\n\n return (\n // Contêiner da consulta de largura: a variante de 360px também muda a caixa do DataTable.\n <div ref={raiz} className=\"cr-table\">\n <DataTable\n {...tableProps}\n ref={ref}\n unstyled\n pt={{\n root: { className: 'cr-table__box', 'aria-busy': carregando || undefined },\n header: { className: 'cr-table__header' },\n wrapper: { className: 'cr-table__wrapper cr-rolagem-fina' },\n table: { className: 'cr-table__table' },\n thead: { className: 'cr-table__thead' },\n tbody: { className: 'cr-table__tbody' },\n bodyRow: {\n className: carregando ? 'cr-table__row cr-table__row--skeleton' : 'cr-table__row',\n },\n emptyMessage: { className: 'cr-table__empty-row' },\n resizeHelper: { className: 'cr-table__resize-helper' },\n footer: { className: 'cr-table__footer' },\n paginator: {\n root: { className: 'cr-paginator cr-table__paginator' },\n pages: { className: 'cr-paginator__pages' },\n },\n }}\n >\n {elementos.map((element, index) => {\n const chave = chaveDaColuna(element.props, index);\n return coluna(element, index, {\n carregando,\n fixada: fixadas[chave],\n ajustada: Boolean(ajustadas[chave]),\n abrirMenu: columnMenu ? abrirMenu : undefined,\n });\n })}\n </DataTable>\n {columnMenu && (\n // O ContextMenu do Cristal (a Dropdown List do Figma): abre no ponto do clique.\n <ContextMenu\n ref={menuRef}\n model={modeloDoMenu}\n aria-label={alvo ? `Opções da coluna ${alvo.titulo}` : undefined}\n onHide={() => setAlvo(null)}\n />\n )}\n </div>\n );\n}\n\n/** Table do Figma \"Cristal - Core Components | Web\", sobre o DataTable do PrimeReact. */\nexport const Table = forwardRef(TableBase) as <T extends DataTableValue>(\n props: TableProps<T> & { ref?: Ref<TableHandle<T>> },\n) => ReactElement;\n","import { useId, useRef, useState, type ReactNode } from 'react';\nimport { IconButton, type IconButtonProps } from '../IconButton';\nimport { Menu, type MenuHandle, type MenuItem } from '../Menu';\n\nexport interface BotaoDeMenuProps {\n icon: ReactNode;\n label: string;\n model: MenuItem[];\n variant: IconButtonProps['variant'];\n /** Tooltip do botão. Padrão: o próprio nome. */\n tooltip?: ReactNode;\n popupAlignment?: 'left' | 'right';\n disabled?: boolean;\n className?: string;\n}\n\n// Icon Button que abre o Menu do Cristal (a Dropdown List do Figma) em popup, com aria-haspopup,\n// aria-expanded e aria-controls; o tooltip some com o menu aberto. Usado pelo ⋮ da Topbar e pelas\n// ações da linha.\nexport function BotaoDeMenu({\n icon,\n label,\n model,\n variant,\n tooltip,\n popupAlignment = 'left',\n disabled,\n className,\n}: BotaoDeMenuProps) {\n const menuRef = useRef<MenuHandle>(null);\n const menuId = useId();\n const [open, setOpen] = useState(false);\n return (\n <span className={className}>\n <IconButton\n variant={variant}\n size=\"medium\"\n icon={icon}\n aria-label={label}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-controls={open ? menuId : undefined}\n tooltip={open ? false : tooltip}\n disabled={disabled}\n onClick={(event) => menuRef.current?.toggle(event)}\n />\n <Menu\n ref={menuRef}\n id={menuId}\n popup\n popupAlignment={popupAlignment}\n model={model}\n aria-label={label}\n onShow={() => setOpen(true)}\n onHide={() => setOpen(false)}\n />\n </span>\n );\n}\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type MouseEvent,\n type ReactNode,\n} from 'react';\nimport {\n CaretLeft,\n CaretRight,\n DotsThreeVertical,\n Funnel,\n MagnifyingGlass,\n Trash,\n} from '@phosphor-icons/react';\nimport { Badge } from '../Badge';\nimport { Button } from '../Button';\nimport { Chip } from '../Chip';\nimport { Divider } from '../Divider';\nimport { IconButton } from '../IconButton';\nimport { InputText } from '../InputText';\nimport type { MenuItem } from '../Menu';\nimport { BotaoDeMenu } from './BotaoDeMenu';\nimport './Table.css';\n\n/** Um botão da Topbar (os Buttons à direita no Figma). */\nexport interface TableToolbarAction {\n label: string;\n onClick?: (event: MouseEvent<HTMLElement>) => void;\n /** primary: o botão principal (fica visível até 768px); tertiary: os demais. Padrão: tertiary. */\n variant?: 'primary' | 'tertiary';\n icon?: ReactNode;\n disabled?: boolean;\n}\n\n/** Um filtro aplicado (Chip da .Filter bar no Figma). */\nexport interface TableFilter {\n /** Nome do filtro, como \"Status do lote\". */\n label: string;\n /** Valor escolhido, como \"Divulgação\". */\n value: string;\n onRemove?: () => void;\n}\n\nexport interface TableToolbarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Texto da busca (controlado). Com ele ou com onSearchChange, a busca aparece. */\n searchValue?: string;\n onSearchChange?: (value: string) => void;\n /** Padrão: \"Procurar por\". */\n searchPlaceholder?: string;\n /** Nome do campo de busca para o leitor de tela. Padrão: \"Procurar\". */\n searchLabel?: string;\n /** Clique no Filtrar. Sem ele, o botão não aparece. */\n onFilter?: (event: MouseEvent<HTMLElement>) => void;\n /** Padrão: \"Filtrar\". */\n filterLabel?: string;\n /** Filtros aplicados: viram os chips da .Filter bar e o Badge do Filtrar. */\n filters?: TableFilter[];\n /** Limpar todos os filtros (a lixeira da .Filter bar). */\n onClearFilters?: () => void;\n /** Padrão: \"Limpar filtros\". */\n clearFiltersLabel?: string;\n /** Botões à direita. */\n actions?: TableToolbarAction[];\n /** Nome do botão que abre o menu com os botões que não cabem. Padrão: \"Mais ações\". */\n moreActionsLabel?: string;\n}\n\n// Menu ⋮ com os botões que não cabem (Icon Button tertiary de 42px no Figma).\nfunction MaisAcoes({\n actions,\n label,\n className,\n}: {\n actions: TableToolbarAction[];\n label: string;\n className: string;\n}) {\n if (actions.length === 0) return null;\n const model: MenuItem[] = actions.map((action) => ({\n label: action.label,\n icon: action.icon,\n disabled: action.disabled,\n command: (event) => action.onClick?.(event.originalEvent as MouseEvent<HTMLElement>),\n }));\n return (\n <BotaoDeMenu\n icon={<DotsThreeVertical />}\n label={label}\n model={model}\n variant=\"tertiary\"\n popupAlignment=\"right\"\n className={className}\n />\n );\n}\n\n// Chips dos filtros, com as setas quando não cabem (Show Button Left/Right no Figma).\nfunction BarraDeFiltros({\n filters,\n onClear,\n clearLabel,\n}: {\n filters: TableFilter[];\n onClear?: () => void;\n clearLabel: string;\n}) {\n const chipsRef = useRef<HTMLDivElement>(null);\n const [setas, setSetas] = useState({ esquerda: false, direita: false });\n\n const medir = useCallback(() => {\n const chips = chipsRef.current;\n if (!chips) return;\n setSetas({\n esquerda: chips.scrollLeft > 0,\n // sem token: 1px de folga para o arredondamento da rolagem.\n direita: chips.scrollLeft + chips.clientWidth < chips.scrollWidth - 1,\n });\n }, []);\n\n useEffect(() => {\n const chips = chipsRef.current;\n if (!chips) return;\n medir();\n const observer = new ResizeObserver(medir);\n observer.observe(chips);\n return () => observer.disconnect();\n }, [medir, filters.length]);\n\n const rolar = (sentido: 1 | -1) =>\n chipsRef.current?.scrollBy({\n left: sentido * chipsRef.current.clientWidth,\n behavior: 'smooth',\n });\n\n return (\n <div className=\"cr-table-toolbar__filters\">\n {setas.esquerda && (\n <IconButton\n variant=\"tertiary\"\n size=\"xsmall\"\n icon={<CaretLeft />}\n aria-label=\"Filtros anteriores\"\n onClick={() => rolar(-1)}\n />\n )}\n <div ref={chipsRef} className=\"cr-table-toolbar__chips\" onScroll={medir}>\n {filters.map((filter) => (\n <Chip\n key={`${filter.label}:${filter.value}`}\n variant=\"outline\"\n size=\"large\"\n label={\n <>\n <span className=\"cr-table-toolbar__chip-label\">{filter.label}:</span> {filter.value}\n </>\n }\n removeLabel={`Remover filtro ${filter.label}: ${filter.value}`}\n onRemove={\n filter.onRemove\n ? () => {\n filter.onRemove?.();\n // Quem usa tira o filtro da lista: o Prime não esconde o chip sozinho.\n return false;\n }\n : undefined\n }\n />\n ))}\n </div>\n {setas.direita && (\n <IconButton\n variant=\"tertiary\"\n size=\"xsmall\"\n icon={<CaretRight />}\n aria-label=\"Próximos filtros\"\n onClick={() => rolar(1)}\n />\n )}\n {onClear && (\n <>\n <Divider orientation=\"vertical\" className=\"cr-table-toolbar__divider\" />\n <IconButton\n variant=\"tertiary\"\n size=\"xsmall\"\n icon={<Trash />}\n aria-label={clearLabel}\n onClick={onClear}\n />\n </>\n )}\n </div>\n );\n}\n\n// Exclusivo: o Toolbar do PrimeReact só divide a barra em início e fim, e a Topbar do Figma muda\n// por largura (1360, 768 e 360px). O Cristal compõe o InputText, o Button, o IconButton, o Menu, o\n// Chip e o Badge. Abaixo de 1360px os botões tertiary vão para o menu ⋮; abaixo de 768px, todos,\n// e o Filtrar vira Icon Button.\n/**\n * Topbar da Table (.Table Topbar no Figma): busca, Filtrar, botões e, com filtros aplicados, a\n * .Filter bar. Vai no `toolbar` da Table.\n */\nexport const TableToolbar = forwardRef<HTMLDivElement, TableToolbarProps>(function TableToolbar(\n {\n searchValue,\n onSearchChange,\n searchPlaceholder = 'Procurar por',\n searchLabel = 'Procurar',\n onFilter,\n filterLabel = 'Filtrar',\n filters = [],\n onClearFilters,\n clearFiltersLabel = 'Limpar filtros',\n actions = [],\n moreActionsLabel = 'Mais ações',\n className,\n ...props\n },\n ref,\n) {\n const busca = searchValue !== undefined || onSearchChange !== undefined;\n const contagem = filters.length;\n const filtrar = contagem > 0 ? `${filterLabel}, ${contagem} aplicados` : filterLabel;\n const secundarias = actions.filter((action) => action.variant !== 'primary');\n\n return (\n <div ref={ref} className={['cr-table-toolbar', className].filter(Boolean).join(' ')} {...props}>\n <div className=\"cr-table-toolbar__main\">\n <div className=\"cr-table-toolbar__start\">\n {busca && (\n <InputText\n className=\"cr-table-toolbar__search\"\n size=\"medium\"\n role=\"searchbox\"\n aria-label={searchLabel}\n placeholder={searchPlaceholder}\n value={searchValue ?? ''}\n onChange={(event) => onSearchChange?.(event.target.value)}\n trailingIcon={<MagnifyingGlass />}\n />\n )}\n {onFilter && (\n <span className=\"cr-table-toolbar__filter\">\n <Button\n className=\"cr-table-toolbar__filter-button\"\n variant=\"tertiary\"\n size=\"medium\"\n leadingIcon={<Funnel />}\n aria-label={contagem > 0 ? filtrar : undefined}\n onClick={onFilter}\n >\n {filterLabel}\n </Button>\n <IconButton\n className=\"cr-table-toolbar__filter-icon\"\n variant=\"tertiary\"\n size=\"medium\"\n icon={<Funnel />}\n aria-label={filtrar}\n tooltip={filterLabel}\n onClick={onFilter}\n />\n {contagem > 0 && (\n <Badge className=\"cr-table-toolbar__badge\" size=\"medium\" aria-hidden=\"true\">\n {contagem}\n </Badge>\n )}\n </span>\n )}\n </div>\n {actions.length > 0 && (\n <div className=\"cr-table-toolbar__end\">\n {/* Até 1360px, só os tertiary vão para o menu; abaixo de 768px, todos. */}\n <MaisAcoes\n actions={secundarias}\n label={moreActionsLabel}\n className=\"cr-table-toolbar__more cr-table-toolbar__more--tablet\"\n />\n <MaisAcoes\n actions={actions}\n label={moreActionsLabel}\n className=\"cr-table-toolbar__more cr-table-toolbar__more--mobile\"\n />\n {actions.map((action) => (\n <Button\n key={action.label}\n className={`cr-table-toolbar__action cr-table-toolbar__action--${action.variant ?? 'tertiary'}`}\n variant={action.variant ?? 'tertiary'}\n size=\"medium\"\n leadingIcon={action.icon}\n disabled={action.disabled}\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n {contagem > 0 && (\n <BarraDeFiltros filters={filters} onClear={onClearFilters} clearLabel={clearFiltersLabel} />\n )}\n </div>\n );\n});\n","import type { ReactNode } from 'react';\nimport { GearSix } from '@phosphor-icons/react';\nimport type { MenuItem } from '../Menu';\nimport { BotaoDeMenu } from './BotaoDeMenu';\n\nexport interface TableRowActionsProps {\n /** Itens do menu (os do Menu do Cristal). Cada `command` já sabe de que linha é. */\n model: MenuItem[];\n /** Nome do botão, com a linha: por exemplo \"Ações do lote M000000374\". */\n 'aria-label': string;\n /** Padrão: a engrenagem (GearSix) do Type=Actions no Figma. */\n icon?: ReactNode;\n /** Tooltip do botão. Padrão: \"Ações\". */\n tooltip?: ReactNode;\n /** Lado do menu em relação ao botão. Padrão: left. */\n popupAlignment?: 'left' | 'right';\n disabled?: boolean;\n}\n\n/**\n * Ações da linha (Type=Actions do .Table Main Cell no Figma): a engrenagem abre o Menu do Cristal\n * com as ações daquela linha. Vai no `body` de uma `<Column align=\"center\">`.\n */\n// Exclusivo: o DataTable do Prime não tem coluna de ações; a documentação dele usa um botão no\n// body que abre um Menu em popup, e é o que o Cristal monta com o IconButton ghost e o Menu.\nexport function TableRowActions({\n model,\n 'aria-label': label,\n icon = <GearSix />,\n tooltip = 'Ações',\n popupAlignment,\n disabled,\n}: TableRowActionsProps) {\n return (\n <BotaoDeMenu\n icon={icon}\n label={label}\n model={model}\n variant=\"ghost\"\n tooltip={tooltip}\n popupAlignment={popupAlignment}\n disabled={disabled}\n className=\"cr-table__row-actions\"\n />\n );\n}\n","import { forwardRef, useImperativeHandle, useRef, type ReactElement } from 'react';\nimport {\n Toast as PrimeToast,\n type ToastMessage as PrimeToastMessage,\n type ToastPassThroughTransitionType,\n type ToastProps as PrimeToastProps,\n} from 'primereact/toast';\nimport { Check, Info, Warning, X, XCircle } from '@phosphor-icons/react';\nimport './Toast.css';\n\n/** Type no Figma. */\nexport type ToastType = 'warning' | 'danger' | 'success' | 'info';\n\n/** Onde as mensagens aparecem na tela (o position do Prime). Padrão: top-right. */\nexport type ToastPosition = NonNullable<PrimeToastProps['position']>;\n\n/** Uma mensagem, passada para `show()`. */\nexport interface ToastMessage {\n type: ToastType;\n /** Title no Figma. */\n title: string;\n /** Message no Figma (Show Message content). */\n message?: string;\n /** Show Icon no Figma. Padrão: true. */\n showIcon?: boolean;\n /** Tempo na tela, em ms. Padrão do Prime: 3000. */\n life?: number;\n /** Fica até alguém fechar. */\n sticky?: boolean;\n}\n\n/** O que a ref do Toast entrega. */\nexport interface ToastHandle {\n show: (message: ToastMessage | ToastMessage[]) => void;\n clear: () => void;\n}\n\nexport interface ToastProps {\n position?: ToastPosition;\n /** Nome do X para o leitor de tela. */\n closeLabel?: string;\n id?: string;\n className?: string;\n}\n\nconst SEVERITY: Record<ToastType, PrimeToastMessage['severity']> = {\n warning: 'warn',\n danger: 'error',\n success: 'success',\n info: 'info',\n};\n\nconst ICON: Record<ToastType, ReactElement> = {\n warning: <Warning />,\n danger: <XCircle />,\n success: <Check />,\n info: <Info />,\n};\n\n// Base: Toast do PrimeReact no modo unstyled (o p-toast do PrimeNG da produção): a pilha de\n// mensagens na tela, o tempo de cada uma (pausado com o mouse em cima), o X e o role=alert são do\n// Prime. Como no Prime, as mensagens entram pela ref: toast.current.show({ type, title, message }).\n// O Cristal troca o severity pelo Type do Figma, põe os ícones do Figma no círculo e desenha tudo\n// pelos tokens (Toast.css).\nexport const Toast = forwardRef<ToastHandle, ToastProps>(function Toast(\n { position = 'top-right', closeLabel = 'Fechar', id, className },\n ref,\n) {\n const primeRef = useRef<PrimeToast>(null);\n\n const converter = ({\n type,\n title,\n message,\n showIcon = true,\n life,\n sticky,\n }: ToastMessage): PrimeToastMessage => ({\n severity: SEVERITY[type],\n summary: title,\n detail: message,\n // Sem ícone, um fragmento vazio: com undefined o Prime põe o ícone dele.\n icon: showIcon ? (\n <span className=\"cr-toast__icon\" aria-hidden=\"true\">\n {ICON[type]}\n </span>\n ) : (\n <></>\n ),\n closeIcon: <X aria-hidden=\"true\" />,\n life,\n sticky,\n className: `cr-toast__message--${type}`,\n });\n\n useImperativeHandle(ref, () => ({\n show: (message) =>\n primeRef.current?.show(Array.isArray(message) ? message.map(converter) : converter(message)),\n clear: () => primeRef.current?.clear(),\n }));\n\n return (\n <PrimeToast\n // O Toast aceita unstyled como os outros, mas o d.ts do Prime 10 esqueceu de declarar.\n {...({ unstyled: true } as object)}\n ref={primeRef}\n id={id}\n position={position}\n pt={{\n root: {\n className: ['cr-toast', className].filter(Boolean).join(' '),\n },\n message: { className: 'cr-toast__message' },\n content: { className: 'cr-toast__content' },\n text: { className: 'cr-toast__text' },\n summary: { className: 'cr-toast__title' },\n detail: { className: 'cr-toast__detail' },\n closeButton: { className: 'cr-toast__close', 'aria-label': closeLabel },\n // No unstyled o Prime não põe classes na transição: o Cristal dá as dele (Toast.css).\n transition: {\n classNames: {\n enter: 'cr-toast__message--enter',\n enterActive: 'cr-toast__message--enter-active',\n exit: 'cr-toast__message--exit',\n exitActive: 'cr-toast__message--exit-active',\n },\n } as ToastPassThroughTransitionType,\n }}\n />\n );\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/core/Accordion/Accordion.tsx","../src/components/aria.ts","../src/components/popup.ts","../src/components/core/AutoComplete/AutoComplete.tsx","../src/components/core/Badge/Badge.tsx","../src/components/core/Button/Button.tsx","../src/components/core/Calendar/calendario.tsx","../src/components/core/Calendar/Calendar.tsx","../src/components/core/Card/Card.tsx","../src/components/core/Tooltip/Tooltip.tsx","../src/components/charts/Chart/Chart.tsx","../src/components/core/Checkbox/Checkbox.tsx","../src/components/core/Chip/Chip.tsx","../src/components/core/Menu/Menu.tsx","../src/components/core/ContextMenu/ContextMenu.tsx","../src/components/core/InputText/InputText.tsx","../src/components/core/RadioButton/RadioButton.tsx","../src/components/core/Calendar/periodos.ts","../src/components/core/Calendar/dataPicker.tsx","../src/components/core/DatePicker/DatePicker.tsx","../src/components/team/DateRangeButton/PainelDePeriodo.tsx","../src/components/team/DateRangeButton/DateRangeButton.tsx","../src/components/core/Divider/Divider.tsx","../src/components/core/IconButton/IconButton.tsx","../src/components/core/Drawer/Drawer.tsx","../src/components/core/Menubar/Menubar.tsx","../src/components/core/Tag/Tag.tsx","../src/components/core/MenuPrincipal/MenuPrincipal.tsx","../src/components/core/Message/Message.tsx","../src/components/core/Dialog/Dialog.tsx","../src/components/core/MultiSelect/MultiSelect.tsx","../src/components/core/PageHeader/PageHeader.tsx","../src/components/core/Select/Select.tsx","../src/components/core/Paginator/Paginator.tsx","../src/components/core/Panel/Panel.tsx","../src/components/core/ScrollPanel/ScrollPanel.tsx","../src/components/core/SelectButton/SelectButton.tsx","../src/components/core/Skeleton/Skeleton.tsx","../src/components/core/ToggleSwitch/ToggleSwitch.tsx","../src/components/core/Tabs/Tabs.tsx","../src/components/core/Table/Table.tsx","../src/components/core/Table/BotaoDeMenu.tsx","../src/components/core/Table/TableToolbar.tsx","../src/components/core/Table/TableRowActions.tsx","../src/components/core/Toast/Toast.tsx"],"names":["jsx","forwardRef","Accordion","useRef","useImperativeHandle","useState","abertos","Children","isValidElement","PrimeAccordion","CaretDown","CaretUp","PrimeAccordionTab","jsxs","AutoComplete","useId","classes","PrimeAutoComplete","WarningCircle","Info","Badge","PrimeBadge","Button","PrimeButton","addLocale","dia","CaretLeft","CaretRight","localeOption","PrimeCalendar","Card","PrimeCard","useEffect","PrimeTooltip","Chart","useLayoutEffect","useMemo","useCallback","Fragment","Question","PrimeChart","Checkbox","PrimeCheckbox","Check","Chip","X","PrimeChip","Menu","useContext","PrimeReactContext","CircleNotch","menu","PrimeMenu","PrimeReactProvider","ContextMenu","PrimeContextMenu","InputText","PrimeInputText","RadioButton","PrimeRadioButton","mesmoDia","CalendarDot","DateRangeButton","CalendarDots","OverlayPanel","Divider","PrimeDivider","IconButton","Drawer","Sidebar","ArrowLeft","Menubar","List","MagnifyingGlass","PrimeMenubar","Tag","PrimeTag","MenuPrincipal","DribbbleLogo","Warning","CheckCircle","XCircle","SealWarning","Message","PrimeMessage","Dialog","PrimeDialog","MultiSelect","options","PrimeMultiSelect","PageHeader","cloneElement","ArrowsInSimple","ArrowsOutSimple","TabMenu","Select","Dropdown","seta","CaretDoubleLeft","CaretDoubleRight","Paginator","PrimePaginator","Panel","PrimePanel","ScrollPanel","PrimeScrollPanel","SelectButton","PrimeSelectButton","Skeleton","PrimeSkeleton","ToggleSwitch","InputSwitch","Tabs","TabView","PrimeTabPanel","chave","PrimeColumn","Note","ArrowsInLineHorizontal","SortAscending","SortDescending","coluna","DataTable","DotsThreeVertical","setas","Trash","TableToolbar","Funnel","GearSix","SEVERITY","ICON","Toast","PrimeToast"],"mappings":"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","file":"index.cjs","sourcesContent":["import {\n Children,\n forwardRef,\n isValidElement,\n useImperativeHandle,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport {\n Accordion as PrimeAccordion,\n AccordionTab as PrimeAccordionTab,\n type AccordionPassThroughTransitionType,\n} from 'primereact/accordion';\nimport { CaretDown, CaretUp } from '@phosphor-icons/react';\nimport './Accordion.css';\n\n/** Um item (.Accordion Item no Figma) e o conteúdo dele. */\nexport interface AccordionTabProps {\n /** Título (Accordion Item Title no Figma). Com headerContent, não aparece. */\n header: string;\n /** Texto abaixo do título (Show Description no Figma). */\n description?: string;\n /** Cabeçalho livre no lugar do título e da descrição (Type=Custom no Figma). */\n headerContent?: ReactNode;\n disabled?: boolean;\n /** Conteúdo do item aberto (Accordion Item Body no Figma). */\n children?: ReactNode;\n}\n\n/** Só descreve o item: quem desenha é o Accordion. */\nexport function AccordionTab(_props: AccordionTabProps): null {\n return null;\n}\n\nexport interface AccordionProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Mais de um item aberto ao mesmo tempo. */\n multiple?: boolean;\n /**\n * Item(ns) aberto(s) (controlado): o índice, ou a lista com `multiple`; null fecha todos. Sem\n * ele, o Accordion controla sozinho e começa com o primeiro aberto, como nos exemplos do Figma.\n */\n activeIndex?: number | number[] | null;\n onTabChange?: (activeIndex: number | number[] | null) => void;\n /** Os itens, como `<AccordionTab>`. */\n children: ReactNode;\n id?: string;\n className?: string;\n}\n\n// Seta (Icon Button tertiary de 32px no Figma). É só visual: o botão é o cabeçalho inteiro.\nconst seta = (icon: ReactNode) => (\n <span className=\"cr-accordion__toggle\" aria-hidden=\"true\">\n {icon}\n </span>\n);\n\n// Base: Accordion do PrimeReact no modo unstyled (o p-accordion do PrimeNG da produção): abrir e\n// fechar (um ou vários, com multiple), o teclado (setas, Home e End entre os cabeçalhos; Enter e\n// Espaço abrem) e o cabeçalho como botão com aria-expanded ligado à região do conteúdo são do\n// Prime. Cada item vem de um <AccordionTab> do Cristal, com o título e a descrição do Figma (ou o\n// cabeçalho livre do Type=Custom) e a seta no fim. Abre e fecha pela altura, com a animação do tema do\n// Prime (o Figma não define).\n// A ref entrega a raiz.\nexport const Accordion = forwardRef<HTMLDivElement, AccordionProps>(function Accordion(\n { multiple = false, activeIndex, onTabChange, children, id, className, ...props },\n ref,\n) {\n const primeRef = useRef<PrimeAccordion>(null);\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLDivElement);\n\n // Com onTabChange o Prime trata os itens abertos como controlados: sem activeIndex, o Cristal\n // guarda.\n const [interno, setInterno] = useState<number | number[] | null>(multiple ? [0] : 0);\n const abertos = activeIndex === undefined ? interno : activeIndex;\n\n const tabs = Children.toArray(children).filter(\n (child): child is ReactElement<AccordionTabProps> => isValidElement(child),\n );\n\n return (\n <PrimeAccordion\n {...props}\n // O Accordion aceita unstyled como os outros, mas o d.ts do Prime 10 esqueceu de declarar.\n {...({ unstyled: true } as object)}\n ref={primeRef}\n id={id}\n multiple={multiple}\n activeIndex={abertos}\n onTabChange={(event) => {\n const index = event.index as number | number[] | null;\n setInterno(index);\n onTabChange?.(index);\n }}\n expandIcon={seta(<CaretDown />)}\n collapseIcon={seta(<CaretUp />)}\n pt={{ root: { className: ['cr-accordion', className].filter(Boolean).join(' ') } }}\n >\n {tabs.map((tab, index) => (\n <PrimeAccordionTab\n key={tab.key ?? index}\n header={tab.props.header}\n disabled={tab.props.disabled}\n headerTemplate={\n tab.props.headerContent ? (\n <span className=\"cr-accordion__custom\">{tab.props.headerContent}</span>\n ) : (\n <span className=\"cr-accordion__texts\">\n <span className=\"cr-accordion__title\">{tab.props.header}</span>\n {tab.props.description && (\n <span className=\"cr-accordion__description\">{tab.props.description}</span>\n )}\n </span>\n )\n }\n pt={{\n root: { className: 'cr-accordion__item' },\n header: { className: 'cr-accordion__header' },\n headerAction: { className: 'cr-accordion__action' },\n toggleableContent: { className: 'cr-accordion__region' },\n content: { className: 'cr-accordion__content' },\n // Abre e fecha pela altura, como o tema do Prime (p-toggleable-content, Accordion.css):\n // no unstyled o Prime só dá o tempo, sem classes.\n transition: {\n classNames: {\n enter: 'cr-accordion__region--entrar',\n enterActive: 'cr-accordion__region--entrando',\n exit: 'cr-accordion__region--sair',\n exitActive: 'cr-accordion__region--saindo',\n },\n } as AccordionPassThroughTransitionType,\n }}\n >\n {tab.props.children}\n </PrimeAccordionTab>\n ))}\n </PrimeAccordion>\n );\n});\n","/**\n * Junta ids para aria-describedby/aria-labelledby: a dica do Cristal soma com a de quem usa, em vez\n * de uma apagar a outra. Sem nenhum id, undefined (o atributo não aparece).\n */\nexport const juntarIds = (...ids: (string | false | null | undefined)[]) =>\n ids.filter(Boolean).join(' ') || undefined;\n","// Lado do popup (lista do Select, do AutoComplete e dos menus): o Prime decide se ele abre abaixo\n// ou acima do alvo, conforme o espaço na tela, e só deixa isso registrado no style inline que ele\n// grava. Em vez de ler esse texto no CSS, o Cristal mede onde o popup ficou de verdade e marca\n// data-cr-lado=\"acima\" quando ele está acima; o CSS dá os 4px de distância do lado certo. É um\n// atributo, não uma classe: o React reescreve o className a cada render do Prime. Chame no\n// onEnter da transição (pelo pt), que o Prime roda logo depois de posicionar, antes de pintar.\n// O Prime também pode reposicionar com o popup aberto (lista que muda de tamanho, rolagem): a\n// marcação acompanha cada mudança de posição até o popup sair da tela.\nexport function seguirLado(painel: Element | null | undefined, alvo: Element | null | undefined) {\n if (!(painel instanceof HTMLElement) || !alvo) return;\n const marcar = () => {\n const acima = painel.getBoundingClientRect().top < alvo.getBoundingClientRect().top;\n if (acima) painel.setAttribute('data-cr-lado', 'acima');\n else painel.removeAttribute('data-cr-lado');\n };\n marcar();\n // O observador some junto com o popup (o Prime o desmonta ao fechar).\n new MutationObserver(marcar).observe(painel, { attributes: true, attributeFilter: ['style'] });\n}\n\n/** O painel da lista controlada pelo campo (aria-controls do combobox). */\nexport const painelDoCampo = (campo: Element | null, seletorDoPainel: string) => {\n const lista = campo?.getAttribute('aria-controls');\n return lista ? document.getElementById(lista)?.closest(seletorDoPainel) : null;\n};\n\n/** As classes da entrada e da saída do popup (comum.css), no lugar das do tema do Prime. */\nconst CLASSES_DO_POPUP = {\n enter: 'cr-popup--entrar',\n enterActive: 'cr-popup--entrando',\n enterDone: 'cr-popup--entrou',\n exitActive: 'cr-popup--saindo',\n};\n\n/**\n * O `pt.transition` do popup: as classes da animação de entrada e saída do Prime (comum.css) e,\n * se houver, o onEnter que marca o lado. O tipo do Prime exige o addEndListener do\n * react-transition-group, que aqui não se usa: o cast fica só aqui.\n */\nexport const transicaoDoPopup = <T>(onEnter?: () => void) =>\n // Sem onEnter, a chave nem aparece: o Prime soma as funções do pt às dele, mas um undefined\n // substituiria o onEnter dele (que posiciona a lista).\n ({ classNames: CLASSES_DO_POPUP, ...(onEnter && { onEnter }) }) as unknown as T;\n","import { forwardRef, useId, useRef, type MouseEvent } from 'react';\nimport {\n AutoComplete as PrimeAutoComplete,\n type AutoCompletePassThroughTransitionType,\n type AutoCompleteProps as PrimeAutoCompleteProps,\n} from 'primereact/autocomplete';\nimport { CaretDown, Info, WarningCircle } from '@phosphor-icons/react';\nimport type { InputTextSize, InputTextVariant } from '../InputText';\nimport '../InputText/InputText.css';\nimport { juntarIds } from '../../aria';\nimport '../../lista.css';\nimport { transicaoDoPopup, painelDoCampo, seguirLado } from '../../popup';\nimport '../../comum.css';\nimport './AutoComplete.css';\n\nexport type AutoCompleteVariant = InputTextVariant;\nexport type AutoCompleteSize = InputTextSize;\n\nexport interface AutoCompleteProps extends Omit<\n PrimeAutoCompleteProps,\n // Fora do Figma (seleção múltipla, mensagem de vazio, carregando) ou controlados pelo Cristal\n // (visual, rótulo, erro, ícone da seta).\n | 'size'\n | 'variant'\n | 'invalid'\n | 'multiple'\n | 'selectionLimit'\n | 'selectedItemTemplate'\n | 'removeTokenIcon'\n | 'dropdownIcon'\n | 'showEmptyMessage'\n | 'emptyMessage'\n | 'loadingIcon'\n | 'inputClassName'\n | 'panelClassName'\n | 'scrollHeight'\n | 'inputRef'\n | 'pt'\n | 'ptOptions'\n | 'unstyled'\n | 'children'\n> {\n /** Type no Figma: Outline (com borda) e Filled (com fundo). */\n variant?: AutoCompleteVariant;\n /** Size no Figma: 32, 36, 42 e 48px de altura do campo. */\n size?: AutoCompleteSize;\n /** Rótulo acima do campo (Label no Figma). Sem rótulo, passe `aria-label`. */\n label?: string;\n /** Dica abaixo do campo (Hint no Figma). */\n hint?: string;\n /** Mensagem de erro: deixa o campo no estado Error e mostra a dica de erro no lugar da dica. */\n error?: string;\n /**\n * Seta à direita do campo (o botão de dropdown do Prime): abre a lista sem digitar, com todas as\n * sugestões (`dropdownMode=\"blank\"`, o padrão) ou filtrando pelo texto (`\"current\"`).\n * Padrão: false, como no Figma.\n */\n dropdown?: boolean;\n /** Nome da seta para o leitor de tela. Padrão: \"Mostrar opções\". */\n dropdownAriaLabel?: string;\n /**\n * O clique no campo abre a lista, com as sugestões do texto que já está nele (com o campo vazio,\n * todas). Padrão: true.\n */\n openOnClick?: boolean;\n}\n\n// Base: AutoComplete do PrimeReact no modo unstyled (busca, lista, teclado e ARIA de combobox do\n// Prime, espelhando o p-autoComplete do PrimeNG da produção). O rótulo e a dica são os do InputText\n// (.cr-field). O campo do AutoComplete no Figma não tem ícones, então o próprio <input> é a caixa\n// do campo: assim o painel, que o Prime alinha pelo <input>, fica na largura e na borda do campo.\n// Com `dropdown`, a seta do Prime fica por cima do fim do <input>, com o visual da do Select; ela\n// abre e fecha a lista, como no PrimeNG 19. O clique no campo também abre (`openOnClick`).\nexport const AutoComplete = forwardRef<HTMLInputElement, AutoCompleteProps>(function AutoComplete(\n {\n variant = 'outline',\n size = 'large',\n label,\n hint,\n error,\n dropdown = false,\n dropdownAriaLabel = 'Mostrar opções',\n openOnClick = true,\n inputId,\n required,\n disabled,\n className,\n style,\n ...props\n },\n ref,\n) {\n const autoId = useId();\n const id = inputId ?? autoId;\n const hintId = `${id}-hint`;\n const supportText = error ?? hint;\n const prime = useRef<PrimeAutoComplete>(null);\n const aberta = () => Boolean(prime.current?.getOverlay());\n\n const classes = [\n 'cr-field',\n 'cr-autocomplete',\n dropdown && 'cr-autocomplete--dropdown',\n `cr-field--${variant}`,\n `cr-field--${size}`,\n error && 'cr-field--error',\n disabled && 'cr-field--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={classes} style={style}>\n {label && (\n <label className=\"cr-field__label\" htmlFor={id}>\n {label}\n {required && (\n <span className=\"cr-field__required\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n <PrimeAutoComplete\n ref={prime}\n unstyled\n inputRef={ref}\n inputId={id}\n required={required}\n disabled={disabled}\n // 5 itens visíveis, como no Figma (5 × 37px).\n scrollHeight=\"185px\"\n dropdown={dropdown}\n dropdownAriaLabel={dropdownAriaLabel}\n // A seta do Select do Cristal (CaretDown de 16px); aberta, ela gira (AutoComplete.css).\n dropdownIcon={<CaretDown className=\"cr-autocomplete__dropdown-icon\" aria-hidden=\"true\" />}\n pt={{\n root: { className: 'cr-autocomplete__root' },\n input: {\n root: {\n className: 'cr-field__control cr-autocomplete__input',\n 'aria-describedby': juntarIds(supportText && hintId, props['aria-describedby']),\n 'aria-invalid': error ? true : undefined,\n // O clique no campo abre a lista (o Prime só abre ao digitar ou pela seta).\n ...(openOnClick && {\n onClick: (event: MouseEvent<HTMLInputElement>) => {\n if (!aberta() && !disabled) {\n prime.current?.search(event, event.currentTarget.value, 'dropdown');\n }\n },\n }),\n },\n },\n // A seta: o botão de dropdown do Prime, por cima do fim do <input> (que segue sendo a caixa,\n // para a lista continuar alinhada ao campo).\n dropdownButton: {\n root: {\n className: 'cr-autocomplete__dropdown',\n // Com a lista aberta, a seta fecha (como no p-autoComplete do PrimeNG 19); a do\n // PrimeReact só abre. Na captura, antes do clique do Prime, que buscaria de novo.\n onClickCapture: (event: MouseEvent<HTMLButtonElement>) => {\n if (!aberta()) return;\n event.stopPropagation();\n prime.current?.hide();\n },\n },\n },\n // O Prime mostra um spinner próprio enquanto busca; o Figma não define esse estado.\n loadingIcon: { className: 'cr-autocomplete__loader' },\n panel: { className: 'cr-lista cr-autocomplete__panel' },\n // Animação de entrada e saída (a do Prime) e o lado da lista, medido logo depois de o Prime\n // posicionar.\n transition: transicaoDoPopup<AutoCompletePassThroughTransitionType>(() => {\n const campo = document.getElementById(id);\n seguirLado(painelDoCampo(campo, '.cr-autocomplete__panel'), campo);\n }),\n // A área que rola (o Prime aceita listWrapper no pt, mas o d.ts não declara).\n ...({ listWrapper: { className: 'cr-lista__rolagem' } } as object),\n list: { className: 'cr-lista__itens' },\n item: ({ context }: { context: { selected: boolean } }) => ({\n className: `cr-lista__item cr-autocomplete__item${context.selected ? ' cr-lista__item--selecionado' : ''}`,\n }),\n }}\n {...props}\n />\n {supportText && (\n <p id={hintId} className={`cr-field__hint${error ? ' cr-field__hint--error' : ''}`}>\n <span className=\"cr-field__hint-icon\" aria-hidden=\"true\">\n {error ? <WarningCircle /> : <Info />}\n </span>\n {supportText}\n </p>\n )}\n </div>\n );\n});\n","import {\n forwardRef,\n useImperativeHandle,\n useRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { Badge as PrimeBadge } from 'primereact/badge';\nimport './Badge.css';\n\n/** State no Figma. */\nexport type BadgeVariant = 'default' | 'error' | 'warning' | 'success' | 'disabled';\n/** Size no Figma: large = 24px, medium = 16px, small = ponto de 8px sem número. */\nexport type BadgeSize = 'large' | 'medium' | 'small';\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: BadgeVariant;\n size?: BadgeSize;\n /** Valor do badge (Badge Value no Figma). Ignorado no `small`. */\n children?: ReactNode;\n}\n\n// Base: Badge do PrimeReact no modo unstyled; o visual vem todo do Badge.css. No small o\n// conteúdo é descartado: é um indicador sem número (para ele ser anunciado, passe role=\"img\" e\n// aria-label).\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n { variant = 'default', size = 'large', className, children, ...props },\n ref,\n) {\n const primeRef = useRef<PrimeBadge>(null);\n // O PrimeReact entrega na ref um objeto com getElement(); o Cristal repassa o <span>.\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLSpanElement);\n\n const classes = ['cr-badge', `cr-badge--${variant}`, `cr-badge--${size}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <PrimeBadge\n unstyled\n ref={primeRef}\n className={classes}\n value={size === 'small' ? null : children}\n {...props}\n />\n );\n});\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode, type Ref } from 'react';\nimport { Button as PrimeButton } from 'primereact/button';\nimport './Button.css';\n\n/** Hierarchy no Figma: Primary (Filled), Secondary (Tonal) e Tertiary (Outlined). */\nexport type ButtonVariant = 'primary' | 'secondary' | 'tertiary';\n/** Size no Figma: 32, 36, 42 e 48px de altura. */\nexport type ButtonSize = 'xsmall' | 'small' | 'medium' | 'large';\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n /** Ícone antes do texto (Leading Icon no Figma). Use um ícone de `@vector-business-services/cristal-ds-web/icons`. */\n leadingIcon?: ReactNode;\n /** Ícone depois do texto (Trailing Icon no Figma). */\n trailingIcon?: ReactNode;\n}\n\n// Base: Button do PrimeReact no modo unstyled. O comportamento é o do Prime (espelhando o PrimeNG\n// da produção) e o visual vem todo do Button.css. O Prime aceita um ícone só (`icon`); como o\n// Figma permite os dois juntos, os ícones vão como conteúdo do botão.\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = 'primary',\n size = 'large',\n leadingIcon,\n trailingIcon,\n type = 'button',\n className,\n children,\n ...props\n },\n ref,\n) {\n const classes = ['cr-button', `cr-button--${variant}`, `cr-button--${size}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <PrimeButton\n unstyled\n // O PrimeReact tipa a ref como a instância da classe, mas entrega o <button> nela.\n ref={ref as unknown as Ref<PrimeButton>}\n type={type}\n className={classes}\n {...props}\n >\n {leadingIcon && (\n <span className=\"cr-button__icon\" aria-hidden=\"true\">\n {leadingIcon}\n </span>\n )}\n {children}\n {trailingIcon && (\n <span className=\"cr-button__icon\" aria-hidden=\"true\">\n {trailingIcon}\n </span>\n )}\n </PrimeButton>\n );\n});\n","import { addLocale, localeOption } from 'primereact/api';\nimport type {\n CalendarPassThroughMethodOptions,\n CalendarPassThroughOptions,\n} from 'primereact/calendar';\nimport { CaretLeft, CaretRight } from '@phosphor-icons/react';\n\n// Partes comuns ao Calendar e ao DatePicker: os dois são o Calendar do PrimeReact (o p-datepicker\n// do PrimeNG 19 da produção), um embutido na página e o outro em popup, com o mesmo painel.\n\n/** Locale do Prime com os textos do Figma: meses, dias da semana (Dom a Sab) e os nomes em pt-BR. */\nexport const LOCALE = 'cr-pt-BR';\naddLocale(LOCALE, {\n firstDayOfWeek: 0,\n dayNames: [\n 'domingo',\n 'segunda-feira',\n 'terça-feira',\n 'quarta-feira',\n 'quinta-feira',\n 'sexta-feira',\n 'sábado',\n ],\n dayNamesShort: ['dom', 'seg', 'ter', 'qua', 'qui', 'sex', 'sáb'],\n dayNamesMin: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sab'],\n monthNames: [\n 'Janeiro',\n 'Fevereiro',\n 'Março',\n 'Abril',\n 'Maio',\n 'Junho',\n 'Julho',\n 'Agosto',\n 'Setembro',\n 'Outubro',\n 'Novembro',\n 'Dezembro',\n ],\n monthNamesShort: [\n 'Jan',\n 'Fev',\n 'Mar',\n 'Abr',\n 'Mai',\n 'Jun',\n 'Jul',\n 'Ago',\n 'Set',\n 'Out',\n 'Nov',\n 'Dez',\n ],\n dateFormat: 'dd/mm/yy',\n weekHeader: 'Sem',\n today: 'Hoje',\n clear: 'Limpar',\n chooseDate: 'Escolher data',\n chooseMonth: 'Escolher mês',\n chooseYear: 'Escolher ano',\n prevMonth: 'Mês anterior',\n nextMonth: 'Próximo mês',\n prevYear: 'Ano anterior',\n nextYear: 'Próximo ano',\n prevDecade: 'Década anterior',\n nextDecade: 'Próxima década',\n});\n\n// O Prime 10.9.9 recria a tabela do mês a cada render (a chave do contêiner é nova a cada vez): o\n// dia com foco some do DOM, e o foco cai no <body> — o teclado se perde no calendário. Quando isso\n// acontece, o foco vai para o mesmo dia (mesmo mês do painel e mesma data) na tabela nova. Um\n// ouvinte só, para todos os calendários do Cristal.\nfunction seguirFocoDoDia(event: FocusEvent) {\n const dia = event.target;\n if (!(dia instanceof HTMLElement) || !dia.classList.contains('cr-calendar__date')) return;\n const painel = dia.closest('.cr-calendar');\n const td = dia.closest('td');\n const mes = dia.closest('.cr-calendar__month');\n if (!painel || !td || !mes || event.relatedTarget) return;\n const indice = [...painel.querySelectorAll('.cr-calendar__month')].indexOf(mes);\n const { pDay, pMonth, pYear } = td.dataset;\n requestAnimationFrame(() => {\n if (dia.isConnected || document.activeElement !== document.body) return;\n const novo = painel\n .querySelectorAll('.cr-calendar__month')\n [indice]?.querySelector<HTMLElement>(\n `td[data-p-day=\"${pDay}\"][data-p-month=\"${pMonth}\"][data-p-year=\"${pYear}\"] .cr-calendar__date`,\n );\n if (novo) {\n novo.tabIndex = 0;\n novo.focus();\n }\n });\n}\nif (typeof document !== 'undefined') document.addEventListener('focusout', seguirFocoDoDia, true);\n\n/** Setas do cabeçalho: o Icon Button tertiary de 32px do Cristal, com o Caret de 16px do Figma. */\nexport const setas = {\n prevIcon: (\n <span className=\"cr-icon-button__icon\">\n <CaretLeft />\n </span>\n ),\n nextIcon: (\n <span className=\"cr-icon-button__icon\">\n <CaretRight />\n </span>\n ),\n};\n\ninterface Dia {\n day: number;\n month: number;\n year: number;\n}\n\nconst mesmoDia = (data: Date | null | undefined, dia: Dia) =>\n data instanceof Date &&\n data.getDate() === dia.day &&\n data.getMonth() === dia.month &&\n data.getFullYear() === dia.year;\n\nconst chave = (dia: Dia) => dia.year * 10000 + dia.month * 100 + dia.day;\nconst chaveDe = (data: Date) =>\n chave({ day: data.getDate(), month: data.getMonth(), year: data.getFullYear() });\n\n// Se o dia está escolhido (na data única, numa das várias ou dentro do período).\nfunction escolhido(props: CalendarPassThroughMethodOptions['props'], dia: Dia) {\n const { value } = props as { value?: Date | (Date | null)[] | null };\n if (value instanceof Date) return mesmoDia(value, dia);\n if (!Array.isArray(value)) return false;\n if ((props.selectionMode as string) === 'range') {\n const [inicio, fim] = value;\n if (!inicio) return false;\n return chave(dia) >= chaveDe(inicio) && chave(dia) <= chaveDe(fim ?? inicio);\n }\n return value.some((data) => mesmoDia(data, dia));\n}\n\n// No período, o Prime marca como selecionados todos os dias de início a fim; o Figma diferencia o\n// início e o fim (Start/End, círculo brand) do meio (Period Middle, brand/subtle).\nfunction noPeriodo(props: CalendarPassThroughMethodOptions['props'], dia: Dia) {\n if ((props.selectionMode as string) !== 'range' || !Array.isArray(props.value)) return undefined;\n const [inicio, fim] = props.value as (Date | null)[];\n if (mesmoDia(inicio, dia) || mesmoDia(fim, dia)) return 'cr-calendar__day--edge';\n if (inicio && fim) {\n const data = new Date(dia.year, dia.month, dia.day);\n if (data > inicio && data < fim) return 'cr-calendar__day--middle';\n }\n return undefined;\n}\n\nconst classes = (...lista: (string | false | undefined)[]) => lista.filter(Boolean).join(' ');\n\n/**\n * O pt do painel do Calendar do Prime com o visual do Figma (DatePicker: .Calendar, .Date e\n * .Month select). `offDays` são os dias de folga (Day Off: riscados).\n */\nexport function ptDoPainel(offDays: Date[] = []): CalendarPassThroughOptions {\n return {\n groupContainer: { className: 'cr-calendar__months' },\n group: { className: 'cr-calendar__month' },\n header: { className: 'cr-calendar__header' },\n previousButton: {\n className: 'cr-icon-button cr-icon-button--tertiary cr-icon-button--xsmall',\n },\n nextButton: { className: 'cr-icon-button cr-icon-button--tertiary cr-icon-button--xsmall' },\n title: { className: 'cr-calendar__title' },\n // O nome dos botões do título é o texto que aparece neles (o mês e o ano), não \"Escolher mês\".\n monthTitle: { className: 'cr-calendar__title-button', 'aria-label': undefined },\n yearTitle: { className: 'cr-calendar__title-button', 'aria-label': undefined },\n decadeTitle: { className: 'cr-calendar__title-text' },\n table: { className: 'cr-calendar__table' },\n tableHeaderCell: { className: 'cr-calendar__weekday' },\n day: ({ props, context }: CalendarPassThroughMethodOptions) => {\n const dia = context.date as unknown as Dia & { selectable: boolean };\n const meses = localeOption('monthNames', props.locale ?? LOCALE) as string[];\n return {\n // O Prime põe o escolhido e o desabilitado no <span> do dia, que não tem papel: eles vão\n // para a célula da grade (gridcell). O nome da célula inclui o número que aparece nela.\n 'aria-selected': escolhido(props, dia),\n 'aria-disabled': dia.selectable ? undefined : true,\n 'aria-label': `${dia.day} de ${meses[dia.month]?.toLowerCase()} de ${dia.year}`,\n className: classes(\n 'cr-calendar__day',\n context.today && 'cr-calendar__day--today',\n context.otherMonth && 'cr-calendar__day--other-month',\n offDays.some((data) => mesmoDia(data, dia)) && 'cr-calendar__day--off',\n noPeriodo(props, dia),\n ),\n };\n },\n dayLabel: ({ context }: CalendarPassThroughMethodOptions) => ({\n 'aria-selected': undefined,\n 'aria-disabled': undefined,\n className: classes(\n 'cr-calendar__date',\n context.selected && 'cr-calendar__date--selected',\n context.disabled && 'cr-calendar__date--disabled',\n ),\n }),\n monthPicker: { className: 'cr-calendar__picker cr-calendar__picker--months' },\n month: ({ context }: CalendarPassThroughMethodOptions) => ({\n className: classes(\n 'cr-calendar__option',\n context.selected && 'cr-calendar__option--selected',\n context.disabled && 'cr-calendar__option--disabled',\n ),\n }),\n yearPicker: { className: 'cr-calendar__picker cr-calendar__picker--years' },\n year: ({ context }: CalendarPassThroughMethodOptions) => ({\n className: classes(\n 'cr-calendar__option',\n context.selected && 'cr-calendar__option--selected',\n context.disabled && 'cr-calendar__option--disabled',\n ),\n }),\n } as CalendarPassThroughOptions;\n}\n","import { forwardRef, type ReactElement, type Ref } from 'react';\nimport {\n Calendar as PrimeCalendar,\n type CalendarProps as PrimeCalendarProps,\n type CalendarSelectionMode,\n} from 'primereact/calendar';\nimport { LOCALE, ptDoPainel, setas } from './calendario';\nimport '../IconButton/IconButton.css';\nimport './Calendar.css';\n\n/**\n * Props do Calendar do PrimeReact (`selectionMode` single, range ou multiple, `numberOfMonths`,\n * `view`, `minDate`, `maxDate`, `disabledDates`, `disabledDays`, `dateTemplate`...), mais os dias de\n * folga do Figma. O visual (pt e unstyled) e as setas são do Cristal.\n */\nexport interface CalendarProps<TMode extends CalendarSelectionMode = 'single'> extends Omit<\n PrimeCalendarProps<TMode>,\n 'pt' | 'ptOptions' | 'unstyled' | 'inline' | 'prevIcon' | 'nextIcon'\n> {\n /** Dias de folga (Day Off no Figma): aparecem riscados. Para não deixar escolher, use `disabledDates`. */\n offDays?: Date[];\n}\n\n/** A ref é a do Calendar do Prime: `getElement()`, `getCurrentDateTime()`, `getViewDate()`... */\nexport type CalendarHandle = PrimeCalendar;\n\n// Base: Calendar do PrimeReact no modo inline e unstyled (o p-datepicker do PrimeNG 19 da produção,\n// com [inline]): só o painel, sem o campo, para usar dentro de outros componentes. Seleção, visões de\n// mês e ano, teclado e ARIA são do Prime; o Cristal desenha o .Calendar do Figma e põe o pt-BR.\nfunction CalendarBase<TMode extends CalendarSelectionMode = 'single'>(\n { offDays, locale = LOCALE, className, ...props }: CalendarProps<TMode>,\n ref: Ref<CalendarHandle>,\n) {\n return (\n <PrimeCalendar\n {...setas}\n locale={locale}\n {...(props as PrimeCalendarProps<TMode>)}\n ref={ref as Ref<PrimeCalendar<TMode>>}\n inline\n unstyled\n className={className}\n pt={{\n root: { className: 'cr-calendar-inline' },\n panel: { className: 'cr-calendar' },\n ...ptDoPainel(offDays),\n }}\n />\n );\n}\n\n/** Calendar do Figma \"Cristal - Core Components | Web\" (DatePicker: .Calendar), sem o campo. */\nexport const Calendar = forwardRef(CalendarBase) as <\n TMode extends CalendarSelectionMode = 'single',\n>(\n props: CalendarProps<TMode> & { ref?: Ref<CalendarHandle> },\n) => ReactElement;\n","import { forwardRef, type HTMLAttributes, type Ref } from 'react';\nimport { Card as PrimeCard } from 'primereact/card';\nimport './Card.css';\n\n/** Padding no Figma: X-Small (8px), Small (12px), Medium (16px), Large (20px) e X-Large (24px). */\nexport type CardPadding = 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n padding?: CardPadding;\n /** Outline no Figma: borda de 1px em stroke/neutral/base. */\n outline?: boolean;\n}\n\n// Base: Card do PrimeReact no modo unstyled (o p-card do PrimeNG da produção). No Figma o Card é\n// só o contêiner, com o conteúdo num slot: o Cristal não repassa header, title, subTitle nem\n// footer do Prime, e o conteúdo vai em children. O visual vem do Card.css.\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n { padding = 'xsmall', outline = false, className, style, children, ...props },\n ref,\n) {\n const classes = ['cr-card', `cr-card--${padding}`, outline && 'cr-card--outline', className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <PrimeCard\n unstyled\n // O Card do Prime é um forwardRef que entrega o próprio <div>, mas o tipo o declara como classe.\n ref={ref as unknown as Ref<PrimeCard>}\n // className e style vão pelo pt, junto com as classes do Cristal (o Card do Prime também os\n // aceitaria direto; pelo pt fica igual aos outros componentes).\n pt={{\n root: { className: classes, style },\n body: { className: 'cr-card__body' },\n content: { className: 'cr-card__content' },\n }}\n {...props}\n >\n {children}\n </PrimeCard>\n );\n});\n","import { useEffect, useId, useRef, useState, type ReactNode, type RefObject } from 'react';\nimport { Tooltip as PrimeTooltip, type TooltipPassThroughOptions } from 'primereact/tooltip';\nimport './Tooltip.css';\n\n/** Type no Figma: Plain (rótulo curto, uma linha) e Rich (texto de até 300px, quebra linha). */\nexport type TooltipType = 'plain' | 'rich';\nexport type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';\n\nexport interface TooltipProps {\n /** Elemento que mostra o tooltip: ref, elemento ou seletor CSS. */\n target: RefObject<HTMLElement | null> | HTMLElement | string;\n /** Texto do tooltip (Label no Plain, Text no Rich). */\n content: ReactNode;\n type?: TooltipType;\n /** Lado do alvo. O Prime inverte o lado se faltar espaço na tela. */\n position?: TooltipPosition;\n /** O que abre o tooltip; o padrão abre no hover e no foco do teclado. */\n event?: 'hover' | 'focus' | 'both';\n showDelay?: number;\n hideDelay?: number;\n disabled?: boolean;\n /**\n * Liga o texto ao alvo como descrição (aria-describedby). Padrão: true. Use false quando o texto\n * já é o nome do alvo (como no IconButton), para o leitor de tela não ler duas vezes.\n */\n describe?: boolean;\n id?: string;\n className?: string;\n}\n\n// Última interação foi pelo teclado? No foco, o tooltip só abre nesse caso: um foco posto pelo\n// código (o X do Drawer ou do Dialog ao abrir) ou deixado por um clique não deve abrir o tooltip.\n// O Esc fecha os tooltips abertos (a WCAG 1.4.13 pede). Não é o closeOnEscape do Prime: com ele,\n// dois tooltips abrindo quase juntos (passar o mouse de um botão para outro) registram o Esc com a\n// mesma prioridade, e o Prime lança \"esc key listener ... already exists\". Um ouvinte só, para a\n// página toda, fecha os que estiverem abertos.\nlet usandoTeclado = false;\nconst abertos = new Set<() => void>();\nif (typeof document !== 'undefined') {\n document.addEventListener(\n 'keydown',\n (event) => {\n usandoTeclado = true;\n if (event.key === 'Escape') abertos.forEach((fechar) => fechar());\n },\n true,\n );\n document.addEventListener('pointerdown', () => (usandoTeclado = false), true);\n}\n\nconst resolveTargets = (target: TooltipProps['target']): HTMLElement[] => {\n if (typeof target === 'string') return Array.from(document.querySelectorAll<HTMLElement>(target));\n if (target instanceof HTMLElement) return [target];\n return target.current ? [target.current] : [];\n};\n\n// Base: Tooltip do PrimeReact no modo unstyled (abrir/fechar, atraso e posicionamento com troca de\n// lado do Prime, espelhando o pTooltip do PrimeNG da produção). O visual vem do Tooltip.css; o\n// Figma não tem seta. Ajustes de acessibilidade: o Esc fecha (a WCAG 1.4.13 pede; ver abertos,\n// acima); o Prime marca o tooltip aberto com aria-hidden=\"true\" e não liga\n// o alvo ao texto, então o alvo ganha o id do tooltip no aria-describedby, somado ao que ele já\n// tinha (a dica de um campo, por exemplo); e, no foco, ele só abre quando quem chegou ali foi o\n// teclado.\nexport function Tooltip({\n target,\n content,\n type = 'plain',\n position = 'bottom',\n event = 'both',\n showDelay,\n hideDelay,\n disabled,\n describe = true,\n id,\n className,\n}: TooltipProps) {\n const autoId = useId();\n const tooltipId = id ?? autoId;\n const primeRef = useRef<PrimeTooltip>(null);\n // Como o tooltip se registra para o Esc: a mesma função ao abrir e ao fechar.\n const [fechar] = useState(() => () => void primeRef.current?.hide());\n useEffect(() => () => void abertos.delete(fechar), [fechar]);\n\n useEffect(() => {\n if (!describe) return;\n const elements = resolveTargets(target);\n const ids = (element: HTMLElement) =>\n (element.getAttribute('aria-describedby') ?? '').split(/\\s+/).filter(Boolean);\n const gravar = (element: HTMLElement, lista: string[]) =>\n lista.length\n ? element.setAttribute('aria-describedby', lista.join(' '))\n : element.removeAttribute('aria-describedby');\n elements.forEach((element) => {\n if (!ids(element).includes(tooltipId)) gravar(element, [...ids(element), tooltipId]);\n });\n return () =>\n elements.forEach((element) =>\n gravar(\n element,\n ids(element).filter((idAtual) => idAtual !== tooltipId),\n ),\n );\n }, [target, tooltipId, describe]);\n\n const classes = ['cr-tooltip', `cr-tooltip--${type}`, className].filter(Boolean).join(' ');\n\n const pt: TooltipPassThroughOptions = {\n root: (options) => {\n const side = (options as { state?: { position?: string } })?.state?.position ?? position;\n return { className: `${classes} cr-tooltip--${side}`, 'aria-hidden': false };\n },\n arrow: { className: 'cr-tooltip__arrow' },\n text: { className: 'cr-tooltip__text' },\n };\n\n return (\n <PrimeTooltip\n unstyled\n id={tooltipId}\n target={target as never}\n position={position}\n event={event}\n showDelay={showDelay}\n hideDelay={hideDelay}\n ref={primeRef}\n disabled={disabled}\n onBeforeShow={(e) => {\n const abre = e.originalEvent?.type !== 'focus' || usandoTeclado;\n if (abre) abertos.add(fechar);\n return abre;\n }}\n onBeforeHide={() => {\n abertos.delete(fechar);\n return true;\n }}\n pt={pt}\n >\n {content}\n </PrimeTooltip>\n );\n}\n","import {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { Chart as PrimeChart } from 'primereact/chart';\nimport type { ChartData, ChartOptions, LineElement, Plugin, ScriptableContext } from 'chart.js';\nimport { Question } from '@phosphor-icons/react';\nimport { Tooltip } from '../../core/Tooltip';\nimport '../../comum.css';\nimport './Chart.css';\n\n/**\n * Cor da série: os tokens de gráfico (color/chart/fill/<cor>/<tom>), na ordem fixa. Sem `color`,\n * cada série pega a da sua posição; a cor acompanha a série, nunca a ordem. A quinary (ciano) fica\n * de fora: clara demais sobre o fundo (1,75:1).\n */\nexport type ChartColor = 'primary' | 'secondary' | 'tertiary' | 'quaternary';\n\n/** Tom da cor (o passo do token). Padrão: 600 na linha e 500 na barra, como no Figma. */\nexport type ChartTone = 100 | 200 | 300 | 400 | 500 | 600;\n\n/** Uma série: uma linha ou um conjunto de barras. */\nexport interface ChartSeries {\n label: string;\n /** Um valor por rótulo do eixo X; null deixa o ponto em branco. */\n data: (number | null)[];\n color?: ChartColor;\n /** Tom da cor: nas barras empilhadas do Figma, partes de um total usam tons da mesma cor. */\n tone?: ChartTone;\n /** Eixo do valor: o da esquerda (padrão) ou o da direita (y2Axis). */\n axis?: 'left' | 'right';\n}\n\n/** Escala de um eixo Y. */\nexport interface ChartAxis {\n /** Texto de cada marca e do valor no tooltip (ex.: `(v) => \\`R$ ${v}\\``). */\n format?: (value: number) => string;\n min?: number;\n max?: number;\n /** Distância entre as marcas (ex.: 50). */\n stepSize?: number;\n}\n\nexport interface ChartProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title' | 'children'> {\n /** Linhas com área (Chart / Line) ou barras (Chart / Bar). Padrão: line. */\n type?: 'line' | 'bar';\n /** Barras empilhadas: as séries somam numa barra só por rótulo. */\n stacked?: boolean;\n /** Rótulos do eixo X, um por ponto. */\n labels: string[];\n /** As séries, até 4 cores (as de gráfico dos tokens). */\n series: ChartSeries[];\n /** Eixo da esquerda. */\n yAxis?: ChartAxis;\n /** Eixo da direita, para séries com `axis: 'right'`. */\n y2Axis?: ChartAxis;\n /** Título do card. Sem título nem ações, só o gráfico e a legenda, sem a caixa. */\n title?: string;\n /** Texto do ícone de ajuda (Question) ao lado do título, num Tooltip. */\n help?: string;\n helpLabel?: string;\n /** Botões à direita do título (IconButton tertiary xsmall no Figma). */\n actions?: ReactNode;\n /**\n * Altura da área do gráfico, com os eixos: em px, ou `'100%'` para ocupar a altura do contêiner\n * (que precisa ter altura definida). Padrão: 266px, a do Figma.\n */\n height?: number | '100%';\n /** Legenda abaixo do gráfico. Padrão: com 2 ou mais séries. */\n legend?: boolean;\n id?: string;\n className?: string;\n}\n\nconst CORES: ChartColor[] = ['primary', 'secondary', 'tertiary', 'quaternary'];\nconst corDe = (serie: ChartSeries, indice: number) => serie.color ?? CORES[indice % CORES.length]!;\nconst tomDe = (serie: ChartSeries, tipo: 'line' | 'bar') =>\n serie.tone ?? (tipo === 'bar' ? 500 : 600);\n\n/** Valores dos tokens que o Chart.js (canvas) precisa: ele não lê variáveis CSS. */\ninterface Tema {\n cor: (cor: ChartColor, tom: ChartTone) => string;\n grade: string;\n texto: string;\n cruz: string;\n superficie: string;\n tooltipFundo: string;\n tooltipTexto: string;\n fonte: { family: string; size: number; weight: number; lineHeight: number };\n}\n\nconst lerTema = (el: HTMLElement): Tema => {\n const css = getComputedStyle(el);\n const v = (nome: string) => css.getPropertyValue(nome).trim();\n const px = (nome: string) => parseFloat(v(nome));\n return {\n cor: (cor, tom) => v(`--cr-color-chart-fill-${cor}-${tom}`),\n grade: v('--cr-color-chart-tertiary'),\n texto: v('--cr-color-chart-secondary'),\n cruz: v('--cr-color-stroke-neutral-bold'),\n superficie: v('--cr-color-fill-neutral-container'),\n tooltipFundo: v('--cr-color-fill-neutral-boldest'),\n tooltipTexto: v('--cr-color-text-inverse-base'),\n fonte: {\n family: v('--cr-typography-label-small-10-semibold-font-family'),\n size: px('--cr-typography-label-small-10-semibold-font-size'),\n weight: Number(v('--cr-typography-label-small-10-semibold-font-weight')),\n lineHeight:\n px('--cr-typography-label-small-10-semibold-line-height') /\n px('--cr-typography-label-small-10-semibold-font-size'),\n },\n };\n};\n\n// A cor do token com transparência, para o degradê da área. O canvas normaliza qualquer cor CSS\n// (hex, rgb(), nome) para #rrggbb ou rgba(); daí sai o r, g, b.\nconst comAlfa = (cor: string, alfa: number) => {\n const ctx = document.createElement('canvas').getContext('2d');\n if (!ctx) return cor;\n ctx.fillStyle = cor;\n const normal = String(ctx.fillStyle);\n if (normal.startsWith('#')) {\n const n = parseInt(normal.slice(1, 7), 16);\n return `rgba(${(n >> 16) & 255}, ${(n >> 8) & 255}, ${n & 255}, ${alfa})`;\n }\n const [r = 0, g = 0, b = 0] = normal.match(/[\\d.]+/g)?.map(Number) ?? [];\n return `rgba(${r}, ${g}, ${b}, ${alfa})`;\n};\n\n// Linha vertical (stroke/neutral/bold) no X do tooltip: o leitor mira o horário, não a linha.\n// Senoide do Figma: entre dois pontos, um S que sai e chega na horizontal em todo ponto, sem passar\n// dos valores. O Chart.js não tem essa curva (a tension usa os vizinhos e a monotone só fica na\n// horizontal nos picos e vales), mas desenha a linha e a área como Béziers com os pontos de controle\n// de cada ponto (cp1 antes, cp2 depois). Antes de desenhar, o plugin pede ao Chart.js o cálculo\n// dele e troca os controles pelos da senoide: na altura do ponto, a meio caminho do vizinho. A\n// linha, a área (fill), a animação e o hover continuam do Chart.js; na animação, o Chart.js\n// recalcula a cada quadro, e o plugin troca de novo.\ntype PontoDaCurva = {\n x: number;\n y: number;\n skip?: boolean;\n cp1x: number;\n cp1y: number;\n cp2x: number;\n cp2y: number;\n};\nconst senoide: Plugin<'line'> = {\n id: 'crSenoide',\n beforeDatasetsDraw(chart) {\n chart.data.datasets.forEach((_, indice) => {\n const meta = chart.getDatasetMeta(indice);\n if (meta.type !== 'line' || !meta.dataset || !chart.isDatasetVisible(indice)) return;\n const linha = meta.dataset as unknown as LineElement;\n linha.updateControlPoints(chart.chartArea, meta.iScale?.axis as 'x' | 'y' | undefined);\n const pontos = linha.points as unknown as PontoDaCurva[];\n pontos.forEach((ponto, i) => {\n const antes = pontos[i - 1];\n const depois = pontos[i + 1];\n ponto.cp1x = antes && !antes.skip ? (antes.x + ponto.x) / 2 : ponto.x;\n ponto.cp1y = ponto.y;\n ponto.cp2x = depois && !depois.skip ? (ponto.x + depois.x) / 2 : ponto.x;\n ponto.cp2y = ponto.y;\n });\n });\n },\n};\n\nconst cruz = (cor: string): Plugin<'line'> => ({\n id: 'crCruz',\n afterDatasetsDraw(chart) {\n const ativo = chart.tooltip?.getActiveElements()[0];\n if (!ativo) return;\n const { ctx, chartArea } = chart;\n ctx.save();\n ctx.strokeStyle = cor;\n ctx.lineWidth = 1;\n ctx.beginPath();\n ctx.moveTo(ativo.element.x, chartArea.top);\n ctx.lineTo(ativo.element.x, chartArea.bottom);\n ctx.stroke();\n ctx.restore();\n },\n});\n\nconst semMovimento = () =>\n typeof window !== 'undefined' && window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;\n\nconst formatar = (eixo: ChartAxis | undefined, valor: number) =>\n eixo?.format ? eixo.format(valor) : String(valor);\n\n// Base: Chart do PrimeReact (o p-chart do PrimeNG da produção), que desenha com o Chart.js. O\n// Cristal monta os gráficos do Figma: linhas com área (Chart / Line), com a linha de 2px na senoide\n// do Figma (plugin senoide, sobre a curva do Chart.js) e a área em degradê da cor da série (10% em\n// cima, 2% embaixo); e barras\n// de 10px, empilhadas ou não, com 2px de raio no topo. Grade tracejada, eixos em\n// label/small-10/semibold e um segundo eixo Y opcional à direita. As cores são os tokens de\n// gráfico (color/chart/*) e as fontes, as do Cristal, lidos do CSS ao montar (o canvas não lê\n// variáveis). A legenda é HTML, com os tokens; o tooltip lista todas as séries no X (na linha, com\n// a linha vertical). Para o leitor de tela, o gráfico é uma imagem com o título como nome, e os\n// valores ficam numa tabela escondida. O card (título, ajuda e ações, na caixa com borda) é o\n// frame do Figma. Tudo o que é desenho (linhas, áreas, barras, animação) é do Chart.js.\nexport const Chart = forwardRef<HTMLDivElement, ChartProps>(function Chart(\n {\n type = 'line',\n stacked = false,\n labels,\n series,\n yAxis,\n y2Axis,\n title,\n help,\n helpLabel = 'Ajuda',\n actions,\n height = 266,\n legend,\n id,\n className,\n ...props\n },\n ref,\n) {\n const raiz = useRef<HTMLDivElement>(null);\n useImperativeHandle(ref, () => raiz.current as HTMLDivElement);\n const ajuda = useRef<HTMLButtonElement>(null);\n const [tema, setTema] = useState<Tema>();\n // Os tokens são lidos uma vez, ao montar: o Cristal ainda não troca de tema em tempo de execução.\n useLayoutEffect(() => {\n if (raiz.current) setTema(lerTema(raiz.current));\n }, []);\n\n const temDireita = series.some((s) => s.axis === 'right');\n\n const data = useMemo<ChartData<'line' | 'bar'> | undefined>(() => {\n if (!tema) return undefined;\n return {\n labels,\n datasets: series.map((s, i) => {\n const cor = tema.cor(corDe(s, i), tomDe(s, type));\n if (type === 'bar') {\n // Raio de 2px só no topo da barra (no empilhado, no topo da última série).\n const topo = !stacked || i === series.length - 1;\n return {\n type: 'bar' as const,\n label: s.label,\n data: s.data,\n yAxisID: s.axis === 'right' ? 'y2' : 'y',\n backgroundColor: cor,\n hoverBackgroundColor: cor,\n barThickness: 10,\n borderSkipped: false,\n borderRadius: topo ? { topLeft: 2, topRight: 2, bottomLeft: 0, bottomRight: 0 } : 0,\n };\n }\n return {\n type: 'line' as const,\n label: s.label,\n data: s.data,\n yAxisID: s.axis === 'right' ? 'y2' : 'y',\n borderColor: cor,\n borderWidth: 2,\n // Liga a curva (Béziers) do Chart.js; os controles viram os da senoide (plugin senoide).\n cubicInterpolationMode: 'monotone' as const,\n // Área até o zero, em degradê da cor da série: 10% em cima e 2% embaixo.\n fill: 'origin',\n backgroundColor: ({ chart }: ScriptableContext<'line'>) => {\n const area = chart.chartArea;\n if (!area) return comAlfa(cor, 0.1);\n const degrade = chart.ctx.createLinearGradient(0, area.top, 0, area.bottom);\n degrade.addColorStop(0, comAlfa(cor, 0.1));\n degrade.addColorStop(1, comAlfa(cor, 0.02));\n return degrade;\n },\n pointRadius: 0,\n pointHoverRadius: 4,\n pointHoverBorderWidth: 2,\n pointHoverBorderColor: tema.superficie,\n pointHoverBackgroundColor: cor,\n };\n }),\n };\n }, [tema, labels, series, type, stacked]);\n\n // O Chart.js avisa o fim de cada animação, inclusive de uma rápida (o ajuste ao tamanho) no meio da\n // principal: a marca só sai depois de 100ms sem nenhum quadro novo.\n const ultimoQuadro = useRef(0);\n const marcarAnimando = useCallback(() => {\n ultimoQuadro.current = performance.now();\n raiz.current?.setAttribute('data-cr-animando', '');\n }, []);\n const desmarcarAnimando = useCallback(() => {\n const tentar = () => {\n if (performance.now() - ultimoQuadro.current < 100) setTimeout(tentar, 50);\n else raiz.current?.removeAttribute('data-cr-animando');\n };\n setTimeout(tentar, 50);\n }, []);\n\n const options = useMemo<ChartOptions<'line' | 'bar'> | undefined>(() => {\n if (!tema) return undefined;\n const fonte = { ...tema.fonte, weight: tema.fonte.weight as never };\n const eixoY = (eixo: ChartAxis | undefined, direita: boolean) => ({\n position: direita ? ('right' as const) : ('left' as const),\n stacked,\n min: eixo?.min ?? 0,\n max: eixo?.max,\n // A grade tracejada do Figma (2px e 2px): no Chart.js 4, o tracejado fica em border.dash.\n border: { display: false, dash: [2, 2] },\n grid: direita\n ? { drawOnChartArea: false, drawTicks: false }\n : { color: tema.grade, lineWidth: 1, drawTicks: false },\n ticks: {\n color: tema.texto,\n font: fonte,\n padding: 8,\n stepSize: eixo?.stepSize,\n callback: (valor: string | number) => formatar(eixo, Number(valor)),\n },\n });\n return {\n responsive: true,\n maintainAspectRatio: false,\n // A animação do Chart.js (a do p-chart), sem ela com prefers-reduced-motion. Enquanto anima, a\n // raiz leva data-cr-animando (os testes de imagem esperam o fim).\n animation: semMovimento()\n ? false\n : { onProgress: marcarAnimando, onComplete: desmarcarAnimando },\n interaction: { mode: 'index', intersect: false },\n layout: { padding: { top: 8 } },\n scales: {\n x: {\n stacked,\n border: { display: false },\n grid: { display: false },\n // Os rótulos só somem quando não cabem (como no Figma, as 24 horas cabem em 638px).\n ticks: { color: tema.texto, font: fonte, maxRotation: 0, padding: 8, autoSkipPadding: 2 },\n },\n y: eixoY(yAxis, false),\n ...(temDireita ? { y2: eixoY(y2Axis, true) } : {}),\n },\n plugins: {\n legend: { display: false },\n tooltip: {\n backgroundColor: tema.tooltipFundo,\n titleColor: tema.tooltipTexto,\n bodyColor: tema.tooltipTexto,\n titleFont: fonte,\n bodyFont: { ...fonte, weight: 400 as never },\n padding: { x: 12, y: 8 },\n cornerRadius: 8,\n usePointStyle: true,\n boxWidth: 8,\n boxHeight: type === 'bar' ? 8 : 2,\n callbacks: {\n label: (item) => {\n const s = series[item.datasetIndex]!;\n const eixo = s.axis === 'right' ? y2Axis : yAxis;\n return `${formatar(eixo, item.parsed.y ?? 0)} ${s.label}`;\n },\n labelPointStyle: () => ({ pointStyle: type === 'bar' ? 'rect' : 'line', rotation: 0 }),\n },\n },\n },\n };\n }, [tema, yAxis, y2Axis, temDireita, series, type, stacked, marcarAnimando, desmarcarAnimando]);\n\n // A cada desenho novo (dados ou opções), a raiz fica marcada até o fim da animação.\n useLayoutEffect(() => {\n if (data && options && !semMovimento()) raiz.current?.setAttribute('data-cr-animando', '');\n }, [data, options]);\n\n const card = Boolean(title || actions);\n const preencher = height === '100%';\n const comLegenda = legend ?? series.length > 1;\n const classes = ['cr-chart', card && 'cr-chart--card', preencher && 'cr-chart--fill', className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div {...props} ref={raiz} id={id} className={classes}>\n {card && (\n <div className=\"cr-chart__header\">\n <div className=\"cr-chart__title-row\">\n {title && <span className=\"cr-chart__title\">{title}</span>}\n {help && (\n <>\n <button ref={ajuda} type=\"button\" className=\"cr-chart__help\" aria-label={helpLabel}>\n <Question aria-hidden=\"true\" />\n </button>\n <Tooltip target={ajuda} content={help} type=\"rich\" />\n </>\n )}\n </div>\n {actions && <div className=\"cr-chart__actions\">{actions}</div>}\n </div>\n )}\n <div className=\"cr-chart__body\">\n <div className=\"cr-chart__plot\" style={preencher ? undefined : { height }}>\n {data && options && (\n <PrimeChart\n // Trocar o tipo monta um gráfico novo, sem reaproveitar o anterior.\n key={type}\n type={type}\n data={data}\n options={options}\n plugins={type === 'line' ? [senoide as Plugin, cruz(tema!.cruz) as Plugin] : []}\n width=\"100%\"\n height=\"100%\"\n pt={{\n root: { className: 'cr-chart__canvas-wrap' },\n canvas: {\n role: 'img',\n 'aria-label': title ?? series.map((s) => s.label).join(', '),\n },\n }}\n />\n )}\n </div>\n {comLegenda && (\n <ul className=\"cr-chart__legend\">\n {series.map((s, i) => (\n <li key={`${i}-${s.label}`} className=\"cr-chart__legend-item\">\n {/* A legenda repete a cor da marca: o mesmo token (cor e tom) da série. */}\n <span\n className=\"cr-chart__swatch\"\n style={{\n backgroundColor: `var(--cr-color-chart-fill-${corDe(s, i)}-${tomDe(s, type)})`,\n }}\n aria-hidden=\"true\"\n />\n {s.label}\n </li>\n ))}\n </ul>\n )}\n </div>\n {/* Os valores para o leitor de tela (o canvas é só uma imagem). */}\n <table className=\"cr-so-leitor cr-chart__table\">\n {title && <caption>{title}</caption>}\n <thead>\n <tr>\n <td />\n {series.map((s, i) => (\n <th key={`${i}-${s.label}`} scope=\"col\">\n {s.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {labels.map((rotulo, linha) => (\n <tr key={`${linha}-${rotulo}`}>\n <th scope=\"row\">{rotulo}</th>\n {series.map((s, i) => {\n const valor = s.data[linha];\n const eixo = s.axis === 'right' ? y2Axis : yAxis;\n return (\n <td key={`${i}-${s.label}`}>{valor == null ? '' : formatar(eixo, valor)}</td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n});\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n type CSSProperties,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { Checkbox as PrimeCheckbox, type CheckboxChangeEvent } from 'primereact/checkbox';\nimport { Check } from '@phosphor-icons/react';\nimport '../../comum.css';\nimport './Checkbox.css';\n\n/** Label Position no Figma: lado da caixa em relação ao rótulo. */\nexport type CheckboxPosition = 'left' | 'right';\n/** Label Type no Figma: Default (uma linha, com reticências) e Full (quebra em várias linhas). */\nexport type CheckboxLabelSize = 'default' | 'full';\n\n/** As demais props vão no <input> (aria-describedby, onBlur, data-*...); className e style, na raiz. */\nexport interface CheckboxProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n | 'onChange'\n | 'value'\n | 'checked'\n | 'defaultChecked'\n | 'defaultValue'\n | 'size'\n | 'type'\n | 'children'\n> {\n /** Texto ao lado da caixa (Label no Figma). Sem rótulo visível, vira o nome acessível. */\n label: ReactNode;\n /** Mostra o rótulo. Padrão: true. */\n showLabel?: boolean;\n /** Lado da caixa. Padrão: left. */\n position?: CheckboxPosition;\n /** Padrão: default. */\n labelSize?: CheckboxLabelSize;\n checked?: boolean;\n /** Type=Indeterminate no Figma: traço no lugar do check; o leitor de tela anuncia \"misto\". */\n indeterminate?: boolean;\n onChange?: (event: CheckboxChangeEvent) => void;\n disabled?: boolean;\n required?: boolean;\n name?: string;\n value?: unknown;\n /** Vai no <input>. */\n id?: string;\n className?: string;\n style?: CSSProperties;\n}\n\n// Base: Checkbox do PrimeReact no modo unstyled (o p-checkbox do PrimeNG da produção), com o\n// <input type=\"checkbox\"> nativo por cima da caixa. O Prime não tem o estado indeterminado: o\n// Cristal liga a propriedade nativa do input e desenha o traço no CSS. O rótulo é um <label>\n// ligado ao input. A ref entrega o <input>.\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n {\n label,\n showLabel = true,\n position = 'left',\n labelSize = 'default',\n checked = false,\n indeterminate = false,\n onChange,\n disabled,\n required,\n name,\n value,\n id,\n className,\n style,\n ...props\n },\n ref,\n) {\n const autoId = useId();\n const inputId = id ?? autoId;\n // O Cristal também precisa do <input> (para o indeterminado): a ref de callback guarda os dois.\n const inputRef = useRef<HTMLInputElement | null>(null);\n const setInputRef = useCallback(\n (input: HTMLInputElement | null) => {\n inputRef.current = input;\n if (typeof ref === 'function') ref(input);\n else if (ref) ref.current = input;\n },\n [ref],\n );\n\n // Com o indeterminado ligado, o leitor de tela anuncia \"misto\" no lugar de marcado/desmarcado.\n useEffect(() => {\n if (inputRef.current) inputRef.current.indeterminate = indeterminate && !checked;\n }, [indeterminate, checked]);\n\n const classes = [\n 'cr-checkbox',\n `cr-checkbox--${position}`,\n `cr-checkbox--label-${labelSize}`,\n indeterminate && !checked && 'cr-checkbox--indeterminate',\n disabled && 'cr-checkbox--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={classes} style={style}>\n <PrimeCheckbox\n unstyled\n inputRef={setInputRef}\n inputId={inputId}\n checked={checked}\n onChange={onChange}\n disabled={disabled}\n required={required}\n name={name}\n value={value}\n icon={<Check size={16} />}\n pt={{\n // Marcado pela prop do Cristal, não pelo atributo interno do Prime (data-p-highlight).\n root: {\n className: `cr-checkbox__control${checked ? ' cr-checkbox__control--checked' : ''}`,\n },\n input: { ...props, className: 'cr-checkbox__input' },\n box: { className: 'cr-checkbox__box' },\n icon: { className: 'cr-checkbox__icon', 'aria-hidden': true },\n }}\n />\n {/* Sem rótulo visível, o <label> continua no DOM (escondido) e dá o nome ao input. */}\n <label\n className={`cr-checkbox__label${showLabel ? '' : ' cr-checkbox__label--hidden cr-so-leitor'}`}\n htmlFor={inputId}\n >\n {label}\n </label>\n </div>\n );\n});\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { X } from '@phosphor-icons/react';\nimport { Chip as PrimeChip, type ChipRemoveEvent } from 'primereact/chip';\nimport './Chip.css';\n\n/** Type no Figma. */\nexport type ChipVariant =\n | 'default'\n | 'success'\n | 'danger'\n | 'warning'\n | 'info'\n | 'highlight'\n | 'inverse'\n | 'outline'\n | 'neutral'\n | 'on-image';\n/** Size no Figma: small = 24px, medium = 28px, large = 32px, x-large = 36px de altura. */\nexport type ChipSize = 'small' | 'medium' | 'large' | 'x-large';\n\nexport interface ChipProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Texto do chip (Label no Figma). Aceita marcação, como o rótulo e o valor do filtro da Table. */\n label: ReactNode;\n variant?: ChipVariant;\n size?: ChipSize;\n /** Ícone antes do texto (Leading Icon no Figma). Use um ícone de `@vector-business-services/cristal-ds-web/icons`. */\n leadingIcon?: ReactNode;\n /** Ícone depois do texto (Trailing Icon no Figma). Com `onRemove`, o padrão é o X do Figma. */\n trailingIcon?: ReactNode;\n disabled?: boolean;\n /**\n * Torna o ícone da direita o botão de remover do PrimeReact (clique, Enter ou Backspace).\n * Como no Prime, o chip se esconde depois; retorne `false` para controlar a remoção por fora.\n */\n onRemove?: (event: ChipRemoveEvent) => boolean | void;\n /** Nome acessível do botão de remover. */\n removeLabel?: string;\n}\n\n// Base: Chip do PrimeReact no modo unstyled; o visual vem todo do Chip.css. O Prime aceita só um\n// ícone à esquerda e, à direita, só o de remover: os ícones vão como funções, que o Prime chama\n// com as props dele (role, tabIndex e teclado do remover). Sem onRemove (ou desabilitado), o ícone\n// da direita é só visual.\nexport const Chip = forwardRef<HTMLDivElement, ChipProps>(function Chip(\n {\n label,\n variant = 'default',\n size = 'small',\n leadingIcon,\n trailingIcon,\n disabled = false,\n onRemove,\n removeLabel = 'Remover',\n className,\n ...props\n },\n ref,\n) {\n const classes = [\n 'cr-chip',\n `cr-chip--${variant}`,\n `cr-chip--${size}`,\n disabled && 'cr-chip--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const removable = Boolean(onRemove) && !disabled;\n const trailing = trailingIcon ?? (onRemove ? <X /> : null);\n\n return (\n <PrimeChip\n unstyled\n // O Prime remonta o <div> a cada render interno (troca a key), então a ref vai pelo\n // pass-through da raiz, que acompanha cada montagem. O aria-label que o Prime põe na raiz\n // sai: num <div> sem role ele é proibido (axe), e o texto já está visível no chip.\n pt={{ root: { ref, 'aria-label': undefined } }}\n className={classes}\n // O Prime tipa o label como texto, mas só o desenha dentro de um <span>.\n label={label as string}\n aria-disabled={disabled || undefined}\n icon={\n leadingIcon\n ? () => (\n <span className=\"cr-chip__icon cr-chip__icon--leading\" aria-hidden=\"true\">\n {leadingIcon}\n </span>\n )\n : undefined\n }\n removable={Boolean(trailing)}\n removeIcon={(options) => {\n if (!removable) {\n return (\n <span className=\"cr-chip__icon cr-chip__icon--trailing\" aria-hidden=\"true\">\n {trailing}\n </span>\n );\n }\n const { role, tabIndex, onClick, onKeyDown } =\n options.iconProps as HTMLAttributes<HTMLSpanElement>;\n return (\n <span\n role={role}\n tabIndex={tabIndex}\n onClick={onClick}\n onKeyDown={onKeyDown}\n className=\"cr-chip__icon cr-chip__icon--trailing cr-chip__remove\"\n aria-label={removeLabel}\n >\n {trailing}\n </span>\n );\n }}\n onRemove={onRemove ? (event) => onRemove(event) !== false : undefined}\n {...props}\n />\n );\n});\n","import {\n forwardRef,\n useContext,\n useImperativeHandle,\n useRef,\n type HTMLAttributes,\n type ReactNode,\n type SyntheticEvent,\n} from 'react';\nimport { PrimeReactContext, PrimeReactProvider } from 'primereact/api';\nimport {\n Menu as PrimeMenu,\n type MenuPassThroughOptions,\n type MenuPassThroughTransitionType,\n} from 'primereact/menu';\nimport type { MenuItem as PrimeMenuItem, MenuItemCommandEvent } from 'primereact/menuitem';\nimport { CircleNotch } from '@phosphor-icons/react';\nimport '../../lista.css';\nimport { transicaoDoPopup, seguirLado } from '../../popup';\nimport '../../comum.css';\nimport './Menu.css';\n\n/** Density no Figma: Normal (itens de 37px) e Compacted (29px). */\nexport type MenuDensity = 'normal' | 'compact';\n\n/** Um item da lista (.Dropdown Item no Figma). */\nexport interface MenuItem {\n label: string;\n /** Ícone à esquerda (Leading Icon no Figma). Use um ícone de `@vector-business-services/cristal-ds-web/icons`. */\n icon?: ReactNode;\n /** Estado Selected do Figma: texto e ícone em brand, fundo selected/subtlest. */\n selected?: boolean;\n disabled?: boolean;\n /** Ação do item; o menu popup fecha depois dela. */\n command?: (event: MenuItemCommandEvent) => void;\n /** Link do item; sem ele o clique não navega. */\n url?: string;\n target?: string;\n id?: string;\n className?: string;\n}\n\nexport interface MenuProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n model: MenuItem[];\n density?: MenuDensity;\n /** Abre sobre a tela, posicionado no elemento que chamou `toggle`/`show` pela ref. */\n popup?: boolean;\n /** Alinhamento do popup com o elemento que o abriu. */\n popupAlignment?: 'left' | 'right';\n /** Estado Loading do Figma: troca os itens pelo indicador de carregamento. */\n loading?: boolean;\n /** O que o leitor de tela anuncia no carregamento. */\n loadingLabel?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n onShow?: (event: SyntheticEvent) => void;\n onHide?: (event: SyntheticEvent) => void;\n id?: string;\n className?: string;\n}\n\n/** Controle do menu popup, pela ref. */\nexport interface MenuHandle {\n toggle: (event: SyntheticEvent) => void;\n show: (event: SyntheticEvent) => void;\n hide: (event: SyntheticEvent) => void;\n /** O <div> raiz do menu (só existe com o popup aberto). */\n getElement: () => HTMLDivElement | null;\n}\n\n// Itens do Cristal no formato do Prime: o ícone com a classe do Menu e o Selected numa classe (e\n// no data, para o aria-current). Também usado pelo ContextMenu.\nexport const itensDoPrime = (model: MenuItem[]): PrimeMenuItem[] =>\n model.map((item) => ({\n id: item.id,\n label: item.label,\n icon: item.icon ? (\n <span className=\"cr-menu__icon\" aria-hidden=\"true\">\n {item.icon}\n </span>\n ) : undefined,\n disabled: item.disabled,\n command: item.command,\n url: item.url,\n target: item.target,\n className: [item.selected && 'cr-menu__item--selected', item.className]\n .filter(Boolean)\n .join(' '),\n data: { selected: item.selected },\n }));\n\n// Base: Menu do PrimeReact no modo unstyled (teclado, foco, popup e fechamento do Prime,\n// espelhando o p-menu do PrimeNG da produção). No Figma é o Dropdown List, usado nos menus do\n// Menubar; o visual vem do Menu.css. A ref expõe toggle/show/hide do Prime para abrir o popup.\nexport const Menu = forwardRef<MenuHandle, MenuProps>(function Menu(\n {\n model,\n density = 'normal',\n popup = false,\n popupAlignment = 'left',\n loading = false,\n loadingLabel = 'Carregando',\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n onShow,\n onHide,\n id,\n className,\n ...props\n },\n ref,\n) {\n const primeRef = useRef<PrimeMenu>(null);\n // Quem abriu o popup: o lado (acima ou abaixo) é medido em relação a ele.\n const alvo = useRef<Element | null>(null);\n const context = useContext(PrimeReactContext);\n\n useImperativeHandle(ref, () => ({\n toggle: (event) => {\n alvo.current = event.currentTarget as Element;\n primeRef.current?.toggle(event);\n },\n show: (event) => {\n alvo.current = event.currentTarget as Element;\n primeRef.current?.show(event);\n },\n hide: (event) => primeRef.current?.hide(event),\n getElement: () => primeRef.current?.getElement() ?? null,\n }));\n\n const items: PrimeMenuItem[] = loading\n ? [\n {\n label: loadingLabel,\n disabled: true,\n template: () => (\n <div className=\"cr-menu__loading\">\n <CircleNotch className=\"cr-menu__spinner\" aria-hidden=\"true\" />\n </div>\n ),\n },\n ]\n : itensDoPrime(model);\n\n const classes = ['cr-lista cr-menu', `cr-menu--${density}`, popup && 'cr-menu--popup', className]\n .filter(Boolean)\n .join(' ');\n\n const pt: MenuPassThroughOptions = {\n // O nome acessível vai na lista (role=menu); o Prime lê `ariaLabel`, mas não o declara no tipo.\n menu: {\n className: 'cr-menu__list',\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-busy': loading || undefined,\n },\n menuitem: (options) => {\n const item = (options as { context?: { item?: PrimeMenuItem } })?.context?.item;\n return {\n className: 'cr-menu__item',\n 'aria-current': item?.data?.selected ? 'true' : undefined,\n };\n },\n content: { className: 'cr-menu__content' },\n // Animação de entrada e saída (a do Prime) e o lado do popup, medido logo depois de o Prime\n // posicionar.\n // Numa microtarefa: no onEnter o Prime ainda está religando a ref (getElement vem vazio); ela\n // roda logo depois, antes de a tela ser pintada.\n transition: transicaoDoPopup<MenuPassThroughTransitionType>(() =>\n queueMicrotask(() => seguirLado(primeRef.current?.getElement(), alvo.current)),\n ),\n action: { className: 'cr-lista__item cr-menu__action' },\n label: { className: 'cr-menu__label' },\n };\n\n const menu = (\n <PrimeMenu\n {...props}\n unstyled\n ref={primeRef}\n id={id}\n className={classes}\n model={items}\n popup={popup}\n popupAlignment={popupAlignment}\n onShow={onShow}\n onHide={onHide}\n pt={pt}\n />\n );\n\n // O Menu do Prime lê o PrimeReactContext sem checar se ele existe: sem um PrimeReactProvider\n // na aplicação, o clique fora dá erro e o popup não fecha. Se a aplicação já tiver um, vale o\n // dela.\n return context ? menu : <PrimeReactProvider>{menu}</PrimeReactProvider>;\n});\n","import {\n forwardRef,\n useImperativeHandle,\n useRef,\n type HTMLAttributes,\n type SyntheticEvent,\n} from 'react';\nimport {\n ContextMenu as PrimeContextMenu,\n type ContextMenuPassThroughOptions,\n type ContextMenuPassThroughTransitionType,\n} from 'primereact/contextmenu';\nimport { itensDoPrime, type MenuDensity, type MenuItem } from '../Menu/Menu';\nimport '../../lista.css';\nimport '../../comum.css';\nimport '../Menu/Menu.css';\nimport './ContextMenu.css';\n\n/**\n * Um item do menu de contexto: o mesmo do Menu, sem o Selected (o Context Menu do Prime não diz\n * ao item qual está selecionado, então o estado não seria anunciado).\n */\nexport type ContextMenuItem = Omit<MenuItem, 'selected'>;\n\nexport interface ContextMenuProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n model: ContextMenuItem[];\n /** Density no Figma: Normal (itens de 37px) e Compacted (29px). Padrão: normal. */\n density?: MenuDensity;\n /** Abre com o botão direito em qualquer lugar da página, sem precisar chamar `show`. */\n global?: boolean;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n onShow?: (event: SyntheticEvent) => void;\n onHide?: (event: SyntheticEvent) => void;\n id?: string;\n className?: string;\n}\n\n/** Controle do menu de contexto, pela ref. */\nexport interface ContextMenuHandle {\n /** Abre no ponto do evento (o do botão direito, normalmente o onContextMenu). */\n show: (event: SyntheticEvent) => void;\n hide: (event: SyntheticEvent) => void;\n /** O <div> raiz do menu (só existe com ele aberto). */\n getElement: () => HTMLDivElement | null;\n}\n\n// Base: ContextMenu do PrimeReact no modo unstyled (o p-contextMenu do PrimeNG da produção): abre\n// onde o mouse clicou, com o teclado, o foco e o fechamento do Prime. O visual é o da Dropdown\n// List do Figma (as classes do Menu), com 260px, como no menu de contexto do cabeçalho da Table.\n// A animação é a do tema do Prime para o Context Menu: fade de 250ms na entrada e nenhuma na\n// saída. A ref expõe show/hide do Prime.\nexport const ContextMenu = forwardRef<ContextMenuHandle, ContextMenuProps>(function ContextMenu(\n {\n model,\n density = 'normal',\n global,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n onShow,\n onHide,\n id,\n className,\n ...props\n },\n ref,\n) {\n const primeRef = useRef<PrimeContextMenu>(null);\n useImperativeHandle(ref, () => ({\n show: (event) => primeRef.current?.show(event),\n hide: (event) => primeRef.current?.hide(event),\n getElement: () => primeRef.current?.getElement() ?? null,\n }));\n\n const classes = ['cr-lista cr-menu cr-context-menu', `cr-menu--${density}`, className]\n .filter(Boolean)\n .join(' ');\n\n const pt: ContextMenuPassThroughOptions = {\n root: { ...props, className: classes },\n // O nome vai na lista (o Prime dá a ela role=menubar, vertical).\n menu: {\n className: 'cr-menu__list',\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n },\n // O Prime põe aria-level nos itens, que role=menuitem não aceita (axe).\n menuitem: { className: 'cr-menu__item', 'aria-level': undefined },\n action: { className: 'cr-lista__item cr-menu__action' },\n label: { className: 'cr-menu__label' },\n // As classes da animação do Prime (ContextMenu.css). O tipo do Prime exige o addEndListener\n // do react-transition-group, que aqui não se usa.\n transition: {\n classNames: { enter: 'cr-context-menu--entrar', enterActive: 'cr-context-menu--entrando' },\n } as unknown as ContextMenuPassThroughTransitionType,\n // O Prime aplica o pt do content, mas não o declara no tipo.\n ...({ content: { className: 'cr-menu__content' } } as object),\n };\n\n return (\n <PrimeContextMenu\n unstyled\n ref={primeRef}\n id={id}\n model={itensDoPrime(model)}\n global={global}\n onShow={onShow}\n onHide={onHide}\n pt={pt}\n />\n );\n});\n","import { forwardRef, useId, type InputHTMLAttributes, type ReactNode, type Ref } from 'react';\nimport { InputText as PrimeInputText } from 'primereact/inputtext';\nimport { Info, WarningCircle } from '@phosphor-icons/react';\nimport { juntarIds } from '../../aria';\nimport './InputText.css';\n\n/** Type no Figma: Outline (com borda) e Filled (com fundo). */\nexport type InputTextVariant = 'outline' | 'filled';\n/** Size no Figma: 32, 36, 42 e 48px de altura do campo. */\nexport type InputTextSize = 'xsmall' | 'small' | 'medium' | 'large';\n\nexport interface InputTextProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'value' | 'children'\n> {\n variant?: InputTextVariant;\n size?: InputTextSize;\n /** Rótulo acima do campo (Label no Figma). Sem rótulo, passe `aria-label`. */\n label?: string;\n /** Valor do campo (controlado). */\n value?: string;\n /** Ícone antes do texto (Leading Icon no Figma). Use um ícone de `@vector-business-services/cristal-ds-web/icons`. */\n leadingIcon?: ReactNode;\n /** Ícone ou botão depois do texto (Trailing Icon no Figma), por exemplo mostrar a senha. */\n trailingIcon?: ReactNode;\n /** Dica abaixo do campo (Hint Info no Figma). */\n hint?: string;\n /** Mensagem de erro: deixa o campo no estado Error e mostra a dica de erro no lugar da dica. */\n error?: string;\n}\n\n// Base: InputText do PrimeReact no modo unstyled (o <input>, com o comportamento do Prime,\n// espelhando o pInputText do PrimeNG da produção). O rótulo, a caixa do campo, os ícones e a dica\n// são do Cristal, com as classes .cr-field reaproveitadas pelos outros campos (AutoComplete,\n// MultiSelect).\nexport const InputText = forwardRef<HTMLInputElement, InputTextProps>(function InputText(\n {\n variant = 'outline',\n size = 'large',\n label,\n leadingIcon,\n trailingIcon,\n hint,\n error,\n id,\n required,\n disabled,\n className,\n ...props\n },\n ref,\n) {\n const autoId = useId();\n const inputId = id ?? autoId;\n const hintId = `${inputId}-hint`;\n const supportText = error ?? hint;\n\n const classes = [\n 'cr-field',\n `cr-field--${variant}`,\n `cr-field--${size}`,\n error && 'cr-field--error',\n disabled && 'cr-field--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={classes}>\n {label && (\n <label className=\"cr-field__label\" htmlFor={inputId}>\n {label}\n {required && (\n <span className=\"cr-field__required\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n <div className=\"cr-field__control\">\n {leadingIcon && (\n <span className=\"cr-field__icon\" aria-hidden=\"true\">\n {leadingIcon}\n </span>\n )}\n <PrimeInputText\n unstyled\n // O PrimeReact tipa a ref como a instância da classe, mas entrega o <input> nela.\n ref={ref as unknown as Ref<HTMLInputElement>}\n id={inputId}\n className=\"cr-field__input\"\n required={required}\n disabled={disabled}\n invalid={Boolean(error)}\n aria-invalid={error ? true : undefined}\n {...props}\n aria-describedby={juntarIds(supportText && hintId, props['aria-describedby'])}\n />\n {trailingIcon && <span className=\"cr-field__icon\">{trailingIcon}</span>}\n </div>\n {supportText && (\n <p id={hintId} className={`cr-field__hint${error ? ' cr-field__hint--error' : ''}`}>\n <span className=\"cr-field__hint-icon\" aria-hidden=\"true\">\n {error ? <WarningCircle /> : <Info />}\n </span>\n {supportText}\n </p>\n )}\n </div>\n );\n});\n\n// Nomes antigos (do Figma), mantidos até a próxima versão: o nome do Cristal é o do PrimeNG 19.\n/** @deprecated Use `InputText` (o nome do PrimeNG 19). */\nexport const Input = InputText;\n/** @deprecated Use `InputTextProps`. */\nexport type InputProps = InputTextProps;\n/** @deprecated Use `InputTextSize`. */\nexport type InputSize = InputTextSize;\n/** @deprecated Use `InputTextVariant`. */\nexport type InputVariant = InputTextVariant;\n","import {\n forwardRef,\n useId,\n type CSSProperties,\n type InputHTMLAttributes,\n type ReactNode,\n type Ref,\n} from 'react';\nimport {\n RadioButton as PrimeRadioButton,\n type RadioButtonChangeEvent,\n} from 'primereact/radiobutton';\nimport '../../comum.css';\nimport './RadioButton.css';\n\n/** Label Size no Figma: Default (uma linha, com reticências) e Full (quebra em várias linhas). */\nexport type RadioButtonLabelSize = 'default' | 'full';\n\n/** As demais props vão no <input> (aria-describedby, onBlur, data-*...); className e style, na raiz. */\nexport interface RadioButtonProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n | 'onChange'\n | 'value'\n | 'checked'\n | 'defaultChecked'\n | 'defaultValue'\n | 'size'\n | 'type'\n | 'children'\n> {\n /** Texto ao lado do controle (Label no Figma). Sem rótulo visível, vira o nome acessível. */\n label: ReactNode;\n /** Mostra o rótulo. Padrão: true. */\n showLabel?: boolean;\n /** Padrão: default. */\n labelSize?: RadioButtonLabelSize;\n checked?: boolean;\n /** Valor da opção, devolvido no `onChange`. */\n value?: unknown;\n /** Nome do grupo: radios com o mesmo `name` se excluem e navegam pelas setas. */\n name?: string;\n onChange?: (event: RadioButtonChangeEvent) => void;\n disabled?: boolean;\n required?: boolean;\n /** Vai no <input>. */\n id?: string;\n className?: string;\n style?: CSSProperties;\n}\n\n// Base: RadioButton do PrimeReact no modo unstyled (o p-radioButton do PrimeNG da produção), com\n// o <input type=\"radio\"> nativo por cima do círculo: o grupo pelo `name` e as setas do teclado são\n// do navegador. O rótulo é um <label> ligado ao input. A ref entrega o <input>.\nexport const RadioButton = forwardRef<HTMLInputElement, RadioButtonProps>(function RadioButton(\n {\n label,\n showLabel = true,\n labelSize = 'default',\n checked = false,\n value,\n name,\n onChange,\n disabled,\n required,\n id,\n className,\n style,\n ...props\n },\n ref,\n) {\n const autoId = useId();\n const inputId = id ?? autoId;\n\n const classes = [\n 'cr-radio',\n `cr-radio--label-${labelSize}`,\n disabled && 'cr-radio--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={classes} style={style}>\n <PrimeRadioButton\n unstyled\n inputRef={ref as Ref<HTMLInputElement>}\n inputId={inputId}\n checked={checked}\n value={value}\n name={name}\n onChange={onChange}\n disabled={disabled}\n required={required}\n pt={{\n // Marcado pela prop do Cristal, não pelo atributo interno do Prime (data-p-checked).\n root: { className: `cr-radio__control${checked ? ' cr-radio__control--checked' : ''}` },\n input: { ...props, className: 'cr-radio__input' },\n box: { className: 'cr-radio__box' },\n icon: { className: 'cr-radio__icon' },\n }}\n />\n {/* Sem rótulo visível, o <label> continua no DOM (escondido) e dá o nome ao input. */}\n <label\n className={`cr-radio__label${showLabel ? '' : ' cr-radio__label--hidden cr-so-leitor'}`}\n htmlFor={inputId}\n >\n {label}\n </label>\n </div>\n );\n});\n\n// Nomes antigos (do Figma), mantidos até a próxima versão: o nome do Cristal é o do PrimeNG 19.\n/** @deprecated Use `RadioButton` (o nome do PrimeNG 19). */\nexport const Radio = RadioButton;\n/** @deprecated Use `RadioButtonLabelSize`. */\nexport type RadioLabelSize = RadioButtonLabelSize;\n/** @deprecated Use `RadioButtonProps`. */\nexport type RadioProps = RadioButtonProps;\n","/** Um período: [início, fim], com as duas datas no mesmo dia quando é um dia só. */\nexport type DateRange = [Date, Date];\n\n/** Item da lista de períodos do Data Picker (.Period no Figma). */\nexport interface DateRangePeriod {\n /** Texto do item e do botão (\"Este mês\"). */\n label: string;\n /** O período, a partir do dia de hoje. */\n range: (hoje: Date) => DateRange;\n}\n\nconst dia = (ano: number, mes: number, numero: number) => new Date(ano, mes, numero);\nconst semHora = (data: Date) => dia(data.getFullYear(), data.getMonth(), data.getDate());\nconst menos = (data: Date, dias: number) =>\n dia(data.getFullYear(), data.getMonth(), data.getDate() - dias);\n\n/**\n * Os períodos do Figma (DatePicker: .Period, de 6 a 9 itens). O `DateRangeButton` mostra os seis\n * primeiros; os outros entram pela prop `periods`.\n */\nexport const DATE_PERIODS = {\n today: { label: 'Hoje', range: (hoje) => [semHora(hoje), semHora(hoje)] },\n yesterday: { label: 'Ontem', range: (hoje) => [menos(hoje, 1), menos(hoje, 1)] },\n last7Days: { label: 'Últimos 7 dias', range: (hoje) => [menos(hoje, 6), semHora(hoje)] },\n last14Days: { label: 'Últimos 14 dias', range: (hoje) => [menos(hoje, 13), semHora(hoje)] },\n last30Days: { label: 'Últimos 30 dias', range: (hoje) => [menos(hoje, 29), semHora(hoje)] },\n thisMonth: {\n label: 'Este mês',\n range: (hoje) => [dia(hoje.getFullYear(), hoje.getMonth(), 1), semHora(hoje)],\n },\n // A semana começa no domingo, como no calendário.\n lastWeek: {\n label: 'Semana passada',\n range: (hoje) => {\n const domingo = menos(hoje, hoje.getDay() + 7);\n return [domingo, menos(domingo, -6)];\n },\n },\n lastMonth: {\n label: 'Mês passado',\n range: (hoje) => [\n dia(hoje.getFullYear(), hoje.getMonth() - 1, 1),\n dia(hoje.getFullYear(), hoje.getMonth(), 0),\n ],\n },\n thisYear: {\n label: 'Este ano',\n range: (hoje) => [dia(hoje.getFullYear(), 0, 1), semHora(hoje)],\n },\n} satisfies Record<string, DateRangePeriod>;\n\n/** Os seis períodos do Figma (Qtd. List=6). */\nexport const PERIODOS_PADRAO: DateRangePeriod[] = [\n DATE_PERIODS.today,\n DATE_PERIODS.yesterday,\n DATE_PERIODS.last7Days,\n DATE_PERIODS.last14Days,\n DATE_PERIODS.last30Days,\n DATE_PERIODS.thisMonth,\n];\n\nconst MESES = ['jan', 'fev', 'mar', 'abr', 'mai', 'jun', 'jul', 'ago', 'set', 'out', 'nov', 'dez'];\n\n/** \"1 de out de 2024\", como no Data Field do Figma. */\nexport const dataPorExtenso = (data: Date) =>\n `${data.getDate()} de ${MESES[data.getMonth()]} de ${data.getFullYear()}`;\n\n/** \"1 de out de 2024 a 16 de out de 2024\". */\nexport const periodoPorExtenso = ([inicio, fim]: DateRange) =>\n `${dataPorExtenso(inicio)} a ${dataPorExtenso(fim)}`;\n\nexport const mesmoDia = (a: Date | null | undefined, b: Date | null | undefined) =>\n !!a && !!b && semHora(a).getTime() === semHora(b).getTime();\n\n/** O período da lista que tem exatamente estas datas (para marcar o item ao abrir). */\nexport const periodoDe = (periods: DateRangePeriod[], range: DateRange | null, hoje: Date) =>\n range\n ? periods.find((period) => {\n const [inicio, fim] = period.range(hoje);\n return mesmoDia(inicio, range[0]) && mesmoDia(fim, range[1]);\n })\n : undefined;\n\n/** \"05/09/2024\" a partir da data, e de volta (aceita \"05 / 09 / 2024\"). */\nexport const dataCurta = (data: Date | null | undefined) =>\n data\n ? `${String(data.getDate()).padStart(2, '0')}/${String(data.getMonth() + 1).padStart(2, '0')}/${data.getFullYear()}`\n : '';\nexport function lerData(texto: string): Date | null {\n const partes = /^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/.exec(texto.replace(/\\s/g, ''));\n if (!partes) return null;\n const [d, m, a] = [Number(partes[1]), Number(partes[2]), Number(partes[3])];\n const data = dia(a, m - 1, d);\n return data.getMonth() === m - 1 && data.getDate() === d ? data : null;\n}\n","import { useId, useState } from 'react';\nimport { Button } from '../Button';\nimport { InputText } from '../InputText';\nimport { RadioButton } from '../RadioButton';\nimport { dataCurta, lerData, mesmoDia, type DateRangePeriod } from './periodos';\nimport '../../comum.css';\nimport './DataPicker.css';\n\n// As partes do Data Picker do Figma em volta do calendário, comuns ao DatePicker e ao\n// DateRangeButton: a lista de períodos (.Period), os campos de data (Date Range) e o rodapé\n// (.Footer Data Picker).\n\nexport type Rascunho = [Date | null, Date | null];\n\n/** .Period: um Radio por período; o item inteiro recebe o clique. */\nexport function ListaDePeriodos({\n periods,\n periodo,\n onEscolher,\n}: {\n periods: DateRangePeriod[];\n periodo: DateRangePeriod | null;\n onEscolher: (periodo: DateRangePeriod) => void;\n}) {\n const grupo = useId();\n return (\n <div\n className=\"cr-data-picker__periods cr-rolagem-fina\"\n role=\"radiogroup\"\n aria-label=\"Períodos\"\n >\n {periods.map((item) => (\n <RadioButton\n key={item.label}\n className=\"cr-data-picker__period\"\n name={grupo}\n label={item.label}\n value={item.label}\n checked={periodo === item}\n onChange={() => onEscolher(item)}\n />\n ))}\n </div>\n );\n}\n\nconst mesmoRascunho = (a: Rascunho, b: Rascunho) =>\n (a[0] === b[0] || mesmoDia(a[0], b[0])) && (a[1] === b[1] || mesmoDia(a[1], b[1]));\n\n/**\n * Date Range: os campos da data inicial e final (dd/mm/aaaa), com o \"-\" no meio. O texto segue o\n * período que chega de fora (lista ou calendário); a data digitada vale quando fica completa.\n */\nexport function CamposDoPeriodo({\n value,\n onChange,\n}: {\n value: Rascunho;\n onChange: (value: Rascunho) => void;\n}) {\n const [textos, setTextos] = useState<[string, string]>([\n dataCurta(value[0]),\n dataCurta(value[1]),\n ]);\n // O período mudou por fora: os campos mostram o novo (ajuste no render, sem efeito).\n const [base, setBase] = useState(value);\n if (!mesmoRascunho(base, value)) {\n setBase(value);\n setTextos([dataCurta(value[0]), dataCurta(value[1])]);\n }\n\n const digitar = (indice: 0 | 1, texto: string) => {\n const novosTextos: [string, string] = [...textos];\n novosTextos[indice] = texto;\n setTextos(novosTextos);\n const data = lerData(texto);\n if (!data) return;\n const novo: Rascunho = [...value];\n novo[indice] = data;\n // Fim antes do início: o outro lado fica em aberto.\n if (novo[0] && novo[1] && novo[0] > novo[1]) novo[indice === 0 ? 1 : 0] = null;\n setBase(novo);\n onChange(novo);\n };\n\n return (\n <div className=\"cr-data-picker__inputs\">\n <InputText\n size=\"medium\"\n aria-label=\"Data inicial\"\n placeholder=\"dd / mm / aaaa\"\n value={textos[0]}\n onChange={(event) => digitar(0, event.target.value)}\n />\n <span className=\"cr-data-picker__dash\" aria-hidden=\"true\">\n -\n </span>\n <InputText\n size=\"medium\"\n aria-label=\"Data final\"\n placeholder=\"dd / mm / aaaa\"\n value={textos[1]}\n onChange={(event) => digitar(1, event.target.value)}\n />\n </div>\n );\n}\n\n/** .Footer Data Picker: Fechar (tertiary) à esquerda e Selecionar (primary) à direita. */\nexport function RodapeDoPeriodo({\n podeSelecionar,\n onFechar,\n onSelecionar,\n}: {\n podeSelecionar: boolean;\n onFechar: () => void;\n onSelecionar: () => void;\n}) {\n return (\n <div className=\"cr-data-picker__footer\">\n <Button variant=\"tertiary\" size=\"medium\" onClick={onFechar}>\n Fechar\n </Button>\n <Button size=\"medium\" disabled={!podeSelecionar} onClick={onSelecionar}>\n Selecionar\n </Button>\n </div>\n );\n}\n","import {\n forwardRef,\n useId,\n useImperativeHandle,\n useRef,\n useState,\n type KeyboardEvent,\n type ReactElement,\n type Ref,\n} from 'react';\nimport {\n Calendar as PrimeCalendar,\n type CalendarPassThroughTransitionType,\n type CalendarProps as PrimeCalendarProps,\n type CalendarSelectionMode,\n} from 'primereact/calendar';\nimport { CalendarDot, Info, WarningCircle } from '@phosphor-icons/react';\nimport { LOCALE, ptDoPainel, setas } from '../Calendar/calendario';\nimport {\n CamposDoPeriodo,\n ListaDePeriodos,\n RodapeDoPeriodo,\n type Rascunho,\n} from '../Calendar/dataPicker';\nimport { periodoDe, type DateRange, type DateRangePeriod } from '../Calendar/periodos';\nimport type { FormEvent } from 'primereact/ts-helpers';\nimport type { InputTextSize, InputTextVariant } from '../InputText';\nimport { painelDoCampo, seguirLado, transicaoDoPopup } from '../../popup';\nimport '../InputText/InputText.css';\nimport '../IconButton/IconButton.css';\nimport '../Calendar/Calendar.css';\nimport '../../comum.css';\nimport './DatePicker.css';\n\nexport type DatePickerVariant = InputTextVariant;\nexport type DatePickerSize = InputTextSize;\n\n/**\n * Props do Calendar do PrimeReact (`selectionMode` single, range ou multiple, `numberOfMonths`,\n * `view`, `dateFormat`, `minDate`, `maxDate`, `disabledDates`, `showTime`...), mais o campo do InputText\n * do Cristal. O visual (pt e unstyled), o ícone e as setas são do Cristal.\n */\nexport interface DatePickerProps<TMode extends CalendarSelectionMode = 'single'> extends Omit<\n PrimeCalendarProps<TMode>,\n | 'pt'\n | 'ptOptions'\n | 'unstyled'\n | 'inline'\n | 'prevIcon'\n | 'nextIcon'\n | 'showIcon'\n | 'icon'\n | 'iconPos'\n | 'invalid'\n | 'variant'\n | 'inputClassName'\n | 'panelClassName'\n> {\n /** Type no Figma (Input Text): Outline (com borda) e Filled (com fundo). */\n variant?: DatePickerVariant;\n /** Size no Figma (Input Text): 32, 36, 42 e 48px de altura do campo. */\n size?: DatePickerSize;\n /** Rótulo acima do campo (Label no Figma). Sem rótulo, passe `aria-label`. */\n label?: string;\n /** Dica abaixo do campo (Hint no Figma). */\n hint?: string;\n /** Mensagem de erro: deixa o campo no estado Error e mostra a dica de erro no lugar da dica. */\n error?: string;\n /** Dias de folga (Day Off no Figma): aparecem riscados. Para não deixar escolher, use `disabledDates`. */\n offDays?: Date[];\n /**\n * Lista de períodos à esquerda do calendário, com os campos de data inicial e final em cima (o\n * Data Picker do Figma). Só com `selectionMode=\"range\"`; os do Figma estão em `DATE_PERIODS`.\n * Padrão: sem lista.\n */\n periods?: DateRangePeriod[];\n /**\n * Rodapé com Fechar e Selecionar (Data Picker do Figma): a escolha só vale no Selecionar; o\n * Fechar, o Esc e o clique fora descartam. Padrão: false.\n */\n footer?: boolean;\n /** O dia de hoje para os períodos (Hoje, Este mês...). Padrão: a data atual. */\n today?: Date;\n}\n\n/** A ref é a do Calendar do Prime: `show()`, `hide()`, `getInput()`, `getElement()`... */\nexport type DatePickerHandle = PrimeCalendar;\n\n// Base: Calendar do PrimeReact no modo unstyled (o p-datepicker do PrimeNG 19 da produção): o campo,\n// o popup, a digitação da data, o teclado e o ARIA são do Prime. O campo é o Input Text do Cristal\n// com o ícone de calendário no fim (o botão do Prime, que também abre o calendário); como no\n// AutoComplete, o próprio <input> é a caixa do campo, para o Prime alinhar o painel pela borda dele.\n// O painel é o mesmo do Calendar do Cristal (.Calendar do Figma), na caixa do Data Picker.\nfunction DatePickerBase<TMode extends CalendarSelectionMode = 'single'>(\n {\n variant = 'outline',\n size = 'large',\n label,\n hint,\n error,\n offDays,\n locale = LOCALE,\n placeholder = 'dd/mm/aaaa',\n inputId,\n required,\n disabled,\n className,\n style,\n onShow,\n onHide,\n periods = [],\n footer = false,\n today,\n value,\n onChange,\n footerTemplate,\n ...props\n }: DatePickerProps<TMode>,\n ref: Ref<DatePickerHandle>,\n) {\n const autoId = useId();\n const id = inputId ?? autoId;\n const hintId = `${id}-hint`;\n const supportText = error ?? hint;\n // Se o painel abriu pela seta para baixo no campo (o Prime leva o foco ao calendário).\n const pelaSeta = useRef(false);\n // Se o dia foi escolhido pelo teclado (Enter ou espaço no painel).\n const peloTeclado = useRef(false);\n const calendario = useRef<PrimeCalendar<TMode>>(null);\n useImperativeHandle(ref, () => calendario.current as unknown as DatePickerHandle, []);\n\n // Data Picker completo (lista de períodos ou rodapé): o Cristal controla a abertura do painel\n // (visible e onVisibleChange do Prime) e, com o rodapé, guarda a escolha num rascunho até o\n // Selecionar.\n const comPeriodos = props.selectionMode === 'range' && periods.length > 0;\n const dataPicker = footer || comPeriodos;\n const [aberto, setAberto] = useState(false);\n const [rascunho, setRascunho] = useState<unknown>(null);\n const [periodo, setPeriodo] = useState<DateRangePeriod | null>(null);\n // Se o painel fechou por um botão dele (o foco volta ao campo).\n const devolverFoco = useRef(false);\n // Enquanto o foco volta ao campo, o pedido de abertura que o foco faz é ignorado.\n const ignorarAbertura = useRef(false);\n const valorNaTela = footer && aberto ? rascunho : value;\n\n const emitir = (novo: unknown) =>\n onChange?.({\n value: novo,\n stopPropagation: () => {},\n preventDefault: () => {},\n target: { name: props.name, id, value: novo },\n } as unknown as FormEvent<never>);\n\n const fechar = (pelosBotoes: boolean) => {\n devolverFoco.current = pelosBotoes;\n setAberto(false);\n };\n\n // Muda a escolha: com o rodapé, só o rascunho; sem ele, já vale.\n const mudar = (novo: unknown, novoPeriodo: DateRangePeriod | null) => {\n setPeriodo(novoPeriodo);\n if (footer) setRascunho(novo);\n else emitir(novo);\n };\n\n const classes = [\n 'cr-field',\n 'cr-datepicker',\n `cr-field--${variant}`,\n `cr-field--${size}`,\n error && 'cr-field--error',\n disabled && 'cr-field--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={classes} style={style}>\n {label && (\n <label className=\"cr-field__label\" htmlFor={id}>\n {label}\n {required && (\n <span className=\"cr-field__required\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n <PrimeCalendar\n {...setas}\n locale={locale}\n placeholder={placeholder}\n {...(props as PrimeCalendarProps<TMode>)}\n value={valorNaTela as PrimeCalendarProps<TMode>['value']}\n onChange={\n footer\n ? (event) => mudar(event.value, null)\n : comPeriodos\n ? (event) => {\n setPeriodo(null);\n onChange?.(event);\n }\n : onChange\n }\n {...(dataPicker && {\n visible: aberto,\n onVisibleChange: (event) => {\n // O Prime 10.9.9 avisa visible: true também ao fechar pelo clique fora, pelo Esc ou pelo\n // Tab (só a escolha do dia avisa false). O fechamento é o aviso que traz o callback.\n if (!event.callback) {\n if (ignorarAbertura.current || aberto) return;\n const hoje = today ?? new Date();\n setRascunho(value);\n setPeriodo(periodoDe(periods, (value as DateRange | null) ?? null, hoje) ?? null);\n setAberto(true);\n return;\n }\n // Com o rodapé, escolher o dia não fecha o painel.\n if (footer && event.type === 'dateselect') return;\n fechar(false);\n event.callback?.();\n },\n footerTemplate: () => (\n <>\n {comPeriodos && (\n <ListaDePeriodos\n periods={periods}\n periodo={periodo}\n onEscolher={(item) => {\n mudar(item.range(today ?? new Date()), item);\n if (!footer) fechar(true);\n }}\n />\n )}\n {props.selectionMode === 'range' && (\n <CamposDoPeriodo\n value={((valorNaTela as Rascunho | null) ?? [null, null]) as Rascunho}\n onChange={(novo) => mudar(novo, null)}\n />\n )}\n {footer && (\n <RodapeDoPeriodo\n podeSelecionar={\n props.selectionMode === 'range'\n ? Boolean((rascunho as Rascunho | null)?.[0] && (rascunho as Rascunho)[1])\n : rascunho != null\n }\n onFechar={() => fechar(true)}\n onSelecionar={() => {\n emitir(rascunho);\n fechar(true);\n }}\n />\n )}\n </>\n ),\n })}\n {...(!dataPicker && { footerTemplate })}\n ref={calendario}\n unstyled\n inputId={id}\n required={required}\n disabled={disabled}\n showIcon\n // O CalendarDot da Cristal - Support Library.\n icon={<CalendarDot aria-hidden=\"true\" />}\n // Ao abrir, o Prime 10.9.9 leva o foco a um dia do painel. Pelo foco ou clique no campo, ele\n // volta ao campo, como no p-datepicker do PrimeNG, para digitar a data; pela seta para\n // baixo, fica no calendário.\n onShow={() => {\n if (!pelaSeta.current) document.getElementById(id)?.focus();\n pelaSeta.current = false;\n onShow?.();\n }}\n // Escolhido o dia pelo teclado (ou fechado pelos botões do Data Picker), o Prime fecha o\n // painel sem devolver o foco ao campo (só o Esc devolve): o foco fica no painel que sai e cai\n // no <body>. Aqui ele volta ao campo; o foco no campo reabriria o painel, então ele fecha no\n // mesmo render (ou, com a abertura controlada pelo Cristal, o pedido é ignorado).\n onHide={() => {\n const atual = calendario.current;\n const ativo = document.activeElement;\n const semFoco = ativo === document.body || atual?.getOverlay()?.contains(ativo);\n if ((peloTeclado.current || devolverFoco.current) && semFoco && atual) {\n if (dataPicker) {\n ignorarAbertura.current = true;\n atual.focus();\n ignorarAbertura.current = false;\n } else {\n atual.focus();\n atual.hide();\n }\n }\n peloTeclado.current = false;\n pelaSeta.current = false;\n devolverFoco.current = false;\n onHide?.();\n }}\n pt={{\n root: { className: 'cr-datepicker__root' },\n input: {\n root: {\n className: 'cr-field__control cr-datepicker__input',\n 'aria-describedby': supportText ? hintId : undefined,\n 'aria-invalid': error ? true : undefined,\n onKeyDown: (event: KeyboardEvent<HTMLInputElement>) => {\n // Só conta a seta que abre o painel (com ele aberto, ela só leva ao calendário).\n if (event.code === 'ArrowDown' && !calendario.current?.getOverlay()) {\n pelaSeta.current = true;\n }\n // Com a abertura controlada pelo Cristal, o Prime não vê o painel aberto e a seta não\n // leva ao calendário: o Cristal leva o foco ao dia escolhido (ou ao primeiro).\n const painel = calendario.current?.getOverlay();\n if (dataPicker && event.code === 'ArrowDown' && painel) {\n const dia =\n painel.querySelector<HTMLElement>('.cr-calendar__date--selected') ??\n painel.querySelector<HTMLElement>(\n '.cr-calendar__date:not(.cr-calendar__date--disabled)',\n );\n if (dia) {\n event.preventDefault();\n dia.tabIndex = 0;\n dia.focus();\n }\n }\n },\n },\n },\n dropdownButton: { root: { className: 'cr-datepicker__button' } },\n panel: {\n className: `cr-calendar cr-datepicker__panel${dataPicker ? ' cr-datepicker__panel--data-picker' : ''}`,\n onKeyDown: (event: KeyboardEvent<HTMLDivElement>) => {\n if (['Enter', 'NumpadEnter', 'Space'].includes(event.code))\n peloTeclado.current = true;\n // O Prime só fecha pelo Esc no campo e nos dias: no Data Picker, também na lista de\n // períodos, nos campos de data e no rodapé.\n if (dataPicker && event.code === 'Escape' && aberto) fechar(true);\n },\n },\n // Animação de entrada e saída (a do Prime) e o lado do painel, medido logo depois de o\n // Prime posicionar.\n transition: transicaoDoPopup<CalendarPassThroughTransitionType>(() => {\n const campo = document.getElementById(id);\n seguirLado(painelDoCampo(campo, '.cr-datepicker__panel'), campo);\n }),\n ...ptDoPainel(offDays),\n // As partes do Data Picker entram no rodapé do Prime, que some no layout: cada uma ocupa o\n // seu lugar na grade do painel (DatePicker.css). O Prime aplica o pt do footer, mas não o\n // declara no tipo.\n ...({ footer: { className: 'cr-datepicker__extras' } } as object),\n }}\n />\n {supportText && (\n <p id={hintId} className={`cr-field__hint${error ? ' cr-field__hint--error' : ''}`}>\n <span className=\"cr-field__hint-icon\" aria-hidden=\"true\">\n {error ? <WarningCircle /> : <Info />}\n </span>\n {supportText}\n </p>\n )}\n </div>\n );\n}\n\n/** DatePicker do Figma \"Cristal - Core Components | Web\": o campo com o calendário em popup. */\nexport const DatePicker = forwardRef(DatePickerBase) as <\n TMode extends CalendarSelectionMode = 'single',\n>(\n props: DatePickerProps<TMode> & { ref?: Ref<DatePickerHandle> },\n) => ReactElement;\n","import { useState } from 'react';\nimport { Calendar } from '../../core/Calendar';\nimport {\n CamposDoPeriodo,\n ListaDePeriodos,\n RodapeDoPeriodo,\n type Rascunho,\n} from '../../core/Calendar/dataPicker';\nimport { periodoDe, type DateRange, type DateRangePeriod } from '../../core/Calendar/periodos';\n\nexport interface PainelDePeriodoProps {\n value: DateRange | null;\n periods: DateRangePeriod[];\n footer: boolean;\n today: Date;\n numberOfMonths: number;\n minDate?: Date;\n maxDate?: Date;\n disabledDates?: Date[];\n offDays?: Date[];\n /** O período escolhido (no Selecionar, ou direto sem o rodapé). */\n onSelect: (range: DateRange, period: DateRangePeriod | null) => void;\n /** Fechar sem escolher. */\n onClose: () => void;\n}\n\n// O mês da esquerda: com dois ou mais meses, o anterior ao do fim do período (o fim fica à\n// direita, como nos períodos \"últimos dias\"); com um, o do início.\nfunction mesDaTela(range: Rascunho, meses: number, hoje: Date) {\n const base = (meses > 1 ? range[1] : range[0]) ?? range[0] ?? hoje;\n return new Date(base.getFullYear(), base.getMonth() - (meses > 1 ? 1 : 0), 1);\n}\n\n/**\n * O conteúdo do Data Picker do Figma: a lista de períodos, os campos de data, o Calendar do Cristal\n * em período e o rodapé. A escolha fica num rascunho até o Selecionar; o Fechar descarta.\n */\nexport function PainelDePeriodo({\n value,\n periods,\n footer,\n today,\n numberOfMonths,\n minDate,\n maxDate,\n disabledDates,\n offDays,\n onSelect,\n onClose,\n}: PainelDePeriodoProps) {\n const [rascunho, setRascunho] = useState<Rascunho>(value ?? [null, null]);\n const [periodo, setPeriodo] = useState(() => periodoDe(periods, value, today) ?? null);\n const [mes, setMes] = useState(() => mesDaTela(rascunho, numberOfMonths, today));\n\n // Muda o rascunho por um período, pelo calendário ou pelos campos.\n const mudar = (novo: Rascunho, novoPeriodo: DateRangePeriod | null) => {\n setRascunho(novo);\n setPeriodo(novoPeriodo);\n // Sem o rodapé, o período completo já vale.\n if (!footer && novo[0] && novo[1]) onSelect([novo[0], novo[1]], novoPeriodo);\n };\n\n const [inicio, fim] = rascunho;\n\n return (\n <div className=\"cr-date-range\">\n <div className=\"cr-date-range__body\">\n {periods.length > 0 && (\n <ListaDePeriodos\n periods={periods}\n periodo={periodo}\n onEscolher={(item) => {\n const range = item.range(today);\n setMes(mesDaTela(range, numberOfMonths, today));\n mudar(range, item);\n }}\n />\n )}\n <div className=\"cr-date-range__calendars\">\n <CamposDoPeriodo\n value={rascunho}\n onChange={(novo) => {\n setMes(mesDaTela(novo, numberOfMonths, today));\n mudar(novo, null);\n }}\n />\n <Calendar\n selectionMode=\"range\"\n numberOfMonths={numberOfMonths}\n value={rascunho}\n viewDate={mes}\n onViewDateChange={(event) => setMes(event.value)}\n onChange={(event) => {\n const [novoInicio = null, novoFim = null] = event.value ?? [];\n mudar([novoInicio, novoFim], null);\n }}\n minDate={minDate}\n maxDate={maxDate}\n disabledDates={disabledDates}\n offDays={offDays}\n />\n </div>\n </div>\n {footer && (\n <RodapeDoPeriodo\n podeSelecionar={Boolean(inicio && fim)}\n onFechar={onClose}\n onSelecionar={() => inicio && fim && onSelect([inicio, fim], periodo)}\n />\n )}\n </div>\n );\n}\n","import { forwardRef, useId, useRef, useState, type CSSProperties, type Ref } from 'react';\nimport { Button as PrimeButton } from 'primereact/button';\nimport { OverlayPanel, type OverlayPanelPassThroughTransitionType } from 'primereact/overlaypanel';\nimport { CalendarDots, CaretDown } from '@phosphor-icons/react';\nimport { seguirLado, transicaoDoPopup } from '../../popup';\nimport { PainelDePeriodo } from './PainelDePeriodo';\nimport {\n PERIODOS_PADRAO,\n periodoDe,\n periodoPorExtenso,\n type DateRange,\n type DateRangePeriod,\n} from '../../core/Calendar/periodos';\nimport '../../core/InputText/InputText.css';\nimport '../../comum.css';\nimport './DateRangeButton.css';\n\nexport interface DateRangeButtonChangeEvent {\n /** O período escolhido: [início, fim]. */\n value: DateRange;\n /** O item da lista de períodos, se veio dele (ou se as datas são as dele). */\n period: DateRangePeriod | null;\n}\n\nexport interface DateRangeButtonProps {\n /** O período mostrado no botão (controlado). */\n value?: DateRange | null;\n /** O Selecionar do painel (ou, sem o rodapé, o período completo). */\n onChange?: (event: DateRangeButtonChangeEvent) => void;\n /** Rótulo acima do botão (Label no Figma). Sem rótulo, o nome é o texto do botão. */\n label?: string;\n required?: boolean;\n /** Texto do botão sem período. Padrão: \"Selecione o período\". */\n placeholder?: string;\n /**\n * A lista de períodos do painel (.Period no Figma). Padrão: os seis do Figma (Hoje a Este mês);\n * os outros estão em `DATE_PERIODS`. Com `[]`, o painel fica sem a lista.\n */\n periods?: DateRangePeriod[];\n /** Rodapé com Fechar e Selecionar. Sem ele, o período vale assim que fica completo. Padrão: true. */\n footer?: boolean;\n /** Meses lado a lado no calendário. Padrão: 2. */\n numberOfMonths?: number;\n minDate?: Date;\n maxDate?: Date;\n disabledDates?: Date[];\n /** Dias de folga (Day Off no Figma): aparecem riscados. */\n offDays?: Date[];\n /** O dia de hoje para os períodos (Hoje, Este mês...). Padrão: a data atual. */\n today?: Date;\n disabled?: boolean;\n /** Vai no <button>. */\n id?: string;\n className?: string;\n style?: CSSProperties;\n}\n\n// Data Field do Figma \"Cristal - Team Components | Web\": um botão (o Button do PrimeReact, com os\n// estados de botão) que mostra o período e abre o Data Picker do Figma \"Cristal - Core Components |\n// Web\" no OverlayPanel do Prime (posição, clique fora e Esc do Prime). O Cristal põe o papel de\n// diálogo, leva o foco para dentro ao abrir e o devolve ao botão ao fechar.\nexport const DateRangeButton = forwardRef<HTMLButtonElement, DateRangeButtonProps>(\n function DateRangeButton(\n {\n value = null,\n onChange,\n label,\n required,\n placeholder = 'Selecione o período',\n periods = PERIODOS_PADRAO,\n footer = true,\n numberOfMonths = 2,\n minDate,\n maxDate,\n disabledDates,\n offDays,\n today,\n disabled,\n id,\n className,\n style,\n },\n ref,\n ) {\n const autoId = useId();\n const botaoId = id ?? autoId;\n const rotuloId = `${botaoId}-rotulo`;\n const textoId = `${botaoId}-texto`;\n const painelId = `${botaoId}-painel`;\n const painel = useRef<OverlayPanel>(null);\n const botao = useRef<HTMLButtonElement | null>(null);\n const [aberto, setAberto] = useState(false);\n // O dia de hoje fica fixo enquanto o painel está aberto.\n const [hoje, setHoje] = useState(() => today ?? new Date());\n\n const periodo = periodoDe(periods, value, today ?? hoje);\n const classes = ['cr-field', 'cr-date-range-field', disabled && 'cr-field--disabled', className]\n .filter(Boolean)\n .join(' ');\n\n const fechar = () => painel.current?.hide();\n\n return (\n <div className={classes} style={style}>\n {label && (\n <span id={rotuloId} className=\"cr-field__label\">\n {label}\n {required && (\n <span className=\"cr-field__required\" aria-hidden=\"true\">\n *\n </span>\n )}\n </span>\n )}\n <PrimeButton\n unstyled\n // O PrimeReact tipa a ref como a instância da classe, mas entrega o <button> nela.\n ref={(elemento) => {\n const el = elemento as unknown as HTMLButtonElement | null;\n botao.current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) ref.current = el;\n }}\n id={botaoId}\n type=\"button\"\n className=\"cr-date-range-button\"\n disabled={disabled}\n aria-haspopup=\"dialog\"\n aria-expanded={aberto}\n aria-controls={aberto ? painelId : undefined}\n // O nome é o rótulo seguido do texto do botão (\"Período Este mês: 1 de out...\").\n aria-labelledby={label ? `${rotuloId} ${textoId}` : undefined}\n onClick={(event) => {\n setHoje(today ?? new Date());\n painel.current?.toggle(event);\n }}\n >\n <span className=\"cr-date-range-button__icon\" aria-hidden=\"true\">\n <CalendarDots />\n </span>\n <span id={textoId} className=\"cr-date-range-button__text\">\n {value ? (\n <>\n {periodo && <span className=\"cr-date-range-button__period\">{periodo.label}:</span>}\n <span>{periodoPorExtenso(value)}</span>\n </>\n ) : (\n <span className=\"cr-date-range-button__placeholder\">{placeholder}</span>\n )}\n </span>\n <span className=\"cr-date-range-button__caret\" aria-hidden=\"true\">\n <CaretDown />\n </span>\n </PrimeButton>\n <OverlayPanel\n ref={painel as Ref<OverlayPanel>}\n unstyled\n id={painelId}\n onShow={() => {\n setAberto(true);\n // Ao abrir, o foco vai para o período marcado (ou o primeiro item do painel).\n const raiz = document.getElementById(painelId);\n const alvo =\n raiz?.querySelector<HTMLElement>('input[type=\"radio\"]:checked') ??\n raiz?.querySelector<HTMLElement>('input, button, [tabindex=\"0\"]');\n alvo?.focus();\n }}\n onHide={() => {\n setAberto(false);\n // Ao fechar (Fechar, Selecionar, Esc), o foco volta ao botão; num clique fora, fica onde\n // o clique o deixou.\n const ativo = document.activeElement;\n if (ativo === document.body || document.getElementById(painelId)?.contains(ativo)) {\n botao.current?.focus();\n }\n }}\n pt={{\n root: {\n className: 'cr-date-range__panel',\n role: 'dialog',\n 'aria-label': label ?? 'Escolher período',\n },\n // Animação de entrada e saída (a do Prime) e o lado do painel em relação ao botão.\n transition: transicaoDoPopup<OverlayPanelPassThroughTransitionType>(() =>\n seguirLado(document.getElementById(painelId), botao.current),\n ),\n }}\n >\n <PainelDePeriodo\n value={value}\n periods={periods}\n footer={footer}\n today={today ?? hoje}\n numberOfMonths={numberOfMonths}\n minDate={minDate}\n maxDate={maxDate}\n disabledDates={disabledDates}\n offDays={offDays}\n onClose={fechar}\n onSelect={(range, item) => {\n onChange?.({ value: range, period: item });\n fechar();\n }}\n />\n </OverlayPanel>\n </div>\n );\n },\n);\n","import { forwardRef, useImperativeHandle, useRef, type HTMLAttributes } from 'react';\nimport { Divider as PrimeDivider } from 'primereact/divider';\nimport './Divider.css';\n\n/** Horizontal Divider e Vertical Divider no Figma. */\nexport type DividerOrientation = 'horizontal' | 'vertical';\n/** Style no Figma: Solid (Default no vertical) e Dashed. */\nexport type DividerVariant = 'solid' | 'dashed';\n\nexport interface DividerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n orientation?: DividerOrientation;\n variant?: DividerVariant;\n}\n\n// Base: Divider do PrimeReact no modo unstyled (role=\"separator\" e aria-orientation do Prime).\n// O visual vem todo do Divider.css. O Figma não tem conteúdo no meio da linha, então o Cristal\n// não repassa children.\nexport const Divider = forwardRef<HTMLDivElement, DividerProps>(function Divider(\n { orientation = 'horizontal', variant = 'solid', className, style, ...props },\n ref,\n) {\n // A ref do Prime é um objeto com getElement(); a do Cristal entrega o próprio elemento.\n const primeRef = useRef<PrimeDivider>(null);\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLDivElement);\n\n const classes = ['cr-divider', `cr-divider--${orientation}`, `cr-divider--${variant}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <PrimeDivider\n unstyled\n ref={primeRef}\n layout={orientation}\n // No unstyled, className e style do Divider do Prime não chegam ao elemento; vão pelo pt.\n pt={{\n root: { className: classes, style },\n content: { className: 'cr-divider__content' },\n }}\n {...props}\n />\n );\n});\n","import {\n forwardRef,\n useCallback,\n useRef,\n type ButtonHTMLAttributes,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { Button as PrimeButton } from 'primereact/button';\nimport { Tooltip, type TooltipPosition } from '../Tooltip';\nimport './IconButton.css';\n\n/**\n * Hierarchy no Figma: Primary (Filled), Secondary (Tonal), Tertiary (Outlined) e Other (Icon),\n * que aqui é `ghost`: só o ícone, com fundo no hover.\n */\nexport type IconButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'ghost';\n/** Size no Figma: 32, 36, 42 e 48px. */\nexport type IconButtonSize = 'xsmall' | 'small' | 'medium' | 'large';\n\nexport interface IconButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n variant?: IconButtonVariant;\n size?: IconButtonSize;\n /** Ícone do botão (Leading Icon no Figma). Use um ícone de `@vector-business-services/cristal-ds-web/icons`. */\n icon: ReactNode;\n /** Obrigatório: o botão não tem texto, então é isso que o leitor de tela anuncia. */\n 'aria-label': string;\n /**\n * Tooltip do botão. Padrão: o próprio `aria-label`, para quem vê saber o que o ícone faz. Um\n * texto diferente vira também a descrição do botão; `false` tira o tooltip.\n */\n tooltip?: ReactNode | false;\n /** Lado do tooltip. Padrão: bottom. */\n tooltipPosition?: TooltipPosition;\n}\n\n// Base: Button do PrimeReact no modo unstyled, só com ícone (o `p-button-icon-only` do PrimeNG).\n// O comportamento é o do Prime e o visual vem todo do IconButton.css. Por padrão ganha o Tooltip\n// do Cristal com o próprio nome (no hover e no foco), já que o ícone sozinho não diz o que faz;\n// como o texto é o nome, ele não vira descrição (o leitor de tela não lê duas vezes).\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(function IconButton(\n {\n variant = 'primary',\n size = 'large',\n icon,\n type = 'button',\n tooltip,\n tooltipPosition,\n className,\n ...props\n },\n ref,\n) {\n // O <button> vai para a ref de quem usa e para a do Tooltip. O Prime preenche a ref num efeito,\n // então ela é uma função que repassa o botão quando ele chega.\n const botao = useRef<HTMLButtonElement | null>(null);\n const ligar = useCallback(\n (elemento: HTMLButtonElement | null) => {\n botao.current = elemento;\n if (typeof ref === 'function') ref(elemento);\n else if (ref) ref.current = elemento;\n },\n [ref],\n );\n const texto = tooltip ?? props['aria-label'];\n\n const classes = [\n 'cr-icon-button',\n `cr-icon-button--${variant}`,\n `cr-icon-button--${size}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <>\n <PrimeButton\n unstyled\n // O PrimeReact tipa a ref como a instância da classe, mas entrega o <button> nela.\n ref={ligar as unknown as Ref<PrimeButton>}\n type={type}\n className={classes}\n {...props}\n >\n <span className=\"cr-icon-button__icon\" aria-hidden=\"true\">\n {icon}\n </span>\n </PrimeButton>\n {texto !== false && (\n <Tooltip\n target={botao}\n content={texto}\n position={tooltipPosition}\n describe={texto !== props['aria-label']}\n />\n )}\n </>\n );\n});\n","import {\n forwardRef,\n useEffect,\n useId,\n useImperativeHandle,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { Sidebar, type SidebarPassThroughTransitionType } from 'primereact/sidebar';\nimport { ArrowLeft, X } from '@phosphor-icons/react';\nimport { IconButton } from '../IconButton';\nimport '../../comum.css';\nimport './Drawer.css';\n\n/** Side no Figma: de que lado da tela a gaveta abre. */\nexport type DrawerSide = 'right' | 'left';\n/**\n * Behavior no Figma: Full Body (tudo rola junto) ou Fixed Body (cabeçalho e rodapé fixos, só o\n * corpo rola).\n */\nexport type DrawerBehavior = 'full' | 'fixed';\n/**\n * Largura da gaveta. O Figma só tem a de 340px (small); medium (480px), large (720px) e full (a\n * tela toda) são do Cristal, nas faixas usuais de drawer.\n */\nexport type DrawerSize = 'small' | 'medium' | 'large' | 'full';\n\n/** Controle do Drawer pela ref: o elemento só existe com a gaveta aberta. */\nexport interface DrawerHandle {\n /** A raiz da gaveta, o role=dialog (null fechada). */\n getElement: () => HTMLDivElement | null;\n}\n\nexport interface DrawerProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'title' | 'children' | 'content'\n> {\n visible: boolean;\n /** Pedido para fechar (X, Esc ou clique no overlay). */\n onHide: () => void;\n /** Título do cabeçalho; também é o nome acessível da gaveta. */\n title: string;\n /** Subtítulo descritivo, até 2 linhas. */\n subtitle?: ReactNode;\n /** Padrão: right. */\n side?: DrawerSide;\n /** Padrão: full. */\n behavior?: DrawerBehavior;\n /** Padrão: small (340px, a do Figma). */\n size?: DrawerSize;\n /**\n * Com overlay (padrão): a gaveta é modal, a página atrás fica bloqueada e o clique no overlay\n * fecha. Sem overlay (`false`): a página continua rolando e clicável, e só o X e o Esc fecham.\n */\n modal?: boolean;\n /** Mostra o botão de voltar antes do título. */\n onBack?: () => void;\n backLabel?: string;\n closeLabel?: string;\n /** Botões do rodapé, alinhados à direita. */\n footer?: ReactNode;\n children?: ReactNode;\n id?: string;\n className?: string;\n}\n\nconst FOCAVEIS =\n 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\n// Base: Sidebar do PrimeReact no modo unstyled (o p-sidebar/p-drawer do PrimeNG da produção):\n// overlay, Esc, clique fora, bloqueio da rolagem da página, o foco no X ao abrir e a transição de\n// entrada e saída (300ms) são do Prime. O conteúdo vem do `content` do Prime, com o cabeçalho, o\n// corpo e o rodapé do Figma. O Sidebar do Prime marca a gaveta como role=complementary e não\n// segura o foco; com overlay ela é modal, então o Cristal a marca como dialog (aria-modal),\n// mantém o Tab dentro dela e devolve o foco a quem a abriu. Sem overlay (modal={false}) ela é um\n// dialog não modal: a página continua usável, o Tab sai dela e o clique fora não fecha.\nexport const Drawer = forwardRef<DrawerHandle, DrawerProps>(function Drawer(\n {\n visible,\n onHide,\n title,\n subtitle,\n side = 'right',\n behavior = 'full',\n size = 'small',\n modal = true,\n onBack,\n backLabel = 'Voltar',\n closeLabel = 'Fechar',\n footer,\n children,\n id,\n className,\n ...props\n },\n ref,\n) {\n const primeRef = useRef<Sidebar>(null);\n useImperativeHandle(ref, () => ({\n getElement: () => primeRef.current?.getElement() ?? null,\n }));\n const autoId = useId();\n const titleId = `${autoId}-title`;\n const subtitleId = `${autoId}-subtitle`;\n const panelRef = useRef<HTMLDivElement>(null);\n const retorno = useRef<HTMLElement | null>(null);\n\n // Ao abrir, guarda quem tinha o foco; ao fechar, devolve.\n useEffect(() => {\n if (visible) {\n retorno.current = document.activeElement as HTMLElement | null;\n return;\n }\n retorno.current?.focus();\n retorno.current = null;\n }, [visible]);\n\n // Quem rola (o corpo no fixed, a gaveta toda no full) entra no Tab só quando rola, para a\n // rolagem pelo teclado. O Prime só monta o conteúdo depois de abrir: a ref de callback começa a\n // medir quando ele existe.\n const [rolagem, setRolagem] = useState<HTMLDivElement | null>(null);\n const [rolavel, setRolavel] = useState(false);\n useEffect(() => {\n if (!rolagem) return;\n const medir = () => setRolavel(rolagem.scrollHeight > rolagem.clientHeight);\n medir();\n const observer = new ResizeObserver(medir);\n observer.observe(rolagem);\n [...rolagem.children].forEach((child) => observer.observe(child));\n return () => observer.disconnect();\n }, [rolagem, children]);\n\n // Com overlay, o Tab e o Shift+Tab ciclam dentro da gaveta.\n const prenderFoco = (event: KeyboardEvent) => {\n if (!modal || event.key !== 'Tab' || !panelRef.current) return;\n const focaveis = [...panelRef.current.querySelectorAll<HTMLElement>(FOCAVEIS)];\n const primeiro = focaveis[0];\n const ultimo = focaveis[focaveis.length - 1];\n if (!primeiro || !ultimo) return;\n if (event.shiftKey && document.activeElement === primeiro) {\n event.preventDefault();\n ultimo.focus();\n } else if (!event.shiftKey && document.activeElement === ultimo) {\n event.preventDefault();\n primeiro.focus();\n }\n };\n\n const classes = [\n 'cr-drawer',\n `cr-drawer--${side}`,\n `cr-drawer--${behavior}`,\n `cr-drawer--size-${size}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <Sidebar\n {...props}\n ref={primeRef}\n unstyled\n id={id}\n visible={visible}\n onHide={onHide}\n position={side}\n modal={modal}\n blockScroll={modal}\n // Sem overlay, o Prime fecharia com qualquer clique na página: só o X e o Esc fecham.\n dismissable={modal}\n pt={{\n mask: {\n className: `cr-drawer__mask cr-drawer__mask--${side}${modal ? '' : ' cr-drawer__mask--sem-overlay'}`,\n },\n root: {\n className: classes,\n role: 'dialog',\n 'aria-modal': modal || undefined,\n 'aria-labelledby': titleId,\n 'aria-describedby': subtitle ? subtitleId : undefined,\n onKeyDown: prenderFoco,\n },\n // No unstyled o Prime não põe classes na transição: o Cristal dá as dele (Drawer.css).\n // O tipo do Prime exige o addEndListener do react-transition-group, que aqui não se usa.\n transition: {\n classNames: {\n enter: 'cr-drawer--enter',\n enterActive: 'cr-drawer--enter-active',\n exitActive: 'cr-drawer--exit-active',\n },\n } as SidebarPassThroughTransitionType,\n }}\n content={({ closeIconRef, hide }) => (\n <div\n ref={(element) => {\n panelRef.current = element;\n if (behavior === 'full') setRolagem(element);\n }}\n className=\"cr-rolagem-fina cr-drawer__panel\"\n tabIndex={behavior === 'full' && rolavel ? 0 : undefined}\n >\n <div className=\"cr-drawer__header\">\n <div className=\"cr-drawer__title-row\">\n {onBack && (\n <IconButton\n variant=\"tertiary\"\n size=\"xsmall\"\n icon={<ArrowLeft />}\n aria-label={backLabel}\n onClick={onBack}\n />\n )}\n <h2 id={titleId} className=\"cr-drawer__title\">\n {title}\n </h2>\n </div>\n {subtitle && (\n <p id={subtitleId} className=\"cr-drawer__subtitle\">\n {subtitle}\n </p>\n )}\n </div>\n <div\n ref={behavior === 'fixed' ? setRolagem : undefined}\n className=\"cr-rolagem-fina cr-drawer__body\"\n tabIndex={behavior === 'fixed' && rolavel ? 0 : undefined}\n >\n {children}\n </div>\n {footer && <div className=\"cr-drawer__footer\">{footer}</div>}\n <IconButton\n ref={closeIconRef as unknown as Ref<HTMLButtonElement>}\n className=\"cr-drawer__close\"\n variant=\"tertiary\"\n size=\"xsmall\"\n icon={<X />}\n aria-label={closeLabel}\n onClick={(event) => hide(event)}\n />\n </div>\n )}\n />\n );\n});\n","import {\n forwardRef,\n useId,\n useRef,\n useState,\n type FormEvent,\n type HTMLAttributes,\n type MouseEvent,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { Menubar as PrimeMenubar, type MenubarPassThroughOptions } from 'primereact/menubar';\nimport { Button as PrimeButton } from 'primereact/button';\nimport { InputText } from 'primereact/inputtext';\nimport { List, MagnifyingGlass } from '@phosphor-icons/react';\nimport { Badge } from '../Badge';\nimport { Menu, type MenuHandle, type MenuItem } from '../Menu';\nimport { Tooltip } from '../Tooltip';\nimport logoSimbolo from './assets/vector-logo-simbolo.svg';\nimport logoTexto from './assets/vector-logo-texto.svg';\nimport './Menubar.css';\n\n/** Um botão de ferramenta (.Menubar Tools Button no Figma). */\nexport interface MenubarTool {\n /** Nome do botão: vira o aria-label e o texto do tooltip. */\n label: string;\n /** Use um ícone de `@vector-business-services/cristal-ds-web/icons`. */\n icon: ReactNode;\n /** Contador sobre o ícone (Show Badge no Figma). */\n badge?: ReactNode;\n /** Como o leitor de tela lê o contador (padrão: o próprio valor). */\n badgeLabel?: string;\n /** Itens do menu que o botão abre (Dropdown List no Figma). */\n menu?: MenuItem[];\n onClick?: (event: MouseEvent<HTMLButtonElement>) => void;\n /** Continua visível no tablet (768px), como o sino no Figma. */\n showOnTablet?: boolean;\n}\n\n/** Usuário logado (.Menubar Profile no Figma). */\nexport interface MenubarUser {\n name: string;\n /** Perfil de acesso, abaixo do nome. */\n role?: string;\n /** URL da foto. Sem foto, o avatar mostra a inicial do nome (Type=No Image). */\n avatar?: string;\n}\n\nexport interface MenubarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Logo à esquerda (.Nav Logo no Figma); o padrão é o logo da Vector. */\n logo?: ReactNode;\n /** Menu principal aberto: deixa o botão de menu no estado Active. */\n menuOpen?: boolean;\n /** Clique no botão de menu (abre o Menu Principal). */\n onMenuToggle?: (event: MouseEvent<HTMLButtonElement>) => void;\n /** Nome acessível do botão de menu. */\n menuLabel?: string;\n /** Mostra a busca no centro (só no desktop). */\n showSearch?: boolean;\n searchPlaceholder?: string;\n /** Valor da busca (controlado). Sem ele, a busca guarda o próprio valor. */\n searchValue?: string;\n onSearchChange?: (value: string) => void;\n /** Envio da busca (Enter ou lupa). */\n onSearch?: (value: string) => void;\n /** Nome acessível da lupa. */\n searchButtonLabel?: string;\n /** Botões de ferramenta à direita (.Nav Tools no Figma). */\n tools?: MenubarTool[];\n user?: MenubarUser;\n /** Itens do menu do perfil. Sem eles, o perfil não é clicável. */\n userMenu?: MenuItem[];\n id?: string;\n className?: string;\n}\n\nfunction VectorLogo() {\n return (\n <span className=\"cr-menubar__logo\" role=\"img\" aria-label=\"Vector\">\n <img className=\"cr-menubar__logo-texto\" src={logoTexto} alt=\"\" />\n <img className=\"cr-menubar__logo-simbolo\" src={logoSimbolo} alt=\"\" />\n </span>\n );\n}\n\nfunction ToolButton({ tool }: { tool: MenubarTool }) {\n const buttonRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<MenuHandle>(null);\n const menuId = useId();\n const [open, setOpen] = useState(false);\n const hasMenu = Boolean(tool.menu?.length);\n const hasBadge = tool.badge !== undefined && tool.badge !== null;\n const name = hasBadge ? `${tool.label}, ${tool.badgeLabel ?? String(tool.badge)}` : tool.label;\n\n const classes = [\n 'cr-menubar__tool',\n tool.showOnTablet && 'cr-menubar__tool--tablet',\n open && 'cr-menubar__tool--active',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <>\n <PrimeButton\n unstyled\n // O PrimeReact tipa a ref como a instância da classe, mas entrega o <button> nela.\n ref={buttonRef as unknown as Ref<PrimeButton>}\n type=\"button\"\n className={classes}\n aria-label={name}\n aria-haspopup={hasMenu ? 'menu' : undefined}\n aria-expanded={hasMenu ? open : undefined}\n aria-controls={hasMenu && open ? menuId : undefined}\n onClick={(event) => {\n tool.onClick?.(event);\n if (hasMenu) menuRef.current?.toggle(event);\n }}\n >\n <span className=\"cr-menubar__tool-icon\" aria-hidden=\"true\">\n {tool.icon}\n </span>\n {hasBadge && (\n <Badge className=\"cr-menubar__badge\" aria-hidden=\"true\">\n {tool.badge}\n </Badge>\n )}\n </PrimeButton>\n {/* No Figma o tooltip aparece no Hover e some com o menu aberto (Active). */}\n <Tooltip target={buttonRef} content={tool.label} disabled={open} />\n {hasMenu && (\n <Menu\n ref={menuRef}\n id={menuId}\n popup\n popupAlignment=\"right\"\n model={tool.menu ?? []}\n aria-label={tool.label}\n onShow={() => setOpen(true)}\n onHide={() => setOpen(false)}\n />\n )}\n </>\n );\n}\n\nfunction Profile({ user, menu }: { user: MenubarUser; menu?: MenuItem[] }) {\n const menuRef = useRef<MenuHandle>(null);\n const menuId = useId();\n const [open, setOpen] = useState(false);\n const hasMenu = Boolean(menu?.length);\n\n const content = (\n <>\n <span className=\"cr-menubar__profile-text\">\n <span className=\"cr-menubar__profile-name\">{user.name}</span>\n {user.role && <span className=\"cr-menubar__profile-role\">{user.role}</span>}\n </span>\n {/* O nome já está no texto ao lado: o avatar é só visual. Um <span> do Cristal, não o\n Avatar do Prime: ele renderiza um <div>, que não pode ficar dentro do <button> do perfil. */}\n <span\n aria-hidden=\"true\"\n className={`cr-menubar__avatar${user.avatar ? '' : ' cr-menubar__avatar--initial'}`}\n >\n {user.avatar ? (\n <img className=\"cr-menubar__avatar-image\" src={user.avatar} alt=\"\" />\n ) : (\n user.name.trim().charAt(0).toUpperCase()\n )}\n </span>\n </>\n );\n\n if (!hasMenu) return <div className=\"cr-menubar__profile\">{content}</div>;\n\n return (\n <>\n <PrimeButton\n unstyled\n type=\"button\"\n className=\"cr-menubar__profile cr-menubar__profile--button\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-controls={open ? menuId : undefined}\n onClick={(event) => menuRef.current?.toggle(event)}\n >\n {content}\n </PrimeButton>\n <Menu\n ref={menuRef}\n id={menuId}\n popup\n popupAlignment=\"right\"\n model={menu ?? []}\n aria-label={user.name}\n onShow={() => setOpen(true)}\n onHide={() => setOpen(false)}\n />\n </>\n );\n}\n\n// Base: Menubar do PrimeReact no modo unstyled, espelhando o p-menubar do PrimeNG da produção. A\n// navegação do Vector fica no Menu Principal (aberto pelo botão de menu), então o Menubar não\n// tem itens próprios: usa só as áreas start e end do Prime. Os botões são Buttons do Prime, a\n// busca é um InputText, o avatar é o Avatar e os menus e tooltips são o Menu e o Tooltip do\n// Cristal. O layout responsivo (1360, 768 e 360px no Figma) vem de container queries no\n// Menubar.css, pela largura do próprio Menubar.\nexport const Menubar = forwardRef<HTMLDivElement, MenubarProps>(function Menubar(\n {\n logo,\n menuOpen = false,\n onMenuToggle,\n menuLabel = 'Menu principal',\n showSearch = true,\n searchPlaceholder = 'Buscar no Vector',\n searchValue,\n onSearchChange,\n onSearch,\n searchButtonLabel = 'Buscar',\n tools = [],\n user,\n userMenu,\n id,\n className,\n ...props\n },\n ref,\n) {\n const [innerSearch, setInnerSearch] = useState('');\n const search = searchValue ?? innerSearch;\n\n const submitSearch = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n onSearch?.(search);\n };\n\n const classes = ['cr-menubar', !showSearch && 'cr-menubar--no-search', className]\n .filter(Boolean)\n .join(' ');\n\n const pt: MenubarPassThroughOptions = {\n // A área start some do layout (display: contents): o início e a busca viram colunas do grid.\n start: { className: 'cr-menubar__start' },\n end: { className: 'cr-menubar__end' },\n // Sem itens, a lista do Prime (role=menubar) ficaria vazia e focável: fica escondida.\n menu: { hidden: true },\n };\n\n const start = (\n <>\n <div className=\"cr-menubar__init\">\n <PrimeButton\n unstyled\n type=\"button\"\n className={`cr-menubar__menu-button${menuOpen ? ' cr-menubar__menu-button--active' : ''}`}\n aria-label={menuLabel}\n aria-expanded={menuOpen}\n onClick={onMenuToggle}\n >\n <span className=\"cr-menubar__menu-icon\" aria-hidden=\"true\">\n <List />\n </span>\n </PrimeButton>\n {logo ?? <VectorLogo />}\n </div>\n {showSearch && (\n <form role=\"search\" className=\"cr-menubar__search\" onSubmit={submitSearch}>\n <InputText\n unstyled\n className=\"cr-menubar__search-input\"\n placeholder={searchPlaceholder}\n aria-label={searchPlaceholder}\n value={search}\n onChange={(event) => {\n setInnerSearch(event.target.value);\n onSearchChange?.(event.target.value);\n }}\n />\n <PrimeButton\n unstyled\n type=\"submit\"\n className=\"cr-menubar__search-button\"\n aria-label={searchButtonLabel}\n >\n <span className=\"cr-menubar__search-icon\" aria-hidden=\"true\">\n <MagnifyingGlass />\n </span>\n </PrimeButton>\n </form>\n )}\n </>\n );\n\n const end =\n tools.length > 0 || user ? (\n <>\n {tools.length > 0 && (\n <div className=\"cr-menubar__tools\">\n {tools.map((tool) => (\n <ToolButton key={tool.label} tool={tool} />\n ))}\n </div>\n )}\n {user && <Profile user={user} menu={userMenu} />}\n </>\n ) : null;\n\n return (\n <div ref={ref} id={id} className={classes}>\n <PrimeMenubar\n {...props}\n unstyled\n className=\"cr-menubar__bar\"\n model={[]}\n start={start}\n end={end}\n pt={pt}\n />\n </div>\n );\n});\n","import {\n forwardRef,\n useImperativeHandle,\n useRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { Tag as PrimeTag } from 'primereact/tag';\nimport './Tag.css';\n\n/** Type no Figma. */\nexport type TagVariant =\n 'default' | 'success' | 'warning' | 'danger' | 'info' | 'purple' | 'gray' | 'inverse' | 'outline';\n/** Size no Figma: small = 24px, medium = 28px, large = 32px, x-large = 36px de altura. */\nexport type TagSize = 'small' | 'medium' | 'large' | 'x-large';\n\nexport interface TagProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: TagVariant;\n size?: TagSize;\n /** Ícone à esquerda (Leading Icon no Figma). Use um ícone de `@vector-business-services/cristal-ds-web/icons`. */\n icon?: ReactNode;\n /** Texto da tag (Label no Figma). */\n children: ReactNode;\n}\n\n// Base: Tag do PrimeReact no modo unstyled; o visual vem todo do Tag.css. Rótulo de status\n// estático (sem interação); para contador ou bolinha de notificação, use o Badge.\nexport const Tag = forwardRef<HTMLSpanElement, TagProps>(function Tag(\n { variant = 'default', size = 'small', icon, className, children, ...props },\n ref,\n) {\n const primeRef = useRef<PrimeTag>(null);\n // O PrimeReact entrega na ref um objeto com getElement(); o Cristal repassa o <span>.\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLSpanElement);\n\n const classes = ['cr-tag', `cr-tag--${variant}`, `cr-tag--${size}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <PrimeTag\n unstyled\n ref={primeRef}\n className={classes}\n // Como função, o ícone é renderizado pelo Cristal (o Prime só repassa props a funções).\n icon={\n icon\n ? () => (\n <span className=\"cr-tag__icon\" aria-hidden=\"true\">\n {icon}\n </span>\n )\n : undefined\n }\n value={children}\n {...props}\n />\n );\n});\n","import {\n forwardRef,\n useContext,\n useImperativeHandle,\n useRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n type SyntheticEvent,\n} from 'react';\nimport { PrimeReactContext, PrimeReactProvider } from 'primereact/api';\nimport {\n Menu as PrimeMenu,\n type MenuPassThroughOptions,\n type MenuPassThroughTransitionType,\n} from 'primereact/menu';\nimport type { MenuItem as PrimeMenuItem, MenuItemCommandEvent } from 'primereact/menuitem';\nimport { DribbbleLogo } from '@phosphor-icons/react';\nimport { Tag } from '../Tag';\nimport '../Divider/Divider.css';\nimport { transicaoDoPopup, seguirLado } from '../../popup';\nimport '../../comum.css';\nimport './MenuPrincipal.css';\n\n/** Um produto do menu (.Menu Principal / Item no Figma). */\nexport interface MenuPrincipalItem {\n /** Nome do produto (Item Label no Figma). */\n label: string;\n /** Texto de apoio abaixo do nome, até 2 linhas. */\n description?: string;\n /** Ícone no círculo à esquerda. Use um ícone de `@vector-business-services/cristal-ds-web/icons`. */\n icon: ReactNode;\n /** Texto da tag no canto (Show Tag no Figma, onde é \"Experimente\"). */\n tag?: string;\n /** Ícone da tag. Padrão: DribbbleLogo, o do Figma. */\n tagIcon?: ReactNode;\n /** Ação do item; o menu popup fecha depois dela. */\n command?: (event: MenuItemCommandEvent) => void;\n /** Link do item; sem ele o clique não navega. */\n url?: string;\n target?: string;\n id?: string;\n className?: string;\n}\n\n/** Um grupo de produtos com título (Product Group no Figma). */\nexport interface MenuPrincipalGroup {\n /** Título do grupo, acima dos itens. */\n label: string;\n items: MenuPrincipalItem[];\n id?: string;\n}\n\nexport type MenuPrincipalEntry = MenuPrincipalItem | MenuPrincipalGroup;\n\nexport interface MenuPrincipalProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Itens soltos e grupos, na ordem; o divisor tracejado entra antes e depois de cada grupo. */\n model: MenuPrincipalEntry[];\n /** Abre sobre a tela, posicionado no elemento que chamou `toggle`/`show` pela ref. */\n popup?: boolean;\n /** Nome acessível do menu. */\n 'aria-label'?: string;\n onShow?: (event: SyntheticEvent) => void;\n onHide?: (event: SyntheticEvent) => void;\n id?: string;\n className?: string;\n}\n\n/** Controle do menu popup, pela ref. */\nexport interface MenuPrincipalHandle {\n toggle: (event: SyntheticEvent) => void;\n show: (event: SyntheticEvent) => void;\n hide: (event: SyntheticEvent) => void;\n /** O <div> raiz do menu (só existe com o popup aberto). */\n getElement: () => HTMLDivElement | null;\n}\n\nconst isGroup = (entry: MenuPrincipalEntry): entry is MenuPrincipalGroup => 'items' in entry;\n\n// Base: Menu do PrimeReact no modo unstyled (teclado, foco, popup e fechamento do Prime,\n// espelhando o p-menu do PrimeNG da produção), como o Menu do Cristal; os grupos são os\n// submenus do Prime e os divisores, os separadores. No Figma é o Menu Principal (página Menu\n// Suspenso), aberto pelo botão de menu do Menubar. O item é um template do Prime, com o ícone,\n// o nome, a descrição e a tag; o visual vem do MenuPrincipal.css.\nexport const MenuPrincipal = forwardRef<MenuPrincipalHandle, MenuPrincipalProps>(\n function MenuPrincipal(\n {\n model,\n popup = false,\n 'aria-label': ariaLabel = 'Menu principal',\n 'aria-labelledby': ariaLabelledBy,\n onShow,\n onHide,\n id,\n className,\n ...props\n },\n ref,\n ) {\n const primeRef = useRef<PrimeMenu>(null);\n const context = useContext(PrimeReactContext);\n\n // Onde termina o botão que abriu o popup: o CSS limita a altura ao espaço da tela abaixo dele\n // (e acompanha a tela se ela diminuir com o menu aberto).\n const [baseDoAlvo, setBaseDoAlvo] = useState<number>();\n // Quem abriu o popup: também serve para medir o lado (acima ou abaixo) em que ele abriu.\n const alvo = useRef<Element | null>(null);\n const medirAlvo = (event: SyntheticEvent) => {\n const elemento = event.currentTarget as Element | null;\n if (!(elemento instanceof Element)) return;\n alvo.current = elemento;\n setBaseDoAlvo(elemento.getBoundingClientRect().bottom);\n };\n\n useImperativeHandle(ref, () => ({\n toggle: (event) => {\n medirAlvo(event);\n primeRef.current?.toggle(event);\n },\n show: (event) => {\n medirAlvo(event);\n primeRef.current?.show(event);\n },\n hide: (event) => primeRef.current?.hide(event),\n getElement: () => primeRef.current?.getElement() ?? null,\n }));\n\n const toPrime = (item: MenuPrincipalItem): PrimeMenuItem => ({\n id: item.id,\n // Sem label no Prime: ele viraria o aria-label do item, só com parte do texto visível. O\n // nome vem do conteúdo: o nome, a descrição e a tag. Os espaços entre eles não aparecem\n // (estão em flex), mas separam as palavras no nome (\"Início Tela inicial\", não colado).\n command: item.command,\n url: item.url,\n target: item.target,\n className: item.className,\n // O <a> leva o data-pc-section do Prime: o Enter do teclado clica nele (e segue o link).\n template: () => (\n <a\n className=\"cr-menu-principal__action\"\n data-pc-section=\"action\"\n href={item.url ?? '#'}\n target={item.target}\n tabIndex={-1}\n >\n <span className=\"cr-menu-principal__icon\" aria-hidden=\"true\">\n {item.icon}\n </span>\n <span className=\"cr-menu-principal__text\">\n <span className=\"cr-menu-principal__label\">{item.label}</span>{' '}\n {item.description && (\n <span className=\"cr-menu-principal__description\">{item.description}</span>\n )}\n </span>{' '}\n {item.tag && (\n <Tag\n className=\"cr-menu-principal__tag\"\n variant=\"warning\"\n icon={item.tagIcon ?? <DribbbleLogo />}\n >\n {item.tag}\n </Tag>\n )}\n </a>\n ),\n });\n\n // Divisor antes e depois de cada grupo (entre dois itens soltos, não).\n const items: PrimeMenuItem[] = [];\n let anterior: MenuPrincipalEntry | undefined;\n model.forEach((entry) => {\n if (anterior && (isGroup(entry) || isGroup(anterior))) items.push({ separator: true });\n items.push(\n isGroup(entry)\n ? { id: entry.id, label: entry.label, items: entry.items.map(toPrime) }\n : toPrime(entry),\n );\n anterior = entry;\n });\n\n const classes = ['cr-menu-principal', popup && 'cr-menu-principal--popup', className]\n .filter(Boolean)\n .join(' ');\n\n const pt: MenuPassThroughOptions = {\n // O nome acessível vai na lista (role=menu), como no Menu.\n menu: {\n className: 'cr-menu-principal__list',\n 'aria-label': ariaLabelledBy ? undefined : ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n },\n submenuHeader: { className: 'cr-menu-principal__group' },\n // O divisor tracejado é o Divider do Cristal (dashed).\n separator: {\n className:\n 'cr-divider cr-divider--horizontal cr-divider--dashed cr-menu-principal__separator',\n },\n menuitem: { className: 'cr-menu-principal__item' },\n // Lado do popup, medido logo depois de o Prime posicionar.\n // Numa microtarefa: no onEnter o Prime ainda está religando a ref (como no Menu).\n transition: transicaoDoPopup<MenuPassThroughTransitionType>(() =>\n queueMicrotask(() => seguirLado(primeRef.current?.getElement(), alvo.current)),\n ),\n };\n\n const menu = (\n <PrimeMenu\n {...props}\n unstyled\n ref={primeRef}\n id={id}\n className={classes}\n style={\n popup && baseDoAlvo !== undefined\n ? ({ '--cr-menu-principal-topo': `${baseDoAlvo}px` } as CSSProperties)\n : undefined\n }\n model={items}\n popup={popup}\n onShow={onShow}\n onHide={onHide}\n pt={pt}\n />\n );\n\n // Como no Menu: sem um PrimeReactProvider na aplicação, o clique fora dá erro no Prime.\n return context ? menu : <PrimeReactProvider>{menu}</PrimeReactProvider>;\n },\n);\n","import {\n forwardRef,\n useImperativeHandle,\n useRef,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport {\n Message as PrimeMessage,\n type MessageProps as PrimeMessageProps,\n} from 'primereact/message';\nimport {\n CheckCircle,\n Info,\n SealWarning,\n Warning,\n WarningCircle,\n XCircle,\n} from '@phosphor-icons/react';\nimport './Message.css';\n\n/** Type no Figma. */\nexport type MessageType = 'info' | 'warning' | 'success' | 'danger' | 'highlight' | 'neutral';\n\nexport interface MessageProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'content'> {\n /** Padrão: info. */\n type?: MessageType;\n /** Texto (Message no Figma). */\n children: ReactNode;\n /** Show Icon no Figma. Padrão: true. */\n showIcon?: boolean;\n id?: string;\n className?: string;\n}\n\n// Highlight e Neutral não têm severity próprio no Prime: usam os outros dois dele.\nconst SEVERITY: Record<MessageType, PrimeMessageProps['severity']> = {\n info: 'info',\n warning: 'warn',\n success: 'success',\n danger: 'error',\n highlight: 'contrast',\n neutral: 'secondary',\n};\n\nconst ICON: Record<MessageType, ReactElement> = {\n info: <Info />,\n warning: <Warning />,\n success: <CheckCircle />,\n danger: <XCircle />,\n highlight: <SealWarning />,\n neutral: <WarningCircle />,\n};\n\n// Base: Message do PrimeReact no modo unstyled (o p-message do PrimeNG da produção): a faixa com\n// ícone e texto e o role=\"alert\" (aria-live polite) são do Prime. O Cristal troca o severity pelo\n// Type do Figma, põe os ícones do Figma e desenha pelos tokens (Message.css). A ref entrega a raiz.\nexport const Message = forwardRef<HTMLDivElement, MessageProps>(function Message(\n { type = 'info', children, showIcon = true, id, className, ...props },\n ref,\n) {\n const primeRef = useRef<PrimeMessage>(null);\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLDivElement);\n\n return (\n <PrimeMessage\n {...props}\n unstyled\n ref={primeRef}\n id={id}\n severity={SEVERITY[type]}\n text={children}\n // Sem ícone, um fragmento vazio: com undefined o Prime põe o ícone dele.\n icon={\n showIcon ? (\n <span className=\"cr-message__icon\" aria-hidden=\"true\">\n {ICON[type]}\n </span>\n ) : (\n <></>\n )\n }\n pt={{\n root: {\n className: ['cr-message', `cr-message--${type}`, className].filter(Boolean).join(' '),\n },\n text: { className: 'cr-message__text' },\n }}\n />\n );\n});\n","import {\n forwardRef,\n useEffect,\n useId,\n useImperativeHandle,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { Dialog as PrimeDialog, type DialogPassThroughTransitionType } from 'primereact/dialog';\nimport { Question, X } from '@phosphor-icons/react';\nimport { IconButton } from '../IconButton';\nimport '../../comum.css';\nimport './Dialog.css';\n\n/**\n * Size no Figma: Small (520px), Medium (768px) e Large (1200 x 720px; abaixo de 768px de tela\n * vira tela cheia, como o Responsive=360 do Figma).\n */\nexport type DialogSize = 'small' | 'medium' | 'large';\n\n/** Controle do Dialog pela ref: o elemento só existe com o modal aberto. */\nexport interface DialogHandle {\n /** O role=dialog do modal (null fechado). */\n getElement: () => HTMLDivElement | null;\n}\n\nexport interface DialogProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n // onClick: o Dialog do Prime o declara com PointerEvent, incompatível com o do <div>.\n 'title' | 'children' | 'content' | 'onClick'\n> {\n visible: boolean;\n /** Pedido para fechar (X, Esc ou clique fora, com dismissableMask). */\n onHide: () => void;\n /**\n * Fecha com o clique no overlay, fora do modal. Padrão: true, como o Drawer. Desligue quando\n * fechar por engano faz perder algo (formulário preenchido, confirmação importante).\n */\n dismissableMask?: boolean;\n /** Título do cabeçalho; também é o nome acessível do modal. */\n title: string;\n /** Padrão: large. */\n size?: DialogSize;\n /** Mostra o botão de ajuda (QuestionMark) ao lado do X, no small e no medium. */\n onHelp?: () => void;\n helpLabel?: string;\n closeLabel?: string;\n /** Botões do rodapé, à direita. */\n footer?: ReactNode;\n /** Conteúdo do rodapé à esquerda (ex.: o botão secundário dos Two/Tree Buttons do Figma). */\n footerStart?: ReactNode;\n children?: ReactNode;\n id?: string;\n className?: string;\n}\n\n// Base: Dialog do PrimeReact no modo unstyled (o p-dialog do PrimeNG da produção): overlay,\n// role=dialog com aria-modal, Esc, fechar com o clique fora (dismissableMask, que o Cristal liga por\n// padrão, como no Drawer), foco preso no modal e devolvido a quem o abriu, e o bloqueio da rolagem\n// da página são do Prime. O conteúdo vem do `content` do Prime, com o cabeçalho, o\n// corpo e o rodapé do Figma. Quando o corpo rola, o rodapé ganha a sombra do Figma (\"Shadow (Up\n// content scrollable)\").\nexport const Dialog = forwardRef<DialogHandle, DialogProps>(function Dialog(\n {\n visible,\n onHide,\n dismissableMask = true,\n title,\n size = 'large',\n onHelp,\n helpLabel = 'Ajuda',\n closeLabel = 'Fechar',\n footer,\n footerStart,\n children,\n id,\n className,\n ...props\n },\n ref,\n) {\n const primeRef = useRef<PrimeDialog>(null);\n useImperativeHandle(ref, () => ({\n getElement: () => primeRef.current?.getElement() ?? null,\n }));\n const autoId = useId();\n const titleId = `${autoId}-title`;\n // O Prime só monta o conteúdo depois de abrir: a ref de callback começa a medir quando o corpo\n // existe. Quando ele rola (conteúdo maior que a altura), o rodapé ganha sombra.\n const [body, setBody] = useState<HTMLDivElement | null>(null);\n const [rolavel, setRolavel] = useState(false);\n useEffect(() => {\n if (!body) return;\n const medir = () => setRolavel(body.scrollHeight > body.clientHeight);\n medir();\n const observer = new ResizeObserver(medir);\n observer.observe(body);\n [...body.children].forEach((child) => observer.observe(child));\n return () => observer.disconnect();\n }, [body, children]);\n\n const classes = ['cr-modal', `cr-modal--${size}`, rolavel && 'cr-modal--scrollable', className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <PrimeDialog\n {...props}\n ref={primeRef}\n unstyled\n id={id}\n visible={visible}\n onHide={onHide}\n dismissableMask={dismissableMask}\n draggable={false}\n resizable={false}\n blockScroll\n pt={{\n mask: { className: 'cr-modal__mask' },\n root: {\n className: classes,\n 'aria-labelledby': titleId,\n 'aria-describedby': undefined,\n },\n // Entrada e saída do tema do Prime (p-dialog, Dialog.css). No unstyled o Prime não põe\n // classes na transição; o tipo exige o addEndListener do react-transition-group.\n transition: {\n classNames: {\n enter: 'cr-modal--entrar',\n enterActive: 'cr-modal--entrando',\n enterDone: 'cr-modal--entrou',\n exitActive: 'cr-modal--saindo',\n },\n } as DialogPassThroughTransitionType,\n }}\n content={({ hide, closeRef }) => (\n <>\n <div className=\"cr-modal__header\">\n <h2 id={titleId} className=\"cr-modal__title\">\n {title}\n </h2>\n <div className=\"cr-modal__tools\">\n {onHelp && size !== 'large' && (\n <IconButton\n variant=\"tertiary\"\n size=\"xsmall\"\n icon={<Question />}\n aria-label={helpLabel}\n onClick={onHelp}\n />\n )}\n <IconButton\n ref={closeRef as unknown as Ref<HTMLButtonElement>}\n variant=\"tertiary\"\n size=\"xsmall\"\n icon={<X />}\n aria-label={closeLabel}\n onClick={(event) => hide(event)}\n />\n </div>\n </div>\n <div\n ref={setBody}\n className=\"cr-rolagem-fina cr-modal__body\"\n // Quando rola, o corpo entra na ordem do Tab para a rolagem pelo teclado (o axe exige\n // que uma área com rolagem seja focável).\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n tabIndex={rolavel ? 0 : undefined}\n >\n {children}\n </div>\n {(footer || footerStart) && (\n <div className=\"cr-modal__footer\">\n <div className=\"cr-modal__footer-start\">{footerStart}</div>\n <div className=\"cr-modal__footer-end\">{footer}</div>\n </div>\n )}\n </>\n )}\n />\n );\n});\n\n// Nomes antigos (do Figma), mantidos até a próxima versão: o nome do Cristal é o do PrimeNG 19.\n/** @deprecated Use `Dialog` (o nome do PrimeNG 19). */\nexport const Modal = Dialog;\n/** @deprecated Use `DialogHandle`. */\nexport type ModalHandle = DialogHandle;\n/** @deprecated Use `DialogProps`. */\nexport type ModalProps = DialogProps;\n/** @deprecated Use `DialogSize`. */\nexport type ModalSize = DialogSize;\n","import { forwardRef, useId, type HTMLAttributes, type Ref } from 'react';\nimport {\n MultiSelect as PrimeMultiSelect,\n type MultiSelectPassThroughOptions,\n type MultiSelectPassThroughTransitionType,\n} from 'primereact/multiselect';\nimport type { ChipRemoveEvent } from 'primereact/chip';\nimport { CaretDown, Check, Info, MagnifyingGlass, WarningCircle } from '@phosphor-icons/react';\nimport { Chip } from '../Chip';\nimport '../InputText/InputText.css';\nimport { juntarIds } from '../../aria';\nimport { transicaoDoPopup } from '../../popup';\nimport '../Checkbox/Checkbox.css';\nimport '../../lista.css';\nimport '../../comum.css';\nimport './MultiSelect.css';\n\n/** Type no Figma: Outline (com borda) e Filled (com fundo). */\nexport type MultiSelectVariant = 'outline' | 'filled';\n/** Size no Figma: 32, 36, 42 e 48px de altura do campo. */\nexport type MultiSelectSize = 'xsmall' | 'small' | 'medium' | 'large';\n/** Density da lista no Figma: itens de 40px (normal) ou 32px (compact). */\nexport type MultiSelectDensity = 'normal' | 'compact';\n\n/**\n * As demais props vão para o MultiSelect do Prime: as aria-* no combobox (aria-describedby soma com\n * a dica) e o resto na caixa do campo.\n */\nexport interface MultiSelectProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'defaultValue' | 'children' | 'placeholder'\n> {\n variant?: MultiSelectVariant;\n size?: MultiSelectSize;\n density?: MultiSelectDensity;\n /** Rótulo acima do campo (Label no Figma). Sem rótulo, passe `aria-label`. */\n label?: string;\n 'aria-label'?: string;\n /** Opções da lista. */\n options: unknown[];\n /** Campo da opção usado como texto (padrão: `label`). */\n optionLabel?: string;\n /** Campo da opção usado como valor; sem ele, o valor é a própria opção. */\n optionValue?: string;\n /** Valores selecionados (controlado). */\n value?: unknown[];\n onChange?: (value: unknown[]) => void;\n /** Texto do campo vazio (Field Text no Figma). */\n placeholder?: string;\n /** Mostra a busca no topo da lista (Search Filter no Figma). */\n filter?: boolean;\n filterPlaceholder?: string;\n /**\n * Quantos chips aparecem no campo; acima disso, um chip só com o resumo (Chip Group\n * \"4 itens selecionados\" no Figma), cujo X limpa a seleção.\n */\n maxChips?: number;\n /** Texto do resumo; `{0}` vira a quantidade. */\n selectedItemsLabel?: string;\n /** Nome acessível do checkbox de selecionar todos. */\n selectAllLabel?: string;\n /** Texto da lista quando a busca não encontra nada. */\n emptyFilterMessage?: string;\n /** Nome acessível do X dos chips. */\n removeLabel?: string;\n /** Dica abaixo do campo (Hint Info no Figma). */\n hint?: string;\n /** Mensagem de erro: deixa o campo no estado Error e mostra a dica de erro no lugar da dica. */\n error?: string;\n required?: boolean;\n disabled?: boolean;\n id?: string;\n name?: string;\n className?: string;\n}\n\n// Base: MultiSelect do PrimeReact no modo unstyled (abrir/fechar, teclado, seleção, filtro e\n// \"selecionar todos\" do Prime, espelhando o p-multiSelect do PrimeNG da produção). O rótulo, a\n// caixa e a dica reaproveitam o campo do InputText (.cr-field); os selecionados viram Chips do Cristal\n// pelo selectedItemTemplate, porque o Prime mostra o resumo acima do limite só como texto, e o\n// Figma o mostra como chip. A ref vai para o <input> (combobox) do Prime, que recebe o foco.\nexport const MultiSelect = forwardRef<HTMLInputElement, MultiSelectProps>(function MultiSelect(\n {\n variant = 'outline',\n size = 'large',\n density = 'normal',\n label,\n options,\n optionLabel = 'label',\n optionValue,\n value,\n onChange,\n placeholder = 'Selecionar opção',\n filter = false,\n filterPlaceholder = 'Pesquisar',\n maxChips = 3,\n selectedItemsLabel = '{0} itens selecionados',\n removeLabel = 'Remover',\n selectAllLabel = 'Selecionar todos',\n emptyFilterMessage = 'Nenhum resultado encontrado',\n hint,\n error,\n required,\n disabled,\n id,\n className,\n ...props\n },\n ref,\n) {\n const autoId = useId();\n const inputId = id ?? autoId;\n const hintId = `${inputId}-hint`;\n const supportText = error ?? hint;\n const selected = value ?? [];\n const overflow = selected.length > maxChips;\n\n const classes = [\n 'cr-field',\n `cr-field--${variant}`,\n `cr-field--${size}`,\n 'cr-multiselect',\n error && 'cr-field--error',\n disabled && 'cr-field--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const valueOf = (option: unknown) =>\n optionValue ? (option as Record<string, unknown>)[optionValue] : option;\n const labelOf = (item: unknown) => {\n const option = options.find((o) => valueOf(o) === item) ?? item;\n const text = (option as Record<string, unknown> | null)?.[optionLabel];\n return String(text ?? item);\n };\n\n // O X do chip não pode abrir/fechar a lista (o clique subiria até o campo do Prime).\n const remove = (event: ChipRemoveEvent, next: unknown[]) => {\n event.originalEvent.stopPropagation();\n onChange?.(next);\n return false;\n };\n\n const renderSelected = (item?: unknown) => {\n if (item === undefined) {\n return <span className=\"cr-multiselect__placeholder\">{placeholder}</span>;\n }\n if (overflow) {\n if (selected.indexOf(item) !== 0) return null;\n return (\n <Chip\n className=\"cr-multiselect__chip\"\n label={selectedItemsLabel.replace('{0}', String(selected.length))}\n disabled={disabled}\n onRemove={disabled ? undefined : (event) => remove(event, [])}\n removeLabel={removeLabel}\n />\n );\n }\n return (\n <Chip\n className=\"cr-multiselect__chip\"\n label={labelOf(item)}\n disabled={disabled}\n onRemove={\n disabled\n ? undefined\n : (event) =>\n remove(\n event,\n selected.filter((v) => v !== item),\n )\n }\n removeLabel={`${removeLabel} ${labelOf(item)}`}\n />\n );\n };\n\n // O checkbox interno do Prime (sem template) usa a caixa do Checkbox do Cristal; o hover e o\n // marcado são do MultiSelect (MultiSelect.css).\n const checkbox = {\n root: { className: 'cr-checkbox__control cr-multiselect__checkbox' },\n box: { className: 'cr-checkbox__box cr-multiselect__checkbox-box' },\n input: { className: 'cr-checkbox__input cr-multiselect__checkbox-input' },\n };\n\n const pt: MultiSelectPassThroughOptions = {\n // Com a lista aberta o foco vai para a busca (no body), fora da caixa: o estado Focused do\n // Figma vem do estado do Prime.\n root: (options) => {\n const open = (options as { state?: { overlayVisible?: boolean } })?.state?.overlayVisible;\n return {\n className: `cr-field__control cr-multiselect__control${open ? ' cr-multiselect__control--open' : ''}`,\n };\n },\n hiddenInputWrapper: { className: 'cr-so-leitor cr-multiselect__hidden' },\n input: {\n 'aria-describedby': juntarIds(supportText && hintId, props['aria-describedby']),\n 'aria-invalid': error ? true : undefined,\n 'aria-required': required || undefined,\n },\n labelContainer: { className: 'cr-multiselect__value' },\n label: { className: 'cr-multiselect__chips' },\n trigger: { className: 'cr-field__icon cr-multiselect__trigger' },\n panel: { className: `cr-lista cr-multiselect__panel cr-multiselect__panel--${density}` },\n header: { className: 'cr-multiselect__header' },\n headerCheckboxContainer: { className: 'cr-multiselect__select-all' },\n // O Prime repete role=checkbox na <div> em volta do <input>: o leitor de tela veria dois.\n headerCheckbox: {\n ...checkbox,\n root: { ...checkbox.root, role: undefined, 'aria-checked': undefined },\n input: { ...checkbox.input, 'aria-label': selectAllLabel },\n },\n filterContainer: { className: 'cr-multiselect__search' },\n // O filtro é um InputText do Prime, que lê o pass-through da raiz (a tipagem do Prime diverge).\n filterInput: {\n root: { className: 'cr-multiselect__search-input', 'aria-label': filterPlaceholder },\n } as never,\n closeButton: { className: 'cr-multiselect__close' },\n wrapper: { className: 'cr-lista__rolagem' },\n list: { className: 'cr-lista__itens' },\n item: (options) => {\n const context = (options as { context?: { focusedIndex?: number; index?: number } })?.context;\n const focused = context !== undefined && context.focusedIndex === context.index;\n return {\n className: `cr-lista__item cr-multiselect__item${focused ? ' cr-multiselect__item--focused' : ''}`,\n };\n },\n checkboxContainer: { className: 'cr-multiselect__item-checkbox' },\n // O item (role=option) já diz se está selecionado; o checkbox é só visual para o leitor de tela.\n // O item (role=option) já diz se está selecionado. O checkbox do Prime fica só visual: inert\n // tira o <input> do foco e do leitor de tela (tabindex=-1 e aria-hidden não bastam dentro de\n // um option), e o clique cai no item.\n checkbox: {\n ...checkbox,\n root: { ...checkbox.root, role: undefined, 'aria-checked': undefined, inert: true },\n },\n emptyMessage: { className: 'cr-multiselect__empty' },\n // Animação de entrada e saída da lista, a do Prime (comum.css).\n transition: transicaoDoPopup<MultiSelectPassThroughTransitionType>(),\n };\n\n return (\n <div className={classes}>\n {label && (\n <label className=\"cr-field__label\" htmlFor={inputId}>\n {label}\n {required && (\n <span className=\"cr-field__required\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n <PrimeMultiSelect\n unstyled\n inputId={inputId}\n inputRef={ref as Ref<HTMLSelectElement>}\n value={selected}\n options={options}\n optionLabel={optionLabel}\n optionValue={optionValue}\n onChange={(event) => onChange?.(event.value as unknown[])}\n disabled={disabled}\n invalid={Boolean(error)}\n placeholder={placeholder}\n selectedItemTemplate={renderSelected}\n filter={filter}\n filterPlaceholder={filterPlaceholder}\n // 7 itens visíveis antes da rolagem, como no Figma (40px no normal, 32px no compact).\n scrollHeight={density === 'compact' ? '224px' : '280px'}\n emptyFilterMessage={emptyFilterMessage}\n filterIcon={\n <span className=\"cr-multiselect__search-icon\" aria-hidden=\"true\">\n <MagnifyingGlass />\n </span>\n }\n dropdownIcon={<CaretDown aria-hidden=\"true\" />}\n checkboxIcon={<Check aria-hidden=\"true\" />}\n itemCheckboxIcon={<Check aria-hidden=\"true\" />}\n pt={pt}\n {...props}\n />\n {supportText && (\n <p id={hintId} className={`cr-field__hint${error ? ' cr-field__hint--error' : ''}`}>\n <span className=\"cr-field__hint-icon\" aria-hidden=\"true\">\n {error ? <WarningCircle /> : <Info />}\n </span>\n {supportText}\n </p>\n )}\n </div>\n );\n});\n","import {\n cloneElement,\n forwardRef,\n useState,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { TabMenu } from 'primereact/tabmenu';\nimport type { MenuItem } from 'primereact/menuitem';\nimport { ArrowLeft, ArrowsInSimple, ArrowsOutSimple } from '@phosphor-icons/react';\nimport { IconButton } from '../IconButton';\nimport { Tag } from '../Tag';\nimport './PageHeader.css';\n\n/**\n * Type no Figma: o estilo das abas. Primary tem o ícone em círculo e o fundo azul na aba ativa;\n * Secondary é só o texto, com o sublinhado na ativa.\n */\nexport type PageHeaderVariant = 'primary' | 'secondary';\n\n/** Uma aba (.Page Header Tab Item ou .Page Header Tab Secondary Item no Figma). */\nexport interface PageHeaderTab {\n label: string;\n /** Ícone de 16px. No primary fica no círculo de 32px; no secondary é opcional. */\n icon?: ReactNode;\n disabled?: boolean;\n}\n\nexport interface PageHeaderProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Título da página (Page Title no Figma). */\n title: string;\n /** Padrão: primary. */\n variant?: PageHeaderVariant;\n /** Mostra o botão de voltar antes do título (Show Back Button no Figma). */\n onBack?: () => void;\n backLabel?: string;\n /** Texto da Tag depois do título (Show Tag no Figma). */\n tag?: ReactNode;\n /** Segment Control das ferramentas (Show Segment Control no Figma): um `<SelectButton>`. */\n segmentControl?: ReactNode;\n /** Botões das ferramentas (Show Buttons no Figma), 8px entre eles. */\n actions?: ReactNode;\n /**\n * Mostra o botão de expandir, o último das ferramentas. Recebe o novo estado: true ao expandir,\n * false ao recolher.\n */\n onExpand?: (expanded: boolean) => void;\n /** Expandido (controlado). Sem ele, o PageHeader alterna sozinho a cada clique. */\n expanded?: boolean;\n /** Nome do botão recolhido (ArrowsOutSimple). */\n expandLabel?: string;\n /** Nome do botão expandido (ArrowsInSimple). */\n collapseLabel?: string;\n /** Abas abaixo do título (Show Tabs no Figma). */\n tabs?: PageHeaderTab[];\n /** Aba ativa (controlado). Sem ela, o PageHeader controla sozinho. */\n activeTab?: number;\n onTabChange?: (index: number) => void;\n /** Nome das abas para o leitor de tela. Padrão: o título. */\n tabsLabel?: string;\n}\n\n// O PrimeReact (e o PrimeNG da produção) não tem cabeçalho de página: o Cristal monta\n// o do Figma com o IconButton (voltar e expandir), a Tag, o SelectButton recebido e, nas abas,\n// o TabMenu do PrimeReact no modo unstyled (o p-tabMenu do PrimeNG): menubar com as setas, Home e\n// End do Prime. O conteúdo de cada aba vem do template do Prime, com o ícone e o texto do Figma, e\n// a ativa ganha aria-current. Fluido e responsivo pela própria largura (PageHeader.css).\nexport const PageHeader = forwardRef<HTMLDivElement, PageHeaderProps>(function PageHeader(\n {\n title,\n variant = 'primary',\n onBack,\n backLabel = 'Voltar',\n tag,\n segmentControl,\n actions,\n onExpand,\n expanded,\n expandLabel = 'Expandir',\n collapseLabel = 'Recolher',\n tabs,\n activeTab,\n onTabChange,\n tabsLabel,\n className,\n ...props\n },\n ref,\n) {\n // Com onTabChange o Prime trata a aba ativa como controlada: sem activeTab, o PageHeader guarda.\n const [interna, setInterna] = useState(0);\n const ativa = activeTab ?? interna;\n // O expandir alterna o ícone: ArrowsOutSimple para expandir, ArrowsInSimple para recolher.\n const [expandidoInterno, setExpandidoInterno] = useState(false);\n const expandido = expanded ?? expandidoInterno;\n\n const tools = segmentControl || actions;\n\n const tabTemplate = (tab: PageHeaderTab) =>\n // O TabMenu também passa o index da aba nas opções, além do que o tipo do MenuItem declara.\n function TabContent(item: MenuItem, options: unknown) {\n const { element, index } = options as { element: ReactElement; index: number };\n const active = index === ativa;\n return cloneElement(\n element,\n { 'aria-current': active ? 'page' : undefined } as object,\n <>\n {(variant === 'primary' || tab.icon) && (\n <span className=\"cr-page-header__tab-icon\" aria-hidden=\"true\">\n {tab.icon}\n </span>\n )}\n <span className=\"cr-page-header__tab-label\">{item.label}</span>\n </>,\n );\n };\n\n const classes = ['cr-page-header', `cr-page-header--${variant}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div ref={ref} className={classes} {...props}>\n <div\n className={`cr-page-header__title-group${tools ? ' cr-page-header__title-group--tools' : ''}`}\n >\n <div className=\"cr-page-header__title-text\">\n {onBack && (\n <IconButton\n variant=\"tertiary\"\n size=\"small\"\n icon={<ArrowLeft />}\n aria-label={backLabel}\n onClick={onBack}\n />\n )}\n <h1 className=\"cr-page-header__title\">{title}</h1>\n {tag && <Tag className=\"cr-page-header__tag\">{tag}</Tag>}\n </div>\n {tools && (\n <div className=\"cr-page-header__tools\">\n {segmentControl && <div className=\"cr-page-header__segment\">{segmentControl}</div>}\n {actions && <div className=\"cr-page-header__actions\">{actions}</div>}\n </div>\n )}\n {onExpand && (\n <IconButton\n className=\"cr-page-header__expand\"\n variant=\"tertiary\"\n size=\"medium\"\n icon={expandido ? <ArrowsInSimple /> : <ArrowsOutSimple />}\n aria-label={expandido ? collapseLabel : expandLabel}\n onClick={() => {\n setExpandidoInterno(!expandido);\n onExpand(!expandido);\n }}\n />\n )}\n </div>\n {tabs && tabs.length > 0 && (\n <TabMenu\n unstyled\n model={tabs.map((tab) => ({\n label: tab.label,\n disabled: tab.disabled,\n template: tabTemplate(tab),\n }))}\n activeIndex={ativa}\n onTabChange={(event) => {\n setInterna(event.index);\n onTabChange?.(event.index);\n }}\n pt={{\n root: { className: 'cr-page-header__tabs' },\n menu: { className: 'cr-page-header__tab-list', 'aria-label': tabsLabel ?? title },\n menuitem: { className: 'cr-page-header__tab-item' },\n action: { className: 'cr-page-header__tab' },\n inkbar: { className: 'cr-page-header__inkbar' },\n }}\n />\n )}\n </div>\n );\n});\n","import { forwardRef, useCallback, useId, useState, type HTMLAttributes, type Ref } from 'react';\nimport {\n Dropdown,\n type DropdownPassThroughOptions,\n type DropdownPassThroughTransitionType,\n} from 'primereact/dropdown';\nimport { CaretDown, CaretUp, Info, WarningCircle } from '@phosphor-icons/react';\nimport '../InputText/InputText.css';\nimport { juntarIds } from '../../aria';\nimport '../../lista.css';\nimport { transicaoDoPopup, seguirLado } from '../../popup';\nimport '../../comum.css';\nimport './Select.css';\n\n/** Type no Figma: Outline (com borda) e Filled (com fundo). */\nexport type SelectVariant = 'outline' | 'filled';\n/** Size no Figma: 32, 36, 42 e 48px de altura do campo. */\nexport type SelectSize = 'xsmall' | 'small' | 'medium' | 'large';\n\n/**\n * As demais props vão para o Dropdown do Prime: as aria-* no combobox (aria-describedby soma com a\n * dica) e o resto na caixa do campo.\n */\nexport interface SelectProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'defaultValue' | 'children' | 'placeholder'\n> {\n variant?: SelectVariant;\n size?: SelectSize;\n /** Rótulo acima do campo (Label no Figma). Sem rótulo, passe `aria-label`. */\n label?: string;\n 'aria-label'?: string;\n /** Opções da lista. */\n options: unknown[];\n /** Campo da opção usado como texto (padrão: `label`). */\n optionLabel?: string;\n /** Campo da opção usado como valor; sem ele, o valor é a própria opção. */\n optionValue?: string;\n /** Valor selecionado (controlado). */\n value?: unknown;\n onChange?: (value: unknown) => void;\n /** Texto do campo vazio (Field Text no Figma). */\n placeholder?: string;\n /** Dica abaixo do campo (Hint Info no Figma). */\n hint?: string;\n /** Mensagem de erro: deixa o campo no estado Error e mostra a dica de erro no lugar da dica. */\n error?: string;\n required?: boolean;\n disabled?: boolean;\n /** Vai no campo (combobox). */\n id?: string;\n name?: string;\n className?: string;\n}\n\n// Base: Dropdown do PrimeReact no modo unstyled (abrir/fechar, teclado, seleção e posição da\n// lista do Prime, espelhando o p-dropdown do PrimeNG da produção). O rótulo, a caixa e a dica\n// reaproveitam o campo do InputText (.cr-field) e a lista segue a Dropdown List do Menu. O Dropdown do\n// Prime não marca o campo como combobox: o Cristal completa (role, aria-expanded e aria-controls).\n// Pelo teclado, o Prime leva o foco para o item (role=option), que o leitor de tela anuncia. A\n// ref vai para o campo, que recebe o foco.\nexport const Select = forwardRef<HTMLInputElement, SelectProps>(function Select(\n {\n variant = 'outline',\n size = 'large',\n label,\n 'aria-label': ariaLabel,\n options,\n optionLabel = 'label',\n optionValue,\n value,\n onChange,\n placeholder = 'Selecione uma opção',\n hint,\n error,\n required,\n disabled,\n id,\n name,\n className,\n ...props\n },\n ref,\n) {\n const autoId = useId();\n const inputId = id ?? autoId;\n const hintId = `${inputId}-hint`;\n const listId = `${inputId}-list`;\n const supportText = error ?? hint;\n const [open, setOpen] = useState(false);\n\n const setInputRef = useCallback(\n (input: HTMLInputElement | null) => {\n input?.setAttribute('role', 'combobox');\n if (typeof ref === 'function') ref(input);\n else if (ref) ref.current = input;\n },\n [ref],\n );\n\n const classes = [\n 'cr-field',\n `cr-field--${variant}`,\n `cr-field--${size}`,\n 'cr-select',\n error && 'cr-field--error',\n disabled && 'cr-field--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const pt: DropdownPassThroughOptions = {\n root: {\n className: `cr-field__control cr-select__control${open ? ' cr-select__control--open' : ''}`,\n // O Prime aponta para um item mesmo sem destaque (dropdownItem_-1); o foco vai no item.\n 'aria-activedescendant': undefined,\n },\n // O <select> escondido do Prime só existe para formulários: fora da árvore de acessibilidade.\n select: { 'aria-hidden': true },\n hiddenSelectedMessage: { className: 'cr-so-leitor cr-select__hidden' },\n // O Prime usa a mesma chave no texto do campo e no combobox escondido.\n input: { className: 'cr-select__value' },\n trigger: { className: 'cr-field__icon cr-select__trigger', 'aria-hidden': true },\n panel: { className: 'cr-lista cr-select__panel' },\n // Animação de entrada e saída (a do Prime) e o lado da lista, medido logo depois de o Prime\n // posicionar.\n transition: transicaoDoPopup<DropdownPassThroughTransitionType>(() =>\n seguirLado(\n document.getElementById(listId)?.closest('.cr-select__panel'),\n document.getElementById(inputId)?.closest('.cr-select__control'),\n ),\n ),\n wrapper: { className: 'cr-lista__rolagem cr-select__wrapper' },\n list: { className: 'cr-lista__itens cr-select__list', id: listId },\n // Selecionado e em foco (teclado) pelo contexto do pt, a API pública do Prime (não data-p-*).\n item: ({ context }: { context: { selected: boolean; focused: boolean } }) => ({\n className: [\n 'cr-lista__item cr-select__item',\n context.selected && 'cr-lista__item--selecionado',\n context.focused && 'cr-lista__item--focado',\n ]\n .filter(Boolean)\n .join(' '),\n }),\n emptyMessage: { className: 'cr-lista__item cr-select__item cr-select__empty' },\n };\n\n return (\n <div className={classes}>\n {label && (\n <label className=\"cr-field__label\" htmlFor={inputId}>\n {label}\n {required && (\n <span className=\"cr-field__required\" aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n <Dropdown\n {...props}\n unstyled\n inputId={inputId}\n focusInputRef={setInputRef as unknown as Ref<HTMLInputElement>}\n value={value}\n options={options}\n optionLabel={optionLabel}\n optionValue={optionValue}\n onChange={(event) => onChange?.(event.value)}\n onShow={() => setOpen(true)}\n onHide={() => setOpen(false)}\n disabled={disabled}\n required={required}\n name={name}\n invalid={Boolean(error)}\n placeholder={placeholder}\n valueTemplate={(option: unknown) =>\n option == null ? (\n <span className=\"cr-select__placeholder\">{placeholder}</span>\n ) : (\n String((option as Record<string, unknown>)[optionLabel] ?? option)\n )\n }\n // 5 itens visíveis antes da rolagem, como no Figma (itens de 37px).\n scrollHeight=\"185px\"\n dropdownIcon={<CaretDown />}\n collapseIcon={<CaretUp />}\n aria-label={label ? undefined : ariaLabel}\n aria-expanded={open}\n aria-controls={open ? listId : undefined}\n aria-describedby={juntarIds(supportText && hintId, props['aria-describedby'])}\n aria-invalid={error ? true : undefined}\n aria-required={required || undefined}\n pt={pt}\n />\n {supportText && (\n <p id={hintId} className={`cr-field__hint${error ? ' cr-field__hint--error' : ''}`}>\n <span className=\"cr-field__hint-icon\" aria-hidden=\"true\">\n {error ? <WarningCircle /> : <Info />}\n </span>\n {supportText}\n </p>\n )}\n </div>\n );\n});\n","import {\n forwardRef,\n useImperativeHandle,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n type SyntheticEvent,\n} from 'react';\nimport {\n Paginator as PrimePaginator,\n type PaginatorChangeEvent,\n type PaginatorPageLinksOptions,\n type PaginatorTemplateOptions,\n type PaginatorRowsPerPageDropdownOptions,\n} from 'primereact/paginator';\nimport { CaretDoubleLeft, CaretDoubleRight, CaretLeft, CaretRight } from '@phosphor-icons/react';\nimport { Select } from '../Select';\nimport './Paginator.css';\n\n/** O que o onPageChange recebe (o mesmo evento do Prime). */\nexport interface PaginatorPageChangeEvent {\n /** Índice do primeiro item da página. */\n first: number;\n /** Itens por página. */\n rows: number;\n /** Página, a partir de 0. */\n page: number;\n pageCount: number;\n}\n\nexport interface PaginatorProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n totalRecords: number;\n /** Índice do primeiro item da página (controlado). Sem ele, o Paginator controla sozinho. */\n first?: number;\n /** Itens por página (controlado). Padrão: o primeiro de rowsPerPageOptions, ou 10. */\n rows?: number;\n /** Opções do Select de itens por página; sem elas, o Select não aparece. */\n rowsPerPageOptions?: number[];\n /** Quantos números de página aparecem. Padrão: 5, como no Figma. */\n pageLinkSize?: number;\n onPageChange?: (event: PaginatorPageChangeEvent) => void;\n /** Nome do Select para o leitor de tela. */\n rowsPerPageLabel?: string;\n id?: string;\n className?: string;\n}\n\n// Seta (.Paginator Arrows no Figma), no lugar do botão do Prime: o Prime entrega o clique e se\n// ela está desabilitada (nas pontas).\nconst seta =\n (label: string, icon: ReactNode) =>\n (options: { onClick: (event: SyntheticEvent) => void; disabled: boolean }) => (\n <button\n type=\"button\"\n className=\"cr-paginator__arrow\"\n aria-label={label}\n disabled={options.disabled}\n onClick={options.onClick}\n >\n {icon}\n </button>\n );\n\n// Template dos botões e do Select, também usado pelo paginador da Table (o paginator do DataTable\n// do Prime aceita o mesmo template).\nexport const paginatorTemplate = (rowsPerPageLabel: string): PaginatorTemplateOptions => ({\n layout: 'FirstPageLink PrevPageLink PageLinks NextPageLink LastPageLink RowsPerPageDropdown',\n FirstPageLink: seta('Primeira página', <CaretDoubleLeft aria-hidden=\"true\" />),\n PrevPageLink: seta('Página anterior', <CaretLeft aria-hidden=\"true\" />),\n NextPageLink: seta('Próxima página', <CaretRight aria-hidden=\"true\" />),\n LastPageLink: seta('Última página', <CaretDoubleRight aria-hidden=\"true\" />),\n PageLinks: (options: PaginatorPageLinksOptions) => {\n const ativa = options.page === options.currentPage;\n return (\n <button\n type=\"button\"\n className=\"cr-paginator__page\"\n aria-label={`Página ${options.page + 1}`}\n aria-current={ativa ? 'page' : undefined}\n onClick={options.onClick}\n >\n {options.page + 1}\n </button>\n );\n },\n // O Prime chama o template mesmo sem rowsPerPageOptions.\n RowsPerPageDropdown: (options: PaginatorRowsPerPageDropdownOptions) =>\n options.options.length > 0 && (\n <Select\n className=\"cr-paginator__rows\"\n size=\"medium\"\n aria-label={rowsPerPageLabel}\n options={options.options}\n optionValue=\"value\"\n value={options.value}\n // O Prime lê o número de itens no value (o tipo dele diz string).\n onChange={(value) => options.onChange({ value } as unknown as PaginatorChangeEvent)}\n />\n ),\n});\n\n// Base: Paginator do PrimeReact no modo unstyled (o p-paginator do PrimeNG da produção): a conta\n// das páginas, a janela de números, as setas desabilitadas nas pontas e a volta à primeira página\n// ao trocar os itens por página são do Prime. Pelo template do Prime, o Cristal desenha os botões\n// do Figma (setas com os Carets e os números em círculo), com nomes em português, e troca o\n// Dropdown do Prime pelo Select do Cristal, como no Figma. A ref entrega a raiz.\nexport const Paginator = forwardRef<HTMLDivElement, PaginatorProps>(function Paginator(\n {\n totalRecords,\n first,\n rows,\n rowsPerPageOptions,\n pageLinkSize = 5,\n onPageChange,\n rowsPerPageLabel = 'Itens por página',\n id,\n className,\n ...props\n },\n ref,\n) {\n const primeRef = useRef<PrimePaginator>(null);\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLDivElement);\n\n // O Paginator do Prime só muda de página pelas props: sem first e rows, o Cristal guarda.\n const [interno, setInterno] = useState({\n first: 0,\n rows: rowsPerPageOptions?.[0] ?? 10,\n });\n const atual = { first: first ?? interno.first, rows: rows ?? interno.rows };\n\n return (\n <PrimePaginator\n {...props}\n unstyled\n ref={primeRef}\n id={id}\n totalRecords={totalRecords}\n first={atual.first}\n rows={atual.rows}\n rowsPerPageOptions={rowsPerPageOptions}\n pageLinkSize={pageLinkSize}\n onPageChange={(event) => {\n setInterno({ first: event.first, rows: event.rows });\n onPageChange?.(event);\n }}\n template={paginatorTemplate(rowsPerPageLabel)}\n pt={{\n root: { className: ['cr-paginator', className].filter(Boolean).join(' ') },\n pages: { className: 'cr-paginator__pages' },\n }}\n />\n );\n});\n","import { forwardRef, useImperativeHandle, useRef, type HTMLAttributes } from 'react';\nimport { Panel as PrimePanel } from 'primereact/panel';\nimport './Panel.css';\n\n// O onToggle nativo da <div> colide com o do Panel do Prime, que o Figma não usa.\nexport type PanelProps = Omit<HTMLAttributes<HTMLDivElement>, 'onToggle'>;\n\n// Base: Panel do PrimeReact no modo unstyled (o p-panel do PrimeNG da produção). No Figma o Panel é\n// só o contêiner da seção da página, com o conteúdo num slot e sem cabeçalho: o Cristal não repassa\n// header, toggleable nem footer do Prime, e o conteúdo vai em children. Sem cabeçalho, o Prime\n// deixaria a região de conteúdo apontando para um título que não existe: o Cristal tira o role e o\n// aria-labelledby (para nomear o Panel como região, passe role=\"region\" e aria-label).\nexport const Panel = forwardRef<HTMLDivElement, PanelProps>(function Panel(\n { className, style, children, ...props },\n ref,\n) {\n // A ref do Prime é um objeto com getElement(); a do Cristal entrega o próprio elemento.\n const primeRef = useRef<PrimePanel>(null);\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLDivElement);\n\n return (\n <PrimePanel\n unstyled\n ref={primeRef}\n // No unstyled, className e style do Panel do Prime não chegam ao elemento; vão pelo pt.\n pt={{\n root: { className: ['cr-panel', className].filter(Boolean).join(' '), style },\n toggleableContent: {\n className: 'cr-panel__body',\n role: undefined,\n 'aria-labelledby': undefined,\n },\n content: { className: 'cr-panel__content' },\n }}\n {...props}\n >\n {children}\n </PrimePanel>\n );\n});\n","import {\n forwardRef,\n useId,\n useImperativeHandle,\n useRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n type UIEvent,\n} from 'react';\nimport { ScrollPanel as PrimeScrollPanel } from 'primereact/scrollpanel';\nimport './ScrollPanel.css';\n\nexport interface ScrollPanelProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n children?: ReactNode;\n /** O que a área mostra, para o leitor de tela (ex.: \"Histórico da carga\"). */\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n /** Dê uma altura (ou max-height) para a área rolar. */\n style?: CSSProperties;\n id?: string;\n className?: string;\n}\n\nconst porcentagem = (posicao: number, total: number, visivel: number) =>\n total > visivel ? Math.round((posicao / (total - visivel)) * 100) : 0;\n\n// Base: ScrollPanel do PrimeReact no modo unstyled (o p-scrollPanel do PrimeNG da produção): o\n// Prime esconde a barra nativa e desenha as dele, que acompanham a rolagem e podem ser arrastadas.\n// Visual da Scrollbar do Figma: 8px, polegar fill/neutral/subtle, trilho transparente. O Prime\n// deixa as barras apontando (aria-controls) para um id que o conteúdo não tem, com os valores\n// trocados e em pixels, e o conteúdo que rola fora do Tab: o Cristal dá o foco ao conteúdo (que\n// rola pelo teclado como qualquer área nativa) e deixa as barras só para o mouse, com os valores\n// em porcentagem. A ref entrega a raiz.\nexport const ScrollPanel = forwardRef<HTMLDivElement, ScrollPanelProps>(function ScrollPanel(\n {\n children,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n style,\n id,\n className,\n ...props\n },\n ref,\n) {\n const primeRef = useRef<PrimeScrollPanel>(null);\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLDivElement);\n const contentId = `${useId()}-content`;\n const [posicao, setPosicao] = useState({ x: 0, y: 0 });\n\n const aoRolar = (event: UIEvent<HTMLDivElement>) => {\n const el = event.currentTarget;\n setPosicao({\n x: porcentagem(el.scrollLeft, el.scrollWidth, el.clientWidth),\n y: porcentagem(el.scrollTop, el.scrollHeight, el.clientHeight),\n });\n };\n\n const barra = (orientacao: 'horizontal' | 'vertical', valor: number) => ({\n className: `cr-scrollpanel__bar cr-scrollpanel__bar--${orientacao}`,\n tabIndex: -1,\n 'aria-controls': contentId,\n 'aria-valuenow': valor,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n });\n\n // No unstyled, className e style do ScrollPanel do Prime não chegam ao elemento; vão pelo pt.\n // O Prime lê as barras como `barx` e `bary`, mas a tipagem dele as chama de barX e barY: o objeto\n // fica numa constante para o TypeScript aceitar as chaves que o Prime de fato usa.\n const pt = {\n root: { className: ['cr-scrollpanel', className].filter(Boolean).join(' '), style },\n wrapper: { className: 'cr-scrollpanel__wrapper' },\n content: {\n id: contentId,\n className: 'cr-scrollpanel__content',\n tabIndex: 0,\n role: 'region',\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n onScroll: aoRolar,\n },\n barx: barra('horizontal', posicao.x),\n bary: barra('vertical', posicao.y),\n };\n\n return (\n <PrimeScrollPanel {...props} unstyled ref={primeRef} id={id} pt={pt}>\n {children}\n </PrimeScrollPanel>\n );\n});\n","import {\n forwardRef,\n useImperativeHandle,\n useRef,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { SelectButton as PrimeSelectButton } from 'primereact/selectbutton';\nimport './SelectButton.css';\n\n/**\n * No Figma: Primary é o Header Segment Control (pílula em fill/brand/subtlest) e Secondary é o\n * Segment Control (cinza, com ícones).\n */\nexport type SelectButtonVariant = 'primary' | 'secondary';\n\nexport interface SelectButtonOption {\n label: string;\n value: string | number;\n /** Ícone de 16px antes do texto (o Secondary do Figma usa). */\n icon?: ReactNode;\n disabled?: boolean;\n}\n\nexport interface SelectButtonProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n // unselectable: no Prime é o \"pode desmarcar\" (boolean), não o atributo HTML.\n 'children' | 'onChange' | 'defaultValue' | 'unselectable'\n> {\n options: SelectButtonOption[];\n /** Valor do segmento ativo (controlado). */\n value?: string | number;\n onChange?: (value: string | number) => void;\n variant?: SelectButtonVariant;\n /** O que o grupo controla, para o leitor de tela (ex.: \"Visualização\"). */\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n disabled?: boolean;\n id?: string;\n className?: string;\n}\n\n// Base: SelectButton do PrimeReact no modo unstyled (o p-selectButton do PrimeNG da produção):\n// grupo de botões com aria-pressed e as setas do teclado do Prime; o Cristal soma o Enter à barra\n// de espaço. Sempre há um segmento ativo (allowEmpty desligado). O visual vem do\n// SelectButton.css. A ref entrega o grupo.\nexport const SelectButton = forwardRef<HTMLDivElement, SelectButtonProps>(function SelectButton(\n {\n options,\n value,\n onChange,\n variant = 'primary',\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n disabled,\n id,\n className,\n ...props\n },\n ref,\n) {\n const primeRef = useRef<PrimeSelectButton>(null);\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLDivElement);\n\n const classes = ['cr-segment', `cr-segment--${variant}`, className].filter(Boolean).join(' ');\n\n return (\n <PrimeSelectButton\n {...props}\n unstyled\n ref={primeRef}\n id={id}\n options={options}\n optionLabel=\"label\"\n optionValue=\"value\"\n optionDisabled=\"disabled\"\n value={value}\n onChange={(event) => {\n if (event.value != null) onChange?.(event.value as string | number);\n }}\n allowEmpty={false}\n disabled={disabled}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n itemTemplate={(option: SelectButtonOption) => (\n <>\n {option.icon && (\n <span className=\"cr-segment__icon\" aria-hidden=\"true\">\n {option.icon}\n </span>\n )}\n <span className=\"cr-segment__label\">{option.label}</span>\n </>\n )}\n pt={{\n root: { className: classes },\n button: {\n className: 'cr-segment__item',\n // O Prime só ativa com a barra de espaço; um role=button responde também ao Enter.\n onKeyDown: (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Enter') event.currentTarget.click();\n },\n },\n }}\n />\n );\n});\n\n// Nomes antigos (do Figma), mantidos até a próxima versão: o nome do Cristal é o do PrimeNG 19.\n/** @deprecated Use `SelectButton` (o nome do PrimeNG 19). */\nexport const SegmentControl = SelectButton;\n/** @deprecated Use `SelectButtonOption`. */\nexport type SegmentControlOption = SelectButtonOption;\n/** @deprecated Use `SelectButtonProps`. */\nexport type SegmentControlProps = SelectButtonProps;\n/** @deprecated Use `SelectButtonVariant`. */\nexport type SegmentControlVariant = SelectButtonVariant;\n","import { forwardRef, useImperativeHandle, useRef, type HTMLAttributes } from 'react';\nimport { Skeleton as PrimeSkeleton } from 'primereact/skeleton';\nimport './Skeleton.css';\n\n/** Formato do bloco. */\nexport type SkeletonShape = 'rectangle' | 'circle';\n\nexport interface SkeletonProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Padrão: rectangle. */\n shape?: SkeletonShape;\n /** Largura (CSS). Padrão: 100%. */\n width?: string;\n /** Altura (CSS). Padrão: 16px. */\n height?: string;\n /** Largura e altura iguais (para o círculo ou um quadrado). */\n size?: string;\n /** Brilho que passa pelo bloco. Padrão: true (parado com prefers-reduced-motion). */\n animated?: boolean;\n}\n\n// Base: Skeleton do PrimeReact no modo unstyled (o p-skeleton do PrimeNG da produção): o bloco,\n// as medidas e o aria-hidden são do Prime. Provisório: a página Skeleton do Figma \"Cristal - Core\n// Components | Web\" ainda não tem o componente, então o visual segue o tema do Prime com tokens\n// (fundo fill/neutral/subtlest, raio x-small e o brilho de 1,2s). A ref entrega o bloco.\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(function Skeleton(\n {\n shape = 'rectangle',\n width = '100%',\n height = '16px',\n size,\n animated = true,\n className,\n ...props\n },\n ref,\n) {\n const primeRef = useRef<PrimeSkeleton>(null);\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLDivElement);\n\n const classes = [\n 'cr-skeleton',\n `cr-skeleton--${shape}`,\n animated && 'cr-skeleton--animated',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <PrimeSkeleton\n unstyled\n ref={primeRef}\n shape={shape}\n width={width}\n height={height}\n size={size}\n animation={animated ? 'wave' : 'none'}\n pt={{ root: { ...props, className: classes } }}\n />\n );\n});\n","import {\n forwardRef,\n useId,\n type CSSProperties,\n type InputHTMLAttributes,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { InputSwitch, type InputSwitchChangeEvent } from 'primereact/inputswitch';\nimport '../../comum.css';\nimport './ToggleSwitch.css';\n\n/** Size no Figma: Medium (48x28) e Small (32x20). */\nexport type ToggleSwitchSize = 'medium' | 'small';\n/** Label Position no Figma: lado do rótulo em relação ao switch. */\nexport type ToggleSwitchLabelPosition = 'right' | 'left';\n\n/** As demais props vão no <input> (aria-describedby, onBlur, data-*...); className e style, na raiz. */\nexport interface ToggleSwitchProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n | 'onChange'\n | 'value'\n | 'checked'\n | 'defaultChecked'\n | 'defaultValue'\n | 'size'\n | 'type'\n | 'children'\n> {\n /** Texto ao lado do switch (Label no Figma). Sem rótulo visível, vira o nome acessível. */\n label: ReactNode;\n /** Mostra o rótulo. Padrão: true. */\n showLabel?: boolean;\n /** Padrão: right. */\n labelPosition?: ToggleSwitchLabelPosition;\n /** Padrão: medium. */\n size?: ToggleSwitchSize;\n checked?: boolean;\n onChange?: (event: InputSwitchChangeEvent) => void;\n disabled?: boolean;\n name?: string;\n /** Vai no <input>. */\n id?: string;\n className?: string;\n style?: CSSProperties;\n}\n\n// Base: InputSwitch do PrimeReact no modo unstyled (o p-inputSwitch do PrimeNG da produção), com o\n// <input role=\"switch\"> nativo por cima do trilho. O Prime também põe role=\"checkbox\" na div de\n// fora, o que aninha dois controles: o Cristal tira esse role. O rótulo é um <label> ligado ao\n// input. A ref entrega o <input>.\nexport const ToggleSwitch = forwardRef<HTMLInputElement, ToggleSwitchProps>(function ToggleSwitch(\n {\n label,\n showLabel = true,\n labelPosition = 'right',\n size = 'medium',\n checked = false,\n onChange,\n disabled,\n name,\n id,\n className,\n style,\n ...props\n },\n ref,\n) {\n const autoId = useId();\n const inputId = id ?? autoId;\n\n const classes = [\n 'cr-switch',\n `cr-switch--${size}`,\n `cr-switch--label-${labelPosition}`,\n disabled && 'cr-switch--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={classes} style={style}>\n <InputSwitch\n unstyled\n inputRef={ref as Ref<HTMLInputElement>}\n inputId={inputId}\n checked={checked}\n onChange={onChange}\n disabled={disabled}\n name={name}\n pt={{\n // Ligado pela prop do Cristal, não pelo atributo interno do Prime (data-p-highlight).\n root: {\n className: `cr-switch__control${checked ? ' cr-switch__control--checked' : ''}`,\n role: undefined,\n 'aria-checked': undefined,\n },\n input: { ...props, className: 'cr-switch__input' },\n slider: { className: 'cr-switch__track' },\n }}\n />\n {/* Sem rótulo visível, o <label> continua no DOM (escondido) e dá o nome ao input. */}\n <label\n className={`cr-switch__label${showLabel ? '' : ' cr-switch__label--hidden cr-so-leitor'}`}\n htmlFor={inputId}\n >\n {label}\n </label>\n </div>\n );\n});\n\n// Nomes antigos (do Figma), mantidos até a próxima versão: o nome do Cristal é o do PrimeNG 19.\n/** @deprecated Use `ToggleSwitch` (o nome do PrimeNG 19). */\nexport const Switch = ToggleSwitch;\n/** @deprecated Use `ToggleSwitchLabelPosition`. */\nexport type SwitchLabelPosition = ToggleSwitchLabelPosition;\n/** @deprecated Use `ToggleSwitchProps`. */\nexport type SwitchProps = ToggleSwitchProps;\n/** @deprecated Use `ToggleSwitchSize`. */\nexport type SwitchSize = ToggleSwitchSize;\n","import {\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n useImperativeHandle,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport {\n TabView,\n TabPanel as PrimeTabPanel,\n type TabPanelHeaderTemplateOptions,\n} from 'primereact/tabview';\nimport { X } from '@phosphor-icons/react';\nimport { Badge } from '../Badge';\nimport './Tabs.css';\n\n/** Uma aba (.Tab Item no Figma) e o conteúdo dela. */\nexport interface TabPanelProps {\n /** Texto da aba (Label no Figma). */\n header: string;\n /** Ícone antes do texto (Leading Icon no Figma). */\n leftIcon?: ReactNode;\n /** Contador depois do texto (Badge no Figma). */\n badge?: ReactNode;\n /** Mostra o X (Tab Btn no Figma) e é chamado ao fechar a aba (clique no X ou Delete na aba). */\n onClose?: () => void;\n disabled?: boolean;\n children?: ReactNode;\n}\n\n/** Só descreve a aba: quem desenha é o Tabs. */\nexport function TabPanel(_props: TabPanelProps): null {\n return null;\n}\n\nexport interface TabsProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Aba ativa (controlado). Sem ela, o Tabs controla sozinho. */\n activeIndex?: number;\n onTabChange?: (index: number) => void;\n /** As abas, como `<TabPanel>`. */\n children: ReactNode;\n id?: string;\n className?: string;\n}\n\n// Base: TabView do PrimeReact no modo unstyled (o p-tabView do PrimeNG da produção): tablist, abas,\n// painéis e o teclado (setas, Home e End) do Prime. Cada aba vem de um <TabPanel> do Cristal, que\n// vira o TabPanel do Prime com o desenho do Figma (ícone, texto, Badge e X) pelo headerTemplate. O\n// X do Prime fica dentro do role=tab como um segundo controle; o do Cristal é só visual (clique) e,\n// pelo teclado, a aba fecha com Delete (anunciado pelo aria-keyshortcuts). A ref entrega a raiz.\nexport const Tabs = forwardRef<HTMLDivElement, TabsProps>(function Tabs(\n { activeIndex, onTabChange, children, id, className, ...props },\n ref,\n) {\n const primeRef = useRef<TabView>(null);\n useImperativeHandle(ref, () => primeRef.current?.getElement() as HTMLDivElement);\n // Com onTabChange o Prime trata a aba ativa como controlada: sem activeIndex, o Tabs guarda.\n const [interno, setInterno] = useState(0);\n const ativa = activeIndex ?? interno;\n\n const panels = Children.toArray(children).filter((child): child is ReactElement<TabPanelProps> =>\n isValidElement(child),\n );\n\n const header = (panel: TabPanelProps) =>\n function TabHeader(options: TabPanelHeaderTemplateOptions) {\n const element = options.element as ReactElement<{\n onKeyDown?: (event: KeyboardEvent) => void;\n }>;\n const close = panel.onClose;\n return cloneElement(\n element,\n {\n 'aria-keyshortcuts': close ? 'Delete' : undefined,\n onKeyDown: (event: KeyboardEvent) => {\n if (close && event.key === 'Delete') close();\n else element.props.onKeyDown?.(event);\n },\n } as object,\n <>\n {panel.leftIcon && (\n <span className=\"cr-tabs__icon\" aria-hidden=\"true\">\n {panel.leftIcon}\n </span>\n )}\n <span className=\"cr-tabs__label\">{panel.header}</span>\n {panel.badge !== undefined && <Badge className=\"cr-tabs__badge\">{panel.badge}</Badge>}\n {close && (\n // O X é só para o mouse: pelo teclado a aba fecha com Delete (aria-keyshortcuts).\n <span\n className=\"cr-tabs__close\"\n aria-hidden=\"true\"\n onClick={(event: MouseEvent) => {\n event.stopPropagation();\n close();\n }}\n >\n <X />\n </span>\n )}\n </>,\n );\n };\n\n return (\n <TabView\n {...props}\n unstyled\n ref={primeRef}\n id={id}\n activeIndex={ativa}\n onTabChange={(event) => {\n setInterno(event.index);\n onTabChange?.(event.index);\n }}\n pt={{\n root: { className: ['cr-tabs', className].filter(Boolean).join(' ') },\n navContainer: { className: 'cr-tabs__nav-container' },\n navContent: { className: 'cr-tabs__nav-content' },\n nav: { className: 'cr-tabs__nav' },\n inkbar: { className: 'cr-tabs__inkbar' },\n panelContainer: { className: 'cr-tabs__panels' },\n }}\n >\n {panels.map((panel, index) => (\n <PrimeTabPanel\n key={panel.key ?? index}\n header={panel.props.header}\n disabled={panel.props.disabled}\n headerTemplate={header(panel.props)}\n pt={{\n header: { className: 'cr-tabs__item' },\n headerAction: { className: 'cr-tabs__tab' },\n content: { className: 'cr-tabs__panel' },\n }}\n >\n {panel.props.children}\n </PrimeTabPanel>\n ))}\n </TabView>\n );\n});\n","import {\n Children,\n forwardRef,\n isValidElement,\n useEffect,\n useRef,\n useState,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n type Ref,\n type RefObject,\n} from 'react';\nimport {\n DataTable,\n type DataTableProps,\n type DataTableSelectionMultipleChangeEvent,\n type DataTableSelectionSingleChangeEvent,\n type DataTableSortEvent,\n type DataTableValue,\n} from 'primereact/datatable';\nimport { Column as PrimeColumn, type ColumnProps as PrimeColumnProps } from 'primereact/column';\nimport type { CheckboxPassThroughOptions } from 'primereact/checkbox';\nimport type { PaginatorCurrentPageReportOptions } from 'primereact/paginator';\nimport {\n ArrowsInLineHorizontal,\n Check,\n Note,\n Question,\n SortAscending,\n SortDescending,\n} from '@phosphor-icons/react';\nimport { ContextMenu, type ContextMenuHandle, type ContextMenuItem } from '../ContextMenu';\nimport { Message } from '../Message';\nimport { paginatorTemplate } from '../Paginator/Paginator';\nimport { Skeleton } from '../Skeleton';\nimport { Tooltip } from '../Tooltip';\nimport '../../comum.css';\nimport '../Checkbox/Checkbox.css';\nimport '../Paginator/Paginator.css';\nimport './Table.css';\n\n/**\n * Props da Column do PrimeReact (filtros, edição, `body`, `sortable`, `frozen`, `align`, `style`...),\n * mais a ajuda do Figma. O visual (pt e unstyled) é do Cristal.\n */\nexport interface ColumnProps extends Omit<PrimeColumnProps, 'pt' | 'ptOptions' | 'unstyled'> {\n /** Texto do tooltip no ícone de ajuda antes do título (Show Help no Figma). */\n help?: ReactNode;\n}\n\n/**\n * Uma coluna da Table. Não desenha nada sozinha: a Table lê as props de cada `<Column>` e monta a\n * Column do Prime com o visual do Cristal.\n */\nexport function Column(_props: ColumnProps): null {\n return null;\n}\n\n// O DataTable do Prime tipa as props como uma união pelo modo de seleção; o Omit fica com o que é\n// comum a todas. A seleção volta abaixo, aceitando os quatro modos.\ntype PrimeTableProps<T extends DataTableValue> = Omit<\n DataTableProps<T[]>,\n | 'pt'\n | 'ptOptions'\n | 'unstyled'\n | 'value'\n | 'children'\n | 'selection'\n | 'selectionMode'\n | 'onSelectionChange'\n | 'cellSelection'\n | 'onContextMenuSelectionChange'\n>;\n\n/** Props do DataTable do PrimeReact, mais o que o Cristal acrescenta. */\nexport interface TableProps<T extends DataTableValue> extends PrimeTableProps<T> {\n /** Linhas da tabela. */\n value: T[];\n /** As colunas (`<Column>`). */\n children: ReactNode;\n /**\n * Como no Prime. Com uma `<Column selectionMode=\"multiple\" />` e sem este, o Cristal usa\n * `checkbox`: só a caixa seleciona (o clique na linha, não).\n */\n selectionMode?: 'single' | 'radiobutton' | 'multiple' | 'checkbox' | null;\n selection?: T | T[] | null;\n onSelectionChange?: (\n event: DataTableSelectionSingleChangeEvent<T[]> | DataTableSelectionMultipleChangeEvent<T[]>,\n ) => void;\n /** Texto do rodapé. Padrão: \"Mostrando 10 de 123 registros\". */\n report?: (info: { shown: number; totalRecords: number }) => ReactNode;\n /** Nome do Select de itens por página para o leitor de tela. Padrão: \"Itens por página\". */\n rowsPerPageLabel?: string;\n /**\n * Menu de contexto do cabeçalho (a Dropdown List do Figma): o botão direito numa coluna abre\n * Fixar coluna, Ajustar ao conteúdo e, nas ordenáveis, Ordenar ascendente e descendente.\n * Padrão: true.\n */\n columnMenu?: boolean;\n /**\n * Cabeçalho das colunas fixo na página: enquanto a página (ou o contêiner que rola em volta)\n * passa pela Table, o cabeçalho fica no topo da tela, até a última linha. Soma com o\n * `scrollHeight` do Prime, que fixa o cabeçalho dentro da Table. Padrão: false.\n */\n stickyHeader?: boolean;\n /** Distância do topo da tela em que o cabeçalho para, em px (uma barra fixa da página). Padrão: 0. */\n stickyHeaderOffset?: number;\n}\n\n// Cabeçalho fixo na página. O sticky do CSS para no wrapper, que rola na horizontal: o cabeçalho\n// desce com transform, a cada rolagem (de qualquer ancestral) e mudança de tamanho, até no máximo\n// o fim do corpo. Assim a rolagem horizontal e as colunas fixas continuam do Prime.\nfunction useCabecalhoNaPagina(\n raiz: RefObject<HTMLDivElement | null>,\n ligado: boolean,\n offset: number,\n) {\n useEffect(() => {\n const wrapper = raiz.current?.querySelector<HTMLElement>('.cr-table__wrapper');\n if (!ligado || !wrapper) return;\n const posicionar = () => {\n const thead = wrapper.querySelector<HTMLElement>('.cr-table__thead');\n if (!thead) return;\n const limite = Math.max(0, wrapper.clientHeight - thead.offsetHeight);\n const desce = Math.min(limite, Math.max(0, offset - wrapper.getBoundingClientRect().top));\n thead.style.transform = desce ? `translateY(${desce}px)` : '';\n };\n posicionar();\n const observador = new ResizeObserver(posicionar);\n observador.observe(wrapper);\n document.addEventListener('scroll', posicionar, { capture: true, passive: true });\n window.addEventListener('resize', posicionar, { passive: true });\n return () => {\n observador.disconnect();\n document.removeEventListener('scroll', posicionar, { capture: true });\n window.removeEventListener('resize', posicionar);\n const thead = wrapper.querySelector<HTMLElement>('.cr-table__thead');\n if (thead) thead.style.transform = '';\n };\n }, [raiz, ligado, offset]);\n}\n\n/** A ref da Table é a do DataTable do Prime: `getElement()`, `exportCSV()`, `reset()`... */\nexport type TableHandle<T extends DataTableValue = DataTableValue> = DataTable<T[]>;\n\n// Caixa de seleção do DataTable do Prime com as classes do Checkbox do Cristal (o Prime desenha a\n// do cabeçalho e a de cada linha; a seleção, o Shift e o \"todos\" são dele). Os nomes do Prime são\n// estados em inglês (\"All items unselected\"): o Cristal troca pela ação, em português. O Prime\n// também põe role=\"checkbox\", o nome e o tabIndex na raiz, em volta do <input>: saem dali, que o\n// <input> nativo já é a caixa (senão são dois controles, um dentro do outro).\nconst caixa = (label: string): CheckboxPassThroughOptions => ({\n root: (options) => ({\n className: `cr-checkbox cr-checkbox__control${options?.props.checked ? ' cr-checkbox__control--checked' : ''}`,\n role: undefined,\n 'aria-label': undefined,\n tabIndex: undefined,\n }),\n input: { className: 'cr-checkbox__input', 'aria-label': label },\n box: { className: 'cr-checkbox__box' },\n icon: { className: 'cr-checkbox__icon', 'aria-hidden': true },\n});\n\n// Ícone de ajuda (Question no Figma) com o texto no Tooltip do Cristal. É um botão, para o teclado\n// chegar ao tooltip; o clique nele não chega ao cabeçalho, para não ordenar a coluna.\nfunction Ajuda({ content }: { content: ReactNode }) {\n const ref = useRef<HTMLButtonElement>(null);\n return (\n <>\n <button\n ref={ref}\n type=\"button\"\n className=\"cr-table__help\"\n aria-label=\"Ajuda\"\n onClick={(event) => event.stopPropagation()}\n onKeyDown={(event) => event.stopPropagation()}\n >\n <Question aria-hidden=\"true\" />\n </button>\n <Tooltip target={ref} content={content} describe />\n </>\n );\n}\n\n// O que o menu de contexto do cabeçalho precisa saber da coluna em que abriu.\ninterface ColunaDoMenu {\n chave: string;\n titulo: string;\n sortField?: string;\n sortable: boolean;\n fixada: boolean;\n}\n\ninterface OpcoesDaColuna {\n carregando: boolean;\n /** Fixada ou solta pelo menu de contexto (vence o frozen da coluna). */\n fixada?: boolean;\n /** Ajustada ao conteúdo pelo menu de contexto. */\n ajustada: boolean;\n abrirMenu?: (event: MouseEvent<HTMLElement>, coluna: ColunaDoMenu) => void;\n}\n\nconst chaveDaColuna = (props: ColumnProps, index: number) =>\n props.columnKey ?? props.field ?? String(index);\n\n// Monta a Column do Prime com todas as props de quem usa e o visual do Cristal por cima.\n// Carregando, as células viram Skeleton (na seleção, um quadrado do tamanho da caixa).\nfunction coluna(element: ReactElement<ColumnProps>, index: number, opcoes: OpcoesDaColuna) {\n const { help, header, align, selectionMode, ...props } = element.props;\n const { carregando, ajustada, abrirMenu } = opcoes;\n const frozen = opcoes.fixada ?? props.frozen;\n const chave = chaveDaColuna(element.props, index);\n const celula = [\n 'cr-table__cell',\n `cr-table__cell--${align ?? 'left'}`,\n selectionMode && 'cr-table__cell--selection',\n // O Prime calcula a posição das colunas fixas procurando esta classe, mesmo no unstyled.\n frozen && 'cr-table__cell--frozen p-frozen-column',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <PrimeColumn\n key={element.key ?? chave}\n {...props}\n align={align}\n frozen={frozen}\n // Ajustar ao conteúdo: a coluna encolhe até o texto mais largo (as células não quebram).\n style={ajustada ? { ...props.style, width: '1px' } : props.style}\n {...(carregando\n ? { body: <Skeleton size={selectionMode ? '24px' : undefined} /> }\n : { selectionMode })}\n header={\n // Carregando, a seleção perde o checkbox do cabeçalho: o nome da coluna fica só para o\n // leitor de tela (um Skeleton ali sumiria, da mesma cor do fundo do cabeçalho).\n carregando && selectionMode ? (\n <span className=\"cr-so-leitor\">Seleção</span>\n ) : help && typeof header !== 'function' ? (\n <span className=\"cr-table__title\">\n <Ajuda content={help} />\n <span className=\"cr-table__title-text\">{header}</span>\n </span>\n ) : (\n header\n )\n }\n pt={{\n headerCell: {\n className: `cr-table__head ${celula}`,\n // Botão direito (ou a tecla de menu) no cabeçalho: o menu de contexto da coluna.\n ...(abrirMenu &&\n !selectionMode &&\n !carregando && {\n onContextMenu: (event: MouseEvent<HTMLElement>) =>\n abrirMenu(event, {\n chave,\n titulo: typeof header === 'string' ? header : (props.field ?? ''),\n sortField: props.sortField ?? props.field,\n sortable: Boolean(props.sortable),\n fixada: Boolean(frozen),\n }),\n }),\n },\n headerContent: { className: 'cr-table__head-content' },\n headerTitle: { className: 'cr-table__head-title' },\n sort: { className: 'cr-table__sort' },\n columnResizer: { className: 'cr-table__resizer' },\n bodyCell: { className: celula },\n headerCheckbox: caixa('Selecionar todas as linhas'),\n rowCheckbox: caixa('Selecionar linha'),\n }}\n />\n );\n}\n\n// Base: DataTable do PrimeReact no modo unstyled (o p-table do PrimeNG da produção). Todas as\n// props, eventos e métodos são do Prime: ordenação, seleção, paginação, filtros (inclusive o\n// globalFilter), lazy, loading, colunas fixas, redimensionar, cabeçalho fixo na rolagem... O\n// Cristal desenha o Figma: o header do Prime recebe a Topbar (TableToolbar), as células e o\n// cabeçalho seguem o .Table Main Cell e o .Table Main Head Cell, e o rodapé usa o template do\n// Paginator do Cristal no paginator do Prime. Sem linhas, mostra a Message do Type=Empty no lugar\n// do cabeçalho; carregando (loading), linhas de Skeleton no lugar do overlay do Prime, como na\n// documentação do DataTable. O botão direito no cabeçalho abre o menu de contexto da coluna (a\n// Dropdown List do Figma). Padrões do Cristal, que quem usa pode trocar: paginator ligado (o rodapé do Figma), 10 linhas por página, scrollable,\n// redimensionar em \"expand\", o template do rodapé e os ícones do Figma. O stickyHeader (do\n// Cristal) fixa o cabeçalho na página. A ref é a do DataTable.\nfunction TableBase<T extends DataTableValue>(\n {\n value,\n children,\n selectionMode,\n paginator = true,\n rows,\n rowsPerPageOptions,\n report = ({ shown, totalRecords: total }) => `Mostrando ${shown} de ${total} registros`,\n rowsPerPageLabel = 'Itens por página',\n emptyMessage = 'Não há registros para mostrar.',\n loading,\n columnMenu = true,\n stickyHeader = false,\n stickyHeaderOffset = 0,\n ...props\n }: TableProps<T>,\n ref: Ref<TableHandle<T>>,\n) {\n const elementos = Children.toArray(children).filter(isValidElement<ColumnProps>);\n const colunaDeSelecao = elementos.some((element) => element.props.selectionMode === 'multiple');\n const template = paginatorTemplate(rowsPerPageLabel);\n const carregando = Boolean(loading);\n const raiz = useRef<HTMLDivElement>(null);\n useCabecalhoNaPagina(raiz, stickyHeader, stickyHeaderOffset);\n\n // Sem onPage e sem onSort, o Prime guarda a página e a ordem sozinho, mas o menu de contexto\n // também ordena: aí quem guarda é a Table, do mesmo jeito que o Prime (ordenar volta para a\n // primeira página). Com onPage ou onSort, quem usa controla, como no Prime.\n const paginaPropria = !props.onPage;\n const ordemPropria = !props.onSort;\n const [pagina, setPagina] = useState({\n first: props.first ?? 0,\n rows: rows ?? rowsPerPageOptions?.[0] ?? 10,\n });\n const [ordem, setOrdem] = useState<Pick<DataTableSortEvent, 'sortField' | 'sortOrder'>>({\n sortField: props.sortField ?? '',\n sortOrder: props.sortOrder,\n });\n const linhas = paginaPropria ? pagina.rows : (rows ?? rowsPerPageOptions?.[0] ?? 10);\n\n // Menu de contexto do cabeçalho: as colunas fixadas e ajustadas por ele, e em qual abriu.\n const menuRef = useRef<ContextMenuHandle>(null);\n const [fixadas, setFixadas] = useState<Record<string, boolean>>({});\n const [ajustadas, setAjustadas] = useState<Record<string, boolean>>({});\n const [alvo, setAlvo] = useState<ColunaDoMenu | null>(null);\n\n const ordenar = (sortField: string, sortOrder: 1 | -1) => {\n if (props.onSort) {\n props.onSort({\n first: props.first ?? 0,\n rows: linhas,\n sortField,\n sortOrder,\n multiSortMeta: null,\n filters: props.filters ?? {},\n } as Parameters<NonNullable<typeof props.onSort>>[0]);\n return;\n }\n setOrdem({ sortField, sortOrder });\n if (paginaPropria) setPagina((atual) => ({ ...atual, first: 0 }));\n };\n\n const modeloDoMenu: ContextMenuItem[] = alvo\n ? [\n {\n label: alvo.fixada ? 'Desafixar coluna' : 'Fixar coluna',\n icon: <Note />,\n command: () => setFixadas((atuais) => ({ ...atuais, [alvo.chave]: !alvo.fixada })),\n },\n {\n label: 'Ajustar ao conteúdo',\n icon: <ArrowsInLineHorizontal />,\n command: () => setAjustadas((atuais) => ({ ...atuais, [alvo.chave]: true })),\n },\n ...(alvo.sortable && alvo.sortField\n ? [\n {\n label: 'Ordenar ascendente',\n icon: <SortAscending />,\n command: () => ordenar(alvo.sortField as string, 1),\n },\n {\n label: 'Ordenar descendente',\n icon: <SortDescending />,\n command: () => ordenar(alvo.sortField as string, -1),\n },\n ]\n : []),\n ]\n : [];\n\n // O clique direito só registra o pedido; o efeito abre o menu, no clique, pela ref do Prime.\n const [pedido, setPedido] = useState<MouseEvent<HTMLElement> | null>(null);\n useEffect(() => {\n if (pedido) menuRef.current?.show(pedido);\n }, [pedido]);\n const abrirMenu = (event: MouseEvent<HTMLElement>, coluna: ColunaDoMenu) => {\n event.preventDefault();\n setAlvo(coluna);\n setPedido(event);\n };\n\n // O DataTable do Prime tipa as props como uma união pelo modo de seleção: o Cristal junta os\n // padrões dele com as props de quem usa (que vencem) e entrega de uma vez.\n const tableProps = {\n scrollable: true,\n columnResizeMode: 'expand',\n paginatorTemplate: {\n ...template,\n layout: `CurrentPageReport ${template.layout}`,\n CurrentPageReport: (options: PaginatorCurrentPageReportOptions) => (\n <span className=\"cr-table__report\">\n {report({\n shown: options.totalRecords === 0 ? 0 : options.last - options.first + 1,\n totalRecords: options.totalRecords,\n })}\n </span>\n ),\n },\n sortIcon: ({ sorted, sortOrder }: { sorted?: boolean; sortOrder?: number | null }) =>\n sorted && sortOrder === -1 ? (\n <SortDescending aria-hidden=\"true\" />\n ) : (\n <SortAscending aria-hidden=\"true\" />\n ),\n checkIcon: <Check size={16} />,\n ...props,\n ...(paginaPropria && {\n first: pagina.first,\n onPage: (event: { first: number; rows: number }) =>\n setPagina({ first: event.first, rows: event.rows }),\n }),\n ...(ordemPropria && {\n sortField: ordem.sortField,\n sortOrder: ordem.sortOrder,\n onSort: (event: DataTableSortEvent) => {\n setOrdem({ sortField: event.sortField, sortOrder: event.sortOrder });\n if (paginaPropria) setPagina((atual) => ({ ...atual, first: 0 }));\n },\n }),\n value,\n selectionMode: selectionMode ?? (colunaDeSelecao ? 'checkbox' : undefined),\n paginator,\n rows: linhas,\n rowsPerPageOptions,\n // Carregando: uma linha de Skeleton por linha da página, sem filtrar nem ordenar (lazy), com o\n // total que já se conhece no rodapé.\n ...(carregando && {\n value: Array.from({ length: linhas }, (_, indice) => ({ crSkeleton: indice })),\n dataKey: 'crSkeleton',\n lazy: true,\n totalRecords: props.totalRecords ?? value.length,\n selectionMode: undefined,\n }),\n emptyMessage:\n typeof emptyMessage === 'function' ? (\n emptyMessage\n ) : (\n <Message type=\"info\" className=\"cr-table__empty\">\n {emptyMessage}\n </Message>\n ),\n } as unknown as DataTableProps<T[]>;\n\n return (\n // Contêiner da consulta de largura: a variante de 360px também muda a caixa do DataTable.\n <div ref={raiz} className=\"cr-table\">\n <DataTable\n {...tableProps}\n ref={ref}\n unstyled\n pt={{\n root: { className: 'cr-table__box', 'aria-busy': carregando || undefined },\n header: { className: 'cr-table__header' },\n wrapper: { className: 'cr-table__wrapper cr-rolagem-fina' },\n table: { className: 'cr-table__table' },\n thead: { className: 'cr-table__thead' },\n tbody: { className: 'cr-table__tbody' },\n bodyRow: {\n className: carregando ? 'cr-table__row cr-table__row--skeleton' : 'cr-table__row',\n },\n emptyMessage: { className: 'cr-table__empty-row' },\n resizeHelper: { className: 'cr-table__resize-helper' },\n footer: { className: 'cr-table__footer' },\n paginator: {\n root: { className: 'cr-paginator cr-table__paginator' },\n pages: { className: 'cr-paginator__pages' },\n },\n }}\n >\n {elementos.map((element, index) => {\n const chave = chaveDaColuna(element.props, index);\n return coluna(element, index, {\n carregando,\n fixada: fixadas[chave],\n ajustada: Boolean(ajustadas[chave]),\n abrirMenu: columnMenu ? abrirMenu : undefined,\n });\n })}\n </DataTable>\n {columnMenu && (\n // O ContextMenu do Cristal (a Dropdown List do Figma): abre no ponto do clique.\n <ContextMenu\n ref={menuRef}\n model={modeloDoMenu}\n aria-label={alvo ? `Opções da coluna ${alvo.titulo}` : undefined}\n onHide={() => setAlvo(null)}\n />\n )}\n </div>\n );\n}\n\n/** Table do Figma \"Cristal - Core Components | Web\", sobre o DataTable do PrimeReact. */\nexport const Table = forwardRef(TableBase) as <T extends DataTableValue>(\n props: TableProps<T> & { ref?: Ref<TableHandle<T>> },\n) => ReactElement;\n","import { useId, useRef, useState, type ReactNode } from 'react';\nimport { IconButton, type IconButtonProps } from '../IconButton';\nimport { Menu, type MenuHandle, type MenuItem } from '../Menu';\n\nexport interface BotaoDeMenuProps {\n icon: ReactNode;\n label: string;\n model: MenuItem[];\n variant: IconButtonProps['variant'];\n /** Tooltip do botão. Padrão: o próprio nome. */\n tooltip?: ReactNode;\n popupAlignment?: 'left' | 'right';\n disabled?: boolean;\n className?: string;\n}\n\n// Icon Button que abre o Menu do Cristal (a Dropdown List do Figma) em popup, com aria-haspopup,\n// aria-expanded e aria-controls; o tooltip some com o menu aberto. Usado pelo ⋮ da Topbar e pelas\n// ações da linha.\nexport function BotaoDeMenu({\n icon,\n label,\n model,\n variant,\n tooltip,\n popupAlignment = 'left',\n disabled,\n className,\n}: BotaoDeMenuProps) {\n const menuRef = useRef<MenuHandle>(null);\n const menuId = useId();\n const [open, setOpen] = useState(false);\n return (\n <span className={className}>\n <IconButton\n variant={variant}\n size=\"medium\"\n icon={icon}\n aria-label={label}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-controls={open ? menuId : undefined}\n tooltip={open ? false : tooltip}\n disabled={disabled}\n onClick={(event) => menuRef.current?.toggle(event)}\n />\n <Menu\n ref={menuRef}\n id={menuId}\n popup\n popupAlignment={popupAlignment}\n model={model}\n aria-label={label}\n onShow={() => setOpen(true)}\n onHide={() => setOpen(false)}\n />\n </span>\n );\n}\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type MouseEvent,\n type ReactNode,\n} from 'react';\nimport {\n CaretLeft,\n CaretRight,\n DotsThreeVertical,\n Funnel,\n MagnifyingGlass,\n Trash,\n} from '@phosphor-icons/react';\nimport { Badge } from '../Badge';\nimport { Button } from '../Button';\nimport { Chip } from '../Chip';\nimport { Divider } from '../Divider';\nimport { IconButton } from '../IconButton';\nimport { InputText } from '../InputText';\nimport type { MenuItem } from '../Menu';\nimport { BotaoDeMenu } from './BotaoDeMenu';\nimport './Table.css';\n\n/** Um botão da Topbar (os Buttons à direita no Figma). */\nexport interface TableToolbarAction {\n label: string;\n onClick?: (event: MouseEvent<HTMLElement>) => void;\n /** primary: o botão principal (fica visível até 768px); tertiary: os demais. Padrão: tertiary. */\n variant?: 'primary' | 'tertiary';\n icon?: ReactNode;\n disabled?: boolean;\n}\n\n/** Um filtro aplicado (Chip da .Filter bar no Figma). */\nexport interface TableFilter {\n /** Nome do filtro, como \"Status do lote\". */\n label: string;\n /** Valor escolhido, como \"Divulgação\". */\n value: string;\n onRemove?: () => void;\n}\n\nexport interface TableToolbarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Texto da busca (controlado). Com ele ou com onSearchChange, a busca aparece. */\n searchValue?: string;\n onSearchChange?: (value: string) => void;\n /** Padrão: \"Procurar por\". */\n searchPlaceholder?: string;\n /** Nome do campo de busca para o leitor de tela. Padrão: \"Procurar\". */\n searchLabel?: string;\n /** Clique no Filtrar. Sem ele, o botão não aparece. */\n onFilter?: (event: MouseEvent<HTMLElement>) => void;\n /** Padrão: \"Filtrar\". */\n filterLabel?: string;\n /** Filtros aplicados: viram os chips da .Filter bar e o Badge do Filtrar. */\n filters?: TableFilter[];\n /** Limpar todos os filtros (a lixeira da .Filter bar). */\n onClearFilters?: () => void;\n /** Padrão: \"Limpar filtros\". */\n clearFiltersLabel?: string;\n /** Botões à direita. */\n actions?: TableToolbarAction[];\n /** Nome do botão que abre o menu com os botões que não cabem. Padrão: \"Mais ações\". */\n moreActionsLabel?: string;\n}\n\n// Menu ⋮ com os botões que não cabem (Icon Button tertiary de 42px no Figma).\nfunction MaisAcoes({\n actions,\n label,\n className,\n}: {\n actions: TableToolbarAction[];\n label: string;\n className: string;\n}) {\n if (actions.length === 0) return null;\n const model: MenuItem[] = actions.map((action) => ({\n label: action.label,\n icon: action.icon,\n disabled: action.disabled,\n command: (event) => action.onClick?.(event.originalEvent as MouseEvent<HTMLElement>),\n }));\n return (\n <BotaoDeMenu\n icon={<DotsThreeVertical />}\n label={label}\n model={model}\n variant=\"tertiary\"\n popupAlignment=\"right\"\n className={className}\n />\n );\n}\n\n// Chips dos filtros, com as setas quando não cabem (Show Button Left/Right no Figma).\nfunction BarraDeFiltros({\n filters,\n onClear,\n clearLabel,\n}: {\n filters: TableFilter[];\n onClear?: () => void;\n clearLabel: string;\n}) {\n const chipsRef = useRef<HTMLDivElement>(null);\n const [setas, setSetas] = useState({ esquerda: false, direita: false });\n\n const medir = useCallback(() => {\n const chips = chipsRef.current;\n if (!chips) return;\n setSetas({\n esquerda: chips.scrollLeft > 0,\n // sem token: 1px de folga para o arredondamento da rolagem.\n direita: chips.scrollLeft + chips.clientWidth < chips.scrollWidth - 1,\n });\n }, []);\n\n useEffect(() => {\n const chips = chipsRef.current;\n if (!chips) return;\n medir();\n const observer = new ResizeObserver(medir);\n observer.observe(chips);\n return () => observer.disconnect();\n }, [medir, filters.length]);\n\n const rolar = (sentido: 1 | -1) =>\n chipsRef.current?.scrollBy({\n left: sentido * chipsRef.current.clientWidth,\n behavior: 'smooth',\n });\n\n return (\n <div className=\"cr-table-toolbar__filters\">\n {setas.esquerda && (\n <IconButton\n variant=\"tertiary\"\n size=\"xsmall\"\n icon={<CaretLeft />}\n aria-label=\"Filtros anteriores\"\n onClick={() => rolar(-1)}\n />\n )}\n <div ref={chipsRef} className=\"cr-table-toolbar__chips\" onScroll={medir}>\n {filters.map((filter) => (\n <Chip\n key={`${filter.label}:${filter.value}`}\n variant=\"outline\"\n size=\"large\"\n label={\n <>\n <span className=\"cr-table-toolbar__chip-label\">{filter.label}:</span> {filter.value}\n </>\n }\n removeLabel={`Remover filtro ${filter.label}: ${filter.value}`}\n onRemove={\n filter.onRemove\n ? () => {\n filter.onRemove?.();\n // Quem usa tira o filtro da lista: o Prime não esconde o chip sozinho.\n return false;\n }\n : undefined\n }\n />\n ))}\n </div>\n {setas.direita && (\n <IconButton\n variant=\"tertiary\"\n size=\"xsmall\"\n icon={<CaretRight />}\n aria-label=\"Próximos filtros\"\n onClick={() => rolar(1)}\n />\n )}\n {onClear && (\n <>\n <Divider orientation=\"vertical\" className=\"cr-table-toolbar__divider\" />\n <IconButton\n variant=\"tertiary\"\n size=\"xsmall\"\n icon={<Trash />}\n aria-label={clearLabel}\n onClick={onClear}\n />\n </>\n )}\n </div>\n );\n}\n\n// Exclusivo: o Toolbar do PrimeReact só divide a barra em início e fim, e a Topbar do Figma muda\n// por largura (1360, 768 e 360px). O Cristal compõe o InputText, o Button, o IconButton, o Menu, o\n// Chip e o Badge. Abaixo de 1360px os botões tertiary vão para o menu ⋮; abaixo de 768px, todos,\n// e o Filtrar vira Icon Button.\n/**\n * Topbar da Table (.Table Topbar no Figma): busca, Filtrar, botões e, com filtros aplicados, a\n * .Filter bar. Vai no `toolbar` da Table.\n */\nexport const TableToolbar = forwardRef<HTMLDivElement, TableToolbarProps>(function TableToolbar(\n {\n searchValue,\n onSearchChange,\n searchPlaceholder = 'Procurar por',\n searchLabel = 'Procurar',\n onFilter,\n filterLabel = 'Filtrar',\n filters = [],\n onClearFilters,\n clearFiltersLabel = 'Limpar filtros',\n actions = [],\n moreActionsLabel = 'Mais ações',\n className,\n ...props\n },\n ref,\n) {\n const busca = searchValue !== undefined || onSearchChange !== undefined;\n const contagem = filters.length;\n const filtrar = contagem > 0 ? `${filterLabel}, ${contagem} aplicados` : filterLabel;\n const secundarias = actions.filter((action) => action.variant !== 'primary');\n\n return (\n <div ref={ref} className={['cr-table-toolbar', className].filter(Boolean).join(' ')} {...props}>\n <div className=\"cr-table-toolbar__main\">\n <div className=\"cr-table-toolbar__start\">\n {busca && (\n <InputText\n className=\"cr-table-toolbar__search\"\n size=\"medium\"\n role=\"searchbox\"\n aria-label={searchLabel}\n placeholder={searchPlaceholder}\n value={searchValue ?? ''}\n onChange={(event) => onSearchChange?.(event.target.value)}\n trailingIcon={<MagnifyingGlass />}\n />\n )}\n {onFilter && (\n <span className=\"cr-table-toolbar__filter\">\n <Button\n className=\"cr-table-toolbar__filter-button\"\n variant=\"tertiary\"\n size=\"medium\"\n leadingIcon={<Funnel />}\n aria-label={contagem > 0 ? filtrar : undefined}\n onClick={onFilter}\n >\n {filterLabel}\n </Button>\n <IconButton\n className=\"cr-table-toolbar__filter-icon\"\n variant=\"tertiary\"\n size=\"medium\"\n icon={<Funnel />}\n aria-label={filtrar}\n tooltip={filterLabel}\n onClick={onFilter}\n />\n {contagem > 0 && (\n <Badge className=\"cr-table-toolbar__badge\" size=\"medium\" aria-hidden=\"true\">\n {contagem}\n </Badge>\n )}\n </span>\n )}\n </div>\n {actions.length > 0 && (\n <div className=\"cr-table-toolbar__end\">\n {/* Até 1360px, só os tertiary vão para o menu; abaixo de 768px, todos. */}\n <MaisAcoes\n actions={secundarias}\n label={moreActionsLabel}\n className=\"cr-table-toolbar__more cr-table-toolbar__more--tablet\"\n />\n <MaisAcoes\n actions={actions}\n label={moreActionsLabel}\n className=\"cr-table-toolbar__more cr-table-toolbar__more--mobile\"\n />\n {actions.map((action) => (\n <Button\n key={action.label}\n className={`cr-table-toolbar__action cr-table-toolbar__action--${action.variant ?? 'tertiary'}`}\n variant={action.variant ?? 'tertiary'}\n size=\"medium\"\n leadingIcon={action.icon}\n disabled={action.disabled}\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n {contagem > 0 && (\n <BarraDeFiltros filters={filters} onClear={onClearFilters} clearLabel={clearFiltersLabel} />\n )}\n </div>\n );\n});\n","import type { ReactNode } from 'react';\nimport { GearSix } from '@phosphor-icons/react';\nimport type { MenuItem } from '../Menu';\nimport { BotaoDeMenu } from './BotaoDeMenu';\n\nexport interface TableRowActionsProps {\n /** Itens do menu (os do Menu do Cristal). Cada `command` já sabe de que linha é. */\n model: MenuItem[];\n /** Nome do botão, com a linha: por exemplo \"Ações do lote M000000374\". */\n 'aria-label': string;\n /** Padrão: a engrenagem (GearSix) do Type=Actions no Figma. */\n icon?: ReactNode;\n /** Tooltip do botão. Padrão: \"Ações\". */\n tooltip?: ReactNode;\n /** Lado do menu em relação ao botão. Padrão: left. */\n popupAlignment?: 'left' | 'right';\n disabled?: boolean;\n}\n\n/**\n * Ações da linha (Type=Actions do .Table Main Cell no Figma): a engrenagem abre o Menu do Cristal\n * com as ações daquela linha. Vai no `body` de uma `<Column align=\"center\">`.\n */\n// Exclusivo: o DataTable do Prime não tem coluna de ações; a documentação dele usa um botão no\n// body que abre um Menu em popup, e é o que o Cristal monta com o IconButton ghost e o Menu.\nexport function TableRowActions({\n model,\n 'aria-label': label,\n icon = <GearSix />,\n tooltip = 'Ações',\n popupAlignment,\n disabled,\n}: TableRowActionsProps) {\n return (\n <BotaoDeMenu\n icon={icon}\n label={label}\n model={model}\n variant=\"ghost\"\n tooltip={tooltip}\n popupAlignment={popupAlignment}\n disabled={disabled}\n className=\"cr-table__row-actions\"\n />\n );\n}\n","import { forwardRef, useImperativeHandle, useRef, type ReactElement } from 'react';\nimport {\n Toast as PrimeToast,\n type ToastMessage as PrimeToastMessage,\n type ToastPassThroughTransitionType,\n type ToastProps as PrimeToastProps,\n} from 'primereact/toast';\nimport { Check, Info, Warning, X, XCircle } from '@phosphor-icons/react';\nimport './Toast.css';\n\n/** Type no Figma. */\nexport type ToastType = 'warning' | 'danger' | 'success' | 'info';\n\n/** Onde as mensagens aparecem na tela (o position do Prime). Padrão: top-right. */\nexport type ToastPosition = NonNullable<PrimeToastProps['position']>;\n\n/** Uma mensagem, passada para `show()`. */\nexport interface ToastMessage {\n type: ToastType;\n /** Title no Figma. */\n title: string;\n /** Message no Figma (Show Message content). */\n message?: string;\n /** Show Icon no Figma. Padrão: true. */\n showIcon?: boolean;\n /** Tempo na tela, em ms. Padrão do Prime: 3000. */\n life?: number;\n /** Fica até alguém fechar. */\n sticky?: boolean;\n}\n\n/** O que a ref do Toast entrega. */\nexport interface ToastHandle {\n show: (message: ToastMessage | ToastMessage[]) => void;\n clear: () => void;\n}\n\nexport interface ToastProps {\n position?: ToastPosition;\n /** Nome do X para o leitor de tela. */\n closeLabel?: string;\n id?: string;\n className?: string;\n}\n\nconst SEVERITY: Record<ToastType, PrimeToastMessage['severity']> = {\n warning: 'warn',\n danger: 'error',\n success: 'success',\n info: 'info',\n};\n\nconst ICON: Record<ToastType, ReactElement> = {\n warning: <Warning />,\n danger: <XCircle />,\n success: <Check />,\n info: <Info />,\n};\n\n// Base: Toast do PrimeReact no modo unstyled (o p-toast do PrimeNG da produção): a pilha de\n// mensagens na tela, o tempo de cada uma (pausado com o mouse em cima), o X e o role=alert são do\n// Prime. Como no Prime, as mensagens entram pela ref: toast.current.show({ type, title, message }).\n// O Cristal troca o severity pelo Type do Figma, põe os ícones do Figma no círculo e desenha tudo\n// pelos tokens (Toast.css).\nexport const Toast = forwardRef<ToastHandle, ToastProps>(function Toast(\n { position = 'top-right', closeLabel = 'Fechar', id, className },\n ref,\n) {\n const primeRef = useRef<PrimeToast>(null);\n\n const converter = ({\n type,\n title,\n message,\n showIcon = true,\n life,\n sticky,\n }: ToastMessage): PrimeToastMessage => ({\n severity: SEVERITY[type],\n summary: title,\n detail: message,\n // Sem ícone, um fragmento vazio: com undefined o Prime põe o ícone dele.\n icon: showIcon ? (\n <span className=\"cr-toast__icon\" aria-hidden=\"true\">\n {ICON[type]}\n </span>\n ) : (\n <></>\n ),\n closeIcon: <X aria-hidden=\"true\" />,\n life,\n sticky,\n className: `cr-toast__message--${type}`,\n });\n\n useImperativeHandle(ref, () => ({\n show: (message) =>\n primeRef.current?.show(Array.isArray(message) ? message.map(converter) : converter(message)),\n clear: () => primeRef.current?.clear(),\n }));\n\n return (\n <PrimeToast\n // O Toast aceita unstyled como os outros, mas o d.ts do Prime 10 esqueceu de declarar.\n {...({ unstyled: true } as object)}\n ref={primeRef}\n id={id}\n position={position}\n pt={{\n root: {\n className: ['cr-toast', className].filter(Boolean).join(' '),\n },\n message: { className: 'cr-toast__message' },\n content: { className: 'cr-toast__content' },\n text: { className: 'cr-toast__text' },\n summary: { className: 'cr-toast__title' },\n detail: { className: 'cr-toast__detail' },\n closeButton: { className: 'cr-toast__close', 'aria-label': closeLabel },\n // No unstyled o Prime não põe classes na transição: o Cristal dá as dele (Toast.css).\n transition: {\n classNames: {\n enter: 'cr-toast__message--enter',\n enterActive: 'cr-toast__message--enter-active',\n exit: 'cr-toast__message--exit',\n exitActive: 'cr-toast__message--exit-active',\n },\n } as ToastPassThroughTransitionType,\n }}\n />\n );\n});\n"]}
|