andesine 0.1.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/README.md +27 -8
- package/dist/cli.js +1611 -121
- package/dist/cli.js.map +1 -1
- package/dist/config.schema.json +20 -3
- package/dist/templates/pages/.env.example +5 -0
- package/dist/templates/pages/AGENTS.md +79 -0
- package/dist/templates/pages/LICENSE +21 -0
- package/dist/templates/pages/README.md +72 -0
- package/dist/templates/pages/andesine.config.ts +39 -0
- package/dist/templates/pages/astro.config.ts +23 -0
- package/dist/templates/pages/gitignore +13 -0
- package/dist/templates/pages/package.template.json +45 -0
- package/dist/templates/pages/src/api/openapi.yaml +246 -0
- package/dist/templates/pages/src/assets/andesine.svg +1 -0
- package/dist/templates/pages/src/assets/andesine.ts +6 -0
- package/dist/templates/pages/src/assets/favicon.svg +13 -0
- package/dist/templates/pages/src/assets/social-dots.svg +14 -0
- package/dist/templates/pages/src/components/content/callout.astro +26 -0
- package/dist/templates/pages/src/components/content/card-grid.astro +1 -0
- package/dist/templates/pages/src/components/content/card.astro +31 -0
- package/dist/templates/pages/src/components/content/code-block.astro +34 -0
- package/dist/templates/pages/src/components/content/code-group.astro +13 -0
- package/dist/templates/pages/src/components/content/copy-button.tsx +53 -0
- package/dist/templates/pages/src/components/content/disclosure.astro +26 -0
- package/dist/templates/pages/src/components/content/figure.astro +10 -0
- package/dist/templates/pages/src/components/content/file-tree.astro +47 -0
- package/dist/templates/pages/src/components/content/index.ts +30 -0
- package/dist/templates/pages/src/components/content/steps.astro +16 -0
- package/dist/templates/pages/src/components/content/tab.astro +7 -0
- package/dist/templates/pages/src/components/content/tabs.astro +15 -0
- package/dist/templates/pages/src/components/content/tabs.tsx +99 -0
- package/dist/templates/pages/src/components/effects/page-scroll-shadow.tsx +27 -0
- package/dist/templates/pages/src/components/effects/page-scrollbar.tsx +35 -0
- package/dist/templates/pages/src/components/layout/call-to-action.tsx +28 -0
- package/dist/templates/pages/src/components/layout/footer.astro +44 -0
- package/dist/templates/pages/src/components/layout/group-label.tsx +34 -0
- package/dist/templates/pages/src/components/layout/header.astro +53 -0
- package/dist/templates/pages/src/components/layout/mobile-navigation.tsx +51 -0
- package/dist/templates/pages/src/components/layout/navigation-links.tsx +57 -0
- package/dist/templates/pages/src/components/layout/navigation-tree.tsx +138 -0
- package/dist/templates/pages/src/components/layout/outline.tsx +162 -0
- package/dist/templates/pages/src/components/layout/page-actions.tsx +87 -0
- package/dist/templates/pages/src/components/layout/powered-by.tsx +29 -0
- package/dist/templates/pages/src/components/layout/section-tabs.tsx +83 -0
- package/dist/templates/pages/src/components/layout/sidebar.tsx +65 -0
- package/dist/templates/pages/src/components/primitives/button.tsx +121 -0
- package/dist/templates/pages/src/components/primitives/card.tsx +25 -0
- package/dist/templates/pages/src/components/primitives/dialog.tsx +47 -0
- package/dist/templates/pages/src/components/primitives/input.tsx +22 -0
- package/dist/templates/pages/src/components/primitives/logo.tsx +41 -0
- package/dist/templates/pages/src/components/primitives/menu.tsx +121 -0
- package/dist/templates/pages/src/components/primitives/scroll-area.tsx +103 -0
- package/dist/templates/pages/src/components/primitives/shortcut.tsx +60 -0
- package/dist/templates/pages/src/components/primitives/tooltip.tsx +39 -0
- package/dist/templates/pages/src/components/reference/facts.astro +27 -0
- package/dist/templates/pages/src/components/reference/fields.astro +102 -0
- package/dist/templates/pages/src/components/reference/method-badge.astro +18 -0
- package/dist/templates/pages/src/components/reference/methods.ts +17 -0
- package/dist/templates/pages/src/components/reference/operation.astro +252 -0
- package/dist/templates/pages/src/components/reference/styles.ts +14 -0
- package/dist/templates/pages/src/components/search/highlighted-text.tsx +22 -0
- package/dist/templates/pages/src/components/search/search-answer.tsx +123 -0
- package/dist/templates/pages/src/components/search/search-palette.tsx +174 -0
- package/dist/templates/pages/src/components/search/search-results.tsx +229 -0
- package/dist/templates/pages/src/components/social/card.ts +77 -0
- package/dist/templates/pages/src/content/docs/customization/index.mdx +11 -0
- package/dist/templates/pages/src/content/docs/customization/styles.mdx +18 -0
- package/dist/templates/pages/src/content/docs/getting-started/api-reference.mdx +100 -0
- package/dist/templates/pages/src/content/docs/getting-started/components.mdx +156 -0
- package/dist/templates/pages/src/content/docs/getting-started/configuration.mdx +194 -0
- package/dist/templates/pages/src/content/docs/getting-started/deployment.mdx +142 -0
- package/dist/templates/pages/src/content/docs/getting-started/index.mdx +22 -0
- package/dist/templates/pages/src/content/docs/getting-started/writing-pages.mdx +35 -0
- package/dist/templates/pages/src/content/docs/index.mdx +21 -0
- package/dist/templates/pages/src/content.config.ts +1 -0
- package/dist/templates/pages/src/layouts/page.astro +195 -0
- package/dist/templates/pages/src/styles/global.css +95 -0
- package/dist/templates/pages/tsconfig.json +10 -0
- package/dist/templates/pages/uno.config.ts +168 -0
- package/package.json +2 -2
package/dist/config.schema.json
CHANGED
|
@@ -85,11 +85,28 @@
|
|
|
85
85
|
},
|
|
86
86
|
"collections": {
|
|
87
87
|
"default": [],
|
|
88
|
-
"description": "Collection IDs or
|
|
88
|
+
"description": "Collection IDs, name paths, or objects with collectionSlugPath; empty selects all accessible collections.",
|
|
89
89
|
"type": "array",
|
|
90
90
|
"items": {
|
|
91
|
-
"
|
|
92
|
-
|
|
91
|
+
"anyOf": [
|
|
92
|
+
{
|
|
93
|
+
"type": "string",
|
|
94
|
+
"minLength": 1
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"type": "object",
|
|
98
|
+
"properties": {
|
|
99
|
+
"collectionSlugPath": {
|
|
100
|
+
"type": "string",
|
|
101
|
+
"minLength": 1
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"required": [
|
|
105
|
+
"collectionSlugPath"
|
|
106
|
+
],
|
|
107
|
+
"additionalProperties": false
|
|
108
|
+
}
|
|
109
|
+
]
|
|
93
110
|
}
|
|
94
111
|
},
|
|
95
112
|
"output": {
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# AGENTS.md
|
|
2
|
+
|
|
3
|
+
Rules for coding agents that write or change pages in this Andesine Pages site.
|
|
4
|
+
|
|
5
|
+
## File layout
|
|
6
|
+
|
|
7
|
+
- Pages are `.md` or `.mdx` files in the directory of a files source, e.g.
|
|
8
|
+
`src/content/docs/`. `andesine.config.ts` lists the sources and their mounts.
|
|
9
|
+
- The file path gives the URL: `guides/setup.md` is `/guides/setup/`, and
|
|
10
|
+
`guides/index.md` is the landing page of the `guides` group.
|
|
11
|
+
- A folder is a navigation group. Add an `index.md(x)` to give it a landing page and
|
|
12
|
+
a title.
|
|
13
|
+
- Put images next to the page and link them with a relative path.
|
|
14
|
+
- Do not edit `dist/`, `.astro/`, or `node_modules/`. Do not put the API key in any
|
|
15
|
+
file; `.env` holds it and is not committed.
|
|
16
|
+
|
|
17
|
+
## Frontmatter
|
|
18
|
+
|
|
19
|
+
Every page needs a `title`. The other fields are optional:
|
|
20
|
+
|
|
21
|
+
| Field | Default | Use |
|
|
22
|
+
| ------------------ | ------- | --------------------------------------------------- |
|
|
23
|
+
| `description` | None | One sentence for search, previews, and social cards |
|
|
24
|
+
| `order` | `0` | Position in the group; lower numbers come first |
|
|
25
|
+
| `slug` | None | A URL path that replaces the file path |
|
|
26
|
+
| `navigationLabel` | `title` | A shorter label for the navigation |
|
|
27
|
+
| `navigationHidden` | `false` | Leave the page out of the navigation |
|
|
28
|
+
| `searchHidden` | `false` | Leave the page out of search and agent files |
|
|
29
|
+
| `toc` | `true` | Show the table of contents |
|
|
30
|
+
| `layout` | `docs` | `wide` for a page without a table of contents |
|
|
31
|
+
| `updatedAt` | None | Date of the last change, e.g. `2026-10-04` |
|
|
32
|
+
|
|
33
|
+
Unknown fields and invalid values stop the build. Two pages with the same URL stop
|
|
34
|
+
the build too.
|
|
35
|
+
|
|
36
|
+
## Content
|
|
37
|
+
|
|
38
|
+
- Start the body with the first paragraph; the layout shows the title. Use `##` and
|
|
39
|
+
`###` headings; they make the table of contents.
|
|
40
|
+
- Link to other pages with relative links, e.g. `../configuration/`.
|
|
41
|
+
- Give code blocks a language, and a `title` when they show a file:
|
|
42
|
+
` ```ts title="andesine.config.ts" `.
|
|
43
|
+
|
|
44
|
+
## Components
|
|
45
|
+
|
|
46
|
+
MDX pages use these components without imports. `src/components/content/index.ts`
|
|
47
|
+
lists them; add a component there before you use it.
|
|
48
|
+
|
|
49
|
+
| Component | Use |
|
|
50
|
+
| ------------------ | ---------------------------------------------------------- |
|
|
51
|
+
| `Callout` | `type`: `note` (default), `tip`, `warning`, or `danger` |
|
|
52
|
+
| `Tabs`, `Tab` | Alternatives; tabs with the same `syncKey` share selection |
|
|
53
|
+
| `CodeGroup` | Code blocks in tabs, from their `title`s |
|
|
54
|
+
| `Steps` | An ordered list of steps |
|
|
55
|
+
| `FileTree` | A nested list of files and folders |
|
|
56
|
+
| `CardGrid`, `Card` | Links with `title`, `icon` (an Iconify class), and `href` |
|
|
57
|
+
| `Disclosure` | Content that opens on click, with a `title` |
|
|
58
|
+
| `Figure` | An image (as content) with a `caption` |
|
|
59
|
+
| `Operation` | An API operation: `source` and `id` of an OpenAPI source |
|
|
60
|
+
| `Visibility` | Content for one audience; see below |
|
|
61
|
+
|
|
62
|
+
Leave an empty line around Markdown content inside `Steps`, `CodeGroup`, and
|
|
63
|
+
`FileTree`.
|
|
64
|
+
|
|
65
|
+
## Visibility
|
|
66
|
+
|
|
67
|
+
The site has two versions of each page: the web page, and a Markdown version that AI
|
|
68
|
+
agents read (the page URL with `index.md`, and `llms-full.txt`).
|
|
69
|
+
|
|
70
|
+
- `<Visibility for="humans">` content is only on the web page. Use it for UI
|
|
71
|
+
directions, e.g. "Select **Copy page**".
|
|
72
|
+
- `<Visibility for="agents">` content is only in the Markdown version. Use it for
|
|
73
|
+
directions that an agent can follow, e.g. a file to edit or a URL to fetch.
|
|
74
|
+
- Use one block for each audience, side by side. Do not nest `Visibility` blocks.
|
|
75
|
+
|
|
76
|
+
## Checks
|
|
77
|
+
|
|
78
|
+
Run `npm run check` and `npm run build` after changes. The build checks the
|
|
79
|
+
frontmatter, the URLs, and the API operations that pages embed.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Vrite, Inc.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Andesine Pages template
|
|
2
|
+
|
|
3
|
+
A copyable Astro + Solid.js documentation site. You own the layouts, styles,
|
|
4
|
+
components, and configuration. `@andesine/pages` supplies the data layer and the
|
|
5
|
+
Astro integration. `@andesine/ui/solid` supplies headless components.
|
|
6
|
+
|
|
7
|
+
## Structure
|
|
8
|
+
|
|
9
|
+
| Path | Contents |
|
|
10
|
+
| ------------------------ | ---------------------------------------------- |
|
|
11
|
+
| `andesine.config.ts` | Site name, logo, brand colors, links, sources. |
|
|
12
|
+
| `astro.config.ts` | Astro integrations. |
|
|
13
|
+
| `uno.config.ts` | UnoCSS theme, layers, and transformers. |
|
|
14
|
+
| `src/content.config.ts` | Content collections for the sources. |
|
|
15
|
+
| `src/content/docs/` | The pages of the `docs` files source. |
|
|
16
|
+
| `src/api/openapi.yaml` | The example spec of the `api` OpenAPI source. |
|
|
17
|
+
| `src/layouts/page.astro` | The page layout. It receives one `page` prop. |
|
|
18
|
+
| `.env.example` | The Andesine API key variable. |
|
|
19
|
+
| `src/styles/global.css` | Fonts, base styles, and scrollbars. |
|
|
20
|
+
| `src/components/` | Styled primitives, layout, and API reference. |
|
|
21
|
+
|
|
22
|
+
## Styles
|
|
23
|
+
|
|
24
|
+
The template uses the design language of the Andesine app:
|
|
25
|
+
|
|
26
|
+
- Component default classes start with `:base:` (or `:base-2:` for a component
|
|
27
|
+
that wraps another one). UnoCSS compiles them into low-priority layers, so a
|
|
28
|
+
`class` prop overrides them.
|
|
29
|
+
- `<html>` sets the brand gradient stops. Use `bg-gradient-to-tr` for a brand
|
|
30
|
+
gradient on fills and icons (`i-*` classes). Add `bg-clip-text` and
|
|
31
|
+
`text-transparent` for gradient text.
|
|
32
|
+
- The brand colors come from `brand` in `andesine.config.ts`.
|
|
33
|
+
- Hover styles use `@hover:` and are repeated with `focus-visible:`. There are no
|
|
34
|
+
focus rings.
|
|
35
|
+
- UnoCSS also scans the files in `src/` directly. Astro and Solid escape `&`,
|
|
36
|
+
`>`, and `'` in compiled class strings, so the compiled code alone can hide
|
|
37
|
+
classes such as `[&[open]>summary]:rotate-90`.
|
|
38
|
+
- Headless behavior comes from `@andesine/ui/solid`. Visual effects, such as the
|
|
39
|
+
outline guide, the tab indicator, and the page scroll shadows, are in
|
|
40
|
+
`src/components/effects/`.
|
|
41
|
+
|
|
42
|
+
## Andesine content
|
|
43
|
+
|
|
44
|
+
Set `ANDESINE_COLLECTION_ID` and `ANDESINE_PUBLIC_KEY`, a publishable key, to show a
|
|
45
|
+
published Andesine collection in place of the included guide, as a fully static site.
|
|
46
|
+
`andesine.config.ts` reads them from `process.env`, so export them in the shell or load them
|
|
47
|
+
with a tool such as `dotenv-cli`. With a secret `ANDESINE_API_KEY` in place of the publishable
|
|
48
|
+
key, Andesine sources need a Node.js server or a serverless platform such as Vercel or
|
|
49
|
+
Netlify. See the Deployment page of the guide.
|
|
50
|
+
|
|
51
|
+
## New sites
|
|
52
|
+
|
|
53
|
+
Create a new site from this template with the Andesine CLI:
|
|
54
|
+
|
|
55
|
+
```sh
|
|
56
|
+
npx andesine pages init docs
|
|
57
|
+
cd docs
|
|
58
|
+
npm install
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
The CLI copies the template of its release, with `@andesine/pages` and
|
|
62
|
+
`@andesine/ui` pinned to the same version. The `overrides` field fixes an npm peer
|
|
63
|
+
conflict of `solid-devtools`, an optional dependency of `@astrojs/solid-js`.
|
|
64
|
+
|
|
65
|
+
## Commands
|
|
66
|
+
|
|
67
|
+
Use Node.js 24 or later.
|
|
68
|
+
|
|
69
|
+
```sh
|
|
70
|
+
npm run check
|
|
71
|
+
npm run build
|
|
72
|
+
```
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { defineConfig } from "@andesine/pages";
|
|
2
|
+
|
|
3
|
+
const hasKey = process.env.ANDESINE_PUBLIC_KEY || process.env.ANDESINE_API_KEY;
|
|
4
|
+
const collection = hasKey && process.env.ANDESINE_COLLECTION_ID;
|
|
5
|
+
|
|
6
|
+
export default defineConfig({
|
|
7
|
+
name: "Pages",
|
|
8
|
+
description: "Documentation that you own.",
|
|
9
|
+
site: "https://docs.example.com",
|
|
10
|
+
logo: { src: "./src/assets/andesine.svg", format: "full", alt: "Andesine" },
|
|
11
|
+
favicon: "./src/assets/favicon.svg",
|
|
12
|
+
brand: { primary: "#ff3617", secondary: "#f88f52", tertiary: "#fc6335" },
|
|
13
|
+
links: [
|
|
14
|
+
{
|
|
15
|
+
label: "Changelog",
|
|
16
|
+
href: "https://github.com/vriteio/vrite/releases",
|
|
17
|
+
icon: "i-lucide:scroll-text"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
label: "Community",
|
|
21
|
+
href: "https://github.com/vriteio/vrite/discussions",
|
|
22
|
+
icon: "i-lucide:messages-square"
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
cta: { label: "Andesine", href: "https://andesine.app", icon: "i-lucide:arrow-up-right" },
|
|
26
|
+
socialLinks: [
|
|
27
|
+
{ label: "GitHub", href: "https://github.com/vriteio/vrite", icon: "i-mdi:github" }
|
|
28
|
+
],
|
|
29
|
+
sections: [
|
|
30
|
+
{ id: "guides", label: "Guides", icon: "i-lucide:book-open", sources: ["docs"] },
|
|
31
|
+
{ id: "reference", label: "API reference", icon: "i-lucide:braces", sources: ["api"] }
|
|
32
|
+
],
|
|
33
|
+
sources: [
|
|
34
|
+
collection
|
|
35
|
+
? { id: "docs", type: "andesine", collection, publicKey: process.env.ANDESINE_PUBLIC_KEY }
|
|
36
|
+
: { id: "docs", type: "files", directory: "src/content/docs" },
|
|
37
|
+
{ id: "api", type: "openapi", spec: "src/api/openapi.yaml", mount: "/api/" }
|
|
38
|
+
]
|
|
39
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { defineConfig } from "astro/config";
|
|
2
|
+
import mdx from "@astrojs/mdx";
|
|
3
|
+
import node from "@astrojs/node";
|
|
4
|
+
import solid from "@astrojs/solid-js";
|
|
5
|
+
import unoCSS from "@unocss/astro";
|
|
6
|
+
import { andesine } from "@andesine/pages/integration";
|
|
7
|
+
import config from "./andesine.config";
|
|
8
|
+
|
|
9
|
+
export default defineConfig({
|
|
10
|
+
// Andesine sources without a publishable key need a server for search and AI answers.
|
|
11
|
+
adapter: config.sources.some((source) => source.type === "andesine" && !source.publicKey)
|
|
12
|
+
? node({ mode: "standalone" })
|
|
13
|
+
: undefined,
|
|
14
|
+
server: { host: true, allowedHosts: [".local"] },
|
|
15
|
+
markdown: { shikiConfig: { theme: "github-light" } },
|
|
16
|
+
integrations: [
|
|
17
|
+
mdx(),
|
|
18
|
+
solid(),
|
|
19
|
+
// The reset loads just before the UnoCSS rules; utilities then override it in every build.
|
|
20
|
+
unoCSS({ injectReset: "@unocss/reset/tailwind.css" }),
|
|
21
|
+
andesine()
|
|
22
|
+
]
|
|
23
|
+
});
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "andesine-pages-site",
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev": "astro dev",
|
|
8
|
+
"build": "astro build",
|
|
9
|
+
"check": "astro check",
|
|
10
|
+
"preview": "astro preview"
|
|
11
|
+
},
|
|
12
|
+
"engines": {
|
|
13
|
+
"node": ">=24"
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@andesine/pages": "0.4.0",
|
|
17
|
+
"@andesine/ui": "0.4.0",
|
|
18
|
+
"@ark-ui/solid": "5.38.0",
|
|
19
|
+
"@astrojs/mdx": "8.0.1",
|
|
20
|
+
"@astrojs/node": "11.1.6",
|
|
21
|
+
"@astrojs/solid-js": "7.0.2",
|
|
22
|
+
"@fontsource-variable/jetbrains-mono": "5.3.0",
|
|
23
|
+
"@fontsource-variable/nunito": "5.3.0",
|
|
24
|
+
"@fontsource/nunito": "^5.3.0",
|
|
25
|
+
"@resvg/resvg-js": "^2.6.2",
|
|
26
|
+
"astro": "7.3.1",
|
|
27
|
+
"clsx": "^2.1.1",
|
|
28
|
+
"satori": "^0.33.5",
|
|
29
|
+
"solid-js": "^1.9.14"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@astrojs/check": "0.9.10",
|
|
33
|
+
"@iconify/json": "^2.2.509",
|
|
34
|
+
"@types/node": "26.1.2",
|
|
35
|
+
"@unocss/astro": "66.7.5",
|
|
36
|
+
"@unocss/reset": "66.7.5",
|
|
37
|
+
"typescript": "6.0.3",
|
|
38
|
+
"unocss": "66.7.5"
|
|
39
|
+
},
|
|
40
|
+
"overrides": {
|
|
41
|
+
"solid-devtools": {
|
|
42
|
+
"vite": "^8.0.13"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
openapi: 3.1.0
|
|
2
|
+
info:
|
|
3
|
+
title: Tasks API
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
description: |
|
|
6
|
+
An example API for the reference pages of this template. It manages projects and
|
|
7
|
+
their tasks.
|
|
8
|
+
|
|
9
|
+
Replace this file with your own OpenAPI 3.0 or 3.1 spec, or set `spec` in
|
|
10
|
+
`andesine.config.ts` to its URL.
|
|
11
|
+
servers:
|
|
12
|
+
- url: https://api.example.com/v1
|
|
13
|
+
description: Production
|
|
14
|
+
security:
|
|
15
|
+
- bearer: []
|
|
16
|
+
tags:
|
|
17
|
+
- name: projects
|
|
18
|
+
x-displayName: Projects
|
|
19
|
+
description: A project holds tasks and has one owner.
|
|
20
|
+
- name: tasks
|
|
21
|
+
x-displayName: Tasks
|
|
22
|
+
description: Tasks can have subtasks, and one assignee.
|
|
23
|
+
components:
|
|
24
|
+
securitySchemes:
|
|
25
|
+
bearer:
|
|
26
|
+
type: http
|
|
27
|
+
scheme: bearer
|
|
28
|
+
description: Send an API token from the account settings.
|
|
29
|
+
parameters:
|
|
30
|
+
ProjectID:
|
|
31
|
+
name: projectID
|
|
32
|
+
in: path
|
|
33
|
+
required: true
|
|
34
|
+
description: ID of the project.
|
|
35
|
+
schema: { type: string, pattern: "^prj_[A-Za-z0-9]+$" }
|
|
36
|
+
example: prj_4f8a
|
|
37
|
+
headers:
|
|
38
|
+
RateLimitRemaining:
|
|
39
|
+
description: Requests left in the current minute.
|
|
40
|
+
schema: { type: integer }
|
|
41
|
+
schemas:
|
|
42
|
+
Project:
|
|
43
|
+
type: object
|
|
44
|
+
required: [id, name, createdAt]
|
|
45
|
+
properties:
|
|
46
|
+
id: { type: string, description: ID of the project., examples: [prj_4f8a] }
|
|
47
|
+
name: { type: string, minLength: 1, maxLength: 100, examples: [Website launch] }
|
|
48
|
+
description: { type: [string, "null"], description: Optional notes. }
|
|
49
|
+
createdAt: { type: string, format: date-time, readOnly: true }
|
|
50
|
+
ProjectInput:
|
|
51
|
+
type: object
|
|
52
|
+
required: [name]
|
|
53
|
+
properties:
|
|
54
|
+
name: { type: string, minLength: 1, maxLength: 100, examples: [Website launch] }
|
|
55
|
+
description: { type: [string, "null"] }
|
|
56
|
+
Task:
|
|
57
|
+
type: object
|
|
58
|
+
required: [id, title, status]
|
|
59
|
+
properties:
|
|
60
|
+
id: { type: string, examples: [tsk_91c2] }
|
|
61
|
+
title: { type: string, examples: [Write the launch post] }
|
|
62
|
+
status:
|
|
63
|
+
type: string
|
|
64
|
+
enum: [todo, in_progress, done]
|
|
65
|
+
default: todo
|
|
66
|
+
assignee:
|
|
67
|
+
description: A person or a team.
|
|
68
|
+
oneOf:
|
|
69
|
+
- $ref: "#/components/schemas/Person"
|
|
70
|
+
- $ref: "#/components/schemas/Team"
|
|
71
|
+
subtasks:
|
|
72
|
+
type: array
|
|
73
|
+
description: Tasks that belong to this task.
|
|
74
|
+
items: { $ref: "#/components/schemas/Task" }
|
|
75
|
+
Person:
|
|
76
|
+
type: object
|
|
77
|
+
required: [type, email]
|
|
78
|
+
properties:
|
|
79
|
+
type: { const: person }
|
|
80
|
+
email: { type: string, format: email }
|
|
81
|
+
Team:
|
|
82
|
+
type: object
|
|
83
|
+
required: [type, name]
|
|
84
|
+
properties:
|
|
85
|
+
type: { const: team }
|
|
86
|
+
name: { type: string, examples: [Marketing] }
|
|
87
|
+
Error:
|
|
88
|
+
type: object
|
|
89
|
+
required: [code, message]
|
|
90
|
+
properties:
|
|
91
|
+
code: { type: string, examples: [NOT_FOUND] }
|
|
92
|
+
message: { type: string, examples: [The project does not exist.] }
|
|
93
|
+
responses:
|
|
94
|
+
NotFound:
|
|
95
|
+
description: The resource does not exist.
|
|
96
|
+
content:
|
|
97
|
+
application/json:
|
|
98
|
+
schema: { $ref: "#/components/schemas/Error" }
|
|
99
|
+
paths:
|
|
100
|
+
/projects:
|
|
101
|
+
get:
|
|
102
|
+
operationId: projects.list
|
|
103
|
+
tags: [projects]
|
|
104
|
+
summary: List projects
|
|
105
|
+
description: Returns the projects of the account, newest first.
|
|
106
|
+
parameters:
|
|
107
|
+
- name: limit
|
|
108
|
+
in: query
|
|
109
|
+
description: Largest number of projects to return.
|
|
110
|
+
schema: { type: integer, minimum: 1, maximum: 100, default: 20 }
|
|
111
|
+
- name: cursor
|
|
112
|
+
in: query
|
|
113
|
+
description: The `nextCursor` of the previous page.
|
|
114
|
+
schema: { type: string }
|
|
115
|
+
responses:
|
|
116
|
+
"200":
|
|
117
|
+
description: A page of projects.
|
|
118
|
+
headers:
|
|
119
|
+
X-RateLimit-Remaining: { $ref: "#/components/headers/RateLimitRemaining" }
|
|
120
|
+
content:
|
|
121
|
+
application/json:
|
|
122
|
+
schema:
|
|
123
|
+
type: object
|
|
124
|
+
required: [data]
|
|
125
|
+
properties:
|
|
126
|
+
data:
|
|
127
|
+
type: array
|
|
128
|
+
items: { $ref: "#/components/schemas/Project" }
|
|
129
|
+
nextCursor: { type: [string, "null"] }
|
|
130
|
+
post:
|
|
131
|
+
operationId: projects.create
|
|
132
|
+
tags: [projects]
|
|
133
|
+
summary: Create a project
|
|
134
|
+
requestBody:
|
|
135
|
+
required: true
|
|
136
|
+
content:
|
|
137
|
+
application/json:
|
|
138
|
+
schema: { $ref: "#/components/schemas/ProjectInput" }
|
|
139
|
+
responses:
|
|
140
|
+
"201":
|
|
141
|
+
description: The new project.
|
|
142
|
+
content:
|
|
143
|
+
application/json:
|
|
144
|
+
schema: { $ref: "#/components/schemas/Project" }
|
|
145
|
+
x-codeSamples:
|
|
146
|
+
- lang: javascript
|
|
147
|
+
label: JavaScript
|
|
148
|
+
source: |
|
|
149
|
+
const response = await fetch("https://api.example.com/v1/projects", {
|
|
150
|
+
method: "POST",
|
|
151
|
+
headers: {
|
|
152
|
+
"Authorization": `Bearer ${process.env.TASKS_TOKEN}`,
|
|
153
|
+
"Content-Type": "application/json"
|
|
154
|
+
},
|
|
155
|
+
body: JSON.stringify({ name: "Website launch" })
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
const project = await response.json();
|
|
159
|
+
/projects/{projectID}:
|
|
160
|
+
parameters:
|
|
161
|
+
- $ref: "#/components/parameters/ProjectID"
|
|
162
|
+
get:
|
|
163
|
+
operationId: projects.get
|
|
164
|
+
tags: [projects]
|
|
165
|
+
summary: Get a project
|
|
166
|
+
responses:
|
|
167
|
+
"200":
|
|
168
|
+
description: The project.
|
|
169
|
+
content:
|
|
170
|
+
application/json:
|
|
171
|
+
schema: { $ref: "#/components/schemas/Project" }
|
|
172
|
+
"404": { $ref: "#/components/responses/NotFound" }
|
|
173
|
+
delete:
|
|
174
|
+
operationId: projects.delete
|
|
175
|
+
tags: [projects]
|
|
176
|
+
summary: Delete a project
|
|
177
|
+
description: Deletes the project and all of its tasks. You cannot undo this.
|
|
178
|
+
responses:
|
|
179
|
+
"204": { description: The project is deleted. }
|
|
180
|
+
"404": { $ref: "#/components/responses/NotFound" }
|
|
181
|
+
/projects/{projectID}/tasks:
|
|
182
|
+
parameters:
|
|
183
|
+
- $ref: "#/components/parameters/ProjectID"
|
|
184
|
+
get:
|
|
185
|
+
operationId: tasks.list
|
|
186
|
+
tags: [tasks]
|
|
187
|
+
summary: List tasks
|
|
188
|
+
parameters:
|
|
189
|
+
- name: status
|
|
190
|
+
in: query
|
|
191
|
+
schema: { type: string, enum: [todo, in_progress, done] }
|
|
192
|
+
responses:
|
|
193
|
+
"200":
|
|
194
|
+
description: The tasks of the project.
|
|
195
|
+
content:
|
|
196
|
+
application/json:
|
|
197
|
+
schema:
|
|
198
|
+
type: array
|
|
199
|
+
items: { $ref: "#/components/schemas/Task" }
|
|
200
|
+
post:
|
|
201
|
+
operationId: tasks.create
|
|
202
|
+
tags: [tasks]
|
|
203
|
+
summary: Create a task
|
|
204
|
+
requestBody:
|
|
205
|
+
required: true
|
|
206
|
+
content:
|
|
207
|
+
application/json:
|
|
208
|
+
schema:
|
|
209
|
+
type: object
|
|
210
|
+
required: [title]
|
|
211
|
+
properties:
|
|
212
|
+
title: { type: string, examples: [Write the launch post] }
|
|
213
|
+
status: { type: string, enum: [todo, in_progress, done], default: todo }
|
|
214
|
+
responses:
|
|
215
|
+
"201":
|
|
216
|
+
description: The new task.
|
|
217
|
+
content:
|
|
218
|
+
application/json:
|
|
219
|
+
schema: { $ref: "#/components/schemas/Task" }
|
|
220
|
+
/projects/{projectID}/tasks/{taskID}/complete:
|
|
221
|
+
parameters:
|
|
222
|
+
- $ref: "#/components/parameters/ProjectID"
|
|
223
|
+
- name: taskID
|
|
224
|
+
in: path
|
|
225
|
+
required: true
|
|
226
|
+
schema: { type: string }
|
|
227
|
+
example: tsk_91c2
|
|
228
|
+
post:
|
|
229
|
+
operationId: tasks.complete
|
|
230
|
+
tags: [tasks]
|
|
231
|
+
summary: Complete a task
|
|
232
|
+
deprecated: true
|
|
233
|
+
description: Use `PATCH /projects/{projectID}/tasks/{taskID}` with `status` set to `done`.
|
|
234
|
+
responses:
|
|
235
|
+
"200":
|
|
236
|
+
description: The completed task.
|
|
237
|
+
content:
|
|
238
|
+
application/json:
|
|
239
|
+
schema: { $ref: "#/components/schemas/Task" }
|
|
240
|
+
/health:
|
|
241
|
+
get:
|
|
242
|
+
operationId: health
|
|
243
|
+
summary: Check the service
|
|
244
|
+
security: []
|
|
245
|
+
responses:
|
|
246
|
+
"204": { description: The service works. }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="1.76 7 220.24 51" width="220.24" height="51" role="img" aria-label="Andesine"><defs><linearGradient id="brand" x1="0" y1="1" x2="1" y2="0"><stop offset="0" stop-color="#f88f52"/><stop offset="0.5" stop-color="#ff3617"/><stop offset="1" stop-color="#f88f52"/></linearGradient></defs><mask id="satori_om-id"><rect x="0" y="0" width="224" height="65" fill="#fff"/></mask><mask id="satori_om-id-0"><rect x="0" y="7" width="51" height="51" fill="#fff"/></mask><svg x="0" y="7" width="51" height="51" viewBox="0 0 24 24"><path fill="url(#brand)" d="M11.9069231,0 C13.0018372,0 13.9483357,0.635443279 14.397751,1.55766239 L18.5217192,9.80587694 C18.7187228,10.1865349 18.83,10.6187339 18.83,11.0769231 C18.83,12.606327 17.5901732,13.8461538 16.0607692,13.8461538 C14.9658551,13.8461538 14.0193566,13.2107106 13.5699414,12.2884915 L12.0384615,9.22476923 L6.15084166,22.3086788 C5.73044955,23.3025974 4.74628371,24 3.59923077,24 C2.06982685,24 0.83,22.7601732 0.83,21.2307692 C0.83,20.8083537 0.924579355,20.4080284 1.09371684,20.0498145 L9.35966608,1.68108512 C9.78247025,0.692617692 10.7638119,0 11.9069231,0 Z M18.3684615,14.7692308 C19.8978655,14.7692308 21.1376923,16.0090576 21.1376923,17.5384615 C21.1376923,19.0678655 19.8978655,20.3076923 18.3684615,20.3076923 C18.2141372,20.3076923 18.0627613,20.2950686 17.9153101,20.2707976 L12.83,19.8461538 L12.7298971,19.8440218 C11.5018339,19.7916084 10.5223077,18.7794252 10.5223077,17.5384615 C10.5223077,16.2639583 11.5554967,15.2307692 12.83,15.2307692 L17.9097768,14.8070421 C18.0589734,14.7821723 18.2122062,14.7692308 18.3684615,14.7692308 Z"/></svg><mask id="satori_om-id-1"><rect x="51" y="0" width="173" height="65" fill="#fff"/></mask><g><path fill="#111827" d="M57.1 49.4L57.1 49.4Q55.7 49.4 54.9 48.6Q54.1 47.8 54.1 46.3L54.1 46.3L54.1 28.2Q54.1 26.7 54.9 25.9Q55.7 25.1 57.0 25.1Q58.4 25.1 59.2 25.9Q60.0 26.7 60.0 28.2L60.0 28.2L60.0 29.2Q61.0 27.4 62.8 26.3L62.8 26.3Q65.0 25.0 67.8 25.0Q70.6 25.0 72.5 26.1Q74.3 27.2 75.2 29.3Q76.1 31.4 76.1 34.7L76.1 34.7L76.1 46.3Q76.1 47.8 75.3 48.6Q74.6 49.4 73.1 49.4Q71.7 49.4 70.9 48.6Q70.1 47.8 70.1 46.3L70.1 46.3L70.1 35.0Q70.1 32.2 69.1 31Q68.0 29.8 65.9 29.8L65.9 29.8Q63.2 29.8 61.7 31.4Q60.1 33.1 60.1 35.8L60.1 35.8L60.1 46.3Q60.1 49.4 57.1 49.4ZM91.2 49.5L91.2 49.5Q88.2 49.5 85.8 48.0Q83.5 46.5 82.2 43.7Q80.9 41.0 80.9 37.2L80.9 37.2Q80.9 33.4 82.2 30.7Q83.5 28.0 85.8 26.5Q88.2 25.0 91.2 25.0L91.2 25.0Q94.2 25.0 96.4 26.5L96.4 26.5Q97.9 27.5 98.8 29.1L98.8 29.1L98.8 17.8Q98.8 16.3 99.5 15.5Q100.3 14.8 101.7 14.8Q103.2 14.8 104.0 15.5Q104.8 16.3 104.8 17.8L104.8 17.8L104.8 46.3Q104.8 47.8 104.0 48.6Q103.2 49.4 101.8 49.4Q100.3 49.4 99.6 48.6Q98.8 47.8 98.8 46.3L98.8 46.3L98.8 45.4Q98.0 46.9 96.4 48.0L96.4 48.0Q94.2 49.5 91.2 49.5ZM92.9 44.9L92.9 44.9Q94.7 44.9 96.0 44.1Q97.4 43.2 98.1 41.5Q98.9 39.8 98.9 37.2L98.9 37.2Q98.9 33.4 97.2 31.5Q95.6 29.6 92.9 29.6L92.9 29.6Q91.1 29.6 89.8 30.4Q88.4 31.3 87.7 33.0Q87.0 34.7 87.0 37.2L87.0 37.2Q87.0 41.0 88.6 43.0Q90.2 44.9 92.9 44.9ZM122.6 49.5L122.6 49.5Q118.6 49.5 115.7 48.0Q112.8 46.5 111.3 43.8Q109.7 41.0 109.7 37.3L109.7 37.3Q109.7 33.6 111.2 30.9Q112.7 28.2 115.4 26.6Q118.1 25.0 121.5 25.0L121.5 25.0Q124.0 25.0 126.0 25.9Q127.9 26.7 129.4 28.2Q130.8 29.8 131.5 31.9Q132.3 34.1 132.3 36.9L132.3 36.9Q132.3 37.7 131.7 38.2Q131.1 38.6 130.0 38.6L130.0 38.6L115.5 38.6Q115.8 41.4 117.2 43.0L117.2 43.0Q119.1 44.9 122.7 44.9L122.7 44.9Q123.9 44.9 125.5 44.6Q127.0 44.3 128.4 43.5L128.4 43.5Q129.4 43.0 130.2 43.0Q131.0 43.1 131.4 43.6Q131.9 44.1 132.0 44.8Q132.1 45.4 131.7 46.2Q131.4 46.9 130.5 47.4L130.5 47.4Q128.8 48.5 126.6 49.0Q124.4 49.5 122.6 49.5ZM115.5 35.2L115.5 35.2L127.3 35.2Q127.2 33.4 126.6 32.2L126.6 32.2Q126.0 30.7 124.8 29.9Q123.5 29.1 121.7 29.1L121.7 29.1Q119.7 29.1 118.3 30.1Q116.9 31 116.1 32.7L116.1 32.7Q115.6 33.8 115.5 35.2ZM145.6 49.5L145.6 49.5Q143.5 49.5 141.2 49.0Q138.9 48.6 137.1 47.6L137.1 47.6Q136.3 47.1 136.0 46.4Q135.7 45.8 135.8 45.1Q135.9 44.5 136.3 44.0Q136.7 43.5 137.3 43.4Q138.0 43.2 138.7 43.6L138.7 43.6Q140.7 44.5 142.3 44.9Q144.0 45.3 145.7 45.3L145.7 45.3Q148.0 45.3 149.1 44.5Q150.2 43.7 150.2 42.4L150.2 42.4Q150.2 41.3 149.5 40.7Q148.7 40.1 147.2 39.8L147.2 39.8L142.4 38.9Q139.5 38.3 137.9 36.7Q136.3 35.1 136.3 32.5L136.3 32.5Q136.3 30.2 137.6 28.6Q138.9 26.9 141.1 26.0Q143.4 25.0 146.3 25.0L146.3 25.0Q148.4 25.0 150.3 25.5Q152.1 26.0 153.9 26.9L153.9 26.9Q154.6 27.3 154.8 27.9Q155.1 28.6 155.0 29.2Q154.8 29.8 154.4 30.4Q154.0 30.9 153.3 31.0Q152.7 31.1 151.8 30.7L151.8 30.7Q150.4 29.9 149.0 29.6Q147.6 29.3 146.4 29.3L146.4 29.3Q144.0 29.3 142.9 30.1Q141.8 30.9 141.8 32.2L141.8 32.2Q141.8 33.3 142.4 33.9Q143.1 34.6 144.5 34.8L144.5 34.8L149.3 35.8Q152.4 36.3 154.0 37.9Q155.6 39.4 155.6 42.0L155.6 42.0Q155.6 45.5 152.9 47.5Q150.2 49.5 145.6 49.5ZM163.4 49.3L163.4 49.3Q162.0 49.3 161.2 48.5Q160.4 47.6 160.4 46.1L160.4 46.1L160.4 28.5Q160.4 26.9 161.2 26.0Q162.0 25.2 163.4 25.2L163.4 25.2Q164.9 25.2 165.6 26.0Q166.4 26.9 166.4 28.5L166.4 28.5L166.4 46.1Q166.4 47.6 165.7 48.5Q164.9 49.3 163.4 49.3ZM163.4 20.7L163.4 20.7Q161.7 20.7 160.8 19.9Q159.9 19.0 159.9 17.6L159.9 17.6Q159.9 16.0 160.8 15.2Q161.7 14.4 163.4 14.4L163.4 14.4Q165.1 14.4 166.1 15.2Q167.0 16.0 167.0 17.6L167.0 17.6Q167.0 19.0 166.1 19.9Q165.1 20.7 163.4 20.7ZM175.7 49.4L175.7 49.4Q174.2 49.4 173.4 48.6Q172.7 47.8 172.7 46.3L172.7 46.3L172.7 28.2Q172.7 26.7 173.4 25.9Q174.2 25.1 175.6 25.1Q177 25.1 177.8 25.9Q178.5 26.7 178.5 28.2L178.5 28.2L178.5 29.2Q179.5 27.4 181.3 26.3L181.3 26.3Q183.5 25.0 186.4 25.0Q189.2 25.0 191.0 26.1Q192.8 27.2 193.8 29.3Q194.7 31.4 194.7 34.7L194.7 34.7L194.7 46.3Q194.7 47.8 193.9 48.6Q193.1 49.4 191.7 49.4Q190.2 49.4 189.5 48.6Q188.7 47.8 188.7 46.3L188.7 46.3L188.7 35.0Q188.7 32.2 187.6 31Q186.6 29.8 184.4 29.8L184.4 29.8Q181.8 29.8 180.2 31.4Q178.7 33.1 178.7 35.8L178.7 35.8L178.7 46.3Q178.7 49.4 175.7 49.4ZM212.3 49.5L212.3 49.5Q208.3 49.5 205.5 48.0Q202.6 46.5 201.0 43.8Q199.5 41.0 199.5 37.3L199.5 37.3Q199.5 33.6 201.0 30.9Q202.5 28.2 205.2 26.6Q207.8 25.0 211.2 25.0L211.2 25.0Q213.7 25.0 215.7 25.9Q217.7 26.7 219.1 28.2Q220.5 29.8 221.3 31.9Q222.0 34.1 222.0 36.9L222.0 36.9Q222.0 37.7 221.4 38.2Q220.8 38.6 219.7 38.6L219.7 38.6L205.2 38.6Q205.5 41.4 207 43.0L207 43.0Q208.8 44.9 212.4 44.9L212.4 44.9Q213.7 44.9 215.2 44.6Q216.8 44.3 218.2 43.5L218.2 43.5Q219.2 43.0 220.0 43.0Q220.7 43.1 221.2 43.6Q221.6 44.1 221.7 44.8Q221.8 45.4 221.5 46.2Q221.1 46.9 220.2 47.4L220.2 47.4Q218.6 48.5 216.4 49.0Q214.2 49.5 212.3 49.5ZM205.2 35.2L205.2 35.2L217.0 35.2Q216.9 33.4 216.4 32.2L216.4 32.2Q215.7 30.7 214.5 29.9Q213.3 29.1 211.5 29.1L211.5 29.1Q209.4 29.1 208.0 30.1Q206.6 31 205.9 32.7L205.9 32.7Q205.4 33.8 205.2 35.2Z "/></g></svg>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** The Andesine logo mark, for the `i-andesine:logo` icon. */
|
|
2
|
+
const logoPath =
|
|
3
|
+
"M11.9069231,0 C13.0018372,0 13.9483357,0.635443279 14.397751,1.55766239 L18.5217192,9.80587694 C18.7187228,10.1865349 18.83,10.6187339 18.83,11.0769231 C18.83,12.606327 17.5901732,13.8461538 16.0607692,13.8461538 C14.9658551,13.8461538 14.0193566,13.2107106 13.5699414,12.2884915 L12.0384615,9.22476923 L6.15084166,22.3086788 C5.73044955,23.3025974 4.74628371,24 3.59923077,24 C2.06982685,24 0.83,22.7601732 0.83,21.2307692 C0.83,20.8083537 0.924579355,20.4080284 1.09371684,20.0498145 L9.35966608,1.68108512 C9.78247025,0.692617692 10.7638119,0 11.9069231,0 Z M18.3684615,14.7692308 C19.8978655,14.7692308 21.1376923,16.0090576 21.1376923,17.5384615 C21.1376923,19.0678655 19.8978655,20.3076923 18.3684615,20.3076923 C18.2141372,20.3076923 18.0627613,20.2950686 17.9153101,20.2707976 L12.83,19.8461538 L12.7298971,19.8440218 C11.5018339,19.7916084 10.5223077,18.7794252 10.5223077,17.5384615 C10.5223077,16.2639583 11.5554967,15.2307692 12.83,15.2307692 L17.9097768,14.8070421 C18.0589734,14.7821723 18.2122062,14.7692308 18.3684615,14.7692308 Z";
|
|
4
|
+
const logoSVG = `<svg viewBox="0 0 24 24" fill="currentColor"><path d="${logoPath}"></path></svg>`;
|
|
5
|
+
|
|
6
|
+
export { logoPath, logoSVG };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg width="64px" height="64px" viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
|
2
|
+
xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
3
|
+
<defs>
|
|
4
|
+
<linearGradient x1="0%" y1="100%" x2="100%" y2="0%" id="gradient">
|
|
5
|
+
<stop stop-color="#f88f52" offset="0%"></stop>
|
|
6
|
+
<stop stop-color="#ff3617" offset="50%"></stop>
|
|
7
|
+
<stop stop-color="#f88f52" offset="100%"></stop>
|
|
8
|
+
</linearGradient>
|
|
9
|
+
</defs>
|
|
10
|
+
<path
|
|
11
|
+
d="M31.75,6 C34.122314,6 36.1730607,7.37679377 37.1467937,9.37493517 L46.0820582,27.2460667 C46.5088993,28.0708256 46.75,29.0072568 46.75,30 C46.75,33.3137085 44.0637085,36 40.75,36 C38.377686,36 36.3269393,34.6232062 35.3532063,32.6250648 L32.035,25.987 L19.2784903,54.3354708 C18.3676407,56.488961 16.2352814,58 13.75,58 C10.4362915,58 7.75,55.3137085 7.75,52 C7.75,51.0847664 7.95492194,50.2173949 8.32138648,49.4412648 L26.2309432,9.64235109 C27.1470189,7.50067167 29.2732591,6 31.75,6 Z M45.75,38 C49.0637085,38 51.75,40.6862915 51.75,44 C51.75,47.3137085 49.0637085,50 45.75,50 C45.4156306,50 45.0876495,49.9726487 44.7681719,49.9200615 L33.75,49 L33.5331104,48.9953805 C30.8723067,48.8818181 28.75,46.6887547 28.75,44 C28.75,41.2385763 30.9885763,39 33.75,39 L44.756183,38.0819245 C45.0794424,38.02804 45.4114467,38 45.75,38 Z"
|
|
12
|
+
fill="url(#gradient)"></path>
|
|
13
|
+
</svg>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="630">
|
|
2
|
+
<!-- The app's dotted background, 1.5 times larger, fading out from the top-right corner. -->
|
|
3
|
+
<defs>
|
|
4
|
+
<pattern id="dots" width="24" height="24" patternUnits="userSpaceOnUse">
|
|
5
|
+
<circle cx="12" cy="12" r="3" fill="rgb(229, 231, 235)" fill-opacity="0.8" />
|
|
6
|
+
</pattern>
|
|
7
|
+
<radialGradient id="fade" cx="1200" cy="0" r="900" gradientUnits="userSpaceOnUse">
|
|
8
|
+
<stop offset="0" stop-color="white" />
|
|
9
|
+
<stop offset="1" stop-color="white" stop-opacity="0" />
|
|
10
|
+
</radialGradient>
|
|
11
|
+
<mask id="mask"><rect width="1200" height="630" fill="url(#fade)" /></mask>
|
|
12
|
+
</defs>
|
|
13
|
+
<rect width="1200" height="630" fill="url(#dots)" mask="url(#mask)" />
|
|
14
|
+
</svg>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
interface Props {
|
|
3
|
+
type?: "note" | "tip" | "warning" | "danger";
|
|
4
|
+
title?: string;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
const { type = "note", title } = Astro.props;
|
|
8
|
+
const icons = {
|
|
9
|
+
note: "i-lucide:info text-gray-500",
|
|
10
|
+
tip: "i-lucide:lightbulb bg-gradient-to-tr",
|
|
11
|
+
warning: "i-lucide:triangle-alert text-amber-500",
|
|
12
|
+
danger: "i-lucide:octagon-alert text-red-500"
|
|
13
|
+
};
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
<aside
|
|
17
|
+
role="note"
|
|
18
|
+
data-type={type}
|
|
19
|
+
class="my-2 flex gap-3 rounded-xl border border-gray-200 bg-white px-4 py-3 shadow-[0_0_12px_0px] shadow-gray-200"
|
|
20
|
+
>
|
|
21
|
+
<span aria-hidden="true" class:list={["mt-1 h-5 w-5 shrink-0", icons[type]]}></span>
|
|
22
|
+
<div class="min-w-0 flex-1">
|
|
23
|
+
{title && <p class="not-prose font-semibold text-gray-900">{title}</p>}
|
|
24
|
+
<div class="[&>*:first-child]:mt-0 [&>*:last-child]:mb-0"><slot /></div>
|
|
25
|
+
</div>
|
|
26
|
+
</aside>
|