/*
* 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"] }>;
}) => ;
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 && (
)}
{imageSibling}
{children}
)}
);
};
export const GradientImageBackground = ({
contrast = "dark",
gradient,
...props
}: {
as?: ComponentType;
gradient?: Partial;
} & AsProps &
ImageBackgroundProps &
Props) => {
const { css, theme } = useYoshiki();
return (
}
{...(props as any)}
/>
);
};