@fusion.dev/helix-templates 0.140.0 → 0.141.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/dist/index.js +6 -6
- package/package.json +1 -1
- package/templates/angular/src/app/landing.html +6 -6
- package/templates/angular/src/app/signup-form.html +4 -4
- package/templates/angular/src/app/site-footer.html +3 -6
- package/templates/angular/src/app/site-footer.ts +2 -2
- package/templates/angular/src/app/site-header.html +3 -6
- package/templates/angular/src/app.css +20 -19
- package/templates/react-nextjs/app/app.css +20 -19
- package/templates/react-nextjs/app/landing.tsx +4 -8
- package/templates/react-nextjs/app/signup-form.tsx +4 -5
- package/templates/react-nextjs/app/site-footer.tsx +5 -8
- package/templates/react-nextjs/app/site-header.tsx +3 -7
- package/templates/react-nextjs/tsconfig.json +4 -1
- package/templates/react-vite/src/app.css +20 -19
- package/templates/react-vite/src/landing.tsx +4 -8
- package/templates/react-vite/src/signup-form.tsx +4 -5
- package/templates/react-vite/src/site-footer.tsx +5 -8
- package/templates/react-vite/src/site-header.tsx +3 -7
- package/templates/solid-vite/src/app.css +20 -19
- package/templates/solid-vite/src/landing.tsx +4 -8
- package/templates/solid-vite/src/signup-form.tsx +4 -4
- package/templates/solid-vite/src/site-footer.tsx +5 -8
- package/templates/solid-vite/src/site-header.tsx +3 -6
- package/templates/svelte-vite/src/Landing.svelte +6 -6
- package/templates/svelte-vite/src/SignupForm.svelte +4 -4
- package/templates/svelte-vite/src/SiteFooter.svelte +5 -8
- package/templates/svelte-vite/src/SiteHeader.svelte +3 -5
- package/templates/svelte-vite/src/app.css +20 -19
- package/templates/vue-vite/src/LandingPage.vue +6 -6
- package/templates/vue-vite/src/SignupForm.vue +4 -4
- package/templates/vue-vite/src/SiteFooter.vue +5 -8
- package/templates/vue-vite/src/SiteHeader.vue +3 -6
- package/templates/vue-vite/src/app.css +20 -19
- package/templates.json +4 -10
package/dist/index.js
CHANGED
|
@@ -2,37 +2,37 @@ export const templates = [
|
|
|
2
2
|
{
|
|
3
3
|
description: 'React and TypeScript on Vite. The shortest path to a running app.',
|
|
4
4
|
id: 'react-vite',
|
|
5
|
-
named: ['index.html', 'package.json'
|
|
5
|
+
named: ['index.html', 'package.json'],
|
|
6
6
|
title: 'React (Vite)',
|
|
7
7
|
},
|
|
8
8
|
{
|
|
9
9
|
description: 'React and TypeScript on the Next.js App Router, with the three pages as real routes.',
|
|
10
10
|
id: 'react-nextjs',
|
|
11
|
-
named: ['app/layout.tsx', '
|
|
11
|
+
named: ['app/layout.tsx', 'package.json'],
|
|
12
12
|
title: 'React (Next.js)',
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
description: 'Vue and TypeScript on Vite.',
|
|
16
16
|
id: 'vue-vite',
|
|
17
|
-
named: ['index.html', 'package.json'
|
|
17
|
+
named: ['index.html', 'package.json'],
|
|
18
18
|
title: 'Vue (Vite)',
|
|
19
19
|
},
|
|
20
20
|
{
|
|
21
21
|
description: 'Angular and TypeScript on the Angular CLI.',
|
|
22
22
|
id: 'angular',
|
|
23
|
-
named: ['angular.json', 'package.json', 'src/
|
|
23
|
+
named: ['angular.json', 'package.json', 'src/index.html'],
|
|
24
24
|
title: 'Angular',
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
description: 'Svelte and TypeScript on Vite.',
|
|
28
28
|
id: 'svelte-vite',
|
|
29
|
-
named: ['index.html', 'package.json'
|
|
29
|
+
named: ['index.html', 'package.json'],
|
|
30
30
|
title: 'Svelte (Vite)',
|
|
31
31
|
},
|
|
32
32
|
{
|
|
33
33
|
description: 'Solid and TypeScript on Vite.',
|
|
34
34
|
id: 'solid-vite',
|
|
35
|
-
named: ['index.html', 'package.json'
|
|
35
|
+
named: ['index.html', 'package.json'],
|
|
36
36
|
title: 'Solid (Vite)',
|
|
37
37
|
},
|
|
38
38
|
];
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fusion.dev/helix-templates",
|
|
3
3
|
"description": "Starter templates for Helix, as data. Read by `helix new` and by `npm create @fusion.dev/helix-app`.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.141.0",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Ross Sheppard <ross.sheppard@fusion.dev>",
|
|
7
7
|
"repository": {
|
|
@@ -16,12 +16,13 @@
|
|
|
16
16
|
</div>
|
|
17
17
|
</div>
|
|
18
18
|
|
|
19
|
-
<!-- **The library at work, on the first screen.** The figures are the
|
|
20
|
-
the data view draws, read from the same module, so the panel
|
|
21
|
-
itself, on glass over the light.
|
|
19
|
+
<!-- **The library at work, on the first screen.** The figures are the
|
|
20
|
+
roster the data view draws, read from the same module, so the panel
|
|
21
|
+
is the app itself, on glass over the light. It has no link of its own:
|
|
22
|
+
the button beside it goes to the same page. -->
|
|
22
23
|
<helix-card class="specimen" material="glass" separation="outlined">
|
|
23
|
-
<helix-text as="h2" slot="header" variant="title">
|
|
24
|
-
<helix-stat-group
|
|
24
|
+
<helix-text as="h2" slot="header" variant="title">Roster</helix-text>
|
|
25
|
+
<helix-stat-group>
|
|
25
26
|
<helix-stat>
|
|
26
27
|
{{ roster.people }}
|
|
27
28
|
<span slot="label">People</span>
|
|
@@ -35,7 +36,6 @@
|
|
|
35
36
|
<span slot="label">Reviews</span>
|
|
36
37
|
</helix-stat>
|
|
37
38
|
</helix-stat-group>
|
|
38
|
-
<a data-link href="#/overview" slot="footer">Open the data view</a>
|
|
39
39
|
</helix-card>
|
|
40
40
|
</header>
|
|
41
41
|
|
|
@@ -49,10 +49,10 @@
|
|
|
49
49
|
|
|
50
50
|
<aside class="notes">
|
|
51
51
|
<!-- The one fact you need before typing your name into a page you have
|
|
52
|
-
had for five minutes, so it is a callout. `
|
|
53
|
-
|
|
54
|
-
start, so it
|
|
55
|
-
<helix-callout tone="
|
|
52
|
+
had for five minutes, so it is a callout. `neutral` is a note that
|
|
53
|
+
reports no status, drawn in the muted ink with a bar on the inline
|
|
54
|
+
start, so it stays in the palette, ink or brand. -->
|
|
55
|
+
<helix-callout tone="neutral">
|
|
56
56
|
The form posts nothing. Submit it, and a message shows exactly what a server would receive.
|
|
57
57
|
</helix-callout>
|
|
58
58
|
<helix-text as="h2" variant="title">What the form shows</helix-text>
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
<div class="footer-row">
|
|
2
|
-
<helix-text as="p" emphasis="subtle" variant="caption">
|
|
3
|
-
Every component here has a page, with its API, its parts, and its examples.
|
|
4
|
-
</helix-text>
|
|
5
2
|
<div class="footer-links">
|
|
6
|
-
<a data-link="
|
|
7
|
-
<a data-link="
|
|
8
|
-
<a data-link="
|
|
3
|
+
<a data-link="quiet" [href]="docs.gallery">Components</a>
|
|
4
|
+
<a data-link="quiet" [href]="docs.elements">Documentation</a>
|
|
5
|
+
<a data-link="quiet" [href]="docs.angular">Angular</a>
|
|
9
6
|
</div>
|
|
10
7
|
</div>
|
|
@@ -8,8 +8,8 @@ import { DOCS } from './docs'
|
|
|
8
8
|
* and a caption, which on a tall window left the bottom third of the screen
|
|
9
9
|
* empty. The footer is also where the links you want once belong.
|
|
10
10
|
*
|
|
11
|
-
* `data-link="
|
|
12
|
-
* row of links under a rule.
|
|
11
|
+
* `data-link="quiet"` sets a link in the muted ink with no underline, and it
|
|
12
|
+
* takes the foreground on hover, which suits a row of links under a rule.
|
|
13
13
|
*/
|
|
14
14
|
@Component({
|
|
15
15
|
host: { class: 'site-footer' },
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
<helix-app-header material="glass" sticky>
|
|
2
2
|
<!-- The wordmark is the way back to the first page, so there is no third
|
|
3
|
-
destination in the bar saying the same thing. It
|
|
4
|
-
|
|
5
|
-
drawn in `--helix-color-brand-mark`, the token for the brand as a
|
|
6
|
-
graphic. -->
|
|
3
|
+
destination in the bar saying the same thing. It names the library the
|
|
4
|
+
starter is built on, and it is the place for your own name or logo. -->
|
|
7
5
|
<a class="wordmark" data-link="quiet" href="#/" slot="start">
|
|
8
|
-
<helix-
|
|
9
|
-
<helix-text variant="body-strong">__PROJECT_NAME__</helix-text>
|
|
6
|
+
<helix-text variant="body-strong">Helix</helix-text>
|
|
10
7
|
</a>
|
|
11
8
|
|
|
12
9
|
<!-- The links are yours. Navigation owns the marker that travels between
|
|
@@ -6,10 +6,14 @@
|
|
|
6
6
|
* open. Everything below is a Helix token or a documented hook, so a theme
|
|
7
7
|
* changes it, and both color modes follow from one copy.
|
|
8
8
|
*
|
|
9
|
-
* **
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* **Your brand color is one line.** With no brand set, Helix draws in ink,
|
|
10
|
+
* near-black in light mode and near-white in dark. Set `--helix-seed-brand` on
|
|
11
|
+
* `:root`, and every token follows it.
|
|
12
|
+
*
|
|
13
|
+
* **Color appears in two places, and both are named.** Each tile's icon takes
|
|
14
|
+
* `--helix-color-primary` on `--helix-color-primary-subtle`, and a chosen row
|
|
15
|
+
* takes `--helix-color-primary-subtle` through the parts the table publishes.
|
|
16
|
+
* Everywhere else the page is the foreground on the background, and the
|
|
13
17
|
* components carry their own color.
|
|
14
18
|
*/
|
|
15
19
|
|
|
@@ -59,20 +63,18 @@ helix-app-header {
|
|
|
59
63
|
--app-header-max-inline-size: 56rem;
|
|
60
64
|
}
|
|
61
65
|
|
|
62
|
-
/* The
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
+
/* The wordmark, a word for now, in the foreground: a quiet link is muted until
|
|
67
|
+
it is pointed at, and the name is the strongest thing in the bar. Give it your
|
|
68
|
+
own name, or put your logo beside it in `--helix-color-brand-mark`, the token
|
|
69
|
+
for the brand as a graphic: WCAG asks 3:1 of a graphic and 4.5:1 of text, so a
|
|
70
|
+
mark can sit closer to a theme's brand color than any text color can. */
|
|
66
71
|
.wordmark {
|
|
67
72
|
align-items: center;
|
|
73
|
+
color: var(--helix-color-foreground);
|
|
68
74
|
display: inline-flex;
|
|
69
75
|
gap: var(--helix-space-xs);
|
|
70
76
|
}
|
|
71
77
|
|
|
72
|
-
.wordmark helix-icon {
|
|
73
|
-
color: var(--helix-color-brand-mark);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
78
|
/*
|
|
77
79
|
* One rhythm between the blocks of a page, so no page sets its own.
|
|
78
80
|
*
|
|
@@ -185,12 +187,11 @@ helix-app-header {
|
|
|
185
187
|
* **The panel is the library at work**, so all it needs from here is room. Two
|
|
186
188
|
* documented hooks: the figures come down a step from the display size, which
|
|
187
189
|
* suits one figure on its own and is too loud for three in an 18rem column, and
|
|
188
|
-
* the gap
|
|
189
|
-
* doubles, leaving no room for a number.
|
|
190
|
+
* the gap between them is wide enough to set them apart with no rule.
|
|
190
191
|
*/
|
|
191
192
|
.specimen {
|
|
192
|
-
--stat-group-gap: var(--helix-space-
|
|
193
|
-
--stat-value-size: var(--helix-text-
|
|
193
|
+
--stat-group-gap: var(--helix-space-xl);
|
|
194
|
+
--stat-value-size: var(--helix-text-2xl);
|
|
194
195
|
}
|
|
195
196
|
|
|
196
197
|
/* A section is its heading and its one block, closer together than two sections
|
|
@@ -341,9 +342,9 @@ helix-app-header {
|
|
|
341
342
|
* left of every chosen row.
|
|
342
343
|
*
|
|
343
344
|
* The values are still the library's, so a theme carries them like everything
|
|
344
|
-
* else. `primary-subtle`, because `primary-surface` is the solid
|
|
345
|
-
* button stands on, made for
|
|
346
|
-
* table's own ink on a
|
|
345
|
+
* else. `primary-subtle`, because `primary-surface` is the solid fill a
|
|
346
|
+
* button stands on, made for its own label, so a row painted with it would put
|
|
347
|
+
* the table's own ink on a solid fill.
|
|
347
348
|
*/
|
|
348
349
|
helix-data-table::part(cell-selected),
|
|
349
350
|
helix-data-table::part(select-selected) {
|
|
@@ -6,10 +6,14 @@
|
|
|
6
6
|
* open. Everything below is a Helix token or a documented hook, so a theme
|
|
7
7
|
* changes it, and both color modes follow from one copy.
|
|
8
8
|
*
|
|
9
|
-
* **
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* **Your brand color is one line.** With no brand set, Helix draws in ink,
|
|
10
|
+
* near-black in light mode and near-white in dark. Set `--helix-seed-brand` on
|
|
11
|
+
* `:root`, and every token follows it.
|
|
12
|
+
*
|
|
13
|
+
* **Color appears in two places, and both are named.** Each tile's icon takes
|
|
14
|
+
* `--helix-color-primary` on `--helix-color-primary-subtle`, and a chosen row
|
|
15
|
+
* takes `--helix-color-primary-subtle` through the parts the table publishes.
|
|
16
|
+
* Everywhere else the page is the foreground on the background, and the
|
|
13
17
|
* components carry their own color.
|
|
14
18
|
*/
|
|
15
19
|
|
|
@@ -59,20 +63,18 @@ helix-app-header {
|
|
|
59
63
|
--app-header-max-inline-size: 56rem;
|
|
60
64
|
}
|
|
61
65
|
|
|
62
|
-
/* The
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
+
/* The wordmark, a word for now, in the foreground: a quiet link is muted until
|
|
67
|
+
it is pointed at, and the name is the strongest thing in the bar. Give it your
|
|
68
|
+
own name, or put your logo beside it in `--helix-color-brand-mark`, the token
|
|
69
|
+
for the brand as a graphic: WCAG asks 3:1 of a graphic and 4.5:1 of text, so a
|
|
70
|
+
mark can sit closer to a theme's brand color than any text color can. */
|
|
66
71
|
.wordmark {
|
|
67
72
|
align-items: center;
|
|
73
|
+
color: var(--helix-color-foreground);
|
|
68
74
|
display: inline-flex;
|
|
69
75
|
gap: var(--helix-space-xs);
|
|
70
76
|
}
|
|
71
77
|
|
|
72
|
-
.wordmark helix-icon {
|
|
73
|
-
color: var(--helix-color-brand-mark);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
78
|
/*
|
|
77
79
|
* One rhythm between the blocks of a page, so no page sets its own.
|
|
78
80
|
*
|
|
@@ -185,12 +187,11 @@ helix-app-header {
|
|
|
185
187
|
* **The panel is the library at work**, so all it needs from here is room. Two
|
|
186
188
|
* documented hooks: the figures come down a step from the display size, which
|
|
187
189
|
* suits one figure on its own and is too loud for three in an 18rem column, and
|
|
188
|
-
* the gap
|
|
189
|
-
* doubles, leaving no room for a number.
|
|
190
|
+
* the gap between them is wide enough to set them apart with no rule.
|
|
190
191
|
*/
|
|
191
192
|
.specimen {
|
|
192
|
-
--stat-group-gap: var(--helix-space-
|
|
193
|
-
--stat-value-size: var(--helix-text-
|
|
193
|
+
--stat-group-gap: var(--helix-space-xl);
|
|
194
|
+
--stat-value-size: var(--helix-text-2xl);
|
|
194
195
|
}
|
|
195
196
|
|
|
196
197
|
/* A section is its heading and its one block, closer together than two sections
|
|
@@ -341,9 +342,9 @@ helix-app-header {
|
|
|
341
342
|
* left of every chosen row.
|
|
342
343
|
*
|
|
343
344
|
* The values are still the library's, so a theme carries them like everything
|
|
344
|
-
* else. `primary-subtle`, because `primary-surface` is the solid
|
|
345
|
-
* button stands on, made for
|
|
346
|
-
* table's own ink on a
|
|
345
|
+
* else. `primary-subtle`, because `primary-surface` is the solid fill a
|
|
346
|
+
* button stands on, made for its own label, so a row painted with it would put
|
|
347
|
+
* the table's own ink on a solid fill.
|
|
347
348
|
*/
|
|
348
349
|
helix-data-table::part(cell-selected),
|
|
349
350
|
helix-data-table::part(select-selected) {
|
|
@@ -53,12 +53,11 @@ export function Landing() {
|
|
|
53
53
|
|
|
54
54
|
{/* **The library at work, on the first screen.** The figures are the
|
|
55
55
|
roster the data view draws, read from the same module, so the panel
|
|
56
|
-
is the app itself, on glass over the light.
|
|
56
|
+
is the app itself, on glass over the light. It has no link of its own:
|
|
57
|
+
the button beside it goes to the same page. */}
|
|
57
58
|
<helix-card className="specimen" material="glass" separation="outlined">
|
|
58
|
-
<helix-text as="h2" slot="header" variant="title">
|
|
59
|
-
|
|
60
|
-
</helix-text>
|
|
61
|
-
<helix-stat-group divided>
|
|
59
|
+
<helix-text as="h2" slot="header" variant="title">Roster</helix-text>
|
|
60
|
+
<helix-stat-group>
|
|
62
61
|
<helix-stat>
|
|
63
62
|
{roster.people}
|
|
64
63
|
<span slot="label">People</span>
|
|
@@ -72,9 +71,6 @@ export function Landing() {
|
|
|
72
71
|
<span slot="label">Reviews</span>
|
|
73
72
|
</helix-stat>
|
|
74
73
|
</helix-stat-group>
|
|
75
|
-
<Link data-link href="/overview" slot="footer">
|
|
76
|
-
Open the data view
|
|
77
|
-
</Link>
|
|
78
74
|
</helix-card>
|
|
79
75
|
</header>
|
|
80
76
|
|
|
@@ -114,11 +114,10 @@ export function SignupForm() {
|
|
|
114
114
|
|
|
115
115
|
<aside className="notes">
|
|
116
116
|
{/* The one fact you need before typing your name into a page you have
|
|
117
|
-
had for five minutes, so it is a callout. `
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
<helix-callout tone="info">
|
|
117
|
+
had for five minutes, so it is a callout. `neutral` is a note that
|
|
118
|
+
reports no status, drawn in the muted ink with a bar on the inline
|
|
119
|
+
start, so it stays in the palette, ink or brand. */}
|
|
120
|
+
<helix-callout tone="neutral">
|
|
122
121
|
The form posts nothing. Submit it, and a message shows exactly what a server would
|
|
123
122
|
receive.
|
|
124
123
|
</helix-callout>
|
|
@@ -8,24 +8,21 @@ import { DOCS } from './docs'
|
|
|
8
8
|
* empty, as if the layout had run out. The footer is also where the links you
|
|
9
9
|
* want once belong, so the landing page no longer carries them.
|
|
10
10
|
*
|
|
11
|
-
* `data-link="
|
|
12
|
-
* row of links under a rule.
|
|
11
|
+
* `data-link="quiet"` sets a link in the muted ink with no underline, and it
|
|
12
|
+
* takes the foreground on hover, which suits a row of links under a rule.
|
|
13
13
|
*/
|
|
14
14
|
export function SiteFooter() {
|
|
15
15
|
return (
|
|
16
16
|
<footer className="site-footer">
|
|
17
17
|
<div className="footer-row">
|
|
18
|
-
<helix-text as="p" emphasis="subtle" variant="caption">
|
|
19
|
-
Every component here has a page, with its API, its parts, and its examples.
|
|
20
|
-
</helix-text>
|
|
21
18
|
<div className="footer-links">
|
|
22
|
-
<a data-link="
|
|
19
|
+
<a data-link="quiet" href={DOCS.gallery}>
|
|
23
20
|
Components
|
|
24
21
|
</a>
|
|
25
|
-
<a data-link="
|
|
22
|
+
<a data-link="quiet" href={DOCS.elements}>
|
|
26
23
|
Documentation
|
|
27
24
|
</a>
|
|
28
|
-
<a data-link="
|
|
25
|
+
<a data-link="quiet" href={DOCS.react}>
|
|
29
26
|
React
|
|
30
27
|
</a>
|
|
31
28
|
</div>
|
|
@@ -53,14 +53,10 @@ export function SiteHeader() {
|
|
|
53
53
|
<helix-app-header material="glass" sticky>
|
|
54
54
|
{/* The wordmark is the way back to the first page, as a wordmark usually
|
|
55
55
|
is, so there is no third destination in the bar saying the same thing.
|
|
56
|
-
It
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
The mark is a placeholder for your own, and it is drawn in
|
|
60
|
-
`--helix-color-brand-mark`, the token for the brand as a graphic. */}
|
|
56
|
+
It names the library the starter is built on, and it is the place for
|
|
57
|
+
your own name or logo. */}
|
|
61
58
|
<Link className="wordmark" data-link="quiet" href="/" slot="start">
|
|
62
|
-
<helix-
|
|
63
|
-
<helix-text variant="body-strong">__PROJECT_NAME__</helix-text>
|
|
59
|
+
<helix-text variant="body-strong">Helix</helix-text>
|
|
64
60
|
</Link>
|
|
65
61
|
|
|
66
62
|
{/* The links are yours. Navigation owns the marker that travels between
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"compilerOptions": {
|
|
3
|
-
"
|
|
3
|
+
"allowJs": true,
|
|
4
|
+
"esModuleInterop": true,
|
|
5
|
+
"jsx": "react-jsx",
|
|
4
6
|
"lib": [
|
|
5
7
|
"DOM",
|
|
6
8
|
"DOM.Iterable",
|
|
@@ -27,6 +29,7 @@
|
|
|
27
29
|
"**/*.ts",
|
|
28
30
|
"**/*.tsx",
|
|
29
31
|
".next/types/**/*.ts",
|
|
32
|
+
".next/dev/types/**/*.ts",
|
|
30
33
|
"helix-jsx.d.ts"
|
|
31
34
|
],
|
|
32
35
|
"exclude": [
|
|
@@ -6,10 +6,14 @@
|
|
|
6
6
|
* open. Everything below is a Helix token or a documented hook, so a theme
|
|
7
7
|
* changes it, and both color modes follow from one copy.
|
|
8
8
|
*
|
|
9
|
-
* **
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* **Your brand color is one line.** With no brand set, Helix draws in ink,
|
|
10
|
+
* near-black in light mode and near-white in dark. Set `--helix-seed-brand` on
|
|
11
|
+
* `:root`, and every token follows it.
|
|
12
|
+
*
|
|
13
|
+
* **Color appears in two places, and both are named.** Each tile's icon takes
|
|
14
|
+
* `--helix-color-primary` on `--helix-color-primary-subtle`, and a chosen row
|
|
15
|
+
* takes `--helix-color-primary-subtle` through the parts the table publishes.
|
|
16
|
+
* Everywhere else the page is the foreground on the background, and the
|
|
13
17
|
* components carry their own color.
|
|
14
18
|
*/
|
|
15
19
|
|
|
@@ -59,20 +63,18 @@ helix-app-header {
|
|
|
59
63
|
--app-header-max-inline-size: 56rem;
|
|
60
64
|
}
|
|
61
65
|
|
|
62
|
-
/* The
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
+
/* The wordmark, a word for now, in the foreground: a quiet link is muted until
|
|
67
|
+
it is pointed at, and the name is the strongest thing in the bar. Give it your
|
|
68
|
+
own name, or put your logo beside it in `--helix-color-brand-mark`, the token
|
|
69
|
+
for the brand as a graphic: WCAG asks 3:1 of a graphic and 4.5:1 of text, so a
|
|
70
|
+
mark can sit closer to a theme's brand color than any text color can. */
|
|
66
71
|
.wordmark {
|
|
67
72
|
align-items: center;
|
|
73
|
+
color: var(--helix-color-foreground);
|
|
68
74
|
display: inline-flex;
|
|
69
75
|
gap: var(--helix-space-xs);
|
|
70
76
|
}
|
|
71
77
|
|
|
72
|
-
.wordmark helix-icon {
|
|
73
|
-
color: var(--helix-color-brand-mark);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
78
|
/*
|
|
77
79
|
* One rhythm between the blocks of a page, so no page sets its own.
|
|
78
80
|
*
|
|
@@ -185,12 +187,11 @@ helix-app-header {
|
|
|
185
187
|
* **The panel is the library at work**, so all it needs from here is room. Two
|
|
186
188
|
* documented hooks: the figures come down a step from the display size, which
|
|
187
189
|
* suits one figure on its own and is too loud for three in an 18rem column, and
|
|
188
|
-
* the gap
|
|
189
|
-
* doubles, leaving no room for a number.
|
|
190
|
+
* the gap between them is wide enough to set them apart with no rule.
|
|
190
191
|
*/
|
|
191
192
|
.specimen {
|
|
192
|
-
--stat-group-gap: var(--helix-space-
|
|
193
|
-
--stat-value-size: var(--helix-text-
|
|
193
|
+
--stat-group-gap: var(--helix-space-xl);
|
|
194
|
+
--stat-value-size: var(--helix-text-2xl);
|
|
194
195
|
}
|
|
195
196
|
|
|
196
197
|
/* A section is its heading and its one block, closer together than two sections
|
|
@@ -341,9 +342,9 @@ helix-app-header {
|
|
|
341
342
|
* left of every chosen row.
|
|
342
343
|
*
|
|
343
344
|
* The values are still the library's, so a theme carries them like everything
|
|
344
|
-
* else. `primary-subtle`, because `primary-surface` is the solid
|
|
345
|
-
* button stands on, made for
|
|
346
|
-
* table's own ink on a
|
|
345
|
+
* else. `primary-subtle`, because `primary-surface` is the solid fill a
|
|
346
|
+
* button stands on, made for its own label, so a row painted with it would put
|
|
347
|
+
* the table's own ink on a solid fill.
|
|
347
348
|
*/
|
|
348
349
|
helix-data-table::part(cell-selected),
|
|
349
350
|
helix-data-table::part(select-selected) {
|
|
@@ -53,12 +53,11 @@ export function Landing() {
|
|
|
53
53
|
|
|
54
54
|
{/* **The library at work, on the first screen.** The figures are the
|
|
55
55
|
roster the data view draws, read from the same module, so the panel
|
|
56
|
-
is the app itself, on glass over the light.
|
|
56
|
+
is the app itself, on glass over the light. It has no link of its own:
|
|
57
|
+
the button beside it goes to the same page. */}
|
|
57
58
|
<helix-card className="specimen" material="glass" separation="outlined">
|
|
58
|
-
<helix-text as="h2" slot="header" variant="title">
|
|
59
|
-
|
|
60
|
-
</helix-text>
|
|
61
|
-
<helix-stat-group divided>
|
|
59
|
+
<helix-text as="h2" slot="header" variant="title">Roster</helix-text>
|
|
60
|
+
<helix-stat-group>
|
|
62
61
|
<helix-stat>
|
|
63
62
|
{roster.people}
|
|
64
63
|
<span slot="label">People</span>
|
|
@@ -72,9 +71,6 @@ export function Landing() {
|
|
|
72
71
|
<span slot="label">Reviews</span>
|
|
73
72
|
</helix-stat>
|
|
74
73
|
</helix-stat-group>
|
|
75
|
-
<Link data-link href="/overview" slot="footer">
|
|
76
|
-
Open the data view
|
|
77
|
-
</Link>
|
|
78
74
|
</helix-card>
|
|
79
75
|
</header>
|
|
80
76
|
|
|
@@ -105,11 +105,10 @@ export function SignupForm() {
|
|
|
105
105
|
|
|
106
106
|
<aside className="notes">
|
|
107
107
|
{/* The one fact you need before typing your name into a page you have
|
|
108
|
-
had for five minutes, so it is a callout. `
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
<helix-callout tone="info">
|
|
108
|
+
had for five minutes, so it is a callout. `neutral` is a note that
|
|
109
|
+
reports no status, drawn in the muted ink with a bar on the inline
|
|
110
|
+
start, so it stays in the palette, ink or brand. */}
|
|
111
|
+
<helix-callout tone="neutral">
|
|
113
112
|
The form posts nothing. Submit it, and a message shows exactly what a server would
|
|
114
113
|
receive.
|
|
115
114
|
</helix-callout>
|
|
@@ -8,24 +8,21 @@ import { DOCS } from './docs.js'
|
|
|
8
8
|
* empty, as if the layout had run out. The footer is also where the links you
|
|
9
9
|
* want once belong, so the landing page no longer carries them.
|
|
10
10
|
*
|
|
11
|
-
* `data-link="
|
|
12
|
-
* row of links under a rule.
|
|
11
|
+
* `data-link="quiet"` sets a link in the muted ink with no underline, and it
|
|
12
|
+
* takes the foreground on hover, which suits a row of links under a rule.
|
|
13
13
|
*/
|
|
14
14
|
export function SiteFooter() {
|
|
15
15
|
return (
|
|
16
16
|
<footer className="site-footer">
|
|
17
17
|
<div className="footer-row">
|
|
18
|
-
<helix-text as="p" emphasis="subtle" variant="caption">
|
|
19
|
-
Every component here has a page, with its API, its parts, and its examples.
|
|
20
|
-
</helix-text>
|
|
21
18
|
<div className="footer-links">
|
|
22
|
-
<a data-link="
|
|
19
|
+
<a data-link="quiet" href={DOCS.gallery}>
|
|
23
20
|
Components
|
|
24
21
|
</a>
|
|
25
|
-
<a data-link="
|
|
22
|
+
<a data-link="quiet" href={DOCS.elements}>
|
|
26
23
|
Documentation
|
|
27
24
|
</a>
|
|
28
|
-
<a data-link="
|
|
25
|
+
<a data-link="quiet" href={DOCS.react}>
|
|
29
26
|
React
|
|
30
27
|
</a>
|
|
31
28
|
</div>
|
|
@@ -43,14 +43,10 @@ export function SiteHeader() {
|
|
|
43
43
|
<helix-app-header material="glass" sticky>
|
|
44
44
|
{/* The wordmark is the way back to the first page, as a wordmark usually
|
|
45
45
|
is, so there is no third destination in the bar saying the same thing.
|
|
46
|
-
It
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
The mark is a placeholder for your own, and it is drawn in
|
|
50
|
-
`--helix-color-brand-mark`, the token for the brand as a graphic. */}
|
|
46
|
+
It names the library the starter is built on, and it is the place for
|
|
47
|
+
your own name or logo. */}
|
|
51
48
|
<Link className="wordmark" data-link="quiet" href="/" slot="start">
|
|
52
|
-
<helix-
|
|
53
|
-
<helix-text variant="body-strong">__PROJECT_NAME__</helix-text>
|
|
49
|
+
<helix-text variant="body-strong">Helix</helix-text>
|
|
54
50
|
</Link>
|
|
55
51
|
|
|
56
52
|
{/* The links are yours. Navigation owns the marker that travels between
|
|
@@ -6,10 +6,14 @@
|
|
|
6
6
|
* open. Everything below is a Helix token or a documented hook, so a theme
|
|
7
7
|
* changes it, and both color modes follow from one copy.
|
|
8
8
|
*
|
|
9
|
-
* **
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* **Your brand color is one line.** With no brand set, Helix draws in ink,
|
|
10
|
+
* near-black in light mode and near-white in dark. Set `--helix-seed-brand` on
|
|
11
|
+
* `:root`, and every token follows it.
|
|
12
|
+
*
|
|
13
|
+
* **Color appears in two places, and both are named.** Each tile's icon takes
|
|
14
|
+
* `--helix-color-primary` on `--helix-color-primary-subtle`, and a chosen row
|
|
15
|
+
* takes `--helix-color-primary-subtle` through the parts the table publishes.
|
|
16
|
+
* Everywhere else the page is the foreground on the background, and the
|
|
13
17
|
* components carry their own color.
|
|
14
18
|
*/
|
|
15
19
|
|
|
@@ -59,20 +63,18 @@ helix-app-header {
|
|
|
59
63
|
--app-header-max-inline-size: 56rem;
|
|
60
64
|
}
|
|
61
65
|
|
|
62
|
-
/* The
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
+
/* The wordmark, a word for now, in the foreground: a quiet link is muted until
|
|
67
|
+
it is pointed at, and the name is the strongest thing in the bar. Give it your
|
|
68
|
+
own name, or put your logo beside it in `--helix-color-brand-mark`, the token
|
|
69
|
+
for the brand as a graphic: WCAG asks 3:1 of a graphic and 4.5:1 of text, so a
|
|
70
|
+
mark can sit closer to a theme's brand color than any text color can. */
|
|
66
71
|
.wordmark {
|
|
67
72
|
align-items: center;
|
|
73
|
+
color: var(--helix-color-foreground);
|
|
68
74
|
display: inline-flex;
|
|
69
75
|
gap: var(--helix-space-xs);
|
|
70
76
|
}
|
|
71
77
|
|
|
72
|
-
.wordmark helix-icon {
|
|
73
|
-
color: var(--helix-color-brand-mark);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
78
|
/*
|
|
77
79
|
* One rhythm between the blocks of a page, so no page sets its own.
|
|
78
80
|
*
|
|
@@ -185,12 +187,11 @@ helix-app-header {
|
|
|
185
187
|
* **The panel is the library at work**, so all it needs from here is room. Two
|
|
186
188
|
* documented hooks: the figures come down a step from the display size, which
|
|
187
189
|
* suits one figure on its own and is too loud for three in an 18rem column, and
|
|
188
|
-
* the gap
|
|
189
|
-
* doubles, leaving no room for a number.
|
|
190
|
+
* the gap between them is wide enough to set them apart with no rule.
|
|
190
191
|
*/
|
|
191
192
|
.specimen {
|
|
192
|
-
--stat-group-gap: var(--helix-space-
|
|
193
|
-
--stat-value-size: var(--helix-text-
|
|
193
|
+
--stat-group-gap: var(--helix-space-xl);
|
|
194
|
+
--stat-value-size: var(--helix-text-2xl);
|
|
194
195
|
}
|
|
195
196
|
|
|
196
197
|
/* A section is its heading and its one block, closer together than two sections
|
|
@@ -341,9 +342,9 @@ helix-app-header {
|
|
|
341
342
|
* left of every chosen row.
|
|
342
343
|
*
|
|
343
344
|
* The values are still the library's, so a theme carries them like everything
|
|
344
|
-
* else. `primary-subtle`, because `primary-surface` is the solid
|
|
345
|
-
* button stands on, made for
|
|
346
|
-
* table's own ink on a
|
|
345
|
+
* else. `primary-subtle`, because `primary-surface` is the solid fill a
|
|
346
|
+
* button stands on, made for its own label, so a row painted with it would put
|
|
347
|
+
* the table's own ink on a solid fill.
|
|
347
348
|
*/
|
|
348
349
|
helix-data-table::part(cell-selected),
|
|
349
350
|
helix-data-table::part(select-selected) {
|
|
@@ -50,12 +50,11 @@ export function Landing() {
|
|
|
50
50
|
|
|
51
51
|
{/* **The library at work, on the first screen.** The figures are the
|
|
52
52
|
roster the data view draws, read from the same module, so the panel
|
|
53
|
-
is the app itself, on glass over the light.
|
|
53
|
+
is the app itself, on glass over the light. It has no link of its own:
|
|
54
|
+
the button beside it goes to the same page. */}
|
|
54
55
|
<helix-card class="specimen" material="glass" separation="outlined">
|
|
55
|
-
<helix-text as="h2" slot="header" variant="title">
|
|
56
|
-
|
|
57
|
-
</helix-text>
|
|
58
|
-
<helix-stat-group divided>
|
|
56
|
+
<helix-text as="h2" slot="header" variant="title">Roster</helix-text>
|
|
57
|
+
<helix-stat-group>
|
|
59
58
|
<helix-stat>
|
|
60
59
|
{roster.people}
|
|
61
60
|
<span slot="label">People</span>
|
|
@@ -69,9 +68,6 @@ export function Landing() {
|
|
|
69
68
|
<span slot="label">Reviews</span>
|
|
70
69
|
</helix-stat>
|
|
71
70
|
</helix-stat-group>
|
|
72
|
-
<a data-link href="#/overview" slot="footer">
|
|
73
|
-
Open the data view
|
|
74
|
-
</a>
|
|
75
71
|
</helix-card>
|
|
76
72
|
</header>
|
|
77
73
|
|
|
@@ -98,10 +98,10 @@ export function SignupForm() {
|
|
|
98
98
|
|
|
99
99
|
<aside class="notes">
|
|
100
100
|
{/* The one fact you need before typing your name into a page you have
|
|
101
|
-
had for five minutes, so it is a callout. `
|
|
102
|
-
|
|
103
|
-
start, so it
|
|
104
|
-
<helix-callout tone="
|
|
101
|
+
had for five minutes, so it is a callout. `neutral` is a note that
|
|
102
|
+
reports no status, drawn in the muted ink with a bar on the inline
|
|
103
|
+
start, so it stays in the palette, ink or brand. */}
|
|
104
|
+
<helix-callout tone="neutral">
|
|
105
105
|
The form posts nothing. Submit it, and a message shows exactly what a server would
|
|
106
106
|
receive.
|
|
107
107
|
</helix-callout>
|
|
@@ -7,24 +7,21 @@ import { DOCS } from './docs.ts'
|
|
|
7
7
|
* and a caption, which on a tall window left the bottom third of the screen
|
|
8
8
|
* empty. The footer is also where the links you want once belong.
|
|
9
9
|
*
|
|
10
|
-
* `data-link="
|
|
11
|
-
* row of links under a rule.
|
|
10
|
+
* `data-link="quiet"` sets a link in the muted ink with no underline, and it
|
|
11
|
+
* takes the foreground on hover, which suits a row of links under a rule.
|
|
12
12
|
*/
|
|
13
13
|
export function SiteFooter() {
|
|
14
14
|
return (
|
|
15
15
|
<footer class="site-footer">
|
|
16
16
|
<div class="footer-row">
|
|
17
|
-
<helix-text as="p" emphasis="subtle" variant="caption">
|
|
18
|
-
Every component here has a page, with its API, its parts, and its examples.
|
|
19
|
-
</helix-text>
|
|
20
17
|
<div class="footer-links">
|
|
21
|
-
<a data-link="
|
|
18
|
+
<a data-link="quiet" href={DOCS.gallery}>
|
|
22
19
|
Components
|
|
23
20
|
</a>
|
|
24
|
-
<a data-link="
|
|
21
|
+
<a data-link="quiet" href={DOCS.elements}>
|
|
25
22
|
Documentation
|
|
26
23
|
</a>
|
|
27
|
-
<a data-link="
|
|
24
|
+
<a data-link="quiet" href={DOCS.solid}>
|
|
28
25
|
Solid
|
|
29
26
|
</a>
|
|
30
27
|
</div>
|
|
@@ -40,13 +40,10 @@ export function SiteHeader() {
|
|
|
40
40
|
return (
|
|
41
41
|
<helix-app-header material="glass" sticky>
|
|
42
42
|
{/* The wordmark is the way back to the first page, so there is no third
|
|
43
|
-
destination in the bar saying the same thing. It
|
|
44
|
-
|
|
45
|
-
drawn in `--helix-color-brand-mark`, the token for the brand as a
|
|
46
|
-
graphic. */}
|
|
43
|
+
destination in the bar saying the same thing. It names the library the
|
|
44
|
+
starter is built on, and it is the place for your own name or logo. */}
|
|
47
45
|
<a class="wordmark" data-link="quiet" href="#/" slot="start">
|
|
48
|
-
<helix-
|
|
49
|
-
<helix-text variant="body-strong">__PROJECT_NAME__</helix-text>
|
|
46
|
+
<helix-text variant="body-strong">Helix</helix-text>
|
|
50
47
|
</a>
|
|
51
48
|
|
|
52
49
|
{/* The links are yours. Navigation owns the marker that travels between
|
|
@@ -38,12 +38,13 @@
|
|
|
38
38
|
</div>
|
|
39
39
|
</div>
|
|
40
40
|
|
|
41
|
-
<!-- **The library at work, on the first screen.** The figures are the
|
|
42
|
-
the data view draws, read from the same module, so the panel
|
|
43
|
-
itself, on glass over the light.
|
|
41
|
+
<!-- **The library at work, on the first screen.** The figures are the
|
|
42
|
+
roster the data view draws, read from the same module, so the panel
|
|
43
|
+
is the app itself, on glass over the light. It has no link of its own:
|
|
44
|
+
the button beside it goes to the same page. -->
|
|
44
45
|
<helix-card class="specimen" material="glass" separation="outlined">
|
|
45
|
-
<helix-text as="h2" slot="header" variant="title">
|
|
46
|
-
<helix-stat-group
|
|
46
|
+
<helix-text as="h2" slot="header" variant="title">Roster</helix-text>
|
|
47
|
+
<helix-stat-group>
|
|
47
48
|
<helix-stat>
|
|
48
49
|
{roster.people}
|
|
49
50
|
<span slot="label">People</span>
|
|
@@ -57,7 +58,6 @@
|
|
|
57
58
|
<span slot="label">Reviews</span>
|
|
58
59
|
</helix-stat>
|
|
59
60
|
</helix-stat-group>
|
|
60
|
-
<a data-link href="#/overview" slot="footer">Open the data view</a>
|
|
61
61
|
</helix-card>
|
|
62
62
|
</header>
|
|
63
63
|
|
|
@@ -105,10 +105,10 @@
|
|
|
105
105
|
|
|
106
106
|
<aside class="notes">
|
|
107
107
|
<!-- The one fact you need before typing your name into a page you have
|
|
108
|
-
had for five minutes, so it is a callout. `
|
|
109
|
-
|
|
110
|
-
start, so it
|
|
111
|
-
<helix-callout tone="
|
|
108
|
+
had for five minutes, so it is a callout. `neutral` is a note that
|
|
109
|
+
reports no status, drawn in the muted ink with a bar on the inline
|
|
110
|
+
start, so it stays in the palette, ink or brand. -->
|
|
111
|
+
<helix-callout tone="neutral">
|
|
112
112
|
The form posts nothing. Submit it, and a message shows exactly what a server would receive.
|
|
113
113
|
</helix-callout>
|
|
114
114
|
<helix-text as="h2" variant="title">What the form shows</helix-text>
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
and a caption, which on a tall window left the bottom third of the screen
|
|
6
6
|
empty. The footer is also where the links you want once belong.
|
|
7
7
|
|
|
8
|
-
`data-link="
|
|
9
|
-
row of links under a rule.
|
|
8
|
+
`data-link="quiet"` sets a link in the muted ink with no underline, and it
|
|
9
|
+
takes the foreground on hover, which suits a row of links under a rule.
|
|
10
10
|
-->
|
|
11
11
|
<script lang="ts">
|
|
12
12
|
import { DOCS } from './docs.ts'
|
|
@@ -14,13 +14,10 @@
|
|
|
14
14
|
|
|
15
15
|
<footer class="site-footer">
|
|
16
16
|
<div class="footer-row">
|
|
17
|
-
<helix-text as="p" emphasis="subtle" variant="caption">
|
|
18
|
-
Every component here has a page, with its API, its parts, and its examples.
|
|
19
|
-
</helix-text>
|
|
20
17
|
<div class="footer-links">
|
|
21
|
-
<a data-link="
|
|
22
|
-
<a data-link="
|
|
23
|
-
<a data-link="
|
|
18
|
+
<a data-link="quiet" href={DOCS.gallery}>Components</a>
|
|
19
|
+
<a data-link="quiet" href={DOCS.elements}>Documentation</a>
|
|
20
|
+
<a data-link="quiet" href={DOCS.svelte}>Svelte</a>
|
|
24
21
|
</div>
|
|
25
22
|
</div>
|
|
26
23
|
</footer>
|
|
@@ -37,12 +37,10 @@
|
|
|
37
37
|
|
|
38
38
|
<helix-app-header material="glass" sticky>
|
|
39
39
|
<!-- The wordmark is the way back to the first page, so there is no third
|
|
40
|
-
destination in the bar saying the same thing. It
|
|
41
|
-
|
|
42
|
-
in `--helix-color-brand-mark`, the token for the brand as a graphic. -->
|
|
40
|
+
destination in the bar saying the same thing. It names the library the
|
|
41
|
+
starter is built on, and it is the place for your own name or logo. -->
|
|
43
42
|
<a class="wordmark" data-link="quiet" href="#/" slot="start">
|
|
44
|
-
<helix-
|
|
45
|
-
<helix-text variant="body-strong">__PROJECT_NAME__</helix-text>
|
|
43
|
+
<helix-text variant="body-strong">Helix</helix-text>
|
|
46
44
|
</a>
|
|
47
45
|
|
|
48
46
|
<!-- The links are yours. Navigation owns the marker that travels between them
|
|
@@ -6,10 +6,14 @@
|
|
|
6
6
|
* open. Everything below is a Helix token or a documented hook, so a theme
|
|
7
7
|
* changes it, and both color modes follow from one copy.
|
|
8
8
|
*
|
|
9
|
-
* **
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* **Your brand color is one line.** With no brand set, Helix draws in ink,
|
|
10
|
+
* near-black in light mode and near-white in dark. Set `--helix-seed-brand` on
|
|
11
|
+
* `:root`, and every token follows it.
|
|
12
|
+
*
|
|
13
|
+
* **Color appears in two places, and both are named.** Each tile's icon takes
|
|
14
|
+
* `--helix-color-primary` on `--helix-color-primary-subtle`, and a chosen row
|
|
15
|
+
* takes `--helix-color-primary-subtle` through the parts the table publishes.
|
|
16
|
+
* Everywhere else the page is the foreground on the background, and the
|
|
13
17
|
* components carry their own color.
|
|
14
18
|
*/
|
|
15
19
|
|
|
@@ -59,20 +63,18 @@ helix-app-header {
|
|
|
59
63
|
--app-header-max-inline-size: 56rem;
|
|
60
64
|
}
|
|
61
65
|
|
|
62
|
-
/* The
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
+
/* The wordmark, a word for now, in the foreground: a quiet link is muted until
|
|
67
|
+
it is pointed at, and the name is the strongest thing in the bar. Give it your
|
|
68
|
+
own name, or put your logo beside it in `--helix-color-brand-mark`, the token
|
|
69
|
+
for the brand as a graphic: WCAG asks 3:1 of a graphic and 4.5:1 of text, so a
|
|
70
|
+
mark can sit closer to a theme's brand color than any text color can. */
|
|
66
71
|
.wordmark {
|
|
67
72
|
align-items: center;
|
|
73
|
+
color: var(--helix-color-foreground);
|
|
68
74
|
display: inline-flex;
|
|
69
75
|
gap: var(--helix-space-xs);
|
|
70
76
|
}
|
|
71
77
|
|
|
72
|
-
.wordmark helix-icon {
|
|
73
|
-
color: var(--helix-color-brand-mark);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
78
|
/*
|
|
77
79
|
* One rhythm between the blocks of a page, so no page sets its own.
|
|
78
80
|
*
|
|
@@ -185,12 +187,11 @@ helix-app-header {
|
|
|
185
187
|
* **The panel is the library at work**, so all it needs from here is room. Two
|
|
186
188
|
* documented hooks: the figures come down a step from the display size, which
|
|
187
189
|
* suits one figure on its own and is too loud for three in an 18rem column, and
|
|
188
|
-
* the gap
|
|
189
|
-
* doubles, leaving no room for a number.
|
|
190
|
+
* the gap between them is wide enough to set them apart with no rule.
|
|
190
191
|
*/
|
|
191
192
|
.specimen {
|
|
192
|
-
--stat-group-gap: var(--helix-space-
|
|
193
|
-
--stat-value-size: var(--helix-text-
|
|
193
|
+
--stat-group-gap: var(--helix-space-xl);
|
|
194
|
+
--stat-value-size: var(--helix-text-2xl);
|
|
194
195
|
}
|
|
195
196
|
|
|
196
197
|
/* A section is its heading and its one block, closer together than two sections
|
|
@@ -341,9 +342,9 @@ helix-app-header {
|
|
|
341
342
|
* left of every chosen row.
|
|
342
343
|
*
|
|
343
344
|
* The values are still the library's, so a theme carries them like everything
|
|
344
|
-
* else. `primary-subtle`, because `primary-surface` is the solid
|
|
345
|
-
* button stands on, made for
|
|
346
|
-
* table's own ink on a
|
|
345
|
+
* else. `primary-subtle`, because `primary-surface` is the solid fill a
|
|
346
|
+
* button stands on, made for its own label, so a row painted with it would put
|
|
347
|
+
* the table's own ink on a solid fill.
|
|
347
348
|
*/
|
|
348
349
|
helix-data-table::part(cell-selected),
|
|
349
350
|
helix-data-table::part(select-selected) {
|
|
@@ -39,12 +39,13 @@ const figure = new Intl.NumberFormat('en-US')
|
|
|
39
39
|
</div>
|
|
40
40
|
</div>
|
|
41
41
|
|
|
42
|
-
<!-- **The library at work, on the first screen.** The figures are the
|
|
43
|
-
the data view draws, read from the same module, so the panel
|
|
44
|
-
itself, on glass over the light.
|
|
42
|
+
<!-- **The library at work, on the first screen.** The figures are the
|
|
43
|
+
roster the data view draws, read from the same module, so the panel
|
|
44
|
+
is the app itself, on glass over the light. It has no link of its own:
|
|
45
|
+
the button beside it goes to the same page. -->
|
|
45
46
|
<helix-card class="specimen" material="glass" separation="outlined">
|
|
46
|
-
<helix-text as="h2" slot="header" variant="title">
|
|
47
|
-
<helix-stat-group
|
|
47
|
+
<helix-text as="h2" slot="header" variant="title">Roster</helix-text>
|
|
48
|
+
<helix-stat-group>
|
|
48
49
|
<helix-stat>
|
|
49
50
|
{{ roster.people }}
|
|
50
51
|
<span slot="label">People</span>
|
|
@@ -58,7 +59,6 @@ const figure = new Intl.NumberFormat('en-US')
|
|
|
58
59
|
<span slot="label">Reviews</span>
|
|
59
60
|
</helix-stat>
|
|
60
61
|
</helix-stat-group>
|
|
61
|
-
<a data-link href="#/overview" slot="footer">Open the data view</a>
|
|
62
62
|
</helix-card>
|
|
63
63
|
</header>
|
|
64
64
|
|
|
@@ -105,10 +105,10 @@ const dismiss = (id: number) => {
|
|
|
105
105
|
|
|
106
106
|
<aside class="notes">
|
|
107
107
|
<!-- The one fact you need before typing your name into a page you have
|
|
108
|
-
had for five minutes, so it is a callout. `
|
|
109
|
-
|
|
110
|
-
start, so it
|
|
111
|
-
<helix-callout tone="
|
|
108
|
+
had for five minutes, so it is a callout. `neutral` is a note that
|
|
109
|
+
reports no status, drawn in the muted ink with a bar on the inline
|
|
110
|
+
start, so it stays in the palette, ink or brand. -->
|
|
111
|
+
<helix-callout tone="neutral">
|
|
112
112
|
The form posts nothing. Submit it, and a message shows exactly what a server would
|
|
113
113
|
receive.
|
|
114
114
|
</helix-callout>
|
|
@@ -9,19 +9,16 @@ import { DOCS } from './docs.ts'
|
|
|
9
9
|
and a caption, which on a tall window left the bottom third of the screen
|
|
10
10
|
empty. The footer is also where the links you want once belong.
|
|
11
11
|
|
|
12
|
-
`data-link="
|
|
13
|
-
row of links under a rule.
|
|
12
|
+
`data-link="quiet"` sets a link in the muted ink with no underline, and it
|
|
13
|
+
takes the foreground on hover, which suits a row of links under a rule.
|
|
14
14
|
-->
|
|
15
15
|
<template>
|
|
16
16
|
<footer class="site-footer">
|
|
17
17
|
<div class="footer-row">
|
|
18
|
-
<helix-text as="p" emphasis="subtle" variant="caption">
|
|
19
|
-
Every component here has a page, with its API, its parts, and its examples.
|
|
20
|
-
</helix-text>
|
|
21
18
|
<div class="footer-links">
|
|
22
|
-
<a data-link="
|
|
23
|
-
<a data-link="
|
|
24
|
-
<a data-link="
|
|
19
|
+
<a data-link="quiet" :href="DOCS.gallery">Components</a>
|
|
20
|
+
<a data-link="quiet" :href="DOCS.elements">Documentation</a>
|
|
21
|
+
<a data-link="quiet" :href="DOCS.vue">Vue</a>
|
|
25
22
|
</div>
|
|
26
23
|
</div>
|
|
27
24
|
</footer>
|
|
@@ -40,13 +40,10 @@ const cycle = () => {
|
|
|
40
40
|
<template>
|
|
41
41
|
<helix-app-header material="glass" sticky>
|
|
42
42
|
<!-- The wordmark is the way back to the first page, so there is no third
|
|
43
|
-
destination in the bar saying the same thing. It
|
|
44
|
-
|
|
45
|
-
drawn in `--helix-color-brand-mark`, the token for the brand as a
|
|
46
|
-
graphic. -->
|
|
43
|
+
destination in the bar saying the same thing. It names the library the
|
|
44
|
+
starter is built on, and it is the place for your own name or logo. -->
|
|
47
45
|
<a class="wordmark" data-link="quiet" href="#/" slot="start">
|
|
48
|
-
<helix-
|
|
49
|
-
<helix-text variant="body-strong">__PROJECT_NAME__</helix-text>
|
|
46
|
+
<helix-text variant="body-strong">Helix</helix-text>
|
|
50
47
|
</a>
|
|
51
48
|
|
|
52
49
|
<!-- The links are yours. Navigation owns the marker that travels between
|
|
@@ -6,10 +6,14 @@
|
|
|
6
6
|
* open. Everything below is a Helix token or a documented hook, so a theme
|
|
7
7
|
* changes it, and both color modes follow from one copy.
|
|
8
8
|
*
|
|
9
|
-
* **
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* **Your brand color is one line.** With no brand set, Helix draws in ink,
|
|
10
|
+
* near-black in light mode and near-white in dark. Set `--helix-seed-brand` on
|
|
11
|
+
* `:root`, and every token follows it.
|
|
12
|
+
*
|
|
13
|
+
* **Color appears in two places, and both are named.** Each tile's icon takes
|
|
14
|
+
* `--helix-color-primary` on `--helix-color-primary-subtle`, and a chosen row
|
|
15
|
+
* takes `--helix-color-primary-subtle` through the parts the table publishes.
|
|
16
|
+
* Everywhere else the page is the foreground on the background, and the
|
|
13
17
|
* components carry their own color.
|
|
14
18
|
*/
|
|
15
19
|
|
|
@@ -59,20 +63,18 @@ helix-app-header {
|
|
|
59
63
|
--app-header-max-inline-size: 56rem;
|
|
60
64
|
}
|
|
61
65
|
|
|
62
|
-
/* The
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
+
/* The wordmark, a word for now, in the foreground: a quiet link is muted until
|
|
67
|
+
it is pointed at, and the name is the strongest thing in the bar. Give it your
|
|
68
|
+
own name, or put your logo beside it in `--helix-color-brand-mark`, the token
|
|
69
|
+
for the brand as a graphic: WCAG asks 3:1 of a graphic and 4.5:1 of text, so a
|
|
70
|
+
mark can sit closer to a theme's brand color than any text color can. */
|
|
66
71
|
.wordmark {
|
|
67
72
|
align-items: center;
|
|
73
|
+
color: var(--helix-color-foreground);
|
|
68
74
|
display: inline-flex;
|
|
69
75
|
gap: var(--helix-space-xs);
|
|
70
76
|
}
|
|
71
77
|
|
|
72
|
-
.wordmark helix-icon {
|
|
73
|
-
color: var(--helix-color-brand-mark);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
78
|
/*
|
|
77
79
|
* One rhythm between the blocks of a page, so no page sets its own.
|
|
78
80
|
*
|
|
@@ -185,12 +187,11 @@ helix-app-header {
|
|
|
185
187
|
* **The panel is the library at work**, so all it needs from here is room. Two
|
|
186
188
|
* documented hooks: the figures come down a step from the display size, which
|
|
187
189
|
* suits one figure on its own and is too loud for three in an 18rem column, and
|
|
188
|
-
* the gap
|
|
189
|
-
* doubles, leaving no room for a number.
|
|
190
|
+
* the gap between them is wide enough to set them apart with no rule.
|
|
190
191
|
*/
|
|
191
192
|
.specimen {
|
|
192
|
-
--stat-group-gap: var(--helix-space-
|
|
193
|
-
--stat-value-size: var(--helix-text-
|
|
193
|
+
--stat-group-gap: var(--helix-space-xl);
|
|
194
|
+
--stat-value-size: var(--helix-text-2xl);
|
|
194
195
|
}
|
|
195
196
|
|
|
196
197
|
/* A section is its heading and its one block, closer together than two sections
|
|
@@ -341,9 +342,9 @@ helix-app-header {
|
|
|
341
342
|
* left of every chosen row.
|
|
342
343
|
*
|
|
343
344
|
* The values are still the library's, so a theme carries them like everything
|
|
344
|
-
* else. `primary-subtle`, because `primary-surface` is the solid
|
|
345
|
-
* button stands on, made for
|
|
346
|
-
* table's own ink on a
|
|
345
|
+
* else. `primary-subtle`, because `primary-surface` is the solid fill a
|
|
346
|
+
* button stands on, made for its own label, so a row painted with it would put
|
|
347
|
+
* the table's own ink on a solid fill.
|
|
347
348
|
*/
|
|
348
349
|
helix-data-table::part(cell-selected),
|
|
349
350
|
helix-data-table::part(select-selected) {
|
package/templates.json
CHANGED
|
@@ -6,8 +6,7 @@
|
|
|
6
6
|
"id": "react-vite",
|
|
7
7
|
"named": [
|
|
8
8
|
"index.html",
|
|
9
|
-
"package.json"
|
|
10
|
-
"src/site-header.tsx"
|
|
9
|
+
"package.json"
|
|
11
10
|
],
|
|
12
11
|
"title": "React (Vite)"
|
|
13
12
|
},
|
|
@@ -16,7 +15,6 @@
|
|
|
16
15
|
"id": "react-nextjs",
|
|
17
16
|
"named": [
|
|
18
17
|
"app/layout.tsx",
|
|
19
|
-
"app/site-header.tsx",
|
|
20
18
|
"package.json"
|
|
21
19
|
],
|
|
22
20
|
"title": "React (Next.js)"
|
|
@@ -26,8 +24,7 @@
|
|
|
26
24
|
"id": "vue-vite",
|
|
27
25
|
"named": [
|
|
28
26
|
"index.html",
|
|
29
|
-
"package.json"
|
|
30
|
-
"src/SiteHeader.vue"
|
|
27
|
+
"package.json"
|
|
31
28
|
],
|
|
32
29
|
"title": "Vue (Vite)"
|
|
33
30
|
},
|
|
@@ -37,7 +34,6 @@
|
|
|
37
34
|
"named": [
|
|
38
35
|
"angular.json",
|
|
39
36
|
"package.json",
|
|
40
|
-
"src/app/site-header.html",
|
|
41
37
|
"src/index.html"
|
|
42
38
|
],
|
|
43
39
|
"title": "Angular"
|
|
@@ -47,8 +43,7 @@
|
|
|
47
43
|
"id": "svelte-vite",
|
|
48
44
|
"named": [
|
|
49
45
|
"index.html",
|
|
50
|
-
"package.json"
|
|
51
|
-
"src/SiteHeader.svelte"
|
|
46
|
+
"package.json"
|
|
52
47
|
],
|
|
53
48
|
"title": "Svelte (Vite)"
|
|
54
49
|
},
|
|
@@ -57,8 +52,7 @@
|
|
|
57
52
|
"id": "solid-vite",
|
|
58
53
|
"named": [
|
|
59
54
|
"index.html",
|
|
60
|
-
"package.json"
|
|
61
|
-
"src/site-header.tsx"
|
|
55
|
+
"package.json"
|
|
62
56
|
],
|
|
63
57
|
"title": "Solid (Vite)"
|
|
64
58
|
}
|