aboutsummaryrefslogtreecommitdiff
path: root/src/components
diff options
context:
space:
mode:
authorNick Tchayka <nick@booster.cloud>2023-09-05 13:20:16 +0100
committerNick Tchayka <nick@booster.cloud>2023-09-05 13:20:16 +0100
commitfb6896019a999e939dd7f12196722e55bf852e1b (patch)
tree7aa05fecdd42fc35648ab8121c1c6267086dab6b /src/components
parent9223e88e748c8155a2313d545b07938c4787b229 (diff)
downloadneohaskell.github.io-fb6896019a999e939dd7f12196722e55bf852e1b.tar.gz
neohaskell.github.io-fb6896019a999e939dd7f12196722e55bf852e1b.tar.bz2
neohaskell.github.io-fb6896019a999e939dd7f12196722e55bf852e1b.zip
Add features
Diffstat (limited to 'src/components')
-rw-r--r--src/components/CodeFrame.tsx15
-rw-r--r--src/components/HomepageFeatures/index.tsx89
-rw-r--r--src/components/HomepageFeatures/styles.module.css11
3 files changed, 69 insertions, 46 deletions
diff --git a/src/components/CodeFrame.tsx b/src/components/CodeFrame.tsx
index 957eb5b..22cff25 100644
--- a/src/components/CodeFrame.tsx
+++ b/src/components/CodeFrame.tsx
@@ -19,18 +19,11 @@ const widthClasses = {
"1/3": "w-1/3",
};
-const dimensionClasses = ["border-4"];
+const dimensionClasses = ["border-4", "flex", "flex-row", "items-center"];
-const lightModeClasses = ["bg-white", "text-black", "border-black"];
+const lightModeClasses = ["bg-codeBg", "text-black", "border-black"];
-const darkModeClasses = [
- "bg-slate-950",
- "text-white",
- "border-white",
- "shadow-neowhite",
-].map((className) => `dark:${className}`);
-
-const classes = [...dimensionClasses, ...lightModeClasses, ...darkModeClasses];
+const classes = [...dimensionClasses, ...lightModeClasses];
const Frame = ({
rainbow,
@@ -47,7 +40,7 @@ const Frame = ({
return (
<div className={cls}>
<CodeBlock
- className="!rounded-none h-full"
+ className="!rounded-none !mb-0 px-4 py-2"
language={language}
title={title}
>
diff --git a/src/components/HomepageFeatures/index.tsx b/src/components/HomepageFeatures/index.tsx
index 91ef460..2191ea1 100644
--- a/src/components/HomepageFeatures/index.tsx
+++ b/src/components/HomepageFeatures/index.tsx
@@ -1,53 +1,94 @@
-import React from 'react';
-import clsx from 'clsx';
-import styles from './styles.module.css';
+import React from "react";
+import clsx from "clsx";
+import styles from "./styles.module.css";
+import CodeFrame from "../CodeFrame";
+
+type ShowCase =
+ | { code: string; language: string }
+ | { img: React.ComponentType<React.ComponentProps<"img">> };
type FeatureItem = {
title: string;
- Svg: React.ComponentType<React.ComponentProps<'svg'>>;
description: JSX.Element;
+ showcase: ShowCase;
};
const FeatureList: FeatureItem[] = [
{
- title: 'Easy to Use',
- Svg: require('@site/static/img/undraw_docusaurus_mountain.svg').default,
+ title: "Beautiful, Ready-to-Use Tools",
+ description: (
+ <>
+ NeoHaskell offers a clean and intuitive language design, complemented by
+ a core library that provides all the tools you need to start creating
+ amazing software right away.
+ <br />
+ START CODING
+ </>
+ ),
+ showcase: {
+ language: "haskell",
+ code: `processLogs rawLogs =
+ rawLogs
+ |> map parseLogs
+ |> collect
+ |> andThen (filter isImportant)
+ |> andThen (map toStructuredLog)`,
+ },
+ },
+ {
+ title: "Hassle-Free Development Environment",
description: (
<>
- Docusaurus was designed from the ground up to be easily installed and
- used to get your website up and running quickly.
+ NeoHaskell's CLI tool installs all required utilities and makes
+ multi-platform support a breeze. Whether you're compiling to native code
+ or generating WebAssembly for browser compatibility, you'll enjoy error
+ messages that guide, not hinder.
+ <br />
+ EMPOWER YOUR DEVELOPMENT
</>
),
+ showcase: { code: "", language: "" },
},
{
- title: 'Focus on What Matters',
- Svg: require('@site/static/img/undraw_docusaurus_tree.svg').default,
+ title: "Focus-Driven, Event-Driven",
description: (
<>
- Docusaurus lets you focus on your docs, and we&apos;ll do the chores. Go
- ahead and move your docs into the <code>docs</code> directory.
+ In NeoHaskell, you work directly events and functions that react to
+ them. Say goodbye to the cognitive overhead of managing state or
+ wrestling with dependency injection. Your focus stays where it belongs:
+ on solving problems and crafting solutions.
+ <br />
+ BEGIN YOUR JOURNEY
</>
),
+ showcase: { code: "", language: "" },
},
{
- title: 'Powered by React',
- Svg: require('@site/static/img/undraw_docusaurus_react.svg').default,
+ title: "Naturally Full-Stack",
description: (
<>
- Extend or customize your website layout by reusing React. Docusaurus can
- be extended while reusing the same header and footer.
+ Relish the ease of crafting full-stack applications in a unified
+ language environment. NeoHaskell takes care of frontend-backend
+ communication, allowing you to focus solely on your application's logic.
+ <br />
+ EXPERIENCE NATURAL FULL-STACK DEVELOPMENT
</>
),
+ showcase: { code: "", language: "" },
},
];
-function Feature({title, Svg, description}: FeatureItem) {
+function Feature({ title, showcase, description }: FeatureItem) {
+ const showcaseComponent =
+ "code" in showcase ? (
+ <CodeFrame language={showcase.language}>{showcase.code}</CodeFrame>
+ ) : (
+ <showcase.img />
+ );
return (
- <div className={clsx('col col--4')}>
- <div className="text--center">
- <Svg className={styles.featureSvg} role="img" />
- </div>
- <div className="text--center padding-horiz--md">
+ <div className="flex p-4">
+ {showcaseComponent}
+ <div className="p-7">
<h3>{title}</h3>
<p>{description}</p>
</div>
@@ -57,9 +98,9 @@ function Feature({title, Svg, description}: FeatureItem) {
export default function HomepageFeatures(): JSX.Element {
return (
- <section className={styles.features}>
+ <section>
<div className="container">
- <div className="row">
+ <div className="col">
{FeatureList.map((props, idx) => (
<Feature key={idx} {...props} />
))}
diff --git a/src/components/HomepageFeatures/styles.module.css b/src/components/HomepageFeatures/styles.module.css
index b248eb2..e69de29 100644
--- a/src/components/HomepageFeatures/styles.module.css
+++ b/src/components/HomepageFeatures/styles.module.css
@@ -1,11 +0,0 @@
-.features {
- display: flex;
- align-items: center;
- padding: 2rem 0;
- width: 100%;
-}
-
-.featureSvg {
- height: 200px;
- width: 200px;
-}