diff --git a/src/components/LanguageSelector.tsx b/src/components/LanguageSelector.tsx index c7c1ecfd..b43d3916 100644 --- a/src/components/LanguageSelector.tsx +++ b/src/components/LanguageSelector.tsx @@ -152,9 +152,13 @@ const LanguageSelector = () => { useEffect(() => { if (isOpen && focusedIndex >= 0) { - const element = document.querySelector( - `.selector__item:nth-child(${focusedIndex + 1})` - ) as HTMLElement; + const elements = Array.from( + document.querySelectorAll(".selector__item") + ) as HTMLElement[]; + const focusableElements = elements.filter( + (el) => el.getAttribute("tabIndex") !== "-1" + ); + const element = focusableElements[focusedIndex]; element?.focus(); } }, [isOpen, focusedIndex]); @@ -186,43 +190,41 @@ const LanguageSelector = () => { - {isOpen && ( - - )} + ); }; diff --git a/src/components/SubLanguageSelector.tsx b/src/components/SubLanguageSelector.tsx index 7b0d271c..db104afc 100644 --- a/src/components/SubLanguageSelector.tsx +++ b/src/components/SubLanguageSelector.tsx @@ -47,7 +47,7 @@ const SubLanguageSelector = ({ <>
  • - {opened && - parentLanguage.subLanguages.map((sl) => ( -
  • - -
  • - ))} + {parentLanguage.subLanguages.map((sl) => ( +
  • + +
  • + ))} ); }; diff --git a/src/styles/main.css b/src/styles/main.css index 843f8a88..42636d1e 100644 --- a/src/styles/main.css +++ b/src/styles/main.css @@ -400,7 +400,7 @@ abbr { border-left: 7px solid transparent; border-right: 7px solid transparent; border-top: 7px solid var(--clr-text-primary); /* [1] */ - transition: transform 100ms ease; + transition: transform 300ms ease; } .selector--open .selector__arrow { @@ -413,7 +413,7 @@ abbr { position: absolute; width: 100%; - max-height: 20rem; + height: 50vh; overflow-y: auto; background-color: var(--clr-bg-secondary); @@ -426,10 +426,28 @@ abbr { box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2); z-index: 1; + transition: all 300ms ease; } -.selector__dropdown:focus-within { - border-color: var(--clr-accent); +.selector__dropdown.hidden { + border: none; + padding: 0; + height: 0; + opacity: 0; + overflow: hidden; +} + +.selector__dropdown::-webkit-scrollbar { + width: 8px; +} + +.selector__dropdown::-webkit-scrollbar-thumb { + background: var(--scrollbar-thumb); + border-radius: 4px; +} + +.selector__dropdown::-webkit-scrollbar-thumb:hover { + background: var(--scrollbar-thumb); } .selector__item { @@ -439,10 +457,19 @@ abbr { gap: 1rem; align-items: center; border-radius: var(--br-md); + transition: all 300ms ease; } .sublanguage__item { + height: 3rem; margin-left: 1.5rem; + transition: all 300ms ease; +} + +.sublanguage__item.hidden { + height: 0; + opacity: 0; + overflow: hidden; } .sublanguage__button{ @@ -462,6 +489,11 @@ abbr { transform: rotate(-90deg); transition: transform 100ms ease; cursor: pointer; + transition: all 200ms ease; +} + +.sublanguage__arrow:hover { + border-top-color: var(--clr-accent); } [aria-expanded="true"] .sublanguage__arrow { @@ -472,6 +504,10 @@ abbr { border-top-color: var(--clr-text-tertiary); } +.selector__item.selected .sublanguage__arrow:hover { + border-top-color: var(--clr-text-primary); +} + .selector__item label { width: 100%; padding: 0.25em 0.75em;