@producteca/producteca-ui-kit 1.69.0 → 1.70.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.
@@ -9,4 +9,5 @@ interface SampleRow {
9
9
  }
10
10
  export declare const sampleData: SampleRow[];
11
11
  export declare const TableDefaultExample: () => import("react/jsx-runtime").JSX.Element;
12
+ export declare const TableWithAsyncContentExample: () => import("react/jsx-runtime").JSX.Element;
12
13
  export {};
@@ -1,3 +1,3 @@
1
1
  import { TableBodyProps } from './tableBody.types';
2
2
 
3
- export declare const TableBody: <T>({ data, emptyMessage }: TableBodyProps<T>) => import("react/jsx-runtime").JSX.Element;
3
+ export declare const TableBody: <T>({ data, isLoading, error, empty, success }: TableBodyProps<T>) => import("react/jsx-runtime").JSX.Element;
@@ -1,4 +1,9 @@
1
+ import { AsyncContentErrorProps, AsyncContentEmptyProps, AsyncContentSuccessProps } from '../../patterns/asyncContent';
2
+
1
3
  export interface TableBodyProps<T> {
2
4
  data: T[];
3
- emptyMessage?: string;
5
+ isLoading?: boolean;
6
+ error?: AsyncContentErrorProps;
7
+ empty?: Omit<AsyncContentEmptyProps, 'items'>;
8
+ success?: AsyncContentSuccessProps;
4
9
  }
@@ -48,7 +48,8 @@ export declare const emptyStateExample = "\n## Uso del componente\n\nEl componen
48
48
  export declare const asyncContentExample = "\n## Uso del componente\n\nEl componente `AsyncContent` maneja los estados de una operaci\u00F3n as\u00EDncrona deriv\u00E1ndolos de las props `isLoading`, `error` y `empty`. La prioridad es: `isLoading` \u2192 `error.value` \u2192 `empty.items` vac\u00EDo \u2192 `success`. Muestra el contenido solo en `success`.\n\n### Ejemplo b\u00E1sico:\n\n```tsx\n<AsyncContent\n isLoading={isLoading}\n error={{\n value: hasError,\n text: 'Ocurri\u00F3 un error',\n actionText: 'Reintentar',\n onClick: () => refetch(),\n }}\n empty={{\n items,\n text: 'No hay datos',\n }}\n>\n <div>Contenido cuando hay datos disponibles</div>\n</AsyncContent>\n```\n";
49
49
  export declare const tooltipExample = "\n## Uso del componente\n\nLos componentes de tooltip (`WithTooltip`, `WithOverflowTooltip`) muestran un mensaje al hacer hover o click. `WithOverflowTooltip` solo muestra el tooltip cuando el contenido se desborda.\n\n### Ejemplo b\u00E1sico:\n\n```tsx\n<WithTooltip content=\"Texto del tooltip\" placement=\"top\">\n <span>Hover sobre m\u00ED</span>\n</WithTooltip>\n```\n\n### Solo si hay overflow:\n\n```tsx\n<WithOverflowTooltip maxWidth=\"200px\">\n <span>Texto que puede truncarse...</span>\n</WithOverflowTooltip>\n```\n";
50
50
  export declare const tableHeaderExample = "\n## Uso del componente\n\n`Table.Header` renderiza el encabezado de la tabla. Lee las columnas del contexto provisto por `Table`. Opcionalmente acepta `columns` como prop para sobrescribir el contexto.\n\n### Usando el contexto de Table (recomendado):\n\n```tsx\nconst columns: TableColumn<MyRow>[] = [\n { key: 'name', header: 'Nombre' },\n { key: 'status', header: 'Estado', sx: { textAlign: 'center' } },\n { key: 'price', header: 'Precio', sx: { textAlign: 'right', width: 100 } },\n]\n\n<Table columns={columns}>\n <Table.Header />\n</Table>\n```\n\n### Pasando columns directamente como prop:\n\n```tsx\n<Table columns={columns}>\n <Table.Header columns={customColumns} />\n</Table>\n```\n";
51
- export declare const tableBodyExample = "\n## Uso del componente\n\n`Table.Body` renderiza las filas de datos. Lee las columnas del contexto provisto por `Table`. Cuando `data` est\u00E1 vac\u00EDo muestra un `EmptyState` con `emptyMessage`.\n\n### Ejemplo b\u00E1sico:\n\n```tsx\n<Table columns={columns}>\n <Table.Body data={rows} />\n</Table>\n```\n\n### Estado vac\u00EDo personalizado:\n\n```tsx\n<Table columns={columns}>\n <Table.Body\n data={[]}\n emptyMessage=\"No encontramos resultados para tu b\u00FAsqueda\"\n />\n</Table>\n```\n";
51
+ export declare const tableBodyExample = "\n## Uso del componente\n\n`Table.Body` renderiza las filas de datos. Lee las columnas del contexto provisto por `Table`. Integra `AsyncContent` internamente, por lo que acepta las props de estado (`isLoading`, `error`, `empty`, `success`) para mostrar el loader, el error o el estado vac\u00EDo dentro de la tabla.\n\n### Ejemplo b\u00E1sico:\n\n```tsx\n<Table columns={columns}>\n <Table.Body data={rows} />\n</Table>\n```\n\n### Con estados as\u00EDncronos:\n\n```tsx\n<Table columns={columns}>\n <Table.Header />\n <Table.Body\n data={rows}\n isLoading={isLoading}\n empty={{ text: 'No hay datos', actionText: 'Cargar', onClick: loadData }}\n />\n</Table>\n```\n";
52
52
  export declare const tableExample = "\n## Uso del componente\n\nEl componente `Table` es un contenedor compuesto. Recibe `columns` y los distribuye por contexto a `Table.Header` y `Table.Body`, accesibles por dot-notation.\n\n### Ejemplo b\u00E1sico:\n\n```tsx\n<Table columns={columns}>\n <Table.Header />\n <Table.Body data={rows} />\n</Table>\n```\n\n### Definici\u00F3n de columnas:\n\n```tsx\nconst columns: TableColumn<MyRow>[] = [\n { key: 'name', header: 'Nombre' },\n { key: 'status', header: 'Estado', sx: { textAlign: 'center' } },\n {\n key: 'actions',\n header: 'Acciones',\n sx: { width: 80 },\n render: (row) => <Button label=\"Editar\" onClick={() => edit(row)} />,\n },\n]\n```\n";
53
+ export declare const tableAsyncContentExample = "\n`Table.Body` integra `AsyncContent` internamente: recibe las mismas props de estado (`isLoading`, `error`, `empty`, `success`) y resuelve el loader, el error y el estado vac\u00EDo **dentro** de la tabla, sin desmontar el `Table.Header`.\n\nEl estado vac\u00EDo se deriva de `data` (no hace falta pasar `items`). Cuando hay filas y no hay carga/error, se renderizan las filas normalmente.\n\n### Ejemplo:\n\n```tsx\n<Table columns={columns}>\n <Table.Header />\n <Table.Body\n data={rows}\n isLoading={isLoading}\n empty={{\n text: 'No hay datos disponibles',\n actionText: 'Cargar datos',\n onClick: loadData,\n }}\n />\n</Table>\n```\n";
53
54
  export declare const spinnerExample = "\n## Uso del componente\n\nEl componente `Spinner` muestra un indicador de carga. Acepta `size` (`xs`, `sm`, `md`, `lg`).\n\n### Ejemplo b\u00E1sico:\n\n```tsx\n<Spinner size=\"md\" />\n```\n";
54
55
  export declare const maintenanceExample = "\n## Uso del componente\n\nEl componente `Maintenance` muestra una vista de p\u00E1gina completa para indicar que el sistema est\u00E1 en mantenimiento. Acepta `title`, `description` y `subtitle` opcionales con valores por defecto en espa\u00F1ol.\n\n### Ejemplo b\u00E1sico:\n\n```tsx\n<Maintenance />\n```\n\n### Con contenido personalizado:\n\n```tsx\n<Maintenance\n title=\"Estamos mejorando\"\n description=\"Estamos haciendo algunos ajustes para brindarte una mejor experiencia.\"\n subtitle=\"Volvemos en unos minutos.\"\n/>\n```\n";
@@ -245,6 +245,7 @@ declare const _default: {
245
245
  };
246
246
  table: {
247
247
  example: string;
248
+ asyncContent: string;
248
249
  };
249
250
  tableHeader: {
250
251
  example: string;
@@ -19807,7 +19807,7 @@ const columns: TableColumn<MyRow>[] = [
19807
19807
  const tableBodyExample = `
19808
19808
  ## Uso del componente
19809
19809
 
19810
- \`Table.Body\` renderiza las filas de datos. Lee las columnas del contexto provisto por \`Table\`. Cuando \`data\` está vacío muestra un \`EmptyState\` con \`emptyMessage\`.
19810
+ \`Table.Body\` renderiza las filas de datos. Lee las columnas del contexto provisto por \`Table\`. Integra \`AsyncContent\` internamente, por lo que acepta las props de estado (\`isLoading\`, \`error\`, \`empty\`, \`success\`) para mostrar el loader, el error o el estado vacío dentro de la tabla.
19811
19811
 
19812
19812
  ### Ejemplo básico:
19813
19813
 
@@ -19817,13 +19817,15 @@ const tableBodyExample = `
19817
19817
  </Table>
19818
19818
  \`\`\`
19819
19819
 
19820
- ### Estado vacío personalizado:
19820
+ ### Con estados asíncronos:
19821
19821
 
19822
19822
  \`\`\`tsx
19823
19823
  <Table columns={columns}>
19824
+ <Table.Header />
19824
19825
  <Table.Body
19825
- data={[]}
19826
- emptyMessage="No encontramos resultados para tu búsqueda"
19826
+ data={rows}
19827
+ isLoading={isLoading}
19828
+ empty={{ text: 'No hay datos', actionText: 'Cargar', onClick: loadData }}
19827
19829
  />
19828
19830
  </Table>
19829
19831
  \`\`\`
@@ -19857,6 +19859,28 @@ const columns: TableColumn<MyRow>[] = [
19857
19859
  ]
19858
19860
  \`\`\`
19859
19861
  `;
19862
+ const tableAsyncContentExample = `
19863
+ \`Table.Body\` integra \`AsyncContent\` internamente: recibe las mismas props de estado (\`isLoading\`, \`error\`, \`empty\`, \`success\`) y resuelve el loader, el error y el estado vacío **dentro** de la tabla, sin desmontar el \`Table.Header\`.
19864
+
19865
+ El estado vacío se deriva de \`data\` (no hace falta pasar \`items\`). Cuando hay filas y no hay carga/error, se renderizan las filas normalmente.
19866
+
19867
+ ### Ejemplo:
19868
+
19869
+ \`\`\`tsx
19870
+ <Table columns={columns}>
19871
+ <Table.Header />
19872
+ <Table.Body
19873
+ data={rows}
19874
+ isLoading={isLoading}
19875
+ empty={{
19876
+ text: 'No hay datos disponibles',
19877
+ actionText: 'Cargar datos',
19878
+ onClick: loadData,
19879
+ }}
19880
+ />
19881
+ </Table>
19882
+ \`\`\`
19883
+ `;
19860
19884
  const spinnerExample = `
19861
19885
  ## Uso del componente
19862
19886
 
@@ -20135,7 +20159,8 @@ const es$3 = {
20135
20159
  example: spinnerExample
20136
20160
  },
20137
20161
  table: {
20138
- example: tableExample
20162
+ example: tableExample,
20163
+ asyncContent: tableAsyncContentExample
20139
20164
  },
20140
20165
  tableHeader: {
20141
20166
  example: tableHeaderExample
@@ -77199,12 +77224,23 @@ const styles = {
77199
77224
  "header-row": "table-module_header-row_ry6Lv",
77200
77225
  "body-row": "table-module_body-row_OMOX0",
77201
77226
  "header-cell": "table-module_header-cell_0FEWz",
77202
- "body-cell": "table-module_body-cell_p4019"
77227
+ "body-cell": "table-module_body-cell_p4019",
77228
+ "body-async": "table-module_body-async_21Z7L"
77203
77229
  };
77204
- const TableBody = ({ data, emptyMessage }) => {
77230
+ const TableBody = ({ data, isLoading, error: error2, empty, success: success2 }) => {
77205
77231
  const columns = useContext(TableContext);
77206
- if (data.length === 0) {
77207
- return /* @__PURE__ */ jsx$1("tbody", { children: /* @__PURE__ */ jsx$1("tr", { children: /* @__PURE__ */ jsx$1("td", { colSpan: columns.length, children: /* @__PURE__ */ jsx$1(EmptyState, { text: emptyMessage }) }) }) });
77232
+ const showContent = !isLoading && !error2?.value && !success2?.value && data.length > 0;
77233
+ if (!showContent) {
77234
+ return /* @__PURE__ */ jsx$1("tbody", { children: /* @__PURE__ */ jsx$1("tr", { children: /* @__PURE__ */ jsx$1("td", { colSpan: columns.length, className: styles["body-async"], children: /* @__PURE__ */ jsx$1(
77235
+ AsyncContent,
77236
+ {
77237
+ isLoading,
77238
+ error: error2,
77239
+ success: success2,
77240
+ empty: { ...empty, items: data },
77241
+ children: /* @__PURE__ */ jsx$1(Fragment$1, {})
77242
+ }
77243
+ ) }) }) });
77208
77244
  }
77209
77245
  return /* @__PURE__ */ jsx$1("tbody", { children: data.map((row, rowIndex) => /* @__PURE__ */ jsx$1("tr", { className: styles["body-row"], children: columns.map((col) => {
77210
77246
  const value = row[col.key];