@beweco/aurora-ui 1.0.0-beta.117 → 1.0.0-beta.118
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
|
@@ -5469,6 +5469,33 @@ const ITEM_COLLAPSED_CLASS = "w-11 h-11 gap-0 p-0 justify-center";
|
|
|
5469
5469
|
// `wrapper` `w-full` — el título se comía el espacio libre y empujaba el `endContent` al borde.
|
|
5470
5470
|
// El `[data-slot="label"]` de v3 es `w-fit`, que es la otra mitad de P-14.
|
|
5471
5471
|
const ITEM_TITLE_CLASS = "w-full flex-1 text-sm font-medium text-default-500 group-data-[selected=true]:text-default-600";
|
|
5472
|
+
// TECH-2459 · G2 · fix de navegación — resolución de un ítem por su clave.
|
|
5473
|
+
//
|
|
5474
|
+
// `onSelectionChange` del `ListBox` entrega la CLAVE, no el ítem. v2 no necesitaba esto:
|
|
5475
|
+
// cada `ListboxItem` llevaba su propio `onPress={() => handleItemPress(item)}` y el ítem
|
|
5476
|
+
// entero viajaba en el closure. La búsqueda es recursiva para cubrir los tres niveles del
|
|
5477
|
+
// árbol (sección → ítem → sub-ítem). Solo los de primer nivel están en la colección del
|
|
5478
|
+
// `ListBox` —los sub-ítems son markup plano con su propio `onClick`, ver `renderSubItem`—,
|
|
5479
|
+
// pero `defaultSelectedKey` SÍ puede apuntar a un sub-ítem, y esa clave es la que hay que
|
|
5480
|
+
// resolver en la rama del conjunto vacío de `handleSelectionChange`.
|
|
5481
|
+
const findItemByKey = (items, key) => {
|
|
5482
|
+
for (const item of items) {
|
|
5483
|
+
if (item.key === key) {
|
|
5484
|
+
return item;
|
|
5485
|
+
}
|
|
5486
|
+
if (item.items) {
|
|
5487
|
+
const nested = findItemByKey(item.items, key);
|
|
5488
|
+
if (nested) {
|
|
5489
|
+
return nested;
|
|
5490
|
+
}
|
|
5491
|
+
}
|
|
5492
|
+
}
|
|
5493
|
+
return undefined;
|
|
5494
|
+
};
|
|
5495
|
+
// Un ítem de grupo NO navega nunca: su activación abre/cierra el `<details>` (expandido) o
|
|
5496
|
+
// el `Popover` (colapsado). Mismo criterio que v2, donde el `ListboxItem` del grupo era el
|
|
5497
|
+
// único sin `onPress`.
|
|
5498
|
+
const isNestItem = (item) => (item.items?.length ?? 0) > 0 && item.type === exports.EnumMenuNavListItem.Nest;
|
|
5472
5499
|
/**
|
|
5473
5500
|
* @component MenuNavList
|
|
5474
5501
|
* @description A versatile navigation list component that can be displayed in an expanded or collapsed state.
|
|
@@ -5497,6 +5524,64 @@ const MenuNavList = $8WNJc$react.forwardRef(({ items, isCollapsed, defaultSelect
|
|
|
5497
5524
|
document.activeElement.blur();
|
|
5498
5525
|
}
|
|
5499
5526
|
}, [onSelect]);
|
|
5527
|
+
// TECH-2459 · G2 · fix de navegación — QUÉ SE PERDIÓ AL MIGRAR.
|
|
5528
|
+
//
|
|
5529
|
+
// En v2 la navegación de un ítem de PRIMER NIVEL la disparaba su propio
|
|
5530
|
+
// `onPress={() => handleItemPress(item)}`, puesto en cada `ListboxItem` (v2 lo pasaba a
|
|
5531
|
+
// `usePress` sin condiciones). El `ListBoxItem` de v3 declara `PressEvents` en su tipo
|
|
5532
|
+
// pero NO los cablea: solo cablea `useKeyboard`/`useFocus`/`useHover`, y borra `onClick`
|
|
5533
|
+
// a propósito (`react-aria-components/dist/private/ListBox.mjs`, `delete
|
|
5534
|
+
// DOMProps.onClick`). Al traducir el componente ese `onPress` desapareció sin sustituto,
|
|
5535
|
+
// así que los ítems raíz se quedaron sin ninguna vía para llamar a `onSelect` y el menú
|
|
5536
|
+
// dejó de navegar en las 3 apps. Los sub-ítems no se enteraron porque son markup plano
|
|
5537
|
+
// con `onClick` (ver `renderSubItem`).
|
|
5538
|
+
//
|
|
5539
|
+
// POR QUÉ `onSelectionChange` Y NO `onAction` (leído en react-aria, no deducido):
|
|
5540
|
+
// `useSelectableItem` solo ejecuta la acción si `hasPrimaryAction = allowsActions &&
|
|
5541
|
+
// (!allowsSelection || manager.isEmpty)` (`react-aria/dist/private/selection/
|
|
5542
|
+
// useSelectableItem.mjs:116`). Con `selectionMode="single"` los ítems SÍ son
|
|
5543
|
+
// seleccionables y la selección NUNCA está vacía (`selectedKeys` es siempre un `Set` de
|
|
5544
|
+
// un elemento), así que `hasPrimaryAction` es permanentemente `false` y `onAction` no se
|
|
5545
|
+
// invoca jamás — ni el del `ListBox` ni el de cada `ListBoxItem`, porque ambos se
|
|
5546
|
+
// encadenan en el MISMO hueco (`react-aria/dist/private/listbox/useOption.mjs:68`).
|
|
5547
|
+
// `hasSecondaryAction` tampoco sirve: exige `selectionBehavior="replace"` y solo
|
|
5548
|
+
// dispararía con doble clic. Medido en el navegador antes del arreglo: con el `onAction`
|
|
5549
|
+
// que traía `renderItem`, ratón/Enter/Espacio daban 0 invocaciones de `onSelect`.
|
|
5550
|
+
//
|
|
5551
|
+
// Se pone UNO SOLO de los dos handlers a propósito: con `onAction` + `onSelectionChange`
|
|
5552
|
+
// activos a la vez, un clic navegaría dos veces.
|
|
5553
|
+
const handleSelectionChange = $8WNJc$react.useCallback((keys) => {
|
|
5554
|
+
// `selectionMode="single"` entrega 0 o 1 clave. El conjunto VACÍO no significa "nada
|
|
5555
|
+
// seleccionado": es el RECLIC sobre el ítem ya activo, que react-aria deselecciona
|
|
5556
|
+
// (`SelectionManager.toggleSelection` borra la clave y, sin `disallowEmptySelection`,
|
|
5557
|
+
// emite el `Set` vacío). Ese caso es real —el usuario pulsa dos veces su sección
|
|
5558
|
+
// actual— y la clave que hay que reenviar es la controlada. Por eso el `ListBox` lleva
|
|
5559
|
+
// `escapeKeyBehavior="none"`: es la OTRA fuente de conjunto vacío
|
|
5560
|
+
// (`useSelectableCollection.mjs:187`) y sin desactivarla un Escape con el menú
|
|
5561
|
+
// enfocado navegaría a la ruta actual — medido quitando la prop: 1 invocación
|
|
5562
|
+
// fantasma de `onSelect` con solo pulsar Escape.
|
|
5563
|
+
const changedKey = keys === "all"
|
|
5564
|
+
? undefined
|
|
5565
|
+
: Array.from(keys)[0];
|
|
5566
|
+
const key = changedKey ?? selectedKey;
|
|
5567
|
+
if (!key) {
|
|
5568
|
+
return;
|
|
5569
|
+
}
|
|
5570
|
+
const item = findItemByKey(items, key);
|
|
5571
|
+
if (!item) {
|
|
5572
|
+
return;
|
|
5573
|
+
}
|
|
5574
|
+
// El grupo se descarta aquí y no en el `ListBoxItem`, porque su press llega por tres
|
|
5575
|
+
// vías: la cabecera del `<details>`, el disparador del `Popover` colapsado y el
|
|
5576
|
+
// burbujeo desde un sub-ítem del `<details>` (el `<button>` plano es descendiente DOM
|
|
5577
|
+
// del `ListBoxItem` padre). Sin este filtro, un clic en un sub-ítem llamaría a
|
|
5578
|
+
// `onSelect` dos veces —una con la clave del sub-ítem y otra con la del grupo— y
|
|
5579
|
+
// abrir un grupo navegaría, algo que v2 no hacía.
|
|
5580
|
+
if (isNestItem(item)) {
|
|
5581
|
+
return;
|
|
5582
|
+
}
|
|
5583
|
+
handleItemPress(item);
|
|
5584
|
+
}, [handleItemPress, items, selectedKey]);
|
|
5500
5585
|
// Renders a sub-item (text-only, hierarchy line). Estilos de selección vía clase .selected en Menu.scss.
|
|
5501
5586
|
//
|
|
5502
5587
|
// ⚠️ TECH-2459 · G2 — markup PLANO (`<li><button>`), NO `ListBox.Item`. Se usa dentro de
|
|
@@ -5543,11 +5628,16 @@ const MenuNavList = $8WNJc$react.forwardRef(({ items, isCollapsed, defaultSelect
|
|
|
5543
5628
|
return renderNestItem(item);
|
|
5544
5629
|
}
|
|
5545
5630
|
const isItemSelected = selectedKey === item.key;
|
|
5546
|
-
return (jsxRuntime.jsx(react.ListBoxItem, { id: item.key, textValue: item.title, "aria-selected": isItemSelected, "aria-label": item.title || `Menu item ${item.key}`, className: react.cn(ITEM_BASE_CLASS, isCollapsed && ITEM_COLLAPSED_CLASS),
|
|
5547
|
-
}, [isCollapsed, hideEndContent, iconClassName, selectedKey,
|
|
5631
|
+
return (jsxRuntime.jsx(react.ListBoxItem, { id: item.key, textValue: item.title, "aria-selected": isItemSelected, "aria-label": item.title || `Menu item ${item.key}`, className: react.cn(ITEM_BASE_CLASS, isCollapsed && ITEM_COLLAPSED_CLASS), children: isCollapsed ? (jsxRuntime.jsxs(react.Tooltip, { delay: 0, closeDelay: 200, children: [jsxRuntime.jsx(react.Tooltip.Trigger, { children: jsxRuntime.jsx("div", { className: "flex w-full items-center justify-center", "aria-hidden": "true", children: item.icon ? (jsxRuntime.jsx(IconComponent, { className: react.cn("text-default-500", "group-data-[selected=true]:text-default-600", iconClassName), icon: item.icon, size: "lg" })) : ((item.startContent ?? null)) }) }), jsxRuntime.jsx(react.Tooltip.Content, { placement: "right", className: "text-default-500", children: item.title })] })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [item.icon ? (jsxRuntime.jsx(IconComponent, { className: react.cn("text-default-500", "group-data-[selected=true]:text-default-600", iconClassName), icon: item.icon, size: "lg" })) : ((item.startContent ?? null)), jsxRuntime.jsx(react.Label, { className: ITEM_TITLE_CLASS, children: item.title }), hideEndContent ? null : (item.endContent ?? null)] })) }, item.key));
|
|
5632
|
+
}, [isCollapsed, hideEndContent, iconClassName, selectedKey, renderNestItem]);
|
|
5548
5633
|
// `ListBox` de v3 ya no es polimórfico via `as` (a diferencia de Breadcrumbs/Pagination) —
|
|
5549
5634
|
// renderiza siempre su propio contenedor; el landmark de navegación se envuelve por fuera.
|
|
5550
|
-
return (jsxRuntime.jsx("nav", { "aria-label": "Menu navigation", ref: ref, children: jsxRuntime.jsx(react.ListBox, { "aria-label": "Menu navigation", className: react.cn("list-none items-center", className), items: items, selectedKeys: selectedKeys, selectionMode: "single",
|
|
5635
|
+
return (jsxRuntime.jsx("nav", { "aria-label": "Menu navigation", ref: ref, children: jsxRuntime.jsx(react.ListBox, { "aria-label": "Menu navigation", className: react.cn("list-none items-center", className), items: items, selectedKeys: selectedKeys, selectionMode: "single", onSelectionChange: handleSelectionChange,
|
|
5636
|
+
// Neutraliza el Escape del `ListBox`: con el valor por defecto
|
|
5637
|
+
// (`clearSelection`) vaciaría la selección y `handleSelectionChange` leería ese
|
|
5638
|
+
// conjunto vacío como un reclic, navegando a la ruta actual sin que nadie haya
|
|
5639
|
+
// pulsado nada. Con `none`, Escape sigue sin hacer nada, igual que en v2.
|
|
5640
|
+
escapeKeyBehavior: "none", ...props, children: (item) => {
|
|
5551
5641
|
return item.items &&
|
|
5552
5642
|
item.items?.length > 0 &&
|
|
5553
5643
|
item?.type === exports.EnumMenuNavListItem.Nest ? (renderNestItem(item)) : item.items && item.items?.length > 0 ? (
|
package/dist/index.esm.js
CHANGED
|
@@ -5469,6 +5469,33 @@ const ITEM_COLLAPSED_CLASS = "w-11 h-11 gap-0 p-0 justify-center";
|
|
|
5469
5469
|
// `wrapper` `w-full` — el título se comía el espacio libre y empujaba el `endContent` al borde.
|
|
5470
5470
|
// El `[data-slot="label"]` de v3 es `w-fit`, que es la otra mitad de P-14.
|
|
5471
5471
|
const ITEM_TITLE_CLASS = "w-full flex-1 text-sm font-medium text-default-500 group-data-[selected=true]:text-default-600";
|
|
5472
|
+
// TECH-2459 · G2 · fix de navegación — resolución de un ítem por su clave.
|
|
5473
|
+
//
|
|
5474
|
+
// `onSelectionChange` del `ListBox` entrega la CLAVE, no el ítem. v2 no necesitaba esto:
|
|
5475
|
+
// cada `ListboxItem` llevaba su propio `onPress={() => handleItemPress(item)}` y el ítem
|
|
5476
|
+
// entero viajaba en el closure. La búsqueda es recursiva para cubrir los tres niveles del
|
|
5477
|
+
// árbol (sección → ítem → sub-ítem). Solo los de primer nivel están en la colección del
|
|
5478
|
+
// `ListBox` —los sub-ítems son markup plano con su propio `onClick`, ver `renderSubItem`—,
|
|
5479
|
+
// pero `defaultSelectedKey` SÍ puede apuntar a un sub-ítem, y esa clave es la que hay que
|
|
5480
|
+
// resolver en la rama del conjunto vacío de `handleSelectionChange`.
|
|
5481
|
+
const findItemByKey = (items, key) => {
|
|
5482
|
+
for (const item of items) {
|
|
5483
|
+
if (item.key === key) {
|
|
5484
|
+
return item;
|
|
5485
|
+
}
|
|
5486
|
+
if (item.items) {
|
|
5487
|
+
const nested = findItemByKey(item.items, key);
|
|
5488
|
+
if (nested) {
|
|
5489
|
+
return nested;
|
|
5490
|
+
}
|
|
5491
|
+
}
|
|
5492
|
+
}
|
|
5493
|
+
return undefined;
|
|
5494
|
+
};
|
|
5495
|
+
// Un ítem de grupo NO navega nunca: su activación abre/cierra el `<details>` (expandido) o
|
|
5496
|
+
// el `Popover` (colapsado). Mismo criterio que v2, donde el `ListboxItem` del grupo era el
|
|
5497
|
+
// único sin `onPress`.
|
|
5498
|
+
const isNestItem = (item) => (item.items?.length ?? 0) > 0 && item.type === EnumMenuNavListItem.Nest;
|
|
5472
5499
|
/**
|
|
5473
5500
|
* @component MenuNavList
|
|
5474
5501
|
* @description A versatile navigation list component that can be displayed in an expanded or collapsed state.
|
|
@@ -5497,6 +5524,64 @@ const MenuNavList = $8WNJc$react.forwardRef(({ items, isCollapsed, defaultSelect
|
|
|
5497
5524
|
document.activeElement.blur();
|
|
5498
5525
|
}
|
|
5499
5526
|
}, [onSelect]);
|
|
5527
|
+
// TECH-2459 · G2 · fix de navegación — QUÉ SE PERDIÓ AL MIGRAR.
|
|
5528
|
+
//
|
|
5529
|
+
// En v2 la navegación de un ítem de PRIMER NIVEL la disparaba su propio
|
|
5530
|
+
// `onPress={() => handleItemPress(item)}`, puesto en cada `ListboxItem` (v2 lo pasaba a
|
|
5531
|
+
// `usePress` sin condiciones). El `ListBoxItem` de v3 declara `PressEvents` en su tipo
|
|
5532
|
+
// pero NO los cablea: solo cablea `useKeyboard`/`useFocus`/`useHover`, y borra `onClick`
|
|
5533
|
+
// a propósito (`react-aria-components/dist/private/ListBox.mjs`, `delete
|
|
5534
|
+
// DOMProps.onClick`). Al traducir el componente ese `onPress` desapareció sin sustituto,
|
|
5535
|
+
// así que los ítems raíz se quedaron sin ninguna vía para llamar a `onSelect` y el menú
|
|
5536
|
+
// dejó de navegar en las 3 apps. Los sub-ítems no se enteraron porque son markup plano
|
|
5537
|
+
// con `onClick` (ver `renderSubItem`).
|
|
5538
|
+
//
|
|
5539
|
+
// POR QUÉ `onSelectionChange` Y NO `onAction` (leído en react-aria, no deducido):
|
|
5540
|
+
// `useSelectableItem` solo ejecuta la acción si `hasPrimaryAction = allowsActions &&
|
|
5541
|
+
// (!allowsSelection || manager.isEmpty)` (`react-aria/dist/private/selection/
|
|
5542
|
+
// useSelectableItem.mjs:116`). Con `selectionMode="single"` los ítems SÍ son
|
|
5543
|
+
// seleccionables y la selección NUNCA está vacía (`selectedKeys` es siempre un `Set` de
|
|
5544
|
+
// un elemento), así que `hasPrimaryAction` es permanentemente `false` y `onAction` no se
|
|
5545
|
+
// invoca jamás — ni el del `ListBox` ni el de cada `ListBoxItem`, porque ambos se
|
|
5546
|
+
// encadenan en el MISMO hueco (`react-aria/dist/private/listbox/useOption.mjs:68`).
|
|
5547
|
+
// `hasSecondaryAction` tampoco sirve: exige `selectionBehavior="replace"` y solo
|
|
5548
|
+
// dispararía con doble clic. Medido en el navegador antes del arreglo: con el `onAction`
|
|
5549
|
+
// que traía `renderItem`, ratón/Enter/Espacio daban 0 invocaciones de `onSelect`.
|
|
5550
|
+
//
|
|
5551
|
+
// Se pone UNO SOLO de los dos handlers a propósito: con `onAction` + `onSelectionChange`
|
|
5552
|
+
// activos a la vez, un clic navegaría dos veces.
|
|
5553
|
+
const handleSelectionChange = $8WNJc$react.useCallback((keys) => {
|
|
5554
|
+
// `selectionMode="single"` entrega 0 o 1 clave. El conjunto VACÍO no significa "nada
|
|
5555
|
+
// seleccionado": es el RECLIC sobre el ítem ya activo, que react-aria deselecciona
|
|
5556
|
+
// (`SelectionManager.toggleSelection` borra la clave y, sin `disallowEmptySelection`,
|
|
5557
|
+
// emite el `Set` vacío). Ese caso es real —el usuario pulsa dos veces su sección
|
|
5558
|
+
// actual— y la clave que hay que reenviar es la controlada. Por eso el `ListBox` lleva
|
|
5559
|
+
// `escapeKeyBehavior="none"`: es la OTRA fuente de conjunto vacío
|
|
5560
|
+
// (`useSelectableCollection.mjs:187`) y sin desactivarla un Escape con el menú
|
|
5561
|
+
// enfocado navegaría a la ruta actual — medido quitando la prop: 1 invocación
|
|
5562
|
+
// fantasma de `onSelect` con solo pulsar Escape.
|
|
5563
|
+
const changedKey = keys === "all"
|
|
5564
|
+
? undefined
|
|
5565
|
+
: Array.from(keys)[0];
|
|
5566
|
+
const key = changedKey ?? selectedKey;
|
|
5567
|
+
if (!key) {
|
|
5568
|
+
return;
|
|
5569
|
+
}
|
|
5570
|
+
const item = findItemByKey(items, key);
|
|
5571
|
+
if (!item) {
|
|
5572
|
+
return;
|
|
5573
|
+
}
|
|
5574
|
+
// El grupo se descarta aquí y no en el `ListBoxItem`, porque su press llega por tres
|
|
5575
|
+
// vías: la cabecera del `<details>`, el disparador del `Popover` colapsado y el
|
|
5576
|
+
// burbujeo desde un sub-ítem del `<details>` (el `<button>` plano es descendiente DOM
|
|
5577
|
+
// del `ListBoxItem` padre). Sin este filtro, un clic en un sub-ítem llamaría a
|
|
5578
|
+
// `onSelect` dos veces —una con la clave del sub-ítem y otra con la del grupo— y
|
|
5579
|
+
// abrir un grupo navegaría, algo que v2 no hacía.
|
|
5580
|
+
if (isNestItem(item)) {
|
|
5581
|
+
return;
|
|
5582
|
+
}
|
|
5583
|
+
handleItemPress(item);
|
|
5584
|
+
}, [handleItemPress, items, selectedKey]);
|
|
5500
5585
|
// Renders a sub-item (text-only, hierarchy line). Estilos de selección vía clase .selected en Menu.scss.
|
|
5501
5586
|
//
|
|
5502
5587
|
// ⚠️ TECH-2459 · G2 — markup PLANO (`<li><button>`), NO `ListBox.Item`. Se usa dentro de
|
|
@@ -5543,11 +5628,16 @@ const MenuNavList = $8WNJc$react.forwardRef(({ items, isCollapsed, defaultSelect
|
|
|
5543
5628
|
return renderNestItem(item);
|
|
5544
5629
|
}
|
|
5545
5630
|
const isItemSelected = selectedKey === item.key;
|
|
5546
|
-
return (jsx(ListBoxItem, { id: item.key, textValue: item.title, "aria-selected": isItemSelected, "aria-label": item.title || `Menu item ${item.key}`, className: cn(ITEM_BASE_CLASS, isCollapsed && ITEM_COLLAPSED_CLASS),
|
|
5547
|
-
}, [isCollapsed, hideEndContent, iconClassName, selectedKey,
|
|
5631
|
+
return (jsx(ListBoxItem, { id: item.key, textValue: item.title, "aria-selected": isItemSelected, "aria-label": item.title || `Menu item ${item.key}`, className: cn(ITEM_BASE_CLASS, isCollapsed && ITEM_COLLAPSED_CLASS), children: isCollapsed ? (jsxs(Tooltip$2, { delay: 0, closeDelay: 200, children: [jsx(Tooltip$2.Trigger, { children: jsx("div", { className: "flex w-full items-center justify-center", "aria-hidden": "true", children: item.icon ? (jsx(IconComponent, { className: cn("text-default-500", "group-data-[selected=true]:text-default-600", iconClassName), icon: item.icon, size: "lg" })) : ((item.startContent ?? null)) }) }), jsx(Tooltip$2.Content, { placement: "right", className: "text-default-500", children: item.title })] })) : (jsxs(Fragment, { children: [item.icon ? (jsx(IconComponent, { className: cn("text-default-500", "group-data-[selected=true]:text-default-600", iconClassName), icon: item.icon, size: "lg" })) : ((item.startContent ?? null)), jsx(Label, { className: ITEM_TITLE_CLASS, children: item.title }), hideEndContent ? null : (item.endContent ?? null)] })) }, item.key));
|
|
5632
|
+
}, [isCollapsed, hideEndContent, iconClassName, selectedKey, renderNestItem]);
|
|
5548
5633
|
// `ListBox` de v3 ya no es polimórfico via `as` (a diferencia de Breadcrumbs/Pagination) —
|
|
5549
5634
|
// renderiza siempre su propio contenedor; el landmark de navegación se envuelve por fuera.
|
|
5550
|
-
return (jsx("nav", { "aria-label": "Menu navigation", ref: ref, children: jsx(ListBox, { "aria-label": "Menu navigation", className: cn("list-none items-center", className), items: items, selectedKeys: selectedKeys, selectionMode: "single",
|
|
5635
|
+
return (jsx("nav", { "aria-label": "Menu navigation", ref: ref, children: jsx(ListBox, { "aria-label": "Menu navigation", className: cn("list-none items-center", className), items: items, selectedKeys: selectedKeys, selectionMode: "single", onSelectionChange: handleSelectionChange,
|
|
5636
|
+
// Neutraliza el Escape del `ListBox`: con el valor por defecto
|
|
5637
|
+
// (`clearSelection`) vaciaría la selección y `handleSelectionChange` leería ese
|
|
5638
|
+
// conjunto vacío como un reclic, navegando a la ruta actual sin que nadie haya
|
|
5639
|
+
// pulsado nada. Con `none`, Escape sigue sin hacer nada, igual que en v2.
|
|
5640
|
+
escapeKeyBehavior: "none", ...props, children: (item) => {
|
|
5551
5641
|
return item.items &&
|
|
5552
5642
|
item.items?.length > 0 &&
|
|
5553
5643
|
item?.type === EnumMenuNavListItem.Nest ? (renderNestItem(item)) : item.items && item.items?.length > 0 ? (
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuNavList.d.ts","sourceRoot":"","sources":["../../../../../../src/components/menu/_internal/menu-nav-list/MenuNavList.tsx"],"names":[],"mappings":"AAgCA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"MenuNavList.d.ts","sourceRoot":"","sources":["../../../../../../src/components/menu/_internal/menu-nav-list/MenuNavList.tsx"],"names":[],"mappings":"AAgCA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAoE5D;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,WAAW,sFAohBvB,CAAC"}
|