Merge pull request 'Merge Development into main.' (#8) from development into main
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Build and Push Docker Image / build-and-push (push) Successful in 27s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Build and Push Docker Image / build-and-push (push) Successful in 27s
				
			Reviewed-on: #8
This commit was merged in pull request #8.
	This commit is contained in:
		
							
								
								
									
										31
									
								
								.gitea/workflows/build.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								.gitea/workflows/build.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
				
			||||||
							
								
								
									
										102
									
								
								src/lib/components/Cards/SlidingCard.svelte
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								src/lib/components/Cards/SlidingCard.svelte
									
									
									
									
									
										Normal file
									
								
							@@ -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>
 | 
				
			||||||
@@ -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,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