@vector-business-services/cristal-ds-web 0.3.0 → 0.4.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 +19 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +34 -0
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +11 -2
- package/dist/index.d.ts +11 -2
- package/dist/index.js +19 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/AutoComplete/AutoComplete.tsx","../src/components/Badge/Badge.tsx","../src/components/Button/Button.tsx","../src/components/Chip/Chip.tsx","../src/components/Divider/Divider.tsx","../src/components/IconButton/IconButton.tsx","../src/components/Input/Input.tsx","../src/components/Menu/Menu.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/Menubar/Menubar.tsx","../src/components/MultiSelect/MultiSelect.tsx","../src/components/Tag/Tag.tsx"],"names":["AutoComplete","PrimeAutoComplete","forwardRef","Badge","jsx","PrimeBadge","Button","jsxs","PrimeButton","Chip","PrimeChip","Divider","useRef","useImperativeHandle","PrimeDivider","IconButton","Input","useId","WarningCircle","Info","Menu","PrimeMenu","PrimeTooltip","PrimeAvatar","Menubar","InputText","PrimeMenubar","MultiSelect","options","PrimeMultiSelect","MagnifyingGlass","Tag","PrimeTag"],"mappings":"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","file":"index.js","sourcesContent":["import { forwardRef, useId } from 'react';\nimport {\n AutoComplete as PrimeAutoComplete,\n type AutoCompleteProps as PrimeAutoCompleteProps,\n} from 'primereact/autocomplete';\nimport { Info, WarningCircle } from '@phosphor-icons/react';\nimport type { InputSize, InputVariant } from '../Input';\nimport '../Input/Input.css';\nimport './AutoComplete.css';\n\nexport type AutoCompleteVariant = InputVariant;\nexport type AutoCompleteSize = InputSize;\n\nexport interface AutoCompleteProps extends Omit<\n PrimeAutoCompleteProps,\n // Fora do Figma (seleção múltipla, botão de dropdown, mensagem de vazio, carregando) ou\n // controlados pelo Cristal (visual, rótulo, erro).\n | 'size'\n | 'variant'\n | 'invalid'\n | 'multiple'\n | 'selectionLimit'\n | 'selectedItemTemplate'\n | 'removeTokenIcon'\n | 'dropdown'\n | 'dropdownAriaLabel'\n | 'dropdownAutoFocus'\n | 'dropdownIcon'\n | 'dropdownMode'\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\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 Input\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.\nexport const AutoComplete = forwardRef<HTMLInputElement, AutoCompleteProps>(function AutoComplete(\n {\n variant = 'outline',\n size = 'large',\n label,\n hint,\n error,\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\n const classes = [\n 'cr-field',\n 'cr-autocomplete',\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 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 pt={{\n root: { className: 'cr-autocomplete__root' },\n input: {\n root: {\n className: 'cr-field__control cr-autocomplete__input',\n 'aria-describedby': supportText ? hintId : undefined,\n 'aria-invalid': error ? true : undefined,\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-autocomplete__panel' },\n list: { className: 'cr-autocomplete__list' },\n item: { className: 'cr-autocomplete__item' },\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 { 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). */\n label: string;\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 label={label}\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 { 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 { forwardRef, type ButtonHTMLAttributes, type ReactNode, type Ref } from 'react';\nimport { Button as PrimeButton } from 'primereact/button';\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\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.\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(function IconButton(\n { variant = 'primary', size = 'large', icon, type = 'button', className, ...props },\n ref,\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 <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 <span className=\"cr-icon-button__icon\" aria-hidden=\"true\">\n {icon}\n </span>\n </PrimeButton>\n );\n});\n","import { forwardRef, useId, type InputHTMLAttributes, type ReactNode, type Ref } from 'react';\nimport { InputText } from 'primereact/inputtext';\nimport { Info, WarningCircle } from '@phosphor-icons/react';\nimport './Input.css';\n\n/** Type no Figma: Outline (com borda) e Filled (com fundo). */\nexport type InputVariant = 'outline' | 'filled';\n/** Size no Figma: 32, 36, 42 e 48px de altura do campo. */\nexport type InputSize = 'xsmall' | 'small' | 'medium' | 'large';\n\nexport interface InputProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'value' | 'children'\n> {\n variant?: InputVariant;\n size?: InputSize;\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 Input = forwardRef<HTMLInputElement, InputProps>(function Input(\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 <InputText\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 aria-describedby={supportText ? hintId : undefined}\n {...props}\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","import {\n forwardRef,\n useContext,\n useImperativeHandle,\n useRef,\n type ReactNode,\n type SyntheticEvent,\n} from 'react';\nimport { PrimeReactContext, PrimeReactProvider } from 'primereact/api';\nimport { Menu as PrimeMenu, type MenuPassThroughOptions } from 'primereact/menu';\nimport type { MenuItem as PrimeMenuItem, MenuItemCommandEvent } from 'primereact/menuitem';\nimport { CircleNotch } from '@phosphor-icons/react';\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 {\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// 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 },\n ref,\n) {\n const primeRef = useRef<PrimeMenu>(null);\n const context = useContext(PrimeReactContext);\n\n useImperativeHandle(ref, () => ({\n toggle: (event) => primeRef.current?.toggle(event),\n show: (event) => primeRef.current?.show(event),\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 : 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 const classes = ['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 action: { className: 'cr-menu__action' },\n label: { className: 'cr-menu__label' },\n };\n\n const menu = (\n <PrimeMenu\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 { useEffect, useId, 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 id?: string;\n className?: string;\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, Esc e posicionamento com\n// troca de lado do Prime, espelhando o pTooltip do PrimeNG da produção). O visual vem do\n// Tooltip.css; o Figma não tem seta. Dois ajustes de acessibilidade: o Prime marca o tooltip\n// aberto com aria-hidden=\"true\", e não liga o alvo ao texto; aqui o alvo ganha aria-describedby.\nexport function Tooltip({\n target,\n content,\n type = 'plain',\n position = 'bottom',\n event = 'both',\n showDelay,\n hideDelay,\n disabled,\n id,\n className,\n}: TooltipProps) {\n const autoId = useId();\n const tooltipId = id ?? autoId;\n\n useEffect(() => {\n const elements = resolveTargets(target);\n elements.forEach((element) => element.setAttribute('aria-describedby', tooltipId));\n return () => elements.forEach((element) => element.removeAttribute('aria-describedby'));\n }, [target, tooltipId]);\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 disabled={disabled}\n pt={pt}\n >\n {content}\n </PrimeTooltip>\n );\n}\n","import {\n forwardRef,\n useId,\n useRef,\n useState,\n type FormEvent,\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 { Avatar as PrimeAvatar } from 'primereact/avatar';\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 {\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. */}\n <PrimeAvatar\n unstyled\n aria-hidden=\"true\"\n className={`cr-menubar__avatar${user.avatar ? '' : ' cr-menubar__avatar--initial'}`}\n image={user.avatar}\n imageAlt=\"\"\n label={user.avatar ? undefined : user.name.trim().charAt(0).toUpperCase()}\n shape=\"circle\"\n pt={{ image: { className: 'cr-menubar__avatar-image' } }}\n />\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 },\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 unstyled\n className=\"cr-menubar__bar\"\n model={[]}\n start={start}\n end={end}\n pt={pt}\n />\n </div>\n );\n});\n","import { forwardRef, useId, type Ref } from 'react';\nimport {\n MultiSelect as PrimeMultiSelect,\n type MultiSelectPassThroughOptions,\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 '../Input/Input.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\nexport interface MultiSelectProps {\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 Input (.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 const checkbox = {\n root: { className: 'cr-multiselect__checkbox' },\n box: { className: 'cr-multiselect__checkbox-box' },\n input: { className: '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-multiselect__hidden' },\n input: {\n 'aria-describedby': supportText ? hintId : undefined,\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-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-multiselect__wrapper' },\n list: { className: 'cr-multiselect__list' },\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-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 };\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 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"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/AutoComplete/AutoComplete.tsx","../src/components/Badge/Badge.tsx","../src/components/Button/Button.tsx","../src/components/Card/Card.tsx","../src/components/Chip/Chip.tsx","../src/components/Divider/Divider.tsx","../src/components/IconButton/IconButton.tsx","../src/components/Input/Input.tsx","../src/components/Menu/Menu.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/Menubar/Menubar.tsx","../src/components/MultiSelect/MultiSelect.tsx","../src/components/Tag/Tag.tsx"],"names":["AutoComplete","PrimeAutoComplete","forwardRef","Badge","jsx","PrimeBadge","Button","jsxs","PrimeButton","Card","PrimeCard","Chip","PrimeChip","Divider","useRef","useImperativeHandle","PrimeDivider","IconButton","Input","useId","WarningCircle","Info","Menu","PrimeMenu","PrimeTooltip","PrimeAvatar","Menubar","InputText","PrimeMenubar","MultiSelect","options","PrimeMultiSelect","MagnifyingGlass","Tag","PrimeTag"],"mappings":"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","file":"index.js","sourcesContent":["import { forwardRef, useId } from 'react';\nimport {\n AutoComplete as PrimeAutoComplete,\n type AutoCompleteProps as PrimeAutoCompleteProps,\n} from 'primereact/autocomplete';\nimport { Info, WarningCircle } from '@phosphor-icons/react';\nimport type { InputSize, InputVariant } from '../Input';\nimport '../Input/Input.css';\nimport './AutoComplete.css';\n\nexport type AutoCompleteVariant = InputVariant;\nexport type AutoCompleteSize = InputSize;\n\nexport interface AutoCompleteProps extends Omit<\n PrimeAutoCompleteProps,\n // Fora do Figma (seleção múltipla, botão de dropdown, mensagem de vazio, carregando) ou\n // controlados pelo Cristal (visual, rótulo, erro).\n | 'size'\n | 'variant'\n | 'invalid'\n | 'multiple'\n | 'selectionLimit'\n | 'selectedItemTemplate'\n | 'removeTokenIcon'\n | 'dropdown'\n | 'dropdownAriaLabel'\n | 'dropdownAutoFocus'\n | 'dropdownIcon'\n | 'dropdownMode'\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\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 Input\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.\nexport const AutoComplete = forwardRef<HTMLInputElement, AutoCompleteProps>(function AutoComplete(\n {\n variant = 'outline',\n size = 'large',\n label,\n hint,\n error,\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\n const classes = [\n 'cr-field',\n 'cr-autocomplete',\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 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 pt={{\n root: { className: 'cr-autocomplete__root' },\n input: {\n root: {\n className: 'cr-field__control cr-autocomplete__input',\n 'aria-describedby': supportText ? hintId : undefined,\n 'aria-invalid': error ? true : undefined,\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-autocomplete__panel' },\n list: { className: 'cr-autocomplete__list' },\n item: { className: 'cr-autocomplete__item' },\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 { 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 // No unstyled, className e style do Card do Prime não chegam ao elemento; vão pelo pt.\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 { 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). */\n label: string;\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 label={label}\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 { 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 { forwardRef, type ButtonHTMLAttributes, type ReactNode, type Ref } from 'react';\nimport { Button as PrimeButton } from 'primereact/button';\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\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.\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(function IconButton(\n { variant = 'primary', size = 'large', icon, type = 'button', className, ...props },\n ref,\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 <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 <span className=\"cr-icon-button__icon\" aria-hidden=\"true\">\n {icon}\n </span>\n </PrimeButton>\n );\n});\n","import { forwardRef, useId, type InputHTMLAttributes, type ReactNode, type Ref } from 'react';\nimport { InputText } from 'primereact/inputtext';\nimport { Info, WarningCircle } from '@phosphor-icons/react';\nimport './Input.css';\n\n/** Type no Figma: Outline (com borda) e Filled (com fundo). */\nexport type InputVariant = 'outline' | 'filled';\n/** Size no Figma: 32, 36, 42 e 48px de altura do campo. */\nexport type InputSize = 'xsmall' | 'small' | 'medium' | 'large';\n\nexport interface InputProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'value' | 'children'\n> {\n variant?: InputVariant;\n size?: InputSize;\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 Input = forwardRef<HTMLInputElement, InputProps>(function Input(\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 <InputText\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 aria-describedby={supportText ? hintId : undefined}\n {...props}\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","import {\n forwardRef,\n useContext,\n useImperativeHandle,\n useRef,\n type ReactNode,\n type SyntheticEvent,\n} from 'react';\nimport { PrimeReactContext, PrimeReactProvider } from 'primereact/api';\nimport { Menu as PrimeMenu, type MenuPassThroughOptions } from 'primereact/menu';\nimport type { MenuItem as PrimeMenuItem, MenuItemCommandEvent } from 'primereact/menuitem';\nimport { CircleNotch } from '@phosphor-icons/react';\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 {\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// 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 },\n ref,\n) {\n const primeRef = useRef<PrimeMenu>(null);\n const context = useContext(PrimeReactContext);\n\n useImperativeHandle(ref, () => ({\n toggle: (event) => primeRef.current?.toggle(event),\n show: (event) => primeRef.current?.show(event),\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 : 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 const classes = ['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 action: { className: 'cr-menu__action' },\n label: { className: 'cr-menu__label' },\n };\n\n const menu = (\n <PrimeMenu\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 { useEffect, useId, 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 id?: string;\n className?: string;\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, Esc e posicionamento com\n// troca de lado do Prime, espelhando o pTooltip do PrimeNG da produção). O visual vem do\n// Tooltip.css; o Figma não tem seta. Dois ajustes de acessibilidade: o Prime marca o tooltip\n// aberto com aria-hidden=\"true\", e não liga o alvo ao texto; aqui o alvo ganha aria-describedby.\nexport function Tooltip({\n target,\n content,\n type = 'plain',\n position = 'bottom',\n event = 'both',\n showDelay,\n hideDelay,\n disabled,\n id,\n className,\n}: TooltipProps) {\n const autoId = useId();\n const tooltipId = id ?? autoId;\n\n useEffect(() => {\n const elements = resolveTargets(target);\n elements.forEach((element) => element.setAttribute('aria-describedby', tooltipId));\n return () => elements.forEach((element) => element.removeAttribute('aria-describedby'));\n }, [target, tooltipId]);\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 disabled={disabled}\n pt={pt}\n >\n {content}\n </PrimeTooltip>\n );\n}\n","import {\n forwardRef,\n useId,\n useRef,\n useState,\n type FormEvent,\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 { Avatar as PrimeAvatar } from 'primereact/avatar';\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 {\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. */}\n <PrimeAvatar\n unstyled\n aria-hidden=\"true\"\n className={`cr-menubar__avatar${user.avatar ? '' : ' cr-menubar__avatar--initial'}`}\n image={user.avatar}\n imageAlt=\"\"\n label={user.avatar ? undefined : user.name.trim().charAt(0).toUpperCase()}\n shape=\"circle\"\n pt={{ image: { className: 'cr-menubar__avatar-image' } }}\n />\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 },\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 unstyled\n className=\"cr-menubar__bar\"\n model={[]}\n start={start}\n end={end}\n pt={pt}\n />\n </div>\n );\n});\n","import { forwardRef, useId, type Ref } from 'react';\nimport {\n MultiSelect as PrimeMultiSelect,\n type MultiSelectPassThroughOptions,\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 '../Input/Input.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\nexport interface MultiSelectProps {\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 Input (.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 const checkbox = {\n root: { className: 'cr-multiselect__checkbox' },\n box: { className: 'cr-multiselect__checkbox-box' },\n input: { className: '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-multiselect__hidden' },\n input: {\n 'aria-describedby': supportText ? hintId : undefined,\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-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-multiselect__wrapper' },\n list: { className: 'cr-multiselect__list' },\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-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 };\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 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"]}
|
package/package.json
CHANGED