DrMint dd3beff508
Added meilisearch (#89)
* Added search on most pages

* Changed material icons to symbols and added wikipage search

* Updated deps

* Changed color of the play button on previewcard overlay

* Updated search params

* Updated deps

* Audit fix

* Removed unused graphql files
2023-01-07 01:59:54 +01:00

941 lines
35 KiB
TypeScript

/* eslint-disable id-denylist */
import { GetStaticProps } from "next";
import { ReactNode, useState } from "react";
import Slider from "rc-slider";
import { AppLayout, AppLayoutRequired } from "components/AppLayout";
import { getLangui } from "graphql/fetchLocalData";
import { getOpenGraph } from "helpers/openGraph";
import { ContentPanel, ContentPanelWidthSizes } from "components/Containers/ContentPanel";
import { Button } from "components/Inputs/Button";
import { cJoin } from "helpers/className";
import { HorizontalLine } from "components/HorizontalLine";
import { Switch } from "components/Inputs/Switch";
import { TextInput } from "components/Inputs/TextInput";
import { Select } from "components/Inputs/Select";
import { WithLabel } from "components/Inputs/WithLabel";
import { NavOption } from "components/PanelComponents/NavOption";
import { ButtonGroup } from "components/Inputs/ButtonGroup";
import { PreviewCard } from "components/PreviewCard";
import { PreviewLine } from "components/PreviewLine";
import { ChroniclePreview } from "components/Chronicles/ChroniclePreview";
import { PreviewFolder } from "components/Contents/PreviewFolder";
/*
* ╭────────╮
* ──────────────────────────────────────────╯ PAGE ╰─────────────────────────────────────────────
*/
interface Props extends AppLayoutRequired {}
const DesignSystem = (props: Props): JSX.Element => {
const [switchState, setSwitchState] = useState(false);
const [selectState, setSelectState] = useState(0);
const [sliderState, setSliderState] = useState(5);
const [textInputState, setTextInputState] = useState("");
const [textAreaState, setTextAreaState] = useState("");
const [buttonGroupState, setButtonGroupState] = useState(0);
const contentPanel = (
<ContentPanel
className="grid place-items-center text-center"
width={ContentPanelWidthSizes.Full}>
<h1 className="mb-8 text-4xl">Design System</h1>
<h2 className="mb-4 text-3xl">Colors</h2>
<WhiteSection className="grid grid-cols-[repeat(7,auto)] place-items-center gap-4">
<p />
<p>Highlight</p>
<p>Light</p>
<p>Mid</p>
<p>Dark</p>
<p>Shade</p>
<p>Black</p>
<p>Light theme</p>
<ColorSquare className="bg-highlight" />
<ColorSquare className="bg-light" />
<ColorSquare className="bg-mid" />
<ColorSquare className="bg-dark" />
<ColorSquare className="bg-shade" />
<ColorSquare className="bg-black" />
<p>Dark theme</p>
<ColorSquare className="bg-highlight set-theme-dark" />
<ColorSquare className="bg-light set-theme-dark" />
<ColorSquare className="bg-mid set-theme-dark" />
<ColorSquare className="bg-dark set-theme-dark" />
<ColorSquare className="bg-shade set-theme-dark" />
<ColorSquare className="bg-black set-theme-dark" />
</WhiteSection>
<h2 className="mb-4 text-3xl">Fonts</h2>
<WhiteSection className="grid grid-cols-[repeat(5,auto)] place-items-start gap-y-2 gap-x-12">
<p />
<p className="font-headers text-xl text-black/50">Vollkorn</p>
<p className="font-body text-xl text-black/50">Zen Maru Gothic</p>
<p className="font-mono text-xl text-black/50">Share Tech Mono</p>
<p className="font-openDyslexic text-xl text-black/50">Open Dyslexic</p>
<p className="text-3xl text-black/30">3XL</p>
<p className="font-headers text-3xl">Header H3XL</p>
<p />
<p />
<p className="font-openDyslexic text-3xl">Dyslexia D3XL</p>
<p className="text-2xl text-black/30">2XL</p>
<p className="font-headers text-2xl">Header H2XL</p>
<p />
<p />
<p className="font-openDyslexic text-2xl">Dyslexia D2XL</p>
<p className="text-xl text-black/30">XL</p>
<p className="font-headers text-xl">Header HXL</p>
<p className="font-body text-xl">Body BXL</p>
<p className="font-mono text-xl">Mono MXL</p>
<p className="font-openDyslexic text-xl">Dyslexia DXL</p>
<p className="text-lg text-black/30">LG</p>
<p className="font-headers text-lg">Header HLG</p>
<p className="font-body text-lg">Body BLG</p>
<p className="font-mono text-lg">Mono MLG</p>
<p className="font-openDyslexic text-lg">Dyslexia DLG</p>
<p className="text-base text-black/30">B</p>
<p />
<p className="font-body text-base">Body BB</p>
<p className="font-mono text-base">Mono MB</p>
<p className="font-openDyslexic text-base">Dyslexia DB</p>
<p className="text-sm text-black/30">SM</p>
<p />
<p className="font-body text-sm">Body BSM</p>
<p />
<p className="font-openDyslexic text-sm">Dyslexia DSM</p>
<p className="text-xs text-black/30">XS</p>
<p />
<p />
<p />
<p className="font-openDyslexic text-xs">Dyslexia DXS</p>
</WhiteSection>
<h2 className="mb-4 text-3xl">Elevations</h2>
<TwoThemedSection
className="grid grid-cols-[repeat(7,auto)] place-content-center gap-4
text-left">
<ShadowSquare className="bg-light shadow-inner shadow-shade" text="IN" />
<ShadowSquare className="bg-light shadow-inner-sm shadow-shade" text="IN/SM" />
<ShadowSquare className="bg-light shadow-sm shadow-shade" text="SM" />
<ShadowSquare className="bg-light shadow-md shadow-shade" text="MD" />
<ShadowSquare className="bg-light shadow-lg shadow-shade" text="LG" />
<ShadowSquare className="bg-light shadow-xl shadow-shade" text="XL" />
<ShadowSquare className="bg-light shadow-2xl shadow-shade" text="2XL" />
<p className="mt-6">Drop shadow</p>
<p />
<ShadowSquare className="bg-light drop-shadow-sm shadow-shade" text="SM" />
<ShadowSquare className="bg-light drop-shadow-md shadow-shade" text="MD" />
<ShadowSquare className="bg-light drop-shadow-lg shadow-shade" text="LG" />
<ShadowSquare className="bg-light drop-shadow-xl shadow-shade" text="XL" />
<ShadowSquare className="bg-light drop-shadow-2xl shadow-shade" text="2XL" />
<p className="mt-6">Black</p>
<p />
<ShadowSquare className="bg-black text-light shadow-sm shadow-black" text="SM" />
<ShadowSquare className="bg-black text-light shadow-md shadow-black" text="MD" />
<ShadowSquare className="bg-black text-light shadow-lg shadow-black" text="LG" />
<ShadowSquare className="bg-black text-light shadow-xl shadow-black" text="XL" />
<ShadowSquare className="bg-black text-light shadow-2xl shadow-black" text="2XL" />
<p className="mt-6">
Drop shadow
<br />
black
</p>
<p />
<ShadowSquare className="bg-black text-light drop-shadow-sm shadow-black" text="SM" />
<ShadowSquare className="bg-black text-light drop-shadow-md shadow-black" text="MD" />
<ShadowSquare className="bg-black text-light drop-shadow-lg shadow-black" text="LG" />
<ShadowSquare className="bg-black text-light drop-shadow-xl shadow-black" text="XL" />
<ShadowSquare className="bg-black text-light drop-shadow-2xl shadow-black" text="2XL" />
</TwoThemedSection>
<h2 className="mb-4 text-3xl">Buttons</h2>
<TwoThemedSection className="grid gap-4">
<h3 className="text-xl">Normal sized</h3>
<div className="grid grid-cols-[repeat(4,auto)] place-content-center gap-4">
<p />
<p>Icon</p>
<p>Text</p>
<p>Icon + Text</p>
<p className="self-center justify-self-start">Normal</p>
<Button icon="check" />
<Button text="Label" />
<Button icon="navigate_before" text="Label" />
<p className="self-center justify-self-start">Active</p>
<Button icon="camera" active />
<Button text="Label" active />
<Button icon="navigate_before" text="Label" active />
<p className="self-center justify-self-start">Disabled</p>
<Button icon="air" disabled />
<Button text="Label" disabled />
<Button icon="navigate_before" text="Label" disabled />
<p className="self-center justify-self-start">Badge</p>
<Button icon="snooze" badgeNumber={5} />
<Button text="Label" badgeNumber={12} />
<Button icon="navigate_before" text="Label" badgeNumber={201} />
</div>
<HorizontalLine />
<h3 className="text-xl">Small sized</h3>
<div className="grid grid-cols-[repeat(4,auto)] place-content-center gap-4">
<p className="self-center justify-self-start">Normal</p>
<Button icon="check" size={"small"} />
<Button text="Label" size={"small"} />
<Button icon="navigate_before" text="Label" size={"small"} />
<p className="self-center justify-self-start">Active</p>
<Button icon="camera" active size={"small"} />
<Button text="Label" active size={"small"} />
<Button icon="navigate_before" text="Label" active size={"small"} />
<p className="self-center justify-self-start">Disabled</p>
<Button icon="air" disabled size={"small"} />
<Button text="Label" disabled size={"small"} />
<Button icon="navigate_before" text="Label" disabled size={"small"} />
<p className="self-center justify-self-start">Badge</p>
<Button icon="snooze" badgeNumber={5} size={"small"} />
<Button text="Label" badgeNumber={12} size={"small"} />
<Button icon="navigate_before" text="Label" badgeNumber={201} size={"small"} />
</div>
<HorizontalLine />
<h3 className="text-xl">Groups</h3>
<div className="grid place-items-center gap-4">
<ButtonGroup buttonsProps={[{ icon: "call_end" }, { icon: "zoom_in_map" }]} />
<ButtonGroup
buttonsProps={[{ icon: "car_crash" }, { icon: "timelapse" }, { icon: "leak_add" }]}
/>
<ButtonGroup
buttonsProps={[
{ icon: "car_crash" },
{ icon: "timelapse", text: "Label", active: true },
{ text: "Another Label" },
{ icon: "cable" },
]}
/>
<ButtonGroup
buttonsProps={[
{
text: "Try me!",
active: buttonGroupState === 0,
onClick: () => setButtonGroupState(0),
},
{
icon: "ad_units",
text: "Label",
active: buttonGroupState === 1,
onClick: () => setButtonGroupState(1),
},
{
text: "Yet another label",
active: buttonGroupState === 2,
onClick: () => setButtonGroupState(2),
},
{
icon: "security",
active: buttonGroupState === 3,
onClick: () => setButtonGroupState(3),
},
]}
/>
</div>
</TwoThemedSection>
<h2 className="mb-4 text-3xl">Inputs</h2>
<TwoThemedSection className="grid place-content-center gap-4">
<h3 className="text-xl">Switches</h3>
<WithLabel label="Off">
<Switch value={false} onClick={() => null} />
</WithLabel>
<WithLabel label="On">
<Switch value={true} onClick={() => null} />
</WithLabel>
<WithLabel label="Disabled (Off)">
<Switch value={false} onClick={() => null} disabled />
</WithLabel>
<WithLabel label="Disabled (On)">
<Switch value={true} onClick={() => null} disabled />
</WithLabel>
<WithLabel label={`Try me! (${switchState ? "On" : "Off"})`}>
<Switch value={switchState} onClick={() => setSwitchState((current) => !current)} />
</WithLabel>
<HorizontalLine />
<h3 className="-mt-6 mb-2 text-xl">Selects</h3>
<WithLabel label="Empty">
<Select
value={-1}
options={["Option 1", "Option 2", "Option 3", "Option 4"]}
onChange={() => null}
/>
</WithLabel>
<WithLabel label="Filled">
<Select
value={0}
options={["Option 1", "Option 2", "Option 3", "Option 4"]}
onChange={() => null}
/>
</WithLabel>
<WithLabel label="Filled + allow empty">
<Select
value={0}
options={["Option 1", "Option 2", "Option 3", "Option 4"]}
onChange={() => null}
allowEmpty
/>
</WithLabel>
<WithLabel label="Disabled">
<Select
value={0}
options={["Option 1", "Option 2", "Option 3", "Option 4"]}
onChange={() => null}
allowEmpty
disabled
/>
</WithLabel>
<WithLabel label="Try me!">
<Select
value={selectState}
options={["Option 1", "Option 2", "Option 3", "Option 4"]}
onChange={(index) => setSelectState(index)}
allowEmpty
/>
</WithLabel>
<HorizontalLine />
<h3 className="-mt-6 mb-2 text-xl">Text inputs</h3>
<WithLabel label="Empty">
<TextInput value="" onChange={() => null} />
</WithLabel>
<WithLabel label="Placeholder">
<TextInput value="" placeholder="Placeholder..." onChange={() => null} />
</WithLabel>
<WithLabel label="Filled">
<TextInput value="Value" onChange={() => null} />
</WithLabel>
<WithLabel label="Disabled">
<TextInput value="Value" onChange={() => null} disabled />
</WithLabel>
<WithLabel label="Try me!">
<TextInput
value={textInputState}
onChange={setTextInputState}
placeholder={"Placeholder..."}
/>
</WithLabel>
<HorizontalLine />
<h3 className="-mt-6 mb-2 text-xl">Text area</h3>
<WithLabel label="Empty">
<textarea value="" name="test" title="aria" />
</WithLabel>
<WithLabel label="Placeholder">
<textarea value="" placeholder="Placeholder..." />
</WithLabel>
<WithLabel label="Filled">
<textarea
value="Eveniet occaecati qui dicta explicabo dolor.
Ipsum quam dolorum dolores.
Neque dolor nihil neque tempora.
Mollitia voluptates iste qui et temporibus eum omnis.
Itaque atque architecto maiores qui et optio.
Et consequatur dolorem omnis cupiditate."
placeholder="Placeholder..."
/>
</WithLabel>
<WithLabel label="Not resizable">
<textarea
className="resize-none"
value="Eveniet occaecati qui dicta explicabo dolor.
Ipsum quam dolorum dolores.
Neque dolor nihil neque tempora.
Mollitia voluptates iste qui et temporibus eum omnis.
Itaque atque architecto maiores qui et optio.
Et consequatur dolorem omnis cupiditate."
placeholder="Placeholder..."
/>
</WithLabel>
<WithLabel label="Disabled">
<textarea
value="Eveniet occaecati qui dicta explicabo dolor.
Ipsum quam dolorum dolores.
Neque dolor nihil neque tempora.
Mollitia voluptates iste qui et temporibus eum omnis.
Itaque atque architecto maiores qui et optio.
Et consequatur dolorem omnis cupiditate."
placeholder="Placeholder..."
disabled
/>
</WithLabel>
<WithLabel label="Try me!">
<textarea
value={textAreaState}
onChange={(event) => setTextAreaState(event.target.value)}
placeholder="Placeholder..."
/>
</WithLabel>
<HorizontalLine />
<h3 className="-mt-6 mb-2 text-xl">Slider</h3>
<WithLabel label="Normal">
<Slider value={5} />
</WithLabel>
<WithLabel label="Disabled">
<Slider value={5} disabled />
</WithLabel>
<WithLabel label="Try me!">
<Slider
value={sliderState}
max={100}
onChange={(event) => {
const value = (Array.isArray(event) ? event[0] : event) ?? 0;
setSliderState(() => value);
}}
/>
</WithLabel>
</TwoThemedSection>
<h2 className="mb-4 text-3xl">Down-Pressables</h2>
<TwoThemedSection className="grid gap-4">
<h3 className="mb-2 text-xl">Navigation Options</h3>
<div className="grid grid-cols-[repeat(6,auto)] place-items-center gap-4">
<p />
<p>Title</p>
<p>
Title
<br />+ Icon
</p>
<p>
Title
<br />+ Subtitle
</p>
<p>
Title
<br />+ Subtitle
<br />+ Icon
</p>
<p>Reduced</p>
<p>Normal</p>
<NavOption title="Title" url="#" />
<NavOption icon="home" title="Title" url="#" />
<NavOption title="Title" subtitle="This is a subtitle" url="#" />
<NavOption title="Title" subtitle="This is a subtitle" url="#" icon="calendar_month" />
<NavOption
title="Title"
subtitle="This is a subtitle"
url="#"
icon="account_balance"
reduced
/>
<p>Border</p>
<NavOption title="Title" url="#" border />
<NavOption icon="travel_explore" title="Title" url="#" border />
<NavOption title="Title" subtitle="This is a subtitle" url="#" border />
<NavOption title="Title" subtitle="This is a subtitle" url="#" icon="help" border />
<NavOption
title="Title"
subtitle="This is a subtitle"
url="#"
icon="table_restaurant"
border
reduced
/>
<p>Active</p>
<NavOption title="Title" url="#" active />
<NavOption icon="hail" title="Title" url="#" active />
<NavOption title="Title" subtitle="This is a subtitle" url="#" active />
<NavOption title="Title" subtitle="This is a subtitle" url="#" icon="grading" active />
<NavOption
title="Title"
subtitle="This is a subtitle"
url="#"
icon="timer"
active
reduced
/>
<p>
Active
<br />+ Border
</p>
<NavOption title="Title" url="#" active />
<NavOption icon="upcoming" title="Title" url="#" active border />
<NavOption title="Title" subtitle="This is a subtitle" url="#" active border />
<NavOption
title="Title"
subtitle="This is a subtitle"
url="#"
icon="gamepad"
active
border
/>
<NavOption
title="Title"
subtitle="This is a subtitle"
url="#"
icon="scale"
active
border
reduced
/>
<p>Disabled</p>
<NavOption title="Title" url="#" disabled />
<NavOption icon="lan" title="Title" url="#" disabled />
<NavOption title="Title" subtitle="This is a subtitle" url="#" disabled />
<NavOption
title="Title"
subtitle="This is a subtitle"
url="#"
icon="align_horizontal_right"
disabled
/>
<NavOption
title="Title"
subtitle="This is a subtitle"
url="#"
icon="youtube_searched_for"
reduced
disabled
/>
<p>
Disabled
<br />+ Border
</p>
<NavOption title="Title" url="#" border disabled />
<NavOption icon="sanitizer" title="Title" url="#" border disabled />
<NavOption title="Title" subtitle="This is a subtitle" url="#" border disabled />
<NavOption
title="Title"
subtitle="This is a subtitle"
url="#"
icon="pages"
border
disabled
/>
<NavOption
title="Title"
subtitle="This is a subtitle"
url="#"
icon="synagogue"
border
reduced
disabled
/>
<p>
Disabled
<br />+ Active
</p>
<NavOption title="Title" url="#" active disabled />
<NavOption icon="stairs" title="Title" url="#" active disabled />
<NavOption title="Title" subtitle="This is a subtitle" url="#" active disabled />
<NavOption
title="Title"
subtitle="This is a subtitle"
url="#"
icon="park"
active
disabled
/>
<NavOption
title="Title"
subtitle="This is a subtitle"
url="#"
icon="password"
active
reduced
disabled
/>
</div>
<HorizontalLine />
<h3 className="-mt-6 mb-2 text-xl">Chronology Previews</h3>
<div className="grid grid-cols-[repeat(5,auto)] place-items-center gap-4">
<p />
<p>Title</p>
<p>Year</p>
<p>
Year
<br />+ Month
</p>
<p>
Year
<br />+ Month
<br />+ Day
</p>
<p>Normal</p>
<ChroniclePreview date={{}} title="Title" url="#" />
<ChroniclePreview date={{ year: 1970 }} title="Title" url="#" />
<ChroniclePreview date={{ year: 1970, month: 1 }} title="Title" url="#" />
<ChroniclePreview date={{ year: 1970, month: 1, day: 1 }} title="Title" url="#" />
<p>Active</p>
<ChroniclePreview date={{}} title="Title" url="#" active />
<ChroniclePreview date={{ year: 1970 }} title="Title" url="#" active />
<ChroniclePreview date={{ year: 1970, month: 1 }} title="Title" url="#" active />
<ChroniclePreview date={{ year: 1970, month: 1, day: 1 }} title="Title" url="#" active />
<p>Disabled</p>
<ChroniclePreview date={{}} title="Title" url="#" disabled />
<ChroniclePreview date={{ year: 1970 }} title="Title" url="#" disabled />
<ChroniclePreview date={{ year: 1970, month: 1 }} title="Title" url="#" disabled />
<ChroniclePreview
date={{ year: 1970, month: 1, day: 1 }}
title="Title"
url="#"
disabled
/>
<p>
Disabled
<br />
Active
</p>
<ChroniclePreview date={{}} title="Title" url="#" active disabled />
<ChroniclePreview date={{ year: 1970 }} title="Title" url="#" active disabled />
<ChroniclePreview date={{ year: 1970, month: 1 }} title="Title" url="#" active disabled />
<ChroniclePreview
date={{ year: 1970, month: 1, day: 1 }}
title="Title"
url="#"
active
disabled
/>
</div>
</TwoThemedSection>
<h2 className="mb-4 text-3xl">Up-Pressables</h2>
<TwoThemedSection className="grid gap-4">
<h3 className="-mt-6 mb-2 text-xl">Preview Cards</h3>
<div className="grid grid-cols-[repeat(2,auto)] place-items-center gap-4">
<PreviewCard
title="This one only has a title"
subtitle="And a subtitle"
href="#"
keepInfoVisible
/>
<PreviewCard
title="This one only has a title/subtitle"
subtitle="And a long description"
description="Eveniet occaecati qui dicta explicabo dolor.
Ipsum quam dolorum dolores.
Neque dolor nihil neque tempora.
Mollitia voluptates iste qui et temporibus eum omnis.
Itaque atque architecto maiores qui et optio."
href="#"
thumbnail={"/default_og.jpg"}
keepInfoVisible
/>
<PreviewCard
pre_title="Breaking News"
title="This one only displays info"
subtitle="When it's hovered"
href="#"
thumbnail={"/default_og.jpg"}
/>
<PreviewCard
title="This one also has metadata at the top"
subtitle="And a subtitle"
description="Eveniet occaecati qui dicta explicabo dolor.
Ipsum quam dolorum dolores.
Neque dolor nihil neque tempora.
Mollitia voluptates iste qui et temporibus eum omnis.
Itaque atque architecto maiores qui et optio."
href="#"
thumbnail={"/default_og.jpg"}
metadata={{
price: {
amount: 5.23,
currency: { data: { attributes: { code: "USD", rate_to_usd: 1, symbol: "$" } } },
},
releaseDate: { year: 1970, month: 1, day: 1 },
views: 550669,
position: "Top",
}}
/>
<PreviewCard
title="This one also has metadata at the bottom"
subtitle="And the thumbnail aspect ratio is forced to be 4:3"
href="#"
thumbnail={"/default_og.jpg"}
keepInfoVisible
thumbnailAspectRatio="4/3"
thumbnailForceAspectRatio
metadata={{
price: {
amount: 5.23,
currency: { data: { attributes: { code: "USD", rate_to_usd: 1, symbol: "$" } } },
},
releaseDate: { year: 1970, month: 1, day: 1 },
views: 550669,
position: "Bottom",
}}
/>
<PreviewCard
pre_title="Wow, that's a lot"
title="This one pretty much has everything"
subtitle="No joke, this is a lot of stuff"
href="#"
thumbnail={"/default_og.jpg"}
keepInfoVisible
infoAppend={<Button text="Another custom component" />}
bottomChips={["Bottom chip 1", "Chip 2", "Chip 3", "Chip 4"]}
description="Eveniet occaecati qui dicta explicabo dolor.
Ipsum quam dolorum dolores.
Neque dolor nihil neque tempora.
Mollitia voluptates iste qui et temporibus eum omnis.
Itaque atque architecto maiores qui et optio."
hoverlay={{ __typename: "Video", duration: 465 }}
topChips={[
"Top chip 1",
"Chip 2",
"Chip 3",
"Chip 4",
"When there are too many, it overflow",
]}
metadata={{
price: {
amount: 5.23,
currency: { data: { attributes: { code: "USD", rate_to_usd: 1, symbol: "$" } } },
},
releaseDate: { year: 1970, month: 1, day: 1 },
views: 550669,
position: "Bottom",
}}
/>
<PreviewCard
title="This one is disabled"
subtitle="And a subtitle"
href="#"
thumbnail={"/default_og.jpg"}
keepInfoVisible
metadata={{
price: {
amount: 5.23,
currency: { data: { attributes: { code: "USD", rate_to_usd: 1, symbol: "$" } } },
},
releaseDate: { year: 1970, month: 1, day: 1 },
views: 550669,
position: "Bottom",
}}
disabled
/>
<PreviewCard
pre_title="Wow, that's a lot"
title="This one pretty much has everything"
subtitle="And it's disabled"
href="#"
thumbnail={"/default_og.jpg"}
keepInfoVisible
infoAppend={<Button text="Another custom component" />}
bottomChips={["Bottom chip 1", "Chip 2", "Chip 3", "Chip 4"]}
description="Eveniet occaecati qui dicta explicabo dolor.
Ipsum quam dolorum dolores.
Neque dolor nihil neque tempora.
Mollitia voluptates iste qui et temporibus eum omnis.
Itaque atque architecto maiores qui et optio."
hoverlay={{ __typename: "Video", duration: 465 }}
topChips={[
"Top chip 1",
"Chip 2",
"Chip 3",
"Chip 4",
"When there are too many, it overflow",
]}
metadata={{
price: {
amount: 5.23,
currency: { data: { attributes: { code: "USD", rate_to_usd: 1, symbol: "$" } } },
},
releaseDate: { year: 1970, month: 1, day: 1 },
views: 550669,
position: "Bottom",
}}
disabled
/>
</div>
<HorizontalLine />
<h3 className="-mt-6 mb-2 text-xl">Preview Line</h3>
<div className="grid grid-cols-[repeat(2,auto)] place-items-center gap-4">
<PreviewLine
href="#"
pre_title="Breaking News"
title="Accord's Library is live"
subtitle="I know, big deal, this is subtitle"
/>
<PreviewLine
href="#"
pre_title="Breaking News"
title="Accord's Library is live"
subtitle="I know, big deal, this is subtitle"
thumbnail={"/default_og.jpg"}
/>
<PreviewLine
href="#"
pre_title="Breaking News"
title="Accord's Library is live"
subtitle="I know, big deal, this is subtitle"
thumbnail={"/default_og.jpg"}
topChips={["Top chip 1", "Chip 2", "Chip 3", "Chip 4"]}
/>
<PreviewLine
href="#"
pre_title="Breaking News"
title="This one has everything"
subtitle="I know, big deal, this is subtitle"
thumbnail={"/default_og.jpg"}
topChips={["Top chip 1", "Chip 2", "Chip 3", "Chip 4"]}
bottomChips={["Bottom chip 1", "Chip 2", "Chip 3", "Chip 4"]}
/>
<PreviewLine
href="#"
title="Just a title"
thumbnail={"/default_og.jpg"}
topChips={["Top chip 1", "Chip 2", "Chip 3", "Chip 4"]}
bottomChips={["Bottom chip 1", "Chip 2", "Chip 3", "Chip 4"]}
/>
<PreviewLine
href="#"
title="Disabled"
thumbnail={"/default_og.jpg"}
topChips={["Top chip 1", "Chip 2", "Chip 3", "Chip 4"]}
bottomChips={["Bottom chip 1", "Chip 2", "Chip 3", "Chip 4"]}
disabled
/>
</div>
<HorizontalLine />
<h3 className="-mt-6 mb-2 text-xl">Folder Card</h3>
<div className="grid grid-cols-[repeat(2,auto)] place-items-center gap-4">
<PreviewFolder href="#" title="Title" />
<PreviewFolder href="#" title="A longer title, I guess" />
<PreviewFolder href="#" title="Disabled" disabled />
<PreviewFolder href="#" title="Disabled, with a longer title" disabled />
</div>
</TwoThemedSection>
</ContentPanel>
);
return <AppLayout {...props} contentPanel={contentPanel} />;
};
export default DesignSystem;
/*
* ╭──────────────────────╮
* ───────────────────────────────────╯ NEXT DATA FETCHING ╰──────────────────────────────────────
*/
export const getStaticProps: GetStaticProps = (context) => {
const langui = getLangui(context.locale);
const props: Props = {
openGraph: getOpenGraph(langui, "Design System"),
};
return {
props: props,
};
};
/*
* ╭──────────────────────╮
* ───────────────────────────────────╯ PRIVATE COMPONENTS ╰──────────────────────────────────────
*/
interface ThemedSectionProps {
className?: string;
children?: ReactNode;
}
const TwoThemedSection = ({ children, className }: ThemedSectionProps) => (
<div className="mb-12 grid grid-flow-col drop-shadow-lg shadow-shade">
<LightThemeSection className={cJoin("rounded-l-xl text-black", className)}>
{children}
</LightThemeSection>
<DarkThemeSection className={cJoin("rounded-r-xl text-black", className)}>
{children}
</DarkThemeSection>
</div>
);
const DarkThemeSection = ({ className, children }: ThemedSectionProps) => (
<div className={cJoin("bg-light py-10 px-14 set-theme-dark", className)}>{children}</div>
);
const LightThemeSection = ({ className, children }: ThemedSectionProps) => (
<div className={cJoin("bg-light py-10 px-14 set-theme-light", className)}>{children}</div>
);
const WhiteSection = ({ className, children }: ThemedSectionProps) => (
<div className="mb-12 rounded-xl bg-[white] py-10 px-14 drop-shadow-lg shadow-shade">
<div className={cJoin("text-black set-theme-light", className)}>{children}</div>
</div>
);
interface ColorSquareProps {
className?: string;
}
const ColorSquare = ({ className }: ColorSquareProps) => (
<div className={cJoin("h-24 w-24 rounded-lg shadow-inner-sm shadow-shade", className)} />
);
interface ShadowSquareProps {
className?: string;
text: string;
}
const ShadowSquare = ({ className, text }: ShadowSquareProps) => (
<div className={cJoin("mb-12 grid h-20 w-20 place-content-center rounded-lg", className)}>
{text}
</div>
);