@giro-ds/react 7.0.0 → 9.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/index.d.ts CHANGED
@@ -3,6 +3,7 @@ import React__default, { ReactNode, ReactElement, ComponentPropsWithoutRef, CSSP
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  import { Matcher } from 'react-day-picker';
5
5
  import { RowData, ColumnDef } from '@tanstack/react-table';
6
+ export { ColumnDef as TableColumnDefinition, createColumnHelper as createTableColumnHelper } from '@tanstack/react-table';
6
7
  import { Toast as Toast$1 } from 'radix-ui';
7
8
 
8
9
  /** Tamanho do componente: 'sm' (pequeno) ou 'lg' (grande) */
@@ -522,25 +523,27 @@ interface DrawerProps extends BaseProps {
522
523
  closeOnEscape?: boolean;
523
524
  /** Classe CSS opcional */
524
525
  className?: string;
526
+ /** Conteúdo fixo exibido abaixo da área rolável, sem acompanhar o scroll */
527
+ footer?: ReactNode;
525
528
  }
526
529
 
527
530
  declare const Drawer: React__default.FC<DrawerProps>;
528
531
 
529
532
  interface FilterItem$2 {
530
- id?: string;
533
+ id?: BaseProps['id'];
531
534
  text: string;
532
535
  subText?: string;
533
536
  icon?: ReactNode;
534
- disabled?: boolean;
537
+ disabled?: BaseProps['disabled'];
535
538
  }
536
- type FilterType = 'text' | 'checkbox' | 'icon' | 'calendar';
539
+ type FilterType = 'single' | 'multiple' | 'calendar';
537
540
  /**
538
541
  * Props do componente Filter
539
542
  * @example
540
543
  * ```tsx
541
544
  * <Filter
542
545
  * items={filterItems}
543
- * type="checkbox"
546
+ * type="multiple"
544
547
  * placeholder="Filtrar por categoria"
545
548
  * onApplyFilter={(ids) => handleFilter(ids)}
546
549
  * buttonText="Filtros"
@@ -598,7 +601,27 @@ interface FilterProps extends BaseProps {
598
601
  /** Idioma do calendário */
599
602
  locale?: Locale;
600
603
  /** Classe CSS opcional */
601
- className?: string;
604
+ className?: BaseProps['className'];
605
+ /**
606
+ * Modo de exibição do filtro
607
+ * - `'simple'`: filtro simples com popover (padrão)
608
+ * - `'combined'`: filtro combinado com painel lateral onde o conteúdo é composto via children
609
+ */
610
+ mode?: 'simple' | 'combined';
611
+ /** Largura do painel lateral no modo combined (ex: '400px', '50vw'). Quando omitido, usa o tamanho padrão do Drawer */
612
+ drawerWidth?: string;
613
+ /** Título do painel lateral (padrão: 'Filtrar') */
614
+ title?: string;
615
+ /** Número de filtros ativos exibido como badge no botão */
616
+ activeCount?: number;
617
+ /** Conteúdo customizado no cabeçalho do Drawer */
618
+ drawerHeaderContent?: ReactNode;
619
+ /** Conteúdo do painel lateral no modo combined */
620
+ children?: ReactNode;
621
+ /** Callback ao aplicar no modo combined: () => void */
622
+ onApply?: () => void;
623
+ /** Callback ao limpar no modo combined: () => void */
624
+ onClear?: () => void;
602
625
  }
603
626
 
604
627
  declare const Filter: React__default.FC<FilterProps>;
@@ -973,6 +996,18 @@ interface SearchProps extends BaseProps, NativeInputProps {
973
996
  onClick?: (e: React$1.MouseEvent<HTMLDivElement>) => void;
974
997
  /** Callback executado ao pressionar mouse no componente: (e) => void */
975
998
  onMouseDown?: (e: React$1.MouseEvent<HTMLDivElement>) => void;
999
+ /**
1000
+ * Modo de pesquisa:
1001
+ * - `'instant'` (padrão): dispara a busca a cada tecla digitada
1002
+ * - `'on-enter'`: dispara a busca somente ao pressionar Enter
1003
+ */
1004
+ searchMode?: 'instant' | 'on-enter';
1005
+ /**
1006
+ * Callback executado quando a busca é acionada.
1007
+ * - No modo `'instant'`: chamado a cada mudança de valor
1008
+ * - No modo `'on-enter'`: chamado somente ao pressionar Enter
1009
+ */
1010
+ onSearch?: (value: string) => void;
976
1011
  /** ID para testes automatizados */
977
1012
  'data-testid'?: string;
978
1013
  /** Classe CSS opcional */
@@ -1166,7 +1201,7 @@ interface BaseFilterItem$1 {
1166
1201
  tooltip?: string;
1167
1202
  }
1168
1203
  interface CheckboxFilterItem$1 extends BaseFilterItem$1 {
1169
- type: 'checkbox' | 'text' | 'icon';
1204
+ type: 'multiple' | 'single';
1170
1205
  items: FilterItem$2[];
1171
1206
  selectedIds?: string[];
1172
1207
  onSelectionChange?: (selectedIds: string[]) => void;
@@ -1238,12 +1273,12 @@ interface BaseFilterItem {
1238
1273
  onToggle?: (isOpen: boolean) => void;
1239
1274
  }
1240
1275
  /**
1241
- * Props de filtro do tipo checkbox, texto ou ícone.
1276
+ * Props de filtro do tipo multiple, single ou ícone.
1242
1277
  * Renderiza uma lista de opções selecionáveis.
1243
1278
  */
1244
1279
  interface CheckboxFilterItem extends BaseFilterItem {
1245
1280
  /** Tipo do filtro */
1246
- type: 'checkbox' | 'text' | 'icon';
1281
+ type: 'multiple' | 'single';
1247
1282
  /** Lista de itens disponíveis para seleção */
1248
1283
  items: FilterItem$2[];
1249
1284
  /** IDs dos itens atualmente selecionados */
@@ -1277,21 +1312,57 @@ interface CalendarFilterItem extends BaseFilterItem {
1277
1312
  /** Placeholder exibido quando nenhuma data está selecionada */
1278
1313
  placeholder?: string;
1279
1314
  }
1315
+ /**
1316
+ * Props de filtro do tipo combined.
1317
+ * Abre um painel lateral (Drawer) com conteúdo composto via children.
1318
+ */
1319
+ interface CombinedFilterItem extends BaseFilterItem {
1320
+ /** Tipo do filtro */
1321
+ type: 'combined';
1322
+ /** Título do painel lateral (padrão: 'Filtrar') */
1323
+ title?: string;
1324
+ /** Largura do painel lateral (ex: '400px', '50vw') */
1325
+ drawerWidth?: string;
1326
+ /** Número de filtros ativos exibido como badge no botão */
1327
+ activeCount?: number;
1328
+ /** Conteúdo customizado no cabeçalho do Drawer */
1329
+ drawerHeaderContent?: ReactNode;
1330
+ /** Conteúdo do painel lateral */
1331
+ children?: ReactNode;
1332
+ /** Callback ao clicar em Aplicar */
1333
+ onApply?: () => void;
1334
+ /** Callback ao clicar em Limpar */
1335
+ onClear?: () => void;
1336
+ /** Variante visual do botão (padrão: 'outlined') */
1337
+ variant?: Variant;
1338
+ }
1280
1339
  /**
1281
1340
  * Union type representando um item de filtro da tabela.
1282
- * Pode ser do tipo checkbox/texto/ícone ou calendário.
1341
+ * Pode ser do tipo multiple/single, calendário ou combined (Drawer).
1283
1342
  */
1284
- type FilterItem = CheckboxFilterItem | CalendarFilterItem;
1343
+ type FilterItem = CheckboxFilterItem | CalendarFilterItem | CombinedFilterItem;
1285
1344
  /**
1286
1345
  * Props do cabeçalho do TableV2, com busca global e filtros.
1287
1346
  */
1288
1347
  interface TableV2HeaderProps {
1289
1348
  /** Placeholder do campo de busca global */
1290
1349
  searchPlaceholder?: string;
1291
- /** Exibe o campo de busca (padrão: true) */
1292
- showSearch?: boolean;
1293
1350
  /** Items de filtro (Status, Data de início, etc.) */
1294
1351
  filterItems?: FilterItem[];
1352
+ /** Modo de busca: 'instant' chama onSearchChange a cada tecla; 'on-enter' chama apenas ao pressionar Enter (padrão) */
1353
+ searchMode?: 'instant' | 'on-enter';
1354
+ /**
1355
+ * Valor controlado do campo de busca.
1356
+ * Permite que o pai redefina o texto exibido no campo (ex: ao limpar filtros).
1357
+ */
1358
+ searchValue?: string;
1359
+ /**
1360
+ * Callback chamado quando o valor da busca é confirmado.
1361
+ * A presença deste callback é o que exibe o campo de busca —
1362
+ * quando não fornecido, o campo de busca não é renderizado.
1363
+ * A paginação é automaticamente resetada para a página 1 ao buscar.
1364
+ */
1365
+ onSearchChange?: (value: string) => void;
1295
1366
  }
1296
1367
  /**
1297
1368
  * Props do rodapé do TableV2, com controles de paginação.
@@ -1307,6 +1378,14 @@ interface TableV2FooterProps {
1307
1378
  onPageChange?: (page: number) => void;
1308
1379
  /** Callback chamado quando o tamanho da página muda */
1309
1380
  onPageSizeChange?: (pageSize: number) => void;
1381
+ /**
1382
+ * Página atual (1-based) para controle externo da paginação.
1383
+ * Quando fornecido, sincroniza o estado interno com este valor,
1384
+ * permitindo que o pai redefina a página — por exemplo, ao aplicar
1385
+ * um filtro externo que deva redefinir para a página 1.
1386
+ * Funciona tanto no modo client-side quanto no modo `manualPagination`.
1387
+ */
1388
+ currentPage?: number;
1310
1389
  }
1311
1390
  /**
1312
1391
  * Props para personalização do estado vazio da tabela.
@@ -1319,6 +1398,27 @@ interface EmptyStateProps {
1319
1398
  /** Texto descritivo exibido no estado vazio */
1320
1399
  emptyText?: ReactNode;
1321
1400
  }
1401
+ /**
1402
+ * Props de configuração de seleção de linhas do TableV2.
1403
+ */
1404
+ interface TableV2RowSelectionProps<T = Record<string, unknown>> {
1405
+ /**
1406
+ * Keys das linhas selecionadas (modo controlado).
1407
+ * Quando fornecido, o componente não gerencia o estado de seleção internamente —
1408
+ * o pai é responsável por atualizar este array via `onRowChange`.
1409
+ */
1410
+ selectedRowKeys?: (string | number)[];
1411
+ /**
1412
+ * Desabilita a seleção de uma linha específica.
1413
+ * Pode ser um booleano global ou uma função chamada por linha.
1414
+ */
1415
+ disabled?: boolean | ((row: T, index: number) => boolean);
1416
+ /** Callback chamado quando a seleção de linhas muda.
1417
+ * Recebe os dados das linhas selecionadas e suas keys (índices). */
1418
+ onRowChange?: (selectedRows: T[], selectedKeys: (string | number)[]) => void;
1419
+ /** Desabilita o checkbox "selecionar todos" */
1420
+ disableSelectAll?: boolean;
1421
+ }
1322
1422
  /**
1323
1423
  * Definição de uma ação em massa disponível na barra de seleção.
1324
1424
  */
@@ -1354,7 +1454,7 @@ interface TableV2BulkActionsProps<T = Record<string, unknown>> {
1354
1454
  * columns={columns}
1355
1455
  * data={data}
1356
1456
  * enableSorting
1357
- * enableRowSelection
1457
+ * rowSelection={{ onRowChange: (rows, keys) => console.log(rows, keys) }}
1358
1458
  * loading={isLoading}
1359
1459
  * />
1360
1460
  * ```
@@ -1364,14 +1464,21 @@ interface TableV2Props<T = Record<string, unknown>> extends EmptyStateProps {
1364
1464
  columns: ColumnDef<T, any>[];
1365
1465
  /** Dados exibidos na tabela */
1366
1466
  data: T[];
1367
- /** Habilita filtros individuais por coluna no <th> */
1368
- enableFilters?: boolean;
1369
- /** Habilita seleção de linhas via checkbox */
1370
- enableRowSelection?: boolean;
1467
+ /**
1468
+ * Configuração de seleção de linhas via checkbox.
1469
+ * A presença deste objeto habilita a seleção. Use `disabled` para controlar
1470
+ * linhas específicas e `onRowChange` para reagir às mudanças.
1471
+ * @example
1472
+ * ```tsx
1473
+ * rowSelection={{
1474
+ * disabled: (row) => row.status !== 'pronto_para_fechar',
1475
+ * onRowChange: (rows, keys) => handleRowChange(rows, keys),
1476
+ * }}
1477
+ * ```
1478
+ */
1479
+ rowSelection?: TableV2RowSelectionProps<T>;
1371
1480
  /** Habilita ordenação de colunas ao clicar no cabeçalho */
1372
1481
  enableSorting?: boolean;
1373
- /** Callback chamado quando a seleção de linhas muda */
1374
- onRowSelectionChange?: (selectedRows: T[]) => void;
1375
1482
  /** Configuração das ações em massa exibidas quando há linhas selecionadas */
1376
1483
  bulkActions?: TableV2BulkActionsProps<T>;
1377
1484
  /** Header acima da tabela com busca + filtros */
@@ -1390,7 +1497,7 @@ interface TableV2Props<T = Record<string, unknown>> extends EmptyStateProps {
1390
1497
  };
1391
1498
  }
1392
1499
 
1393
- declare const TableV2: <T>({ columns, data, enableFilters, enableRowSelection, enableSorting, onRowSelectionChange, bulkActions, header, footer, loading, emptyIcon, emptyTitle, emptyText, onRow, className, }: TableV2Props<T>) => react_jsx_runtime.JSX.Element;
1500
+ declare const TableV2: <T>({ columns, data, rowSelection: rowSelectionConfig, enableSorting, bulkActions, header, footer, loading, emptyIcon, emptyTitle, emptyText, onRow, className, }: TableV2Props<T>) => react_jsx_runtime.JSX.Element;
1394
1501
 
1395
1502
  /**
1396
1503
  * Props do componente TextArea