diff --git a/packages/browser-sdk/src/toolbar/Features.css b/packages/browser-sdk/src/toolbar/Features.css index 1083e987..8d724022 100644 --- a/packages/browser-sdk/src/toolbar/Features.css +++ b/packages/browser-sdk/src/toolbar/Features.css @@ -50,13 +50,17 @@ transition-duration: 0.075s; transition-timing-function: cubic-bezier(0.75, -0.015, 0.565, 1.055); - &.show { + &.show-on-open { opacity: 1; transform: translateY(0); /* stagger effect where first item (i=0) has no delay, and delay is based on item count (n) so total animation time always is 509ms */ transition-delay: calc(0.05s * var(--i) / max(var(--n) - 1, 1)); } + + &.not-visible { + visibility: hidden; + } } .feature-name-cell { @@ -70,7 +74,9 @@ .feature-link { color: var(--text-color); text-decoration: none; - &:hover { + + &:hover, + &:focus-visible { text-decoration: underline; } } @@ -83,6 +89,13 @@ .reset { color: var(--brand300); + + text-decoration: none; + + &:hover, + &:focus-visible { + text-decoration: underline; + } } .feature-switch-cell { diff --git a/packages/browser-sdk/src/toolbar/Features.tsx b/packages/browser-sdk/src/toolbar/Features.tsx index ec50bf66..6dc3edde 100644 --- a/packages/browser-sdk/src/toolbar/Features.tsx +++ b/packages/browser-sdk/src/toolbar/Features.tsx @@ -6,27 +6,40 @@ import { FeatureItem } from "./Toolbar"; export function FeaturesTable({ features, + searchQuery, setEnabledOverride, appBaseUrl, isOpen, }: { features: FeatureItem[]; + searchQuery: string | null; setEnabledOverride: (key: string, value: boolean | null) => void; appBaseUrl: string; isOpen: boolean; }) { - if (features.length === 0) { + const searchedFeatures = + searchQuery === null + ? features + : [...features].sort((a, _b) => (a.key.includes(searchQuery) ? -1 : 1)); + + if (searchedFeatures.length === 0) { return
|
@@ -64,6 +83,7 @@ function FeatureRow({
class="feature-link"
href={`${appBaseUrl}/envs/current/features/by-key/${feature.key}`}
rel="noreferrer"
+ tabIndex={index + 1}
target="_blank"
>
{feature.key}
@@ -74,6 +94,7 @@ function FeatureRow({
|
@@ -83,6 +104,7 @@ function FeatureRow({
(feature.localOverride === null && feature.isEnabled) ||
feature.localOverride === true
}
+ tabIndex={index + 1}
onChange={(e) => {
const isChecked = e.currentTarget.checked;
const isOverridden = isChecked !== feature.isEnabled;
@@ -103,6 +125,7 @@ export function FeatureSearch({
onSearch(s.currentTarget.value)}
@@ -113,10 +136,11 @@ export function FeatureSearch({
function Reset({
setEnabledOverride,
featureKey,
+ ...props
}: {
setEnabledOverride: (key: string, value: boolean | null) => void;
featureKey: string;
-}) {
+} & h.JSX.HTMLAttributes