@fusion.dev/helix-docs 0.96.0 → 0.98.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.
|
@@ -37,26 +37,30 @@ times in the headless manifest, so it is discoverable rather than folklore.
|
|
|
37
37
|
## The render graph is the part that will catch you
|
|
38
38
|
|
|
39
39
|
**A component that renders another gives you two things to register, and only
|
|
40
|
-
one of them is obvious.**
|
|
41
|
-
another family's tag, across 89 call sites and seventeen distinct children.
|
|
40
|
+
one of them is obvious.**
|
|
42
41
|
|
|
43
42
|
Register `acme-combobox` without also registering `acme-listbox` and the panel
|
|
44
43
|
renders a tag nobody defined. That is not an error and not a warning: an
|
|
45
44
|
unregistered custom element is an inert, unstyled inline box, so what you see is
|
|
46
45
|
a combobox that appears not to open.
|
|
47
46
|
|
|
47
|
+
[//]: # (renders)
|
|
48
|
+
|
|
49
|
+
**27 of the 94 headless families interpolate another family's tag**, across 20 distinct children.
|
|
50
|
+
|
|
48
51
|
| Family | Renders |
|
|
49
52
|
|---|---|
|
|
50
|
-
| `bar-chart`, `donut-chart`, `heatmap`, `line-chart` | `tooltip` |
|
|
51
|
-
| `
|
|
53
|
+
| `area-chart`, `bar-chart`, `copy-button`, `donut-chart`, `heatmap`, `line-chart`, `scatter-chart` | `tooltip` |
|
|
54
|
+
| `chat` | `chat-message` |
|
|
55
|
+
| `code-block`, `object-inspector` | `copy-button` |
|
|
52
56
|
| `color-input` | `color-picker` |
|
|
53
57
|
| `color-picker` | `button`, `button-group`, `slider` |
|
|
54
58
|
| `combobox` | `listbox`, `tag` |
|
|
55
59
|
| `command` | `dialog`, `listbox` |
|
|
56
|
-
| `
|
|
57
|
-
| `data-table` | `pagination` |
|
|
60
|
+
| `data-table` | `checkbox`, `pagination` |
|
|
58
61
|
| `date-input` | `date-picker`, `tag` |
|
|
59
62
|
| `file-input` | `tag` |
|
|
63
|
+
| `filter-input` | `divider`, `menu`, `menu-item` |
|
|
60
64
|
| `notifications` | `format-date` |
|
|
61
65
|
| `pagination` | `option`, `select` |
|
|
62
66
|
| `select` | `listbox` |
|
|
@@ -65,14 +69,16 @@ a combobox that appears not to open.
|
|
|
65
69
|
| `time-picker` | `listbox`, `option` |
|
|
66
70
|
| `video`, `video-playlist` | `menu`, `menu-item` |
|
|
67
71
|
|
|
72
|
+
[//]: # (/renders)
|
|
73
|
+
|
|
68
74
|
The safe rule is to subclass and register a family together with everything it
|
|
69
75
|
renders, transitively: `command` reaches `dialog` and `listbox`, and `listbox`
|
|
70
76
|
reaches `option`.
|
|
71
77
|
|
|
72
|
-
**This table is
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
78
|
+
**This table is generated from the manifest**, which publishes the graph as
|
|
79
|
+
`helix.renders` on every element that interpolates a tag. It was kept by hand
|
|
80
|
+
until 22 September 2026 and was wrong by four families when it stopped being, so
|
|
81
|
+
read it as current rather than as maintained.
|
|
76
82
|
|
|
77
83
|
## What you have to supply yourself
|
|
78
84
|
|
|
@@ -92,8 +98,26 @@ acme-listbox:not(:defined) {
|
|
|
92
98
|
Visibility rather than `display`, so the page does not reflow when the
|
|
93
99
|
definitions arrive.
|
|
94
100
|
|
|
95
|
-
**Your own typings
|
|
96
|
-
|
|
101
|
+
**Your own typings, from the same generator we use.** `@fusion.dev/helix-cem`
|
|
102
|
+
reads your package and writes `jsx.d.ts`, `vue.d.ts` and `svelte.d.ts` for your
|
|
103
|
+
tags, with every member your subclass inherited from ours. Add a `cem.config.ts`
|
|
104
|
+
beside your `package.json`:
|
|
105
|
+
|
|
106
|
+
```ts
|
|
107
|
+
import type { HelixCemOptions } from '@fusion.dev/helix-cem'
|
|
108
|
+
|
|
109
|
+
export default {
|
|
110
|
+
frameworkTypes: true,
|
|
111
|
+
packageName: 'acme-system',
|
|
112
|
+
tier: 'styled',
|
|
113
|
+
} satisfies HelixCemOptions
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
and run `bun --bun helix-cem`. It finds what you extend through your
|
|
117
|
+
`dependencies`, so `acme-combobox` arrives with the hundred-odd members it
|
|
118
|
+
inherited rather than the two you wrote.
|
|
119
|
+
|
|
120
|
+
**The tag map is still yours to write**, one line per element, beside the class:
|
|
97
121
|
|
|
98
122
|
```ts
|
|
99
123
|
declare global {
|
|
@@ -103,7 +127,9 @@ declare global {
|
|
|
103
127
|
}
|
|
104
128
|
```
|
|
105
129
|
|
|
106
|
-
|
|
130
|
+
That is TypeScript's own convention for a custom element rather than a gap in
|
|
131
|
+
this: the interface merges from your source, and nothing generated can name a
|
|
132
|
+
class it is not in the same program as.
|
|
107
133
|
|
|
108
134
|
## What you get without asking
|
|
109
135
|
|
package/content/metrics.mdx
CHANGED
|
@@ -394,12 +394,12 @@ column is what was removed rather than part of what remains.
|
|
|
394
394
|
|
|
395
395
|
| Package | Unpacked | Files | Source maps stripped | Runtime dependencies |
|
|
396
396
|
|---|---|---|---|---|
|
|
397
|
-
| `@fusion.dev/helix-core` | 984,
|
|
398
|
-
| `@fusion.dev/helix-headless` | 11,
|
|
397
|
+
| `@fusion.dev/helix-core` | 984,477 | 153 | 222,482 | `@floating-ui/dom`, `@fusion.dev/helix-icons` |
|
|
398
|
+
| `@fusion.dev/helix-headless` | 11,357,433 | 464 | 836,734 | `@fusion.dev/helix-core`, `@fusion.dev/helix-icons`, `uqr` |
|
|
399
399
|
| `@fusion.dev/helix-icons` | 65,943 | 11 | 20,928 | none |
|
|
400
400
|
| `@fusion.dev/helix-styles` | 101,139 | 6 | 0 | none |
|
|
401
401
|
| `@fusion.dev/helix-theme` | 465,413 | 8 | 4,703 | none |
|
|
402
|
-
| `@fusion.dev/helix` | 12,
|
|
402
|
+
| `@fusion.dev/helix` | 12,491,633 | 796 | 333,986 | `@fusion.dev/helix-core`, `@fusion.dev/helix-headless`, `@fusion.dev/helix-styles` |
|
|
403
403
|
|
|
404
404
|
## Not measured yet
|
|
405
405
|
|
|
@@ -307,26 +307,30 @@ times in the headless manifest, so it is discoverable rather than folklore.
|
|
|
307
307
|
## The render graph is the part that will catch you
|
|
308
308
|
|
|
309
309
|
**A component that renders another gives you two things to register, and only
|
|
310
|
-
one of them is obvious.**
|
|
311
|
-
another family's tag, across 89 call sites and seventeen distinct children.
|
|
310
|
+
one of them is obvious.**
|
|
312
311
|
|
|
313
312
|
Register \`acme-combobox\` without also registering \`acme-listbox\` and the panel
|
|
314
313
|
renders a tag nobody defined. That is not an error and not a warning: an
|
|
315
314
|
unregistered custom element is an inert, unstyled inline box, so what you see is
|
|
316
315
|
a combobox that appears not to open.
|
|
317
316
|
|
|
317
|
+
[//]: # (renders)
|
|
318
|
+
|
|
319
|
+
**27 of the 94 headless families interpolate another family's tag**, across 20 distinct children.
|
|
320
|
+
|
|
318
321
|
| Family | Renders |
|
|
319
322
|
|---|---|
|
|
320
|
-
| \`bar-chart\`, \`donut-chart\`, \`heatmap\`, \`line-chart\` | \`tooltip\` |
|
|
321
|
-
| \`
|
|
323
|
+
| \`area-chart\`, \`bar-chart\`, \`copy-button\`, \`donut-chart\`, \`heatmap\`, \`line-chart\`, \`scatter-chart\` | \`tooltip\` |
|
|
324
|
+
| \`chat\` | \`chat-message\` |
|
|
325
|
+
| \`code-block\`, \`object-inspector\` | \`copy-button\` |
|
|
322
326
|
| \`color-input\` | \`color-picker\` |
|
|
323
327
|
| \`color-picker\` | \`button\`, \`button-group\`, \`slider\` |
|
|
324
328
|
| \`combobox\` | \`listbox\`, \`tag\` |
|
|
325
329
|
| \`command\` | \`dialog\`, \`listbox\` |
|
|
326
|
-
| \`
|
|
327
|
-
| \`data-table\` | \`pagination\` |
|
|
330
|
+
| \`data-table\` | \`checkbox\`, \`pagination\` |
|
|
328
331
|
| \`date-input\` | \`date-picker\`, \`tag\` |
|
|
329
332
|
| \`file-input\` | \`tag\` |
|
|
333
|
+
| \`filter-input\` | \`divider\`, \`menu\`, \`menu-item\` |
|
|
330
334
|
| \`notifications\` | \`format-date\` |
|
|
331
335
|
| \`pagination\` | \`option\`, \`select\` |
|
|
332
336
|
| \`select\` | \`listbox\` |
|
|
@@ -335,14 +339,16 @@ a combobox that appears not to open.
|
|
|
335
339
|
| \`time-picker\` | \`listbox\`, \`option\` |
|
|
336
340
|
| \`video\`, \`video-playlist\` | \`menu\`, \`menu-item\` |
|
|
337
341
|
|
|
342
|
+
[//]: # (/renders)
|
|
343
|
+
|
|
338
344
|
The safe rule is to subclass and register a family together with everything it
|
|
339
345
|
renders, transitively: \`command\` reaches \`dialog\` and \`listbox\`, and \`listbox\`
|
|
340
346
|
reaches \`option\`.
|
|
341
347
|
|
|
342
|
-
**This table is
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
348
|
+
**This table is generated from the manifest**, which publishes the graph as
|
|
349
|
+
\`helix.renders\` on every element that interpolates a tag. It was kept by hand
|
|
350
|
+
until 22 September 2026 and was wrong by four families when it stopped being, so
|
|
351
|
+
read it as current rather than as maintained.
|
|
346
352
|
|
|
347
353
|
## What you have to supply yourself
|
|
348
354
|
|
|
@@ -362,8 +368,26 @@ acme-listbox:not(:defined) {
|
|
|
362
368
|
Visibility rather than \`display\`, so the page does not reflow when the
|
|
363
369
|
definitions arrive.
|
|
364
370
|
|
|
365
|
-
**Your own typings
|
|
366
|
-
|
|
371
|
+
**Your own typings, from the same generator we use.** \`@fusion.dev/helix-cem\`
|
|
372
|
+
reads your package and writes \`jsx.d.ts\`, \`vue.d.ts\` and \`svelte.d.ts\` for your
|
|
373
|
+
tags, with every member your subclass inherited from ours. Add a \`cem.config.ts\`
|
|
374
|
+
beside your \`package.json\`:
|
|
375
|
+
|
|
376
|
+
\`\`\`ts
|
|
377
|
+
import type { HelixCemOptions } from '@fusion.dev/helix-cem'
|
|
378
|
+
|
|
379
|
+
export default {
|
|
380
|
+
frameworkTypes: true,
|
|
381
|
+
packageName: 'acme-system',
|
|
382
|
+
tier: 'styled',
|
|
383
|
+
} satisfies HelixCemOptions
|
|
384
|
+
\`\`\`
|
|
385
|
+
|
|
386
|
+
and run \`bun --bun helix-cem\`. It finds what you extend through your
|
|
387
|
+
\`dependencies\`, so \`acme-combobox\` arrives with the hundred-odd members it
|
|
388
|
+
inherited rather than the two you wrote.
|
|
389
|
+
|
|
390
|
+
**The tag map is still yours to write**, one line per element, beside the class:
|
|
367
391
|
|
|
368
392
|
\`\`\`ts
|
|
369
393
|
declare global {
|
|
@@ -373,7 +397,9 @@ declare global {
|
|
|
373
397
|
}
|
|
374
398
|
\`\`\`
|
|
375
399
|
|
|
376
|
-
|
|
400
|
+
That is TypeScript's own convention for a custom element rather than a gap in
|
|
401
|
+
this: the interface merges from your source, and nothing generated can name a
|
|
402
|
+
class it is not in the same program as.
|
|
377
403
|
|
|
378
404
|
## What you get without asking
|
|
379
405
|
|
|
@@ -2358,12 +2384,12 @@ column is what was removed rather than part of what remains.
|
|
|
2358
2384
|
|
|
2359
2385
|
| Package | Unpacked | Files | Source maps stripped | Runtime dependencies |
|
|
2360
2386
|
|---|---|---|---|---|
|
|
2361
|
-
| \`@fusion.dev/helix-core\` | 984,
|
|
2362
|
-
| \`@fusion.dev/helix-headless\` | 11,
|
|
2387
|
+
| \`@fusion.dev/helix-core\` | 984,477 | 153 | 222,482 | \`@floating-ui/dom\`, \`@fusion.dev/helix-icons\` |
|
|
2388
|
+
| \`@fusion.dev/helix-headless\` | 11,357,433 | 464 | 836,734 | \`@fusion.dev/helix-core\`, \`@fusion.dev/helix-icons\`, \`uqr\` |
|
|
2363
2389
|
| \`@fusion.dev/helix-icons\` | 65,943 | 11 | 20,928 | none |
|
|
2364
2390
|
| \`@fusion.dev/helix-styles\` | 101,139 | 6 | 0 | none |
|
|
2365
2391
|
| \`@fusion.dev/helix-theme\` | 465,413 | 8 | 4,703 | none |
|
|
2366
|
-
| \`@fusion.dev/helix\` | 12,
|
|
2392
|
+
| \`@fusion.dev/helix\` | 12,491,633 | 796 | 333,986 | \`@fusion.dev/helix-core\`, \`@fusion.dev/helix-headless\`, \`@fusion.dev/helix-styles\` |
|
|
2367
2393
|
|
|
2368
2394
|
## Not measured yet
|
|
2369
2395
|
|
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.
|
|
4
|
+
"version": "0.98.0",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Ross Sheppard <ross.sheppard@fusion.dev>",
|
|
7
7
|
"repository": {
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
},
|
|
37
37
|
"bugs": "https://github.com/project-fusion/fusion/issues",
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@fusion.dev/helix-cem": "0.
|
|
40
|
-
"@fusion.dev/helix-testing": "0.
|
|
39
|
+
"@fusion.dev/helix-cem": "0.98.0",
|
|
40
|
+
"@fusion.dev/helix-testing": "0.98.0",
|
|
41
41
|
"@fusion.dev/scripts": "0.0.0-dev",
|
|
42
42
|
"lit": "^3.2.1",
|
|
43
43
|
"playwright": "^1.62.1"
|