@fusion.dev/helix-docs 0.131.0 → 0.132.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.
@@ -28,7 +28,8 @@ computed from `brand` or from the Helix design language. A theme that sets only
28
28
  |---|---|
29
29
  | `brand` | Your main brand color. Required |
30
30
  | `accent` | The second emphasis color. Defaults to the brand color. `{ from: 'brand', rotate: 180 }` gives the complementary color |
31
- | `neutral` | The gray ramp, which can be tinted toward the brand |
31
+ | `background` | The page's color, `{ light, dark }`, for a page that is not pure white or pure black. The surfaces keep their contrast with it, and the grays take its tint. A page no text color can reach the contrast target on is refused |
32
+ | `neutral` | The gray ramp, which can be tinted toward the brand. With `background`, it takes the page's tint |
32
33
  | `status` | `info`, `success`, `warning`, and `danger`. A color pins one. An object adjusts its hue while it keeps its meaning |
33
34
  | `chroma` | How saturated the palette is, independent of hue |
34
35
  | `scheme` | `'light'` or `'dark'`, for a theme that has only one mode |
@@ -58,10 +58,10 @@ either barrel. The per-component tables show what your page pays.
58
58
  | Package | Raw | Gzip | Brotli | |
59
59
  |---|---|---|---|---|
60
60
  | `@fusion.dev/helix-core` | 183,735 | 58,230 | 49,473 | The element base class, mixins, decorators, and floating positioning. |
61
- | `@fusion.dev/helix-headless` | 745,966 | 193,214 | 149,903 | Every headless family. The barrel entry includes all of them. |
61
+ | `@fusion.dev/helix-headless` | 746,073 | 193,246 | 149,775 | Every headless family. The barrel entry includes all of them. |
62
62
  | `@fusion.dev/helix-icons` | 55,565 | 17,727 | 14,864 | The whole glyph set. |
63
63
  | `@fusion.dev/helix-theme` | 3,626 | 1,597 | 1,384 | The derivation engine. Most sites run it at build time, and a theme switcher runs it in the browser. |
64
- | `@fusion.dev/helix` | 1,291,029 | 301,797 | 220,733 | Every styled family. |
64
+ | `@fusion.dev/helix` | 1,291,284 | 301,883 | 220,711 | Every styled family. |
65
65
  | `lit` | 15,394 | 6,118 | 5,460 | Lit itself, listed so you can subtract it from every row above. |
66
66
 
67
67
  ## Stylesheets
@@ -84,9 +84,9 @@ shows the whole cost of using the base layer on its own.
84
84
 
85
85
  **Most of your first component is the shared runtime.** The median styled family is 21,372 bytes gzipped alone, and it adds 2,254 to a page that already has Helix. The shared runtime is 89 percent of the first component, and the component itself is 11 percent. Ten typical components cost the first number once, plus nine of the added number. The two columns in the tables below let you work that out for your own components.
86
86
 
87
- Across the 104 styled components, the smallest is `code` at 9,928 bytes gzipped alone, and the largest is `data-table` at 63,813. Every family together is 301,797.
87
+ Across the 104 styled components, the smallest is `code` at 9,928 bytes gzipped alone, and the largest is `data-table` at 63,813. Every family together is 301,883.
88
88
 
89
- No family imports a barrel. The `barrels` rule in `fusion workspace` enforces that. `@fusion.dev/helix-headless` marks every module in `dist` as having side effects, which is true of a file that calls `customElements.define`. A bundler can remove none of it. One `import { HelixHeadlessButton } from '@fusion.dev/helix-headless'` costs 193,214 bytes gzipped, whatever else the page imports. That is 9 times the median family above. All 104 styled families import the headless family they extend directly. The rule checks the shape of the import, so it applies to any package that sets `sideEffects`, whatever its name.
89
+ No family imports a barrel. The `barrels` rule in `fusion workspace` enforces that. `@fusion.dev/helix-headless` marks every module in `dist` as having side effects, which is true of a file that calls `customElements.define`. A bundler can remove none of it. One `import { HelixHeadlessButton } from '@fusion.dev/helix-headless'` costs 193,246 bytes gzipped, whatever else the page imports. That is 9 times the median family above. All 104 styled families import the headless family they extend directly. The rule checks the shape of the import, so it applies to any package that sets `sideEffects`, whatever its name.
90
90
 
91
91
  The headless tier never had the problem, so it serves as the control. `@fusion.dev/helix-core` is `sideEffects: false`, and the median headless family is 21,928 bytes gzipped alone.
92
92
 
@@ -202,11 +202,11 @@ Structure, accessibility, state, and form participation. It has no presentation
202
202
  | `code-block` | 133,803 | 43,664 | 36,792 | 17,288 | 4,490 | 3,847 |
203
203
  | `color-input` | 151,779 | 47,718 | 40,233 | 25,691 | 5,998 | 4,976 |
204
204
  | `color-picker` | 118,224 | 37,113 | 30,494 | 19,588 | 4,689 | 3,874 |
205
- | `combobox` | 146,691 | 46,408 | 38,900 | 21,146 | 5,230 | 4,258 |
205
+ | `combobox` | 146,722 | 46,415 | 38,946 | 21,177 | 5,239 | 4,380 |
206
206
  | `command` | 116,641 | 36,394 | 29,750 | 18,065 | 4,588 | 3,719 |
207
207
  | `copy-button` | 128,401 | 42,039 | 35,305 | 11,883 | 2,933 | 2,322 |
208
208
  | `data-table` | 186,894 | 56,878 | 48,021 | 57,295 | 14,485 | 11,997 |
209
- | `date-input` | 144,949 | 45,900 | 38,587 | 19,177 | 4,830 | 4,067 |
209
+ | `date-input` | 144,981 | 45,912 | 38,562 | 19,209 | 4,845 | 4,000 |
210
210
  | `date-picker` | 100,136 | 32,351 | 26,467 | 9,900 | 2,714 | 2,336 |
211
211
  | `description-list` | 33,012 | 10,012 | 8,793 | 1,132 | 182 | 155 |
212
212
  | `dialog` | 36,561 | 11,114 | 9,752 | 2,717 | 765 | 587 |
@@ -215,7 +215,7 @@ Structure, accessibility, state, and form participation. It has no presentation
215
215
  | `drawer` | 35,314 | 10,755 | 9,427 | 1,761 | 466 | 446 |
216
216
  | `drilldown` | 97,002 | 31,492 | 25,596 | 5,704 | 1,481 | 1,170 |
217
217
  | `empty` | 33,506 | 10,310 | 9,098 | 956 | 233 | 140 |
218
- | `file-input` | 100,449 | 32,330 | 26,417 | 6,215 | 1,787 | 1,429 |
218
+ | `file-input` | 100,500 | 32,345 | 26,387 | 6,266 | 1,803 | 1,479 |
219
219
  | `filter-input` | 157,243 | 49,107 | 41,347 | 28,023 | 6,779 | 5,542 |
220
220
  | `format-date` | 36,522 | 11,235 | 9,940 | 2,867 | 684 | 532 |
221
221
  | `graph` | 114,708 | 36,466 | 29,953 | 11,479 | 3,233 | 2,708 |
@@ -263,9 +263,9 @@ Structure, accessibility, state, and form participation. It has no presentation
263
263
  | `switch` | 41,773 | 12,384 | 10,883 | 1,650 | 497 | 338 |
264
264
  | `table` | 99,327 | 32,297 | 26,296 | 10,158 | 2,798 | 2,311 |
265
265
  | `tabs` | 41,013 | 12,219 | 10,747 | 3,925 | 834 | 594 |
266
- | `tag` | 88,357 | 28,573 | 23,333 | 895 | 192 | 113 |
266
+ | `tag` | 88,370 | 28,577 | 23,348 | 908 | 197 | 161 |
267
267
  | `textarea` | 43,960 | 12,892 | 11,311 | 3,996 | 1,070 | 755 |
268
- | `time-input` | 158,079 | 49,121 | 41,337 | 29,016 | 7,045 | 5,755 |
268
+ | `time-input` | 158,111 | 49,133 | 41,350 | 29,048 | 7,058 | 5,895 |
269
269
  | `time-picker` | 117,196 | 37,094 | 30,330 | 19,136 | 5,104 | 4,148 |
270
270
  | `timeline` | 88,806 | 28,574 | 23,446 | 1,809 | 380 | 300 |
271
271
  | `toast` | 92,163 | 29,709 | 24,315 | 4,078 | 951 | 820 |
@@ -308,11 +308,11 @@ The headless tier plus presentation. `bun add @fusion.dev/helix` installs this t
308
308
  | `code-block` | 150,253 | 46,548 | 39,158 | 33,717 | 7,215 | 6,126 |
309
309
  | `color-input` | 185,460 | 52,861 | 44,724 | 59,352 | 11,295 | 9,511 |
310
310
  | `color-picker` | 146,202 | 41,656 | 34,488 | 47,560 | 9,284 | 7,867 |
311
- | `combobox` | 161,799 | 49,039 | 41,252 | 36,231 | 7,906 | 6,471 |
311
+ | `combobox` | 161,978 | 49,085 | 41,270 | 36,410 | 7,955 | 6,615 |
312
312
  | `command` | 127,393 | 38,493 | 31,618 | 28,803 | 6,694 | 5,583 |
313
313
  | `copy-button` | 138,405 | 43,830 | 36,878 | 21,871 | 4,664 | 3,877 |
314
314
  | `data-table` | 225,180 | 63,813 | 53,600 | 95,314 | 21,365 | 17,447 |
315
- | `date-input` | 160,960 | 48,876 | 41,238 | 35,177 | 7,843 | 6,678 |
315
+ | `date-input` | 161,140 | 48,929 | 41,318 | 35,357 | 7,899 | 6,643 |
316
316
  | `date-picker` | 105,753 | 33,518 | 27,415 | 15,499 | 3,859 | 3,238 |
317
317
  | `description-list` | 35,390 | 10,586 | 9,287 | 3,502 | 768 | 694 |
318
318
  | `dialog` | 40,938 | 12,132 | 10,723 | 7,079 | 1,782 | 1,494 |
@@ -321,7 +321,7 @@ The headless tier plus presentation. `bun add @fusion.dev/helix` installs this t
321
321
  | `drawer` | 39,577 | 11,767 | 10,345 | 6,007 | 1,482 | 1,263 |
322
322
  | `drilldown` | 101,699 | 32,584 | 26,513 | 10,393 | 2,528 | 2,071 |
323
323
  | `empty` | 34,946 | 10,764 | 9,445 | 2,380 | 678 | 489 |
324
- | `file-input` | 111,827 | 34,613 | 28,369 | 17,594 | 4,020 | 3,366 |
324
+ | `file-input` | 112,026 | 34,672 | 28,381 | 17,793 | 4,076 | 3,392 |
325
325
  | `filter-input` | 185,579 | 53,639 | 45,210 | 56,353 | 11,398 | 9,498 |
326
326
  | `flex` | 33,966 | 10,295 | 9,062 | 2,078 | 445 | 296 |
327
327
  | `format-date` | 37,170 | 11,382 | 10,030 | 3,497 | 860 | 608 |
@@ -373,10 +373,10 @@ The headless tier plus presentation. `bun add @fusion.dev/helix` installs this t
373
373
  | `switch` | 46,139 | 13,459 | 11,778 | 6,001 | 1,568 | 1,279 |
374
374
  | `table` | 104,921 | 33,482 | 27,341 | 15,746 | 3,981 | 3,421 |
375
375
  | `tabs` | 47,249 | 13,492 | 11,867 | 10,154 | 2,155 | 1,927 |
376
- | `tag` | 91,560 | 29,474 | 24,113 | 4,083 | 1,013 | 827 |
376
+ | `tag` | 91,721 | 29,528 | 24,083 | 4,244 | 1,063 | 870 |
377
377
  | `text` | 36,086 | 10,644 | 9,325 | 4,200 | 880 | 692 |
378
378
  | `textarea` | 47,395 | 13,733 | 12,034 | 7,418 | 1,928 | 1,528 |
379
- | `time-input` | 179,569 | 52,698 | 44,403 | 50,488 | 10,697 | 8,990 |
379
+ | `time-input` | 179,749 | 52,754 | 44,471 | 50,668 | 10,753 | 8,930 |
380
380
  | `time-picker` | 128,924 | 39,284 | 32,256 | 30,852 | 7,322 | 6,068 |
381
381
  | `timeline` | 92,119 | 29,344 | 24,098 | 5,110 | 1,130 | 917 |
382
382
  | `toast` | 99,696 | 31,426 | 25,725 | 11,599 | 2,601 | 2,189 |
@@ -401,11 +401,11 @@ stripped column shows the bytes we removed.
401
401
  | Package | Unpacked | Files | Source maps stripped | Runtime dependencies |
402
402
  |---|---|---|---|---|
403
403
  | `@fusion.dev/helix-core` | 1,192,742 | 171 | 267,144 | `@floating-ui/dom`, `@fusion.dev/helix-icons` |
404
- | `@fusion.dev/helix-headless` | 13,506,127 | 510 | 1,077,660 | `@fusion.dev/helix-core`, `@fusion.dev/helix-icons`, `uqr` |
404
+ | `@fusion.dev/helix-headless` | 13,508,620 | 510 | 1,077,666 | `@fusion.dev/helix-core`, `@fusion.dev/helix-icons`, `uqr` |
405
405
  | `@fusion.dev/helix-icons` | 150,162 | 21 | 50,346 | `svgo` |
406
406
  | `@fusion.dev/helix-styles` | 102,155 | 6 | 0 | none |
407
- | `@fusion.dev/helix-theme` | 500,416 | 8 | 5,191 | none |
408
- | `@fusion.dev/helix` | 14,618,004 | 876 | 373,795 | `@fusion.dev/helix-core`, `@fusion.dev/helix-headless`, `@fusion.dev/helix-styles` |
407
+ | `@fusion.dev/helix-theme` | 514,288 | 8 | 5,300 | none |
408
+ | `@fusion.dev/helix` | 14,621,013 | 876 | 373,802 | `@fusion.dev/helix-core`, `@fusion.dev/helix-headless`, `@fusion.dev/helix-styles` |
409
409
 
410
410
  ## Not measured yet
411
411
 
@@ -15,53 +15,60 @@ a theme from a few inputs, and the theme builder shows you the result.
15
15
 
16
16
  You enter the same inputs that `derive()` takes:
17
17
 
18
- - a brand color
19
- - a chroma ceiling
20
- - a radius
21
- - a density
22
- - a contrast target
23
- - a motion character
24
-
25
- The theme builder runs the full derivation. It shows you every token, and the
26
- components drawn with them.
27
-
28
- It shows light and dark at the same time. `[data-color-mode]` works on any
29
- element, so the two previews are two subtrees of one document. See
30
- [Color modes](./color-modes).
31
-
32
- ## The contrast column
33
-
34
- The contrast column lists every color pair Helix computed. Each pair shows its
35
- ratio, measured against the background it is painted on. A pair has one of
36
- three states:
37
-
38
- - **Met.** The pair reaches the target.
39
- - **Unverifiable.** The background is translucent, so there is no known color
40
- to measure against. The pair neither passes nor fails. This is the cost of a
41
- translucent material, and the theme builder reports it.
42
- - **Pinned.** You set the color yourself. The engine did not compute it, so its
43
- contrast is not guaranteed.
44
-
45
- A column of `unverifiable` pairs means your theme makes a trade. The column lets
46
- you see that you made it.
47
-
48
- ## What the theme builder exports
49
-
50
- The theme builder gives you the token block as CSS, to paste into your own
18
+ - **Color:** the brand, the color scheme, the contrast target, the saturation,
19
+ the accent angle, and the page's color in light and in dark
20
+ - **Shape and type:** the density, the corner radius, the three faces, the body
21
+ size, and the type scale
22
+ - **Status:** how far the status colors follow the palette, and how far their
23
+ hues may move
24
+ - **Motion, separation, and material:** the motion character, how surfaces are
25
+ set apart, and how floating surfaces are blurred and see-through
26
+
27
+ The theme builder runs the full derivation on every change. It shows a page
28
+ drawn with the theme, and the stylesheet the theme generates beside it.
29
+
30
+ The Color scheme field picks which half you see: light, dark, or the site's own
31
+ mode. See [Color modes](./color-modes).
32
+
33
+ ## A page of your own color
34
+
35
+ The Light page and Dark page fields give the page a color, such as a warm cream
36
+ or a deep teal. They start at pure white and pure black, the page Helix draws
37
+ without one. The surfaces keep the contrast with the page they keep with white
38
+ or black, the grays take its tint, and every text color is solved against it. A
39
+ page that no text color can reach the contrast target on is left out of the
40
+ preview, and a caption under the fields says so.
41
+
42
+ ## The audit
43
+
44
+ The audit lists every color pair Helix computed. Each pair shows its ratio,
45
+ measured against the background it is painted on, and either passes or fails
46
+ its target. Its three tabs are:
47
+
48
+ - **Contrast.** The pairs that fail, or a line saying that every pair passes.
49
+ - **Collisions.** Colors too close to each other to tell apart, such as the
50
+ primary color and a status color.
51
+ - **Unverifiable.** Pairs whose background is translucent, so there is no known
52
+ color to measure against. This is the cost of a translucent material, and
53
+ the theme builder reports it.
54
+
55
+ ## What the theme builder gives you
56
+
57
+ The generated stylesheet is the token block as CSS, to paste into your own
51
58
  stylesheet:
52
59
 
53
60
  ```css
54
- :root {
55
- --helix-color-primary: oklch(…);
61
+ [data-theme="preview"] {
62
+ --helix-color-background: #f7f2eb;
56
63
  …
57
64
  }
58
65
  ```
59
66
 
60
- It also gives you the intent object, to keep in your repository and derive the
61
- theme from again:
67
+ The page's link holds every input you changed, so a link is the theme. To derive
68
+ the theme in your own build, write the same inputs as an intent object:
62
69
 
63
70
  ```ts
64
- export const theme = { brand: '#2563eb', chroma: { ceiling: 0.1 }, radius: 2 }
71
+ export const theme = { background: { light: '#f7f2eb' }, brand: '#ff6200' }
65
72
  ```
66
73
 
67
74
  **Keep the intent object in your repository.** The tokens are the output of a
@@ -2309,7 +2309,8 @@ computed from \`brand\` or from the Helix design language. A theme that sets onl
2309
2309
  |---|---|
2310
2310
  | \`brand\` | Your main brand color. Required |
2311
2311
  | \`accent\` | The second emphasis color. Defaults to the brand color. \`{ from: 'brand', rotate: 180 }\` gives the complementary color |
2312
- | \`neutral\` | The gray ramp, which can be tinted toward the brand |
2312
+ | \`background\` | The page's color, \`{ light, dark }\`, for a page that is not pure white or pure black. The surfaces keep their contrast with it, and the grays take its tint. A page no text color can reach the contrast target on is refused |
2313
+ | \`neutral\` | The gray ramp, which can be tinted toward the brand. With \`background\`, it takes the page's tint |
2313
2314
  | \`status\` | \`info\`, \`success\`, \`warning\`, and \`danger\`. A color pins one. An object adjusts its hue while it keeps its meaning |
2314
2315
  | \`chroma\` | How saturated the palette is, independent of hue |
2315
2316
  | \`scheme\` | \`'light'\` or \`'dark'\`, for a theme that has only one mode |
@@ -3345,10 +3346,10 @@ either barrel. The per-component tables show what your page pays.
3345
3346
  | Package | Raw | Gzip | Brotli | |
3346
3347
  |---|---|---|---|---|
3347
3348
  | \`@fusion.dev/helix-core\` | 183,735 | 58,230 | 49,473 | The element base class, mixins, decorators, and floating positioning. |
3348
- | \`@fusion.dev/helix-headless\` | 745,966 | 193,214 | 149,903 | Every headless family. The barrel entry includes all of them. |
3349
+ | \`@fusion.dev/helix-headless\` | 746,073 | 193,246 | 149,775 | Every headless family. The barrel entry includes all of them. |
3349
3350
  | \`@fusion.dev/helix-icons\` | 55,565 | 17,727 | 14,864 | The whole glyph set. |
3350
3351
  | \`@fusion.dev/helix-theme\` | 3,626 | 1,597 | 1,384 | The derivation engine. Most sites run it at build time, and a theme switcher runs it in the browser. |
3351
- | \`@fusion.dev/helix\` | 1,291,029 | 301,797 | 220,733 | Every styled family. |
3352
+ | \`@fusion.dev/helix\` | 1,291,284 | 301,883 | 220,711 | Every styled family. |
3352
3353
  | \`lit\` | 15,394 | 6,118 | 5,460 | Lit itself, listed so you can subtract it from every row above. |
3353
3354
 
3354
3355
  ## Stylesheets
@@ -3371,9 +3372,9 @@ shows the whole cost of using the base layer on its own.
3371
3372
 
3372
3373
  **Most of your first component is the shared runtime.** The median styled family is 21,372 bytes gzipped alone, and it adds 2,254 to a page that already has Helix. The shared runtime is 89 percent of the first component, and the component itself is 11 percent. Ten typical components cost the first number once, plus nine of the added number. The two columns in the tables below let you work that out for your own components.
3373
3374
 
3374
- Across the 104 styled components, the smallest is \`code\` at 9,928 bytes gzipped alone, and the largest is \`data-table\` at 63,813. Every family together is 301,797.
3375
+ Across the 104 styled components, the smallest is \`code\` at 9,928 bytes gzipped alone, and the largest is \`data-table\` at 63,813. Every family together is 301,883.
3375
3376
 
3376
- No family imports a barrel. The \`barrels\` rule in \`fusion workspace\` enforces that. \`@fusion.dev/helix-headless\` marks every module in \`dist\` as having side effects, which is true of a file that calls \`customElements.define\`. A bundler can remove none of it. One \`import { HelixHeadlessButton } from '@fusion.dev/helix-headless'\` costs 193,214 bytes gzipped, whatever else the page imports. That is 9 times the median family above. All 104 styled families import the headless family they extend directly. The rule checks the shape of the import, so it applies to any package that sets \`sideEffects\`, whatever its name.
3377
+ No family imports a barrel. The \`barrels\` rule in \`fusion workspace\` enforces that. \`@fusion.dev/helix-headless\` marks every module in \`dist\` as having side effects, which is true of a file that calls \`customElements.define\`. A bundler can remove none of it. One \`import { HelixHeadlessButton } from '@fusion.dev/helix-headless'\` costs 193,246 bytes gzipped, whatever else the page imports. That is 9 times the median family above. All 104 styled families import the headless family they extend directly. The rule checks the shape of the import, so it applies to any package that sets \`sideEffects\`, whatever its name.
3377
3378
 
3378
3379
  The headless tier never had the problem, so it serves as the control. \`@fusion.dev/helix-core\` is \`sideEffects: false\`, and the median headless family is 21,928 bytes gzipped alone.
3379
3380
 
@@ -3489,11 +3490,11 @@ Structure, accessibility, state, and form participation. It has no presentation
3489
3490
  | \`code-block\` | 133,803 | 43,664 | 36,792 | 17,288 | 4,490 | 3,847 |
3490
3491
  | \`color-input\` | 151,779 | 47,718 | 40,233 | 25,691 | 5,998 | 4,976 |
3491
3492
  | \`color-picker\` | 118,224 | 37,113 | 30,494 | 19,588 | 4,689 | 3,874 |
3492
- | \`combobox\` | 146,691 | 46,408 | 38,900 | 21,146 | 5,230 | 4,258 |
3493
+ | \`combobox\` | 146,722 | 46,415 | 38,946 | 21,177 | 5,239 | 4,380 |
3493
3494
  | \`command\` | 116,641 | 36,394 | 29,750 | 18,065 | 4,588 | 3,719 |
3494
3495
  | \`copy-button\` | 128,401 | 42,039 | 35,305 | 11,883 | 2,933 | 2,322 |
3495
3496
  | \`data-table\` | 186,894 | 56,878 | 48,021 | 57,295 | 14,485 | 11,997 |
3496
- | \`date-input\` | 144,949 | 45,900 | 38,587 | 19,177 | 4,830 | 4,067 |
3497
+ | \`date-input\` | 144,981 | 45,912 | 38,562 | 19,209 | 4,845 | 4,000 |
3497
3498
  | \`date-picker\` | 100,136 | 32,351 | 26,467 | 9,900 | 2,714 | 2,336 |
3498
3499
  | \`description-list\` | 33,012 | 10,012 | 8,793 | 1,132 | 182 | 155 |
3499
3500
  | \`dialog\` | 36,561 | 11,114 | 9,752 | 2,717 | 765 | 587 |
@@ -3502,7 +3503,7 @@ Structure, accessibility, state, and form participation. It has no presentation
3502
3503
  | \`drawer\` | 35,314 | 10,755 | 9,427 | 1,761 | 466 | 446 |
3503
3504
  | \`drilldown\` | 97,002 | 31,492 | 25,596 | 5,704 | 1,481 | 1,170 |
3504
3505
  | \`empty\` | 33,506 | 10,310 | 9,098 | 956 | 233 | 140 |
3505
- | \`file-input\` | 100,449 | 32,330 | 26,417 | 6,215 | 1,787 | 1,429 |
3506
+ | \`file-input\` | 100,500 | 32,345 | 26,387 | 6,266 | 1,803 | 1,479 |
3506
3507
  | \`filter-input\` | 157,243 | 49,107 | 41,347 | 28,023 | 6,779 | 5,542 |
3507
3508
  | \`format-date\` | 36,522 | 11,235 | 9,940 | 2,867 | 684 | 532 |
3508
3509
  | \`graph\` | 114,708 | 36,466 | 29,953 | 11,479 | 3,233 | 2,708 |
@@ -3550,9 +3551,9 @@ Structure, accessibility, state, and form participation. It has no presentation
3550
3551
  | \`switch\` | 41,773 | 12,384 | 10,883 | 1,650 | 497 | 338 |
3551
3552
  | \`table\` | 99,327 | 32,297 | 26,296 | 10,158 | 2,798 | 2,311 |
3552
3553
  | \`tabs\` | 41,013 | 12,219 | 10,747 | 3,925 | 834 | 594 |
3553
- | \`tag\` | 88,357 | 28,573 | 23,333 | 895 | 192 | 113 |
3554
+ | \`tag\` | 88,370 | 28,577 | 23,348 | 908 | 197 | 161 |
3554
3555
  | \`textarea\` | 43,960 | 12,892 | 11,311 | 3,996 | 1,070 | 755 |
3555
- | \`time-input\` | 158,079 | 49,121 | 41,337 | 29,016 | 7,045 | 5,755 |
3556
+ | \`time-input\` | 158,111 | 49,133 | 41,350 | 29,048 | 7,058 | 5,895 |
3556
3557
  | \`time-picker\` | 117,196 | 37,094 | 30,330 | 19,136 | 5,104 | 4,148 |
3557
3558
  | \`timeline\` | 88,806 | 28,574 | 23,446 | 1,809 | 380 | 300 |
3558
3559
  | \`toast\` | 92,163 | 29,709 | 24,315 | 4,078 | 951 | 820 |
@@ -3595,11 +3596,11 @@ The headless tier plus presentation. \`bun add @fusion.dev/helix\` installs this
3595
3596
  | \`code-block\` | 150,253 | 46,548 | 39,158 | 33,717 | 7,215 | 6,126 |
3596
3597
  | \`color-input\` | 185,460 | 52,861 | 44,724 | 59,352 | 11,295 | 9,511 |
3597
3598
  | \`color-picker\` | 146,202 | 41,656 | 34,488 | 47,560 | 9,284 | 7,867 |
3598
- | \`combobox\` | 161,799 | 49,039 | 41,252 | 36,231 | 7,906 | 6,471 |
3599
+ | \`combobox\` | 161,978 | 49,085 | 41,270 | 36,410 | 7,955 | 6,615 |
3599
3600
  | \`command\` | 127,393 | 38,493 | 31,618 | 28,803 | 6,694 | 5,583 |
3600
3601
  | \`copy-button\` | 138,405 | 43,830 | 36,878 | 21,871 | 4,664 | 3,877 |
3601
3602
  | \`data-table\` | 225,180 | 63,813 | 53,600 | 95,314 | 21,365 | 17,447 |
3602
- | \`date-input\` | 160,960 | 48,876 | 41,238 | 35,177 | 7,843 | 6,678 |
3603
+ | \`date-input\` | 161,140 | 48,929 | 41,318 | 35,357 | 7,899 | 6,643 |
3603
3604
  | \`date-picker\` | 105,753 | 33,518 | 27,415 | 15,499 | 3,859 | 3,238 |
3604
3605
  | \`description-list\` | 35,390 | 10,586 | 9,287 | 3,502 | 768 | 694 |
3605
3606
  | \`dialog\` | 40,938 | 12,132 | 10,723 | 7,079 | 1,782 | 1,494 |
@@ -3608,7 +3609,7 @@ The headless tier plus presentation. \`bun add @fusion.dev/helix\` installs this
3608
3609
  | \`drawer\` | 39,577 | 11,767 | 10,345 | 6,007 | 1,482 | 1,263 |
3609
3610
  | \`drilldown\` | 101,699 | 32,584 | 26,513 | 10,393 | 2,528 | 2,071 |
3610
3611
  | \`empty\` | 34,946 | 10,764 | 9,445 | 2,380 | 678 | 489 |
3611
- | \`file-input\` | 111,827 | 34,613 | 28,369 | 17,594 | 4,020 | 3,366 |
3612
+ | \`file-input\` | 112,026 | 34,672 | 28,381 | 17,793 | 4,076 | 3,392 |
3612
3613
  | \`filter-input\` | 185,579 | 53,639 | 45,210 | 56,353 | 11,398 | 9,498 |
3613
3614
  | \`flex\` | 33,966 | 10,295 | 9,062 | 2,078 | 445 | 296 |
3614
3615
  | \`format-date\` | 37,170 | 11,382 | 10,030 | 3,497 | 860 | 608 |
@@ -3660,10 +3661,10 @@ The headless tier plus presentation. \`bun add @fusion.dev/helix\` installs this
3660
3661
  | \`switch\` | 46,139 | 13,459 | 11,778 | 6,001 | 1,568 | 1,279 |
3661
3662
  | \`table\` | 104,921 | 33,482 | 27,341 | 15,746 | 3,981 | 3,421 |
3662
3663
  | \`tabs\` | 47,249 | 13,492 | 11,867 | 10,154 | 2,155 | 1,927 |
3663
- | \`tag\` | 91,560 | 29,474 | 24,113 | 4,083 | 1,013 | 827 |
3664
+ | \`tag\` | 91,721 | 29,528 | 24,083 | 4,244 | 1,063 | 870 |
3664
3665
  | \`text\` | 36,086 | 10,644 | 9,325 | 4,200 | 880 | 692 |
3665
3666
  | \`textarea\` | 47,395 | 13,733 | 12,034 | 7,418 | 1,928 | 1,528 |
3666
- | \`time-input\` | 179,569 | 52,698 | 44,403 | 50,488 | 10,697 | 8,990 |
3667
+ | \`time-input\` | 179,749 | 52,754 | 44,471 | 50,668 | 10,753 | 8,930 |
3667
3668
  | \`time-picker\` | 128,924 | 39,284 | 32,256 | 30,852 | 7,322 | 6,068 |
3668
3669
  | \`timeline\` | 92,119 | 29,344 | 24,098 | 5,110 | 1,130 | 917 |
3669
3670
  | \`toast\` | 99,696 | 31,426 | 25,725 | 11,599 | 2,601 | 2,189 |
@@ -3688,11 +3689,11 @@ stripped column shows the bytes we removed.
3688
3689
  | Package | Unpacked | Files | Source maps stripped | Runtime dependencies |
3689
3690
  |---|---|---|---|---|
3690
3691
  | \`@fusion.dev/helix-core\` | 1,192,742 | 171 | 267,144 | \`@floating-ui/dom\`, \`@fusion.dev/helix-icons\` |
3691
- | \`@fusion.dev/helix-headless\` | 13,506,127 | 510 | 1,077,660 | \`@fusion.dev/helix-core\`, \`@fusion.dev/helix-icons\`, \`uqr\` |
3692
+ | \`@fusion.dev/helix-headless\` | 13,508,620 | 510 | 1,077,666 | \`@fusion.dev/helix-core\`, \`@fusion.dev/helix-icons\`, \`uqr\` |
3692
3693
  | \`@fusion.dev/helix-icons\` | 150,162 | 21 | 50,346 | \`svgo\` |
3693
3694
  | \`@fusion.dev/helix-styles\` | 102,155 | 6 | 0 | none |
3694
- | \`@fusion.dev/helix-theme\` | 500,416 | 8 | 5,191 | none |
3695
- | \`@fusion.dev/helix\` | 14,618,004 | 876 | 373,795 | \`@fusion.dev/helix-core\`, \`@fusion.dev/helix-headless\`, \`@fusion.dev/helix-styles\` |
3695
+ | \`@fusion.dev/helix-theme\` | 514,288 | 8 | 5,300 | none |
3696
+ | \`@fusion.dev/helix\` | 14,621,013 | 876 | 373,802 | \`@fusion.dev/helix-core\`, \`@fusion.dev/helix-headless\`, \`@fusion.dev/helix-styles\` |
3696
3697
 
3697
3698
  ## Not measured yet
3698
3699
 
@@ -5584,53 +5585,60 @@ a theme from a few inputs, and the theme builder shows you the result.
5584
5585
 
5585
5586
  You enter the same inputs that \`derive()\` takes:
5586
5587
 
5587
- - a brand color
5588
- - a chroma ceiling
5589
- - a radius
5590
- - a density
5591
- - a contrast target
5592
- - a motion character
5588
+ - **Color:** the brand, the color scheme, the contrast target, the saturation,
5589
+ the accent angle, and the page's color in light and in dark
5590
+ - **Shape and type:** the density, the corner radius, the three faces, the body
5591
+ size, and the type scale
5592
+ - **Status:** how far the status colors follow the palette, and how far their
5593
+ hues may move
5594
+ - **Motion, separation, and material:** the motion character, how surfaces are
5595
+ set apart, and how floating surfaces are blurred and see-through
5593
5596
 
5594
- The theme builder runs the full derivation. It shows you every token, and the
5595
- components drawn with them.
5597
+ The theme builder runs the full derivation on every change. It shows a page
5598
+ drawn with the theme, and the stylesheet the theme generates beside it.
5596
5599
 
5597
- It shows light and dark at the same time. \`[data-color-mode]\` works on any
5598
- element, so the two previews are two subtrees of one document. See
5599
- [Color modes](./color-modes).
5600
+ The Color scheme field picks which half you see: light, dark, or the site's own
5601
+ mode. See [Color modes](./color-modes).
5600
5602
 
5601
- ## The contrast column
5603
+ ## A page of your own color
5602
5604
 
5603
- The contrast column lists every color pair Helix computed. Each pair shows its
5604
- ratio, measured against the background it is painted on. A pair has one of
5605
- three states:
5605
+ The Light page and Dark page fields give the page a color, such as a warm cream
5606
+ or a deep teal. They start at pure white and pure black, the page Helix draws
5607
+ without one. The surfaces keep the contrast with the page they keep with white
5608
+ or black, the grays take its tint, and every text color is solved against it. A
5609
+ page that no text color can reach the contrast target on is left out of the
5610
+ preview, and a caption under the fields says so.
5606
5611
 
5607
- - **Met.** The pair reaches the target.
5608
- - **Unverifiable.** The background is translucent, so there is no known color
5609
- to measure against. The pair neither passes nor fails. This is the cost of a
5610
- translucent material, and the theme builder reports it.
5611
- - **Pinned.** You set the color yourself. The engine did not compute it, so its
5612
- contrast is not guaranteed.
5612
+ ## The audit
5613
5613
 
5614
- A column of \`unverifiable\` pairs means your theme makes a trade. The column lets
5615
- you see that you made it.
5614
+ The audit lists every color pair Helix computed. Each pair shows its ratio,
5615
+ measured against the background it is painted on, and either passes or fails
5616
+ its target. Its three tabs are:
5616
5617
 
5617
- ## What the theme builder exports
5618
+ - **Contrast.** The pairs that fail, or a line saying that every pair passes.
5619
+ - **Collisions.** Colors too close to each other to tell apart, such as the
5620
+ primary color and a status color.
5621
+ - **Unverifiable.** Pairs whose background is translucent, so there is no known
5622
+ color to measure against. This is the cost of a translucent material, and
5623
+ the theme builder reports it.
5618
5624
 
5619
- The theme builder gives you the token block as CSS, to paste into your own
5625
+ ## What the theme builder gives you
5626
+
5627
+ The generated stylesheet is the token block as CSS, to paste into your own
5620
5628
  stylesheet:
5621
5629
 
5622
5630
  \`\`\`css
5623
- :root {
5624
- --helix-color-primary: oklch(…);
5631
+ [data-theme="preview"] {
5632
+ --helix-color-background: #f7f2eb;
5625
5633
  …
5626
5634
  }
5627
5635
  \`\`\`
5628
5636
 
5629
- It also gives you the intent object, to keep in your repository and derive the
5630
- theme from again:
5637
+ The page's link holds every input you changed, so a link is the theme. To derive
5638
+ the theme in your own build, write the same inputs as an intent object:
5631
5639
 
5632
5640
  \`\`\`ts
5633
- export const theme = { brand: '#2563eb', chroma: { ceiling: 0.1 }, radius: 2 }
5641
+ export const theme = { background: { light: '#f7f2eb' }, brand: '#ff6200' }
5634
5642
  \`\`\`
5635
5643
 
5636
5644
  **Keep the intent object in your repository.** The tokens are the output of a
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@fusion.dev/helix-docs",
3
3
  "description": "Versioned documentation content and registry for Helix.",
4
- "version": "0.131.0",
4
+ "version": "0.132.0",
5
5
  "license": "MIT",
6
6
  "author": "Ross Sheppard <ross.sheppard@fusion.dev>",
7
7
  "repository": {
@@ -36,14 +36,14 @@
36
36
  },
37
37
  "bugs": "https://github.com/project-fusion/fusion/issues",
38
38
  "devDependencies": {
39
- "@fusion.dev/helix": "0.131.0",
40
- "@fusion.dev/helix-cem": "0.131.0",
41
- "@fusion.dev/helix-headless": "0.131.0",
42
- "@fusion.dev/helix-icons": "0.131.0",
43
- "@fusion.dev/helix-map": "0.131.0",
44
- "@fusion.dev/helix-styles": "0.131.0",
45
- "@fusion.dev/helix-testing": "0.131.0",
46
- "@fusion.dev/helix-theme": "0.131.0",
39
+ "@fusion.dev/helix": "0.132.0",
40
+ "@fusion.dev/helix-cem": "0.132.0",
41
+ "@fusion.dev/helix-headless": "0.132.0",
42
+ "@fusion.dev/helix-icons": "0.132.0",
43
+ "@fusion.dev/helix-map": "0.132.0",
44
+ "@fusion.dev/helix-styles": "0.132.0",
45
+ "@fusion.dev/helix-testing": "0.132.0",
46
+ "@fusion.dev/helix-theme": "0.132.0",
47
47
  "@fusion.dev/scripts": "0.0.0-dev",
48
48
  "lit": "^3.2.1",
49
49
  "playwright": "^1.62.1"