From af53cd4b528dda660d6b174576d477ed2feb2696 Mon Sep 17 00:00:00 2001 From: Manuel Cillero Date: Wed, 26 Aug 2026 23:58:33 +0200 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20(dropdown):=20Integra=20Dr?= =?UTF-8?q?opdown=20con=20accessible-menu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Renombra `dropdown.init.js` a `basic.dropdown.init.js` y añade cierre cruzado entre menús abiertos y cierre al clicar fuera. Corrige el icono de apertura/cierre y el estado cerrado por defecto de dropdown-menu. Migra `with_item` de `ChildOp` a `TypedOp`. --- assets/css/basic.css | 16 +++--- assets/js/basic.dropdown.init.js | 66 ++++++++++++++++++++++++ assets/js/dropdown.init.js | 26 ---------- src/base/component/dropdown.rs | 2 +- src/base/component/dropdown/component.rs | 29 ++++++----- src/base/theme/basic.rs | 2 +- 6 files changed, 91 insertions(+), 50 deletions(-) create mode 100644 assets/js/basic.dropdown.init.js delete mode 100644 assets/js/dropdown.init.js diff --git a/assets/css/basic.css b/assets/css/basic.css index ded9e3ef..2c69d35c 100644 --- a/assets/css/basic.css +++ b/assets/css/basic.css @@ -365,18 +365,14 @@ input:disabled + label { cursor: pointer; } .dropdown-toggle::after { - content: ""; + content: "\25BC"; display: inline-block; - width: 0.4em; - height: 0.4em; margin-left: 0.35em; - border-right: 0.125em solid currentColor; - border-bottom: 0.125em solid currentColor; - transform: rotate(45deg); + font-size: 0.8em; transition: transform .15s ease-in-out; } .dropdown:has(> .dropdown-menu.show) > .dropdown-toggle::after { - transform: rotate(-135deg); + transform: rotate(180deg); } .dropdown-menu { @@ -392,10 +388,12 @@ input:disabled + label { border: 1px solid color-mix(in srgb, var(--val-color--border) 15%, var(--val-color--bg)); border-radius: 0.375rem; box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); -} -.dropdown-menu.hide { + /* Closed by default */ display: none; } +.dropdown-menu.show { + display: block; +} .dropdown-item { display: block; diff --git a/assets/js/basic.dropdown.init.js b/assets/js/basic.dropdown.init.js new file mode 100644 index 00000000..2f593cea --- /dev/null +++ b/assets/js/basic.dropdown.init.js @@ -0,0 +1,66 @@ +// Conecta cada `Dropdown` (standalone o embebido en un `Nav`) con `accessible-menu` (ver +// basic.menu.min.js), que añade los roles ARIA, el `aria-expanded` y la navegación por teclado +// sobre el marcado ya generado en el servidor. Selecciona por clase, no por etiqueta, porque el +// disparador es un `