/* * 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 . */ import { LinearGradient, type LinearGradientProps } from "expo-linear-gradient"; import type { ComponentProps, ComponentType, ReactElement, ReactNode } from "react"; import { type ImageStyle, View, type ViewProps, type ViewStyle } from "react-native"; import { percent } from "yoshiki/native"; import { useYoshiki } from "yoshiki/native"; import { imageBorderRadius } from "../constants"; import { ContrastArea } from "../themes"; import type { ImageLayout, Props, YoshikiEnhanced } from "./base-image"; import { Image } from "./image"; export { Sprite } from "./sprite"; export { BlurhashContainer } from "./blurhash"; export { type Props as ImageProps, Image }; export const Poster = ({ alt, layout, ...props }: Props & { style?: ImageStyle } & { layout: YoshikiEnhanced<{ width: ImageStyle["width"] } | { height: ImageStyle["height"] }>; }) => {alt!}; Poster.Loader = ({ layout, ...props }: { children?: ReactElement; layout: YoshikiEnhanced<{ width: ImageStyle["width"] } | { height: ImageStyle["height"] }>; }) => ; export const PosterBackground = ({ alt, layout, ...props }: Omit, "layout"> & { style?: ImageStyle } & { layout: YoshikiEnhanced<{ width: ImageStyle["width"] } | { height: ImageStyle["height"] }>; }) => { const { css } = useYoshiki(); return ( ); }; type ImageBackgroundProps = { children?: ReactNode; containerStyle?: YoshikiEnhanced; imageStyle?: YoshikiEnhanced; layout?: ImageLayout; contrast?: "light" | "dark" | "user"; }; export const ImageBackground = ({ src, alt, quality, as, children, containerStyle, imageStyle, layout, contrast = "dark", imageSibling, ...asProps }: { as?: ComponentType; imageSibling?: ReactElement; } & AsProps & ImageBackgroundProps & Props) => { const Container = as ?? View; return ( {({ css }) => ( theme.background, }, containerStyle, ])} > {src && ( {alt!} )} {imageSibling} {children} )} ); }; export const GradientImageBackground = ({ contrast = "dark", gradient, ...props }: { as?: ComponentType; gradient?: Partial; } & AsProps & ImageBackgroundProps & Props) => { const { css, theme } = useYoshiki(); return ( } {...(props as any)} /> ); };