@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.
- package/dist/components/table/table/table.examples.d.ts +1 -0
- package/dist/components/table/tableBody/tableBody.d.ts +1 -1
- package/dist/components/table/tableBody/tableBody.types.d.ts +6 -1
- package/dist/locales/description.d.ts +2 -1
- package/dist/locales/es.d.ts +1 -0
- package/dist/producteca-ui-kit.es.js +45 -9
- package/dist/producteca-ui-kit.umd.js +4 -4
- package/dist/style.css +1 -1
- package/package.json +1 -1
|
@@ -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,
|
|
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
|
-
|
|
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`.
|
|
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";
|
package/dist/locales/es.d.ts
CHANGED
|
@@ -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\`.
|
|
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
|
-
###
|
|
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
|
-
|
|
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,
|
|
77230
|
+
const TableBody = ({ data, isLoading, error: error2, empty, success: success2 }) => {
|
|
77205
77231
|
const columns = useContext(TableContext);
|
|
77206
|
-
|
|
77207
|
-
|
|
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];
|