@beweco/aurora-ui 1.0.0-beta.135 → 1.0.0-beta.137
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.cjs.js +269 -20
- package/dist/index.esm.js +271 -16
- package/dist/types/components/table/AuraTable.d.ts.map +1 -1
- package/dist/types/components/table/AuraTable.types.d.ts +12 -0
- package/dist/types/components/table/AuraTable.types.d.ts.map +1 -1
- package/dist/types/components/tabs/Tabs.d.ts +65 -0
- package/dist/types/components/tabs/Tabs.d.ts.map +1 -0
- package/dist/types/components/tabs/Tabs.types.d.ts +24 -0
- package/dist/types/components/tabs/Tabs.types.d.ts.map +1 -0
- package/dist/types/components/tabs/index.d.ts +3 -0
- package/dist/types/components/tabs/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.js
CHANGED
|
@@ -8588,9 +8588,9 @@ const SearchInput = ({ searchPlaceholder = "Buscar...", searchIcon = "solar:magn
|
|
|
8588
8588
|
};
|
|
8589
8589
|
|
|
8590
8590
|
/** El indicador ya montado a mano por el consumidor: no se duplica. */
|
|
8591
|
-
function hasIndicator(children) {
|
|
8591
|
+
function hasIndicator$1(children) {
|
|
8592
8592
|
if (Array.isArray(children)) {
|
|
8593
|
-
return children.some(hasIndicator);
|
|
8593
|
+
return children.some(hasIndicator$1);
|
|
8594
8594
|
}
|
|
8595
8595
|
return $8WNJc$react.isValidElement(children) && children.type === react.ListBoxItem.Indicator;
|
|
8596
8596
|
}
|
|
@@ -8626,7 +8626,7 @@ function withItemIndicator(children) {
|
|
|
8626
8626
|
const next = (values) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [render(values), jsxRuntime.jsx(react.ListBoxItem.Indicator, {})] }));
|
|
8627
8627
|
return $8WNJc$react.cloneElement(element, { children: next });
|
|
8628
8628
|
}
|
|
8629
|
-
if (hasIndicator(original)) {
|
|
8629
|
+
if (hasIndicator$1(original)) {
|
|
8630
8630
|
return element;
|
|
8631
8631
|
}
|
|
8632
8632
|
const next = (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [original, jsxRuntime.jsx(react.ListBoxItem.Indicator, {})] }));
|
|
@@ -9276,17 +9276,17 @@ const OWN_SCROLL = new Set([
|
|
|
9276
9276
|
react.Table.ResizableContainer,
|
|
9277
9277
|
]);
|
|
9278
9278
|
/** Identidad por `child.type` contra los objetos reales de HeroUI (mismo patrón que la fachada `Alert`). */
|
|
9279
|
-
function isPart$
|
|
9279
|
+
function isPart$2(node, parts) {
|
|
9280
9280
|
return $8WNJc$react.isValidElement(node) && parts.has(node.type);
|
|
9281
9281
|
}
|
|
9282
9282
|
const TableFacade = ({ children, ...props }) => {
|
|
9283
9283
|
const nodes = $8WNJc$react.Children.toArray(children);
|
|
9284
9284
|
// Sin hijos, o con un contenedor de scroll ya montado a mano: el root tal cual.
|
|
9285
|
-
if (nodes.length === 0 || nodes.some((node) => isPart$
|
|
9285
|
+
if (nodes.length === 0 || nodes.some((node) => isPart$2(node, OWN_SCROLL))) {
|
|
9286
9286
|
return jsxRuntime.jsx(react.Table, { ...props, children: children });
|
|
9287
9287
|
}
|
|
9288
|
-
const scrollable = nodes.filter((node) => !isPart$
|
|
9289
|
-
const outsideScroll = nodes.filter((node) => isPart$
|
|
9288
|
+
const scrollable = nodes.filter((node) => !isPart$2(node, OUTSIDE_SCROLL));
|
|
9289
|
+
const outsideScroll = nodes.filter((node) => isPart$2(node, OUTSIDE_SCROLL));
|
|
9290
9290
|
return (jsxRuntime.jsxs(react.Table, { ...props, children: [jsxRuntime.jsx(react.Table.ScrollContainer, { children: scrollable }), outsideScroll] }));
|
|
9291
9291
|
};
|
|
9292
9292
|
TableFacade.displayName = "Aurora.Table";
|
|
@@ -9316,6 +9316,37 @@ const Table = Object.assign(TableFacade, {
|
|
|
9316
9316
|
SortableColumnHeader: react.Table.SortableColumnHeader,
|
|
9317
9317
|
});
|
|
9318
9318
|
|
|
9319
|
+
/**
|
|
9320
|
+
* Clave de la columna que `AuraTable` marca como identificadora de la fila cuando la app no marca
|
|
9321
|
+
* ninguna — `undefined` si alguna ya lo pide (entonces manda la app) o si no hay columnas.
|
|
9322
|
+
*
|
|
9323
|
+
* EL DEFECTO QUE ESTO CIERRA (medido en `beweosagency`, pantalla `/centers`, 3 apariciones en una
|
|
9324
|
+
* sola carga): react-aria exige al menos una columna con `isRowHeader` y, si no la encuentra,
|
|
9325
|
+
* lanza `A table must have at least one Column with the isRowHeader prop set to true` al construir
|
|
9326
|
+
* la colección (`react-aria-components/dist/private/Table.mjs:145`). `AuraTable` no marcaba
|
|
9327
|
+
* ninguna, así que TODA tabla montada por la vía declarativa lo disparaba. React se recupera
|
|
9328
|
+
* —la guarda pone `columnsDirty = false` ANTES de lanzar, así que el reintento pasa— pero
|
|
9329
|
+
* descarta el render concurrente, repinta la raíz de forma síncrona y deja el error en consola.
|
|
9330
|
+
* La vía compuesta a mano (`Table.Content` + `Table.Column isRowHeader`) nunca estuvo afectada:
|
|
9331
|
+
* ahí la marca la app.
|
|
9332
|
+
*
|
|
9333
|
+
* Lo que se pierde mientras tanto no es solo ruido: sin columna identificadora, NINGUNA celda
|
|
9334
|
+
* recibe `role="rowheader"` (medido: las 3 celdas de la story `Default` salían `gridcell`), o sea
|
|
9335
|
+
* que un lector de pantalla recorre las filas sin poder decir de QUÉ fila habla.
|
|
9336
|
+
*
|
|
9337
|
+
* Por qué la PRIMERA: es lo que ya hace a mano la composición cruda de este repo
|
|
9338
|
+
* (`stories/Table.stories.tsx:123`, `isRowHeader={column.key === "name"}`, que es la primera
|
|
9339
|
+
* columna) y lo que hace la columna identificadora en las tablas de las apps. Una columna con
|
|
9340
|
+
* `isRowHeader: false` cuenta como "no lo pide": react-aria solo mira si el valor es truthy
|
|
9341
|
+
* (`if (node.props.isRowHeader)`, Table.mjs:136), así que `false` y ausente son indistinguibles
|
|
9342
|
+
* para él y tratarlos igual evita que un `false` escrito por costumbre deje la tabla otra vez
|
|
9343
|
+
* sin identificador.
|
|
9344
|
+
*/
|
|
9345
|
+
function defaultRowHeaderKey(columns) {
|
|
9346
|
+
return columns.some((column) => column.isRowHeader)
|
|
9347
|
+
? undefined
|
|
9348
|
+
: columns[0]?.key;
|
|
9349
|
+
}
|
|
9319
9350
|
/**
|
|
9320
9351
|
* AuraTable genérico reutilizable, migrado al `Table` compound de HeroUI v3 (el `Table` de v2 con
|
|
9321
9352
|
* `TableHeader`/`TableColumn`/`TableBody`/`TableRow`/`TableCell` sueltos se elimina).
|
|
@@ -9336,9 +9367,10 @@ const Table = Object.assign(TableFacade, {
|
|
|
9336
9367
|
* no tener la anatomía escrita en dos sitios.
|
|
9337
9368
|
*/
|
|
9338
9369
|
function AuraTable({ columns, items, renderCell, children, className, ...props }) {
|
|
9370
|
+
const rowHeaderKey = defaultRowHeaderKey(columns);
|
|
9339
9371
|
// `removeWrapper`/`radius="none"` de v2 no tienen prop equivalente en v3 (§ver
|
|
9340
9372
|
// AuraTable.types.ts): se aproxima con `rounded-none` directo en el `className` del root.
|
|
9341
|
-
return (jsxRuntime.jsx(Table, { className: `rounded-none ${className ?? ""}`.trim(), children: jsxRuntime.jsxs(Table.Content, { ...props, children: [jsxRuntime.jsx(Table.Header, { columns: columns, children: (column) => (jsxRuntime.jsx(Table.Column, { children: column.label }, column.key)) }), jsxRuntime.jsx(Table.Body, { items: items, children: (item) => (jsxRuntime.jsx(Table.Row, { columns: columns, children: (column) => (jsxRuntime.jsx(Table.Cell, { children: renderCell ? renderCell(item, column.key) : children })) }, item.id)) })] }) }));
|
|
9373
|
+
return (jsxRuntime.jsx(Table, { className: `rounded-none ${className ?? ""}`.trim(), children: jsxRuntime.jsxs(Table.Content, { ...props, children: [jsxRuntime.jsx(Table.Header, { columns: columns, children: (column) => (jsxRuntime.jsx(Table.Column, { isRowHeader: column.isRowHeader || column.key === rowHeaderKey, children: column.label }, column.key)) }), jsxRuntime.jsx(Table.Body, { items: items, children: (item) => (jsxRuntime.jsx(Table.Row, { columns: columns, children: (column) => (jsxRuntime.jsx(Table.Cell, { children: renderCell ? renderCell(item, column.key) : children })) }, item.id)) })] }) }));
|
|
9342
9374
|
}
|
|
9343
9375
|
|
|
9344
9376
|
// TECH-2459 · F3 · G1-forms — v3 divide el `Textarea` monolítico de v2 en `TextField` +
|
|
@@ -14643,18 +14675,18 @@ const OWN_POPOVER = new Set([
|
|
|
14643
14675
|
react.Dropdown.SubmenuTrigger,
|
|
14644
14676
|
]);
|
|
14645
14677
|
/** Identidad por `child.type` contra los objetos reales de HeroUI (patrón de la fachada `Table`). */
|
|
14646
|
-
function isPart(node, parts) {
|
|
14678
|
+
function isPart$1(node, parts) {
|
|
14647
14679
|
return $8WNJc$react.isValidElement(node) && parts.has(node.type);
|
|
14648
14680
|
}
|
|
14649
14681
|
const DropdownFacade = ({ children, ...props }) => {
|
|
14650
14682
|
const nodes = $8WNJc$react.Children.toArray(children);
|
|
14651
|
-
const menus = nodes.filter((node) => isPart(node, INSIDE_POPOVER));
|
|
14683
|
+
const menus = nodes.filter((node) => isPart$1(node, INSIDE_POPOVER));
|
|
14652
14684
|
// Nada que envolver (sin hijos, `children` como función, un popover ya montado a mano, o
|
|
14653
14685
|
// simplemente ningún menú suelto): el root tal cual, byte a byte como el crudo de v3.
|
|
14654
|
-
if (menus.length === 0 || nodes.some((node) => isPart(node, OWN_POPOVER))) {
|
|
14686
|
+
if (menus.length === 0 || nodes.some((node) => isPart$1(node, OWN_POPOVER))) {
|
|
14655
14687
|
return jsxRuntime.jsx(react.Dropdown, { ...props, children: children });
|
|
14656
14688
|
}
|
|
14657
|
-
return (jsxRuntime.jsxs(react.Dropdown, { ...props, children: [nodes.filter((node) => !isPart(node, INSIDE_POPOVER)), jsxRuntime.jsx(react.Dropdown.Popover, { offset: 7, placement: "bottom", children: menus })] }));
|
|
14689
|
+
return (jsxRuntime.jsxs(react.Dropdown, { ...props, children: [nodes.filter((node) => !isPart$1(node, INSIDE_POPOVER)), jsxRuntime.jsx(react.Dropdown.Popover, { offset: 7, placement: "bottom", children: menus })] }));
|
|
14658
14690
|
};
|
|
14659
14691
|
DropdownFacade.displayName = "Aurora.Dropdown";
|
|
14660
14692
|
/**
|
|
@@ -14685,6 +14717,229 @@ const Dropdown = Object.assign(DropdownFacade, {
|
|
|
14685
14717
|
Trigger: react.Dropdown.Trigger,
|
|
14686
14718
|
});
|
|
14687
14719
|
|
|
14720
|
+
// TECH-2459 — Fachada `Tabs` / `Tab`: monta las DOS piezas de la anatomía de v3 que, si la app
|
|
14721
|
+
// se las olvida, dejan la pestaña seleccionada sin distinguir. Hasta ahora `Tabs` y `Tab` eran
|
|
14722
|
+
// reexport crudo de v3 (`src/index.tsx`, bloque `from "@heroui/react"`) y no existía
|
|
14723
|
+
// `src/components/tabs/`: la anatomía entera quedaba a cargo de cada app.
|
|
14724
|
+
//
|
|
14725
|
+
// EL DEFECTO, medido por grep real en los repos de apps (no de memoria):
|
|
14726
|
+
//
|
|
14727
|
+
// | app | `<Tabs>` | `<Tabs.List>` | `<Tabs.ListContainer>` | tabs | `<Tabs.Indicator>` | resultado |
|
|
14728
|
+
// |-------------------|----------|---------------|------------------------|------|--------------------|-----------|
|
|
14729
|
+
// | beweosagency | 5 | 5 | 5 | 14 | **0** | la seleccionada sin píldora |
|
|
14730
|
+
// | backoffice-beweos | 5 | 5 | 5 | 18 | 18 (a mano) | bien |
|
|
14731
|
+
// | beweanalytics | 3 | 3 | 3 | 8 | 8 (a mano) | bien |
|
|
14732
|
+
// | beweossmbs / loginos / linda-business | 0 | 0 | 0 | 0 | 0 | no usan tabs |
|
|
14733
|
+
//
|
|
14734
|
+
// (conteo de tags de APERTURA; beweanalytics escribe `Tab` suelto en vez de `Tabs.Tab`.)
|
|
14735
|
+
// Dos lecturas que salen de esta tabla y que deciden el diseño:
|
|
14736
|
+
// · **26 indicadores montados a mano** contra 14 que faltan. La idempotencia no es un adorno:
|
|
14737
|
+
// sin ella esas 26 pestañas se quedarían con DOS indicadores.
|
|
14738
|
+
// · **`Tabs.List` y `Tabs.ListContainer` van 1:1 en las tres apps**, o sea que hoy NADIE usa la
|
|
14739
|
+
// forma delgada. Garantizar el carril es, para el código que existe hoy, un no-op medido; su
|
|
14740
|
+
// valor es que la próxima pantalla que se escriba no pueda caer en la forma delgada por
|
|
14741
|
+
// descuido.
|
|
14742
|
+
//
|
|
14743
|
+
// Las tres migraciones siguieron la misma guía; dos descubrieron que hacía falta el indicador y
|
|
14744
|
+
// una no, porque **nada en la API obliga a montarlo ni avisa**: compila en verde y se degrada en
|
|
14745
|
+
// silencio. Es el mismo patrón —y el mismo argumento— que ya justificó las fachadas `Table`
|
|
14746
|
+
// (`Table.ScrollContainer` ausente → columnas inalcanzables) y `Dropdown`
|
|
14747
|
+
// (`Dropdown.Popover` ausente → menú en línea).
|
|
14748
|
+
//
|
|
14749
|
+
// El criterio del usuario que lo convierte en trabajo de la librería y no de las apps:
|
|
14750
|
+
// «se supone que solo es llamar al componente dentro de la librería y ya se visualiza correcto;
|
|
14751
|
+
// asegúrate de que las apps no estén metiéndole fixes por separado».
|
|
14752
|
+
//
|
|
14753
|
+
// LAS DOS PIEZAS ESTÁN ACOPLADAS, y por eso la fachada monta las dos o ninguna:
|
|
14754
|
+
//
|
|
14755
|
+
// · `Tabs.Indicator` es quien pinta la píldora del seleccionado. Su CSS es
|
|
14756
|
+
// `.tabs__indicator { absolute start-0 top-0 size-full rounded-3xl bg-segment shadow-surface;
|
|
14757
|
+
// z-index:-1 }` (`@heroui/styles/dist/components/tabs.css:215-228`), y `--segment` es
|
|
14758
|
+
// `var(--white)` en claro y `oklch(39.64% .01 285.93)` (#46464c) en oscuro
|
|
14759
|
+
// (`@heroui/styles/dist/heroui.min.css`).
|
|
14760
|
+
// · `Tabs.ListContainer` es quien pinta el CARRIL sobre el que se ve esa píldora
|
|
14761
|
+
// (`.tabs__list-container { relative bg-default }`, `tabs.css:16-17`, que
|
|
14762
|
+
// `neutralize-v3.css` baja a `--color-default-100` = #f4f4f5 por contraste).
|
|
14763
|
+
// **Una píldora blanca sobre fondo blanco no se ve**, y el número: medido en Storybook, en
|
|
14764
|
+
// claro la píldora queda a **1.00:1** contra la página en la forma delgada y a **1.10:1**
|
|
14765
|
+
// contra el carril en la completa — sin carril lo único que sobrevive de ella es su sombra,
|
|
14766
|
+
// que en oscuro es transparente del todo. Garantizar solo el indicador cambiaría un defecto
|
|
14767
|
+
// por otro. La app que migró en la forma delgada ya lo documentó:
|
|
14768
|
+
// `beweanalytics/src/clientes/ui/pages/clientes.page.tsx:59-67`.
|
|
14769
|
+
//
|
|
14770
|
+
// Y `Tabs.Indicator` va DENTRO de cada `Tab`, nunca en la lista: `TabList` envuelve en
|
|
14771
|
+
// `SharedElementTransition` solo el `CollectionRoot`
|
|
14772
|
+
// (`react-aria-components/dist/private/Tabs.mjs:152`), así que un indicador suelto en la lista
|
|
14773
|
+
// lanza «<SharedElement> must be rendered inside a <SharedElementTransition>» y **la barra entera
|
|
14774
|
+
// desaparece del DOM**. De ahí que la inserción del indicador viva en la fachada del `Tab` y no
|
|
14775
|
+
// en la del root.
|
|
14776
|
+
//
|
|
14777
|
+
// LO QUE ESTA FACHADA NO HACE, y conste para que no se busque: no repone NADA del aspecto de v2
|
|
14778
|
+
// (radios, gap, padding, peso, la pastilla de v2). Eso se hizo en la `beta.132` y se retiró en la
|
|
14779
|
+
// `.133` por decisión del usuario (`.docs/migrate-heroui/DECISIONES.md` §9.1, «el objetivo NO es
|
|
14780
|
+
// identidad de píxel» y, sobre este componente, «a nivel visual debe verse como v3»); el mapa de
|
|
14781
|
+
// las 6 reglas retiradas sigue escrito al final de `src/styles/neutralize-v3.css`. La pieza que
|
|
14782
|
+
// aquí se monta es la de v3 —su propio `SelectionIndicator`, que además anima—, no una imitación
|
|
14783
|
+
// de v2 por CSS: es exactamente lo que la nota de esa retirada señala como la vía buena («la
|
|
14784
|
+
// pastilla de verdad, la que además anima, se tiene montando `Tabs.Indicator`, que es lo que v3
|
|
14785
|
+
// espera»). Lo que cambia es QUIÉN la monta: la librería en vez de cada app.
|
|
14786
|
+
/**
|
|
14787
|
+
* Identidad por `child.type` contra los objetos reales de HeroUI — mismo mecanismo que las
|
|
14788
|
+
* fachadas `Table` y `Dropdown`, y nunca por `displayName` ni por nombre de función (la
|
|
14789
|
+
* minificación los renombra y las piezas de v3 no declaran `displayName`).
|
|
14790
|
+
*
|
|
14791
|
+
* Es FIABLE para detectar lo que la app ya puso porque las apps tienen prohibido importar de
|
|
14792
|
+
* `@heroui/*` (regla de oro de la migración): su única vía para un `Tabs.List`/`Tabs.ListContainer`
|
|
14793
|
+
* es el estático de Aurora, que es **este mismo objeto** (los estáticos de abajo apuntan a los de
|
|
14794
|
+
* HeroUI, no a copias). El mismo argumento vale para el indicador, que tiene su propia función
|
|
14795
|
+
* (`hasIndicator`, más abajo) porque ahí además hay que descender por los Fragments.
|
|
14796
|
+
*
|
|
14797
|
+
* Se declara como predicado de tipo —y no `boolean` como en `Dropdown`— porque el mapeo en sitio
|
|
14798
|
+
* de la lista necesita la `key` del elemento.
|
|
14799
|
+
*/
|
|
14800
|
+
function isPart(node, parts) {
|
|
14801
|
+
return $8WNJc$react.isValidElement(node) && parts.has(node.type);
|
|
14802
|
+
}
|
|
14803
|
+
// ---------------------------------------------------------------------------------------------
|
|
14804
|
+
// Fachada del `Tab`: inserta el `Tabs.Indicator` que falte
|
|
14805
|
+
// ---------------------------------------------------------------------------------------------
|
|
14806
|
+
/**
|
|
14807
|
+
* ¿Hay ya un `Tabs.Indicator` entre los hijos? **Desciende por los Fragments**, que es lo único
|
|
14808
|
+
* que `Children.toArray` no aplana (los arrays sí — un `.map()` queda cubierto, medido).
|
|
14809
|
+
*
|
|
14810
|
+
* POR QUÉ AQUÍ SÍ SE DESCIENDE Y EN EL ROOT NO, que es la asimetría deliberada de esta fachada:
|
|
14811
|
+
* aquí solo hace falta DETECTAR (el indicador se añade al nivel del propio `Tab`, como hermano);
|
|
14812
|
+
* en el root haría falta INSERTAR dentro del Fragment del consumidor, o sea reescribir su árbol,
|
|
14813
|
+
* que es una intervención de otro orden. Y los modos de fallo también son distintos:
|
|
14814
|
+
* · sin esto, un indicador oculto en un Fragment daba DOS. Medido en el navegador: cajas y
|
|
14815
|
+
* estilos computados idénticos (85.7×32 en x=20, las dos se mueven juntas a x=165.9 al
|
|
14816
|
+
* pulsar), consola limpia, geometría de la tira sin cambio — pero la SOMBRA se compone dos
|
|
14817
|
+
* veces y el halo de 1-3 px alrededor de la píldora se oscurece: comparación de píxeles
|
|
14818
|
+
* contra la referencia sana, 608 px distintos de 39200 (1.55%) con delta máximo 17/255 en
|
|
14819
|
+
* claro (`rgb(225,225,226)` → `rgb(208,208,209)`), y 112 px con delta máximo 8/255 en oscuro
|
|
14820
|
+
* (ahí la sombra de v3 es transparente, así que solo es antialias del borde redondeado).
|
|
14821
|
+
* Cosmético, pero medible, y evitarlo cuesta esta función.
|
|
14822
|
+
* · sin descender en el root, una lista oculta en un Fragment deja la FORMA DELGADA, que es
|
|
14823
|
+
* una forma legítima de v3 y además el comportamiento de hoy: no hay regresión que evitar.
|
|
14824
|
+
*
|
|
14825
|
+
* No desciende por componentes del consumidor —solo por Fragments— porque los hijos de un
|
|
14826
|
+
* componente cualquiera todavía no se han renderizado y puede que no los renderice nunca.
|
|
14827
|
+
*/
|
|
14828
|
+
function hasIndicator(children) {
|
|
14829
|
+
return $8WNJc$react.Children.toArray(children).some((node) => {
|
|
14830
|
+
if (!$8WNJc$react.isValidElement(node)) {
|
|
14831
|
+
return false;
|
|
14832
|
+
}
|
|
14833
|
+
if (node.type === react.Tabs.Indicator) {
|
|
14834
|
+
return true;
|
|
14835
|
+
}
|
|
14836
|
+
return node.type === $8WNJc$react.Fragment && hasIndicator(node.props.children);
|
|
14837
|
+
});
|
|
14838
|
+
}
|
|
14839
|
+
const TabFacade = ({ children, ...props }) => {
|
|
14840
|
+
// `children` como función es la forma de render props de react-aria (`TabRenderProps`). No se
|
|
14841
|
+
// puede inspeccionar, y menos aún combinar con un hermano —React rechaza una función como
|
|
14842
|
+
// hijo junto a un elemento—, así que se pasa tal cual. Un consumidor que la use monta el
|
|
14843
|
+
// indicador él (es la vía de escape de este caso). Exposición hoy: 0 usos en los 6 repos.
|
|
14844
|
+
if (typeof children === "function") {
|
|
14845
|
+
return jsxRuntime.jsx(react.Tabs.Tab, { ...props, children: children });
|
|
14846
|
+
}
|
|
14847
|
+
if (hasIndicator(children)) {
|
|
14848
|
+
return jsxRuntime.jsx(react.Tabs.Tab, { ...props, children: children });
|
|
14849
|
+
}
|
|
14850
|
+
// El indicador va PRIMERO por legibilidad del marcado, no por efecto: es `position:absolute`
|
|
14851
|
+
// con `z-index:-1`, o sea fuera del flujo y detrás del texto, así que el orden no cambia el
|
|
14852
|
+
// render (las dos apps que lo montan a mano difieren —analytics lo pone antes de la etiqueta,
|
|
14853
|
+
// `AnalyticsCard.tsx:177` después— y se ven igual).
|
|
14854
|
+
//
|
|
14855
|
+
// `{children}` se pasa SIN normalizar (nada de `Children.toArray`) para no reescribir las
|
|
14856
|
+
// keys del consumidor: hacerlo cambiaría la reconciliación de una lista de pestañas
|
|
14857
|
+
// condicional. Verificado en el navegador que la anidación no produce aviso de key.
|
|
14858
|
+
return (jsxRuntime.jsxs(react.Tabs.Tab, { ...props, children: [jsxRuntime.jsx(react.Tabs.Indicator, {}), children] }));
|
|
14859
|
+
};
|
|
14860
|
+
TabFacade.displayName = "Aurora.Tab";
|
|
14861
|
+
/**
|
|
14862
|
+
* `Tab` de Aurora: el `Tabs.Tab` de v3 **con el `Tabs.Indicator` que faltaba**.
|
|
14863
|
+
*
|
|
14864
|
+
* Es el MISMO componente que `Tabs.Tab` (el estático de abajo apunta aquí). Las dos superficies
|
|
14865
|
+
* de entrada importan porque las apps usan las dos: beweanalytics importa `Tab` suelto
|
|
14866
|
+
* (`import { Tab, Tabs } from "@beweco/aurora-ui"`, 8 usos) y agency/backoffice escriben
|
|
14867
|
+
* `Tabs.Tab`. En v3 los dos nombres salen del mismo módulo y son el mismo objeto
|
|
14868
|
+
* (`@heroui/react/dist/components/tabs/index.js`: `Tabs = Object.assign(TabsRoot, { …, Tab })`,
|
|
14869
|
+
* y `dist/index.js:92-93` los exporta por separado), así que servir fachadas distintas por cada
|
|
14870
|
+
* nombre habría sido el «falso amigo» que ya costó rondas en Alert/Checkbox/Switch.
|
|
14871
|
+
*/
|
|
14872
|
+
const Tab = TabFacade;
|
|
14873
|
+
// ---------------------------------------------------------------------------------------------
|
|
14874
|
+
// Fachada del root: inserta el `Tabs.ListContainer` que falte
|
|
14875
|
+
// ---------------------------------------------------------------------------------------------
|
|
14876
|
+
/** Lo que va DENTRO del contenedor: la lista. */
|
|
14877
|
+
const INSIDE_CONTAINER = new Set([react.Tabs.List]);
|
|
14878
|
+
/** Si el consumidor ya monta el contenedor, la fachada no envuelve nada. */
|
|
14879
|
+
const OWN_CONTAINER = new Set([react.Tabs.ListContainer]);
|
|
14880
|
+
const TabsFacade = ({ children, ...props }) => {
|
|
14881
|
+
const nodes = $8WNJc$react.Children.toArray(children);
|
|
14882
|
+
const needsContainer = nodes.some((node) => isPart(node, INSIDE_CONTAINER)) &&
|
|
14883
|
+
!nodes.some((node) => isPart(node, OWN_CONTAINER));
|
|
14884
|
+
// Nada que envolver (sin hijos, `children` como función, un contenedor ya montado a mano, o
|
|
14885
|
+
// ninguna lista suelta): el root tal cual, byte a byte como el crudo de v3.
|
|
14886
|
+
if (!needsContainer) {
|
|
14887
|
+
return jsxRuntime.jsx(react.Tabs, { ...props, children: children });
|
|
14888
|
+
}
|
|
14889
|
+
// Se envuelve EN SITIO, no reagrupando como hace `Dropdown` —única desviación deliberada
|
|
14890
|
+
// respecto a ese precedente—: el popover del dropdown es `position:absolute`, así que allí da
|
|
14891
|
+
// igual en qué orden queden los hijos del root. Aquí `.tabs` es `flex` + `flex-col` en
|
|
14892
|
+
// horizontal (`tabs.css:2-8`), de modo que el ORDEN EN EL DOM es el orden visual; react-aria
|
|
14893
|
+
// lo vigila además por su cuenta (con el panel antes de la lista avisa por consola «There is
|
|
14894
|
+
// no tab id, please check if you have rendered the tab panel before the tab list»). O sea que
|
|
14895
|
+
// el orden de los hijos del root es observable, y reagrupar lo cambiaría sin ganar nada:
|
|
14896
|
+
// envolver en sitio es la intervención estrictamente menor y deja la geometría idéntica en
|
|
14897
|
+
// todos los casos.
|
|
14898
|
+
return (jsxRuntime.jsx(react.Tabs, { ...props, children: nodes.map((node) => isPart(node, INSIDE_CONTAINER) ? (jsxRuntime.jsx(react.Tabs.ListContainer, { children: node }, node.key)) : (node)) }));
|
|
14899
|
+
};
|
|
14900
|
+
TabsFacade.displayName = "Aurora.Tabs";
|
|
14901
|
+
/**
|
|
14902
|
+
* `Tabs` de Aurora: el root de v3 **más el `Tabs.ListContainer` que faltaba**, con el compound
|
|
14903
|
+
* completo colgado como estáticos y `Tabs.Tab` apuntando a la FACHADA del tab.
|
|
14904
|
+
*
|
|
14905
|
+
* ```tsx
|
|
14906
|
+
* // Mínimo: la fachada monta el carril y el indicador, y se ve correcto sin añadir nada.
|
|
14907
|
+
* <Tabs>
|
|
14908
|
+
* <Tabs.List aria-label="Vista">
|
|
14909
|
+
* <Tabs.Tab id="a">Alfa</Tabs.Tab>
|
|
14910
|
+
* </Tabs.List>
|
|
14911
|
+
* </Tabs>
|
|
14912
|
+
*
|
|
14913
|
+
* // Anatomía completa a mano: la fachada la respeta y no duplica nada.
|
|
14914
|
+
* <Tabs>
|
|
14915
|
+
* <Tabs.ListContainer>
|
|
14916
|
+
* <Tabs.List aria-label="Vista">
|
|
14917
|
+
* <Tabs.Tab id="a"><Tabs.Indicator />Alfa</Tabs.Tab>
|
|
14918
|
+
* </Tabs.List>
|
|
14919
|
+
* </Tabs.ListContainer>
|
|
14920
|
+
* </Tabs>
|
|
14921
|
+
* ```
|
|
14922
|
+
*
|
|
14923
|
+
* `Tabs.Root` queda deliberadamente crudo (el root pelado de v3, sin contenedor), igual que en
|
|
14924
|
+
* `Table` y `Dropdown`: vía de escape para la **forma delgada** de v3 (lista sin contenedor, sin
|
|
14925
|
+
* scroller ni chevrones), que sigue alcanzable y a la que `neutralize-v3.css` dedica su regla
|
|
14926
|
+
* `:not(:has(.tabs__list-container))`. Ojo: en la forma delgada el `variant="secondary"` de v3 no
|
|
14927
|
+
* pinta —todas sus reglas cuelgan de `> .tabs__list-container` (`tabs.css:234-282`)—, así que
|
|
14928
|
+
* pasar por la fachada es además lo que hace funcionar esa variante.
|
|
14929
|
+
*
|
|
14930
|
+
* `Tabs.Indicator` se conserva exportado (como estático y vía `Tab`) para quien quiera componerlo
|
|
14931
|
+
* a mano: es el objeto EXACTO de `@heroui/react`.
|
|
14932
|
+
*/
|
|
14933
|
+
const Tabs = Object.assign(TabsFacade, {
|
|
14934
|
+
Indicator: react.Tabs.Indicator,
|
|
14935
|
+
List: react.Tabs.List,
|
|
14936
|
+
ListContainer: react.Tabs.ListContainer,
|
|
14937
|
+
Panel: react.Tabs.Panel,
|
|
14938
|
+
Root: react.Tabs.Root,
|
|
14939
|
+
Separator: react.Tabs.Separator,
|
|
14940
|
+
Tab: TabFacade,
|
|
14941
|
+
});
|
|
14942
|
+
|
|
14688
14943
|
/**
|
|
14689
14944
|
* Tooltip - Componente BeweOS basado en HeroUI.
|
|
14690
14945
|
*
|
|
@@ -15585,10 +15840,6 @@ Object.defineProperty(exports, "Spinner", {
|
|
|
15585
15840
|
enumerable: true,
|
|
15586
15841
|
get: function () { return react.Spinner; }
|
|
15587
15842
|
});
|
|
15588
|
-
Object.defineProperty(exports, "Tab", {
|
|
15589
|
-
enumerable: true,
|
|
15590
|
-
get: function () { return react.Tab; }
|
|
15591
|
-
});
|
|
15592
15843
|
Object.defineProperty(exports, "TableBody", {
|
|
15593
15844
|
enumerable: true,
|
|
15594
15845
|
get: function () { return react.TableBody; }
|
|
@@ -15609,10 +15860,6 @@ Object.defineProperty(exports, "TableRow", {
|
|
|
15609
15860
|
enumerable: true,
|
|
15610
15861
|
get: function () { return react.TableRow; }
|
|
15611
15862
|
});
|
|
15612
|
-
Object.defineProperty(exports, "Tabs", {
|
|
15613
|
-
enumerable: true,
|
|
15614
|
-
get: function () { return react.Tabs; }
|
|
15615
|
-
});
|
|
15616
15863
|
Object.defineProperty(exports, "cn", {
|
|
15617
15864
|
enumerable: true,
|
|
15618
15865
|
get: function () { return react.cn; }
|
|
@@ -15714,7 +15961,9 @@ exports.StepIndicator = StepIndicator;
|
|
|
15714
15961
|
exports.Switch = Switch;
|
|
15715
15962
|
exports.SwitchComponent = Switch;
|
|
15716
15963
|
exports.THEME_COLOR_HEX_MAP = THEME_COLOR_HEX_MAP;
|
|
15964
|
+
exports.Tab = Tab;
|
|
15717
15965
|
exports.Table = Table;
|
|
15966
|
+
exports.Tabs = Tabs;
|
|
15718
15967
|
exports.TagsFilter = TagsFilter;
|
|
15719
15968
|
exports.Textarea = Textarea;
|
|
15720
15969
|
exports.ThemeContext = ThemeContext;
|
package/dist/index.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Card as Card$1, Breadcrumbs, ListBoxSection, ListBoxItem, Separator, ProgressBar, useOverlayState, Spinner, Button as Button$1, Chip as Chip$1, cn, CloseButton, Pagination as Pagination$1, Skeleton, Accordion, DatePicker as DatePicker$1, Label, DateField, Description, Calendar, FieldError, DateRangePicker as DateRangePicker$1, RangeCalendar, TextField, InputGroup, RadioGroup, Radio, Tabs, Dropdown as Dropdown$1, ComboBox, Input as Input$1, ListBox, Tooltip as Tooltip$2, DropdownTrigger, DropdownPopover, DropdownMenu, DropdownSection as DropdownSection$1, DropdownItem, Badge as Badge$1, Popover, PopoverTrigger, PopoverContent, Header, Avatar, Link, Switch as Switch$1, TimeField, Select as Select$1, Table as Table$1, TextArea, toastVariants, WarningIcon, SuccessIcon, InfoIcon, DangerIcon, Modal as Modal$1, Slider, Drawer, Checkbox as Checkbox$1, ModalHeader as ModalHeader$1, ModalBody as ModalBody$1, ModalFooter as ModalFooter$1, Alert as Alert$1 } from '@heroui/react';
|
|
2
|
-
export { Accordion, AccordionItem, Avatar, Breadcrumbs, CardFooter, CardHeader, CheckboxGroup, CloseButton, Drawer, DrawerBody, DrawerContent, DrawerFooter, DrawerHeader, DropdownItem, DropdownMenu, DropdownTrigger, Link, Popover, PopoverContent, PopoverTrigger, Radio, RadioGroup, Skeleton, Slider, Spinner,
|
|
1
|
+
import { Card as Card$1, Breadcrumbs, ListBoxSection, ListBoxItem, Separator, ProgressBar, useOverlayState, Spinner, Button as Button$1, Chip as Chip$1, cn, CloseButton, Pagination as Pagination$1, Skeleton, Accordion, DatePicker as DatePicker$1, Label, DateField, Description, Calendar, FieldError, DateRangePicker as DateRangePicker$1, RangeCalendar, TextField, InputGroup, RadioGroup, Radio, Tabs as Tabs$1, Dropdown as Dropdown$1, ComboBox, Input as Input$1, ListBox, Tooltip as Tooltip$2, DropdownTrigger, DropdownPopover, DropdownMenu, DropdownSection as DropdownSection$1, DropdownItem, Badge as Badge$1, Popover, PopoverTrigger, PopoverContent, Header, Avatar, Link, Switch as Switch$1, TimeField, Select as Select$1, Table as Table$1, TextArea, toastVariants, WarningIcon, SuccessIcon, InfoIcon, DangerIcon, Modal as Modal$1, Slider, Drawer, Checkbox as Checkbox$1, ModalHeader as ModalHeader$1, ModalBody as ModalBody$1, ModalFooter as ModalFooter$1, Alert as Alert$1 } from '@heroui/react';
|
|
2
|
+
export { Accordion, AccordionItem, Avatar, Breadcrumbs, CardFooter, CardHeader, CheckboxGroup, CloseButton, Drawer, DrawerBody, DrawerContent, DrawerFooter, DrawerHeader, DropdownItem, DropdownMenu, DropdownTrigger, Link, Popover, PopoverContent, PopoverTrigger, Radio, RadioGroup, Skeleton, Slider, Spinner, TableBody, TableCell, TableColumn, TableHeader, TableRow, cn } from '@heroui/react';
|
|
3
3
|
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
4
4
|
import $8WNJc$react, { useState, useRef, useCallback, useEffect, useId, forwardRef, useMemo, isValidElement, cloneElement, useImperativeHandle, createContext, useContext, useLayoutEffect, memo, useReducer, Children, Fragment as Fragment$1 } from 'react';
|
|
5
5
|
import { Icon } from '@iconify/react';
|
|
@@ -1966,7 +1966,7 @@ const AnalyticsCard = ({ data, showTimePeriods = true, showDropdownMenu = true,
|
|
|
1966
1966
|
// Card.types.ts) — se pierde el `as="dl"` semántico de v2. No había `<dt>`/`<dd>` reales dentro
|
|
1967
1967
|
// (siempre fue un `<dl>` "vacío" de esa semántica), así que el cambio a `<div>` no pierde
|
|
1968
1968
|
// estructura real.
|
|
1969
|
-
return (jsx(Card, { className: "dark:border-default-100 border border-transparent", ...props, children: jsxs("section", { className: "flex flex-col flex-nowrap", children: [jsx("div", { className: "flex flex-col justify-between gap-y-2", children: jsxs("div", { className: "flex flex-col gap-y-2", children: [jsxs("div", { className: "flex flex-col gap-y-0", children: [jsx(H2, { children: t.title }), jsx(P, { children: t.description })] }), jsx("div", { className: "h-2", "aria-hidden": "true" }), showTimePeriods && (jsx(Tabs, { className: "self-end", onSelectionChange: (key) => handleTimePeriodChange(String(key)), children: jsx(Tabs.ListContainer, { className: "bg-default-100", children: jsxs(Tabs.List, { "aria-label": t.title, children: [jsxs(Tabs.Tab, { id: "6-months", className: "whitespace-nowrap", children: [t.months6, jsx(Tabs.Indicator, {})] }), jsxs(Tabs.Tab, { id: "3-months", className: "whitespace-nowrap", children: [t.months3, jsx(Tabs.Indicator, {})] }), jsxs(Tabs.Tab, { id: "30-days", className: "whitespace-nowrap", children: [t.days30, jsx(Tabs.Indicator, {})] }), jsxs(Tabs.Tab, { id: "7-days", className: "whitespace-nowrap", children: [t.days7, jsx(Tabs.Indicator, {})] }), jsxs(Tabs.Tab, { id: "24-hours", className: "whitespace-nowrap", children: [t.hours24, jsx(Tabs.Indicator, {})] })] }) }) })), showMetricCards && (jsx("div", { className: "mt-2 flex w-full items-center", children: jsx("div", { className: "-my-3 flex w-full max-w-[800px] items-center gap-x-3 overflow-x-auto py-3", children: data.map(({ key, change, changeType, type, value, title }) => (jsxs("button", { type: "button", className: cn("rounded-[12px] flex w-full flex-col gap-2 p-3 transition-colors", {
|
|
1969
|
+
return (jsx(Card, { className: "dark:border-default-100 border border-transparent", ...props, children: jsxs("section", { className: "flex flex-col flex-nowrap", children: [jsx("div", { className: "flex flex-col justify-between gap-y-2", children: jsxs("div", { className: "flex flex-col gap-y-2", children: [jsxs("div", { className: "flex flex-col gap-y-0", children: [jsx(H2, { children: t.title }), jsx(P, { children: t.description })] }), jsx("div", { className: "h-2", "aria-hidden": "true" }), showTimePeriods && (jsx(Tabs$1, { className: "self-end", onSelectionChange: (key) => handleTimePeriodChange(String(key)), children: jsx(Tabs$1.ListContainer, { className: "bg-default-100", children: jsxs(Tabs$1.List, { "aria-label": t.title, children: [jsxs(Tabs$1.Tab, { id: "6-months", className: "whitespace-nowrap", children: [t.months6, jsx(Tabs$1.Indicator, {})] }), jsxs(Tabs$1.Tab, { id: "3-months", className: "whitespace-nowrap", children: [t.months3, jsx(Tabs$1.Indicator, {})] }), jsxs(Tabs$1.Tab, { id: "30-days", className: "whitespace-nowrap", children: [t.days30, jsx(Tabs$1.Indicator, {})] }), jsxs(Tabs$1.Tab, { id: "7-days", className: "whitespace-nowrap", children: [t.days7, jsx(Tabs$1.Indicator, {})] }), jsxs(Tabs$1.Tab, { id: "24-hours", className: "whitespace-nowrap", children: [t.hours24, jsx(Tabs$1.Indicator, {})] })] }) }) })), showMetricCards && (jsx("div", { className: "mt-2 flex w-full items-center", children: jsx("div", { className: "-my-3 flex w-full max-w-[800px] items-center gap-x-3 overflow-x-auto py-3", children: data.map(({ key, change, changeType, type, value, title }) => (jsxs("button", { type: "button", className: cn("rounded-[12px] flex w-full flex-col gap-2 p-3 transition-colors", {
|
|
1970
1970
|
"bg-default-100": activeChart === key,
|
|
1971
1971
|
}), onClick: () => handleChartChange(key), children: [jsx("span", { className: cn("text-sm text-default-500 font-medium transition-colors", {
|
|
1972
1972
|
"text-primary": activeChart === key,
|
|
@@ -8588,9 +8588,9 @@ const SearchInput = ({ searchPlaceholder = "Buscar...", searchIcon = "solar:magn
|
|
|
8588
8588
|
};
|
|
8589
8589
|
|
|
8590
8590
|
/** El indicador ya montado a mano por el consumidor: no se duplica. */
|
|
8591
|
-
function hasIndicator(children) {
|
|
8591
|
+
function hasIndicator$1(children) {
|
|
8592
8592
|
if (Array.isArray(children)) {
|
|
8593
|
-
return children.some(hasIndicator);
|
|
8593
|
+
return children.some(hasIndicator$1);
|
|
8594
8594
|
}
|
|
8595
8595
|
return isValidElement(children) && children.type === ListBoxItem.Indicator;
|
|
8596
8596
|
}
|
|
@@ -8626,7 +8626,7 @@ function withItemIndicator(children) {
|
|
|
8626
8626
|
const next = (values) => (jsxs(Fragment, { children: [render(values), jsx(ListBoxItem.Indicator, {})] }));
|
|
8627
8627
|
return cloneElement(element, { children: next });
|
|
8628
8628
|
}
|
|
8629
|
-
if (hasIndicator(original)) {
|
|
8629
|
+
if (hasIndicator$1(original)) {
|
|
8630
8630
|
return element;
|
|
8631
8631
|
}
|
|
8632
8632
|
const next = (jsxs(Fragment, { children: [original, jsx(ListBoxItem.Indicator, {})] }));
|
|
@@ -9276,17 +9276,17 @@ const OWN_SCROLL = new Set([
|
|
|
9276
9276
|
Table$1.ResizableContainer,
|
|
9277
9277
|
]);
|
|
9278
9278
|
/** Identidad por `child.type` contra los objetos reales de HeroUI (mismo patrón que la fachada `Alert`). */
|
|
9279
|
-
function isPart$
|
|
9279
|
+
function isPart$2(node, parts) {
|
|
9280
9280
|
return isValidElement(node) && parts.has(node.type);
|
|
9281
9281
|
}
|
|
9282
9282
|
const TableFacade = ({ children, ...props }) => {
|
|
9283
9283
|
const nodes = Children.toArray(children);
|
|
9284
9284
|
// Sin hijos, o con un contenedor de scroll ya montado a mano: el root tal cual.
|
|
9285
|
-
if (nodes.length === 0 || nodes.some((node) => isPart$
|
|
9285
|
+
if (nodes.length === 0 || nodes.some((node) => isPart$2(node, OWN_SCROLL))) {
|
|
9286
9286
|
return jsx(Table$1, { ...props, children: children });
|
|
9287
9287
|
}
|
|
9288
|
-
const scrollable = nodes.filter((node) => !isPart$
|
|
9289
|
-
const outsideScroll = nodes.filter((node) => isPart$
|
|
9288
|
+
const scrollable = nodes.filter((node) => !isPart$2(node, OUTSIDE_SCROLL));
|
|
9289
|
+
const outsideScroll = nodes.filter((node) => isPart$2(node, OUTSIDE_SCROLL));
|
|
9290
9290
|
return (jsxs(Table$1, { ...props, children: [jsx(Table$1.ScrollContainer, { children: scrollable }), outsideScroll] }));
|
|
9291
9291
|
};
|
|
9292
9292
|
TableFacade.displayName = "Aurora.Table";
|
|
@@ -9316,6 +9316,37 @@ const Table = Object.assign(TableFacade, {
|
|
|
9316
9316
|
SortableColumnHeader: Table$1.SortableColumnHeader,
|
|
9317
9317
|
});
|
|
9318
9318
|
|
|
9319
|
+
/**
|
|
9320
|
+
* Clave de la columna que `AuraTable` marca como identificadora de la fila cuando la app no marca
|
|
9321
|
+
* ninguna — `undefined` si alguna ya lo pide (entonces manda la app) o si no hay columnas.
|
|
9322
|
+
*
|
|
9323
|
+
* EL DEFECTO QUE ESTO CIERRA (medido en `beweosagency`, pantalla `/centers`, 3 apariciones en una
|
|
9324
|
+
* sola carga): react-aria exige al menos una columna con `isRowHeader` y, si no la encuentra,
|
|
9325
|
+
* lanza `A table must have at least one Column with the isRowHeader prop set to true` al construir
|
|
9326
|
+
* la colección (`react-aria-components/dist/private/Table.mjs:145`). `AuraTable` no marcaba
|
|
9327
|
+
* ninguna, así que TODA tabla montada por la vía declarativa lo disparaba. React se recupera
|
|
9328
|
+
* —la guarda pone `columnsDirty = false` ANTES de lanzar, así que el reintento pasa— pero
|
|
9329
|
+
* descarta el render concurrente, repinta la raíz de forma síncrona y deja el error en consola.
|
|
9330
|
+
* La vía compuesta a mano (`Table.Content` + `Table.Column isRowHeader`) nunca estuvo afectada:
|
|
9331
|
+
* ahí la marca la app.
|
|
9332
|
+
*
|
|
9333
|
+
* Lo que se pierde mientras tanto no es solo ruido: sin columna identificadora, NINGUNA celda
|
|
9334
|
+
* recibe `role="rowheader"` (medido: las 3 celdas de la story `Default` salían `gridcell`), o sea
|
|
9335
|
+
* que un lector de pantalla recorre las filas sin poder decir de QUÉ fila habla.
|
|
9336
|
+
*
|
|
9337
|
+
* Por qué la PRIMERA: es lo que ya hace a mano la composición cruda de este repo
|
|
9338
|
+
* (`stories/Table.stories.tsx:123`, `isRowHeader={column.key === "name"}`, que es la primera
|
|
9339
|
+
* columna) y lo que hace la columna identificadora en las tablas de las apps. Una columna con
|
|
9340
|
+
* `isRowHeader: false` cuenta como "no lo pide": react-aria solo mira si el valor es truthy
|
|
9341
|
+
* (`if (node.props.isRowHeader)`, Table.mjs:136), así que `false` y ausente son indistinguibles
|
|
9342
|
+
* para él y tratarlos igual evita que un `false` escrito por costumbre deje la tabla otra vez
|
|
9343
|
+
* sin identificador.
|
|
9344
|
+
*/
|
|
9345
|
+
function defaultRowHeaderKey(columns) {
|
|
9346
|
+
return columns.some((column) => column.isRowHeader)
|
|
9347
|
+
? undefined
|
|
9348
|
+
: columns[0]?.key;
|
|
9349
|
+
}
|
|
9319
9350
|
/**
|
|
9320
9351
|
* AuraTable genérico reutilizable, migrado al `Table` compound de HeroUI v3 (el `Table` de v2 con
|
|
9321
9352
|
* `TableHeader`/`TableColumn`/`TableBody`/`TableRow`/`TableCell` sueltos se elimina).
|
|
@@ -9336,9 +9367,10 @@ const Table = Object.assign(TableFacade, {
|
|
|
9336
9367
|
* no tener la anatomía escrita en dos sitios.
|
|
9337
9368
|
*/
|
|
9338
9369
|
function AuraTable({ columns, items, renderCell, children, className, ...props }) {
|
|
9370
|
+
const rowHeaderKey = defaultRowHeaderKey(columns);
|
|
9339
9371
|
// `removeWrapper`/`radius="none"` de v2 no tienen prop equivalente en v3 (§ver
|
|
9340
9372
|
// AuraTable.types.ts): se aproxima con `rounded-none` directo en el `className` del root.
|
|
9341
|
-
return (jsx(Table, { className: `rounded-none ${className ?? ""}`.trim(), children: jsxs(Table.Content, { ...props, children: [jsx(Table.Header, { columns: columns, children: (column) => (jsx(Table.Column, { children: column.label }, column.key)) }), jsx(Table.Body, { items: items, children: (item) => (jsx(Table.Row, { columns: columns, children: (column) => (jsx(Table.Cell, { children: renderCell ? renderCell(item, column.key) : children })) }, item.id)) })] }) }));
|
|
9373
|
+
return (jsx(Table, { className: `rounded-none ${className ?? ""}`.trim(), children: jsxs(Table.Content, { ...props, children: [jsx(Table.Header, { columns: columns, children: (column) => (jsx(Table.Column, { isRowHeader: column.isRowHeader || column.key === rowHeaderKey, children: column.label }, column.key)) }), jsx(Table.Body, { items: items, children: (item) => (jsx(Table.Row, { columns: columns, children: (column) => (jsx(Table.Cell, { children: renderCell ? renderCell(item, column.key) : children })) }, item.id)) })] }) }));
|
|
9342
9374
|
}
|
|
9343
9375
|
|
|
9344
9376
|
// TECH-2459 · F3 · G1-forms — v3 divide el `Textarea` monolítico de v2 en `TextField` +
|
|
@@ -14643,18 +14675,18 @@ const OWN_POPOVER = new Set([
|
|
|
14643
14675
|
Dropdown$1.SubmenuTrigger,
|
|
14644
14676
|
]);
|
|
14645
14677
|
/** Identidad por `child.type` contra los objetos reales de HeroUI (patrón de la fachada `Table`). */
|
|
14646
|
-
function isPart(node, parts) {
|
|
14678
|
+
function isPart$1(node, parts) {
|
|
14647
14679
|
return isValidElement(node) && parts.has(node.type);
|
|
14648
14680
|
}
|
|
14649
14681
|
const DropdownFacade = ({ children, ...props }) => {
|
|
14650
14682
|
const nodes = Children.toArray(children);
|
|
14651
|
-
const menus = nodes.filter((node) => isPart(node, INSIDE_POPOVER));
|
|
14683
|
+
const menus = nodes.filter((node) => isPart$1(node, INSIDE_POPOVER));
|
|
14652
14684
|
// Nada que envolver (sin hijos, `children` como función, un popover ya montado a mano, o
|
|
14653
14685
|
// simplemente ningún menú suelto): el root tal cual, byte a byte como el crudo de v3.
|
|
14654
|
-
if (menus.length === 0 || nodes.some((node) => isPart(node, OWN_POPOVER))) {
|
|
14686
|
+
if (menus.length === 0 || nodes.some((node) => isPart$1(node, OWN_POPOVER))) {
|
|
14655
14687
|
return jsx(Dropdown$1, { ...props, children: children });
|
|
14656
14688
|
}
|
|
14657
|
-
return (jsxs(Dropdown$1, { ...props, children: [nodes.filter((node) => !isPart(node, INSIDE_POPOVER)), jsx(Dropdown$1.Popover, { offset: 7, placement: "bottom", children: menus })] }));
|
|
14689
|
+
return (jsxs(Dropdown$1, { ...props, children: [nodes.filter((node) => !isPart$1(node, INSIDE_POPOVER)), jsx(Dropdown$1.Popover, { offset: 7, placement: "bottom", children: menus })] }));
|
|
14658
14690
|
};
|
|
14659
14691
|
DropdownFacade.displayName = "Aurora.Dropdown";
|
|
14660
14692
|
/**
|
|
@@ -14685,6 +14717,229 @@ const Dropdown = Object.assign(DropdownFacade, {
|
|
|
14685
14717
|
Trigger: Dropdown$1.Trigger,
|
|
14686
14718
|
});
|
|
14687
14719
|
|
|
14720
|
+
// TECH-2459 — Fachada `Tabs` / `Tab`: monta las DOS piezas de la anatomía de v3 que, si la app
|
|
14721
|
+
// se las olvida, dejan la pestaña seleccionada sin distinguir. Hasta ahora `Tabs` y `Tab` eran
|
|
14722
|
+
// reexport crudo de v3 (`src/index.tsx`, bloque `from "@heroui/react"`) y no existía
|
|
14723
|
+
// `src/components/tabs/`: la anatomía entera quedaba a cargo de cada app.
|
|
14724
|
+
//
|
|
14725
|
+
// EL DEFECTO, medido por grep real en los repos de apps (no de memoria):
|
|
14726
|
+
//
|
|
14727
|
+
// | app | `<Tabs>` | `<Tabs.List>` | `<Tabs.ListContainer>` | tabs | `<Tabs.Indicator>` | resultado |
|
|
14728
|
+
// |-------------------|----------|---------------|------------------------|------|--------------------|-----------|
|
|
14729
|
+
// | beweosagency | 5 | 5 | 5 | 14 | **0** | la seleccionada sin píldora |
|
|
14730
|
+
// | backoffice-beweos | 5 | 5 | 5 | 18 | 18 (a mano) | bien |
|
|
14731
|
+
// | beweanalytics | 3 | 3 | 3 | 8 | 8 (a mano) | bien |
|
|
14732
|
+
// | beweossmbs / loginos / linda-business | 0 | 0 | 0 | 0 | 0 | no usan tabs |
|
|
14733
|
+
//
|
|
14734
|
+
// (conteo de tags de APERTURA; beweanalytics escribe `Tab` suelto en vez de `Tabs.Tab`.)
|
|
14735
|
+
// Dos lecturas que salen de esta tabla y que deciden el diseño:
|
|
14736
|
+
// · **26 indicadores montados a mano** contra 14 que faltan. La idempotencia no es un adorno:
|
|
14737
|
+
// sin ella esas 26 pestañas se quedarían con DOS indicadores.
|
|
14738
|
+
// · **`Tabs.List` y `Tabs.ListContainer` van 1:1 en las tres apps**, o sea que hoy NADIE usa la
|
|
14739
|
+
// forma delgada. Garantizar el carril es, para el código que existe hoy, un no-op medido; su
|
|
14740
|
+
// valor es que la próxima pantalla que se escriba no pueda caer en la forma delgada por
|
|
14741
|
+
// descuido.
|
|
14742
|
+
//
|
|
14743
|
+
// Las tres migraciones siguieron la misma guía; dos descubrieron que hacía falta el indicador y
|
|
14744
|
+
// una no, porque **nada en la API obliga a montarlo ni avisa**: compila en verde y se degrada en
|
|
14745
|
+
// silencio. Es el mismo patrón —y el mismo argumento— que ya justificó las fachadas `Table`
|
|
14746
|
+
// (`Table.ScrollContainer` ausente → columnas inalcanzables) y `Dropdown`
|
|
14747
|
+
// (`Dropdown.Popover` ausente → menú en línea).
|
|
14748
|
+
//
|
|
14749
|
+
// El criterio del usuario que lo convierte en trabajo de la librería y no de las apps:
|
|
14750
|
+
// «se supone que solo es llamar al componente dentro de la librería y ya se visualiza correcto;
|
|
14751
|
+
// asegúrate de que las apps no estén metiéndole fixes por separado».
|
|
14752
|
+
//
|
|
14753
|
+
// LAS DOS PIEZAS ESTÁN ACOPLADAS, y por eso la fachada monta las dos o ninguna:
|
|
14754
|
+
//
|
|
14755
|
+
// · `Tabs.Indicator` es quien pinta la píldora del seleccionado. Su CSS es
|
|
14756
|
+
// `.tabs__indicator { absolute start-0 top-0 size-full rounded-3xl bg-segment shadow-surface;
|
|
14757
|
+
// z-index:-1 }` (`@heroui/styles/dist/components/tabs.css:215-228`), y `--segment` es
|
|
14758
|
+
// `var(--white)` en claro y `oklch(39.64% .01 285.93)` (#46464c) en oscuro
|
|
14759
|
+
// (`@heroui/styles/dist/heroui.min.css`).
|
|
14760
|
+
// · `Tabs.ListContainer` es quien pinta el CARRIL sobre el que se ve esa píldora
|
|
14761
|
+
// (`.tabs__list-container { relative bg-default }`, `tabs.css:16-17`, que
|
|
14762
|
+
// `neutralize-v3.css` baja a `--color-default-100` = #f4f4f5 por contraste).
|
|
14763
|
+
// **Una píldora blanca sobre fondo blanco no se ve**, y el número: medido en Storybook, en
|
|
14764
|
+
// claro la píldora queda a **1.00:1** contra la página en la forma delgada y a **1.10:1**
|
|
14765
|
+
// contra el carril en la completa — sin carril lo único que sobrevive de ella es su sombra,
|
|
14766
|
+
// que en oscuro es transparente del todo. Garantizar solo el indicador cambiaría un defecto
|
|
14767
|
+
// por otro. La app que migró en la forma delgada ya lo documentó:
|
|
14768
|
+
// `beweanalytics/src/clientes/ui/pages/clientes.page.tsx:59-67`.
|
|
14769
|
+
//
|
|
14770
|
+
// Y `Tabs.Indicator` va DENTRO de cada `Tab`, nunca en la lista: `TabList` envuelve en
|
|
14771
|
+
// `SharedElementTransition` solo el `CollectionRoot`
|
|
14772
|
+
// (`react-aria-components/dist/private/Tabs.mjs:152`), así que un indicador suelto en la lista
|
|
14773
|
+
// lanza «<SharedElement> must be rendered inside a <SharedElementTransition>» y **la barra entera
|
|
14774
|
+
// desaparece del DOM**. De ahí que la inserción del indicador viva en la fachada del `Tab` y no
|
|
14775
|
+
// en la del root.
|
|
14776
|
+
//
|
|
14777
|
+
// LO QUE ESTA FACHADA NO HACE, y conste para que no se busque: no repone NADA del aspecto de v2
|
|
14778
|
+
// (radios, gap, padding, peso, la pastilla de v2). Eso se hizo en la `beta.132` y se retiró en la
|
|
14779
|
+
// `.133` por decisión del usuario (`.docs/migrate-heroui/DECISIONES.md` §9.1, «el objetivo NO es
|
|
14780
|
+
// identidad de píxel» y, sobre este componente, «a nivel visual debe verse como v3»); el mapa de
|
|
14781
|
+
// las 6 reglas retiradas sigue escrito al final de `src/styles/neutralize-v3.css`. La pieza que
|
|
14782
|
+
// aquí se monta es la de v3 —su propio `SelectionIndicator`, que además anima—, no una imitación
|
|
14783
|
+
// de v2 por CSS: es exactamente lo que la nota de esa retirada señala como la vía buena («la
|
|
14784
|
+
// pastilla de verdad, la que además anima, se tiene montando `Tabs.Indicator`, que es lo que v3
|
|
14785
|
+
// espera»). Lo que cambia es QUIÉN la monta: la librería en vez de cada app.
|
|
14786
|
+
/**
|
|
14787
|
+
* Identidad por `child.type` contra los objetos reales de HeroUI — mismo mecanismo que las
|
|
14788
|
+
* fachadas `Table` y `Dropdown`, y nunca por `displayName` ni por nombre de función (la
|
|
14789
|
+
* minificación los renombra y las piezas de v3 no declaran `displayName`).
|
|
14790
|
+
*
|
|
14791
|
+
* Es FIABLE para detectar lo que la app ya puso porque las apps tienen prohibido importar de
|
|
14792
|
+
* `@heroui/*` (regla de oro de la migración): su única vía para un `Tabs.List`/`Tabs.ListContainer`
|
|
14793
|
+
* es el estático de Aurora, que es **este mismo objeto** (los estáticos de abajo apuntan a los de
|
|
14794
|
+
* HeroUI, no a copias). El mismo argumento vale para el indicador, que tiene su propia función
|
|
14795
|
+
* (`hasIndicator`, más abajo) porque ahí además hay que descender por los Fragments.
|
|
14796
|
+
*
|
|
14797
|
+
* Se declara como predicado de tipo —y no `boolean` como en `Dropdown`— porque el mapeo en sitio
|
|
14798
|
+
* de la lista necesita la `key` del elemento.
|
|
14799
|
+
*/
|
|
14800
|
+
function isPart(node, parts) {
|
|
14801
|
+
return isValidElement(node) && parts.has(node.type);
|
|
14802
|
+
}
|
|
14803
|
+
// ---------------------------------------------------------------------------------------------
|
|
14804
|
+
// Fachada del `Tab`: inserta el `Tabs.Indicator` que falte
|
|
14805
|
+
// ---------------------------------------------------------------------------------------------
|
|
14806
|
+
/**
|
|
14807
|
+
* ¿Hay ya un `Tabs.Indicator` entre los hijos? **Desciende por los Fragments**, que es lo único
|
|
14808
|
+
* que `Children.toArray` no aplana (los arrays sí — un `.map()` queda cubierto, medido).
|
|
14809
|
+
*
|
|
14810
|
+
* POR QUÉ AQUÍ SÍ SE DESCIENDE Y EN EL ROOT NO, que es la asimetría deliberada de esta fachada:
|
|
14811
|
+
* aquí solo hace falta DETECTAR (el indicador se añade al nivel del propio `Tab`, como hermano);
|
|
14812
|
+
* en el root haría falta INSERTAR dentro del Fragment del consumidor, o sea reescribir su árbol,
|
|
14813
|
+
* que es una intervención de otro orden. Y los modos de fallo también son distintos:
|
|
14814
|
+
* · sin esto, un indicador oculto en un Fragment daba DOS. Medido en el navegador: cajas y
|
|
14815
|
+
* estilos computados idénticos (85.7×32 en x=20, las dos se mueven juntas a x=165.9 al
|
|
14816
|
+
* pulsar), consola limpia, geometría de la tira sin cambio — pero la SOMBRA se compone dos
|
|
14817
|
+
* veces y el halo de 1-3 px alrededor de la píldora se oscurece: comparación de píxeles
|
|
14818
|
+
* contra la referencia sana, 608 px distintos de 39200 (1.55%) con delta máximo 17/255 en
|
|
14819
|
+
* claro (`rgb(225,225,226)` → `rgb(208,208,209)`), y 112 px con delta máximo 8/255 en oscuro
|
|
14820
|
+
* (ahí la sombra de v3 es transparente, así que solo es antialias del borde redondeado).
|
|
14821
|
+
* Cosmético, pero medible, y evitarlo cuesta esta función.
|
|
14822
|
+
* · sin descender en el root, una lista oculta en un Fragment deja la FORMA DELGADA, que es
|
|
14823
|
+
* una forma legítima de v3 y además el comportamiento de hoy: no hay regresión que evitar.
|
|
14824
|
+
*
|
|
14825
|
+
* No desciende por componentes del consumidor —solo por Fragments— porque los hijos de un
|
|
14826
|
+
* componente cualquiera todavía no se han renderizado y puede que no los renderice nunca.
|
|
14827
|
+
*/
|
|
14828
|
+
function hasIndicator(children) {
|
|
14829
|
+
return Children.toArray(children).some((node) => {
|
|
14830
|
+
if (!isValidElement(node)) {
|
|
14831
|
+
return false;
|
|
14832
|
+
}
|
|
14833
|
+
if (node.type === Tabs$1.Indicator) {
|
|
14834
|
+
return true;
|
|
14835
|
+
}
|
|
14836
|
+
return node.type === Fragment$1 && hasIndicator(node.props.children);
|
|
14837
|
+
});
|
|
14838
|
+
}
|
|
14839
|
+
const TabFacade = ({ children, ...props }) => {
|
|
14840
|
+
// `children` como función es la forma de render props de react-aria (`TabRenderProps`). No se
|
|
14841
|
+
// puede inspeccionar, y menos aún combinar con un hermano —React rechaza una función como
|
|
14842
|
+
// hijo junto a un elemento—, así que se pasa tal cual. Un consumidor que la use monta el
|
|
14843
|
+
// indicador él (es la vía de escape de este caso). Exposición hoy: 0 usos en los 6 repos.
|
|
14844
|
+
if (typeof children === "function") {
|
|
14845
|
+
return jsx(Tabs$1.Tab, { ...props, children: children });
|
|
14846
|
+
}
|
|
14847
|
+
if (hasIndicator(children)) {
|
|
14848
|
+
return jsx(Tabs$1.Tab, { ...props, children: children });
|
|
14849
|
+
}
|
|
14850
|
+
// El indicador va PRIMERO por legibilidad del marcado, no por efecto: es `position:absolute`
|
|
14851
|
+
// con `z-index:-1`, o sea fuera del flujo y detrás del texto, así que el orden no cambia el
|
|
14852
|
+
// render (las dos apps que lo montan a mano difieren —analytics lo pone antes de la etiqueta,
|
|
14853
|
+
// `AnalyticsCard.tsx:177` después— y se ven igual).
|
|
14854
|
+
//
|
|
14855
|
+
// `{children}` se pasa SIN normalizar (nada de `Children.toArray`) para no reescribir las
|
|
14856
|
+
// keys del consumidor: hacerlo cambiaría la reconciliación de una lista de pestañas
|
|
14857
|
+
// condicional. Verificado en el navegador que la anidación no produce aviso de key.
|
|
14858
|
+
return (jsxs(Tabs$1.Tab, { ...props, children: [jsx(Tabs$1.Indicator, {}), children] }));
|
|
14859
|
+
};
|
|
14860
|
+
TabFacade.displayName = "Aurora.Tab";
|
|
14861
|
+
/**
|
|
14862
|
+
* `Tab` de Aurora: el `Tabs.Tab` de v3 **con el `Tabs.Indicator` que faltaba**.
|
|
14863
|
+
*
|
|
14864
|
+
* Es el MISMO componente que `Tabs.Tab` (el estático de abajo apunta aquí). Las dos superficies
|
|
14865
|
+
* de entrada importan porque las apps usan las dos: beweanalytics importa `Tab` suelto
|
|
14866
|
+
* (`import { Tab, Tabs } from "@beweco/aurora-ui"`, 8 usos) y agency/backoffice escriben
|
|
14867
|
+
* `Tabs.Tab`. En v3 los dos nombres salen del mismo módulo y son el mismo objeto
|
|
14868
|
+
* (`@heroui/react/dist/components/tabs/index.js`: `Tabs = Object.assign(TabsRoot, { …, Tab })`,
|
|
14869
|
+
* y `dist/index.js:92-93` los exporta por separado), así que servir fachadas distintas por cada
|
|
14870
|
+
* nombre habría sido el «falso amigo» que ya costó rondas en Alert/Checkbox/Switch.
|
|
14871
|
+
*/
|
|
14872
|
+
const Tab = TabFacade;
|
|
14873
|
+
// ---------------------------------------------------------------------------------------------
|
|
14874
|
+
// Fachada del root: inserta el `Tabs.ListContainer` que falte
|
|
14875
|
+
// ---------------------------------------------------------------------------------------------
|
|
14876
|
+
/** Lo que va DENTRO del contenedor: la lista. */
|
|
14877
|
+
const INSIDE_CONTAINER = new Set([Tabs$1.List]);
|
|
14878
|
+
/** Si el consumidor ya monta el contenedor, la fachada no envuelve nada. */
|
|
14879
|
+
const OWN_CONTAINER = new Set([Tabs$1.ListContainer]);
|
|
14880
|
+
const TabsFacade = ({ children, ...props }) => {
|
|
14881
|
+
const nodes = Children.toArray(children);
|
|
14882
|
+
const needsContainer = nodes.some((node) => isPart(node, INSIDE_CONTAINER)) &&
|
|
14883
|
+
!nodes.some((node) => isPart(node, OWN_CONTAINER));
|
|
14884
|
+
// Nada que envolver (sin hijos, `children` como función, un contenedor ya montado a mano, o
|
|
14885
|
+
// ninguna lista suelta): el root tal cual, byte a byte como el crudo de v3.
|
|
14886
|
+
if (!needsContainer) {
|
|
14887
|
+
return jsx(Tabs$1, { ...props, children: children });
|
|
14888
|
+
}
|
|
14889
|
+
// Se envuelve EN SITIO, no reagrupando como hace `Dropdown` —única desviación deliberada
|
|
14890
|
+
// respecto a ese precedente—: el popover del dropdown es `position:absolute`, así que allí da
|
|
14891
|
+
// igual en qué orden queden los hijos del root. Aquí `.tabs` es `flex` + `flex-col` en
|
|
14892
|
+
// horizontal (`tabs.css:2-8`), de modo que el ORDEN EN EL DOM es el orden visual; react-aria
|
|
14893
|
+
// lo vigila además por su cuenta (con el panel antes de la lista avisa por consola «There is
|
|
14894
|
+
// no tab id, please check if you have rendered the tab panel before the tab list»). O sea que
|
|
14895
|
+
// el orden de los hijos del root es observable, y reagrupar lo cambiaría sin ganar nada:
|
|
14896
|
+
// envolver en sitio es la intervención estrictamente menor y deja la geometría idéntica en
|
|
14897
|
+
// todos los casos.
|
|
14898
|
+
return (jsx(Tabs$1, { ...props, children: nodes.map((node) => isPart(node, INSIDE_CONTAINER) ? (jsx(Tabs$1.ListContainer, { children: node }, node.key)) : (node)) }));
|
|
14899
|
+
};
|
|
14900
|
+
TabsFacade.displayName = "Aurora.Tabs";
|
|
14901
|
+
/**
|
|
14902
|
+
* `Tabs` de Aurora: el root de v3 **más el `Tabs.ListContainer` que faltaba**, con el compound
|
|
14903
|
+
* completo colgado como estáticos y `Tabs.Tab` apuntando a la FACHADA del tab.
|
|
14904
|
+
*
|
|
14905
|
+
* ```tsx
|
|
14906
|
+
* // Mínimo: la fachada monta el carril y el indicador, y se ve correcto sin añadir nada.
|
|
14907
|
+
* <Tabs>
|
|
14908
|
+
* <Tabs.List aria-label="Vista">
|
|
14909
|
+
* <Tabs.Tab id="a">Alfa</Tabs.Tab>
|
|
14910
|
+
* </Tabs.List>
|
|
14911
|
+
* </Tabs>
|
|
14912
|
+
*
|
|
14913
|
+
* // Anatomía completa a mano: la fachada la respeta y no duplica nada.
|
|
14914
|
+
* <Tabs>
|
|
14915
|
+
* <Tabs.ListContainer>
|
|
14916
|
+
* <Tabs.List aria-label="Vista">
|
|
14917
|
+
* <Tabs.Tab id="a"><Tabs.Indicator />Alfa</Tabs.Tab>
|
|
14918
|
+
* </Tabs.List>
|
|
14919
|
+
* </Tabs.ListContainer>
|
|
14920
|
+
* </Tabs>
|
|
14921
|
+
* ```
|
|
14922
|
+
*
|
|
14923
|
+
* `Tabs.Root` queda deliberadamente crudo (el root pelado de v3, sin contenedor), igual que en
|
|
14924
|
+
* `Table` y `Dropdown`: vía de escape para la **forma delgada** de v3 (lista sin contenedor, sin
|
|
14925
|
+
* scroller ni chevrones), que sigue alcanzable y a la que `neutralize-v3.css` dedica su regla
|
|
14926
|
+
* `:not(:has(.tabs__list-container))`. Ojo: en la forma delgada el `variant="secondary"` de v3 no
|
|
14927
|
+
* pinta —todas sus reglas cuelgan de `> .tabs__list-container` (`tabs.css:234-282`)—, así que
|
|
14928
|
+
* pasar por la fachada es además lo que hace funcionar esa variante.
|
|
14929
|
+
*
|
|
14930
|
+
* `Tabs.Indicator` se conserva exportado (como estático y vía `Tab`) para quien quiera componerlo
|
|
14931
|
+
* a mano: es el objeto EXACTO de `@heroui/react`.
|
|
14932
|
+
*/
|
|
14933
|
+
const Tabs = Object.assign(TabsFacade, {
|
|
14934
|
+
Indicator: Tabs$1.Indicator,
|
|
14935
|
+
List: Tabs$1.List,
|
|
14936
|
+
ListContainer: Tabs$1.ListContainer,
|
|
14937
|
+
Panel: Tabs$1.Panel,
|
|
14938
|
+
Root: Tabs$1.Root,
|
|
14939
|
+
Separator: Tabs$1.Separator,
|
|
14940
|
+
Tab: TabFacade,
|
|
14941
|
+
});
|
|
14942
|
+
|
|
14688
14943
|
/**
|
|
14689
14944
|
* Tooltip - Componente BeweOS basado en HeroUI.
|
|
14690
14945
|
*
|
|
@@ -15485,4 +15740,4 @@ const NavigationLoadingProvider = ({ children, }) => {
|
|
|
15485
15740
|
return (jsxs(NavigationLoadingContext.Provider, { value: value, children: [children, jsx(NavigationLoadingOverlay, { isVisible: isVisible })] }));
|
|
15486
15741
|
};
|
|
15487
15742
|
|
|
15488
|
-
export { ALL_THEMES, AURORA_THEME_FAMILIES, AURORA_THEME_REGISTRY, AccordionList, AddHolidayForm, Alert, AnalyticsCard, AreaLineChart, AuraAutocomplete, AuraTable, AuraToastProvider, AuraAutocomplete as Autocomplete, AutocompleteItem, BEWEOS_THEME_MODE_COOKIE_NAME, Badge, BreadcrumbItem, BreadcrumbsComponent, Button, CONTAINER_ATTRIBUTE, Card, CardBody, Checkbox, Chip, ColorPicker, ColorSelector, ContentCarousel, Currency, DEFAULT_DONUT_COLORS, DEFAULT_PREDEFINED_COLORS, DEFAULT_RANKED_BAR_COLORS, DISMISS_CONTROL_ATTRIBUTE, DatePicker, DateRangePicker, DateSelector, Divider, DonutChart, DrawerFilters, Dropdown, DropdownSection, EmailPreview, EnumMenuNavListItem, GlobalToast, H1, H2, H3, H4, HeaderComponent, HeroUIProvider, HolidayType, IconComponent, Image$1 as Image, ImagePreview, Input, InputPassword, Kanban, KanbanCard, KanbanColumn, LINDA_TONE_PROPERTIES, LindaIcon, MenuClaw, MenuComponent, Modal, ModalBody, ModalContent, ModalFooter, ModalHeader, MultiStepWizard, NavigationLoadingContext, NavigationLoadingOverlay, NavigationLoadingProvider, P, Pagination, Phone, Progress, PromotionalBanner, REGISTERED_THEME_COLORS, RangeFilter, RankedBarList, RowSteps, DEFAULT_TRANSLATIONS$2 as SEGMENTATION_DEFAULT_TRANSLATIONS, ScheduleRow, SearchInput, SegmentationBuilder, Select, SelectItem, SelectSection, SimpleLineChart, SocialMediaBar, SocialMediaCarousel, SocialMediaPreview, StatTile, StepIndicator, Switch, Switch as SwitchComponent, THEME_COLOR_HEX_MAP, Table, TagsFilter, Textarea, ThemeContext, ThemePicker, ThemeProvider, TimeInput, TimeInput as TimeInputComponent, ToastContext, Tooltip, TwoColumnLayoutAgent, UploadFile, VerticalSteps, ViolinPlot, WhatsAppPreview, Wizard, WizardNavigation, WizardSidebar, applyCustomPrimaryColor, applyLindaTones, computeBars, computeMax, computeSlices, computeTotal, containerProps, createCurrencyFormatter, uniqueCountries as defaultCountries, defaultCurrencyOptions, defaultTranslations$5 as defaultTranslations, deriveLindaTones, dismissControlProps, forceLightOnlyThemeBeforeReact, formatAuroraThemeTooltip, formatDonutPercent, generateThemeColorScale, getContrastForeground, getRegisteredThemeColorBases, getSelectedKeyFromPath, hexToHsl, hexToThemeColor, hslToCssValue, isAuroraFullThemeId, isDismissControl, isDonutEmpty, isExactThemeColor, isGroupState, isHexColor, isRankedBarListEmpty, isSegmentationGroup, parseColorToHsl, removeCustomPrimaryColor, removeLindaTones, shouldClosePopoverOnInteractOutside, sizeMap, themeColors, useAuraToast, useCloseOnAncestorScroll, useDisclosure, useMediaQuery, useNavigationLoading, useThemeContext };
|
|
15743
|
+
export { ALL_THEMES, AURORA_THEME_FAMILIES, AURORA_THEME_REGISTRY, AccordionList, AddHolidayForm, Alert, AnalyticsCard, AreaLineChart, AuraAutocomplete, AuraTable, AuraToastProvider, AuraAutocomplete as Autocomplete, AutocompleteItem, BEWEOS_THEME_MODE_COOKIE_NAME, Badge, BreadcrumbItem, BreadcrumbsComponent, Button, CONTAINER_ATTRIBUTE, Card, CardBody, Checkbox, Chip, ColorPicker, ColorSelector, ContentCarousel, Currency, DEFAULT_DONUT_COLORS, DEFAULT_PREDEFINED_COLORS, DEFAULT_RANKED_BAR_COLORS, DISMISS_CONTROL_ATTRIBUTE, DatePicker, DateRangePicker, DateSelector, Divider, DonutChart, DrawerFilters, Dropdown, DropdownSection, EmailPreview, EnumMenuNavListItem, GlobalToast, H1, H2, H3, H4, HeaderComponent, HeroUIProvider, HolidayType, IconComponent, Image$1 as Image, ImagePreview, Input, InputPassword, Kanban, KanbanCard, KanbanColumn, LINDA_TONE_PROPERTIES, LindaIcon, MenuClaw, MenuComponent, Modal, ModalBody, ModalContent, ModalFooter, ModalHeader, MultiStepWizard, NavigationLoadingContext, NavigationLoadingOverlay, NavigationLoadingProvider, P, Pagination, Phone, Progress, PromotionalBanner, REGISTERED_THEME_COLORS, RangeFilter, RankedBarList, RowSteps, DEFAULT_TRANSLATIONS$2 as SEGMENTATION_DEFAULT_TRANSLATIONS, ScheduleRow, SearchInput, SegmentationBuilder, Select, SelectItem, SelectSection, SimpleLineChart, SocialMediaBar, SocialMediaCarousel, SocialMediaPreview, StatTile, StepIndicator, Switch, Switch as SwitchComponent, THEME_COLOR_HEX_MAP, Tab, Table, Tabs, TagsFilter, Textarea, ThemeContext, ThemePicker, ThemeProvider, TimeInput, TimeInput as TimeInputComponent, ToastContext, Tooltip, TwoColumnLayoutAgent, UploadFile, VerticalSteps, ViolinPlot, WhatsAppPreview, Wizard, WizardNavigation, WizardSidebar, applyCustomPrimaryColor, applyLindaTones, computeBars, computeMax, computeSlices, computeTotal, containerProps, createCurrencyFormatter, uniqueCountries as defaultCountries, defaultCurrencyOptions, defaultTranslations$5 as defaultTranslations, deriveLindaTones, dismissControlProps, forceLightOnlyThemeBeforeReact, formatAuroraThemeTooltip, formatDonutPercent, generateThemeColorScale, getContrastForeground, getRegisteredThemeColorBases, getSelectedKeyFromPath, hexToHsl, hexToThemeColor, hslToCssValue, isAuroraFullThemeId, isDismissControl, isDonutEmpty, isExactThemeColor, isGroupState, isHexColor, isRankedBarListEmpty, isSegmentationGroup, parseColorToHsl, removeCustomPrimaryColor, removeLindaTones, shouldClosePopoverOnInteractOutside, sizeMap, themeColors, useAuraToast, useCloseOnAncestorScroll, useDisclosure, useMediaQuery, useNavigationLoading, useThemeContext };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuraTable.d.ts","sourceRoot":"","sources":["../../../../src/components/table/AuraTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"AuraTable.d.ts","sourceRoot":"","sources":["../../../../src/components/table/AuraTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAa,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAK9E,KAAK,0BAA0B,CAAC,CAAC,SAAS,SAAS,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG;IAC1E,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IACtE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAkCF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,EAC9C,OAAO,EACP,KAAK,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACR,EAAE,0BAA0B,CAAC,CAAC,CAAC,qBAgC/B"}
|
|
@@ -3,6 +3,18 @@ import type React from "react";
|
|
|
3
3
|
export interface ColumnDef {
|
|
4
4
|
key: string;
|
|
5
5
|
label: string;
|
|
6
|
+
/**
|
|
7
|
+
* Marca esta columna como la IDENTIFICADORA de la fila: su celda pasa de `role="gridcell"` a
|
|
8
|
+
* `role="rowheader"`, que es lo que un lector de pantalla anuncia al recorrer la tabla fila a
|
|
9
|
+
* fila. No cambia nada visual.
|
|
10
|
+
*
|
|
11
|
+
* React Aria EXIGE que haya al menos una por tabla y, si no la hay, lanza
|
|
12
|
+
* `A table must have at least one Column with the isRowHeader prop set to true` mientras
|
|
13
|
+
* construye la colección (`react-aria-components/dist/private/Table.mjs:145`). Por eso
|
|
14
|
+
* `AuraTable` marca la PRIMERA columna cuando ninguna lo pide — ver `AuraTable.tsx`. Declara
|
|
15
|
+
* esta prop solo cuando la columna identificadora no sea la primera.
|
|
16
|
+
*/
|
|
17
|
+
isRowHeader?: boolean;
|
|
6
18
|
}
|
|
7
19
|
export interface TableItem {
|
|
8
20
|
id: string | number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuraTable.types.d.ts","sourceRoot":"","sources":["../../../../src/components/table/AuraTable.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,IAAI,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,SAAS;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"AuraTable.types.d.ts","sourceRoot":"","sources":["../../../../src/components/table/AuraTable.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,IAAI,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,SAAS;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACzB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,SAAS,IAAI,IAAI,CACrD,qBAAqB,EACrB,UAAU,CACV,GAAG;IACH,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,KAAK,EAAE,CAAC,EAAE,CAAC;CACX,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import type { TabProps, TabsProps } from "./Tabs.types";
|
|
3
|
+
/**
|
|
4
|
+
* `Tab` de Aurora: el `Tabs.Tab` de v3 **con el `Tabs.Indicator` que faltaba**.
|
|
5
|
+
*
|
|
6
|
+
* Es el MISMO componente que `Tabs.Tab` (el estático de abajo apunta aquí). Las dos superficies
|
|
7
|
+
* de entrada importan porque las apps usan las dos: beweanalytics importa `Tab` suelto
|
|
8
|
+
* (`import { Tab, Tabs } from "@beweco/aurora-ui"`, 8 usos) y agency/backoffice escriben
|
|
9
|
+
* `Tabs.Tab`. En v3 los dos nombres salen del mismo módulo y son el mismo objeto
|
|
10
|
+
* (`@heroui/react/dist/components/tabs/index.js`: `Tabs = Object.assign(TabsRoot, { …, Tab })`,
|
|
11
|
+
* y `dist/index.js:92-93` los exporta por separado), así que servir fachadas distintas por cada
|
|
12
|
+
* nombre habría sido el «falso amigo» que ya costó rondas en Alert/Checkbox/Switch.
|
|
13
|
+
*/
|
|
14
|
+
export declare const Tab: {
|
|
15
|
+
({ children, ...props }: TabProps): React.JSX.Element;
|
|
16
|
+
displayName: string;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* `Tabs` de Aurora: el root de v3 **más el `Tabs.ListContainer` que faltaba**, con el compound
|
|
20
|
+
* completo colgado como estáticos y `Tabs.Tab` apuntando a la FACHADA del tab.
|
|
21
|
+
*
|
|
22
|
+
* ```tsx
|
|
23
|
+
* // Mínimo: la fachada monta el carril y el indicador, y se ve correcto sin añadir nada.
|
|
24
|
+
* <Tabs>
|
|
25
|
+
* <Tabs.List aria-label="Vista">
|
|
26
|
+
* <Tabs.Tab id="a">Alfa</Tabs.Tab>
|
|
27
|
+
* </Tabs.List>
|
|
28
|
+
* </Tabs>
|
|
29
|
+
*
|
|
30
|
+
* // Anatomía completa a mano: la fachada la respeta y no duplica nada.
|
|
31
|
+
* <Tabs>
|
|
32
|
+
* <Tabs.ListContainer>
|
|
33
|
+
* <Tabs.List aria-label="Vista">
|
|
34
|
+
* <Tabs.Tab id="a"><Tabs.Indicator />Alfa</Tabs.Tab>
|
|
35
|
+
* </Tabs.List>
|
|
36
|
+
* </Tabs.ListContainer>
|
|
37
|
+
* </Tabs>
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* `Tabs.Root` queda deliberadamente crudo (el root pelado de v3, sin contenedor), igual que en
|
|
41
|
+
* `Table` y `Dropdown`: vía de escape para la **forma delgada** de v3 (lista sin contenedor, sin
|
|
42
|
+
* scroller ni chevrones), que sigue alcanzable y a la que `neutralize-v3.css` dedica su regla
|
|
43
|
+
* `:not(:has(.tabs__list-container))`. Ojo: en la forma delgada el `variant="secondary"` de v3 no
|
|
44
|
+
* pinta —todas sus reglas cuelgan de `> .tabs__list-container` (`tabs.css:234-282`)—, así que
|
|
45
|
+
* pasar por la fachada es además lo que hace funcionar esa variante.
|
|
46
|
+
*
|
|
47
|
+
* `Tabs.Indicator` se conserva exportado (como estático y vía `Tab`) para quien quiera componerlo
|
|
48
|
+
* a mano: es el objeto EXACTO de `@heroui/react`.
|
|
49
|
+
*/
|
|
50
|
+
export declare const Tabs: {
|
|
51
|
+
({ children, ...props }: TabsProps): React.JSX.Element;
|
|
52
|
+
displayName: string;
|
|
53
|
+
} & {
|
|
54
|
+
Indicator: ({ className, ...props }: import("@heroui/react").TabIndicatorProps) => import("react/jsx-runtime").JSX.Element;
|
|
55
|
+
List: ({ children, className, ...props }: import("@heroui/react").TabListProps) => import("react/jsx-runtime").JSX.Element;
|
|
56
|
+
ListContainer: <E extends keyof React.JSX.IntrinsicElements = "div">({ children, className, render, ...containerProps }: import("@heroui/react").TabListContainerProps<E> & Omit<React.JSX.IntrinsicElements[E], keyof import("@heroui/react").TabListContainerProps<E>>) => import("react/jsx-runtime").JSX.Element;
|
|
57
|
+
Panel: ({ children, className, ...props }: import("@heroui/react").TabPanelProps) => import("react/jsx-runtime").JSX.Element;
|
|
58
|
+
Root: ({ children, className, orientation, variant, ...props }: import("@heroui/react").TabsRootProps) => import("react/jsx-runtime").JSX.Element;
|
|
59
|
+
Separator: <E extends keyof React.JSX.IntrinsicElements = "span">({ className, ...props }: import("@heroui/react").TabSeparatorProps<E> & Omit<React.JSX.IntrinsicElements[E], keyof import("@heroui/react").TabSeparatorProps<E>>) => import("react/jsx-runtime").JSX.Element;
|
|
60
|
+
Tab: {
|
|
61
|
+
({ children, ...props }: TabProps): React.JSX.Element;
|
|
62
|
+
displayName: string;
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=Tabs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../../src/components/tabs/Tabs.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AA+JxD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,GAAG;6BA1C2B,QAAQ;;CA0CvB,CAAC;AAkD7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,IAAI;6BAtE2B,SAAS;;;;;;;;;;iCAtDV,QAAQ;;;CAoIjD,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { TabProps as HeroUITabProps, TabsRootProps } from "@heroui/react";
|
|
2
|
+
/**
|
|
3
|
+
* Props de la fachada `Tabs`: **las del root de HeroUI v3 tal cual**, sin quitar ni añadir nada.
|
|
4
|
+
*
|
|
5
|
+
* Se alias en vez de recomponerse a propósito. La fachada no introduce ninguna prop propia —solo
|
|
6
|
+
* inserta una pieza que faltaba en el árbol— así que cualquier `Omit`/`&` aquí sería una
|
|
7
|
+
* divergencia de la superficie que las apps ya compilan hoy contra el root crudo. `TabsRootProps`
|
|
8
|
+
* ya trae `children`/`className`/`variant`/`orientation` y las de `Tabs` de react-aria
|
|
9
|
+
* (`selectedKey`, `defaultSelectedKey`, `onSelectionChange`, `aria-label`…), que es todo lo que
|
|
10
|
+
* las apps pasan (verificado por grep en beweosagency, backoffice-beweos y beweanalytics).
|
|
11
|
+
*
|
|
12
|
+
* El nombre `TabsProps` no existía en la superficie pública de Aurora: `src/index.tsx` exportaba
|
|
13
|
+
* el valor `Tabs` pero ningún tipo, así que esto además cubre un hueco.
|
|
14
|
+
*/
|
|
15
|
+
export type TabsProps = TabsRootProps;
|
|
16
|
+
/**
|
|
17
|
+
* Props de la fachada `Tab`: las de `Tabs.Tab` de HeroUI v3 tal cual, por el mismo motivo.
|
|
18
|
+
*
|
|
19
|
+
* Incluye `children` con la forma de react-aria (`ReactNode | ((renderProps) => ReactNode)`) —
|
|
20
|
+
* la variante función importa, porque es el único caso en el que la fachada NO puede inspeccionar
|
|
21
|
+
* los hijos y se aparta (ver `Tabs.tsx`).
|
|
22
|
+
*/
|
|
23
|
+
export type TabProps = HeroUITabProps;
|
|
24
|
+
//# sourceMappingURL=Tabs.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tabs.types.d.ts","sourceRoot":"","sources":["../../../../src/components/tabs/Tabs.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE/E;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,SAAS,GAAG,aAAa,CAAC;AAEtC;;;;;;GAMG;AACH,MAAM,MAAM,QAAQ,GAAG,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/tabs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "./styles/globals.css";
|
|
2
2
|
import "./styles/linda-aura.css";
|
|
3
|
-
export { Accordion, AccordionItem, Avatar, Breadcrumbs, CardFooter, CardHeader, CheckboxGroup, CloseButton, cn, type DateValue, Drawer, DrawerBody, DrawerContent, DrawerFooter, DrawerHeader, DropdownItem, DropdownMenu, DropdownTrigger, Link, Popover, PopoverContent, PopoverTrigger, Radio, RadioGroup, type RangeValue, Skeleton, Slider, Spinner,
|
|
3
|
+
export { Accordion, AccordionItem, Avatar, Breadcrumbs, CardFooter, CardHeader, CheckboxGroup, CloseButton, cn, type DateValue, Drawer, DrawerBody, DrawerContent, DrawerFooter, DrawerHeader, DropdownItem, DropdownMenu, DropdownTrigger, Link, Popover, PopoverContent, PopoverTrigger, Radio, RadioGroup, type RangeValue, Skeleton, Slider, Spinner, TableBody, TableCell, TableColumn, TableHeader, TableRow, } from "@heroui/react";
|
|
4
4
|
export { AutocompleteItem, BreadcrumbItem, CardBody, Divider, HeroUIProvider, Image, Progress, SelectItem, SelectSection, useDisclosure, type Selection, type SortDescriptor, type TextAreaProps, } from "./compat/heroui-v2-shims";
|
|
5
5
|
export * from "./components/accordion-list";
|
|
6
6
|
export * from "./components/add-holiday-form";
|
|
@@ -76,6 +76,7 @@ export { SearchInput, type SearchInputProps } from "./components/search-input";
|
|
|
76
76
|
export { Select, type SelectProps, type SelectTranslations, } from "./components/select";
|
|
77
77
|
export { Table, type TableProps } from "./components/table";
|
|
78
78
|
export { Dropdown, DropdownSection, type DropdownProps, type DropdownSectionClassNames, type DropdownSectionProps, } from "./components/dropdown";
|
|
79
|
+
export { Tab, Tabs, type TabProps, type TabsProps, } from "./components/tabs";
|
|
79
80
|
export { Textarea, type TextareaProps } from "./components/textarea";
|
|
80
81
|
export { DatePicker, type DatePickerProps, } from "./components/datepicker";
|
|
81
82
|
export { DateRangePicker, type DateRangePickerProps, } from "./components/daterangepicker";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAC9B,OAAO,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"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"}
|