diff --git a/src/lib/components/tiles/Tile.svelte b/src/lib/components/tiles/Tile.svelte
index e69fd83..4f78b5f 100644
--- a/src/lib/components/tiles/Tile.svelte
+++ b/src/lib/components/tiles/Tile.svelte
@@ -8,6 +8,7 @@ Metro-like tile. Must be in a group to display correctly.
import randomNumber from "$lib/utils/random-number";
import { cva } from "class-variance-authority";
import { onDestroy, onMount } from "svelte";
+ import TileIconPage from "./pages/TileIconPage.svelte";
/**
* Max angle value.
@@ -68,6 +69,8 @@ Metro-like tile. Must be in a group to display correctly.
icon,
column,
children,
+ link = "#",
+ enabled = true,
}: {
/**
* Size.
@@ -89,6 +92,16 @@ Metro-like tile. Must be in a group to display correctly.
*/
icon: string;
+ /**
+ * Link.
+ */
+ link?: string;
+
+ /**
+ * Is tile enabled?
+ */
+ enabled?: boolean;
+
/**
* Pages.
*/
@@ -98,30 +111,34 @@ Metro-like tile. Must be in a group to display correctly.
/**
* Tile style.
**/
- const style = cva(
- [
- "relative",
- "bg-(--tile-color)",
- "perspective-distant",
- "active:scale-95",
- "active:transform-gpu",
- "active:transform-3d",
- "active:rotate-x-(--tile-rotate-x)",
- "active:rotate-y-(--tile-rotate-y)",
- "duration-75",
- "ease-in-out",
- ],
- {
- variants: {
- size: {
- small: ["row-span-1", "col-span-1"],
- medium: ["row-span-2", "col-span-2"],
- wide: ["row-span-2", "col-span-4"],
- large: ["row-span-4", "col-span-4"],
- },
+ const style = cva(["relative", "bg-(--tile-color)/80"], {
+ variants: {
+ size: {
+ small: ["row-span-1", "col-span-1"],
+ medium: ["row-span-2", "col-span-2"],
+ wide: ["row-span-2", "col-span-4"],
+ large: ["row-span-4", "col-span-4"],
+ },
+ enabled: {
+ false: ["grayscale", "opacity-50"],
+ true: [
+ "active:scale-95",
+ "perspective-distant",
+ "active:transform-gpu",
+ "active:transform-3d",
+ "active:rotate-x-(--tile-rotate-x)",
+ "active:rotate-y-(--tile-rotate-y)",
+ "duration-75",
+ "ease-in-out",
+ ],
},
},
- );
+ });
+
+ /**
+ * Is tile active?
+ */
+ const active = link !== "#" && enabled && children !== null;
/**
* Icon size.
@@ -235,7 +252,7 @@ Metro-like tile. Must be in a group to display correctly.
@@ -254,25 +271,31 @@ Metro-like tile. Must be in a group to display correctly.
class="w-full h-full overflow-y-hidden scroll-smooth duration-150"
bind:this={pages}
>
- {@render children()}
+ {#if active}
+ {@render children()}
+ {:else}
+
{text}
- {/if} + {#if text} +{text}
+ {/if} +