@beweco/aurora-ui 1.0.0-beta.150 → 1.0.0-beta.151

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 CHANGED
@@ -8121,8 +8121,18 @@ const MenuComponent = $8WNJc$react.memo(function Menu({ commerceInfo, userInfo,
8121
8121
  * la sección está acotada en altura, para que crecer el historial no arrastre ni
8122
8122
  * recorte el área de navegación.
8123
8123
  *
8124
- * Densidad de MenuClaw: fila de 36px, `px-2`, `text-small`/`text-tiny` y radios
8125
- * `rounded-lg`/`rounded-xl` — que es justo lo que difiere del menú compartido.
8124
+ * Densidad de MenuClaw: fila de 36px, `px-2`, `text-small`/`text-tiny` y filas del
8125
+ * historial con `rounded-lg` — que es justo lo que difiere del menú compartido.
8126
+ *
8127
+ * «Nueva conversación» es el `Button` de la librería, no un `<button>` propio, y
8128
+ * por eso lleva su radio por defecto (`rounded-[24px]`, la píldora de v3): sobre
8129
+ * 36px de alto el radio se recorta a la mitad, así que desplegado es una píldora
8130
+ * y plegado (`isIconOnly`, 36×36) un círculo. Encima de la fachada solo se fija lo
8131
+ * propio de MenuClaw: el alto de 36px (`size="md"` de la fachada mide 40), el
8132
+ * contenido alineado a la izquierda con `px-2`/`gap-3`, el peso 500 y el color
8133
+ * `bg-foreground`/`text-background`, que la fachada no tiene como `color` y que
8134
+ * gana a sus `--button-*` porque las utilidades van en una capa posterior a la de
8135
+ * `.button`.
8126
8136
  */
8127
8137
  const MenuClawHistoryPanel = $8WNJc$react.memo(function MenuClawHistoryPanel({ items, initialVisibleCount, onNewConversation, isCollapsed, title, newLabel, showMoreLabel, showLessLabel, onBeforeSelect, }) {
8128
8138
  const [isExpanded, setIsExpanded] = $8WNJc$react.useState(false);
@@ -8145,7 +8155,9 @@ const MenuClawHistoryPanel = $8WNJc$react.memo(function MenuClawHistoryPanel({ i
8145
8155
  if (isCollapsed && !onNewConversation) {
8146
8156
  return null;
8147
8157
  }
8148
- return (jsxRuntime.jsxs("div", { className: "flex max-h-[40%] min-h-0 flex-col gap-2 pb-3", children: [onNewConversation ? (jsxRuntime.jsxs("button", { type: "button", title: newLabel, onClick: onNewConversation, className: cn("flex h-9 shrink-0 items-center gap-3 rounded-xl bg-foreground px-2 text-sm font-medium text-background transition-opacity hover:opacity-90", "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus", isCollapsed && "justify-center"), children: [jsxRuntime.jsx("span", { className: "flex h-5 w-5 shrink-0 items-center justify-center", children: jsxRuntime.jsx(IconComponent, { icon: "solar:pen-new-square-linear", size: "md", "aria-hidden": true }) }), !isCollapsed ? (jsxRuntime.jsx("span", { className: "menu-claw-collapsible truncate", children: newLabel })) : null] })) : null, !isCollapsed && items.length > 0 ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("p", { className: "shrink-0 px-2 pb-1 pt-2 text-xs font-medium uppercase tracking-wide text-default-400", children: title }), jsxRuntime.jsx("ul", { "aria-label": title, className: "flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] [scrollbar-width:none]", children: visibleItems.map((item) => (jsxRuntime.jsx("li", { children: jsxRuntime.jsxs("button", { type: "button", disabled: item.disabled, "aria-disabled": item.disabled, title: item.title, onClick: () => handleItemPress(item), className: cn("flex min-h-9 w-full items-center gap-3 rounded-lg px-2 py-1.5 text-left text-sm text-default-600 transition-colors", "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus", item.disabled
8158
+ return (jsxRuntime.jsxs("div", { className: "flex max-h-[40%] min-h-0 flex-col gap-2 pb-3", children: [onNewConversation ? (jsxRuntime.jsxs(Button, { title: newLabel, "aria-label": isCollapsed ? newLabel : undefined, isIconOnly: isCollapsed, fullWidth: !isCollapsed, onPress: () => onNewConversation(), className: cn("h-9 shrink-0 bg-foreground text-sm font-medium text-background", isCollapsed
8159
+ ? "w-9 min-w-9 self-center"
8160
+ : "justify-start gap-3 px-2"), children: [jsxRuntime.jsx("span", { className: "flex h-5 w-5 shrink-0 items-center justify-center", children: jsxRuntime.jsx(IconComponent, { icon: "solar:pen-new-square-linear", size: "md", "aria-hidden": true }) }), !isCollapsed ? (jsxRuntime.jsx("span", { className: "menu-claw-collapsible truncate", children: newLabel })) : null] })) : null, !isCollapsed && items.length > 0 ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("p", { className: "shrink-0 px-2 pb-1 pt-2 text-xs font-medium uppercase tracking-wide text-default-400", children: title }), jsxRuntime.jsx("ul", { "aria-label": title, className: "flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] [scrollbar-width:none]", children: visibleItems.map((item) => (jsxRuntime.jsx("li", { children: jsxRuntime.jsxs("button", { type: "button", disabled: item.disabled, "aria-disabled": item.disabled, title: item.title, onClick: () => handleItemPress(item), className: cn("flex min-h-9 w-full items-center gap-3 rounded-lg px-2 py-1.5 text-left text-sm text-default-600 transition-colors", "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus", item.disabled
8149
8161
  ? "cursor-not-allowed opacity-50"
8150
8162
  : "hover:bg-default-100"), children: [jsxRuntime.jsx("span", { className: "flex h-5 w-5 shrink-0 items-center justify-center text-default-400", children: jsxRuntime.jsx(IconComponent, { icon: "solar:chat-round-dots-linear", size: "md", "aria-hidden": true }) }), jsxRuntime.jsxs("span", { className: "flex min-w-0 flex-col", children: [jsxRuntime.jsx("span", { className: "truncate", children: item.title }), item.meta ? (jsxRuntime.jsx("span", { className: "truncate text-xs text-default-400", children: item.meta })) : null] })] }) }, item.id))) }), hasHiddenItems ? (jsxRuntime.jsxs("button", { type: "button", onClick: handleToggleExpand, "aria-expanded": isExpanded, className: "flex w-full shrink-0 items-center gap-1.5 rounded-lg px-2 py-2 text-xs font-medium text-default-500 transition-colors hover:bg-default-100 hover:text-default-700 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus", children: [jsxRuntime.jsx(IconComponent, { icon: isExpanded
8151
8163
  ? "solar:alt-arrow-up-linear"
@@ -12706,13 +12718,28 @@ const VARIANT_BY_COLOR = {
12706
12718
  // de `.toast` (`bg-surface`: blanco en claro, la superficie oscura del pack en oscuro) en los seis
12707
12719
  // colores, y el color del estado va SOLO en el título y en el icono. La descripción es la de v3
12708
12720
  // (`text-muted`), sin tocar.
12709
- // La `x`, neutra en los seis colores: `text-muted`, el mismo gris de `.close-button--default` de
12710
- // v3, que llega solo al no pisarlo. `bg-transparent` quita el `bg-default` de esa clase: en Aurora
12711
- // `--color-default` es el gris MEDIO de v2 (`#d4d4d8`), no el casi imperceptible que v3 espera, y
12712
- // sobre el fondo blanco cantaba como una píldora gris permanente. El hover sí lleva el gris suave
12713
- // de v3 (`bg-default-hover`, que deriva del `--default` PROPIO de v3, no del de Aurora); hay que
12714
- // declararlo como utilidad porque el `bg-transparent` de arriba también gana al hover de v3.
12715
- const CLOSE_CLASS = "shrink-0 self-center bg-transparent hover:bg-default-hover data-[hovered=true]:bg-default-hover";
12721
+ // TECH-2459 · Geometría de v3 — DECISIÓN DEL USUARIO del 2-oct-2026, tras ver la .149/.150 en la
12722
+ // app: «déjalos tal cual se ven en la v3 de HeroUI». Al aspecto del 1-oct (colores) se suma ahora
12723
+ // la geometría: radio, caja del icono, hueco, alto y botón de cierre son los de `.toast` de v3 sin
12724
+ // pisar nada (`toast.css` de `@heroui/styles`, última aparición de cada selector):
12725
+ // - radio: `min(32px, var(--radius-3xl))` de `.toast` (24px con el tema de v3);
12726
+ // - padding `px-4 py-3` y `gap-1.5` (6px) entre icono y contenido, de `.toast`;
12727
+ // - icono: `.toast__indicator` (`p-1`) con el glifo a `size-4` por `[data-slot="toast-default-icon"]`,
12728
+ // así que el glifo lleva ese `data-slot`, igual que el que monta el `ToastIndicator` nativo;
12729
+ // - contenido: `.toast__content` (`self-center`), sin suelo de alto: lo dan el padding y el texto;
12730
+ // - la `x`: `.toast__close-button` (slot `close` de `toastVariants`), un círculo de 20px absoluto en
12731
+ // la esquina superior final (`-top-1 -end-1`, sobresale 4px), con borde y fondo `overlay` desde
12732
+ // `sm` y sin borde y fondo `default` por debajo; oculto en reposo y revelado por
12733
+ // `.toast[data-frontmost="true"]:hover` — el flag `data-frontmost` de abajo hace que esa regla
12734
+ // nativa aplique aquí también. v3 no tiene regla para `(hover: none)`: en táctil el primer toque
12735
+ // sobre el toast activa el `:hover` emulado y revela la `x`, y el segundo la pulsa (medido igual
12736
+ // en el nativo).
12737
+ //
12738
+ // Lo ÚNICO que se añade a v3 es el revelado con teclado (`REVEAL_ON_FOCUS`): v3 no tiene ninguna
12739
+ // regla de `:focus`/`:focus-visible`/`:focus-within` que lo haga visible, así que con Tab el foco
12740
+ // caía en un botón con `opacity: 0` (medido en el `Toast` nativo). Es accesibilidad, no aspecto: en
12741
+ // reposo y con ratón el botón se comporta exactamente como el nativo.
12742
+ const REVEAL_ON_FOCUS = "data-[focus-visible=true]:pointer-events-auto data-[focus-visible=true]:opacity-100";
12716
12743
  // TECH-2459 · Indicador de estado — REPUESTO el 8-sep-2026 por decisión del usuario, a partir del
12717
12744
  // finding `app-loginos-toast-v3-visual.md` (smoke de loginos contra QA, beta.114): con el MISMO
12718
12745
  // toast (`color="danger"`, login con credenciales inválidas) v2 pintaba un glifo de estado a la
@@ -12759,13 +12786,6 @@ const ICON_BY_COLOR = {
12759
12786
  danger: "",
12760
12787
  default: "",
12761
12788
  };
12762
- // Geometría del hueco del icono en v2 (slot `iconWrapper`: `flex-none relative w-9 h-9
12763
- // rounded-full grid place-items-center`, con el glifo a `w-6`). El toast de v2 pasaba
12764
- // `hideIconWrapper`, que solo dejaba transparente el círculo (`!bg-transparent !shadow-none
12765
- // !border-none`) sin ocultar el glifo, así que aquí se repone la caja de 36 px y el glifo de
12766
- // 24 px, sin fondo ni borde. `p-0` y `[&_svg]:size-6` anulan el `p-1` + icono de 16 px de
12767
- // `.toast__indicator`; son utilidades, así que ganan a la capa `components` de `@heroui/styles`.
12768
- const INDICATOR_BASE = "size-9 p-0 [&_svg]:size-6 [&_svg]:fill-current";
12769
12789
  const DEFAULT_TRANSLATIONS$6 = {
12770
12790
  closeButtonAriaLabel: "Cerrar notificación",
12771
12791
  };
@@ -12782,7 +12802,7 @@ function GlobalToast({ translations = {} } = {}) {
12782
12802
  const slots = react.toastVariants({ placement: "top end", variant });
12783
12803
  const isSecondary = color === "secondary";
12784
12804
  const StatusIcon = ICON_BY_VARIANT[variant];
12785
- return (jsxRuntime.jsx("div", { className: "fixed top-4 right-4 z-[2000] w-full max-w-sm", children: jsxRuntime.jsxs("div", { className: cn(slots.toast(), "gap-x-0 rounded-[12px]"), "data-frontmost": "true", style: { position: "relative" }, children: [jsxRuntime.jsx("div", { className: cn(slots.indicator(), INDICATOR_BASE, ICON_BY_COLOR[color]), children: jsxRuntime.jsx(StatusIcon, {}) }), jsxRuntime.jsxs("div", { className: cn(slots.content(), "ms-2 box-border min-h-10 justify-center"), children: [jsxRuntime.jsx("div", { className: slots.title(), style: isSecondary ? { color: "var(--color-secondary-600)" } : undefined, children: toast.title }), toast.description && (jsxRuntime.jsx("div", { className: slots.description(), children: toast.description }))] }), jsxRuntime.jsx(react.CloseButton, { "aria-label": t.closeButtonAriaLabel, className: CLOSE_CLASS, onPress: hideToast })] }) }));
12805
+ return (jsxRuntime.jsx("div", { className: "fixed top-4 right-4 z-[2000] w-full max-w-sm", children: jsxRuntime.jsxs("div", { className: slots.toast(), "data-frontmost": "true", style: { position: "relative" }, children: [jsxRuntime.jsx("div", { className: cn(slots.indicator(), ICON_BY_COLOR[color]), children: jsxRuntime.jsx(StatusIcon, { "data-slot": "toast-default-icon" }) }), jsxRuntime.jsxs("div", { className: slots.content(), children: [jsxRuntime.jsx("div", { className: slots.title(), style: isSecondary ? { color: "var(--color-secondary-600)" } : undefined, children: toast.title }), toast.description && (jsxRuntime.jsx("div", { className: slots.description(), children: toast.description }))] }), jsxRuntime.jsx(react.CloseButton, { "aria-label": t.closeButtonAriaLabel, className: cn(slots.close(), REVEAL_ON_FOCUS), onPress: hideToast })] }) }));
12786
12806
  }
12787
12807
 
12788
12808
  /**
package/dist/index.esm.js CHANGED
@@ -8121,8 +8121,18 @@ const MenuComponent = $8WNJc$react.memo(function Menu({ commerceInfo, userInfo,
8121
8121
  * la sección está acotada en altura, para que crecer el historial no arrastre ni
8122
8122
  * recorte el área de navegación.
8123
8123
  *
8124
- * Densidad de MenuClaw: fila de 36px, `px-2`, `text-small`/`text-tiny` y radios
8125
- * `rounded-lg`/`rounded-xl` — que es justo lo que difiere del menú compartido.
8124
+ * Densidad de MenuClaw: fila de 36px, `px-2`, `text-small`/`text-tiny` y filas del
8125
+ * historial con `rounded-lg` — que es justo lo que difiere del menú compartido.
8126
+ *
8127
+ * «Nueva conversación» es el `Button` de la librería, no un `<button>` propio, y
8128
+ * por eso lleva su radio por defecto (`rounded-[24px]`, la píldora de v3): sobre
8129
+ * 36px de alto el radio se recorta a la mitad, así que desplegado es una píldora
8130
+ * y plegado (`isIconOnly`, 36×36) un círculo. Encima de la fachada solo se fija lo
8131
+ * propio de MenuClaw: el alto de 36px (`size="md"` de la fachada mide 40), el
8132
+ * contenido alineado a la izquierda con `px-2`/`gap-3`, el peso 500 y el color
8133
+ * `bg-foreground`/`text-background`, que la fachada no tiene como `color` y que
8134
+ * gana a sus `--button-*` porque las utilidades van en una capa posterior a la de
8135
+ * `.button`.
8126
8136
  */
8127
8137
  const MenuClawHistoryPanel = $8WNJc$react.memo(function MenuClawHistoryPanel({ items, initialVisibleCount, onNewConversation, isCollapsed, title, newLabel, showMoreLabel, showLessLabel, onBeforeSelect, }) {
8128
8138
  const [isExpanded, setIsExpanded] = $8WNJc$react.useState(false);
@@ -8145,7 +8155,9 @@ const MenuClawHistoryPanel = $8WNJc$react.memo(function MenuClawHistoryPanel({ i
8145
8155
  if (isCollapsed && !onNewConversation) {
8146
8156
  return null;
8147
8157
  }
8148
- return (jsxs("div", { className: "flex max-h-[40%] min-h-0 flex-col gap-2 pb-3", children: [onNewConversation ? (jsxs("button", { type: "button", title: newLabel, onClick: onNewConversation, className: cn("flex h-9 shrink-0 items-center gap-3 rounded-xl bg-foreground px-2 text-sm font-medium text-background transition-opacity hover:opacity-90", "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus", isCollapsed && "justify-center"), children: [jsx("span", { className: "flex h-5 w-5 shrink-0 items-center justify-center", children: jsx(IconComponent, { icon: "solar:pen-new-square-linear", size: "md", "aria-hidden": true }) }), !isCollapsed ? (jsx("span", { className: "menu-claw-collapsible truncate", children: newLabel })) : null] })) : null, !isCollapsed && items.length > 0 ? (jsxs(Fragment$1, { children: [jsx("p", { className: "shrink-0 px-2 pb-1 pt-2 text-xs font-medium uppercase tracking-wide text-default-400", children: title }), jsx("ul", { "aria-label": title, className: "flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] [scrollbar-width:none]", children: visibleItems.map((item) => (jsx("li", { children: jsxs("button", { type: "button", disabled: item.disabled, "aria-disabled": item.disabled, title: item.title, onClick: () => handleItemPress(item), className: cn("flex min-h-9 w-full items-center gap-3 rounded-lg px-2 py-1.5 text-left text-sm text-default-600 transition-colors", "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus", item.disabled
8158
+ return (jsxs("div", { className: "flex max-h-[40%] min-h-0 flex-col gap-2 pb-3", children: [onNewConversation ? (jsxs(Button, { title: newLabel, "aria-label": isCollapsed ? newLabel : undefined, isIconOnly: isCollapsed, fullWidth: !isCollapsed, onPress: () => onNewConversation(), className: cn("h-9 shrink-0 bg-foreground text-sm font-medium text-background", isCollapsed
8159
+ ? "w-9 min-w-9 self-center"
8160
+ : "justify-start gap-3 px-2"), children: [jsx("span", { className: "flex h-5 w-5 shrink-0 items-center justify-center", children: jsx(IconComponent, { icon: "solar:pen-new-square-linear", size: "md", "aria-hidden": true }) }), !isCollapsed ? (jsx("span", { className: "menu-claw-collapsible truncate", children: newLabel })) : null] })) : null, !isCollapsed && items.length > 0 ? (jsxs(Fragment$1, { children: [jsx("p", { className: "shrink-0 px-2 pb-1 pt-2 text-xs font-medium uppercase tracking-wide text-default-400", children: title }), jsx("ul", { "aria-label": title, className: "flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] [scrollbar-width:none]", children: visibleItems.map((item) => (jsx("li", { children: jsxs("button", { type: "button", disabled: item.disabled, "aria-disabled": item.disabled, title: item.title, onClick: () => handleItemPress(item), className: cn("flex min-h-9 w-full items-center gap-3 rounded-lg px-2 py-1.5 text-left text-sm text-default-600 transition-colors", "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus", item.disabled
8149
8161
  ? "cursor-not-allowed opacity-50"
8150
8162
  : "hover:bg-default-100"), children: [jsx("span", { className: "flex h-5 w-5 shrink-0 items-center justify-center text-default-400", children: jsx(IconComponent, { icon: "solar:chat-round-dots-linear", size: "md", "aria-hidden": true }) }), jsxs("span", { className: "flex min-w-0 flex-col", children: [jsx("span", { className: "truncate", children: item.title }), item.meta ? (jsx("span", { className: "truncate text-xs text-default-400", children: item.meta })) : null] })] }) }, item.id))) }), hasHiddenItems ? (jsxs("button", { type: "button", onClick: handleToggleExpand, "aria-expanded": isExpanded, className: "flex w-full shrink-0 items-center gap-1.5 rounded-lg px-2 py-2 text-xs font-medium text-default-500 transition-colors hover:bg-default-100 hover:text-default-700 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus", children: [jsx(IconComponent, { icon: isExpanded
8151
8163
  ? "solar:alt-arrow-up-linear"
@@ -12706,13 +12718,28 @@ const VARIANT_BY_COLOR = {
12706
12718
  // de `.toast` (`bg-surface`: blanco en claro, la superficie oscura del pack en oscuro) en los seis
12707
12719
  // colores, y el color del estado va SOLO en el título y en el icono. La descripción es la de v3
12708
12720
  // (`text-muted`), sin tocar.
12709
- // La `x`, neutra en los seis colores: `text-muted`, el mismo gris de `.close-button--default` de
12710
- // v3, que llega solo al no pisarlo. `bg-transparent` quita el `bg-default` de esa clase: en Aurora
12711
- // `--color-default` es el gris MEDIO de v2 (`#d4d4d8`), no el casi imperceptible que v3 espera, y
12712
- // sobre el fondo blanco cantaba como una píldora gris permanente. El hover sí lleva el gris suave
12713
- // de v3 (`bg-default-hover`, que deriva del `--default` PROPIO de v3, no del de Aurora); hay que
12714
- // declararlo como utilidad porque el `bg-transparent` de arriba también gana al hover de v3.
12715
- const CLOSE_CLASS = "shrink-0 self-center bg-transparent hover:bg-default-hover data-[hovered=true]:bg-default-hover";
12721
+ // TECH-2459 · Geometría de v3 — DECISIÓN DEL USUARIO del 2-oct-2026, tras ver la .149/.150 en la
12722
+ // app: «déjalos tal cual se ven en la v3 de HeroUI». Al aspecto del 1-oct (colores) se suma ahora
12723
+ // la geometría: radio, caja del icono, hueco, alto y botón de cierre son los de `.toast` de v3 sin
12724
+ // pisar nada (`toast.css` de `@heroui/styles`, última aparición de cada selector):
12725
+ // - radio: `min(32px, var(--radius-3xl))` de `.toast` (24px con el tema de v3);
12726
+ // - padding `px-4 py-3` y `gap-1.5` (6px) entre icono y contenido, de `.toast`;
12727
+ // - icono: `.toast__indicator` (`p-1`) con el glifo a `size-4` por `[data-slot="toast-default-icon"]`,
12728
+ // así que el glifo lleva ese `data-slot`, igual que el que monta el `ToastIndicator` nativo;
12729
+ // - contenido: `.toast__content` (`self-center`), sin suelo de alto: lo dan el padding y el texto;
12730
+ // - la `x`: `.toast__close-button` (slot `close` de `toastVariants`), un círculo de 20px absoluto en
12731
+ // la esquina superior final (`-top-1 -end-1`, sobresale 4px), con borde y fondo `overlay` desde
12732
+ // `sm` y sin borde y fondo `default` por debajo; oculto en reposo y revelado por
12733
+ // `.toast[data-frontmost="true"]:hover` — el flag `data-frontmost` de abajo hace que esa regla
12734
+ // nativa aplique aquí también. v3 no tiene regla para `(hover: none)`: en táctil el primer toque
12735
+ // sobre el toast activa el `:hover` emulado y revela la `x`, y el segundo la pulsa (medido igual
12736
+ // en el nativo).
12737
+ //
12738
+ // Lo ÚNICO que se añade a v3 es el revelado con teclado (`REVEAL_ON_FOCUS`): v3 no tiene ninguna
12739
+ // regla de `:focus`/`:focus-visible`/`:focus-within` que lo haga visible, así que con Tab el foco
12740
+ // caía en un botón con `opacity: 0` (medido en el `Toast` nativo). Es accesibilidad, no aspecto: en
12741
+ // reposo y con ratón el botón se comporta exactamente como el nativo.
12742
+ const REVEAL_ON_FOCUS = "data-[focus-visible=true]:pointer-events-auto data-[focus-visible=true]:opacity-100";
12716
12743
  // TECH-2459 · Indicador de estado — REPUESTO el 8-sep-2026 por decisión del usuario, a partir del
12717
12744
  // finding `app-loginos-toast-v3-visual.md` (smoke de loginos contra QA, beta.114): con el MISMO
12718
12745
  // toast (`color="danger"`, login con credenciales inválidas) v2 pintaba un glifo de estado a la
@@ -12759,13 +12786,6 @@ const ICON_BY_COLOR = {
12759
12786
  danger: "",
12760
12787
  default: "",
12761
12788
  };
12762
- // Geometría del hueco del icono en v2 (slot `iconWrapper`: `flex-none relative w-9 h-9
12763
- // rounded-full grid place-items-center`, con el glifo a `w-6`). El toast de v2 pasaba
12764
- // `hideIconWrapper`, que solo dejaba transparente el círculo (`!bg-transparent !shadow-none
12765
- // !border-none`) sin ocultar el glifo, así que aquí se repone la caja de 36 px y el glifo de
12766
- // 24 px, sin fondo ni borde. `p-0` y `[&_svg]:size-6` anulan el `p-1` + icono de 16 px de
12767
- // `.toast__indicator`; son utilidades, así que ganan a la capa `components` de `@heroui/styles`.
12768
- const INDICATOR_BASE = "size-9 p-0 [&_svg]:size-6 [&_svg]:fill-current";
12769
12789
  const DEFAULT_TRANSLATIONS$6 = {
12770
12790
  closeButtonAriaLabel: "Cerrar notificación",
12771
12791
  };
@@ -12782,7 +12802,7 @@ function GlobalToast({ translations = {} } = {}) {
12782
12802
  const slots = toastVariants({ placement: "top end", variant });
12783
12803
  const isSecondary = color === "secondary";
12784
12804
  const StatusIcon = ICON_BY_VARIANT[variant];
12785
- return (jsx("div", { className: "fixed top-4 right-4 z-[2000] w-full max-w-sm", children: jsxs("div", { className: cn(slots.toast(), "gap-x-0 rounded-[12px]"), "data-frontmost": "true", style: { position: "relative" }, children: [jsx("div", { className: cn(slots.indicator(), INDICATOR_BASE, ICON_BY_COLOR[color]), children: jsx(StatusIcon, {}) }), jsxs("div", { className: cn(slots.content(), "ms-2 box-border min-h-10 justify-center"), children: [jsx("div", { className: slots.title(), style: isSecondary ? { color: "var(--color-secondary-600)" } : undefined, children: toast.title }), toast.description && (jsx("div", { className: slots.description(), children: toast.description }))] }), jsx(CloseButton, { "aria-label": t.closeButtonAriaLabel, className: CLOSE_CLASS, onPress: hideToast })] }) }));
12805
+ return (jsx("div", { className: "fixed top-4 right-4 z-[2000] w-full max-w-sm", children: jsxs("div", { className: slots.toast(), "data-frontmost": "true", style: { position: "relative" }, children: [jsx("div", { className: cn(slots.indicator(), ICON_BY_COLOR[color]), children: jsx(StatusIcon, { "data-slot": "toast-default-icon" }) }), jsxs("div", { className: slots.content(), children: [jsx("div", { className: slots.title(), style: isSecondary ? { color: "var(--color-secondary-600)" } : undefined, children: toast.title }), toast.description && (jsx("div", { className: slots.description(), children: toast.description }))] }), jsx(CloseButton, { "aria-label": t.closeButtonAriaLabel, className: cn(slots.close(), REVEAL_ON_FOCUS), onPress: hideToast })] }) }));
12786
12806
  }
12787
12807
 
12788
12808
  /**
@@ -8,8 +8,18 @@ import type { MenuClawHistoryPanelProps } from "./MenuClawHistoryPanel.types";
8
8
  * la sección está acotada en altura, para que crecer el historial no arrastre ni
9
9
  * recorte el área de navegación.
10
10
  *
11
- * Densidad de MenuClaw: fila de 36px, `px-2`, `text-small`/`text-tiny` y radios
12
- * `rounded-lg`/`rounded-xl` — que es justo lo que difiere del menú compartido.
11
+ * Densidad de MenuClaw: fila de 36px, `px-2`, `text-small`/`text-tiny` y filas del
12
+ * historial con `rounded-lg` — que es justo lo que difiere del menú compartido.
13
+ *
14
+ * «Nueva conversación» es el `Button` de la librería, no un `<button>` propio, y
15
+ * por eso lleva su radio por defecto (`rounded-[24px]`, la píldora de v3): sobre
16
+ * 36px de alto el radio se recorta a la mitad, así que desplegado es una píldora
17
+ * y plegado (`isIconOnly`, 36×36) un círculo. Encima de la fachada solo se fija lo
18
+ * propio de MenuClaw: el alto de 36px (`size="md"` de la fachada mide 40), el
19
+ * contenido alineado a la izquierda con `px-2`/`gap-3`, el peso 500 y el color
20
+ * `bg-foreground`/`text-background`, que la fachada no tiene como `color` y que
21
+ * gana a sus `--button-*` porque las utilidades van en una capa posterior a la de
22
+ * `.button`.
13
23
  */
14
24
  export declare const MenuClawHistoryPanel: React.FC<MenuClawHistoryPanelProps>;
15
25
  //# sourceMappingURL=MenuClawHistoryPanel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MenuClawHistoryPanel.d.ts","sourceRoot":"","sources":["../../../../../../src/components/menu-claw/_internal/menu-claw-history/MenuClawHistoryPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAIpD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAE9E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAyIlE,CAAC"}
1
+ {"version":3,"file":"MenuClawHistoryPanel.d.ts","sourceRoot":"","sources":["../../../../../../src/components/menu-claw/_internal/menu-claw-history/MenuClawHistoryPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAKpD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAE9E;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CA6IlE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"GlobalToast.d.ts","sourceRoot":"","sources":["../../../../src/components/toast/GlobalToast.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACX,gBAAgB,EAEhB,MAAM,qBAAqB,CAAC;AAwG7B,wBAAgB,WAAW,CAAC,EAAE,YAAiB,EAAE,GAAE,gBAAqB,sCA0FvE"}
1
+ {"version":3,"file":"GlobalToast.d.ts","sourceRoot":"","sources":["../../../../src/components/toast/GlobalToast.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACX,gBAAgB,EAEhB,MAAM,qBAAqB,CAAC;AA+G7B,wBAAgB,WAAW,CAAC,EAAE,YAAiB,EAAE,GAAE,gBAAqB,sCAuEvE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beweco/aurora-ui",
3
- "version": "1.0.0-beta.150",
3
+ "version": "1.0.0-beta.151",
4
4
  "description": "Bewe Aurora UI Component Library",
5
5
  "main": "./dist/index.cjs.js",
6
6
  "module": "./dist/index.esm.js",