diff options
author | 2021-11-02 17:48:00 +0100 | |
---|---|---|
committer | 2021-11-02 12:48:00 -0400 | |
commit | b4dbb90b5f7b2b5a707fca13e5f87d8ba1eb2a1e (patch) | |
tree | 280ecdd17e8d5bf09625e1270fe46aa8e2ae76c2 /examples/portfolio-svelte/src/components | |
parent | c0d9ed832ecf9531ce2dd55699d7c25b775c147a (diff) | |
download | astro-b4dbb90b5f7b2b5a707fca13e5f87d8ba1eb2a1e.tar.gz astro-b4dbb90b5f7b2b5a707fca13e5f87d8ba1eb2a1e.tar.zst astro-b4dbb90b5f7b2b5a707fca13e5f87d8ba1eb2a1e.zip |
Adds a new example template portfolio-svelte (#1667)
- Template is based on svelte components instead of react
- Bumps astro version to "^0.21.0-next.0" for portfolio-svelte template
Co-authored-by: Konstantinos Kostarellis <Konstantinos.Kostarellis@gmail.com>
Diffstat (limited to 'examples/portfolio-svelte/src/components')
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> + © {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> |