Compare commits

...

6 commits

Author SHA1 Message Date
thislight
d7e1358495
AppTopBar: add dark status bar
All checks were successful
/ depoly (push) Successful in 1m21s
2024-12-27 22:42:20 +08:00
thislight
59c7a5c588
Home: use AppTopBar 2024-12-27 22:36:35 +08:00
thislight
8d04874bce
AppTopBar: minor change to the text justify 2024-12-27 22:24:46 +08:00
thislight
4df609f1f5
Settings: use AppTopBar 2024-12-27 22:24:19 +08:00
thislight
81b5fe1450
Settings: add clear cache option 2024-12-27 21:56:32 +08:00
thislight
2da07a8d01
Settings: correct safe area emu hot reload 2024-12-27 21:40:39 +08:00
8 changed files with 105 additions and 83 deletions

View file

@ -1,6 +1,8 @@
import { createCacheBucket } from "~platform/cache"; import { createCacheBucket } from "~platform/cache";
export const cacheBucket = /* @__PURE__ */ createCacheBucket("mastodon"); export const CACHE_BUCKET_NAME = "mastodon"
export const cacheBucket = /* @__PURE__ */ createCacheBucket(CACHE_BUCKET_NAME);
export function toSmallCamelCase<T>(object: T) :T { export function toSmallCamelCase<T>(object: T) :T {
if (!object || typeof object !== "object") { if (!object || typeof object !== "object") {

View file

@ -1,6 +1,31 @@
.AppTopBar { .AppTopBar {
& > .toolbar { &::before {
contain: strict;
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
height: var(--safe-area-inset-top, 0);
background-color: rgba(0, 0, 0, 0.2);
}
&>.MuiToolbar-root {
padding-top: var(--safe-area-inset-top, 0px); padding-top: var(--safe-area-inset-top, 0px);
gap: 8px; gap: 8px;
&>button:first-child,
&>.MuiButtonBase-root:first-child {
margin-left: -0.15em;
}
&>button:last-child,
&>.MuiButtonBase-root:last-child {
margin-right: -0.15em;
}
&>.title {
margin-top: -0.2ch;
}
} }
} }

View file

@ -20,7 +20,6 @@ const AppTopBar: ParentComponent<{
> >
<Toolbar <Toolbar
variant={windowSize.width > windowSize.height ? "dense" : "regular"} variant={windowSize.width > windowSize.height ? "dense" : "regular"}
class="toolbar"
sx={{ paddingTop: "var(--safe-area-inset-top, 0px)" }} sx={{ paddingTop: "var(--safe-area-inset-top, 0px)" }}
> >
{props.children} {props.children}

View file

@ -25,6 +25,7 @@ import type { Template } from "@solid-primitives/i18n";
import { useStore } from "@nanostores/solid"; import { useStore } from "@nanostores/solid";
import { $settings } from "./stores"; import { $settings } from "./stores";
import { useNavigator } from "~platform/StackedRouter"; import { useNavigator } from "~platform/StackedRouter";
import AppTopBar from "~material/AppTopBar";
const ChooseLang: Component = () => { const ChooseLang: Component = () => {
const { pop } = useNavigator(); const { pop } = useNavigator();
@ -54,17 +55,12 @@ const ChooseLang: Component = () => {
return ( return (
<Scaffold <Scaffold
topbar={ topbar={
<AppBar position="static"> <AppTopBar>
<Toolbar
variant="dense"
sx={{ paddingTop: "var(--safe-area-inset-top, 0px)" }}
>
<IconButton color="inherit" onClick={[pop, 1]} disableRipple> <IconButton color="inherit" onClick={[pop, 1]} disableRipple>
<ArrowBack /> <ArrowBack />
</IconButton> </IconButton>
<Title>{t("Choose Language")}</Title> <Title>{t("Choose Language")}</Title>
</Toolbar> </AppTopBar>
</AppBar>
} }
> >
<List <List

View file

@ -18,6 +18,7 @@ import { createTranslator } from "~platform/i18n";
import { useStore } from "@nanostores/solid"; import { useStore } from "@nanostores/solid";
import { $settings } from "./stores"; import { $settings } from "./stores";
import { useNavigator } from "~platform/StackedRouter"; import { useNavigator } from "~platform/StackedRouter";
import AppTopBar from "~material/AppTopBar";
const Motions: Component = () => { const Motions: Component = () => {
const {pop} = useNavigator(); const {pop} = useNavigator();
@ -31,17 +32,12 @@ const Motions: Component = () => {
return ( return (
<Scaffold <Scaffold
topbar={ topbar={
<AppBar position="static"> <AppTopBar>
<Toolbar
variant="dense"
sx={{ paddingTop: "var(--safe-area-inset-top, 0px)" }}
>
<IconButton color="inherit" onClick={[pop, 1]} disableRipple> <IconButton color="inherit" onClick={[pop, 1]} disableRipple>
<ArrowBack /> <ArrowBack />
</IconButton> </IconButton>
<Title>{t("motions")}</Title> <Title>{t("motions")}</Title>
</Toolbar> </AppTopBar>
</AppBar>
} }
> >
<List <List

View file

@ -23,6 +23,7 @@ import type { Template } from "@solid-primitives/i18n";
import { $settings } from "./stores"; import { $settings } from "./stores";
import { useStore } from "@nanostores/solid"; import { useStore } from "@nanostores/solid";
import { useNavigator } from "~platform/StackedRouter"; import { useNavigator } from "~platform/StackedRouter";
import AppTopBar from "~material/AppTopBar";
const ChooseRegion: Component = () => { const ChooseRegion: Component = () => {
const { pop } = useNavigator(); const { pop } = useNavigator();
@ -49,17 +50,12 @@ const ChooseRegion: Component = () => {
return ( return (
<Scaffold <Scaffold
topbar={ topbar={
<AppBar position="static"> <AppTopBar>
<Toolbar
variant="dense"
sx={{ paddingTop: "var(--safe-area-inset-top, 0px)" }}
>
<IconButton color="inherit" onClick={[pop, 1]} disableRipple> <IconButton color="inherit" onClick={[pop, 1]} disableRipple>
<ArrowBack /> <ArrowBack />
</IconButton> </IconButton>
<Title>{t("Choose Region")}</Title> <Title>{t("Choose Region")}</Title>
</Toolbar> </AppTopBar>
</AppBar>
} }
> >
<List <List

View file

@ -18,6 +18,7 @@ import {
import { import {
Animation as AnimationIcon, Animation as AnimationIcon,
Close as CloseIcon, Close as CloseIcon,
DeleteForever,
Logout, Logout,
Public as PublicIcon, Public as PublicIcon,
Refresh as RefreshIcon, Refresh as RefreshIcon,
@ -40,6 +41,7 @@ import { type Template } from "@solid-primitives/i18n";
import { useServiceWorker } from "~platform/host.js"; import { useServiceWorker } from "~platform/host.js";
import { useSessions } from "../masto/clients.js"; import { useSessions } from "../masto/clients.js";
import { useNavigator } from "~platform/StackedRouter.jsx"; import { useNavigator } from "~platform/StackedRouter.jsx";
import AppTopBar from "~material/AppTopBar.jsx";
type Inset = { type Inset = {
top?: number; top?: number;
@ -141,11 +143,16 @@ function setupSafeAreaEmulation(name: string) {
} }
} }
const $$SAFE_AREA_EMU = "$$SAFE_AREA_EMU";
if (import.meta.hot) { if (import.meta.hot) {
import.meta.hot.accept((mod) => { import.meta.hot.on("vite:beforeUpdate", () => {
if (!mod) return; import.meta.hot!.data[$$SAFE_AREA_EMU] = screenOrientationCallback;
});
import.meta.hot.on("vite:afterUpdate", () => {
screenOrientationCallback = import.meta.hot?.data?.[$$SAFE_AREA_EMU];
if (screenOrientationCallback) { if (screenOrientationCallback) {
mod["screenOrientationCallback"] = screenOrientationCallback;
setTimeout(screenOrientationCallback, 0); setTimeout(screenOrientationCallback, 0);
} }
}); });
@ -193,17 +200,12 @@ const Settings: Component = () => {
return ( return (
<Scaffold <Scaffold
topbar={ topbar={
<AppBar position="static"> <AppTopBar>
<Toolbar
variant="dense"
sx={{ paddingTop: "var(--safe-area-inset-top, 0px)" }}
>
<IconButton color="inherit" onClick={[pop, 1]} disableRipple> <IconButton color="inherit" onClick={[pop, 1]} disableRipple>
<CloseIcon /> <CloseIcon />
</IconButton> </IconButton>
<Title>{t("Settings")}</Title> <Title>{t("Settings")}</Title>
</Toolbar> </AppTopBar>
</AppBar>
} }
> >
<List class="setting-list" use:solid-styled> <List class="setting-list" use:solid-styled>
@ -270,6 +272,17 @@ const Settings: Component = () => {
</ListItemButton> </ListItemButton>
<Divider /> <Divider />
</li> </li>
<li>
<ListSubheader>Storage</ListSubheader>
<ListItemButton disabled>
<ListItemIcon>
<DeleteForever />
</ListItemIcon>
<ListItemText secondary={"The cache is managed by your browser."}>
Clear cache...
</ListItemText>
</ListItemButton>
</li>
<li> <li>
<ListSubheader>{t("This Application")}</ListSubheader> <ListSubheader>{t("This Application")}</ListSubheader>
<ListItemButton component={A} href="./language"> <ListItemButton component={A} href="./language">

View file

@ -31,6 +31,7 @@ import {
createSingluarItemSelection, createSingluarItemSelection,
default as ItemSelectionProvider, default as ItemSelectionProvider,
} from "./toots/ItemSelectionProvider"; } from "./toots/ItemSelectionProvider";
import AppTopBar from "~material/AppTopBar";
const Home: ParentComponent = (props) => { const Home: ParentComponent = (props) => {
let panelList: HTMLDivElement; let panelList: HTMLDivElement;
@ -165,12 +166,7 @@ const Home: ParentComponent = (props) => {
<> <>
<Scaffold <Scaffold
topbar={ topbar={
<AppBar position="static"> <AppTopBar>
<Toolbar
variant="dense"
class="responsive"
sx={{ paddingTop: "var(--safe-area-inset-top, 0px)" }}
>
<Tabs> <Tabs>
<Tab focus={isTabFocus(0)} onClick={[onTabClick, 0]}> <Tab focus={isTabFocus(0)} onClick={[onTabClick, 0]}>
Home Home
@ -197,8 +193,7 @@ const Home: ParentComponent = (props) => {
</ListItemSecondaryAction> </ListItemSecondaryAction>
</MenuItem> </MenuItem>
</ProfileMenuButton> </ProfileMenuButton>
</Toolbar> </AppTopBar>
</AppBar>
} }
> >
<ItemSelectionProvider value={selectionState}> <ItemSelectionProvider value={selectionState}>