fix: improve useMediaQuery examples

Signed-off-by: Antony Bouyon <antony.bouyon@believe.com>
This commit is contained in:
Antony Bouyon
2026-01-21 13:49:16 +01:00
parent a57041b196
commit 8317533ea9
4 changed files with 50 additions and 20 deletions
@@ -1,13 +1,12 @@
'use client';
import { useMediaQuery } from '@backstage/ui/src/hooks/useMediaQuery';
import './example.css';
export function UseMediaQueryThemeExample() {
const isDarkMode = useMediaQuery('(prefers-color-scheme: dark)');
return (
<div>
{isDarkMode ? 'User prefers Dark mode' : 'User prefers Light mode'}
</div>
<p>{isDarkMode ? 'User prefers Dark mode' : 'User prefers Light mode'}</p>
);
}
@@ -17,11 +16,11 @@ export function UseMediaQueryResponsiveExample() {
const isDesktop = useMediaQuery('(min-width: 1025px)');
return (
<div>
<p>
{isMobile && '<MobileLayout />'}
{isTablet && '<TabletLayout />'}
{isDesktop && '<DesktopLayout />'}
</div>
</p>
);
}
@@ -31,12 +30,14 @@ export function UseMediaQueryPreferencesExample() {
);
return (
<div className={prefersReducedMotion ? 'no-animations' : ''}>Content</div>
<p className={prefersReducedMotion ? 'no-animations' : 'animated-border'}>
Content
</p>
);
}
export function UseMediaQueryOrientationExample() {
const isPortrait = useMediaQuery('(orientation: portrait)');
return <div>{isPortrait ? 'Portrait mode' : 'Landscape mode'}</div>;
return <p>{isPortrait ? 'Portrait mode' : 'Landscape mode'}</p>;
}
@@ -0,0 +1,25 @@
@keyframes borderSlide {
0%,
100% {
transform: translateX(-90%);
}
50% {
transform: translateX(190%);
}
}
.animated-border {
position: relative;
overflow: hidden;
}
.animated-border::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
width: 50%;
height: 2px;
background-color: currentColor;
animation: borderSlide 5s ease-in-out infinite;
}
@@ -4,9 +4,12 @@ function MyComponent() {
const isDarkMode = useMediaQuery('(prefers-color-scheme: dark)');
return (
<div>
{isDarkMode ? 'Dark mode enabled' : 'Light mode enabled'}
</div>
<p>
{isDarkMode
? 'User prefers Dark mode'
: 'User prefers Light mode'
}
</p>
);
}`;
@@ -18,11 +21,11 @@ function ResponsiveLayout() {
const isDesktop = useMediaQuery('(min-width: 1025px)');
return (
<div>
<p>
{isMobile && <MobileLayout />}
{isTablet && <TabletLayout />}
{isDesktop && <DesktopLayout />}
</div>
</p>
);
}`;
@@ -32,11 +35,9 @@ function AccessibleComponent() {
const prefersReducedMotion = useMediaQuery('(prefers-reduced-motion: reduce)');
return (
<div
className={prefersReducedMotion ? 'no-animations' : ''}
>
<p className={prefersReducedMotion ? 'no-animations' : 'animated-border'}>
Content
</div>
</p>
);
}`;
@@ -46,8 +47,8 @@ function OrientationAware() {
const isPortrait = useMediaQuery('(orientation: portrait)');
return (
<div>
<p>
{isPortrait ? 'Portrait mode' : 'Landscape mode'}
</div>
</p>
);
}`;
+5 -2
View File
@@ -33,6 +33,7 @@ The `useStyles` hook is the core styling utility that processes component defini
<CodeBlock code={useStylesUsageSnippet} />
## Parameters
<PropsTable data={useStylesPropsDefs} isHook />
## Return Value
@@ -47,7 +48,10 @@ A component definition describes how a component should be styled:
<CodeBlock code={useStylesDefsSnippet} />
<Banner variant="info" text="The data-attributes definition should be kebab-case instead of camelCase." />
<Banner
variant="info"
text="The data-attributes definition should be kebab-case instead of camelCase."
/>
### Data Attributes
@@ -55,5 +59,4 @@ Data attributes enable state-based styling through CSS selectors. The hook autom
<CodeBlock code={useStylesAttributesSnippet} />
<ChangelogComponent component="use-styles" />