feat(waybar): hide groups based on screen size
This commit is contained in:
@@ -3,10 +3,14 @@ import { type IAudioMetadata, parseBlob } from "music-metadata-browser";
|
|||||||
import { Kitty } from "../Kitty";
|
import { Kitty } from "../Kitty";
|
||||||
import { SpotifyPlayer } from "./SpotifyPlayer";
|
import { SpotifyPlayer } from "./SpotifyPlayer";
|
||||||
import { Cava } from "./Cava";
|
import { Cava } from "./Cava";
|
||||||
|
import { useApp } from "~/hooks/useApp";
|
||||||
|
import { Responsive } from "../Responsive";
|
||||||
|
|
||||||
const song = "/audio/asinine-vivement-quoi.mp3";
|
const song = "/audio/asinine-vivement-quoi.mp3";
|
||||||
|
|
||||||
export const Music = () => {
|
export const Music = () => {
|
||||||
|
const { volume } = useApp();
|
||||||
|
|
||||||
const audio = useRef<HTMLAudioElement>(null);
|
const audio = useRef<HTMLAudioElement>(null);
|
||||||
|
|
||||||
const [metadata, setMetadata] = useState<IAudioMetadata>();
|
const [metadata, setMetadata] = useState<IAudioMetadata>();
|
||||||
@@ -40,6 +44,12 @@ export const Music = () => {
|
|||||||
});
|
});
|
||||||
}, [metadata]);
|
}, [metadata]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (audio.current) {
|
||||||
|
audio.current.volume = volume / 400;
|
||||||
|
}
|
||||||
|
}, [volume]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-row">
|
<div className="flex flex-row">
|
||||||
<audio ref={audio} src={song} onTimeUpdate={handleTimeUpdate} loop />
|
<audio ref={audio} src={song} onTimeUpdate={handleTimeUpdate} loop />
|
||||||
|
|||||||
31
src/components/Responsive.tsx
Normal file
31
src/components/Responsive.tsx
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import { useState, type ReactNode, useEffect } from "react";
|
||||||
|
import { cn } from "~/utils/react";
|
||||||
|
|
||||||
|
export const Responsive = (props: {
|
||||||
|
className?: string;
|
||||||
|
minScreenWidth?: number;
|
||||||
|
children: ReactNode;
|
||||||
|
}) => {
|
||||||
|
const [hidden, setHidden] = useState(false);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!props.minScreenWidth) return;
|
||||||
|
|
||||||
|
const handleResize = () => {
|
||||||
|
setHidden(
|
||||||
|
props.minScreenWidth !== undefined &&
|
||||||
|
window.innerWidth < props.minScreenWidth,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
window.addEventListener("resize", handleResize);
|
||||||
|
|
||||||
|
handleResize();
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
window.removeEventListener("resize", handleResize);
|
||||||
|
};
|
||||||
|
}, [props.minScreenWidth]);
|
||||||
|
|
||||||
|
return hidden ? null : props.children;
|
||||||
|
};
|
||||||
@@ -3,7 +3,7 @@ import { cn } from "~/utils/react";
|
|||||||
|
|
||||||
export const WaybarWidgetGroup = (props: {
|
export const WaybarWidgetGroup = (props: {
|
||||||
className?: string;
|
className?: string;
|
||||||
children: ReactNode | Array<ReactNode>;
|
children: ReactNode;
|
||||||
}) => (
|
}) => (
|
||||||
<div
|
<div
|
||||||
className={cn(
|
className={cn(
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ export const WaybarCPUWidget = (props: {
|
|||||||
<ul>
|
<ul>
|
||||||
<li>Total: {totalUsage}%</li>
|
<li>Total: {totalUsage}%</li>
|
||||||
{usage.map((value, i) => (
|
{usage.map((value, i) => (
|
||||||
<li>
|
<li key={i}>
|
||||||
Core{i}: {value}%
|
Core{i}: {value}%
|
||||||
</li>
|
</li>
|
||||||
))}
|
))}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { WaybarWidget } from "../WaybarWidget";
|
import { WaybarWidget } from "../WaybarWidget";
|
||||||
|
|
||||||
export const WaybarTitleWidget = () => (
|
export const WaybarTitleWidget = () => (
|
||||||
<WaybarWidget className="px-3">nvim</WaybarWidget>
|
<WaybarWidget className="px-3">pihkaal</WaybarWidget>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import { WaybarPowerWidget } from "./Widgets/WaybarPowerWidget";
|
|||||||
import { WaybarTrayWidget } from "./Widgets/WaybarTrayWidget";
|
import { WaybarTrayWidget } from "./Widgets/WaybarTrayWidget";
|
||||||
import { WaybarToggleThemeWidget } from "./Widgets/WaybarToggleThemeWidget";
|
import { WaybarToggleThemeWidget } from "./Widgets/WaybarToggleThemeWidget";
|
||||||
import { WaybarWeatherWidget } from "./Widgets/WaybarWeatherWidget";
|
import { WaybarWeatherWidget } from "./Widgets/WaybarWeatherWidget";
|
||||||
|
import { Responsive } from "../Responsive";
|
||||||
|
|
||||||
export const Waybar = () => {
|
export const Waybar = () => {
|
||||||
return (
|
return (
|
||||||
@@ -25,11 +26,12 @@ export const Waybar = () => {
|
|||||||
<WaybarHomeWidget />
|
<WaybarHomeWidget />
|
||||||
</WaybarWidgetGroup>
|
</WaybarWidgetGroup>
|
||||||
|
|
||||||
|
<Responsive minScreenWidth={705}>
|
||||||
<WaybarWidgetGroup>
|
<WaybarWidgetGroup>
|
||||||
<WaybarCPUWidget
|
<WaybarCPUWidget
|
||||||
variation={1}
|
variation={1}
|
||||||
frequency={3250 + randomMinMax(-100, 100)}
|
frequency={3250 + randomMinMax(-100, 100)}
|
||||||
cores={10}
|
cores={12}
|
||||||
min={8}
|
min={8}
|
||||||
max={16}
|
max={16}
|
||||||
/>
|
/>
|
||||||
@@ -43,10 +45,13 @@ export const Waybar = () => {
|
|||||||
/>
|
/>
|
||||||
<WaybarDiskWidget current={35.9} variation={4.1} capacity={160.3} />
|
<WaybarDiskWidget current={35.9} variation={4.1} capacity={160.3} />
|
||||||
</WaybarWidgetGroup>
|
</WaybarWidgetGroup>
|
||||||
|
</Responsive>
|
||||||
|
|
||||||
|
<Responsive minScreenWidth={910}>
|
||||||
<WaybarWidgetGroup>
|
<WaybarWidgetGroup>
|
||||||
<WaybarTitleWidget />
|
<WaybarTitleWidget />
|
||||||
</WaybarWidgetGroup>
|
</WaybarWidgetGroup>
|
||||||
|
</Responsive>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center">
|
<div className="flex items-center">
|
||||||
<WaybarWidgetGroup>
|
<WaybarWidgetGroup>
|
||||||
@@ -56,6 +61,7 @@ export const Waybar = () => {
|
|||||||
</WaybarWidgetGroup>
|
</WaybarWidgetGroup>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center justify-end gap-2">
|
<div className="flex items-center justify-end gap-2">
|
||||||
|
<Responsive minScreenWidth={1320}>
|
||||||
<WaybarWidgetGroup>
|
<WaybarWidgetGroup>
|
||||||
<WaybarTemperatureWidget
|
<WaybarTemperatureWidget
|
||||||
min={50}
|
min={50}
|
||||||
@@ -66,18 +72,23 @@ export const Waybar = () => {
|
|||||||
|
|
||||||
<WaybarBatteryWidget frequency={7000 + randomMinMax(-100, 100)} />
|
<WaybarBatteryWidget frequency={7000 + randomMinMax(-100, 100)} />
|
||||||
</WaybarWidgetGroup>
|
</WaybarWidgetGroup>
|
||||||
|
</Responsive>
|
||||||
|
|
||||||
|
<Responsive minScreenWidth={970}>
|
||||||
<WaybarWidgetGroup>
|
<WaybarWidgetGroup>
|
||||||
<WaybarBrightnessWidget />
|
<WaybarBrightnessWidget />
|
||||||
<WaybarVolumeWidget />
|
<WaybarVolumeWidget />
|
||||||
<WaybarMicrophoneWidget />
|
<WaybarMicrophoneWidget />
|
||||||
</WaybarWidgetGroup>
|
</WaybarWidgetGroup>
|
||||||
|
</Responsive>
|
||||||
|
|
||||||
|
<Responsive minScreenWidth={475}>
|
||||||
<WaybarWidgetGroup>
|
<WaybarWidgetGroup>
|
||||||
<WaybarTrayWidget />
|
<WaybarTrayWidget />
|
||||||
<WaybarWeatherWidget />
|
<WaybarWeatherWidget />
|
||||||
<WaybarToggleThemeWidget />
|
<WaybarToggleThemeWidget />
|
||||||
</WaybarWidgetGroup>
|
</WaybarWidgetGroup>
|
||||||
|
</Responsive>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user