import { Affix, Box, Text, Tooltip, UnstyledButton } from '@mantine/core'; import { createStyles, useMantineTheme } from '@mantine/styles'; import { motion } from 'framer-motion'; import Link from 'next/link'; import { AppType } from '../../../../types/app'; import { useEditModeStore } from '../../Views/useEditModeStore'; import { HomarrCardWrapper } from '../HomarrCardWrapper'; import { BaseTileProps } from '../type'; import { AppMenu } from './AppMenu'; import { AppPing } from './AppPing'; interface AppTileProps extends BaseTileProps { app: AppType; } export const AppTile = ({ className, app }: AppTileProps) => { const isEditMode = useEditModeStore((x) => x.enabled); const { cx, classes } = useStyles(); const { colorScheme } = useMantineTheme(); const tooltipContent = [ app.appearance.appNameStatus === 'hover' ? app.name : undefined, app.behaviour.tooltipDescription, ] .filter((e) => e) .join(': '); const isRow = app.appearance.positionAppName.includes('row'); function Inner() { return ( {app.appearance.appNameStatus === 'normal' && ( {app.name} )} ); } return ( {!app.url || isEditMode ? ( ) : ( 0 ? app.behaviour.externalUrl : app.url} target={app.behaviour.isOpeningNewTab ? '_blank' : '_self'} className={`${classes.button} ${classes.base}`} > )} ); }; const useStyles = createStyles((theme, _params, getRef) => ({ base: { display: 'flex', alignItems: 'center', justifyContent: 'center', }, appContent: { gap: 0, overflow: 'visible', flexGrow: 5, }, appName: { wordBreak: 'break-word', }, appImage: { flex: '1', objectFit: 'contain', overflowY: 'auto', }, button: { height: '100%', width: '100%', gap: 4, }, })); export const appTileDefinition = { component: AppTile, minWidth: 1, minHeight: 1, maxWidth: 12, maxHeight: 12, };