mirror of
https://github.com/type-challenges/type-challenges.git
synced 2025-12-08 19:06:13 +00:00
feat: landing page
This commit is contained in:
parent
07d47f1b0c
commit
076e85dc8b
@ -10,7 +10,6 @@ export async function build() {
|
||||
const redirects: [string, string, number][] = []
|
||||
|
||||
// redirect homepage to github repo
|
||||
redirects.push(['/', `${REPO}/blob/master/README.md`, 302])
|
||||
supportedLocales.filter(locale => locale !== defaultLocale).forEach((locale) => {
|
||||
redirects.push([`/${locale}`, `${REPO}/blob/master/README.${locale}.md`, 302])
|
||||
})
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
cd ..
|
||||
npx pnpm i
|
||||
npm run build
|
||||
cp -r ../site/*.* dist
|
||||
|
||||
@ -1,2 +1,7 @@
|
||||
[build]
|
||||
ignore = "git diff --quiet HEAD^ HEAD .."
|
||||
ignore = "git diff --quiet HEAD^ HEAD .."
|
||||
|
||||
[[redirects]]
|
||||
from = "/"
|
||||
to = "/index.html"
|
||||
status = 200
|
||||
|
||||
1
site/favicon.svg
Normal file
1
site/favicon.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><style>.cls-1{font-size:64.01px;fill:#6d6e71;font-family:FiraCode-Regular, Fira Code;letter-spacing:-0.07em;}.cls-2{fill:#4165af;font-family:FiraCode-Medium, Fira Code;font-weight:500;}.cls-3{fill:none;stroke:#e84433;stroke-miterlimit:10;stroke-width:3px;}</style></defs><text class="cls-1" transform="matrix(1, 0, 0, 1, -4.51, 63.83)"><<tspan class="cls-2" x="34.59" y="0">T</tspan><tspan x="69.18" y="0">></tspan></text><path class="cls-3" d="M10.6,76.23c4.82,0,4.79,6,9.61,6s4.85-6,9.67-6,4.8,6,9.62,6.05,4.85-6,9.67-6,4.79,6,9.62,6,4.85-6,9.67-6,4.8,6,9.62,6,4.86-6,9.68-6"/></svg>
|
||||
|
After Width: | Height: | Size: 692 B |
61
site/index.html
Normal file
61
site/index.html
Normal file
@ -0,0 +1,61 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="robots" content="noindex" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
<link rel="dns-prefetch" href="https://fonts.googleapis.com" />
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,600"
|
||||
/>
|
||||
<link rel="stylesheet" href="style.css" />
|
||||
|
||||
<title>Type Challenges</title>
|
||||
<meta
|
||||
name="description"
|
||||
content="Collection of TypeScript type challenges with OJ"
|
||||
/>
|
||||
|
||||
<meta property="og:type" content="article" />
|
||||
<meta property="og:title" content="Type Challenges" />
|
||||
<meta
|
||||
property="og:description"
|
||||
content="Collection of TypeScript type challenges with OJ"
|
||||
/>
|
||||
<meta
|
||||
property="og:image"
|
||||
content="https://repository-images.githubusercontent.com/281975310/58a91100-d418-11ea-88c9-08c02d496a7c"
|
||||
/>
|
||||
|
||||
<meta name="twitter:card" content="summary" />
|
||||
<meta name="twitter:title" content="Type Challenges" />
|
||||
<meta
|
||||
name="twitter:description"
|
||||
content="Collection of TypeScript type challenges with OJ"
|
||||
/>
|
||||
<meta
|
||||
name="twitter:image"
|
||||
content="https://repository-images.githubusercontent.com/281975310/58a91100-d418-11ea-88c9-08c02d496a7c"
|
||||
/>
|
||||
|
||||
<link rel="icon" href="favicon.svg" type="image/svg" />
|
||||
|
||||
<meta name="msapplication-TileColor" content="#294f80" />
|
||||
<meta name="theme-color" content="#294f80" />
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<a href="https://github.com/type-challenges/type-challenges">
|
||||
<img src="logo.svg" width="500" alt="" />
|
||||
</a>
|
||||
<div>
|
||||
<h1>Collection of TypeScript type challenges with online judge</h1>
|
||||
<p>
|
||||
<a href="https://github.com/type-challenges/type-challenges" class="button"> View on Github </a>
|
||||
</p>
|
||||
</div>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
37
site/logo.svg
Normal file
37
site/logo.svg
Normal file
@ -0,0 +1,37 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 497.63 103.79">
|
||||
<defs>
|
||||
<style>
|
||||
@keyframes blink {
|
||||
0% { opacity: 0 }
|
||||
40% { opacity: 0 }
|
||||
40.1% { opacity: 1 }
|
||||
99.9% { opacity: 1 }
|
||||
100% { opacity: 0 }
|
||||
}
|
||||
.a{fill:#294f80;}
|
||||
.b{fill:#231f20;}
|
||||
.c{fill:#4265af;}
|
||||
.d{fill:none;stroke:#e84534;stroke-miterlimit:10;stroke-width:2px;}
|
||||
.e{fill:#58595b; animation: blink 1.2s linear infinite;}
|
||||
</style>
|
||||
</defs>
|
||||
<path class="a" d="M65,58.51l-3.2,0,.11-22.71-8,0V33l19.22.09-.35,2.76-7.73,0Z"/>
|
||||
<path class="a" d="M87.65,58.75c-1.39,4-3.57,7.16-8.73,7.65l-.47-2.48c4-.67,5.19-2.31,6.24-5.32h-1L76.94,39.09l3.33,0,5.5,17.13,5.6-17.08,3.22,0Z"/>
|
||||
<path class="a" d="M116.29,49c0,5.9-2.49,10.15-7.56,10.13a6.44,6.44,0,0,1-5.13-2.28l0,9.28-3.11.37.13-27.31h2.65l.24,2.72a7,7,0,0,1,5.83-3.09C114.49,38.87,116.32,42.91,116.29,49Zm-12.63-4.58,0,9.65a5.28,5.28,0,0,0,4.44,2.47c3.24,0,4.88-2.38,4.9-7.58s-1.36-7.63-4.42-7.64C106.38,41.33,104.73,42.87,103.66,44.44Z"/>
|
||||
<path class="a" d="M130.83,56.67A8.67,8.67,0,0,0,136,54.94L137.49,57a11.09,11.09,0,0,1-6.71,2.26c-5.7,0-8.89-4.13-8.86-10.18,0-5.9,3.38-10.15,8.56-10.13,4.92,0,7.89,3.67,7.86,9.58,0,.67,0,1.28-.08,1.7l-13.09-.06C125.31,54.68,127.82,56.66,130.83,56.67Zm-5.63-8.9,10.15,0c0-4.17-1.93-6.3-4.85-6.32S125.48,43.48,125.2,47.77Z"/>
|
||||
<path class="b" d="M160.23,39.4l-13.09,7.94,13,8.15-1.67,2.26-14-8.85V45.72L158.75,37Z"/>
|
||||
<path class="c" d="M184.23,35.69l-2,2.32a8,8,0,0,0-5.29-1.92c-4,0-7.51,2.63-7.54,10.18,0,7.36,3.2,10.17,7.4,10.19a8.59,8.59,0,0,0,5.87-2.14l1.82,2.36a10.79,10.79,0,0,1-7.8,2.85c-6.32,0-11.15-4.7-11.1-13.28s5.09-13.16,11.14-13.13A10.81,10.81,0,0,1,184.23,35.69Z"/>
|
||||
<path class="c" d="M192.72,42.18a7.83,7.83,0,0,1,6.16-3c3.75,0,5.46,2.17,5.44,5.8l-.07,14.18-3.55,0,.07-13.87c0-2.33-.94-3.33-3.11-3.34s-3.91,1.57-4.95,3.08l-.07,14.09h-3.55l.13-27.3,3.56-.37Z"/>
|
||||
<path class="c" d="M227.2,57.32l-.85,2.43A4.16,4.16,0,0,1,222.6,57a7.58,7.58,0,0,1-6.18,2.7c-3.92,0-6.33-2.45-6.31-6.08,0-4,3.3-6.29,9.24-6.26l2.83,0V45.92c0-2.68-1.67-3.73-4.5-3.74a16.17,16.17,0,0,0-5.12,1l-.9-2.59a18.6,18.6,0,0,1,6.57-1.24c5,0,7.5,2.47,7.48,6.43l0,9.08C225.67,56.39,226.15,57,227.2,57.32Zm-5-2.89,0-4.72h-2.59c-4.12,0-5.68,1.47-5.7,3.87s1.17,3.48,3.56,3.5A5.72,5.72,0,0,0,222.15,54.43Z"/>
|
||||
<path class="c" d="M241.51,54.36c0,1.86,1.27,2.57,3.1,2.58a8.43,8.43,0,0,0,3.2-.65l.91,2.54a10.66,10.66,0,0,1-4.79,1c-3.66,0-6-2.19-6-5.78l.1-19.35-5.94,0,0-2.69,9.48,0Z"/>
|
||||
<path class="c" d="M263.71,54.47c0,1.86,1.26,2.57,3.09,2.58A8.44,8.44,0,0,0,270,56.4l.91,2.54a10.7,10.7,0,0,1-4.8,1c-3.66,0-6-2.19-6-5.78l.1-19.34-5.94,0v-2.7l9.49,0Z"/>
|
||||
<path class="c" d="M286.3,57.2a8.66,8.66,0,0,0,5.17-1.71l1.6,2.25a11.19,11.19,0,0,1-6.9,2.33c-5.86,0-9.11-4.17-9.08-10.23,0-5.89,3.4-10.21,8.74-10.19,5,0,8.1,3.7,8.07,9.68,0,.66,0,1.31-.08,1.77l-13-.06C281,55.33,283.36,57.19,286.3,57.2Zm-5.51-8.75,9.7,0c-.06-4-1.79-6.06-4.63-6.07S281.07,44.33,280.79,48.45Z"/>
|
||||
<path class="c" d="M300.17,40.19h3.05l.25,2.63a8.37,8.37,0,0,1,6.39-3.06c3.75,0,5.46,2.17,5.45,5.8l-.08,14.18h-3.55l.06-12c0-3.71-.38-5.2-3.08-5.21-2.12,0-3.93,1.57-5,3.06l-.07,14.12-3.55,0Z"/>
|
||||
<path class="c" d="M339.48,41.27a18.91,18.91,0,0,1-5.7.58c2.29,1,3.45,2.66,3.44,4.94,0,3.84-2.85,6.6-7.52,6.58a9.32,9.32,0,0,1-2.81-.36,2.19,2.19,0,0,0-.95,1.77c0,.87.52,1.55,2.52,1.56l3.46,0c4,0,7,2.35,7,5.38,0,3.86-3.45,6-9.53,6-6.44,0-8.43-2-8.41-6l3.2,0c0,2.18,1,3.2,5.22,3.22s5.92-1,5.93-3c0-1.74-1.7-2.67-4.13-2.68l-3.42,0c-3.51,0-5.07-1.76-5.06-3.72a4.22,4.22,0,0,1,2.16-3.45,5.59,5.59,0,0,1-3.28-5.44c0-4,3.28-6.8,8-6.78,4.83,0,6.64-.69,8.94-1.75Zm-14.3,5.4c0,2.55,1.42,4.34,4.38,4.35,2.61,0,4-1.57,4.05-4.34s-1.36-4.28-4.08-4.3A4,4,0,0,0,325.18,46.67Z"/>
|
||||
<path class="c" d="M352.89,57.54a8.67,8.67,0,0,0,5.17-1.72l1.6,2.25a11.13,11.13,0,0,1-6.9,2.33c-5.86,0-9.11-4.17-9.08-10.23,0-5.88,3.4-10.21,8.74-10.19,5,0,8.1,3.71,8.07,9.68,0,.66,0,1.31-.08,1.77l-13-.06C347.55,55.66,350,57.52,352.89,57.54Zm-5.51-8.76,9.7,0c-.06-4-1.79-6.06-4.64-6.07S347.66,44.66,347.38,48.78Z"/>
|
||||
<path class="b" d="M370.08,29.86l9.27.05v2.68l-6.33,0-.15,29.11,6.33,0v2.64l-9.27,0Z"/>
|
||||
<path class="b" d="M400.69,64.45l-9.27,0,0-2.62,6.32,0,.15-29.13-6.33,0,0-2.68,9.26.05Z"/>
|
||||
<path class="b" d="M426.56,47.12l0,3.18L412.46,59l-1.67-2.3,13.1-8-13-8.11,1.51-2.34Z"/>
|
||||
<path class="d" d="M166.56,70.17c4,0,3.93,6,7.9,6s4-6,8-6,3.94,6,7.9,6,4-6,8-6,3.94,6,7.91,6,4-6,8-6,3.93,6,7.89,6,4-6,8-6,3.94,6,7.9,6,4-6,8-6,3.94,6,7.9,6,4-6,8-6,3.94,6,7.9,6,4-6,8-6,3.94,6,7.91,6,4-6,8-6,3.94,6,7.9,6,4-6,8-6,3.93,6,7.9,6,4-6,8-6,3.94,6,7.91,6,4-6,8-6,3.94,6,7.91,6,4-6,8-6,3.94,6,7.9,6,4-6,8-6,3.94,6,7.9,6,4-6,8-6,3.94,6,7.91,6,4-6,8-6,3.94,6,7.91,6"/>
|
||||
<rect class="e" x="441.93" y="22.98" width="3.3" height="50.79" transform="matrix(1, 0, 0, 1, 0.25, -2.21)"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.7 KiB |
1
site/social.svg
Normal file
1
site/social.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 640 320"><defs><style>.cls-1,.cls-6{fill:none;}.cls-2{font-size:20.13px;fill:#808284;font-family:Helvetica-Light, Helvetica;font-weight:300;letter-spacing:-0.01em;}.cls-3{font-size:39.17px;fill:#284e80;font-family:FiraCode-Regular, Fira Code;}.cls-4{fill:#221e1f;}.cls-5{fill:#4165af;font-family:FiraCode-Retina, Fira Code;}.cls-6{stroke:#e84433;stroke-miterlimit:10;stroke-width:2px;}.cls-7{clip-path:url(#clip-path);}.cls-8{fill:#90bc3e;}.cls-9{fill:url(#linear-gradient);}.cls-10{isolation:isolate;font-size:11px;fill:#fff;font-family:Verdana;}.cls-11{letter-spacing:-0.02em;}.cls-12,.cls-13,.cls-19,.cls-25{font-family:KozGoPr6N-Regular-83pv-RKSJ-H, Kozuka Gothic Pr6N;}.cls-12{letter-spacing:-0.25em;}.cls-13{letter-spacing:-0.01em;}.cls-14{letter-spacing:-0.14em;}.cls-15{clip-path:url(#clip-path-2);}.cls-16{fill:#eaa748;}.cls-17{fill:url(#linear-gradient-2);}.cls-18{letter-spacing:-0.03em;}.cls-19{letter-spacing:-0.02em;}.cls-20{letter-spacing:-0.02em;}.cls-21{clip-path:url(#clip-path-3);}.cls-22{fill:#e15d44;}.cls-23{fill:url(#linear-gradient-3);}.cls-24{letter-spacing:-0.04em;}.cls-25{letter-spacing:-0.03em;}</style><clipPath id="clip-path"><rect class="cls-1" x="168.2" y="221.55" width="89" height="20" rx="3"/></clipPath><linearGradient id="linear-gradient" x1="-256.19" y1="421.64" x2="-256.19" y2="420.64" gradientTransform="matrix(89, 0, 0, -20, 23014, 8654.41)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#bbb" stop-opacity="0.1"/><stop offset="1" stop-color="#000101" stop-opacity="0.1"/></linearGradient><clipPath id="clip-path-2"><rect class="cls-1" x="261.59" y="221.55" width="111" height="20" rx="3"/></clipPath><linearGradient id="linear-gradient-2" x1="-256.31" y1="421.64" x2="-256.31" y2="420.64" gradientTransform="matrix(111, 0, 0, -20, 28767.5, 8654.41)" xlink:href="#linear-gradient"/><clipPath id="clip-path-3"><rect class="cls-1" x="376.8" y="221.55" width="93" height="20" rx="3"/></clipPath><linearGradient id="linear-gradient-3" x1="-254.16" y1="421.64" x2="-254.16" y2="420.64" gradientTransform="matrix(93, 0, 0, -20, 24060.09, 8654.41)" xlink:href="#linear-gradient"/></defs><text class="cls-2" transform="translate(109.62 177.83)">Collection of TypeScript type challenges with OJ</text><text class="cls-3" transform="translate(117.11 115.49)">Type<tspan class="cls-4" x="96.42" y="0"><</tspan><tspan class="cls-5" x="120.52" y="0">Challenge</tspan><tspan class="cls-4" x="337.46" y="0">[]></tspan></text><path class="cls-6" d="M241.17,127.87c4.3,0,4.3,6,8.61,6s4.31-6,8.61-6,4.31,6,8.62,6,4.3-6,8.61-6,4.31,6,8.61,6,4.31-6,8.62-6,4.3,6,8.61,6,4.3-6,8.61-6,4.3,6,8.61,6,4.3-6,8.61-6,4.31,6,8.61,6,4.31-6,8.61-6,4.31,6,8.62,6,4.3-6,8.61-6,4.31,6,8.61,6,4.31-6,8.62-6,4.3,6,8.61,6,4.31-6,8.62-6,4.31,6,8.61,6,4.31-6,8.62-6,4.31,6,8.62,6,4.31-6,8.61-6,4.31,6,8.62,6,4.31-6,8.62-6,4.3,6,8.61,6,4.31-6,8.62-6,4.31,6,8.61,6,4.31-6,8.62-6,4.31,6,8.62,6,4.31-6,8.63-6,4.31,6,8.62,6"/><g class="cls-7"><rect class="cls-8" x="168.2" y="221.55" width="89" height="20"/><rect class="cls-9" x="168.2" y="221.55" width="89" height="20"/></g><text class="cls-10" transform="translate(173.4 235.55)">4<tspan class="cls-11" x="6.99" y="0"> </tspan><tspan class="cls-12" x="7.91" y="0">・</tspan><tspan class="cls-13" x="16.16" y="0"> </tspan><tspan x="18.59" y="0">Pick<</tspan><tspan class="cls-14" x="49.49" y="0">T</tspan><tspan x="54.71" y="0">,</tspan><tspan class="cls-11" x="58.71" y="0"> </tspan><tspan x="62.38" y="0">K></tspan></text><g class="cls-15"><rect class="cls-16" x="261.59" y="221.55" width="111" height="20"/><rect class="cls-17" x="261.59" y="221.55" width="111" height="20"/></g><text class="cls-10" transform="translate(266.66 235.55)">9<tspan class="cls-18" x="6.99" y="0"> </tspan><tspan class="cls-12" x="7.82" y="0">・</tspan><tspan class="cls-19" x="16.07" y="0"> </tspan><tspan x="18.43" y="0">Deep</tspan><tspan class="cls-18" x="46.87" y="0"> </tspan><tspan class="cls-20" x="50.44" y="0">R</tspan><tspan x="57.82" y="0">eadonly</tspan></text><g class="cls-21"><rect class="cls-22" x="376.8" y="221.55" width="93" height="20"/><rect class="cls-23" x="376.8" y="221.55" width="93" height="20"/></g><text class="cls-10" transform="translate(381.69 235.55)">17<tspan class="cls-24" x="13.99" y="0"> </tspan><tspan class="cls-12" x="14.67" y="0">・</tspan><tspan class="cls-25" x="22.92" y="0"> </tspan><tspan x="25.2" y="0">Currying</tspan><tspan class="cls-24" x="72.57" y="0"> </tspan><tspan x="76.01" y="0">1</tspan></text></svg>
|
||||
|
After Width: | Height: | Size: 4.5 KiB |
60
site/style.css
Normal file
60
site/style.css
Normal file
@ -0,0 +1,60 @@
|
||||
html,
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: #fff;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-family: 'Source Sans Pro', 'Helvetica Neue', Arial, sans-serif;
|
||||
font-size: 1rem;
|
||||
color: #304455;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
main {
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
margin-bottom: 5rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
div {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-weight: 400;
|
||||
margin: 0;
|
||||
font-size: 1.5em;
|
||||
color: #273849;
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
a.button {
|
||||
padding: 0.75em 2em;
|
||||
border-radius: 2em;
|
||||
display: inline-block;
|
||||
color: #fff;
|
||||
background-color: #304455;
|
||||
transition: all 0.15s ease;
|
||||
box-sizing: border-box;
|
||||
border: 1px solid #304455;
|
||||
text-decoration: none;
|
||||
|
||||
margin: 2em 0;
|
||||
font-size: 0.9em;
|
||||
font-weight: 600;
|
||||
letter-spacing: 0.1em;
|
||||
min-width: 8em;
|
||||
text-align: center;
|
||||
|
||||
text-transform: uppercase;
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user