@grazziotin/react-components-next 1.0.0 → 1.0.1
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/README.md +184 -105
- package/dist/{chunk-NHHZBMJL.mjs → chunk-4DIPDYEU.mjs} +18 -3
- package/dist/chunk-4DIPDYEU.mjs.map +1 -0
- package/dist/chunk-XNWAGZVV.mjs +467 -0
- package/dist/chunk-XNWAGZVV.mjs.map +1 -0
- package/dist/functions/index.mjs +1 -1
- package/dist/index.css +1 -1
- package/dist/index.d.mts +6 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +368 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -3
- package/dist/index.mjs.map +1 -1
- package/dist/ui/index.d.mts +98 -6
- package/dist/ui/index.d.ts +98 -6
- package/dist/ui/index.js +367 -2
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/index.mjs +2 -2
- package/package.json +2 -3
- package/dist/chunk-CNXFSE26.mjs +0 -120
- package/dist/chunk-CNXFSE26.mjs.map +0 -1
- package/dist/chunk-NHHZBMJL.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"],"names":["twMerge","clsx","jsxs","Box","jsx","Tooltip","DialogMui","DialogTitle","DialogContent","DialogActions"],"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(--color-primary)`.\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(--color-primary)\",\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\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**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 } 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={{ backdrop: { sx: backdropStyle } }}\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"]}
|
|
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"]}
|
package/dist/ui/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { card_default as Card, dialog_default as Dialog } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { card_default as Card, data_table_default as DataTable, dialog_default as Dialog, Tab, Tabs } from '../chunk-XNWAGZVV.mjs';
|
|
2
|
+
import '../chunk-4DIPDYEU.mjs';
|
|
3
3
|
//# sourceMappingURL=index.mjs.map
|
|
4
4
|
//# sourceMappingURL=index.mjs.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@grazziotin/react-components-next",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "Biblioteca de componentes React reutilizáveis",
|
|
5
5
|
"private": false,
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -60,6 +60,7 @@
|
|
|
60
60
|
"@mantine/core": "^9.2.1",
|
|
61
61
|
"@mantine/hooks": "^9.2.1",
|
|
62
62
|
"@mui/material": "^9.0.1",
|
|
63
|
+
"@mui/x-data-grid": "^9.4.0",
|
|
63
64
|
"clsx": "^2.1.1",
|
|
64
65
|
"next": "^15.5.18",
|
|
65
66
|
"react": ">=18.0.0",
|
|
@@ -89,8 +90,6 @@
|
|
|
89
90
|
"eslint-plugin-prettier": "^5.5.5",
|
|
90
91
|
"eslint-plugin-storybook": "^10.4.0",
|
|
91
92
|
"playwright": "^1.60.0",
|
|
92
|
-
"postcss-preset-mantine": "^1.18.0",
|
|
93
|
-
"postcss-simple-vars": "^7.0.1",
|
|
94
93
|
"prettier": "^3.8.3",
|
|
95
94
|
"storybook": "^10.4.0",
|
|
96
95
|
"tailwindcss": "^4",
|
package/dist/chunk-CNXFSE26.mjs
DELETED
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import { __spreadValues, cn } from './chunk-NHHZBMJL.mjs';
|
|
2
|
-
import { Box } from '@mui/material';
|
|
3
|
-
import { Tooltip } from '@mantine/core';
|
|
4
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
|
-
import DialogMui from '@mui/material/Dialog';
|
|
6
|
-
import DialogTitle from '@mui/material/DialogTitle';
|
|
7
|
-
import DialogActions from '@mui/material/DialogActions';
|
|
8
|
-
import DialogContent from '@mui/material/DialogContent';
|
|
9
|
-
|
|
10
|
-
function Card({
|
|
11
|
-
margin,
|
|
12
|
-
onClick,
|
|
13
|
-
title,
|
|
14
|
-
toolTip,
|
|
15
|
-
className,
|
|
16
|
-
borderTitle,
|
|
17
|
-
children,
|
|
18
|
-
borderRadius,
|
|
19
|
-
width = "100%",
|
|
20
|
-
height = "auto",
|
|
21
|
-
titleWidth = "100%",
|
|
22
|
-
justifyContent = "space-between",
|
|
23
|
-
titleColor = "var(--color-primary)",
|
|
24
|
-
icon
|
|
25
|
-
}) {
|
|
26
|
-
return /* @__PURE__ */ jsxs(
|
|
27
|
-
Box,
|
|
28
|
-
{
|
|
29
|
-
onClick,
|
|
30
|
-
className: cn(className, "text-sm!"),
|
|
31
|
-
sx: __spreadValues({
|
|
32
|
-
width,
|
|
33
|
-
margin,
|
|
34
|
-
height,
|
|
35
|
-
borderRadius,
|
|
36
|
-
"@media (max-width: 768px)": { width: "100%" },
|
|
37
|
-
boxShadow: "0 0.15rem 0.5rem rgba(0, 0, 0, 0.16)"
|
|
38
|
-
}, onClick && { cursor: "pointer !important" }),
|
|
39
|
-
children: [
|
|
40
|
-
/* @__PURE__ */ jsxs(
|
|
41
|
-
Box,
|
|
42
|
-
{
|
|
43
|
-
sx: {
|
|
44
|
-
justifyContent,
|
|
45
|
-
height: "24px",
|
|
46
|
-
color: "white",
|
|
47
|
-
display: "flex",
|
|
48
|
-
width: titleWidth,
|
|
49
|
-
overflow: "hidden",
|
|
50
|
-
padding: "0px 15px",
|
|
51
|
-
alignItems: "center",
|
|
52
|
-
flexDirection: "row",
|
|
53
|
-
borderRadius: borderTitle,
|
|
54
|
-
backgroundColor: titleColor
|
|
55
|
-
},
|
|
56
|
-
children: [
|
|
57
|
-
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 font-semibold! truncate!", children: /* @__PURE__ */ jsx(
|
|
58
|
-
Tooltip,
|
|
59
|
-
{
|
|
60
|
-
withArrow: true,
|
|
61
|
-
radius: "md",
|
|
62
|
-
label: title,
|
|
63
|
-
arrowSize: 6,
|
|
64
|
-
position: "top",
|
|
65
|
-
arrowOffset: 15,
|
|
66
|
-
disabled: !toolTip,
|
|
67
|
-
color: titleColor,
|
|
68
|
-
classNames: { tooltip: "text-xs!" },
|
|
69
|
-
offset: { mainAxis: 11, crossAxis: -21 },
|
|
70
|
-
transitionProps: { transition: "fade", duration: 100 },
|
|
71
|
-
children: /* @__PURE__ */ jsx("span", { className: "block! truncate!", children: title })
|
|
72
|
-
}
|
|
73
|
-
) }),
|
|
74
|
-
/* @__PURE__ */ jsx("div", { children: icon })
|
|
75
|
-
]
|
|
76
|
-
}
|
|
77
|
-
),
|
|
78
|
-
children
|
|
79
|
-
]
|
|
80
|
-
}
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
var card_default = Card;
|
|
84
|
-
|
|
85
|
-
// src/components/ui/dialog/utils/constants.ts
|
|
86
|
-
var DIALOG_BACKDROP_STYLE = {
|
|
87
|
-
backdropFilter: "blur(4px)",
|
|
88
|
-
backgroundColor: "rgba(0, 0, 0, 0.5)"
|
|
89
|
-
};
|
|
90
|
-
function Dialog({
|
|
91
|
-
open,
|
|
92
|
-
title,
|
|
93
|
-
onClose,
|
|
94
|
-
actions,
|
|
95
|
-
children,
|
|
96
|
-
maxWidth,
|
|
97
|
-
blurBackdrop = false
|
|
98
|
-
}) {
|
|
99
|
-
const backdropStyle = blurBackdrop ? DIALOG_BACKDROP_STYLE : {};
|
|
100
|
-
return /* @__PURE__ */ jsxs(
|
|
101
|
-
DialogMui,
|
|
102
|
-
{
|
|
103
|
-
fullWidth: true,
|
|
104
|
-
open,
|
|
105
|
-
onClose,
|
|
106
|
-
maxWidth,
|
|
107
|
-
slotProps: { backdrop: { sx: backdropStyle } },
|
|
108
|
-
children: [
|
|
109
|
-
title && /* @__PURE__ */ jsx(DialogTitle, { children: /* @__PURE__ */ jsx("p", { className: "text-sm font-semibold text-black-de", children: title }) }),
|
|
110
|
-
/* @__PURE__ */ jsx(DialogContent, { className: "text-black", children }),
|
|
111
|
-
actions && /* @__PURE__ */ jsx(DialogActions, { children: actions })
|
|
112
|
-
]
|
|
113
|
-
}
|
|
114
|
-
);
|
|
115
|
-
}
|
|
116
|
-
var dialog_default = Dialog;
|
|
117
|
-
|
|
118
|
-
export { card_default, dialog_default };
|
|
119
|
-
//# sourceMappingURL=chunk-CNXFSE26.mjs.map
|
|
120
|
-
//# sourceMappingURL=chunk-CNXFSE26.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ui/card/index.tsx","../src/components/ui/dialog/utils/constants.ts","../src/components/ui/dialog/index.tsx"],"names":["jsxs","jsx"],"mappings":"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","file":"chunk-CNXFSE26.mjs","sourcesContent":["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(--color-primary)`.\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(--color-primary)\",\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\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**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 } 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={{ backdrop: { sx: backdropStyle } }}\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"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/functions/cn/cn.ts","../src/functions/nvl/nvl.ts","../src/core/remove-digits.ts","../src/functions/format-cpf-cnpj/format-cpf-cnpj.ts","../src/functions/format-phone-br/format-phone-br.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAIO,SAAS,MAAM,MAAA,EAA8B;AAClD,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;;;ACIO,SAAS,GAAA,CAAO,OAA6B,YAAA,EAAoB;AACtE,EAAA,OAAO,KAAA,IAAA,IAAA,GAAA,KAAA,GAAS,YAAA;AAClB;;;ACXO,SAAS,aAAa,KAAA,EAAuB;AAClD,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAChC;;;ACOO,SAAS,cAAc,IAAA,EAAuB;AACnD,EAAA,IAAI,CAAC,MAAM,OAAO,EAAA;AAClB,EAAA,MAAM,KAAA,GAAQ,aAAa,IAAI,CAAA;AAE/B,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AACnB,EAAA,IAAI,KAAA,CAAM,UAAU,EAAA,EAAI;AACtB,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAC7B,IAAA,OAAO,GAAA,CACJ,OAAA,CAAQ,aAAA,EAAe,OAAO,CAAA,CAC9B,OAAA,CAAQ,aAAA,EAAe,OAAO,CAAA,CAC9B,OAAA,CAAQ,mBAAA,EAAqB,OAAO,CAAA;AAAA,EACzC;AAEA,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAC9B,EAAA,OAAO,IAAA,CACJ,OAAA,CAAQ,cAAA,EAAgB,OAAO,EAC/B,OAAA,CAAQ,uBAAA,EAAyB,UAAU,CAAA,CAC3C,QAAQ,eAAA,EAAiB,QAAQ,CAAA,CACjC,OAAA,CAAQ,eAAe,OAAO,CAAA;AACnC;;;ACnBO,SAAS,cAAc,KAAA,EAAwB;AACpD,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AACnB,EAAA,MAAM,SAAS,YAAA,CAAa,KAAK,CAAA,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA;AAE9C,EAAA,IAAI,CAAC,QAAQ,OAAO,EAAA;AACpB,EAAA,IAAI,MAAA,CAAO,MAAA,IAAU,CAAA,EAAG,OAAO,MAAA;AAC/B,EAAA,IAAI,MAAA,CAAO,UAAU,CAAA,EAAG;AACtB,IAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,cAAA,EAAgB,SAAS,CAAA;AAAA,EACjD;AACA,EAAA,IAAI,MAAA,CAAO,UAAU,EAAA,EAAI;AACvB,IAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,qBAAA,EAAuB,YAAY,CAAA;AAAA,EAC3D;AACA,EAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,qBAAA,EAAuB,YAAY,CAAA;AAC3D","file":"chunk-NHHZBMJL.mjs","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","/**\r\n * Função NVL (Null Value Logic) - retorna valor padrão se o valor for null/undefined\r\n * @param {T | null | undefined} value - Valor a ser verificado\r\n * @param {T} defaultValue - Valor padrão a ser retornado se value for null/undefined\r\n * @returns {T} Value se não for null/undefined, senão defaultValue\r\n * @template T - Tipo do valor\r\n * @example\r\n * nvl(null, 'padrão') // Retorna: 'padrão'\r\n * nvl('valor', 'padrão') // Retorna: 'valor'\r\n */\r\nexport function nvl<T>(value: T | null | undefined, defaultValue: T): T {\r\n return value ?? defaultValue;\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","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"]}
|