@fusion.dev/helix-templates 0.139.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/data.ts +17 -17
- package/templates/angular/src/app/docs.ts +9 -9
- package/templates/angular/src/app/landing.html +39 -74
- package/templates/angular/src/app/landing.ts +0 -2
- package/templates/angular/src/app/overview.html +2 -2
- package/templates/angular/src/app/pathname.ts +1 -1
- package/templates/angular/src/app/signup-form.html +13 -14
- 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/site-header.ts +2 -3
- package/templates/angular/src/app.css +151 -158
- package/templates/react-nextjs/app/app.css +151 -158
- package/templates/react-nextjs/app/data.ts +17 -17
- package/templates/react-nextjs/app/docs.ts +9 -9
- package/templates/react-nextjs/app/landing.tsx +66 -128
- package/templates/react-nextjs/app/overview.tsx +24 -26
- package/templates/react-nextjs/app/signup-form.tsx +36 -40
- package/templates/react-nextjs/app/site-footer.tsx +9 -15
- package/templates/react-nextjs/app/site-header.tsx +18 -26
- package/templates/react-nextjs/helix-jsx.d.ts +5 -7
- package/templates/react-nextjs/tsconfig.json +4 -1
- package/templates/react-vite/helix-jsx.d.ts +5 -7
- package/templates/react-vite/src/app.css +151 -158
- package/templates/react-vite/src/data.ts +17 -17
- package/templates/react-vite/src/docs.ts +9 -9
- package/templates/react-vite/src/landing.tsx +66 -128
- package/templates/react-vite/src/overview.tsx +24 -26
- package/templates/react-vite/src/routes.tsx +11 -13
- package/templates/react-vite/src/signup-form.tsx +36 -40
- package/templates/react-vite/src/site-footer.tsx +9 -15
- package/templates/react-vite/src/site-header.tsx +16 -24
- package/templates/solid-vite/src/app.css +151 -158
- package/templates/solid-vite/src/data.ts +17 -17
- package/templates/solid-vite/src/docs.ts +9 -9
- package/templates/solid-vite/src/landing.tsx +54 -105
- package/templates/solid-vite/src/overview.tsx +2 -2
- package/templates/solid-vite/src/routes.ts +6 -6
- package/templates/solid-vite/src/signup-form.tsx +14 -14
- package/templates/solid-vite/src/site-footer.tsx +5 -8
- package/templates/solid-vite/src/site-header.tsx +5 -9
- package/templates/svelte-vite/src/Landing.svelte +39 -76
- package/templates/svelte-vite/src/Overview.svelte +2 -2
- package/templates/svelte-vite/src/SignupForm.svelte +13 -14
- package/templates/svelte-vite/src/SiteFooter.svelte +5 -8
- package/templates/svelte-vite/src/SiteHeader.svelte +5 -8
- package/templates/svelte-vite/src/app.css +151 -158
- package/templates/svelte-vite/src/data.ts +17 -17
- package/templates/svelte-vite/src/docs.ts +9 -9
- package/templates/svelte-vite/src/routes.svelte.ts +5 -5
- package/templates/vue-vite/src/LandingPage.vue +39 -76
- package/templates/vue-vite/src/OverviewPage.vue +2 -2
- package/templates/vue-vite/src/SignupForm.vue +14 -14
- package/templates/vue-vite/src/SiteFooter.vue +5 -8
- package/templates/vue-vite/src/SiteHeader.vue +5 -9
- package/templates/vue-vite/src/app.css +151 -158
- package/templates/vue-vite/src/data.ts +17 -17
- package/templates/vue-vite/src/docs.ts +9 -9
- package/templates/vue-vite/src/routes.ts +6 -6
- package/templates.json +4 -10
|
@@ -1,30 +1,32 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* The page around the components.
|
|
3
3
|
*
|
|
4
|
-
* Helix draws
|
|
5
|
-
* measure, the rhythm between blocks, and the few
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* of anything.
|
|
4
|
+
* Helix draws the inside of each component, so an app stylesheet holds the
|
|
5
|
+
* measure, the rhythm between blocks, and the few decisions a component leaves
|
|
6
|
+
* open. Everything below is a Helix token or a documented hook, so a theme
|
|
7
|
+
* changes it, and both color modes follow from one copy.
|
|
9
8
|
*
|
|
10
|
-
* **
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
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
|
|
17
|
+
* components carry their own color.
|
|
15
18
|
*/
|
|
16
19
|
|
|
17
20
|
/*
|
|
18
|
-
* **The shell
|
|
19
|
-
* a header, a table and a caption, which on a 1280 by 900
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* end of it puts a floor under every route.
|
|
21
|
+
* **The shell: a column the height of the window, with the footer at its end.**
|
|
22
|
+
* The overview is a header, a table, and a caption, which on a 1280 by 900
|
|
23
|
+
* window left about four hundred empty pixels under it. The column puts a floor
|
|
24
|
+
* under every route.
|
|
23
25
|
*
|
|
24
|
-
* **
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
26
|
+
* **A flex column, because the bar is sticky.** A grid item's containing block
|
|
27
|
+
* is its own grid area, one row as tall as the bar, so a sticky header in a
|
|
28
|
+
* grid row has nowhere to stick. A flex item's containing block is the flex
|
|
29
|
+
* container, which here is the whole document.
|
|
28
30
|
*/
|
|
29
31
|
.shell {
|
|
30
32
|
display: flex;
|
|
@@ -33,14 +35,13 @@
|
|
|
33
35
|
}
|
|
34
36
|
|
|
35
37
|
/*
|
|
36
|
-
* **56rem,
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* wordmark sits over the first column of the page rather than near it.
|
|
38
|
+
* **56rem, the width the widest block reads well at.** The widest block here is
|
|
39
|
+
* a four-column table: given the whole of a 1280 window, its first column came
|
|
40
|
+
* out 448 pixels across to hold a name, which reads as a stretched table. The
|
|
41
|
+
* bar and the footer are centered in the same width, so the wordmark sits over
|
|
42
|
+
* the first column of the page.
|
|
42
43
|
*
|
|
43
|
-
* `flex-grow`
|
|
44
|
+
* `flex-grow` gives the spare height to the page, and the footer keeps its own.
|
|
44
45
|
*/
|
|
45
46
|
.page {
|
|
46
47
|
flex-grow: 1;
|
|
@@ -51,100 +52,126 @@
|
|
|
51
52
|
}
|
|
52
53
|
|
|
53
54
|
/*
|
|
54
|
-
* Two documented hooks,
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
* color, so it follows the theme.
|
|
55
|
+
* Two documented hooks, both to match the page. The bar centers its row in the
|
|
56
|
+
* page's measure, so the wordmark sits over the first column. And the bar draws
|
|
57
|
+
* no line under itself by default, since a header over a page with its own
|
|
58
|
+
* surface needs none: this page has no such surface, so it sets one. The line
|
|
59
|
+
* is a token, so it follows the theme.
|
|
60
60
|
*/
|
|
61
61
|
helix-app-header {
|
|
62
62
|
--app-header-border-color: var(--helix-color-border);
|
|
63
63
|
--app-header-max-inline-size: 56rem;
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
/* The
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
the brand a
|
|
70
|
-
|
|
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. */
|
|
71
71
|
.wordmark {
|
|
72
72
|
align-items: center;
|
|
73
|
+
color: var(--helix-color-foreground);
|
|
73
74
|
display: inline-flex;
|
|
74
75
|
gap: var(--helix-space-xs);
|
|
75
76
|
}
|
|
76
77
|
|
|
77
|
-
.wordmark helix-icon {
|
|
78
|
-
color: var(--helix-color-brand-mark);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
78
|
/*
|
|
82
|
-
* One rhythm between the blocks of a page, so no page
|
|
79
|
+
* One rhythm between the blocks of a page, so no page sets its own.
|
|
83
80
|
*
|
|
84
|
-
* **`minmax(0, 1fr)`
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
* the
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
* to. Zero as the minimum hands the overflow back to whoever is equipped for it.
|
|
81
|
+
* **`minmax(0, 1fr)` for every column, the guard every grid here needs.** An
|
|
82
|
+
* implicit track is `auto`, and an `auto` track's minimum is its content's
|
|
83
|
+
* min-content size, so a child that scrolls itself widens the track and takes
|
|
84
|
+
* the page with it. Measured at 320: the table's columns floor at 344, the
|
|
85
|
+
* column it sits in should have been 288, and `documentElement.scrollWidth`
|
|
86
|
+
* came back 360 against a 320 viewport, so the whole page scrolled sideways. A
|
|
87
|
+
* minimum of zero leaves the overflow to the table, which scrolls its own box.
|
|
92
88
|
*/
|
|
93
89
|
.stack,
|
|
94
90
|
.section,
|
|
95
91
|
.hero,
|
|
96
92
|
.first-screen,
|
|
97
|
-
.
|
|
98
|
-
.facts,
|
|
93
|
+
.features,
|
|
99
94
|
.notes,
|
|
100
95
|
.split {
|
|
101
96
|
grid-template-columns: minmax(0, 1fr);
|
|
102
97
|
}
|
|
103
98
|
|
|
104
99
|
/* One step between the blocks of a page and a smaller one inside them, which is
|
|
105
|
-
the whole of the rhythm: `3xl` here
|
|
106
|
-
|
|
107
|
-
evenly spaced things. */
|
|
100
|
+
the whole of the rhythm: `3xl` here, and the `md` a section puts between its
|
|
101
|
+
heading and its block. */
|
|
108
102
|
.stack {
|
|
109
103
|
display: grid;
|
|
110
104
|
gap: var(--helix-space-3xl);
|
|
111
105
|
}
|
|
112
106
|
|
|
113
107
|
/*
|
|
114
|
-
* **The first screen
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
* reading, so they become one and the panel reads as the thing the words were
|
|
118
|
-
* about.
|
|
108
|
+
* **The first screen: one lit panel, with what the starter is on the left and
|
|
109
|
+
* the library at work on the right.** Below 60rem two readable columns do not
|
|
110
|
+
* fit, so they become one, and the glass card follows the words.
|
|
119
111
|
*
|
|
120
|
-
* `
|
|
121
|
-
*
|
|
122
|
-
*
|
|
112
|
+
* `isolation` makes the panel its own stacking context, so the light behind it
|
|
113
|
+
* sits under the content and above the page, and `overflow: clip` keeps the
|
|
114
|
+
* light inside the rounded corners.
|
|
123
115
|
*/
|
|
124
116
|
.first-screen {
|
|
125
|
-
align-items:
|
|
117
|
+
align-items: center;
|
|
118
|
+
border: var(--helix-border-thin) solid var(--helix-color-border);
|
|
119
|
+
border-radius: var(--helix-radii-lg);
|
|
126
120
|
display: grid;
|
|
127
|
-
gap: var(--helix-space-
|
|
121
|
+
gap: var(--helix-space-2xl);
|
|
122
|
+
isolation: isolate;
|
|
123
|
+
overflow: clip;
|
|
124
|
+
padding: var(--helix-space-3xl) var(--helix-space-2xl);
|
|
125
|
+
position: relative;
|
|
128
126
|
}
|
|
129
127
|
|
|
130
128
|
@media (width >= 60rem) {
|
|
131
129
|
.first-screen {
|
|
132
|
-
grid-template-columns: minmax(0, 1fr) minmax(0,
|
|
130
|
+
grid-template-columns: minmax(0, 1fr) minmax(0, 18rem);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/* The light, under everything in the panel and out of the way of the pointer,
|
|
135
|
+
and faded out behind the words so they keep their contrast: it is at full
|
|
136
|
+
strength only behind the card, which is below the words in one column and
|
|
137
|
+
beside them in two. */
|
|
138
|
+
.first-light {
|
|
139
|
+
block-size: auto;
|
|
140
|
+
inset: 0;
|
|
141
|
+
mask-image: linear-gradient(to bottom, transparent 40%, black 80%);
|
|
142
|
+
pointer-events: none;
|
|
143
|
+
position: absolute;
|
|
144
|
+
z-index: var(--helix-layer-beneath);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
@media (width >= 60rem) {
|
|
148
|
+
.first-light {
|
|
149
|
+
mask-image: linear-gradient(to right, transparent 35%, black 70%);
|
|
133
150
|
}
|
|
134
151
|
}
|
|
135
152
|
|
|
136
|
-
/* A heading and the lines around it are one block,
|
|
137
|
-
|
|
153
|
+
/* A heading and the lines around it are one block, with a smaller gap than the
|
|
154
|
+
one between blocks. Every route opens with one. */
|
|
138
155
|
.hero {
|
|
139
156
|
display: grid;
|
|
140
157
|
gap: var(--helix-space-xs);
|
|
141
158
|
justify-items: start;
|
|
142
159
|
}
|
|
143
160
|
|
|
144
|
-
/*
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
161
|
+
/* The first screen's heading takes more room around it than a route's, and
|
|
162
|
+
its lede a step more size, wrapped to even lines. */
|
|
163
|
+
.first-screen .hero {
|
|
164
|
+
gap: var(--helix-space-md);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.first-screen .lede {
|
|
168
|
+
font-size: var(--helix-text-lg);
|
|
169
|
+
text-wrap: balance;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/* **A measure for the lede, narrower than the page's.** A line of prose across
|
|
173
|
+
56rem is around 110 characters, and the readable range tops out near 75. The
|
|
174
|
+
heading above it keeps the page's measure, since a heading is scanned. */
|
|
148
175
|
.lede {
|
|
149
176
|
max-inline-size: 42rem;
|
|
150
177
|
}
|
|
@@ -157,16 +184,14 @@ helix-app-header {
|
|
|
157
184
|
}
|
|
158
185
|
|
|
159
186
|
/*
|
|
160
|
-
* **The panel is the library
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
*
|
|
164
|
-
* `2xl`, which `divided` doubles and which would leave no column to put a
|
|
165
|
-
* number in.
|
|
187
|
+
* **The panel is the library at work**, so all it needs from here is room. Two
|
|
188
|
+
* documented hooks: the figures come down a step from the display size, which
|
|
189
|
+
* suits one figure on its own and is too loud for three in an 18rem column, and
|
|
190
|
+
* the gap between them is wide enough to set them apart with no rule.
|
|
166
191
|
*/
|
|
167
192
|
.specimen {
|
|
168
|
-
--stat-group-gap: var(--helix-space-
|
|
169
|
-
--stat-value-size: var(--helix-text-
|
|
193
|
+
--stat-group-gap: var(--helix-space-xl);
|
|
194
|
+
--stat-value-size: var(--helix-text-2xl);
|
|
170
195
|
}
|
|
171
196
|
|
|
172
197
|
/* A section is its heading and its one block, closer together than two sections
|
|
@@ -176,71 +201,37 @@ helix-app-header {
|
|
|
176
201
|
gap: var(--helix-space-md);
|
|
177
202
|
}
|
|
178
203
|
|
|
179
|
-
/*
|
|
180
|
-
|
|
181
|
-
* identical outlined boxes is the shape a generated page takes, and it is also a
|
|
182
|
-
* claim: a box says each of these is its own object, when they are three
|
|
183
|
-
* paragraphs about the same installed thing. A rule over each column groups them
|
|
184
|
-
* at a fraction of the weight, and leaves the cards below to mean something,
|
|
185
|
-
* which is that they go somewhere.
|
|
186
|
-
*
|
|
187
|
-
* `border-thick` in the foreground rather than a hairline in the border color:
|
|
188
|
-
* this is a heading device rather than a container edge, and it is the one place
|
|
189
|
-
* the page draws in ink.
|
|
190
|
-
*/
|
|
191
|
-
.facts {
|
|
204
|
+
/* Three tiles, side by side where there is room for three. */
|
|
205
|
+
.features {
|
|
192
206
|
display: grid;
|
|
193
207
|
gap: var(--helix-space-lg);
|
|
194
208
|
}
|
|
195
209
|
|
|
196
210
|
@media (width >= 48rem) {
|
|
197
|
-
.
|
|
211
|
+
.features {
|
|
198
212
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
199
213
|
}
|
|
200
214
|
}
|
|
201
215
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
border-block-start: var(--helix-border-thick) solid var(--helix-color-foreground);
|
|
205
|
-
display: grid;
|
|
206
|
-
gap: var(--helix-space-xs);
|
|
207
|
-
justify-items: start;
|
|
208
|
-
padding-block-start: var(--helix-space-sm);
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
/*
|
|
212
|
-
* **The one departure the grids state.** `helix-grid` takes a fixed count as
|
|
213
|
-
* plain CSS, which is what keeps a server-rendered row of cards correct before
|
|
214
|
-
* any JavaScript arrives. Below this width there is only ever room for one
|
|
215
|
-
* column, and `--grid-columns` is the documented way to say so from outside the
|
|
216
|
-
* shadow root.
|
|
217
|
-
*/
|
|
218
|
-
@media (width < 48rem) {
|
|
219
|
-
helix-grid {
|
|
220
|
-
--grid-columns: minmax(0, 1fr);
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
/*
|
|
225
|
-
* **The cards keep `start`, which is `--card-align`'s resting value, and the
|
|
226
|
-
* alternative is worth naming because it looks right and is not.**
|
|
227
|
-
* `space-between` puts the last line of each card on its bottom edge, so a row
|
|
228
|
-
* of cards ends in a straight line. It gets there by sharing the slack out
|
|
229
|
-
* between every region, and the first thing that moves is the body: three cards
|
|
230
|
-
* of six, five and seven lines had their opening lines 50 pixels apart under
|
|
231
|
-
* headings that were level. A reader scans the first line of each, so that is
|
|
232
|
-
* the alignment worth keeping.
|
|
233
|
-
*/
|
|
234
|
-
|
|
235
|
-
/* The card fills the link that wraps it, so a row of destinations ends level:
|
|
236
|
-
the anchor is the grid item and stretches, and the card inside it does not.
|
|
237
|
-
The regions stay packed at the top, per `--card-align` above. */
|
|
216
|
+
/* The card fills the link that wraps it, so the row of tiles ends level: the
|
|
217
|
+
anchor is the grid item, which stretches, and the card takes its full height. */
|
|
238
218
|
[data-card] > helix-card {
|
|
239
219
|
block-size: 100%;
|
|
240
220
|
}
|
|
241
221
|
|
|
242
|
-
/*
|
|
243
|
-
|
|
222
|
+
/* Each tile's icon, on a tint of the brand. */
|
|
223
|
+
.feature-mark {
|
|
224
|
+
--icon-size: 1.25rem;
|
|
225
|
+
background-color: var(--helix-color-primary-subtle);
|
|
226
|
+
border-radius: var(--helix-radii-md);
|
|
227
|
+
color: var(--helix-color-primary);
|
|
228
|
+
display: inline-flex;
|
|
229
|
+
inline-size: fit-content;
|
|
230
|
+
padding: var(--helix-space-xs);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/* A form is read straight down, and a field wider than about 28rem is hard to
|
|
234
|
+
scan, however much room the window has. */
|
|
244
235
|
.form {
|
|
245
236
|
align-content: start;
|
|
246
237
|
display: grid;
|
|
@@ -255,11 +246,10 @@ helix-app-header {
|
|
|
255
246
|
}
|
|
256
247
|
|
|
257
248
|
/*
|
|
258
|
-
* **The form takes a column and the notes take the rest.** A 28rem form
|
|
259
|
-
* 1280 window
|
|
260
|
-
*
|
|
261
|
-
*
|
|
262
|
-
* postscript, which is the order they are written in.
|
|
249
|
+
* **The form takes a column and the notes take the rest.** A 28rem form alone
|
|
250
|
+
* on a 1280 window fills a third of the page and leaves two thirds empty: the
|
|
251
|
+
* form has a right width, and the page keeps its own. Narrow, the two stack,
|
|
252
|
+
* and the notes read as a postscript, the order they are written in.
|
|
263
253
|
*/
|
|
264
254
|
.split {
|
|
265
255
|
display: grid;
|
|
@@ -291,10 +281,10 @@ helix-app-header {
|
|
|
291
281
|
}
|
|
292
282
|
|
|
293
283
|
/*
|
|
294
|
-
* **The counterpart to the bar,
|
|
295
|
-
*
|
|
296
|
-
*
|
|
297
|
-
*
|
|
284
|
+
* **The counterpart to the bar, which gives every route an end.** The rule runs
|
|
285
|
+
* the width of the window while its contents keep the page's measure, as a
|
|
286
|
+
* footer under a centered page does. The shell above holds it to the bottom of a
|
|
287
|
+
* window a route does not fill.
|
|
298
288
|
*/
|
|
299
289
|
.site-footer {
|
|
300
290
|
border-block-start: var(--helix-border-thin) solid var(--helix-color-border);
|
|
@@ -318,12 +308,16 @@ helix-app-header {
|
|
|
318
308
|
}
|
|
319
309
|
|
|
320
310
|
/*
|
|
321
|
-
* **Narrow, the gutter gives
|
|
322
|
-
*
|
|
323
|
-
*
|
|
324
|
-
*
|
|
311
|
+
* **Narrow, the gutter gives first.** 24 pixels either side of a 390 window
|
|
312
|
+
* spend 48 of 390 on margin, and the table needs 355 of what is left. At `md` it
|
|
313
|
+
* has 358 and fits; at `lg` it was 13 pixels short, and the last column sat
|
|
314
|
+
* outside the box until you scrolled the table sideways.
|
|
325
315
|
*/
|
|
326
316
|
@media (width < 40rem) {
|
|
317
|
+
.first-screen {
|
|
318
|
+
padding: var(--helix-space-2xl) var(--helix-space-lg);
|
|
319
|
+
}
|
|
320
|
+
|
|
327
321
|
.page {
|
|
328
322
|
padding-block: var(--helix-space-xl) var(--helix-space-2xl);
|
|
329
323
|
padding-inline: var(--helix-space-md);
|
|
@@ -336,22 +330,21 @@ helix-app-header {
|
|
|
336
330
|
|
|
337
331
|
/*
|
|
338
332
|
* **The escape hatch, and the reason a component names its parts.** The table
|
|
339
|
-
*
|
|
340
|
-
*
|
|
341
|
-
*
|
|
342
|
-
*
|
|
343
|
-
* however specific that one is.
|
|
333
|
+
* tints a chosen row at the strength `Tag` rests at, and this page wants a
|
|
334
|
+
* ticked row easy to find from across the screen, a step past any token.
|
|
335
|
+
* `::part` reaches the boxes the component drew, with no fork, and a rule
|
|
336
|
+
* written out here beats the component's own, however specific that one is.
|
|
344
337
|
*
|
|
345
|
-
* **Two parts
|
|
346
|
-
*
|
|
347
|
-
*
|
|
348
|
-
*
|
|
349
|
-
*
|
|
338
|
+
* **Two parts, because a row has no box.** The row is `display: contents`, so
|
|
339
|
+
* one grid can align every column across every row, and the cells are what a
|
|
340
|
+
* selection is painted on. The table names both: the data cells and the cell
|
|
341
|
+
* holding the checkbox. Naming only the first leaves a pale stripe down the
|
|
342
|
+
* left of every chosen row.
|
|
350
343
|
*
|
|
351
344
|
* The values are still the library's, so a theme carries them like everything
|
|
352
|
-
* else. `primary-subtle
|
|
353
|
-
*
|
|
354
|
-
*
|
|
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.
|
|
355
348
|
*/
|
|
356
349
|
helix-data-table::part(cell-selected),
|
|
357
350
|
helix-data-table::part(select-selected) {
|