@grazziotin/react-components-next 1.0.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/accessibility/index.d.mts +136 -0
- package/dist/accessibility/index.d.ts +136 -0
- package/dist/accessibility/index.js +138 -0
- package/dist/accessibility/index.js.map +1 -0
- package/dist/accessibility/index.mjs +127 -0
- package/dist/accessibility/index.mjs.map +1 -0
- package/dist/{chunk-4DIPDYEU.mjs → chunk-BWW3F4R4.mjs} +42 -3
- package/dist/chunk-BWW3F4R4.mjs.map +1 -0
- package/dist/functions/index.d.mts +36 -1
- package/dist/functions/index.d.ts +36 -1
- package/dist/functions/index.js +36 -0
- package/dist/functions/index.js.map +1 -1
- package/dist/functions/index.mjs +1 -1
- package/dist/index.css +1 -1
- package/dist/ui/index.d.mts +207 -4
- package/dist/ui/index.d.ts +207 -4
- package/dist/ui/index.js +485 -0
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/index.mjs +873 -2
- package/dist/ui/index.mjs.map +1 -1
- package/package.json +8 -9
- package/dist/chunk-4DIPDYEU.mjs.map +0 -1
- package/dist/chunk-XNWAGZVV.mjs +0 -467
- package/dist/chunk-XNWAGZVV.mjs.map +0 -1
- package/dist/index.d.mts +0 -10
- package/dist/index.d.ts +0 -10
- package/dist/index.js +0 -582
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -29
- package/dist/index.mjs.map +0 -1
package/dist/ui/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/functions/cn/cn.ts","../../src/components/ui/card/index.tsx","../../src/components/ui/dialog/utils/constants.ts","../../src/components/ui/dialog/index.tsx","../../src/components/ui/data-table/utils/constants.ts","../../src/components/ui/data-table/utils/between-filter.tsx","../../src/components/ui/data-table/index.tsx","../../src/components/ui/tab/index.tsx"],"names":["twMerge","clsx","jsxs","Box","jsx","Tooltip","DialogMui","DialogTitle","DialogContent","DialogActions","ptBR","TextField","getGridStringOperators","getGridNumericOperators","GRID_STRING_COL_DEF","GRID_NUMERIC_COL_DEF","GridColumnsPanel","GridColumnMenu","GridFilterPanel","GridOverlay","GridPagination","DataGrid","styled","MuiTabs","MuiTab"],"mappings":"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","file":"index.js","sourcesContent":["import { twMerge } from \"tailwind-merge\";\r\nimport { clsx } from \"clsx\";\r\nimport type { ClassValue } from \"./utils/interfaces\";\r\n\r\nexport function cn(...values: ClassValue[]): string {\r\n return twMerge(clsx(values));\r\n}\r\n","import { cn } from \"@/functions\";\r\nimport { Box } from \"@mui/material\";\r\nimport { Tooltip } from \"@mantine/core\";\r\nimport type { CardProps } from \"./utils/interface\";\r\n\r\n/**\r\n * Container de UI com cabeçalho colorido (título e ícone opcionais) e área de conteúdo.\r\n *\r\n * O card usa MUI `Box` para dimensões, sombra e responsividade; classes Tailwind\r\n * extras podem ser passadas em `className` e são mescladas com `cn`. O título é\r\n * sempre exibido e truncado quando necessário; o tooltip (Mantine) só aparece se\r\n * `toolTip` for `true`.\r\n *\r\n * @param props - Propriedades do componente. Detalhes em {@link CardProps}.\r\n * @param props.width - Largura do card. Padrão: `\"100%\"`.\r\n * @param props.height - Altura do card. Padrão: `\"auto\"`.\r\n * @param props.margin - Margem externa.\r\n * @param props.title - Texto do cabeçalho.\r\n * @param props.toolTip - Habilita tooltip no título.\r\n * @param props.className - `className` nativo do React no container.\r\n * @param props.titleWidth - Largura da barra do cabeçalho. Padrão: `\"100%\"`.\r\n * @param props.titleColor - Cor de fundo do cabeçalho. Padrão: `var(--primary-color)`.\r\n * @param props.borderTitle - `border-radius` só do cabeçalho.\r\n * @param props.onClick - Clique no card; adiciona `cursor: pointer !important`.\r\n * @param props.borderRadius - `border-radius` do container.\r\n * @param props.icon - Conteúdo à direita do título.\r\n * @param props.children - Corpo do card.\r\n * @param props.justifyContent - Alinhamento título/ícone. Padrão: `\"space-between\"`.\r\n *\r\n * @returns Elemento `Box` com cabeçalho e `children`.\r\n *\r\n * @example\r\n * ```tsx\r\n * <Card title=\"Resumo\" toolTip icon={<span>+</span>}>\r\n * <p>Conteúdo interno</p>\r\n * </Card>\r\n * ```\r\n *\r\n * @example\r\n * ```tsx\r\n * <Card\r\n * title=\"Clique aqui\"\r\n * width=\"320px\"\r\n * onClick={() => alert(\"Card clicado\")}\r\n * >\r\n * Card interativo\r\n * </Card>\r\n * ```\r\n */\r\nfunction Card({\r\n margin,\r\n onClick,\r\n title,\r\n toolTip,\r\n className,\r\n borderTitle,\r\n children,\r\n borderRadius,\r\n width = \"100%\",\r\n height = \"auto\",\r\n titleWidth = \"100%\",\r\n justifyContent = \"space-between\",\r\n titleColor = \"var(--primary-color)\",\r\n icon,\r\n}: Readonly<CardProps>): React.ReactElement {\r\n return (\r\n <Box\r\n onClick={onClick}\r\n className={cn(className, \"text-sm!\")}\r\n sx={{\r\n width,\r\n margin,\r\n height,\r\n borderRadius,\r\n \"@media (max-width: 768px)\": { width: \"100%\" },\r\n boxShadow: \"0 0.15rem 0.5rem rgba(0, 0, 0, 0.16)\",\r\n ...(onClick && { cursor: \"pointer !important\" }),\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n justifyContent,\r\n height: \"24px\",\r\n color: \"white\",\r\n display: \"flex\",\r\n width: titleWidth,\r\n overflow: \"hidden\",\r\n padding: \"0px 15px\",\r\n alignItems: \"center\",\r\n flexDirection: \"row\",\r\n borderRadius: borderTitle,\r\n backgroundColor: titleColor,\r\n }}\r\n >\r\n <span className=\"min-w-0 flex-1 font-semibold! truncate!\">\r\n <Tooltip\r\n withArrow\r\n radius=\"md\"\r\n label={title}\r\n arrowSize={6}\r\n position=\"top\"\r\n arrowOffset={15}\r\n disabled={!toolTip}\r\n color={titleColor}\r\n classNames={{ tooltip: \"text-xs!\" }}\r\n offset={{ mainAxis: 11, crossAxis: -21 }}\r\n transitionProps={{ transition: \"fade\", duration: 100 }}\r\n >\r\n <span className=\"block! truncate!\">{title}</span>\r\n </Tooltip>\r\n </span>\r\n <div>{icon}</div>\r\n </Box>\r\n {children}\r\n </Box>\r\n );\r\n}\r\nexport default Card;\r\n","export const DIALOG_BACKDROP_STYLE = {\r\n backdropFilter: \"blur(4px)\",\r\n backgroundColor: \"rgba(0, 0, 0, 0.5)\",\r\n};\r\n\r\nexport const DIALOG_PAPER_FONT_SX = {\r\n fontFamily: \"var(--font-family, inherit) !important\",\r\n \"& .MuiDialogTitle-root, & .MuiDialogContent-root, & .MuiDialogActions-root, & .MuiTypography-root\":\r\n {\r\n fontFamily: \"inherit !important\",\r\n },\r\n};\r\n\r\nconst dialogConstants = `\r\nModal de diálogo baseado no MUI \\`Dialog\\`, com título, conteúdo e ações opcionais.\r\nSuporta \\`maxWidth\\` e backdrop com blur via \\`blurBackdrop\\`.\r\n\r\n**Importação:**\r\n\\`\\`\\`tsx\r\nimport Dialog from \"@/components/ui/dialog\";\r\n// ou, no pacote publicado:\r\n// import { Dialog } from \"@grazziotin/react-components-next/ui\";\r\n\\`\\`\\`\r\n\r\n**Fonte do projeto (CSS global):**\r\n\\`\\`\\`css\r\n:root {\r\n --font-family: \"Poppins\", sans-serif;\r\n}\r\n\\`\\`\\`\r\n\r\nSem \\`--font-family\\`, os componentes herdam a fonte do \\`body\\`.\r\n\r\n**Uso básico:**\r\n\\`\\`\\`tsx\r\nconst [open, setOpen] = useState(false);\r\n\r\n<Dialog\r\n open={open}\r\n title=\"Confirmar\"\r\n onClose={() => setOpen(false)}\r\n actions={<button type=\"button\">OK</button>}\r\n>\r\n Conteúdo do diálogo\r\n</Dialog>\r\n\\`\\`\\`\r\n`;\r\n\r\nexport default dialogConstants;\r\n","import React from \"react\";\r\nimport DialogMui from \"@mui/material/Dialog\";\r\nimport type { DialogProps } from \"./utils/interface\";\r\nimport DialogTitle from \"@mui/material/DialogTitle\";\r\nimport DialogActions from \"@mui/material/DialogActions\";\r\nimport DialogContent from \"@mui/material/DialogContent\";\r\nimport { DIALOG_BACKDROP_STYLE, DIALOG_PAPER_FONT_SX } from \"./utils/constants\";\r\n\r\n/**\r\n * Modal de diálogo baseado no MUI `Dialog`, com título, conteúdo e ações opcionais.\r\n *\r\n * O componente usa `fullWidth` por padrão e permite limitar a largura via `maxWidth`.\r\n * Com `blurBackdrop`, o fundo recebe desfoque e overlay escuro semitransparente.\r\n *\r\n * @param props - Propriedades do componente. Detalhes em {@link DialogProps}.\r\n * @param props.open - Controla se o diálogo está visível.\r\n * @param props.title - Título exibido no topo; omitido se não informado.\r\n * @param props.onClose - Callback ao fechar (clique fora, ESC ou botão de fechar do MUI).\r\n * @param props.actions - Rodapé com botões ou ações customizadas.\r\n * @param props.children - Conteúdo principal do diálogo.\r\n * @param props.maxWidth - Largura máxima do MUI (`xs`, `sm`, `md`, `lg`, `xl` ou `false`).\r\n * @param props.blurBackdrop - Aplica blur e escurecimento no backdrop. Padrão: `false`.\r\n *\r\n * @returns Instância do `Dialog` do Material UI.\r\n *\r\n * @example\r\n * ```tsx\r\n * const [open, setOpen] = useState(false);\r\n *\r\n * <Dialog\r\n * open={open}\r\n * title=\"Confirmar exclusão\"\r\n * onClose={() => setOpen(false)}\r\n * actions={<Button onClick={() => setOpen(false)}>OK</Button>}\r\n * >\r\n * Deseja realmente excluir este item?\r\n * </Dialog>\r\n * ```\r\n *\r\n * @example\r\n * ```tsx\r\n * <Dialog\r\n * open={open}\r\n * onClose={handleClose}\r\n * maxWidth=\"sm\"\r\n * blurBackdrop\r\n * >\r\n * Conteúdo sem título.\r\n * </Dialog>\r\n * ```\r\n */\r\nfunction Dialog({\r\n open,\r\n title,\r\n onClose,\r\n actions,\r\n children,\r\n maxWidth,\r\n blurBackdrop = false,\r\n}: Readonly<DialogProps>): React.ReactElement {\r\n const backdropStyle = blurBackdrop ? DIALOG_BACKDROP_STYLE : {};\r\n\r\n return (\r\n <DialogMui\r\n fullWidth\r\n open={open}\r\n onClose={onClose}\r\n maxWidth={maxWidth}\r\n slotProps={{\r\n backdrop: { sx: backdropStyle },\r\n paper: { sx: DIALOG_PAPER_FONT_SX },\r\n }}\r\n >\r\n {title && (\r\n <DialogTitle>\r\n <p className=\"text-sm font-semibold text-black-de\">{title}</p>\r\n </DialogTitle>\r\n )}\r\n <DialogContent className=\"text-black\">{children}</DialogContent>\r\n {actions && <DialogActions>{actions}</DialogActions>}\r\n </DialogMui>\r\n );\r\n}\r\n\r\nexport default Dialog;\r\n","import { SxProps, Theme } from \"@mui/material\";\r\nimport { ptBR } from \"@mui/x-data-grid/locales\";\r\nimport { GridLocaleText } from \"@mui/x-data-grid\";\r\n\r\nexport const localeText: Partial<GridLocaleText> = {\r\n ...ptBR.components.MuiDataGrid.defaultProps.localeText,\r\n noColumnsOverlayLabel: \"Nenhuma coluna disponível\",\r\n noColumnsOverlayManageColumns: \"Gerenciar colunas\",\r\n\r\n columnsManagementSearchTitle: \"Buscar coluna\",\r\n columnsManagementNoColumns: \"Nenhuma coluna para mostrar\",\r\n columnsManagementShowHideAllText: \"Mostrar/Ocultar todas\",\r\n columnsManagementReset: \"Redefinir\",\r\n columnsManagementDeleteIconLabel: \"Excluir\",\r\n\r\n columnMenuManageColumns: \"Gerenciar colunas\",\r\n columnMenuShowColumns: \"Mostrar colunas\",\r\n columnMenuLabel: \"Menu da coluna\",\r\n columnMenuHideColumn: \"Ocultar\",\r\n columnMenuUnsort: \"Remover ordenação\",\r\n columnMenuSortAsc: \"Ordenar ASC\",\r\n columnMenuSortDesc: \"Ordenar DESC\",\r\n columnMenuFilter: \"Filtrar\",\r\n\r\n toolbarQuickFilterLabel: \"Filtro rápido\",\r\n toolbarQuickFilterPlaceholder: \"Filtrar…\",\r\n toolbarQuickFilterDeleteIconLabel: \"Limpar filtro\",\r\n toolbarExport: \"Exportar\",\r\n toolbarExportLabel: \"Exportar\",\r\n toolbarExportCSV: \"Baixar como CSV\",\r\n toolbarExportPrint: \"Imprimir\",\r\n toolbarColumns: \"Colunas\",\r\n toolbarColumnsLabel: \"Selecionar colunas\",\r\n toolbarFilters: \"Filtros\",\r\n toolbarFiltersLabel: \"Mostrar filtros\",\r\n toolbarFiltersTooltipHide: \"Ocultar filtros\",\r\n toolbarFiltersTooltipShow: \"Mostrar filtros\",\r\n toolbarFiltersTooltipActive: (count) =>\r\n count === 1 ? `${count} filtro ativo` : `${count} filtros ativos`,\r\n toolbarDensity: \"Densidade\",\r\n toolbarDensityLabel: \"Densidade\",\r\n toolbarDensityCompact: \"Compacta\",\r\n toolbarDensityStandard: \"Padrão\",\r\n toolbarDensityComfortable: \"Confortável\",\r\n\r\n filterPanelAddFilter: \"Adicionar filtro\",\r\n filterPanelDeleteIconLabel: \"Excluir\",\r\n filterPanelOperatorAnd: \"E\",\r\n filterPanelOperatorOr: \"OU\",\r\n filterPanelColumn: \"Colunas\",\r\n filterPanelInputLabel: \"Valor\",\r\n filterPanelInputPlaceholder: \"Valor do filtro\",\r\n\r\n filterOperatorContains: \"contém\",\r\n filterOperatorEquals: \"igual a\",\r\n filterOperatorStartsWith: \"começa com\",\r\n filterOperatorEndsWith: \"termina com\",\r\n filterOperatorIs: \"é\",\r\n filterOperatorNot: \"não é\",\r\n filterOperatorAfter: \"depois de\",\r\n filterOperatorOnOrAfter: \"em ou depois de\",\r\n filterOperatorBefore: \"antes de\",\r\n filterOperatorOnOrBefore: \"em ou antes de\",\r\n filterOperatorIsEmpty: \"está vazio\",\r\n filterOperatorIsNotEmpty: \"não está vazio\",\r\n filterOperatorIsAnyOf: \"é qualquer um de\",\r\n\r\n footerTotalRows: \"Total de linhas:\",\r\n footerRowSelected: (count) =>\r\n count === 1\r\n ? \"1 linha selecionada\"\r\n : `${count.toLocaleString()} linhas selecionadas`,\r\n footerTotalVisibleRows: (visibleCount, totalCount) =>\r\n `${visibleCount.toLocaleString()} de ${totalCount.toLocaleString()}`,\r\n\r\n paginationRowsPerPage: \"Linhas por página:\",\r\n paginationItemAriaLabel: (type) => {\r\n switch (type) {\r\n case \"first\":\r\n return \"Primeira página\";\r\n case \"last\":\r\n return \"Última página\";\r\n case \"next\":\r\n return \"Próxima página\";\r\n case \"previous\":\r\n return \"Página anterior\";\r\n default:\r\n return \"\";\r\n }\r\n },\r\n\r\n noRowsLabel: \"Nenhum dado encontrado\",\r\n noResultsOverlayLabel: \"Nenhum resultado encontrado\",\r\n\r\n checkboxSelectionHeaderName: \"Seleção de checkbox\",\r\n checkboxSelectionSelectAllRows: \"Selecionar todas as linhas\",\r\n checkboxSelectionUnselectAllRows: \"Desmarcar todas as linhas\",\r\n checkboxSelectionSelectRow: \"Selecionar linha\",\r\n checkboxSelectionUnselectRow: \"Desmarcar linha\",\r\n\r\n columnHeaderSortIconLabel: \"Ordenar\",\r\n\r\n groupingColumnHeaderName: \"Grupo\",\r\n groupColumn: (name) => `Agrupar por ${name}`,\r\n unGroupColumn: (name) => `Parar de agrupar por ${name}`,\r\n\r\n detailPanelToggle: \"Alternar painel de detalhes\",\r\n expandDetailPanel: \"Expandir\",\r\n collapseDetailPanel: \"Recolher\",\r\n\r\n treeDataGroupingHeaderName: \"Grupo\",\r\n treeDataExpand: \"ver filhos\",\r\n treeDataCollapse: \"ocultar filhos\",\r\n\r\n aggregationMenuItemHeader: \"Agregação\",\r\n aggregationFunctionLabelSum: \"soma\",\r\n aggregationFunctionLabelAvg: \"média\",\r\n aggregationFunctionLabelMin: \"mín\",\r\n aggregationFunctionLabelMax: \"máx\",\r\n aggregationFunctionLabelSize: \"tamanho\",\r\n\r\n paginationDisplayedRows: ({ from, to, count }) => {\r\n const total = count === -1 ? \"mais de \" + to : count;\r\n return `${from}–${to} de ${total}`;\r\n },\r\n};\r\n\r\nexport const columnPanelSx: SxProps<Theme> = {\r\n padding: 2,\r\n width: \"350px\",\r\n color: \"#000000DE\",\r\n};\r\n\r\nexport const columnMenuSx: SxProps<Theme> = {\r\n \"& .MuiListItemText-primary\": {\r\n fontSize: \"14px !important\",\r\n },\r\n};\r\n\r\nexport const filterSx: SxProps<Theme> = {\r\n width: \"750px\",\r\n \"*\": { fontSize: \"14px !important\" },\r\n \"& .MuiDataGrid-filterFormColumnInput\": { width: \"230px\" },\r\n \"& .MuiDataGrid-filterFormOperatorInput\": { width: \"230px\" },\r\n};\r\n\r\nexport const paginationSx: SxProps<Theme> = {\r\n \"& .MuiTablePagination-root\": { fontSize: \"12px !important\" },\r\n \"& .MuiTablePagination-selectLabel\": { fontSize: \"12px !important\" },\r\n \"& .MuiTablePagination-displayedRows\": { fontSize: \"12px !important\" },\r\n \"& .MuiTablePagination-select\": { fontSize: \"12px !important\" },\r\n \"& .MuiTablePagination-toolbar\": {\r\n minHeight: \"40px !important\",\r\n padding: \"0 8px !important\",\r\n },\r\n};\r\n\r\nexport const tableSx: SxProps<Theme> = {\r\n fontSize: \"13px\",\r\n \"& .MuiDataGrid-row:nth-of-type(even)\": {\r\n backgroundColor: \"#F9FAFB\",\r\n },\r\n \"& .MuiDataGrid-row:nth-of-type(odd)\": {\r\n backgroundColor: \"#FFFFFF\",\r\n },\r\n \"& .MuiDataGrid-row.Mui-selected:nth-of-type(even)\": {\r\n backgroundColor: \"#F9FAFB !important\",\r\n },\r\n \"& .MuiDataGrid-row.Mui-selected:nth-of-type(odd)\": {\r\n backgroundColor: \"#FFFFFF !important\",\r\n },\r\n \"& .MuiDataGrid-row:hover\": { backgroundColor: \"#F3F4F6 !important\" },\r\n \"& .MuiDataGrid-columnHeaderTitleContainer\": {\r\n color: \"#FFFFFF\",\r\n justifyContent: \"center\",\r\n \"& svg\": { color: \"#FFFFFF\" },\r\n },\r\n \"& .MuiDataGrid-iconButtonContainer .MuiIconButton-root, & .MuiDataGrid-menuIconButton\":\r\n {\r\n color: \"#FFFFFF\",\r\n },\r\n \"& .MuiDataGrid-iconButtonContainer .MuiIconButton-root:hover, & .MuiDataGrid-menuIconButton:hover\":\r\n { backgroundColor: \"transparent\" },\r\n \"& .MuiDataGrid-iconButtonContainer .MuiIconButton-root.Mui-focusVisible, & .MuiDataGrid-menuIconButton.Mui-focusVisible\":\r\n { backgroundColor: \"transparent\" },\r\n \"& .MuiDataGrid-columnHeaders\": {\r\n background: \"linear-gradient(to right, #00B2A6 0%, #0AAEB2 100%)\",\r\n },\r\n \"& .MuiDataGrid-columnHeader\": {\r\n color: \"#FFFFFF\",\r\n fontWeight: \"bold\",\r\n backgroundColor: \"transparent\",\r\n \"& svg\": { color: \"#FFFFFF\" },\r\n },\r\n \"& .MuiDataGrid-columnHeader:hover\": { backgroundColor: \"transparent\" },\r\n \"& .MuiDataGrid-columnHeader:hover .MuiIconButton-root\": {\r\n backgroundColor: \"transparent\",\r\n },\r\n \"& .MuiDataGrid-columnHeader:focus-within\": {\r\n backgroundColor: \"transparent\",\r\n },\r\n \"& .MuiDataGrid-columnHeader--sorted\": { backgroundColor: \"transparent\" },\r\n \"& .MuiDataGrid-columnHeader--sorted .MuiIconButton-root\": {\r\n backgroundColor: \"transparent\",\r\n },\r\n \"& .MuiDataGrid-sortIcon\": { color: \"#FFFFFF\" },\r\n \"& .MuiDataGrid-sortIcon:hover\": { backgroundColor: \"transparent\" },\r\n \"& .MuiDataGrid-columnHeaderTitle\": { fontWeight: \"500\", color: \"#FFFFFF\" },\r\n};\r\n\r\nconst dataTableConstants = `\r\nTabela de dados baseada no MUI \\`DataGrid\\`, com estilização Grazziotin, textos em\r\nportuguês e operador de filtro **entre** automático para colunas string e number.\r\n\r\n**Importação:**\r\n\\`\\`\\`tsx\r\nimport { DataTable } from \"@grazziotin/react-components-next/ui\";\r\nimport type { DataTableProps } from \"@grazziotin/react-components-next/ui\";\r\n\\`\\`\\`\r\n\r\n**Uso básico:**\r\n\\`\\`\\`tsx\r\nconst columns = [\r\n { field: \"id\", headerName: \"ID\", width: 90 },\r\n { field: \"nome\", headerName: \"Nome\", flex: 1 },\r\n { field: \"idade\", headerName: \"Idade\", type: \"number\", width: 110 },\r\n];\r\n\r\nconst rows = [\r\n { id: 1, nome: \"João\", idade: 28 },\r\n { id: 2, nome: \"Maria\", idade: 34 },\r\n];\r\n\r\n<DataTable\r\n rows={rows}\r\n columns={columns}\r\n pageSizeOptions={[5, 10, 25]}\r\n initialState={{ pagination: { paginationModel: { pageSize: 5 } } }}\r\n/>\r\n\\`\\`\\`\r\n\r\n**Recursos incluídos:**\r\n- Filtros, ordenação e paginação\r\n- Painel de gerenciamento de colunas\r\n- Operador \"entre\" em colunas texto e numéricas\r\n- Overlay \"Nenhum dado encontrado\" em português\r\n`;\r\n\r\nexport default dataTableConstants;\r\n","import {\r\n GridFilterItem,\r\n GridFilterOperator,\r\n getGridNumericOperators,\r\n getGridStringOperators,\r\n} from \"@mui/x-data-grid\";\r\nimport { Box, TextField } from \"@mui/material\";\r\nimport type { ChangeEvent } from \"react\";\r\n\r\nconst createChange =\r\n (item: GridFilterItem, applyValue: (item: GridFilterItem) => void) =>\r\n (index: number) =>\r\n ({ target }: ChangeEvent<HTMLInputElement>) => {\r\n const [start = \"\", end = \"\"] = Array.isArray(item.value) ? item.value : [];\r\n\r\n applyValue({\r\n ...item,\r\n value: index === 0 ? [target.value, end] : [start, target.value],\r\n });\r\n };\r\n\r\nexport const textBetweenOp: GridFilterOperator = {\r\n label: \"entre\",\r\n value: \"between\",\r\n getApplyFilterFn: (filter: GridFilterItem) => {\r\n if (!filter.value || !Array.isArray(filter.value)) return null;\r\n\r\n const [start, end] = filter.value;\r\n if (!start || !end) return null;\r\n\r\n return (value) => {\r\n const cell = value?.toString() || \"\";\r\n return cell >= start && cell <= end;\r\n };\r\n },\r\n InputComponent: ({ item, applyValue, focusElementRef }) => {\r\n const onChange = createChange(item, applyValue);\r\n\r\n return (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 1 }}>\r\n <TextField\r\n size=\"small\"\r\n label=\"De\"\r\n variant=\"outlined\"\r\n inputRef={focusElementRef}\r\n value={(item.value || [\"\", \"\"])[0] || \"\"}\r\n onChange={onChange(0)}\r\n placeholder=\"Inicial\"\r\n />\r\n <TextField\r\n size=\"small\"\r\n label=\"Até\"\r\n variant=\"outlined\"\r\n value={(item.value || [\"\", \"\"])[1] || \"\"}\r\n onChange={onChange(1)}\r\n placeholder=\"Final\"\r\n />\r\n </Box>\r\n );\r\n },\r\n};\r\n\r\nexport const numberBetweenOp: GridFilterOperator = {\r\n label: \"entre\",\r\n value: \"between\",\r\n getApplyFilterFn: (filter: GridFilterItem) => {\r\n if (!filter.value || !Array.isArray(filter.value)) return null;\r\n\r\n const [start, end] = filter.value;\r\n if (start === \"\" || end === \"\" || start == null || end == null) return null;\r\n\r\n return (value) => {\r\n const number = Number(value);\r\n return number >= Number(start) && number <= Number(end);\r\n };\r\n },\r\n InputComponent: ({ item, applyValue, focusElementRef }) => {\r\n const onChange = createChange(item, applyValue);\r\n\r\n return (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 1 }}>\r\n <TextField\r\n size=\"small\"\r\n label=\"De\"\r\n type=\"number\"\r\n variant=\"outlined\"\r\n inputRef={focusElementRef}\r\n value={(item.value || [\"\", \"\"])[0] || \"\"}\r\n onChange={onChange(0)}\r\n placeholder=\"Mínimo\"\r\n />\r\n <TextField\r\n size=\"small\"\r\n label=\"Até\"\r\n type=\"number\"\r\n variant=\"outlined\"\r\n value={(item.value || [\"\", \"\"])[1] || \"\"}\r\n onChange={onChange(1)}\r\n placeholder=\"Máximo\"\r\n />\r\n </Box>\r\n );\r\n },\r\n};\r\n\r\nexport const getTextOps = (): GridFilterOperator[] => {\r\n return [...getGridStringOperators(), textBetweenOp];\r\n};\r\n\r\nexport const getNumberOps = (): GridFilterOperator[] => {\r\n return [...getGridNumericOperators(), numberBetweenOp];\r\n};\r\n","import {\r\n localeText,\r\n tableSx,\r\n filterSx,\r\n columnMenuSx,\r\n paginationSx,\r\n columnPanelSx,\r\n} from \"./utils/constants\";\r\nimport {\r\n DataGrid,\r\n GridOverlay,\r\n GridColumnMenu,\r\n GridPagination,\r\n GridFilterPanel,\r\n GridColumnsPanel,\r\n GridColumnMenuProps,\r\n GRID_STRING_COL_DEF,\r\n GRID_NUMERIC_COL_DEF,\r\n GridColumnsPanelProps,\r\n} from \"@mui/x-data-grid\";\r\nimport { Box } from \"@mui/material\";\r\nimport type { ComponentProps } from \"react\";\r\nimport type { DataTableProps } from \"./utils/interface\";\r\nimport { getNumberOps, getTextOps } from \"./utils/between-filter\";\r\n/**\r\n * Configuração global dos operadores de filtro do DataGrid.\r\n *\r\n * Sobrescreve as definições padrão do MUI DataGrid para incluir automaticamente\r\n * o operador \"entre\" em todas as colunas do tipo string e number.\r\n *\r\n * Isso significa que TODAS as tabelas do projeto que usam o componente DataTable\r\n * terão o operador \"entre\" disponível sem necessidade de configuração adicional.\r\n */\r\nGRID_STRING_COL_DEF.filterOperators = getTextOps();\r\nGRID_NUMERIC_COL_DEF.filterOperators = getNumberOps();\r\n\r\nfunction CustomColumnsPanel(props: Readonly<GridColumnsPanelProps>) {\r\n return <GridColumnsPanel {...props} sx={columnPanelSx} />;\r\n}\r\n\r\nfunction CustomColumnMenu(props: Readonly<GridColumnMenuProps>) {\r\n return (\r\n <Box sx={columnMenuSx}>\r\n <GridColumnMenu {...props} />\r\n </Box>\r\n );\r\n}\r\n\r\nfunction CustomFilterPanel(\r\n props: Readonly<ComponentProps<typeof GridFilterPanel>>,\r\n) {\r\n return <GridFilterPanel {...props} sx={filterSx} />;\r\n}\r\n\r\nfunction CustomNoRowsOverlay() {\r\n return (\r\n <GridOverlay>\r\n <Box sx={{ mt: 1 }}>Nenhum dado encontrado.</Box>\r\n </GridOverlay>\r\n );\r\n}\r\n\r\nfunction CustomPagination() {\r\n return (\r\n <Box sx={paginationSx}>\r\n <GridPagination />\r\n </Box>\r\n );\r\n}\r\n\r\n/**\r\n * Componente DataTable personalizado baseado no MUI DataGrid.\r\n *\r\n * Fornece uma tabela de dados com estilização customizada, filtros avançados,\r\n * paginação, ordenação e gerenciamento de colunas.\r\n *\r\n * Recursos incluídos:\r\n * - Operador de filtro \"entre\" automático para colunas string e number\r\n * - Painel de filtros customizado\r\n * - Painel de gerenciamento de colunas\r\n * - Paginação estilizada\r\n * - Overlay personalizado para \"sem dados\"\r\n * - Textos em português brasileiro\r\n *\r\n * @param props - Todas as props do MUI DataGrid são suportadas. Ver {@link DataTableProps}.\r\n *\r\n * @example\r\n * <DataTable\r\n * rows={dados}\r\n * columns={colunas}\r\n * loading={carregando}\r\n * pageSizeOptions={[10, 20, 50]}\r\n * />\r\n */\r\nconst DataTable = ({ ...rest }: DataTableProps) => {\r\n return (\r\n <Box sx={{ mb: 2, mt: 2, height: \"100%\" }}>\r\n <DataGrid\r\n sx={tableSx}\r\n {...rest}\r\n className=\"min-h-[210px]!\"\r\n localeText={localeText}\r\n disableRowSelectionOnClick\r\n slotProps={{\r\n loadingOverlay: {\r\n variant: \"linear-progress\",\r\n noRowsVariant: \"skeleton\",\r\n },\r\n }}\r\n slots={{\r\n columnMenu: CustomColumnMenu,\r\n filterPanel: CustomFilterPanel,\r\n columnsPanel: CustomColumnsPanel,\r\n noRowsOverlay: CustomNoRowsOverlay,\r\n pagination: CustomPagination,\r\n }}\r\n />\r\n </Box>\r\n );\r\n};\r\n\r\nexport default DataTable;\r\n","import type { TabColorProps } from \"./utils/interface\";\r\nimport { styled, Tab as MuiTab, Tabs as MuiTabs } from \"@mui/material\";\r\n\r\nconst DEFAULT_TAB_COLOR = \"var(--primary-color)\";\r\nconst DEFAULT_TAB_FONT_FAMILY = \"var(--font-family, inherit)\";\r\n\r\n/**\r\n * Container de abas baseado no MUI `Tabs`, com indicador colorido customizável.\r\n *\r\n * @param props.color - Cor do indicador da aba ativa. Padrão: `var(--primary-color)`.\r\n *\r\n * @example\r\n * ```tsx\r\n * <Tabs value={value} onChange={handleChange} color=\"#00B2A6\">\r\n * <Tab label=\"Aba 1\" />\r\n * </Tabs>\r\n * ```\r\n */\r\nexport const Tabs = styled(MuiTabs, {\r\n shouldForwardProp: (prop) => prop !== \"color\",\r\n})<TabColorProps>(({ color = DEFAULT_TAB_COLOR }) => ({\r\n fontFamily: `${DEFAULT_TAB_FONT_FAMILY} !important`,\r\n \"& .MuiTabs-indicator\": { backgroundColor: color },\r\n}));\r\n\r\n/**\r\n * Aba individual baseada no MUI `Tab`, com tipografia e cor de seleção customizáveis.\r\n *\r\n * @param props.color - Cor do rótulo quando a aba está selecionada. Padrão: `var(--primary-color)`.\r\n * @param props.fontFamily - Família tipográfica do rótulo. Padrão: `var(--font-family, inherit)`.\r\n *\r\n * @example\r\n * ```tsx\r\n * <Tab label=\"Configurações\" color=\"#00B2A6\" />\r\n * ```\r\n */\r\nexport const Tab = styled(MuiTab, {\r\n shouldForwardProp: (prop) => prop !== \"color\" && prop !== \"fontFamily\",\r\n})<TabColorProps>(\r\n ({ color = DEFAULT_TAB_COLOR, fontFamily = DEFAULT_TAB_FONT_FAMILY }) => ({\r\n fontWeight: \"500 !important\",\r\n color: \"#000000CC !important\",\r\n fontSize: \"14px !important\",\r\n textTransform: \"uppercase !important\",\r\n fontFamily: `${fontFamily} !important`,\r\n \"&.Mui-selected\": { color: `${color} !important` },\r\n }),\r\n);\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/functions/cn/cn.ts","../../src/core/remove-digits.ts","../../src/functions/format-cpf-cnpj/format-cpf-cnpj.ts","../../src/functions/format-phone-br/format-phone-br.ts","../../src/functions/format-price-brl/format-price-brl.ts","../../src/functions/format-item-170/format-item-170.ts","../../src/functions/format-item-150/format-item-150.ts","../../src/components/ui/card/index.tsx","../../src/components/ui/dialog/utils/constants.ts","../../src/components/ui/dialog/index.tsx","../../src/components/ui/data-table/utils/constants.ts","../../src/components/ui/data-table/utils/between-filter.tsx","../../src/components/ui/data-table/index.tsx","../../src/components/ui/tab/index.tsx","../../src/core/css-var.ts","../../src/components/ui/input/utils/css.ts","../../src/components/ui/input/maskers.tsx","../../src/components/ui/input/slot-props.tsx","../../src/components/ui/input/index.tsx","../../src/components/ui/input-select/utils/css.ts","../../src/components/ui/input-select/index.tsx","../../src/components/ui/filter/components/card.tsx","../../src/components/ui/filter/utils/constants.ts","../../src/components/ui/filter/components/filter.tsx","../../src/components/ui/filter/index.tsx"],"names":["twMerge","clsx","jsxs","Box","jsx","Tooltip","DialogMui","DialogTitle","DialogContent","DialogActions","ptBR","TextField","getGridStringOperators","getGridNumericOperators","GRID_STRING_COL_DEF","GRID_NUMERIC_COL_DEF","GridColumnsPanel","GridColumnMenu","GridFilterPanel","GridOverlay","GridPagination","DataGrid","styled","MuiTabs","MuiTab","memo","useCallback","MdVisibilityOff","MdVisibility","InputAdornment","IconButton","useState","useMemo","input","Autocomplete","_a","ActionIcon","FaFilter","card_default","useMediaQuery","Grid","Drawer","Button","filter_default"],"mappings":"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","file":"index.js","sourcesContent":["import { twMerge } from \"tailwind-merge\";\r\nimport { clsx } from \"clsx\";\r\nimport type { ClassValue } from \"./utils/interfaces\";\r\n\r\nexport function cn(...values: ClassValue[]): string {\r\n return twMerge(clsx(values));\r\n}\r\n","/** Remove tudo que não for dígito. */\r\nexport function removeDigits(value: string): string {\r\n return value.replace(/\\D/g, \"\");\r\n}\r\n\r\n/** Remove tudo que não for número. */\r\nexport function removeNonDigits(value: string) {\r\n return value.replaceAll(/\\d/g, \"\");\r\n}\r\n\r\n/** Remove tudo que não for letra. */\r\nexport function removeTextOnly(value: string) {\r\n return value.replaceAll(/[^\\p{L}]/gu, \"\");\r\n}\r\n","import { removeDigits } from \"../../core/remove-digits\";\r\n\r\n/**\r\n * Formata CPF (até 11 dígitos) ou CNPJ (12–14 dígitos) conforme o tamanho.\r\n * @param data - Valor com ou sem formatação\r\n * @returns CPF `000.000.000-00` ou CNPJ `00.000.000/0000-00`; string vazia se ausente\r\n * @example\r\n * formatCpfCnpj(\"12345678901\") // \"123.456.789-01\"\r\n * formatCpfCnpj(\"12345678000199\") // \"12.345.678/0001-99\"\r\n */\r\nexport function formatCpfCnpj(data?: string): string {\r\n if (!data) return \"\";\r\n const value = removeDigits(data);\r\n\r\n if (!value) return \"\";\r\n if (value.length <= 11) {\r\n const cpf = value.slice(0, 11);\r\n return cpf\r\n .replace(/(\\d{3})(\\d)/, \"$1.$2\")\r\n .replace(/(\\d{3})(\\d)/, \"$1.$2\")\r\n .replace(/(\\d{3})(\\d{1,2})$/, \"$1-$2\");\r\n }\r\n\r\n const cnpj = value.slice(0, 14);\r\n return cnpj\r\n .replace(/^(\\d{2})(\\d)/, \"$1.$2\")\r\n .replace(/^(\\d{2})\\.(\\d{3})(\\d)/, \"$1.$2.$3\")\r\n .replace(/\\.(\\d{3})(\\d)/, \".$1/$2\")\r\n .replace(/(\\d{4})(\\d)/, \"$1-$2\");\r\n}\r\n","import { removeDigits } from \"../../core/remove-digits\";\r\n\r\n/**\r\n * Formata telefone brasileiro (até 11 dígitos): fixo `(00) 0000-0000` ou celular `(00) 00000-0000`.\r\n * @param phone - Valor com ou sem formatação\r\n * @returns Telefone formatado ou string vazia se ausente\r\n * @example\r\n * formatPhoneBr(\"11987654321\") // \"(11) 98765-4321\"\r\n * formatPhoneBr(\"1133334444\") // \"(11) 3333-4444\"\r\n */\r\nexport function formatPhoneBr(phone?: string): string {\r\n if (!phone) return \"\";\r\n const digits = removeDigits(phone).slice(0, 11);\r\n\r\n if (!digits) return \"\";\r\n if (digits.length <= 2) return digits;\r\n if (digits.length <= 6) {\r\n return digits.replace(/(\\d{2})(\\d+)/, \"($1) $2\");\r\n }\r\n if (digits.length <= 10) {\r\n return digits.replace(/(\\d{2})(\\d{4})(\\d+)/, \"($1) $2-$3\");\r\n }\r\n return digits.replace(/(\\d{2})(\\d{5})(\\d+)/, \"($1) $2-$3\");\r\n}\r\n","import { removeDigits } from \"../../core/remove-digits\";\r\n\r\n/**\r\n * Formata um valor como moeda brasileira (BRL).\r\n *\r\n * - **string** — máscara de input: remove não dígitos, divide por 100 (centavos)\r\n * - **number** — valor já em reais\r\n *\r\n * @param value - Valor digitado ou numérico em reais\r\n * @returns Valor formatado (ex.: `R$ 1.234,56`) ou string vazia se ausente\r\n * @example\r\n * formatPriceBrl(\"123456\") // \"R$ 1.234,56\" (input)\r\n * formatPriceBrl(1234.56) // \"R$ 1.234,56\" (número)\r\n * formatPriceBrl(0) // \"R$ 0,00\"\r\n */\r\nexport function formatPriceBrl(value?: string | number | null): string {\r\n if (value === undefined || value === null) return \"\";\r\n\r\n if (typeof value === \"string\") {\r\n const digits = removeDigits(value);\r\n if (!digits) return \"\";\r\n const price = Number(digits) / 100;\r\n if (Number.isNaN(price)) return \"\";\r\n return price.toLocaleString(\"pt-BR\", {\r\n style: \"currency\",\r\n currency: \"BRL\",\r\n });\r\n }\r\n\r\n if (Number.isNaN(value)) return \"\";\r\n return value.toLocaleString(\"pt-BR\", { style: \"currency\", currency: \"BRL\" });\r\n}\r\n","import { removeDigits } from \"../../core/remove-digits\";\r\n\r\n/**\r\n * Formata máscara de item 170 (até 12 dígitos) no padrão `00.00.00.00.0.000`.\r\n * Remove caracteres não numéricos antes de formatar.\r\n * @param item - Valor com ou sem formatação\r\n * @returns Item formatado ou string vazia se ausente\r\n * @example\r\n * formatItem170(\"123456789012\") // \"12.34.56.78.9.012\"\r\n */\r\nexport function formatItem170(item?: string): string {\r\n if (!item) return \"\";\r\n const digits = removeDigits(item).slice(0, 12);\r\n if (!digits) return \"\";\r\n\r\n return digits\r\n .replace(/(\\d{2})(\\d)/, \"$1.$2\")\r\n .replace(/(\\d{2})(\\d)/, \"$1.$2\")\r\n .replace(/(\\d{2})(\\d)/, \"$1.$2\")\r\n .replace(/(\\d{2})(\\d)/, \"$1.$2\")\r\n .replace(/(\\d{2})\\.(\\d)(\\d{1,3})$/, \"$1.$2.$3\");\r\n}\r\n","import { removeDigits } from \"../../core/remove-digits\";\r\n\r\n/**\r\n * Formata máscara de item 150 (até 10 dígitos) no padrão `00.00.00.0.000`.\r\n * Remove caracteres não numéricos antes de formatar.\r\n * @param item - Valor com ou sem formatação\r\n * @returns Item formatado ou string vazia se ausente\r\n * @example\r\n * formatItem150(\"1234567890\") // \"12.34.56.7.890\"\r\n */\r\nexport function formatItem150(item?: string): string {\r\n if (!item) return \"\";\r\n const digits = removeDigits(item).slice(0, 10);\r\n if (!digits) return \"\";\r\n\r\n return digits\r\n .replace(/(\\d{2})(\\d)/, \"$1.$2\")\r\n .replace(/(\\d{2})(\\d)/, \"$1.$2\")\r\n .replace(/(\\d{2})(\\d)/, \"$1.$2\")\r\n .replace(/(\\d{2})\\.(\\d)(\\d{1,3})$/, \"$1.$2.$3\");\r\n}\r\n","import { cn } from \"@/functions\";\r\nimport { Box } from \"@mui/material\";\r\nimport { Tooltip } from \"@mantine/core\";\r\nimport type { CardProps } from \"./utils/interface\";\r\n\r\n/**\r\n * Container de UI com cabeçalho colorido (título e ícone opcionais) e área de conteúdo.\r\n *\r\n * O card usa MUI `Box` para dimensões, sombra e responsividade; classes Tailwind\r\n * extras podem ser passadas em `className` e são mescladas com `cn`. O título é\r\n * sempre exibido e truncado quando necessário; o tooltip (Mantine) só aparece se\r\n * `toolTip` for `true`.\r\n *\r\n * @param props - Propriedades do componente. Detalhes em {@link CardProps}.\r\n * @param props.width - Largura do card. Padrão: `\"100%\"`.\r\n * @param props.height - Altura do card. Padrão: `\"auto\"`.\r\n * @param props.margin - Margem externa.\r\n * @param props.title - Texto do cabeçalho.\r\n * @param props.toolTip - Habilita tooltip no título.\r\n * @param props.className - `className` nativo do React no container.\r\n * @param props.titleWidth - Largura da barra do cabeçalho. Padrão: `\"100%\"`.\r\n * @param props.titleColor - Cor de fundo do cabeçalho. Padrão: `var(--primary-color)`.\r\n * @param props.borderTitle - `border-radius` só do cabeçalho.\r\n * @param props.onClick - Clique no card; adiciona `cursor: pointer !important`.\r\n * @param props.borderRadius - `border-radius` do container.\r\n * @param props.icon - Conteúdo à direita do título.\r\n * @param props.children - Corpo do card.\r\n * @param props.justifyContent - Alinhamento título/ícone. Padrão: `\"space-between\"`.\r\n *\r\n * @returns Elemento `Box` com cabeçalho e `children`.\r\n *\r\n * @example\r\n * ```tsx\r\n * <Card title=\"Resumo\" toolTip icon={<span>+</span>}>\r\n * <p>Conteúdo interno</p>\r\n * </Card>\r\n * ```\r\n *\r\n * @example\r\n * ```tsx\r\n * <Card\r\n * title=\"Clique aqui\"\r\n * width=\"320px\"\r\n * onClick={() => alert(\"Card clicado\")}\r\n * >\r\n * Card interativo\r\n * </Card>\r\n * ```\r\n */\r\nfunction Card({\r\n margin,\r\n onClick,\r\n title,\r\n toolTip,\r\n className,\r\n borderTitle,\r\n children,\r\n borderRadius,\r\n width = \"100%\",\r\n height = \"auto\",\r\n titleWidth = \"100%\",\r\n justifyContent = \"space-between\",\r\n titleColor = \"var(--primary-color)\",\r\n icon,\r\n}: Readonly<CardProps>): React.ReactElement {\r\n return (\r\n <Box\r\n onClick={onClick}\r\n className={cn(className, \"text-sm!\")}\r\n sx={{\r\n width,\r\n margin,\r\n height,\r\n borderRadius,\r\n \"@media (max-width: 768px)\": { width: \"100%\" },\r\n boxShadow: \"0 0.15rem 0.5rem rgba(0, 0, 0, 0.16)\",\r\n ...(onClick && { cursor: \"pointer !important\" }),\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n justifyContent,\r\n height: \"24px\",\r\n color: \"white\",\r\n display: \"flex\",\r\n width: titleWidth,\r\n overflow: \"hidden\",\r\n padding: \"0px 15px\",\r\n alignItems: \"center\",\r\n flexDirection: \"row\",\r\n borderRadius: borderTitle,\r\n backgroundColor: titleColor,\r\n }}\r\n >\r\n <span className=\"min-w-0 flex-1 font-semibold! truncate!\">\r\n <Tooltip\r\n withArrow\r\n radius=\"md\"\r\n label={title}\r\n arrowSize={6}\r\n position=\"top\"\r\n arrowOffset={15}\r\n disabled={!toolTip}\r\n color={titleColor}\r\n classNames={{ tooltip: \"text-xs!\" }}\r\n offset={{ mainAxis: 11, crossAxis: -21 }}\r\n transitionProps={{ transition: \"fade\", duration: 100 }}\r\n >\r\n <span className=\"block! truncate!\">{title}</span>\r\n </Tooltip>\r\n </span>\r\n <div>{icon}</div>\r\n </Box>\r\n {children}\r\n </Box>\r\n );\r\n}\r\nexport default Card;\r\n","export const DIALOG_BACKDROP_STYLE = {\r\n backdropFilter: \"blur(4px)\",\r\n backgroundColor: \"rgba(0, 0, 0, 0.5)\",\r\n};\r\n\r\nexport const DIALOG_PAPER_FONT_SX = {\r\n fontFamily: \"var(--font-family, inherit) !important\",\r\n \"& .MuiDialogTitle-root, & .MuiDialogContent-root, & .MuiDialogActions-root, & .MuiTypography-root\":\r\n {\r\n fontFamily: \"inherit !important\",\r\n },\r\n};\r\n\r\nconst dialogConstants = `\r\nModal de diálogo baseado no MUI \\`Dialog\\`, com título, conteúdo e ações opcionais.\r\nSuporta \\`maxWidth\\` e backdrop com blur via \\`blurBackdrop\\`.\r\n\r\n**Importação:**\r\n\\`\\`\\`tsx\r\nimport { Dialog } from \"@grazziotin/react-components-next/ui\";\r\n\\`\\`\\`\r\n\r\n**Fonte do projeto (CSS global):**\r\n\\`\\`\\`css\r\n:root {\r\n --font-family: \"Poppins\", sans-serif;\r\n}\r\n\\`\\`\\`\r\n\r\nSem \\`--font-family\\`, os componentes herdam a fonte do \\`body\\`.\r\n\r\n**Uso básico:**\r\n\\`\\`\\`tsx\r\nconst [open, setOpen] = useState(false);\r\n\r\n<Dialog\r\n open={open}\r\n title=\"Confirmar\"\r\n onClose={() => setOpen(false)}\r\n actions={<button type=\"button\">OK</button>}\r\n>\r\n Conteúdo do diálogo\r\n</Dialog>\r\n\\`\\`\\`\r\n`;\r\n\r\nexport default dialogConstants;\r\n","import React from \"react\";\r\nimport DialogMui from \"@mui/material/Dialog\";\r\nimport type { DialogProps } from \"./utils/interface\";\r\nimport DialogTitle from \"@mui/material/DialogTitle\";\r\nimport DialogActions from \"@mui/material/DialogActions\";\r\nimport DialogContent from \"@mui/material/DialogContent\";\r\nimport { DIALOG_BACKDROP_STYLE, DIALOG_PAPER_FONT_SX } from \"./utils/constants\";\r\n\r\n/**\r\n * Modal de diálogo baseado no MUI `Dialog`, com título, conteúdo e ações opcionais.\r\n *\r\n * O componente usa `fullWidth` por padrão e permite limitar a largura via `maxWidth`.\r\n * Com `blurBackdrop`, o fundo recebe desfoque e overlay escuro semitransparente.\r\n *\r\n * @param props - Propriedades do componente. Detalhes em {@link DialogProps}.\r\n * @param props.open - Controla se o diálogo está visível.\r\n * @param props.title - Título exibido no topo; omitido se não informado.\r\n * @param props.onClose - Callback ao fechar (clique fora, ESC ou botão de fechar do MUI).\r\n * @param props.actions - Rodapé com botões ou ações customizadas.\r\n * @param props.children - Conteúdo principal do diálogo.\r\n * @param props.maxWidth - Largura máxima do MUI (`xs`, `sm`, `md`, `lg`, `xl` ou `false`).\r\n * @param props.blurBackdrop - Aplica blur e escurecimento no backdrop. Padrão: `false`.\r\n *\r\n * @returns Instância do `Dialog` do Material UI.\r\n *\r\n * @example\r\n * ```tsx\r\n * const [open, setOpen] = useState(false);\r\n *\r\n * <Dialog\r\n * open={open}\r\n * title=\"Confirmar exclusão\"\r\n * onClose={() => setOpen(false)}\r\n * actions={<Button onClick={() => setOpen(false)}>OK</Button>}\r\n * >\r\n * Deseja realmente excluir este item?\r\n * </Dialog>\r\n * ```\r\n *\r\n * @example\r\n * ```tsx\r\n * <Dialog\r\n * open={open}\r\n * onClose={handleClose}\r\n * maxWidth=\"sm\"\r\n * blurBackdrop\r\n * >\r\n * Conteúdo sem título.\r\n * </Dialog>\r\n * ```\r\n */\r\nfunction Dialog({\r\n open,\r\n title,\r\n onClose,\r\n actions,\r\n children,\r\n maxWidth,\r\n blurBackdrop = false,\r\n}: Readonly<DialogProps>): React.ReactElement {\r\n const backdropStyle = blurBackdrop ? DIALOG_BACKDROP_STYLE : {};\r\n\r\n return (\r\n <DialogMui\r\n fullWidth\r\n open={open}\r\n onClose={onClose}\r\n maxWidth={maxWidth}\r\n slotProps={{\r\n backdrop: { sx: backdropStyle },\r\n paper: { sx: DIALOG_PAPER_FONT_SX },\r\n }}\r\n >\r\n {title && (\r\n <DialogTitle>\r\n <p className=\"text-sm font-semibold text-black-de\">{title}</p>\r\n </DialogTitle>\r\n )}\r\n <DialogContent className=\"text-black\">{children}</DialogContent>\r\n {actions && <DialogActions>{actions}</DialogActions>}\r\n </DialogMui>\r\n );\r\n}\r\n\r\nexport default Dialog;\r\n","import { SxProps, Theme } from \"@mui/material\";\r\nimport { ptBR } from \"@mui/x-data-grid/locales\";\r\nimport { GridLocaleText } from \"@mui/x-data-grid\";\r\n\r\nexport const localeText: Partial<GridLocaleText> = {\r\n ...ptBR.components.MuiDataGrid.defaultProps.localeText,\r\n noColumnsOverlayLabel: \"Nenhuma coluna disponível\",\r\n noColumnsOverlayManageColumns: \"Gerenciar colunas\",\r\n\r\n columnsManagementSearchTitle: \"Buscar coluna\",\r\n columnsManagementNoColumns: \"Nenhuma coluna para mostrar\",\r\n columnsManagementShowHideAllText: \"Mostrar/Ocultar todas\",\r\n columnsManagementReset: \"Redefinir\",\r\n columnsManagementDeleteIconLabel: \"Excluir\",\r\n\r\n columnMenuManageColumns: \"Gerenciar colunas\",\r\n columnMenuShowColumns: \"Mostrar colunas\",\r\n columnMenuLabel: \"Menu da coluna\",\r\n columnMenuHideColumn: \"Ocultar\",\r\n columnMenuUnsort: \"Remover ordenação\",\r\n columnMenuSortAsc: \"Ordenar ASC\",\r\n columnMenuSortDesc: \"Ordenar DESC\",\r\n columnMenuFilter: \"Filtrar\",\r\n\r\n toolbarQuickFilterLabel: \"Filtro rápido\",\r\n toolbarQuickFilterPlaceholder: \"Filtrar…\",\r\n toolbarQuickFilterDeleteIconLabel: \"Limpar filtro\",\r\n toolbarExport: \"Exportar\",\r\n toolbarExportLabel: \"Exportar\",\r\n toolbarExportCSV: \"Baixar como CSV\",\r\n toolbarExportPrint: \"Imprimir\",\r\n toolbarColumns: \"Colunas\",\r\n toolbarColumnsLabel: \"Selecionar colunas\",\r\n toolbarFilters: \"Filtros\",\r\n toolbarFiltersLabel: \"Mostrar filtros\",\r\n toolbarFiltersTooltipHide: \"Ocultar filtros\",\r\n toolbarFiltersTooltipShow: \"Mostrar filtros\",\r\n toolbarFiltersTooltipActive: (count) =>\r\n count === 1 ? `${count} filtro ativo` : `${count} filtros ativos`,\r\n toolbarDensity: \"Densidade\",\r\n toolbarDensityLabel: \"Densidade\",\r\n toolbarDensityCompact: \"Compacta\",\r\n toolbarDensityStandard: \"Padrão\",\r\n toolbarDensityComfortable: \"Confortável\",\r\n\r\n filterPanelAddFilter: \"Adicionar filtro\",\r\n filterPanelDeleteIconLabel: \"Excluir\",\r\n filterPanelOperatorAnd: \"E\",\r\n filterPanelOperatorOr: \"OU\",\r\n filterPanelColumn: \"Colunas\",\r\n filterPanelInputLabel: \"Valor\",\r\n filterPanelInputPlaceholder: \"Valor do filtro\",\r\n\r\n filterOperatorContains: \"contém\",\r\n filterOperatorEquals: \"igual a\",\r\n filterOperatorStartsWith: \"começa com\",\r\n filterOperatorEndsWith: \"termina com\",\r\n filterOperatorIs: \"é\",\r\n filterOperatorNot: \"não é\",\r\n filterOperatorAfter: \"depois de\",\r\n filterOperatorOnOrAfter: \"em ou depois de\",\r\n filterOperatorBefore: \"antes de\",\r\n filterOperatorOnOrBefore: \"em ou antes de\",\r\n filterOperatorIsEmpty: \"está vazio\",\r\n filterOperatorIsNotEmpty: \"não está vazio\",\r\n filterOperatorIsAnyOf: \"é qualquer um de\",\r\n\r\n footerTotalRows: \"Total de linhas:\",\r\n footerRowSelected: (count) =>\r\n count === 1\r\n ? \"1 linha selecionada\"\r\n : `${count.toLocaleString()} linhas selecionadas`,\r\n footerTotalVisibleRows: (visibleCount, totalCount) =>\r\n `${visibleCount.toLocaleString()} de ${totalCount.toLocaleString()}`,\r\n\r\n paginationRowsPerPage: \"Linhas por página:\",\r\n paginationItemAriaLabel: (type) => {\r\n switch (type) {\r\n case \"first\":\r\n return \"Primeira página\";\r\n case \"last\":\r\n return \"Última página\";\r\n case \"next\":\r\n return \"Próxima página\";\r\n case \"previous\":\r\n return \"Página anterior\";\r\n default:\r\n return \"\";\r\n }\r\n },\r\n\r\n noRowsLabel: \"Nenhum dado encontrado\",\r\n noResultsOverlayLabel: \"Nenhum resultado encontrado\",\r\n\r\n checkboxSelectionHeaderName: \"Seleção de checkbox\",\r\n checkboxSelectionSelectAllRows: \"Selecionar todas as linhas\",\r\n checkboxSelectionUnselectAllRows: \"Desmarcar todas as linhas\",\r\n checkboxSelectionSelectRow: \"Selecionar linha\",\r\n checkboxSelectionUnselectRow: \"Desmarcar linha\",\r\n\r\n columnHeaderSortIconLabel: \"Ordenar\",\r\n\r\n groupingColumnHeaderName: \"Grupo\",\r\n groupColumn: (name) => `Agrupar por ${name}`,\r\n unGroupColumn: (name) => `Parar de agrupar por ${name}`,\r\n\r\n detailPanelToggle: \"Alternar painel de detalhes\",\r\n expandDetailPanel: \"Expandir\",\r\n collapseDetailPanel: \"Recolher\",\r\n\r\n treeDataGroupingHeaderName: \"Grupo\",\r\n treeDataExpand: \"ver filhos\",\r\n treeDataCollapse: \"ocultar filhos\",\r\n\r\n aggregationMenuItemHeader: \"Agregação\",\r\n aggregationFunctionLabelSum: \"soma\",\r\n aggregationFunctionLabelAvg: \"média\",\r\n aggregationFunctionLabelMin: \"mín\",\r\n aggregationFunctionLabelMax: \"máx\",\r\n aggregationFunctionLabelSize: \"tamanho\",\r\n\r\n paginationDisplayedRows: ({ from, to, count }) => {\r\n const total = count === -1 ? \"mais de \" + to : count;\r\n return `${from}–${to} de ${total}`;\r\n },\r\n};\r\n\r\nexport const columnPanelSx: SxProps<Theme> = {\r\n padding: 2,\r\n width: \"350px\",\r\n color: \"#000000DE\",\r\n};\r\n\r\nexport const columnMenuSx: SxProps<Theme> = {\r\n \"& .MuiListItemText-primary\": {\r\n fontSize: \"14px !important\",\r\n },\r\n};\r\n\r\nexport const filterSx: SxProps<Theme> = {\r\n width: \"750px\",\r\n \"*\": { fontSize: \"14px !important\" },\r\n \"& .MuiDataGrid-filterFormColumnInput\": { width: \"230px\" },\r\n \"& .MuiDataGrid-filterFormOperatorInput\": { width: \"230px\" },\r\n};\r\n\r\nexport const paginationSx: SxProps<Theme> = {\r\n \"& .MuiTablePagination-root\": { fontSize: \"12px !important\" },\r\n \"& .MuiTablePagination-selectLabel\": { fontSize: \"12px !important\" },\r\n \"& .MuiTablePagination-displayedRows\": { fontSize: \"12px !important\" },\r\n \"& .MuiTablePagination-select\": { fontSize: \"12px !important\" },\r\n \"& .MuiTablePagination-toolbar\": {\r\n minHeight: \"40px !important\",\r\n padding: \"0 8px !important\",\r\n },\r\n};\r\n\r\nexport const tableSx: SxProps<Theme> = {\r\n fontSize: \"13px\",\r\n \"& .MuiDataGrid-row:nth-of-type(even)\": {\r\n backgroundColor: \"#F9FAFB\",\r\n },\r\n \"& .MuiDataGrid-row:nth-of-type(odd)\": {\r\n backgroundColor: \"#FFFFFF\",\r\n },\r\n \"& .MuiDataGrid-row.Mui-selected:nth-of-type(even)\": {\r\n backgroundColor: \"#F9FAFB !important\",\r\n },\r\n \"& .MuiDataGrid-row.Mui-selected:nth-of-type(odd)\": {\r\n backgroundColor: \"#FFFFFF !important\",\r\n },\r\n \"& .MuiDataGrid-row:hover\": { backgroundColor: \"#F3F4F6 !important\" },\r\n \"& .MuiDataGrid-columnHeaderTitleContainer\": {\r\n color: \"#FFFFFF\",\r\n justifyContent: \"center\",\r\n \"& svg\": { color: \"#FFFFFF\" },\r\n },\r\n \"& .MuiDataGrid-iconButtonContainer .MuiIconButton-root, & .MuiDataGrid-menuIconButton\":\r\n {\r\n color: \"#FFFFFF\",\r\n },\r\n \"& .MuiDataGrid-iconButtonContainer .MuiIconButton-root:hover, & .MuiDataGrid-menuIconButton:hover\":\r\n { backgroundColor: \"transparent\" },\r\n \"& .MuiDataGrid-iconButtonContainer .MuiIconButton-root.Mui-focusVisible, & .MuiDataGrid-menuIconButton.Mui-focusVisible\":\r\n { backgroundColor: \"transparent\" },\r\n \"& .MuiDataGrid-columnHeaders\": {\r\n background: \"linear-gradient(to right, #00B2A6 0%, #0AAEB2 100%)\",\r\n },\r\n \"& .MuiDataGrid-columnHeader\": {\r\n color: \"#FFFFFF\",\r\n fontWeight: \"bold\",\r\n backgroundColor: \"transparent\",\r\n \"& svg\": { color: \"#FFFFFF\" },\r\n },\r\n \"& .MuiDataGrid-columnHeader:hover\": { backgroundColor: \"transparent\" },\r\n \"& .MuiDataGrid-columnHeader:hover .MuiIconButton-root\": {\r\n backgroundColor: \"transparent\",\r\n },\r\n \"& .MuiDataGrid-columnHeader:focus-within\": {\r\n backgroundColor: \"transparent\",\r\n },\r\n \"& .MuiDataGrid-columnHeader--sorted\": { backgroundColor: \"transparent\" },\r\n \"& .MuiDataGrid-columnHeader--sorted .MuiIconButton-root\": {\r\n backgroundColor: \"transparent\",\r\n },\r\n \"& .MuiDataGrid-sortIcon\": { color: \"#FFFFFF\" },\r\n \"& .MuiDataGrid-sortIcon:hover\": { backgroundColor: \"transparent\" },\r\n \"& .MuiDataGrid-columnHeaderTitle\": { fontWeight: \"500\", color: \"#FFFFFF\" },\r\n};\r\n\r\nconst dataTableConstants = `\r\nTabela de dados baseada no MUI \\`DataGrid\\`, com estilização Grazziotin, textos em\r\nportuguês e operador de filtro **entre** automático para colunas string e number.\r\n\r\n**Importação:**\r\n\\`\\`\\`tsx\r\nimport { DataTable } from \"@grazziotin/react-components-next/ui\";\r\nimport type { DataTableProps } from \"@grazziotin/react-components-next/ui\";\r\n\\`\\`\\`\r\n\r\n**Uso básico:**\r\n\\`\\`\\`tsx\r\nconst columns = [\r\n { field: \"id\", headerName: \"ID\", width: 90 },\r\n { field: \"nome\", headerName: \"Nome\", flex: 1 },\r\n { field: \"idade\", headerName: \"Idade\", type: \"number\", width: 110 },\r\n];\r\n\r\nconst rows = [\r\n { id: 1, nome: \"João\", idade: 28 },\r\n { id: 2, nome: \"Maria\", idade: 34 },\r\n];\r\n\r\n<DataTable\r\n rows={rows}\r\n columns={columns}\r\n pageSizeOptions={[5, 10, 25]}\r\n initialState={{ pagination: { paginationModel: { pageSize: 5 } } }}\r\n/>\r\n\\`\\`\\`\r\n\r\n**Recursos incluídos:**\r\n- Filtros, ordenação e paginação\r\n- Painel de gerenciamento de colunas\r\n- Operador \"entre\" em colunas texto e numéricas\r\n- Overlay \"Nenhum dado encontrado\" em português\r\n`;\r\n\r\nexport default dataTableConstants;\r\n","import {\r\n GridFilterItem,\r\n GridFilterOperator,\r\n getGridNumericOperators,\r\n getGridStringOperators,\r\n} from \"@mui/x-data-grid\";\r\nimport { Box, TextField } from \"@mui/material\";\r\nimport type { ChangeEvent } from \"react\";\r\n\r\nconst createChange =\r\n (item: GridFilterItem, applyValue: (item: GridFilterItem) => void) =>\r\n (index: number) =>\r\n ({ target }: ChangeEvent<HTMLInputElement>) => {\r\n const [start = \"\", end = \"\"] = Array.isArray(item.value) ? item.value : [];\r\n\r\n applyValue({\r\n ...item,\r\n value: index === 0 ? [target.value, end] : [start, target.value],\r\n });\r\n };\r\n\r\nexport const textBetweenOp: GridFilterOperator = {\r\n label: \"entre\",\r\n value: \"between\",\r\n getApplyFilterFn: (filter: GridFilterItem) => {\r\n if (!filter.value || !Array.isArray(filter.value)) return null;\r\n\r\n const [start, end] = filter.value;\r\n if (!start || !end) return null;\r\n\r\n return (value) => {\r\n const cell = value?.toString() || \"\";\r\n return cell >= start && cell <= end;\r\n };\r\n },\r\n InputComponent: ({ item, applyValue, focusElementRef }) => {\r\n const onChange = createChange(item, applyValue);\r\n\r\n return (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 1 }}>\r\n <TextField\r\n size=\"small\"\r\n label=\"De\"\r\n variant=\"outlined\"\r\n inputRef={focusElementRef}\r\n value={(item.value || [\"\", \"\"])[0] || \"\"}\r\n onChange={onChange(0)}\r\n placeholder=\"Inicial\"\r\n />\r\n <TextField\r\n size=\"small\"\r\n label=\"Até\"\r\n variant=\"outlined\"\r\n value={(item.value || [\"\", \"\"])[1] || \"\"}\r\n onChange={onChange(1)}\r\n placeholder=\"Final\"\r\n />\r\n </Box>\r\n );\r\n },\r\n};\r\n\r\nexport const numberBetweenOp: GridFilterOperator = {\r\n label: \"entre\",\r\n value: \"between\",\r\n getApplyFilterFn: (filter: GridFilterItem) => {\r\n if (!filter.value || !Array.isArray(filter.value)) return null;\r\n\r\n const [start, end] = filter.value;\r\n if (start === \"\" || end === \"\" || start == null || end == null) return null;\r\n\r\n return (value) => {\r\n const number = Number(value);\r\n return number >= Number(start) && number <= Number(end);\r\n };\r\n },\r\n InputComponent: ({ item, applyValue, focusElementRef }) => {\r\n const onChange = createChange(item, applyValue);\r\n\r\n return (\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 1 }}>\r\n <TextField\r\n size=\"small\"\r\n label=\"De\"\r\n type=\"number\"\r\n variant=\"outlined\"\r\n inputRef={focusElementRef}\r\n value={(item.value || [\"\", \"\"])[0] || \"\"}\r\n onChange={onChange(0)}\r\n placeholder=\"Mínimo\"\r\n />\r\n <TextField\r\n size=\"small\"\r\n label=\"Até\"\r\n type=\"number\"\r\n variant=\"outlined\"\r\n value={(item.value || [\"\", \"\"])[1] || \"\"}\r\n onChange={onChange(1)}\r\n placeholder=\"Máximo\"\r\n />\r\n </Box>\r\n );\r\n },\r\n};\r\n\r\nexport const getTextOps = (): GridFilterOperator[] => {\r\n return [...getGridStringOperators(), textBetweenOp];\r\n};\r\n\r\nexport const getNumberOps = (): GridFilterOperator[] => {\r\n return [...getGridNumericOperators(), numberBetweenOp];\r\n};\r\n","import {\r\n localeText,\r\n tableSx,\r\n filterSx,\r\n columnMenuSx,\r\n paginationSx,\r\n columnPanelSx,\r\n} from \"./utils/constants\";\r\nimport {\r\n DataGrid,\r\n GridOverlay,\r\n GridColumnMenu,\r\n GridPagination,\r\n GridFilterPanel,\r\n GridColumnsPanel,\r\n GridColumnMenuProps,\r\n GRID_STRING_COL_DEF,\r\n GRID_NUMERIC_COL_DEF,\r\n GridColumnsPanelProps,\r\n} from \"@mui/x-data-grid\";\r\nimport { Box } from \"@mui/material\";\r\nimport type { ComponentProps } from \"react\";\r\nimport type { DataTableProps } from \"./utils/interface\";\r\nimport { getNumberOps, getTextOps } from \"./utils/between-filter\";\r\n/**\r\n * Configuração global dos operadores de filtro do DataGrid.\r\n *\r\n * Sobrescreve as definições padrão do MUI DataGrid para incluir automaticamente\r\n * o operador \"entre\" em todas as colunas do tipo string e number.\r\n *\r\n * Isso significa que TODAS as tabelas do projeto que usam o componente DataTable\r\n * terão o operador \"entre\" disponível sem necessidade de configuração adicional.\r\n */\r\nGRID_STRING_COL_DEF.filterOperators = getTextOps();\r\nGRID_NUMERIC_COL_DEF.filterOperators = getNumberOps();\r\n\r\nfunction CustomColumnsPanel(props: Readonly<GridColumnsPanelProps>) {\r\n return <GridColumnsPanel {...props} sx={columnPanelSx} />;\r\n}\r\n\r\nfunction CustomColumnMenu(props: Readonly<GridColumnMenuProps>) {\r\n return (\r\n <Box sx={columnMenuSx}>\r\n <GridColumnMenu {...props} />\r\n </Box>\r\n );\r\n}\r\n\r\nfunction CustomFilterPanel(\r\n props: Readonly<ComponentProps<typeof GridFilterPanel>>,\r\n) {\r\n return <GridFilterPanel {...props} sx={filterSx} />;\r\n}\r\n\r\nfunction CustomNoRowsOverlay() {\r\n return (\r\n <GridOverlay>\r\n <Box sx={{ mt: 1 }}>Nenhum dado encontrado.</Box>\r\n </GridOverlay>\r\n );\r\n}\r\n\r\nfunction CustomPagination() {\r\n return (\r\n <Box sx={paginationSx}>\r\n <GridPagination />\r\n </Box>\r\n );\r\n}\r\n\r\n/**\r\n * Componente DataTable personalizado baseado no MUI DataGrid.\r\n *\r\n * Fornece uma tabela de dados com estilização customizada, filtros avançados,\r\n * paginação, ordenação e gerenciamento de colunas.\r\n *\r\n * Recursos incluídos:\r\n * - Operador de filtro \"entre\" automático para colunas string e number\r\n * - Painel de filtros customizado\r\n * - Painel de gerenciamento de colunas\r\n * - Paginação estilizada\r\n * - Overlay personalizado para \"sem dados\"\r\n * - Textos em português brasileiro\r\n *\r\n * @param props - Todas as props do MUI DataGrid são suportadas. Ver {@link DataTableProps}.\r\n *\r\n * @example\r\n * <DataTable\r\n * rows={dados}\r\n * columns={colunas}\r\n * loading={carregando}\r\n * pageSizeOptions={[10, 20, 50]}\r\n * />\r\n */\r\nconst DataTable = ({ ...rest }: DataTableProps) => {\r\n return (\r\n <Box sx={{ mb: 2, mt: 2, height: \"100%\" }}>\r\n <DataGrid\r\n sx={tableSx}\r\n {...rest}\r\n className=\"min-h-[210px]!\"\r\n localeText={localeText}\r\n disableRowSelectionOnClick\r\n slotProps={{\r\n loadingOverlay: {\r\n variant: \"linear-progress\",\r\n noRowsVariant: \"skeleton\",\r\n },\r\n }}\r\n slots={{\r\n columnMenu: CustomColumnMenu,\r\n filterPanel: CustomFilterPanel,\r\n columnsPanel: CustomColumnsPanel,\r\n noRowsOverlay: CustomNoRowsOverlay,\r\n pagination: CustomPagination,\r\n }}\r\n />\r\n </Box>\r\n );\r\n};\r\n\r\nexport default DataTable;\r\n","import type { TabColorProps } from \"./utils/interface\";\r\nimport { styled, Tab as MuiTab, Tabs as MuiTabs } from \"@mui/material\";\r\n\r\nconst DEFAULT_TAB_COLOR = \"var(--primary-color)\";\r\nconst DEFAULT_TAB_FONT_FAMILY = \"var(--font-family, inherit)\";\r\n\r\n/**\r\n * Container de abas baseado no MUI `Tabs`, com indicador colorido customizável.\r\n *\r\n * @param props.color - Cor do indicador da aba ativa. Padrão: `var(--primary-color)`.\r\n *\r\n * @example\r\n * ```tsx\r\n * <Tabs value={value} onChange={handleChange} color=\"#00B2A6\">\r\n * <Tab label=\"Aba 1\" />\r\n * </Tabs>\r\n * ```\r\n */\r\nexport const Tabs = styled(MuiTabs, {\r\n shouldForwardProp: (prop) => prop !== \"color\",\r\n})<TabColorProps>(({ color = DEFAULT_TAB_COLOR }) => ({\r\n fontFamily: `${DEFAULT_TAB_FONT_FAMILY} !important`,\r\n \"& .MuiTabs-indicator\": { backgroundColor: color },\r\n}));\r\n\r\n/**\r\n * Aba individual baseada no MUI `Tab`, com tipografia e cor de seleção customizáveis.\r\n *\r\n * @param props.color - Cor do rótulo quando a aba está selecionada. Padrão: `var(--primary-color)`.\r\n * @param props.fontFamily - Família tipográfica do rótulo. Padrão: `var(--font-family, inherit)`.\r\n *\r\n * @example\r\n * ```tsx\r\n * <Tab label=\"Configurações\" color=\"#00B2A6\" />\r\n * ```\r\n */\r\nexport const Tab = styled(MuiTab, {\r\n shouldForwardProp: (prop) => prop !== \"color\" && prop !== \"fontFamily\",\r\n})<TabColorProps>(\r\n ({ color = DEFAULT_TAB_COLOR, fontFamily = DEFAULT_TAB_FONT_FAMILY }) => ({\r\n fontWeight: \"500 !important\",\r\n color: \"#000000CC !important\",\r\n fontSize: \"14px !important\",\r\n textTransform: \"uppercase !important\",\r\n fontFamily: `${fontFamily} !important`,\r\n \"&.Mui-selected\": { color: `${color} !important` },\r\n }),\r\n);\r\n","import type { CSSProperties } from \"react\";\r\n\r\nexport type CssVarName = `--${string}`;\r\n\r\nexport function withCssVar<T extends CSSProperties | undefined>(\r\n style: T,\r\n name: CssVarName,\r\n value?: string | null,\r\n): T {\r\n if (value == null || value === \"\") return style;\r\n return { ...style, [name]: value };\r\n}\r\n","import { memo } from \"react\";\r\nimport { styled, SxProps, TextField, Theme } from \"@mui/material\";\r\n\r\nexport const DEFAULT_ACCENT = \"var(--primary-color)\";\r\n\r\nconst accent = \"var(--primary-color)\";\r\nconst errorColor = \"#D32F2F\";\r\nconst focusLabel = { color: accent };\r\nconst errorLabel = { color: errorColor };\r\nconst borderAccent = { borderColor: accent };\r\nconst borderError = { borderColor: errorColor };\r\nconst underlineAccent = { borderBottomColor: accent };\r\nconst underlineError = { borderBottomColor: errorColor };\r\nconst disabledText = { color: \"#9E9E9E\", cursor: \"not-allowed\" };\r\nconst disabledBorder = { borderColor: \"#9E9E9E\", cursor: \"not-allowed\" };\r\nconst input = {\r\n color: \"#333\",\r\n fontSize: \"13px !important\",\r\n fontFamily: \"var(--font-poppins) !important\",\r\n};\r\n\r\nconst InputTextField = styled(TextField)({\r\n fontFamily: \"var(--font-poppins) !important\",\r\n \"& input\": input,\r\n \"& label\": input,\r\n \"& label.Mui-focused\": focusLabel,\r\n \"& label.Mui-error\": errorLabel,\r\n \"& .MuiInput-underline:after\": underlineAccent,\r\n \"& .MuiInput-underline.Mui-error:after\": underlineError,\r\n \"& .MuiOutlinedInput-root\": {\r\n \"& fieldset\": borderAccent,\r\n \"&:hover fieldset\": borderAccent,\r\n \"&.Mui-disabled fieldset\": disabledBorder,\r\n \"&.Mui-focused fieldset\": borderAccent,\r\n \"&.Mui-error fieldset\": borderError,\r\n \"&.Mui-error:hover fieldset\": borderError,\r\n \"&.Mui-error.Mui-focused fieldset\": borderError,\r\n },\r\n \"& .MuiFilledInput-root\": {\r\n backgroundColor: \"#F9FAFB\",\r\n \"&:after\": underlineAccent,\r\n \"&:before\": underlineAccent,\r\n \"&:hover:before\": underlineAccent,\r\n \"&.Mui-error:after\": underlineError,\r\n \"&.Mui-error:before\": underlineError,\r\n \"&:hover\": { backgroundColor: \"#F5F5F5\" },\r\n \"&.Mui-error:hover:before\": underlineError,\r\n fontFamily: \"var(--font-poppins) !important\",\r\n \"&.Mui-disabled\": { ...disabledText, backgroundColor: \"#F9FAFB\" },\r\n },\r\n \"& .MuiInputBase-input\": { ...input, \"&.Mui-disabled\": disabledText },\r\n \"& .MuiFormHelperText-root\": {\r\n fontSize: \"11px\",\r\n marginLeft: 2,\r\n fontFamily: \"var(--font-poppins) !important\",\r\n },\r\n \"& .MuiFormHelperText-root.Mui-error\": { color: errorColor },\r\n \"& .Mui-disabled\": disabledText,\r\n});\r\n\r\nexport default memo(InputTextField);\r\n\r\nexport const xsInputFilled: SxProps<Theme> = {\r\n \"& .MuiFilledInput-root\": {\r\n bgcolor: \"#F3F4F6\",\r\n borderStartEndRadius: \"20px\",\r\n borderStartStartRadius: \"20px\",\r\n },\r\n};\r\n","import {\r\n formatCpfCnpj,\r\n formatItem150,\r\n formatItem170,\r\n formatPhoneBr,\r\n formatPriceBrl,\r\n} from \"@/functions\";\r\nimport { useCallback } from \"react\";\r\nimport { removeDigits } from \"@/core\";\r\nimport { InputMaskerArgs, InputType } from \"./utils/interface\";\r\nimport { removeNonDigits, removeTextOnly } from \"@/core/remove-digits\";\r\n\r\nexport function useInputMasker({ type, onChange }: InputMaskerArgs) {\r\n /**\r\n * Formata o valor de entrada de acordo com o tipo definido (ex.: CPF, telefone, moeda).\r\n *\r\n * @param {string} value - O valor a ser formatado.\r\n * @returns {string} O valor formatado.\r\n */\r\n const formatValue = useCallback(\r\n (v: InputType): string => {\r\n if (!v) return \"\";\r\n switch (type) {\r\n case \"cpf-cnpj\":\r\n return formatCpfCnpj(v);\r\n case \"numeric\":\r\n return removeDigits(v);\r\n case \"tel\":\r\n return formatPhoneBr(v);\r\n case \"price\":\r\n return formatPriceBrl(v);\r\n case \"text-only\":\r\n return removeTextOnly(v);\r\n case \"text-no-number\":\r\n return removeNonDigits(v);\r\n case \"item-170\":\r\n return formatItem170(v);\r\n case \"item-150\":\r\n return formatItem150(v);\r\n default:\r\n return v;\r\n }\r\n },\r\n [type],\r\n );\r\n\r\n /**\r\n * Manipula a alteração do valor de entrada, aplicando a formatação correta.\r\n *\r\n * @param {React.ChangeEvent<HTMLInputElement>} e - Evento de alteração da entrada.\r\n */\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newValue = e.target.value;\r\n\r\n onChange?.({\r\n ...e,\r\n target: { ...e.target, value: formatValue(newValue) },\r\n });\r\n };\r\n\r\n return { handleChange };\r\n}\r\n","import { DEFAULT_ACCENT } from \"./utils/css\";\r\nimport { IconButton, InputAdornment } from \"@mui/material\";\r\nimport { MdVisibility, MdVisibilityOff } from \"react-icons/md\";\r\nimport type { InputProps, PasswordToggleArgs } from \"./utils/interface\";\r\n\r\nfunction withPasswordToggle({\r\n showPwd,\r\n canToggle,\r\n slotProps,\r\n setShowPwd,\r\n color = DEFAULT_ACCENT,\r\n}: PasswordToggleArgs): InputProps[\"slotProps\"] {\r\n if (!canToggle) return slotProps;\r\n\r\n const Icon = showPwd ? MdVisibilityOff : MdVisibility;\r\n\r\n return {\r\n ...slotProps,\r\n input: {\r\n ...slotProps?.input,\r\n endAdornment: (\r\n <InputAdornment position=\"end\">\r\n <IconButton\r\n edge=\"end\"\r\n size=\"small\"\r\n sx={{ color }}\r\n onClick={() => setShowPwd((prev) => !prev)}\r\n >\r\n <Icon size={20} />\r\n </IconButton>\r\n </InputAdornment>\r\n ),\r\n },\r\n };\r\n}\r\n\r\nexport function buildSlotProps(\r\n args: PasswordToggleArgs,\r\n): InputProps[\"slotProps\"] {\r\n return withPasswordToggle(args);\r\n}\r\n","\"use client\";\r\n\r\nimport { cn } from \"@/functions\";\r\nimport { withCssVar } from \"@/core\";\r\nimport InputTextField from \"./utils/css\";\r\nimport { useMemo, useState } from \"react\";\r\nimport { useInputMasker } from \"./maskers\";\r\nimport { buildSlotProps } from \"./slot-props\";\r\nimport { InputProps, InputType } from \"./utils/interface\";\r\n\r\nconst CUSTOM_INPUT_TYPES = new Set<InputType>([\r\n \"cpf-cnpj\",\r\n \"numeric\",\r\n \"price\",\r\n \"item-170\",\r\n \"item-150\",\r\n \"text-only\",\r\n \"text-no-number\",\r\n]);\r\n\r\nfunction resolveHtmlInputType(\r\n type: InputProps[\"type\"],\r\n): NonNullable<InputProps[\"type\"]> {\r\n if (!type || CUSTOM_INPUT_TYPES.has(type)) return \"text\";\r\n return type;\r\n}\r\n\r\n/**\r\n * Campo de texto baseado no MUI TextField, com máscaras e tipos customizados do projeto.\r\n */\r\nconst Input = ({\r\n color,\r\n onChange,\r\n isPassword,\r\n type = \"text\",\r\n size = \"small\",\r\n ...rest\r\n}: Readonly<InputProps>) => {\r\n const [showPwd, setShowPwd] = useState(false);\r\n const isPwd = type === \"password\";\r\n const canToggle = isPwd && isPassword;\r\n const htmlType = resolveHtmlInputType(type);\r\n const inputType = canToggle && showPwd ? \"text\" : htmlType;\r\n\r\n const style = useMemo(\r\n () => withCssVar(rest.style, \"--primary-color\", color),\r\n [color, rest.style],\r\n );\r\n\r\n const slotProps = useMemo(\r\n () =>\r\n buildSlotProps({\r\n color,\r\n showPwd,\r\n canToggle,\r\n setShowPwd,\r\n slotProps: rest.slotProps,\r\n }),\r\n [canToggle, color, showPwd, rest.slotProps],\r\n );\r\n\r\n const { handleChange } = useInputMasker({ type, onChange });\r\n\r\n return (\r\n <InputTextField\r\n {...rest}\r\n size={size}\r\n style={style}\r\n type={inputType}\r\n slotProps={slotProps}\r\n onChange={handleChange}\r\n className={cn(\"select-none\", rest.className)}\r\n />\r\n );\r\n};\r\n\r\nexport default Input;\r\n","const optionText = {\r\n fontSize: \"13px !important\",\r\n fontFamily: \"var(--font-poppins) !important\",\r\n};\r\n\r\nexport const selectMui = {\r\n \"& .MuiAutocomplete-option\": {\r\n padding: \"8px 12px\",\r\n ...optionText,\r\n lineHeight: \"25px !important\",\r\n },\r\n \"& .MuiAutocomplete-noOptions\": optionText,\r\n \"& .MuiAutocomplete-listbox\": { padding: \"5px\" },\r\n};\r\n","\"use client\";\r\n\r\nimport Input from \"../input\";\r\nimport Autocomplete, {\r\n type AutocompleteValue,\r\n type AutocompleteChangeReason,\r\n type AutocompleteChangeDetails,\r\n} from \"@mui/material/Autocomplete\";\r\nimport { selectMui } from \"./utils/css\";\r\nimport type { InputSelectProps } from \"./utils/interface\";\r\n\r\n/**\r\n * Componente InputSelect que encapsula o Autocomplete do Material-UI com o {@link Input} do projeto.\r\n *\r\n * Permite a seleção de uma ou mais opções com base nos parâmetros fornecidos.\r\n * É configurável via props do Autocomplete do MUI, com campo de entrada customizável\r\n * através de `input` (mesmas props do {@link Input}: cor, label, máscaras, etc.).\r\n *\r\n * @template T - Tipo dos itens de opções exibidos no seletor.\r\n * @template M - Define se o seletor permite múltiplas seleções. Padrão: `false` (seletor único).\r\n *\r\n * @param props - Propriedades do componente. Detalhes em {@link InputSelectProps}.\r\n * @param props.multiple - Se `true`, permite selecionar várias opções. Padrão: `false`.\r\n * @param props.optionLabel - Função que recebe uma opção e retorna o rótulo exibido.\r\n * @param props.onChange - Callback ao alterar o valor (evento, valor, motivo e detalhes).\r\n * @param props.input - Props repassadas ao {@link Input} interno (label, color, type, etc.).\r\n * @param props.options - Lista de opções disponíveis no seletor.\r\n * @param props.rest - Demais props do Autocomplete do MUI (exceto `renderInput` e `onChange`).\r\n *\r\n * @returns Autocomplete com campo de entrada personalizado.\r\n *\r\n * @example\r\n * ```tsx\r\n * const options = [\r\n * { id: 1, label: \"Opção 1\" },\r\n * { id: 2, label: \"Opção 2\" },\r\n * ];\r\n *\r\n * <InputSelect\r\n * options={options}\r\n * optionLabel={(option) => option.label}\r\n * input={{ label: \"Selecione\", color: \"#00b2a6\" }}\r\n * onChange={(_event, value) => console.log(\"Valor selecionado:\", value)}\r\n * multiple\r\n * />\r\n * ```\r\n */\r\nfunction InputSelect<T, M extends boolean = false>({\r\n multiple,\r\n optionLabel,\r\n onChange,\r\n input,\r\n ...rest\r\n}: Readonly<InputSelectProps<T, M>>) {\r\n const handleChange = (\r\n event: React.SyntheticEvent,\r\n value: AutocompleteValue<T, M, false, false>,\r\n reason: AutocompleteChangeReason,\r\n details?: AutocompleteChangeDetails<T>,\r\n ) => {\r\n onChange?.(event, value, reason, details);\r\n };\r\n\r\n return (\r\n <Autocomplete\r\n {...rest}\r\n size=\"small\"\r\n multiple={multiple}\r\n onChange={handleChange}\r\n slotProps={{ paper: { sx: selectMui } }}\r\n getOptionLabel={(option) =>\r\n typeof option === \"string\" ? \"\" : optionLabel(option)\r\n }\r\n isOptionEqualToValue={(option, value) =>\r\n JSON.stringify(option) === JSON.stringify(value)\r\n }\r\n renderInput={(params) => (\r\n <Input {...params} {...input} size={input?.size ?? \"small\"} />\r\n )}\r\n />\r\n );\r\n}\r\n\r\nexport default InputSelect;\r\n","import type { ReactElement } from \"react\";\r\nimport { FaFilter } from \"react-icons/fa\";\r\nimport { ActionIcon, Tooltip } from \"@mantine/core\";\r\nimport type { FilterCardProps } from \"../utils/interface\";\r\n\r\n/**\r\n * Card de título com botão para abrir o drawer de filtros.\r\n *\r\n * Exibe uma faixa colorida à esquerda, o título da página/relatório e, quando\r\n * `renderFilter` é verdadeiro, um ícone de filtro com tooltip \"Ver filtros\".\r\n *\r\n * @param props - Propriedades do componente. Detalhes em {@link FilterCardProps}.\r\n * @param props.title - Título exibido no card.\r\n * @param props.renderFilter - Indica se o botão de filtros deve ser exibido.\r\n * @param props.setOpen - Controla a abertura do drawer de filtros.\r\n */\r\nconst FilterCard = ({\r\n title,\r\n setOpen,\r\n renderFilter,\r\n}: FilterCardProps): ReactElement => {\r\n return (\r\n <div className=\"h-15 flex items-center w-full bg-white mb-2 rounded-md shadow-[0_2px_6px_-1px_rgba(0,0,0,.16),0_6px_18px_-1px_rgba(0,0,0,.06)]\">\r\n <div className=\"h-full w-2 bg-(--primary-color) rounded-tl-md rounded-bl-md\" />\r\n <div className=\"w-full flex justify-between items-center p-3\">\r\n <h1 className=\"font-medium text-lg whitespace-nowrap text-ellipsis overflow-hidden ml-1 text-black/80\">\r\n {title}\r\n </h1>\r\n <div className=\"flex items-center space-x-4\">\r\n {renderFilter && (\r\n <Tooltip\r\n withArrow\r\n arrowSize={4}\r\n color=\"#00b2a6\"\r\n arrowOffset={20}\r\n label=\"Ver filtros\"\r\n className=\"text-xs!\"\r\n transitionProps={{ transition: \"pop\", duration: 300 }}\r\n >\r\n <span className=\"flex items-center\">\r\n <ActionIcon\r\n size={40}\r\n radius=\"md\"\r\n aria-label=\"Ver filtros\"\r\n color=\"var(--primary-color)\"\r\n onClick={() => setOpen(true)}\r\n >\r\n <FaFilter className=\"h-5 w-5 text-white\" />\r\n </ActionIcon>\r\n </span>\r\n </Tooltip>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default FilterCard;\r\n","import type {\r\n FilterDrawerField,\r\n FilterInputProps,\r\n FilterInputSelectField,\r\n FilterInputSelectProps,\r\n} from \"./interface\";\r\nimport type {\r\n InputSelectGridProps,\r\n InputSelectProps,\r\n} from \"../../input-select/utils/interface\";\r\n\r\n/** Ordem padrão dos campos quando `order` não é informado. */\r\nexport const FILTER_DEFAULT_ORDER = 99;\r\n\r\n/** Estilo do papel do drawer de filtros. */\r\nexport const FILTER_DRAWER_PAPER_SX = {\r\n [\"& .MuiDrawer-paper\"]: { borderRadius: \"0px 0px 20px 20px\" },\r\n};\r\n\r\n/**\r\n * Indica se há campos de filtro para exibir o botão no card.\r\n * @param inputs - Lista de campos Input.\r\n * @param inputSelect - Lista de campos InputSelect.\r\n */\r\nexport function hasFilterFields(\r\n inputs?: FilterInputProps[],\r\n inputSelect?: FilterInputSelectProps,\r\n): boolean {\r\n return (inputs?.length ?? 0) > 0 || (inputSelect?.length ?? 0) > 0;\r\n}\r\n\r\n/**\r\n * Verifica se o campo do drawer é um InputSelect.\r\n * @param field - Campo do drawer.\r\n */\r\nexport function isInputSelect(\r\n field: FilterDrawerField,\r\n): field is FilterInputSelectField {\r\n return \"options\" in field;\r\n}\r\n\r\n/**\r\n * Define um campo {@link InputSelect} no filter preservando a inferência de `T`.\r\n * Permite montar listas com tipos de opção diferentes sem union nem `as`.\r\n *\r\n * @example\r\n * filterInputSelect({\r\n * options: networks,\r\n * optionLabel: (v) => v.desRede,\r\n * input: { label: \"Rede\" },\r\n * order: 1,\r\n * })\r\n */\r\nexport function filterInputSelect<T extends object, M extends boolean = false>(\r\n props: InputSelectProps<T, M> & InputSelectGridProps,\r\n): FilterInputSelectField<M> {\r\n return props as unknown as FilterInputSelectField<M>;\r\n}\r\n\r\n/**\r\n * Ordena os campos do drawer por `order` (crescente).\r\n * @param fields - Campos a ordenar.\r\n */\r\nexport function sortFilterFields(\r\n fields: FilterDrawerField[],\r\n): FilterDrawerField[] {\r\n return [...fields].sort(\r\n (a, b) =>\r\n (a.order ?? FILTER_DEFAULT_ORDER) - (b.order ?? FILTER_DEFAULT_ORDER),\r\n );\r\n}\r\n\r\n/**\r\n * Mescla inputs e inputSelect e ordena por `order`.\r\n * @param inputs - Campos Input.\r\n * @param inputSelect - Campos InputSelect.\r\n */\r\nexport function mergeFilterFields(\r\n inputs: FilterDrawerField[],\r\n inputSelect: FilterDrawerField[],\r\n): FilterDrawerField[] {\r\n return sortFilterFields([...inputs, ...inputSelect]);\r\n}\r\n\r\n/**\r\n * Retorna o número de colunas do grid conforme o breakpoint.\r\n * @param isMobile - Largura até 640px.\r\n * @param isTablet - Largura até 1120px.\r\n */\r\nexport function getFilterGridColumns(\r\n isMobile: boolean,\r\n isTablet: boolean,\r\n): number {\r\n if (isMobile) return 1;\r\n if (isTablet) return 3;\r\n return 7;\r\n}\r\n\r\nconst filterConstants = `\r\nFiltro com card de título e drawer para busca com \\`Input\\` e \\`InputSelect\\`.\r\n\r\n**Importação:**\r\n\\`\\`\\`tsx\r\nimport { Filter, filterInputSelect } from \"@grazziotin/react-components-next/ui\";\r\n\\`\\`\\`\r\n\r\n**Uso básico:**\r\n\\`\\`\\`tsx\r\n<Filter\r\n title=\"Relatório\"\r\n inputs={[{ label: \"Nome\", name: \"nome\", order: 1, xs: 2 }]}\r\n inputSelect={[\r\n filterInputSelect({\r\n options: cidades,\r\n optionLabel: (c) => c.nome,\r\n input: { label: \"Cidade\" },\r\n order: 2,\r\n xs: 2,\r\n }),\r\n filterInputSelect({\r\n options: redes,\r\n optionLabel: (r) => r.desRede,\r\n input: { label: \"Rede\" },\r\n order: 3,\r\n xs: 2,\r\n }),\r\n ]}\r\n onClear={() => reset()}\r\n onSubmit={(e) => handleFilter(e)}\r\n/>\r\n\\`\\`\\`\r\n\r\nUse \\`filterInputSelect\\` quando houver vários selects com tipos de opção diferentes — evita union manual e \\`as\\`.\r\n`;\r\n\r\nexport default filterConstants;\r\n","import {\r\n isInputSelect,\r\n mergeFilterFields,\r\n getFilterGridColumns,\r\n FILTER_DRAWER_PAPER_SX,\r\n} from \"../utils/constants\";\r\nimport Input from \"../../input\";\r\nimport { Button } from \"@mantine/core\";\r\nimport InputSelect from \"../../input-select\";\r\nimport { Drawer, Grid, useMediaQuery } from \"@mui/material\";\r\nimport type { ReactElement, SubmitEventHandler } from \"react\";\r\nimport type { FilterDrawerField, FilterDrawerProps } from \"../utils/interface\";\r\n\r\n/**\r\n * Drawer com campos de filtro ({@link Input} e {@link InputSelect}).\r\n *\r\n * Mescla `inputs` e `inputSelect`, ordena por `order` e renderiza em grid\r\n * responsivo (1 coluna no mobile, 3 no tablet, 7 no desktop).\r\n *\r\n * @param props - Propriedades do componente. Detalhes em {@link FilterDrawerProps}.\r\n * @param props.open - Drawer aberto.\r\n * @param props.setOpen - Controla a abertura do drawer.\r\n * @param props.inputs - Campos {@link Input}.\r\n * @param props.inputSelect - Campos {@link InputSelect}.\r\n * @param props.onClear - Callback ao limpar filtros.\r\n * @param props.onSubmit - Callback ao submeter o formulário de filtros.\r\n */\r\nconst FilterDrawer = ({\r\n open,\r\n setOpen,\r\n onClear,\r\n onSubmit,\r\n inputs = [],\r\n inputSelect = [],\r\n}: FilterDrawerProps): ReactElement => {\r\n const m640 = useMediaQuery(\"(max-width:640px)\");\r\n const m1120 = useMediaQuery(\"(max-width:1120px)\");\r\n const allInputs = mergeFilterFields(inputs, inputSelect);\r\n\r\n const renderField = (field: FilterDrawerField, index: number) => {\r\n if (isInputSelect(field)) {\r\n return (\r\n <Grid size={field.xs ?? 1} key={`inputSelect-${index}`}>\r\n <InputSelect {...field} id={`inputSM${index}`} fullWidth />\r\n </Grid>\r\n );\r\n }\r\n\r\n return (\r\n <Grid size={field.xs ?? 1} key={`input-${index}`}>\r\n <Input {...field} fullWidth />\r\n </Grid>\r\n );\r\n };\r\n\r\n const handleSubmit: SubmitEventHandler<HTMLFormElement> = (event) => {\r\n event.preventDefault();\r\n if (!onSubmit) return;\r\n onSubmit(event);\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n <Drawer\r\n open={open}\r\n anchor=\"top\"\r\n onClose={() => setOpen(false)}\r\n sx={FILTER_DRAWER_PAPER_SX}\r\n >\r\n <form\r\n onSubmit={handleSubmit}\r\n className=\"flex w-full select-none flex-col py-4 pl-5\"\r\n >\r\n <p className=\"text-lg font-medium text-system-900\">Filtros</p>\r\n <p className=\"pb-5 pt-1 text-sm text-black/80\">\r\n Para que possamos apresentar dados específicos, por favor, preencha os\r\n campos abaixo.\r\n </p>\r\n <Grid\r\n container\r\n rowSpacing={2}\r\n className=\"pr-5\"\r\n columnSpacing={1}\r\n columns={getFilterGridColumns(Boolean(m640), Boolean(m1120))}\r\n >\r\n {allInputs.map((field, index) => renderField(field, index))}\r\n </Grid>\r\n <div className=\"flex justify-end space-x-4 pr-4 pt-4\">\r\n {onClear && (\r\n <Button\r\n radius=\"sm\"\r\n color=\"#253E56\"\r\n variant=\"outline\"\r\n onClick={onClear}\r\n size=\"xs\"\r\n >\r\n LIMPAR FILTROS\r\n </Button>\r\n )}\r\n {onSubmit && (\r\n <Button\r\n size=\"xs\"\r\n radius=\"sm\"\r\n type=\"submit\"\r\n variant=\"filled\"\r\n color=\"var(--primary-color)\"\r\n >\r\n PESQUISAR\r\n </Button>\r\n )}\r\n </div>\r\n </form>\r\n </Drawer>\r\n );\r\n};\r\n\r\nexport default FilterDrawer;\r\n","\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport type { ReactElement } from \"react\";\r\nimport FilterCard from \"./components/card\";\r\nimport FilterDrawer from \"./components/filter\";\r\nimport { hasFilterFields } from \"./utils/constants\";\r\nimport type { FilterProps } from \"./utils/interface\";\r\n\r\n/**\r\n * Filtro com card de título e drawer contendo {@link Input} e {@link InputSelect}.\r\n *\r\n * O card exibe o título da página/relatório e um botão para abrir o drawer quando\r\n * há campos em `inputs` ou `inputSelect`. O drawer renderiza os campos em grid\r\n * responsivo, com ações de limpar e pesquisar.\r\n *\r\n * @param props - Propriedades do componente. Detalhes em {@link FilterProps}.\r\n * @param props.title - Título exibido no card.\r\n * @param props.inputs - Campos de texto/máscara ({@link Input}).\r\n * @param props.inputSelect - Campos de seleção ({@link InputSelect}).\r\n * @param props.onClear - Callback ao limpar filtros.\r\n * @param props.onSubmit - Callback ao pesquisar.\r\n * @returns Elemento React com card e drawer de filtros.\r\n */\r\nconst Filter = ({\r\n title,\r\n inputs,\r\n onClear,\r\n onSubmit,\r\n inputSelect,\r\n}: FilterProps): ReactElement => {\r\n const [open, setOpen] = useState(false);\r\n const hasFields = hasFilterFields(inputs, inputSelect);\r\n\r\n return (\r\n <div>\r\n <FilterCard title={title} setOpen={setOpen} renderFilter={hasFields} />\r\n <FilterDrawer\r\n open={open}\r\n inputs={inputs}\r\n setOpen={setOpen}\r\n onClear={onClear}\r\n onSubmit={onSubmit}\r\n inputSelect={inputSelect}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default Filter;\r\n"]}
|