Compare commits
57
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1a6c5194e5 | ||
|
|
aaab8f2c98 | ||
|
|
2170344c9b | ||
|
|
45208d0ff9 | ||
|
|
112e0f1a5c | ||
|
|
e843870afd | ||
|
|
74dc1196cd | ||
|
|
306396cce1 | ||
|
|
a2acc03f7c | ||
|
|
6f0f5f1cf7 | ||
|
|
278fc640ce | ||
|
|
2e07de0e71 | ||
|
|
e0ea53a9d3 | ||
|
|
632eed6810 | ||
|
|
dd4dfdea78 | ||
|
|
377f87ced3 | ||
|
|
d8d40ddc30 | ||
|
|
ee2098e6e6 | ||
|
|
d2066087ae | ||
|
|
d187ec70c3 | ||
|
|
4a734b66f9 | ||
|
|
cbdc81c4ce | ||
|
|
7bd03be127 | ||
|
|
8d5319ac4a | ||
|
|
26357e531d | ||
|
|
eac1534497 | ||
|
|
94de27084c | ||
|
|
0a6ede8125 | ||
|
|
ebf9a21478 | ||
|
|
86652a4f09 | ||
|
|
3f171dea3c | ||
|
|
6b0af2fb3e | ||
|
|
1b33bd398d | ||
|
|
f31f180687 | ||
|
|
8b9a2ac8d5 | ||
|
|
212103ab71 | ||
|
|
7d7012eec6 | ||
|
|
b2b56480b8 | ||
|
|
79795bc060 | ||
|
|
6961d9c34d | ||
|
|
0797fd9eff | ||
|
|
d69078ff26 | ||
|
|
ba437de706 | ||
|
|
065a6a2d17 | ||
|
|
3eb3b6845b | ||
|
|
71227d7d78 | ||
|
|
52c1abb0b7 | ||
|
|
de234ddf8c | ||
|
|
3769f3edc3 | ||
|
|
87b2e808f7 | ||
|
|
189ca5034b | ||
|
|
71405fd5a2 | ||
|
|
357f0b06f3 | ||
|
|
30a5d53bc0 | ||
|
|
bd183bf832 | ||
|
|
69cfbf1b44 | ||
|
|
a75c919929 |
@@ -0,0 +1,31 @@
|
|||||||
|
name: Build and Push Docker Image
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ main ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ main ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-and-push:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout Repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Log in to Docker Hub
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.CONTAINER_REGISTRY_USERNAME }}
|
||||||
|
password: ${{ secrets.CONTAINER_REGISTRY_PASSKEY }}
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
|
- name: Build and Tag Docker Image
|
||||||
|
run: |
|
||||||
|
docker build -t ${{ secrets.CONTAINER_REGISTRY_USERNAME }}/luke-else.co.uk:latest .
|
||||||
|
|
||||||
|
- name: Push Docker Image
|
||||||
|
run: |
|
||||||
|
docker push ${{ secrets.CONTAINER_REGISTRY_USERNAME }}/luke-else.co.uk:latest
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import { createEventDispatcher } from 'svelte';
|
||||||
|
|
||||||
|
const dispatch = createEventDispatcher();
|
||||||
|
|
||||||
|
function onClick() {
|
||||||
|
dispatch('click');
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.sliding-card {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-between;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
flex: 2 1 15em;
|
||||||
|
padding: 0.5em 2.5em 2em 2.5em;
|
||||||
|
background: var(--bg-secondary);
|
||||||
|
border-radius: 0.5em;
|
||||||
|
scroll-snap-align: start;
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sliding-card:hover {
|
||||||
|
box-shadow: .5em .5em .5em var(--hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.sliding-card .sliding-card-header :global(div) {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-bottom: 0em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-wrapper {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
overflow: hidden; /* Ensure smooth sliding */
|
||||||
|
}
|
||||||
|
|
||||||
|
.sliding-card-content {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
max-width: 100%;
|
||||||
|
flex-grow: 1;
|
||||||
|
z-index: 1; /* Keep it below the sliding content */
|
||||||
|
}
|
||||||
|
|
||||||
|
.sliding-content {
|
||||||
|
position: absolute; /* Now it sits on top */
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%; /* Cover entire content */
|
||||||
|
background: var(--bg-secondary);
|
||||||
|
transform: translateY(100%); /* Start hidden */
|
||||||
|
transition: transform 0.3s ease-in-out;
|
||||||
|
z-index: 2; /* Now above main content */
|
||||||
|
}
|
||||||
|
|
||||||
|
.sliding-card:hover .sliding-content {
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.sliding-card .sliding-card-footer :global(div){
|
||||||
|
margin-bottom: 1em;
|
||||||
|
display: flex;
|
||||||
|
gap: 1em;
|
||||||
|
max-width: 100%;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
||||||
|
<!-- svelte-ignore a11y-no-static-element-interactions -->
|
||||||
|
<div class="sliding-card" on:click={onClick}>
|
||||||
|
<div class="sliding-card-header">
|
||||||
|
<slot name="header"></slot>
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<!-- Wrapper to stack sliding-card-content and sliding-content -->
|
||||||
|
<div class="content-wrapper">
|
||||||
|
<div class="sliding-card-content">
|
||||||
|
<slot name="content"></slot>
|
||||||
|
</div>
|
||||||
|
<div class="sliding-content">
|
||||||
|
<slot name="sliding-content"></slot>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr class="not-required"/>
|
||||||
|
<div class="sliding-card-footer">
|
||||||
|
<slot name="footer"></slot>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
+3
-1
@@ -14,7 +14,8 @@ import InfoIcon from '$lib/components/Toasts/InfoIcon.svelte';
|
|||||||
import SuccessIcon from '$lib/components/Toasts/SuccessIcon.svelte';
|
import SuccessIcon from '$lib/components/Toasts/SuccessIcon.svelte';
|
||||||
import ErrorIcon from '$lib/components/Toasts/ErrorIcon.svelte';
|
import ErrorIcon from '$lib/components/Toasts/ErrorIcon.svelte';
|
||||||
|
|
||||||
import Card from '$lib/components/Card.svelte';
|
import Card from '$lib/components/Cards/Card.svelte';
|
||||||
|
import SlidingCard from '$lib/components/Cards/SlidingCard.svelte';
|
||||||
import Modal from '$lib/components/Modal.svelte';
|
import Modal from '$lib/components/Modal.svelte';
|
||||||
|
|
||||||
|
|
||||||
@@ -35,5 +36,6 @@ export {
|
|||||||
ErrorIcon,
|
ErrorIcon,
|
||||||
|
|
||||||
Card,
|
Card,
|
||||||
|
SlidingCard,
|
||||||
Modal
|
Modal
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Card from '$lib/components/Card.svelte';
|
import Card from '$lib/components/Cards/Card.svelte';
|
||||||
import { Toast, ToastType } from "$lib/toast";
|
import { Toast, ToastType } from "$lib/toast";
|
||||||
import { addToast } from "$lib/store";
|
import { addToast } from "$lib/store";
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export let skills: any;
|
export let skills: any;
|
||||||
|
|
||||||
import Card from '$lib/components/Card.svelte';
|
import Card from '$lib/components/Cards/Card.svelte';
|
||||||
import Modal from '$lib/components/Modal.svelte';
|
import Modal from '$lib/components/Modal.svelte';
|
||||||
|
|
||||||
let showModal: boolean = false;
|
let showModal: boolean = false;
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 425 KiB After Width: | Height: | Size: 1.0 MiB |
Reference in New Issue
Block a user