"use client"; import type { CSSObject } from "@emotion/react"; import { useCustomTheme } from "../../../core/design-system/CustomThemeProvider.js"; import { spacing, type Theme } from "../../../core/design-system/index.js"; import { cls } from "../../utils/cls.js"; import { fadeInAnimation, floatDownAnimation, floatUpAnimation, } from "../design-system/animations.js"; import { StyledDiv } from "../design-system/elements.js"; import { BackButton, ModalTitle } from "./modalElements.js"; export const ScreenBottomContainer = /* @__PURE__ */ StyledDiv((_) => { const theme = useCustomTheme(); return { borderTop: `1px solid ${theme.colors.separatorLine}`, display: "flex", flexDirection: "column", gap: spacing.md, padding: spacing.lg, }; }); export const noScrollBar = /* @__PURE__ */ { "&::-webkit-scrollbar": { display: "none", width: 0, }, scrollbarWidth: "none", } satisfies CSSObject; /** * @internal */ export function ModalHeader(props: { onBack?: () => void; title: React.ReactNode; leftAligned?: boolean; className?: string; }) { const { onBack, title } = props; return (
{onBack && ( )} {typeof title === "string" ? {title} : title}
); } export const Line = /* @__PURE__ */ StyledDiv((props: { dashed?: boolean }) => { const theme = useCustomTheme(); return { borderTop: `1px ${props.dashed ? "dashed" : "solid"} ${theme.colors.separatorLine}`, }; }); /** * @internal */ export function Container(props: { animate?: "fadein" | "floatup" | "floatdown"; fullHeight?: boolean; flex?: "row" | "column"; expand?: boolean; center?: "x" | "y" | "both"; gap?: keyof typeof spacing; children?: React.ReactNode; style?: React.CSSProperties; p?: keyof typeof spacing; px?: keyof typeof spacing; py?: keyof typeof spacing; pb?: keyof typeof spacing; pt?: keyof typeof spacing; relative?: boolean; scrollY?: boolean; color?: keyof Theme["colors"]; debug?: boolean; bg?: keyof Theme["colors"]; borderColor?: keyof Theme["colors"]; className?: string; }) { const styles: React.CSSProperties = {}; if (props.relative) { styles.position = "relative"; } if (props.fullHeight) { styles.height = "100%"; } if (props.expand) { styles.flex = "1 1 0%"; } if (props.flex) { styles.display = "flex"; styles.flexDirection = props.flex; if (props.flex === "row") { styles.flexWrap = "wrap"; } if (props.gap) { styles.gap = spacing[props.gap]; } if (props.center) { if (props.center === "both") { styles.justifyContent = "center"; styles.alignItems = "center"; } if ( (props.center === "x" && props.flex === "row") || (props.center === "y" && props.flex === "column") ) { styles.justifyContent = "center"; } if ( (props.center === "x" && props.flex === "column") || (props.center === "y" && props.flex === "row") ) { styles.alignItems = "center"; } } } if (props.p) { styles.padding = spacing[props.p]; } if (props.px) { styles.paddingLeft = spacing[props.px]; styles.paddingRight = spacing[props.px]; } if (props.py) { styles.paddingTop = spacing[props.py]; styles.paddingBottom = spacing[props.py]; } if (props.pb) { styles.paddingBottom = spacing[props.pb]; } if (props.pt) { styles.paddingTop = spacing[props.pt]; } if (props.debug) { styles.outline = "1px solid red"; styles.outlineOffset = "-1px"; } return ( {props.children} ); } type BoxProps = { color?: keyof Theme["colors"] | undefined; bg?: keyof Theme["colors"] | undefined; borderColor?: keyof Theme["colors"] | undefined; }; const Box = /* @__PURE__ */ StyledDiv((props) => { const theme = useCustomTheme(); return { "&[data-animate='fadein']": { animation: `${fadeInAnimation} 350ms ease forwards`, opacity: 0, }, "&[data-animate='floatdown']": { animation: `${floatDownAnimation} 350ms ease forwards`, opacity: 0, }, "&[data-animate='floatup']": { animation: `${floatUpAnimation} 350ms ease forwards`, opacity: 0, }, "&[data-scrolly='true']": { overflowY: "auto", ...noScrollBar, }, background: props.bg ? theme.colors[props.bg] : undefined, borderColor: props.borderColor ? theme.colors[props.borderColor] : undefined, color: props.color ? theme.colors[props.color] : "inherit", }; });