Files
blitzkit/packages/website/src/components/HomeHero.astro
T

153 lines
3.9 KiB
Plaintext
Raw Normal View History

2024-09-14 18:32:36 -05:00
---
2025-10-02 10:15:38 -05:00
import { Code, Flex, Heading, Text } from "@radix-ui/themes";
import { resolveBranchName } from "../core/blitzkit/branches";
import { getStrings } from "../core/i18n/getStrings";
import { literals } from "@blitzkit/i18n/src/literals";
2024-09-14 18:32:36 -05:00
2025-10-22 17:52:01 -05:00
const { locale } = Astro.props;
2025-01-06 20:09:11 -06:00
const branchName = resolveBranchName(locale);
2024-10-12 21:38:48 -05:00
const isBranchNamed = branchName !== undefined;
2025-01-06 20:09:11 -06:00
const strings = getStrings(locale);
2024-09-14 18:32:36 -05:00
---
<style>
2024-10-20 01:01:54 -05:00
#home-hero {
--p-1: 0%;
--p-2: 0%;
--p-3: 0%;
2024-10-21 10:34:37 -05:00
--p-4: 0%;
2025-05-07 19:43:40 -05:00
--p-7: 0%;
2024-10-20 01:01:54 -05:00
2024-10-21 10:34:37 -05:00
--g-1-dark: var(--blue-3);
2025-05-07 19:43:40 -05:00
--g-1-light: var(--blue-7);
2024-10-21 10:34:37 -05:00
--g-2-dark: var(--violet-3);
2025-05-07 19:43:40 -05:00
--g-2-light: var(--violet-7);
2024-10-21 10:34:37 -05:00
--g-3-dark: var(--purple-3);
2025-05-07 19:43:40 -05:00
--g-3-light: var(--purple-7);
2024-10-21 10:34:37 -05:00
--g-4-dark: var(--crimson-3);
2025-05-07 19:43:40 -05:00
--g-4-light: var(--crimson-7);
--g-7-dark: var(--tomato-3);
--g-7-light: var(--tomato-7);
2024-10-21 10:34:37 -05:00
--g-1: color-mix(in srgb, var(--g-1-dark), var(--g-1-light) var(--p-1));
--g-2: color-mix(in srgb, var(--g-2-dark), var(--g-2-light) var(--p-2));
--g-3: color-mix(in srgb, var(--g-3-dark), var(--g-3-light) var(--p-3));
--g-4: color-mix(in srgb, var(--g-4-dark), var(--g-4-light) var(--p-4));
2025-05-07 19:43:40 -05:00
--g-7: color-mix(in srgb, var(--g-7-dark), var(--g-7-light) var(--p-7));
2024-10-20 01:01:54 -05:00
background: linear-gradient(
45deg,
2024-10-21 10:34:37 -05:00
var(--g-1),
var(--g-2),
var(--g-3),
var(--g-4),
2025-05-07 19:43:40 -05:00
var(--g-7)
2024-10-20 01:01:54 -05:00
);
2024-09-14 18:32:36 -05:00
}
2024-10-21 10:34:37 -05:00
2025-10-02 10:15:38 -05:00
#home-hero[data-variant="pride"] {
2024-10-21 10:34:37 -05:00
--g-1-dark: var(--crimson-3);
2025-05-07 19:43:40 -05:00
--g-1-light: var(--crimson-7);
2024-10-21 10:34:37 -05:00
--g-2-dark: var(--orange-3);
2025-05-07 19:43:40 -05:00
--g-2-light: var(--orange-7);
2024-10-21 10:34:37 -05:00
--g-3-dark: var(--yellow-3);
2025-05-07 19:43:40 -05:00
--g-3-light: var(--yellow-7);
2024-10-21 10:34:37 -05:00
--g-4-dark: var(--blue-3);
2025-05-07 19:43:40 -05:00
--g-4-light: var(--blue-7);
--g-7-dark: var(--purple-3);
--g-7-light: var(--purple-7);
2024-10-21 10:34:37 -05:00
}
2024-11-02 18:33:19 -05:00
2025-10-02 10:15:38 -05:00
#home-hero[data-variant="spooky"] {
2024-11-02 18:33:19 -05:00
--g-1-dark: var(--orange-3);
2025-05-07 19:43:40 -05:00
--g-1-light: var(--orange-7);
2024-11-02 18:33:19 -05:00
--g-2-dark: var(--tomato-3);
2025-05-07 19:43:40 -05:00
--g-2-light: var(--tomato-7);
2024-11-02 18:33:19 -05:00
--g-3-dark: var(--orange-3);
2025-05-07 19:43:40 -05:00
--g-3-light: var(--orange-7);
2024-11-02 18:33:19 -05:00
--g-4-dark: var(--tomato-3);
2025-05-07 19:43:40 -05:00
--g-4-light: var(--tomato-7);
--g-7-dark: var(--orange-3);
--g-7-light: var(--orange-7);
2024-11-02 18:33:19 -05:00
}
2024-09-14 18:32:36 -05:00
</style>
2024-10-20 01:01:54 -05:00
<script>
2025-10-02 10:15:38 -05:00
import { clamp, times } from "lodash-es";
2024-10-20 01:01:54 -05:00
2024-10-21 10:34:37 -05:00
const n = 5;
2025-10-02 10:15:38 -05:00
const homeHero = document.getElementById("home-hero");
2024-10-20 01:01:54 -05:00
if (homeHero) {
2024-11-02 18:33:19 -05:00
switch (new Date().getMonth()) {
case 5:
2025-10-02 10:15:38 -05:00
homeHero.dataset.variant = "pride";
2024-11-02 18:33:19 -05:00
break;
case 9:
2025-10-02 10:15:38 -05:00
homeHero.dataset.variant = "spooky";
2024-11-02 18:33:19 -05:00
break;
2024-10-21 10:34:37 -05:00
}
2024-10-20 01:01:54 -05:00
2025-10-02 10:15:38 -05:00
window.addEventListener("pointermove", (event) => {
2024-10-21 10:34:37 -05:00
const x = event.clientX / window.innerWidth;
const c = clamp(
(1 -
(event.clientY + homeHero.getBoundingClientRect().top) /
window.innerHeight) **
2,
0,
2026-03-31 22:18:03 -05:00
1,
2024-10-21 10:34:37 -05:00
);
// https://www.desmos.com/calculator/ndz2poxk32
times(n, (i) => {
const p = c * clamp(-n * Math.abs(x - i / (n - 1)) + 1, 0, 3);
homeHero.style.setProperty(`--p-${i + 1}`, `${p * 100}%`);
});
2024-10-20 01:01:54 -05:00
});
}
</script>
2024-09-14 18:32:36 -05:00
<Flex
2024-10-20 01:01:54 -05:00
mb="3"
id="home-hero"
2024-09-14 18:32:36 -05:00
align="center"
justify="center"
position="relative"
px="4"
py="9"
2024-10-20 01:01:54 -05:00
overflow="hidden"
2024-09-14 18:32:36 -05:00
>
<Flex
direction="column"
gap="6"
align="center"
justify="center"
position="relative"
width="100%"
>
2024-11-24 20:34:28 -06:00
<Flex direction="column" align="center" gap="1">
2025-10-02 10:15:38 -05:00
<Heading size={{ initial: "8", xs: "9" }} weight="bold" align="center">
<Flex align="center" gap={{ initial: "2", xs: "4" }}>
2026-04-01 21:17:46 -05:00
BlitzKit
2024-09-14 18:32:36 -05:00
{
isBranchNamed && (
2024-11-24 20:34:28 -06:00
<Code
2025-10-02 10:15:38 -05:00
size={{ initial: "7", xs: "8" }}
2024-11-24 20:34:28 -06:00
color="gray"
variant="outline"
>
2024-10-12 21:38:48 -05:00
{branchName}
2024-09-14 18:32:36 -05:00
</Code>
)
}
</Flex>
</Heading>
2026-03-31 22:19:18 -05:00
<Text color="gray" align="center" size="4">
2026-04-01 21:17:46 -05:00
{literals(strings.website.home.hero.credit, { name: "TrèsAbhi" })}
2026-03-31 22:19:18 -05:00
</Text>
2024-09-14 18:32:36 -05:00
</Flex>
</Flex>
</Flex>