vector-prototype-components 0.1.2 → 0.1.3
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/Accordion/Accordion.js +79 -0
- package/Accordion/Accordion.js.map +1 -0
- package/Accordion/Accordion.module.css +1 -0
- package/Accordion/Accordion.module.css.js +36 -0
- package/Accordion/Accordion.module.css.js.map +1 -0
- package/ActionMenu/ActionMenu.js +49 -0
- package/ActionMenu/ActionMenu.js.map +1 -0
- package/ActionMenu/ActionMenu.module.css +1 -0
- package/ActionMenu/ActionMenu.module.css.js +16 -0
- package/ActionMenu/ActionMenu.module.css.js.map +1 -0
- package/Autocomplete/Autocomplete.js +226 -0
- package/Autocomplete/Autocomplete.js.map +1 -0
- package/Autocomplete/Autocomplete.module.css +1 -0
- package/Autocomplete/Autocomplete.module.css.js +46 -0
- package/Autocomplete/Autocomplete.module.css.js.map +1 -0
- package/Avatar/Avatar.js +66 -0
- package/Avatar/Avatar.js.map +1 -0
- package/Avatar/Avatar.module.css +1 -0
- package/Avatar/Avatar.module.css.js +26 -0
- package/Avatar/Avatar.module.css.js.map +1 -0
- package/Badge/Badge.js +40 -0
- package/Badge/Badge.js.map +1 -0
- package/Badge/Badge.module.css +1 -0
- package/Badge/Badge.module.css.js +24 -0
- package/Badge/Badge.module.css.js.map +1 -0
- package/BottomBar/BottomBar.js +19 -0
- package/BottomBar/BottomBar.js.map +1 -0
- package/BottomBar/BottomBar.module.css +1 -0
- package/BottomBar/BottomBar.module.css.js +10 -0
- package/BottomBar/BottomBar.module.css.js.map +1 -0
- package/Breadcrumbs/Breadcrumbs.js +40 -0
- package/Breadcrumbs/Breadcrumbs.js.map +1 -0
- package/Breadcrumbs/Breadcrumbs.module.css +1 -0
- package/Breadcrumbs/Breadcrumbs.module.css.js +18 -0
- package/Breadcrumbs/Breadcrumbs.module.css.js.map +1 -0
- package/Button/Button.js +53 -0
- package/Button/Button.js.map +1 -0
- package/Button/Button.module.css +1 -0
- package/Button/Button.module.css.js +24 -0
- package/Button/Button.module.css.js.map +1 -0
- package/Callout/Callout.js +66 -0
- package/Callout/Callout.js.map +1 -0
- package/Callout/Callout.module.css +1 -0
- package/Callout/Callout.module.css.js +28 -0
- package/Callout/Callout.module.css.js.map +1 -0
- package/Card/Card.js +39 -0
- package/Card/Card.js.map +1 -0
- package/Card/Card.module.css +1 -0
- package/Card/Card.module.css.js +18 -0
- package/Card/Card.module.css.js.map +1 -0
- package/Checkbox/Checkbox.js +90 -0
- package/Checkbox/Checkbox.js.map +1 -0
- package/Checkbox/Checkbox.module.css +1 -0
- package/Checkbox/Checkbox.module.css.js +22 -0
- package/Checkbox/Checkbox.module.css.js.map +1 -0
- package/Chip/Chip.js +62 -0
- package/Chip/Chip.js.map +1 -0
- package/Chip/Chip.module.css +1 -0
- package/Chip/Chip.module.css.js +24 -0
- package/Chip/Chip.module.css.js.map +1 -0
- package/DatePicker/DatePicker.js +157 -0
- package/DatePicker/DatePicker.js.map +1 -0
- package/DatePicker/DatePicker.module.css +1 -0
- package/DatePicker/DatePicker.module.css.js +48 -0
- package/DatePicker/DatePicker.module.css.js.map +1 -0
- package/DatePicker/DatePickerCalendar.js +94 -0
- package/DatePicker/DatePickerCalendar.js.map +1 -0
- package/DatePicker/DatePickerCalendar.module.css +1 -0
- package/DatePicker/DatePickerCalendar.module.css.js +32 -0
- package/DatePicker/DatePickerCalendar.module.css.js.map +1 -0
- package/Divider/Divider.js +22 -0
- package/Divider/Divider.js.map +1 -0
- package/Divider/Divider.module.css +1 -0
- package/Divider/Divider.module.css.js +12 -0
- package/Divider/Divider.module.css.js.map +1 -0
- package/Dropdown/Dropdown.js +100 -0
- package/Dropdown/Dropdown.js.map +1 -0
- package/Dropdown/Dropdown.module.css +1 -0
- package/Dropdown/Dropdown.module.css.js +20 -0
- package/Dropdown/Dropdown.module.css.js.map +1 -0
- package/Icon/Icon.js +8 -0
- package/Icon/Icon.js.map +1 -0
- package/IconButton/IconButton.js +42 -0
- package/IconButton/IconButton.js.map +1 -0
- package/IconButton/IconButton.module.css +1 -0
- package/IconButton/IconButton.module.css.js +20 -0
- package/IconButton/IconButton.module.css.js.map +1 -0
- package/InputNumber/InputNumber.js +106 -0
- package/InputNumber/InputNumber.js.map +1 -0
- package/InputNumber/InputNumber.module.css +1 -0
- package/InputNumber/InputNumber.module.css.js +30 -0
- package/InputNumber/InputNumber.module.css.js.map +1 -0
- package/Menu/Menu.js +182 -0
- package/Menu/Menu.js.map +1 -0
- package/Menu/Menu.module.css +1 -0
- package/Menu/Menu.module.css.js +56 -0
- package/Menu/Menu.module.css.js.map +1 -0
- package/Menu/menuData.js +188 -0
- package/Menu/menuData.js.map +1 -0
- package/Message/Message.js +88 -0
- package/Message/Message.js.map +1 -0
- package/Message/Message.module.css +1 -0
- package/Message/Message.module.css.js +32 -0
- package/Message/Message.module.css.js.map +1 -0
- package/Modal/Modal.js +186 -0
- package/Modal/Modal.js.map +1 -0
- package/Modal/Modal.module.css +1 -0
- package/Modal/Modal.module.css.js +44 -0
- package/Modal/Modal.module.css.js.map +1 -0
- package/Multiselect/Multiselect.js +249 -0
- package/Multiselect/Multiselect.js.map +1 -0
- package/Multiselect/Multiselect.module.css +1 -0
- package/Multiselect/Multiselect.module.css.js +64 -0
- package/Multiselect/Multiselect.module.css.js.map +1 -0
- package/Overlay/Overlay.js +18 -0
- package/Overlay/Overlay.js.map +1 -0
- package/Overlay/Overlay.module.css +1 -0
- package/Overlay/Overlay.module.css.js +8 -0
- package/Overlay/Overlay.module.css.js.map +1 -0
- package/Paginator/Paginator.js +118 -0
- package/Paginator/Paginator.js.map +1 -0
- package/Paginator/Paginator.module.css +1 -0
- package/Paginator/Paginator.module.css.js +22 -0
- package/Paginator/Paginator.module.css.js.map +1 -0
- package/Panel/Panel.js +38 -0
- package/Panel/Panel.js.map +1 -0
- package/Panel/Panel.module.css +1 -0
- package/Panel/Panel.module.css.js +16 -0
- package/Panel/Panel.module.css.js.map +1 -0
- package/ProgressSpinner/ProgressSpinner.js +64 -0
- package/ProgressSpinner/ProgressSpinner.js.map +1 -0
- package/ProgressSpinner/ProgressSpinner.module.css +1 -0
- package/ProgressSpinner/ProgressSpinner.module.css.js +16 -0
- package/ProgressSpinner/ProgressSpinner.module.css.js.map +1 -0
- package/Radio/Radio.js +44 -0
- package/Radio/Radio.js.map +1 -0
- package/Radio/Radio.module.css +1 -0
- package/Radio/Radio.module.css.js +18 -0
- package/Radio/Radio.module.css.js.map +1 -0
- package/SegmentControl/SegmentControl.js +74 -0
- package/SegmentControl/SegmentControl.js.map +1 -0
- package/SegmentControl/SegmentControl.module.css +1 -0
- package/SegmentControl/SegmentControl.module.css.js +16 -0
- package/SegmentControl/SegmentControl.module.css.js.map +1 -0
- package/Select/Select.js +153 -0
- package/Select/Select.js.map +1 -0
- package/Select/Select.module.css +1 -0
- package/Select/Select.module.css.js +46 -0
- package/Select/Select.module.css.js.map +1 -0
- package/Skeleton/Skeleton.js +78 -0
- package/Skeleton/Skeleton.js.map +1 -0
- package/Skeleton/Skeleton.module.css +1 -0
- package/Skeleton/Skeleton.module.css.js +18 -0
- package/Skeleton/Skeleton.module.css.js.map +1 -0
- package/Slider/Slider.js +116 -0
- package/Slider/Slider.js.map +1 -0
- package/Slider/Slider.module.css +1 -0
- package/Slider/Slider.module.css.js +24 -0
- package/Slider/Slider.module.css.js.map +1 -0
- package/Slot/Slot.js +25 -0
- package/Slot/Slot.js.map +1 -0
- package/Slot/Slot.module.css +1 -0
- package/Slot/Slot.module.css.js +16 -0
- package/Slot/Slot.module.css.js.map +1 -0
- package/Switch/Switch.js +42 -0
- package/Switch/Switch.js.map +1 -0
- package/Switch/Switch.module.css +1 -0
- package/Switch/Switch.module.css.js +11 -0
- package/Switch/Switch.module.css.js.map +1 -0
- package/Table/Table.js +268 -0
- package/Table/Table.js.map +1 -0
- package/Table/Table.module.css +1 -0
- package/Table/Table.module.css.js +64 -0
- package/Table/Table.module.css.js.map +1 -0
- package/TableTree/TableTree.js +139 -0
- package/TableTree/TableTree.js.map +1 -0
- package/TableTree/TableTree.module.css +1 -0
- package/TableTree/TableTree.module.css.js +62 -0
- package/TableTree/TableTree.module.css.js.map +1 -0
- package/Tabs/Tabs.js +92 -0
- package/Tabs/Tabs.js.map +1 -0
- package/Tabs/Tabs.module.css +1 -0
- package/Tabs/Tabs.module.css.js +18 -0
- package/Tabs/Tabs.module.css.js.map +1 -0
- package/Tag/Tag.js +48 -0
- package/Tag/Tag.js.map +1 -0
- package/Tag/Tag.module.css +1 -0
- package/Tag/Tag.module.css.js +30 -0
- package/Tag/Tag.module.css.js.map +1 -0
- package/TextField/TextField.js +93 -0
- package/TextField/TextField.js.map +1 -0
- package/TextField/TextField.module.css +1 -0
- package/TextField/TextField.module.css.js +36 -0
- package/TextField/TextField.module.css.js.map +1 -0
- package/Textarea/Textarea.js +52 -0
- package/Textarea/Textarea.js.map +1 -0
- package/Textarea/Textarea.module.css +1 -0
- package/Textarea/Textarea.module.css.js +32 -0
- package/Textarea/Textarea.module.css.js.map +1 -0
- package/Toast/Toast.js +82 -0
- package/Toast/Toast.js.map +1 -0
- package/Toast/Toast.module.css +1 -0
- package/Toast/Toast.module.css.js +28 -0
- package/Toast/Toast.module.css.js.map +1 -0
- package/Tooltip/Tooltip.js +61 -0
- package/Tooltip/Tooltip.js.map +1 -0
- package/Tooltip/Tooltip.module.css +1 -0
- package/Tooltip/Tooltip.module.css.js +26 -0
- package/Tooltip/Tooltip.module.css.js.map +1 -0
- package/TopBar/TopBar.js +87 -0
- package/TopBar/TopBar.js.map +1 -0
- package/TopBar/TopBar.module.css +1 -0
- package/TopBar/TopBar.module.css.js +30 -0
- package/TopBar/TopBar.module.css.js.map +1 -0
- package/index.js +90 -4157
- package/index.js.map +1 -1
- package/package.json +3 -4
- package/style.css +0 -1
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/Icon/Icon.tsx","../src/Slot/Slot.tsx","../src/Accordion/Accordion.tsx","../src/ActionMenu/ActionMenu.tsx","../src/Dropdown/Dropdown.tsx","../src/Autocomplete/Autocomplete.tsx","../src/Avatar/Avatar.tsx","../src/Badge/Badge.tsx","../src/BottomBar/BottomBar.tsx","../src/Breadcrumbs/Breadcrumbs.tsx","../src/Button/Button.tsx","../src/Callout/Callout.tsx","../src/Chip/Chip.tsx","../src/Card/Card.tsx","../src/Checkbox/Checkbox.tsx","../src/DatePicker/DatePickerCalendar.tsx","../src/DatePicker/DatePicker.tsx","../src/Divider/Divider.tsx","../src/IconButton/IconButton.tsx","../src/Menu/menuData.ts","../src/Menu/Menu.tsx","../src/ProgressSpinner/ProgressSpinner.tsx","../src/Modal/Modal.tsx","../src/Message/Message.tsx","../src/Overlay/Overlay.tsx","../src/Paginator/Paginator.tsx","../src/Panel/Panel.tsx","../src/Radio/Radio.tsx","../src/Select/Select.tsx","../src/Multiselect/Multiselect.tsx","../src/SegmentControl/SegmentControl.tsx","../src/Skeleton/Skeleton.tsx","../src/TextField/TextField.tsx","../src/Slider/Slider.tsx","../src/Switch/Switch.tsx","../src/InputNumber/InputNumber.tsx","../src/Tag/Tag.tsx","../src/Textarea/Textarea.tsx","../src/Tabs/Tabs.tsx","../src/Toast/Toast.tsx","../src/Tooltip/Tooltip.tsx","../src/Table/Table.tsx","../src/TableTree/TableTree.tsx","../src/TopBar/TopBar.tsx"],"sourcesContent":["import React from 'react';\nimport type { Icon as PhosphorIcon, IconProps as PhosphorIconProps } from '@phosphor-icons/react';\n\nexport type { IconWeight } from '@phosphor-icons/react';\n\nexport interface IconProps extends Omit<PhosphorIconProps, 'weight'> {\n as: PhosphorIcon;\n weight?: PhosphorIconProps['weight'];\n}\n\nexport function Icon({ as: PhIcon, size = 20, weight = 'bold', ...props }: IconProps) {\n return <PhIcon size={size} weight={weight} {...props} />;\n}\n","import React from 'react';\nimport type { Icon as PhosphorIcon } from '@phosphor-icons/react';\nimport { BoxArrowUp } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport styles from './Slot.module.css';\n\nexport interface SlotProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Content to render inside the slot.\n * When provided, the placeholder indicator is hidden and children\n * fill the slot area directly.\n */\n children?: React.ReactNode;\n /**\n * Icon shown in the empty-state indicator badge.\n * Defaults to BoxArrowUp (matches the Figma Slot placeholder).\n */\n placeholderIcon?: PhosphorIcon;\n /**\n * Label shown next to the icon in the empty-state indicator.\n * Defaults to \"Slot\".\n */\n placeholderLabel?: string;\n}\n\nexport function Slot({\n children,\n placeholderIcon,\n placeholderLabel = 'Slot',\n className,\n ...props\n}: SlotProps) {\n const isEmpty = children == null || (typeof children === 'string' && children.trim() === '');\n const IconComponent = placeholderIcon ?? BoxArrowUp;\n\n const cls = [\n styles.slot,\n isEmpty ? styles.slotEmpty : styles.slotFilled,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={cls} {...props}>\n {isEmpty ? (\n <>\n <span className={styles.iconBadge} aria-hidden=\"true\">\n <Icon as={IconComponent} size={16} weight=\"bold\" />\n </span>\n <span className={styles.label}>{placeholderLabel}</span>\n </>\n ) : (\n children\n )}\n </div>\n );\n}\n","import React, { useState } from 'react';\nimport { Minus, Plus } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport { Slot } from '../Slot/index.js';\nimport styles from './Accordion.module.css';\n\nexport type AccordionType = 'default' | 'slot';\n\nexport interface AccordionProps {\n /** The title shown in the accordion header */\n title: string;\n /** Optional subtitle / description shown below the title */\n description?: string;\n /** Content rendered inside the expanded body */\n children?: React.ReactNode;\n /**\n * When type=\"slot\", the header area renders `children` inside the header\n * instead of title/description text, mirroring the Figma \"Slot\" variant.\n * When type=\"default\" (the default), title/description is shown in the\n * header and children are rendered in the body once expanded.\n */\n type?: AccordionType;\n /** Whether the accordion starts expanded */\n defaultExpanded?: boolean;\n /** Controlled expanded state */\n expanded?: boolean;\n /** Callback fired when the header is toggled */\n onToggle?: (expanded: boolean) => void;\n /** Disables the accordion */\n disabled?: boolean;\n /** Additional class applied to the root element */\n className?: string;\n}\n\nexport function Accordion({\n title,\n description,\n children,\n type = 'default',\n defaultExpanded = false,\n expanded: controlledExpanded,\n onToggle,\n disabled = false,\n className,\n}: AccordionProps) {\n const [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n\n const isControlled = controlledExpanded !== undefined;\n const isExpanded = isControlled ? controlledExpanded : internalExpanded;\n\n function handleToggle() {\n if (disabled) return;\n const next = !isExpanded;\n if (!isControlled) {\n setInternalExpanded(next);\n }\n onToggle?.(next);\n }\n\n const rootCls = [styles.accordion, className].filter(Boolean).join(' ');\n const headerCls = [\n styles.header,\n isExpanded ? styles.headerExpanded : '',\n disabled ? styles.headerDisabled : '',\n ]\n .filter(Boolean)\n .join(' ');\n const chevronCls = [styles.chevron, isExpanded ? styles.chevronExpanded : '']\n .filter(Boolean)\n .join(' ');\n\n const headerId = React.useId();\n const panelId = React.useId();\n\n return (\n <div\n className={rootCls}\n aria-disabled={disabled || undefined}\n data-expanded={isExpanded}\n >\n <button\n id={headerId}\n className={headerCls}\n onClick={handleToggle}\n disabled={disabled}\n aria-expanded={isExpanded}\n aria-controls={panelId}\n type=\"button\"\n >\n {type === 'slot' ? (\n <div className={styles.slotWrapper}>{title}</div>\n ) : (\n <div className={styles.headerText}>\n <p className={styles.title}>{title}</p>\n {description && (\n <p className={styles.description}>{description}</p>\n )}\n </div>\n )}\n\n <span className={styles.iconButton} aria-hidden=\"true\">\n <Icon as={isExpanded ? Minus : Plus} size={16} className={chevronCls} />\n </span>\n </button>\n\n <div\n className={[styles.bodyWrapper, isExpanded ? styles.bodyWrapperExpanded : ''].filter(Boolean).join(' ')}\n aria-hidden={isExpanded ? undefined : true}\n >\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={headerId}\n className={styles.body}\n >\n <div className={styles.bodyContent}>\n <Slot>{children}</Slot>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport type { Icon as PhosphorIcon } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport styles from './ActionMenu.module.css';\n\n/* ─── ActionMenuItem ─────────────────────────────────────────── */\n\nexport interface ActionMenuItemProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Optional leading icon from @phosphor-icons/react */\n icon?: PhosphorIcon;\n /** Text label for the item */\n label: string;\n /** Whether the item is disabled */\n disabled?: boolean;\n}\n\nexport function ActionMenuItem({\n icon,\n label,\n disabled,\n className,\n ...props\n}: ActionMenuItemProps) {\n const cls = [\n styles.item,\n disabled ? styles.itemDisabled : undefined,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <li role=\"none\">\n <button\n type=\"button\"\n className={cls}\n disabled={disabled}\n aria-disabled={disabled}\n {...props}\n >\n {icon && (\n <span className={styles.itemIcon}>\n <Icon as={icon} size={20} />\n </span>\n )}\n <span className={styles.itemLabel}>{label}</span>\n </button>\n </li>\n );\n}\n\n/* ─── ActionMenu ─────────────────────────────────────────────── */\n\nexport interface ActionMenuItemConfig {\n /** Unique key for the item */\n key?: string;\n /** Text label */\n label: string;\n /** Optional leading icon */\n icon?: PhosphorIcon;\n /** Whether the item is disabled */\n disabled?: boolean;\n /** Click handler */\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n}\n\nexport interface ActionMenuProps extends React.HTMLAttributes<HTMLUListElement> {\n /** Array of menu item configurations */\n items: ActionMenuItemConfig[];\n}\n\nexport function ActionMenu({ items, className, ...props }: ActionMenuProps) {\n const cls = [styles.menu, className].filter(Boolean).join(' ');\n\n return (\n <ul role=\"menu\" className={cls} {...props}>\n {items.map((item, index) => (\n <ActionMenuItem\n key={item.key ?? index}\n icon={item.icon}\n label={item.label}\n disabled={item.disabled}\n onClick={item.onClick}\n role=\"menuitem\"\n />\n ))}\n </ul>\n );\n}\n","import React from 'react';\nimport type { Icon as PhosphorIcon } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport styles from './Dropdown.module.css';\n\n// ─── DropdownItem ────────────────────────────────────────────────────────────\n\nexport interface DropdownItemProps {\n /** Display label for the item. */\n label: string;\n /** Unique value identifying this item. */\n value: string;\n /** Whether the item is currently selected. */\n selected?: boolean;\n /** Whether the item is keyboard-highlighted (combobox usage). */\n active?: boolean;\n /** Whether the item is disabled. */\n disabled?: boolean;\n /** Optional leading icon. */\n leadingIcon?: PhosphorIcon;\n /** DOM id (used for aria-activedescendant wiring in combobox usage). */\n id?: string;\n /** Whether the item is focusable. False when a sibling element owns focus (combobox). */\n focusable?: boolean;\n /** Select on pointer-down instead of click — keeps a sibling input focused. */\n selectOnPointerDown?: boolean;\n /** Called when the item is chosen. */\n onClick?: (value: string) => void;\n /** Called when the pointer enters the item (host can sync highlight). */\n onHover?: () => void;\n}\n\nfunction DropdownItem({\n label,\n value,\n selected = false,\n active = false,\n disabled = false,\n leadingIcon,\n id,\n focusable = true,\n selectOnPointerDown = false,\n onClick,\n onHover,\n}: DropdownItemProps) {\n const cls = [\n styles.item,\n selected ? styles.itemSelected : undefined,\n active ? styles.itemActive : undefined,\n disabled ? styles.itemDisabled : undefined,\n ]\n .filter(Boolean)\n .join(' ');\n\n function choose() {\n if (!disabled && onClick) onClick(value);\n }\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLButtonElement>) {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n choose();\n }\n }\n\n return (\n <button\n type=\"button\"\n role=\"option\"\n id={id}\n aria-selected={selected}\n aria-disabled={disabled}\n className={cls}\n onClick={selectOnPointerDown ? undefined : choose}\n onMouseDown={\n selectOnPointerDown\n ? (e) => {\n // Prevent the sibling input from blurring before selection registers\n e.preventDefault();\n choose();\n }\n : undefined\n }\n onMouseEnter={onHover}\n onKeyDown={focusable ? handleKeyDown : undefined}\n tabIndex={!focusable || disabled ? -1 : 0}\n >\n {leadingIcon && <Icon as={leadingIcon} size={16} />}\n {label}\n </button>\n );\n}\n\n// ─── Dropdown ────────────────────────────────────────────────────────────────\n\nexport interface DropdownOption {\n /** Display label. */\n label: string;\n /** Unique value. */\n value: string;\n /** Whether this option is disabled. */\n disabled?: boolean;\n /** Optional leading icon. */\n leadingIcon?: PhosphorIcon;\n}\n\nexport interface DropdownProps {\n /** List of options to display in the dropdown panel. */\n options: DropdownOption[];\n /** Currently selected value. */\n selectedValue?: string;\n /** Called when an option is selected. */\n onSelect?: (value: string) => void;\n /** Additional class name for the panel container. */\n className?: string;\n /** DOM id for the listbox (for aria-controls / aria-owns wiring). */\n id?: string;\n /** ARIA label for the listbox. */\n 'aria-label'?: string;\n /** ARIA labelledby for the listbox. */\n 'aria-labelledby'?: string;\n\n /* ─── Combobox building-block usage (e.g. Autocomplete) ─────────────────── */\n /** Index of the keyboard-highlighted option. */\n activeIndex?: number;\n /** Generate the DOM id for an option, enabling aria-activedescendant on a host input. */\n getOptionId?: (value: string, index: number) => string;\n /** When false, options are not focusable — a host element (combobox input) owns focus. */\n optionsFocusable?: boolean;\n /** Select on pointer-down instead of click (keeps a sibling input focused). */\n selectOnPointerDown?: boolean;\n /** Called when the pointer enters an option (host can sync its highlight). */\n onOptionHover?: (index: number) => void;\n /** Message rendered when there are no options. */\n emptyMessage?: string;\n /** Make the panel fill its container width instead of hugging content. */\n fluid?: boolean;\n}\n\nexport function Dropdown({\n options,\n selectedValue,\n onSelect,\n className,\n id,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n activeIndex,\n getOptionId,\n optionsFocusable = true,\n selectOnPointerDown = false,\n onOptionHover,\n emptyMessage,\n fluid = false,\n}: DropdownProps) {\n const panelCls = [styles.dropdown, fluid ? styles.fluid : undefined, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n role=\"listbox\"\n id={id}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n className={panelCls}\n >\n {options.length === 0 && emptyMessage ? (\n <div className={styles.empty} role=\"presentation\">\n {emptyMessage}\n </div>\n ) : (\n options.map((opt, index) => (\n <DropdownItem\n key={opt.value}\n id={getOptionId?.(opt.value, index)}\n label={opt.label}\n value={opt.value}\n selected={opt.value === selectedValue}\n active={activeIndex === index}\n disabled={opt.disabled}\n leadingIcon={opt.leadingIcon}\n focusable={optionsFocusable}\n selectOnPointerDown={selectOnPointerDown}\n onClick={onSelect}\n onHover={onOptionHover ? () => onOptionHover(index) : undefined}\n />\n ))\n )}\n </div>\n );\n}\n","import React, { useRef, useState, useId, useCallback, useEffect } from 'react';\nimport type { Icon as PhosphorIcon } from '@phosphor-icons/react';\nimport { CaretDown, Info, XCircle, CheckCircle, Warning } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport { Dropdown } from '../Dropdown/index.js';\nimport styles from './Autocomplete.module.css';\n\nexport type AutocompleteState = 'default' | 'danger' | 'success';\nexport type AutocompleteHintType = 'default' | 'danger' | 'success' | 'warning';\n\nexport interface AutocompleteOption {\n label: string;\n value: string;\n}\n\nexport interface AutocompleteProps {\n /** Options to display in the dropdown */\n options: AutocompleteOption[];\n /** Currently selected value */\n value?: string;\n /** Callback when selection changes */\n onChange?: (value: string) => void;\n /** Placeholder text shown when no value is selected */\n placeholder?: string;\n /** Field label */\n label?: string;\n /** Whether to show the label */\n showLabel?: boolean;\n /** Hint message shown below the field */\n hint?: string;\n /** Visual validation state */\n state?: AutocompleteState;\n /** Disabled state */\n disabled?: boolean;\n /** Leading icon in the field */\n leadingIcon?: PhosphorIcon;\n /** Additional class name */\n className?: string;\n /** aria-label for the input (used when label is hidden) */\n 'aria-label'?: string;\n /** ID for the input element */\n id?: string;\n}\n\nconst HINT_ICON: Record<AutocompleteHintType, PhosphorIcon> = {\n default: Info,\n danger: XCircle,\n success: CheckCircle,\n warning: Warning,\n};\n\nconst HINT_CLASS: Record<AutocompleteHintType, string> = {\n default: '',\n danger: styles.hintDanger,\n success: styles.hintSuccess,\n warning: styles.hintWarning,\n};\n\nfunction getHintType(state: AutocompleteState): AutocompleteHintType {\n if (state === 'danger') return 'danger';\n if (state === 'success') return 'success';\n return 'default';\n}\n\nexport function Autocomplete({\n options,\n value,\n onChange,\n placeholder = 'Digite para buscar',\n label = 'Label',\n showLabel = true,\n hint,\n state = 'default',\n disabled = false,\n leadingIcon,\n className,\n 'aria-label': ariaLabel,\n id: idProp,\n}: AutocompleteProps) {\n const generatedId = useId();\n const inputId = idProp ?? `autocomplete-${generatedId}`;\n const listboxId = `${inputId}-listbox`;\n\n const [inputValue, setInputValue] = useState('');\n const [isOpen, setIsOpen] = useState(false);\n const [highlightedIndex, setHighlightedIndex] = useState<number>(-1);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const inputValueRef = useRef('');\n\n // Derive display value: when closed and a value is selected, show its label\n const selectedOption = options.find((o) => o.value === value);\n\n const filteredOptions = inputValue.trim()\n ? options.filter((o) =>\n o.label.toLowerCase().includes(inputValue.toLowerCase())\n )\n : options;\n\n const openMenu = useCallback(() => {\n if (!disabled) {\n setIsOpen(true);\n setHighlightedIndex(-1);\n }\n }, [disabled]);\n\n const closeMenu = useCallback((commit = true) => {\n if (commit) {\n const typed = inputValueRef.current.trim();\n if (typed) {\n const matchedOption = options.find(\n (o) => o.label.toLowerCase() === typed.toLowerCase()\n );\n onChange?.(matchedOption ? matchedOption.value : typed);\n }\n }\n setIsOpen(false);\n setHighlightedIndex(-1);\n inputValueRef.current = '';\n setInputValue('');\n }, [options, onChange]);\n\n const selectOption = useCallback(\n (option: AutocompleteOption) => {\n onChange?.(option.value);\n closeMenu(false);\n inputRef.current?.blur();\n },\n [onChange, closeMenu]\n );\n\n // Close on outside click\n useEffect(() => {\n function handlePointerDown(e: MouseEvent) {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n closeMenu();\n }\n }\n if (isOpen) {\n document.addEventListener('mousedown', handlePointerDown);\n }\n return () => {\n document.removeEventListener('mousedown', handlePointerDown);\n };\n }, [isOpen, closeMenu]);\n\n function handleInputChange(e: React.ChangeEvent<HTMLInputElement>) {\n const val = e.target.value;\n inputValueRef.current = val;\n setInputValue(val);\n setHighlightedIndex(-1);\n if (!isOpen && val.trim()) {\n const hasMatches = options.some((o) =>\n o.label.toLowerCase().includes(val.toLowerCase())\n );\n if (hasMatches) openMenu();\n }\n }\n\n function handleInputBlur() {\n const typed = inputValueRef.current.trim();\n if (typed) {\n const matched = options.find(\n (o) => o.label.toLowerCase() === typed.toLowerCase()\n );\n onChange?.(matched ? matched.value : typed);\n }\n inputValueRef.current = '';\n setInputValue('');\n setIsOpen(false);\n setHighlightedIndex(-1);\n }\n\n function handleCaretClick(e: React.MouseEvent) {\n e.stopPropagation();\n if (disabled) return;\n inputRef.current?.focus();\n if (isOpen) {\n closeMenu(false);\n } else {\n openMenu();\n }\n }\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {\n if (disabled) return;\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n if (!isOpen) openMenu();\n setHighlightedIndex((prev) =>\n prev < filteredOptions.length - 1 ? prev + 1 : 0\n );\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n if (!isOpen) openMenu();\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : filteredOptions.length - 1\n );\n break;\n }\n case 'Enter': {\n e.preventDefault();\n if (isOpen && highlightedIndex >= 0 && filteredOptions[highlightedIndex]) {\n selectOption(filteredOptions[highlightedIndex]);\n } else if (isOpen) {\n closeMenu(true);\n inputRef.current?.blur();\n } else {\n // Dropdown closed (e.g. no matches): commit whatever was typed\n const typed = inputValueRef.current.trim();\n if (typed) {\n const matched = options.find(\n (o) => o.label.toLowerCase() === typed.toLowerCase()\n );\n onChange?.(matched ? matched.value : typed);\n inputValueRef.current = '';\n setInputValue('');\n }\n inputRef.current?.blur();\n }\n break;\n }\n case 'Escape': {\n closeMenu(false);\n inputRef.current?.blur();\n break;\n }\n case 'Tab': {\n closeMenu(true);\n break;\n }\n }\n }\n\n function handleFieldClick() {\n if (disabled) return;\n inputRef.current?.focus();\n }\n\n const hintType = getHintType(state);\n const HintIcon = HINT_ICON[hintType];\n\n const fieldClasses = [\n styles.field,\n state === 'danger' ? styles.fieldDanger : '',\n state === 'success' ? styles.fieldSuccess : '',\n disabled ? styles.fieldDisabled : '',\n isOpen ? styles.fieldOpen : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n const rootClasses = [\n styles.autocomplete,\n disabled ? styles.autocompleteDisabled : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Show typed text if user is typing; otherwise show committed value (option label or free-form)\n const inputDisplayValue = inputValue !== '' ? inputValue : (selectedOption?.label ?? value ?? '');\n\n return (\n <div className={rootClasses} ref={containerRef}>\n <div className={styles.topGroup}>\n {showLabel && (\n <label className={styles.label} htmlFor={inputId}>\n {label}\n </label>\n )}\n\n <div className={styles.menuWrapper}>\n <div\n className={fieldClasses}\n onClick={handleFieldClick}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-owns={listboxId}\n aria-controls={listboxId}\n >\n {leadingIcon && <Icon as={leadingIcon} size={16} />}\n\n <div className={styles.fieldContent}>\n <input\n ref={inputRef}\n id={inputId}\n className={styles.input}\n type=\"text\"\n role=\"searchbox\"\n autoComplete=\"off\"\n aria-autocomplete=\"list\"\n aria-controls={listboxId}\n aria-activedescendant={\n highlightedIndex >= 0\n ? `${listboxId}-option-${highlightedIndex}`\n : undefined\n }\n aria-label={!showLabel ? (ariaLabel ?? label) : undefined}\n disabled={disabled}\n value={inputDisplayValue}\n placeholder={placeholder}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n onKeyDown={handleKeyDown}\n />\n </div>\n\n <Icon\n as={CaretDown}\n size={16}\n className={`${styles.caretIcon}${isOpen ? ` ${styles.caretIconOpen}` : ''}`}\n weight=\"bold\"\n onClick={handleCaretClick}\n />\n </div>\n\n {isOpen && (\n <Dropdown\n id={listboxId}\n aria-label={label}\n className={styles.menuPanel}\n fluid\n options={filteredOptions}\n selectedValue={value}\n activeIndex={highlightedIndex}\n getOptionId={(_v, index) => `${listboxId}-option-${index}`}\n optionsFocusable={false}\n selectOnPointerDown\n onOptionHover={setHighlightedIndex}\n onSelect={(v) => {\n const opt = filteredOptions.find((o) => o.value === v);\n if (opt) selectOption(opt);\n }}\n emptyMessage=\"No options found\"\n />\n )}\n </div>\n </div>\n\n {hint && (\n <div className={`${styles.hint} ${HINT_CLASS[hintType]}`}>\n <Icon as={HintIcon} size={16} className={styles.hintIcon} />\n <span>{hint}</span>\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport type { Icon as PhosphorIcon } from '@phosphor-icons/react';\nimport { User } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport styles from './Avatar.module.css';\n\nexport type AvatarSize = 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';\nexport type AvatarType = 'image' | 'initials' | 'icon';\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Visual size of the avatar */\n size?: AvatarSize;\n /**\n * Display type:\n * - \"image\" → renders a photo (requires `src`)\n * - \"initials\" → renders up to 2 letters of text (requires `initials`)\n * - \"icon\" → renders a phosphor icon (defaults to User icon)\n */\n type?: AvatarType;\n /**\n * Image URL. Only used when type=\"image\".\n * Falls back to icon when the image fails to load.\n */\n src?: string;\n /** Alt text for the image when type=\"image\". */\n alt?: string;\n /**\n * Text shown inside the avatar when type=\"initials\".\n * Only the first 2 characters are rendered.\n */\n initials?: string;\n /**\n * Phosphor icon component rendered when type=\"icon\".\n * Defaults to the User icon.\n */\n icon?: PhosphorIcon;\n /** Whether the avatar is in a disabled state */\n disabled?: boolean;\n}\n\nconst SIZE_CLASS: Record<AvatarSize, string> = {\n xsmall: styles.sizeXsmall,\n small: styles.sizeSmall,\n medium: styles.sizeMedium,\n large: styles.sizeLarge,\n xlarge: styles.sizeXlarge,\n};\n\nconst ICON_SIZE: Record<AvatarSize, number> = {\n xsmall: 12,\n small: 16,\n medium: 20,\n large: 24,\n xlarge: 28,\n};\n\nexport function Avatar({\n size = 'medium',\n type = 'icon',\n src,\n alt = '',\n initials,\n icon,\n disabled = false,\n className,\n ...props\n}: AvatarProps) {\n const [imgError, setImgError] = React.useState(false);\n\n // Determine effective type: fall back to icon if image fails to load\n const effectiveType: AvatarType =\n type === 'image' && (imgError || !src) ? 'icon' : type;\n\n const cls = [\n styles.avatar,\n SIZE_CLASS[size],\n effectiveType === 'image' && !imgError && src ? styles.image : undefined,\n effectiveType === 'initials' ? styles.initials : undefined,\n effectiveType === 'icon' ? styles.icon : undefined,\n disabled ? styles.disabled : undefined,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const iconSize = ICON_SIZE[size];\n const IconComponent = icon ?? User;\n\n return (\n <span\n className={cls}\n aria-disabled={disabled || undefined}\n role=\"img\"\n aria-label={\n alt ||\n (type === 'initials' && initials ? initials : undefined) ||\n 'avatar'\n }\n {...props}\n >\n {effectiveType === 'image' && src && !imgError && (\n <img\n src={src}\n alt={alt}\n aria-hidden=\"true\"\n onError={() => setImgError(true)}\n />\n )}\n {effectiveType === 'initials' && (\n <span aria-hidden=\"true\">\n {(initials ?? '').slice(0, 2).toUpperCase()}\n </span>\n )}\n {effectiveType === 'icon' && (\n <Icon as={IconComponent} size={iconSize} />\n )}\n </span>\n );\n}\n","import React from 'react';\nimport styles from './Badge.module.css';\n\nexport type BadgeSize = 'small' | 'medium' | 'large';\nexport type BadgeState = 'default' | 'danger' | 'success' | 'warning' | 'disabled';\n\nexport interface BadgeProps {\n /** Visual state / semantic color of the badge */\n state?: BadgeState;\n /** Size of the badge. \"small\" renders a dot only (no text). */\n size?: BadgeSize;\n /**\n * Numeric or short text label shown inside medium/large badges.\n * Ignored when size=\"small\".\n */\n label?: string | number;\n /** Additional CSS class names */\n className?: string;\n /** aria-label for accessibility when no surrounding text provides context */\n 'aria-label'?: string;\n}\n\nconst SIZE_CLASS: Record<BadgeSize, string> = {\n small: styles.sizeSmall,\n medium: styles.sizeMedium,\n large: styles.sizeLarge,\n};\n\nconst STATE_CLASS: Record<BadgeState, string> = {\n default: styles.stateDefault,\n danger: styles.stateDanger,\n success: styles.stateSuccess,\n warning: styles.stateWarning,\n disabled: styles.stateDisabled,\n};\n\nexport function Badge({\n state = 'default',\n size = 'medium',\n label,\n className,\n 'aria-label': ariaLabel,\n}: BadgeProps) {\n const cls = [\n styles.badge,\n SIZE_CLASS[size],\n STATE_CLASS[state],\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const showLabel = size !== 'small' && label != null;\n\n return (\n <span\n className={cls}\n aria-label={ariaLabel}\n role=\"status\"\n >\n {showLabel ? label : null}\n </span>\n );\n}\n","import React from 'react';\nimport styles from './BottomBar.module.css';\n\nexport interface BottomBarProps {\n /** Slot for the primary action (rightmost button). Typically a primary Button. */\n primaryAction?: React.ReactNode;\n /** Slot for the secondary action (left of primary). Typically a secondary Button. */\n secondaryAction?: React.ReactNode;\n /** Additional children rendered inside the actions group, after secondaryAction. */\n children?: React.ReactNode;\n className?: string;\n}\n\nexport function BottomBar({\n primaryAction,\n secondaryAction,\n children,\n className,\n}: BottomBarProps) {\n const cls = [styles.bottomBar, className].filter(Boolean).join(' ');\n\n return (\n <footer className={cls} role=\"contentinfo\">\n <div className={styles.actions}>\n {secondaryAction}\n {children}\n {primaryAction}\n </div>\n </footer>\n );\n}\n","import React from 'react';\nimport { CaretCircleRight } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport styles from './Breadcrumbs.module.css';\n\nexport interface BreadcrumbItem {\n /** Visible label for this breadcrumb step. */\n label: string;\n /** Optional href — when provided the item renders as an anchor tag. */\n href?: string;\n /** Optional click handler. */\n onClick?: (event: React.MouseEvent) => void;\n}\n\nexport interface BreadcrumbsProps {\n /**\n * The breadcrumb trail items rendered before the page title.\n * Supports 1–4 items (matches Figma variants \"Qtd. diretórios=1..4\").\n */\n items: [BreadcrumbItem, ...BreadcrumbItem[]];\n /** Current page title shown below the trail. */\n title: string;\n /** Additional CSS class name. */\n className?: string;\n /** aria-label for the nav landmark. Defaults to \"Breadcrumb\". */\n ariaLabel?: string;\n}\n\nexport function Breadcrumbs({\n items,\n title,\n className,\n ariaLabel = 'Breadcrumb',\n}: BreadcrumbsProps) {\n const cls = [styles.breadcrumbs, className].filter(Boolean).join(' ');\n\n return (\n <nav aria-label={ariaLabel} className={cls}>\n <ol className={styles.trail} aria-label={ariaLabel}>\n {items.map((item, index) => (\n <React.Fragment key={index}>\n {index > 0 && (\n <li className={styles.separator} aria-hidden=\"true\">\n <Icon as={CaretCircleRight} size={16} />\n </li>\n )}\n <li>\n {item.href ? (\n <a\n href={item.href}\n className={`${styles.item} ${styles.itemLink}`}\n onClick={item.onClick}\n >\n {item.label}\n </a>\n ) : item.onClick ? (\n <button\n type=\"button\"\n className={`${styles.item} ${styles.itemLink}`}\n onClick={item.onClick}\n >\n {item.label}\n </button>\n ) : (\n <span className={styles.item}>{item.label}</span>\n )}\n </li>\n </React.Fragment>\n ))}\n </ol>\n\n <h1 className={styles.title}>{title}</h1>\n </nav>\n );\n}\n","import React from 'react';\nimport type { Icon as PhosphorIcon } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport styles from './Button.module.css';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'danger' | 'link';\nexport type ButtonSize = 'medium' | 'small' | 'xsmall';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n leadingIcon?: PhosphorIcon;\n trailingIcon?: PhosphorIcon;\n}\n\nconst VARIANT_CLASS: Record<ButtonVariant, string> = {\n primary: styles.variantPrimary,\n secondary: styles.variantSecondary,\n tertiary: styles.variantTertiary,\n danger: styles.variantDanger,\n link: styles.variantLink,\n};\n\nconst SIZE_CLASS: Record<ButtonSize, string> = {\n medium: styles.sizeMedium,\n small: styles.sizeSmall,\n xsmall: styles.sizeXsmall,\n};\n\nconst ICON_SIZE: Record<ButtonSize, number> = {\n medium: 20,\n small: 20,\n xsmall: 16,\n};\n\nexport function Button({\n variant = 'primary',\n size = 'medium',\n leadingIcon,\n trailingIcon,\n className,\n children,\n disabled,\n ...props\n}: ButtonProps) {\n const cls = [\n styles.button,\n VARIANT_CLASS[variant],\n SIZE_CLASS[size],\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const iconSize = ICON_SIZE[size];\n\n return (\n <button\n className={cls}\n disabled={disabled}\n aria-disabled={disabled}\n {...props}\n >\n {leadingIcon && <Icon as={leadingIcon} size={iconSize} />}\n {children}\n {trailingIcon && <Icon as={trailingIcon} size={iconSize} />}\n </button>\n );\n}\n","import React from 'react';\nimport type { Icon as PhosphorIcon } from '@phosphor-icons/react';\nimport { Warning, Info } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport { Button } from '../Button/index.js';\nimport styles from './Callout.module.css';\n\nexport type CalloutType = 'warning' | 'info';\n\nexport interface CalloutProps {\n /** Visual type (maps to Figma Type=Warning / Type=Info) */\n type?: CalloutType;\n /** Main callout message shown in the icon row */\n message: string;\n /** Optional secondary detail text (rendered with a semibold label prefix) */\n detailLabel?: string;\n /** Optional detail body text following the label */\n detailText?: string;\n /** Optional action button label. When provided a tertiary Button is rendered. */\n actionLabel?: string;\n /** Leading icon for the optional action button */\n actionIcon?: PhosphorIcon;\n /** Callback fired when the action button is clicked */\n onAction?: React.MouseEventHandler<HTMLButtonElement>;\n /** Visually and interactively disables the callout */\n disabled?: boolean;\n /** Additional class names applied to the root element */\n className?: string;\n}\n\nconst TYPE_CLASS: Record<CalloutType, string> = {\n warning: styles.variantWarning,\n info: styles.variantInfo,\n};\n\nconst TYPE_ICON: Record<CalloutType, PhosphorIcon> = {\n warning: Warning,\n info: Info,\n};\n\nexport function Callout({\n type = 'warning',\n message,\n detailLabel,\n detailText,\n actionLabel,\n actionIcon,\n onAction,\n disabled,\n className,\n}: CalloutProps) {\n const rootCls = [\n styles.callout,\n TYPE_CLASS[type],\n disabled ? styles.disabled : undefined,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const typeIcon = TYPE_ICON[type];\n const hasDetail = Boolean(detailLabel || detailText);\n\n return (\n <div\n className={rootCls}\n aria-disabled={disabled}\n role=\"note\"\n >\n <div className={styles.container}>\n {/* Icon + heading row */}\n <div className={styles.iconTextRow}>\n <div className={styles.iconContainer}>\n <Icon as={typeIcon} size={20} color=\"var(--color-icon-neutral-inverse)\" />\n </div>\n <span className={styles.message}>{message}</span>\n </div>\n\n {/* Detail + optional action button */}\n {(hasDetail || actionLabel) && (\n <div className={styles.messageAndButton}>\n {hasDetail && (\n <span className={styles.detail}>\n {detailLabel && (\n <span className={styles.detailLabel}>{detailLabel}</span>\n )}\n {detailLabel && detailText ? ' ' : ''}\n {detailText}\n </span>\n )}\n {actionLabel && (\n <Button\n variant=\"tertiary\"\n size=\"medium\"\n leadingIcon={actionIcon}\n onClick={onAction}\n disabled={disabled}\n >\n {actionLabel}\n </Button>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport type { Icon as PhosphorIcon } from '@phosphor-icons/react';\nimport { XCircle } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport styles from './Chip.module.css';\n\nexport type ChipType = 'filled' | 'outline';\nexport type ChipSize = 'xsmall' | 'small' | 'medium' | 'large';\n\nexport interface ChipProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Visual style of the chip */\n type?: ChipType;\n /** Size of the chip */\n size?: ChipSize;\n /** Text label displayed inside the chip */\n label?: string;\n /** Optional leading icon */\n leadingIcon?: PhosphorIcon;\n /** Whether to show the dismiss/close button */\n showClose?: boolean;\n /** Callback fired when the close button is clicked */\n onClose?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n /** Accessible label for the close button. Defaults to \"Dismiss\". */\n closeLabel?: string;\n /** Whether the chip is disabled */\n disabled?: boolean;\n}\n\nconst TYPE_CLASS: Record<ChipType, string> = {\n filled: styles.typeFilled,\n outline: styles.typeOutline,\n};\n\nconst SIZE_CLASS: Record<ChipSize, string> = {\n xsmall: styles.sizeXsmall,\n small: styles.sizeSmall,\n medium: styles.sizeMedium,\n large: styles.sizeLarge,\n};\n\nexport function Chip({\n type = 'filled',\n size = 'medium',\n label = 'Chip',\n leadingIcon,\n showClose = false,\n onClose,\n closeLabel = 'Dismiss',\n disabled = false,\n className,\n children,\n ...props\n}: ChipProps) {\n const cls = [\n styles.chip,\n TYPE_CLASS[type],\n SIZE_CLASS[size],\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n className={cls}\n aria-disabled={disabled || undefined}\n role=\"status\"\n {...props}\n >\n {leadingIcon && (\n <Icon as={leadingIcon} size={16} />\n )}\n <span className={styles.label}>{children ?? label}</span>\n {showClose && (\n <button\n type=\"button\"\n className={styles.closeButton}\n onClick={disabled ? undefined : onClose}\n aria-label={closeLabel}\n tabIndex={disabled ? -1 : 0}\n disabled={disabled}\n >\n <Icon as={XCircle} size={16} />\n </button>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport { Slot } from '../Slot/index.js';\nimport styles from './Card.module.css';\n\nexport type CardSize = 'small' | 'medium' | 'large';\nexport type CardStyle = 'shadow' | 'line';\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: CardSize;\n cardStyle?: CardStyle;\n disabled?: boolean;\n}\n\nconst SIZE_CLASS: Record<CardSize, string> = {\n small: styles.sizeSmall,\n medium: styles.sizeMedium,\n large: styles.sizeLarge,\n};\n\nconst STYLE_CLASS: Record<CardStyle, string> = {\n shadow: styles.styleShadow,\n line: styles.styleLine,\n};\n\nexport function Card({\n size = 'medium',\n cardStyle = 'shadow',\n disabled = false,\n className,\n children,\n ...props\n}: CardProps) {\n const cls = [\n styles.card,\n SIZE_CLASS[size],\n STYLE_CLASS[cardStyle],\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n className={cls}\n aria-disabled={disabled || undefined}\n {...props}\n >\n <Slot>{children}</Slot>\n </div>\n );\n}\n","import React, { useId } from 'react';\nimport styles from './Checkbox.module.css';\n\nexport type CheckboxCheckedState = boolean | 'indeterminate';\n\nexport interface CheckboxProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'checked' | 'defaultChecked' | 'type'> {\n /** Checked state: true = selected, false = unselected, 'indeterminate' = partial. */\n checked?: CheckboxCheckedState;\n /** Uncontrolled default checked state. */\n defaultChecked?: CheckboxCheckedState;\n /** Label text rendered next to the checkbox. */\n label?: string;\n /** Disables the checkbox. */\n disabled?: boolean;\n /** Additional className for the outer wrapper. */\n className?: string;\n}\n\nexport function Checkbox({\n checked,\n defaultChecked,\n label,\n disabled = false,\n className,\n id: idProp,\n onChange,\n ...props\n}: CheckboxProps) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n\n // Resolve internal checked/indeterminate values\n const isControlled = checked !== undefined;\n const isIndeterminate = isControlled\n ? checked === 'indeterminate'\n : defaultChecked === 'indeterminate';\n const isChecked = isControlled\n ? checked === true\n : defaultChecked === true;\n\n // Build box class names\n const boxCls = [\n styles.box,\n isChecked ? styles.checked : null,\n isIndeterminate ? styles.indeterminate : null,\n ]\n .filter(Boolean)\n .join(' ');\n\n const wrapperCls = [\n styles.checkbox,\n disabled ? styles.disabled : null,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Attach indeterminate imperatively via ref (HTML attribute doesn't support it)\n const inputRef = React.useRef<HTMLInputElement>(null);\n React.useEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = isIndeterminate;\n }\n }, [isIndeterminate]);\n\n return (\n <label className={wrapperCls} htmlFor={id}>\n <input\n ref={inputRef}\n id={id}\n type=\"checkbox\"\n className={styles.input}\n checked={isControlled ? (isChecked || isIndeterminate) : undefined}\n defaultChecked={\n !isControlled\n ? defaultChecked === true || defaultChecked === 'indeterminate'\n : undefined\n }\n disabled={disabled}\n aria-checked={isIndeterminate ? 'mixed' : isChecked}\n onChange={onChange}\n {...props}\n />\n <span className={boxCls} aria-hidden=\"true\">\n {isChecked && (\n <span className={styles.icon}>\n {/* Check mark SVG — matches Figma \"Check\" icon at 16×16 */}\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M2.5 8L6.5 12L13.5 4\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n )}\n {isIndeterminate && (\n <span className={styles.icon}>\n {/* Minus / indeterminate SVG — matches Figma \"Minus\" icon at 18×18 */}\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M3 8H13\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n </span>\n )}\n </span>\n {label && <span className={styles.label}>{label}</span>}\n </label>\n );\n}\n","import React, { useState } from 'react';\nimport { CaretLeft, CaretRight } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport styles from './DatePickerCalendar.module.css';\n\nconst MONTHS_PT = [\n 'Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho',\n 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro',\n];\n\nconst DAYS_PT = ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'];\n\nfunction currentIso(): string {\n const d = new Date();\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;\n}\n\nfunction toIso(year: number, month: number, day: number): string {\n return `${String(year).padStart(4, '0')}-${String(month + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\n}\n\ninterface CalendarDay {\n day: number;\n kind: 'prev' | 'current' | 'next';\n iso: string;\n}\n\nfunction buildGrid(year: number, month: number): CalendarDay[][] {\n const firstDayOfWeek = new Date(year, month, 1).getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const daysInPrevMonth = new Date(year, month, 0).getDate();\n const [py, pm] = month === 0 ? [year - 1, 11] : [year, month - 1];\n const [ny, nm] = month === 11 ? [year + 1, 0] : [year, month + 1];\n\n const cells: CalendarDay[] = [];\n\n for (let i = firstDayOfWeek - 1; i >= 0; i--) {\n const day = daysInPrevMonth - i;\n cells.push({ day, kind: 'prev', iso: toIso(py, pm, day) });\n }\n for (let day = 1; day <= daysInMonth; day++) {\n cells.push({ day, kind: 'current', iso: toIso(year, month, day) });\n }\n for (let day = 1; cells.length < 42; day++) {\n cells.push({ day, kind: 'next', iso: toIso(ny, nm, day) });\n }\n\n return Array.from({ length: 6 }, (_, i) => cells.slice(i * 7, i * 7 + 7));\n}\n\n// ─── CalendarDate ─────────────────────────────────────────────────────────────\n\ninterface CalendarDateProps {\n day: number;\n outside: boolean;\n selected: boolean;\n today: boolean;\n disabled: boolean;\n onClick: () => void;\n}\n\nfunction CalendarDate({ day, outside, selected, today, disabled, onClick }: CalendarDateProps) {\n const cls = [\n styles.date,\n outside && styles.dateOutside,\n selected && styles.dateSelected,\n today && !selected && styles.dateToday,\n disabled && styles.dateDisabled,\n ].filter(Boolean).join(' ');\n\n return (\n <button type=\"button\" className={cls} onClick={onClick} disabled={disabled}>\n {day}\n </button>\n );\n}\n\n// ─── DatePickerCalendar ───────────────────────────────────────────────────────\n\nexport interface DatePickerCalendarProps {\n value?: string;\n min?: string;\n max?: string;\n onChange: (iso: string) => void;\n onClose: () => void;\n}\n\nexport function DatePickerCalendar({ value, min, max, onChange, onClose }: DatePickerCalendarProps) {\n const today = currentIso();\n\n const initYear = value ? Number(value.slice(0, 4)) : Number(today.slice(0, 4));\n const initMonth = value ? Number(value.slice(5, 7)) - 1 : Number(today.slice(5, 7)) - 1;\n\n const [viewYear, setViewYear] = useState(initYear);\n const [viewMonth, setViewMonth] = useState(initMonth);\n\n function prevMonth() {\n if (viewMonth === 0) { setViewYear(y => y - 1); setViewMonth(11); }\n else setViewMonth(m => m - 1);\n }\n\n function nextMonth() {\n if (viewMonth === 11) { setViewYear(y => y + 1); setViewMonth(0); }\n else setViewMonth(m => m + 1);\n }\n\n function handleKeyDown(e: React.KeyboardEvent) {\n if (e.key === 'Escape') onClose();\n }\n\n const rows = buildGrid(viewYear, viewMonth);\n const visibleRows = rows[5].every(d => d.kind === 'next') ? rows.slice(0, 5) : rows;\n\n return (\n <div className={styles.calendar} onKeyDown={handleKeyDown}>\n {/* Header: prev | Mês Ano | next */}\n <div className={styles.header}>\n <button type=\"button\" className={styles.navBtn} onClick={prevMonth} aria-label=\"Mês anterior\">\n <Icon as={CaretLeft} size={16} />\n </button>\n <span className={styles.monthYear}>\n {MONTHS_PT[viewMonth]} {viewYear}\n </span>\n <button type=\"button\" className={styles.navBtn} onClick={nextMonth} aria-label=\"Próximo mês\">\n <Icon as={CaretRight} size={16} />\n </button>\n </div>\n\n {/* Day labels: Dom … Sáb */}\n <div className={styles.dayLabelsRow}>\n {DAYS_PT.map(label => (\n <span key={label} className={styles.dayLabel}>{label}</span>\n ))}\n </div>\n\n {/* Date grid */}\n <div className={styles.grid}>\n {visibleRows.map((row, ri) => (\n <div key={ri} className={styles.week}>\n {row.map(cell => {\n const isSelected = !!value && value === cell.iso;\n const isToday = today === cell.iso;\n const isDisabled = (!!min && cell.iso < min) || (!!max && cell.iso > max);\n return (\n <CalendarDate\n key={cell.iso}\n day={cell.day}\n outside={cell.kind !== 'current'}\n selected={isSelected}\n today={isToday}\n disabled={isDisabled}\n onClick={() => { onChange(cell.iso); onClose(); }}\n />\n );\n })}\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import React, { useId, useRef, useState, useEffect, useCallback } from 'react';\nimport { CalendarDots, Info, XCircle, CheckCircle, Warning } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport { DatePickerCalendar } from './DatePickerCalendar.js';\nimport styles from './DatePicker.module.css';\n\n/** Mask a raw string into incremental dd/mm/aaaa as the user types. */\nfunction maskDate(raw: string): string {\n const digits = raw.replace(/\\D/g, '').slice(0, 8);\n let out = digits.slice(0, 2);\n if (digits.length > 2) out += '/' + digits.slice(2, 4);\n if (digits.length > 4) out += '/' + digits.slice(4, 8);\n return out;\n}\n\n/** Convert a complete, valid dd/mm/aaaa string to ISO (YYYY-MM-DD), or null. */\nfunction textToIso(text: string): string | null {\n const digits = text.replace(/\\D/g, '');\n if (digits.length !== 8) return null;\n const dd = digits.slice(0, 2);\n const mm = digits.slice(2, 4);\n const yyyy = digits.slice(4, 8);\n const d = Number(dd);\n const m = Number(mm);\n const y = Number(yyyy);\n if (m < 1 || m > 12 || d < 1 || d > 31 || y < 1) return null;\n const date = new Date(y, m - 1, d);\n if (date.getFullYear() !== y || date.getMonth() !== m - 1 || date.getDate() !== d) {\n return null;\n }\n return `${yyyy}-${mm}-${dd}`;\n}\n\n/** Convert an ISO date (YYYY-MM-DD) to a dd/mm/aaaa display string. */\nfunction isoToText(iso: string): string {\n if (!iso) return '';\n const [y, m, d] = iso.split('-');\n if (!y || !m || !d) return '';\n return `${d}/${m}/${y}`;\n}\n\nexport type DatePickerState = 'default' | 'hover' | 'disabled' | 'danger' | 'success';\nexport type DatePickerHintType = 'default' | 'danger' | 'success' | 'warning';\n\nexport interface DatePickerProps {\n /** Field label text */\n label?: string;\n /** Whether to show the label */\n showLabel?: boolean;\n /** Current value (YYYY-MM-DD) */\n value?: string;\n /** Placeholder text shown when no value is selected */\n placeholder?: string;\n /** Hint / helper text rendered below the field */\n hint?: string;\n /** Visual type of the hint row */\n hintType?: DatePickerHintType;\n /** Visual state of the component */\n state?: DatePickerState;\n /** Whether the field is disabled */\n disabled?: boolean;\n /** Change handler – receives the new date string (YYYY-MM-DD) */\n onChange?: (value: string) => void;\n /** Additional class name for the wrapper element */\n className?: string;\n /** id forwarded to the underlying <input> */\n id?: string;\n /** Minimum selectable date (YYYY-MM-DD) */\n min?: string;\n /** Maximum selectable date (YYYY-MM-DD) */\n max?: string;\n}\n\nexport function DatePicker({\n label = 'Label',\n showLabel = true,\n value = '',\n placeholder = 'dd/mm/aaaa',\n hint,\n hintType = 'default',\n state = 'default',\n disabled = false,\n onChange,\n className,\n id: idProp,\n min,\n max,\n}: DatePickerProps) {\n const generatedId = useId();\n const inputId = idProp ?? generatedId;\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n const [text, setText] = useState(() => isoToText(value));\n const [calendarOpen, setCalendarOpen] = useState(false);\n\n useEffect(() => {\n const currentIso = textToIso(text) ?? '';\n if (value !== currentIso) {\n setText(isoToText(value));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n const closeCalendar = useCallback(() => setCalendarOpen(false), []);\n\n useEffect(() => {\n if (!calendarOpen) return;\n function handleOutside(e: MouseEvent) {\n if (wrapperRef.current && !wrapperRef.current.contains(e.target as Node)) {\n setCalendarOpen(false);\n }\n }\n document.addEventListener('mousedown', handleOutside);\n return () => document.removeEventListener('mousedown', handleOutside);\n }, [calendarOpen]);\n\n const isDisabled = disabled || state === 'disabled';\n const isDanger = state === 'danger';\n const isSuccess = state === 'success';\n\n const fieldCls = [\n styles.field,\n isDanger && styles.fieldDanger,\n isSuccess && styles.fieldSuccess,\n isDisabled && styles.fieldDisabled,\n ]\n .filter(Boolean)\n .join(' ');\n\n const wrapperCls = [\n styles.datePicker,\n isDisabled && styles.disabled,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const resolvedHintType: DatePickerHintType = isDanger\n ? 'danger'\n : isSuccess\n ? 'success'\n : hintType;\n\n const hintTextCls = [\n styles.hintText,\n resolvedHintType === 'danger' && styles.hintDanger,\n resolvedHintType === 'success' && styles.hintSuccess,\n resolvedHintType === 'warning' && styles.hintWarning,\n ]\n .filter(Boolean)\n .join(' ');\n\n const hintIconCls = [\n styles.hintIcon,\n resolvedHintType === 'danger' && styles.hintIconDanger,\n resolvedHintType === 'success' && styles.hintIconSuccess,\n resolvedHintType === 'warning' && styles.hintIconWarning,\n ]\n .filter(Boolean)\n .join(' ');\n\n function HintIcon() {\n switch (resolvedHintType) {\n case 'danger':\n return <Icon as={XCircle} size={16} />;\n case 'success':\n return <Icon as={CheckCircle} size={16} />;\n case 'warning':\n return <Icon as={Warning} size={16} />;\n default:\n return <Icon as={Info} size={16} />;\n }\n }\n\n function handleTextChange(e: React.ChangeEvent<HTMLInputElement>) {\n const masked = maskDate(e.target.value);\n setText(masked);\n if (masked === '') {\n onChange?.('');\n return;\n }\n const iso = textToIso(masked);\n if (iso) onChange?.(iso);\n }\n\n function toggleCalendar() {\n if (!isDisabled) setCalendarOpen(o => !o);\n }\n\n function handleCalendarChange(iso: string) {\n onChange?.(iso);\n setText(isoToText(iso));\n }\n\n return (\n <div ref={wrapperRef} className={wrapperCls}>\n <div className={styles.topGroup}>\n {showLabel && (\n <label className={styles.label} htmlFor={inputId}>\n {label}\n </label>\n )}\n\n <div className={styles.fieldWrapper}>\n <div className={fieldCls}>\n <input\n id={inputId}\n type=\"text\"\n inputMode=\"numeric\"\n className={styles.input}\n value={text}\n disabled={isDisabled}\n placeholder={placeholder}\n maxLength={10}\n onChange={handleTextChange}\n aria-label={showLabel ? undefined : label || placeholder}\n aria-invalid={isDanger ? true : undefined}\n />\n\n <button\n type=\"button\"\n className={styles.calendarIcon}\n onClick={toggleCalendar}\n disabled={isDisabled}\n tabIndex={-1}\n aria-label=\"Open calendar\"\n aria-expanded={calendarOpen}\n aria-haspopup=\"true\"\n >\n <Icon as={CalendarDots} size={20} />\n </button>\n </div>\n\n {calendarOpen && (\n <div className={styles.calendarPopup}>\n <DatePickerCalendar\n value={textToIso(text) ?? undefined}\n min={min}\n max={max}\n onChange={handleCalendarChange}\n onClose={closeCalendar}\n />\n </div>\n )}\n </div>\n </div>\n\n {hint && (\n <div className={styles.hint} role={isDanger ? 'alert' : undefined}>\n <span className={hintIconCls}>\n <HintIcon />\n </span>\n <span className={hintTextCls}>{hint}</span>\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport styles from './Divider.module.css';\n\nexport type DividerType = 'horizontal' | 'vertical';\n\nexport interface DividerProps extends React.HTMLAttributes<HTMLHRElement> {\n /** Controls the orientation of the divider line. Defaults to \"horizontal\". */\n type?: DividerType;\n}\n\nexport function Divider({ type = 'horizontal', className, ...props }: DividerProps) {\n const cls = [\n styles.divider,\n type === 'vertical' ? styles.vertical : styles.horizontal,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <hr\n role=\"separator\"\n aria-orientation={type}\n className={cls}\n {...props}\n />\n );\n}\n","import React from 'react';\nimport type { Icon as PhosphorIcon } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport styles from './IconButton.module.css';\n\nexport type IconButtonVariant = 'ghost' | 'outline' | 'subtle';\nexport type IconButtonSize = 'xsmall' | 'small' | 'medium';\n\nexport interface IconButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Phosphor icon component to render */\n icon: PhosphorIcon;\n variant?: IconButtonVariant;\n size?: IconButtonSize;\n /** Required for accessibility — always provide a descriptive label */\n 'aria-label': string;\n}\n\nconst VARIANT_CLASS: Record<IconButtonVariant, string> = {\n ghost: styles.variantGhost,\n outline: styles.variantOutline,\n subtle: styles.variantSubtle,\n};\n\nconst SIZE_CLASS: Record<IconButtonSize, string> = {\n xsmall: styles.sizeXsmall,\n small: styles.sizeSmall,\n medium: styles.sizeMedium,\n};\n\nexport function IconButton({\n icon,\n variant = 'ghost',\n size = 'medium',\n className,\n disabled,\n ...props\n}: IconButtonProps) {\n const cls = [\n styles.iconButton,\n VARIANT_CLASS[variant],\n SIZE_CLASS[size],\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button\n className={cls}\n disabled={disabled}\n aria-disabled={disabled}\n type=\"button\"\n {...props}\n >\n <Icon as={icon} size={16} />\n </button>\n );\n}\n","import {\n House,\n ProjectorScreenChart,\n ClipboardText,\n CallBell,\n Package,\n FlagBanner,\n TruckTrailer,\n ChatCenteredText,\n PresentationChart,\n SketchLogo,\n CurrencyCircleDollar,\n CurrencyDollar,\n CalendarDots,\n Garage,\n Folder,\n File,\n CheckSquareOffset,\n ListChecks,\n Note,\n Cardholder,\n BoxArrowUp,\n Coins,\n Receipt,\n Percent,\n FlagPennant,\n Gear,\n} from '@phosphor-icons/react';\nimport type { MenuSectionDef } from './Menu.js';\n\n// ─── Dados padrão do Menu ───────────────────────────────────────────────────\n//\n// Fonte de verdade dos itens do menu Vector. Fiel ao nó do Figma 13648:1070\n// (\".Menu / Item Group\"): mesmos ícones (os Phosphor que o próprio Figma usa),\n// mesmos labels e mesma ordem.\n//\n// Regra do caret: trailing caret = tem submenu. Hoje só 3 submenus existem no\n// Figma (Cadastros, Ofertas, Admin); só eles recebem `children` e expandem\n// (collapse). Os demais ficam planos até que seus submenus sejam definidos.\n//\n// O componente <Menu /> consome isto como default (`sections`). O Storybook e\n// os protótipos apenas refletem — para um conjunto diferente de itens, passe\n// `sections` explicitamente.\n\nconst portalSection: MenuSectionDef = {\n title: 'Seleção de portal',\n items: [\n { key: 'logtech', label: 'Logtech', icon: TruckTrailer },\n { key: 'conta-digital', label: 'Conta digital', icon: CurrencyCircleDollar },\n { key: 'combustivel', label: 'Combustível', icon: House },\n ],\n};\n\nconst menuSection: MenuSectionDef = {\n title: 'Menu',\n items: [\n { key: 'dashboard', label: 'Dashboard', icon: ProjectorScreenChart },\n {\n key: 'cadastros',\n label: 'Cadastros',\n icon: ClipboardText,\n // Sub-itens não têm ícone (Figma: Show Leading Icon=false)\n children: [\n { key: 'transportadora-sub', label: 'Transportadora' },\n { key: 'motorista', label: 'Motorista' },\n { key: 'veiculo-sub', label: 'Veículo' },\n { key: 'filiais', label: 'Filiais' },\n { key: 'controle-cadastros', label: 'Controle de cadastros' },\n { key: 'locais', label: 'Locais' },\n { key: 'noticias', label: 'Notícias' },\n { key: 'produto', label: 'Produto' },\n { key: 'grupo-locais', label: 'Grupo de locais' },\n { key: 'rotas', label: 'Rotas' },\n { key: 'grupos', label: 'Grupos' },\n { key: 'observacoes', label: 'Observações' },\n { key: 'contratos-hazmat', label: 'Contratos hazmat' },\n ],\n },\n { key: 'solicitacoes', label: 'Solicitações', icon: CallBell },\n {\n key: 'ofertas',\n label: 'Ofertas',\n icon: Package,\n children: [\n { key: 'ofertas-sub', label: 'Ofertas' },\n { key: 'pool-ofertas', label: 'Pool ofertas' },\n { key: 'alcada-aprovacoes', label: 'Alçada de aprovações' },\n { key: 'automacao-divulgacao', label: 'Automação de divulgação de lotes' },\n { key: 'parametros-desagio', label: 'Parâmetros de deságio' },\n ],\n },\n { key: 'gerenciadora', label: 'Gerenciadora de risco', icon: FlagBanner },\n {\n key: 'viagens',\n label: 'Viagens',\n icon: TruckTrailer,\n children: [\n { key: 'viagens-sub', label: 'Viagens' },\n { key: 'acompanhamento-viagem', label: 'Acompanhamento de viagem' },\n { key: 'painel-viagem', label: 'Painel de viagem' },\n { key: 'monitoramento-viagem', label: 'Monitoramento' },\n { key: 'relatorio-agente-frete', label: 'Relatório de agente de frete' },\n ],\n },\n { key: 'mensagens', label: 'Mensagens', icon: ChatCenteredText },\n { key: 'painel', label: 'Painel', icon: PresentationChart },\n { key: 'clube', label: 'Clube Vector', icon: SketchLogo },\n { key: 'tomada', label: 'Tomada de preço', icon: CurrencyCircleDollar },\n {\n key: 'agendamento',\n label: 'Agendamento',\n icon: CalendarDots,\n children: [\n { key: 'carga-descarga', label: 'Carga e descarga' },\n { key: 'fornecedor-cliente', label: 'Fornecedor/Cliente' },\n { key: 'viagem-amiga-ag', label: 'Viagem Amiga' },\n { key: 'gestao-agendamento', label: 'Gestão de agendamento' },\n ],\n },\n {\n key: 'logistica',\n label: 'Logística Interna',\n icon: Garage,\n children: [\n { key: 'gestao-patio', label: 'Gestão de pátio' },\n { key: 'frentes-carregamento', label: 'Frentes de carregamento' },\n { key: 'config-docas', label: 'Configuração de docas' },\n { key: 'track-pass', label: 'Track pass' },\n { key: 'checklist-log', label: 'Checklist' },\n ],\n },\n { key: 'gdv', label: 'GDV', icon: Folder },\n { key: 'relatorio-vpay', label: 'Relatório VPay', icon: File },\n { key: 'enquetes', label: 'Enquetes', icon: CheckSquareOffset },\n { key: 'avaliacao', label: 'Avaliação Operacional', icon: ListChecks },\n {\n key: 'quitacao',\n label: 'Quitação Digital',\n icon: Note,\n children: [\n { key: 'painel-controle', label: 'Painel de controle' },\n { key: 'entrega-documental', label: 'Entrega documental' },\n { key: 'painel-controle-emb', label: 'Painel de controle embarcador' },\n { key: 'entrega-documental-transp', label: 'Entrega documental transportador' },\n { key: 'regularizacao-documental', label: 'Regularização documental' },\n ],\n },\n {\n key: 'cartoes',\n label: 'Controle de cartões',\n icon: Cardholder,\n children: [\n { key: 'estoque-cartoes-vector', label: 'Estoque cartões Vector' },\n { key: 'estoque-cartoes-parceiros', label: 'Estoque cartões parceiros' },\n { key: 'vinculacao-cartoes', label: 'Vinculação de cartões' },\n ],\n },\n { key: 'transportadora', label: 'Transportadora digital', icon: BoxArrowUp },\n {\n key: 'antecipacao',\n label: 'Antecipação de recebíveis',\n icon: Coins,\n children: [\n { key: 'antecipacao-sub', label: 'Antecipação de recebíveis' },\n { key: 'gestao-antecipacoes', label: 'Gestão de antecipações' },\n ],\n },\n {\n key: 'pagamento',\n label: 'Pagamento de frete',\n icon: Receipt,\n children: [\n { key: 'gestao-pagamentos', label: 'Gestão de pagamentos' },\n { key: 'viagens-vector-pay', label: 'Viagens Vector Pay' },\n { key: 'adiantamento-quitacao', label: 'Adiantamento e quitação de pagamentos' },\n { key: 'motor-pagamento', label: 'Motor de pagamento' },\n { key: 'extrato-pagamento', label: 'Extrato de pagamento' },\n { key: 'controle-limite', label: 'Controle de limite' },\n { key: 'acompanhamento-boleto-fob', label: 'Acompanhamento de boleto FOB' },\n { key: 'agenda-pagamento', label: 'Agenda de pagamento' },\n { key: 'dados-bancarios', label: 'Dados bancários' },\n { key: 'relatorio-receita-taxas', label: 'Relatório receita de taxas' },\n { key: 'ajuste-frete', label: 'Ajuste de frete' },\n ],\n },\n { key: 'imposto-renda', label: 'Imposto de renda', icon: Percent },\n {\n key: 'financeiro',\n label: 'Financeiro',\n icon: CurrencyDollar,\n children: [\n { key: 'cadoc-4111', label: 'CADOC 4111' },\n { key: 'cadoc-1201', label: 'CADOC 1201' },\n { key: 'bc-correios', label: 'BC Correios' },\n { key: 'notas-debito', label: 'Notas de débito' },\n { key: 'sap', label: 'Sap' },\n ],\n },\n { key: 'config-gr', label: 'Configurações de serviços GR', icon: FlagPennant },\n {\n key: 'admin',\n label: 'Admin',\n icon: Gear,\n children: [\n { key: 'usuarios', label: 'Usuários' },\n { key: 'relatorio', label: 'Relatório' },\n { key: 'broadcast', label: 'Broadcast' },\n { key: 'veiculos-admin', label: 'Veículos' },\n { key: 'enquetes-admin', label: 'Enquetes' },\n { key: 'avaliacao-admin', label: 'Avaliação Operacional' },\n { key: 'ocorrencias', label: 'Ocorrências' },\n { key: 'viagem-amiga', label: 'Viagem Amiga' },\n { key: 'parametros-produto', label: 'Parâmetros de Produto' },\n { key: 'geocerca', label: 'Geocerca' },\n { key: 'cadastrar-embarcador', label: 'Cadastrar Embarcador' },\n { key: 'bloqueio', label: 'Bloqueio' },\n { key: 'bloqueio-conta', label: 'Bloqueio de conta' },\n { key: 'mensagens-vector', label: 'Mensagens Vector' },\n { key: 'log-antecipacao', label: 'Log Antecipação de recebíveis' },\n { key: 'onboarding-tracking', label: 'Onboarding Tracking' },\n { key: 'validacao-cadastro', label: 'Validação de Cadastro' },\n { key: 'communication-logs', label: 'Communication logs' },\n { key: 'parametros-etcd', label: 'Parametros ETCD' },\n { key: 'central-atendimento', label: 'Central atendimento' },\n { key: 'data-import', label: 'Data Import' },\n ],\n },\n ],\n};\n\n/** Seções padrão do Menu (portal + itens), fiéis ao Figma. */\nexport const defaultMenuSections: MenuSectionDef[] = [portalSection, menuSection];\n","import React from 'react';\nimport type { Icon as PhosphorIcon } from '@phosphor-icons/react';\nimport { CaretDown, Article } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport { defaultMenuSections } from './menuData.js';\nimport styles from './Menu.module.css';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type MenuSize = 'opened' | 'closed';\nexport type MenuItemState = 'default' | 'hover' | 'active';\n\nexport interface MenuItemDef {\n /** Unique key for this item */\n key: string;\n /** Display label (shown in opened mode) */\n label: string;\n /** Phosphor icon component */\n icon?: PhosphorIcon;\n /** Whether this item is the current active page */\n active?: boolean;\n /** Whether this item is disabled */\n disabled?: boolean;\n /** Click handler */\n onClick?: (key: string) => void;\n /**\n * Nested sub-items. When present, the item becomes an expandable parent:\n * a trailing caret is shown and clicking toggles the submenu (Figma\n * \".Menu / <group>\" expanded state — sub-items indented).\n */\n children?: MenuItemDef[];\n}\n\nexport interface MenuSectionDef {\n /** Optional section subtitle shown in opened mode */\n title?: string;\n /** Items in this section */\n items: MenuItemDef[];\n}\n\nexport interface MenuProps {\n /** Opened (240px) or closed (72px) layout */\n size?: MenuSize;\n /**\n * Navigation sections, each with an optional title and items. Quando omitido,\n * usa `defaultMenuSections` (menu Vector fiel ao Figma). Passe explicitamente\n * para renderizar outro conjunto de itens.\n */\n sections?: MenuSectionDef[];\n /** Logo element rendered at the top (full logo for opened, small mark for closed) */\n logo?: React.ReactNode;\n /** Small logo mark shown in closed state */\n logoMark?: React.ReactNode;\n /** Whether to show the footer terms section */\n showFooter?: boolean;\n /** Terms of use link click handler */\n onTermsClick?: () => void;\n /** Privacy policy link click handler */\n onPrivacyClick?: () => void;\n className?: string;\n}\n\n// ─── MenuItem ─────────────────────────────────────────────────────────────────\n\ninterface MenuItemProps {\n item: MenuItemDef;\n size: MenuSize;\n /** Indented sub-item rendered inside an expanded parent. */\n nested?: boolean;\n /** Key of the currently open submenu (accordion — only one at a time). */\n openSubmenuKey: string | null;\n /** Notify parent to toggle a submenu by key. */\n onSubmenuToggle: (key: string) => void;\n}\n\nfunction MenuItem({\n item,\n size,\n nested = false,\n openSubmenuKey,\n onSubmenuToggle,\n}: MenuItemProps) {\n const { key, label, icon, active = false, disabled = false, onClick, children } = item;\n\n const isOpened = size === 'opened';\n const hasChildren = !!(children && children.length);\n const expanded = openSubmenuKey === key;\n\n // Tooltip posicionado via `position: fixed` + coordenadas do botão.\n // O menu usa `overflow: hidden` e a área de conteúdo tem scroll, então\n // um tooltip `absolute` seria recortado — `fixed` escapa do clipping.\n const [tipPos, setTipPos] = React.useState<{ top: number; left: number } | null>(null);\n\n const showTooltip = (e: React.MouseEvent | React.FocusEvent) => {\n const r = e.currentTarget.getBoundingClientRect();\n setTipPos({ top: r.top + r.height / 2, left: r.right + 8 });\n };\n const hideTooltip = () => setTipPos(null);\n\n // Decorativo: o nome acessível do item já vem do label visível (aberto)\n // ou do `aria-label` (fechado), então o tooltip fica fora da árvore de a11y.\n const tooltip = tipPos && (\n <span\n className={styles.tooltip}\n style={{ top: tipPos.top, left: tipPos.left }}\n aria-hidden=\"true\"\n >\n {label}\n </span>\n );\n\n const handleClick = () => {\n if (disabled) return;\n if (hasChildren) onSubmenuToggle(key);\n onClick?.(key);\n };\n\n if (isOpened) {\n const itemClass = [\n styles.item,\n nested ? styles.itemNested : '',\n active ? styles.stateActive : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n const caretClass = [\n styles.itemCaret,\n expanded ? styles.itemCaretExpanded : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <>\n <button\n className={itemClass}\n disabled={disabled}\n aria-disabled={disabled || undefined}\n aria-current={active ? 'page' : undefined}\n aria-expanded={hasChildren ? expanded : undefined}\n onClick={handleClick}\n onMouseEnter={showTooltip}\n onMouseLeave={hideTooltip}\n onFocus={showTooltip}\n onBlur={hideTooltip}\n type=\"button\"\n >\n <span className={styles.itemLeading}>\n {/* Sub-itens (nested) não têm ícone no Figma (Show Leading Icon=false) */}\n {icon && !nested && (\n <span className={styles.itemIcon}>\n <Icon as={icon} size={20} weight=\"bold\" />\n </span>\n )}\n <span className={styles.itemLabel}>{label}</span>\n </span>\n {/* Caret só quando o item tem submenu (Figma: Show Trailing Icon) */}\n {hasChildren && (\n <span className={caretClass}>\n <Icon as={CaretDown} size={12} weight=\"bold\" />\n </span>\n )}\n {/* Cada item tem tooltip (mostra o label completo no hover) */}\n {tooltip}\n </button>\n\n {hasChildren && (\n <div\n className={[styles.submenu, expanded ? styles.submenuExpanded : ''].filter(Boolean).join(' ')}\n aria-hidden={expanded ? undefined : true}\n >\n <div className={styles.submenuInner} role=\"group\">\n {children!.map((child) => (\n <MenuItem\n key={child.key}\n item={child}\n size={size}\n nested\n openSubmenuKey={openSubmenuKey}\n onSubmenuToggle={onSubmenuToggle}\n />\n ))}\n </div>\n </div>\n )}\n </>\n );\n }\n\n // Closed: icon-only pill with tooltip\n const closedClass = [\n styles.itemClosed,\n active ? styles.stateActive : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button\n className={closedClass}\n disabled={disabled}\n aria-disabled={disabled || undefined}\n aria-current={active ? 'page' : undefined}\n aria-label={label}\n onClick={handleClick}\n onMouseEnter={showTooltip}\n onMouseLeave={hideTooltip}\n onFocus={showTooltip}\n onBlur={hideTooltip}\n type=\"button\"\n >\n {icon && (\n <span className={styles.itemIcon}>\n <Icon as={icon} size={20} weight=\"bold\" />\n </span>\n )}\n {tooltip}\n </button>\n );\n}\n\n// ─── MenuSection ──────────────────────────────────────────────────────────────\n\ninterface MenuSectionProps {\n section: MenuSectionDef;\n size: MenuSize;\n openSubmenuKey: string | null;\n onSubmenuToggle: (key: string) => void;\n}\n\nfunction MenuSection({ section, size, openSubmenuKey, onSubmenuToggle }: MenuSectionProps) {\n const isOpened = size === 'opened';\n\n return (\n <div className={styles.section}>\n {isOpened && section.title && (\n <div className={styles.sectionTitle}>{section.title}</div>\n )}\n <div className={styles.itemGroup}>\n {section.items.map((item) => (\n <MenuItem\n key={item.key}\n item={item}\n size={size}\n openSubmenuKey={openSubmenuKey}\n onSubmenuToggle={onSubmenuToggle}\n />\n ))}\n </div>\n </div>\n );\n}\n\n// ─── Menu ─────────────────────────────────────────────────────────────────────\n\nexport function Menu({\n size = 'opened',\n sections = defaultMenuSections,\n logo,\n logoMark,\n showFooter = true,\n onTermsClick,\n onPrivacyClick,\n className,\n}: MenuProps) {\n const isOpened = size === 'opened';\n\n // Accordion: apenas um submenu aberto por vez. Clicar no mesmo fecha.\n const [openSubmenuKey, setOpenSubmenuKey] = React.useState<string | null>(null);\n\n const handleSubmenuToggle = (key: string) => {\n setOpenSubmenuKey((prev) => (prev === key ? null : key));\n };\n\n const menuClass = [\n styles.menu,\n isOpened ? styles.menuOpened : styles.menuClosed,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <nav className={menuClass} aria-label=\"Side navigation\">\n {/* Logo header */}\n <div className={styles.logo}>\n {isOpened\n ? (logo ?? null)\n : (logoMark ?? null)}\n </div>\n\n {/* Scrollable sections */}\n <div className={styles.content}>\n {sections.map((section, idx) => (\n <MenuSection\n key={section.title ?? `section-${idx}`}\n section={section}\n size={size}\n openSubmenuKey={openSubmenuKey}\n onSubmenuToggle={handleSubmenuToggle}\n />\n ))}\n </div>\n\n {/* Terms footer */}\n {isOpened && showFooter && (\n <footer className={styles.footer}>\n <span className={styles.footerIcon}>\n <Icon as={Article} size={20} weight=\"bold\" />\n </span>\n <p className={styles.footerText}>\n {'Veja nosso '}\n <button\n type=\"button\"\n className={styles.footerLink}\n onClick={onTermsClick}\n >\n Termo de uso\n </button>\n {' e '}\n <button\n type=\"button\"\n className={styles.footerLink}\n onClick={onPrivacyClick}\n >\n Política de privacidade\n </button>\n </p>\n </footer>\n )}\n </nav>\n );\n}\n","import React from 'react';\nimport styles from './ProgressSpinner.module.css';\n\nexport interface ProgressSpinnerProps {\n /** Accessible label announced by screen readers. */\n label?: string;\n /** Whether the spinner is in a disabled / inactive state. */\n disabled?: boolean;\n /** Additional CSS class names. */\n className?: string;\n}\n\n/* Figma spec: 42×42px container, 17px radius arc, strokeWeight 4px, 270° arc. */\nconst VIEWBOX = 42;\nconst RADIUS = 17;\nconst STROKE_WIDTH = 4;\n\nexport function ProgressSpinner({\n label = 'Loading…',\n disabled = false,\n className,\n}: ProgressSpinnerProps) {\n const cx = VIEWBOX / 2;\n const cy = VIEWBOX / 2;\n const circumference = 2 * Math.PI * RADIUS;\n const dashArray = circumference * 0.75;\n\n const cls = [\n styles.spinner,\n disabled ? styles.disabled : undefined,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <span\n className={cls}\n role=\"status\"\n aria-label={label}\n aria-disabled={disabled || undefined}\n >\n <svg\n className={styles.spinnerSvg}\n viewBox={`0 0 ${VIEWBOX} ${VIEWBOX}`}\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n focusable=\"false\"\n width={VIEWBOX}\n height={VIEWBOX}\n >\n <circle\n className={styles.arcTrack}\n cx={cx} cy={cy} r={RADIUS}\n strokeWidth={STROKE_WIDTH}\n />\n <circle\n className={styles.arcFill}\n cx={cx} cy={cy} r={RADIUS}\n strokeWidth={STROKE_WIDTH}\n strokeDasharray={`${dashArray} ${circumference - dashArray}`}\n strokeDashoffset={0}\n transform={`rotate(-90 ${cx} ${cy})`}\n />\n </svg>\n </span>\n );\n}\n","import React, { useEffect, useRef } from 'react';\nimport { Warning, XCircle, CheckCircle, X } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport { Button } from '../Button/index.js';\nimport { IconButton } from '../IconButton/index.js';\nimport type { ButtonProps } from '../Button/index.js';\nimport { Divider } from '../Divider/index.js';\nimport { ProgressSpinner } from '../ProgressSpinner/index.js';\nimport { Slot } from '../Slot/index.js';\nimport styles from './Modal.module.css';\n\n/* ────────────────────────────────────────────────────────────────\n * Types\n * ──────────────────────────────────────────────────────────────── */\n\nexport type ModalSize = 'small' | 'medium' | 'large';\nexport type ModalDialogType = 'warn' | 'error' | 'success' | 'loading';\n\n/** Props shared by both Modal and ModalDialog */\ninterface ModalBaseProps {\n /** Whether the modal is visible. Defaults to false. */\n open?: boolean;\n /** Called when the close button is clicked or Escape is pressed. */\n onClose?: () => void;\n /** Additional class names on the panel element. */\n className?: string;\n}\n\n/* ────────────────────────────────────────────────────────────────\n * Modal (panel modal with head / body / footer)\n * ──────────────────────────────────────────────────────────────── */\n\nexport interface ModalFooterAction\n extends Pick<ButtonProps, 'onClick' | 'disabled'> {\n label: string;\n variant?: ButtonProps['variant'];\n}\n\nexport interface ModalProps extends ModalBaseProps {\n /** Size variant: controls panel width. Defaults to \"small\". */\n size?: ModalSize;\n /** Modal heading text. */\n title?: string;\n /** Content rendered inside the body slot. */\n children?: React.ReactNode;\n /** Array of footer action buttons (left=secondary, right=primary). */\n footerActions?: ModalFooterAction[];\n /** Hide the backdrop overlay. */\n noBackdrop?: boolean;\n /** Fired when the backdrop is clicked. Defaults to calling onClose. */\n onBackdropClick?: () => void;\n}\n\nconst SIZE_CLASS: Record<ModalSize, string> = {\n small: styles.sizeSmall,\n medium: styles.sizeMedium,\n large: styles.sizeLarge,\n};\n\nexport function Modal({\n open = false,\n size = 'small',\n title = '',\n children,\n footerActions,\n onClose,\n noBackdrop = false,\n onBackdropClick,\n className,\n}: ModalProps) {\n const panelRef = useRef<HTMLDivElement>(null);\n\n // Close on Escape\n useEffect(() => {\n if (!open) return;\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose?.();\n };\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [open, onClose]);\n\n // Trap focus inside modal\n useEffect(() => {\n if (!open) return;\n const el = panelRef.current;\n if (!el) return;\n const prev = document.activeElement as HTMLElement | null;\n const focusable = el.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n focusable[0]?.focus();\n return () => { prev?.focus(); };\n }, [open]);\n\n if (!open) return null;\n\n const handleBackdropClick = () => {\n if (onBackdropClick) {\n onBackdropClick();\n } else {\n onClose?.();\n }\n };\n\n const panelCls = [styles.modal, SIZE_CLASS[size], className]\n .filter(Boolean)\n .join(' ');\n\n const panel = (\n <div\n ref={panelRef}\n className={panelCls}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? 'modal-title' : undefined}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Head */}\n <div className={styles.head}>\n <div className={styles.titleRow}>\n <h2 id=\"modal-title\" className={styles.title}>{title}</h2>\n </div>\n <Divider />\n </div>\n\n {/* Body */}\n <div className={styles.body}>\n <Slot>{children}</Slot>\n </div>\n\n {/* Footer */}\n {footerActions && footerActions.length > 0 && (\n <div className={styles.footer}>\n <div className={styles.footerButtons}>\n {footerActions.map((action, i) => (\n <Button\n key={i}\n variant={action.variant ?? (i === footerActions.length - 1 ? 'primary' : 'secondary')}\n size=\"medium\"\n disabled={action.disabled}\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ))}\n </div>\n </div>\n )}\n\n {/* Close button */}\n {onClose && (\n <IconButton\n icon={X}\n variant=\"ghost\"\n size=\"xsmall\"\n aria-label=\"Fechar modal\"\n onClick={onClose}\n className={styles.closeButton}\n />\n )}\n </div>\n );\n\n if (noBackdrop) return panel;\n\n return (\n <div className={styles.backdrop} onClick={handleBackdropClick}>\n {panel}\n </div>\n );\n}\n\n/* ────────────────────────────────────────────────────────────────\n * ModalDialog (confirmation dialog with status icon)\n * ──────────────────────────────────────────────────────────────── */\n\nexport interface ModalDialogProps extends ModalBaseProps {\n /** Dialog type — controls the status icon shown. */\n type?: ModalDialogType;\n /** Dialog heading. */\n title?: string;\n /** Supporting text below the heading. */\n text?: string;\n /** Primary action button label. */\n primaryLabel?: string;\n /** Primary action callback. */\n onPrimary?: () => void;\n /** Secondary action button label. */\n secondaryLabel?: string;\n /** Secondary action callback. */\n onSecondary?: () => void;\n /** Hide the backdrop overlay. */\n noBackdrop?: boolean;\n /** Fired when the backdrop is clicked. Defaults to calling onClose. */\n onBackdropClick?: () => void;\n}\n\nconst DIALOG_ICON_COLOR: Record<ModalDialogType, string> = {\n warn: 'var(--color-icon-feedback-warning-default)',\n error: 'var(--color-icon-feedback-danger-default)',\n success: 'var(--color-icon-feedback-success-default)',\n loading: 'var(--color-fill-brand-default)',\n};\n\nexport function ModalDialog({\n open = false,\n type = 'warn',\n title = '',\n text,\n primaryLabel,\n onPrimary,\n secondaryLabel,\n onSecondary,\n onClose,\n noBackdrop = false,\n onBackdropClick,\n className,\n}: ModalDialogProps) {\n const panelRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && type !== 'loading') onClose?.();\n };\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [open, onClose, type]);\n\n useEffect(() => {\n if (!open) return;\n const el = panelRef.current;\n if (!el) return;\n const prev = document.activeElement as HTMLElement | null;\n const focusable = el.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n focusable[0]?.focus();\n return () => { prev?.focus(); };\n }, [open]);\n\n if (!open) return null;\n\n const handleBackdropClick = () => {\n if (onBackdropClick) {\n onBackdropClick();\n } else if (type !== 'loading') {\n onClose?.();\n }\n };\n\n const isLoading = type === 'loading';\n const showActions = !isLoading && (primaryLabel || secondaryLabel);\n const showClose = !isLoading && Boolean(onClose);\n\n const iconColor = DIALOG_ICON_COLOR[type];\n\n const renderIcon = () => {\n switch (type) {\n case 'warn': return <Icon as={Warning} size={64} weight=\"regular\" color={iconColor} />;\n case 'error': return <Icon as={XCircle} size={64} weight=\"regular\" color={iconColor} />;\n case 'success': return <Icon as={CheckCircle} size={64} weight=\"regular\" color={iconColor} />;\n case 'loading': return <ProgressSpinner label=\"Carregando\" />;\n }\n };\n\n const dialogBodyCls = [\n styles.dialogBody,\n isLoading ? styles.loading : undefined,\n ]\n .filter(Boolean)\n .join(' ');\n\n const panelCls = [styles.modal, styles.dialog, className]\n .filter(Boolean)\n .join(' ');\n\n const panel = (\n <div\n ref={panelRef}\n className={panelCls}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? 'modal-dialog-title' : undefined}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Body */}\n <div className={dialogBodyCls}>\n <div className={styles.dialogIconWrap}>\n {renderIcon()}\n </div>\n <div className={styles.dialogTextGroup}>\n {title && (\n <p id=\"modal-dialog-title\" className={styles.dialogTitle}>{title}</p>\n )}\n {text && (\n <p className={styles.dialogText}>{text}</p>\n )}\n </div>\n </div>\n\n {/* Footer actions */}\n {showActions && (\n <div className={styles.footer}>\n <div className={styles.footerButtons}>\n {secondaryLabel && (\n <Button variant=\"secondary\" size=\"medium\" onClick={onSecondary}>\n {secondaryLabel}\n </Button>\n )}\n {primaryLabel && (\n <Button variant=\"primary\" size=\"medium\" onClick={onPrimary}>\n {primaryLabel}\n </Button>\n )}\n </div>\n </div>\n )}\n\n {/* Close button */}\n {showClose && (\n <IconButton\n icon={X}\n variant=\"ghost\"\n size=\"xsmall\"\n aria-label=\"Fechar modal\"\n onClick={onClose}\n className={styles.closeButton}\n />\n )}\n </div>\n );\n\n if (noBackdrop) return panel;\n\n return (\n <div className={styles.backdrop} onClick={handleBackdropClick}>\n {panel}\n </div>\n );\n}\n","import React from 'react';\nimport type { Icon as PhosphorIcon } from '@phosphor-icons/react';\nimport {\n Info,\n Warning,\n CheckCircle,\n XCircle,\n SealWarning,\n WarningCircle,\n X,\n} from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport { Button } from '../Button/index.js';\nimport { IconButton } from '../IconButton/index.js';\nimport styles from './Message.module.css';\n\nexport type MessageType = 'info' | 'warning' | 'success' | 'danger' | 'highlight' | 'neutral';\n\nexport interface MessageProps {\n /** The semantic type of the message, which controls background, border, and icon */\n type?: MessageType;\n /** The message text content */\n message?: string;\n /** Whether to show the leading icon */\n showIcon?: boolean;\n /** Label and optional click handler for an inline action button */\n actionLabel?: string;\n /** Callback fired when the action button is clicked */\n onAction?: () => void;\n /** Whether to render the close/dismiss button */\n showClose?: boolean;\n /** Callback fired when the close button is clicked */\n onClose?: () => void;\n /** Whether the message is in a disabled state */\n disabled?: boolean;\n /** Additional CSS class name */\n className?: string;\n}\n\nconst TYPE_ICON: Record<MessageType, PhosphorIcon> = {\n info: Info,\n warning: Warning,\n success: CheckCircle,\n danger: XCircle,\n highlight: SealWarning,\n neutral: WarningCircle,\n};\n\nconst TYPE_CLASS: Record<MessageType, string> = {\n info: styles.typeInfo,\n warning: styles.typeWarning,\n success: styles.typeSuccess,\n danger: styles.typeDanger,\n highlight: styles.typeHighlight,\n neutral: styles.typeNeutral,\n};\n\nconst ARIA_ROLE: Record<MessageType, string> = {\n info: 'status',\n warning: 'alert',\n success: 'status',\n danger: 'alert',\n highlight: 'status',\n neutral: 'status',\n};\n\nexport function Message({\n type = 'info',\n message = 'Message Content',\n showIcon = true,\n actionLabel,\n onAction,\n showClose = true,\n onClose,\n disabled = false,\n className,\n}: MessageProps) {\n const IconComponent = TYPE_ICON[type];\n\n const cls = [\n styles.message,\n TYPE_CLASS[type],\n disabled ? styles.disabled : undefined,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n className={cls}\n role={ARIA_ROLE[type]}\n aria-live={type === 'danger' || type === 'warning' ? 'assertive' : 'polite'}\n >\n {/* Left: icon + text + optional action */}\n <div className={styles.content}>\n {showIcon && (\n <span className={styles.icon} aria-hidden=\"true\">\n <Icon as={IconComponent} size={20} weight=\"bold\" />\n </span>\n )}\n\n <div className={styles.text}>\n <span className={styles.messageText}>{message}</span>\n\n {actionLabel && (\n <Button\n variant=\"link\"\n size=\"xsmall\"\n onClick={onAction}\n disabled={disabled}\n >\n {actionLabel}\n </Button>\n )}\n </div>\n </div>\n\n {/* Right: close button */}\n {showClose && (\n <IconButton\n icon={X}\n variant=\"ghost\"\n size=\"xsmall\"\n aria-label=\"Dismiss message\"\n onClick={onClose}\n disabled={disabled}\n className={styles.closeButton}\n />\n )}\n </div>\n );\n}\n","import React from 'react';\nimport styles from './Overlay.module.css';\n\nexport interface OverlayProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Additional class names forwarded to the root element. */\n className?: string;\n}\n\n/**\n * A semi-transparent backdrop that dims the underlying content to\n * focus attention on a modal or dialog. Use as the foundation for\n * any modal, dialog, or focused popover.\n *\n * Renders as a `position:fixed` element that covers the full\n * viewport. The consumer is responsible for mounting/unmounting\n * the Overlay and layering the dialog on top of it via z-index.\n */\nexport function Overlay({ className, ...props }: OverlayProps) {\n const cls = [styles.overlay, className].filter(Boolean).join(' ');\n\n return (\n <div\n className={cls}\n role=\"presentation\"\n aria-hidden=\"true\"\n {...props}\n />\n );\n}\n","import React from 'react';\nimport {\n CaretDoubleLeft,\n CaretLeft,\n CaretRight,\n CaretDoubleRight,\n CaretDown,\n} from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport styles from './Paginator.module.css';\n\nexport type PaginatorPageSize = 10 | 20 | 30 | 50 | 100;\n\nexport interface PaginatorProps {\n /** Current page (1-based). */\n currentPage: number;\n /** Total number of pages. */\n totalPages: number;\n /** Number of page-number buttons to show (excluding first/last navigation arrows). Defaults to 3. */\n pageWindowSize?: number;\n /** Selected page size (rows per page). */\n pageSize?: PaginatorPageSize;\n /** Available page-size options. Defaults to [10, 20, 30, 50, 100]. */\n pageSizeOptions?: PaginatorPageSize[];\n /** Called when the user navigates to a different page. */\n onPageChange?: (page: number) => void;\n /** Called when the user selects a different page size. */\n onPageSizeChange?: (pageSize: PaginatorPageSize) => void;\n /** Whether to show the page-size selector. Defaults to true. */\n showPageSizeSelect?: boolean;\n /** Optional extra CSS class for the root element. */\n className?: string;\n}\n\nexport function Paginator({\n currentPage,\n totalPages,\n pageWindowSize = 3,\n pageSize = 10,\n pageSizeOptions = [10, 20, 30, 50, 100],\n onPageChange,\n onPageSizeChange,\n showPageSizeSelect = true,\n className,\n}: PaginatorProps) {\n const isFirst = currentPage <= 1;\n const isLast = currentPage >= totalPages;\n\n // Build the window of page numbers around the current page\n const pages = buildPageWindow(currentPage, totalPages, pageWindowSize);\n\n function go(page: number) {\n if (page < 1 || page > totalPages || page === currentPage) return;\n onPageChange?.(page);\n }\n\n function handlePageSizeChange(e: React.ChangeEvent<HTMLSelectElement>) {\n const val = Number(e.target.value) as PaginatorPageSize;\n onPageSizeChange?.(val);\n }\n\n const rootCls = [styles.paginator, className].filter(Boolean).join(' ');\n\n return (\n <nav className={rootCls} aria-label=\"Pagination\">\n {/* First page */}\n <button\n className={[styles.btn, styles.btnArrow].join(' ')}\n onClick={() => go(1)}\n disabled={isFirst}\n aria-disabled={isFirst}\n aria-label=\"First page\"\n >\n <Icon as={CaretDoubleLeft} size={16} weight=\"bold\" />\n </button>\n\n {/* Previous page */}\n <button\n className={[styles.btn, styles.btnArrow].join(' ')}\n onClick={() => go(currentPage - 1)}\n disabled={isFirst}\n aria-disabled={isFirst}\n aria-label=\"Previous page\"\n >\n <Icon as={CaretLeft} size={16} weight=\"bold\" />\n </button>\n\n {/* Page number buttons */}\n {pages.map((page) => {\n const isActive = page === currentPage;\n const cls = [\n styles.btn,\n styles.btnNumber,\n isActive ? styles.btnNumberActive : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button\n key={page}\n className={cls}\n onClick={() => go(page)}\n disabled={isActive}\n aria-disabled={isActive}\n aria-label={`Page ${page}`}\n aria-current={isActive ? 'page' : undefined}\n >\n {page}\n </button>\n );\n })}\n\n {/* Next page */}\n <button\n className={[styles.btn, styles.btnArrow].join(' ')}\n onClick={() => go(currentPage + 1)}\n disabled={isLast}\n aria-disabled={isLast}\n aria-label=\"Next page\"\n >\n <Icon as={CaretRight} size={16} weight=\"bold\" />\n </button>\n\n {/* Last page */}\n <button\n className={[styles.btn, styles.btnArrow].join(' ')}\n onClick={() => go(totalPages)}\n disabled={isLast}\n aria-disabled={isLast}\n aria-label=\"Last page\"\n >\n <Icon as={CaretDoubleRight} size={16} weight=\"bold\" />\n </button>\n\n {/* Page-size selector — native <select> with OS arrow hidden and the\n Figma CaretDown overlaid (matches .Paginator / Select) */}\n {showPageSizeSelect && (\n <div className={styles.selectWrap}>\n <select\n className={styles.select}\n value={pageSize}\n onChange={handlePageSizeChange}\n aria-label=\"Rows per page\"\n >\n {pageSizeOptions.map((opt) => (\n <option key={opt} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n <span className={styles.selectCaret} aria-hidden=\"true\">\n <Icon as={CaretDown} size={16} />\n </span>\n </div>\n )}\n </nav>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Returns an array of page numbers centred on `current` with `windowSize` items. */\nfunction buildPageWindow(\n current: number,\n total: number,\n windowSize: number,\n): number[] {\n if (total <= 0) return [];\n const half = Math.floor(windowSize / 2);\n let start = current - half;\n let end = start + windowSize - 1;\n\n if (start < 1) {\n start = 1;\n end = Math.min(windowSize, total);\n }\n if (end > total) {\n end = total;\n start = Math.max(1, end - windowSize + 1);\n }\n\n const pages: number[] = [];\n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n return pages;\n}\n","import React from 'react';\nimport { Slot } from '../Slot/index.js';\nimport styles from './Panel.module.css';\n\nexport type PanelStyle = 'shadow' | 'line';\nexport type PanelType = 'section' | 'container';\n\nexport interface PanelProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Visual style of the panel: shadow uses drop-shadow, line uses a border stroke */\n panelStyle?: PanelStyle;\n /** Semantic type: section adds extra bottom padding (32px) for grouping content; container uses uniform padding (16px) */\n type?: PanelType;\n /** Whether the panel is in a disabled state */\n disabled?: boolean;\n}\n\nconst STYLE_CLASS: Record<PanelStyle, string> = {\n shadow: styles.styleShadow,\n line: styles.styleLine,\n};\n\nconst TYPE_CLASS: Record<PanelType, string> = {\n section: styles.typeSection,\n container: styles.typeContainer,\n};\n\nexport function Panel({\n panelStyle = 'shadow',\n type = 'section',\n disabled = false,\n className,\n children,\n ...props\n}: PanelProps) {\n const cls = [\n styles.panel,\n STYLE_CLASS[panelStyle],\n TYPE_CLASS[type],\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n className={cls}\n aria-disabled={disabled || undefined}\n {...props}\n >\n <Slot>{children}</Slot>\n </div>\n );\n}\n","import React, { useId } from 'react';\nimport styles from './Radio.module.css';\n\nexport interface RadioProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {\n /** Whether this radio is selected. */\n checked?: boolean;\n /** Uncontrolled default checked state. */\n defaultChecked?: boolean;\n /** Label text rendered next to the radio circle. */\n label?: string;\n /** Disables the radio input. */\n disabled?: boolean;\n /** Additional className for the outer wrapper label. */\n className?: string;\n}\n\nexport function Radio({\n checked,\n defaultChecked,\n label,\n disabled = false,\n className,\n id: idProp,\n onChange,\n ...props\n}: RadioProps) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n\n const isControlled = checked !== undefined;\n const isChecked = isControlled ? checked : defaultChecked ?? false;\n\n const circleCls = [\n styles.circle,\n isChecked ? styles.checked : null,\n ]\n .filter(Boolean)\n .join(' ');\n\n const wrapperCls = [\n styles.radio,\n disabled ? styles.disabled : null,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <label className={wrapperCls} htmlFor={id}>\n <input\n id={id}\n type=\"radio\"\n className={styles.input}\n checked={isControlled ? isChecked : undefined}\n defaultChecked={!isControlled ? defaultChecked : undefined}\n disabled={disabled}\n aria-checked={isChecked}\n onChange={onChange}\n {...props}\n />\n <span className={circleCls} aria-hidden=\"true\" />\n {label && <span className={styles.label}>{label}</span>}\n </label>\n );\n}\n","import React, { useId, useRef, useState, useEffect, useCallback } from 'react';\nimport type { Icon as PhosphorIcon } from '@phosphor-icons/react';\nimport { CaretDown } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport { Dropdown } from '../Dropdown/index.js';\nimport styles from './Select.module.css';\n\nexport type SelectSize = 'large' | 'medium' | 'small' | 'xsmall';\nexport type SelectState = 'default' | 'hover' | 'focus' | 'error' | 'disabled';\nexport type SelectHintType = 'default' | 'danger' | 'success' | 'warning';\n\nexport interface SelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps {\n /** Current selected value (controlled). */\n value?: string;\n /** Default value for uncontrolled usage. */\n defaultValue?: string;\n /** Available options. */\n options?: SelectOption[];\n /** Field label shown above the trigger. */\n label?: string;\n /** Placeholder shown when no option is selected. */\n placeholder?: string;\n /** Component size. */\n size?: SelectSize;\n /** Explicit state override (useful for design demos). */\n state?: SelectState;\n /** Whether the field is disabled. */\n disabled?: boolean;\n /** Whether the field has an error state. */\n error?: boolean;\n /** Hint text shown below the trigger. */\n hint?: string;\n /** Hint type — controls hint text colour. */\n hintType?: SelectHintType;\n /** Optional leading icon. */\n leadingIcon?: PhosphorIcon;\n /** Callback fired when the selected value changes. */\n onChange?: (value: string) => void;\n /** Additional className for the wrapper. */\n className?: string;\n /** id forwarded to the trigger button. */\n id?: string;\n /** aria-label for the trigger when no label is provided. */\n 'aria-label'?: string;\n /** Inline styles applied to the wrapper (ex.: restringir a largura). */\n style?: React.CSSProperties;\n}\n\nconst SIZE_CLASS: Record<SelectSize, string> = {\n large: styles.sizeLarge,\n medium: styles.sizeMedium,\n small: styles.sizeSmall,\n xsmall: styles.sizeXsmall,\n};\n\nconst ICON_SIZE: Record<SelectSize, number> = {\n large: 20,\n medium: 20,\n small: 16,\n xsmall: 16,\n};\n\nconst HINT_CLASS: Record<SelectHintType, string> = {\n default: styles.hint,\n danger: `${styles.hint} ${styles.hintDanger}`,\n success: `${styles.hint} ${styles.hintSuccess}`,\n warning: `${styles.hint} ${styles.hintWarning}`,\n};\n\nexport function Select({\n value: valueProp,\n defaultValue,\n options = [],\n label,\n placeholder = 'Select',\n size = 'medium',\n state,\n disabled = false,\n error = false,\n hint,\n hintType = 'default',\n leadingIcon,\n onChange,\n className,\n id: idProp,\n 'aria-label': ariaLabel,\n style,\n}: SelectProps) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const labelId = `${id}-label`;\n const listboxId = `${id}-listbox`;\n\n const isControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = useState<string>(defaultValue ?? '');\n const currentValue = isControlled ? valueProp : internalValue;\n\n const [open, setOpen] = useState(false);\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n // Resolve states\n const isDisabled = disabled || state === 'disabled';\n const isError = error || state === 'error';\n const isFocused = state === 'focus';\n\n // Close on outside click\n const handleOutsideClick = useCallback((e: MouseEvent) => {\n if (wrapperRef.current && !wrapperRef.current.contains(e.target as Node)) {\n setOpen(false);\n }\n }, []);\n\n useEffect(() => {\n if (open) {\n document.addEventListener('mousedown', handleOutsideClick);\n } else {\n document.removeEventListener('mousedown', handleOutsideClick);\n }\n return () => document.removeEventListener('mousedown', handleOutsideClick);\n }, [open, handleOutsideClick]);\n\n // Move the keyboard highlight to the next/previous enabled option\n const moveHighlight = (dir: 1 | -1) => {\n if (!options.length) return;\n setHighlightedIndex((prev) => {\n let i = prev;\n for (let step = 0; step < options.length; step++) {\n i = (i + dir + options.length) % options.length;\n if (!options[i].disabled) return i;\n }\n return prev;\n });\n };\n\n const openMenu = () => {\n if (isDisabled) return;\n const selIdx = options.findIndex((o) => o.value === currentValue && !o.disabled);\n const firstEnabled = options.findIndex((o) => !o.disabled);\n setHighlightedIndex(selIdx >= 0 ? selIdx : firstEnabled);\n setOpen(true);\n };\n\n // Keyboard navigation (focus stays on the trigger; combobox + aria-activedescendant)\n const handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (isDisabled) return;\n switch (e.key) {\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (open) {\n if (highlightedIndex >= 0 && options[highlightedIndex]) {\n handleSelect(options[highlightedIndex]);\n }\n } else {\n openMenu();\n }\n break;\n case 'Escape':\n setOpen(false);\n triggerRef.current?.focus();\n break;\n case 'ArrowDown':\n e.preventDefault();\n if (!open) openMenu();\n else moveHighlight(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!open) openMenu();\n else moveHighlight(-1);\n break;\n case 'Tab':\n setOpen(false);\n break;\n }\n };\n\n const handleSelect = (opt: SelectOption) => {\n if (opt.disabled) return;\n if (!isControlled) setInternalValue(opt.value);\n onChange?.(opt.value);\n setOpen(false);\n triggerRef.current?.focus();\n };\n\n const selectedOption = options.find((o) => o.value === currentValue);\n const displayLabel = selectedOption?.label ?? '';\n\n // CSS classes\n const fieldCls = [\n styles.field,\n SIZE_CLASS[size],\n isError ? styles.fieldError : null,\n // Mantém o visual de foco enquanto o dropdown está aberto — :focus-visible\n // não dispara quando o menu é aberto por clique do mouse.\n (isFocused || open) ? styles.fieldFocus : null,\n ]\n .filter(Boolean)\n .join(' ');\n\n const wrapperCls = [styles.selectWrapper, className]\n .filter(Boolean)\n .join(' ');\n\n const iconSize = ICON_SIZE[size];\n\n return (\n <div className={wrapperCls} style={style} ref={wrapperRef}>\n {label && (\n <span id={labelId} className={styles.label}>\n {label}\n </span>\n )}\n\n {/* Trigger + dropdown panel */}\n <div className={styles.fieldWrapper}>\n <button\n ref={triggerRef}\n id={id}\n type=\"button\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={listboxId}\n aria-activedescendant={\n open && highlightedIndex >= 0 ? `${listboxId}-opt-${highlightedIndex}` : undefined\n }\n aria-labelledby={label ? `${labelId} ${id}` : undefined}\n aria-label={!label ? ariaLabel : undefined}\n aria-disabled={isDisabled}\n aria-invalid={isError || undefined}\n disabled={isDisabled}\n className={fieldCls}\n onClick={() => (open ? setOpen(false) : openMenu())}\n onKeyDown={handleKeyDown}\n >\n {leadingIcon && (\n <span className={styles.leadingIcon}>\n <Icon as={leadingIcon} size={iconSize} />\n </span>\n )}\n\n <span\n className={`${styles.valueText} ${!selectedOption ? styles.placeholder : ''}`}\n aria-live=\"polite\"\n >\n {displayLabel || placeholder}\n </span>\n\n <span className={`${styles.caretIcon} ${open ? styles.caretIconOpen : ''}`} aria-hidden=\"true\">\n <Icon as={CaretDown} size={16} weight=\"bold\" />\n </span>\n </button>\n\n {/* Listbox — reutiliza o componente Dropdown (building block) */}\n {open && (\n <Dropdown\n id={listboxId}\n aria-labelledby={label ? labelId : undefined}\n aria-label={!label ? ariaLabel : undefined}\n className={styles.menuPanel}\n fluid\n options={options}\n selectedValue={currentValue}\n activeIndex={highlightedIndex}\n getOptionId={(_v, i) => `${listboxId}-opt-${i}`}\n optionsFocusable={false}\n selectOnPointerDown\n onOptionHover={setHighlightedIndex}\n onSelect={(v) => {\n const opt = options.find((o) => o.value === v);\n if (opt) handleSelect(opt);\n }}\n />\n )}\n </div>\n\n {/* Hint */}\n {hint && (\n <span className={HINT_CLASS[hintType]}>\n {hint}\n </span>\n )}\n </div>\n );\n}\n","import React, { useId, useRef, useState, useEffect, useCallback } from 'react';\nimport { CaretDown, MagnifyingGlass } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport { Checkbox } from '../Checkbox/index.js';\nimport { Chip } from '../Chip/index.js';\nimport styles from './Multiselect.module.css';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type MultiselectSize = 'large' | 'medium' | 'small' | 'xsmall';\nexport type MultiselectState = 'default' | 'error' | 'disabled';\n\nexport interface MultiselectOption {\n /** Unique value for this option. */\n value: string;\n /** Display label. */\n label: string;\n /** Whether this option is disabled and cannot be selected. */\n disabled?: boolean;\n}\n\nexport interface MultiselectProps {\n /** List of selectable options. */\n options: MultiselectOption[];\n /** Currently selected values (controlled). */\n value?: string[];\n /** Default selected values (uncontrolled). */\n defaultValue?: string[];\n /** Called when the selection changes. */\n onChange?: (values: string[]) => void;\n /** Field label rendered above the trigger. */\n label?: string;\n /** Placeholder text when nothing is selected. */\n placeholder?: string;\n /** Hint text rendered below the trigger. */\n hint?: string;\n /** Size variant of the trigger field. */\n size?: MultiselectSize;\n /** Visual state of the field. */\n state?: MultiselectState;\n /** Whether the field is disabled. */\n disabled?: boolean;\n /** Whether to show the search/filter input inside the dropdown. */\n showSearch?: boolean;\n /** Maximum number of chip labels to show before showing \"+N\" overflow count. */\n maxChips?: number;\n /** Additional class name for the root element. */\n className?: string;\n /** ARIA label for the combobox trigger. */\n 'aria-label'?: string;\n /** ARIA labelledby for the combobox trigger. */\n 'aria-labelledby'?: string;\n /** ID attribute for the root element. */\n id?: string;\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nconst SIZE_CLASS: Record<MultiselectSize, string> = {\n large: styles.sizeLarge,\n medium: styles.sizeMedium,\n small: styles.sizeSmall,\n xsmall: styles.sizeXsmall,\n};\n\n// ─── Inner checkbox visual ─────────────────────────────────────────────────────\n\ninterface CheckboxBoxProps {\n checked: boolean;\n indeterminate?: boolean;\n}\n\nfunction CheckboxBox({ checked, indeterminate = false }: CheckboxBoxProps) {\n const cls = [\n styles.optionCheckbox,\n checked || indeterminate ? styles.optionCheckboxChecked : undefined,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <span className={cls} aria-hidden=\"true\">\n {/*\n Marcas idênticas às do Checkbox da biblioteca (SVG inline 16×16) para\n manter o visual default — a linha da opção é um <button>, então não dá\n para aninhar o <Checkbox> real (input interativo dentro de button).\n Se a marca mudar na lib (Checkbox.tsx), sincronizar aqui.\n */}\n {indeterminate ? (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path d=\"M3 8H13\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n ) : checked ? (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M2.5 8L6.5 12L13.5 4\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n ) : null}\n </span>\n );\n}\n\n// ─── Multiselect ───────────────────────────────────────────────────────────────\n\nexport function Multiselect({\n options,\n value: valueProp,\n defaultValue,\n onChange,\n label,\n placeholder = 'Selecionar opção',\n hint,\n size = 'medium',\n state = 'default',\n disabled = false,\n showSearch = true,\n maxChips = 3,\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n id: idProp,\n}: MultiselectProps) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const listboxId = `${id}-listbox`;\n const labelId = `${id}-label`;\n\n // ─── State ───────────────────────────────────────────────────\n const isControlled = valueProp !== undefined;\n const [internalSelected, setInternalSelected] = useState<string[]>(\n defaultValue ?? [],\n );\n const selected = isControlled ? valueProp! : internalSelected;\n\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n\n // ─── Derived ─────────────────────────────────────────────────\n const effectiveDisabled = disabled || state === 'disabled';\n const isError = state === 'error';\n\n const filteredOptions = options.filter((opt) =>\n opt.label.toLowerCase().includes(searchQuery.toLowerCase()),\n );\n\n const selectableOptions = options.filter((opt) => !opt.disabled);\n const selectedCount = selected.length;\n const allSelected =\n selectableOptions.length > 0 &&\n selectableOptions.every((opt) => selected.includes(opt.value));\n const someSelected = selectedCount > 0 && !allSelected;\n\n // ─── Handlers ────────────────────────────────────────────────\n const updateSelected = useCallback(\n (next: string[]) => {\n if (!isControlled) {\n setInternalSelected(next);\n }\n onChange?.(next);\n },\n [isControlled, onChange],\n );\n\n function toggleOption(optValue: string) {\n const next = selected.includes(optValue)\n ? selected.filter((v) => v !== optValue)\n : [...selected, optValue];\n updateSelected(next);\n }\n\n function toggleAll() {\n if (allSelected) {\n updateSelected([]);\n } else {\n const allValues = selectableOptions.map((o) => o.value);\n updateSelected(allValues);\n }\n }\n\n function removeChip(optValue: string, e: React.MouseEvent) {\n e.stopPropagation();\n updateSelected(selected.filter((v) => v !== optValue));\n }\n\n function openPanel() {\n if (effectiveDisabled) return;\n setIsOpen(true);\n setSearchQuery('');\n }\n\n function closePanel() {\n setIsOpen(false);\n setSearchQuery('');\n triggerRef.current?.focus();\n }\n\n function handleTriggerKeyDown(e: React.KeyboardEvent) {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {\n e.preventDefault();\n if (!isOpen) openPanel();\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n closePanel();\n }\n }\n\n function handlePanelKeyDown(e: React.KeyboardEvent) {\n if (e.key === 'Escape') {\n e.preventDefault();\n closePanel();\n }\n }\n\n // Close on outside click\n useEffect(() => {\n if (!isOpen) return;\n function handleOutside(e: MouseEvent) {\n if (rootRef.current && !rootRef.current.contains(e.target as Node)) {\n closePanel();\n }\n }\n document.addEventListener('mousedown', handleOutside);\n return () => document.removeEventListener('mousedown', handleOutside);\n }, [isOpen]);\n\n // Focus search when panel opens\n useEffect(() => {\n if (isOpen && showSearch) {\n // slight delay so the panel is mounted before focus\n const t = setTimeout(() => searchRef.current?.focus(), 50);\n return () => clearTimeout(t);\n }\n }, [isOpen, showSearch]);\n\n // ─── Chip rendering ──────────────────────────────────────────\n const selectedOptions = options.filter((o) => selected.includes(o.value));\n const visibleChips = selectedOptions.slice(0, maxChips);\n const overflowCount = selectedOptions.length - visibleChips.length;\n\n // ─── Class names ─────────────────────────────────────────────\n const rootCls = [\n styles.multiselect,\n SIZE_CLASS[size],\n isError ? styles.stateError : undefined,\n isOpen ? styles.stateOpen : undefined,\n effectiveDisabled ? styles.disabled : undefined,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n // ─── Render ───────────────────────────────────────────────────\n return (\n <div ref={rootRef} className={rootCls} id={id}>\n {/* Label */}\n {label && (\n <span id={labelId} className={styles.label}>\n {label}\n </span>\n )}\n\n {/* Trigger — div (não button) para permitir Chips com botão de fechar dentro */}\n <div\n ref={triggerRef}\n role=\"combobox\"\n tabIndex={effectiveDisabled ? -1 : 0}\n className={styles.trigger}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-label={ariaLabel}\n aria-labelledby={label ? `${labelId}` : ariaLabelledby}\n aria-disabled={effectiveDisabled}\n onClick={effectiveDisabled ? undefined : (isOpen ? closePanel : openPanel)}\n onKeyDown={handleTriggerKeyDown}\n >\n {/* Chip group / placeholder */}\n <span className={styles.chipGroup}>\n {selectedOptions.length === 0 ? (\n <span className={styles.placeholder}>{placeholder}</span>\n ) : (\n <>\n {visibleChips.map((opt) => (\n <Chip\n key={opt.value}\n type=\"outline\"\n size=\"xsmall\"\n showClose\n closeLabel={`Remover ${opt.label}`}\n disabled={effectiveDisabled}\n onClose={(e) => removeChip(opt.value, e as unknown as React.MouseEvent)}\n >\n {opt.label}\n </Chip>\n ))}\n {overflowCount > 0 && (\n <span className={styles.overflowCount}>\n +{overflowCount}\n </span>\n )}\n </>\n )}\n </span>\n\n {/* Caret */}\n <span\n className={[styles.caret, isOpen ? styles.caretOpen : undefined]\n .filter(Boolean)\n .join(' ')}\n aria-hidden=\"true\"\n >\n <Icon as={CaretDown} size={16} />\n </span>\n </div>\n\n {/* Hint */}\n {hint && (\n <span className={[styles.hint, isError ? styles.hintError : undefined]\n .filter(Boolean)\n .join(' ')}>\n {hint}\n </span>\n )}\n\n {/* Dropdown panel */}\n {isOpen && (\n <div\n className={styles.panel}\n onKeyDown={handlePanelKeyDown}\n >\n <div className={styles.panelInner}>\n {/* Search row */}\n {showSearch && (\n <div className={styles.searchRow}>\n <Checkbox\n checked={allSelected ? true : someSelected ? 'indeterminate' : false}\n onChange={toggleAll}\n aria-label={allSelected || someSelected ? 'Deselect all' : 'Select all'}\n />\n <div className={styles.searchField}>\n <input\n ref={searchRef}\n type=\"text\"\n className={styles.searchInput}\n placeholder=\"Placeholder\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n aria-label=\"Search options\"\n />\n <span className={styles.searchIcon} aria-hidden=\"true\">\n <Icon as={MagnifyingGlass} size={16} />\n </span>\n </div>\n </div>\n )}\n\n {/* Options list */}\n <div\n id={listboxId}\n role=\"listbox\"\n aria-multiselectable=\"true\"\n aria-label={label ?? ariaLabel ?? 'Options'}\n className={styles.list}\n >\n {filteredOptions.length === 0 ? (\n <div className={styles.noResults}>No results found</div>\n ) : (\n filteredOptions.map((opt) => {\n const isSelected = selected.includes(opt.value);\n return (\n <button\n key={opt.value}\n type=\"button\"\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={opt.disabled}\n className={styles.option}\n onClick={() => !opt.disabled && toggleOption(opt.value)}\n tabIndex={opt.disabled ? -1 : 0}\n >\n <CheckboxBox checked={isSelected} />\n <span className={styles.optionLabel}>{opt.label}</span>\n </button>\n );\n })\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport type { Icon as PhosphorIcon } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport styles from './SegmentControl.module.css';\n\nexport interface SegmentControlOption {\n /** Unique identifier for the option */\n value: string;\n /** Display label */\n label: string;\n /** Optional leading icon */\n icon?: PhosphorIcon;\n}\n\nexport interface SegmentControlProps {\n /** Array of 2–5 options to display */\n options: SegmentControlOption[];\n /** Currently selected value */\n value: string;\n /** Callback fired when the user selects a different option */\n onChange: (value: string) => void;\n /** Disables all interaction */\n disabled?: boolean;\n /** Additional class names for the wrapper */\n className?: string;\n /** aria-label for the group when no surrounding label is present */\n 'aria-label'?: string;\n /** aria-labelledby pointing to an external label element */\n 'aria-labelledby'?: string;\n}\n\nexport function SegmentControl({\n options,\n value,\n onChange,\n disabled = false,\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n}: SegmentControlProps) {\n const containerRef = React.useRef<HTMLDivElement>(null);\n const [pill, setPill] = React.useState<{ x: number; width: number } | null>(null);\n\n // Mede a posição do botão ativo após cada mudança de value e posiciona o pill.\n // useLayoutEffect roda de forma síncrona antes do browser pintar, então o\n // pill aparece no lugar certo já no primeiro frame — sem flash de posição.\n React.useLayoutEffect(() => {\n if (!containerRef.current) return;\n const btn = containerRef.current.querySelector<HTMLElement>('[aria-checked=\"true\"]');\n if (!btn) return;\n setPill({ x: btn.offsetLeft, width: btn.offsetWidth });\n }, [value]);\n\n const wrapperCls = [\n styles.segmentControl,\n disabled ? styles.disabled : undefined,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n role=\"group\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n className={wrapperCls}\n ref={containerRef}\n >\n {/* Pill deslizante — abaixo dos itens no z-order, pointer-events:none */}\n {pill && (\n <div\n className={styles.pill}\n style={{ width: pill.width, transform: `translateX(${pill.x}px)` }}\n aria-hidden=\"true\"\n />\n )}\n\n {options.map((option) => {\n const isActive = option.value === value;\n\n const itemCls = [\n styles.item,\n isActive ? styles.itemActive : undefined,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"radio\"\n aria-checked={isActive}\n disabled={disabled}\n aria-disabled={disabled || undefined}\n className={itemCls}\n onClick={() => {\n if (!disabled && !isActive) {\n onChange(option.value);\n }\n }}\n >\n {option.icon && <Icon as={option.icon} size={16} />}\n {option.label}\n </button>\n );\n })}\n </div>\n );\n}\n","import React from 'react';\nimport styles from './Skeleton.module.css';\n\n/* ─── Base Skeleton ──────────────────────────────────────────── */\n\nexport type SkeletonVariant = 'text' | 'rect' | 'circle';\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Shape of the placeholder. */\n variant?: SkeletonVariant;\n /** Width — number (px) or any CSS length. Default comes from the variant. */\n width?: number | string;\n /** Height — number (px) or any CSS length. Default comes from the variant. */\n height?: number | string;\n /** Border-radius override — number (px) or any CSS length. */\n radius?: number | string;\n /** Whether to play the pulse animation (default true). */\n animated?: boolean;\n}\n\nconst VARIANT_CLASS: Record<SkeletonVariant, string> = {\n text: styles.text,\n rect: styles.rect,\n circle: styles.circle,\n};\n\nfunction toCssSize(value: number | string | undefined): string | undefined {\n if (value == null) return undefined;\n return typeof value === 'number' ? `${value}px` : value;\n}\n\n/**\n * Decorative loading placeholder. It is `aria-hidden` by default — mark the\n * surrounding region with `aria-busy=\"true\"` so assistive tech announces the\n * loading state instead of the empty boxes.\n */\nexport function Skeleton({\n variant = 'text',\n width,\n height,\n radius,\n animated = true,\n className,\n style,\n ...props\n}: SkeletonProps) {\n const cls = [\n styles.skeleton,\n VARIANT_CLASS[variant],\n animated ? styles.animated : undefined,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n let w = toCssSize(width);\n let h = toCssSize(height);\n // A circle is symmetric: if only one dimension is given, mirror it.\n if (variant === 'circle') {\n w = w ?? h ?? '40px';\n h = h ?? w;\n }\n\n const mergedStyle: React.CSSProperties = {\n width: w,\n height: h,\n borderRadius: toCssSize(radius),\n ...style,\n };\n\n return <span className={cls} style={mergedStyle} aria-hidden=\"true\" {...props} />;\n}\n\n/* ─── SkeletonText preset ────────────────────────────────────── */\n\nexport interface SkeletonTextProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Number of text lines to render (default 3). */\n lines?: number;\n /** Width of the last line — shorter looks more natural (default '60%'). */\n lastLineWidth?: number | string;\n /** Gap between lines — number (px) or any CSS length (default 8). */\n gap?: number | string;\n /** Whether to play the pulse animation (default true). */\n animated?: boolean;\n}\n\n/** Stacked text lines, with a shorter final line for a natural look. */\nexport function SkeletonText({\n lines = 3,\n lastLineWidth = '60%',\n gap = 8,\n animated = true,\n className,\n style,\n ...props\n}: SkeletonTextProps) {\n const cls = [styles.textGroup, className].filter(Boolean).join(' ');\n\n return (\n <div\n className={cls}\n style={{ gap: toCssSize(gap), ...style }}\n aria-hidden=\"true\"\n {...props}\n >\n {Array.from({ length: Math.max(0, lines) }).map((_, i) => {\n const isLast = i === lines - 1 && lines > 1;\n return (\n <Skeleton\n key={i}\n variant=\"text\"\n animated={animated}\n width={isLast ? lastLineWidth : '100%'}\n />\n );\n })}\n </div>\n );\n}\n\n/* ─── SkeletonAvatar preset ──────────────────────────────────── */\n\nexport interface SkeletonAvatarProps\n extends Omit<SkeletonProps, 'variant' | 'width' | 'height'> {\n /** Diameter — number (px) or any CSS length (default 40). */\n size?: number | string;\n}\n\n/** Circular placeholder for an avatar / profile image. */\nexport function SkeletonAvatar({ size = 40, ...rest }: SkeletonAvatarProps) {\n return <Skeleton variant=\"circle\" width={size} height={size} {...rest} />;\n}\n","import React, { useId } from 'react';\nimport { Info, XCircle, CheckCircle } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport styles from './TextField.module.css';\n\nexport type TextFieldState = 'default' | 'danger' | 'success';\n\nexport interface TextFieldProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'id'> {\n /** Field label text */\n label?: string;\n /** Whether the label is visible */\n showLabel?: boolean;\n /** Hint / helper text displayed below the field */\n hint?: string;\n /** Visual validation state */\n state?: TextFieldState;\n /** ID for the input element (auto-generated if omitted) */\n id?: string;\n /** Additional class name for the root element */\n className?: string;\n}\n\nconst FIELD_STATE_CLASS: Record<TextFieldState, string> = {\n default: '',\n danger: styles.fieldDanger,\n success: styles.fieldSuccess,\n};\n\nconst HINT_STATE_CLASS: Record<TextFieldState, string> = {\n default: '',\n danger: styles.hintDanger,\n success: styles.hintSuccess,\n};\n\nconst TRAILING_ICON_STATE_CLASS: Record<TextFieldState, string> = {\n default: '',\n danger: styles.trailingIconDanger,\n success: styles.trailingIconSuccess,\n};\n\nconst HINT_ICON = {\n default: Info,\n danger: XCircle,\n success: CheckCircle,\n} as const;\n\nexport function TextField({\n label = 'Label',\n showLabel = true,\n hint,\n state = 'default',\n id: idProp,\n disabled = false,\n className,\n ...inputProps\n}: TextFieldProps) {\n const generatedId = useId();\n const inputId = idProp ?? `text-field-${generatedId}`;\n\n const rootClasses = [\n styles.textField,\n disabled ? styles.textFieldDisabled : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const fieldClasses = [\n styles.field,\n FIELD_STATE_CLASS[state],\n ]\n .filter(Boolean)\n .join(' ');\n\n const showStatusIcon = state === 'danger' || state === 'success';\n const StatusIcon = HINT_ICON[state];\n const HintIcon = HINT_ICON[state];\n\n return (\n <div className={rootClasses}>\n <div className={styles.topGroup}>\n {showLabel && (\n <label className={styles.label} htmlFor={inputId}>\n {label}\n </label>\n )}\n\n <div className={fieldClasses}>\n <input\n id={inputId}\n className={styles.input}\n disabled={disabled}\n aria-disabled={disabled}\n aria-label={!showLabel ? (inputProps['aria-label'] ?? label) : undefined}\n aria-describedby={hint ? `${inputId}-hint` : undefined}\n aria-invalid={state === 'danger' ? true : undefined}\n {...inputProps}\n />\n\n {showStatusIcon && (\n <Icon\n as={StatusIcon}\n size={20}\n className={`${styles.trailingIcon} ${TRAILING_ICON_STATE_CLASS[state]}`}\n weight=\"bold\"\n />\n )}\n </div>\n </div>\n\n {hint && (\n <div\n id={`${inputId}-hint`}\n className={`${styles.hint} ${HINT_STATE_CLASS[state]}`}\n >\n <Icon\n as={HintIcon}\n size={16}\n className={styles.hintIcon}\n weight=\"bold\"\n />\n <span>{hint}</span>\n </div>\n )}\n </div>\n );\n}\n","import React, { useId, useCallback } from 'react';\nimport { TextField } from '../TextField/index.js';\nimport styles from './Slider.module.css';\n\nexport interface SliderProps {\n /** Current value (controlled). */\n value?: number;\n /** Default value for uncontrolled usage. */\n defaultValue?: number;\n /** Minimum value. Defaults to 0. */\n min?: number;\n /** Maximum value. Defaults to 100. */\n max?: number;\n /** Step increment. Defaults to 1. */\n step?: number;\n /** Show numeric input fields above the track. */\n showUpperFields?: boolean;\n /** Show numeric input fields below the track. */\n showBottomFields?: boolean;\n /** Disabled state — opacity 0.5, not interactive. */\n disabled?: boolean;\n /** Accessible label for the slider. */\n 'aria-label'?: string;\n /** ID of an element that labels the slider. */\n 'aria-labelledby'?: string;\n /** Called when the value changes. */\n onChange?: (value: number) => void;\n /** Additional class name applied to the root wrapper. */\n className?: string;\n}\n\nexport function Slider({\n value,\n defaultValue = 0,\n min = 0,\n max = 100,\n step = 1,\n showUpperFields = false,\n showBottomFields = false,\n disabled = false,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n onChange,\n className,\n}: SliderProps) {\n const inputId = useId();\n const isControlled = value !== undefined;\n\n const [internalValue, setInternalValue] = React.useState<number>(defaultValue);\n const currentValue = isControlled ? value : internalValue;\n\n // Percentage along the track (0–100) for positioning thumb & range\n const percentage = Math.min(\n 100,\n Math.max(0, ((currentValue - min) / (max - min)) * 100)\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const next = Number(e.target.value);\n if (!isControlled) setInternalValue(next);\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n const handleFieldChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value;\n if (raw === '') return;\n const clamped = Math.min(max, Math.max(min, Number(raw)));\n if (!isControlled) setInternalValue(clamped);\n onChange?.(clamped);\n },\n [isControlled, min, max, onChange]\n );\n\n const rootCls = [\n styles.slider,\n disabled ? styles.disabled : undefined,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const fieldRow = (\n <div className={styles.fieldRow}>\n <div className={styles.field}>\n <TextField\n showLabel={false}\n type=\"number\"\n value={currentValue}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n onChange={handleFieldChange}\n aria-label=\"Minimum value\"\n placeholder=\"0\"\n />\n </div>\n <div className={styles.field}>\n <TextField\n showLabel={false}\n type=\"number\"\n value={max}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n readOnly\n aria-label=\"Maximum value\"\n placeholder=\"0\"\n />\n </div>\n </div>\n );\n\n return (\n <div className={rootCls}>\n {showUpperFields && fieldRow}\n\n {/* Track container — provides 24px tall hit area */}\n <div className={styles.trackContainer}>\n {/* Background track */}\n <div className={styles.track}>\n {/* Filled range */}\n <div\n className={styles.range}\n style={{ width: `${percentage}%` }}\n />\n </div>\n\n {/* Draggable thumb positioned by percentage */}\n <div\n className={styles.thumb}\n style={{ left: `${percentage}%` }}\n aria-hidden=\"true\"\n />\n\n {/* Hidden native input — drives all interaction and accessibility */}\n <input\n id={inputId}\n type=\"range\"\n className={styles.input}\n min={min}\n max={max}\n step={step}\n value={currentValue}\n disabled={disabled}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={currentValue}\n onChange={handleChange}\n />\n </div>\n\n {showBottomFields && fieldRow}\n </div>\n );\n}\n","import React, { useId } from 'react';\nimport styles from './Switch.module.css';\n\nexport interface SwitchProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n /** Whether the switch is toggled on */\n checked?: boolean;\n /** Default checked state for uncontrolled usage */\n defaultChecked?: boolean;\n /** Callback when the user toggles the switch */\n onChange?: (checked: boolean) => void;\n /** Optional label text rendered beside the track */\n label?: string;\n}\n\nexport function Switch({\n checked,\n defaultChecked = false,\n onChange,\n label,\n disabled,\n className,\n id: idProp,\n ...props\n}: SwitchProps) {\n // Support both controlled and uncontrolled modes\n const [internalChecked, setInternalChecked] = React.useState(defaultChecked);\n const isControlled = checked !== undefined;\n const isChecked = isControlled ? checked : internalChecked;\n\n const generatedId = useId();\n const id = idProp ?? generatedId;\n\n function handleClick() {\n const next = !isChecked;\n if (!isControlled) {\n setInternalChecked(next);\n }\n onChange?.(next);\n }\n\n const cls = [styles.switch, className].filter(Boolean).join(' ');\n\n return (\n <button\n id={id}\n type=\"button\"\n role=\"switch\"\n className={cls}\n aria-checked={isChecked}\n aria-disabled={disabled}\n disabled={disabled}\n onClick={handleClick}\n {...props}\n >\n <span className={styles.track}>\n <span className={styles.thumb} />\n </span>\n {label && <span className={styles.label}>{label}</span>}\n </button>\n );\n}\n","import React, { useId, useState } from 'react';\nimport { PlusCircle, MinusCircle, Info, Warning, XCircle, CheckCircle } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport styles from './InputNumber.module.css';\n\nexport type InputNumberStatus = 'default' | 'danger' | 'success';\nexport type InputNumberHintType = 'default' | 'warning' | 'danger' | 'success';\n\nexport interface InputNumberProps {\n value?: number;\n defaultValue?: number;\n min?: number;\n max?: number;\n step?: number;\n onChange?: (value: number) => void;\n label?: string;\n showLabel?: boolean;\n hint?: string;\n hintType?: InputNumberHintType;\n status?: InputNumberStatus;\n disabled?: boolean;\n placeholder?: string;\n className?: string;\n id?: string;\n}\n\nconst HINT_ICON = {\n default: Info,\n warning: Warning,\n danger: XCircle,\n success: CheckCircle,\n} as const;\n\nconst FIELD_STATUS_CLASS: Record<InputNumberStatus, string> = {\n default: '',\n danger: styles.fieldDanger,\n success: styles.fieldSuccess,\n};\n\nconst HINT_TYPE_CLASS: Record<InputNumberHintType, string> = {\n default: '',\n warning: styles.hintWarning,\n danger: styles.hintDanger,\n success: styles.hintSuccess,\n};\n\nexport function InputNumber({\n value: valueProp,\n defaultValue = 0,\n min,\n max,\n step = 1,\n onChange,\n label = 'Label',\n showLabel = true,\n hint,\n hintType,\n status = 'default',\n disabled = false,\n placeholder = 'Placeholder',\n className,\n id: idProp,\n}: InputNumberProps) {\n const generatedId = useId();\n const inputId = idProp ?? `input-number-${generatedId}`;\n\n const isControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = useState<number>(defaultValue);\n const [editStr, setEditStr] = useState<string | null>(null);\n\n const currentValue = isControlled ? valueProp! : internalValue;\n\n const resolvedHintType: InputNumberHintType =\n hintType ?? (status === 'danger' ? 'danger' : status === 'success' ? 'success' : 'default');\n\n const clamp = (v: number): number => {\n let result = v;\n if (min !== undefined) result = Math.max(min, result);\n if (max !== undefined) result = Math.min(max, result);\n return result;\n };\n\n const commit = (v: number) => {\n const clamped = clamp(v);\n if (!isControlled) setInternalValue(clamped);\n onChange?.(clamped);\n };\n\n const handleIncrement = () => commit(currentValue + step);\n const handleDecrement = () => commit(currentValue - step);\n\n const handleFocus = () => setEditStr(String(currentValue));\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value;\n if (raw === '' || raw === '-' || /^-?\\d*\\.?\\d*$/.test(raw)) {\n setEditStr(raw);\n }\n };\n const handleBlur = () => {\n const parsed = parseFloat(editStr ?? '');\n if (!isNaN(parsed)) commit(parsed);\n setEditStr(null);\n };\n\n const displayValue = editStr ?? String(currentValue);\n const isAtMin = min !== undefined && currentValue <= min;\n const isAtMax = max !== undefined && currentValue >= max;\n\n const HintIconComponent = HINT_ICON[resolvedHintType];\n\n const rootClasses = [styles.root, disabled ? styles.disabled : '', className]\n .filter(Boolean)\n .join(' ');\n const fieldClasses = [styles.field, FIELD_STATUS_CLASS[status]].filter(Boolean).join(' ');\n const hintClasses = [styles.hint, HINT_TYPE_CLASS[resolvedHintType]].filter(Boolean).join(' ');\n\n return (\n <div className={rootClasses}>\n {showLabel && (\n <label className={styles.label} htmlFor={inputId}>\n {label}\n </label>\n )}\n <div className={fieldClasses}>\n <button\n type=\"button\"\n className={styles.btn}\n onClick={handleDecrement}\n disabled={disabled || isAtMin}\n aria-label=\"Decrementar\"\n tabIndex={-1}\n >\n <Icon as={MinusCircle} size={20} />\n </button>\n <input\n id={inputId}\n type=\"text\"\n inputMode=\"decimal\"\n className={styles.input}\n value={displayValue}\n placeholder={placeholder}\n disabled={disabled}\n aria-disabled={disabled}\n aria-describedby={hint ? `${inputId}-hint` : undefined}\n aria-invalid={status === 'danger' ? true : undefined}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n />\n <button\n type=\"button\"\n className={styles.btn}\n onClick={handleIncrement}\n disabled={disabled || isAtMax}\n aria-label=\"Incrementar\"\n tabIndex={-1}\n >\n <Icon as={PlusCircle} size={20} />\n </button>\n </div>\n {hint && (\n <div id={`${inputId}-hint`} className={hintClasses}>\n <Icon as={HintIconComponent} size={16} weight=\"bold\" />\n <span>{hint}</span>\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport styles from './Tag.module.css';\n\nexport type TagStyle = 'filled' | 'outline';\nexport type TagSize = 'xsmall' | 'small' | 'medium' | 'large';\nexport type TagType = 'danger' | 'success' | 'warning' | 'neutral' | 'brand';\n\nexport interface TagProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Visual style of the tag */\n tagStyle?: TagStyle;\n /** Size of the tag */\n size?: TagSize;\n /** Semantic type/color of the tag */\n type?: TagType;\n /** Text label displayed inside the tag */\n label?: string;\n /** Whether the tag is disabled */\n disabled?: boolean;\n}\n\nconst STYLE_CLASS: Record<TagStyle, string> = {\n filled: styles.styleFilled,\n outline: styles.styleOutline,\n};\n\nconst SIZE_CLASS: Record<TagSize, string> = {\n xsmall: styles.sizeXsmall,\n small: styles.sizeSmall,\n medium: styles.sizeMedium,\n large: styles.sizeLarge,\n};\n\nconst TYPE_CLASS: Record<TagType, string> = {\n danger: styles.typeDanger,\n success: styles.typeSuccess,\n warning: styles.typeWarning,\n neutral: styles.typeNeutral,\n brand: styles.typeBrand,\n};\n\nexport function Tag({\n tagStyle = 'filled',\n size = 'medium',\n type = 'neutral',\n label = 'Status',\n disabled = false,\n className,\n children,\n ...props\n}: TagProps) {\n const cls = [\n styles.tag,\n STYLE_CLASS[tagStyle],\n SIZE_CLASS[size],\n TYPE_CLASS[type],\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <span\n className={cls}\n aria-disabled={disabled || undefined}\n {...props}\n >\n {children ?? label}\n </span>\n );\n}\n","import React from 'react';\nimport { Info, XCircle, CheckCircle } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport styles from './Textarea.module.css';\n\nexport type TextareaState = 'default' | 'danger' | 'success';\n\nexport interface TextareaProps\n extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'className'> {\n /** Visual / validation state */\n state?: TextareaState;\n /** Label rendered above the field */\n label?: string;\n /** Hint text rendered below the field */\n hint?: string;\n /** Whether to show the hint row */\n showHint?: boolean;\n /** Whether to show the label row */\n showLabel?: boolean;\n /** Extra className applied to the root wrapper */\n className?: string;\n}\n\nexport function Textarea({\n state = 'default',\n label,\n hint,\n showHint = true,\n showLabel = true,\n className,\n disabled,\n ...props\n}: TextareaProps) {\n const isDanger = state === 'danger';\n const isSuccess = state === 'success';\n\n const rootCls = [\n styles.textarea,\n disabled ? styles.textareaDisabled : '',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ');\n\n const fieldCls = [\n styles.field,\n isDanger ? styles.fieldDanger : '',\n isSuccess ? styles.fieldSuccess : '',\n disabled ? styles.fieldDisabled : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n const hintCls = [\n styles.hint,\n isDanger ? styles.hintDanger : '',\n isSuccess ? styles.hintSuccess : '',\n ]\n .filter(Boolean)\n .join(' ');\n\n const HintIcon = isDanger ? XCircle : isSuccess ? CheckCircle : Info;\n\n return (\n <div className={rootCls}>\n <div className={styles.topGroup}>\n {showLabel && label && (\n <span className={styles.label}>{label}</span>\n )}\n <div className={fieldCls}>\n <textarea\n className={styles.nativeTextarea}\n disabled={disabled}\n aria-disabled={disabled}\n aria-invalid={isDanger ? true : undefined}\n {...props}\n />\n </div>\n </div>\n\n {showHint && hint && (\n <div className={hintCls}>\n <span className={styles.hintIcon}>\n <Icon as={HintIcon} size={16} weight=\"bold\" />\n </span>\n <span>{hint}</span>\n </div>\n )}\n </div>\n );\n}\n","import React, { useState } from 'react';\nimport type { Icon as PhosphorIcon } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport styles from './Tabs.module.css';\n\n/* ─── Types ─────────────────────────────────────────────────── */\n\nexport interface TabItem {\n /** Unique identifier for the tab */\n value: string;\n /** Visible label text */\n label: string;\n /** Optional leading icon */\n leadingIcon?: PhosphorIcon;\n /** Whether the tab is disabled */\n disabled?: boolean;\n /** Panel content to render when this tab is active */\n content?: React.ReactNode;\n}\n\nexport interface TabsProps {\n /** Array of tab definitions */\n tabs: TabItem[];\n /** Currently selected tab value (controlled) */\n value?: string;\n /** Default selected tab value (uncontrolled) */\n defaultValue?: string;\n /** Callback fired when the selected tab changes */\n onChange?: (value: string) => void;\n /** Additional class names for the tab list wrapper */\n className?: string;\n /** aria-label for the tablist */\n 'aria-label'?: string;\n /** aria-labelledby for the tablist */\n 'aria-labelledby'?: string;\n}\n\n/* ─── Component ─────────────────────────────────────────────── */\n\nexport function Tabs({\n tabs,\n value: controlledValue,\n defaultValue,\n onChange,\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n}: TabsProps) {\n const isControlled = controlledValue !== undefined;\n\n const [internalValue, setInternalValue] = useState<string>(\n defaultValue ?? tabs.find((t) => !t.disabled)?.value ?? ''\n );\n\n const activeValue = isControlled ? controlledValue : internalValue;\n\n function handleSelect(tab: TabItem) {\n if (tab.disabled) return;\n if (!isControlled) {\n setInternalValue(tab.value);\n }\n onChange?.(tab.value);\n }\n\n // Indicador deslizante: mede o tab ativo e posiciona a linha de 2px.\n // Mesmo padrão do SegmentControl — useLayoutEffect antes do paint.\n const tabListRef = React.useRef<HTMLDivElement>(null);\n const [indicator, setIndicator] = React.useState<{ x: number; width: number } | null>(null);\n\n React.useLayoutEffect(() => {\n if (!tabListRef.current) return;\n const btn = tabListRef.current.querySelector<HTMLElement>('[aria-selected=\"true\"]');\n if (!btn) return;\n setIndicator({ x: btn.offsetLeft, width: btn.offsetWidth });\n }, [activeValue]);\n\n const tabListCls = [styles.tabList, className].filter(Boolean).join(' ');\n\n return (\n <div>\n {/* Tab list */}\n <div\n role=\"tablist\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n className={tabListCls}\n ref={tabListRef}\n >\n {tabs.map((tab) => {\n const isSelected = tab.value === activeValue;\n const tabCls = [styles.tab, isSelected ? styles.tabSelected : undefined]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button\n key={tab.value}\n type=\"button\"\n role=\"tab\"\n id={`tab-${tab.value}`}\n aria-selected={isSelected}\n aria-controls={`tabpanel-${tab.value}`}\n aria-disabled={tab.disabled || undefined}\n disabled={tab.disabled}\n tabIndex={isSelected ? 0 : -1}\n className={tabCls}\n onClick={() => handleSelect(tab)}\n >\n {tab.leadingIcon && <Icon as={tab.leadingIcon} size={12} />}\n {tab.label}\n </button>\n );\n })}\n\n {/* Linha deslizante — posicionada absolutamente no fundo do tablist */}\n {indicator && (\n <div\n className={styles.indicator}\n style={{ width: indicator.width, transform: `translateX(${indicator.x}px)` }}\n aria-hidden=\"true\"\n />\n )}\n </div>\n\n {/* Tab panels */}\n {tabs.map((tab) => {\n const isSelected = tab.value === activeValue;\n return (\n <div\n key={tab.value}\n role=\"tabpanel\"\n id={`tabpanel-${tab.value}`}\n aria-labelledby={`tab-${tab.value}`}\n className={isSelected ? styles.tabPanel : styles.tabPanelHidden}\n hidden={!isSelected}\n >\n {tab.content}\n </div>\n );\n })}\n </div>\n );\n}\n","import React from 'react';\nimport { CheckCircle, WarningCircle, XCircle, X } from '@phosphor-icons/react';\nimport type { Icon as PhosphorIcon } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport styles from './Toast.module.css';\n\nexport type ToastType = 'success' | 'warning' | 'danger';\n\nexport interface ToastProps {\n /** Visual type of the toast — controls color, icon, and accent bar. */\n type?: ToastType;\n /** Bold heading shown above the description. */\n title: string;\n /** Supporting body text. */\n description?: string;\n /** Called when the close (×) button is clicked. */\n onClose?: () => void;\n /**\n * Quando true, toca o fade-out antes de ser removido do DOM.\n * O consumidor é responsável por remover o elemento após ~200ms.\n */\n leaving?: boolean;\n /** Additional class names applied to the root element. */\n className?: string;\n}\n\nconst VARIANT_CLASS: Record<ToastType, string> = {\n success: styles.variantSuccess,\n warning: styles.variantWarning,\n danger: styles.variantDanger,\n};\n\nconst TYPE_ICON: Record<ToastType, PhosphorIcon> = {\n success: CheckCircle,\n warning: WarningCircle,\n danger: XCircle,\n};\n\nconst TYPE_ICON_COLOR: Record<ToastType, string> = {\n success: 'var(--color-icon-feedback-success-default)',\n warning: 'var(--color-icon-feedback-warning-default)',\n danger: 'var(--color-icon-feedback-danger-default)',\n};\n\nconst TYPE_CLOSE_COLOR: Record<ToastType, string> = {\n success: 'var(--color-icon-feedback-success-default)',\n warning: 'var(--color-icon-feedback-warning-default)',\n danger: 'var(--color-icon-feedback-danger-default)',\n};\n\nexport function Toast({\n type = 'success',\n title,\n description,\n onClose,\n leaving = false,\n className,\n}: ToastProps) {\n const TypeIcon = TYPE_ICON[type];\n\n const rootCls = [styles.toast, VARIANT_CLASS[type], leaving ? styles.toastLeaving : '', className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n className={rootCls}\n role=\"alert\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n >\n {/* Left accent bar */}\n <div className={styles.accent} aria-hidden=\"true\" />\n\n {/* Main content area */}\n <div className={styles.container}>\n <Icon\n as={TypeIcon}\n size={24}\n weight=\"regular\"\n color={TYPE_ICON_COLOR[type]}\n aria-hidden=\"true\"\n />\n <div className={styles.content}>\n <span className={styles.title}>{title}</span>\n {description && (\n <span className={styles.description}>{description}</span>\n )}\n </div>\n </div>\n\n {/* Close button */}\n {onClose && (\n <button\n type=\"button\"\n className={styles.closeBtn}\n onClick={onClose}\n aria-label=\"Close notification\"\n >\n <Icon\n as={X}\n size={16}\n weight=\"bold\"\n color={TYPE_CLOSE_COLOR[type]}\n aria-hidden=\"true\"\n />\n </button>\n )}\n </div>\n );\n}\n","import React, { useState, useId, useRef } from 'react';\nimport styles from './Tooltip.module.css';\n\nexport type TooltipType = 'default' | 'full-text';\nexport type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';\n\nexport interface TooltipProps {\n /** The content of the tooltip bubble */\n label: string;\n /** Controls whether text is truncated (default) or wraps to multiple lines (full-text) */\n type?: TooltipType;\n /** Where the tooltip appears relative to the trigger */\n placement?: TooltipPlacement;\n /** Whether the tooltip (and its trigger) are disabled */\n disabled?: boolean;\n /** The element that triggers the tooltip on hover/focus */\n children: React.ReactElement;\n /** Additional class name for the wrapper element */\n className?: string;\n}\n\nconst PLACEMENT_CLASS: Record<TooltipPlacement, string> = {\n top: styles.placementTop,\n bottom: styles.placementBottom,\n left: styles.placementLeft,\n right: styles.placementRight,\n};\n\nconst TYPE_CLASS: Record<TooltipType, string> = {\n 'default': styles.typeDefault,\n 'full-text': styles.typeFullText,\n};\n\nexport function Tooltip({\n label,\n type = 'default',\n placement = 'top',\n disabled = false,\n children,\n className,\n}: TooltipProps) {\n const [visible, setVisible] = useState(false);\n const tooltipId = useId();\n const wrapperRef = useRef<HTMLSpanElement>(null);\n\n const show = () => {\n if (!disabled) setVisible(true);\n };\n\n const hide = () => {\n setVisible(false);\n };\n\n const tooltipCls = [\n styles.tooltip,\n TYPE_CLASS[type],\n PLACEMENT_CLASS[placement],\n visible ? styles.visible : styles.hidden,\n ]\n .filter(Boolean)\n .join(' ');\n\n const wrapperCls = [styles.wrapper, className].filter(Boolean).join(' ');\n\n const trigger = React.cloneElement(children, {\n 'aria-describedby': visible ? tooltipId : undefined,\n });\n\n return (\n <span\n ref={wrapperRef}\n className={wrapperCls}\n onMouseEnter={show}\n onMouseLeave={hide}\n onFocus={show}\n onBlur={hide}\n >\n {trigger}\n <span\n role=\"tooltip\"\n id={tooltipId}\n className={tooltipCls}\n aria-hidden={!visible}\n >\n {label}\n </span>\n </span>\n );\n}\n","import React, { useMemo, useState, useRef, useEffect, useCallback } from 'react';\nimport type { Icon as PhosphorIcon } from '@phosphor-icons/react';\nimport { SortAscending, SortDescending, Question, GearSix } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport { Checkbox } from '../Checkbox/index.js';\nimport { Paginator } from '../Paginator/index.js';\nimport { Tag } from '../Tag/index.js';\nimport { IconButton } from '../IconButton/index.js';\nimport { Button } from '../Button/index.js';\nimport { Slot } from '../Slot/index.js';\nimport { ActionMenu } from '../ActionMenu/index.js';\nimport type { ActionMenuItemConfig } from '../ActionMenu/index.js';\nimport { Skeleton } from '../Skeleton/index.js';\nimport type { TagStyle, TagSize, TagType } from '../Tag/index.js';\nimport type { IconButtonVariant, IconButtonSize } from '../IconButton/index.js';\nimport type { ButtonVariant, ButtonSize } from '../Button/index.js';\nimport styles from './Table.module.css';\n\n// ---------------------------------------------------------------------------\n// Cell type configs\n// ---------------------------------------------------------------------------\n\nexport interface TagCellConfig {\n label: string;\n tagStyle?: TagStyle;\n tagType?: TagType;\n size?: TagSize;\n}\n\nexport interface IconButtonCellConfig {\n icon: PhosphorIcon;\n 'aria-label': string;\n onClick: () => void;\n disabled?: boolean;\n variant?: IconButtonVariant;\n size?: IconButtonSize;\n}\n\nexport interface ButtonCellConfig {\n label: string;\n onClick: () => void;\n variant?: ButtonVariant;\n size?: ButtonSize;\n disabled?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Column definition\n// ---------------------------------------------------------------------------\n\nexport type TableSortDirection = 'asc' | 'desc' | 'none';\n\nexport type TableColumnType = 'text' | 'tag' | 'icon-button' | 'actions' | 'button' | 'slot' | 'custom';\n\nexport interface TableColumn<T = Record<string, unknown>> {\n key: string;\n header: string;\n sortable?: boolean;\n showHelp?: boolean;\n /**\n * Column cell type. Determines which design system component renders cell content.\n * - 'text' → plain text (default)\n * - 'tag' → <Tag> component (requires tagConfig)\n * - 'icon-button' → single <IconButton> (requires iconButtonConfig)\n * - 'actions' → one or more <IconButton> in a row (requires iconButtonConfig)\n * - 'button' → <Button> (requires buttonConfig)\n * - 'slot' → <Slot> (requires accessor returning slot content)\n * - 'custom' → any ReactNode via accessor\n */\n type?: TableColumnType;\n /** For type='tag' — returns tag config per row. */\n tagConfig?: (row: T) => TagCellConfig;\n /** For type='icon-button' or 'actions' — returns one or more icon button configs. */\n iconButtonConfig?: (row: T) => IconButtonCellConfig | IconButtonCellConfig[];\n /** For type='button' — returns button config per row. */\n buttonConfig?: (row: T) => ButtonCellConfig;\n /** For type='text', 'slot', or 'custom' — accessor function or key of T. */\n accessor?: ((row: T) => React.ReactNode) | keyof T;\n minWidth?: number;\n width?: number;\n align?: 'left' | 'center' | 'right';\n}\n\n// ---------------------------------------------------------------------------\n// Props\n// ---------------------------------------------------------------------------\n\nexport interface TableProps<T = Record<string, unknown>> {\n data: T[];\n columns: TableColumn<T>[];\n rowKey: (row: T, index: number) => string | number;\n\n selectable?: boolean;\n selectedKeys?: Set<string | number>;\n onSelectionChange?: (keys: Set<string | number>) => void;\n\n /**\n * When provided, renders a leading \"actions\" column: a gear button per row\n * that opens an <ActionMenu> with the items returned for that row. The column\n * is placed first, or right after the checkbox column when `selectable`.\n */\n rowActions?: (row: T) => ActionMenuItemConfig[];\n /** Header label for the actions column (default \"Ações\"). */\n rowActionsLabel?: string;\n\n /** When true, renders skeleton placeholder rows instead of the data. */\n loading?: boolean;\n /** Number of skeleton rows to render while loading (default 5). */\n loadingRows?: number;\n\n sortKey?: string;\n sortDirection?: TableSortDirection;\n onSortChange?: (key: string, direction: TableSortDirection) => void;\n\n showFooter?: boolean;\n footerText?: string;\n showPaginator?: boolean;\n currentPage?: number;\n totalPages?: number;\n pageSize?: 10 | 20 | 30 | 50 | 100;\n onPageChange?: (page: number) => void;\n onPageSizeChange?: (pageSize: 10 | 20 | 30 | 50 | 100) => void;\n\n showScrollbar?: boolean;\n className?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Helper\n// ---------------------------------------------------------------------------\n\n// Staggered widths so skeleton text rows look natural rather than uniform.\nconst SKELETON_WIDTHS = ['72%', '54%', '83%', '46%', '64%', '50%'];\n\nfunction nextSortDirection(\n key: string,\n currentKey: string | undefined,\n currentDir: TableSortDirection | undefined,\n): TableSortDirection {\n if (key !== currentKey || !currentDir || currentDir === 'none') return 'asc';\n if (currentDir === 'asc') return 'desc';\n return 'none';\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function Table<T = Record<string, unknown>>({\n data,\n columns,\n rowKey,\n selectable = false,\n selectedKeys,\n onSelectionChange,\n rowActions,\n rowActionsLabel = 'Ações',\n loading = false,\n loadingRows = 5,\n sortKey,\n sortDirection = 'none',\n onSortChange,\n showFooter = true,\n footerText,\n showPaginator = true,\n currentPage = 1,\n totalPages = 1,\n pageSize = 10,\n onPageChange,\n onPageSizeChange,\n showScrollbar = true,\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n}: TableProps<T>) {\n const controlled = selectedKeys !== undefined;\n const effectiveSelected = controlled ? selectedKeys : new Set<string | number>();\n\n const hasRowActions = typeof rowActions === 'function';\n\n // Floating ActionMenu state — anchored to the clicked gear via fixed coords\n // (the scroll wrapper clips overflow, so we escape it with position: fixed,\n // matching the Menu tooltip pattern).\n const [openActions, setOpenActions] = useState<\n { key: string | number; row: T; top: number; left: number } | null\n >(null);\n const actionMenuRef = useRef<HTMLDivElement>(null);\n\n const closeActions = useCallback(() => setOpenActions(null), []);\n\n function handleGearClick(\n e: React.MouseEvent<HTMLButtonElement>,\n key: string | number,\n row: T,\n ) {\n if (openActions?.key === key) {\n closeActions();\n return;\n }\n const r = e.currentTarget.getBoundingClientRect();\n const MENU_WIDTH = 220;\n const left = Math.max(8, Math.min(r.left, window.innerWidth - MENU_WIDTH - 8));\n setOpenActions({ key, row, top: r.bottom + 4, left });\n }\n\n useEffect(() => {\n if (!openActions) return;\n const onDown = (e: MouseEvent) => {\n const target = e.target as HTMLElement | null;\n if (actionMenuRef.current?.contains(target)) return;\n // Clicking a gear button is handled by its own onClick (toggle).\n if (target?.closest('[data-table-gear]')) return;\n closeActions();\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') closeActions();\n };\n // A fixed-positioned menu does not follow scroll, so dismiss it instead.\n const dismiss = () => closeActions();\n document.addEventListener('mousedown', onDown);\n document.addEventListener('keydown', onKey);\n window.addEventListener('resize', dismiss);\n window.addEventListener('scroll', dismiss, true);\n return () => {\n document.removeEventListener('mousedown', onDown);\n document.removeEventListener('keydown', onKey);\n window.removeEventListener('resize', dismiss);\n window.removeEventListener('scroll', dismiss, true);\n };\n }, [openActions, closeActions]);\n\n const allKeys = useMemo(\n () => data.map((row, i) => rowKey(row, i)),\n [data, rowKey],\n );\n\n const allSelected = allKeys.length > 0 && allKeys.every((k) => effectiveSelected.has(k));\n const someSelected = !allSelected && allKeys.some((k) => effectiveSelected.has(k));\n\n function handleSelectAll() {\n if (!onSelectionChange) return;\n onSelectionChange(allSelected ? new Set() : new Set(allKeys));\n }\n\n function handleSelectRow(key: string | number) {\n if (!onSelectionChange) return;\n const next = new Set(effectiveSelected);\n if (next.has(key)) { next.delete(key); } else { next.add(key); }\n onSelectionChange(next);\n }\n\n function handleSort(col: TableColumn<T>) {\n if (!col.sortable || !onSortChange) return;\n onSortChange(col.key, nextSortDirection(col.key, sortKey, sortDirection));\n }\n\n function renderCell(row: T, col: TableColumn<T>): React.ReactNode {\n switch (col.type) {\n case 'tag': {\n if (col.tagConfig) {\n const { label, tagStyle, tagType, size } = col.tagConfig(row);\n return <Tag tagStyle={tagStyle} type={tagType} size={size}>{label}</Tag>;\n }\n break;\n }\n case 'icon-button': {\n if (col.iconButtonConfig) {\n const cfg = col.iconButtonConfig(row);\n const single = Array.isArray(cfg) ? cfg[0] : cfg;\n return <IconButton {...single} />;\n }\n break;\n }\n case 'actions': {\n if (col.iconButtonConfig) {\n const cfg = col.iconButtonConfig(row);\n const items = Array.isArray(cfg) ? cfg : [cfg];\n return (\n <div className={styles.actionsCell}>\n {items.map((c, i) => <IconButton key={i} size=\"xsmall\" {...c} />)}\n </div>\n );\n }\n break;\n }\n case 'button': {\n if (col.buttonConfig) {\n const { label, ...rest } = col.buttonConfig(row);\n return <Button size=\"small\" {...rest}>{label}</Button>;\n }\n break;\n }\n case 'slot': {\n if (col.accessor && typeof col.accessor === 'function') {\n return <Slot>{col.accessor(row) as React.ReactNode}</Slot>;\n }\n break;\n }\n }\n\n // Default: text or custom\n if (col.accessor) {\n if (typeof col.accessor === 'function') return col.accessor(row);\n const val = row[col.accessor as keyof T];\n return val == null ? null : String(val);\n }\n const val = (row as Record<string, unknown>)[col.key];\n if (val == null) return null;\n return <span className={styles.cellText}>{String(val)}</span>;\n }\n\n function renderSkeletonRows(): React.ReactNode {\n return Array.from({ length: Math.max(0, loadingRows) }).map((_, rowIndex) => (\n <tr key={`skeleton-${rowIndex}`} className={styles.tr} aria-hidden=\"true\">\n {selectable && (\n <td className={[styles.td, styles.tdCheckbox].join(' ')}>\n <Skeleton variant=\"rect\" width={20} height={20} radius={4} />\n </td>\n )}\n\n {hasRowActions && (\n <td className={[styles.td, styles.tdActions].join(' ')}>\n <Skeleton variant=\"circle\" width={32} />\n </td>\n )}\n\n {columns.map((col, colIndex) => {\n const cellStyle: React.CSSProperties = {};\n if (col.width) cellStyle.width = col.width;\n if (col.minWidth) cellStyle.minWidth = col.minWidth;\n if (col.align) cellStyle.textAlign = col.align;\n\n // Right/center-align the skeleton bar to match the column alignment.\n const barStyle: React.CSSProperties =\n col.align === 'right' ? { marginLeft: 'auto' }\n : col.align === 'center' ? { marginLeft: 'auto', marginRight: 'auto' }\n : {};\n\n return (\n <td key={col.key} className={styles.td} style={cellStyle}>\n <Skeleton\n variant=\"text\"\n width={SKELETON_WIDTHS[colIndex % SKELETON_WIDTHS.length]}\n style={barStyle}\n />\n </td>\n );\n })}\n </tr>\n ));\n }\n\n const rootCls = [styles.table, className].filter(Boolean).join(' ');\n\n return (\n <div className={rootCls}>\n <div className={[styles.tableBody, showScrollbar ? styles.tableBodyScrollbar : ''].filter(Boolean).join(' ')}>\n <table\n className={styles.tableEl}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n aria-busy={loading || undefined}\n >\n <thead className={styles.thead}>\n <tr>\n {selectable && (\n <th className={[styles.th, styles.thCheckbox].join(' ')} scope=\"col\" aria-label=\"Select all rows\">\n <Checkbox\n checked={allSelected ? true : someSelected ? 'indeterminate' : false}\n onChange={handleSelectAll}\n aria-label=\"Select all\"\n />\n </th>\n )}\n\n {hasRowActions && (\n <th className={[styles.th, styles.thActions].join(' ')} scope=\"col\">\n <span className={styles.actionsHeaderLabel}>{rowActionsLabel}</span>\n </th>\n )}\n\n {columns.map((col) => {\n const isSortActive = sortKey === col.key && sortDirection !== 'none';\n const thCls = [styles.th, col.sortable ? styles.thSortable : ''].filter(Boolean).join(' ');\n const colStyle: React.CSSProperties = {};\n if (col.width) colStyle.width = col.width;\n if (col.minWidth) colStyle.minWidth = col.minWidth;\n if (col.align) colStyle.textAlign = col.align;\n\n return (\n <th\n key={col.key}\n className={thCls}\n scope=\"col\"\n style={colStyle}\n aria-sort={col.sortable ? (isSortActive ? (sortDirection === 'asc' ? 'ascending' : 'descending') : 'none') : undefined}\n tabIndex={col.sortable ? 0 : undefined}\n onClick={col.sortable ? () => handleSort(col) : undefined}\n onKeyDown={col.sortable ? (e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); handleSort(col); } } : undefined}\n >\n <div className={styles.thInner}>\n <div className={styles.thContent}>\n {col.showHelp && (\n <span className={styles.thHelpIcon}>\n <Icon as={Question as PhosphorIcon} size={16} />\n </span>\n )}\n <span className={styles.thLabel}>{col.header}</span>\n </div>\n {col.sortable && (\n <span className={styles.thSortIcon} aria-hidden=\"true\">\n <Icon\n as={(\n isSortActive && sortDirection === 'desc' ? SortDescending : SortAscending\n ) as PhosphorIcon}\n size={16}\n />\n </span>\n )}\n </div>\n </th>\n );\n })}\n </tr>\n </thead>\n\n <tbody>\n {loading ? renderSkeletonRows() : data.map((row, rowIndex) => {\n const key = rowKey(row, rowIndex);\n const isSelected = effectiveSelected.has(key);\n const trCls = [styles.tr, isSelected ? styles.trSelected : ''].filter(Boolean).join(' ');\n\n return (\n <tr key={key} className={trCls} aria-selected={selectable ? isSelected : undefined}>\n {selectable && (\n <td className={[styles.td, styles.tdCheckbox, isSelected ? styles.tdSelected : ''].filter(Boolean).join(' ')}>\n <Checkbox\n checked={isSelected}\n onChange={() => handleSelectRow(key)}\n aria-label={`Select row ${rowIndex + 1}`}\n />\n </td>\n )}\n\n {hasRowActions && (\n <td className={[styles.td, styles.tdActions, isSelected ? styles.tdSelected : ''].filter(Boolean).join(' ')}>\n <button\n type=\"button\"\n data-table-gear\n className={styles.gearButton}\n aria-label={rowActionsLabel}\n aria-haspopup=\"menu\"\n aria-expanded={openActions?.key === key}\n onClick={(e) => handleGearClick(e, key, row)}\n >\n <Icon as={GearSix as PhosphorIcon} size={16} weight=\"fill\" />\n </button>\n </td>\n )}\n\n {columns.map((col) => {\n const tdCls = [styles.td, isSelected ? styles.tdSelected : ''].filter(Boolean).join(' ');\n const cellStyle: React.CSSProperties = {};\n if (col.width) cellStyle.width = col.width;\n if (col.minWidth) cellStyle.minWidth = col.minWidth;\n if (col.align) cellStyle.textAlign = col.align;\n\n return (\n <td key={col.key} className={tdCls} style={cellStyle}>\n {renderCell(row, col)}\n </td>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n\n {showFooter && (\n <div className={styles.footer}>\n <div className={styles.footerInfo}>\n {footerText && <span className={styles.footerText}>{footerText}</span>}\n {showPaginator && (\n <div className={styles.footerPaginator}>\n <Paginator\n currentPage={currentPage}\n totalPages={totalPages}\n pageSize={pageSize}\n onPageChange={onPageChange}\n onPageSizeChange={onPageSizeChange}\n />\n </div>\n )}\n </div>\n </div>\n )}\n\n {openActions && (\n <div\n ref={actionMenuRef}\n className={styles.actionMenuFloat}\n style={{ top: openActions.top, left: openActions.left }}\n >\n <ActionMenu\n items={rowActions!(openActions.row).map((item) => ({\n ...item,\n onClick: (ev) => {\n item.onClick?.(ev);\n closeActions();\n },\n }))}\n />\n </div>\n )}\n </div>\n );\n}\n","import React, { useState } from 'react';\nimport { CaretRight, SortAscending } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport { Paginator } from '../Paginator/index.js';\nimport type { PaginatorPageSize } from '../Paginator/index.js';\nimport styles from './TableTree.module.css';\n\n// ─── Column definition ──────────────────────────────────────────\nexport interface TableTreeColumn<T = Record<string, unknown>> {\n /** Unique column key. Must match a key on the data row object. */\n key: string;\n /** Header label shown in the column head cell. */\n header: string;\n /** Minimum column width in px. Defaults to 80. */\n minWidth?: number;\n /** Whether the column header should appear sortable. */\n sortable?: boolean;\n /** Custom cell renderer. Receives the row data and must return React content. */\n render?: (row: T, rowIndex: number) => React.ReactNode;\n}\n\n// ─── Row definition ─────────────────────────────────────────────\nexport interface TableTreeRow<T = Record<string, unknown>> {\n /** Unique row identifier. */\n id: string | number;\n /** Row data — keys should correspond to column keys. */\n data: T;\n /** Whether this row is selected. */\n selected?: boolean;\n /**\n * Content shown in the expanded area beneath the row.\n * When provided an expand toggle button is rendered.\n * Can be a ReactNode (static) or a function receiving the row data (dynamic).\n */\n expandedContent?: React.ReactNode | ((data: T) => React.ReactNode);\n /**\n * Whether the row starts expanded. Only used for uncontrolled mode.\n * Defaults to false.\n */\n defaultExpanded?: boolean;\n}\n\n// ─── TableTree props ────────────────────────────────────────────\nexport interface TableTreeProps<T = Record<string, unknown>> {\n /** Column definitions. */\n columns: TableTreeColumn<T>[];\n /** Row data with optional expanded content. */\n rows: TableTreeRow<T>[];\n /** Called when a column header sort button is clicked. */\n onSort?: (columnKey: string) => void;\n /** Called when a row expand toggle is clicked. */\n onToggleExpand?: (rowId: string | number, expanded: boolean) => void;\n /** Called when a row is clicked. */\n onRowClick?: (row: TableTreeRow<T>) => void;\n\n /* ─── Footer / pagination ───────── */\n /** Whether to show the footer (paginator + record count). Defaults to false. */\n showFooter?: boolean;\n /** Total number of records. Used for the record-count label. */\n totalRecords?: number;\n /** Current page (1-based). */\n currentPage?: number;\n /** Total number of pages. */\n totalPages?: number;\n /** Current page size. */\n pageSize?: PaginatorPageSize;\n /** Called when the user navigates to a different page. */\n onPageChange?: (page: number) => void;\n /** Called when the user selects a different page size. */\n onPageSizeChange?: (pageSize: PaginatorPageSize) => void;\n\n /** Optional extra CSS class for the root element. */\n className?: string;\n /** Whether the entire table is disabled. */\n disabled?: boolean;\n}\n\n// ─── Internal hook for per-row expand state ──────────────────────\nfunction useExpandState(rows: Array<{ id: string | number; expandedContent?: unknown; defaultExpanded?: boolean }>): [\n Record<string | number, boolean>,\n (id: string | number) => void,\n] {\n const initial: Record<string | number, boolean> = {};\n rows.forEach((r) => {\n if (r.expandedContent != null) {\n initial[r.id] = r.defaultExpanded ?? false;\n }\n });\n const [state, setState] = useState(initial);\n\n function toggle(id: string | number) {\n setState((prev) => ({ ...prev, [id]: !prev[id] }));\n }\n\n return [state, toggle];\n}\n\n// ─── Component ──────────────────────────────────────────────────\nexport function TableTree<T = Record<string, unknown>>({\n columns,\n rows,\n onSort,\n onToggleExpand,\n onRowClick,\n showFooter = false,\n totalRecords,\n currentPage = 1,\n totalPages = 1,\n pageSize = 10,\n onPageChange,\n onPageSizeChange,\n className,\n disabled = false,\n}: TableTreeProps<T>) {\n const [expandState, toggleExpand] = useExpandState(rows);\n\n const rootCls = [styles.tableTree, className, disabled ? styles.disabled : '']\n .filter(Boolean)\n .join(' ');\n\n function handleToggle(row: { id: string | number }) {\n const nextExpanded = !expandState[row.id];\n toggleExpand(row.id);\n onToggleExpand?.(row.id, nextExpanded);\n }\n\n const showRecordCount = showFooter && totalRecords != null;\n const from = showRecordCount ? (currentPage - 1) * pageSize + 1 : 0;\n const to = showRecordCount ? Math.min(currentPage * pageSize, totalRecords!) : 0;\n\n return (\n <div className={rootCls} aria-disabled={disabled || undefined}>\n {/* ── Horizontally scrollable body ── */}\n <div className={styles.tableBody}>\n <table className={styles.tableEl} role=\"treegrid\">\n {/* ── Head ── */}\n <thead className={styles.thead}>\n <tr>\n {/* Expand toggle column */}\n <th className={[styles.th, styles.thExpand].join(' ')} scope=\"col\" aria-label=\"Expand\" />\n\n {columns.map((col) => (\n <th\n key={col.key}\n scope=\"col\"\n className={[\n styles.th,\n col.sortable ? styles.thSortable : '',\n ]\n .filter(Boolean)\n .join(' ')}\n style={col.minWidth ? { minWidth: col.minWidth } : undefined}\n onClick={col.sortable ? () => onSort?.(col.key) : undefined}\n tabIndex={col.sortable ? 0 : undefined}\n onKeyDown={\n col.sortable\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onSort?.(col.key);\n }\n }\n : undefined\n }\n aria-sort={col.sortable ? 'none' : undefined}\n >\n <div className={styles.thInner}>\n <div className={styles.thContent}>\n <span className={styles.thLabel}>{col.header}</span>\n </div>\n {col.sortable && (\n <span className={styles.thSortIcon} aria-hidden=\"true\">\n <Icon as={SortAscending} size={16} weight=\"bold\" />\n </span>\n )}\n </div>\n </th>\n ))}\n </tr>\n </thead>\n\n {/* ── Body ── */}\n <tbody>\n {rows.map((row, rowIndex) => {\n const isExpanded = expandState[row.id] ?? false;\n const isSelected = row.selected ?? false;\n const hasExpanded = row.expandedContent != null;\n\n const trCls = [styles.tr, isSelected ? styles.trSelected : '']\n .filter(Boolean)\n .join(' ');\n\n const resolvedExpContent =\n typeof row.expandedContent === 'function'\n ? (row.expandedContent as (data: T) => React.ReactNode)(row.data)\n : row.expandedContent;\n\n return (\n <React.Fragment key={row.id}>\n <tr\n className={trCls}\n aria-selected={isSelected}\n aria-expanded={hasExpanded ? isExpanded : undefined}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n style={onRowClick ? { cursor: 'pointer' } : undefined}\n >\n {/* Expand toggle cell */}\n <td className={[styles.td, styles.tdExpand].join(' ')}>\n {hasExpanded && (\n <button\n className={styles.expandBtn}\n aria-label={isExpanded ? 'Collapse row' : 'Expand row'}\n aria-expanded={isExpanded}\n onClick={(e) => {\n e.stopPropagation();\n handleToggle(row);\n }}\n >\n <span\n className={[\n styles.expandBtnIcon,\n isExpanded ? styles.expandBtnIconOpen : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <Icon as={CaretRight} size={16} weight=\"bold\" />\n </span>\n </button>\n )}\n </td>\n\n {/* Data cells */}\n {columns.map((col) => {\n const tdCls = [styles.td, isSelected ? styles.tdSelected : '']\n .filter(Boolean)\n .join(' ');\n const value = (row.data as Record<string, unknown>)[col.key];\n return (\n <td key={col.key} className={tdCls}>\n {col.render ? (\n col.render(row.data as T, rowIndex)\n ) : (\n <span className={styles.cellText}>\n {value != null ? String(value) : ''}\n </span>\n )}\n </td>\n );\n })}\n </tr>\n\n {/* Expanded content row */}\n {hasExpanded && isExpanded && (\n <tr className={styles.trExpanded}>\n <td\n className={[styles.td, styles.tdExpanded].join(' ')}\n colSpan={columns.length + 1}\n >\n <div className={styles.expandedContainer}>\n {resolvedExpContent}\n </div>\n </td>\n </tr>\n )}\n </React.Fragment>\n );\n })}\n </tbody>\n </table>\n </div>\n\n {/* ── Footer ── */}\n {showFooter && (\n <div className={styles.footer}>\n <div className={styles.footerScrollWrap} />\n <div className={styles.footerInfo}>\n {showRecordCount && (\n <span className={styles.footerText}>\n {`Mostrando ${from} até ${to} de ${totalRecords} registros`}\n </span>\n )}\n <div className={styles.footerPaginator}>\n <Paginator\n currentPage={currentPage}\n totalPages={totalPages}\n pageSize={pageSize}\n onPageChange={onPageChange}\n onPageSizeChange={onPageSizeChange}\n />\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport type { Icon as PhosphorIcon } from '@phosphor-icons/react';\nimport { List, BellSimple, CaretDown, User } from '@phosphor-icons/react';\nimport { Icon } from '../Icon/index.js';\nimport styles from './TopBar.module.css';\n\nexport type TopBarSize = 'menuClosed' | 'menuOpened';\n\nexport interface TopBarProps extends React.HTMLAttributes<HTMLElement> {\n /**\n * Controls the menu toggle state appearance.\n * \"menuClosed\" = hamburger visible (menu is closed), full width layout.\n * \"menuOpened\" = hamburger visible (menu is opened), narrower content area.\n */\n size?: TopBarSize;\n /** Display name shown next to the avatar. */\n userName?: string;\n /**\n * Up to 2-character initials rendered inside the avatar circle.\n * If omitted, a User icon is shown instead.\n */\n userInitials?: string;\n /** Image URL for the user avatar. Falls back to initials if not provided. */\n userAvatarSrc?: string;\n /** Alt text for the user avatar image. */\n userAvatarAlt?: string;\n /** Called when the menu toggle button is clicked. */\n onMenuToggle?: () => void;\n /** Called when the notification button is clicked. */\n onNotificationClick?: () => void;\n /** Called when the user profile area is clicked. */\n onProfileClick?: () => void;\n /** Phosphor icon override for the notification button. Defaults to BellSimple. */\n notificationIcon?: PhosphorIcon;\n /** Whether the TopBar is disabled (disables all interactive elements). */\n disabled?: boolean;\n /** Optional content to render in the left section after the menu button. */\n leftContent?: React.ReactNode;\n}\n\nexport function TopBar({\n size = 'menuClosed',\n userName = 'Admin Embarcador',\n userInitials,\n userAvatarSrc,\n userAvatarAlt = '',\n onMenuToggle,\n onNotificationClick,\n onProfileClick,\n notificationIcon,\n disabled = false,\n leftContent,\n className,\n ...props\n}: TopBarProps) {\n const [imgError, setImgError] = React.useState(false);\n\n const NotifIcon = notificationIcon ?? BellSimple;\n\n const showImage = !!userAvatarSrc && !imgError;\n const showInitials = !showImage && !!userInitials;\n\n const cls = [styles.topBar, className].filter(Boolean).join(' ');\n\n return (\n <header className={cls} data-size={size} {...props}>\n {/* Left section: menu toggle + optional content */}\n <div className={styles.leftSection}>\n <button\n type=\"button\"\n className={styles.menuButton}\n onClick={onMenuToggle}\n disabled={disabled}\n aria-disabled={disabled || undefined}\n aria-label={size === 'menuOpened' ? 'Close menu' : 'Open menu'}\n aria-expanded={size === 'menuOpened'}\n >\n <Icon as={List} size={20} weight=\"bold\" />\n </button>\n {leftContent}\n </div>\n\n {/* Right section: notification + divider + profile */}\n <div className={styles.rightSection}>\n <button\n type=\"button\"\n className={styles.notificationButton}\n onClick={onNotificationClick}\n disabled={disabled}\n aria-disabled={disabled || undefined}\n aria-label=\"Notifications\"\n >\n <Icon as={NotifIcon} size={20} weight=\"bold\" />\n </button>\n\n <div className={styles.divider} role=\"separator\" aria-hidden=\"true\" />\n\n <button\n type=\"button\"\n className={styles.profileButton}\n onClick={onProfileClick}\n disabled={disabled}\n aria-disabled={disabled || undefined}\n aria-label={`User profile: ${userName}`}\n >\n {/* Avatar */}\n <span className={styles.avatar} aria-hidden=\"true\">\n {showImage && (\n <img\n className={styles.avatarImage}\n src={userAvatarSrc}\n alt={userAvatarAlt}\n onError={() => setImgError(true)}\n />\n )}\n {showInitials && (\n <span className={styles.avatarInitials}>\n {userInitials.slice(0, 2).toUpperCase()}\n </span>\n )}\n {!showImage && !showInitials && (\n <Icon as={User} size={20} weight=\"bold\" />\n )}\n </span>\n\n {/* User name */}\n <span className={styles.userName}>{userName}</span>\n\n {/* Caret */}\n <span className={styles.caretIcon} aria-hidden=\"true\">\n <Icon as={CaretDown} size={16} weight=\"bold\" />\n </span>\n </button>\n </div>\n </header>\n );\n}\n"],"names":["Icon","PhIcon","size","weight","props","jsx","Slot","children","placeholderIcon","placeholderLabel","className","isEmpty","IconComponent","BoxArrowUp","cls","styles","jsxs","Fragment","Accordion","title","description","type","defaultExpanded","controlledExpanded","onToggle","disabled","internalExpanded","setInternalExpanded","useState","isControlled","isExpanded","handleToggle","next","rootCls","headerCls","chevronCls","headerId","React","panelId","Minus","Plus","ActionMenuItem","icon","label","ActionMenu","items","item","index","DropdownItem","value","selected","active","leadingIcon","id","focusable","selectOnPointerDown","onClick","onHover","choose","handleKeyDown","e","Dropdown","options","selectedValue","onSelect","ariaLabel","ariaLabelledby","activeIndex","getOptionId","optionsFocusable","onOptionHover","emptyMessage","fluid","panelCls","opt","HINT_ICON","Info","XCircle","CheckCircle","Warning","HINT_CLASS","getHintType","state","Autocomplete","onChange","placeholder","showLabel","hint","idProp","generatedId","useId","inputId","listboxId","inputValue","setInputValue","isOpen","setIsOpen","highlightedIndex","setHighlightedIndex","containerRef","useRef","inputRef","inputValueRef","selectedOption","o","filteredOptions","openMenu","useCallback","closeMenu","commit","typed","matchedOption","selectOption","option","_a","useEffect","handlePointerDown","handleInputChange","val","handleInputBlur","matched","handleCaretClick","prev","_b","_c","handleFieldClick","hintType","HintIcon","fieldClasses","rootClasses","inputDisplayValue","CaretDown","_v","v","SIZE_CLASS","ICON_SIZE","Avatar","src","alt","initials","imgError","setImgError","effectiveType","iconSize","User","STATE_CLASS","Badge","BottomBar","primaryAction","secondaryAction","Breadcrumbs","CaretCircleRight","VARIANT_CLASS","Button","variant","trailingIcon","TYPE_CLASS","TYPE_ICON","Callout","message","detailLabel","detailText","actionLabel","actionIcon","onAction","typeIcon","hasDetail","Chip","showClose","onClose","closeLabel","STYLE_CLASS","Card","cardStyle","Checkbox","checked","defaultChecked","isIndeterminate","isChecked","boxCls","wrapperCls","MONTHS_PT","DAYS_PT","currentIso","d","toIso","year","month","day","buildGrid","firstDayOfWeek","daysInMonth","daysInPrevMonth","py","pm","ny","nm","cells","i","_","CalendarDate","outside","today","DatePickerCalendar","min","max","initYear","initMonth","viewYear","setViewYear","viewMonth","setViewMonth","prevMonth","y","m","nextMonth","rows","visibleRows","CaretLeft","CaretRight","row","ri","cell","isSelected","isToday","isDisabled","maskDate","raw","digits","out","textToIso","text","dd","mm","yyyy","date","isoToText","iso","DatePicker","wrapperRef","setText","calendarOpen","setCalendarOpen","closeCalendar","handleOutside","isDanger","isSuccess","fieldCls","resolvedHintType","hintTextCls","hintIconCls","handleTextChange","masked","toggleCalendar","handleCalendarChange","CalendarDots","Divider","IconButton","portalSection","TruckTrailer","CurrencyCircleDollar","House","menuSection","ProjectorScreenChart","ClipboardText","CallBell","Package","FlagBanner","ChatCenteredText","PresentationChart","SketchLogo","Garage","Folder","File","CheckSquareOffset","ListChecks","Note","Cardholder","Coins","Receipt","Percent","CurrencyDollar","FlagPennant","Gear","defaultMenuSections","MenuItem","nested","openSubmenuKey","onSubmenuToggle","key","isOpened","hasChildren","expanded","tipPos","setTipPos","showTooltip","r","hideTooltip","tooltip","handleClick","itemClass","caretClass","child","closedClass","MenuSection","section","Menu","sections","logo","logoMark","showFooter","onTermsClick","onPrivacyClick","setOpenSubmenuKey","handleSubmenuToggle","menuClass","idx","Article","VIEWBOX","RADIUS","STROKE_WIDTH","ProgressSpinner","cx","cy","circumference","dashArray","Modal","open","footerActions","noBackdrop","onBackdropClick","panelRef","handler","el","handleBackdropClick","panel","action","X","DIALOG_ICON_COLOR","ModalDialog","primaryLabel","onPrimary","secondaryLabel","onSecondary","isLoading","showActions","iconColor","renderIcon","dialogBodyCls","SealWarning","WarningCircle","ARIA_ROLE","Message","showIcon","Overlay","Paginator","currentPage","totalPages","pageWindowSize","pageSize","pageSizeOptions","onPageChange","onPageSizeChange","showPageSizeSelect","isFirst","isLast","pages","buildPageWindow","go","page","handlePageSizeChange","CaretDoubleLeft","isActive","CaretDoubleRight","current","total","windowSize","half","start","end","Panel","panelStyle","Radio","circleCls","Select","valueProp","defaultValue","error","style","labelId","internalValue","setInternalValue","currentValue","setOpen","triggerRef","isError","isFocused","handleOutsideClick","moveHighlight","dir","step","selIdx","firstEnabled","handleSelect","displayLabel","CheckboxBox","indeterminate","Multiselect","showSearch","maxChips","internalSelected","setInternalSelected","searchQuery","setSearchQuery","rootRef","searchRef","effectiveDisabled","selectableOptions","selectedCount","allSelected","someSelected","updateSelected","toggleOption","optValue","toggleAll","allValues","removeChip","openPanel","closePanel","handleTriggerKeyDown","handlePanelKeyDown","t","selectedOptions","visibleChips","overflowCount","MagnifyingGlass","SegmentControl","ariaLabelledBy","pill","setPill","btn","itemCls","toCssSize","Skeleton","width","height","radius","animated","w","h","mergedStyle","SkeletonText","lines","lastLineWidth","gap","SkeletonAvatar","rest","FIELD_STATE_CLASS","HINT_STATE_CLASS","TRAILING_ICON_STATE_CLASS","TextField","inputProps","showStatusIcon","StatusIcon","Slider","showUpperFields","showBottomFields","percentage","handleChange","handleFieldChange","clamped","fieldRow","Switch","internalChecked","setInternalChecked","FIELD_STATUS_CLASS","HINT_TYPE_CLASS","InputNumber","status","editStr","setEditStr","clamp","result","handleIncrement","handleDecrement","handleFocus","handleBlur","parsed","displayValue","isAtMin","isAtMax","HintIconComponent","hintClasses","MinusCircle","PlusCircle","Tag","tagStyle","Textarea","showHint","hintCls","Tabs","tabs","controlledValue","activeValue","tab","tabListRef","indicator","setIndicator","tabListCls","tabCls","TYPE_ICON_COLOR","TYPE_CLOSE_COLOR","Toast","leaving","TypeIcon","PLACEMENT_CLASS","Tooltip","placement","visible","setVisible","tooltipId","show","hide","tooltipCls","trigger","SKELETON_WIDTHS","nextSortDirection","currentKey","currentDir","Table","data","columns","rowKey","selectable","selectedKeys","onSelectionChange","rowActions","rowActionsLabel","loading","loadingRows","sortKey","sortDirection","onSortChange","footerText","showPaginator","showScrollbar","effectiveSelected","hasRowActions","openActions","setOpenActions","actionMenuRef","closeActions","handleGearClick","left","onDown","target","onKey","dismiss","allKeys","useMemo","k","handleSelectAll","handleSelectRow","handleSort","col","renderCell","tagType","cfg","single","c","renderSkeletonRows","rowIndex","colIndex","cellStyle","barStyle","isSortActive","thCls","colStyle","Question","SortDescending","SortAscending","trCls","GearSix","tdCls","ev","useExpandState","initial","setState","toggle","TableTree","onSort","onToggleExpand","onRowClick","totalRecords","expandState","toggleExpand","nextExpanded","showRecordCount","from","to","hasExpanded","resolvedExpContent","TopBar","userName","userInitials","userAvatarSrc","userAvatarAlt","onMenuToggle","onNotificationClick","onProfileClick","notificationIcon","leftContent","NotifIcon","BellSimple","showImage","showInitials","List"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|