mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-12-04 20:25:11 -05:00
Delete old models package
This commit is contained in:
parent
339629fdca
commit
092bef52eb
@ -1,24 +0,0 @@
|
||||
{
|
||||
"name": "@kyoo/models",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"sideEffects": false,
|
||||
"packageManager": "yarn@3.2.4",
|
||||
"devDependencies": {
|
||||
"react-native-mmkv": "^2.12.2",
|
||||
"typescript": "^5.5.4"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@tanstack/react-query": "*",
|
||||
"react": "*",
|
||||
"react-native": "*"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"react-native-web": {
|
||||
"optional": true
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"zod": "^3.23.8"
|
||||
}
|
||||
}
|
||||
@ -1,19 +0,0 @@
|
||||
/*
|
||||
* Kyoo - A portable and vast media library solution.
|
||||
* Copyright (c) Kyoo.
|
||||
*
|
||||
* See AUTHORS.md and LICENSE file in the project root for full license information.
|
||||
*
|
||||
* Kyoo is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* Kyoo is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Kyoo. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
@ -1,77 +0,0 @@
|
||||
/*
|
||||
* Kyoo - A portable and vast media library solution.
|
||||
* Copyright (c) Kyoo.
|
||||
*
|
||||
* See AUTHORS.md and LICENSE file in the project root for full license information.
|
||||
*
|
||||
* Kyoo is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* Kyoo is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Kyoo. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import { useQueryClient } from "@tanstack/react-query";
|
||||
import { atom, getDefaultStore, useAtomValue, useSetAtom } from "jotai";
|
||||
import {
|
||||
type ReactNode,
|
||||
createContext,
|
||||
useContext,
|
||||
useEffect,
|
||||
useMemo,
|
||||
useRef,
|
||||
useState,
|
||||
} from "react";
|
||||
import { Platform } from "react-native";
|
||||
import { useMMKVString } from "react-native-mmkv";
|
||||
import { z } from "zod";
|
||||
import { removeAccounts, setCookie, updateAccount } from "./account-internal";
|
||||
import type { KyooErrors } from "./kyoo-errors";
|
||||
import { useFetch } from "./query";
|
||||
import { ServerInfoP, type User, UserP } from "./resources";
|
||||
import { zdate } from "./utils";
|
||||
|
||||
const currentApiUrl = atom<string | null>(defaultApiUrl);
|
||||
export const getCurrentApiUrl = () => {
|
||||
const store = getDefaultStore();
|
||||
return store.get(currentApiUrl);
|
||||
};
|
||||
export const useCurrentApiUrl = () => {
|
||||
return useAtomValue(currentApiUrl);
|
||||
};
|
||||
export const setSsrApiUrl = () => {
|
||||
const store = getDefaultStore();
|
||||
store.set(currentApiUrl, process.env.KYOO_URL ?? "http://localhost:5000");
|
||||
};
|
||||
|
||||
|
||||
export const useAccount = () => {
|
||||
const acc = useContext(AccountContext);
|
||||
return acc.find((x) => x.selected) || null;
|
||||
};
|
||||
|
||||
export const useAccounts = () => {
|
||||
return useContext(AccountContext);
|
||||
};
|
||||
|
||||
export const useHasPermission = (perms?: string[]) => {
|
||||
const account = useAccount();
|
||||
const { data } = useFetch({
|
||||
path: ["info"],
|
||||
parser: ServerInfoP,
|
||||
});
|
||||
|
||||
if (!perms || !perms[0]) return true;
|
||||
|
||||
const available = account?.permissions ?? data?.guestPermissions;
|
||||
if (!available) return false;
|
||||
return perms.every((perm) => available.includes(perm));
|
||||
};
|
||||
|
||||
@ -1,26 +0,0 @@
|
||||
/*
|
||||
* Kyoo - A portable and vast media library solution.
|
||||
* Copyright (c) Kyoo.
|
||||
*
|
||||
* See AUTHORS.md and LICENSE file in the project root for full license information.
|
||||
*
|
||||
* Kyoo is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* Kyoo is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Kyoo. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
export * from "./accounts";
|
||||
export { storage } from "./account-internal";
|
||||
export * from "./theme";
|
||||
export * from "./utils";
|
||||
export * from "./login";
|
||||
export * from "./issue";
|
||||
@ -1,48 +0,0 @@
|
||||
/*
|
||||
* Kyoo - A portable and vast media library solution.
|
||||
* Copyright (c) Kyoo.
|
||||
*
|
||||
* See AUTHORS.md and LICENSE file in the project root for full license information.
|
||||
*
|
||||
* Kyoo is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* Kyoo is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Kyoo. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import { z } from "zod";
|
||||
import { zdate } from "./utils";
|
||||
|
||||
export const IssueP = z.object({
|
||||
/**
|
||||
* The type of issue (for example, "Scanner" if this issue was created due to scanning error).
|
||||
*/
|
||||
domain: z.string(),
|
||||
/**
|
||||
* Why this issue was caused? An unique cause that can be used to identify this issue.
|
||||
* For the scanner, a cause should be a video path.
|
||||
*/
|
||||
cause: z.string(),
|
||||
/**
|
||||
* A human readable string explaining why this issue occured.
|
||||
*/
|
||||
reason: z.string(),
|
||||
/**
|
||||
* Some extra data that could store domain-specific info.
|
||||
*/
|
||||
extra: z.record(z.string(), z.any()),
|
||||
/**
|
||||
* The date the issue was reported.
|
||||
*/
|
||||
addedDate: zdate(),
|
||||
});
|
||||
|
||||
export type Issue = z.infer<typeof IssueP>;
|
||||
@ -1,179 +0,0 @@
|
||||
/*
|
||||
* Kyoo - A portable and vast media library solution.
|
||||
* Copyright (c) Kyoo.
|
||||
*
|
||||
* See AUTHORS.md and LICENSE file in the project root for full license information.
|
||||
*
|
||||
* Kyoo is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* Kyoo is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Kyoo. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import { useEffect, useRef, useState } from "react";
|
||||
import { Platform } from "react-native";
|
||||
import { addAccount, getCurrentAccount, removeAccounts, updateAccount } from "./account-internal";
|
||||
import { type Account, type Token, TokenP, getCurrentApiUrl } from "./accounts";
|
||||
import type { KyooErrors } from "./kyoo-errors";
|
||||
import { queryFn } from "./query";
|
||||
import { UserP } from "./resources";
|
||||
|
||||
type Result<A, B> =
|
||||
| { ok: true; value: A; error?: undefined }
|
||||
| { ok: false; value?: undefined; error: B };
|
||||
|
||||
export const login = async (
|
||||
action: "register" | "login",
|
||||
{ apiUrl, ...body }: { username: string; password: string; email?: string; apiUrl?: string },
|
||||
): Promise<Result<Account, string>> => {
|
||||
if (!apiUrl || apiUrl.length === 0) apiUrl = getCurrentApiUrl()!;
|
||||
try {
|
||||
const controller = new AbortController();
|
||||
setTimeout(() => controller.abort(), 5_000);
|
||||
const token = await queryFn(
|
||||
{
|
||||
path: ["auth", action],
|
||||
method: "POST",
|
||||
body,
|
||||
authenticated: false,
|
||||
apiUrl,
|
||||
signal: controller.signal,
|
||||
},
|
||||
TokenP,
|
||||
);
|
||||
const user = await queryFn(
|
||||
{ path: ["auth", "me"], method: "GET", apiUrl },
|
||||
UserP,
|
||||
`Bearer ${token.access_token}`,
|
||||
);
|
||||
const account: Account = { ...user, apiUrl: apiUrl, token, selected: true };
|
||||
addAccount(account);
|
||||
return { ok: true, value: account };
|
||||
} catch (e) {
|
||||
console.error(action, e);
|
||||
return { ok: false, error: (e as KyooErrors).errors[0] };
|
||||
}
|
||||
};
|
||||
|
||||
export const oidcLogin = async (provider: string, code: string, apiUrl?: string) => {
|
||||
if (!apiUrl || apiUrl.length === 0) apiUrl = getCurrentApiUrl()!;
|
||||
try {
|
||||
const token = await queryFn(
|
||||
{
|
||||
path: ["auth", "callback", provider, `?code=${code}`],
|
||||
method: "POST",
|
||||
authenticated: false,
|
||||
apiUrl,
|
||||
},
|
||||
TokenP,
|
||||
);
|
||||
const user = await queryFn(
|
||||
{ path: ["auth", "me"], method: "GET", apiUrl },
|
||||
UserP,
|
||||
`Bearer ${token.access_token}`,
|
||||
);
|
||||
const account: Account = { ...user, apiUrl: apiUrl, token, selected: true };
|
||||
addAccount(account);
|
||||
return { ok: true, value: account };
|
||||
} catch (e) {
|
||||
console.error("oidcLogin", e);
|
||||
return { ok: false, error: (e as KyooErrors).errors[0] };
|
||||
}
|
||||
};
|
||||
|
||||
let running_id: string | null = null;
|
||||
let running: ReturnType<typeof getTokenWJ> | null = null;
|
||||
|
||||
export const getTokenWJ = async (
|
||||
acc?: Account | null,
|
||||
forceRefresh = false,
|
||||
): Promise<readonly [string, Token, null] | readonly [null, null, KyooErrors | null]> => {
|
||||
if (acc === undefined) acc = getCurrentAccount();
|
||||
if (!acc) return [null, null, null] as const;
|
||||
const account = acc;
|
||||
|
||||
async function run() {
|
||||
let token = account.token;
|
||||
|
||||
if (forceRefresh || account.token.expire_at <= new Date(new Date().getTime() + 10 * 1000)) {
|
||||
console.log("refreshing token for account", account.slug);
|
||||
try {
|
||||
token = await queryFn(
|
||||
{
|
||||
path: ["auth", "refresh", `?token=${account.token.refresh_token}`],
|
||||
method: "GET",
|
||||
authenticated: false,
|
||||
},
|
||||
TokenP,
|
||||
);
|
||||
if (Platform.OS !== "web" || typeof window !== "undefined")
|
||||
updateAccount(account.id, { ...account, token });
|
||||
} catch (e) {
|
||||
console.error("Error refreshing token durring ssr:", e);
|
||||
return [null, null, e as KyooErrors] as const;
|
||||
}
|
||||
}
|
||||
return [`${token.token_type} ${token.access_token}`, token, null] as const;
|
||||
}
|
||||
|
||||
// Do not cache promise durring ssr.
|
||||
if (Platform.OS === "web" && typeof window === "undefined") return await run();
|
||||
|
||||
if (running && running_id === account.id) return await running;
|
||||
running_id = account.id;
|
||||
running = run();
|
||||
const ret = await running;
|
||||
running_id = null;
|
||||
running = null;
|
||||
return ret;
|
||||
};
|
||||
|
||||
export const getToken = async (): Promise<string | null> => (await getTokenWJ())[0];
|
||||
|
||||
export const getCurrentToken = () => {
|
||||
const account = getCurrentAccount();
|
||||
return account ? `${account.token.token_type} ${account.token.access_token}` : null;
|
||||
};
|
||||
|
||||
export const useToken = () => {
|
||||
const account = getCurrentAccount();
|
||||
const refresher = useRef<NodeJS.Timeout | null>(null);
|
||||
const [token, setToken] = useState(
|
||||
account ? `${account.token.token_type} ${account.token.access_token}` : null,
|
||||
);
|
||||
|
||||
// biome-ignore lint/correctness/useExhaustiveDependencies: Refresh token when account change
|
||||
useEffect(() => {
|
||||
async function run() {
|
||||
const nToken = await getTokenWJ();
|
||||
setToken(nToken[0]);
|
||||
if (refresher.current) clearTimeout(refresher.current);
|
||||
if (nToken[1])
|
||||
refresher.current = setTimeout(run, nToken[1].expire_at.getTime() - Date.now());
|
||||
}
|
||||
run();
|
||||
return () => {
|
||||
if (refresher.current) clearTimeout(refresher.current);
|
||||
};
|
||||
}, [account]);
|
||||
|
||||
if (!token) return null;
|
||||
return token;
|
||||
};
|
||||
|
||||
export const logout = () => {
|
||||
removeAccounts((x) => x.selected);
|
||||
};
|
||||
|
||||
export const deleteAccount = async () => {
|
||||
await queryFn({ path: ["auth", "me"], method: "DELETE" });
|
||||
logout();
|
||||
};
|
||||
@ -1,44 +0,0 @@
|
||||
/*
|
||||
* Kyoo - A portable and vast media library solution.
|
||||
* Copyright (c) Kyoo.
|
||||
*
|
||||
* See AUTHORS.md and LICENSE file in the project root for full license information.
|
||||
*
|
||||
* Kyoo is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* Kyoo is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Kyoo. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import { Platform } from "react-native";
|
||||
import { useMMKVString } from "react-native-mmkv";
|
||||
import { setCookie, storage } from "./account-internal";
|
||||
|
||||
export const useUserTheme = (ssrTheme?: "light" | "dark" | "auto") => {
|
||||
if (Platform.OS === "web" && typeof window === "undefined" && ssrTheme) return ssrTheme;
|
||||
const [value] = useMMKVString("theme", storage);
|
||||
if (!value) return "auto";
|
||||
return value as "light" | "dark" | "auto";
|
||||
};
|
||||
|
||||
export const storeData = (key: string, value: string | number | boolean) => {
|
||||
storage.set(key, value);
|
||||
if (Platform.OS === "web") setCookie(key, value);
|
||||
};
|
||||
|
||||
export const deleteData = (key: string) => {
|
||||
storage.delete(key);
|
||||
if (Platform.OS === "web") setCookie(key, undefined);
|
||||
};
|
||||
|
||||
export const setUserTheme = (theme: "light" | "dark" | "auto") => {
|
||||
storeData("theme", theme);
|
||||
};
|
||||
@ -1,39 +0,0 @@
|
||||
/*
|
||||
* Kyoo - A portable and vast media library solution.
|
||||
* Copyright (c) Kyoo.
|
||||
*
|
||||
* See AUTHORS.md and LICENSE file in the project root for full license information.
|
||||
*
|
||||
* Kyoo is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* Kyoo is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Kyoo. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import { Platform } from "react-native";
|
||||
import { useMMKVString } from "react-native-mmkv";
|
||||
import { z } from "zod";
|
||||
import { storage } from "./account-internal";
|
||||
import type { Movie, Show } from "./resources";
|
||||
|
||||
export const zdate = z.coerce.date;
|
||||
|
||||
export const useLocalSetting = (setting: string, def: string) => {
|
||||
if (Platform.OS === "web" && typeof window === "undefined") return [def, null!] as const;
|
||||
// eslint-disable-next-line react-hooks/rules-of-hooks
|
||||
const [val, setter] = useMMKVString(`settings.${setting}`, storage);
|
||||
return [val ?? def, setter] as const;
|
||||
};
|
||||
|
||||
export const getLocalSetting = (setting: string, def: string) => {
|
||||
if (Platform.OS === "web" && typeof window === "undefined") return def;
|
||||
return storage.getString(`settings.${setting}`) ?? setting;
|
||||
};
|
||||
@ -1,26 +0,0 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "es6",
|
||||
"lib": ["dom", "dom.iterable", "esnext"],
|
||||
"declaration": true,
|
||||
"sourceMap": true,
|
||||
"noEmit": true,
|
||||
"allowJs": true,
|
||||
"skipLibCheck": true,
|
||||
"strict": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"esModuleInterop": true,
|
||||
"module": "esnext",
|
||||
"moduleResolution": "node",
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": true,
|
||||
"jsx": "react-jsx",
|
||||
"incremental": true,
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"~/*": ["src/*"]
|
||||
}
|
||||
},
|
||||
"include": ["**/*.ts", "**/*.tsx"],
|
||||
"exclude": ["node_modules"]
|
||||
}
|
||||
@ -1,50 +0,0 @@
|
||||
{
|
||||
"name": "@kyoo/ui",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"packageManager": "yarn@3.2.4",
|
||||
"dependencies": {
|
||||
"@kyoo/models": "workspace:^",
|
||||
"@kyoo/primitives": "workspace:^",
|
||||
"langmap": "^0.0.16"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@gorhom/portal": "^1.0.14",
|
||||
"@shopify/flash-list": "^1.7.1",
|
||||
"@types/langmap": "^0.0.3",
|
||||
"react-native-uuid": "^2.0.2",
|
||||
"typescript": "^5.5.4"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@gorhom/portal": "*",
|
||||
"@kesha-antonov/react-native-background-downloader": "*",
|
||||
"@material-symbols/svg-400": "*",
|
||||
"@shopify/flash-list": "^1.3.1",
|
||||
"@tanstack/react-query": "*",
|
||||
"expo-file-system": "*",
|
||||
"expo-image-picker": "~14.7.1",
|
||||
"expo-linear-gradient": "*",
|
||||
"expo-router": "*",
|
||||
"i18next": "*",
|
||||
"moti": "*",
|
||||
"react": "*",
|
||||
"react-i18next": "*",
|
||||
"react-native": "*",
|
||||
"react-native-reanimated": "*",
|
||||
"react-native-svg": "*",
|
||||
"yoshiki": "*"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@kesha-antonov/react-native-background-downloader": "^3.2.0",
|
||||
"expo-file-system": "^17.0.1",
|
||||
"expo-router": "^3.5.21"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@kesha-antonov/react-native-background-downloader": {
|
||||
"optional": true
|
||||
},
|
||||
"expo-router": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,78 +0,0 @@
|
||||
/*
|
||||
* Kyoo - A portable and vast media library solution.
|
||||
* Copyright (c) Kyoo.
|
||||
*
|
||||
* See AUTHORS.md and LICENSE file in the project root for full license information.
|
||||
*
|
||||
* Kyoo is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* Kyoo is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Kyoo. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import { Main } from "@kyoo/primitives";
|
||||
import { LinearGradient } from "expo-linear-gradient";
|
||||
import type { ReactElement } from "react";
|
||||
import { useYoshiki, vw } from "yoshiki/native";
|
||||
import { Navbar } from "../../../src/ui/navbar/src/ui/navbar";
|
||||
|
||||
export const DefaultLayout = ({
|
||||
page,
|
||||
transparent,
|
||||
}: {
|
||||
page: ReactElement;
|
||||
transparent?: boolean;
|
||||
}) => {
|
||||
const { css, theme } = useYoshiki();
|
||||
return (
|
||||
<>
|
||||
<Navbar
|
||||
{...css(
|
||||
transparent && {
|
||||
bg: "transparent",
|
||||
position: "absolute",
|
||||
top: 0,
|
||||
left: 0,
|
||||
right: 0,
|
||||
shadowOpacity: 0,
|
||||
},
|
||||
)}
|
||||
background={
|
||||
transparent ? (
|
||||
<LinearGradient
|
||||
start={{ x: 0, y: 0.25 }}
|
||||
end={{ x: 0, y: 1 }}
|
||||
colors={[theme.themeOverlay, "transparent"]}
|
||||
{...css({
|
||||
height: "100%",
|
||||
position: "absolute",
|
||||
top: 0,
|
||||
left: 0,
|
||||
right: 0,
|
||||
})}
|
||||
/>
|
||||
) : undefined
|
||||
}
|
||||
/>
|
||||
<Main
|
||||
{...css({
|
||||
display: "flex",
|
||||
width: vw(100),
|
||||
flexGrow: 1,
|
||||
flexShrink: 1,
|
||||
overflow: "hidden",
|
||||
})}
|
||||
>
|
||||
{page}
|
||||
</Main>
|
||||
</>
|
||||
);
|
||||
};
|
||||
Loading…
x
Reference in New Issue
Block a user