Added testimonials, tweets, tools, and a table to the landing page. (#256)

* Added testimonials, tweets, tools, and a table to the landing page.

* Delete package-lock.json

deleting since this file is automatically generated.

* Delete yarn.lock

* Update Features.js

getting rid of an unnecessary import statement

* Update Footer.js

getting rid of an unnecessary import statement

* Update Footer.js

* Update Header.js

getting rid of an unnecessary import statement

* Update SideBySide.js

getting rid of an unnecessary import statement

* Update Table.js

getting rid of an unnecessary import statement

* Update Testimonials.js

getting rid of an unnecessary import statement

* Update Tools.js

getting rid of an unnecessary import statement

* Update Tweet.js

getting rid of an unnecessary import statement

* Update TwoColumns.js

getting rid of an unnecessary import statement

* Update TwoColumns.js

* Delete package-lock.json

* Update package.json

* style, custom CSS color, restructuring data

* new data structure for table, writing a unit test

* getting rid of yarn.lock file

* changing the script for running docs-beta

* adding yarn.lock file back

* tests doesn't pass, but it runs!

* moving to ts

* deleting unnecessary dependencies

* deleting unnecessary dependencies within docs

* yarn file matches original docs

Co-authored-by: Bilge Kocak <t-bilgekocak@microsoft.com>
Co-authored-by: Ken Chau <kchau@microsoft.com>
This commit is contained in:
Bilge Deniz Koçak 2022-06-06 11:00:44 -07:00 коммит произвёл GitHub
Родитель c7f46ed381
Коммит 1a109e6ba8
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
32 изменённых файлов: 2617 добавлений и 348 удалений

Просмотреть файл

@ -1,87 +1,73 @@
// @ts-check
// Note: type annotations allow type checking and IDEs autocompletion
const lightCodeTheme = require('prism-react-renderer/themes/github');
const darkCodeTheme = require('prism-react-renderer/themes/dracula');
/** @type {import('@docusaurus/types').Config} */
const config = {
title: 'Lage',
tagline: 'A Beautiful JS Monorepo Task Runner',
url: 'https://microsoft.github.io',
baseUrl: '/lage/',
onBrokenLinks: 'throw',
onBrokenMarkdownLinks: 'warn',
favicon: 'img/lage-logo.svg',
organizationName: 'microsoft', // Usually your GitHub org/user name.
projectName: 'lage', // Usually your repo name.
customFields:{
image: 'img/lage-logo.svg'
},
presets: [
[
'classic',
/** @type {import('@docusaurus/preset-classic').Options} */
({
docs: {
sidebarPath: require.resolve('./sidebars.js'),
// Please change this to your repo.
editUrl: 'https://github.com/microsoft/lage/',
},
theme: {
customCss: require.resolve('./src/css/custom.css'),
},
}),
],
],
themeConfig:
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
({
navbar: {
title: 'Lage',
logo: {
alt: 'Lage Logo',
src: 'img/lage-logo.svg',
},
items: [
{
type: 'doc',
docId: 'Introducing Lage/Overview',
position: 'left',
label: 'Guide',
},
{
href: 'https://github.com/microsoft/lage',
label: 'GitHub',
position: 'right',
},
],
},
footer: {
style: 'dark',
links: [
{
title: 'Contributing',
items: [
{
label: 'Contributing to Lage',
to: '/docs/Contributing/contribution-guide',
},
],
}
]
},
prism: {
theme: lightCodeTheme,
darkTheme: darkCodeTheme,
},
colorMode : {
defaultMode: 'dark',
disableSwitch: true
},
}),
};
module.exports = config;
// @ts-check
// Note: type annotations allow type checking and IDEs autocompletion
const lightCodeTheme = require('prism-react-renderer/themes/github');
const darkCodeTheme = require('prism-react-renderer/themes/dracula');
/** @type {import('@docusaurus/types').Config} */
const config = {
title: 'Lage',
tagline: 'A Beautiful JS Monorepo Task Runner',
url: 'https://microsoft.github.io',
baseUrl: '/lage/',
onBrokenLinks: 'throw',
onBrokenMarkdownLinks: 'warn',
favicon: 'img/lage-logo.svg',
organizationName: 'microsoft', // Usually your GitHub org/user name.
projectName: 'lage', // Usually your repo name.
customFields:{
image: 'img/lage-logo.svg'
},
presets: [
[
'classic',
/** @type {import('@docusaurus/preset-classic').Options} */
({
docs: {
sidebarPath: require.resolve('./sidebars.js'),
// Please change this to your repo.
editUrl: 'https://github.com/microsoft/lage/',
},
theme: {
customCss: require.resolve('./src/css/custom.css'),
},
}),
],
],
themeConfig:
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
({
navbar: {
title: 'Lage',
logo: {
alt: 'Lage Logo',
src: 'img/lage-logo.svg',
},
items: [
{
type: 'doc',
docId: 'Introducing Lage/Overview',
position: 'left',
label: 'Guide',
},
{
href: 'https://github.com/microsoft/lage',
label: 'GitHub',
position: 'right',
},
],
},
prism: {
theme: lightCodeTheme,
darkTheme: darkCodeTheme,
},
colorMode : {
defaultMode: 'dark',
disableSwitch: true
},
}),
};
module.exports = config;

31
docs-beta/jest.config.ts Normal file
Просмотреть файл

@ -0,0 +1,31 @@
/*
* For a detailed explanation regarding each configuration property, visit:
* https://jestjs.io/docs/configuration
*/
const { defaults } = require("jest-config");
module.exports = {
clearMocks: true,
collectCoverage: false,
collectCoverageFrom: ["src/**/*.ts", "!src/types/*.ts", "!**/node_modules/**"],
coverageDirectory: "coverage",
coverageProvider: "v8",
globals: {
"ts-jest": {
isolatedModules: true,
},
},
moduleNameMapper: {
"^.+\\.(css|jpe?g|png|svg|webp)$": "identity-obj-proxy",
"@generated/.*": "identity-obj-proxy",
"@docusaurus/(BrowserOnly|ComponentCreator|constants|ExecutionEnvironment|Head|Interpolate|isInternalUrl|Link|Noop|renderRoutes|router|Translate|use.*)":
"@docusaurus/core/lib/client/exports/$1",
},
preset: "ts-jest/presets/js-with-ts",
testMatch: ["**/?(*.)+(spec|test).[tj]s?(x)"],
testPathIgnorePatterns: ["/node_modules/"],
transformIgnorePatterns: ["/node_modules/(?!(@docusaurus)/)", "\\.pnp\\.[^\\/]+$"],
watchPathIgnorePatterns: ["/node_modules/"],
testEnvironment: "jest-environment-jsdom",
};

Просмотреть файл

@ -1,38 +1,55 @@
{
"name": "@lage/docs-beta",
"version": "0.0.0",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
"start": "docusaurus start",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy",
"clear": "docusaurus clear",
"serve": "docusaurus serve",
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids"
},
"dependencies": {
"@docusaurus/core": "2.0.0-beta.14",
"@docusaurus/preset-classic": "2.0.0-beta.14",
"@mdx-js/react": "^1.6.21",
"clsx": "^1.1.1",
"mermaid": "^8.13.9",
"prism-react-renderer": "^1.2.1",
"react": "^17.0.1",
"react-dom": "^17.0.1"
},
"browserslist": {
"production": [
">0.5%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
{
"name": "@lage-run/docs-beta",
"version": "0.0.0",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
"start": "docusaurus start",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy",
"clear": "docusaurus clear",
"serve": "docusaurus serve",
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids",
"build-css": "tailwindcss -i src/css/custom.css -o src/css/tailwind-styles.css",
"test": "jest"
},
"dependencies": {
"@docusaurus/core": "2.0.0-beta.14",
"@docusaurus/preset-classic": "2.0.0-beta.14",
"@mdx-js/react": "^1.6.21",
"clsx": "^1.1.1",
"mermaid": "^8.13.9",
"prism-react-renderer": "^1.2.1",
"react": "^17.0.1",
"react-dom": "^17.0.1",
"tailwindcss": "^3.0.24"
},
"devDependencies": {
"@types/jest": "^27.0.1",
"typescript": "^4.4.4",
"jest": "^27.2.0",
"ts-jest": "^27.0.5",
"@testing-library/react": "^12.0.0",
"@testing-library/jest-dom": "^5.16.4",
"jest-light-runner": "^0.2.1",
"identity-obj-proxy": "^3.0.0",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"@docusaurus/module-type-aliases": "^2.0.0-beta.14",
"@tsconfig/docusaurus": "^1.0.5"
},
"browserslist": {
"production": [
">0.5%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}

Просмотреть файл

@ -0,0 +1,26 @@
import React from 'react';
import { styles } from "./shared-styles"
import { FeatureList } from '../pages/data/FeatureList';
function Feature({Svg, title}) {
return (
<div className="text--center padding-horiz--md">
<div className="items-center">
<Svg className="fill-blue-300 h-16 w-16 flex justify-center mx-auto pt-3" alt={title} />
</div>
<div className="text--center padding-horiz--md">
<p className={styles.featureText}>{title}</p>
</div>
</div>
);
}
export default function Features() {
return (
<div className="grid grid-cols-3 my-4">
{FeatureList.map((props, idx) => (
<Feature key={idx} {...props} />
))}
</div>
);
}

Просмотреть файл

@ -0,0 +1,33 @@
import React from 'react';
import Link from '@docusaurus/Link';
import SideBySide from './SideBySide';
import TwoColumns from './TwoColumns';
import Tools from './Tools';
import { styles } from "./shared-styles"
export default function Footer() {
return (
<div className="theme-dark bg-brand py-8">
<TwoColumns>
<div>
<img className="mx-12 py-8"
src="http://placekitten.com/400/400"/>
</div>
<div>
<h1 className={styles.footerTitle}>Seeing is believing -- Give Lage a spin</h1>
<p className={styles.fullLengthPara}>Donec odio. Quisque volutpat mattis eros. Nullam malesuada erat ut turpis. Suspendisse urna nibh, viverra.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam malesuada erat ut turpis. Suspendisse urna nibh, viverra. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam malesuada erat ut turpis. Suspendisse urna nibh, viverra.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam malesuada erat ut turpis. Suspendisse urna nibh, viverra. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. </p>
<SideBySide>
<Link className={styles.button} to="/docs/Introducing Lage/Overview">Get Started</Link>
<Link className={styles.button} to="/docs/Introducing Lage/Overview">Try the Demo</Link>
</SideBySide>
</div>
</TwoColumns>
<p className={styles.point}> Better Together</p>
<p className={styles.para}>This is about the other tools that Lage work with. This is about the other tools that Lage work with. This is about the other tools that Lage work with. This is about the other tools that Lage work with. This is about the other tools that Lage work with. This is about the other tools that Lage work with. This is about the other tools that Lage work with.</p>
<div className="px-12">
<Tools/>
</div>
</div>
);
}

Просмотреть файл

@ -0,0 +1,33 @@
import React from 'react';
import Link from '@docusaurus/Link';
import SideBySide from './SideBySide';
import TwoColumns from './TwoColumns';
import { styles } from "./shared-styles"
export default function Header() {
return (
<header className="theme-dark bg-brand flex h-screen justify-center items-center">
<TwoColumns>
<div>
<p className={styles.headerTitle}>Never rebuild your code again.</p>
<p className={styles.headerSubtitle}>Lage is a beautiful JS monorepo task runner.</p>
<SideBySide>
<Link className={styles.button} to="/docs/Introducing Lage/Overview">Get Started</Link>
<Link className={styles.button} to="/docs/Introducing Lage/Overview">Try the Demo</Link>
</SideBySide>
<p className={styles.fullLengthPara}> Be one of the cool kids using Lage.</p>
<SideBySide>
<img className={styles.customerLogo} src="http://placekitten.com/75/75"/>
<img className={styles.customerLogo} src="http://placekitten.com/75/75"/>
<img className={styles.customerLogo} src="http://placekitten.com/75/75"/>
</SideBySide>
</div>
<div>
<img className="mx-auto w-3/4 h-3/4 px-3 md:w-full lg:w-full md:h-full lg:h-full" src="http://placekitten.com/300/300"/>
</div>
</TwoColumns>
</header>
);
}

Просмотреть файл

@ -1,88 +0,0 @@
import React from 'react';
import clsx from 'clsx';
import styles from './HomepageFeatures.module.css';
const FeatureList = [
{
title: 'Workspace Agnostic',
Svg: require('../../static/img/icon-business-automation.svg').default,
description: (
<>
This task runner will run npm scripts for all workspace implementations out there: lerna, yarn, pnpm, and rush
</>
),
},
{
title: 'Simple pipeline definition',
Svg: require('../../static/img/icon-clock-time.svg').default,
description: (
<>
With a terse definition language, get going with builds within a few seconds
</>
),
},
{
title: 'Speedy local incremental builds',
Svg: require('../../static/img/icon-up.svg').default,
description: (
<>
Because building once is painful enough, lage will remember what you've built before and skip steps that it has already performed before
</>
),
},
{
title: 'Speedy CI build caches',
Svg: require('../../static/img/icon-monitor-graph-growth.svg').default,
description: (
<>
Based on the `backfill` utility, build output can be cached into the cloud for speedy CI builds as well
</>
),
},
{
title: 'Scoped task runs',
Svg: require('../../static/img/icon-hierarchy.svg').default,
description: (
<>
Easily run npm tasks by specifying a scope of packages
</>
),
},
{
title: 'Profile the task runners',
Svg: require('../../static/img/icon-business-chart.svg').default,
description: (
<>
Generate a profile of tasks run by lage - import it inside Chrome or Edge to understand which tasks took the longest time
</>
),
},
];
function Feature({Svg, title, description}) {
return (
<div className={clsx('col col--4')}>
<div className="text--center">
<Svg className={styles.featureSvg} alt={title} />
</div>
<div className="text--center padding-horiz--md">
<h3>{title}</h3>
<p>{description}</p>
</div>
</div>
);
}
export default function HomepageFeatures() {
return (
<section className={styles.features}>
<div className="container">
<div className="row">
{FeatureList.map((props, idx) => (
<Feature key={idx} {...props} />
))}
</div>
</div>
</section>
);
}

Просмотреть файл

@ -1,12 +0,0 @@
.features {
display: flex;
align-items: center;
padding: 2rem 0;
width: 100%;
}
.featureSvg {
height: 80px;
width: 60px;
fill: #a7cff7;
}

Просмотреть файл

@ -0,0 +1,12 @@
import React from 'react';
export default function SideBySide({children}) {
return (
<div className = "flex mx-12">
{React.Children.map(children, (child, i) => {
if (i < 1) return <div>{child}</div>
return <div className = "ml-4">{child}</div>
})}
</div>
);
}

Просмотреть файл

@ -0,0 +1,27 @@
import React from "react";
export default function Table(props) {
const tableContents = props.tableContents;
return (
<table className="table-fixed">
<thead className="sticky top-0">
<tr>
<th />
{tableContents.map((item) => (
<th key={item.name}>{item.name}</th>
))}
</tr>
</thead>
<tbody>
{Object.keys(tableContents[0].capabilities).map((capability) => (
<tr key={capability}>
<td>{capability}</td>
{tableContents.map((item) => (
<th key={item.capabilities[capability]}>{item.capabilities[capability]}</th>
))}
</tr>
))}
</tbody>
</table>
);
}

Просмотреть файл

@ -0,0 +1,28 @@
import React from 'react';
import { TestimonialList } from '../pages/data/TestimonialList';
function Testimonial({testimonial, link}) {
return (
<div className="text--center padding-horiz--md">
<div className="my-3 p-6 max-w-sm bg-white rounded-lg border border-tertiary">
<p className="mb-3 font-normal text-primary"> {testimonial} </p>
<a href={link} className="inline-flex items-center py-2 px-3 text-sm font-medium text-center text-secondary bg-brand rounded-lg hover:bg-accent hover:text-secondary hover:no-underline focus:ring-4">
Read more
<svg className="ml-2 -mr-1 w-4 h-4" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg>
</a>
</div>
</div>
);
}
export default function Testimonials() {
return (
<div className="mx-12 grid grid-cols-1 md:grid-cols-3 lg:grid-cols-3 gaps-12">
{TestimonialList.map((props, idx) => (
<Testimonial key={idx} {...props} />
))}
</div>
);
}

Просмотреть файл

@ -0,0 +1,27 @@
import React from 'react';
import { ToolList } from '../pages/data/ToolList';
function Tool({Svg, title, description}) {
return (
<div className="text--center padding-horiz--md">
<div className="my-3 p-6 max-w-sm bg-white rounded-lg border border-gray-200 shadow-md">
<div className="items-center">
<Svg className="fill-blue-300 h-16 w-16 flex justify-center mx-auto pt-3" alt={title}/>
</div>
<div className="text-primary font-bold mt-2 mb-4">{title}</div>
<p className="mb-3 font-normal text-gray-700 dark:text-primary">{description}</p>
</div>
</div>
);
}
export default function Tools() {
return (
<div className="grid grid-cols-1 lg:grid-cols-4 gaps-12 md:grid-cols-2">
{ToolList.map((props, idx) => (
<Tool key={idx} {...props} />
))}
</div>
);
}

Просмотреть файл

@ -0,0 +1,15 @@
import React from 'react';
export const Tweet=(props) => {
const tweetStyle=`py-2 text-primary font-bold whitespace-pre-wrap text-lg ${props.toLeft ? 'ml-32 mr-8' : 'ml-8 mr-32'}`;
const aligner=`${props.toLeft ? '' : 'w-1/12'}`;
return (
<div className='flex'>
<div className={aligner}/>
<div className="bg-tertiary w-11/12 mt-4">
<p className={tweetStyle}>{props.tweetContent}</p>
<p className={tweetStyle}>{props.author}</p>
</div>
</div>
);
}

Просмотреть файл

@ -0,0 +1,14 @@
import React from 'react';
export default function TwoColumns({className = "", children}) {
return (
<div className={`mx-auto ${className}`}>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2">
{React.Children.map(children, (child, i) => {
if (i < 2) return <div className="flex float-left py-4 align-center">{child}</div>
else return
})}
</div>
</div>
);
}

Просмотреть файл

@ -0,0 +1,12 @@
export const styles = {
bodyBGColor: "bg-primary",
headerTitle: "text-secondary text-6xl px-12 pb-4 pt-12",
headerSubtitle: "text-secondary text-3xl px-12 mb-4",
button: "border-transparent inline-block bg-secondary hover:bg-accent hover:text-secondary hover:no-underline text-primary text-lg font-bold py-2 px-4 rounded",
point: "font-bold text-secondary text-4xl pt-12 px-12",
featureText: "text-secondary text-lg py-2",
para: "text-secondary whitespace-pre-wrap pt-4 text-lg px-12",
fullLengthPara: "text-secondary whitespace-pre-wrap py-4 px-12",
footerTitle: "font-bold text-secondary text-4xl px-12 py-8",
customerLogo: "inline-block",
};

Просмотреть файл

@ -1,3 +1,3 @@
.mermaid{
background-color:#FFFFFF !important;
.mermaid{
background-color:#FFFFFF !important;
}

Просмотреть файл

@ -1,28 +1,11 @@
/**
* Any CSS included here will be global. The classic template
* bundles Infima by default. Infima is a CSS framework designed to
* work well for content-centric websites.
*/
/* You can override the default Infima variables here. */
:root {
--ifm-color-primary: #a7cff7;
--ifm-color-primary-dark: #85c0f4;
--ifm-color-primary-darker: #5cb1f0;
--ifm-color-primary-darkest: #00a2ed;
--ifm-color-primary-light: #c6dffa;
--ifm-color-primary-lighter: #e3effc;
--ifm-color-primary-lightest: #ffffff;
--ifm-code-font-size: 95%;
}
.docusaurus-highlight-code-line {
background-color: rgba(0, 0, 0, 0.1);
display: block;
margin: 0 calc(-1 * var(--ifm-pre-padding));
padding: 0 var(--ifm-pre-padding);
}
html[data-theme='dark'] .docusaurus-highlight-code-line {
background-color: rgba(0, 0, 0, 0.3);
}
@tailwind base;
@tailwind components;
@tailwind utilities;
.theme-dark {
--color-primary: 0 0 0;
--color-secondary: 255 255 255;
--color-tertiary: 212 212 216;
--color-brand: 13 148 136;
--color-accent: 234 88 12;
}

Просмотреть файл

@ -0,0 +1,893 @@
/*
! tailwindcss v3.0.24 | MIT License | https://tailwindcss.com
*/
/*
1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
*/
*,
::before,
::after {
box-sizing: border-box;
/* 1 */
border-width: 0;
/* 2 */
border-style: solid;
/* 2 */
border-color: #e5e7eb;
/* 2 */
}
::before,
::after {
--tw-content: '';
}
/*
1. Use a consistent sensible line-height in all browsers.
2. Prevent adjustments of font size after orientation changes in iOS.
3. Use a more readable tab size.
4. Use the user's configured `sans` font-family by default.
*/
html {
line-height: 1.5;
/* 1 */
-webkit-text-size-adjust: 100%;
/* 2 */
/* 3 */
tab-size: 4;
/* 3 */
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
/* 4 */
}
/*
1. Remove the margin in all browsers.
2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
*/
body {
margin: 0;
/* 1 */
line-height: inherit;
/* 2 */
}
/*
1. Add the correct height in Firefox.
2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
3. Ensure horizontal rules are visible by default.
*/
hr {
height: 0;
/* 1 */
color: inherit;
/* 2 */
border-top-width: 1px;
/* 3 */
}
/*
Add the correct text decoration in Chrome, Edge, and Safari.
*/
abbr:where([title]) {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
}
/*
Remove the default font size and weight for headings.
*/
h1,
h2,
h3,
h4,
h5,
h6 {
font-size: inherit;
font-weight: inherit;
}
/*
Reset links to optimize for opt-in styling instead of opt-out.
*/
a {
color: inherit;
text-decoration: inherit;
}
/*
Add the correct font weight in Edge and Safari.
*/
b,
strong {
font-weight: bolder;
}
/*
1. Use the user's configured `mono` font family by default.
2. Correct the odd `em` font sizing in all browsers.
*/
code,
kbd,
samp,
pre {
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
/* 1 */
font-size: 1em;
/* 2 */
}
/*
Add the correct font size in all browsers.
*/
small {
font-size: 80%;
}
/*
Prevent `sub` and `sup` elements from affecting the line height in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
/*
1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
3. Remove gaps between table borders by default.
*/
table {
text-indent: 0;
/* 1 */
border-color: inherit;
/* 2 */
border-collapse: collapse;
/* 3 */
}
/*
1. Change the font styles in all browsers.
2. Remove the margin in Firefox and Safari.
3. Remove default padding in all browsers.
*/
button,
input,
optgroup,
select,
textarea {
font-family: inherit;
/* 1 */
font-size: 100%;
/* 1 */
line-height: inherit;
/* 1 */
color: inherit;
/* 1 */
margin: 0;
/* 2 */
padding: 0;
/* 3 */
}
/*
Remove the inheritance of text transform in Edge and Firefox.
*/
button,
select {
text-transform: none;
}
/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Remove default button styles.
*/
button,
[type='button'],
[type='reset'],
[type='submit'] {
-webkit-appearance: button;
/* 1 */
background-color: transparent;
/* 2 */
background-image: none;
/* 2 */
}
/*
Use the modern Firefox focus style for all focusable elements.
*/
:-moz-focusring {
outline: auto;
}
/*
Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
*/
:-moz-ui-invalid {
box-shadow: none;
}
/*
Add the correct vertical alignment in Chrome and Firefox.
*/
progress {
vertical-align: baseline;
}
/*
Correct the cursor style of increment and decrement buttons in Safari.
*/
::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
height: auto;
}
/*
1. Correct the odd appearance in Chrome and Safari.
2. Correct the outline style in Safari.
*/
[type='search'] {
-webkit-appearance: textfield;
/* 1 */
outline-offset: -2px;
/* 2 */
}
/*
Remove the inner padding in Chrome and Safari on macOS.
*/
::-webkit-search-decoration {
-webkit-appearance: none;
}
/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Change font properties to `inherit` in Safari.
*/
::-webkit-file-upload-button {
-webkit-appearance: button;
/* 1 */
font: inherit;
/* 2 */
}
/*
Add the correct display in Chrome and Safari.
*/
summary {
display: list-item;
}
/*
Removes the default spacing and border for appropriate elements.
*/
blockquote,
dl,
dd,
h1,
h2,
h3,
h4,
h5,
h6,
hr,
figure,
p,
pre {
margin: 0;
}
fieldset {
margin: 0;
padding: 0;
}
legend {
padding: 0;
}
ol,
ul,
menu {
list-style: none;
margin: 0;
padding: 0;
}
/*
Prevent resizing textareas horizontally by default.
*/
textarea {
resize: vertical;
}
/*
1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
2. Set the default placeholder color to the user's configured gray 400 color.
*/
input:-ms-input-placeholder, textarea:-ms-input-placeholder {
opacity: 1;
/* 1 */
color: #9ca3af;
/* 2 */
}
input::placeholder,
textarea::placeholder {
opacity: 1;
/* 1 */
color: #9ca3af;
/* 2 */
}
/*
Set the default cursor for buttons.
*/
button,
[role="button"] {
cursor: pointer;
}
/*
Make sure disabled buttons don't get the pointer cursor.
*/
:disabled {
cursor: default;
}
/*
1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
This can trigger a poorly considered lint error in some tools but is included by design.
*/
img,
svg,
video,
canvas,
audio,
iframe,
embed,
object {
display: block;
/* 1 */
vertical-align: middle;
/* 2 */
}
/*
Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
*/
img,
video {
max-width: 100%;
height: auto;
}
/*
Ensure the default browser behavior of the `hidden` attribute.
*/
[hidden] {
display: none;
}
*, ::before, ::after {
--tw-translate-x: 0;
--tw-translate-y: 0;
--tw-rotate: 0;
--tw-skew-x: 0;
--tw-skew-y: 0;
--tw-scale-x: 1;
--tw-scale-y: 1;
--tw-pan-x: ;
--tw-pan-y: ;
--tw-pinch-zoom: ;
--tw-scroll-snap-strictness: proximity;
--tw-ordinal: ;
--tw-slashed-zero: ;
--tw-numeric-figure: ;
--tw-numeric-spacing: ;
--tw-numeric-fraction: ;
--tw-ring-inset: ;
--tw-ring-offset-width: 0px;
--tw-ring-offset-color: #fff;
--tw-ring-color: rgb(59 130 246 / 0.5);
--tw-ring-offset-shadow: 0 0 #0000;
--tw-ring-shadow: 0 0 #0000;
--tw-shadow: 0 0 #0000;
--tw-shadow-colored: 0 0 #0000;
--tw-blur: ;
--tw-brightness: ;
--tw-contrast: ;
--tw-grayscale: ;
--tw-hue-rotate: ;
--tw-invert: ;
--tw-saturate: ;
--tw-sepia: ;
--tw-drop-shadow: ;
--tw-backdrop-blur: ;
--tw-backdrop-brightness: ;
--tw-backdrop-contrast: ;
--tw-backdrop-grayscale: ;
--tw-backdrop-hue-rotate: ;
--tw-backdrop-invert: ;
--tw-backdrop-opacity: ;
--tw-backdrop-saturate: ;
--tw-backdrop-sepia: ;
}
.absolute {
position: absolute;
}
.sticky {
position: -webkit-sticky;
position: sticky;
}
.top-0 {
top: 0px;
}
.float-left {
float: left;
}
.mx-auto {
margin-left: auto;
margin-right: auto;
}
.my-4 {
margin-top: 1rem;
margin-bottom: 1rem;
}
.mx-12 {
margin-left: 3rem;
margin-right: 3rem;
}
.my-3 {
margin-top: 0.75rem;
margin-bottom: 0.75rem;
}
.mt-3 {
margin-top: 0.75rem;
}
.mt-16 {
margin-top: 4rem;
}
.ml-4 {
margin-left: 1rem;
}
.mb-3 {
margin-bottom: 0.75rem;
}
.ml-2 {
margin-left: 0.5rem;
}
.-mr-1 {
margin-right: -0.25rem;
}
.mt-2 {
margin-top: 0.5rem;
}
.mb-4 {
margin-bottom: 1rem;
}
.ml-32 {
margin-left: 8rem;
}
.mr-8 {
margin-right: 2rem;
}
.ml-8 {
margin-left: 2rem;
}
.mr-32 {
margin-right: 8rem;
}
.mt-4 {
margin-top: 1rem;
}
.inline-block {
display: inline-block;
}
.flex {
display: flex;
}
.inline-flex {
display: inline-flex;
}
.table {
display: table;
}
.grid {
display: grid;
}
.h-16 {
height: 4rem;
}
.h-screen {
height: 100vh;
}
.h-3\/4 {
height: 75%;
}
.h-4 {
height: 1rem;
}
.w-16 {
width: 4rem;
}
.w-3\/4 {
width: 75%;
}
.w-4 {
width: 1rem;
}
.w-1\/12 {
width: 8.333333%;
}
.w-11\/12 {
width: 91.666667%;
}
.max-w-sm {
max-width: 24rem;
}
.table-fixed {
table-layout: fixed;
}
.grid-cols-3 {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.grid-cols-1 {
grid-template-columns: repeat(1, minmax(0, 1fr));
}
.items-center {
align-items: center;
}
.justify-end {
justify-content: flex-end;
}
.justify-center {
justify-content: center;
}
.whitespace-pre-wrap {
white-space: pre-wrap;
}
.rounded-lg {
border-radius: 0.5rem;
}
.rounded {
border-radius: 0.25rem;
}
.border {
border-width: 1px;
}
.border-tertiary {
--tw-border-opacity: 1;
border-color: rgb(var(--color-tertiary) / var(--tw-border-opacity));
}
.border-gray-200 {
--tw-border-opacity: 1;
border-color: rgb(229 231 235 / var(--tw-border-opacity));
}
.border-transparent {
border-color: transparent;
}
.bg-primary {
--tw-bg-opacity: 1;
background-color: rgb(var(--color-primary) / var(--tw-bg-opacity));
}
.bg-brand {
--tw-bg-opacity: 1;
background-color: rgb(var(--color-brand) / var(--tw-bg-opacity));
}
.bg-white {
--tw-bg-opacity: 1;
background-color: rgb(255 255 255 / var(--tw-bg-opacity));
}
.bg-tertiary {
--tw-bg-opacity: 1;
background-color: rgb(var(--color-tertiary) / var(--tw-bg-opacity));
}
.bg-secondary {
--tw-bg-opacity: 1;
background-color: rgb(var(--color-secondary) / var(--tw-bg-opacity));
}
.fill-blue-300 {
fill: #93c5fd;
}
.p-6 {
padding: 1.5rem;
}
.px-12 {
padding-left: 3rem;
padding-right: 3rem;
}
.py-12 {
padding-top: 3rem;
padding-bottom: 3rem;
}
.py-8 {
padding-top: 2rem;
padding-bottom: 2rem;
}
.px-3 {
padding-left: 0.75rem;
padding-right: 0.75rem;
}
.py-2 {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
}
.py-4 {
padding-top: 1rem;
padding-bottom: 1rem;
}
.px-4 {
padding-left: 1rem;
padding-right: 1rem;
}
.pt-12 {
padding-top: 3rem;
}
.pt-3 {
padding-top: 0.75rem;
}
.pb-4 {
padding-bottom: 1rem;
}
.pt-4 {
padding-top: 1rem;
}
.text-left {
text-align: left;
}
.text-center {
text-align: center;
}
.text-right {
text-align: right;
}
.text-sm {
font-size: 0.875rem;
line-height: 1.25rem;
}
.text-lg {
font-size: 1.125rem;
line-height: 1.75rem;
}
.text-6xl {
font-size: 3.75rem;
line-height: 1;
}
.text-3xl {
font-size: 1.875rem;
line-height: 2.25rem;
}
.text-4xl {
font-size: 2.25rem;
line-height: 2.5rem;
}
.font-normal {
font-weight: 400;
}
.font-medium {
font-weight: 500;
}
.font-bold {
font-weight: 700;
}
.text-primary {
--tw-text-opacity: 1;
color: rgb(var(--color-primary) / var(--tw-text-opacity));
}
.text-secondary {
--tw-text-opacity: 1;
color: rgb(var(--color-secondary) / var(--tw-text-opacity));
}
.text-gray-700 {
--tw-text-opacity: 1;
color: rgb(55 65 81 / var(--tw-text-opacity));
}
.shadow-md {
--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.theme-dark {
--color-primary: 0 0 0;
--color-secondary: 255 255 255;
--color-tertiary: 212 212 216;
--color-brand: 13 148 136;
--color-accent: 234 88 12;
}
.hover\:bg-accent:hover {
--tw-bg-opacity: 1;
background-color: rgb(var(--color-accent) / var(--tw-bg-opacity));
}
.hover\:text-secondary:hover {
--tw-text-opacity: 1;
color: rgb(var(--color-secondary) / var(--tw-text-opacity));
}
.hover\:no-underline:hover {
-webkit-text-decoration-line: none;
text-decoration-line: none;
}
.focus\:ring-4:focus {
--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}
@media (prefers-color-scheme: dark) {
.dark\:text-primary {
--tw-text-opacity: 1;
color: rgb(var(--color-primary) / var(--tw-text-opacity));
}
}
@media (min-width: 768px) {
.md\:h-full {
height: 100%;
}
.md\:w-full {
width: 100%;
}
.md\:grid-cols-3 {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.md\:grid-cols-2 {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (min-width: 1024px) {
.lg\:h-full {
height: 100%;
}
.lg\:w-full {
width: 100%;
}
.lg\:grid-cols-3 {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.lg\:grid-cols-4 {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
.lg\:grid-cols-2 {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}

Просмотреть файл

@ -0,0 +1,14 @@
export const FeatureList=[
{
title: 'Simple pipeline definition',
Svg: require('../../../static/img/icon-clock-time.svg').default,
},
{
title: 'Speedy local incremental builds',
Svg: require('../../../static/img/icon-up.svg').default,
},
{
title: 'Scoped task runs',
Svg: require('../../../static/img/icon-hierarchy.svg').default,
},
];

Просмотреть файл

@ -0,0 +1,156 @@
const lage = {
"name": "Lage",
"capabilities": {
"Local computation caching": "Yes",
"Local task orchastration": "Yes",
"Distributed computation caching": "Yes",
"Distributed task execution": "Yes",
"Transparent remote execution": "Yes",
"Detecting affected projects/packages": "Yes",
"Workspace analysis": "Yes",
"Dependency graph visualization": "Yes",
"Source code sharing": "Yes",
"Consistent tooling": "Yes",
"Code generation": "Yes",
"Project constraints and visibility": "Yes"
}
};
const bazel = {
"name": "Bazel",
"capabilities": {
"Local computation caching": "Yes",
"Local task orchastration": "Yes",
"Distributed computation caching": "Yes",
"Distributed task execution": "Yes",
"Transparent remote execution": "Yes",
"Detecting affected projects/packages": "Yes",
"Workspace analysis": "Yes",
"Dependency graph visualization": "Yes",
"Source code sharing": "Yes",
"Consistent tooling": "Yes",
"Code generation": "Yes",
"Project constraints and visibility": "Yes"
}
};
const gradle = {
"name": "Gradle",
"capabilities": {
"Local computation caching": "Yes",
"Local task orchastration": "Yes",
"Distributed computation caching": "Yes",
"Distributed task execution": "Yes",
"Transparent remote execution": "Yes",
"Detecting affected projects/packages": "Yes",
"Workspace analysis": "Yes",
"Dependency graph visualization": "Yes",
"Source code sharing": "Yes",
"Consistent tooling": "Yes",
"Code generation": "Yes",
"Project constraints and visibility": "Yes"
}
};
const nx = {
"name": "Nx",
"capabilities": {
"Local computation caching": "Yes",
"Local task orchastration": "Yes",
"Distributed computation caching": "Yes",
"Distributed task execution": "Yes",
"Transparent remote execution": "Yes",
"Detecting affected projects/packages": "Yes",
"Workspace analysis": "Yes",
"Dependency graph visualization": "Yes",
"Source code sharing": "Yes",
"Consistent tooling": "Yes",
"Code generation": "Yes",
"Project constraints and visibility": "Yes"
}
};
const lerna = {
"name": "Lerna",
"capabilities": {
"Local computation caching": "Yes",
"Local task orchastration": "Yes",
"Distributed computation caching": "Yes",
"Distributed task execution": "Yes",
"Transparent remote execution": "Yes",
"Detecting affected projects/packages": "Yes",
"Workspace analysis": "Yes",
"Dependency graph visualization": "Yes",
"Source code sharing": "Yes",
"Consistent tooling": "Yes",
"Code generation": "Yes",
"Project constraints and visibility": "Yes"
}
};
const pants = {
"name": "Pants",
"capabilities": {
"Local computation caching": "Yes",
"Local task orchastration": "Yes",
"Distributed computation caching": "Yes",
"Distributed task execution": "Yes",
"Transparent remote execution": "Yes",
"Detecting affected projects/packages": "Yes",
"Workspace analysis": "Yes",
"Dependency graph visualization": "Yes",
"Source code sharing": "Yes",
"Consistent tooling": "Yes",
"Code generation": "Yes",
"Project constraints and visibility": "Yes"
}
};
const rush = {
"name": "Rush",
"capabilities": {
"Local computation caching": "Yes",
"Local task orchastration": "Yes",
"Distributed computation caching": "Yes",
"Distributed task execution": "Yes",
"Transparent remote execution": "Yes",
"Detecting affected projects/packages": "Yes",
"Workspace analysis": "Yes",
"Dependency graph visualization": "Yes",
"Source code sharing": "Yes",
"Consistent tooling": "Yes",
"Code generation": "Yes",
"Project constraints and visibility": "Yes"
}
};
const turborepo = {
"name": "Turborepo",
"capabilities": {
"Local computation caching": "Yes",
"Local task orchastration": "Yes",
"Distributed computation caching": "Yes",
"Distributed task execution": "Yes",
"Transparent remote execution": "Yes",
"Detecting affected projects/packages": "Yes",
"Workspace analysis": "Yes",
"Dependency graph visualization": "Yes",
"Source code sharing": "Yes",
"Consistent tooling": "Yes",
"Code generation": "Yes",
"Project constraints and visibility": "Yes"
}
};
export const tableContents = [
lage,
bazel,
gradle,
nx,
lerna,
pants,
rush,
turborepo
]

Просмотреть файл

@ -0,0 +1,14 @@
export const TestimonialList=[
{
testimonial: "This is my testimonial. Lage is awesome awesome awesome awesome awesome awesome awesome awesome awesome awesome awesome awesome AWESOME",
link: "docs/docs/Introducing Lage/Overview.md"
},
{
testimonial: "This is my testimonial. Lage is awesome awesome awesome awesome awesome awesome awesome awesome awesome awesome awesome awesome AWESOME",
link: "docs/docs/Introducing Lage/Overview.md"
},
{
testimonial: "This is my testimonial. Lage is awesome awesome awesome awesome awesome awesome awesome awesome awesome awesome awesome awesome AWESOME",
link: "docs/docs/Introducing Lage/Overview.md"
},
];

Просмотреть файл

@ -0,0 +1,23 @@
export const ToolList=[
{
title: 'Docusaurus',
Svg: require('../../../static/img/icon-clock-time.svg').default,
description: "This is what it does. We were inspired to create something even better by using them.",
},
{
title: 'Beachball',
Svg: require('../../../static/img/icon-up.svg').default,
description: "This is what it does. We were inspired to create something even better by using them.",
},
{
title: 'Backfill',
Svg: require('../../../static/img/icon-hierarchy.svg').default,
description: "This is what it does. We were inspired to create something even better by using them.",
},
{
title: 'P-graph',
Svg: require('../../../static/img/icon-hierarchy.svg').default,
description: "This is what it does. We were inspired to create something even better by using them.",
},
];

Просмотреть файл

@ -1,38 +0,0 @@
import React from 'react';
import clsx from 'clsx';
import Layout from '@theme/Layout';
import Link from '@docusaurus/Link';
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
import styles from './index.module.css';
import HomepageFeatures from '../components/HomepageFeatures';
function HomepageHeader() {
const {siteConfig} = useDocusaurusContext();
return (
<header className={clsx('hero hero--primary', styles.heroBanner)}>
<div className="container">
<h1 className="hero__title"> <img className={styles.hero__title__image} src={siteConfig.customFields.image} /> </h1>
<p className="hero__subtitle">{siteConfig.tagline}</p>
<div className={styles.buttons}>
<Link
className="button button--secondary button--lg"
to="/docs/Introducing Lage/Overview">
Get Started
</Link>
</div>
</div>
</header>
);
}
export default function Home() {
const {siteConfig} = useDocusaurusContext();
return (
<Layout>
<HomepageHeader />
<main>
<HomepageFeatures />
</main>
</Layout>
);
}

Просмотреть файл

@ -1,29 +0,0 @@
/**
* CSS files with the .module.css suffix will be treated as CSS modules
* and scoped locally.
*/
.heroBanner {
padding: 4rem 0;
text-align: center;
position: relative;
overflow: hidden;
background: linear-gradient( #9ac2e9, #cff7ff);
}
.hero__title__image{
height: 100px;
width: 70px;
}
@media screen and (max-width: 966px) {
.heroBanner {
padding: 2rem;
}
}
.buttons {
display: flex;
align-items: center;
justify-content: center;
}

Просмотреть файл

@ -0,0 +1,65 @@
import React from 'react';
import Layout from '@theme/Layout';
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
import Features from '../components/Features';
import Header from '../components/Header';
import Footer from '../components/Footer';
import TwoColumns from '../components/TwoColumns';
import { Tweet } from '../components/Tweet';
import '../css/tailwind-styles.css';
import Testimonials from '../components/Testimonials';
import Table from '../components/Table';
import { styles } from "../components/shared-styles"
import { tableContents } from "./data/TableContents";
export default function Home() {
const {siteConfig}=useDocusaurusContext();
return (
<Layout>
<Header/>
<main className="theme-dark bg-primary">
<TwoColumns>
<div className="text-left">
<h1 className ={styles.point}>Finally! Your days of <br/>suffering are over</h1>
<p className ={styles.para}>Explain the problem that Lage solves here. No jargon! Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam malesuada erat ut turpis. Suspendisse urna nibh, viverra. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio quisco.</p>
<Tweet toLeft={true}
tweetContent='"Where have you been all my life?! Lage if you were a person I would propose to you YESTERDAY"'
author="@devs_for_days89"/>
</div>
<div>
<img className="mx-auto mt-3 px-12" src="http://placekitten.com/600/600"/>
</div>
</TwoColumns>
<TwoColumns className="mt-16">
<div>
<img className="mx-auto mt-3 px-12" src="http://placekitten.com/600/600"/>
</div>
<div className="text-right justify-end">
<h1 className={styles.point}>Here is what Lage does the best.</h1>
<p className={styles.para}>Show off the absolute BEST benefit of Lage. Does it make your life easier? Will you be more popular? Most handsome person alive? Tap into that empathy and ask yourself, how will this make my customer FEEL? Address that! Dont worry about the 2nd and 3rd benefits. Well get there. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros.</p>
<Features />
<Tweet toLeft={false}
tweetContent='"I would like to thank my parents, my friends, and Lage for making me the individual I am today."'
author="@bobthebuilder_msft"/>
</div>
</TwoColumns>
<p className={styles.point}>What's a monorepo?</p>
<p className ={styles.para}>Monorepos are beautiful. That's all we need to know. Could I BE loving monorepos more? Monorepos are beautiful. That's all we need to know. Could I BE loving monorepos more? Monorepos are beautiful. That's all we need to know. Could I BE loving monorepos more? Monorepos are beautiful. That's all we need to know. Could I BE loving monorepos more? Monorepos are beautiful. That's all we need to know. Could I BE loving monorepos more? </p>
<div className="flex pt-12 justify-center">
<Table tableContents={tableContents}/>
</div>
<p className={styles.point}>Precious time saved by Lage since 2019</p>
<p className ={styles.para}>Estimated based on the feedback of 50,000 creators.</p>
<p className={styles.para}> The illustration goes here</p>
<div className="py-12 text-center">
<p className={styles.point}>What would you do with the time saved by Lage?</p>
</div>
<Testimonials/>
</main>
<Footer/>
</Layout>
);
}

Просмотреть файл

Просмотреть файл

@ -0,0 +1,30 @@
function withOpacityValue(variable) {
return ({ opacityValue }) => {
if (opacityValue === undefined) {
return `rgb(var(${variable}))`;
}
return `rgb(var(${variable}) / ${opacityValue})`;
};
}
module.exports = {
content: [
"./src/pages/*.js",
"./src/components/*.js",
"./src/pages/*.tsx",
"./src/pages/*.ts",
"./src/components/*.tsx",
"./src/components/*.ts",
],
theme: {
extend: {
colors: {
primary: withOpacityValue("--color-primary"),
secondary: withOpacityValue("--color-secondary"),
tertiary: withOpacityValue("--color-tertiary"),
brand: withOpacityValue("--color-brand"),
accent: withOpacityValue("--color-accent"),
},
},
},
plugins: [],
};

Просмотреть файл

@ -0,0 +1,13 @@
import Header from "../src/components/Header";
import { render, waitFor, screen } from "@testing-library/react";
import { getAllByRole } from "@testing-library/dom";
import "@testing-library/jest-dom";
describe("Header", () => {
it("should render with expected call-to-action buttons", () => {
const results = render(<Header />);
const buttons = getAllByRole(results.container, "button");
expect(buttons).toHaveLength(2);
});
});

Просмотреть файл

@ -0,0 +1,17 @@
import Table from "../src/components/Table";
import { render, screen } from "@testing-library/react";
import "@testing-library/jest-dom";
const testElement = {
name: "Lage",
capabilities: {
"Local computation caching": "Yes",
},
};
test("Single element creates table.", () => {
render(<Table tableContents={[testElement]} />);
const table = screen.getByText(testElement.name);
expect(table).toHaveTextContent(Object.keys(testElement.capabilities)[0]);
});

25
docs-beta/tsconfig.json Normal file
Просмотреть файл

@ -0,0 +1,25 @@
{
"extends": "@tsconfig/docusaurus/tsconfig.json",
"ts-node": {
"transpileOnly": true
},
"compilerOptions": {
"target": "ES2017",
"module": "ES2022",
"moduleResolution": "Node",
"declaration": true,
"lib": ["ES2017"],
"allowJs": true,
"outDir": "./lib",
"strict": true,
"noImplicitAny": false,
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"skipLibCheck": true,
"noUnusedLocals": false,
"sourceMap": true,
"jsx": "react"
},
"include": ["src"]
}

Просмотреть файл

@ -17,7 +17,7 @@
"docs": "yarn workspace @lage/docs start",
"docs:build": "yarn workspace @lage/docs build",
"gh-pages": "gh-pages",
"docs-beta": "yarn workspace @lage/docs start",
"docs-beta": "yarn workspace @lage-run/docs-beta start",
"docs-beta:build": "yarn workspace @lage/docs build"
},
"devDependencies": {

992
yarn.lock

Разница между файлами не показана из-за своего большого размера Загрузить разницу