@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.** Twenty-two of the 88 headless families interpolate
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
- | `code-block` | `copy-button` |
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
- | `copy-button` | `tooltip` |
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 maintained by hand today and should not be.** The graph is
73
- already computed inside this repository, by the check that stops us shipping the
74
- same fault, and it is thrown away afterward rather than written to the manifest.
75
- Until it is published, treat the table above as the version that can go stale.
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.** The generated `jsx.d.ts`, `vue.d.ts` and `svelte.d.ts`
96
- carry our tag names. For yours, merge each element into the tag map:
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
- Per element, by hand. There is no generated version of this for consumer names.
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
 
@@ -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,335 | 153 | 222,482 | `@floating-ui/dom`, `@fusion.dev/helix-icons` |
398
- | `@fusion.dev/helix-headless` | 11,353,412 | 464 | 836,734 | `@fusion.dev/helix-core`, `@fusion.dev/helix-icons`, `uqr` |
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,489,523 | 796 | 333,986 | `@fusion.dev/helix-core`, `@fusion.dev/helix-headless`, `@fusion.dev/helix-styles` |
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.** Twenty-two of the 88 headless families interpolate
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
- | \`code-block\` | \`copy-button\` |
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
- | \`copy-button\` | \`tooltip\` |
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 maintained by hand today and should not be.** The graph is
343
- already computed inside this repository, by the check that stops us shipping the
344
- same fault, and it is thrown away afterward rather than written to the manifest.
345
- Until it is published, treat the table above as the version that can go stale.
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.** The generated \`jsx.d.ts\`, \`vue.d.ts\` and \`svelte.d.ts\`
366
- carry our tag names. For yours, merge each element into the tag map:
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
- Per element, by hand. There is no generated version of this for consumer names.
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,335 | 153 | 222,482 | \`@floating-ui/dom\`, \`@fusion.dev/helix-icons\` |
2362
- | \`@fusion.dev/helix-headless\` | 11,353,412 | 464 | 836,734 | \`@fusion.dev/helix-core\`, \`@fusion.dev/helix-icons\`, \`uqr\` |
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,489,523 | 796 | 333,986 | \`@fusion.dev/helix-core\`, \`@fusion.dev/helix-headless\`, \`@fusion.dev/helix-styles\` |
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.96.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.96.0",
40
- "@fusion.dev/helix-testing": "0.96.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"