vowel 0.1.6 → 0.1.8

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.
Files changed (46) hide show
  1. package/package.json +1 -1
  2. package/server.js +4 -1
  3. package/src/lib/components/Nav.svelte +3 -3
  4. package/src/lib/utilities/getPage.js +1 -0
  5. package/src/lib/utilities/processMarkdownFiles.js +1 -1
  6. package/src/routes/[...path]/+page.svelte +2 -2
  7. package/svelte.config.js +2 -5
  8. package/vite.config.js +2 -1
  9. package/content/$features/cards.md +0 -7
  10. package/content/$features/editing.md +0 -7
  11. package/content/$features/emoji.md +0 -7
  12. package/content/$features/frontmatter.md +0 -7
  13. package/content/$features/lists.md +0 -7
  14. package/content/$features/navigation.md +0 -7
  15. package/content/$features/rich-previews.md +0 -7
  16. package/content/$features/robots.md +0 -7
  17. package/content/$features/rss.md +0 -7
  18. package/content/$features/sitemap.md +0 -7
  19. package/content/$features/speed.md +0 -7
  20. package/content/$features/static.md +0 -7
  21. package/content/$features/taxonomies.md +0 -7
  22. package/content/.cache.json +0 -627
  23. package/content/.obsidian/app.json +0 -3
  24. package/content/.obsidian/appearance.json +0 -3
  25. package/content/.obsidian/core-plugins-migration.json +0 -30
  26. package/content/.obsidian/core-plugins.json +0 -20
  27. package/content/.obsidian/workspace.json +0 -168
  28. package/content/about.md +0 -3
  29. package/content/assets/open-props.css +0 -1630
  30. package/content/assets/styles-2.css +0 -128
  31. package/content/assets/styles-3.css +0 -275
  32. package/content/docs/file-structure.md +0 -31
  33. package/content/docs/folder-settings.md +0 -23
  34. package/content/docs/home.md +0 -8
  35. package/content/docs/images.md +0 -10
  36. package/content/docs/items.md +0 -13
  37. package/content/docs/pages.md +0 -64
  38. package/content/docs/quickstart.md +0 -52
  39. package/content/docs/run-build-deploy.md +0 -20
  40. package/content/docs/settings.md +0 -4
  41. package/content/docs/styling.md +0 -10
  42. package/content/docs/taxonomies.md +0 -37
  43. package/content/home.md +0 -33
  44. package/content/roadmap.md +0 -84
  45. package/content/settings.md +0 -12
  46. package/content/vercel.json +0 -5
@@ -1,128 +0,0 @@
1
- /* General Reset */
2
- * {
3
- margin: 0;
4
- padding: 0;
5
- box-sizing: border-box;
6
- }
7
-
8
- body {
9
- font-family: Arial, sans-serif;
10
- line-height: 1.6;
11
- color: #333;
12
- background-color: #f4f4f4;
13
- padding: 20px;
14
- }
15
-
16
- .container {
17
- max-width: 800px;
18
- margin: auto;
19
- background: white;
20
- padding: 20px;
21
- border-radius: 5px;
22
- box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
23
- }
24
-
25
- a {
26
- color: #333;
27
- text-decoration: none;
28
- }
29
-
30
- /* Header */
31
- header {
32
- margin-bottom: 20px;
33
- }
34
-
35
- header h1 {
36
- margin-bottom: 10px;
37
- }
38
-
39
- header nav a.active {
40
- font-weight: bold;
41
- }
42
-
43
- .breadcrumbs {
44
- display: none;
45
- }
46
-
47
- /* Main Content */
48
- main.home {
49
- margin-bottom: 20px;
50
- }
51
-
52
- main.home > header h2 {
53
- display: none;
54
- }
55
-
56
- main.home h2,
57
- main.home h4 {
58
- color: #333;
59
- margin-bottom: 10px;
60
- }
61
-
62
- main.home p,
63
- main.home pre {
64
- margin-bottom: 10px;
65
- }
66
-
67
- main ul {
68
- margin-inline-start: 1.2rem;
69
- }
70
-
71
- main.home pre {
72
- background-color: #eee;
73
- padding: 10px;
74
- border-radius: 5px;
75
- overflow: auto;
76
- }
77
-
78
- main.home code {
79
- background-color: #f9f9f9;
80
- color: #d63384;
81
- padding: 2px 5px;
82
- border-radius: 3px;
83
- }
84
-
85
- main > article > :not(header) {
86
- display: none;
87
- }
88
-
89
- /* Sitemap Aside */
90
- aside.sitemap {
91
- margin: auto;
92
- display: flex;
93
- justify-content: center;
94
- }
95
-
96
- aside.sitemap > ul > li:first-child {
97
- display: none;
98
- }
99
-
100
- aside.sitemap ul {
101
- background: rgba(0, 0, 0, 0.03);
102
- padding: 0.5rem;
103
- border-radius: 0.5rem;
104
- list-style: none;
105
- margin-left: 1rem;
106
- /* margin-bottom: 20px; */
107
- }
108
-
109
- aside.sitemap ul:not(:last-child) {
110
- margin-bottom: 0.5rem;
111
- }
112
-
113
- aside.sitemap ul:not(:has(li)) {
114
- display: none;
115
- }
116
-
117
- aside.sitemap a {
118
- display: block;
119
- padding: 5px 0;
120
- }
121
-
122
- /* Footer */
123
- footer {
124
- text-align: center;
125
- margin-top: 20px;
126
- font-size: 0.8em;
127
- color: #666;
128
- }
@@ -1,275 +0,0 @@
1
- @import '/open-props.css';
2
-
3
- /* CONTAINER */
4
- html {
5
- overflow-y: scroll;
6
- }
7
-
8
- .page {
9
- display: grid;
10
- grid-template-rows: auto 1fr auto;
11
- grid-template-columns: 1fr minmax(auto, var(--size-content-3)) 1fr;
12
- grid-template-areas:
13
- 'header header header'
14
- '. main .'
15
- 'aside aside aside'
16
- 'footer footer footer';
17
- min-height: 100vh;
18
- padding-block: 3rem;
19
- padding-inline: 3vw;
20
- row-gap: var(--size-6);
21
- }
22
-
23
- .page.docs {
24
- grid-template-areas:
25
- 'header header header'
26
- 'aside main main'
27
- 'footer footer footer';
28
- column-gap: var(--size-8);
29
- }
30
-
31
- .page.docs aside.sitemap {
32
- margin-top: 0;
33
- padding-top: 0;
34
- }
35
-
36
- .page.docs main {
37
- max-width: var(--size-content-3);
38
- }
39
-
40
- .page.docs aside.sitemap > ul > li:not(.docs) {
41
- display: none;
42
- }
43
-
44
- @media only screen and (max-width: 600px) {
45
- .page {
46
- grid-template-areas:
47
- 'header header header'
48
- 'main main main'
49
- 'aside aside aside'
50
- 'footer footer footer';
51
- }
52
- }
53
-
54
- /* HEADER */
55
-
56
- header {
57
- grid-column-start: 1;
58
- grid-column-end: 4;
59
- display: grid;
60
- grid-template-columns: subgrid;
61
- row-gap: var(--size-6);
62
- }
63
-
64
- h1 {
65
- grid-column-start: 1;
66
- grid-column-end: 3;
67
- line-height: 1;
68
- text-transform: uppercase;
69
- font-stretch: 105%;
70
- }
71
-
72
- .slogan {
73
- margin-top: auto;
74
- margin-left: auto;
75
- margin-bottom: 4px;
76
- width: min-content;
77
- line-height: 0.9;
78
- font-size: var(--font-size-1);
79
- text-transform: uppercase;
80
- font-weight: 100;
81
- font-stretch: 115%;
82
- text-align: right;
83
- grid-column-start: 3;
84
- grid-column-end: 4;
85
- }
86
-
87
- nav {
88
- grid-column-start: 1;
89
- grid-column-end: 4;
90
- width: 100%;
91
- display: flex;
92
- gap: 1rem;
93
- /* justify-content: space-between; */
94
- padding-block: 0.5rem;
95
- border-bottom: 1px solid var(--h1-color);
96
- text-transform: uppercase;
97
- font-weight: 300;
98
- font-stretch: 105%;
99
- font-size: var(--font-size-1);
100
- opacity: 80%;
101
- }
102
-
103
- nav a {
104
- color: var(--h6-color);
105
- }
106
-
107
- nav:not(:first-of-type) {
108
- display: none;
109
- }
110
-
111
- .breadcrumbs {
112
- font-size: var(--font-size-1);
113
- width: 100%;
114
- max-width: var(--size-content-3);
115
- grid-column-start: 2;
116
- grid-column-end: 3;
117
- }
118
-
119
- /* MAIN */
120
-
121
- main {
122
- grid-area: main;
123
- overflow-x: hidden;
124
- }
125
-
126
- /* BREADCRUMBS */
127
-
128
- .breadcrumbs {
129
- text-transform: uppercase;
130
- font-size: 0.8rem;
131
- }
132
-
133
- .breadcrumbs .separator:after {
134
- margin-inline: 0.2rem;
135
- content: '/';
136
- }
137
-
138
- /* FRONTMATTER */
139
-
140
- main > header > h2 {
141
- margin-bottom: 5rem;
142
- /* color: var(--gray-3); */
143
- }
144
-
145
- header a {
146
- color: unset;
147
- text-decoration: unset;
148
- }
149
-
150
- time {
151
- color: grey;
152
- font-family: Arial, Helvetica, sans-serif;
153
- }
154
-
155
- dl {
156
- padding: 0;
157
- gap: 1rem;
158
- grid-template-columns: auto 1fr;
159
- grid-column-gap: 1rem;
160
- grid-row-gap: 0px;
161
- font-family: Georgia;
162
- display: none;
163
- }
164
-
165
- dt {
166
- display: none;
167
- }
168
-
169
- dd {
170
- margin: 0;
171
- }
172
-
173
- dd {
174
- display: none;
175
- }
176
-
177
- dd.description {
178
- display: block;
179
- }
180
-
181
- /* PAGES */
182
-
183
- .home > header > h2 {
184
- display: none;
185
- }
186
-
187
- main > .content > :is(h2, h3, h4, pre, ul, ol, p, article) {
188
- margin-bottom: var(--size-4);
189
- }
190
-
191
- main > .content > :is(h2, h3, h4) {
192
- margin-top: var(--size-6);
193
- }
194
-
195
- /* THUMBNAILS */
196
-
197
- .thumbnail .content {
198
- display: none;
199
- }
200
-
201
- .thumbnail :is(dl, dd) {
202
- display: block;
203
- font-family: var(--sans-serif);
204
- }
205
-
206
- .thumbnail {
207
- border: 2px solid white;
208
- border-radius: var(--size-4);
209
- padding: var(--size-4);
210
- margin-block: var(--size-4);
211
- }
212
-
213
- .thumbnail a:hover {
214
- text-decoration: none;
215
- }
216
-
217
- /* TYPOGRAPHY */
218
-
219
- pre {
220
- background: var(--surface-2);
221
- padding: var(--size-2) var(--size-4);
222
- display: block;
223
- max-inline-size: 100%;
224
- overflow-x: scroll;
225
- }
226
-
227
- /* IMAGES */
228
-
229
- p img {
230
- margin: 5rem auto;
231
- }
232
-
233
- /* FOOTER */
234
-
235
- footer {
236
- grid-area: footer;
237
- margin: 5rem auto;
238
- }
239
-
240
- /* SITEMAP */
241
-
242
- aside.sitemap {
243
- display: flex;
244
- border-top: 1px solid var(--h6-color);
245
- margin-block: 2rem;
246
- padding-block: 2rem;
247
- grid-area: aside;
248
- justify-content: center;
249
- }
250
-
251
- aside.sitemap ul {
252
- list-style: none;
253
- opacity: 0.8;
254
- padding: 0;
255
- }
256
-
257
- aside.sitemap ul {
258
- /* margin-block: 0; */
259
- }
260
-
261
- a article.link-preview {
262
- /* display: none; */
263
- }
264
-
265
- article.link-preview:has(a) {
266
- display: block;
267
- }
268
-
269
- article.link-preview p {
270
- color: var(--h5-color);
271
- }
272
-
273
- a:hover:has(article) {
274
- text-decoration: none;
275
- }
@@ -1,31 +0,0 @@
1
- ---
2
- title: File structure
3
- breadcrumb: Files
4
- description: Organize your files.
5
- ---
6
-
7
- Your website is made of folders and markdown files. Every folder should have a `home.md` file. Every folder can also have a `settings.md` file to apply folder-level settings, such as the `breadcrumb`.
8
-
9
- Almost every file and folder represents a page on your website:
10
-
11
- - `home.md` is your homepage, `/`
12
- - `about.md` would be your about page, `/about`
13
- - `blog/home.md` would be your blog homepage, `/blog`
14
- - `blog/hello-world.md` would be a blog post, `/blog/hello-world`
15
-
16
- (File names like `Hello World.md` also seem to work fine so far.))
17
-
18
- Even if a folder doesn't have a `home.md` file, it will still generate a page, so long as it contains any markdown files. So, if you have a `blog` folder with posts inside it, Vowel will generate a `/blog` homepage even if you don't have a `/blog/home.md` file.
19
-
20
- There are a few special files and folders:
21
-
22
- - `assets/` contains some static files
23
- - `assets/styles.css` contains your stylesheet, which will be automatically applied if present
24
- - `assets/favicon.png` is your favicon
25
- - `templates/` is a commonly-used directory in Obsidian projects, so it will be ignored
26
- - A `settings.md` file will not generate a page. If you want a page called `settings`, you can create a `/settings/home.md` file.
27
- - `.cache.json`
28
- - `.output/`
29
- - `vercel.json`
30
-
31
- Any files prefixed with a period will be ignored, as will any files that are not markdown.
@@ -1,23 +0,0 @@
1
- ---
2
- title: Folder settings
3
- breadcrumb: Folders
4
- description: Configure your project.
5
- ---
6
-
7
- Every folder should have a `settings.md` file with one property:
8
-
9
- - `breadcrumb`: A navigation label
10
-
11
- At the root of the project, there should be a global settings file with the `breadcrumb` property and any of the following properties:
12
-
13
- - All folder settings, plus
14
- - `title`: Website title
15
- - `robots`
16
- - `google`: Allow Google Search indexing (`true`/`false`)
17
- - `google_images`: Allow Google Image indexing (`true`/`false`)
18
- - `ai`: Allow AI training (`true`/`false`)
19
- - `domain`: Full root URL for the website domain (e.g. `https://example.com`)
20
- - `author`: Website author credit for RSS and copyright
21
- - `icon`: An emoji to use as the site favicon
22
- - `slogan`: The website slogan
23
- - `logo`: The website logo
@@ -1,8 +0,0 @@
1
- ---
2
- title: Documentation
3
- description: Learn how to use Vowel.
4
- ---
5
-
6
- Let's get started.
7
-
8
- /docs?count=100
@@ -1,10 +0,0 @@
1
- ---
2
- title: Images
3
- description: How to host images.
4
- ---
5
-
6
- You can put images in the `assets` folder, but this is discouraged, as it could result in a large bandwidth bill from your hosting provider.
7
-
8
- We recommend hosting images elsewhere.
9
-
10
- Images hosted on imgix will automatically be optimized, compressed, and formatted.
@@ -1,13 +0,0 @@
1
- # Items
2
-
3
- With Vowel, you can create reusable pieces of content and embed them throughout your website.
4
-
5
- To create one, prefix a file or folder with a `$`, such as `$faqs`. The file or folder will not produce a page, but the content can be displayed on other pages, like so:
6
-
7
- ```md
8
- Here are answers to common questions:
9
-
10
- /$faqs?count=10
11
- ```
12
-
13
- This also allows richer content, as the item will be displayed with frontmatter.
@@ -1,64 +0,0 @@
1
- ---
2
- title: Pages
3
- description: Create content.
4
- ---
5
-
6
- The `body` element on each page has a class representing the current page. The homepage has classes `"page home"`, while a blog post might have `"page blog-hello-world"`.
7
-
8
- Vowel attempts to construct a logical semantic HTML structure based on the files and folders in your website.
9
-
10
- To do this, Vowel distinguishes between evergreen pages and ephemeral pages. A page with a `date` property is considered ephemeral, so it is excluded from the navigation and sitemap.
11
-
12
- Vowel will automatically create a multi-level nav, with one level for each parent folder for the current page.
13
-
14
- Vowel will create a full side navigation that displays all evergreen pages.
15
-
16
- # Frontmatter
17
-
18
- Reserved properties
19
-
20
- - `title`: Page title
21
- - `image`: Page image
22
- - `description`: Page description
23
- - `date`: Date published
24
- - `breadcrumb`: Short identifier for the page
25
-
26
- Vowel will attempt to impute the type of each frontmatter property. Imputed types include:
27
-
28
- - Links (Will generate a link preview)
29
- - Images (will display the image)
30
- - Date (will render a pretty date in a `time` element)
31
-
32
- You can also use lists and objects in frontmatter.
33
-
34
- # Markdown
35
-
36
- Along with all standard markdown, Vowel also allows the following special elements:
37
-
38
- ## Rich link previews
39
-
40
- Paste a URL on its own line (e.g. `https://example.com`).
41
-
42
- ## Internal link previews
43
-
44
- Paste a relative path to a page (e.g. `/about`).
45
-
46
- The link will be rendered as an `article` element with a class representing the linked path (e.g. `page-blog-hello-world`).
47
-
48
- ## Page lists
49
-
50
- A relative path to a folder with a `count` parameter (e.g. `/blog?count=2`). This will exclude the `home.md` file for the folder. In this example, it would return the `/blog/hello-world.md` file but not `/blog/home.md`.
51
-
52
- The page list will order pages first by date in reverse chronology (newest to oldest) and then alphabetically (a to z).
53
-
54
- The list will be rendered as `article` elements (see above) in a `section` element. The `section` element will have a class representing the folder path (e.g. `folder-blog`).
55
-
56
- ## Headings
57
-
58
- If your document starts with an `h1` (`#`) and has no `title` property, the `h1` will be used as the meta title.
59
-
60
- If your document includes `h1`s after the title, all headings will be demoted one level (`#` to `h2`, `##` to `h3`).
61
-
62
- ## Description
63
-
64
- If your document doesn't include a `description`, a meta description will be extracted from the text.
@@ -1,52 +0,0 @@
1
- ---
2
- title: Quickstart
3
- description: Get started with Vowel.
4
- ---
5
-
6
- ## With npx
7
-
8
- npx is the easiest way to use vowel:
9
-
10
- ```
11
- npx -p svelte@next -p vowel@latest npx vowel
12
- ```
13
-
14
- Vowel will attempt to generate a website based on the contents of your file.
15
-
16
- ## With npm
17
-
18
- Create a directory. Then, open that directory and run these commands in your terminal:
19
-
20
- ```bash
21
- npm init --y && npm i vowel svelte@next
22
- ```
23
-
24
- Edit your `package.json` to add these `scripts`:
25
-
26
- ```json
27
- {
28
- "dev": "vowel",
29
- "build": "vowel build"
30
- }
31
- ```
32
-
33
- Now run `npm run dev`.
34
-
35
- ## Starter files
36
-
37
- Create `home.md` and enter some basic information
38
-
39
- ```md
40
- # Your website
41
-
42
- Lorem ipsum...
43
- ```
44
-
45
- Create `settings.md` and enter some basic information in the frontmatter:
46
-
47
- ```
48
- ---
49
- breadcrumb: Home
50
- domain: https://example.com
51
- ---
52
- ```
@@ -1,20 +0,0 @@
1
- ---
2
- title: Deploy
3
- description: Get going.
4
- ---
5
-
6
- See the [quickstart](/docs/quickstart) for instructions on how to use npm.
7
-
8
- # Building
9
-
10
- Run `npm run build` (`vowel build`) to build your website.
11
-
12
- Alternatively, with npx, run:
13
-
14
- ```
15
- npx -p svelte@next -p vowel@latest npx vowel build
16
- ```
17
-
18
- # Deploy
19
-
20
- We recommend deploying on Vercel. Run `npx vercel` to deploy your project. Ignore all of the build settings (except project title), as your project will include a `vercel.json` file with build settings.
@@ -1,4 +0,0 @@
1
- ---
2
- title: Documentation
3
- breadcrumb: Docs
4
- ---
@@ -1,10 +0,0 @@
1
- ---
2
- title: Styling
3
- description: Add styles to your website.
4
- ---
5
-
6
- Vowel include some default styles.
7
-
8
- Create an `assets/styles.css` file for your styling. We recommend using a style framework like Pico or Open Props. You can simply download their stylesheet and either copy-paste it into your own or include it in `assets/` and `import` it into `assets/styles.css`.
9
-
10
- Beware: This project is still in development, so the generated markup is likely to change quickly and without warning, which will break your CSS. You might want to pin your version.
@@ -1,37 +0,0 @@
1
- ---
2
- title: Taxonomies
3
- description: Create tags, categories, and authors.
4
- ---
5
-
6
- If the key for a frontmatter property matches a folder at the root of your project, Vowel will attempt to treat it as a taxonomy and link to the respective page.
7
-
8
- For instance, in this folder structure:
9
-
10
- ```
11
- .
12
- ├── home.md
13
- ├── design.md
14
- ├── recipes.md
15
- └── category/
16
- ├── inspiration.md
17
- └── lifestyle.md
18
- ```
19
-
20
- You can write the following frontmatter in `design.md`:
21
-
22
- ```
23
- ---
24
- title: Design
25
- category: inspiration
26
- ---
27
- ```
28
-
29
- Vowel will render the property as a link to `/category/inspiration`.
30
-
31
- Then, in `category/inspiration.md` (or anywhere) you can display all inspiration posts with a post list:
32
-
33
- ```
34
- /?property=category.inspiration
35
- ```
36
-
37
- This allows you to create author pages, category pages.