@fusion.dev/helix-docs 0.104.1 → 0.105.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/content/accessibility.mdx +92 -71
- package/content/angular.mdx +26 -24
- package/content/browser-support.mdx +61 -58
- package/content/building-on-the-headless-tier.mdx +100 -74
- package/content/charting.mdx +98 -79
- package/content/coding-agents.mdx +87 -69
- package/content/color-modes.mdx +40 -37
- package/content/color.mdx +67 -54
- package/content/composition.mdx +85 -83
- package/content/elevation-and-material.mdx +32 -29
- package/content/events.mdx +77 -65
- package/content/forms.mdx +69 -58
- package/content/iconography.mdx +75 -71
- package/content/installation.mdx +77 -68
- package/content/intent-reference.mdx +59 -54
- package/content/introduction.mdx +25 -23
- package/content/localization.mdx +122 -82
- package/content/maps.mdx +222 -0
- package/content/metrics.mdx +294 -297
- package/content/motion.mdx +44 -36
- package/content/other-frameworks.mdx +33 -31
- package/content/overlays.mdx +72 -54
- package/content/overriding-a-component.mdx +85 -74
- package/content/react.mdx +72 -64
- package/content/recipes.mdx +64 -47
- package/content/routing.mdx +100 -93
- package/content/sandbox.mdx +39 -39
- package/content/server-rendering.mdx +95 -84
- package/content/shape-and-borders.mdx +44 -37
- package/content/size-and-density.mdx +51 -46
- package/content/space-and-size.mdx +41 -34
- package/content/state-and-control.mdx +63 -51
- package/content/surfaces-and-separation.mdx +55 -53
- package/content/svelte.mdx +20 -19
- package/content/theme-builder.mdx +42 -31
- package/content/theming.mdx +58 -51
- package/content/tiers.mdx +69 -61
- package/content/tokens.mdx +72 -53
- package/content/typography.mdx +47 -47
- package/content/using-helix-with-an-agent.mdx +147 -115
- package/content/using-the-elements.mdx +55 -50
- package/content/versioning.mdx +42 -35
- package/content/visual-axes.mdx +168 -146
- package/content/vue.mdx +24 -24
- package/content/without-a-bundler.mdx +40 -23
- package/dist/pages.generated.js +49 -43
- package/dist/sources.generated.js +3337 -2680
- package/package.json +3 -3
package/content/installation.mdx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: What to install, the order the stylesheets
|
|
2
|
+
description: What to install, the order of the stylesheets, and how to check that the elements registered.
|
|
3
3
|
order: 3
|
|
4
4
|
section: Getting started
|
|
5
5
|
title: Installation
|
|
@@ -11,55 +11,59 @@ title: Installation
|
|
|
11
11
|
bun add @fusion.dev/helix
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
-
`@fusion.dev/helix-styles` is
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
`@fusion.dev/helix-styles` is a required dependency, on purpose. The components
|
|
15
|
+
use its semantic tokens and draw nothing without them. If the elements are
|
|
16
|
+
installed and the tokens are missing, your page shows unstyled boxes. There is
|
|
17
|
+
no fallback theme.
|
|
18
18
|
|
|
19
|
-
##
|
|
19
|
+
## Import the stylesheets
|
|
20
20
|
|
|
21
21
|
```ts
|
|
22
22
|
import '@fusion.dev/helix-styles/helix.css'
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
`primitives.css`, `tokens.css`, `base.css`, `elements.css`. The order is
|
|
27
|
-
load-bearing and the failure is silent, so it is stated once inside the package
|
|
28
|
-
rather than by every consumer.
|
|
25
|
+
This one import loads four files in the order they must load:
|
|
29
26
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
27
|
+
1. `primitives.css`
|
|
28
|
+
2. `tokens.css`
|
|
29
|
+
3. `base.css`
|
|
30
|
+
4. `elements.css`
|
|
34
31
|
|
|
35
|
-
|
|
32
|
+
The order matters, and a wrong order fails without an error. We set the order
|
|
33
|
+
once, inside the package, so you do not have to.
|
|
36
34
|
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
The import resolves `@fusion.dev/helix-styles` through the dependency in
|
|
36
|
+
`@fusion.dev/helix`, so installing `@fusion.dev/helix` is enough. Only a bundler
|
|
37
|
+
resolves a bare specifier like this one. If you serve CSS through a `<link>`,
|
|
38
|
+
link `helix.css` by its path, as [Without a bundler](./without-a-bundler)
|
|
39
|
+
shows.
|
|
39
40
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
### Import the files one at a time
|
|
42
|
+
|
|
43
|
+
Each file has its own export. If you bring your own reset or your own ramp,
|
|
44
|
+
import the two files you want and skip `helix.css`.
|
|
45
|
+
|
|
46
|
+
- **`primitives.css`** holds the raw ramp that the semantic layer is derived
|
|
47
|
+
from. The seven `--helix-seed-*` properties are read here. Your own code
|
|
48
|
+
should not name a primitive, and leaving the file out does not enforce that.
|
|
49
|
+
`tokens.css` refers to a primitive 297 times, so without `primitives.css`
|
|
50
|
+
every semantic token resolves to nothing. We measured a page without it:
|
|
45
51
|
`--helix-color-background` computes to `rgba(0, 0, 0, 0)`, and so does every
|
|
46
|
-
other color.
|
|
47
|
-
`--helix-seed-brand`
|
|
48
|
-
- **`tokens.css`** declares the semantic layer
|
|
49
|
-
categories, plus `color-scheme: light dark` on `:root`.
|
|
50
|
-
from it, and it reads primitives.
|
|
51
|
-
- **`base.css`**
|
|
52
|
-
`h6`, and the recipes for markup
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
the
|
|
60
|
-
|
|
61
|
-
Put them in a stylesheet you control rather than deep inside a component, so the
|
|
62
|
-
order is visible in one place and stays that way.
|
|
52
|
+
other color. [Theming](theming.mdx) also depends on this file, because without
|
|
53
|
+
it, setting `--helix-seed-brand` changes nothing.
|
|
54
|
+
- **`tokens.css`** declares the semantic layer: 185 custom properties in 15
|
|
55
|
+
categories, plus `color-scheme: light dark` on `:root`. The files below read
|
|
56
|
+
from it, and it reads from `primitives.css`.
|
|
57
|
+
- **`base.css`** holds the element reset, the type scale on bare `h1` through
|
|
58
|
+
`h6`, and the recipes for markup that Helix does not render. It reads tokens.
|
|
59
|
+
- **`elements.css`** styles elements before they upgrade. It is the file most
|
|
60
|
+
often left out, because a page works without it until the page is
|
|
61
|
+
server-rendered. An element that has not upgraded has no shadow root and no
|
|
62
|
+
styles of its own, so the markup flashes unstyled and then jumps into place.
|
|
63
|
+
`elements.css` makes that interval look like the finished page.
|
|
64
|
+
|
|
65
|
+
Import the files from a stylesheet you control, and keep them out of individual
|
|
66
|
+
components. The order then stays visible in one place.
|
|
63
67
|
|
|
64
68
|
## Register the elements
|
|
65
69
|
|
|
@@ -67,57 +71,62 @@ order is visible in one place and stays that way.
|
|
|
67
71
|
import '@fusion.dev/helix'
|
|
68
72
|
```
|
|
69
73
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
the
|
|
74
|
+
This import has a side effect: it calls `customElements.define` once for every
|
|
75
|
+
element. You can run it more than once. A second `define` for the same tag
|
|
76
|
+
throws an error and stops the rest of the module, so the helper behind the
|
|
77
|
+
import checks the registry first.
|
|
74
78
|
|
|
75
|
-
|
|
79
|
+
To register only some elements, import them from subpaths:
|
|
76
80
|
|
|
77
81
|
```ts
|
|
78
82
|
import '@fusion.dev/helix/button'
|
|
79
83
|
import '@fusion.dev/helix/dialog'
|
|
80
84
|
```
|
|
81
85
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
subpaths are about being explicit rather than about size.
|
|
86
|
+
Import from subpaths when you use a few components. The package has side
|
|
87
|
+
effects by design, so a bundler keeps everything you import. The whole-package
|
|
88
|
+
import registers every element, and a subpath registers only its family.
|
|
86
89
|
|
|
87
|
-
## Check
|
|
90
|
+
## Check the installation
|
|
88
91
|
|
|
89
|
-
Render one element and
|
|
92
|
+
Render one element and check whether it upgraded:
|
|
90
93
|
|
|
91
94
|
```ts
|
|
92
95
|
await customElements.whenDefined('helix-button')
|
|
93
96
|
console.log(document.querySelector('helix-button')?.shadowRoot !== null)
|
|
94
97
|
```
|
|
95
98
|
|
|
96
|
-
`true` means the definition
|
|
99
|
+
`true` means the definition loaded and the element built its shadow root.
|
|
97
100
|
`false`, or a promise that never settles, means the registration import did not
|
|
98
|
-
run
|
|
99
|
-
subpath
|
|
101
|
+
run. Usually the import is outside a `'use client'` boundary, or you imported
|
|
102
|
+
the subpath of a component you did not end up using.
|
|
103
|
+
|
|
104
|
+
If the element upgraded and the page still looks wrong, check the stylesheets
|
|
105
|
+
in the order above. The symptom tells you which layer is missing:
|
|
106
|
+
|
|
107
|
+
- No color at all means `tokens.css` is missing.
|
|
108
|
+
- Unstyled prose and bare headings mean `base.css` is missing.
|
|
109
|
+
- Components that look right once JavaScript runs, but flash unstyled before
|
|
110
|
+
it, mean `elements.css` is missing.
|
|
100
111
|
|
|
101
|
-
|
|
102
|
-
page still looks wrong, the stylesheets are the thing to check, in the order
|
|
103
|
-
above. The tell is which layer is missing: no color at all is `tokens.css`,
|
|
104
|
-
unstyled prose and bare headings is `base.css`, and components that look right
|
|
105
|
-
once JavaScript runs but flash unstyled before it is `elements.css`.
|
|
112
|
+
## Framework setup
|
|
106
113
|
|
|
107
|
-
|
|
114
|
+
The elements are custom elements, and every framework can render them.
|
|
115
|
+
Frameworks differ in three ways:
|
|
108
116
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
117
|
+
- How they pass a value that is not a string.
|
|
118
|
+
- How they bind an event.
|
|
119
|
+
- Whether they need configuration to accept an unknown tag.
|
|
112
120
|
|
|
113
121
|
| | |
|
|
114
122
|
|---|---|
|
|
115
|
-
| [React](./react) |
|
|
123
|
+
| [React](./react) | Ships a runtime bridge and `jsx.d.ts` |
|
|
116
124
|
| [Vue](./vue) | Ships `vue.d.ts`, needs `compilerOptions.isCustomElement` |
|
|
117
|
-
| [Svelte](./svelte) | Ships `svelte.d.ts`, and needs
|
|
125
|
+
| [Svelte](./svelte) | Ships `svelte.d.ts`, and needs no configuration |
|
|
118
126
|
| [Angular](./angular) | Needs `CUSTOM_ELEMENTS_SCHEMA` |
|
|
119
|
-
| [Other frameworks](./other-frameworks) | Solid, Qwik, Lit, and the three rules they all
|
|
120
|
-
| [Without a bundler](./without-a-bundler) |
|
|
127
|
+
| [Other frameworks](./other-frameworks) | Solid, Qwik, Lit, and the three rules they all follow |
|
|
128
|
+
| [Without a bundler](./without-a-bundler) | The stylesheets with no build step |
|
|
121
129
|
|
|
122
|
-
A framework
|
|
123
|
-
|
|
130
|
+
A framework has its own page when Helix ships typings for it, or when it does
|
|
131
|
+
not compile Helix tags without configuration. Other frameworks work with no
|
|
132
|
+
setup.
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Every input the theme engine takes, and what each one
|
|
2
|
+
description: Every input the theme engine takes, and what each one changes.
|
|
3
3
|
section: Theming
|
|
4
4
|
title: Intent reference
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Intent reference
|
|
8
8
|
|
|
9
|
-
[Deriving a theme](./theming)
|
|
10
|
-
`ThemeIntent` accepts
|
|
9
|
+
[Deriving a theme](./theming) explains how the engine works. This page lists
|
|
10
|
+
every field `ThemeIntent` accepts and what changes when you set it.
|
|
11
11
|
|
|
12
12
|
```ts
|
|
13
13
|
import { derive } from '@fusion.dev/helix-theme'
|
|
@@ -15,93 +15,98 @@ import { derive } from '@fusion.dev/helix-theme'
|
|
|
15
15
|
const theme = derive({ brand: '#2563eb' })
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
**`brand` is the only required input.**
|
|
19
|
-
|
|
20
|
-
a valid theme.
|
|
18
|
+
**`brand` is the only required input.** Every other field has a default,
|
|
19
|
+
computed from `brand` or from the Helix design language. A theme that sets only
|
|
20
|
+
`brand` is a valid theme.
|
|
21
21
|
|
|
22
22
|
## Color
|
|
23
23
|
|
|
24
|
-
| Field |
|
|
24
|
+
| Field | What it controls |
|
|
25
25
|
|---|---|
|
|
26
|
-
| `brand` |
|
|
27
|
-
| `accent` | The second emphasis.
|
|
26
|
+
| `brand` | Your main brand color. Required |
|
|
27
|
+
| `accent` | The second emphasis color. Defaults to the brand color. `{ from: 'brand', rotate: 180 }` gives the complementary color |
|
|
28
28
|
| `neutral` | The gray ramp, which can be tinted toward the brand |
|
|
29
|
-
| `status` | `info`, `success`, `warning`, `danger`. A color pins one
|
|
29
|
+
| `status` | `info`, `success`, `warning`, and `danger`. A color pins one. An object adjusts its hue while it keeps its meaning |
|
|
30
30
|
| `chroma` | How saturated the palette is, independent of hue |
|
|
31
|
-
| `scheme` | `'light'` or `'dark'`, for a theme that
|
|
32
|
-
| `tokens` | Literal overrides
|
|
31
|
+
| `scheme` | `'light'` or `'dark'`, for a theme that has only one mode |
|
|
32
|
+
| `tokens` | Literal overrides by token name, for values no other field sets |
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
`accent` can be defined relative to the brand. `status` colors cannot. If
|
|
35
|
+
`danger` rotated with the brand, your users would have to learn a new warning
|
|
36
|
+
color for each product.
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
supplies. Both apply to every derived color including the brand itself, because
|
|
42
|
-
a monotone theme is one where the brand is gray too. Never applied to a value
|
|
43
|
-
you pinned: a pinned color is a fact.
|
|
38
|
+
`chroma` sets how saturated the theme feels. Monotone, muted, restrained, and
|
|
39
|
+
vivid all describe chroma, and none of them describes a hue. `chroma` has two
|
|
40
|
+
settings:
|
|
44
41
|
|
|
45
|
-
|
|
42
|
+
- `ceiling` caps chroma. 0 is monotone, and about 0.10 is muted.
|
|
43
|
+
- `scale` multiplies the chroma the brand color supplies.
|
|
46
44
|
|
|
47
|
-
|
|
45
|
+
Both apply to every derived color, including the brand color, because in a
|
|
46
|
+
monotone theme the brand is gray too. Neither applies to a color you pinned. A
|
|
47
|
+
pinned color is used exactly as you set it.
|
|
48
|
+
|
|
49
|
+
## Contrast
|
|
50
|
+
|
|
51
|
+
| Field | What it controls |
|
|
48
52
|
|---|---|
|
|
49
|
-
| `contrastTarget` | Target contrast for body text. 4.5 is WCAG AA, 7 is AAA |
|
|
50
|
-
| `pairings` | Extra foreground and background pairs to solve
|
|
53
|
+
| `contrastTarget` | Target contrast for body text. 4.5 is WCAG AA, and 7 is AAA |
|
|
54
|
+
| `pairings` | Extra foreground and background pairs to solve, in addition to the pairs in the engine's surface model |
|
|
51
55
|
|
|
52
|
-
4.5
|
|
53
|
-
so
|
|
56
|
+
The default is 4.5, the WCAG 2.1 AA figure. The European Accessibility Act
|
|
57
|
+
refers to WCAG 2.1 AA, so 4.5 is the figure with legal weight.
|
|
54
58
|
|
|
55
59
|
## Shape and space
|
|
56
60
|
|
|
57
|
-
| Field |
|
|
61
|
+
| Field | What it controls |
|
|
58
62
|
|---|---|
|
|
59
63
|
| `radius` | Corner rounding across the system |
|
|
60
|
-
| `density` | Scales spacing and control heights. 1 is default, 0.875 is compact |
|
|
61
|
-
| `separation` | Whether a surface is
|
|
64
|
+
| `density` | Scales spacing and control heights. 1 is the default, and 0.875 is compact |
|
|
65
|
+
| `separation` | Whether a surface is set apart by an edge or by a lift |
|
|
62
66
|
|
|
63
|
-
`separation`
|
|
67
|
+
`separation` chooses between the two policies described in [Surfaces and
|
|
64
68
|
separation](./surfaces-and-separation).
|
|
65
69
|
|
|
66
70
|
## Type and motion
|
|
67
71
|
|
|
68
|
-
| Field |
|
|
72
|
+
| Field | What it controls |
|
|
69
73
|
|---|---|
|
|
70
|
-
| `font` | The families
|
|
74
|
+
| `font` | The font families and the type scale |
|
|
71
75
|
| `motion` | `character` and `scale` |
|
|
72
76
|
|
|
73
|
-
|
|
74
|
-
duration multiplier
|
|
75
|
-
|
|
76
|
-
|
|
77
|
+
`motion.character` sets the easing curve that every component uses, along with
|
|
78
|
+
a duration multiplier. The curve and the duration are set together because they
|
|
79
|
+
depend on each other. A spring over 120ms looks like a twitch, and a soft curve
|
|
80
|
+
over 120ms looks like a fade. `scale` multiplies the durations again, so you can
|
|
81
|
+
keep a character and change its speed.
|
|
77
82
|
|
|
78
|
-
`instant`
|
|
79
|
-
|
|
80
|
-
|
|
83
|
+
The `instant` character is 0, which means "do not animate". `scale` does not
|
|
84
|
+
change it. It outputs none of the three easing curves, because a transition of
|
|
85
|
+
zero length has no curve to follow.
|
|
81
86
|
|
|
82
|
-
`precise` is the
|
|
83
|
-
settle or overshoot
|
|
84
|
-
|
|
85
|
-
|
|
87
|
+
`precise` is the only character that does not imitate physical motion. The
|
|
88
|
+
other three accelerate, settle, or overshoot. `precise` is linear, so movement
|
|
89
|
+
looks driven by a mechanism. It is also the only curve that is easy to see over
|
|
90
|
+
a short distance. Constant speed shows in the timing, and an overshoot needs
|
|
91
|
+
distance to show.
|
|
86
92
|
|
|
87
93
|
## Material
|
|
88
94
|
|
|
89
|
-
| Field |
|
|
95
|
+
| Field | What it controls |
|
|
90
96
|
|---|---|
|
|
91
97
|
| `material` | `blur` in pixels and `opacity` from 0 to 1 |
|
|
92
98
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
so a pair over it
|
|
96
|
-
|
|
97
|
-
should be able to see it.
|
|
99
|
+
**`material` is the one field that can break the contrast guarantee.** The
|
|
100
|
+
engine measures contrast against a known ground. A translucent surface has no
|
|
101
|
+
known ground, so a pair over it is reported as `unverifiable`. The report shows
|
|
102
|
+
you the trade-off that a theme with heavy material makes.
|
|
98
103
|
|
|
99
104
|
## Output
|
|
100
105
|
|
|
101
|
-
| Field |
|
|
106
|
+
| Field | What it controls |
|
|
102
107
|
|---|---|
|
|
103
108
|
| `namespace` | The token prefix. Defaults to `helix` |
|
|
104
109
|
|
|
105
|
-
`namespace`
|
|
106
|
-
|
|
107
|
-
|
|
110
|
+
Use `namespace` when your product ships its own token layer built on the
|
|
111
|
+
engine. The rest of the library still reads `--helix-*`, so a new namespace
|
|
112
|
+
changes only your own tokens.
|
package/content/introduction.mdx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: What Helix is, and the
|
|
2
|
+
description: What Helix is, and the packages it includes.
|
|
3
3
|
order: 1
|
|
4
4
|
section: Getting started
|
|
5
5
|
title: Introduction
|
|
@@ -7,22 +7,25 @@ title: Introduction
|
|
|
7
7
|
|
|
8
8
|
# Helix
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
tier, and the framework typings generated from both. It works in any framework,
|
|
12
|
-
or none, because the components are custom elements.
|
|
10
|
+
Helix is a design system of web components. It includes:
|
|
13
11
|
|
|
14
|
-
|
|
12
|
+
- color, space, and type tokens
|
|
13
|
+
- a headless tier with the structure and behavior of each component
|
|
14
|
+
- a styled tier that adds the visual design
|
|
15
|
+
- typings for each framework, generated from both tiers
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
background pair meets its contrast target by construction. See
|
|
19
|
-
[Theming](./theming).
|
|
17
|
+
The components are custom elements, so you can use them in any framework or
|
|
18
|
+
without one.
|
|
20
19
|
|
|
21
|
-
**
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
**Helix computes your theme.** You enter a few inputs, such as your brand color,
|
|
21
|
+
and Helix computes every token from them. Every text and background pair meets
|
|
22
|
+
its contrast target. See [Theming](./theming).
|
|
23
|
+
|
|
24
|
+
**AI agents can read it.** A custom elements manifest describes every component,
|
|
25
|
+
with typed options, documented parts, and generated React prop names, so an
|
|
26
|
+
agent can write correct Helix code from the types alone. The build checks
|
|
27
|
+
conventions such as inline literal unions and documented CSS parts for that
|
|
28
|
+
reason.
|
|
26
29
|
|
|
27
30
|
## Install
|
|
28
31
|
|
|
@@ -30,7 +33,7 @@ analysis time rather than left to review.
|
|
|
30
33
|
bun add @fusion.dev/helix @fusion.dev/helix-styles
|
|
31
34
|
```
|
|
32
35
|
|
|
33
|
-
|
|
36
|
+
Add two imports at your app root, in this order. Then you can use the elements
|
|
34
37
|
anywhere:
|
|
35
38
|
|
|
36
39
|
```ts
|
|
@@ -42,13 +45,13 @@ import '@fusion.dev/helix'
|
|
|
42
45
|
<helix-accordion separation="outlined">
|
|
43
46
|
<helix-accordion-item default-open>
|
|
44
47
|
<span slot="summary">What is Helix?</span>
|
|
45
|
-
<p>A design system
|
|
48
|
+
<p>A design system of web components, themed from your brand color.</p>
|
|
46
49
|
</helix-accordion-item>
|
|
47
50
|
</helix-accordion>
|
|
48
51
|
```
|
|
49
52
|
|
|
50
|
-
[Installation](./installation)
|
|
51
|
-
|
|
53
|
+
[Installation](./installation) explains the import order and links to a page for
|
|
54
|
+
each framework.
|
|
52
55
|
|
|
53
56
|
## Packages
|
|
54
57
|
|
|
@@ -61,9 +64,8 @@ page for each framework.
|
|
|
61
64
|
| `@fusion.dev/helix-icons` | You are drawing an icon outside a component |
|
|
62
65
|
| `@fusion.dev/helix-core` | You are building a new Helix component |
|
|
63
66
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
custom events. [React](./react) has both.
|
|
67
|
+
React uses the elements directly. Helix ships a `jsx.d.ts` that types every
|
|
68
|
+
tag. `@fusion.dev/helix-core` has a runtime bridge that fixes how React hydrates
|
|
69
|
+
custom events. [React](./react) covers both.
|
|
68
70
|
|
|
69
|
-
See [Tiers](./tiers) for how the packages relate and which one to
|
|
71
|
+
See [Tiers](./tiers) for how the packages relate and which one to use.
|