summaryrefslogtreecommitdiff
path: root/examples/portfolio-svelte/src/components
diff options
context:
space:
mode:
Diffstat (limited to 'examples/portfolio-svelte/src/components')
-rw-r--r--examples/portfolio-svelte/src/components/Button.svelte11
-rw-r--r--examples/portfolio-svelte/src/components/Footer.svelte23
-rw-r--r--examples/portfolio-svelte/src/components/MainHead.astro13
-rw-r--r--examples/portfolio-svelte/src/components/Nav.svelte80
-rw-r--r--examples/portfolio-svelte/src/components/PortfolioPreview.svelte119
5 files changed, 246 insertions, 0 deletions
diff --git a/examples/portfolio-svelte/src/components/Button.svelte b/examples/portfolio-svelte/src/components/Button.svelte
new file mode 100644
index 000000000..d5376d134
--- /dev/null
+++ b/examples/portfolio-svelte/src/components/Button.svelte
@@ -0,0 +1,11 @@
+<span><slot /></span>
+
+<style>
+ span {
+ display: inline-block;
+ border: 3px solid currentColor;
+ padding: 0.5em 1em;
+ font-weight: 700;
+ text-transform: uppercase;
+ }
+</style>
diff --git a/examples/portfolio-svelte/src/components/Footer.svelte b/examples/portfolio-svelte/src/components/Footer.svelte
new file mode 100644
index 000000000..0a91c426c
--- /dev/null
+++ b/examples/portfolio-svelte/src/components/Footer.svelte
@@ -0,0 +1,23 @@
+<script>
+ export let name = "Jeanine White";
+</script>
+
+<footer>
+ &copy; {new Date().getFullYear()} {name}
+ <small>🚀 Built with Astro</small>
+</footer>
+
+<style>
+ footer {
+ text-align: center;
+ padding: 8rem 2rem 4rem;
+ }
+
+ small {
+ display: block;
+ margin-top: 1rem;
+ color: var(--t-subdue);
+ font-size: var(--f-d2);
+ text-transform: uppercase;
+ }
+</style>
diff --git a/examples/portfolio-svelte/src/components/MainHead.astro b/examples/portfolio-svelte/src/components/MainHead.astro
new file mode 100644
index 000000000..74eb59164
--- /dev/null
+++ b/examples/portfolio-svelte/src/components/MainHead.astro
@@ -0,0 +1,13 @@
+---
+const { title = 'Jeanine White: Personal Site', description = 'The personal site of Jeanine White' } = Astro.props;
+---
+
+<meta charset="UTF-8">
+<meta name="description" property="og:description" content={description}>
+<meta name="viewport" content="width=device-width">
+<title>{title}</title>
+
+<link rel="icon" type="image/x-icon" href="/favicon.ico" />
+<link rel="stylesheet" type="text/css" href="/_astro/src/scss/global.css">
+<link rel="preconnect" href="https://fonts.gstatic.com">
+<link href="https://fonts.googleapis.com/css2?family=Inter:wght@200;400;700;900&display=swap" rel="stylesheet">
diff --git a/examples/portfolio-svelte/src/components/Nav.svelte b/examples/portfolio-svelte/src/components/Nav.svelte
new file mode 100644
index 000000000..87108e12d
--- /dev/null
+++ b/examples/portfolio-svelte/src/components/Nav.svelte
@@ -0,0 +1,80 @@
+<nav>
+ <a class="logolink" href="/">
+ <div class="monogram">JW</div>
+ </a>
+ <a class="link" href="/projects">Portfolio</a>
+ <a class="link" href="/about">About</a>
+ <a class="social" href="https://twitter.com/me">
+ <svg class="socialicon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
+ <path d="M5.026 15c6.038 0 9.341-5.003 9.341-9.334 0-.14 0-.282-.006-.422A6.685 6.685 0 0 0 16 3.542a6.658 6.658 0 0 1-1.889.518 3.301 3.301 0 0 0 1.447-1.817 6.533 6.533 0 0 1-2.087.793A3.286 3.286 0 0 0 7.875 6.03a9.325 9.325 0 0 1-6.767-3.429 3.289 3.289 0 0 0 1.018 4.382A3.323 3.323 0 0 1 .64 6.575v.045a3.288 3.288 0 0 0 2.632 3.218 3.203 3.203 0 0 1-.865.115 3.23 3.23 0 0 1-.614-.057 3.283 3.283 0 0 0 3.067 2.277A6.588 6.588 0 0 1 .78 13.58a6.32 6.32 0 0 1-.78-.045A9.344 9.344 0 0 0 5.026 15z" />
+ </svg>
+ </a>
+ <a class="social" href="https://github.com/me">
+ <svg class="socialicon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
+ <path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z" />
+ </svg>
+ </a>
+ <a class="social" href="https://dev.to/me">
+ <svg class="socialicon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 40" style="enable-background:new 0 0 50 40" xmlSpace="preserve">
+ <path d="M15.7 15.5c-.4-.3-.7-.4-1.1-.4h-1.7v10.1h1.7c.4 0 .8-.1 1.1-.4.4-.3.6-.7.6-1.3v-6.7c0-.6-.2-1-.6-1.3z" />
+ <path d="M47 0H3C1.3 0 0 1.3 0 3v34c0 1.7 1.3 3 3 3h44c1.7 0 3-1.3 3-3V3c0-1.7-1.3-3-3-3zM19.1 23.5c0 1.3-.4 2.4-1.3 3.2-.8.9-1.9 1.3-3.3 1.3h-4.4V12.3h4.5c1.3 0 2.4.4 3.2 1.3.8.8 1.3 1.9 1.3 3.2v6.7zm9.1-8.4h-5.1v3.6h3.1v2.8h-3.1v3.7h5.1V28h-5.9c-.6 0-1-.2-1.4-.6-.4-.4-.6-.8-.6-1.4V14.2c0-.6.2-1 .6-1.4.4-.4.8-.6 1.4-.6h5.9v2.9zM37.5 26c-.6 1.3-1.3 2-2.2 2-.9 0-1.7-.7-2.2-2l-3.7-13.8h3.1L35.3 23l2.8-10.8h3.1L37.5 26z" />
+ </svg>
+ </a>
+</nav>
+
+<style>
+ nav {
+ display: flex;
+ align-items: center;
+ padding: 1rem 2rem;
+ }
+ .logolink {
+ display: block;
+ color: var(--t-fg);
+ text-decoration: none;
+ }
+ .link {
+ color: var(--t-subdue);
+ display: block;
+ margin-left: 1rem;
+ text-decoration: none;
+ font-size: var(--f-d1);
+ text-transform: uppercase;
+ padding-top: 0.75em;
+ padding-bottom: 0.75em;
+ }
+ .link:focus,
+ .link:hover {
+ color: var(--t-active);
+ }
+ .monogram {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 2em;
+ height: 2em;
+ margin-right: 0.5rem;
+ color: var(--c-black);
+ font-weight: 900;
+ letter-spacing: -0.125rem;
+ border: 3px solid currentColor;
+ border-radius: 50%;
+ }
+ .social {
+ display: block;
+ margin-left: auto;
+ }
+ .social + .social {
+ margin-left: 0.75rem;
+ }
+ .socialicon {
+ display: block;
+ width: 1.25rem;
+ height: 1.25rem;
+ fill: var(--t-subdue);
+ transition: fill linear 150ms;
+ }
+ .socialicon:hover {
+ fill: var(--t-active);
+ }
+</style>
diff --git a/examples/portfolio-svelte/src/components/PortfolioPreview.svelte b/examples/portfolio-svelte/src/components/PortfolioPreview.svelte
new file mode 100644
index 000000000..230a0747f
--- /dev/null
+++ b/examples/portfolio-svelte/src/components/PortfolioPreview.svelte
@@ -0,0 +1,119 @@
+<script>
+ export let project;
+</script>
+
+<div class="card">
+ <div class="titleCard" style="background-image:url({project.img})">
+ <h1 class="title">{project.title}</h1>
+ </div>
+ <div class="pa3">
+ <p class="desc mt0 mb2">{project.description}</p>
+ <div class="tags">
+ Tagged:
+ {#each project.tags as t}
+ <div class="tag" data-tag={t}>
+ {t}
+ </div>
+ {/each}
+ </div>
+ <a class="link" href={project.url}>
+ <span class="linkInner">View</span>
+ </a>
+ </div>
+</div>
+
+<style>
+ .card {
+ position: relative;
+ color: var(--t-bg);
+ background: var(--t-fg);
+ border: 1px solid #f0f0f0;
+ }
+ .title {
+ position: absolute;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin: 0;
+ color: white;
+ flex-direction: column;
+ font-size: var(--f-u4);
+ font-weight: 900;
+ text-transform: uppercase;
+ letter-spacing: 0.0625em;
+ }
+ .titleCard {
+ position: relative;
+ background-size: cover;
+ background-position: 50% 100%;
+ padding-top: 37.5%;
+ }
+ .desc {
+ font-size: var(--f-u1);
+ line-height: 1.4;
+ }
+ .link {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ color: var(--t-bg);
+ font-size: var(--f-u2);
+ font-weight: 700;
+ background: rgba(0, 0, 0, 0.25);
+ opacity: 0;
+ text-decoration: none;
+ text-transform: uppercase;
+ transition: opacity 150ms linear;
+ }
+ .link:focus,
+ .link:hover {
+ opacity: 1;
+ }
+ .link:focus .linkInner,
+ .link:hover .linkInner {
+ transform: translateY(0);
+ border-color: rgba(255, 255, 255, 0.625);
+ }
+ .linkInner {
+ padding: 0.375em 1em;
+ border: 2px solid rgba(255, 255, 255, 0);
+ transition: transform 300ms cubic-bezier(0, 0.4, 0.6, 1),
+ border-color 1s linear;
+ transform: translateY(25%);
+ }
+ .nav {
+ display: flex;
+ justify-content: flex-end;
+ }
+ .tags {
+ font-size: var(--f-d2);
+ text-transform: uppercase;
+ }
+ .tag {
+ display: inline-block;
+ color: var(--c-yellow);
+ text-transform: uppercase;
+ margin-left: 0.5em;
+ }
+ .tag:nth-of-type(1n) {
+ color: var(--c-green);
+ }
+ .tag:nth-of-type(2n) {
+ color: var(--c-orange);
+ }
+ .tag:nth-of-type(3n) {
+ color: var(--c-blue);
+ }
+ .tag:nth-of-type(4n) {
+ color: var(--c-pink);
+ }
+</style>