feat(components/tiles/pages): text page

This commit is contained in:
mikhail "synzr" 2025-12-01 11:04:21 +05:00
parent ee42b07e6a
commit 2b2c3bf9ae
5 changed files with 61 additions and 17 deletions

View file

@ -60,6 +60,7 @@ Metro-like tile. Must be in a group to display correctly.
let { let {
size, size,
row, row,
icon,
column, column,
children, children,
}: { }: {
@ -78,6 +79,11 @@ Metro-like tile. Must be in a group to display correctly.
*/ */
column: number; column: number;
/**
* Icon. Must be a valid URL.
*/
icon: string;
/** /**
* Pages. * Pages.
*/ */
@ -162,6 +168,7 @@ Metro-like tile. Must be in a group to display correctly.
<div <div
class={style({ size })} class={style({ size })}
style=" style="
--tile-icon: url('{icon}');
--tile-icon-size: {iconSize}px; --tile-icon-size: {iconSize}px;
--tile-page-height: {pageHeight}px; --tile-page-height: {pageHeight}px;
--tile-name-display: {size !== 'small' ? 'inline' : 'none'}; --tile-name-display: {size !== 'small' ? 'inline' : 'none'};

View file

@ -6,14 +6,8 @@ Icon page for a tile. Must be in a tile to display correctly.
<script lang="ts"> <script lang="ts">
let { let {
icon,
name, name,
}: { }: {
/**
* Icon. Must be a valid URL.
*/
icon: string;
/** /**
* Name. * Name.
*/ */
@ -25,7 +19,7 @@ Icon page for a tile. Must be in a tile to display correctly.
class="flex flex-col justify-end bg-center bg-no-repeat" class="flex flex-col justify-end bg-center bg-no-repeat"
style=" style="
height: var(--tile-page-height); height: var(--tile-page-height);
background-image: url('{icon}'); background-image: var(--tile-icon);
background-size: var(--tile-icon-size); background-size: var(--tile-icon-size);
" "
> >

View file

@ -16,6 +16,11 @@ Image page for a tile. Must be in a tile to display correctly.
</script> </script>
<div <div
class="w-full bg-cover bg-center bg-no-repeat" class="flex flex-col justify-end bg-cover bg-center bg-no-repeat"
style="height: var(--tile-page-height); background-image: url('{image}');" style="height: var(--tile-page-height); background-image: url('{image}');"
></div> >
<div
class="w-[20px] mt-auto aspect-square bg-contain bg-center bg-no-repeat self-end m-2"
style="background-image: var(--tile-icon);"
></div>
</div>

View file

@ -0,0 +1,37 @@
<!--
@component
Text page for a tile. Must be in a tile to display correctly.
-->
<script lang="ts">
let {
title,
subtitle,
text,
}: {
title: string;
subtitle?: string;
text?: string;
} = $props();
</script>
<div
class="p-2 w-full flex flex-col gap-1 select-none text-white"
style="height: var(--tile-page-height);"
>
<h1 class="font-bold text-md">{title}</h1>
{#if subtitle}
<h2 class="text-md">{subtitle}</h2>
{/if}
{#if text}
<p class="text-sm">{text}</p>
{/if}
<div
class="w-[20px] mt-auto aspect-square bg-contain bg-center bg-no-repeat self-end"
style="background-image: var(--tile-icon);"
></div>
</div>

View file

@ -8,24 +8,25 @@
import TileGroup from "$lib/components/tiles/TileGroup.svelte"; import TileGroup from "$lib/components/tiles/TileGroup.svelte";
import TileIconPage from "$lib/components/tiles/pages/TileIconPage.svelte"; import TileIconPage from "$lib/components/tiles/pages/TileIconPage.svelte";
import TileImagePage from "$lib/components/tiles/pages/TileImagePage.svelte"; import TileImagePage from "$lib/components/tiles/pages/TileImagePage.svelte";
import TileTextPage from "$lib/components/tiles/pages/TileTextPage.svelte";
</script> </script>
<TileGroup title="a lot of mikhails" rows={3} columns={3}> <TileGroup title="a lot of mikhails" rows={3} columns={3}>
<Tile size="small" row={5} column={2}> <Tile size="small" row={5} column={2} icon={iconSynzr}>
<TileIconPage icon={iconSynzr} name="mikhail" /> <TileIconPage name="mikhail" />
</Tile> </Tile>
<Tile size="medium" row={3} column={5}> <Tile size="medium" row={3} column={5} icon={iconSynzr}>
<TileIconPage icon={iconSynzr} name="mikhail" /> <TileIconPage name="mikhail" />
</Tile> </Tile>
<Tile size="wide" row={5} column={3}> <Tile size="wide" row={5} column={3} icon={iconSynzr}>
<TileIconPage icon={iconSynzr} name="mikhail" />
<TileImagePage image={imageTestRectangle} /> <TileImagePage image={imageTestRectangle} />
<TileTextPage title="Title" subtitle="Subtitle" text="Text" />
</Tile> </Tile>
<Tile size="large" row={1} column={1}> <Tile size="large" row={1} column={1} icon={iconSynzr}>
<TileIconPage icon={iconSynzr} name="mikhail" />
<TileImagePage image={imageTestSquare} /> <TileImagePage image={imageTestSquare} />
<TileTextPage title="Title" subtitle="Subtitle" text="Text" />
</Tile> </Tile>
</TileGroup> </TileGroup>