import React, {useContext, useState} from 'react';
import {ThemeContext} from '../contexts/contexts';
import {
Button,
Card,
CardGroup,
Confirm,
Icon,
IconButton,
Label,
Loader,
Message,
Panel,
Placeholder,
Progress,
Select,
Statistic,
StatisticGroup,
Status,
Table,
TextInput,
Textarea,
Checkbox,
ThemePicker,
Toggle,
Tooltip,
toast,
} from './ui';
import {semanticColorNames} from '../themes/mantine';
/*
* A gallery of every component in the library, in the current theme.
*
* Reachable at /theme-sample and linked from Settings, so a user can see a theme
* before committing to it.
*
* EVERY new component belongs here. It is how we review the design and how we
* catch a component that only looks wrong in one of the four themes — which has
* already happened more than once.
*/
const Section = ({label, children}) =>
Every component in the WROLPi interface library, rendered in the {theme} theme.
Switch themes here or from the navigation bar.
The same picker the Settings page uses. The navigation bar has a compact
version; both read the same list of themes.
setConfirmOpen(true)}/>
In night mode Delete drops its fill for a dashed red outline; dashed means
destructive or failed, and nothing else uses it.
Indexing the media directory. This can take several minutes.
Channel settings were written to config/channels.yaml.
Downloads will resume tomorrow at 00:00.
HTTP 403 from the remote server after 3 attempts. Retry, or check the URL.
Icons inherit currentColor, so they follow every theme.
{[
['How To Sharpen An Axe The Right Way', 'Wranglerstar · 2024-11-03'],
['Pressure Canning Basics', 'RoseRed Homestead · 2025-02-17'],
['Solar Panel Wiring: Series vs Parallel', 'DIY Solar Power · 2025-08-21'],
['Ham Radio General License, Part 1', 'Ham Radio Crash Course · 2024-05-09'],
].map(([title, meta]) =>
}
/>)}
Danger zone
These actions are destructive and cannot be undone.