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 && (
-
- {fetchedLanguages.map((lang, index) =>
- lang.subLanguages.length > 0 ? (
-
- ) : (
- - handleSelect(lang)}
- className={`selector__item ${
- language.name === lang.name ? "selected" : ""
- } ${focusedIndex === index ? "focused" : ""}`}
- aria-selected={language.name === lang.name}
- >
-
-
- )
- )}
-
- )}
+
+ {fetchedLanguages.map((lang, index) =>
+ lang.subLanguages.length > 0 ? (
+
+ ) : (
+ - handleSelect(lang)}
+ className={`selector__item ${
+ language.name === lang.name ? "selected" : ""
+ } ${focusedIndex === index ? "focused" : ""}`}
+ aria-selected={language.name === lang.name}
+ >
+
+
+ )
+ )}
+
);
};
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;