From f3fe3949684f688190d65f3b756fb8db4979431e Mon Sep 17 00:00:00 2001 From: Jay V Date: Wed, 18 Dec 2024 15:52:43 -0500 Subject: [PATCH 01/21] adding docs theme --- www/astro.config.mjs | 76 +++- www/public/favicon-dark.svg | 3 + www/public/favicon.svg | 5 +- www/public/social-share.png | Bin 25450 -> 25713 bytes www/src/components/Header.astro | 99 +++++ www/src/components/Lander.astro | 5 + www/src/components/PageTitle.astro | 27 ++ www/src/components/tsdoc/InlineSection.astro | 1 + www/src/components/tsdoc/NestedTitle.astro | 6 + www/src/components/tsdoc/Section.astro | 8 + www/src/components/tsdoc/Segment.astro | 2 + www/src/content/docs/docs/dummy/markdown.mdx | 442 +++++++++++++++++++ www/src/content/docs/docs/dummy/tsdoc.mdx | 430 ++++++++++++++++++ www/src/content/docs/docs/index.mdx | 4 + www/src/custom.css | 296 ++++++++++++- www/src/styles/lander.css | 15 + www/src/styles/markdown.css | 246 +++++++++++ www/src/styles/tsdoc.css | 76 ++++ 18 files changed, 1724 insertions(+), 17 deletions(-) create mode 100644 www/public/favicon-dark.svg create mode 100644 www/src/components/Header.astro create mode 100644 www/src/components/PageTitle.astro create mode 100644 www/src/components/tsdoc/InlineSection.astro create mode 100644 www/src/components/tsdoc/NestedTitle.astro create mode 100644 www/src/components/tsdoc/Section.astro create mode 100644 www/src/components/tsdoc/Segment.astro create mode 100644 www/src/content/docs/docs/dummy/markdown.mdx create mode 100644 www/src/content/docs/docs/dummy/tsdoc.mdx create mode 100644 www/src/content/docs/docs/index.mdx create mode 100644 www/src/styles/lander.css create mode 100644 www/src/styles/markdown.css create mode 100644 www/src/styles/tsdoc.css diff --git a/www/astro.config.mjs b/www/astro.config.mjs index a6837384..73b25a89 100644 --- a/www/astro.config.mjs +++ b/www/astro.config.mjs @@ -21,16 +21,40 @@ export default defineConfig({ sizes: "48x48", }, }, + // Add light/dark mode favicon + { + tag: "link", + attrs: { + rel: "icon", + href: "/favicon.svg", + media: "(prefers-color-scheme: light)", + }, + }, + { + tag: "link", + attrs: { + rel: "icon", + href: "/favicon-dark.svg", + media: "(prefers-color-scheme: dark)", + }, + }, ], + pagination: false, + logo: { + light: "./src/assets/logo-light.svg", + dark: "./src/assets/logo-dark.svg", + replacesTitle: true, + }, social: { github: config.github, discord: config.discord, }, - pagefind: false, components: { Hero: "./src/components/Hero.astro", Head: "./src/components/Head.astro", + Header: "./src/components/Header.astro", Footer: "./src/components/Footer.astro", + PageTitle: "./src/components/PageTitle.astro", }, customCss: [ "@fontsource/ibm-plex-mono/400.css", @@ -39,6 +63,56 @@ export default defineConfig({ "@fontsource/ibm-plex-mono/600.css", "@fontsource/ibm-plex-mono/700.css", "./src/custom.css", + "./src/styles/tsdoc.css", + "./src/styles/lander.css", + "./src/styles/markdown.css", + ], + sidebar: [ + { label: "Intro", slug: "docs" }, + { + label: "Get Started", + items: [ + { label: "Test Nav 1", slug: "docs" }, + { label: "Test Nav 2", slug: "docs" }, + { label: "Test Nav 3", slug: "docs" }, + { label: "Test Nav 4", slug: "docs" }, + { label: "Test Nav 5", slug: "docs" }, + { label: "Test Nav 6", slug: "docs" }, + ], + }, + { + label: "Get Started", + items: [ + { label: "Test Nav 1", slug: "docs" }, + { label: "Test Nav 2", slug: "docs" }, + { label: "Test Nav 3", slug: "docs" }, + { label: "Test Nav 4", slug: "docs" }, + { label: "Test Nav 5", slug: "docs" }, + { label: "Test Nav 6", slug: "docs" }, + ], + }, + { + label: "Get Started", + items: [ + { label: "Test Nav 1", slug: "docs" }, + { label: "Test Nav 2", slug: "docs" }, + { label: "Test Nav 3", slug: "docs" }, + { label: "Test Nav 4", slug: "docs" }, + { label: "Test Nav 5", slug: "docs" }, + { label: "Test Nav 6", slug: "docs" }, + ], + }, + { + label: "Get Started", + items: [ + { label: "Test Nav 1", slug: "docs" }, + { label: "Test Nav 2", slug: "docs" }, + { label: "Test Nav 3", slug: "docs" }, + { label: "Test Nav 4", slug: "docs" }, + { label: "Test Nav 5", slug: "docs" }, + { label: "Test Nav 6", slug: "docs" }, + ], + }, ], }), ], diff --git a/www/public/favicon-dark.svg b/www/public/favicon-dark.svg new file mode 100644 index 00000000..203136d4 --- /dev/null +++ b/www/public/favicon-dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/www/public/favicon.svg b/www/public/favicon.svg index 9957db6e..ee4be0cf 100644 --- a/www/public/favicon.svg +++ b/www/public/favicon.svg @@ -1,4 +1,3 @@ - - - + + diff --git a/www/public/social-share.png b/www/public/social-share.png index 0fecdab943fdef83d49bc76813161c796dcc16ec..242bd1394ce380f13d61e822faab7df9941ccf70 100644 GIT binary patch literal 25713 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 f{Lgh-2n^yPUR_NS(fhD-N19%{lA@%Uc=y(Okd literal 25450 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 nm1y(7-tzwsJN4iFxN%{5K-Vgr`;s?)` diff --git a/www/src/components/Header.astro b/www/src/components/Header.astro new file mode 100644 index 00000000..516bf058 --- /dev/null +++ b/www/src/components/Header.astro @@ -0,0 +1,99 @@ +--- +import config from 'virtual:starlight/user-config'; +import type { Props } from '@astrojs/starlight/props'; + +import { Icon } from '@astrojs/starlight/components'; +import Search from 'virtual:starlight/components/Search'; +import SiteTitle from 'virtual:starlight/components/SiteTitle'; +import SocialIcons from 'virtual:starlight/components/SocialIcons'; + +import userConfig from '../../config'; + +/** + * Render the `Search` component if Pagefind is enabled or the default search component has been overridden. + */ +const shouldRenderSearch = + config.pagefind || config.components.Search !== '@astrojs/starlight/components/Search.astro'; + +--- + +
+
+ +
+
+
+
+ + {shouldRenderSearch && } +
+
+ + diff --git a/www/src/components/Lander.astro b/www/src/components/Lander.astro index 29078337..87b00553 100644 --- a/www/src/components/Lander.astro +++ b/www/src/components/Lander.astro @@ -115,6 +115,7 @@ section.top { margin-top: calc(var(--vertical-padding) / 8); font-size: var(--heading-font-size); line-height: 1.25; + text-transform: uppercase; } img { @@ -152,6 +153,10 @@ section.content { li + li { margin-top: calc(var(--vertical-padding) / 2); } + + li b { + text-transform: uppercase; + } } } diff --git a/www/src/components/PageTitle.astro b/www/src/components/PageTitle.astro new file mode 100644 index 00000000..5008883f --- /dev/null +++ b/www/src/components/PageTitle.astro @@ -0,0 +1,27 @@ +--- +import type { Props } from '@astrojs/starlight/props'; + + +const { title, description } = Astro.props.entry.data; +--- + + +

{title}

+ { description &&

{description}

} +
+ + diff --git a/www/src/components/tsdoc/InlineSection.astro b/www/src/components/tsdoc/InlineSection.astro new file mode 100644 index 00000000..64ef7114 --- /dev/null +++ b/www/src/components/tsdoc/InlineSection.astro @@ -0,0 +1 @@ +
diff --git a/www/src/components/tsdoc/NestedTitle.astro b/www/src/components/tsdoc/NestedTitle.astro new file mode 100644 index 00000000..d62a5d6f --- /dev/null +++ b/www/src/components/tsdoc/NestedTitle.astro @@ -0,0 +1,6 @@ +--- +const { id, Tag, parent } = Astro.props; +--- + + {parent} + diff --git a/www/src/components/tsdoc/Section.astro b/www/src/components/tsdoc/Section.astro new file mode 100644 index 00000000..1c898157 --- /dev/null +++ b/www/src/components/tsdoc/Section.astro @@ -0,0 +1,8 @@ +--- +interface Props { + type: "about" | "signature" | "parameters"; +} + +const { type } = Astro.props; +--- +
diff --git a/www/src/components/tsdoc/Segment.astro b/www/src/components/tsdoc/Segment.astro new file mode 100644 index 00000000..99a4aa92 --- /dev/null +++ b/www/src/components/tsdoc/Segment.astro @@ -0,0 +1,2 @@ +
+ diff --git a/www/src/content/docs/docs/dummy/markdown.mdx b/www/src/content/docs/docs/dummy/markdown.mdx new file mode 100644 index 00000000..ddecd60b --- /dev/null +++ b/www/src/content/docs/docs/dummy/markdown.mdx @@ -0,0 +1,442 @@ +--- +title: Markdown +description: A page to test all the markdown content test cases +draft: true +--- + +import { Tabs, TabItem } from '@astrojs/starlight/components'; + + +The more data a web page transfers, the more energy resources it requires. In April 2023, the median web page required a user to download more than 2,000 KB according to data from the HTTP Archive. + +[Starlight](/) builds pages that are as lightweight as possible. For example, on a first visit, a user will download less than 50 KB of compressed data — just 2.5% of the HTTP archive median. With a good caching strategy, subsequent navigations can download as little as 10 KB. + +## Typography + +Once you've added a couple of features, SST can help you connect them together. This is great because you won't need to hardcode anything in your app. + +### Links + +Here are some [links](/), [link-b](/), and [a really really long link to look at](/). + +### Paragraph 1 + +Series' creator Stephen Hillenburg first became fascinated with the ocean as a child and began developing his artistic abilities at a young age. Although these interests would not overlap for some time—the idea of drawing fish seemed boring to him—Hillenburg pursued both during college, majoring in marine biology and minoring in art. After graduating in 1984, he joined the Ocean Institute, an organization in Dana Point, California, dedicated to educating the public about marine science and maritime history. + +### Paragraph 2 + +While Hillenburg was there, his love of the ocean began to influence his artistry. He created a precursor to SpongeBob SquarePants: a comic book titled The Intertidal Zone used by the institute to teach visiting students about the animal life of tide pools. + +Lorem Ipsum is a placeholder text commonly used in the design and printing industries. Despite its widespread use, the origins of Lorem Ipsum are somewhat mysterious. Several theories exist about who may have invented the text, but no one knows. Some people believe that the ancient Greeks or Romans created Lorem Ipsum, while others think a printer in the 16th century invented it. Regardless of who created Lorem Ipsum, it has become an essential tool for designers and typesetters worldwide. + +#### Sub Heading + +A large inspiration to Hillenburg was Ween's 1997 album The Mollusk, which had a nautical and underwater theme. Hillenburg contacted the band shortly after the album's release, explaining the baseline ideas for SpongeBob SquarePants, and also requested a song from the band, which they sent on Christmas Eve. This song was "Loop de Loop", which was used in the episode "Your Shoe's Untied". + +Lorem Ipsum is a placeholder text that designers and publishers often use to fill space until the content is ready. It has been used for centuries in the printing industry, and its origins can be traced back to the 16th century when a printer named Aldus Manutius created a type specimen book that included a passage of dummy text. The text was based on the works of Cicero, a Roman philosopher and orator, and it has been used ever since as a standard placeholder text. Despite its long history, the exact origins of Lorem Ipsum are still somewhat unclear. + +The text comprises words and phrases that have been scrambled and rearranged, making it appear as if it is real text without any actual meaning. It may not have any particular significance, but it does serve a useful purpose in helping designers to visualize how their designs will look with text in place. + +#### Sub Heading + +Derek Drymon, who served as creative director for the first three seasons, has said that Hillenburg wanted to surround himself with a "team of young and hungry people." + +## Colors + +The series features "sky flowers" as a main setting material. + +Text can be **bold**, _italic_, or ~~strikethrough~~. + +Line normal text color. + +

Line secondary text color.

+ +

Line dimmed text color.

+ +Normal secondary dimmed + +## Code + +Let's test some code. + +### Inline + +You can specify lines of code inline, `var a = "some variable name";`. And it can be a part of a paragraph as well. + +If `every` other `word` is `an` inline `code` block `what` does `that` do `for` us. + +Let's **`bold`** **some** words. Also add some links; a [`short`](/) and [`a long one`](/) and a [**`bold`**](/) one. + +### Line + +```js +dateformat.i18n = require('./lang/' + l); +``` + +### Blocks + +Let's add one line above. + +Let's add another line above. + +```js +// Javascript code with syntax highlighting. +var fun = function lang(l) { + dateformat.i18n = require('./lang/' + l); + return true; +}; +``` + +Let's add one line below. + +Let's add another line below. + +### Frame + +Code blocks can be rendered inside a window-like frame. + + +```js title="my-test-file.js" +console.log('Hello World!'); +``` + +#### Bash + +```bash title="Create a new project" +npm create sst +``` + +#### Bash Without Title + +```bash +npm create sst +``` + +### Code Markers + +#### Lines + +Mark entire lines & line ranges using the `{ }` marker. + +```js {3-4} +function demo() { + // This line is not highlighted + // This line (#2) and the next one are highlighted + return 'This is line #3 of this snippet'; +} +``` + +#### Selections + +Mark selections of text using the `" "` marker or regular expressions. + +```js "Individual terms" /Even.*supported/ +// Individual terms can be highlighted, too +function demo() { + return 'Even regular expressions are supported'; +} +``` + +#### Insert Deletes + +Mark text or lines as inserted or deleted with `ins` or `del`. + +```js "return true;" ins="inserted" del="deleted" +function demo() { + console.log('These are inserted and deleted marker types'); + // The return statement uses the default marker type + return true; +} +``` + +#### Diffs + +Combine syntax highlighting with `diff`-like syntax. + +```diff lang="js" + function thisIsJavaScript() { + // This entire block gets highlighted as JavaScript, + // and we can still add diff markers to it! +- console.log('Old code to be removed') ++ console.log('New and shiny code!') + } +``` + +## Tabs + +You can display a tabbed interface using the `` and `` components. + + + Sirius, Vega, Betelgeuse + Io, Europa, Ganymede + + +### Code Blocks + +```ts title="sst.config.ts" +export default $config({ + app(input) { + return { + name: "my-sst-app", + home: "aws" + }; + }, + async run() { + const bucket = new sst.aws.Bucket("MyBucket"); + + return { + bucket: bucket.name + }; + } +}); +``` + +#### With Frame + + + + +```bash +npm create astro@latest -- --template starlight +``` + + + + +```bash +pnpm create astro --template starlight +``` + + + + +```bash +yarn create astro --template starlight +``` + + + + +#### Without Frame + + + + +```bash frame="none" +npm create astro@latest -- --template starlight +``` + + + + +```bash frame="none" +pnpm create astro --template starlight +``` + + + + +```bash frame="none" +yarn create astro --template starlight +``` + + + + +### Overflow + +```js +{ + url: { + cors: { + allowOrigins: ["https://www.example.com", "http://localhost:60905", "http://localhost:60905"] + } + } +} +``` + +## Lists + +### Ordered List + +1. First item + 1. First sub item + 2. Second sub item +2. Second item +3. Third item + +#### Multi-Line + +1. The more data a web page transfers, the more energy resources it requires. In April 2023, the median web page required a user to download more than 2,000 KB according to data from the HTTP Archive. +2. The more data a web page transfers, the more energy resources it requires. In April 2023, the median web page required a user to download more than 2,000 KB according to data from the HTTP Archive. +3. The more data a web page transfers, the more energy resources it requires. In April 2023, the median web page required a user to download more than 2,000 KB according to data from the HTTP Archive. + +#### Long List + +1. Item +1. Item +1. Item +1. Item +1. Item +1. Item +1. Item +1. Item +1. Item +1. Item +1. Item +1. Item + +#### Paragraph + +1. The more data a web page transfers, the more energy resources it requires. In April 2023, the median web page required a user to download more than 2,000 KB according to data from the HTTP Archive. + + :::tip + Make sure to [read this](/) extra resource on this topic. + ::: + + Here's some additional data on it that's relevant to the subject. + +2. The more data a web page transfers, the more energy resources it requires. In April 2023, the median web page required a user to download more than 2,000 KB according to data from the HTTP Archive. + + Here's some additional data on it that's relevant to the subject. + +3. The more data a web page transfers, the more energy resources it requires. In April 2023, the median web page required a user to download more than 2,000 KB according to data from the HTTP Archive. + +### Unordered List + +- First item + - First sub item + - Second sub item +- Second item +- Third item + +#### Multi-Line + +- The more data a web page transfers, the more energy resources it requires. In April 2023, the median web page required a user to download more than 2,000 KB according to data from the HTTP Archive. +- The more data a web page transfers, the more energy resources it requires. In April 2023, the median web page required a user to download more than 2,000 KB according to data from the HTTP Archive. +- The more data a web page transfers, the more energy resources it requires. In April 2023, the median web page required a user to download more than 2,000 KB according to data from the HTTP Archive. + +#### Paragraph + +- The more data a web page transfers, the more energy resources it requires. In April 2023, the median web page required a user to download more than 2,000 KB according to data from the HTTP Archive. + + :::tip + Make sure to [read this](/) extra resource on this topic. + ::: + + Here's some additional data on it that's relevant to the subject. + +- The more data a web page transfers, the more energy resources it requires. In April 2023, the median web page required a user to download more than 2,000 KB according to data from the HTTP Archive. +- The more data a web page transfers, the more energy resources it requires. In April 2023, the median web page required a user to download more than 2,000 KB according to data from the HTTP Archive. + +## Dividers + +Use the `---` to add a divider. It inserts an `
` tag. + +--- + +## Table + +Let's test some tables. Testing the table and the spacing between it and the neighboring paragraphs. + +| Syntax | Description | +| ----------- | ----------- | +| Header | Title | +| Paragraph | Text | +| Link | URL | + +The more data a web page transfers, the more energy resources it requires. In April 2023, the median web page required a user to download more than 2,000 KB according to data from the HTTP Archive. + +## Images + +![An illustration of planets and stars featuring the word “astro”](https://raw.githubusercontent.com/withastro/docs/main/public/default-og-image.png) + +## Headings + +You can structure content using a heading. Headings in Markdown are indicated by a number of `#` at the start of the line. + +### Heading 3 + +This is heading 3. + +#### Heading 4 + +This is heading 4. + +##### Heading 5 + +This is heading 5. + +## Blockquotes + +> This is a blockquote, which is commonly used when quoting another person or document. +> +> Blockquotes are indicated by a `>` at the start of each line. + +## Asides + +:::note +This is a note. +::: + +:::tip +This is a tip. By specifying the ZipFile property within the Code property, specify `index.function_name` as the handler. +::: + +:::caution +This is a caution. +::: + +:::danger +This is a danger. +::: + +### With Links + +:::tip +Here's a website you should probably check out — [Google](/) +::: + +:::note +Here's a website with code should probably check out — [`Google`](/) +::: + +### Paragraphs + +Let's add one line above. + +Let's add another line above. The more data a web page transfers, the more energy resources it requires. In April 2023, the median web page required a user to download more than 2,000 KB according to data from the HTTP Archive. + +:::caution +This is a caution aside that we can compare the font sizes to the blocks around it. +::: + +:::tip +This is a tip aside to test what back to back aside blocks look like. +::: + +Let's add one line below. Let's make this a paragraph. The more data a web page transfers, the more energy resources it requires. In April 2023, the median web page required a user to download more than 2,000 KB according to data from the HTTP Archive. + +Let's add another line below. + +### Custom Titles + +:::tip[Did you know?] +Astro helps you build faster websites with [“Islands Architecture”](https://docs.astro.build/en/concepts/islands/). +::: + +## Extra + +## Sections + +## At The + +## Bottom + +## For The + +## Right Sidebar + +## Overflow + + diff --git a/www/src/content/docs/docs/dummy/tsdoc.mdx b/www/src/content/docs/docs/dummy/tsdoc.mdx new file mode 100644 index 00000000..d5ada3bc --- /dev/null +++ b/www/src/content/docs/docs/dummy/tsdoc.mdx @@ -0,0 +1,430 @@ +--- +title: TSDoc +description: A page to test all the TSDoc cases. +draft: true +--- + +import Segment from '../../../../components/tsdoc/Segment.astro'; +import Section from '../../../../components/tsdoc/Section.astro'; +import NestedTitle from '../../../../components/tsdoc/NestedTitle.astro'; +import InlineSection from '../../../../components/tsdoc/InlineSection.astro'; + +
+ +
+Returns a locale object for the specified definition with `locale.format` and `locale.formatPrefix` methods. + +This section has more from about the `FormatSpecifier`. + +:::note +You can also add notes. By specifying the ZipFile property within the Code property, specify `index.function_name` as the handler. +::: + +#### Simple Example + +Here's a simple example. + +```ts +new FormatSpecifier("param1"); +``` + +#### Complicated Example + +Here's a more complicated example. + +```ts +new FormatSpecifier("param1", "param2", "param3"); +``` + +For more info [refer to our other docs](/). +
+ +--- + +## Constructor + + +
+```ts +new FormatSpecifier(specifier, addend?): FormatSpecifier +``` +
+ +
+#### Parameters + +-

specifier [FormatSpecifierObject](#FormatSpecifierObject)

+ + A specifier object. + + +-

addend? number | string & boolean

+ + A number to add. +
+ + +**Returns** [FormatSpecifier](#FormatSpecifier)[] | null + +
+ +## Methods + +### noop + + +
+```ts +noop(): void +``` +
+ +This function doesn't do anything. +
+ +### simpleArgs + + +
+```ts +simpleArgs(true, false ,true): void +``` +
+ +This function takes some simple args. + +
+#### Parameters + +-

isTrue boolean

+-

isFalse? boolean

+-

isAny? boolean

+
+ +
+ +### fullArgs + + +
+```ts +fullArgs(true, false ,true): FormatSpecifier +``` +
+ +This function takes full args. + +
+ +**Type** Object + + +-

prop1? boolean

+ + + **Default** true + + + A simple prop to add. + +-

prop2? x86_64 | arm_64

+ + + **Default** Uses x86 by default `x86_64`. But this description of the default is really long and runs more than one single line. + + + A complex prop to add with a description that is longer than one line. This matters because + + A simple example. + + ```ts + { prop2: "x86_64" } + ``` + + A more complicated multi-line example. + + ```ts + { + prop2: "x86_64" + } + ``` + +-

prop3? [FormatSpecifier](#FormatSpecifier)[] | null

+ + + **Default** true + + + Just pass something in. + + ```ts + { + prop2: "x86_64" + } + ``` +
+ + +**Returns** [FormatSpecifier](#FormatSpecifier)[] | null + + +Here's an example. + +```diff lang="ts" + function demo() { ++ return fullArgs(true, false ,true); + } +``` + +And another example. + +```ts {4} +const a = 1; +const b = a + 1; + +fullArgs(true, false ,true); +``` + +
+ +## Properties + +### primitiveProp + + +The ARN of the resource. + + +**Type** x86_64 | arm_64 + + + +### objectProp + + +A simple object prop. + +
+ +**Type** Object + + +-

resource1 string

+-

resource2 [FormatSpecifier](#FormatSpecifier)

+
+
+ +### objectPropNested + + +A nested object prop. + +
+ +**Type** Object + +-

[resource1](#) Output<Object>

+ -

[objectKey1](#) Object

+ -

[objectKey11](#) Object[]

+ -

[key111](#) boolean

+ -

[objectKey112](#) Object

+ -

[key1111](#) string

+ -

[key1112](#) string

+ -

[key2](#) boolean

+-

[resource2](#) [FormatSpecifier](#FormatSpecifier)

+
+ +
+ +objectKey1 + + +A simple object prop. + + +**Type** Output<Object> + + + +objectKey1 + + +A simple object prop. + + +**Type** Object + + + +objectKey11 + + +A simple object prop. + + +**Type** Object[] + + + +objectKey112 + + +A simple object prop. + + +**Type** Object + + + +key1111 + + +A simple prop. + + +**Type** string + + + +## DummyArgs + +### simpleArg + + +The CPU architecture of the lambda function. + + +**Type** x86_64 | arm_64 + + + +**Default** Uses x86 by default `x86_64`. But this description of the default is really long and runs more than one single line. + + +For example, + +```ts +new Function(stack, "Function", { + architecture: "arm_64", +}) +``` + + +### objectPropSimple? + + +A prop that takes an object with simple keys. + +
+ +**Type** Object + + +-

isTrue boolean

+-

isFalse? boolean

+-

isAny? boolean

+
+ + +**Default** undefined + + +```ts +new Function(stack, "Function", { + architecture: "arm_64", +}) +``` +
+ +### objectPropFull? + + +A prop that takes an object with full keys. + +
+ +**Type** Object + + +-

prop1? boolean

+ + + **Default** true + + + A simple prop to add. + + ```ts + { + prop1: true + } + ``` + +-

prop2? x86_64 | arm_64

+ + + **Default** Uses x86 by default `x86_64`. But this description of the default is really long and runs more than one single line. + + + A complex prop to add with a description that is longer than one line. This matters because + + A simple example. + + ```ts + { prop2: "x86_64" } + ``` + + A more complicated multi-line example. + + ```ts + { + prop2: "x86_64" + } + ``` + +-

prop3? [FormatSpecifier](#FormatSpecifier)[] | null

+ + + **Default** true + + + Just pass something in. + + ```ts + { + prop2: "x86_64" + } + ``` +
+ + +**Default** undefined + + +```ts +new Function(stack, "Function", { + architecture: "arm_64", +}) +``` +
+ +### transform? + + +[Transform](/docs/transform/) how this component is created. + +
+ +**Type** Object + + +-

resource1? [FormatSpecifier](#FormatSpecifier) | (args: [FormatSpecifier](#FormatSpecifier) => [FormatSpecifier](#FormatSpecifier) | void)

+-

resource1? [FormatSpecifier](#FormatSpecifier) | (args: [FormatSpecifier](#FormatSpecifier) => [FormatSpecifier](#FormatSpecifier) | void)

+
+ + +**Default** undefined + +
+ +
diff --git a/www/src/content/docs/docs/index.mdx b/www/src/content/docs/docs/index.mdx new file mode 100644 index 00000000..96c8a157 --- /dev/null +++ b/www/src/content/docs/docs/index.mdx @@ -0,0 +1,4 @@ +--- +title: Intro +description: Introduction to OpenAuth. +--- diff --git a/www/src/custom.css b/www/src/custom.css index 26dc4b60..233f146e 100644 --- a/www/src/custom.css +++ b/www/src/custom.css @@ -1,24 +1,294 @@ :root { --__sl-font: 'IBM Plex Mono', var(--sl-font-system-mono); + + --sl-text-2xs: 0.75rem; /* 12px */ + --sl-text-xs: 0.8125rem; /* 13px */ + --sl-text-sm: 0.875rem; /* 14px */ + --sl-text-base: 1rem; /* 16px */ + --sl-text-lg: 1.125rem; /* 18px */ + --sl-text-xl: 1.25rem; /* 20px */ + --sl-text-2xl: 1.375rem; /* 22px */ + --sl-text-3xl: 1.5625rem; /* 25px */ + --sl-text-4xl: 1.75rem; /* 30px */ + --sl-text-5xl: 2.5rem; /* 40px */ + --sl-text-6xl: 3.25rem; /* 52px */ } -:root[data-has-hero] { - header.header { - display: none; - } - .main-frame { - padding-top: 0; +/* Dark mode */ +:root, +::backdrop { + --sl-color-text-secondary: var(--sl-color-gray-2); + --sl-color-text-dimmed: var(--sl-color-gray-3); +} +/* Light mode */ +:root[data-theme='light'], +[data-theme='light'] ::backdrop { + --sl-color-text-secondary: var(--sl-color-gray-3); + --sl-color-text-dimmed: var(--sl-color-gray-4); +} + +body { + text-underline-offset: 0.1875rem; +} - .main-pane > main { - padding: 0; - } +a { + color: var(--sl-color-text); +} + +/** + * Header + */ +body > .page > header { + background-color: var(--sl-color-black); + border-color: var(--sl-color-white); + +} +@media (min-width: 50rem) { + body > .page > header, + :root[data-has-sidebar] body > .page > header { + padding-inline-start: var(--sl-nav-pad-y); + padding-inline-end: var(--sl-nav-pad-y); } - main > .content-panel .sl-markdown-content { - margin-top: 0; +} +body > .page > header a.site-title img { + height: 1.5rem; +} +@media (max-width: 30rem) { + body > .page > header a.site-title img { + height: 1.625rem; } } +/* Search button */ +body > .page > header button[data-open-modal] { + border-radius: 0; + border: none; + height: 2.25rem; + padding: 0 0 0 0.5rem; + color: var(--sl-color-text-secondary); + gap: 0.4375rem; + background-color: transparent; + line-height: normal; + text-transform: uppercase; +} +body > .page > header button[data-open-modal] span { + text-decoration: underline; +} +body > .page > header button[data-open-modal] svg { + display: none; +} +body > .page > header button[data-open-modal] > kbd { + background-color: transparent; + padding-inline-start: 0; + padding-inline-end: 0; + letter-spacing: -1px; +} +body > .page > header button[data-open-modal] > kbd kbd { + line-height: 1; + color: var(--sl-color-text-dimmed); +} +/* Mobile nav button */ +body > .page > nav starlight-menu-button button { + background-color: transparent; + color: var(--color-text); + box-shadow: none; +} +[data-theme="light"] starlight-menu-button[aria-expanded=true] button { + background-color: var(--sl-color-gray-6); +} +[data-theme="dark"] starlight-menu-button[aria-expanded=true] button { + background-color: var(--sl-color-gray-6); +} +starlight-theme-select { + display: none; +} -a { +/** + * Content + */ +body > .page > .main-frame .main-pane > main > .content-panel + .content-panel { + border-top: 1px solid var(--sl-color-white); +} + + +/** + * Sidebar + */ +nav.sidebar .sidebar-pane { + border-color: var(--sl-color-white); + padding-top: 0; + background-color: var(--sl-color-bg); +} +nav.sidebar .sidebar-pane > .sidebar-content { + scrollbar-width: thin; +} +nav.sidebar .sidebar-pane > .sidebar-content::-webkit-scrollbar { + display: none; +} +nav.sidebar ul > li { + border-inline-start: none; +} +nav.sidebar ul.top-level > li > a, +nav.sidebar ul.top-level > li > details > summary, +nav.sidebar ul.top-level > li > details > ul > li { + padding-inline-start: 0; + margin-inline-start: 0; +} +nav.sidebar ul.top-level ul { +} +nav.sidebar ul > li + li { + margin-top: 0.25rem; +} +nav.sidebar ul.top-level > li > a { +} +nav.sidebar ul.top-level > li+li:has(> details) { + margin-top: 0.5rem; + margin-bottom: 0.5rem; +} +nav.sidebar summary { + padding-bottom: 0; + margin-bottom: 0.5rem; +} +nav.sidebar a { + font-size: var(--sl-text-sm); +} +nav.sidebar a.large, +nav.sidebar span.large { + font-size: var(--sl-text-sm); + font-weight: 400; + color: var(--sl-color-gray-2); +} +nav.sidebar ul.top-level > li > details > summary .group-label > span { + font-weight: 600; + text-transform: uppercase; + font-family: var(--__sl-font-mono); + font-size: var(--sl-text-code-sm); + letter-spacing: 0.5px; + color: var(--sl-color-white); +} +nav.sidebar summary svg.caret { + color: var(--sl-color-text-dimmed); +} +nav.sidebar a[aria-current=page], +nav.sidebar a[aria-current=page]:hover, +nav.sidebar a[aria-current=page]:focus { + font-weight: 600; color: var(--sl-color-text); - text-underline-offset: 0.1875rem; + background-color: transparent; +} + +/** + * Right sidebar + */ +@media (min-width: 72rem) { + .right-sidebar { + border-color: var(--sl-color-white); + } +} +.right-sidebar-panel h2 { + /* Margin to align with main sidebar */ + margin-top: 0.3125rem; + font-weight: 600; + color: var(--color-text-dimmed); + text-transform: uppercase; + font-size: var(--sl-text-code-sm); + line-height: 1.4; + letter-spacing: -0.5px; +} + +.right-sidebar-panel a { + --pad-inline: 0px; +} +.right-sidebar-panel a { + color: var(--color-text-dimmed); +} +.right-sidebar-panel a:hover { + color: var(--sl-color-text); +} +.right-sidebar-panel a[aria-current=true], +.right-sidebar-panel a[aria-current=true]:hover, +.right-sidebar-panel a[aria-current=true]:focus { + font-weight: 600; + background-color: transparent; + color: var(--sl-color-text); + font-weight: normal; +} +/* Mobile nav */ +mobile-starlight-toc nav { + backdrop-filter: blur(8px); + -webkit-backdrop-filter: blur(8px); + border-top: none; + background-color: var(--sl-color-bg); +} +mobile-starlight-toc nav summary { + gap: 0.75rem; + border-bottom: 1px solid var(--sl-color-white); +} +mobile-starlight-toc nav summary .toggle { + border-radius: var(--border-radius); + height: 2rem; + background-color: transparent; + color: var(--color-text); + border: none; + text-decoration: underline; +} +mobile-starlight-toc nav summary .toggle:hover { + color: var(--sl-color-text); +} +mobile-starlight-toc nav summary .toggle svg { + color: var(--sl-color-text-dimmed); +} +mobile-starlight-toc nav .dropdown { + border: none; + background-color: transparent; + border-bottom: 1px solid var(--sl-color-hairline); +} +mobile-starlight-toc nav .dropdown a { + border-color: var(--divider-color); +} +mobile-starlight-toc nav .dropdown a[aria-current=true] { + font-weight: 500; +} +mobile-starlight-toc nav .dropdown a[aria-current=true]::after { + background-color: var(--sl-color-text-dimmed); +} + +/** + * Search dialog + */ +dialog[aria-label='Search'] { + border: none; + border-radius: 0; + border: 1px solid var(--sl-color-white); + background-color: var(--sl-color-bg); + box-shadow: var(--sl-shadow-md); +} +dialog[aria-label='Search'][open] { + animation: fadeInScaleUp 0.2s ease forwards; +} +dialog[aria-label='Search']::backdrop { + backdrop-filter: blur(2px); + -webkit-backdrop-filter: blur(2px); + animation: fadeInBackdrop 0.2s ease forwards; +} +@media (prefers-color-scheme: light) { + dialog[aria-label='Search']::backdrop { + } +} +@keyframes fadeInScaleUp { + from { + opacity: 0; + transform: scale(0.9); + } + to { + opacity: 1; + transform: scale(1); + } +} +@keyframes fadeInBackdrop { + from { + opacity: 0; + } + to { + opacity: 1; + } } diff --git a/www/src/styles/lander.css b/www/src/styles/lander.css new file mode 100644 index 00000000..078ade92 --- /dev/null +++ b/www/src/styles/lander.css @@ -0,0 +1,15 @@ +:root[data-has-hero] { + header.header { + display: none; + } + .main-frame { + padding-top: 0; + + .main-pane > main { + padding: 0; + } + } + main > .content-panel .sl-markdown-content { + margin-top: 0; + } +} diff --git a/www/src/styles/markdown.css b/www/src/styles/markdown.css new file mode 100644 index 00000000..c84776ba --- /dev/null +++ b/www/src/styles/markdown.css @@ -0,0 +1,246 @@ +/** + * Links + */ +.sl-markdown-content a:not(:where(.not-content *)), +.sl-markdown-content a:not(:where(.not-content *)) code { + color: var(--sl-color-text); + text-underline-offset: 0.1875rem; + text-decoration: underline; +} +.sl-markdown-content a:hover:not(:where(.not-content *)) { + color: var(--sl-color-text); +} + +/** + * Blockquotes + */ + .sl-markdown-content blockquote:not(:where(.not-content *)) { + border-inline-start: 2px solid var(--sl-color-hairline); + padding-inline-start: 1rem; + font-size: var(--sl-text-h5); + color: var(--color-text-secondary); +} + +/** + * Inline code + */ +.sl-markdown-content code:not(:where(.not-content *)) { + padding: 0; + background: none; + font-weight: 600; + font-size: var(--sl-text-sm); + color: var(--sl-color-white); +} +.sl-markdown-content strong code:not(:where(.not-content *)) { + font-weight: 700; +} +.sl-markdown-content code:not(:where(.not-content *)):before, +.sl-markdown-content code:not(:where(.not-content *)):after { + content: '`'; +} + +/** + * Code blocks + */ +.sl-markdown-content .expressive-code .frame pre { +} +.sl-markdown-content .expressive-code .frame pre code { +} +/* Plain blocks */ +.sl-markdown-content .expressive-code .frame:not(.has-title):not(.is-terminal) pre { + border-color: var(--sl-color-border-code); + background-color: transparent; +} +.sl-markdown-content .expressive-code .copy { + inset-block-start: calc(var(--ec-brdWd) + var(--button-spacing) + 0.1rem); +} +.sl-markdown-content .expressive-code .copy .feedback { + --tooltip-bg: var(--sl-color-gray-3); + + font-size: 0.75rem; + line-height: 1; + padding: 0.375rem 0.5rem; + text-transform: uppercase; + letter-spacing: 0.5px; +} +.sl-markdown-content .expressive-code .copy button { + width: 2rem; + height: 2rem; + border-radius: 0; + background-color: var(--sl-color-bg); + + &::before { + opacity: 1; + border-color: var(--sl-color-white); + } + + & div { + background-color: transparent; + } +} +@media (hover: hover) { + .sl-markdown-content .expressive-code .frame:hover .copy button:not(:hover), + .sl-markdown-content .expressive-code .frame:focus-within :focus-visible ~ .copy button:not(:hover), + .sl-markdown-content .expressive-code .frame .copy .feedback.show ~ button:not(:hover) { + opacity: 1; + } +} +/* Frames */ +.sl-markdown-content .expressive-code .frame.has-title:not(.is-terminal) .header { + background: transparent; + border-bottom: 1px solid var(--sl-color-white); + border-radius: 0; +} +.sl-markdown-content .expressive-code .frame.has-title:not(.is-terminal) .header:before { + border-color: var(--sl-color-white); +} +.sl-markdown-content .expressive-code .frame.has-title:not(.is-terminal) .title { + border-width: 1px 1px 0; + border-style: solid; + font-size: var(--sl-text-sm); + background: transparent; + border-radius: 0; + border-color: var(--sl-color-white) var(--sl-color-white) transparent; +} +.sl-markdown-content .expressive-code .frame.has-title:not(.is-terminal) .title:after { + border: none; +} +.sl-markdown-content .expressive-code .frame pre { + background: transparent; +} +.sl-markdown-content .expressive-code .frame.has-title pre { + border-color: var(--sl-color-white); +} +/* Terminal */ +.sl-markdown-content .expressive-code .frame.is-terminal .header { + font-size: var(--sl-text-sm); + font-weight: normal; + border-radius: 0; + background: transparent; + border-color: var(--sl-color-white); +} +.sl-markdown-content .expressive-code .frame.is-terminal .header:after { + border-color: var(--sl-color-white); +} +.sl-markdown-content .expressive-code .frame.is-terminal pre { + border-color: var(--sl-color-white); +} +/* Code markers */ +:root[data-theme='light'] .expressive-code .frame, +.expressive-code[data-theme='light'] .frame { + --ec-tm-markBg: #00000011; + --ec-tm-insBg: #90C87E72; + --ec-tm-delBg: #FF9C8F7F; +} +:root[data-theme='dark'] .expressive-code .frame, +.expressive-code[data-theme='dark'] .frame { + --ec-tm-markBg: #FFFFFF0F; + --ec-tm-insBg: #1E561572; + --ec-tm-delBg: #862D2766; +} +.sl-markdown-content .expressive-code .ec-line.mark > .code, +.sl-markdown-content .expressive-code .ec-line.ins > .code, +.sl-markdown-content .expressive-code .ec-line.del > .code { + border-inline-start-color: transparent; +} +.sl-markdown-content .expressive-code .ec-line mark:before, +.sl-markdown-content .expressive-code .ec-line ins:before, +.sl-markdown-content .expressive-code .ec-line del:before { + border-width: 0px; +} + +/** + * Tabs + */ +.sl-markdown-content [role='tablist'] { + border-color: var(--sl-color-hairline); +} +.sl-markdown-content .tab > [role='tab'] { + font-weight: 600; + color: var(--sl-color-text-dimmed); + border-color: var(--sl-color-hairline); + text-transform: uppercase; + letter-spacing: 0.5px; + font-size: var(--sl-text-code-sm); + padding-block-end: 0.375rem; +} +.sl-markdown-content .tab > [role='tab'][aria-selected='true'] { + color: var(--sl-color-white); + border-color: var(--sl-color-white); +} + +/** + * Tables + */ +.sl-markdown-content thead th:not(:where(.not-content *)) { + border-bottom: 1px solid var(--sl-color-white); +} +.sl-markdown-content :is(th):not(:where(.not-content *)) { + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + font-size: var(--sl-text-code-sm); + text-align: left; + padding-block-start: 0; +} +.sl-markdown-content tbody > tr td:not(:where(.not-content *)) { + font-size: var(--sl-text-sm); + border-bottom: 1px solid var(--sl-color-hairline); +} +.sl-markdown-content :is(td):not(:where(.not-content *)) { + padding-block: 0.5rem; + border: none; +} +.sl-markdown-content tr:nth-child(2n):not(:where(.not-content *)) { + background-color: transparent; +} + +/** + * Asides + */ +.starlight-aside { + border: none; + border-radius: 0; + padding: 0.9375rem 1rem 0.875rem; +} +.starlight-aside__title { + text-transform: uppercase; + font-size: var(--sl-text-code-sm); + font-weight: 700; + letter-spacing: 0.5px; + gap: 0.4rem; +} +.starlight-aside__icon { + font-size: 0.875rem; + width: 0.8125rem; + height: 0.8125rem; + opacity: 0.9; +} +.starlight-aside__title + .starlight-aside__content { + margin-top: 0.75rem; + font-size: var(--sl-text-sm); +} +.sl-markdown-content .starlight-aside__content code:not(:where(.not-content *)) { + background-color: transparent; + font-size: var(--sl-text-xs); +} +.custom-aside-video .starlight-aside__title { + font-weight: normal; + font-size: var(--sl-text-sm); + text-transform: none; + letter-spacing: 0; + line-height: normal; + gap: 0.5rem; +} +.custom-aside-video .starlight-aside__title a { + text-decoration: none; + display: inline-flex; + align-items: center; + justify-content: center; +} +.custom-aside-video .starlight-aside__title a:hover { + text-decoration: underline; +} +.custom-aside-video .starlight-aside__title a svg { + opacity: 0.8; +} diff --git a/www/src/styles/tsdoc.css b/www/src/styles/tsdoc.css new file mode 100644 index 00000000..90107c87 --- /dev/null +++ b/www/src/styles/tsdoc.css @@ -0,0 +1,76 @@ +/** + * Segments + */ +.sl-markdown-content > .tsdoc div.segment:not(:last-child):after { + content: ''; + display: block; + height: 1px; + background: var(--sl-color-hairline); + margin-top: 1rem; +} + +/** + * Headings + */ +.sl-markdown-content > .tsdoc section h4:not(:where(.not-content *)) { + font-size: var(--sl-text-h5); +} +.sl-markdown-content > .tsdoc section.inline p:first-child strong:not(:where(.not-content *)) { + margin-right: var(--tsdoc-key-margin-right); + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + color: var(--sl-color-white); +} + +/** + * Nested Title + */ +.sl-markdown-content > .tsdoc :is(h4, h5).nested a { + text-decoration: none; +} +.sl-markdown-content > .tsdoc :is(h4, h5).nested span.parent { + font-weight: 400; + color: var(--sl-color-text-secondary); +} +.sl-markdown-content > .tsdoc h4.nested span.parent { + font-size: calc(var(--sl-text-h4) - 0.0625rem); +} + +/** + * Keys & Values + */ +.sl-markdown-content > .tsdoc section code.key:before, +.sl-markdown-content > .tsdoc section code.type:before, +.sl-markdown-content > .tsdoc section code.method:before, +.sl-markdown-content > .tsdoc section code.symbol:before, +.sl-markdown-content > .tsdoc section code.primitive:before, +.sl-markdown-content > .tsdoc section code.key:after, +.sl-markdown-content > .tsdoc section code.type:after, +.sl-markdown-content > .tsdoc section code.method:after, +.sl-markdown-content > .tsdoc section code.symbol:after, +.sl-markdown-content > .tsdoc section code.primitive:after { + content: ''; +} +.sl-markdown-content > .tsdoc section code.key { + margin-right: var(--tsdoc-key-margin-right); +} +.sl-markdown-content > .tsdoc section code.key, +.sl-markdown-content > .tsdoc section code.primitive { + color: var(--sl-color-text); +} +.sl-markdown-content > .tsdoc section code.symbol { + color: var(--sl-color-text-secondary); +} +.sl-markdown-content > .tsdoc section code.type, +.sl-markdown-content > .tsdoc section code.symbol, +.sl-markdown-content > .tsdoc section code.primitive { + font-weight: 400; +} +.sl-markdown-content > .tsdoc section code.primitive { + font-style: italic; +} + +.sl-markdown-content > .tsdoc section span.dimmed { + color: var(--sl-color-text-secondary); +} From 2403a97817d0933ba99feb6fb92650d16763f285 Mon Sep 17 00:00:00 2001 From: Jay V Date: Wed, 18 Dec 2024 17:03:35 -0500 Subject: [PATCH 02/21] styling footer --- www/astro.config.mjs | 4 ++ www/src/components/Footer.astro | 117 ++++++++++++++++++++++++++++++-- www/src/components/Lander.astro | 10 ++- 3 files changed, 125 insertions(+), 6 deletions(-) diff --git a/www/astro.config.mjs b/www/astro.config.mjs index 73b25a89..335ecc9a 100644 --- a/www/astro.config.mjs +++ b/www/astro.config.mjs @@ -49,6 +49,10 @@ export default defineConfig({ github: config.github, discord: config.discord, }, + lastUpdated: true, + editLink: { + baseUrl: `${config.github}/edit/master/www/`, + }, components: { Hero: "./src/components/Hero.astro", Head: "./src/components/Head.astro", diff --git a/www/src/components/Footer.astro b/www/src/components/Footer.astro index e0ea6858..864c6e72 100644 --- a/www/src/components/Footer.astro +++ b/www/src/components/Footer.astro @@ -1,10 +1,119 @@ --- -import Default from '@astrojs/starlight/components/Footer.astro'; +import userConfig from 'virtual:starlight/user-config'; +import type { Props } from '@astrojs/starlight/props'; +import { Icon } from '@astrojs/starlight/components'; +import config from '../../config'; +const slug = Astro.props.entry.slug; +const { lang, lastUpdated } = Astro.props; const { template } = Astro.props.entry.data; +const editLink = userConfig.editLink.baseUrl; + +let editUrl = Astro.props.editUrl; + +/** +// Change path for component source files +if (slug.startsWith("docs/component/")) { + editUrl = new URL( + `platform/src/components/${slug.replace("docs/component/", "")}.ts`, editLink + ); +} +// Change path for reference source files +else if (slug === "docs/reference/config") { + editUrl = new URL("platform/src/config.ts", editLink); +} +else if (slug === "docs/reference/global") { + editUrl = new URL("platform/src/global.d.ts", editLink); +} +else if (slug === "docs/reference/cli") { + editUrl = new URL("cmd/sst/main.go", editLink); +} +else if (slug === "docs/common-errors") { + editUrl = new URL("pkg/project/stack.go", editLink); +} +else if (slug === "docs/examples") { + editUrl = new URL("examples", editLink); +} +**/ --- -{ template === "splash" - ? null - : +{ + template === "doc" && ( + + ) } +{ template === "splash" && null } + + diff --git a/www/src/components/Lander.astro b/www/src/components/Lander.astro index 87b00553..efd124f3 100644 --- a/www/src/components/Lander.astro +++ b/www/src/components/Lander.astro @@ -45,10 +45,10 @@ if (image) { Learn more @@ -138,6 +138,12 @@ section.cta { padding: calc(var(--padding) / 2) 0.5rem; } + @media (max-width: 30rem) { + & > div { + padding-bottom: calc(var(--padding) / 2 + 4px); + } + } + & > div + div { border-left: 2px solid var(--sl-color-white); } From 1aaf417987b321f1ff5f7fc03823e144fa47497b Mon Sep 17 00:00:00 2001 From: Jay V Date: Wed, 18 Dec 2024 17:42:01 -0500 Subject: [PATCH 03/21] heading links --- README.md | 2 +- www/astro.config.mjs | 14 + www/bun.lockb | Bin 215920 -> 218228 bytes www/package.json | 2 + www/src/components/Lander.astro | 18 -- www/src/content/docs/docs/index.mdx | 314 ++++++++++++++++++++- www/src/content/docs/docs/themes-dark.png | Bin 0 -> 223346 bytes www/src/content/docs/docs/themes-light.png | Bin 0 -> 314735 bytes www/src/custom.css | 3 + www/src/styles/headings.css | 15 + 10 files changed, 348 insertions(+), 20 deletions(-) create mode 100644 www/src/content/docs/docs/themes-dark.png create mode 100644 www/src/content/docs/docs/themes-light.png create mode 100644 www/src/styles/headings.css diff --git a/README.md b/README.md index 3d0480f9..1b2e5e73 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ - OpenAuth logo + OpenAuth themes ## Quick Start diff --git a/www/astro.config.mjs b/www/astro.config.mjs index 335ecc9a..aea07eb6 100644 --- a/www/astro.config.mjs +++ b/www/astro.config.mjs @@ -1,5 +1,7 @@ import { defineConfig } from "astro/config"; import starlight from "@astrojs/starlight"; +import { rehypeHeadingIds } from "@astrojs/markdown-remark"; +import rehypeAutolinkHeadings from "rehype-autolink-headings"; import config from "./config"; // https://astro.build/config @@ -70,6 +72,7 @@ export default defineConfig({ "./src/styles/tsdoc.css", "./src/styles/lander.css", "./src/styles/markdown.css", + "./src/styles/headings.css", ], sidebar: [ { label: "Intro", slug: "docs" }, @@ -120,4 +123,15 @@ export default defineConfig({ ], }), ], + markdown: { + rehypePlugins: [ + rehypeHeadingIds, + [ + rehypeAutolinkHeadings, + { + behavior: 'wrap', + }, + ], + ], + }, }); diff --git a/www/bun.lockb b/www/bun.lockb index 378671153e93355f9ea9a9be79676642fb956771..e1496abfd9b5e9a956425f50eea88ad4f2141fd1 100755 GIT binary patch delta 42493 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 JBBv;e{~wlo+rIz+ delta 41287 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 nqMeHVniu^)HyKkp diff --git a/www/package.json b/www/package.json index 61125f80..33815e2f 100644 --- a/www/package.json +++ b/www/package.json @@ -10,9 +10,11 @@ "astro": "astro" }, "dependencies": { + "@astrojs/markdown-remark": "^6.0.1", "@astrojs/starlight": "^0.29.2", "@fontsource/ibm-plex-mono": "^5.1.0", "astro": "^4.16.10", + "rehype-autolink-headings": "^7.1.0", "sharp": "^0.32.5" } } diff --git a/www/src/components/Lander.astro b/www/src/components/Lander.astro index efd124f3..458e6131 100644 --- a/www/src/components/Lander.astro +++ b/www/src/components/Lander.astro @@ -61,24 +61,6 @@ if (image) { -
-

While there are many open source solutions for auth, almost all of them are libraries that are meant to be embedded into a single application. Centralized auth servers typically are delivered as SaaS services - eg Auth0 or Clerk.

- -

OpenAuth instead is a centralized auth server that runs on your own infrastructure and has been designed for ease of self hosting. It can be used to authenticate all of your applications - web apps, mobile apps, internal admin tools, etc.

- -

It adheres mostly to OAuth 2.0 specifications - which means anything that can speak OAuth can use it to receive access and refresh tokens. When a client initiates an authorization flow, OpenAuth will hand off to one of the configured adapters - this can be third party identity providers like Google, GitHub, etc or built in flows like email/password or pin code.

- -

Because it follows these specifications it can even be used to issue credentials for third party applications - allowing you to implement "login with myapp" flows.

- -

OpenAuth very intentionally does not attempt to solve user management. We've found that this is a very difficult problem given the wide range of databases and drivers that are used in the JS ecosystem. Additionally it's quite hard to build data abstractions that work for every use case. Instead, once a user has identified themselves OpenAuth will invoke a callback where you can implement your own user lookup/creation logic.

- -

While OpenAuth tries to be mostly stateless, it does need to store a minimal amount of data (refresh tokens, password hashes, etc). However this has been reduced to a simple KV store with various implementations for zero overhead systems like Cloudflare KV and DynamoDB. You should never need to directly access any data that is stored in there.

- -

There is also a themeable UI that you can use to get going without implementing any designs yourself. This is built on top of a lower level system so you can copy paste the default UI and tweak it or opt out entirely and implement your own.

- -

Finally, OpenAuth is created by the maintainers of SST which is a tool to manage all the infrastructure for your app. It contains components for OpenAuth that make deploying it to AWS or Cloudflare as simple as it can get.

-
-