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}) =>

{label}

{children}
; const Row = ({children}) =>
{children}
; export function ThemeSamplePage() { const {theme, setTheme} = useContext(ThemeContext); const [confirmOpen, setConfirmOpen] = useState(false); const [comments, setComments] = useState(true); const [hotspot, setHotspot] = useState(true); return

Component gallery

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.
URL Downloader Progress Status Size Actions youtube.com/watch?v=hT6Rkfahyg video complete 312 MiB youtube.com/watch?v=Zk91nq2rrE video downloading 198 MiB example.org/prepping/water-storage.html archive failed — wikipedia_en_all_maxi_2026-06.zim zim pending 104 GiB