added image gallery component; moved blurred background to separate CSS class
This commit is contained in:
@@ -32,15 +32,15 @@
|
|||||||
{/snippet}
|
{/snippet}
|
||||||
|
|
||||||
{#if type == "quote"}
|
{#if type == "quote"}
|
||||||
<div class="callout-container callout-quote">
|
<div class="callout-container blurred-background callout-quote">
|
||||||
{@render calloutContent()}
|
{@render calloutContent()}
|
||||||
</div>
|
</div>
|
||||||
{:else if type == "info"}
|
{:else if type == "info"}
|
||||||
<div class="callout-container callout-info">
|
<div class="callout-container blurred-background callout-info">
|
||||||
{@render calloutContent()}
|
{@render calloutContent()}
|
||||||
</div>
|
</div>
|
||||||
{:else}
|
{:else}
|
||||||
<div class="callout-container callout-warn">
|
<div class="callout-container blurred-background callout-warn">
|
||||||
{@render calloutContent()}
|
{@render calloutContent()}
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
@@ -67,7 +67,6 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
border: var(--border-style) var(--border-dash-size) var(--color-callout);
|
border: var(--border-style) var(--border-dash-size) var(--color-callout);
|
||||||
background-color: var(--color-callout-background);
|
background-color: var(--color-callout-background);
|
||||||
backdrop-filter: blur(var(--blur-radius-background));
|
|
||||||
border-radius: var(--border-radius);
|
border-radius: var(--border-radius);
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
gap: 16px;
|
gap: 16px;
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<svelte:window bind:scrollY={y} />
|
<svelte:window bind:scrollY={y} />
|
||||||
|
|
||||||
{#if y > 2400}
|
{#if y > 2400}
|
||||||
<button class="scroll-top-button" onclick={scrollToTop}>↑</button>
|
<button class="scroll-top-button blurred-background" onclick={scrollToTop}>↑</button>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
@@ -22,7 +22,6 @@
|
|||||||
border: var(--border-style) var(--border-dash-size) var(--color-highlight);
|
border: var(--border-style) var(--border-dash-size) var(--color-highlight);
|
||||||
color: var(--color-highlight);
|
color: var(--color-highlight);
|
||||||
background-color: var(--color-background-highlight);
|
background-color: var(--color-background-highlight);
|
||||||
backdrop-filter: blur(var(--blur-radius-background));
|
|
||||||
padding: 12px;
|
padding: 12px;
|
||||||
transition: background-color var(--duration-animation) var(--anim-curve);
|
transition: background-color var(--duration-animation) var(--anim-curve);
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
|
|||||||
@@ -44,17 +44,17 @@
|
|||||||
<!-- this structure is ugly as fuck. there must be a better way of doing this -->
|
<!-- this structure is ugly as fuck. there must be a better way of doing this -->
|
||||||
{#if alignment && alignment == "left"}
|
{#if alignment && alignment == "left"}
|
||||||
{#if smaller}
|
{#if smaller}
|
||||||
<a class="subtitled-img-container subtitled-img-container-left subtitled-img-reduced-size" href="{image}">
|
<a class="subtitled-img-container blurred-background subtitled-img-container-left subtitled-img-reduced-size" href="{image}">
|
||||||
{@render subtitledImageContent()}
|
{@render subtitledImageContent()}
|
||||||
</a>
|
</a>
|
||||||
{:else}
|
{:else}
|
||||||
<a class="subtitled-img-container subtitled-img-container-left" href="{image}">
|
<a class="subtitled-img-container blurred-background subtitled-img-container-left" href="{image}">
|
||||||
{@render subtitledImageContent()}
|
{@render subtitledImageContent()}
|
||||||
</a>
|
</a>
|
||||||
{/if}
|
{/if}
|
||||||
{:else if alignment && alignment == "right"}
|
{:else if alignment && alignment == "right"}
|
||||||
{#if smaller}
|
{#if smaller}
|
||||||
<a class="subtitled-img-container subtitled-img-container-right subtitled-img-reduced-size" href="{image}">
|
<a class="subtitled-img-container blurred-background subtitled-img-container-right subtitled-img-reduced-size" href="{image}">
|
||||||
{@render subtitledImageContent()}
|
{@render subtitledImageContent()}
|
||||||
</a>
|
</a>
|
||||||
{:else}
|
{:else}
|
||||||
@@ -64,11 +64,11 @@
|
|||||||
{/if}
|
{/if}
|
||||||
{:else}
|
{:else}
|
||||||
{#if smaller}
|
{#if smaller}
|
||||||
<a class="subtitled-img-container subtitled-img-container-centred subtitled-img-reduced-size" href="{image}">
|
<a class="subtitled-img-container blurred-background subtitled-img-container-centred subtitled-img-reduced-size" href="{image}">
|
||||||
{@render subtitledImageContent()}
|
{@render subtitledImageContent()}
|
||||||
</a>
|
</a>
|
||||||
{:else}
|
{:else}
|
||||||
<a class="subtitled-img-container subtitled-img-container-centred" href="{image}">
|
<a class="subtitled-img-container blurred-background subtitled-img-container-centred" href="{image}">
|
||||||
{@render subtitledImageContent()}
|
{@render subtitledImageContent()}
|
||||||
</a>
|
</a>
|
||||||
{/if}
|
{/if}
|
||||||
@@ -81,7 +81,6 @@
|
|||||||
border: var(--border-dash-size) var(--color-highlight) var(--border-style);
|
border: var(--border-dash-size) var(--color-highlight) var(--border-style);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
backdrop-filter: blur(var(--blur-radius-background));
|
|
||||||
transition: background-color var(--duration-animation) var(--anim-curve);
|
transition: background-color var(--duration-animation) var(--anim-curve);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -63,7 +63,7 @@
|
|||||||
{/snippet}
|
{/snippet}
|
||||||
|
|
||||||
{#if tocEntries.length > 0}
|
{#if tocEntries.length > 0}
|
||||||
<div class="toc-container">
|
<div class="toc-container blurred-background">
|
||||||
<ul class="toc-list">
|
<ul class="toc-list">
|
||||||
{#each tocEntries as entry}
|
{#each tocEntries as entry}
|
||||||
{@render tocEntryLine({ entry })}
|
{@render tocEntryLine({ entry })}
|
||||||
@@ -88,7 +88,6 @@
|
|||||||
background-color: var(--color-background-highlight);
|
background-color: var(--color-background-highlight);
|
||||||
padding: 16px 0;
|
padding: 16px 0;
|
||||||
border: var(--border-style) var(--border-dash-size) var(--color-highlight);
|
border: var(--border-style) var(--border-dash-size) var(--color-highlight);
|
||||||
backdrop-filter: blur(var(--blur-radius-background));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.toc-list {
|
.toc-list {
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
<div class="entry-container">
|
<div class="entry-container">
|
||||||
{#each posts as post}
|
{#each posts as post}
|
||||||
<a class="entry" href="{post.key}">
|
<a class="entry blurred-background-hover" href="{post.key}">
|
||||||
<div class="entry-banner-container">
|
<div class="entry-banner-container">
|
||||||
<img class="entry-banner" src="{post.key}/{post.post.banner}" alt="{post.post.bannerAlt}">
|
<img class="entry-banner" src="{post.key}/{post.post.banner}" alt="{post.post.bannerAlt}">
|
||||||
</div>
|
</div>
|
||||||
@@ -55,7 +55,6 @@
|
|||||||
.entry:hover {
|
.entry:hover {
|
||||||
background-color: var(--color-background-highlight-alt);
|
background-color: var(--color-background-highlight-alt);
|
||||||
border-color: var(--color-highlight-alt);
|
border-color: var(--color-highlight-alt);
|
||||||
backdrop-filter: blur(var(--blur-radius-background));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.entry:hover .entry-banner {
|
.entry:hover .entry-banner {
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
<div class="row-container">
|
<div class="row-container">
|
||||||
{#each entries as entry}
|
{#each entries as entry}
|
||||||
<a class="row-entry" href="{entry.link}">
|
<a class="row-entry blurred-background-hover" href="{entry.link}">
|
||||||
<div class="row-img-container">
|
<div class="row-img-container">
|
||||||
<img class="row-img" src="{entry.img}" alt="{entry.altText}">
|
<img class="row-img" src="{entry.img}" alt="{entry.altText}">
|
||||||
</div>
|
</div>
|
||||||
@@ -49,7 +49,6 @@
|
|||||||
.row-entry:hover {
|
.row-entry:hover {
|
||||||
background-color: var(--color-background-highlight);
|
background-color: var(--color-background-highlight);
|
||||||
border-color: var(--color-highlight);
|
border-color: var(--color-highlight);
|
||||||
backdrop-filter: blur(var(--blur-radius-background));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.row-entry:hover .row-img {
|
.row-entry:hover .row-img {
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{#snippet galleryEntry({entry}: {entry: GalleryEntry})}
|
{#snippet galleryEntry({entry}: {entry: GalleryEntry})}
|
||||||
<a class="gallery-container" href="{entry.link}">
|
<a class="gallery-container blurred-background-hover" href="{entry.link}">
|
||||||
{#if entry.img && entry.img !== ""}
|
{#if entry.img && entry.img !== ""}
|
||||||
<img class="gallery-img" src="{entry.img}" alt="{entry.imgAlt}">
|
<img class="gallery-img" src="{entry.img}" alt="{entry.imgAlt}">
|
||||||
{:else}
|
{:else}
|
||||||
@@ -111,7 +111,6 @@
|
|||||||
.gallery-container:hover {
|
.gallery-container:hover {
|
||||||
border-color: var(--color-highlight);
|
border-color: var(--color-highlight);
|
||||||
background-color: var(--color-background-highlight);
|
background-color: var(--color-background-highlight);
|
||||||
backdrop-filter: blur(var(--blur-radius-background));
|
|
||||||
}
|
}
|
||||||
.gallery-container:hover p {
|
.gallery-container:hover p {
|
||||||
color: var(--color-highlight);
|
color: var(--color-highlight);
|
||||||
|
|||||||
71
src/lib/lists/image-gallery.svelte
Normal file
71
src/lib/lists/image-gallery.svelte
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
|
||||||
|
export interface GalleryImage {
|
||||||
|
src: string;
|
||||||
|
alt: string;
|
||||||
|
desc: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
let {
|
||||||
|
images,
|
||||||
|
}: {
|
||||||
|
images: GalleryImage[];
|
||||||
|
} = $props();
|
||||||
|
|
||||||
|
let currentIndex: number = $state(0);
|
||||||
|
|
||||||
|
function galleryBack() {
|
||||||
|
if (currentIndex == 0) {
|
||||||
|
currentIndex = images.length - 1;
|
||||||
|
} else {
|
||||||
|
currentIndex -= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function galleryForward() {
|
||||||
|
if (currentIndex == images.length - 1) {
|
||||||
|
currentIndex = 0;
|
||||||
|
} else {
|
||||||
|
currentIndex += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="gallery-container">
|
||||||
|
<div class="gallery-button-container">
|
||||||
|
<button onclick={galleryBack}><</button>
|
||||||
|
<button onclick={galleryForward}>></button>
|
||||||
|
</div>
|
||||||
|
<img src={images[currentIndex].src} alt={images[currentIndex].alt}>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.gallery-container {
|
||||||
|
position: relative;
|
||||||
|
max-width: var(--media-width);
|
||||||
|
margin: 0 auto;
|
||||||
|
border: var(--border-style) var(--border-dash-size) var(--color-highlight-alt);border-radius: var(--border-radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
.gallery-container img {
|
||||||
|
width: 100%;
|
||||||
|
object-fit: contain;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gallery-button-container {
|
||||||
|
position: absolute;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.gallery-button-container button {
|
||||||
|
background-color: aqua;
|
||||||
|
height: fit-content;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 2.4rem;
|
||||||
|
line-height: 2.4rem;
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
<div class="background">
|
<div class="background blurred-background">
|
||||||
<hr>
|
<hr>
|
||||||
<div class="content-container">
|
<div class="content-container">
|
||||||
<div class="content-box center-box">
|
<div class="content-box center-box">
|
||||||
@@ -92,7 +92,6 @@
|
|||||||
|
|
||||||
.background {
|
.background {
|
||||||
background-color: var(--color-background-highlight);
|
background-color: var(--color-background-highlight);
|
||||||
backdrop-filter: blur(var(--blur-radius-background));
|
|
||||||
margin-top: 32px;
|
margin-top: 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -310,9 +310,14 @@
|
|||||||
max-width: var(--media-width);
|
max-width: var(--media-width);
|
||||||
margin-top: 12px;
|
margin-top: 12px;
|
||||||
margin-bottom: 12px;
|
margin-bottom: 12px;
|
||||||
/* padding: 8px;
|
}
|
||||||
|
|
||||||
|
.blurred-background {
|
||||||
|
backdrop-filter: blur(var(--blur-radius-background));
|
||||||
|
}
|
||||||
|
|
||||||
|
.blurred-background-hover:hover {
|
||||||
backdrop-filter: blur(var(--blur-radius-background));
|
backdrop-filter: blur(var(--blur-radius-background));
|
||||||
border: var(--border-dash-size) var(--border-style) var(--color-highlight); */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.lightyears-text {
|
.lightyears-text {
|
||||||
@@ -448,15 +453,5 @@
|
|||||||
font-family: var(--font-sans-serif);
|
font-family: var(--font-sans-serif);
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.callout-warning {
|
|
||||||
margin: 12px auto;
|
|
||||||
max-width: var(--width-toc);
|
|
||||||
padding: 12px 20px;
|
|
||||||
box-sizing: border-box;
|
|
||||||
backdrop-filter: blur(var(--blur-radius-background));
|
|
||||||
background-color: var(--color-background-highlight-alt);
|
|
||||||
border: var(--border-dash-size) var(--border-style) var(--color-highlight-alt);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -112,7 +112,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<div class="sidebox-container">
|
<div class="sidebox-container blurred-background">
|
||||||
<h4 class="sidebox-header">heads-up</h4>
|
<h4 class="sidebox-header">heads-up</h4>
|
||||||
<p>This website works best on Firefox and other Gecko-based browsers! All pages <i>should</i> be responsive and work on mobile.</p>
|
<p>This website works best on Firefox and other Gecko-based browsers! All pages <i>should</i> be responsive and work on mobile.</p>
|
||||||
<p>This website is 100% mobile-friendly – or at least trying to be!</p>
|
<p>This website is 100% mobile-friendly – or at least trying to be!</p>
|
||||||
@@ -216,7 +216,6 @@
|
|||||||
|
|
||||||
.sidebox-container {
|
.sidebox-container {
|
||||||
padding: 8px 16px;
|
padding: 8px 16px;
|
||||||
backdrop-filter: blur(var(--blur-radius-background));
|
|
||||||
border-width: var(--border-dash-size);
|
border-width: var(--border-dash-size);
|
||||||
border-style: var(--border-style);
|
border-style: var(--border-style);
|
||||||
border-color: var(--color-highlight-alt);
|
border-color: var(--color-highlight-alt);
|
||||||
|
|||||||
@@ -79,7 +79,7 @@
|
|||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<p class="project-info project-status-c-{getStatusCode(project)}">
|
<p class="project-info blurred-background project-status-c-{getStatusCode(project)}">
|
||||||
{#if project.date}
|
{#if project.date}
|
||||||
{project.date} |
|
{project.date} |
|
||||||
{/if}
|
{/if}
|
||||||
@@ -134,7 +134,6 @@
|
|||||||
background-color: color-mix(in srgb, var(--color-status) 6%, transparent);
|
background-color: color-mix(in srgb, var(--color-status) 6%, transparent);
|
||||||
border: var(--border-style) var(--border-dash-size) var(--color-status);
|
border: var(--border-style) var(--border-dash-size) var(--color-status);
|
||||||
padding: 2px 8px;
|
padding: 2px 8px;
|
||||||
backdrop-filter: blur(var(--blur-radius-background));
|
|
||||||
|
|
||||||
font-family: var(--font-mono);
|
font-family: var(--font-mono);
|
||||||
font-size: 1.0rem;
|
font-size: 1.0rem;
|
||||||
|
|||||||
@@ -1 +1,37 @@
|
|||||||
asdf
|
<script lang="ts">
|
||||||
|
import Content from "$lib/viewport/content.svelte";
|
||||||
|
import ImageGallery, {
|
||||||
|
type GalleryImage,
|
||||||
|
} from "$lib/lists/image-gallery.svelte";
|
||||||
|
|
||||||
|
let i: GalleryImage[] = [
|
||||||
|
{
|
||||||
|
src: "/projects/projectn5/devlog/2025/0523/birds_eye.webp",
|
||||||
|
alt: "gawk",
|
||||||
|
desc: "gawk gawk gawk",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: "/blog/robert.webp",
|
||||||
|
alt: "ROOOOBEEERT",
|
||||||
|
desc: "ROOOOBEEERT",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: "/blog/2026/0208/sadstick.webp",
|
||||||
|
alt: ":(",
|
||||||
|
desc: ":(",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: "/art/drawings/2026/0310.webp",
|
||||||
|
alt: "girl",
|
||||||
|
desc: "girl girl girl girl girlgirlgirl vgirl",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<Content>
|
||||||
|
<h1>TEST</h1>
|
||||||
|
|
||||||
|
test page go brr
|
||||||
|
|
||||||
|
<ImageGallery images={i} />
|
||||||
|
</Content>
|
||||||
|
|||||||
Reference in New Issue
Block a user